agentify.ia — Agentes de IA para DesenvolvedoresConteúdo educativo sobre agentes de codificação, ferramentas e comparativos para desenvolvedores brasileiros.https://agentify.ia.br/Kiro Crew vs Buzz: Agente Autônomo ou Workspace com Agentes?https://agentify.ia.br/blog/kiro-crew-vs-buzz/https://agentify.ia.br/blog/kiro-crew-vs-buzz/Kiro Crew vs Buzz — agente autônomo standalone vs workspace Nostr onde agentes são membros da equipe com keypairs próprios.Tue, 04 Aug 2026 00:00:00 GMT<h1>Kiro Crew vs Buzz: Agente Autônomo ou Workspace com Agentes?</h1> <p><img src="./images/cover-og.jpg" alt="Ilustração comparativa mostrando Kiro Crew como agente pessoal conectado a um humano à esquerda versus Buzz como workspace colaborativo onde humanos e agentes trabalham juntos como membros da equipe à direita" /></p> <p><img src="./images/timeline-de-lancamento.jpg" alt="Timeline de lançamento mostrando Kiro Crew começando interno na Amazon e virando open source versus Buzz lançado em julho 2026 pela Block" /></p> <p>21 de julho de 2026. Jack Dorsey lança o Buzz — um workspace open source onde agentes de IA não são bots integrados, mas membros da equipe com identidade criptográfica própria. Eles abrem repos, enviam patches, revisam código, criam canais, entram em voice huddles. Mesmos privilégios que humanos, mesmo audit trail, keypair diferente.</p> <p>Enquanto isso, o Kiro Crew segue uma filosofia diferente: um agente autônomo que roda no seu servidor, conecta nos seus chats, e trabalha pra você. Você manda mensagem, ele executa. Simples assim.</p> <p>Mesma promessa (humanos e agentes trabalhando juntos), arquiteturas completamente diferentes.</p> <h2>O que São</h2> <p><img src="./images/arquitetura-comparativa.jpg" alt="Comparativo de arquitetura — Kiro Crew com gateway central conectando chat, CLI e memória versus Buzz com relay Nostr onde humanos e agentes são membros iguais com keypairs próprios" /></p> <p><strong>Buzz</strong> não é um agente — é um <strong>workspace</strong>. Pense num Slack + GitHub + CI numa plataforma única, construída sobre Nostr (protocolo descentralizado de mensagens). Todo evento (mensagem, reaction, commit, aprovação de workflow) é assinado criptograficamente. Agentes têm keypairs próprios, independentes da plataforma. Você não "integra" um agente — você <em>adiciona um membro</em> que acontece de ser uma IA.</p> <p><strong>Kiro Crew</strong> é um <strong>agente autônomo persistente</strong>. Roda no seu servidor, mantém memória entre sessões, conecta em Slack/Telegram/Discord como um bot tradicional. A diferença dos bots comuns: ele aprende com correções (lessons), cria skills reutilizáveis, executa jobs agendados, e mantém um knowledge graph do seu trabalho.</p> <p>A distinção fundamental: Buzz é onde o trabalho acontece. Kiro Crew é quem faz o trabalho.</p> <h2>Tabela Comparativa</h2> <p><img src="./images/modelo-de-identidade.jpg" alt="Diagrama comparando modelos de identidade — Kiro Crew com bot usando token de plataforma versus Buzz com agente tendo keypair criptográfico próprio e audit trail assinado" /></p> <table> <thead> <tr> <th>Critério</th> <th>Buzz</th> <th>Kiro Crew</th> </tr> </thead> <tbody> <tr> <td><strong>Tipo</strong></td> <td>Workspace colaborativo (Slack-like)</td> <td>Agente autônomo persistente</td> </tr> <tr> <td><strong>Desenvolvedor</strong></td> <td>Block (Jack Dorsey)</td> <td>AWS (ex-MeshClaw)</td> </tr> <tr> <td><strong>Licença</strong></td> <td>Apache 2.0</td> <td>MIT</td> </tr> <tr> <td><strong>Protocolo</strong></td> <td>Nostr (eventos assinados)</td> <td>HTTP/WebSocket (bot tradicional)</td> </tr> <tr> <td><strong>Identidade de agente</strong></td> <td>Keypair criptográfico próprio</td> <td>Bot com token de plataforma</td> </tr> <tr> <td><strong>Agentes suportados</strong></td> <td>Claude Code, Codex, Goose, qualquer ACP</td> <td>Kiro CLI (obrigatório)</td> </tr> <tr> <td><strong>Git integrado</strong></td> <td>Sim (NIP-34: patches, repos, status)</td> <td>Não (usa git local)</td> </tr> <tr> <td><strong>CI/Workflows</strong></td> <td>YAML workflows nativos</td> <td>Via Kiro CLI ou MCP</td> </tr> <tr> <td><strong>Chat</strong></td> <td>Canais, threads, DMs, voice huddles</td> <td>Integração com plataformas externas</td> </tr> <tr> <td><strong>Memória</strong></td> <td>Histórico de eventos (6 meses pesquisável)</td> <td>Knowledge graph + lessons + skills</td> </tr> <tr> <td><strong>Self-hosted</strong></td> <td>Sim (relay + Postgres + Redis)</td> <td>Sim (gateway Python + dashboard)</td> </tr> <tr> <td><strong>Audit trail</strong></td> <td>Assinatura criptográfica em cada evento</td> <td>Audit log assinado</td> </tr> <tr> <td><strong>Melhor para</strong></td> <td>Times que querem agentes como membros</td> <td>Devs que querem agente pessoal</td> </tr> </tbody> </table> <h2>Análise por Eixo</h2> <h3>1. Código (Qualidade)</h3> <p><strong>Buzz</strong> não gera código — ele hospeda agentes que geram código. Claude Code, Codex, Goose entram no workspace via ACP (Agent Communication Protocol) e fazem o trabalho. A qualidade depende do agente que você traz. O diferencial: quando o agente faz um commit, ele é assinado com a keypair do agente, não sua. Você sabe exatamente quem escreveu cada linha.</p> <p><strong>Kiro Crew</strong> roda sobre o Kiro CLI, que usa Claude via Bedrock. O workflow specs-driven (requisitos → design → tasks) adiciona uma camada de validação. Lessons acumuladas mudam o comportamento do agente ao longo do tempo. O código melhora conforme você corrige o agente.</p> <p><strong>Veredicto:</strong> Depende. Buzz é agnóstico — a qualidade é do agente que você traz. Kiro Crew tem qualidade consistente via Kiro CLI + aprendizado acumulado.</p> <h3>2. Contexto (Compreensão)</h3> <p><strong>Buzz</strong> tem uma abordagem única: tudo é evento pesquisável. Mensagens, commits, reviews, aprovações — 6 meses de histórico em busca unificada. Quando você pergunta "já vimos esse erro antes?", um agente no workspace pode buscar threads, root causes, fixes. O contexto é <em>coletivo</em> — está no workspace, não na cabeça de um agente específico.</p> <p><strong>Kiro Crew</strong> tem contexto <em>individual</em>. Knowledge graph com embeddings, lessons persistentes, skills do agente. O agente lembra do que você ensinou pra ele. Mas esse conhecimento é do agente, não do time.</p> <p><strong>Veredicto:</strong> Buzz ganha em contexto de time. Kiro Crew ganha em contexto individual. Depende se você quer memória compartilhada ou pessoal.</p> <h3>3. Autonomia</h3> <p><strong>Buzz</strong> não é autônomo — é um ambiente onde agentes autônomos operam. O agente tem liberdade dentro do workspace: criar canais, enviar patches, aprovar workflows. Mas o workspace é o limite. Buzz não controla seu browser ou email pessoal — é focado em trabalho colaborativo.</p> <p><strong>Kiro Crew</strong> é autônomo no sentido clássico. Roda num servidor, executa comandos, interage com seu sistema. Conecta em múltiplas plataformas de chat. Faz coisas <em>fora</em> do contexto de um workspace específico.</p> <p><strong>Veredicto:</strong> Autonomias diferentes. Buzz: autonomia de membro de time. Kiro Crew: autonomia de agente pessoal.</p> <h3>4. Velocidade</h3> <p><strong>Buzz</strong> adiciona overhead de workspace — relay Nostr, assinatura de eventos, propagação. Mas o trade-off é rastreabilidade. Cada ação é um evento assinado, auditável depois. Para trabalho síncrono onde você quer respostas imediatas, é mais lento que um bot direto.</p> <p><strong>Kiro Crew</strong> é bot tradicional: você manda mensagem, ele processa, responde. O overhead é do gateway Python e do Kiro CLI. Mais direto, menos cerimônia.</p> <p><strong>Veredicto:</strong> Kiro Crew ganha em interação rápida. Buzz compensa com rastreabilidade.</p> <h3>5. Custo-benefício</h3> <p><strong>Buzz</strong> é gratuito (Apache 2.0). Self-hosted com Postgres, Redis, MinIO. Você paga infra e os agentes que traz (Claude Code, Codex são pagos). Existe versão hosted da Block, mas o foco é self-host.</p> <p><strong>Kiro Crew</strong> também é gratuito (MIT), mas depende do Kiro CLI (pago após 50 créditos/mês). O custo real é a assinatura Kiro.</p> <p><strong>Veredicto:</strong> Buzz ganha se você já paga agentes separadamente. Kiro Crew empata se você já usa Kiro.</p> <h3>6. Especialização (Skills)</h3> <p><strong>Buzz</strong> tem "persona packs" — configurações de personalidade e comportamento para agentes. Mas skills como sistema formal não existe. A especialização vem dos agentes que você traz (Claude Code tem skills, Codex tem suas capacidades).</p> <p><strong>Kiro Crew</strong> tem skills como cidadão de primeira classe. O agente cria skills de padrões repetidos. Você edita como Markdown. Skills são portáveis entre projetos.</p> <p><strong>Veredicto:</strong> Kiro Crew ganha em skills formais. Buzz delega pra especialização dos agentes externos.</p> <h3>7. Multi-agente</h3> <p><strong>Buzz</strong> foi construído pra multi-agente. Agentes são membros do workspace. Você pode ter Claude Code fazendo backend, outro agente em frontend, um terceiro revisando PRs. Todos no mesmo workspace, com identidades separadas, audit trail unificado. Um agente pode orquestrar outros.</p> <p><strong>Kiro Crew</strong> suporta múltiplas conversas e subagentes, mas é fundamentalmente um agente (ou família de agentes) trabalhando pra você. Não é um ambiente onde múltiplos agentes de diferentes origens colaboram naturalmente.</p> <p><strong>Veredicto:</strong> Buzz ganha de lavada. Multi-agente é a razão de existir.</p> <h3>8. Ecossistema</h3> <p><strong>Buzz</strong> é novo (julho 2026), mas tem backing da Block e integração com agentes populares via ACP. Suporta Claude Code, Codex, Goose out of the box. Git nativo (NIP-34), workflows YAML, canais de chat. É um ecossistema self-contained.</p> <p><strong>Kiro Crew</strong> herda o ecossistema Kiro — MCP servers, steering files, integração com Kiro IDE. Se você já usa Kiro, a transição é natural. Mas é dependente do Kiro CLI.</p> <p><strong>Veredicto:</strong> Buzz ganha em independência (funciona com múltiplos agentes). Kiro Crew ganha em integração profunda com ecossistema Kiro/AWS.</p> <h2>Filosofias Opostas</h2> <p><img src="./images/workspace-vs-agent.jpg" alt="Ilustração conceitual mostrando Kiro Crew como agente que vai até as ferramentas versus Buzz como workspace onde tudo (chat, git, workflows, humanos, agentes) coexiste" /></p> <p>A diferença fundamental:</p> <p><strong>Buzz</strong> diz: "Agentes são membros da equipe. Dê a eles o mesmo ambiente que humanos têm. Mesmos canais, mesmos repos, mesmas ferramentas. Identidade criptográfica pra você saber quem fez o quê."</p> <p><strong>Kiro Crew</strong> diz: "Agentes são assistentes pessoais que aprendem com você. Rode no seu servidor, conecte nos seus chats, trabalhe enquanto você dorme. O conhecimento é seu, não do time."</p> <p>Se você quer substituir Slack + GitHub por um workspace unificado onde agentes são pares: <strong>Buzz</strong>.</p> <p>Se você quer um agente pessoal que conecta nas ferramentas que você já usa: <strong>Kiro Crew</strong>.</p> <h2>Quando Escolher Cada Um</h2> <h3>Escolha Buzz se:</h3> <ul> <li>Você quer agentes como membros da equipe, não bots</li> <li>Precisa de audit trail criptográfico (compliance, segurança)</li> <li>Quer unificar chat, git e CI num lugar só</li> <li>Trabalha com múltiplos agentes de diferentes providers</li> <li>Valoriza identidade descentralizada (Nostr)</li> <li>Está construindo um time híbrido humano-agente</li> </ul> <h3>Escolha Kiro Crew se:</h3> <ul> <li>Você quer um agente pessoal que aprende com você</li> <li>Prefere conectar nas ferramentas existentes (Slack, Telegram)</li> <li>Valoriza memória individual e lessons persistentes</li> <li>Já usa Kiro CLI ou ecossistema AWS</li> <li>Quer simplicidade: mandar mensagem, receber resultado</li> <li>Trabalha solo ou em time pequeno sem precisar de workspace dedicado</li> </ul> <h3>Use Ambos se:</h3> <ul> <li>Buzz como workspace do time para projetos colaborativos</li> <li>Kiro Crew como agente pessoal para tarefas individuais</li> </ul> <p>São complementares, não concorrentes.</p> <h2>Veredicto Final</h2> <p><strong>Buzz</strong> é uma aposta no futuro do trabalho. A ideia de que agentes não são ferramentas, mas colegas de trabalho com identidade própria, é poderosa. Se essa visão se concretiza, Buzz está bem posicionado. Mas é novo (julho 2026), ainda em versão 0.4.x, com features planejadas mas não entregues.</p> <p><strong>Kiro Crew</strong> é pragmático. Um agente que roda no seu servidor, aprende com suas correções, e faz trabalho enquanto você não está. Não reinventa o workspace — conecta no que você já usa. Menos visionário, mais imediatamente útil.</p> <p>Se você está construindo o futuro do trabalho humano-agente: <strong>Buzz</strong>. Se você quer um agente que funciona hoje: <strong>Kiro Crew</strong>.</p> <hr /> <p><em>Dados verificados em agosto de 2026. Buzz v0.4.22, Kiro Crew latest.</em></p> Kiro Crew vs Hermes Agent: AWS Enterprise ou Self-Improving Open Source?https://agentify.ia.br/blog/kiro-crew-vs-hermes/https://agentify.ia.br/blog/kiro-crew-vs-hermes/Kiro Crew vs Hermes Agent — lessons passivas da AWS vs learning loop fechado da Nous Research. Qual agente aprende melhor?Tue, 04 Aug 2026 00:00:00 GMT<h1>Kiro Crew vs Hermes Agent: AWS Enterprise ou Self-Improving Open Source?</h1> <p><img src="./images/cover-og.jpg" alt="Ilustração comparativa mostrando Kiro Crew com aprendizado passivo (lessons sendo anotadas) à esquerda versus Hermes Agent com learning loop ativo e self-improvement à direita" /> Fevereiro de 2026. A Nous Research — o lab por trás dos modelos Hermes, Nomos e Psyche — lança o Hermes Agent. Em sete semanas, alcança 151.000 stars no GitHub. Em maio, ultrapassa 152.000. O agente mais rápido da história a atingir esse marco.</p> <p>O diferencial: um <strong>learning loop fechado</strong>. O agente cria skills a partir da experiência, melhora essas skills durante o uso, persiste conhecimento entre sessões, e constrói um modelo cada vez mais profundo de quem você é. Quanto mais tempo roda, mais capaz fica.</p> <p>O Kiro Crew, da AWS, tem proposta similar — memória persistente, lessons que mudam comportamento, skills reutilizáveis. Mas vem de dentro da Amazon, roda sobre o Kiro CLI (pago), e foca em governança enterprise.</p> <p>Duas abordagens para o mesmo problema: agentes que melhoram com o tempo.</p> <h2>O que São</h2> <p><strong>Hermes Agent</strong> é um framework open source da Nous Research para agentes autônomos self-improving. Não é copilot de IDE nem wrapper de chatbot. É um agente que roda no seu servidor (VPS de $5, cluster GPU, ou serverless), conecta em 20+ plataformas de chat, e fica mais capaz conforme usa. O learning loop é core: o agente cria skills, melhora essas skills, persiste memória, e modela seu comportamento ao longo do tempo.</p> <p><strong>Kiro Crew</strong> é uma extensão do ecossistema Kiro da AWS. Começou como projeto interno (MeshClaw), foi adotado por 39.000 devs dentro da Amazon, e virou open source. Roda sobre o Kiro CLI (obrigatório), traz memória persistente via knowledge graph, lessons (correções viram regras), skills, cron jobs, webhooks, e dashboard web.</p> <p>Ambos são agentes autônomos persistentes com aprendizado. A diferença está em <em>como</em> aprendem e <em>onde</em> rodam.</p> <h2>Tabela Comparativa</h2> <table> <thead> <tr> <th>Critério</th> <th>Hermes Agent</th> <th>Kiro Crew</th> </tr> </thead> <tbody> <tr> <td><strong>Tipo</strong></td> <td>Framework de agente self-improving</td> <td>Extensão do Kiro CLI</td> </tr> <tr> <td><strong>Desenvolvedor</strong></td> <td>Nous Research</td> <td>AWS (ex-MeshClaw)</td> </tr> <tr> <td><strong>GitHub Stars</strong></td> <td>152.000+</td> <td>~5.000 (recém-lançado)</td> </tr> <tr> <td><strong>Licença</strong></td> <td>MIT</td> <td>MIT</td> </tr> <tr> <td><strong>Preço</strong></td> <td>Gratuito (você paga LLM ou usa local)</td> <td>Gratuito (você paga Kiro CLI)</td> </tr> <tr> <td><strong>LLM Backend</strong></td> <td>Qualquer (Nous Portal, OpenRouter, OpenAI, local)</td> <td>Kiro CLI (Claude via Bedrock)</td> </tr> <tr> <td><strong>Learning Loop</strong></td> <td>Closed loop: cria → melhora → persiste</td> <td>Lessons + skills (sem auto-improvement)</td> </tr> <tr> <td><strong>Memória</strong></td> <td>FTS5 + LLM summarization + Honcho user modeling</td> <td>Knowledge graph + embeddings</td> </tr> <tr> <td><strong>Skills</strong></td> <td>Agentskills.io compatível, auto-criação</td> <td>Markdown files, criação manual/assistida</td> </tr> <tr> <td><strong>Backends de execução</strong></td> <td>Local, Docker, SSH, Daytona, Singularity, Modal</td> <td>Local, Docker</td> </tr> <tr> <td><strong>Chat Platforms</strong></td> <td>20+ (Telegram, Discord, Slack, WhatsApp, Signal, Matrix...)</td> <td>6 (Slack, Telegram, Discord, Teams, WeChat, Webex)</td> </tr> <tr> <td><strong>Voice</strong></td> <td>Sim (CLI, Telegram, Discord, Discord VC)</td> <td>Não</td> </tr> <tr> <td><strong>Tools built-in</strong></td> <td>60+</td> <td>Via Kiro CLI + MCP</td> </tr> <tr> <td><strong>Dashboard</strong></td> <td>Não (CLI-first)</td> <td>Sim (React web)</td> </tr> <tr> <td><strong>Governança/Audit</strong></td> <td>Básico</td> <td>Sandbox + audit log assinado</td> </tr> <tr> <td><strong>Melhor para</strong></td> <td>Power users, devs que querem controle total</td> <td>Times enterprise, usuários Kiro/AWS</td> </tr> </tbody> </table> <h2>Análise por Eixo</h2> <p><img src="./images/spider-chart-comparativo.jpg" alt="Spider chart comparativo mostrando Hermes Agent (roxo) superior em contexto, skills, custo e ecossistema versus Kiro Crew (laranja) superior em governança" /></p> <h3>1. Código (Qualidade)</h3> <p><strong>Hermes Agent</strong> não depende de modelo específico. Você pode usar Claude via Nous Portal, OpenRouter, OpenAI direto, ou modelos locais. A qualidade do código depende do modelo que você configura. Com Claude Sonnet 4.6, excelente. Com modelo local fraco, fraco. Hermes não adiciona "inteligência" — adiciona persistência, memória e aprendizado.</p> <p><strong>Kiro Crew</strong> roda sobre Kiro CLI, que usa Claude via Bedrock com o agente Auto (routing inteligente entre modelos). O workflow specs-driven adiciona validação: requisitos → design → tasks antes de codar. Lessons acumuladas mudam comportamento. O código é mais consistente ao longo do tempo porque o agente aprende suas preferências.</p> <p><strong>Veredicto:</strong> Empate com nuance. Hermes dá mais flexibilidade de modelo. Kiro Crew dá mais consistência via specs + lessons.</p> <h3>2. Contexto (Compreensão)</h3> <p><strong>Hermes Agent</strong> tem o sistema de memória mais sofisticado do mercado:</p> <ul> <li><strong>FTS5 cross-session recall</strong> com LLM summarization</li> <li><strong>Honcho dialectic user modeling</strong> — constrói um modelo de quem você é</li> <li><strong>Skill memory</strong> — procedural memory que o agente cria e reutiliza</li> <li><strong>Periodic nudges</strong> — o agente se auto-lembra de persistir conhecimento</li> </ul> <p>O learning loop é fechado: o agente não só armazena memória, ele <em>usa</em> a memória pra melhorar skills, que por sua vez melhoram a memória. É um ciclo de auto-aprimoramento.</p> <p><strong>Kiro Crew</strong> tem knowledge graph com embeddings e busca full-text, lessons persistentes, e skills. Mas não tem o ciclo fechado — lessons são passivas (mudam comportamento quando acionadas), não ativas (o agente não melhora lessons automaticamente).</p> <p><strong>Veredicto:</strong> Hermes ganha. O learning loop fechado é o diferencial principal do projeto.</p> <h3>3. Autonomia</h3> <p><img src="./images/flexibilidade-de-backend.jpg" alt="Comparativo de backends de execução — Kiro Crew com 2 opções (local, Docker) versus Hermes com 6 opções incluindo serverless" /></p> <p><strong>Hermes Agent</strong> é maximamente autônomo. Roda em 6 backends diferentes (local, Docker, SSH, Daytona, Singularity, Modal). Pode rodar serverless que hiberna quando idle (custo quase zero). Delega pra subagentes em parallel workstreams. Executa código programaticamente via <code>execute_code</code>.</p> <p><strong>Kiro Crew</strong> é autônomo dentro de guardrails. Sandbox de OS, comandos negados por padrão, audit log de cada ação. O foco é autonomia <em>governada</em> — o agente pode fazer muito, mas você sabe exatamente o quê.</p> <p><strong>Veredicto:</strong> Hermes ganha em flexibilidade de execução. Kiro Crew ganha em governança.</p> <h3>4. Velocidade</h3> <p><strong>Hermes Agent</strong> é otimizado pra eficiência. Roda em VPS de $5, pode usar serverless que hiberna. 60+ tools built-in. Programmatic Tool Calling via <code>execute_code</code> colapsa pipelines multi-step em single inference calls. É rápido porque é leve.</p> <p><strong>Kiro Crew</strong> tem mais overhead: gateway Python, dashboard React, banco de embeddings (~610MB). Requer mais recursos (4GB+ RAM recomendado). Mas o Kiro CLI por baixo é otimizado, e o agente Auto faz routing inteligente pra modelos mais rápidos quando possível.</p> <p><strong>Veredicto:</strong> Hermes ganha em leveza. Kiro Crew é mais pesado mas compensado pelo routing do Auto.</p> <h3>5. Custo-benefício</h3> <p><strong>Hermes Agent</strong> é gratuito. Você paga apenas o LLM — e pode usar:</p> <ul> <li>Nous Portal (subscription que inclui web search, image gen, TTS, browser)</li> <li>OpenRouter (pay-per-token)</li> <li>OpenAI direto</li> <li>Modelos locais (custo zero)</li> </ul> <p>Flexibilidade total. Quer custo zero? Rode local. Quer conveniência? Use Nous Portal.</p> <p><strong>Kiro Crew</strong> é gratuito, mas depende do Kiro CLI (50 créditos/mês free, depois pago). O custo real é a assinatura Kiro ($20-$200/mês).</p> <p><strong>Veredicto:</strong> Hermes ganha. Flexibilidade de custo incomparável.</p> <h3>6. Especialização (Skills)</h3> <p><strong>Hermes Agent</strong> tem skills como cidadão de primeira classe:</p> <ul> <li><strong>Agentskills.io compatível</strong> — skills portáveis entre plataformas</li> <li><strong>Auto-criação</strong> — o agente cria skills a partir de padrões</li> <li><strong>Self-improvement</strong> — o agente melhora skills durante o uso</li> <li><strong>Skills Hub</strong> — comunidade compartilha skills</li> </ul> <p>O ciclo é: usar → detectar padrão → criar skill → usar skill → melhorar skill. Closed loop.</p> <p><strong>Kiro Crew</strong> tem skills como arquivos Markdown. Você cria ou o agente sugere. Mas não tem auto-improvement — skills são estáticas até você editar manualmente.</p> <p><strong>Veredicto:</strong> Hermes ganha. Skills self-improving vs skills estáticas.</p> <h3>7. Multi-agente</h3> <p><strong>Hermes Agent</strong> suporta subagentes em parallel workstreams. Delega trabalho, recebe resultados. Programmatic Tool Calling permite orquestração sofisticada.</p> <p><strong>Kiro Crew</strong> também suporta subagentes com Activity view no dashboard. Múltiplas conversas simultâneas com contexto isolado.</p> <p><strong>Veredicto:</strong> Empate técnico. Ambos suportam bem, com interfaces diferentes (CLI vs dashboard).</p> <h3>8. Ecossistema</h3> <p><img src="./images/comunidade-e-stars.jpg" alt="Infográfico comparando popularidade no GitHub — Kiro Crew com ~5K stars versus Hermes Agent com 152K+ stars e crescimento mais rápido da história" /></p> <p><strong>Hermes Agent</strong> tem:</p> <ul> <li>152.000+ stars, comunidade massiva</li> <li>60+ tools built-in</li> <li>20+ plataformas de chat</li> <li>Agentskills.io compatibilidade</li> <li>Suporte MCP</li> <li>Batch processing e training com Atropos (research-ready)</li> </ul> <p><strong>Kiro Crew</strong> tem:</p> <ul> <li>Ecossistema Kiro (MCP, steering files, integração com IDE)</li> <li>Dashboard web</li> <li>Audit log enterprise</li> <li>Integração AWS nativa</li> </ul> <p><strong>Veredicto:</strong> Hermes ganha em comunidade e breadth. Kiro Crew ganha em integração enterprise/AWS.</p> <h2>O Learning Loop</h2> <p><img src="./images/learning-loop-diagram.jpg" alt="Diagrama comparando modelos de aprendizado — Kiro Crew com fluxo linear (correção → lesson → aplicação) versus Hermes com loop fechado de auto-aprimoramento (usar → detectar → criar skill → usar skill → melhorar skill)" /></p> <p>A diferença fundamental entre os dois está no <strong>learning loop</strong>.</p> <p><strong>Hermes Agent</strong> tem um ciclo fechado de auto-aprimoramento:</p> <pre><code>Usar → Detectar padrão → Criar skill ↑ ↓ Melhorar skill ← Usar skill </code></pre> <p>O agente não só aprende — ele melhora o que aprendeu. Quanto mais tempo roda, mais capaz fica. Isso é único no mercado.</p> <p><strong>Kiro Crew</strong> tem aprendizado passivo:</p> <pre><code>Correção → Lesson salva → Lesson aplicada quando relevante </code></pre> <p>Lessons mudam comportamento, mas não melhoram sozinhas. Você precisa editar manualmente. É aprendizado, mas não auto-aprimoramento.</p> <p>Se você quer um agente que fica melhor automaticamente: <strong>Hermes</strong>. Se você quer controle total sobre o que o agente aprende: <strong>Kiro Crew</strong>.</p> <h2>Quando Escolher Cada Um</h2> <p><img src="./images/diagrama-de-decisao.jpg" alt="Fluxograma de decisão para escolher entre Kiro Crew e Hermes baseado em governança, self-improvement, ecossistema AWS e flexibilidade" /></p> <h3>Escolha Hermes Agent se:</h3> <ul> <li>Você quer o sistema de memória mais sofisticado disponível</li> <li>Valoriza auto-aprimoramento (skills que melhoram sozinhas)</li> <li>Quer flexibilidade total de modelo (local, cloud, qualquer provider)</li> <li>Precisa de 20+ plataformas de chat</li> <li>Quer voice mode (CLI, Telegram, Discord VC)</li> <li>Valoriza leveza (roda em VPS de $5)</li> <li>Quer comunidade massiva e skills compartilhadas</li> </ul> <h3>Escolha Kiro Crew se:</h3> <ul> <li>Você precisa de governança enterprise (audit log, sandbox)</li> <li>Já usa Kiro CLI ou ecossistema AWS</li> <li>Prefere dashboard web vs CLI</li> <li>Quer controle manual sobre o que o agente aprende</li> <li>Trabalha em time que precisa de rastreabilidade</li> <li>Valoriza integração com Kiro IDE (mesma config)</li> </ul> <h3>Use Ambos se:</h3> <ul> <li>Hermes pra projetos pessoais e experimentação</li> <li>Kiro Crew pra trabalho de time com compliance</li> </ul> <p>São complementares se você tem contextos diferentes.</p> <h2>Veredicto Final</h2> <p><strong>Hermes Agent</strong> é tecnicamente superior em memória e aprendizado. O learning loop fechado, as 20+ plataformas de chat, a flexibilidade de modelo, e a comunidade de 152.000+ fazem dele a escolha óbvia pra quem quer o agente mais capaz sem lock-in.</p> <p><strong>Kiro Crew</strong> é a escolha enterprise. Se você precisa explicar pro compliance o que o agente fez, se quer dashboard em vez de CLI, se já está no ecossistema AWS/Kiro — faz sentido. Menos flexível, mais controlável.</p> <p>A pergunta: você quer o agente mais capaz ou o mais governável?</p> <p>Para máxima capacidade e auto-aprimoramento: <strong>Hermes Agent</strong>. Para governança e integração enterprise: <strong>Kiro Crew</strong>.</p> <hr /> <p><em>Dados verificados em agosto de 2026. Hermes Agent latest, Kiro Crew latest. Stars do momento da publicação.</em></p> Kiro Crew vs OpenClaw: AWS Enterprise ou Comunidade Viral?https://agentify.ia.br/blog/kiro-crew-vs-openclaw/https://agentify.ia.br/blog/kiro-crew-vs-openclaw/Kiro Crew vs OpenClaw — governança enterprise da AWS vs comunidade viral com 382k stars. Filosofias opostas para agentes autônomos.Tue, 04 Aug 2026 00:00:00 GMT<h1>Kiro Crew vs OpenClaw: AWS Enterprise ou Comunidade Viral?</h1> <p><img src="./images/cover-og.jpg" alt="Ilustração comparativa mostrando Kiro Crew com visual enterprise e governança à esquerda versus OpenClaw com rede vibrante de integrações de chat e comunidade à direita" /> Janeiro de 2026. Um projeto chamado ClawdBot aparece no GitHub e explode. Renomeado para OpenClaw, alcança 382.000 stars em seis meses — quase quadruplicando desde o lançamento. Jensen Huang da NVIDIA chama de "provavelmente o lançamento de software mais importante de todos os tempos". Mais de 2.7 milhões de downloads npm numa única semana.</p> <p>Enquanto isso, dentro da Amazon, um projeto interno chamado MeshClaw cresce silenciosamente entre 39.000 desenvolvedores. Seis meses depois, vira open source como Kiro Crew — a resposta enterprise da AWS para agentes autônomos persistentes.</p> <p>Duas ferramentas. Mesma categoria. Filosofias radicalmente diferentes.</p> <h2>O que São</h2> <p>Ambos são <strong>agentes autônomos persistentes</strong> — rodam num servidor 24/7, mantêm memória entre sessões, conectam em plataformas de chat, e continuam trabalhando enquanto você dorme. Mas a semelhança termina aí.</p> <p><strong>OpenClaw</strong> é um framework Node.js que virou fenômeno viral. Criado por Peter Steinberger, conecta em WhatsApp, Telegram, Discord, Slack, iMessage, Signal — basicamente qualquer app de mensagem que você já usa. A proposta: um assistente pessoal de IA que vive no seu chat, controla seu browser, gerencia seu email, e vibe-coda aplicações inteiras.</p> <p><strong>Kiro Crew</strong> é uma extensão do ecossistema Kiro da AWS. Roda sobre o Kiro CLI (obrigatório), usa os mesmos steering files do Kiro IDE, e traz memória persistente, lessons (aprendizado com correções), skills reutilizáveis, cron jobs, webhooks, e um dashboard web. A proposta: um agente de codificação enterprise que mantém contexto, aprende com feedback, e integra com sua infra AWS.</p> <h2>Tabela Comparativa</h2> <table> <thead> <tr> <th>Critério</th> <th>OpenClaw</th> <th>Kiro Crew</th> </tr> </thead> <tbody> <tr> <td><strong>Tipo</strong></td> <td>Framework de agente autônomo (Node.js)</td> <td>Extensão do Kiro CLI (Python)</td> </tr> <tr> <td><strong>Desenvolvedor</strong></td> <td>Peter Steinberger + comunidade</td> <td>AWS (ex-MeshClaw interno)</td> </tr> <tr> <td><strong>GitHub Stars</strong></td> <td>382.000+</td> <td>~5.000 (recém-lançado)</td> </tr> <tr> <td><strong>Licença</strong></td> <td>MIT</td> <td>MIT</td> </tr> <tr> <td><strong>Preço</strong></td> <td>Gratuito (você paga o LLM)</td> <td>Gratuito (você paga o Kiro CLI)</td> </tr> <tr> <td><strong>LLM Backend</strong></td> <td>Qualquer (Claude, GPT, DeepSeek, local)</td> <td>Kiro CLI (Claude via Bedrock)</td> </tr> <tr> <td><strong>Chat Platforms</strong></td> <td>WhatsApp, Telegram, Discord, Slack, iMessage, Signal</td> <td>Slack, Telegram, Discord, Teams, WeChat, Webex</td> </tr> <tr> <td><strong>Memória</strong></td> <td>Simples (por conversa)</td> <td>Knowledge graph + embeddings + FTS</td> </tr> <tr> <td><strong>Aprendizado</strong></td> <td>Básico</td> <td>Lessons (correções viram regras) + Skills</td> </tr> <tr> <td><strong>Jobs agendados</strong></td> <td>Não nativo</td> <td>Cron jobs + webhooks + heartbeats</td> </tr> <tr> <td><strong>Dashboard</strong></td> <td>Não</td> <td>Sim (React, local)</td> </tr> <tr> <td><strong>Controle de browser</strong></td> <td>Sim (Playwright, Puppeteer)</td> <td>Via MCP servers</td> </tr> <tr> <td><strong>Governança/Audit</strong></td> <td>Básico</td> <td>Sandbox + audit log assinado</td> </tr> <tr> <td><strong>Melhor para</strong></td> <td>Assistente pessoal, automação geral</td> <td>Codificação enterprise, times AWS</td> </tr> </tbody> </table> <h2>Análise por Eixo</h2> <p><img src="./images/spider-chart-comparativo.jpg" alt="Spider chart comparativo com 8 eixos mostrando Kiro Crew (laranja) e OpenClaw (roxo) com perfis distintos — OpenClaw superior em autonomia e ecossistema, Kiro Crew superior em governança e skills" /></p> <h3>1. Código (Qualidade)</h3> <p><strong>OpenClaw</strong> não nasceu pra ser um agente de codificação — é um assistente geral que <em>também</em> coda. A qualidade do código depende 100% do LLM que você configura. Com Claude Sonnet 4.6, você terá código excelente. Com um modelo local fraco, terá código fraco. OpenClaw não adiciona nada em cima — é um passthrough para o modelo.</p> <p><strong>Kiro Crew</strong> é construído sobre o Kiro CLI, que traz o workflow specs-driven da AWS. Quando você pede uma feature, o agente pode gerar specs (requisitos → design → tasks) antes de codar. Isso adiciona uma camada de rigor que OpenClaw não tem. O código é validado contra a spec, não apenas contra o prompt.</p> <p><strong>Veredicto:</strong> Kiro Crew ganha em contexto de codificação estruturada. OpenClaw é agnóstico — a qualidade depende do modelo.</p> <h3>2. Contexto (Compreensão)</h3> <p><strong>OpenClaw</strong> mantém contexto por conversa. Não tem memória sofisticada entre sessões — se você reiniciar, perde o contexto. Projetos da comunidade adicionam persistência, mas não é core.</p> <p><strong>Kiro Crew</strong> tem um sistema de memória de três camadas:</p> <ul> <li><strong>Memory.db</strong>: banco vetorial com embeddings para busca semântica</li> <li><strong>Lessons</strong>: correções que viram regras persistentes</li> <li><strong>Skills</strong>: procedimentos reutilizáveis criados pelo próprio agente</li> </ul> <p>Quando você corrige o Kiro Crew ("não, use snake_case em Python"), isso vira uma lesson que afeta todas as interações futuras. OpenClaw não aprende — cada conversa começa do zero.</p> <p><strong>Veredicto:</strong> Kiro Crew ganha com folga. A memória persistente e o aprendizado com correções são diferenciais reais.</p> <h3>3. Autonomia</h3> <p><strong>OpenClaw</strong> é <em>maximamente autônomo</em> — e esse é o ponto. Ele controla seu browser, lê seu email, manda mensagens, executa código, faz deploy. A filosofia é "dê acesso e saia do caminho". Isso assusta muita gente (e com razão), mas é o que fez o projeto viralizar.</p> <p><strong>Kiro Crew</strong> é autônomo dentro de limites. Sandbox de OS, comandos negados por padrão, validação de input, bloqueio de padrões suspeitos. O agente pode fazer muito, mas cada ação é auditada e você pode configurar aprovações. É autonomia <em>governada</em>.</p> <p>Para uso pessoal onde você confia no agente, OpenClaw é mais poderoso. Para uso em contexto profissional onde você precisa explicar o que o agente fez, Kiro Crew é mais seguro.</p> <p><strong>Veredicto:</strong> OpenClaw ganha em autonomia bruta. Kiro Crew ganha em autonomia com governança.</p> <h3>4. Velocidade</h3> <p><strong>OpenClaw</strong> é leve — Node.js puro, sem overhead. Conecta em serviços de chat nativamente e repassa prompts direto pro LLM. A latência é essencialmente a latência do modelo que você usa.</p> <p><strong>Kiro Crew</strong> tem mais partes móveis: gateway Python, dashboard React, banco de embeddings. O modelo de embeddings (~610MB) precisa baixar na primeira execução. Requer mais RAM (4GB+ recomendado vs 2GB do OpenClaw).</p> <p>Para tarefas simples de chat, OpenClaw responde mais rápido. Para tarefas complexas onde memória e contexto importam, Kiro Crew compensa o overhead com melhor compreensão.</p> <p><strong>Veredicto:</strong> OpenClaw ganha em leveza. Kiro Crew ganha em tarefas que precisam de contexto profundo.</p> <h3>5. Custo-benefício</h3> <p><strong>OpenClaw</strong> é gratuito. Você paga apenas pelo LLM — e pode usar modelos locais (llama.cpp, Ollama) para custo zero. A comunidade mantém integrações com dezenas de providers.</p> <p><strong>Kiro Crew</strong> também é gratuito, mas depende do Kiro CLI, que tem tier gratuito de 50 créditos/mês. Pra uso sério, você vai precisar de um plano Kiro ($20-$200/mês). É grátis no software, pago no backend.</p> <p>Se você quer rodar local com modelo open-weight, OpenClaw é a escolha óbvia. Se você já paga Kiro CLI ou usa AWS, Kiro Crew não adiciona custo.</p> <p><strong>Veredicto:</strong> OpenClaw ganha se você quer custo zero. Kiro Crew ganha se você já está no ecossistema Kiro/AWS.</p> <h3>6. Especialização (Skills)</h3> <p><strong>OpenClaw</strong> não tem sistema de skills nativo. A customização vem de prompts de sistema e integrações que você configura. A comunidade criou "recipes" — configurações prontas para casos de uso — mas não é um sistema formal.</p> <p><strong>Kiro Crew</strong> tem skills como cidadão de primeira classe. O agente cria skills a partir de padrões repetidos. Você pode editar, escopar por workspace, ou deletar. Skills são arquivos Markdown no mesmo formato de steering files do Kiro IDE — portáveis e versionáveis.</p> <p>Kiro Crew também herda custom agents do Kiro CLI: personas especializadas com permissões, contexto e ferramentas pré-configuradas.</p> <p><strong>Veredicto:</strong> Kiro Crew ganha. Skills como sistema formal vs customização ad-hoc.</p> <h3>7. Multi-agente</h3> <p><strong>OpenClaw</strong> não foca em multi-agente. Você roda uma instância por pessoa. Coordenação entre múltiplos agentes não é um caso de uso central.</p> <p><strong>Kiro Crew</strong> suporta múltiplas conversas simultâneas, cada uma com contexto isolado. Delega para subagentes que retornam resultados pro agente principal. O dashboard mostra todas as conversas e tarefas em execução (Activity view).</p> <p><strong>Veredicto:</strong> Kiro Crew ganha. Multi-agente é feature core vs não existente.</p> <h3>8. Ecossistema</h3> <p><img src="./images/infografico-de-comunidade.jpg" alt="Infográfico comparando tamanho de comunidade — Kiro Crew com círculo pequeno (~5K stars) versus OpenClaw com círculo muito maior (382K stars)" /></p> <p><strong>OpenClaw</strong> tem a maior comunidade de agentes autônomos do mundo. 382.000 stars, 2.7 milhões de downloads semanais, centenas de contribuidores. Se você tem um problema, alguém já resolveu. A quantidade de integrações, recipes e extensões é incomparável.</p> <p><strong>Kiro Crew</strong> é recém-lançado como open source. A comunidade ainda está se formando. Mas herda o ecossistema Kiro — MCP servers, steering files, integração com Kiro IDE. Se você já usa Kiro, a transição é natural.</p> <p><strong>Veredicto:</strong> OpenClaw ganha em comunidade e maturidade. Kiro Crew ganha em integração com ecossistema AWS/Kiro.</p> <h2>Filosofias Opostas</h2> <p><img src="./images/diagrama-de-filosofias.jpg" alt="Diagrama comparando fluxos de trabalho — Kiro Crew com ciclo estruturado (prompt → spec → review → execute → audit) versus OpenClaw com execução direta para múltiplas plataformas" /></p> <p>A diferença fundamental não é técnica — é filosófica.</p> <p><strong>OpenClaw</strong> é <em>empoderamento individual</em>. Um assistente pessoal que faz o que você manda, sem burocracia. A comunidade decide o que é aceitável. A governança é mínima por design. Isso é libertador para uso pessoal e assustador para uso corporativo.</p> <p><strong>Kiro Crew</strong> é <em>autonomia com responsabilidade</em>. Um agente que aprende, mas dentro de guardrails. Audit log de cada ação. Sandbox de comandos. Integração com infra enterprise. Isso é tranquilizador para times e limitante para power users.</p> <p>Se você quer um agente que controle seu email e browser pessoais, OpenClaw. Se você quer um agente que ajude seu time a codar com rastreabilidade, Kiro Crew.</p> <h2>Quando Escolher Cada Um</h2> <p><img src="./images/diagrama-de-decisao.jpg" alt="Fluxograma de decisão para escolher entre Kiro Crew e OpenClaw baseado em necessidades de compliance, automação pessoal e ecossistema AWS" /></p> <h3>Escolha OpenClaw se:</h3> <ul> <li>Você quer um assistente pessoal all-in-one</li> <li>Prefere rodar modelos locais (custo zero)</li> <li>Valoriza autonomia máxima sobre governança</li> <li>Quer a maior comunidade e mais integrações</li> <li>Seu caso de uso é automação geral, não só codificação</li> <li>Você é dev solo ou usa para projetos pessoais</li> </ul> <h3>Escolha Kiro Crew se:</h3> <ul> <li>Você quer um agente focado em codificação enterprise</li> <li>Precisa de memória persistente e aprendizado com correções</li> <li>Valoriza governança, audit log e sandbox</li> <li>Já usa Kiro CLI ou tem infra AWS</li> <li>Trabalha em time e precisa de rastreabilidade</li> <li>Quer integrar com Slack/Teams/Telegram profissional</li> </ul> <h3>Use Ambos se:</h3> <ul> <li>OpenClaw para automação pessoal (email, browser, tarefas domésticas)</li> <li>Kiro Crew para trabalho de codificação com o time</li> </ul> <p>Não são mutuamente exclusivos. OpenClaw é seu assistente pessoal. Kiro Crew é seu colega de equipe virtual.</p> <h2>Veredicto Final</h2> <p><strong>OpenClaw</strong> é o fenômeno. A comunidade decidiu que agentes autônomos são o futuro, e OpenClaw é onde isso está acontecendo. Se você quer estar na fronteira, com acesso às últimas integrações e recipes da comunidade, é a escolha óbvia.</p> <p><strong>Kiro Crew</strong> é a resposta enterprise. Se você precisa explicar pro seu chefe o que o agente fez, se precisa de audit log pra compliance, se quer aprendizado que persiste entre sessões — Kiro Crew entrega o que OpenClaw não prioriza.</p> <p>A pergunta não é "qual é melhor". É "qual problema você está resolvendo".</p> <p>Para assistente pessoal que faz de tudo: <strong>OpenClaw</strong>. Para agente de codificação com governança de time: <strong>Kiro Crew</strong>.</p> <hr /> <p><em>Dados verificados em agosto de 2026. OpenClaw v3.x, Kiro Crew latest. Stars e downloads do momento da publicação.</em></p> Kiro Crew: O Agente que Trabalha Enquanto Você Dormehttps://agentify.ia.br/blog/kiro-crew/https://agentify.ia.br/blog/kiro-crew/Conheça o Kiro Crew — agente autônomo da AWS com memória persistente, jobs agendados e integração com Slack, Telegram e Discord.Tue, 04 Aug 2026 00:00:00 GMT<h1>Kiro Crew: O Agente que Trabalha Enquanto Você Dorme</h1> <p><img src="./images/cover-og.jpg" alt="Ilustração de um desenvolvedor descansando enquanto um agente de IA trabalha em segundo plano, com dashboards e tarefas sendo executadas automaticamente" /></p> <p>Sexta-feira, fim de tarde. Você está prestes a desligar quando um colega manda uma mensagem: "aquele bug de latência voltou". Você lembra vagamente de ter resolvido algo parecido meses atrás — os logs que olhou, os testes que rodou, onde encontrou o problema. Não é difícil. Só que requer estar em vários lugares ao mesmo tempo, conectando contexto entre ferramentas.</p> <p>Isso é trabalho de engenharia real. Nunca foi uma tarefa, uma sessão, um prompt. É um fluxo que atravessa repositórios, ferramentas, revisões e dias. E no momento que você sai, tudo para e espera você voltar.</p> <p>O <strong>Kiro Crew</strong> assume esse trabalho. Você manda uma mensagem pedindo pra ele encontrar o que você fez da última vez, documentar e enviar pro colega. Fecha o notebook e vai curtir o fim de semana. Mais tarde, recebe a notificação de que o problema foi resolvido.</p> <h2>O que é o Kiro Crew</h2> <p>Kiro Crew é um projeto open source desenvolvido internamente na Amazon (originalmente chamado MeshClaw) que estende o Kiro CLI para funcionar como um <strong>agente autônomo persistente</strong>. Ele roda num servidor — seu laptop, uma VPS, um Raspberry Pi, um container — e continua trabalhando mesmo quando você não está olhando.</p> <p>A proposta: você delega tarefas, e o agente:</p> <ul> <li><strong>Mantém contexto entre sessões</strong> — memória de preferências, projetos ativos, histórico de decisões</li> <li><strong>Aprende com correções</strong> — erros viram "lessons" que mudam comportamento futuro</li> <li><strong>Trabalha em paralelo</strong> — múltiplas conversas, múltiplos subagentes</li> <li><strong>Segue cronogramas</strong> — cron jobs, heartbeats, webhooks</li> <li><strong>Conecta seus canais</strong> — Slack, Telegram, Discord, Teams, WeChat</li> </ul> <p>Em menos de 6 meses dentro da Amazon, o projeto foi adotado por mais de 39.000 desenvolvedores, com quase 500 contribuidores enviando 567 atualizações numa média de 143 commits por semana. Não cresceu por causa da arquitetura — cresceu porque as pessoas podiam moldar pra suas próprias necessidades.</p> <h2>Como Funciona</h2> <p><img src="./images/kiro-crew-architecture.jpg" alt="Diagrama de arquitetura do Kiro Crew em 3 camadas: integrações de chat no topo, gateway no meio com memória e jobs, e Kiro CLI na base" /></p> <p>O Kiro Crew opera em cima do <strong>Kiro CLI</strong> via Agent Client Protocol (ACP). Você instala o Kiro CLI, faz login, e o Crew usa ele como backend para executar tarefas.</p> <p>A arquitetura tem três camadas:</p> <h3>1. Gateway (backend Python)</h3> <p>O núcleo do sistema. Gerencia:</p> <ul> <li><strong>Sessões de chat</strong> — conversas persistentes com contexto</li> <li><strong>Memória</strong> — banco vetorial + full-text search para recuperar contexto relevante</li> <li><strong>Lessons e Skills</strong> — arquivos Markdown que você inspeciona, edita ou remove</li> <li><strong>Cron jobs</strong> — tarefas recorrentes com cadência definida</li> <li><strong>Webhooks</strong> — disparo de ações via eventos externos</li> </ul> <h3>2. Dashboard (React)</h3> <p>Interface web local para:</p> <ul> <li>Visualizar e gerenciar conversas</li> <li>Acompanhar tarefas em execução (Activity view)</li> <li>Editar memória, lessons e skills</li> <li>Configurar jobs e integrações</li> <li>Ver audit log de todas as ações</li> </ul> <h3>3. Integrações de Chat</h3> <p>Bots para Slack, Telegram, Discord, Teams e WeChat que conectam o agente aos canais onde você já trabalha. Manda uma mensagem pro bot, e ele executa no servidor e responde.</p> <h2>O que o Diferencia</h2> <h3>Memória que Sobrevive Reboot</h3> <p><img src="./images/persistent-memory.jpg" alt="Diagrama conceitual mostrando como múltiplas sessões de chat alimentam um knowledge graph central que enriquece novas conversas" /></p> <p>Preferências, contexto de projeto e histórico relevante são armazenados num knowledge graph com embeddings vetoriais e busca full-text. Quando você inicia uma nova conversa, o agente recupera o que importa em vez de reler tudo do zero.</p> <h3>Lessons e Skills Transparentes</h3> <p><img src="./images/lessons-skills-markdown.jpg" alt="Mockup de editor mostrando arquivos Markdown de lessons e skills do Kiro Crew, com estrutura de pastas visível" /></p> <p>Correções viram lessons — arquivos Markdown que você pode ler e editar. Padrões repetidos viram skills reutilizáveis. Tudo no mesmo formato de steering files que o Kiro IDE e CLI já usam.</p> <h3>Trabalha Enquanto Você Descansa</h3> <p><img src="./images/jobs-automation.jpg" alt="Diagrama de automação mostrando triggers (cron, webhook, eventos) conectando a ações automatizadas pelo Kiro Crew" /></p> <p>Jobs recorrentes rodam em schedule. Um digest matinal pode coletar PRs abertos. Um heartbeat pode monitorar um deploy até mudar de estado. Um webhook pode iniciar trabalho quando um evento externo acontece.</p> <h3>Coordena Múltiplos Agentes</h3> <p>Rode várias conversas simultâneas, cada uma com contexto isolado. Delegue pesquisa e implementação pra subagentes que retornam resultados pro agente principal.</p> <h3>Apps com Interface Própria</h3> <p>Tem trabalho que não cabe em chat. Pra esses casos, o Crew suporta <strong>Apps</strong> — interfaces feitas sob medida que combinam UI customizada com agentes, skills e integrações. O Issue Radar triageia issues. O Task Runner executa tarefas longas. O DevFleets gerencia work trees.</p> <h3>Segurança desde o Commit Zero</h3> <p>Sandbox de OS, comandos negados por padrão, bloqueio de padrões suspeitos, validação de input, redação de credenciais, e audit log assinado de cada ação. Porque é open source, você pode auditar cada camada.</p> <h2>Quando Usar</h2> <p>O Kiro Crew faz sentido quando seu trabalho:</p> <ul> <li><strong>Atravessa sessões</strong> — migrações, investigações multi-repo, PRs que precisam de monitoramento</li> <li><strong>Precisa de memória</strong> — você não quer reexplicar contexto toda vez</li> <li><strong>Beneficia de automação</strong> — digests matinais, scans recorrentes, respostas a eventos</li> <li><strong>Requer acesso remoto</strong> — você quer mandar uma mensagem do celular e o agente executar no servidor</li> </ul> <p>Não faz sentido se você só precisa de um agente de codificação local para pair programming. Pra isso, o Kiro CLI ou IDE sozinhos resolvem.</p> <h2>Arquitetura de Deploy</h2> <p>O Crew pode rodar de várias formas:</p> <table> <thead> <tr> <th>Modo</th> <th>Descrição</th> <th>Melhor para</th> </tr> </thead> <tbody> <tr> <td><strong>Local</strong></td> <td>No seu laptop/desktop</td> <td>Dev solo, testes</td> </tr> <tr> <td><strong>Remote Host</strong></td> <td>VPS, VM, servidor dedicado</td> <td>Disponibilidade 24/7</td> </tr> <tr> <td><strong>Container</strong></td> <td>Docker oficial</td> <td>Deploy padronizado, Coolify/Kubernetes</td> </tr> <tr> <td><strong>Home Server</strong></td> <td>Raspberry Pi, NUC</td> <td>Baixo custo, controle total</td> </tr> </tbody> </table> <p>Todos compartilham a mesma configuração: env vars para tokens de chat, URL do dashboard, e o Kiro CLI autenticado.</p> <h2>Integrações Disponíveis</h2> <h3>Chat Platforms</h3> <ul> <li><strong>Slack</strong> — app com Socket Mode</li> <li><strong>Telegram</strong> — bot com long polling</li> <li><strong>Discord</strong> — bot tradicional</li> <li><strong>Microsoft Teams</strong> — app registrado</li> <li><strong>WeChat</strong> — WeCom enterprise</li> <li><strong>Webex</strong> — integração Cisco</li> </ul> <h3>Acesso Remoto</h3> <ul> <li><strong>SSH Tunnel</strong> — acesso do laptop</li> <li><strong>HTTPS Tunnel</strong> — acesso do celular (cloudflared, ngrok, Tailscale Funnel)</li> <li><strong>Dashboard local</strong> — interface web em <code>localhost:5476</code></li> </ul> <h3>Extensibilidade</h3> <ul> <li><strong>MCP Servers</strong> — tools externos</li> <li><strong>Webhooks</strong> — disparo por eventos</li> <li><strong>Apps</strong> — interfaces customizadas</li> </ul> <h2>Prós e Contras</h2> <h3>Prós</h3> <ul> <li><strong>Open source de verdade</strong> — código aberto, governança pública, contribuições aceitas</li> <li><strong>Memória persistente</strong> — contexto sobrevive sessões e restarts</li> <li><strong>Multi-plataforma de chat</strong> — trabalhe de onde você já está (Telegram, Slack, etc.)</li> <li><strong>Jobs e webhooks</strong> — automação sem babysitting</li> <li><strong>Audit log completo</strong> — transparência total de ações</li> <li><strong>Segurança built-in</strong> — sandbox, redação de secrets, validação</li> </ul> <h3>Contras</h3> <ul> <li><strong>Complexidade de setup</strong> — mais partes móveis que um agente local</li> <li><strong>Requer infra</strong> — você precisa de um servidor rodando 24/7</li> <li><strong>Kiro CLI obrigatório</strong> — depende da autenticação AWS/Kiro</li> <li><strong>Dashboard local only</strong> — acesso remoto requer tunnel ou proxy</li> <li><strong>Em evolução rápida</strong> — 143 commits/semana significa breaking changes frequentes</li> </ul> <h2>Comparativo Rápido</h2> <p><img src="./images/compare-cli-vs-crew.jpg" alt="Comparativo visual entre Kiro CLI (local, sessão única, terminal) e Kiro Crew (persistente, multi-plataforma, dashboard)" /></p> <table> <thead> <tr> <th>Aspecto</th> <th>Kiro CLI</th> <th>Kiro Crew</th> </tr> </thead> <tbody> <tr> <td>Execução</td> <td>Local, sessão única</td> <td>Persistente, servidor</td> </tr> <tr> <td>Memória</td> <td>Contexto de conversa</td> <td>Knowledge graph + lessons</td> </tr> <tr> <td>Chat</td> <td>Terminal</td> <td>Slack, Telegram, Discord, etc.</td> </tr> <tr> <td>Jobs</td> <td>Manual</td> <td>Cron, webhooks, heartbeats</td> </tr> <tr> <td>Subagentes</td> <td>Sim</td> <td>Sim, com Activity view</td> </tr> <tr> <td>UI</td> <td>Terminal</td> <td>Dashboard web</td> </tr> <tr> <td>Open Source</td> <td>Não</td> <td>Sim</td> </tr> </tbody> </table> <h2>Próximos Passos</h2> <p>Se você quer um agente que funcione enquanto você não está olhando, o Kiro Crew é a opção mais completa no ecossistema Kiro. No próximo post, mostro como instalar ele no Coolify com integração Telegram — setup completo pra rodar numa VPS.</p> <p>Para explorar mais sobre agentes autônomos e como escolher o certo pro seu caso, confira:</p> <ul> <li><a href="/blog/fundamentos/como-escolher-seu-agente-de-codificacao">Como escolher seu agente de codificação</a> — Critérios para escolher seu agente</li> <li><a href="/blog/guias/kiro-ide-cli">Kiro IDE e CLI</a> — Guia completo do Kiro IDE e CLI</li> <li><a href="/blog/fundamentos/ide-vs-cli-dois-modelos-de-agente">IDE vs CLI: dois modelos de agente</a> — IDE vs CLI: dois modelos de agente</li> </ul> <hr /> <p><em>Baseado na documentação oficial do <a href="https://github.com/kirodotdev/KiroCrew">Kiro Crew</a> e <a href="https://kiro.dev/crew">kiro.dev/crew</a>. Dados verificados em agosto de 2026.</em></p> Como Instalar o Kiro Crew no Coolify com Telegramhttps://agentify.ia.br/blog/kiro-crew-coolify/https://agentify.ia.br/blog/kiro-crew-coolify/Tutorial passo a passo para rodar o Kiro Crew como container no Coolify, com integração Telegram para acessar seu agente de qualquer lugar.Tue, 04 Aug 2026 00:00:00 GMT<h1>Como Instalar o Kiro Crew no Coolify com Telegram</h1> <p><img src="./images/cover-og.jpg" alt="Diagrama de deploy mostrando container Docker, Coolify e Telegram conectados, representando o fluxo de instalação do Kiro Crew" /></p> <p>Você quer um agente de IA que trabalhe enquanto você dorme, responda pelo Telegram, e rode na sua própria infra. O Kiro Crew faz isso — mas a documentação oficial foca em instalação manual num host Linux. Como fazer isso funcionar no Coolify, com deploy automatizado e persistência de dados?</p> <p>Este guia cobre o setup completo: do container rodando no Coolify até você mandando mensagem pro bot no Telegram e recebendo respostas do agente.</p> <h2>Pré-requisitos</h2> <p>Antes de começar, você precisa de:</p> <ul> <li><strong>Coolify instalado</strong> numa VPS (Oracle Cloud, Hetzner, DigitalOcean, etc.)</li> <li><strong>Kiro CLI autenticado</strong> — rode <code>kiro login</code> localmente primeiro</li> <li><strong>Bot do Telegram criado</strong> — vamos configurar no tutorial</li> <li><strong>Acesso SSH</strong> ao servidor do Coolify</li> </ul> <h3>Sobre a Escolha de Infra</h3> <p>O Kiro Crew precisa de recursos razoáveis:</p> <ul> <li><strong>RAM</strong>: mínimo 2GB, recomendado 4GB+ (o modelo de embeddings sozinho usa ~610MB)</li> <li><strong>CPU</strong>: 2 vCPUs funcionam, mais ajuda em execução paralela</li> <li><strong>Disco</strong>: 5GB+ para o modelo de embeddings e dados persistentes</li> </ul> <p>Uma instância Always Free da Oracle Cloud (A1 Flex com 24GB RAM) funciona perfeitamente. Se estiver apertado de recursos, considere rodar direto no host em vez de container — o overhead de Docker consome memória extra.</p> <h2>Passo 1: Criar o Bot do Telegram</h2> <p><img src="./images/telegram-bot-setup.jpg" alt="Diagrama em 4 passos para configurar bot do Telegram: criar bot, obter token, descobrir user ID, configurar variáveis de ambiente" /></p> <p>Primeiro, crie seu bot no Telegram:</p> <ol> <li>Abra o Telegram e busque por <code>@BotFather</code></li> <li>Mande <code>/newbot</code></li> <li>Escolha um nome (ex: "Meu Kiro Crew")</li> <li>Escolha um username (ex: <code>meu_kirocrew_bot</code>)</li> <li>Guarde o <strong>token</strong> que o BotFather vai te dar — formato: <code>123456789:ABCdefGHIjklMNOpqrSTUvwxYZ</code></li> </ol> <h3>Pegar seu User ID</h3> <p>O Kiro Crew precisa saber quem pode usar o bot. Para descobrir seu ID:</p> <ol> <li>Busque por <code>@userinfobot</code> no Telegram</li> <li>Mande qualquer mensagem</li> <li>Ele responde com seu <strong>ID numérico</strong> (ex: <code>123456789</code>)</li> </ol> <p>Guarde esse número — você vai usar como <code>KIROCREW_OWNER_ID</code>.</p> <h2>Passo 2: Preparar o Deploy no Coolify</h2> <p><img src="./images/coolify-architecture.jpg" alt="Arquitetura de deploy do Kiro Crew no Coolify: VPS com container Docker, volumes persistentes, conexão via Telegram e SSH tunnel" /></p> <p>No Coolify, você tem duas opções:</p> <h3>Opção A: Usar a Imagem Docker Oficial</h3> <p>A forma mais simples. No Coolify:</p> <ol> <li>Vá em <strong>Projects</strong> → selecione seu projeto</li> <li>Clique em <strong>+ New</strong> → <strong>Docker Image</strong></li> <li>Configure: <ul> <li><strong>Image</strong>: <code>ghcr.io/kirodotdev/kirocrew:latest</code></li> <li><strong>Name</strong>: <code>kirocrew</code></li> </ul> </li> </ol> <h3>Opção B: Build de Imagem Customizada</h3> <p>Se você precisa de ferramentas extras (AWS CLI, gh, etc.), crie um <code>Dockerfile</code> customizado:</p> <pre><code>FROM ghcr.io/kirodotdev/kirocrew:latest # Instalar ferramentas adicionais RUN apt-get update &amp;&amp; apt-get install -y \ awscli \ gh \ jq \ &amp;&amp; rm -rf /var/lib/apt/lists/* # Ou usar uma imagem base mais completa # FROM ubuntu:24.04 # ... instalação completa do Kiro Crew + suas ferramentas </code></pre> <p>Pra essa opção, use <strong>Git Repository</strong> no Coolify apontando pro seu repo com o Dockerfile.</p> <h2>Passo 3: Configurar Variáveis de Ambiente</h2> <p>No Coolify, vá em <strong>Environment Variables</strong> e adicione:</p> <pre><code># Telegram Bot TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrSTUvwxYZ # ID do owner (seu user ID do Telegram) KIROCREW_OWNER_ID=123456789 # Porta do dashboard (opcional, default 5476) KIROCREW_PORT=5476 # Bind address (necessário em container) KIROCREW_BIND=0.0.0.0 </code></pre> <h3>Variáveis Opcionais</h3> <pre><code># Se você quer expor o dashboard via HTTPS (não recomendado sem auth adicional) # KIROCREW_DASHBOARD_URL=https://kirocrew.seudominio.com # Para múltiplos owners # KIROCREW_OWNER_ID=123456789,987654321 </code></pre> <h2>Passo 4: Configurar Volumes para Persistência</h2> <p><img src="./images/volumes-persistence.jpg" alt="Diagrama de mapeamento de volumes Docker mostrando diretórios do container conectados a storage persistente no host" /></p> <p>Dados do Kiro Crew ficam em <code>~/.kiro/crew/</code>. No container, você precisa montar volumes para não perder dados no redeploy.</p> <p>No Coolify, vá em <strong>Storages</strong> e adicione:</p> <table> <thead> <tr> <th>Source (host)</th> <th>Destination (container)</th> <th>Descrição</th> </tr> </thead> <tbody> <tr> <td><code>/data/kirocrew/crew</code></td> <td><code>/root/.kiro/crew</code></td> <td>Config, memória, lessons, skills</td> </tr> <tr> <td><code>/data/kirocrew/kiro</code></td> <td><code>/root/.kiro</code></td> <td>Credenciais do Kiro CLI</td> </tr> </tbody> </table> <p>Crie os diretórios no host antes do primeiro deploy:</p> <pre><code>ssh seu-servidor sudo mkdir -p /data/kirocrew/{crew,kiro} sudo chown -R 1000:1000 /data/kirocrew </code></pre> <h2>Passo 5: Autenticar o Kiro CLI no Container</h2> <p>O Kiro Crew precisa do Kiro CLI autenticado. A forma mais simples é copiar suas credenciais locais para o volume:</p> <pre><code># No seu computador local scp -r ~/.kiro/* seu-servidor:/data/kirocrew/kiro/ </code></pre> <p>Ou faça login diretamente no container após o primeiro deploy:</p> <pre><code># No servidor docker exec -it &lt;container_id&gt; kiro login </code></pre> <h2>Passo 6: Configurar Rede</h2> <p><img src="./images/remote-access-options.jpg" alt="Comparativo de 3 métodos de acesso ao Kiro Crew: Telegram (recomendado), SSH Tunnel (seguro), HTTPS público (avançado)" /></p> <h3>Opção Segura: Apenas Telegram (Recomendado)</h3> <p>Se você só vai acessar via Telegram, não precisa expor porta nenhuma. O bot usa long polling — ele que conecta no servidor do Telegram, não o contrário.</p> <p>No Coolify:</p> <ul> <li>Deixe <strong>Ports</strong> vazio ou não mapeie a porta 5476 externamente</li> </ul> <h3>Opção com Dashboard: SSH Tunnel</h3> <p>Se você quer acessar o dashboard web, use SSH tunnel em vez de expor publicamente:</p> <pre><code># Do seu computador ssh -L 5476:localhost:5476 seu-servidor # Acesse http://localhost:5476 </code></pre> <h3>Opção Avançada: HTTPS com Cloudflare Tunnel</h3> <p>Se você realmente precisa de acesso remoto ao dashboard:</p> <ol> <li>Configure um Cloudflare Tunnel apontando para <code>localhost:5476</code></li> <li>Adicione autenticação via Cloudflare Access</li> <li>Configure <code>KIROCREW_DASHBOARD_URL=https://kirocrew.seudominio.com</code></li> </ol> <p>⚠️ <strong>Atenção</strong>: O dashboard tem autenticação por token, mas expor na internet adiciona superfície de ataque. Prefira SSH tunnel ou Telegram.</p> <h2>Passo 7: Deploy e Verificação</h2> <p><img src="./images/complete-deploy-flow.jpg" alt="Pipeline completo de deploy em 6 etapas: criar bot Telegram, configurar Coolify, env vars, volumes, autenticar CLI, deploy" /></p> <p>No Coolify:</p> <ol> <li>Clique em <strong>Deploy</strong></li> <li>Acompanhe os logs de build</li> </ol> <p>Após o deploy, verifique se está funcionando:</p> <pre><code># Ver logs do container docker logs -f &lt;container_id&gt; # Deve mostrar algo como: # Starting Kiro Crew gateway... # Telegram bot connected # Dashboard running on http://localhost:5476 </code></pre> <h3>Testar o Bot</h3> <p>No Telegram, mande uma mensagem pro seu bot:</p> <pre><code>/start </code></pre> <p>Ele deve responder com instruções de uso. Teste uma tarefa simples:</p> <pre><code>Qual a versão do Python instalada? </code></pre> <h2>Passo 8: Configuração Inicial</h2> <p>Na primeira execução, o Kiro Crew vai:</p> <ol> <li>Baixar o modelo de embeddings (~610MB) — isso demora alguns minutos</li> <li>Criar os bancos de dados de memória</li> <li>Inicializar a configuração padrão</li> </ol> <p>Você pode rodar o setup interativo:</p> <pre><code>docker exec -it &lt;container_id&gt; kirocrew setup </code></pre> <p>Ou editar diretamente o <code>config.json</code>:</p> <pre><code>docker exec -it &lt;container_id&gt; cat /root/.kiro/crew/config.json </code></pre> <h2>Sincronizar Estado de Outra Máquina</h2> <p>Se você já usava o Kiro Crew localmente e quer migrar pro servidor:</p> <pre><code># Script oficial de sync (rode do seu computador local) cd KiroCrew scripts/sync-to-remote.sh usuario@seu-servidor </code></pre> <p>Isso copia:</p> <ul> <li>Memória e lessons</li> <li>Skills customizadas</li> <li>Configurações</li> <li>Histórico de sessões</li> </ul> <h2>Comandos Úteis do Telegram</h2> <p>Depois de configurado, você pode usar:</p> <table> <thead> <tr> <th>Comando</th> <th>Descrição</th> </tr> </thead> <tbody> <tr> <td><code>/kirocrew status</code></td> <td>Status do gateway</td> </tr> <tr> <td><code>/kirocrew dashboard</code></td> <td>Gera link temporário pro dashboard</td> </tr> <tr> <td><code>/kirocrew dashboard 6h</code></td> <td>Link válido por 6 horas</td> </tr> <tr> <td><code>/kirocrew jobs</code></td> <td>Lista cron jobs</td> </tr> <tr> <td><code>/kirocrew lessons</code></td> <td>Lista lessons aprendidas</td> </tr> </tbody> </table> <p>Mensagens normais são tratadas como prompts pro agente.</p> <h2>Troubleshooting</h2> <h3>Bot não responde</h3> <ol> <li>Verifique se o token está correto</li> <li>Confira os logs: <code>docker logs &lt;container_id&gt;</code></li> <li>Verifique se <code>KIROCREW_OWNER_ID</code> está certo</li> </ol> <h3>"Embeddings not ready"</h3> <p>O modelo está baixando. Aguarde alguns minutos e verifique os logs:</p> <pre><code>docker logs -f &lt;container_id&gt; | grep -i embed </code></pre> <h3>Kiro CLI não autenticado</h3> <pre><code>docker exec -it &lt;container_id&gt; kiro login </code></pre> <h3>Memória não persiste após redeploy</h3> <p>Verifique se os volumes estão montados corretamente:</p> <pre><code>docker inspect &lt;container_id&gt; | grep -A 10 Mounts </code></pre> <h3>Container reiniciando em loop</h3> <p>Provavelmente é falta de memória. Verifique:</p> <pre><code>docker stats &lt;container_id&gt; </code></pre> <p>Se RAM estiver no limite, considere:</p> <ul> <li>Aumentar recursos da VPS</li> <li>Rodar direto no host sem Docker</li> <li>Usar uma instância com mais RAM</li> </ul> <h2>Considerações de Segurança</h2> <h3>O que o Kiro Crew Tem Acesso</h3> <ul> <li><strong>Código</strong>: se você apontar pra um diretório, ele tem acesso total</li> <li><strong>Comandos</strong>: pode executar shell commands (com sandbox)</li> <li><strong>Rede</strong>: pode fazer requests HTTP</li> <li><strong>Secrets</strong>: redação automática, mas cuidado com o que você cola no chat</li> </ul> <h3>Recomendações</h3> <ol> <li><strong>Não exponha o dashboard publicamente</strong> — use SSH tunnel ou Telegram</li> <li><strong>Restrinja owners</strong> — só adicione IDs de pessoas que devem ter acesso</li> <li><strong>Monitore audit log</strong> — todo comando executado é logado</li> <li><strong>Use secrets via env vars</strong> — não cole API keys no chat</li> <li><strong>Backup regular</strong> — rsync do diretório <code>/data/kirocrew/</code></li> </ol> <h2>Setup Alternativo: Direto no Host</h2> <p>Se o overhead de Docker é problema ou você quer mais controle, instale direto no host:</p> <pre><code># No servidor git clone https://github.com/kirodotdev/KiroCrew.git cd KiroCrew # Build frontend cd website &amp;&amp; npm install &amp;&amp; npm run build &amp;&amp; cd .. cp -R website/dist src/kiro_crew/static/dist # Install backend pip install . # Setup kirocrew setup kirocrew doctor # Rodar como serviço kirocrew service install </code></pre> <p>Essa abordagem usa menos recursos e facilita instalar ferramentas CLI (aws, gh, etc.) diretamente no sistema.</p> <h2>Próximos Passos</h2> <p>Com o Kiro Crew rodando, você pode:</p> <ul> <li><strong>Configurar cron jobs</strong> para digests matinais</li> <li><strong>Criar skills</strong> específicas pro seu workflow</li> <li><strong>Adicionar MCP servers</strong> para ferramentas extras</li> <li><strong>Instalar Apps</strong> como Issue Radar e Task Runner</li> </ul> <p>Para entender melhor o que o Kiro Crew pode fazer, leia o post conceitual:</p> <ul> <li><a href="/blog/guias/kiro-crew">O que é o Kiro Crew</a> — O que é o Kiro Crew e quando usar</li> </ul> <p>E para comparar com outras opções de agentes:</p> <ul> <li><a href="/blog/guias/kiro-ide-cli">Kiro IDE e CLI</a> — Guia do Kiro IDE e CLI</li> <li><a href="/blog/guias/claude-code">Claude Code</a> — Claude Code como alternativa</li> </ul> <hr /> <p><em>Baseado na <a href="https://github.com/kirodotdev/KiroCrew/blob/main/docs/guides/remote-and-mobile.md">documentação oficial</a> e experiência prática de deploy. Testado em agosto de 2026 com Coolify v4.x e Kiro Crew latest.</em></p> Kiro Hooks: A Feature Gratuita Que Muda Tudohttps://agentify.ia.br/blog/kiro-hooks-automacao-gratuita/https://agentify.ia.br/blog/kiro-hooks-automacao-gratuita/Hooks do Kiro são automações event-driven que não consomem créditos. Aprenda a configurar com 10 exemplos práticos para lint, testes, docs e segurança.Sun, 26 Jul 2026 00:00:00 GMT<h1>Kiro Hooks: A Feature Gratuita Que Muda Tudo</h1> <p><img src="./images/cover-og.png" alt="Diagrama mostrando 4 exemplos de hooks: save dispara lint, modificação de API atualiza docs, commit dispara scan de segurança" /></p> <p>Todo mundo fala de specs quando fala de Kiro. Faz sentido — é o grande diferencial. Mas tem uma feature que quase ninguém menciona e que pode mudar completamente como você trabalha: <strong>Hooks</strong>.</p> <p>O detalhe absurdo: <strong>hooks são gratuitos</strong>. Não contam contra seus créditos do mês.</p> <h2>O Que São Hooks</h2> <p>Hooks são automações event-driven que disparam ações do agente quando eventos específicos ocorrem no seu projeto:</p> <ul> <li>Você <strong>salva um arquivo</strong> → o agente executa uma ação</li> <li>Você <strong>cria um arquivo novo</strong> → o agente executa outra ação</li> <li>Você <strong>deleta um arquivo</strong> → o agente reage</li> <li>Você <strong>dispara manualmente</strong> → o agente executa sob demanda</li> </ul> <p>O agente tem acesso ao contexto do seu projeto (código, steering files, specs) e pode fazer qualquer coisa que faria numa conversa normal: editar arquivos, rodar comandos, analisar código.</p> <p>A diferença: <strong>nenhum crédito é consumido</strong>.</p> <h2>Por Que Hooks São Gratuitos</h2> <p>Hooks executam tarefas previsíveis e repetitivas — lint, formatação, atualização de docs. O custo computacional é menor que conversas abertas, e a AWS optou por incluí-los como parte da proposta de valor do Kiro.</p> <p>Pra times, isso muda a conta de ROI completamente. Você pode ter dezenas de automações rodando em cada save sem estourar o orçamento.</p> <h2>Eventos Disponíveis</h2> <table> <thead> <tr> <th>Evento</th> <th>Quando Dispara</th> </tr> </thead> <tbody> <tr> <td><strong>On Save</strong></td> <td>Quando você salva um arquivo que corresponde ao padrão</td> </tr> <tr> <td><strong>On Create</strong></td> <td>Quando um novo arquivo é criado</td> </tr> <tr> <td><strong>On Delete</strong></td> <td>Quando um arquivo é removido</td> </tr> <tr> <td><strong>Manual Trigger</strong></td> <td>Quando você dispara via comando ou UI</td> </tr> </tbody> </table> <p>No CLI, existem eventos adicionais:</p> <ul> <li><strong>PreToolUse</strong> — antes do agente usar uma ferramenta</li> <li><strong>PostToolUse</strong> — depois do agente usar uma ferramenta</li> <li><strong>AgentSpawn</strong> — quando um subagent é criado</li> <li><strong>AgentStop</strong> — quando um subagent termina</li> </ul> <h2>Como Configurar um Hook</h2> <h3>No Kiro IDE</h3> <ol> <li>Pressione <code>Cmd+Shift+K</code> (ou Ctrl+Shift+K no Windows/Linux)</li> <li>Selecione "New Hook"</li> <li>Configure: <ul> <li><strong>Nome</strong>: identificador único</li> <li><strong>Trigger</strong>: evento que dispara (On Save, On Create, etc.)</li> <li><strong>File Pattern</strong>: glob que define quais arquivos ativam o hook</li> <li><strong>Ação</strong>: descrição em linguagem natural do que fazer</li> </ul> </li> </ol> <h3>Via Arquivo</h3> <p>Hooks ficam em <code>.kiro/hooks/</code> como arquivos YAML ou Markdown:</p> <pre><code># .kiro/hooks/auto-lint.yaml name: auto-lint-typescript trigger: on_save pattern: "src/**/*.ts" action: | Execute ESLint no arquivo salvo. Se houver erros que podem ser corrigidos automaticamente (--fix), corrija-os. Se houver erros que precisam de intervenção manual, liste-os como comentários TODO no início do arquivo. </code></pre> <h2>10 Exemplos Práticos</h2> <h3>1. Lint Automático em TypeScript</h3> <pre><code>name: auto-lint-ts trigger: on_save pattern: "src/**/*.ts" action: | Execute eslint --fix no arquivo. Se ainda houver erros após o fix, mostre-os no Problems panel. </code></pre> <p><strong>Quando usar:</strong> Qualquer projeto TypeScript. Economiza o ciclo de "salvar → ver erro de lint → corrigir → salvar de novo".</p> <h3>2. Type Check em Python</h3> <pre><code>name: type-check-python trigger: on_save pattern: "**/*.py" action: | Execute mypy no arquivo modificado. Se houver erros de tipo, adicione comentários # type: ignore com explicação apenas onde absolutamente necessário. Prefira corrigir o código a ignorar o erro. </code></pre> <p><strong>Quando usar:</strong> Projetos Python com type hints. Pega erros de tipo no momento do save.</p> <h3>3. Atualizar Testes ao Modificar Código</h3> <pre><code>name: update-tests trigger: on_save pattern: "src/modules/**/*.ts" action: | Identifique o arquivo de teste correspondente em tests/. Se o arquivo de teste existe, analise as mudanças no código-fonte e atualize os testes para cobrir: - Novas funções ou métodos - Mudanças em assinaturas de função - Novos branches condicionais Se não existe arquivo de teste, crie um com cobertura básica. </code></pre> <p><strong>Quando usar:</strong> Manter testes em sincronia com código sem esforço manual.</p> <h3>4. Atualizar Documentação de API</h3> <pre><code>name: update-api-docs trigger: on_save pattern: "src/routes/**/*.ts" action: | Analise os endpoints modificados. Atualize docs/api.md com: - Método HTTP e path - Parâmetros de entrada (query, body, path) - Formato de resposta - Exemplos de uso com curl Mantenha o estilo consistente com a documentação existente. </code></pre> <p><strong>Quando usar:</strong> APIs REST. Docs sempre atualizadas com zero esforço.</p> <h3>5. Gerar Schema.yml para dbt</h3> <pre><code>name: dbt-schema-gen trigger: on_create pattern: "models/**/*.sql" action: | Analise o modelo SQL criado. Gere ou atualize o schema.yml correspondente com: - Nome do modelo - Descrição baseada no SQL - Colunas com tipos inferidos - Testes básicos (not_null, unique para PKs) </code></pre> <p><strong>Quando usar:</strong> Projetos dbt. Economiza o trabalho tedioso de manter schema.yml.</p> <h3>6. Scan de Segurança Antes de Commit</h3> <pre><code>name: security-scan trigger: manual action: | Analise todos os arquivos staged para commit. Procure por: - Credenciais hardcoded (API keys, passwords, tokens) - Conexões de banco sem SSL - Queries SQL vulneráveis a injection - Inputs de usuário não sanitizados Se encontrar problemas, liste-os com severidade e sugestão de correção. Não faça commit se houver problemas de severidade alta. </code></pre> <p><strong>Quando usar:</strong> Antes de cada commit. Previne vazamento de credenciais.</p> <h3>7. Validar Conventional Commits</h3> <pre><code>name: validate-commit-message trigger: manual action: | Analise a mensagem de commit proposta. Verifique se segue Conventional Commits: - Prefixo válido (feat, fix, docs, style, refactor, test, chore) - Escopo opcional entre parênteses - Descrição imperativa e concisa Se inválida, sugira uma mensagem corrigida. </code></pre> <p><strong>Quando usar:</strong> Times que seguem Conventional Commits.</p> <h3>8. Atualizar Storybook ao Modificar Componente</h3> <pre><code>name: update-storybook trigger: on_save pattern: "src/components/**/*.tsx" action: | Se o componente modificado tem um arquivo .stories.tsx correspondente: - Verifique se todas as props estão representadas em stories - Adicione stories para novas variantes Se não tem .stories.tsx, crie um com stories básicas cobrindo: - Estado default - Estados de loading/error se aplicável - Variações de props principais </code></pre> <p><strong>Quando usar:</strong> Projetos React/Vue com Storybook.</p> <h3>9. Estimativa de Custo CloudFormation</h3> <pre><code>name: cfn-cost-estimate trigger: on_save pattern: "**/*.yaml" condition: | Apenas se o arquivo contém AWSTemplateFormatVersion action: | Analise os recursos definidos no template CloudFormation. Adicione um comentário no início do arquivo com estimativa mensal de custo: - Liste cada recurso e custo estimado - Some o total mensal - Avise sobre recursos sem tier gratuito Use preços da região us-east-1 como referência. </code></pre> <p><strong>Quando usar:</strong> Projetos de infraestrutura AWS. Evita surpresas na fatura.</p> <h3>10. Notificação Slack em Deploy</h3> <pre><code>name: deploy-notification trigger: manual action: | Colete informações do último deploy: - Branch/tag - Commits incluídos desde último deploy - Autor - Timestamp Formate como mensagem Slack e envie para o webhook configurado em .env (SLACK_WEBHOOK_URL). </code></pre> <p><strong>Quando usar:</strong> Manter o time informado sobre deploys.</p> <h2>Hooks para Times</h2> <p>Hooks são arquivos em <code>.kiro/hooks/</code> — versionados no Git. Quando você configura um hook, ele fica disponível para todo o time.</p> <p>Isso cria <strong>consistência no automático</strong>:</p> <ul> <li>Mesmo padrão de lint pra todo mundo</li> <li>Mesmas verificações de segurança</li> <li>Mesma estrutura de documentação</li> </ul> <p>Ninguém precisa lembrar de rodar lint ou atualizar docs. O hook faz por você.</p> <h2>Anti-Patterns: O Que Evitar</h2> <h3>❌ Hooks que Demoram Muito</h3> <p>Hooks devem ser rápidos. Se seu hook demora 30 segundos para executar, você vai desabilitar depois de 3 saves.</p> <p><strong>Solução:</strong> Quebre em hooks menores ou use trigger manual para tarefas pesadas.</p> <h3>❌ Hooks que Modificam Muitos Arquivos</h3> <p>Um hook que modifica 50 arquivos em cada save é receita para conflitos de merge e confusão.</p> <p><strong>Solução:</strong> Mantenha hooks focados. Um hook, uma responsabilidade.</p> <h3>❌ Hooks Sem Padrão de Arquivo Específico</h3> <pre><code># Ruim pattern: "**/*" # Bom pattern: "src/modules/**/*.ts" </code></pre> <p>Hooks muito amplos disparam em contextos errados e criam ruído.</p> <h3>❌ Hooks que Contradizem Steering Files</h3> <p>Se seu steering file diz "use async/await" e seu hook converte para callbacks, você tem um problema.</p> <p><strong>Solução:</strong> Alinhe hooks com steering files. Os dois são parte do mesmo contexto.</p> <h2>Hooks no CLI vs IDE</h2> <table> <thead> <tr> <th>Aspecto</th> <th>IDE</th> <th>CLI</th> </tr> </thead> <tbody> <tr> <td><strong>Configuração</strong></td> <td>UI visual</td> <td>Arquivos YAML</td> </tr> <tr> <td><strong>Eventos</strong></td> <td>File-based (save, create, delete)</td> <td>File-based + tool-based (PreToolUse, PostToolUse)</td> </tr> <tr> <td><strong>Feedback</strong></td> <td>Visual no editor</td> <td>Log no terminal</td> </tr> <tr> <td><strong>Uso</strong></td> <td>Desenvolvimento local</td> <td>Automação, CI/CD</td> </tr> </tbody> </table> <p>Os arquivos de hook são compatíveis entre os dois. Você pode criar no IDE e executar no CLI.</p> <h2>Perguntas Frequentes</h2> <h3>Hooks realmente não consomem créditos?</h3> <p>Correto. Hooks são gratuitos em todos os planos, incluindo o Free.</p> <h3>Posso desabilitar um hook temporariamente?</h3> <p>Sim. No IDE, vá em Settings → Hooks e desabilite. No CLI, renomeie o arquivo para <code>.disabled.yaml</code> ou mova para fora da pasta.</p> <h3>Hooks funcionam com arquivos binários?</h3> <p>Não diretamente. O padrão de arquivo pode incluir binários, mas a ação do hook precisa fazer sentido para o contexto. Hooks são mais úteis para arquivos de texto.</p> <h3>Posso ter múltiplos hooks para o mesmo evento?</h3> <p>Sim. Todos os hooks que correspondem ao evento e padrão são executados.</p> <h3>Hooks podem falhar e bloquear o save?</h3> <p>Por padrão, não. Hooks executam em background. Se você quer comportamento de "gate" (bloquear se falhar), use hooks manuais antes de commit/deploy.</p> <hr /> <h2>Próximos Passos</h2> <p>Agora que você entende hooks, explore outros recursos do Kiro:</p> <ul> <li><a href="/guias/como-usar-kiro-tutorial-completo/">Como Usar o Kiro: Tutorial Completo</a></li> <li><a href="/comparativos/kiro-cli-ou-ide-diferencas/">Kiro CLI ou IDE: Quando Usar Cada Um</a></li> <li><a href="/comparativos/github-copilot-ou-kiro-comparativo/">GitHub Copilot ou Kiro?</a></li> </ul> <hr /> <p>Se você precisa de ajuda para configurar hooks customizados ou criar workflows de automação para seu time, conheça os serviços de consultoria em <a href="https://ft.ia.br">ft.ia.br</a>.</p> <hr /> <p><em>Guia verificado em julho de 2026. Versões: Kiro IDE 0.7+, Kiro CLI 1.24+.</em></p> Como Usar o Kiro: Tutorial Completo do Zero à Produçãohttps://agentify.ia.br/blog/como-usar-kiro-tutorial-completo/https://agentify.ia.br/blog/como-usar-kiro-tutorial-completo/Guia prático passo a passo para usar o Kiro da AWS. Da instalação ao primeiro spec, com steering files, hooks e dicas de otimização de créditos.Sat, 25 Jul 2026 00:00:00 GMT<h1>Como Usar o Kiro: Tutorial Completo do Zero à Produção</h1> <p><img src="./images/cover-og.png" alt="Diagrama mostrando o workflow do Kiro: prompt em linguagem natural transformado em specs e depois em código" /></p> <p>Este é o guia prático pra quem quer começar a usar o Kiro da AWS. Nada de teoria sobre spec-driven development — a gente vai instalar, configurar e criar seu primeiro projeto com specs funcionando de verdade.</p> <p>Tempo estimado: 30 minutos do zero ao primeiro código gerado a partir de specs.</p> <h2>O Que Você Vai Aprender</h2> <ol> <li>Instalar Kiro IDE e CLI</li> <li>Configurar autenticação</li> <li>Criar seu primeiro projeto com specs</li> <li>Configurar steering files para sua stack</li> <li>Usar hooks para automação gratuita</li> <li>Otimizar uso de créditos</li> </ol> <h2>Parte 1: Instalação</h2> <h3>Kiro IDE (macOS, Windows, Linux)</h3> <p><strong>macOS:</strong></p> <ol> <li>Acesse <a href="https://kiro.dev/downloads">kiro.dev/downloads</a></li> <li>Baixe o <code>.dmg</code></li> <li>Arraste para Applications</li> <li>Na primeira execução, clique com botão direito → Abrir (contornar Gatekeeper)</li> <li>Faça login com AWS Builder ID, Google ou GitHub</li> </ol> <p><strong>Windows:</strong></p> <ol> <li>Baixe o <code>.exe</code> de kiro.dev</li> <li>Execute o instalador (permissões de admin)</li> <li>Kiro adiciona-se ao PATH automaticamente</li> <li>Faça login</li> </ol> <p><strong>Linux:</strong></p> <pre><code>sudo dpkg -i kiro_*.deb sudo apt-get install -f kiro </code></pre> <p>O Kiro é baseado em Code OSS (VS Code open source). Suas extensões Open VSX e configurações do VS Code são compatíveis. Na primeira execução, você pode importar settings existentes.</p> <h3>Kiro CLI</h3> <p>O CLI funciona em qualquer sistema:</p> <pre><code>curl -fsSL https://cli.kiro.dev/install | bash </code></pre> <p>Depois, autentique:</p> <pre><code>kiro login </code></pre> <p>Isso abre o navegador para login. Uma vez autenticado, o CLI compartilha a mesma assinatura e créditos do IDE.</p> <p><strong>Verificar instalação:</strong></p> <pre><code>kiro --version </code></pre> <h2>Parte 2: Seu Primeiro Projeto com Specs</h2> <p>Vamos criar uma API simples de tarefas (to-do list) usando o workflow completo de specs.</p> <h3>Passo 1: Abra o Projeto no Kiro IDE</h3> <pre><code>mkdir meu-projeto-kiro cd meu-projeto-kiro npm init -y </code></pre> <p>Abra no Kiro IDE: <code>kiro .</code> ou via menu File → Open Folder.</p> <h3>Passo 2: Inicie uma Nova Spec</h3> <p>No Kiro IDE, pressione <code>Cmd+Shift+S</code> (ou Ctrl+Shift+S no Windows/Linux) para abrir o painel de Specs.</p> <p>Digite seu prompt em linguagem natural:</p> <pre><code>Crie uma API REST de tarefas (to-do) com: - CRUD completo (criar, listar, atualizar, deletar) - Validação de campos obrigatórios - Filtro por status (pendente, concluído) - Ordenação por data de criação </code></pre> <h3>Passo 3: Revise os Requisitos</h3> <p>O Kiro gera <code>requirements.md</code> com user stories em formato EARS:</p> <pre><code>## User Stories ### US-001: Criar Tarefa QUANDO o usuário enviar POST /tasks com título válido O SISTEMA DEVE criar a tarefa com status "pendente" E retornar a tarefa criada com id único ### US-002: Listar Tarefas QUANDO o usuário enviar GET /tasks O SISTEMA DEVE retornar todas as tarefas E suportar filtro por query param ?status=pendente|concluido [...] </code></pre> <p>Revise, adicione edge cases que faltaram, e dê o OK. Este é o momento mais importante — você está definindo o contrato do que vai ser construído.</p> <h3>Passo 4: Revise o Design</h3> <p>Com requisitos aprovados, o Kiro analisa seu codebase e gera <code>design.md</code>:</p> <pre><code>## Arquitetura ### Endpoints - POST /tasks - Criar tarefa - GET /tasks - Listar tarefas (com filtros) - GET /tasks/:id - Buscar tarefa - PUT /tasks/:id - Atualizar tarefa - DELETE /tasks/:id - Deletar tarefa ### Schema ```typescript interface Task { id: string; title: string; description?: string; status: 'pending' | 'completed'; createdAt: Date; updatedAt: Date; } </code></pre> <h3>Validação</h3> <ul> <li>title: required, min 1 char, max 200 chars</li> <li>description: optional, max 1000 chars</li> <li>status: enum validation</li> </ul> <p>[...]</p> <pre><code> Revise a arquitetura. Se algo não faz sentido para seu contexto, edite antes de aprovar. ### Passo 5: Execute as Tarefas O Kiro gera `tasks.md` com implementação sequenciada: ```markdown ## Tarefas - [ ] T1: Criar schema do banco (migration) - [ ] T2: Implementar modelo Task - [ ] T3: Criar endpoint POST /tasks - [ ] T4: Criar endpoint GET /tasks com filtros - [ ] T5: Criar endpoint GET /tasks/:id - [ ] T6: Criar endpoint PUT /tasks/:id - [ ] T7: Criar endpoint DELETE /tasks/:id - [ ] T8: Adicionar testes unitários - [ ] T9: Adicionar validação de input </code></pre> <p>Clique em "Execute" em cada tarefa. O Kiro implementa, e você revisa o diff antes de aceitar.</p> <p><strong>Dica:</strong> Se uma implementação tomou rumo errado, use checkpointing para voltar ao estado anterior sem perder trabalho.</p> <h2>Parte 3: Steering Files</h2> <p>Steering files são instruções que ficam salvas sobre seu projeto. Em vez de explicar suas convenções toda hora que abre um chat, você documenta uma vez e o Kiro lê sempre.</p> <h3>Criar Steering Files</h3> <p>Crie a pasta <code>.kiro/steering/</code> na raiz do projeto:</p> <pre><code>mkdir -p .kiro/steering </code></pre> <h3>Exemplo: Convenções Node.js/TypeScript</h3> <p>Crie <code>.kiro/steering/conventions.md</code>:</p> <pre><code># Convenções do Projeto ## Stack - Runtime: Node.js 22+ - Linguagem: TypeScript strict mode - Framework: Express.js - ORM: Prisma - Testes: Vitest ## Padrões de Código - Sempre usar async/await (nunca callbacks ou .then) - Validação de input com Zod em todos os endpoints - Tratamento de erros com try/catch e middleware de error handling - Logs estruturados com pino ## Estrutura de Pastas - src/modules/{feature}/ — cada feature isolada - src/shared/ — utilitários compartilhados - src/infra/ — configurações de banco, cache, etc. ## Git - Commits seguem Conventional Commits - Branch naming: feature/xxx, fix/xxx, chore/xxx ## Não Fazer - Nunca usar any em TypeScript - Nunca commitar credenciais - Nunca usar console.log em produção </code></pre> <p>O Kiro lê esses arquivos automaticamente e segue suas convenções em toda interação.</p> <h3>Steering Global vs Local</h3> <ul> <li><code>.kiro/steering/</code> no projeto → aplicado a esse projeto</li> <li><code>~/.kiro/steering/</code> no home → aplicado a todos os projetos</li> </ul> <h2>Parte 4: Hooks (Automação Gratuita)</h2> <p>Hooks são automações que disparam ações do agente quando eventos ocorrem. <strong>E não contam contra seus créditos</strong> — são completamente gratuitos.</p> <h3>Eventos Disponíveis</h3> <ul> <li><strong>On save</strong> — quando você salva um arquivo</li> <li><strong>On create</strong> — quando um novo arquivo é criado</li> <li><strong>On delete</strong> — quando um arquivo é removido</li> <li><strong>Manual trigger</strong> — quando você dispara manualmente</li> </ul> <h3>Exemplo: Atualizar Testes ao Salvar</h3> <p>No Kiro IDE, pressione <code>Cmd+Shift+K</code> → "New Hook":</p> <pre><code>Nome: update-tests-on-save Trigger: On Save File Pattern: src/**/*.ts Ação: Se o arquivo modificado é um módulo, atualize o arquivo de teste correspondente em tests/ para cobrir as mudanças </code></pre> <h3>Exemplo: Lint Automático em Python</h3> <pre><code>Nome: auto-lint-python Trigger: On Save File Pattern: **/*.py Ação: Execute ruff check e ruff format no arquivo. Se houver erros de lint que podem ser corrigidos automaticamente, corrija-os. </code></pre> <h3>Exemplo: Docs ao Modificar API</h3> <pre><code>Nome: update-api-docs Trigger: On Save File Pattern: src/routes/**/*.ts Ação: Atualize o arquivo docs/api.md com a documentação atualizada dos endpoints modificados </code></pre> <h3>Hooks São Commitáveis</h3> <p>Hooks ficam em <code>.kiro/hooks/</code> e são versionados no Git. Toda a equipe se beneficia das mesmas automações.</p> <h2>Parte 5: Kiro CLI para o Dia a Dia</h2> <p>O CLI complementa o IDE para tarefas rápidas e automação.</p> <h3>Sessão Interativa</h3> <pre><code>cd meu-projeto kiro chat </code></pre> <p>Você entra num loop de conversa:</p> <pre><code>&gt; Explique a arquitetura do módulo de autenticação O módulo de autenticação está em src/modules/auth/ e consiste em: [...] &gt; Adicione suporte a refresh token </code></pre> <h3>Execução Headless (CI/CD)</h3> <pre><code>kiro --print "Analise os erros de lint e corrija automaticamente" </code></pre> <p>O agente executa sem interação — perfeito para pipelines.</p> <h3>Custom Agents</h3> <p>Crie agentes especializados em <code>.kiro/agents/</code>:</p> <pre><code># .kiro/agents/security-reviewer.yaml name: security-reviewer description: Revisa código para problemas de segurança allowedTools: - read_file - search_files - analyze_code systemPrompt: | Você é um especialista em segurança de aplicações. Analise código buscando: - SQL injection - XSS - Credenciais hardcoded - Validação de input insuficiente </code></pre> <p>Use com:</p> <pre><code>kiro chat --agent security-reviewer </code></pre> <h2>Parte 6: Otimização de Créditos</h2> <h3>Use o Modo Auto</h3> <p>O modo Auto (padrão) roteia automaticamente para o modelo mais eficiente para cada tarefa. Se você forçar Claude Opus em vez de Auto, o custo sobe significativamente.</p> <h3>Hooks São Gratuitos</h3> <p>Mova automações recorrentes para hooks em vez de fazer manualmente. Lint, formatação, atualização de docs — tudo isso pode ser hook.</p> <h3>Specs Economizam Retrabalho</h3> <p>O investimento de créditos em specs se paga quando você evita 3-4 ciclos de "não era isso que eu queria".</p> <h3>Free Tier: 50 Créditos</h3> <p>O tier gratuito é apertado para uso intensivo de specs. Para trabalho real, considere o Pro ($20/mês com 1.000 créditos).</p> <p><strong>Dica:</strong> Uma interação simples pode consumir menos de 1 crédito (mínimo 0,01). Specs completas consomem mais.</p> <h2>Próximos Passos</h2> <p>Antes de avançar, vale registrar uma capacidade nova do ecossistema: o Kiro consta entre os <a href="https://agent-plugins.org/compatible-clients">clientes compatíveis com Agent Plugins 1.0.0</a>, com suporte a Agent Skills e MCP por <code>stdio</code>, Streamable HTTP e SSE legado. A AWS também anunciou compatibilidade do AWS Agent Toolkit com o padrão.</p> <p>Isso permite distribuir o núcleo de Skills e MCP em um pacote comum, mas hooks e custom agents do Kiro continuam sendo recursos específicos. O guia <a href="/blog/agent-plugins-padrao-aberto">Agent Plugins 1.0: padrão aberto para Skills e MCP</a> explica essa fronteira.</p> <p>Agora você tem:</p> <ul> <li>Kiro IDE e CLI instalados</li> <li>Seu primeiro projeto com specs</li> <li>Steering files configurados</li> <li>Hooks automatizando tarefas</li> </ul> <p>Para aprofundar:</p> <ul> <li><a href="/comparativos/kiro-cli-ou-ide-diferencas/">Kiro CLI ou IDE: Quando Usar Cada Um</a></li> <li><a href="/guias/kiro-hooks-automacao-gratuita/">Kiro Hooks: A Feature Gratuita Que Muda Tudo</a></li> <li><a href="/comparativos/github-copilot-ou-kiro-comparativo/">GitHub Copilot ou Kiro?</a></li> </ul> <hr /> <p>Se você precisa de ajuda para configurar Kiro no seu time ou criar workflows customizados, conheça os serviços de consultoria em <a href="https://ft.ia.br">ft.ia.br</a>.</p> <hr /> <p><em>Tutorial verificado em julho de 2026. Versões: Kiro IDE 0.7+, Kiro CLI 1.24+.</em></p> GitHub Copilot ou Kiro? O Comparativo Definitivo 2026https://agentify.ia.br/blog/github-copilot-ou-kiro-comparativo/https://agentify.ia.br/blog/github-copilot-ou-kiro-comparativo/Copilot $10/mês ou Kiro $20/mês? Descubra qual agente de codificação escolher baseado no seu perfil, stack e tipo de projeto.Fri, 24 Jul 2026 00:00:00 GMT<h1>GitHub Copilot ou Kiro? O Comparativo Definitivo 2026</h1> <p><img src="./images/cover-og.png" alt="Ilustração mostrando filosofia de velocidade do GitHub Copilot versus abordagem estruturada do Kiro com specs" /></p> <p>Duas filosofias opostas de desenvolvimento com IA. De um lado, o Copilot — o mais popular do mundo, focado em entregar rápido. Do outro, o Kiro — a IDE da AWS que faz diferente: primeiro pensa, depois escreve código.</p> <p>Se você está em dúvida entre os dois, este comparativo vai direto ao ponto.</p> <h2>TL;DR — A Resposta em 30 Segundos</h2> <ul> <li><strong>GitHub Copilot</strong> ($10/mês): melhor custo-benefício para dia-a-dia. Completions ilimitadas, funciona em 9+ IDEs, execução imediata.</li> <li><strong>Kiro</strong> ($20/mês): melhor para features complexas e times AWS. Specs antes de código, rastreabilidade, hooks gratuitos.</li> </ul> <p>A escolha não é sobre qual é "o melhor" — é sobre qual encaixa no seu jeito de trabalhar:</p> <ul> <li><strong>Bug fixes, refactoring, testes</strong> → Copilot</li> <li><strong>Features greenfield que cruzam serviços</strong> → Kiro</li> <li><strong>Time heterogêneo (JetBrains, Neovim, VS Code)</strong> → Copilot</li> <li><strong>Stack AWS-first</strong> → Kiro</li> </ul> <p>Dá para usar os dois? Sim. $30/mês combinados e você tem o melhor dos mundos.</p> <h2>A Grande Diferença: Vibe Coding vs Spec-Driven</h2> <p><strong>GitHub Copilot</strong> representa o que muitos chamam de <em>vibe coding</em>. Você descreve o que quer, e o agente executa imediatamente. Quer um endpoint? Digita o prompt e código aparece. Rápido, direto, sem fricção.</p> <p><strong>Kiro</strong> inverte essa lógica com <em>spec-driven development</em>. Antes de escrever código, o Kiro gera requisitos estruturados (<code>requirements.md</code>), design técnico (<code>design.md</code>) e tarefas sequenciadas (<code>tasks.md</code>). Só depois implementa. É planejamento forçado.</p> <p>A consequência prática:</p> <ul> <li>Copilot é mais rápido para tarefas pontuais</li> <li>Kiro produz menos retrabalho em features complexas</li> </ul> <p>Uma avaliação publicada no site do Martin Fowler resume bem: usar Kiro para um bug fix simples "é como usar um martelo para quebrar uma noz". Mas para features que cruzam múltiplos serviços, o investimento de 20-40 minutos em specs pode economizar horas de ida-e-volta.</p> <h2>Tabela Comparativa</h2> <table> <thead> <tr> <th>Critério</th> <th>GitHub Copilot</th> <th>Kiro</th> </tr> </thead> <tbody> <tr> <td><strong>Preço entrada</strong></td> <td>$10/mês (Pro)</td> <td>$20/mês (Pro)</td> </tr> <tr> <td><strong>Completions</strong></td> <td>Ilimitadas (Pro)</td> <td>Via créditos</td> </tr> <tr> <td><strong>Premium requests</strong></td> <td>300/mês (Pro)</td> <td>1.000 créditos/mês (Pro)</td> </tr> <tr> <td><strong>IDEs suportadas</strong></td> <td>9+ (VS Code, JetBrains, Neovim, Xcode, Eclipse)</td> <td>IDE própria + CLI + ACP</td> </tr> <tr> <td><strong>Specs</strong></td> <td>Não nativo</td> <td>Nativo (EARS notation)</td> </tr> <tr> <td><strong>Autonomia</strong></td> <td>Coding Agent cria PRs</td> <td>Specs + implementação autônoma</td> </tr> <tr> <td><strong>Multi-agente</strong></td> <td>Agent HQ (Pro+/Enterprise)</td> <td>Workflow sequencial</td> </tr> <tr> <td><strong>MCP</strong></td> <td>Sim (VS Code, JetBrains)</td> <td>Sim</td> </tr> <tr> <td><strong>Hooks</strong></td> <td>Não</td> <td>Sim (gratuitos)</td> </tr> <tr> <td><strong>Integração cloud</strong></td> <td>GitHub nativo</td> <td>AWS nativo</td> </tr> <tr> <td><strong>GovCloud</strong></td> <td>Não documentado</td> <td>Documentado</td> </tr> </tbody> </table> <h2>Análise por Perfil</h2> <h3>Desenvolvedor Individual</h3> <p><strong>Escolha Copilot</strong> se:</p> <ul> <li>Você quer o menor preço com máximo valor ($10/mês)</li> <li>Trabalha em projetos existentes mais do que greenfield</li> <li>Prefere velocidade sobre planejamento</li> <li>Usa IDEs variadas (JetBrains, Neovim, Xcode)</li> </ul> <p><strong>Escolha Kiro</strong> se:</p> <ul> <li>Você trabalha primariamente com AWS</li> <li>Constrói features complexas que cruzam serviços</li> <li>Valoriza rastreabilidade de decisões</li> <li>Prefere planejamento antes de execução</li> </ul> <h3>Time de Produto</h3> <p><strong>Escolha Copilot</strong> se:</p> <ul> <li>O time usa IDEs diferentes (JetBrains, VS Code, etc.)</li> <li>Velocidade de entrega é a prioridade</li> <li>Workflow já está integrado com GitHub (Issues, PRs, Actions)</li> </ul> <p><strong>Escolha Kiro</strong> se:</p> <ul> <li>O time precisa de audit trail de decisões técnicas</li> <li>Stack é AWS-native</li> <li>Features frequentemente cruzam múltiplos serviços</li> <li>Precisa de governança sobre o que o agente faz</li> </ul> <h3>Enterprise / Regulado</h3> <p><strong>Escolha Copilot</strong> se:</p> <ul> <li>Precisa de integração com GitHub Enterprise</li> <li>Time grande com IDEs heterogêneas</li> </ul> <p><strong>Escolha Kiro</strong> se:</p> <ul> <li>Precisa de GovCloud</li> <li>Requisitos de rastreabilidade (compliance)</li> <li>Integração profunda com IAM Identity Center</li> </ul> <h2>O Que a Comunidade Diz</h2> <p>Uma análise de discussões no Reddit (r/vibecoding, r/ChatGPT) mostra um padrão:</p> <blockquote> <p>"Use Copilot quando você quer sugestões. Use Claude Code ou Kiro quando você quer que ele realmente faça algo."</p> </blockquote> <p>O Copilot lidera em popularidade bruta. Mas para trabalhos que exigem contexto de projeto e execução autônoma, ferramentas spec-driven como Kiro aparecem como alternativa.</p> <p>Dado interessante: a equipe .NET da Microsoft reportou taxa de sucesso de ~67-72% com o Copilot Coding Agent no repositório dotnet/runtime após ajustes de ambiente. Agentes ainda precisam de supervisão.</p> <h2>Preço vs Valor</h2> <h3>GitHub Copilot</h3> <table> <thead> <tr> <th>Plano</th> <th>Preço</th> <th>Completions</th> <th>Premium Requests</th> </tr> </thead> <tbody> <tr> <td>Free</td> <td>$0</td> <td>2.000/mês</td> <td>50/mês</td> </tr> <tr> <td>Pro</td> <td>$10/mês</td> <td>Ilimitadas</td> <td>300/mês</td> </tr> <tr> <td>Pro+</td> <td>$39/mês</td> <td>Ilimitadas</td> <td>1.500/mês</td> </tr> <tr> <td>Business</td> <td>$19/seat/mês</td> <td>Ilimitadas</td> <td>300/user/mês</td> </tr> </tbody> </table> <h3>Kiro</h3> <table> <thead> <tr> <th>Plano</th> <th>Preço</th> <th>Créditos</th> <th>Overage</th> </tr> </thead> <tbody> <tr> <td>Free</td> <td>$0</td> <td>50/mês</td> <td>N/A</td> </tr> <tr> <td>Pro</td> <td>$20/mês</td> <td>1.000/mês</td> <td>$0,04/crédito</td> </tr> <tr> <td>Pro+</td> <td>$40/mês</td> <td>2.000/mês</td> <td>$0,04/crédito</td> </tr> <tr> <td>Power</td> <td>$200/mês</td> <td>10.000/mês</td> <td>$0,04/crédito</td> </tr> </tbody> </table> <p><strong>A matemática:</strong></p> <ul> <li>Copilot Pro a $10/mês é o melhor custo-benefício do mercado para uso diário</li> <li>Kiro Free com 50 créditos é apertado para uso intensivo de specs</li> <li>Para uso sério de Kiro, o Pro a $20/mês é o mínimo recomendado</li> </ul> <p><strong>Bônus Kiro:</strong> Hooks são gratuitos — não contam contra créditos. Se você usa automações pesadas, isso muda a conta.</p> <h2>E Se Usar os Dois?</h2> <p>Não é excludente. $30/mês combinados (Copilot Pro + Kiro Pro) pode fazer sentido se:</p> <ul> <li>Você usa Copilot para o dia-a-dia (completions, chat, bug fixes)</li> <li>Você usa Kiro para features estruturais que precisam de planejamento</li> <li>Seu time tem preferências diferentes</li> </ul> <p>O Copilot continua rodando na sua IDE preferida. O Kiro entra quando você precisa pensar antes de codar.</p> <h2>Veredicto</h2> <p><strong>Para a maioria dos desenvolvedores, GitHub Copilot Pro a $10/mês é a escolha padrão.</strong> É mais barato, funciona em qualquer editor, e resolve a maioria das tarefas sem fricção. A integração com GitHub é um multiplicador de produtividade que nenhuma outra ferramenta replica.</p> <p><strong>Kiro justifica seu preço maior em cenários específicos:</strong></p> <ul> <li>Features greenfield complexas</li> <li>Equipes que precisam de audit trail</li> <li>Organizações AWS-first</li> <li>Projetos regulados que exigem rastreabilidade</li> </ul> <p>A pergunta certa não é "qual é o melhor?" — é "qual faz sentido pro seu contexto?"</p> <hr /> <h2>Perguntas Frequentes</h2> <h3>Copilot funciona para spec-driven development?</h3> <p>Não nativamente. Você pode criar templates de spec e pedir ao Copilot para segui-los via custom instructions, mas não há pipeline estruturado como o Kiro.</p> <h3>O tier gratuito do Kiro é viável?</h3> <p>Dificilmente para uso intensivo. 50 créditos/mês cobrem exploração, não trabalho diário. Para uso real, Pro ($20/mês) é o mínimo.</p> <h3>Qual é melhor para monorepos grandes?</h3> <p>Copilot tem vantagem. O Coding Agent lê o repositório inteiro, e a integração com GitHub permite trabalhar em múltiplas issues simultaneamente.</p> <h3>Posso usar Kiro com JetBrains?</h3> <p>Sim, via ACP e CLI. Mas o workflow completo de specs é otimizado para a IDE nativa do Kiro.</p> <h3>Os dois usam os mesmos modelos de IA?</h3> <p>Não exatamente. Copilot oferece GPT-5.x, Claude Opus/Sonnet, e Gemini. Kiro usa Claude Sonnet/Opus via Amazon Bedrock com modo Auto que combina modelos especializados.</p> <hr /> <p>Se você quer implementar agentes de codificação no seu time com a estratégia certa para cada cenário, a <a href="https://ft.ia.br">ft.ia.br</a> ajuda a montar esse setup. Consultoria focada em produtividade com IA para equipes de desenvolvimento.</p> <hr /> <p><em>Dados verificados em julho de 2026. Preços: <a href="https://github.com/features/copilot/plans">github.com/features/copilot/plans</a> e <a href="https://kiro.dev/pricing">kiro.dev/pricing</a>.</em></p> Kiro CLI ou IDE? As Diferenças Que Ninguém Te Contahttps://agentify.ia.br/blog/kiro-cli-ou-ide-diferencas/https://agentify.ia.br/blog/kiro-cli-ou-ide-diferencas/Descubra quando usar Kiro CLI vs Kiro IDE. Comparativo direto com flowchart de decisão, features exclusivas de cada um e casos de uso reais.Wed, 22 Jul 2026 00:00:00 GMT<h1>Kiro CLI ou IDE? As Diferenças Que Ninguém Te Conta</h1> <p><img src="./images/cover-og.png" alt="Composição visual mostrando Kiro IDE com interface de specs à esquerda e Kiro CLI no terminal à direita, conectados por um ícone de sincronização" /></p> <p>Você já decidiu pelo Kiro. Ótimo. Agora vem a pergunta que todo mundo faz: <strong>CLI, IDE, ou os dois?</strong></p> <p>A resposta curta: depende mais de como você trabalha do que do que você constrói.</p> <h2>TL;DR — A Resposta em 30 Segundos</h2> <ul> <li><strong>Kiro IDE</strong>: specs visuais, Powers com um clique, checkpointing, Property-Based Testing. Para features complexas onde você quer rastreabilidade.</li> <li><strong>Kiro CLI</strong>: terminal-first, modo headless, subagents, scriptável. Para automação, CI/CD e quem vive no terminal.</li> <li><strong>Mesma assinatura</strong>: os dois compartilham créditos e steering files. Você pode usar ambos sem pagar duas vezes.</li> </ul> <p>Se você quer a decisão rápida:</p> <ul> <li><strong>Features greenfield complexas</strong> → IDE</li> <li><strong>Automação e DevOps</strong> → CLI</li> <li><strong>Time heterogêneo</strong> → os dois</li> </ul> <p>Agora vamos aos detalhes.</p> <h2>A Diferença Fundamental</h2> <p>O Kiro IDE é <strong>visual e orientado a specs</strong>. Você abre a IDE, descreve uma feature em linguagem natural, e o Kiro gera um pipeline estruturado: <code>requirements.md</code> → <code>design.md</code> → <code>tasks.md</code> → código. Cada etapa tem revisão humana. É planejamento antes de implementação.</p> <p>O Kiro CLI é <strong>terminal-first e orientado a execução</strong>. Você abre o terminal, digita <code>kiro chat</code>, e conversa com o agente sobre seu código. Para automação, usa <code>kiro --print "prompt"</code> e o agente executa sem interação. É velocidade e integração com pipelines.</p> <p>A filosofia é diferente. O IDE te pergunta: "bora planejar antes?" O CLI pergunta: "o que você quer que eu faça agora?"</p> <h2>O Que Só o IDE Faz</h2> <h3>Powers (Extensibilidade com Um Clique)</h3> <p>Powers são pacotes que combinam MCP servers + steering files + hooks em uma instalação instantânea. Com mais de 60 powers disponíveis (Figma, Supabase, Terraform, Datadog, Stripe, serviços AWS), o IDE vira um especialista no seu stack sem configuração manual.</p> <p>O pulo do gato: powers carregam <strong>sob demanda</strong>. O Kiro avalia quais são relevantes para sua conversa e ativa só esses. Nada de context overload.</p> <p>O CLI ainda não suporta Powers — está no roadmap, mas sem data.</p> <h3>Checkpointing</h3> <p>Cada mudança que o agente faz gera um checkpoint. Se a implementação tomou um rumo errado no passo 7 de 10, você volta ao passo 6 sem perder o trabalho anterior. No CLI, você recomeça.</p> <h3>Property-Based Testing (PBT)</h3> <p>O Kiro IDE extrai propriedades das suas specs EARS e gera centenas de test cases aleatórios. É verificação automatizada de que o código realmente implementa o que a spec define.</p> <p>Nenhum concorrente (Cursor, Copilot, Claude Code) oferece isso nativamente.</p> <h3>Multi-Root Workspaces</h3> <p>Projetos com múltiplos repositórios? O IDE navega entre todos os roots configurados. Ideal para monorepos e microserviços.</p> <h2>O Que Só o CLI Faz</h2> <h3>Modo Headless</h3> <pre><code>kiro --print "Analise os logs de CI, encontre a causa raiz e aplique o fix." </code></pre> <p>O agente executa sem intervenção humana. Perfeito para pipelines de CI/CD. Configure no GitHub Actions, CodeCatalyst, ou qualquer sistema de build.</p> <h3>Subagents Nativos</h3> <p>O CLI suporta múltiplos agentes especializados rodando em paralelo com progress tracking em tempo real. Você pode encadear invocações:</p> <pre><code>kiro --print "Analise a arquitetura" --agent backend-specialist kiro --print "Gere testes de integração" --agent test-engineer kiro --print "Atualize a documentação" --agent docs-writer </code></pre> <h3>Hooks de Controle</h3> <p>No CLI, hooks são orientados a <strong>controle operacional</strong>: veto via exit code 2 em <code>PreToolUse</code>, logging em <code>AgentSpawn</code>, validação de output em <code>PostToolUse</code>. É governança programática.</p> <h3>Integração Nativa com Shell</h3> <p>Pipes, scripts, cron jobs, tmux — o CLI se encaixa onde você já está. Não precisa trocar de contexto para uma IDE gráfica.</p> <h2>Tabela Comparativa</h2> <table> <thead> <tr> <th>Critério</th> <th>Kiro IDE</th> <th>Kiro CLI</th> </tr> </thead> <tbody> <tr> <td><strong>Tipo</strong></td> <td>IDE standalone (Code OSS)</td> <td>Terminal agent</td> </tr> <tr> <td><strong>Specs</strong></td> <td>Nativo (requirements → design → tasks)</td> <td>Lê specs existentes</td> </tr> <tr> <td><strong>Powers</strong></td> <td>60+ com install one-click</td> <td>Não disponível (planejado)</td> </tr> <tr> <td><strong>Hooks</strong></td> <td>Event-driven (file save/create/delete)</td> <td>Pre/Post tool use, AgentSpawn</td> </tr> <tr> <td><strong>MCP</strong></td> <td>Suporte completo</td> <td>Suporte completo</td> </tr> <tr> <td><strong>Modo headless</strong></td> <td>Não</td> <td>Sim (<code>kiro --print</code>)</td> </tr> <tr> <td><strong>CI/CD</strong></td> <td>Não</td> <td>Scriptável</td> </tr> <tr> <td><strong>Checkpointing</strong></td> <td>Rollback visual por step</td> <td>Não</td> </tr> <tr> <td><strong>Property-Based Testing</strong></td> <td>Integrado com specs</td> <td>Não</td> </tr> <tr> <td><strong>Multi-root workspace</strong></td> <td>Sim</td> <td>Não</td> </tr> <tr> <td><strong>Custom Agents</strong></td> <td>Via <code>.kiro/agents/</code></td> <td>Via <code>.kiro/agents/</code></td> </tr> <tr> <td><strong>Steering Files</strong></td> <td><code>.kiro/steering/</code></td> <td><code>.kiro/steering/</code></td> </tr> <tr> <td><strong>Melhor para</strong></td> <td>Features complexas, rastreabilidade</td> <td>Automação, scripts, DevOps</td> </tr> </tbody> </table> <h2>Quando Usar Cada Um: Flowchart de Decisão</h2> <pre><code>Você está trabalhando em... │ ├─ Feature nova que cruza múltiplos serviços? │ └─ SIM → Kiro IDE (specs vão evitar retrabalho) │ ├─ Bug fix ou refactor pontual? │ └─ SIM → Kiro CLI (overhead de spec não vale) │ ├─ Pipeline de CI/CD automatizado? │ └─ SIM → Kiro CLI (modo headless) │ ├─ Projeto AWS com Lambda, CDK, CloudFormation? │ └─ SIM → Kiro IDE (Powers nativos da AWS) │ ├─ Trabalha primariamente no terminal (tmux, ssh)? │ └─ SIM → Kiro CLI (onde você já está) │ ├─ Time precisa de audit trail de decisões? │ └─ SIM → Kiro IDE (specs são documentação) │ └─ Quer o melhor dos dois mundos? └─ Use os dois — mesma assinatura </code></pre> <h2>Casos de Uso Reais</h2> <h3>DevOps / SRE</h3> <p><strong>Use o CLI.</strong> Automação headless em pipelines, análise de logs de erro, rollbacks automatizados, scripts de manutenção. O IDE só atrapalha quando você está em SSH num servidor remoto.</p> <pre><code># Hook de CI que usa Kiro CLI para review kiro --print "Review this PR for security issues and suggest fixes" \ --agent security-reviewer </code></pre> <h3>Backend Developer</h3> <p><strong>Use o IDE para features, CLI para fixes.</strong> Feature nova com 3 endpoints e integração com banco? IDE com specs. Bug no endpoint de autenticação? CLI direto.</p> <h3>Full-Stack Developer</h3> <p><strong>Use os dois.</strong> IDE para planejamento de features complexas. CLI para ajustes rápidos no frontend enquanto o backend está compilando.</p> <h3>Data Engineer</h3> <p><strong>Use o IDE.</strong> Pipelines de dados que cruzam S3, Glue, Redshift, Lambda — o overhead de specs se paga em horas de debug evitadas. Powers AWS são matadores aqui.</p> <h2>Usando os Dois Juntos</h2> <p>A mesma assinatura funciona nos dois. Steering files são compartilhados. Custom agents rodam em ambos. Você não precisa escolher um para sempre.</p> <p>O workflow que muitos times adotam:</p> <ol> <li><strong>IDE para planejamento e features</strong> — specs para pensar, design docs para comunicar, implementação task por task</li> <li><strong>CLI para execução e automação</strong> — code reviews em PRs, geração de testes em CI, análise de erros, tarefas rápidas</li> </ol> <h2>Preços (Compartilhados)</h2> <table> <thead> <tr> <th>Plano</th> <th>Preço</th> <th>Créditos/mês</th> </tr> </thead> <tbody> <tr> <td>Free</td> <td>$0</td> <td>50</td> </tr> <tr> <td>Pro</td> <td>$20/mês</td> <td>1.000</td> </tr> <tr> <td>Pro+</td> <td>$40/mês</td> <td>2.000</td> </tr> <tr> <td>Power</td> <td>$200/mês</td> <td>10.000</td> </tr> </tbody> </table> <p>Os créditos são compartilhados entre IDE, CLI e Web. Overage: $0,04 por crédito adicional nos planos pagos.</p> <h2>Veredicto</h2> <p><strong>Kiro IDE e CLI não competem</strong> — eles se complementam.</p> <p>O IDE é onde você <strong>pensa</strong> e <strong>constrói</strong>. O CLI é onde você <strong>executa</strong> e <strong>automatiza</strong>.</p> <p>Para a maioria dos desenvolvedores, a recomendação é:</p> <ol> <li><strong>Comece pelo IDE</strong> se você trabalha com features complexas ou quer entender o diferencial do Kiro (specs)</li> <li><strong>Adicione o CLI</strong> quando precisar de automação ou preferir terminal</li> <li><strong>Use os dois</strong> se seu trabalho mistura planejamento e execução operacional</li> </ol> <p>A pergunta certa não é "qual é melhor?" — é "qual combina com o momento do seu trabalho?"</p> <hr /> <h2>Perguntas Frequentes</h2> <h3>Posso usar os dois com a mesma assinatura?</h3> <p>Sim. IDE, CLI e Web compartilham a mesma assinatura, os mesmos créditos e os mesmos steering files.</p> <h3>O CLI vai ganhar suporte a Powers?</h3> <p>Está no roadmap, mas sem data confirmada. Por enquanto, Powers são exclusivos do IDE.</p> <h3>Qual consome mais créditos?</h3> <p>Depende do uso. Specs no IDE consomem mais por feature (refinamento + design + tasks + implementação), mas podem reduzir retrabalho. O CLI consome menos por interação individual.</p> <h3>Hooks contam como créditos?</h3> <p>Não. Hooks são gratuitos — não contam contra sua cota mensal. Isso vale para IDE e CLI.</p> <h3>Posso migrar steering files do IDE para o CLI?</h3> <p>Não precisa migrar. Os dois leem de <code>.kiro/steering/</code>. É o mesmo arquivo.</p> <hr /> <p>Se você precisa de ajuda para configurar Kiro IDE e CLI no seu time, criar custom agents especializados, ou montar pipelines de CI/CD com agentes, conheça os serviços de consultoria em <a href="https://ft.ia.br">ft.ia.br</a>.</p> <hr /> <p><em>Dados verificados em julho de 2026. Versões: Kiro IDE 0.7+, Kiro CLI 1.24+.</em></p> ARD — Agentic Resource Discovery: A Camada que Faltava no Ecossistema de Agenteshttps://agentify.ia.br/blog/ard-agentic-resource-discovery/https://agentify.ia.br/blog/ard-agentic-resource-discovery/Entenda o ARD, a especificação que permite agentes descobrirem tools, skills e outros agentes automaticamente via catálogos e registries.Wed, 22 Jul 2026 00:00:00 GMT<h1>ARD — Agentic Resource Discovery: A Camada que Faltava no Ecossistema de Agentes</h1> <p>Imagine um hotel cinco estrelas com 200 quartos, spa, três restaurantes e um centro de conferências. Agora imagine que o concierge não tem acesso à lista de serviços. Ele sabe atender — é treinado, educado, eficiente — mas quando o hóspede pergunta "vocês têm um chef japonês?", ele precisa ligar para cada setor, um por um, perguntando se existe. Multiplique isso por 50 hóspedes simultâneos.</p> <p>Esse é o estado atual do ecossistema de agentes IA.</p> <p>Temos o MCP para um agente chamar ferramentas. Temos o A2A para agentes conversarem entre si. Mas quando um agente precisa responder "quem, nesse ecossistema, sabe fazer o que eu preciso?" — não há protocolo padrão. Ele depende de configuração manual, listas estáticas ou, pior, hardcode de endpoints.</p> <p>O <strong>ARD — Agentic Resource Discovery</strong> é a especificação que resolve esse gap. É a lista de serviços do hotel, atualizada em tempo real, com verificação de identidade e busca semântica. Publicada em 17 de junho de 2026 como v0.9 (Draft), já conta com contribuições de Google, Microsoft, Hugging Face, GoDaddy, GitHub, Cisco, Databricks, NVIDIA, Salesforce, ServiceNow e Snowflake.</p> <p>Não é coincidência que essas empresas estejam todas na mesa. O discovery é o gargalo que impede agentes de operarem em ecossistemas abertos. Sem ele, cada integração é um contrato bilateral negociado manualmente. Com ele, a web de agentes funciona como a web de documentos: publicou, está descobrível.</p> <h2>O que é ARD</h2> <p>ARD é uma especificação aberta (Apache 2.0) que define como agentes de IA <strong>descobrem</strong> capabilities, ferramentas e outros agentes disponíveis em um ecossistema. Foi construída sobre o ai-catalog standard da Linux Foundation AI Catalog Working Group.</p> <p>Os autores — Junjie Bu (Google), R.V. Guha (Microsoft) e Shaun Smith (Hugging Face) — atacam um problema fundamental: à medida que o número de agentes e ferramentas cresce, o discovery manual não escala.</p> <p>O repositório oficial fica em <a href="https://github.com/ards-project/ard-spec">github.com/ards-project/ard-spec</a> (398 stars, 46 forks, 91 commits em julho de 2026), com documentação em <a href="https://agenticresourcediscovery.org">agenticresourcediscovery.org</a>.</p> <p>A arquitetura se apoia em <strong>duas primitivas</strong>:</p> <ol> <li><strong>Catálogo estático</strong> — um arquivo <code>ai-catalog.json</code> que cada publisher hospeda no seu domínio</li> <li><strong>Registry dinâmico</strong> — uma API com endpoint <code>POST /search</code> para busca semântica em tempo real</li> </ol> <p>Pense no catálogo como a plaquinha na porta do quarto de hotel ("Suíte Master, capacidade 4 pessoas, vista mar"). O registry é o sistema de reservas que cruza sua busca ("quarto com vista mar para amanhã") com tudo que está disponível.</p> <h2>Catálogo Estático: ai-catalog.json</h2> <p>O ponto de entrada mais simples do ARD é o catálogo estático. Você cria um arquivo JSON e hospeda em <code>/.well-known/ai-catalog.json</code> no seu domínio. Qualquer agente que conheça essa convenção pode fazer discovery automático dos seus recursos.</p> <p>Aqui está a estrutura real de um catálogo:</p> <pre><code>{ "specVersion": "1.0", "host": { "displayName": "Acme Corp AI", "identifier": "did:web:acme.corp" }, "entries": [ { "identifier": "urn:air:acme.corp:agents:invoice-processor", "displayName": "Invoice Processor Agent", "type": "application/a2a-agent-card+json", "url": "https://agents.acme.corp/invoice-processor/.well-known/agent.json", "description": "Processa faturas em PDF, extrai dados estruturados e reconcilia com o ERP", "capabilities": ["pdf-extraction", "data-reconciliation", "erp-integration"], "representativeQueries": [ "processar fatura em PDF e extrair dados", "reconciliar nota fiscal com ERP" ], "trustManifest": { "identity": "spiffe://acme.corp/agents/invoice-processor", "identityType": "spiffe", "attestations": [ { "type": "SOC2-Type2", "uri": "https://trust.acme.corp/reports/soc2.pdf" }, { "type": "GDPR", "uri": "https://trust.acme.corp/compliance/gdpr" } ] } }, { "identifier": "urn:air:acme.corp:tools:sentiment-analysis", "displayName": "Sentiment Analysis Tool", "type": "application/mcp-server-card+json", "url": "https://tools.acme.corp/sentiment/mcp.json", "description": "Análise de sentimento multilíngue via MCP server", "capabilities": ["text-analysis", "multilingual", "batch-processing"], "representativeQueries": [ "analisar sentimento de reviews em português", "classificar tom de mensagens de suporte" ] } ] } </code></pre> <p>Observe os pontos-chave:</p> <ul> <li><strong><code>type</code></strong> diferencia o tipo de recurso. O ARD suporta <code>application/a2a-agent-card+json</code> (agentes A2A), <code>application/mcp-server-card+json</code> (MCP servers), <code>application/ai-skill</code>, <code>application/ai-registry+json</code> e <code>application/ai-catalog+json</code></li> <li><strong><code>capabilities</code></strong> permite busca por competência, não só por nome</li> <li><strong><code>representativeQueries</code></strong> são exemplos de perguntas em linguagem natural que o recurso responde — os registries usam esses exemplos para construir embeddings semânticos e ranquear resultados</li> <li><strong><code>trustManifest</code></strong> inclui identidade verificável e attestations de compliance</li> <li>Cada entry exige exatamente um de <code>url</code> (referência remota) ou <code>data</code> (artefato inline) — nunca ambos</li> </ul> <p>O catálogo estático é determinístico e cacheável. Não exige infraestrutura além de um web server. Um desenvolvedor indie pode publicar um <code>ai-catalog.json</code> no mesmo domínio onde já hospeda seu site e tornar seus tools descobríveis por qualquer agente que implemente ARD.</p> <h3>Mecanismos de Discovery</h3> <p>Para que agentes encontrem o catálogo, o ARD define quatro mecanismos de discovery:</p> <ol> <li><strong>Well-Known URI</strong> — <code>/.well-known/ai-catalog.json</code> (o padrão primário)</li> <li><strong>Agentmap em robots.txt</strong> — diretiva <code>Agentmap:</code> apontando para o catálogo</li> <li><strong>HTML Link Tag</strong> — <code>&lt;link rel="ai-catalog" href="/ai-catalog.json"&gt;</code> no head</li> <li><strong>DNS Service Binding records</strong> — para discovery a nível de infraestrutura</li> </ol> <p>Isso é deliberado. O catálogo funciona como o <code>robots.txt</code> funciona para crawlers: uma convenção simples que qualquer agente sabe onde buscar.</p> <h2>Registry Dinâmico: POST /search</h2> <p>O catálogo estático resolve o caso de "eu conheço o domínio e quero saber o que ele oferece". Mas e quando você precisa buscar "quem no ecossistema faz análise de sentimento em português?"</p> <p>Para isso existe o registry dinâmico. O ARD define uma API com três endpoints:</p> <table> <thead> <tr> <th>Endpoint</th> <th>Método</th> <th>Obrigatório?</th> <th>Função</th> </tr> </thead> <tbody> <tr> <td><code>/search</code></td> <td>POST</td> <td>✅ Sim</td> <td>Busca semântica com filtros</td> </tr> <tr> <td><code>/explore</code></td> <td>POST</td> <td>Opcional</td> <td>Agregações e facets</td> </tr> <tr> <td><code>/agents</code></td> <td>GET</td> <td>Opcional</td> <td>Listagem determinística completa</td> </tr> </tbody> </table> <p>O endpoint obrigatório é o <code>POST /search</code>. Aqui está um request real:</p> <pre><code>{ "query": { "text": "process invoices and extract structured data from PDF documents", "filter": { "type": ["application/a2a-agent-card+json"], "trustManifest.attestations.type": ["SOC2-Type2"] } }, "federation": "auto", "pageSize": 5 } </code></pre> <p>E a resposta:</p> <pre><code>{ "results": [ { "identifier": "urn:air:acme.corp:agents:invoice-processor", "displayName": "Invoice Processor Agent", "type": "application/a2a-agent-card+json", "url": "https://agents.acme.corp/invoice-processor/.well-known/agent.json", "description": "Processa faturas em PDF, extrai dados estruturados e reconcilia com o ERP", "score": 92, "source": "https://registry.acme.corp/api/v1/" }, { "identifier": "urn:air:fintech.io:agents:doc-extractor", "displayName": "Document Extraction Service", "type": "application/a2a-agent-card+json", "url": "https://api.fintech.io/.well-known/agent.json", "description": "Extração de dados de documentos financeiros com OCR avançado", "score": 78, "source": "https://finder.external.org/api/" } ], "referrals": [ { "identifier": "urn:air:nlweb.ai:registry:public", "displayName": "Public Agent Finder", "type": "application/ai-registry+json", "url": "https://finder.nlweb.ai/search" } ], "pageToken": "eyJwYWdlIjogMn0=" } </code></pre> <p>O campo <code>score</code> merece atenção: é um valor de 0 a 100 representando <strong>relevância semântica</strong> da busca — não é um trust score. Um agente com score 92 é altamente relevante para a query textual, mas a decisão de confiar nele depende do <code>trustManifest</code>.</p> <p>Repare no array <code>referrals</code> na resposta: quando o registry está no modo <code>referrals</code> ou <code>auto</code>, ele pode retornar ponteiros para outros registries que o cliente pode consultar. Isso é a federação em ação.</p> <h2>Identificadores URN: Endereçamento Global de Recursos</h2> <p>Cada recurso no ARD recebe um identificador único no formato URN (Uniform Resource Name) ancorado ao domínio do publisher:</p> <pre><code>urn:air:&lt;publisher&gt;:&lt;namespace&gt;:&lt;resource-name&gt; </code></pre> <p>Exemplos concretos:</p> <table> <thead> <tr> <th>URN</th> <th>O que identifica</th> </tr> </thead> <tbody> <tr> <td><code>urn:air:acme.corp:agents:invoice-processor</code></td> <td>Agente de processamento de faturas da Acme</td> </tr> <tr> <td><code>urn:air:huggingface.co:tools:text-generation</code></td> <td>Tool de geração de texto do Hugging Face</td> </tr> <tr> <td><code>urn:air:snowflake.com:agents:cortex-analyst</code></td> <td>Agente Cortex Analyst da Snowflake</td> </tr> </tbody> </table> <p>O design é domain-anchored por uma razão: o domínio funciona como raiz de confiança. Se o URN diz <code>urn:air:acme.corp:...</code>, você sabe que o publisher controla <code>acme.corp</code> e pode verificar a identidade via DNS/TLS. Não existe um registro central — o namespace é tão distribuído quanto a própria web.</p> <p>Isso resolve o problema de colisão de nomes sem exigir uma autoridade centralizada. Dois publishers podem ter um agente chamado "invoice-processor" sem conflito, porque o domínio os diferencia.</p> <h2>Trust Manifest: Verificação Criptográfica</h2> <p>Discovery sem trust é um vetor de ataque. Se qualquer agente pode se listar em um registry, como o consumidor sabe que aquele "Invoice Processor" não é um impostor?</p> <p>O ARD resolve isso com o <strong>trustManifest</strong> — um objeto de metadados criptográficos que acompanha cada entry do catálogo. Ele cobre três dimensões:</p> <h3>1. Identidade</h3> <p>O publisher prova quem é através de mecanismos padronizados:</p> <ul> <li><strong>HTTPS FQDN</strong> — o mais simples: o recurso está no domínio X, e o TLS do domínio X prova ownership</li> <li><strong>SPIFFE IDs</strong> — identidade workload-level para ambientes cloud-native (ex: <code>spiffe://acme.corp/agents/invoice-processor</code>)</li> <li><strong>DIDs (Decentralized Identifiers)</strong> — para cenários onde identidade descentralizada é necessária</li> </ul> <h3>2. Attestations</h3> <p>Certificações e compliance verificáveis. Cada attestation tem um <code>type</code> e um <code>uri</code> apontando para o documento de prova:</p> <ul> <li><code>{ "type": "SOC2-Type2", "uri": "https://trust.acme.corp/reports/soc2.pdf" }</code></li> <li><code>{ "type": "HIPAA-Audit", "uri": "https://trust.acme.corp/compliance/hipaa" }</code></li> <li><code>{ "type": "GDPR", "uri": "https://trust.acme.corp/compliance/gdpr" }</code></li> </ul> <p>Não é um campo free-text. O formato estruturado permite que um agente consumidor filtre programaticamente por compliance requirements antes de consumir o recurso.</p> <h3>3. Proveniência</h3> <p>Metadados sobre a origem do recurso: quem criou, quando foi publicado, qual versão da spec implementa, histórico de atualizações.</p> <p>O <code>trustManifest</code> não substitui uma avaliação de segurança completa — mas dá ao agente consumidor informações verificáveis para tomar decisões de trust automaticamente. Um agente enterprise pode ser configurado com uma política: "só consumir recursos com attestation SOC2 e identidade via SPIFFE". O registry filtra antes de retornar resultados.</p> <h2>Federação: Como Registries Conversam</h2> <p>Em produção, não vai existir um único registry global. Empresas terão registries privados, provedores de cloud terão registries públicos, comunidades open-source terão os deles. A spec define três modos de federação para interconexão:</p> <table> <thead> <tr> <th>Modo</th> <th>Comportamento</th> <th>Use case</th> </tr> </thead> <tbody> <tr> <td><strong>auto</strong></td> <td>Merge automático — o registry combina resultados locais com resultados de registries federados</td> <td>Discovery amplo, maximiza cobertura</td> </tr> <tr> <td><strong>referrals</strong></td> <td>Retorna ponteiros para outros registries em vez de resultados diretos</td> <td>Quando o registro federado exige autenticação separada</td> </tr> <tr> <td><strong>none</strong></td> <td>Só resultados locais, sem federação</td> <td>Ambientes isolados, compliance strict</td> </tr> </tbody> </table> <p>Na prática, federação funciona assim: seu agente faz <code>POST /search</code> no registry corporativo. O registry verifica localmente, e se estiver no modo <code>auto</code>, também consulta registries federados (ex: o registry público do Hugging Face). Os resultados voltam unificados, com indicação de origem.</p> <p>O modo <code>referrals</code> é mais conservador — o registry diz "não tenho isso, mas o registry X pode ter" e retorna o endpoint dele. O agente decide se quer seguir o referral. Isso é útil quando registries federados exigem autenticação própria ou operam sob jurisdições diferentes.</p> <p>O modo <code>none</code> existe para ambientes regulados onde nenhum dado deve sair do perímetro — bancos, hospitais, governo. O registry funciona como catálogo interno e ponto final.</p> <h2>ARD vs MCP vs A2A: O Stack Completo</h2> <p>"Mais um protocolo? Por que não resolve tudo com MCP?"</p> <p>Porque cada um resolve uma camada diferente — e as três são necessárias:</p> <table> <thead> <tr> <th>Dimensão</th> <th>MCP</th> <th>A2A</th> <th>ARD</th> </tr> </thead> <tbody> <tr> <td><strong>Pergunta que responde</strong></td> <td>"Como chamo essa tool?"</td> <td>"Como falo com esse agente?"</td> <td>"Quem sabe fazer o que eu preciso?"</td> </tr> <tr> <td><strong>Camada</strong></td> <td>Execução</td> <td>Comunicação</td> <td>Discovery</td> </tr> <tr> <td><strong>Analogia</strong></td> <td>O telefone</td> <td>A língua franca</td> <td>A lista telefônica</td> </tr> <tr> <td><strong>Publisher</strong></td> <td>Anthropic</td> <td>Google</td> <td>Google + Microsoft + Hugging Face</td> </tr> <tr> <td><strong>Timing</strong></td> <td>Nov 2024</td> <td>Abr 2025</td> <td>Jun 2026</td> </tr> <tr> <td><strong>Pré-requisito</strong></td> <td>—</td> <td>—</td> <td>MCP e/ou A2A</td> </tr> </tbody> </table> <p>ARD <strong>não substitui</strong> MCP ou A2A. É a camada que senta na frente deles. O fluxo completo funciona assim:</p> <ol> <li><strong>ARD</strong> — Agente busca "quem processa faturas em PDF com compliance SOC2?"</li> <li><strong>A2A</strong> — Agente inicia comunicação com o Invoice Processor descoberto</li> <li><strong>MCP</strong> — Durante a conversa, o Invoice Processor chama tools de OCR e ERP via MCP</li> </ol> <p>Sem ARD, o passo 1 é manual — um humano configura quais agentes cada sistema conhece. Com ARD, esse discovery acontece programaticamente, em tempo real, com verificação de trust.</p> <p>Os três protocolos resolvem camadas diferentes: MCP deu braços aos agentes (tools). A2A deu voz (comunicação peer-to-peer). ARD dá visão (discovery do ecossistema).</p> <h2>Quem Já Implementou</h2> <p>A spec tem pouco mais de um mês desde a publicação, mas as implementações já estão em produção ou em beta avançado:</p> <p><strong>Hugging Face</strong> — A implementação de referência. O Discover Tool (<code>hf discover search</code>) faz busca semântica sobre os Spaces, retornando agentes e tools no formato ARD. Se você já usa o Hugging Face, pode testar hoje.</p> <p><strong>Snowflake</strong> — Cortex Agents com auto-registro ARD. Quando você deploya um agente via Cortex, ele se registra automaticamente no registry corporativo, ficando descobrível por outros agentes do mesmo tenant.</p> <p><strong>Google Cloud</strong> — Agent Registry no Gemini Enterprise Agent Platform. Anunciado na Cloud Next '26, disponível em breve. Será o registry nativo para quem usa Vertex AI Agent Builder.</p> <p><strong>GoDaddy</strong> — Agent Name Service (ANS), uma abordagem fascinante que usa DNS e PKI existentes como infra de identidade para agentes. Parceria com Cloudflare e Infoblox. Em vez de inventar uma nova camada de identidade, reutiliza a infraestrutura de nomes que já opera na internet há décadas.</p> <p><strong>IETF</strong> — O draft <code>draft-hood-agtp-ard-00</code> está em processo de formalização, sinalizando que o ARD pode se tornar um padrão da internet (RFC), não só uma spec de indústria.</p> <p><strong>Implementações independentes</strong> — O Suganthan.com publicou um <code>ai-catalog.json</code> no seu domínio e relatou que um agente externo o descobriu automaticamente e interagiu com seus recursos — validando o modelo de discovery descentralizado na prática. Isso demonstra que ARD não é só para big tech: qualquer publisher com um domínio e um JSON pode participar do ecossistema.</p> <h2>O que Muda pra Você</h2> <p>Se você trabalha com agentes de IA — como desenvolvedor, arquiteto, ou product owner — o ARD altera o jogo em três dimensões:</p> <h3>Se você publica ferramentas ou agentes</h3> <p>Publicar um <code>ai-catalog.json</code> no seu domínio é o novo "SEO para agentes". Assim como você otimiza páginas para o Google encontrá-las, agora precisa publicar metadados estruturados para agentes encontrarem seus serviços.</p> <p>O custo é mínimo — um arquivo JSON estático no well-known path. O retorno potencial é descobribilidade automática por qualquer agente que implemente ARD. Se você mantém um MCP server público ou um agente A2A, o catálogo é o que conecta esse recurso ao ecossistema sem depender de cadastro manual em marketplaces terceiros.</p> <h3>Se você constrói sistemas multi-agente</h3> <p>Discovery dinâmico via registry significa que seu orquestrador não precisa de uma lista estática de agentes disponíveis. Ele pode buscar capabilities em tempo real, adaptar-se a novos agentes que aparecem no ecossistema, e respeitar políticas de trust automaticamente.</p> <p>Isso transforma arquiteturas multi-agente de "configuração manual para cada integração" para "discovery e composição em runtime".</p> <h3>Se você opera agentes em enterprise</h3> <p>O trust manifest é a peça que faltava para governança. Políticas corporativas podem ser expressas como filtros de registry: "só agentes com SPIFFE ID do nosso cluster", "só recursos com SOC2 e GDPR", "federar com o registry da consultoria X mas não com registries públicos".</p> <p>Isso dá ao security team controle programático sobre quais recursos os agentes internos podem descobrir e consumir — sem bloquear a agilidade dos times que deployam novos agentes.</p> <hr /> <p>MCP para execução, A2A para comunicação, ARD para discovery. Cada camada resolve um problema distinto, e juntas formam a infraestrutura para agentes operarem em ecossistemas abertos — não em silos configurados à mão.</p> <p>O ARD v0.9 ainda é draft. Vai evoluir, schemas vão mudar, e haverá edge cases não cobertos. Mas o modelo mental — catálogo estático para publishers, registry dinâmico para busca, trustManifest para segurança, federação para escala — já está claro. E já está em produção.</p> <p>Se você publica tools ou agentes: crie seu <code>ai-catalog.json</code>. Se você consome: comece a integrar busca via registry. O custo de adoção é baixo, e o ecossistema não vai esperar.</p> Como Publicar ai-catalog.json: Torne Seus Agentes Descobríveishttps://agentify.ia.br/blog/como-publicar-ai-catalog-json/https://agentify.ia.br/blog/como-publicar-ai-catalog-json/Guia prático para criar e hospedar um ai-catalog.json — o manifesto que permite que agentes de IA descubram seus serviços em runtime.Wed, 22 Jul 2026 00:00:00 GMT<h1>Como Publicar ai-catalog.json: Torne Seus Agentes Descobríveis</h1> <p>Você construiu um MCP server, publicou uma skill, expôs uma API com capacidades de IA. Mas como um agente descobre que seu serviço existe? A resposta, desde junho de 2026, é o <strong>ai-catalog.json</strong> — um manifesto padronizado que funciona como o DNS do ecossistema de agentes. Você hospeda, agentes descobrem. Sem cadastro em marketplace, sem intermediários.</p> <p>O ai-catalog.json é para agentes o que o <code>robots.txt</code> foi para crawlers: um contrato público que diz "aqui estão minhas capacidades, é assim que você se conecta". A diferença é que, em vez de dizer o que <em>não</em> acessar, você declara o que <em>pode</em> ser usado.</p> <h2>Pré-requisitos</h2> <p>Antes de criar seu catálogo, você precisa ter algo para expor. O ai-catalog.json é um manifesto — ele descreve o que existe, não cria funcionalidade. Você precisa de pelo menos um destes:</p> <ul> <li>Um <strong>MCP server</strong> rodando (local ou remoto)</li> <li>Uma <strong>skill</strong> publicada em repositório</li> <li>Um <strong>agente A2A</strong> com endpoint acessível</li> <li>Uma <strong>API</strong> que agentes podem consumir</li> </ul> <p>Se você ainda não tem nenhum desses, volte quando tiver. O catálogo vem depois da implementação.</p> <h2>Anatomia do ai-catalog.json</h2> <p>O manifesto tem uma estrutura enxuta: um objeto <code>host</code> que identifica quem publica, e um array <code>entries</code> com os serviços disponíveis.</p> <pre><code>{ "specVersion": "1.0", "host": { "displayName": "Nome do Publicador" }, "entries": [] } </code></pre> <p>Esse é o esqueleto mínimo válido. Vamos detalhar cada parte.</p> <h3>O objeto host</h3> <p>O <code>host</code> descreve quem está publicando o catálogo. Apenas <code>displayName</code> é obrigatório — o resto é opcional mas recomendado para catálogos em produção.</p> <table> <thead> <tr> <th>Campo</th> <th>Obrigatório</th> <th>Descrição</th> </tr> </thead> <tbody> <tr> <td><code>displayName</code></td> <td>Sim</td> <td>Nome legível do publicador</td> </tr> <tr> <td><code>identifier</code></td> <td>Não</td> <td>DID ou domínio do publicador</td> </tr> <tr> <td><code>documentationUrl</code></td> <td>Não</td> <td>URL da documentação geral</td> </tr> <tr> <td><code>logoUrl</code></td> <td>Não</td> <td>URL do logotipo</td> </tr> <tr> <td><code>trustManifest</code></td> <td>Não</td> <td>Manifesto de confiança para verificação</td> </tr> </tbody> </table> <h3>Cada entry no array</h3> <p>Cada item em <code>entries</code> representa um serviço, agente ou skill que você expõe. Quatro campos são obrigatórios:</p> <table> <thead> <tr> <th>Campo</th> <th>Obrigatório</th> <th>Descrição</th> </tr> </thead> <tbody> <tr> <td><code>identifier</code></td> <td>Sim</td> <td>URN único no formato <code>urn:air:&lt;publisher&gt;:&lt;namespace&gt;:&lt;agent-name&gt;</code></td> </tr> <tr> <td><code>displayName</code></td> <td>Sim</td> <td>Nome legível para humanos e agentes</td> </tr> <tr> <td><code>type</code></td> <td>Sim</td> <td>Media type do serviço</td> </tr> <tr> <td><code>url</code> ou <code>data</code></td> <td>Sim (um dos dois)</td> <td>Referência externa OU dados inline — mutuamente exclusivos</td> </tr> </tbody> </table> <p>Os campos opcionais adicionam contexto para melhorar o discovery:</p> <table> <thead> <tr> <th>Campo</th> <th>Descrição</th> </tr> </thead> <tbody> <tr> <td><code>description</code></td> <td>Texto livre sobre o que o serviço faz</td> </tr> <tr> <td><code>tags</code></td> <td>Array de tags para categorização</td> </tr> <tr> <td><code>capabilities</code></td> <td>Capacidades específicas do serviço</td> </tr> <tr> <td><code>representativeQueries</code></td> <td>2-5 exemplos de perguntas que o serviço responde</td> </tr> <tr> <td><code>version</code></td> <td>Versão semântica do serviço</td> </tr> <tr> <td><code>updatedAt</code></td> <td>Timestamp ISO 8601 da última atualização</td> </tr> <tr> <td><code>metadata</code></td> <td>Objeto livre para dados extras</td> </tr> <tr> <td><code>trustManifest</code></td> <td>Manifesto de confiança específico da entry</td> </tr> </tbody> </table> <h3>O formato URN</h3> <p>O identificador segue o padrão AIR (Agent Identifier Registry):</p> <pre><code>urn:air:&lt;publisher&gt;:&lt;namespace&gt;:&lt;agent-name&gt; </code></pre> <p>Exemplos reais:</p> <ul> <li><code>urn:air:hf.co:alice-dev:weather-agent</code> — publicado no Hugging Face</li> <li><code>urn:air:github.com:meu-user:minha-skill</code> — publicado no GitHub</li> <li><code>urn:air:meudominio.com:tools:api-converter</code> — publicado em domínio próprio</li> </ul> <h3>Media types válidos</h3> <p>O campo <code>type</code> define que tipo de serviço a entry representa:</p> <table> <thead> <tr> <th>Media Type</th> <th>Para quê</th> </tr> </thead> <tbody> <tr> <td><code>application/mcp-server-card+json</code></td> <td>MCP servers</td> </tr> <tr> <td><code>application/a2a-agent-card+json</code></td> <td>Agentes A2A (Agent-to-Agent)</td> </tr> <tr> <td><code>application/ai-skill</code></td> <td>Skills de agentes</td> </tr> <tr> <td><code>application/ai-catalog+json</code></td> <td>Catálogos nested (federação)</td> </tr> <tr> <td><code>application/ai-registry+json</code></td> <td>Registries dinâmicos</td> </tr> </tbody> </table> <h2>Passo 1: Criar o Manifesto</h2> <p>Vamos a três exemplos práticos cobrindo os casos mais comuns.</p> <h3>Exemplo 1: MCP server com dados inline</h3> <p>Se seu MCP server é simples e você quer que os metadados fiquem direto no catálogo, use o campo <code>data</code>:</p> <pre><code>{ "specVersion": "1.0", "host": { "displayName": "Alice's AI Tools", "documentationUrl": "https://alice-dev.github.io/docs" }, "entries": [ { "identifier": "urn:air:hf.co:alice-dev:weather-agent", "displayName": "Weather Agent", "type": "application/mcp-server-card+json", "description": "Simple weather lookup using open data", "tags": ["weather", "open-data", "lookup"], "representativeQueries": [ "What's the weather in São Paulo?", "Current temperature in Berlin", "Will it rain tomorrow in Tokyo?" ], "data": { "name": "Weather Agent", "description": "Simple weather lookup using open data", "tools": [ { "name": "get_weather", "description": "Get current weather for a city", "inputSchema": { "type": "object", "properties": { "city": { "type": "string" } }, "required": ["city"] } } ] } } ] } </code></pre> <p>O campo <code>data</code> contém a estrutura completa do MCP server card — nome, descrição e lista de tools com seus schemas. Agentes que encontram esse catálogo já sabem exatamente como invocar seu server.</p> <h3>Exemplo 2: Skill referenciada por URL</h3> <p>Se sua skill vive em um repositório e você não quer duplicar metadados, use <code>url</code>:</p> <pre><code>{ "specVersion": "1.0", "host": { "displayName": "Alice's AI Tools" }, "entries": [ { "identifier": "urn:air:github.com:alice-dev:pptx-creator", "displayName": "pptx-creator", "type": "application/ai-skill", "url": "https://github.com/alice-dev/pptx-creator", "description": "Create professional PowerPoint presentations following brand guidelines.", "tags": ["presentations", "pptx", "automation"], "representativeQueries": [ "Create a slide deck for my quarterly review", "Generate a pitch presentation with 10 slides" ], "version": "2.1.0", "updatedAt": "2026-07-15T10:00:00Z" } ] } </code></pre> <p>Com <code>url</code>, o agente sabe onde buscar os detalhes completos. Você mantém o catálogo leve e a fonte da verdade no repositório.</p> <h3>Exemplo 3: Agente A2A com endpoint</h3> <p>Para um agente que aceita comunicação Agent-to-Agent:</p> <pre><code>{ "specVersion": "1.0", "host": { "displayName": "Minha Empresa IA", "identifier": "minhaempresa.com.br", "logoUrl": "https://minhaempresa.com.br/logo.png" }, "entries": [ { "identifier": "urn:air:minhaempresa.com.br:agents:tradutor-juridico", "displayName": "Tradutor Jurídico PT-EN", "type": "application/a2a-agent-card+json", "url": "https://api.minhaempresa.com.br/.well-known/agent.json", "description": "Traduz documentos jurídicos entre português e inglês com terminologia especializada.", "tags": ["translation", "legal", "pt-br", "en"], "capabilities": ["document-translation", "terminology-glossary"], "representativeQueries": [ "Traduza este contrato para inglês", "Qual a tradução jurídica de 'cláusula resolutória'?", "Revise a tradução deste parecer" ], "version": "1.0.0", "updatedAt": "2026-07-20T14:30:00Z" } ] } </code></pre> <p>Note que <code>url</code> e <code>data</code> são mutuamente exclusivos — use um ou outro, nunca os dois na mesma entry.</p> <h3>Catálogo com múltiplas entries</h3> <p>Na prática, você vai ter mais de um serviço. Basta adicionar ao array:</p> <pre><code>{ "specVersion": "1.0", "host": { "displayName": "DevTools Corp", "identifier": "devtools.io", "documentationUrl": "https://docs.devtools.io" }, "entries": [ { "identifier": "urn:air:devtools.io:mcp:code-reviewer", "displayName": "Code Reviewer", "type": "application/mcp-server-card+json", "url": "https://devtools.io/.well-known/mcp/code-reviewer.json", "description": "Automated code review with security focus", "representativeQueries": [ "Review this pull request for security issues", "Find potential SQL injection vulnerabilities" ] }, { "identifier": "urn:air:devtools.io:skills:test-generator", "displayName": "Test Generator", "type": "application/ai-skill", "url": "https://github.com/devtools-io/test-generator", "description": "Generate comprehensive test suites from source code", "representativeQueries": [ "Generate unit tests for this module", "Create integration tests for the auth flow" ] } ] } </code></pre> <h2>Passo 2: Hospedar em /.well-known/</h2> <p>O local canônico para o manifesto é <code>/.well-known/ai-catalog.json</code>. É o primeiro lugar que agentes vão procurar — a mesma convenção que <code>.well-known/security.txt</code> ou <code>.well-known/openid-configuration</code>.</p> <p>O Content-Type deve ser <code>application/json</code>.</p> <h3>Nginx</h3> <p>Adicione ao bloco <code>server</code> do seu domínio:</p> <pre><code>location /.well-known/ai-catalog.json { alias /var/www/meusite/ai-catalog.json; default_type application/json; add_header Access-Control-Allow-Origin "*"; add_header Cache-Control "public, max-age=3600"; } </code></pre> <p>O header CORS (<code>Access-Control-Allow-Origin: *</code>) é importante — agentes fazem requisições de domínios diferentes. O <code>Cache-Control</code> de 1 hora é um bom default; ajuste conforme a frequência de atualização do seu catálogo.</p> <h3>Cloudflare Pages</h3> <p>Se seu site está no Cloudflare Pages, crie o arquivo na pasta <code>public/.well-known/</code>:</p> <pre><code>public/ └── .well-known/ └── ai-catalog.json </code></pre> <p>Adicione um <code>_headers</code> na raiz do <code>public/</code> para configurar os headers:</p> <pre><code>/.well-known/ai-catalog.json Content-Type: application/json Access-Control-Allow-Origin: * Cache-Control: public, max-age=3600 </code></pre> <p>O Cloudflare Pages serve arquivos estáticos da pasta <code>public/</code> sem necessidade de configuração de rotas.</p> <h3>Vercel</h3> <p>No Vercel, coloque o arquivo em <code>public/.well-known/ai-catalog.json</code> e adicione ao <code>vercel.json</code>:</p> <pre><code>{ "headers": [ { "source": "/.well-known/ai-catalog.json", "headers": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Access-Control-Allow-Origin", "value": "*" }, { "key": "Cache-Control", "value": "public, max-age=3600" } ] } ] } </code></pre> <h3>Confirmação rápida</h3> <p>Depois do deploy, teste com curl:</p> <pre><code>curl -I https://seudominio.com/.well-known/ai-catalog.json </code></pre> <p>Você deve ver <code>200 OK</code> com <code>Content-Type: application/json</code>. Se vir 404, o arquivo não está no path certo. Se vir 301/302, garanta que o redirect final chega no JSON.</p> <h2>Passo 3: Adicionar Sinais de Discovery</h2> <p>O well-known URI é o mecanismo primário, mas existem sinais complementares que aumentam a probabilidade de agentes encontrarem seu catálogo. Pense neles como redundância — cada um cobre um cenário diferente de discovery.</p> <h3>robots.txt</h3> <p>Adicione a diretiva <code>Agentmap</code> ao seu <code>robots.txt</code>:</p> <pre><code>User-agent: * Allow: / Agentmap: https://seudominio.com/.well-known/ai-catalog.json </code></pre> <p>Crawlers de agentes que respeitam o robots.txt vão encontrar seu catálogo mesmo sem acessar o well-known path diretamente. Funciona de forma análoga ao <code>Sitemap:</code> que você já usa para SEO.</p> <h3>HTML link tag</h3> <p>No <code>&lt;head&gt;</code> das suas páginas (especialmente a homepage), adicione:</p> <pre><code>&lt;link rel="ai-catalog" href="/.well-known/ai-catalog.json"&gt; </code></pre> <p>Agentes que renderizam ou parsam HTML vão detectar essa tag. É útil quando o agente está navegando seu site e precisa descobrir o catálogo a partir de qualquer página.</p> <h3>DNS Service Binding</h3> <p>Para discovery no nível de infraestrutura, sem depender de HTTP:</p> <pre><code>_catalog._agents.seudominio.com. IN SVCB 1 seudominio.com. ( alpn="h2,h3" path="/.well-known/ai-catalog.json" ) </code></pre> <p>O record DNS <code>_catalog._agents</code> permite que agentes descubram seu catálogo via resolução DNS antes mesmo de fazer uma requisição HTTP. É o mecanismo mais robusto, mas também o mais avançado — implemente apenas se já tem familiaridade com records SRV/SVCB.</p> <h3>Qual usar?</h3> <p>Para a maioria dos casos, o well-known URI + robots.txt + HTML link cobrem 99% dos cenários. O DNS é para quem quer cobertura total em ambientes enterprise ou redes privadas.</p> <h2>Passo 4: Validar com Ferramentas Oficiais</h2> <p>Antes de considerar o deploy feito, valide a estrutura do seu manifesto.</p> <h3>Validação de schema com ajv-cli</h3> <p>O repositório do ai-catalog standard inclui schemas JSON Schema que você pode usar diretamente:</p> <pre><code>npx ajv-cli validate \ -s spec/schemas/ai-catalog.schema.json \ -d ./ai-catalog.json </code></pre> <p>Se o manifesto estiver correto, a saída será limpa. Se houver erros — campo obrigatório faltando, tipo errado, URL e data na mesma entry — o ajv mostra exatamente onde está o problema.</p> <h3>Teste de conformance completo</h3> <p>Para uma verificação mais rigorosa que vai além da estrutura (testa resolução de URLs, formatos de URN, media types válidos):</p> <pre><code>./conformance/bin/conformance-test manifest ./ai-catalog.json </code></pre> <p>Esse teste é mais pesado — faz requisições reais para URLs declaradas e valida que respondem corretamente. Use em staging antes de publicar.</p> <h3>Validação manual rápida</h3> <p>Se quiser apenas checar se o JSON é válido e tem a estrutura básica:</p> <pre><code>cat ai-catalog.json | python3 -m json.tool &gt; /dev/null &amp;&amp; echo "JSON válido" </code></pre> <p>E uma checagem rápida dos campos obrigatórios:</p> <pre><code>cat ai-catalog.json | python3 -c " import json, sys data = json.load(sys.stdin) assert 'specVersion' in data, 'Falta specVersion' assert 'host' in data, 'Falta host' assert 'displayName' in data['host'], 'Falta host.displayName' assert 'entries' in data, 'Falta entries' for i, e in enumerate(data['entries']): assert 'identifier' in e, f'Entry {i}: falta identifier' assert 'displayName' in e, f'Entry {i}: falta displayName' assert 'type' in e, f'Entry {i}: falta type' assert ('url' in e) != ('data' in e), f'Entry {i}: precisa de url OU data (não ambos, não nenhum)' print(f'✓ Válido: {len(data[\"entries\"])} entries') " </code></pre> <h2>Passo 5: Testar com Hugging Face Discover</h2> <p>O Hugging Face Discover é um search engine que indexa ai-catalog.json de domínios públicos. É a forma mais rápida de verificar se seu catálogo está acessível e bem formatado "do lado de fora".</p> <h3>Verificar se o HF já tem seu catálogo</h3> <p>Faça um POST para o endpoint de busca:</p> <pre><code>curl -X POST https://huggingface-hf-discover.hf.space/search \ -H "Content-Type: application/json" \ -d '{ "query": { "text": "nome-do-seu-servico" }, "pageSize": 5 }' </code></pre> <p>Se seu catálogo já foi indexado, a resposta vai incluir suas entries. Se não aparecer nada, o indexador ainda não passou pelo seu domínio — pode levar algumas horas após a primeira publicação.</p> <h3>Como funciona o discovery no HF</h3> <p>O Hugging Face mantém um crawler que periodicamente busca <code>/.well-known/ai-catalog.json</code> em domínios conhecidos. O próprio HF publica o seu em:</p> <pre><code>https://huggingface.co/.well-known/ai-catalog.json </code></pre> <p>O Discover também expõe um endpoint MCP para que outros agentes possam buscar programaticamente:</p> <pre><code>https://huggingface-hf-discover.hf.space/mcp </code></pre> <p>Isso significa que um agente conectado ao MCP do HF Discover pode buscar seus serviços em runtime — exatamente o cenário que o ai-catalog.json resolve.</p> <h3>Teste end-to-end</h3> <p>Para simular o que um agente faria ao encontrar seu catálogo:</p> <pre><code># 1. Busca o catálogo curl -s https://seudominio.com/.well-known/ai-catalog.json | jq '.entries[].displayName' # 2. Verifica se o HF Discover encontra curl -s -X POST https://huggingface-hf-discover.hf.space/search \ -H "Content-Type: application/json" \ -d '{"query": {"text": "weather agent"}, "pageSize": 3}' | jq '.results[:3]' </code></pre> <p>Se os dois passos funcionam, seu catálogo está operacional.</p> <h2>Boas Práticas para representativeQueries</h2> <p>O campo <code>representativeQueries</code> é opcional, mas é o que mais impacta a qualidade do discovery. Agentes usam essas queries para decidir se seu serviço é relevante para o que o usuário pediu. Pense nelas como os exemplos de invocação de uma skill — quanto mais realistas, melhor o matching.</p> <h3>Regras de ouro</h3> <p><strong>2 a 5 queries por entry.</strong> Menos que 2 não dá contexto suficiente. Mais que 5 dilui a relevância.</p> <p><strong>Use linguagem natural, não comandos técnicos.</strong> O agente vai comparar a query do usuário com seus exemplos. Usuários não dizem "invoke get_weather with params city=SP" — dizem "como está o tempo em São Paulo?".</p> <pre><code>// ❌ Ruim — linguagem de desenvolvedor "representativeQueries": [ "call get_weather API", "fetch weather data for location" ] // ✓ Bom — linguagem de usuário "representativeQueries": [ "What's the weather in São Paulo?", "Will it rain tomorrow in New York?", "Current temperature in Berlin" ] </code></pre> <p><strong>Cubra cenários diferentes, não variações da mesma pergunta.</strong> Cada query deve representar um caso de uso distinto.</p> <pre><code>// ❌ Ruim — três formas de dizer a mesma coisa "representativeQueries": [ "Translate this document", "Can you translate this?", "Please translate" ] // ✓ Bom — três cenários diferentes "representativeQueries": [ "Translate this contract to English", "What's the legal term for 'cláusula resolutória' in English?", "Review the translation accuracy of this legal brief" ] </code></pre> <p><strong>Inclua o idioma que seus usuários realmente usam.</strong> Se seu serviço atende brasileiros, queries em português. Se é global, misture.</p> <p><strong>Seja específico sobre o domínio.</strong> "Analyze this" não ajuda. "Analyze the SEO performance of this landing page" ajuda muito.</p> <h2>Próximos Passos: trustManifest para Enterprise</h2> <p>Para uso pessoal ou projetos open-source, o catálogo básico é suficiente. Mas em contextos enterprise — onde agentes precisam decidir se confiam no seu serviço — existe o <code>trustManifest</code>.</p> <p>O trust manifest é um objeto que pode aparecer tanto no <code>host</code> (nível do publicador) quanto em cada <code>entry</code> (nível do serviço). Ele declara informações verificáveis sobre identidade e procedência.</p> <h3>Estrutura do trustManifest</h3> <table> <thead> <tr> <th>Campo</th> <th>Obrigatório</th> <th>Descrição</th> </tr> </thead> <tbody> <tr> <td><code>identity</code></td> <td>Sim</td> <td>Identificador verificável (DID, domínio, org ID)</td> </tr> <tr> <td><code>identityType</code></td> <td>Não</td> <td>Tipo do identificador (e.g., "domain", "did:web")</td> </tr> <tr> <td><code>attestations</code></td> <td>Não</td> <td>Array de atestações de terceiros</td> </tr> <tr> <td><code>provenance</code></td> <td>Não</td> <td>Array de informações de procedência</td> </tr> <tr> <td><code>signature</code></td> <td>Não</td> <td>Assinatura criptográfica do manifesto</td> </tr> </tbody> </table> <h3>Exemplo prático</h3> <pre><code>{ "specVersion": "1.0", "host": { "displayName": "Empresa Verificada Ltda", "identifier": "did:web:empresa-verificada.com.br", "trustManifest": { "identity": "did:web:empresa-verificada.com.br", "identityType": "did:web", "attestations": [ { "type": "domain-verification", "verifier": "cloudflare.com", "issuedAt": "2026-06-01T00:00:00Z" } ], "provenance": [ { "type": "source-repository", "url": "https://github.com/empresa-verificada/ai-services" } ] } }, "entries": [] } </code></pre> <p>O trust manifest permite que agentes enterprise apliquem políticas de confiança — "só conectar a serviços com domínio verificado", "exigir assinatura criptográfica", "aceitar apenas atestações de CAs conhecidas". Na prática, é o que separa um ecossistema de "confia em tudo" de um que opera com critério.</p> <p>Para começar, publique sem trust manifest. Quando seus consumidores forem organizações com políticas de segurança, adicione. O padrão é progressivo — funciona sem, melhora com.</p> <h2>Resumo do Fluxo</h2> <p>Cinco passos para tornar seus serviços descobríveis:</p> <ol> <li><strong>Crie</strong> o <code>ai-catalog.json</code> com host + entries</li> <li><strong>Hospede</strong> em <code>/.well-known/ai-catalog.json</code> com CORS habilitado</li> <li><strong>Sinalize</strong> via robots.txt, HTML link tag e (opcionalmente) DNS</li> <li><strong>Valide</strong> com ajv-cli ou conformance test</li> <li><strong>Teste</strong> com Hugging Face Discover</li> </ol> <p>O ai-catalog.json é a primitiva mais simples do ecossistema de interoperabilidade de agentes. Um arquivo JSON estático, sem auth, sem SDK, sem vendor lock-in. Publique o seu, teste com o HF Discover, e veja agentes encontrarem seus serviços sem que você precise fazer mais nada.</p> Build → Scale → Govern → Optimize: O Ciclo de Vida dos Agentes Enterprisehttps://agentify.ia.br/blog/ciclo-build-scale-govern-optimize/https://agentify.ia.br/blog/ciclo-build-scale-govern-optimize/Entenda os 4 estágios que separam um protótipo de agente IA de um sistema em produção — e o que cada etapa exige de verdade.Sat, 18 Jul 2026 00:00:00 GMT<blockquote> <p><strong>TL;DR: Construir um agente de IA é a parte fácil. O que separa protótipos de sistemas em produção são quatro estágios distintos — Build, Scale, Govern e Optimize — que formam um ciclo contínuo. 88% dos agentes enterprise morrem no piloto porque as equipes dominam o primeiro estágio e ignoram os outros três. Este post detalha o que cada etapa exige de verdade, usando o Gemini Enterprise Agent Platform como referência concreta, mas com princípios que se aplicam a qualquer stack.</strong></p> </blockquote> <hr /> <h2>O Problema: Todo Mundo Sabe Construir, Quase Ninguém Sabe Operar</h2> <p>Existe uma estatística incômoda circulando nos relatórios de 2026: segundo dados da Forrester e da Anaconda, <strong>88% dos agentes de IA enterprise não sobrevivem à fase de piloto</strong>. Não é que as equipes não saibam programar. É que construir é apenas o primeiro ato de uma peça com quatro.</p> <p>O ciclo <strong>Build → Scale → Govern → Optimize</strong> resolve exatamente esse gap. Ele nomeia os quatro estágios que toda equipe precisa atravessar para levar um agente do "funciona no meu notebook" ao "opera em produção com confiança do negócio".</p> <p>Pense assim: construir uma casa é empilhar tijolos e levantar paredes. Mas torná-la habitável exige encanamento, fiação elétrica, sistema de segurança e manutenção periódica. Uma casa sem encanamento é só uma escultura — bonita, mas inabitável. Um agente sem os três estágios posteriores ao Build é a mesma coisa: uma demo impressionante que nunca vira produto.</p> <p>O artigo "13 hands-on demos to build on Gemini Enterprise Agent Platform" do Google Cloud (julho 2026) apresenta essas 13 demos organizadas exatamente nesse ciclo. Vou usar essa estrutura como mapa, extraindo os princípios que se aplicam independente do cloud provider que você usa.</p> <p>Vamos estágio por estágio.</p> <hr /> <h2>Build: Da Ideia ao Agente Funcional</h2> <p>É aqui que a maioria das equipes se sente em casa. Você define o que o agente faz, quais tools ele acessa, como ele raciocina. O terreno dos SDKs, dos notebooks e dos hackathons internos.</p> <h3>ADK: Code-First e Multi-Linguagem</h3> <p>O Google Agent Development Kit (ADK) é a ferramenta central desse estágio na plataforma Gemini. A filosofia é <strong>code-first</strong>: você escreve agentes como código, não como configurações em uma UI. Python e Java são suportados nativamente, e o ADK 2.0 trouxe a <strong>graph-based workflow API</strong> — onde você define fluxos como grafos dirigidos.</p> <pre><code>from google.adk import Agent, Tool from google.adk.workflows import Graph, Node # Agente básico com ADK expense_agent = Agent( name="expense-reviewer", model="gemini-2.5-pro", tools=[ Tool(name="check_policy", fn=check_expense_policy), Tool(name="approve_expense", fn=approve_in_erp), ], instructions="Revise despesas contra a política corporativa. Aprove automaticamente se &lt; R$500 e dentro da política." ) </code></pre> <p>Isso é um agente funcional. Roda no seu laptop. Responde perguntas. Até impressiona na demo de sexta-feira. Mas se você parar aqui, ele morre na segunda-feira seguinte quando alguém perguntar "como a gente coloca isso em produção?".</p> <h3>Padrões Arquiteturais do Build</h3> <p>As demos do Google Cloud mostram quatro padrões fundamentais nesse estágio:</p> <ol> <li> <p><strong>Agente básico</strong> — um LLM com tools. É o "Hello World" dos agentes. Funciona, mas é frágil.</p> </li> <li> <p><strong>Event-driven com human-in-the-loop</strong> — o agente processa eventos (um email chegou, um ticket abriu) e pausa quando precisa de aprovação humana. Esse padrão é crítico: agentes enterprise raramente têm autoridade para decidir tudo sozinhos.</p> </li> <li> <p><strong>MCP para acesso a dados</strong> — o Model Context Protocol padroniza como agentes acessam dados de sistemas externos. Em vez de cada agente reimplementar conectores, você expõe dados via MCP servers.</p> </li> <li> <p><strong>A2UI (Agent-to-UI)</strong> — agentes que geram interfaces dinâmicas para o usuário, em vez de só texto. Quando o agente precisa coletar dados estruturados, ele renderiza um formulário em vez de pedir "me diga o valor, a data e a categoria".</p> </li> </ol> <h3>O Ponto Cego do Build</h3> <p>Aqui está o que a maioria dos times ignora: <strong>o melhor agente de build não vale nada se morrer no deploy</strong>. Você pode ter o prompt perfeito, as tools mais elegantes, a lógica mais sofisticada — mas se não existir um caminho claro do código para produção, você tem um protótipo eterno.</p> <p>O Build é necessário, mas é o estágio mais superestimado. O valor real está nos três estágios seguintes.</p> <hr /> <h2>Scale: Do Laptop ao Tráfego Real</h2> <p>Escalar um agente não é só "colocar num servidor maior". É resolver uma série de problemas que simplesmente não existem quando você roda localmente: gerenciamento de sessão, estado persistente, concorrência, deploys sem downtime e discovery entre agentes.</p> <h3>Agent Runtime: Infra Gerenciada</h3> <p>O Agent Runtime do Google Cloud é a camada que executa seus agentes em produção. Scaling automático, health checks, restart automático. Pense nele como o Kubernetes dos agentes — você declara o que quer, a plataforma garante que acontece.</p> <p>Na prática, isso resolve:</p> <ul> <li><strong>Scaling automático</strong> — seu agente de atendimento recebe 50 requests às 3h da manhã e 5.000 às 10h. O runtime escala sem intervenção.</li> <li><strong>Session management</strong> — cada conversa mantém estado isolado. Usuário A não vê dados do Usuário B.</li> <li><strong>Graceful degradation</strong> — quando o LLM está lento, o runtime gerencia filas e timeouts em vez de derrubar tudo.</li> </ul> <h3>Memory Bank: Estado Cross-Session</h3> <p>Um dos problemas mais subestimados de agentes em produção é <strong>memória entre sessões</strong>. O usuário volta dois dias depois — o agente lembra do contexto anterior? Sem Memory Bank, você precisa reimplementar RAG do zero — vector store, chunking, retrieval — para cada agente.</p> <p>O Memory Bank resolve isso como primitiva de plataforma. O agente persiste fatos relevantes e os recupera automaticamente na próxima interação.</p> <pre><code>from google.adk.memory import MemoryBank # O agente lembra contexto cross-session automaticamente agent = Agent( name="customer-support", memory=MemoryBank( scope="per-user", retention="90d", auto_summarize=True ) ) </code></pre> <h3>Agentes Long-Running</h3> <p>Nem todo agente responde em segundos. Um agente de onboarding de cliente pode levar 3 dias coletando documentos. Um agente de análise financeira pode processar dados por horas.</p> <p>Agentes long-running <strong>pausam, retomam e sobrevivem a restarts</strong>. Se o servidor reinicia no meio de um workflow de 72 horas, o agente retoma de onde parou. Isso exige checkpointing de estado — algo que frameworks locais simplesmente não oferecem.</p> <h3>Agent Registry: Discovery Cross-Org</h3> <p>Quando você tem 5 agentes, organização é trivial. Quando tem 500 espalhados por 20 times, você precisa de um catálogo. O Agent Registry é esse catálogo: um registro central onde cada agente declara suas capacidades, e outros agentes (ou humanos) podem descobri-lo.</p> <p>Isso é particularmente relevante quando você adota <strong>A2A (Agent-to-Agent)</strong> — agentes chamando outros agentes. Sem registry, cada integração é point-to-point. Com registry, agentes se descobrem dinamicamente.</p> <h3>Agents CLI: Deploy One-Command</h3> <pre><code># Do notebook ao Cloud Run com um comando agents deploy expense-reviewer \ --runtime cloud-run \ --scaling min=1,max=50 \ --memory-bank enabled \ --registry publish </code></pre> <p>O Agents CLI elimina o gap entre "funciona localmente" e "está em produção". Um comando. Sem Dockerfiles manuais, sem terraform verboso, sem 47 steps no CI/CD.</p> <h3>Exemplo Concreto: O Agente de Despesas</h3> <p>Imagine o ciclo completo: você construiu um agente que revisa despesas (Build). Agora precisa escalá-lo:</p> <ol> <li>Deploy via CLI no Cloud Run</li> <li>Memory Bank habilitado para lembrar políticas de gasto por departamento</li> <li>Long-running habilitado para despesas que precisam de múltiplas aprovações</li> <li>Registrado no Agent Registry para que o agente de RH possa chamá-lo via A2A</li> <li>Dashboard de observabilidade com métricas de latência, taxa de aprovação e erros</li> </ol> <p>Em 15 minutos você saiu do notebook para um sistema que atende 200 funcionários simultaneamente. Isso é Scale.</p> <hr /> <h2>Govern: Guardrails Sem Sufocar a Inovação</h2> <p>É nesse estágio que a maioria dos projetos morre de verdade. Não por falta de tecnologia — por falta de <strong>governança proporcional</strong>. Times de segurança bloqueiam tudo. Ou, pior, não bloqueiam nada e um incidente acontece.</p> <p>Governança não é um portão binário (aberto/fechado). É um espectro que depende do risco.</p> <h3>Agent Gateway: Identidade por Agente</h3> <p>O Agent Gateway trata cada agente como um cidadão de primeira classe na sua rede. Cada agente tem identidade própria (não herda creds do desenvolvedor), se comunica via mTLS, e acessa recursos via IAM com least privilege.</p> <p>Na prática:</p> <ul> <li>O agente de FAQ só acessa a base de conhecimento pública</li> <li>O agente de despesas acessa o ERP com permissão de leitura e escrita limitada</li> <li>O agente de RH acessa dados sensíveis com auditoria completa</li> </ul> <p><strong>Identity-Aware Proxy (IAP)</strong> garante que agentes acessando APIs internas passam pela mesma camada de autenticação que humanos. Sem atalhos.</p> <h3>Model Armor: Proteção em Tempo Real</h3> <p>Model Armor é a camada que inspeciona inputs e outputs em busca de:</p> <ul> <li><strong>Prompt injection</strong> — tentativas de manipular o agente via input malicioso</li> <li><strong>Data leakage</strong> — o agente tentando exfiltrar dados sensíveis nas respostas</li> <li><strong>Jailbreak attempts</strong> — tentativas de fazer o agente ignorar suas instruções</li> </ul> <pre><code># Configuração de Model Armor armor: input_filters: - prompt_injection_detection: high - pii_redaction: enabled output_filters: - data_leakage_prevention: enabled - toxicity_check: medium actions: on_violation: block_and_log </code></pre> <p>O diferencial é que essa inspeção acontece em <strong>tempo real</strong>, não como auditoria pós-fato. O agente é impedido de responder antes de vazar dados.</p> <h3>Secure Agentic Coding: TDD para Agentes</h3> <p>O Google introduziu o conceito de <strong>Secure Agentic Coding</strong> — uma abordagem onde agentes que escrevem ou executam código passam por camadas de validação:</p> <ol> <li><strong>TDD (Test-Driven Development)</strong> — o agente gera testes antes do código</li> <li><strong>STRIDE threat model</strong> — análise automática de ameaças em cada tool call</li> <li><strong>PreToolUse gates</strong> — callbacks que validam parâmetros antes de executar uma tool</li> </ol> <pre><code>from google.adk.security import PreToolUseGate def validate_db_query(tool_name, params): """Gate que impede queries destrutivas""" if tool_name == "execute_sql": query = params.get("query", "").upper() if any(kw in query for kw in ["DROP", "DELETE", "TRUNCATE"]): raise SecurityViolation( f"Query destrutiva bloqueada: {query[:50]}..." ) agent.add_gate(PreToolUseGate(validate_db_query)) </code></pre> <h3>Governança Proporcional ao Risco</h3> <p>O princípio mais importante desse estágio: <strong>não trate um chatbot FAQ igual a um agente com acesso ao banco de dados de produção</strong>.</p> <p>Um agente que responde perguntas sobre documentação pública precisa de:</p> <ul> <li>Rate limiting</li> <li>Logging básico</li> <li>Filtro de toxicidade</li> </ul> <p>Já um agente que executa transações financeiras precisa de:</p> <ul> <li>Identidade mTLS</li> <li>Model Armor completo</li> <li>Human-in-the-loop para valores acima de um threshold</li> <li>Audit trail imutável</li> <li>PreToolUse gates em toda tool destrutiva</li> </ul> <p>A proporção é: <strong>quanto maior o blast radius de um erro, mais camadas de proteção</strong>. Parece óbvio escrito assim, mas na prática a maioria dos times aplica a mesma régua para todos os agentes — e o resultado é ou segurança insuficiente para agentes críticos, ou burocracia paralisante para agentes simples.</p> <p>Se você leu o post sobre <a href="/blog/por-que-agentes-ia-morrem-no-piloto">por que agentes morrem no piloto</a>, vai reconhecer esse padrão. A governança mal calibrada é uma das top 3 causas de morte de projetos. Times de segurança dizem "não pode" sem calibrar o risco, e o projeto morre na gaveta.</p> <hr /> <h2>Optimize: O Flywheel que Nunca Para</h2> <p>Deploy em produção não é o fim — é o começo do trabalho de verdade. Agentes em produção degradam. Modelos são atualizados. Usuários encontram edge cases. Sem um ciclo de otimização contínua, seu agente fica pior com o tempo, não melhor.</p> <h3>AutoRaters: Avaliação Automatizada em Escala</h3> <p>O Google DeepMind desenvolveu os <strong>AutoRaters</strong> — modelos que avaliam a qualidade de outputs de outros modelos. Em vez de humanos revisarem milhares de respostas manualmente, AutoRaters fazem triagem:</p> <ul> <li>Esta resposta está factualmente correta?</li> <li>O agente seguiu as instruções?</li> <li>A resposta contém alucinação?</li> <li>O tom é adequado para o contexto enterprise?</li> </ul> <p>AutoRaters não substituem avaliação humana, mas <strong>escalam</strong> ela. Humanos revisam os casos ambíguos que o AutoRater flagga, não cada resposta individual.</p> <h3>O Ciclo de 5 Estágios</h3> <p>A otimização contínua segue um pipeline estruturado:</p> <pre><code>OTel Traces → Inferência de Qualidade → Grade Automática → Clustering → Otimizações </code></pre> <ol> <li> <p><strong>OTel Traces</strong> — cada interação do agente gera traces OpenTelemetry: latência, tokens usados, tools chamadas, decisões tomadas.</p> </li> <li> <p><strong>Inferência de qualidade</strong> — AutoRaters processam esses traces e geram scores de qualidade por dimensão (factualidade, relevância, completude, segurança).</p> </li> <li> <p><strong>Grade automática</strong> — cada interação recebe uma nota. A distribuição ao longo do tempo mostra se o agente está melhorando ou degradando.</p> </li> <li> <p><strong>Clustering</strong> — interações com notas baixas são agrupadas por padrão. "70% das falhas são em perguntas sobre reembolso internacional" é mais acionável que "o agente tem accuracy de 82%".</p> </li> <li> <p><strong>Otimizações</strong> — baseado nos clusters, você ajusta prompts, adiciona tools, melhora exemplos ou atualiza dados. E o ciclo recomeça.</p> </li> </ol> <p>A pergunta-chave em toda otimização é: <strong>"você melhorou 3 exemplos ou quebrou 10 outros?"</strong> Sem um framework de avaliação automatizado, é impossível responder isso com confiança.</p> <h3>A2A Protocol: Pipelines Cross-Language</h3> <p>O <strong>Agent-to-Agent (A2A) protocol</strong> é o HTTP dos agentes. Ele padroniza como agentes de diferentes frameworks se comunicam. Para otimização, isso é fundamental — permite construir pipelines onde:</p> <ul> <li>Um agente ADK faz o processamento principal</li> <li>Um agente LangGraph faz avaliação de qualidade</li> <li>Um agente CrewAI faz a análise de clusters</li> </ul> <p>Cada time usa o framework que domina, e A2A conecta tudo.</p> <pre><code># Pipeline de otimização multi-framework via A2A pipeline: - agent: expense-reviewer # ADK protocol: a2a role: primary - agent: quality-evaluator # LangGraph protocol: a2a role: evaluator input: primary.output - agent: pattern-analyzer # CrewAI protocol: a2a role: analyzer input: evaluator.low_scores </code></pre> <h3>Multi-Framework: A Realidade das Organizações</h3> <p>Nenhuma organização grande usa um só framework. O time de ML usa LangGraph. O time de produto usa ADK. O time de dados usa CrewAI. A2A permite que isso funcione sem forçar migração.</p> <p>Otimização cross-framework significa que um agente avaliador pode monitorar agentes de qualquer stack. O pipeline de melhoria contínua é agnóstico ao framework de implementação.</p> <hr /> <h2>Como Esse Ciclo Se Aplica Fora do Google Cloud</h2> <p>Talvez você esteja pensando: "legal, mas eu uso AWS" ou "minha empresa está no Azure". O ponto central é este: <strong>os quatro estágios são universais. As implementações são específicas de cada plataforma.</strong></p> <h3>AWS Bedrock AgentCore</h3> <p>A AWS anunciou o AgentCore seguindo essa mesma lógica:</p> <ul> <li><strong>Build</strong> → Bedrock Agents com tool use</li> <li><strong>Scale</strong> → Runtime gerenciado, memory e identity</li> <li><strong>Govern</strong> → Guardrails, IAM por agente</li> <li><strong>Optimize</strong> → Evaluation framework integrado</li> </ul> <h3>Azure AI Foundry</h3> <p>A Microsoft convergiu para o mesmo modelo:</p> <ul> <li><strong>Build</strong> → Azure AI Agent Service, Semantic Kernel</li> <li><strong>Scale</strong> → Managed runtime, session state</li> <li><strong>Govern</strong> → Content Safety, Azure RBAC</li> <li><strong>Optimize</strong> → AI Studio evaluations</li> </ul> <h3>LangGraph Platform</h3> <p>Até plataformas open-source seguem o padrão:</p> <ul> <li><strong>Build</strong> → LangGraph SDK</li> <li><strong>Scale</strong> → LangGraph Cloud, checkpointing</li> <li><strong>Govern</strong> → LangSmith guardrails (mais limitado)</li> <li><strong>Optimize</strong> → LangSmith analytics e datasets</li> </ul> <h3>O Framework de Decisão</h3> <p>Mais do que a plataforma em si, o que importa é ter <strong>uma resposta clara para cada estágio</strong>:</p> <table> <thead> <tr> <th>Estágio</th> <th>Pergunta-chave</th> </tr> </thead> <tbody> <tr> <td>Build</td> <td>Como desenvolvedores criam e testam agentes localmente?</td> </tr> <tr> <td>Scale</td> <td>Como o agente vai de 1 a 10.000 requests sem reescrever código?</td> </tr> <tr> <td>Govern</td> <td>Como controlamos acesso, auditamos ações e prevenimos incidentes?</td> </tr> <tr> <td>Optimize</td> <td>Como sabemos se o agente está melhorando ou degradando ao longo do tempo?</td> </tr> </tbody> </table> <p>Se você tem respostas concretas (não "a gente resolve depois") para as quatro, está no caminho certo. Se alguma está em branco, é ali que seu agente vai morrer.</p> <p>A analogia com DevOps dez anos atrás é inevitável. Em 2014, muitas equipes sabiam escrever código mas não sabiam operar. CI/CD, observabilidade, infrastructure-as-code — tudo isso virou table stakes. Estamos no mesmo ponto com agentes: <strong>AgentOps está se tornando table stakes</strong>, e o ciclo Build→Scale→Govern→Optimize é o framework mental que organiza essa disciplina.</p> <hr /> <h2>Próximos Passos</h2> <p>Se esse post te deu a visão macro do ciclo, aqui estão os caminhos para aprofundar cada estágio:</p> <h3>Build</h3> <ul> <li><a href="/blog/google-adk">Google ADK: Guia Prático para Começar</a> — setup, primeiro agente, tools e deploy local</li> <li><a href="/blog/agent-frameworks-vs-coding-agents">Agent Frameworks vs Coding Agents: Quando Usar Cada Um</a> — entenda quando um framework faz sentido e quando código puro é melhor</li> </ul> <h3>Scale &amp; Govern</h3> <ul> <li><a href="/blog/por-que-agentes-ia-morrem-no-piloto">Por Que Agentes Morrem no Piloto</a> — os 7 padrões de falha que matam agentes antes de chegarem a produção</li> <li><a href="/blog/ferramentas-tools-e-mcp-servers">MCP na Prática</a> — como Model Context Protocol resolve o problema de acesso a dados em escala</li> </ul> <h3>Optimize</h3> <ul> <li><a href="/blog/google-adk">Guia Google ADK</a> — inclui seção sobre AutoRaters e avaliação de qualidade</li> </ul> <hr /> <h3>Quer ajuda para implementar esse ciclo?</h3> <p>O ciclo Build→Scale→Govern→Optimize exige decisões técnicas e organizacionais que variam muito conforme o time, stack, compliance e budget. Se você está montando ou escalando uma prática de agentes enterprise e quer um parceiro técnico que já passou por esse caminho, <a href="https://ft.ia.br">vamos conversar</a>.</p> <hr /> <p><em>Baseado no artigo "13 hands-on demos to build on Gemini Enterprise Agent Platform" (Google Cloud, 17 de julho de 2026) e em experiência prática com deploys enterprise de agentes de IA.</em></p> Agents CLI: Guia Definitivo da CLI que Transforma Seu Coding Agent em Especialista Google ADKhttps://agentify.ia.br/blog/agents-cli-google/https://agentify.ia.br/blog/agents-cli-google/Guia completo do Agents CLI — instale no Claude Code, Codex ou Antigravity e ganhe 7 skills para scaffold, deploy, evaluate e monitor agentes no Agent Platform.Sat, 18 Jul 2026 00:00:00 GMT<blockquote> <p><strong>TL;DR — O Agents CLI é uma CLI open-source do Google que se instala no seu coding agent (Claude Code, Codex, Antigravity) e injeta 7 skills especializadas para scaffold, evaluate, deploy, monitor, register, secure e iterate agentes ADK. Você descreve o que quer em plain English, o coding agent faz o resto. Zero context-switch. Tudo do editor.</strong></p> </blockquote> <h2>Overview: O que é o Agents CLI</h2> <p>Imagine que seu coding agent — Claude Code, Codex CLI, Google Antigravity — acordasse amanhã sabendo tudo sobre o Agent Development Kit (ADK), o Agent Platform, Cloud Trace, AutoRaters e o Agent Registry.</p> <p>Não sabendo "em teoria". Sabendo executar. Scaffold, deploy, evaluate, monitor. Tudo.</p> <p>É exatamente isso que o <strong>Agents CLI</strong> faz.</p> <h3>O conceito</h3> <p>O Agents CLI não é mais uma CLI que você opera manualmente no terminal. É uma CLI que <strong>se instala dentro do seu coding agent</strong> e expõe 7 skills especializadas. Quando você pede "crie um agente de atendimento ao cliente com ADK", o coding agent já sabe como fazer — porque o Agents CLI injetou o conhecimento.</p> <p>A proposta: <strong>descreva o que quer em plain English (ou português mesmo) e o coding agent cuida do scaffold, evaluate, deploy e monitor</strong>. Sem sair do editor. Sem abrir console. Sem copiar comandos de documentação.</p> <h3>O diferencial</h3> <p>Existem dezenas de CLIs no ecossistema de agentes. O que torna o Agents CLI diferente é o público-alvo: não é para humanos operarem diretamente — é para <strong>coding agents operarem em seu nome</strong>.</p> <p>Você nunca precisa aprender a sintaxe. Você nunca precisa lembrar flags. Você conversa com seu coding agent, e ele usa as skills por baixo.</p> <h3>Compatibilidade</h3> <p>O Agents CLI funciona com qualquer coding agent que suporte extensibilidade:</p> <ul> <li><strong>Claude Code</strong> — via instalação de skills/extensões</li> <li><strong>Codex CLI</strong> — via sistema de plugins</li> <li><strong>Google Antigravity</strong> — integração nativa</li> <li><strong>Qualquer coding agent</strong> com suporte a instruções externas</li> </ul> <h3>Open-source e gratuito</h3> <p>O Agents CLI é <strong>open-source</strong> e <strong>gratuito</strong>. Você paga apenas pelos recursos de infraestrutura que usar no Google Cloud (compute, storage, etc.) — a CLI em si não tem custo.</p> <p>🔗 <strong>Documentação oficial:</strong> <a href="https://google.github.io/agents-cli/guide/getting-started/">https://google.github.io/agents-cli/guide/getting-started/</a></p> <hr /> <h2>Tutorial: Instalando e Usando o Agents CLI</h2> <p>Vamos do zero ao agente em produção. Passo a passo, sem enrolação.</p> <h3>Pré-requisitos</h3> <p>Antes de começar, você precisa de:</p> <ol> <li><strong>Um coding agent compatível</strong> — Claude Code, Codex CLI ou Google Antigravity instalado e funcionando</li> <li><strong>Conta Google Cloud</strong> — com um projeto ativo e billing habilitado (para deploy)</li> <li><strong>gcloud CLI configurado</strong> — autenticado e com projeto default setado</li> </ol> <pre><code># Verificar se gcloud está configurado gcloud auth list gcloud config get-value project </code></pre> <p>Se o gcloud não estiver configurado, rode:</p> <pre><code>gcloud auth login gcloud config set project SEU_PROJETO_ID </code></pre> <h3>Passo 1: Instalação</h3> <p>A instalação é diferente para cada coding agent, mas igualmente simples.</p> <h4>Claude Code</h4> <pre><code># Instalar o Agents CLI como extensão no Claude Code claude code --install-skill agents-cli # Ou via configuração manual echo '{"skills": ["google/agents-cli"]}' &gt;&gt; ~/.claude/skills.json </code></pre> <h4>Codex CLI</h4> <pre><code># Instalar via plugin system do Codex codex plugin install @google/agents-cli # Verificar instalação codex plugin list </code></pre> <h4>Google Antigravity</h4> <pre><code># Integração nativa — basta atualizar antigravity update # O Agents CLI já vem incluído nas versões recentes antigravity skills list </code></pre> <p>Após a instalação, seu coding agent ganha <strong>7 skills novas</strong> automaticamente. Você pode verificar pedindo ao agent:</p> <pre><code>"Liste as skills do Agents CLI disponíveis" </code></pre> <p>O agent vai responder com: scaffold, evaluate, deploy, monitor, register, secure e iterate.</p> <h3>Passo 2: Scaffold de um Novo Agente</h3> <p>Aqui é onde a mágica começa. Ao invés de criar manualmente a estrutura de projeto, você <strong>descreve o que quer</strong>.</p> <p>No seu coding agent, diga:</p> <pre><code>"Crie um agente de atendimento ao cliente com ADK. Ele deve responder perguntas sobre pedidos, processar devoluções e escalar para humanos quando necessário." </code></pre> <p>O Agents CLI (via skill <code>scaffold</code>) vai gerar:</p> <pre><code>customer-support-agent/ ├── agent.py ← Lógica principal do agente ├── tools/ │ ├── order_lookup.py ← Tool para consultar pedidos │ ├── return_process.py ← Tool para processar devoluções │ └── escalation.py ← Tool para escalar para humano ├── prompts/ │ └── system.txt ← System prompt otimizado ├── config/ │ ├── agent.yaml ← Configuração ADK │ └── deploy.yaml ← Configuração de deploy ├── eval/ │ ├── test_cases.json ← Casos de teste iniciais │ └── eval_config.yaml ← Configuração dos AutoRaters ├── requirements.txt └── README.md </code></pre> <p>Não é um template genérico. O scaffold é <strong>contextualizado</strong> pela descrição que você deu. As tools já têm a estrutura correta, o system prompt já menciona os casos de uso, e os test cases já cobrem os cenários descritos.</p> <p>Você pode iterar imediatamente:</p> <pre><code>"Adicione uma tool para consultar status de entrega via API dos Correios" </code></pre> <p>E o coding agent atualiza o projeto mantendo a coerência.</p> <h3>Passo 3: Evaluate com AutoRaters</h3> <p>Antes de colocar em produção, você precisa avaliar se o agente funciona bem. O Agents CLI integra os <strong>AutoRaters</strong> — os mesmos sistemas de avaliação usados internamente pelo Google e DeepMind.</p> <p>Peça ao coding agent:</p> <pre><code>"Avalie o agente de atendimento ao cliente. Rode os AutoRaters contra os casos de teste." </code></pre> <p>O ciclo de avaliação segue 5 etapas:</p> <h4>1. Prepare Data</h4> <p>O Agents CLI prepara os dados de teste. Se você não tem casos prontos, ele gera automaticamente baseado na descrição do agente:</p> <pre><code>"Gere 20 casos de teste para o agente, cobrindo happy paths e edge cases" </code></pre> <h4>2. Inference</h4> <p>Roda o agente contra cada caso de teste e captura as respostas completas (incluindo chain-of-thought, tool calls e outputs).</p> <h4>3. Grade</h4> <p>Os AutoRaters avaliam cada resposta em múltiplas dimensões:</p> <ul> <li><strong>Correção factual</strong> — a resposta está certa?</li> <li><strong>Aderência à instrução</strong> — seguiu o system prompt?</li> <li><strong>Qualidade da tool use</strong> — usou as tools certas, na ordem certa?</li> <li><strong>Safety</strong> — não gerou conteúdo problemático?</li> <li><strong>Tone</strong> — manteve o tom esperado?</li> </ul> <h4>4. Analyze</h4> <p>Agrega os resultados e identifica padrões de falha:</p> <pre><code>📊 Resultados da Avaliação: - Correção: 92% (18/20 cases passed) - Tool Use: 85% (17/20 correct tool selection) - Safety: 100% (0 violations) - Tone: 95% (19/20 on-brand) ⚠️ Falhas concentradas em: - Casos de devolução com múltiplos itens (2 falhas) - Consulta de pedido com ID inválido (1 falha) </code></pre> <h4>5. Optimize</h4> <p>Com base nas falhas identificadas, o coding agent sugere (e implementa) melhorias:</p> <pre><code>"Otimize o agente para lidar melhor com devoluções de múltiplos itens" </code></pre> <p>O Agents CLI ajusta o system prompt, melhora a tool de devoluções e re-roda a avaliação para confirmar a melhoria.</p> <h3>Passo 4: Deploy para Agent Runtime</h3> <p>Chegou a hora de ir para produção. O deploy com Agents CLI é um comando — mas um comando inteligente.</p> <p>Peça ao coding agent:</p> <pre><code>"Faça deploy do agente de atendimento para produção" </code></pre> <h4>Dry Run primeiro (sempre)</h4> <p>O Agents CLI <strong>sempre</strong> faz um dry run antes do deploy real:</p> <pre><code>🔍 Dry Run — Deploy Preview: Target: Agent Runtime (us-central1) Project: meu-projeto-gcp Agent: customer-support-agent v1.0.0 Resources que serão criados: - Cloud Run service: customer-support-agent - Cloud Trace: auto-configured - Cloud Logging: auto-configured - BigQuery dataset: agent_analytics - Agent Registry entry: customer-support-agent Estimated cost: ~$0.03/1000 requests (compute only) Proceed with deploy? [waiting for confirmation] </code></pre> <p>Só depois da sua confirmação o deploy acontece:</p> <pre><code>"Sim, pode deployar" </code></pre> <h4>O que acontece no deploy</h4> <p>O Agents CLI não apenas faz deploy do código. Ele configura <strong>automaticamente</strong>:</p> <ol> <li><strong>Cloud Trace</strong> — tracing distribuído para cada request ao agente</li> <li><strong>Cloud Logging</strong> — logs estruturados com contexto de sessão</li> <li><strong>BigQuery Agent Analytics</strong> — dataset para métricas de uso e performance</li> <li><strong>Agent Registry</strong> — registro do agente para discovery por outros serviços</li> </ol> <pre><code>✅ Deploy concluído! Endpoint: https://customer-support-agent-xyz.run.app Registry: projects/meu-projeto/agents/customer-support-agent Dashboard: https://console.cloud.google.com/agent-analytics/... Observabilidade ativa: - Trace: ✅ - Logging: ✅ - Analytics: ✅ </code></pre> <h3>Passo 5: Monitor em Produção</h3> <p>Com o agente em produção, o Agents CLI mantém a observabilidade ativa por padrão.</p> <h4>Observabilidade automática</h4> <p>Você não precisa configurar nada. No momento do deploy, o Agents CLI já conectou:</p> <ul> <li><strong>Cloud Trace</strong> — cada interação do agente gera um trace completo (latência por step, tool calls, LLM calls)</li> <li><strong>Cloud Logging</strong> — logs estruturados com session_id, user_id, intent_detected, tools_used</li> <li><strong>BigQuery Agent Analytics</strong> — tabela de eventos para análise custom</li> </ul> <h4>Consultar métricas via coding agent</h4> <pre><code>"Como está o agente de atendimento nas últimas 24h?" </code></pre> <p>O coding agent consulta o BigQuery e responde:</p> <pre><code>📊 Customer Support Agent — Últimas 24h: Requests: 1,847 Latência média: 2.3s (P99: 4.8s) Taxa de sucesso: 96.2% Escalações para humano: 12.4% Tool errors: 0.8% Top intents: 1. Consulta de pedido (43%) 2. Status de entrega (28%) 3. Devolução (18%) 4. Outros (11%) </code></pre> <h4>Alertas e dashboards</h4> <p>O Agents CLI configura alertas básicos automaticamente:</p> <ul> <li><strong>Error rate &gt; 5%</strong> — alerta imediato</li> <li><strong>Latência P99 &gt; 10s</strong> — alerta de performance</li> <li><strong>Tool failure rate &gt; 3%</strong> — alerta de integração</li> </ul> <p>Você pode customizar pedindo ao coding agent:</p> <pre><code>"Adicione um alerta quando a taxa de escalação para humano passar de 20%" </code></pre> <hr /> <h2>Deep Dive: As 7 Skills do Agents CLI</h2> <p>O tutorial mostrou o fluxo ponta a ponta. Aqui vamos olhar cada skill individualmente — o que ela resolve, como pensa, e onde brilha (ou não).</p> <h3>1. scaffold — O ponto de partida</h3> <p>A <code>scaffold</code> traduz uma descrição em linguagem natural numa estrutura de projeto ADK completa. Não estamos falando de um <code>mkdir</code> glorificado: ela interpreta requisitos, cria tools coerentes com o que você descreveu, gera system prompt contextualizado, monta configuração de deploy e já entrega test cases iniciais para avaliação.</p> <p>O detalhe que faz diferença: se você descreve "um agente de triagem que classifica tickets em P1/P2/P3", as tools geradas já têm a lógica de classificação, não apenas stubs vazios.</p> <pre><code>"Scaffold um agente de triagem de suporte técnico que classifica tickets em P1/P2/P3, extrai informações relevantes e roteia para o time correto" </code></pre> <p>Mesmo que você já tenha código parcial, a scaffold complementa o que falta sem sobrescrever o existente. Na prática, funciona como um par que monta a infraestrutura enquanto você foca na lógica de negócio.</p> <h3>2. evaluate — O gatekeeper antes do deploy</h3> <p>Ninguém deveria deployar um agente sem antes responder: "ele funciona?" A <code>evaluate</code> roda os AutoRaters do Google/DeepMind contra o agente — os mesmos sistemas usados internamente para avaliar modelos.</p> <p>O ciclo é denso: gera ou usa test cases existentes, executa inference do agente contra cada caso, aplica AutoRaters multi-dimensionais (correção, safety, tone, tool use), produz relatório com métricas agregadas e identifica padrões de falha com sugestões de correção.</p> <pre><code>"Avalie o agente com foco em safety e correção factual. Use os 50 test cases do diretório eval/" </code></pre> <p>Uma observação prática: rode avaliações não só antes do deploy, mas depois de qualquer mudança significativa no prompt ou nas tools. O que parece uma alteração inofensiva às vezes quebra edge cases que estavam passando.</p> <h3>3. deploy — Um comando, toda a infra</h3> <p>A skill que mais encurta distância entre "funciona no meu laptop" e "funciona em produção". Ela valida o projeto (lint, type check, dependency check), faz dry run mostrando exatamente o que será criado, executa o deploy para Cloud Run via Agent Runtime e configura Cloud Trace, Cloud Logging e BigQuery automaticamente.</p> <pre><code>"Deploy o agente para produção em us-east1. Use a configuração de staging para dry run primeiro." </code></pre> <p>Dois detalhes importantes. Primeiro: ela chama <code>register</code> e <code>secure</code> internamente, então você não precisa lembrar de fazer essas etapas separadamente. Segundo: o dry run é obrigatório — não existe "deploy direto" sem preview.</p> <h3>4. monitor — Olhos no agente 24/7</h3> <p>Depois do deploy, <code>monitor</code> vira a skill do dia-a-dia. Ela configura dashboards no Cloud Monitoring, cria alertas baseados em thresholds, consulta BigQuery Agent Analytics sob demanda, gera relatórios de performance periódicos e identifica degradação de qualidade em produção.</p> <pre><code>"Mostre as métricas do agente na última semana. Destaque qualquer degradação vs semana anterior." </code></pre> <p>O uso mais valioso não é ver métricas bonitas — é pegar degradações silenciosas. Um agente pode manter 95% de sucesso geral e estar falhando em 40% de um intent específico. O <code>monitor</code> conectado ao BigQuery revela isso.</p> <h3>5. register — Tornando o agente descobrível</h3> <p>Agentes que existem isolados são úteis. Agentes que outros serviços podem descobrir e consumir são mais úteis. A <code>register</code> cria uma entrada no Agent Registry com metadata completo: capabilities, inputs/outputs, protocolos suportados, versionamento semântico e documentação de API gerada automaticamente.</p> <pre><code>"Registre o agente no Agent Registry com versão 1.2.0. Ele aceita requests JSON e retorna markdown." </code></pre> <p>Na prática, a skill <code>deploy</code> já chama <code>register</code> internamente. O uso manual faz sentido quando você precisa atualizar metadata sem redeployar — por exemplo, marcar uma versão como deprecated ou atualizar a descrição de capabilities.</p> <h3>6. secure — A camada que você não pode esquecer</h3> <p>Expor um agente para usuários externos sem segurança configurada é pedir problemas. A <code>secure</code> resolve isso: configura Agent Gateway como proxy de segurança, ativa Model Armor para filtrar inputs/outputs perigosos, configura mTLS para comunicação entre serviços, define rate limiting e quotas, aplica políticas de acesso (IAM) e audita conformidade.</p> <pre><code>"Configure segurança para o agente de atendimento. Rate limit de 100 req/min por usuário, Model Armor ativo para PII detection." </code></pre> <p>A skill <code>deploy</code> aplica segurança básica por padrão. A <code>secure</code> serve para ir além: quando seu agente lida com dados sensíveis, quando é exposto publicamente, ou quando compliance exige configurações específicas.</p> <h3>7. iterate — Melhoria contínua com evidência</h3> <p>A última skill fecha o ciclo. Em vez de melhorar o agente no escuro, <code>iterate</code> puxa logs de falhas recentes do Cloud Logging, agrupa por padrão (mesmo tipo de input, mesma tool, mesmo intent), propõe correções específicas, implementa no código, re-avalia com AutoRaters e faz deploy da versão corrigida.</p> <pre><code>"O agente está falhando em perguntas sobre política de cancelamento. Itere para melhorar." </code></pre> <p>É a diferença entre "acho que o agente precisa de ajuste" e "o agente falhou 12 vezes neste pattern, aqui está a correção testada". Use quando o monitor apontar degradação, ou como prática regular — toda sexta-feira, por exemplo.</p> <hr /> <h3>Como Funciona Por Baixo</h3> <p>O Agents CLI não é mágico — é bem arquitetado.</p> <p>Quando você instala o Agents CLI no seu coding agent, ele injeta <strong>instruções estruturadas</strong> que o agent passa a entender. Cada skill é um conjunto de:</p> <ol> <li><strong>Trigger patterns</strong> — quando ativar a skill (ex: "deploy", "avalie", "scaffolde")</li> <li><strong>Procedure</strong> — sequência de comandos gcloud/adk para executar</li> <li><strong>Validation</strong> — checks de pré e pós-execução</li> <li><strong>Error handling</strong> — o que fazer quando algo falha</li> </ol> <p>Quando você pede "deploy meu agente", o coding agent:</p> <ol> <li>Reconhece o trigger → skill <code>deploy</code></li> <li>Lê o procedimento da skill</li> <li>Executa os comandos gcloud/adk no terminal</li> <li>Valida o resultado</li> <li>Reporta sucesso ou falha com contexto</li> </ol> <p>A tradução é transparente. Se quiser ver exatamente o que está acontecendo:</p> <pre><code>"Mostre os comandos que o deploy vai executar antes de rodar" </code></pre> <p>E o coding agent lista:</p> <pre><code># Comandos que serão executados pela skill deploy: gcloud run deploy customer-support-agent \ --source . \ --region us-central1 \ --allow-unauthenticated \ --set-env-vars="AGENT_VERSION=1.0.0" gcloud agent-platform register \ --agent-id customer-support-agent \ --version 1.0.0 \ --capabilities "text-generation,tool-use" bq mk --dataset agent_analytics gcloud logging sinks create agent-logs \ bigquery.googleapis.com/projects/meu-projeto/datasets/agent_analytics </code></pre> <p>Nenhuma caixa preta.</p> <hr /> <h2>Avaliação: Spider Chart</h2> <p>Avaliamos o Agents CLI em 8 eixos relevantes para uma CLI de desenvolvimento de agentes:</p> <table> <thead> <tr> <th>Eixo</th> <th>Score</th> <th>Justificativa</th> </tr> </thead> <tbody> <tr> <td>Facilidade de Início</td> <td>9/10</td> <td>Instala em 1 minuto, zero config adicional necessária</td> </tr> <tr> <td>Integração com Coding Agents</td> <td>10/10</td> <td>Funciona em Claude Code, Codex e Antigravity nativamente</td> </tr> <tr> <td>Produção/Deploy</td> <td>9/10</td> <td>One-command deploy com observabilidade auto-configurada</td> </tr> <tr> <td>Avaliação/Testing</td> <td>9/10</td> <td>AutoRaters de nível Google/DeepMind integrados</td> </tr> <tr> <td>Governança</td> <td>8/10</td> <td>Agent Gateway + Model Armor configurados automaticamente</td> </tr> <tr> <td>Documentação</td> <td>7/10</td> <td>Recém-lançado, documentação em crescimento ativo</td> </tr> <tr> <td>Flexibilidade</td> <td>7/10</td> <td>Focado em GCP/ADK — não é genérico multi-cloud</td> </tr> <tr> <td>Comunidade</td> <td>6/10</td> <td>Projeto novo, comunidade ainda em formação</td> </tr> </tbody> </table> <h3>Score Geral: 8.1/10</h3> <p>O Agents CLI acerta onde importa: <strong>a experiência de desenvolvimento</strong>. O fluxo "descreva → scaffold → evaluate → deploy → monitor" é o mais fluido que existe hoje para agentes ADK.</p> <p>Os pontos fracos — documentação e comunidade — são temporais. O projeto é novo. A limitação de flexibilidade (GCP-only) é arquitetural e provavelmente permanente, mas se você já está no ecossistema Google, isso não é um problema; é coerência.</p> <hr /> <h2>Prós e Contras</h2> <h3>✅ Prós</h3> <p><strong>Zero context-switch</strong> — Tudo acontece no seu editor. Sem console do GCP, sem navegar documentação, sem copiar comandos. O coding agent é a interface para tudo.</p> <p><strong>Lifecycle completo em 7 skills</strong> — Do scaffold ao monitor, passando por evaluate, deploy, register, secure e iterate. Cada etapa crítica do desenvolvimento de agentes tem uma skill dedicada.</p> <p><strong>AutoRaters sem custo adicional</strong> — Os mesmos sistemas de avaliação usados internamente pelo Google e DeepMind, de graça. Honestamente, isso sozinho já justifica instalar o Agents CLI — a alternativa é construir sua própria pipeline de avaliação do zero.</p> <p><strong>Agnóstico de coding agent</strong> — Claude Code, Codex, Antigravity — funciona em todos. Você não fica preso a um editor.</p> <p><strong>Observabilidade que vem de fábrica</strong> — Cloud Trace, Cloud Logging e BigQuery Agent Analytics configurados no deploy. Quantos projetos seus estão em produção sem observabilidade porque "ia configurar depois"?</p> <p><strong>Dry run obrigatório</strong> — Toda operação destrutiva mostra preview antes de executar. Parece óbvio, mas a quantidade de CLIs que não fazem isso é impressionante.</p> <p><strong>Open-source</strong> — Código aberto, sem licença proprietária, sem vendor lock na ferramenta em si.</p> <h3>❌ Contras</h3> <p><strong>GCP only. Ponto.</strong> — Se você usa AWS ou Azure, o Agents CLI não vai te ajudar diretamente. Não existe plano anunciado para suportar AWS Bedrock Agents, Azure AI Agent Service ou outras plataformas.</p> <p><strong>Projeto novo, arestas esperadas</strong> — Como todo lançamento recente, prepare-se para bugs ocasionais, breaking changes e gaps de funcionalidade. Nada que impeça o uso, mas calibre expectativas.</p> <p><strong>Documentação rasa em cenários avançados</strong> — O básico está coberto. Cenários de edge case, configurações não-standard, debugging complexo? Você vai ter que experimentar. A comunidade ainda não produziu volume significativo de conteúdo auxiliar.</p> <p><strong>Exige gcloud configurado</strong> — Se sua máquina de dev não tem gcloud setup, é um pré-requisito antes de qualquer skill funcionar. Não é complexo, mas pode travar quem está testando rápido.</p> <h3>Veredicto</h3> <p><strong>Para quem já usa GCP + ADK: instale hoje.</strong> A redução de fricção é grande. O que antes levava horas de configuração manual agora acontece em minutos, conversando com seu coding agent.</p> <p><strong>Para quem usa outro cloud: vale estudar o modelo.</strong> A ideia de CLI que injeta skills em coding agents é poderosa independente do vendor. O padrão vai se espalhar.</p> <hr /> <h2>Quando Usar o Agents CLI</h2> <h3>✅ Use quando:</h3> <ul> <li><strong>Você já usa Google Cloud</strong> como cloud principal</li> <li><strong>Quer deploy rápido</strong> de agentes ADK sem configuração manual</li> <li><strong>Sua equipe usa coding agents</strong> (Claude Code, Codex, Antigravity) no dia-a-dia</li> <li><strong>Precisa de avaliação</strong> rigorosa com AutoRaters antes de ir para produção</li> <li><strong>Quer observabilidade</strong> sem configurar manualmente Trace/Logging/Analytics</li> <li><strong>Está começando com ADK</strong> e quer o caminho mais rápido do zero ao deploy</li> <li><strong>Tem múltiplos agentes</strong> e quer padronizar o fluxo de desenvolvimento</li> </ul> <h3>❌ NÃO use quando:</h3> <ul> <li><strong>Sua stack é AWS ou Azure</strong> — o Agents CLI não suporta outros clouds</li> <li><strong>Seus agentes não são ADK</strong> — se usa LangChain, CrewAI, AutoGen puro, o Agents CLI não é o tool certo</li> <li><strong>Precisa de multi-cloud</strong> — deployar o mesmo agente em GCP + AWS não é suportado</li> <li><strong>Não usa coding agents</strong> — se você prefere operar CLIs diretamente, use o gcloud + adk CLI padrão</li> <li><strong>Quer controle granular</strong> sobre cada flag de deploy — o Agents CLI abstrai muita coisa, o que pode incomodar quem quer controlar tudo manualmente</li> </ul> <hr /> <h2>Próximos Passos</h2> <p>Se o Agents CLI te interessou, esses conteúdos complementam:</p> <ul> <li><strong><a href="/blog/google-adk">Guia Definitivo do Google ADK</a></strong> — entenda o framework por baixo do Agents CLI</li> <li><strong><a href="/blog/ciclo-build-scale-govern-optimize">Ciclo Build-Scale-Govern-Optimize</a></strong> — a filosofia do Agent Platform que o Agents CLI implementa</li> <li><strong><a href="https://google.github.io/agents-cli/guide/getting-started/">Documentação oficial do Agents CLI</a></strong> — referência técnica completa</li> </ul> <h3>Experimente hoje</h3> <p>O caminho mais rápido:</p> <pre><code># 1. Instale no seu coding agent (exemplo: Claude Code) claude code --install-skill agents-cli # 2. Peça para scaffoldar um agente simples # "Crie um agente que responde perguntas sobre meu produto" # 3. Avalie # "Rode os AutoRaters contra o agente" # 4. Se passou, deploy # "Deploy para produção" </code></pre> <p>Em menos de 30 minutos você vai do zero ao agente em produção com observabilidade completa. Sem exagero — o gargalo é decidir o que o agente faz, não configurar infra.</p> <hr /> <p><em>Quer acompanhar as novidades do ecossistema de agentes AI? Acesse <a href="https://ft.ia.br">ft.ia.br</a> para análises, guias e tutoriais sobre as ferramentas que estão moldando o futuro do desenvolvimento de software.</em></p> Google ADK: Guia Definitivo para Agentes Multi-Linguagemhttps://agentify.ia.br/blog/google-adk/https://agentify.ia.br/blog/google-adk/Guia completo do Google ADK — framework open-source em Python, TypeScript, Go, Java e Kotlin para construir agentes de IA enterprise.Sat, 18 Jul 2026 00:00:00 GMT<blockquote> <p><strong>TL;DR</strong> — O Google ADK é um framework open-source (Apache 2.0) para construir, debugar e deployar agentes de IA. Funciona em cinco linguagens (Python, TypeScript, Go, Java, Kotlin), integra nativamente com Vertex AI, suporta MCP e o protocolo A2A para comunicação entre agentes, e vem com uma UI de debugging embutida. Se você já opera dentro do ecossistema Google Cloud, o ADK elimina semanas de boilerplate. Se não opera — continue lendo mesmo assim, porque a arquitetura vale o estudo.</p> </blockquote> <hr /> <h2>Overview: O que é o Google ADK e por que ele existe</h2> <p>O Google entrou na corrida dos agent frameworks em 2025 com o Agent Development Kit. Enquanto CrewAI (2023) e LangGraph (2024) já disputavam atenção, o ADK chegou com uma proposta diferente: não ser apenas mais uma lib Python, mas um framework multi-linguagem com runtime de produção integrado ao Google Cloud.</p> <p>Em maio de 2026, o ADK Python 2.0 alcançou General Availability. Hoje o framework acumula mais de sete milhões de downloads e conta com repositórios oficiais em Python, TypeScript, Go, Java e Kotlin. A Google usa internamente o mesmo framework para construir os agentes dentro do Agentspace e do Customer Engagement Suite — não é um side project jogado no GitHub para ganhar stars.</p> <p>O pitch oficial, direto do site: <em>"Build production agents, not prototypes."</em> E honestamente? A arquitetura entrega o que promete.</p> <p>A LangChain resume bem: <em>"Choose Google ADK if you're GCP-native and want an opinionated, batteries-included agent runtime with built-in debugging UIs."</em> Essa frase captura a essência — opinionated, batteries-included, debugging nativo. Se você já navega o ecossistema Google, o ADK não é uma escolha; é quase uma consequência natural.</p> <hr /> <h2>Tutorial: Seu primeiro agente ADK em 10 minutos</h2> <p>Chega de contexto. Vamos colocar um agente pra rodar.</p> <h3>Pré-requisitos</h3> <ul> <li>Python 3.9+ (para o exemplo; funciona igual em Java 17+, Go 1.21+, Node 18+)</li> <li>Uma API key do Gemini (pegue em <a href="https://ai.google.dev">ai.google.dev</a>)</li> <li>Terminal com acesso à internet</li> </ul> <h3>Passo 1: Instalação</h3> <pre><code># Recomendo usar um virtual environment python -m venv .venv &amp;&amp; source .venv/bin/activate # Instalar o ADK pip install google-adk </code></pre> <p>Para as outras linguagens:</p> <pre><code># TypeScript/Node npm install @google/adk # Go go get google.golang.org/adk # Java — adicione ao pom.xml # &lt;dependency&gt; # &lt;groupId&gt;com.google.adk&lt;/groupId&gt; # &lt;artifactId&gt;google-adk&lt;/artifactId&gt; # &lt;/dependency&gt; </code></pre> <h3>Passo 2: Criar o projeto</h3> <p>O ADK vem com CLI própria. Crie a estrutura do projeto:</p> <pre><code>adk create my_agent cd my_agent </code></pre> <p>Isso gera a seguinte árvore:</p> <pre><code>my_agent/ ├── __init__.py ├── agent.py └── .env </code></pre> <h3>Passo 3: Definir o agente</h3> <p>Abra <code>agent.py</code> e substitua pelo seguinte:</p> <pre><code>from google.adk import Agent from google.adk.tools import google_search root_agent = Agent( name="pesquisador", model="gemini-2.0-flash", instruction="""Você é um assistente de pesquisa técnica. Quando o usuário perguntar sobre um tópico, use o Google Search para encontrar informações atualizadas e sintetize em português.""", tools=[google_search], ) </code></pre> <p>Repare: nome, modelo, instrução, ferramentas. Quatro campos. Sem YAML de 200 linhas, sem chains encadeados, sem abstrações sobre abstrações. O ADK abraça a filosofia <em>code-first</em> — seu agente é código Python normal.</p> <h3>Passo 4: Configurar a API key</h3> <pre><code>echo "GOOGLE_API_KEY=sua-chave-aqui" &gt; .env </code></pre> <h3>Passo 5: Rodar</h3> <p>Duas opções:</p> <pre><code># CLI interativa (terminal) adk run my_agent # Web UI com debugging visual adk web my_agent </code></pre> <p>A segunda opção abre um browser em <code>localhost:8000</code> com a interface de desenvolvimento — traces, eventos, estado da sessão, tudo visível em tempo real.</p> <p>Pronto. Seu agente está rodando, fazendo buscas e sintetizando respostas. Dez minutos, talvez menos.</p> <hr /> <h2>Deep Dive: Anatomia do ADK</h2> <p>Agora que você tem um agente funcionando, vamos destrinchar o que acontece por baixo do capô.</p> <h3>Agents: Três sabores de inteligência</h3> <p>O ADK não trata "agente" como sinônimo de "wrapper em volta de um LLM". São três tipos distintos:</p> <p><strong>LLM Agents</strong> — Os mais comuns. Recebem um modelo, instrução e ferramentas. Raciocinam, planejam, decidem qual tool chamar. Seu pesquisador do tutorial é um desses.</p> <p><strong>Workflow Agents</strong> — Determinísticos. Não usam LLM para decidir o fluxo, mas sim lógica de código. O ADK 2.0 trouxe graph-based workflows: você compõe nós de execução (agentes ou funções puras) em um grafo dirigido com branching explícito. Pense em um DAG, mas com a possibilidade de inserir raciocínio AI em nós específicos.</p> <p><strong>Custom Agents</strong> — Herdam de <code>BaseAgent</code> e implementam lógica de orquestração arbitrária. Quando nem o grafo nem o agente simples resolvem seu caso, você desce um nível.</p> <p>Essa separação é inteligente. Nem todo problema precisa de um LLM decidindo próximos passos — às vezes você quer fluxo previsível com <em>bolsos</em> de inteligência. O ADK torna isso natural.</p> <h3>Tools: A mão do agente no mundo real</h3> <p>Um agente sem ferramentas é um chatbot caro. O ADK oferece três categorias:</p> <p><strong>Function Tools</strong> — Funções Python decoradas que o agente pode chamar. Você escreve a função, documenta o que ela faz, e o LLM decide quando usá-la:</p> <pre><code>from google.adk.tools import tool @tool def consultar_estoque(produto_id: str) -&gt; dict: """Consulta o estoque atual de um produto pelo ID.""" # Sua lógica aqui return {"produto_id": produto_id, "quantidade": 42} </code></pre> <p><strong>MCP Tools</strong> — O ADK é um MCP client nativo. Conecte qualquer MCP server e seus tools ficam disponíveis automaticamente para o agente. Sem adapter code, sem wrappers manuais. E o inverso também funciona: você pode expor tools ADK como um MCP server. A interoperabilidade é bidirecional.</p> <p><strong>OpenAPI Tools</strong> — Aponte para um spec OpenAPI e o ADK auto-gera tools a partir dos endpoints. Integração com APIs legadas sem escrever uma linha de código de integração.</p> <p>Quer saber mais sobre MCP e ferramentas para agentes? Confira nosso guia sobre <a href="/blog/ferramentas-tools-e-mcp-servers">ferramentas, tools e MCP servers</a>.</p> <h3>Sessions e Memory: Contexto como código</h3> <p>O ADK trata contexto como algo estruturado, não como concatenação bruta de strings até o context window estourar. A arquitetura separa:</p> <ul> <li> <p><strong>Sessions</strong> — Conversas individuais com ID único, isoladas por usuário e aplicação. Cada sessão mantém estado (key-value) acessível por qualquer agente no pipeline. O ADK 2.0 trouxe rewind: você pode rebobinar uma sessão para antes de uma invocação anterior.</p> </li> <li> <p><strong>State</strong> — Dicionário compartilhado dentro da sessão. Agentes leem e escrevem livremente. É o "barramento de dados" entre sub-agents num pipeline sequencial.</p> </li> <li> <p><strong>Events</strong> — Cada ação (mensagem do usuário, resposta do agente, chamada de tool) vira um evento imutável na sessão. O log completo de execução fica disponível para debugging e auditoria.</p> </li> <li> <p><strong>Memory</strong> — Memória de longo prazo, cross-session. O agente lembra informações de interações passadas sem você precisar reimplementar RAG do zero.</p> </li> </ul> <p>A mágica está na forma como o framework filtra automaticamente eventos irrelevantes, sumariza conversas antigas, e faz lazy-load de artefatos pesados. Você não pensa em token budget — o ADK pensa por você.</p> <h3>A2A Protocol: Agentes que falam entre si</h3> <p>Aqui as coisas ficam interessantes de verdade. O Agent-to-Agent (A2A) é um protocolo aberto que o Google desenvolveu para comunicação entre agentes — independente de linguagem, framework ou infraestrutura.</p> <p>Pense no A2A como o HTTP do mundo agêntico. Três conceitos centrais:</p> <ol> <li> <p><strong>Agent Cards</strong> — JSON servido em <code>/.well-known/agent.json</code> que descreve as capacidades do agente (nome, skills, formatos de I/O). Qualquer agente pode fazer discovery de outro.</p> </li> <li> <p><strong>JSON-RPC 2.0</strong> — Protocolo de comunicação. Um agente manda <code>message/send</code> com dados estruturados, o outro responde. Simples como uma API REST, porém com semântica agêntica.</p> </li> <li> <p><strong>Task Lifecycle</strong> — Cada interação é um Task com estados bem definidos: submitted → working → completed/failed. Funciona para chamadas síncronas e assíncronas.</p> </li> </ol> <p>Na prática, isso significa que seu agente Python pode chamar um agente Go como se fosse um sub-agent local:</p> <pre><code>from google.adk.agents import SequentialAgent from google.adk.agents.remote_a2a_agent import RemoteA2aAgent # Agente Go remoto, exposto via A2A compliance_agent = RemoteA2aAgent( name="compliance_validator", agent_card="http://go-agent:8888/.well-known/agent.json", description="Valida contratos contra políticas corporativas." ) # Pipeline: extrai → valida → reporta pipeline = SequentialAgent( name="contract_pipeline", sub_agents=[extractor_agent, compliance_agent, report_agent], ) </code></pre> <p>O <code>RemoteA2aAgent</code> abstrai completamente a comunicação de rede. Você não escreve HTTP client, não serializa JSON-RPC, não lida com retry manual. O ADK cuida disso.</p> <p>Para entender como esse padrão de orquestração se encaixa em arquiteturas maiores, leia sobre <a href="/blog/harness-e-loop-arquitetura-agentes">harness e loop — arquitetura de agentes</a>.</p> <h3>MCP Integration: Ferramentas sem fronteiras</h3> <p>O Model Context Protocol já se tornou o padrão de facto para exposição de ferramentas a agentes. O ADK trata MCP como cidadão de primeira classe:</p> <p><strong>Como client:</strong> Configure um MCP server e todos os tools dele ficam disponíveis para seu agente automaticamente. O ADK faz discovery dos tools, registra schemas, e o LLM sabe chamá-los.</p> <p><strong>Como server:</strong> Exponha os tools do seu agente ADK como um MCP server. Outros frameworks (LangChain, CrewAI, qualquer MCP client) podem consumir seus tools sem saber que são ADK por baixo.</p> <p>Essa bidirecionalidade é um diferencial real. Você não fica preso num ecossistema fechado. Construiu um tool no ADK? Qualquer framework MCP-compatible pode usá-lo. Encontrou um MCP server útil? Plug direto no seu agente.</p> <h3>Debugging UI: Visibilidade total, de graça</h3> <p>Vou ser direto: a UI de debugging do ADK é provavelmente o maior diferencial prático em relação a outros frameworks. Enquanto a maioria te dá <code>print()</code> e reza, o ADK vem com:</p> <ul> <li><strong>Trace viewer</strong> — Visualização de cada passo da execução: qual tool foi chamado, com quais parâmetros, o que retornou, quanto tempo levou.</li> <li><strong>Event inspector</strong> — Stream de todos os eventos da sessão em tempo real.</li> <li><strong>State viewer</strong> — Estado atual da sessão, atualizado a cada interação.</li> <li><strong>Visual Builder</strong> — Interface drag-and-drop para prototipagem rápida de agentes (novo no ADK Web).</li> <li><strong>Evaluation dashboard</strong> — Rode testes automatizados contra seu agente e veja métricas de qualidade.</li> </ul> <p>Execute <code>adk web</code> e tudo isso aparece no browser. Zero configuração. Compare com a experiência de debugar um agente LangChain onde você precisa configurar LangSmith, criar conta, gerenciar API keys separadas, e torcer para o trace capturar o que você precisa. No ADK, é built-in.</p> <p>A Infoworld capturou bem: <em>"The ADK includes a command-line interface and a developer UI for running agents, inspecting execution steps (events, state changes), debugging interactions, and visualizing agent definitions."</em></p> <h3>Multi-Agent Workflows: Orquestração real</h3> <p>O ADK 2.0 trouxe quatro padrões de orquestração multi-agente:</p> <ol> <li> <p><strong>Sequential</strong> — Agentes executam em ordem fixa. Output de um alimenta o próximo via state compartilhado.</p> </li> <li> <p><strong>Parallel</strong> — Agentes rodam simultaneamente. Útil para buscar informações de múltiplas fontes ao mesmo tempo.</p> </li> <li> <p><strong>Loop</strong> — Execução iterativa até uma condição ser satisfeita. Refinamento progressivo.</p> </li> <li> <p><strong>Collaborative</strong> — Um coordenador delega dinamicamente para sub-agentes baseado no contexto. O mais flexível e o mais complexo.</p> </li> <li> <p><strong>Graph-based</strong> (ADK 2.0) — Composição explícita de nós e edges com decision branching. Combina nós determinísticos com nós de raciocínio AI.</p> </li> </ol> <p>A opção de graph-based workflows é particularmente poderosa. Você ganha a previsibilidade de um DAG com a flexibilidade de inserir LLMs onde faz sentido. Nem tudo precisa ser "autônomo" — às vezes você quer que o agente seja inteligente no nó 3, mas previsível nos nós 1, 2, 4 e 5.</p> <hr /> <h2>Gemini Enterprise Agent Platform: O ADK em Produção</h2> <p>Em 17 de julho de 2026, o Google Cloud apresentou 13 demos ao vivo que reposicionaram o ADK. O framework deixou de ser "só" uma ferramenta de desenvolvimento — virou o pilar <strong>Build</strong> de uma plataforma maior: a <strong>Gemini Enterprise Agent Platform</strong>.</p> <p>O Google rebrandeou toda a superfície do Vertex AI voltada para agentes em uma plataforma unificada com quatro pilares: <strong>Build</strong> (ADK), <strong>Scale</strong> (Agent Runtime + Gateway), <strong>Govern</strong> (Registry + Model Armor), e <strong>Optimize</strong> (AutoRaters + observabilidade). Cada pilar é um produto em si, mas juntos cobrem o pipeline completo: do código no seu editor até o agente rodando em produção com governança enterprise.</p> <p>Vou destrinchar cada peça. O conjunto é ambicioso — resta ver quanto disso já funciona bem fora de demos controladas.</p> <h3>Agent Runtime: Deploy sem pensar em infra</h3> <p>O antigo Agent Engine do Vertex AI evoluiu. Agora se chama <strong>Agent Runtime</strong> e a proposta é direta: você faz deploy do seu agente ADK e o Runtime cuida de infraestrutura, auto-scaling, session management, health checks e failover.</p> <pre><code># Deploy direto do editor para o Agent Runtime agents deploy --runtime managed --region us-central1 # O Runtime gerencia: # - Scaling automático baseado em load # - Session persistence cross-pod # - Health monitoring + auto-restart # - Memory Bank para contexto de longo prazo </code></pre> <p>A integração com <strong>Memory Bank</strong> é o que mais muda a experiência prática. Antes, persistir memória cross-session exigia configurar seu próprio backend (Firestore, Redis, PostgreSQL). Agora o Agent Runtime oferece Memory Bank como serviço nativo — seu agente lembra de interações passadas e mantém contexto entre sessões sem código extra de sua parte.</p> <p>Para quem vem de arquiteturas serverless: pense no Agent Runtime como o Cloud Run dos agentes. Você entrega o container (ou nem isso — o Runtime builda a partir do código ADK), e ele lida com o resto. A diferença é que o Runtime entende semântica de agentes. Ele sabe o que é uma session, entende checkpoints, gerencia state de forma inteligente. Não é um container runner genérico — é um <strong>agent-native runtime</strong>.</p> <p>Na prática, isso resolve a complexidade operacional de manter agentes stateful em produção. Session affinity, graceful shutdown sem perder contexto, scaling sem corromper estado — são problemas reais que quem já tentou deploy manual conhece bem. O Agent Runtime absorve essa camada.</p> <p>Um ponto de atenção: quanto mais você delega para o managed runtime, mais dependente fica do GCP. Se portabilidade entre clouds é requisito, vale pesar isso antes de abraçar o Memory Bank nativo.</p> <h3>Agent Gateway: Segurança enterprise</h3> <p>Se o Runtime é o "como rodar", o <strong>Agent Gateway</strong> é o "quem pode rodar o quê".</p> <p>Cada agente deployado recebe uma <strong>identidade única</strong> — não uma API key genérica, mas identidade criptográfica com <strong>mTLS end-to-end</strong>. Agente A falando com Agente B tem comunicação autenticada e encriptada nos dois lados, sem certificados manuais.</p> <p>O Gateway empilha três camadas de proteção:</p> <ol> <li> <p><strong>IAP Authentication</strong> — Identity-Aware Proxy na frente de cada agente. Usuários e serviços provam identidade antes de tocar no agente.</p> </li> <li> <p><strong>IAM Authorization</strong> — Políticas granulares: "Este agente pode chamar aquele tool." "Este usuário pode invocar este agente, mas não aquele." O mesmo RBAC do GCP, aplicado a agentes.</p> </li> <li> <p><strong>Model Armor</strong> — Inspeciona <strong>todo conteúdo</strong> que entra e sai do agente em tempo real. Detecta prompt injection, data leakage, tentativas de jailbreak, e informação sensível vazando nas respostas. Funciona como um WAF, mas para agentes.</p> </li> </ol> <pre><code># Configuração de segurança no deploy # O Agent Gateway aplica automaticamente: # - mTLS entre todos os agentes no mesh # - IAP auth para chamadas externas # - Model Armor scanning em requests/responses # - Audit logging completo via Cloud Audit Logs </code></pre> <p>Para setores regulamentados (saúde, finanças, governo), o Agent Gateway endereça o argumento mais comum do time de segurança: "como garantimos governança?". Não é mais "confia no prompt engineering" — é audit trail completo com políticas declarativas.</p> <h3>Agent Registry: Discovery de agentes</h3> <p>Cenário real: 50 agentes deployados por 10 times na mesma organização. Como um agente novo descobre quais existentes pode chamar? Como evitar duplicação?</p> <p>O <strong>Agent Registry</strong> resolve com auto-registro. Quando você faz deploy via <a href="/blog/agents-cli-google">Agents CLI</a>, o agente aparece no Registry com seu Agent Card (do protocolo A2A). Outros agentes fazem discovery, verificam capabilities e estabelecem comunicação — programaticamente.</p> <p>A analogia mais precisa: é o DNS dos agentes. Você não hardcoda URLs. Pergunta ao Registry "quem sabe fazer compliance check?" e ele retorna agentes registrados com essa capability, ranqueados por relevância e autorização.</p> <p>Para organizações grandes, isso destranca composição entre times. Cada time constrói agentes especializados, registra no Registry, e o resto da organização pode montar pipelines usando esses agentes como blocos — sem reunião de alinhamento, sem wiki de integrações.</p> <p>A ressalva honesta: discovery automático funciona bem quando Agent Cards são bem escritos. Se a descrição do agente for vaga ("faz coisas de compliance"), o Registry devolve resultados igualmente vagos. A qualidade do catálogo depende de disciplina dos times que publicam.</p> <h3>AutoRaters: Avaliação de qualidade com o DeepMind</h3> <p><strong>AutoRaters</strong> é um sistema de avaliação desenvolvido em parceria com o DeepMind. A diferença fundamental de abordagens como "pedir pro LLM avaliar a própria resposta": são modelos especializados, treinados especificamente para avaliar outputs de agentes.</p> <p>O ciclo opera em flywheel de 5 estágios:</p> <pre><code>┌─────────────────────────────────────────────────────────────┐ │ AutoRaters Flywheel │ │ │ │ 1. Prepare Data │ │ └── OTel traces + casos manuais + cenários sintetizados │ │ ↓ │ │ 2. Run Inference │ │ └── Executar o agente contra o dataset │ │ ↓ │ │ 3. Grade com AutoRaters │ │ └── Modelos especializados avaliam qualidade │ │ ↓ │ │ 4. Analyze Failure Clusters │ │ └── Agrupar falhas por padrão, identificar root causes │ │ ↓ │ │ 5. Targeted Optimizations │ │ └── Prompt tuning, tool refinement, guardrails │ │ │ │ ↺ Repetir continuamente │ └─────────────────────────────────────────────────────────────┘ </code></pre> <p>O que diferencia dos frameworks de eval tradicionais (RAGAS, DeepEval): os AutoRaters não são um Gemini genérico com prompt de "avalie esta resposta de 1 a 10". São modelos calibrados para detectar alucinações, avaliar fidelidade factual, medir relevância contextual e verificar aderência a instruções.</p> <p>O input também é mais robusto — o sistema puxa <strong>traces reais de produção</strong> (via OpenTelemetry), combina com casos de teste manuais curados por humanos, e gera cenários adversariais sintetizados. Avaliação tridimensional: produção real + golden set + stress test.</p> <p>Quem já tentou medir objetivamente se um agente "está bom" sabe a dor. AutoRaters atacam esse problema de forma estruturada. Não é perfeito — nenhum sistema de eval automático é — mas a abordagem de modelos especializados por dimensão de qualidade é mais confiável do que general-purpose LLM-as-judge.</p> <h3>A2UI: Agentes que renderizam interfaces</h3> <p><strong>A2UI (Agent-to-UI)</strong> permite que o agente renderize componentes de interface reais durante a conversa. Não markdown com tabela — componentes interativos: layouts responsivos, charts dinâmicos, menus clicáveis, formulários com validação.</p> <p>O agente decide, no contexto da conversa, que a melhor forma de apresentar a informação é visual. Renderiza o componente. O usuário interage, e essa interação volta como input para o agente.</p> <p>Exemplo concreto: um agente de analytics que, em vez de despejar números em texto, renderiza um dashboard com filtros interativos. Ou um agente de reservas que mostra um calendário visual com disponibilidades clicáveis. A2UI dissolve a fronteira entre "chatbot de texto" e "aplicação visual".</p> <p>A ideia é ousada: a interface não é desenhada a priori, mas gerada pelo agente baseada no contexto da interação. O frontend vira um canvas dinâmico.</p> <p>Dito isso — isso foi demonstrado em condições de demo. Quão bem esses componentes renderizados se comportam em cenários reais (acessibilidade, responsividade em devices variados, consistência visual com o design system da empresa) ainda precisa de validação em produção. O conceito é poderoso; a maturidade do output é a incógnita.</p> <h3>Agents CLI: Seu editor como command center</h3> <p>O <strong>Agents CLI</strong> é a ponte entre o ambiente local e a Gemini Enterprise Agent Platform. Instala como extensão em qualquer coding agent — <a href="/blog/claude-code">Claude Code</a>, Codex, Antigravity — e entrega 7 operações diretamente no editor:</p> <ol> <li><strong>Scaffold</strong> — Criar novos agentes com templates e boilerplate configurado</li> <li><strong>Deploy</strong> — Push direto para Agent Runtime com configuração declarativa</li> <li><strong>Evaluate</strong> — Rodar AutoRaters localmente antes de deployar</li> <li><strong>Monitor</strong> — Ver logs, traces e métricas do agente em produção</li> <li><strong>Discover</strong> — Buscar agentes no Registry por capability</li> <li><strong>Connect</strong> — Configurar comunicação A2A entre agentes</li> <li><strong>Secure</strong> — Aplicar políticas de Model Armor e Gateway</li> </ol> <pre><code># Instalação do Agents CLI pip install agents-cli # Scaffold um novo agente agents new meu-agente --template multi-tool --runtime managed # Deploy para produção agents deploy --env production --region us-central1 # Avaliar qualidade antes do deploy agents evaluate --dataset tests/golden_set.yaml --autorater quality-v2 # Monitorar em tempo real agents monitor meu-agente --tail --metrics latency,quality </code></pre> <p>O valor prático: antes, você alternava entre terminal, console GCP, dashboards de monitoramento. Com o Agents CLI, o ciclo inteiro acontece de dentro do editor. Mesma filosofia do <code>kubectl</code> para Kubernetes — uma CLI que é sua interface primária com a plataforma.</p> <p>Temos um guia dedicado cobrindo tudo: <a href="/blog/agents-cli-google">Guia Definitivo: Agents CLI</a>.</p> <h3>Padrão Long-running: Agentes que não perdem o fio</h3> <p>Contribuição menos vistosa, mas talvez a mais relevante para produção real: suporte nativo a <strong>agentes long-running</strong>. Agentes que pausam, esperam (horas, dias, semanas), retomam, e mantêm contexto intacto.</p> <p>Três padrões foram demonstrados:</p> <p><strong>1. Durable State Machines</strong> — O agente opera como uma state machine com estados persistidos. Cada transição é atômica e durável. Se o runtime reiniciar, o agente retoma do estado exato onde parou.</p> <pre><code>from google.adk import Agent from google.adk.patterns import DurableStateMachine onboarding_agent = Agent( name="customer_onboarding", model="gemini-2.0-flash", pattern=DurableStateMachine( states=["collecting_info", "awaiting_approval", "provisioning", "done"], initial="collecting_info", # Cada transição é persistida automaticamente # O agente pode ficar dias em "awaiting_approval" ), ) </code></pre> <p><strong>2. Event-driven Idle Time</strong> — O agente hiberna até receber um evento externo. Não consome recursos enquanto aguarda. Um webhook, um email, uma aprovação manual — qualquer evento acorda o agente e ele continua de onde parou.</p> <p><strong>3. Checkpoint-and-Resume com Persistent Sessions</strong> — Para workflows complexos com progresso incremental, checkpointing automático garante que nenhum trabalho é perdido. Mesmo que o processo caia, o último checkpoint é restaurado.</p> <p>Esses padrões existem porque processos de negócio reais não são síncronos. Onboarding de cliente que leva 3 dias. Aprovação de contrato esperando assinatura do jurídico. Compliance review com input humano em etapas. Agentes que orquestram esses fluxos não podem ser stateless ou efêmeros — precisam ser duráveis.</p> <h3>O que isso significa na prática</h3> <p>A Gemini Enterprise Agent Platform leva o ADK de "framework para escrever código de agente" para "plataforma end-to-end para operar agentes em produção". A analogia mais próxima: ter o React (lib de UI) versus ter o Vercel (plataforma que roda, escala, monitora e otimiza seu app React).</p> <p>Se antes a equação era <code>ADK (código) + você (infra, segurança, monitoring, eval)</code>, agora é <code>ADK (código) + Agent Platform (tudo o resto)</code>. A mensagem do Google é clara: <em>"Foque no que seu agente FAZ. Nós cuidamos de como ele RODA."</em></p> <p>Para quem acompanha o <a href="/blog/agent-frameworks-vs-coding-agents">ecossistema de agent frameworks</a>, esse é o movimento mais agressivo de um cloud provider até agora. A AWS com o Bedrock AgentCore e a Azure com o AI Foundry seguem a mesma direção, mas o Google chegou primeiro com o pacote mais integrado — e com a vantagem do ADK open-source como fundação.</p> <p>O contraponto justo: plataforma integrada também significa acoplamento. Quanto mais você adota (Runtime, Gateway, Registry, AutoRaters), mais difícil fica migrar. O ADK em si é open-source e roda em qualquer lugar. Mas a <em>plataforma</em> ao redor dele é GCP puro. Essa distinção importa na hora de decidir quanto do stack você abraça.</p> <hr /> <h2>Spider Chart: ADK em 8 eixos</h2> <p>Como o ADK se posiciona em relação aos critérios que importam? Aqui vai minha avaliação (1-10):</p> <pre><code> Facilidade de Início 8 │ Debugging ────┼──── Multi-linguagem 9 │ 9 │ Ecossistema ────┼──── Produção/Deploy 8 │ 9 │ Flexibilidade──┼──── Documentação 7 │ 8 │ Comunidade 6 </code></pre> <table> <thead> <tr> <th>Eixo</th> <th>Score</th> <th>Justificativa</th> </tr> </thead> <tbody> <tr> <td>Facilidade de Início</td> <td>8/10</td> <td>CLI scaffolding + quickstarts excelentes. A curva sobe quando você precisa de multi-agent</td> </tr> <tr> <td>Multi-linguagem</td> <td>9/10</td> <td>Python, TS, Go, Java, Kotlin — nenhum concorrente oferece isso</td> </tr> <tr> <td>Produção/Deploy</td> <td>9/10</td> <td>Deploy com um comando para Vertex AI, Cloud Run ou GKE. Container em qualquer lugar</td> </tr> <tr> <td>Documentação</td> <td>8/10</td> <td>Docs oficiais sólidas + codelabs no Google Developers. Poderia ter mais exemplos em Go/Java</td> </tr> <tr> <td>Comunidade</td> <td>6/10</td> <td>9.2k stars, crescendo. Mas ainda não tem a massa crítica de LangChain</td> </tr> <tr> <td>Flexibilidade</td> <td>7/10</td> <td>Model-agnostic na teoria, otimizado pra Gemini na prática. Funciona com Claude, Ollama, etc.</td> </tr> <tr> <td>Ecossistema</td> <td>8/10</td> <td>MCP nativo, A2A, OpenAPI tools, integração com Vertex AI, Apigee Gateway</td> </tr> <tr> <td>Debugging</td> <td>9/10</td> <td>UI embutida incomparável. Traces, events, state — tudo sem config adicional</td> </tr> </tbody> </table> <p><strong>Score geral: 8.0/10</strong> — Framework enterprise-ready com a melhor experiência de debugging do mercado.</p> <hr /> <h2>Prós e Contras</h2> <h3>Prós</h3> <ul> <li> <p><strong>Multi-linguagem de verdade</strong> — Cinco linguagens com paridade de features. Times enterprise com stacks heterogêneos não precisam forçar Python em todo mundo.</p> </li> <li> <p><strong>Debugging UI embutida</strong> — Não é um add-on pago, não é um SaaS separado. Vem com o framework, funciona com <code>adk web</code>, e mostra tudo que importa.</p> </li> <li> <p><strong>A2A + MCP nativos</strong> — Os dois protocolos que estão definindo interoperabilidade entre agentes. O ADK suporta ambos como cidadãos de primeira classe.</p> </li> <li> <p><strong>Deploy one-click</strong> — <code>adk deploy</code> joga direto no Agent Runtime (ex-Vertex AI Agent Engine). Container em Cloud Run ou GKE com Dockerfile gerado.</p> </li> <li> <p><strong>Gemini Enterprise Agent Platform</strong> — Não é só um framework. É um ecossistema completo: Agent Runtime (infra), Agent Gateway (segurança), Agent Registry (discovery), AutoRaters (qualidade), A2UI (interfaces). Nenhum concorrente oferece esse nível de plataforma integrada.</p> </li> <li> <p><strong>Agents CLI</strong> — Uma CLI que instala em qualquer coding agent e te dá scaffold, deploy, evaluate, monitor, discover — tudo sem sair do editor. A ponte entre código local e produção enterprise.</p> </li> <li> <p><strong>Mesma ferramenta que o Google usa internamente</strong> — Não é um projeto experimental. O Agentspace e o Customer Engagement Suite rodam ADK.</p> </li> <li> <p><strong>Graph Workflows (ADK 2.0)</strong> — Combina fluxo determinístico com raciocínio AI. Padrão que faz sentido para produção onde previsibilidade importa.</p> </li> <li> <p><strong>Agentes Long-running nativos</strong> — Suporte built-in para agentes que pausam, esperam (dias/semanas), retomam e nunca perdem contexto. Essencial para processos de negócio reais.</p> </li> <li> <p><strong>Open-source Apache 2.0</strong> — Sem lock-in na licença. Use, modifique, distribua.</p> </li> </ul> <h3>Contras</h3> <ul> <li> <p><strong>Viés para Gemini</strong> — Model-agnostic no papel, mas a experiência com modelos Gemini é visivelmente melhor. Integração com Claude/OpenAI funciona, mas não é o happy path.</p> </li> <li> <p><strong>Comunidade ainda nascente</strong> — LangChain tem anos de vantagem em massa crítica, Stack Overflow answers, e blog posts. Encontrar ajuda para edge cases do ADK pode exigir mergulho no código-fonte.</p> </li> <li> <p><strong>Exemplos desbalanceados</strong> — Python domina o repositório de samples (~30 agentes). TypeScript, Go e Java têm significativamente menos exemplos.</p> </li> <li> <p><strong>Curva de aprendizado</strong> — O framework é extenso. Agents, workflows, graphs, sessions, memory, tools, callbacks, plugins, evaluation... A superfície é grande. Vai levar tempo até você se sentir fluente.</p> </li> <li> <p><strong>Vertex AI pricing</strong> — O framework é grátis, mas o runtime gerenciado cobra por uso. Dependendo do volume, pode pesar no budget.</p> </li> </ul> <hr /> <h2>Quando usar o Google ADK</h2> <p>✅ <strong>Use quando:</strong></p> <ul> <li>Seu time já opera no Google Cloud / Vertex AI</li> <li>Você precisa de agentes em múltiplas linguagens (time Python + time Go, por exemplo)</li> <li>Debugging e observabilidade são críticos (regulamentação, compliance, auditoria)</li> <li>Você quer pipelines multi-agente com comunicação cross-language via A2A</li> <li>Precisa de deploy managed com escala automática</li> <li>Quer interoperabilidade com MCP servers existentes</li> <li>Está construindo sistemas de agentes para enterprise, não protótipos de hackathon</li> </ul> <p>❌ <strong>NÃO use quando:</strong></p> <ul> <li>Você quer um protótipo rápido e não se importa com produção — frameworks mais leves como CrewAI ou o Agents SDK da OpenAI vão te dar velocity maior no início</li> <li>Seu time é 100% Python e não precisa de multi-linguagem — LangGraph pode ser suficiente com menos overhead</li> <li>Você está fortemente investido em AWS ou Azure — os SDKs nativos (Bedrock AgentCore, Azure AI Foundry) terão integração mais profunda com seus serviços</li> <li>Precisa rodar modelos locais como prioridade — O ADK funciona com Ollama/vLLM, mas não é o foco</li> <li>Comunidade e ecossistema maduro são mais importantes que features — LangChain ainda ganha nesse quesito</li> </ul> <h3>Comparação rápida com alternativas</h3> <table> <thead> <tr> <th>Cenário</th> <th>Melhor opção</th> </tr> </thead> <tbody> <tr> <td>GCP-native, enterprise, multi-lang</td> <td><strong>Google ADK</strong></td> </tr> <tr> <td>AWS-native, agentes serverless</td> <td>Amazon Bedrock AgentCore</td> </tr> <tr> <td>Azure-native, copilots</td> <td>Azure AI Foundry Agents</td> </tr> <tr> <td>Python-only, máxima flexibilidade</td> <td>LangGraph</td> </tr> <tr> <td>Protótipo rápido, simplicidade</td> <td>CrewAI ou OpenAI Agents SDK</td> </tr> <tr> <td>Orquestração de coding agents</td> <td>Ver nosso guia de <a href="/blog/agent-frameworks-vs-coding-agents">agent frameworks vs coding agents</a></td> </tr> </tbody> </table> <hr /> <h2>Próximos passos</h2> <p>Se este guia te convenceu a explorar o ADK, aqui vai um roadmap sugerido:</p> <ol> <li> <p><strong>Rode o quickstart</strong> — 10 minutos, zero custo. <code>pip install google-adk &amp;&amp; adk create</code>. Sinta a ergonomia.</p> </li> <li> <p><strong>Explore o ADK Crash Course</strong> — O Google publicou um <a href="https://codelabs.developers.google.com/onramp/instructions">codelab completo</a> que vai do básico ao expert.</p> </li> <li> <p><strong>Instale o Agents CLI</strong> — <code>pip install agents-cli</code> e ganhe superpoderes de scaffold, deploy e evaluate direto do editor. Veja nosso <a href="/blog/agents-cli-google">Guia Definitivo: Agents CLI</a> para o setup completo.</p> </li> <li> <p><strong>Construa um multi-agent pipeline</strong> — Pegue o exemplo de customer service no repositório <code>google/adk-samples</code> e adapte pro seu domínio. Isso vai te forçar a entender sessions, state, e tools de verdade.</p> </li> <li> <p><strong>Integre um MCP server</strong> — Pegue qualquer MCP server público e conecte ao seu agente. Vai te mostrar o poder da interoperabilidade sem esforço.</p> </li> <li> <p><strong>Experimente A2A</strong> — Se trabalha com times multi-linguagem, tente o padrão do <a href="https://github.com/GoogleCloudPlatform/generative-ai/tree/main/agents/adk/contract-compliance-pipeline">contract compliance pipeline</a>. Python + Go colaborando via protocolo aberto.</p> </li> <li> <p><strong>Deploy no Agent Runtime</strong> — Quando estiver confortável localmente, <code>agents deploy</code> é um comando. Ganhe escala, observabilidade, Agent Gateway e Memory Bank de graça (billing à parte, claro).</p> </li> <li> <p><strong>Explore os 13 codelabs da Agent Platform</strong> — O Google liberou 13 codelabs hands-on cobrindo cada componente da Gemini Enterprise Agent Platform. Desde Agent Runtime setup até AutoRaters flywheel, passando por Agent Gateway mTLS, Registry discovery, A2UI components, e padrões long-running. São o melhor caminho para dominar a plataforma completa — cada codelab leva 30-60 minutos e vai do zero ao deploy funcional.</p> </li> <li> <p><strong>Configure AutoRaters</strong> — Antes de ir pra produção de verdade, monte seu golden dataset e rode o flywheel de avaliação. <code>agents evaluate --autorater quality-v2</code> vai te mostrar onde seu agente falha antes que seus usuários descubram.</p> </li> </ol> <h3>Recursos oficiais</h3> <ul> <li><a href="https://google.github.io/adk-docs/">Documentação ADK</a> — Referência completa</li> <li><a href="https://github.com/google/adk-samples">ADK Samples</a> — ~30 exemplos em Python, mais em TS/Go/Java</li> <li><a href="https://codelabs.developers.google.com/">Google Codelabs ADK</a> — Tutoriais hands-on progressivos</li> <li><a href="https://codelabs.developers.google.com/">13 Codelabs Agent Platform</a> — Codelabs dedicados à Gemini Enterprise Agent Platform (Agent Runtime, Gateway, Registry, AutoRaters, A2UI, Agents CLI, Long-running patterns)</li> <li><a href="https://a2a-protocol.org/latest/">A2A Protocol</a> — Spec do protocolo agent-to-agent</li> <li><a href="https://cloud.google.com/agents-cli">Agents CLI Docs</a> — Referência oficial do CLI</li> </ul> <hr /> <h2>Opinião final</h2> <p>O ADK não é o framework mais fácil de aprender. Não é o que tem mais hype no Twitter. Não vai te dar aquele dopamine hit de um agente rodando em 3 linhas de código.</p> <p>Mas é, provavelmente, o framework mais completo e production-ready que existe hoje para quem quer construir sistemas de agentes sérios. A combinação de multi-linguagem + A2A + MCP + debugging UI + managed runtime não existe em nenhum concorrente com a mesma coesão.</p> <p>Lembra quando o React parecia overkill perto do jQuery? <em>"Por que preciso de toda essa complexidade?"</em> — e então seu app cresceu e você agradeceu por ter escolhido a ferramenta que escalava. O ADK é essa escolha para agentes.</p> <p>Só não caia na armadilha de achar que precisa do ADK para tudo. Um chatbot simples não precisa de graph workflows. Um protótipo de hackathon não precisa de A2A cross-language. Use a ferramenta certa para o problema certo.</p> <p>Mas quando o problema for sério, o ADK está pronto.</p> <hr /> <p><em>Quer receber guias como esse direto no seu inbox? Assine a newsletter em <a href="https://ft.ia.br">ft.ia.br</a> — análises técnicas sem enrolação, toda semana.</em></p> Seu Primeiro Agente com LangGraph: Tutorial Passo a Passohttps://agentify.ia.br/blog/primeiro-agente-langgraph/https://agentify.ia.br/blog/primeiro-agente-langgraph/Tutorial hands-on completo para construir seu primeiro agente de IA com LangGraph em Python — do zero ao agente de pesquisa funcional com busca na web e...Sat, 04 Jul 2026 00:00:00 GMT<blockquote> <p><strong>TL;DR</strong> — Neste tutorial você vai construir um agente de pesquisa funcional com LangGraph que busca informações na web, avalia se tem dados suficientes e gera um relatório estruturado. O fluxo completo: instalar dependências → definir estado → criar nós de processamento → conectar arestas → adicionar lógica condicional → compilar e executar o grafo. Código completo e pronto para rodar no final do artigo.</p> </blockquote> <hr /> <h2>O Que Vamos Construir</h2> <p>Vamos criar um <strong>agente de pesquisa</strong> que faz algo que nenhuma cadeia linear de prompts consegue: ele toma decisões sozinho sobre quando parar de buscar informação.</p> <p>O fluxo funciona assim:</p> <ol> <li>Recebe um tópico de pesquisa</li> <li>Gera consultas de busca relevantes</li> <li>Pesquisa na web usando a API Tavily</li> <li>Analisa os resultados encontrados</li> <li><strong>Decide se precisa buscar mais</strong> — se sim, volta ao passo 2 com consultas refinadas</li> <li>Quando tem informação suficiente, escreve um relatório estruturado</li> </ol> <p>Essa capacidade de loop — buscar, avaliar, decidir e voltar — é exatamente o que separa um agente de um simples chain de prompts. É o padrão que empresas como Klarna, Uber e Replit usam em produção com LangGraph desde 2025.</p> <p>O LangGraph modela esse comportamento como um <strong>grafo dirigido</strong>: cada etapa é um nó (função Python), cada transição é uma aresta, e as decisões do agente são arestas condicionais. Você define a estrutura, o framework cuida do estado, persistência e fluxo de controle.</p> <hr /> <h2>Pré-requisitos</h2> <p>Antes de começar, confirme que você tem:</p> <ul> <li><strong>Python 3.11 ou superior</strong> — LangGraph 1.x exige essa versão mínima</li> <li><strong>Uma chave de API da OpenAI</strong> — usamos <code>gpt-4o-mini</code> por custo-benefício (funciona com qualquer LLM compatível)</li> <li><strong>Uma chave de API da Tavily</strong> — para busca web (o plano gratuito dá 1.000 buscas por mês)</li> <li><strong>Familiaridade básica com Python</strong> — funções, dicionários, type hints</li> </ul> <p>Se você nunca trabalhou com agentes antes, vale dar uma olhada no artigo sobre <a href="/blog/harness-e-loop-arquitetura-agentes">arquitetura de harness e loop</a> para entender o modelo mental por trás do que vamos implementar.</p> <hr /> <h2>Instalação</h2> <p>Crie um diretório para o projeto e configure um ambiente virtual:</p> <pre><code>mkdir langgraph-pesquisa cd langgraph-pesquisa python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate </code></pre> <p>Instale as dependências com versões fixas:</p> <pre><code>pip install langgraph==0.3.34 \ langchain-openai==0.3.12 \ langchain-community==0.3.7 \ tavily-python==0.5.0 \ python-dotenv==1.1.0 </code></pre> <blockquote> <p><strong>Nota:</strong> O pacote <code>langgraph</code> no PyPI está na versão 0.3.x como runtime instalável, embora o framework seja comercialmente identificado como LangGraph 1.0+. Fixe versões em produção para evitar breaking changes.</p> </blockquote> <p>Crie um arquivo <code>.env</code> na raiz do projeto para suas chaves:</p> <pre><code>OPENAI_API_KEY=sk-sua-chave-openai-aqui TAVILY_API_KEY=tvly-sua-chave-tavily-aqui </code></pre> <p>Teste a instalação:</p> <pre><code>import langgraph print(f"LangGraph versão: {langgraph.__version__}") </code></pre> <p>Se o número de versão aparecer sem erros, estamos prontos.</p> <hr /> <h2>Definir o Estado</h2> <p>O estado é a <strong>memória de trabalho</strong> do agente — um dicionário tipado que flui pelo grafo inteiro. Cada nó lê dele e escreve nele. Essa é a decisão de design mais importante: o estado define o que seu agente sabe e consegue rastrear.</p> <p>Crie um arquivo <code>agente.py</code>:</p> <pre><code>"""Agente de pesquisa construído com LangGraph.""" import os from typing import TypedDict, Annotated from dotenv import load_dotenv from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, SystemMessage from langgraph.graph import StateGraph, START, END from langgraph.graph.message import add_messages from langgraph.checkpoint.memory import MemorySaver from tavily import TavilyClient load_dotenv() # --- Schema do Estado --- class EstadoPesquisa(TypedDict): """Memória de trabalho do agente.""" messages: Annotated[list, add_messages] # Histórico de conversação topico: str # O que estamos pesquisando consultas: list[str] # Queries já executadas fontes: list[dict] # Resultados brutos da busca analise: str # Análise das fontes relatorio_final: str # Relatório final de pesquisa iteracao: int # Quantas rodadas de pesquisa fizemos max_iteracoes: int # Limite de segurança contra loops infinitos </code></pre> <p>Pontos importantes sobre essa definição:</p> <ul> <li><strong><code>messages</code></strong> usa a anotação <code>add_messages</code> — isso faz o LangGraph <em>acumular</em> mensagens ao invés de substituí-las. O histórico de conversação cresce naturalmente.</li> <li><strong><code>iteracao</code> e <code>max_iteracoes</code></strong> previnem loops infinitos. Isso não é opcional — qualquer agente que pode fazer loop precisa de um freio de emergência.</li> <li><strong>Cada campo tem propósito claro.</strong> Quando você precisar debugar o agente (e vai precisar), nomes descritivos economizam horas.</li> </ul> <hr /> <h2>Criar os Nós</h2> <p>Nós são funções Python simples que recebem o estado atual e retornam uma atualização parcial. Sem classes base, sem decoradores obrigatórios. Cada nó faz uma coisa só.</p> <h3>Setup do LLM e Cliente de Busca</h3> <pre><code># --- Setup --- llm = ChatOpenAI( model="gpt-4o-mini", temperature=0.1, # Temperatura baixa para pesquisa factual ) tavily = TavilyClient(api_key=os.getenv("TAVILY_API_KEY")) </code></pre> <h3>Nó 1: Gerar Consultas de Busca</h3> <pre><code># --- Nós --- def gerar_consultas(state: EstadoPesquisa) -&gt; dict: """Transforma o tópico em consultas de busca específicas.""" topico = state["topico"] # Em iterações posteriores, refina baseado no que já encontramos contexto_existente = "" if state.get("analise"): contexto_existente = ( f"\n\nJá sabemos o seguinte:\n{state['analise']}\n\n" "Gere consultas para preencher lacunas no nosso conhecimento." ) response = llm.invoke([ SystemMessage(content=( "Você é um assistente de pesquisa. Gere 3 consultas de busca " "específicas e diversas para pesquisar o tópico dado. " "Retorne apenas as consultas, uma por linha. " "Sem numeração, sem texto extra." f"{contexto_existente}" )), HumanMessage(content=f"Tópico de pesquisa: {topico}"), ]) novas_consultas = [ q.strip() for q in response.content.strip().split("\n") if q.strip() ] return { "consultas": state.get("consultas", []) + novas_consultas, "messages": [response], } </code></pre> <p>Repare no padrão de <strong>comportamento adaptativo</strong>: na primeira execução, o nó gera consultas amplas. Em rodadas posteriores, ele lê sua própria análise anterior e gera consultas para preencher lacunas. O agente literalmente fica mais inteligente a cada loop.</p> <h3>Nó 2: Buscar na Web</h3> <pre><code>def buscar_web(state: EstadoPesquisa) -&gt; dict: """Executa as consultas de busca e coleta resultados.""" consultas = state.get("consultas", []) # Busca apenas o último lote de consultas (últimas 3) consultas_recentes = consultas[-3:] todos_resultados = state.get("fontes", []) for consulta in consultas_recentes: try: response = tavily.search( query=consulta, max_results=3, include_raw_content=False, ) for resultado in response.get("results", []): # Evita URLs duplicadas if not any(f["url"] == resultado["url"] for f in todos_resultados): todos_resultados.append({ "titulo": resultado.get("title", ""), "url": resultado.get("url", ""), "conteudo": resultado.get("content", ""), "consulta": consulta, }) except Exception as e: # Loga mas não crasha — o agente trabalha com resultados parciais print(f"Busca falhou para '{consulta}': {e}") return {"fontes": todos_resultados} </code></pre> <p>A deduplicação e o tratamento de erros são intencionais. Se uma API de busca falhar, o agente continua com os resultados que tem. Resiliência é parte do design.</p> <h3>Nó 3: Analisar Resultados</h3> <pre><code>def analisar_resultados(state: EstadoPesquisa) -&gt; dict: """Analisa os resultados e avalia se temos informação suficiente.""" fontes = state.get("fontes", []) if not fontes: return { "analise": "Nenhum resultado encontrado. Preciso tentar consultas diferentes.", "iteracao": state.get("iteracao", 0) + 1, } # Formata as fontes para o LLM texto_fontes = "" for i, fonte in enumerate(fontes, 1): texto_fontes += ( f"\n[{i}] {fonte['titulo']}\n" f"URL: {fonte['url']}\n" f"{fonte['conteudo']}\n" ) response = llm.invoke([ SystemMessage(content=( "Você é um analista de pesquisa. Analise os resultados de busca " "sobre o tópico dado. Forneça:\n" "1. Principais descobertas (o que sabemos)\n" "2. Lacunas (o que ainda precisamos descobrir)\n" "3. Nível de confiança (baixo/médio/alto) no nosso entendimento geral\n\n" "Seja específico e cite números das fontes." )), HumanMessage(content=f"Tópico: {state['topico']}\n\nFontes:{texto_fontes}"), ]) return { "analise": response.content, "iteracao": state.get("iteracao", 0) + 1, "messages": [response], } </code></pre> <h3>Nó 4: Escrever Relatório</h3> <pre><code>def escrever_relatorio(state: EstadoPesquisa) -&gt; dict: """Escreve um relatório estruturado com base nas descobertas.""" fontes = state.get("fontes", []) analise = state.get("analise", "") texto_fontes = "" for i, fonte in enumerate(fontes, 1): texto_fontes += ( f"\n[{i}] {fonte['titulo']}\n" f"URL: {fonte['url']}\n" f"{fonte['conteudo']}\n" ) response = llm.invoke([ SystemMessage(content=( "Você é um redator de pesquisa. Escreva um relatório claro e " "bem estruturado com base na análise e fontes fornecidas. Inclua:\n" "- Resumo executivo (2-3 frases)\n" "- Principais descobertas com citações [1], [2], etc.\n" "- Conclusões\n" "- Lista de fontes\n\n" "Escreva para um público técnico. Seja factual e específico." )), HumanMessage(content=( f"Tópico: {state['topico']}\n\n" f"Análise:\n{analise}\n\n" f"Fontes:{texto_fontes}" )), ]) return { "relatorio_final": response.content, "messages": [response], } </code></pre> <hr /> <h2>Montar o Grafo</h2> <p>Aqui é onde o LangGraph brilha. Conectamos os nós com arestas e definimos o fluxo linear básico:</p> <pre><code># --- Construir o Grafo --- workflow = StateGraph(EstadoPesquisa) # Adicionar nós workflow.add_node("gerar_consultas", gerar_consultas) workflow.add_node("buscar_web", buscar_web) workflow.add_node("analisar_resultados", analisar_resultados) workflow.add_node("escrever_relatorio", escrever_relatorio) # Adicionar arestas lineares workflow.add_edge(START, "gerar_consultas") workflow.add_edge("gerar_consultas", "buscar_web") workflow.add_edge("buscar_web", "analisar_resultados") workflow.add_edge("escrever_relatorio", END) </code></pre> <p>Até aqui temos um fluxo linear: START → gerar_consultas → buscar_web → analisar_resultados → ... → escrever_relatorio → END. O que falta é a decisão no meio — o agente precisa escolher entre continuar pesquisando ou ir para a escrita.</p> <hr /> <h2>Executar o Agente (Versão Linear)</h2> <p>Antes de adicionar a lógica condicional, vamos compilar e testar o fluxo básico para garantir que tudo funciona. Temporariamente, conecte <code>analisar_resultados</code> direto ao relatório:</p> <pre><code># Versão simplificada para teste workflow.add_edge("analisar_resultados", "escrever_relatorio") # Compilar agente = workflow.compile() # Executar resultado = agente.invoke({ "topico": "Como empresas estão usando agentes de IA em produção em 2026", "messages": [], "consultas": [], "fontes": [], "analise": "", "relatorio_final": "", "iteracao": 0, "max_iteracoes": 3, }) print(resultado["relatorio_final"]) </code></pre> <p>Se o relatório aparecer, seu grafo básico está funcionando. Agora vamos adicionar inteligência.</p> <hr /> <h2>Adicionar Lógica Condicional</h2> <p>A aresta condicional é o coração de qualquer agente. É aqui que o grafo deixa de ser um pipeline linear e vira algo que raciocina sobre o próprio progresso.</p> <h3>A Função de Roteamento</h3> <pre><code># --- Lógica de Roteamento --- def deve_continuar_pesquisa(state: EstadoPesquisa) -&gt; str: """Decide se continua pesquisando ou escreve o relatório.""" iteracao = state.get("iteracao", 0) max_iteracoes = state.get("max_iteracoes", 3) analise = state.get("analise", "") # Hard stop: previne loops infinitos if iteracao &gt;= max_iteracoes: return "escrever_relatorio" # Se a análise menciona confiança baixa ou lacunas, continua analise_lower = analise.lower() if "baixo" in analise_lower and "confiança" in analise_lower: return "gerar_consultas" if "lacunas significativas" in analise_lower or "precisamos" in analise_lower: return "gerar_consultas" # Caso contrário, temos informação suficiente return "escrever_relatorio" </code></pre> <p>A função retorna uma string — o nome do próximo nó. É assim que o agente decide se continua buscando ou parte para a escrita. Repare no <code>max_iteracoes</code> como trava de segurança: <strong>nunca</strong> permita que um agente faça loop sem limite.</p> <h3>Montando o Grafo Completo</h3> <p>Agora substituímos a aresta fixa entre <code>analisar_resultados</code> e <code>escrever_relatorio</code> pela aresta condicional:</p> <pre><code># --- Grafo Completo --- workflow = StateGraph(EstadoPesquisa) # Nós workflow.add_node("gerar_consultas", gerar_consultas) workflow.add_node("buscar_web", buscar_web) workflow.add_node("analisar_resultados", analisar_resultados) workflow.add_node("escrever_relatorio", escrever_relatorio) # Arestas workflow.add_edge(START, "gerar_consultas") workflow.add_edge("gerar_consultas", "buscar_web") workflow.add_edge("buscar_web", "analisar_resultados") # Aresta condicional: o agente decide se faz loop ou finaliza workflow.add_conditional_edges( "analisar_resultados", deve_continuar_pesquisa, { "gerar_consultas": "gerar_consultas", "escrever_relatorio": "escrever_relatorio", }, ) workflow.add_edge("escrever_relatorio", END) # Memória para persistência de estado memory = MemorySaver() agente = workflow.compile(checkpointer=memory) </code></pre> <p>O fluxo agora funciona assim:</p> <ol> <li><strong>START → gerar_consultas</strong> — cria consultas de busca a partir do tópico</li> <li><strong>gerar_consultas → buscar_web</strong> — executa as consultas</li> <li><strong>buscar_web → analisar_resultados</strong> — avalia o que encontrou</li> <li><strong>analisar_resultados → ???</strong> — a aresta condicional entra em ação. Se a análise diz que precisamos mais informação, voltamos a gerar consultas. Se temos o suficiente, seguimos para a escrita.</li> <li><strong>escrever_relatorio → END</strong> — saída do relatório final</li> </ol> <p>Esse loop — buscar, avaliar, decidir — é o padrão fundamental de agentes. Se quiser entender a diferença entre esse modelo e <a href="/blog/agent-frameworks-vs-coding-agents">agent frameworks versus coding agents</a>, vale a leitura para contextualizar.</p> <hr /> <h2>Resultado Final</h2> <p>Aqui está o código completo e funcional, pronto para copiar e executar:</p> <pre><code>"""Agente de pesquisa com LangGraph — código completo.""" import os from typing import TypedDict, Annotated from dotenv import load_dotenv from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, SystemMessage from langgraph.graph import StateGraph, START, END from langgraph.graph.message import add_messages from langgraph.checkpoint.memory import MemorySaver from tavily import TavilyClient load_dotenv() # ============================================================ # ESTADO # ============================================================ class EstadoPesquisa(TypedDict): """Memória de trabalho do agente.""" messages: Annotated[list, add_messages] topico: str consultas: list[str] fontes: list[dict] analise: str relatorio_final: str iteracao: int max_iteracoes: int # ============================================================ # SETUP # ============================================================ llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.1) tavily = TavilyClient(api_key=os.getenv("TAVILY_API_KEY")) # ============================================================ # NÓS # ============================================================ def gerar_consultas(state: EstadoPesquisa) -&gt; dict: """Transforma o tópico em consultas de busca específicas.""" topico = state["topico"] contexto_existente = "" if state.get("analise"): contexto_existente = ( f"\n\nJá sabemos:\n{state['analise']}\n\n" "Gere consultas para preencher lacunas." ) response = llm.invoke([ SystemMessage(content=( "Você é um assistente de pesquisa. Gere 3 consultas de busca " "específicas e diversas para o tópico dado. Retorne apenas as " "consultas, uma por linha. Sem numeração." f"{contexto_existente}" )), HumanMessage(content=f"Tópico: {topico}"), ]) novas_consultas = [ q.strip() for q in response.content.strip().split("\n") if q.strip() ] return { "consultas": state.get("consultas", []) + novas_consultas, "messages": [response], } def buscar_web(state: EstadoPesquisa) -&gt; dict: """Executa consultas de busca e coleta resultados.""" consultas_recentes = state.get("consultas", [])[-3:] todos_resultados = state.get("fontes", []) for consulta in consultas_recentes: try: response = tavily.search( query=consulta, max_results=3, include_raw_content=False, ) for resultado in response.get("results", []): if not any(f["url"] == resultado["url"] for f in todos_resultados): todos_resultados.append({ "titulo": resultado.get("title", ""), "url": resultado.get("url", ""), "conteudo": resultado.get("content", ""), "consulta": consulta, }) except Exception as e: print(f"Busca falhou para '{consulta}': {e}") return {"fontes": todos_resultados} def analisar_resultados(state: EstadoPesquisa) -&gt; dict: """Analisa resultados e avalia se temos informação suficiente.""" fontes = state.get("fontes", []) if not fontes: return { "analise": "Nenhum resultado. Precisamos tentar consultas diferentes.", "iteracao": state.get("iteracao", 0) + 1, } texto_fontes = "" for i, fonte in enumerate(fontes, 1): texto_fontes += f"\n[{i}] {fonte['titulo']}\nURL: {fonte['url']}\n{fonte['conteudo']}\n" response = llm.invoke([ SystemMessage(content=( "Você é um analista de pesquisa. Analise os resultados sobre o " "tópico dado. Forneça:\n" "1. Principais descobertas\n" "2. Lacunas no conhecimento\n" "3. Nível de confiança (baixo/médio/alto)\n\n" "Cite números das fontes." )), HumanMessage(content=f"Tópico: {state['topico']}\n\nFontes:{texto_fontes}"), ]) return { "analise": response.content, "iteracao": state.get("iteracao", 0) + 1, "messages": [response], } def escrever_relatorio(state: EstadoPesquisa) -&gt; dict: """Escreve o relatório final estruturado.""" fontes = state.get("fontes", []) analise = state.get("analise", "") texto_fontes = "" for i, fonte in enumerate(fontes, 1): texto_fontes += f"\n[{i}] {fonte['titulo']}\nURL: {fonte['url']}\n{fonte['conteudo']}\n" response = llm.invoke([ SystemMessage(content=( "Você é um redator técnico. Escreva um relatório de pesquisa " "claro e estruturado. Inclua:\n" "- Resumo executivo (2-3 frases)\n" "- Principais descobertas com citações [1], [2]\n" "- Conclusões\n" "- Lista de fontes\n\n" "Público: técnico. Tom: factual e direto." )), HumanMessage(content=( f"Tópico: {state['topico']}\n\n" f"Análise:\n{analise}\n\nFontes:{texto_fontes}" )), ]) return { "relatorio_final": response.content, "messages": [response], } # ============================================================ # ROTEAMENTO # ============================================================ def deve_continuar_pesquisa(state: EstadoPesquisa) -&gt; str: """Decide: continuar pesquisando ou escrever o relatório.""" iteracao = state.get("iteracao", 0) max_iteracoes = state.get("max_iteracoes", 3) analise = state.get("analise", "") if iteracao &gt;= max_iteracoes: return "escrever_relatorio" analise_lower = analise.lower() if "baixo" in analise_lower and "confiança" in analise_lower: return "gerar_consultas" if "lacunas significativas" in analise_lower or "precisamos" in analise_lower: return "gerar_consultas" return "escrever_relatorio" # ============================================================ # GRAFO # ============================================================ workflow = StateGraph(EstadoPesquisa) workflow.add_node("gerar_consultas", gerar_consultas) workflow.add_node("buscar_web", buscar_web) workflow.add_node("analisar_resultados", analisar_resultados) workflow.add_node("escrever_relatorio", escrever_relatorio) workflow.add_edge(START, "gerar_consultas") workflow.add_edge("gerar_consultas", "buscar_web") workflow.add_edge("buscar_web", "analisar_resultados") workflow.add_conditional_edges( "analisar_resultados", deve_continuar_pesquisa, { "gerar_consultas": "gerar_consultas", "escrever_relatorio": "escrever_relatorio", }, ) workflow.add_edge("escrever_relatorio", END) memory = MemorySaver() agente = workflow.compile(checkpointer=memory) # ============================================================ # EXECUÇÃO # ============================================================ if __name__ == "__main__": print("=" * 60) print(" Agente de Pesquisa — LangGraph") print("=" * 60) topico = input("\nDigite o tópico de pesquisa: ").strip() if not topico: topico = "Como empresas estão usando agentes de IA em produção em 2026" print(f"\nPesquisando: {topico}") print("-" * 60) estado_inicial = { "topico": topico, "messages": [], "consultas": [], "fontes": [], "analise": "", "relatorio_final": "", "iteracao": 0, "max_iteracoes": 3, } config = {"configurable": {"thread_id": "sessao-001"}} for evento in agente.stream(estado_inicial, config=config): for nome_no, saida in evento.items(): print(f"\n&gt;&gt; Nó: {nome_no}") if nome_no == "gerar_consultas" and "consultas" in saida: print(f" Consultas: {saida['consultas'][-3:]}") elif nome_no == "buscar_web" and "fontes" in saida: print(f" {len(saida['fontes'])} fontes encontradas") elif nome_no == "analisar_resultados" and "analise" in saida: print(f" Iteração: {saida.get('iteracao', '?')}") print(f" Análise: {saida['analise'][:200]}...") elif nome_no == "escrever_relatorio" and "relatorio_final" in saida: print(f"\n{'=' * 60}") print(" RELATÓRIO DE PESQUISA") print("=" * 60) print(saida["relatorio_final"]) print(f"\n{'=' * 60}") print("Pesquisa concluída.") </code></pre> <p>Execute com:</p> <pre><code>python agente.py </code></pre> <p>Você verá o agente trabalhando em tempo real — gerando consultas, buscando, avaliando, potencialmente voltando para buscar mais, e finalmente escrevendo o relatório.</p> <hr /> <h2>Próximos Passos</h2> <p>Você acabou de construir um agente funcional com LangGraph. Os conceitos que aprendeu — <code>StateGraph</code>, <code>add_node</code>, <code>add_edge</code>, <code>add_conditional_edges</code>, <code>compile</code> — são os mesmos que rodam em produção nas empresas que mencionamos.</p> <p>A partir daqui, os caminhos se abrem:</p> <p><strong>Adicionar Human-in-the-Loop.</strong> LangGraph permite inserir pontos de aprovação humana em qualquer lugar do grafo. O agente pausa, espera a aprovação e continua. Essencial para agentes que tomam ações no mundo real.</p> <p><strong>Persistência em banco de dados.</strong> O <code>MemorySaver</code> que usamos guarda estado em memória. Para produção, troque por <code>SqliteSaver</code> ou <code>PostgresSaver</code> e seu agente sobrevive a reinícios.</p> <p><strong>Sistemas multi-agente.</strong> No LangGraph, um nó pode ser outro grafo compilado. Você pode ter um agente supervisor delegando para agentes especialistas — pesquisador, redator, revisor — cada um com seu próprio grafo.</p> <p><strong>Streaming de eventos.</strong> Ao invés de <code>.stream()</code> com eventos de nó, use <code>.astream_events()</code> para receber cada token conforme o LLM gera. Dá uma experiência de tempo real para o usuário.</p> <p><strong>Expandir ferramentas.</strong> Adicione leitura/escrita de arquivos, execução de código, chamadas a APIs, navegação web. Cada capacidade é um novo nó no grafo.</p> <p>O padrão fundamental — estado, nós, arestas, decisão — se mantém independente da complexidade. Você define a estrutura, o LangGraph cuida do resto. Se quer entender como frameworks como esse se comparam a coding agents como Claude Code e Cursor, o artigo sobre <a href="/blog/agent-frameworks-vs-coding-agents">agent frameworks vs coding agents</a> faz essa distinção com clareza.</p> <p>Bom building.</p> OpenAI Agents SDK: Guia Definitivo para Agentes Leveshttps://agentify.ia.br/blog/openai-agents-sdk/https://agentify.ia.br/blog/openai-agents-sdk/Domine o OpenAI Agents SDK — o framework minimalista que substitui o Swarm com handoffs, guardrails e tracing nativo para agentes multi-agent em Python.Sat, 04 Jul 2026 00:00:00 GMT<blockquote> <p><strong>TL;DR</strong> — O OpenAI Agents SDK é o sucessor de produção do Swarm: quatro primitivos (Agent, Runner, Handoffs, Guardrails), tracing embutido, suporte a MCP, e zero boilerplate para colocar múltiplos agentes conversando entre si. Se você já roda modelos OpenAI e precisa de delegação limpa entre especialistas, esse SDK é a menor distância entre a sua ideia e um sistema multi-agent funcionando. Instalou, definiu agentes, rodou. Sem grafos, sem YAML, sem cerimônia.</p> </blockquote> <hr /> <h2>Overview</h2> <h3>De Swarm a produção: a história de um experimento que vingou</h3> <p>Em outubro de 2024 a OpenAI soltou o Swarm — um repositório educacional, quase um brinquedo, que mostrava como orquestrar múltiplos agentes LLM em menos de 100 linhas de Python. A premissa era audaciosa na simplicidade: agentes são funções stateless que se passam o bastão. Sem grafos, sem DAGs, sem banco de estado. Só handoffs.</p> <p>O problema? O Swarm carregava um disclaimer gigante: "experimental, educational, not production-ready". E não mentia. Faltava tratamento de erro, tracing, guardrails, persistência de sessão — tudo que você precisa quando sai do Jupyter notebook e vai pra produção.</p> <p>Em março de 2025, a OpenAI arquivou o repositório do Swarm e redirecionou todo mundo pro <a href="https://github.com/openai/openai-agents-python">OpenAI Agents SDK</a>. Mesma filosofia minimalista, mesma API enxuta — mas agora com a robustez que faltava. O README do Swarm é explícito: "Swarm is now replaced by the OpenAI Agents SDK, which is a production-ready evolution of Swarm."</p> <p>E em abril de 2026 veio a evolução seguinte: sandbox agents, manifests para workspaces, integração com provedores de sandbox (E2B, Modal, Cloudflare, Vercel), memory configurável e skills nativas. O SDK deixou de ser "só um loop de agente" e virou um harness completo para agentes que mexem em arquivos, rodam comandos e trabalham em tarefas longas.</p> <h3>Filosofia: minimalismo com opinião</h3> <p>O Agents SDK ocupa um ponto muito específico no stack. Não é uma API de modelo (isso é o Responses API). Não é uma plataforma managed (isso era o Agent Builder, que foi descontinuado). É um <strong>runtime de agente</strong> — uma biblioteca que gerencia o loop do agente, despacha tools, executa handoffs, roda guardrails e coleta traces.</p> <p>A filosofia de design pode ser resumida em três princípios:</p> <ol> <li><strong>Poucos primitivos, bem compostos</strong> — Agent, Runner, Handoffs, Guardrails. Você aprende em uma tarde.</li> <li><strong>O LLM decide</strong> — o modelo escolhe quando usar tools e quando fazer handoff. O SDK não impõe fluxo.</li> <li><strong>Convenção sobre configuração</strong> — tracing é automático, schemas são inferidos via Pydantic, tools se registram com um decorator.</li> </ol> <p>Isso é radicalmente diferente do approach do <a href="/blog/agent-frameworks-vs-coding-agents">LangGraph</a>, que modela workflows como grafos dirigidos com nós e arestas explícitas. Aqui não existe grafo. Existe um agente que pode delegar pra outro. Ponto.</p> <p>A pergunta que fica: quando essa simplicidade é suficiente — e quando vira limitação? Vamos descobrir.</p> <hr /> <h2>Tutorial</h2> <h3>Instalação</h3> <p>Python 3.9+ e um <code>pip install</code>:</p> <pre><code>pip install openai-agents </code></pre> <p>Pronto. Sem extra dependencies pesadas, sem compilação de extensões C. O pacote é leve de propósito — a OpenAI quer que você importe, use e não pense na infraestrutura.</p> <p>Configure sua API key:</p> <pre><code>export OPENAI_API_KEY="sk-..." </code></pre> <h3>Primeiro agente: o clássico "Hello World"</h3> <pre><code>from agents import Agent, Runner agente = Agent( name="Assistente Geral", instructions="Você é um assistente técnico. Responda de forma concisa e direta.", model="gpt-4o-mini", ) resultado = Runner.run_sync(agente, "O que é o Model Context Protocol?") print(resultado.final_output) </code></pre> <p>Três linhas de setup, uma de execução. O <code>Runner.run_sync()</code> faz todo o trabalho pesado: monta o prompt com as instructions, chama o modelo, verifica se há tool calls, executa tools se necessário, e repete até ter uma resposta final.</p> <p>A versão assíncrona é <code>await Runner.run()</code> — mesma interface, mas sem bloquear a event loop.</p> <h3>Adicionando uma tool</h3> <p>Tools são funções Python decoradas:</p> <pre><code>from agents import Agent, Runner, function_tool @function_tool def buscar_clima(cidade: str) -&gt; str: """Retorna a previsão do tempo para uma cidade.""" # Em produção, chamaria uma API de clima return f"Em {cidade}: 22°C, parcialmente nublado." agente = Agent( name="Agente Clima", instructions="Você ajuda usuários com informações de clima. Use a tool buscar_clima.", tools=[buscar_clima], model="gpt-4o-mini", ) resultado = Runner.run_sync(agente, "Qual o clima em São Paulo?") print(resultado.final_output) </code></pre> <p>O SDK usa <code>inspect</code> do Python pra extrair a assinatura da função e <code>pydantic</code> pra gerar o schema JSON automaticamente. Você não precisa declarar schemas manualmente — é a type hint que define tudo.</p> <h3>Handoff entre dois agentes</h3> <p>Aqui é onde a coisa fica interessante. Vamos criar um sistema de triagem que delega para um especialista:</p> <pre><code>from agents import Agent, Runner # Agente especialista em billing agente_billing = Agent( name="Especialista Financeiro", instructions="""Você é especialista em questões financeiras. Ajuda com cobranças, faturas, reembolsos e métodos de pagamento. Seja direto e resolva o problema.""", model="gpt-4o-mini", ) # Agente especialista em suporte técnico agente_suporte = Agent( name="Suporte Técnico", instructions="""Você é especialista em suporte técnico. Ajuda com bugs, configurações, integrações e problemas de performance.""", model="gpt-4o-mini", ) # Agente de triagem — decide pra quem delegar agente_triagem = Agent( name="Triagem", instructions="""Você é o agente de triagem. Analise a mensagem do usuário e: - Se for sobre cobrança, fatura ou pagamento → delegue para Especialista Financeiro - Se for sobre bug, erro ou configuração → delegue para Suporte Técnico - Se for genérico, responda você mesmo.""", handoffs=[agente_billing, agente_suporte], model="gpt-4o-mini", ) # O usuário fala com triagem, que delega automaticamente resultado = Runner.run_sync( agente_triagem, "Fui cobrado duas vezes na minha assinatura esse mês." ) print(resultado.final_output) </code></pre> <p>O que acontece por baixo dos panos: o modelo do <code>agente_triagem</code> recebe a mensagem, identifica que é um problema financeiro, e emite um sinal de handoff para o <code>agente_billing</code>. O Runner intercepta esse sinal, transfere o controle, e o <code>agente_billing</code> recebe o contexto da conversa e responde. Tudo dentro de uma única chamada <code>Runner.run_sync()</code>.</p> <p>Não precisou definir grafos, arestas, condições de roteamento explícitas. O LLM decidiu. Essa é a filosofia do SDK: <strong>confia no modelo pra rotear, e valida com guardrails</strong>.</p> <hr /> <h2>Deep Dive</h2> <h3>Agent — o descritor leve</h3> <p>Um <code>Agent</code> no SDK não é um processo rodando, não é um container, não é um servidor. É um <strong>descritor</strong>: um objeto Python que diz "esse agente tem essas instructions, essas tools, esse modelo, esses handoffs disponíveis". Quem dá vida ao agente é o Runner.</p> <p>Os parâmetros principais:</p> <table> <thead> <tr> <th>Parâmetro</th> <th>O que faz</th> </tr> </thead> <tbody> <tr> <td><code>name</code></td> <td>Identificador legível (aparece no tracing)</td> </tr> <tr> <td><code>instructions</code></td> <td>System prompt — a personalidade e regras do agente</td> </tr> <tr> <td><code>model</code></td> <td>Override de modelo por agente (cada agente pode usar um modelo diferente)</td> </tr> <tr> <td><code>tools</code></td> <td>Lista de function tools, hosted tools ou MCP servers</td> </tr> <tr> <td><code>handoffs</code></td> <td>Lista de outros Agents para os quais este pode delegar</td> </tr> <tr> <td><code>input_guardrails</code></td> <td>Validações que rodam na entrada do usuário</td> </tr> <tr> <td><code>output_guardrails</code></td> <td>Validações que rodam na saída do agente</td> </tr> <tr> <td><code>output_type</code></td> <td>Modelo Pydantic para structured output</td> </tr> </tbody> </table> <p>Detalhe que eu acho elegante: como cada agente pode ter seu próprio <code>model</code>, você consegue montar arquiteturas onde o triagem usa um modelo barato e rápido (gpt-4o-mini) e o especialista usa um modelo pesado (gpt-4o ou gpt-5.4) só quando necessário. Economia de tokens na veia.</p> <h3>Runner — o motor de execução</h3> <p>O Runner é o loop. Ele:</p> <ol> <li>Chama o LLM com as instructions do agente + histórico da conversa</li> <li>Se o LLM retorna tool calls → executa as tools</li> <li>Alimenta os resultados de volta ao LLM</li> <li>Se o LLM retorna um handoff → transfere controle pro agente-alvo</li> <li>Repete até ter output final ou atingir <code>max_turns</code></li> </ol> <pre><code>from agents import Runner # Síncrono resultado = Runner.run_sync(agente, "mensagem do usuário") # Assíncrono resultado = await Runner.run(agente, "mensagem do usuário") # Com configuração from agents.run import RunConfig resultado = await Runner.run( agente, "mensagem", run_config=RunConfig(max_turns=25) ) </code></pre> <p><strong>Gotcha importante:</strong> o default de <code>max_turns</code> é 10. Em workflows com múltiplos handoffs e tools, 10 turns acabam rápido. Cada handoff consome um turn, cada tool call + resposta consome dois. Três agentes com duas tools cada pode estourar fácil. Aumente o <code>max_turns</code> ou passe <code>None</code> pra desabilitar o limite.</p> <h3>Handoffs — delegação entre agentes</h3> <p>Handoffs são o mecanismo multi-agent do SDK. Conceitualmente: um agente termina seu turno passando o bastão para outro agente. Na prática, funciona assim:</p> <ol> <li>O agente-fonte tem o agente-alvo na sua lista de <code>handoffs</code></li> <li>O LLM do agente-fonte decide (via function calling) fazer o handoff</li> <li>O Runner detecta o sinal, reescreve o contexto da conversa, e passa o controle</li> </ol> <p>O ponto-chave é a <strong>reescrita de histórico</strong>. Quando o agente B recebe o handoff do agente A, ele não vê necessariamente toda a conversa anterior. O SDK fornece filtros em <code>agents.extensions.handoff_filters</code> pra customizar o que o agente-alvo recebe.</p> <p>Existem dois padrões de orquestração com handoffs:</p> <p><strong>Padrão 1: Router (mais comum)</strong></p> <pre><code>Usuário → Triagem → [Billing | Suporte | Vendas] </code></pre> <p><strong>Padrão 2: Agent as Tool</strong></p> <pre><code>from agents import Agent, Runner, function_tool agente_pesquisa = Agent( name="Pesquisador", instructions="Pesquise informações sobre o tema solicitado.", ) @function_tool def pesquisar(query: str) -&gt; str: """Delega pesquisa para o agente especialista.""" resultado = Runner.run_sync(agente_pesquisa, query) return resultado.final_output coordenador = Agent( name="Coordenador", tools=[pesquisar], instructions="Coordene tarefas. Use a tool pesquisar quando precisar de dados.", ) </code></pre> <p>Nesse segundo padrão, o agente-filho roda como tool e retorna o resultado para o pai. É handoff implícito — o controle volta pro coordenador depois.</p> <h3>Guardrails — segurança em camadas</h3> <p>O sistema de guardrails do SDK é uma das funcionalidades que mais brilham. São três escopos:</p> <p><strong>Input Guardrails</strong> — rodam na entrada do primeiro agente da cadeia:</p> <pre><code>from agents import input_guardrail, GuardrailFunctionOutput, Agent, Runner from pydantic import BaseModel class AnaliseSeguranca(BaseModel): is_malicioso: bool razao: str agente_guardrail = Agent( name="Analisador de Segurança", instructions="Verifique se a mensagem é maliciosa, spam ou off-topic.", output_type=AnaliseSeguranca, model="gpt-4o-mini", # modelo barato pro guardrail ) @input_guardrail async def guardrail_seguranca(ctx, agent, input): resultado = await Runner.run(agente_guardrail, input, context=ctx.context) return GuardrailFunctionOutput( output_info=resultado.final_output, tripwire_triggered=resultado.final_output.is_malicioso, ) agente_principal = Agent( name="Assistente", instructions="Ajude o usuário com suas dúvidas.", input_guardrails=[guardrail_seguranca], model="gpt-4o", # modelo caro, protegido pelo guardrail ) </code></pre> <p>A sacada aqui é econômica: o guardrail roda num modelo barato e bloqueia requests maliciosos antes de atingir o modelo caro. Tripwire disparou? A execução para imediatamente com uma exceção <code>InputGuardrailTripwireTriggered</code>.</p> <p><strong>Output Guardrails</strong> — rodam na saída do último agente:</p> <pre><code>from agents import output_guardrail, GuardrailFunctionOutput @output_guardrail async def guardrail_pii(ctx, agent, output): # Verifica se a resposta contém dados sensíveis texto = str(output) tem_pii = any(p in texto.lower() for p in ["cpf", "cartão de crédito", "senha"]) return GuardrailFunctionOutput(tripwire_triggered=tem_pii) </code></pre> <p><strong>Tool Guardrails</strong> — rodam antes/depois de cada chamada de function tool:</p> <pre><code>from agents import function_tool, tool_input_guardrail, ToolGuardrailFunctionOutput @tool_input_guardrail def bloquear_segredos(data): args = data.context.tool_arguments or "{}" if "sk-" in args: return ToolGuardrailFunctionOutput.reject_content( "Remova segredos antes de chamar esta tool." ) return ToolGuardrailFunctionOutput.allow() @function_tool(tool_input_guardrails=[bloquear_segredos]) def processar_texto(texto: str) -&gt; str: """Processa texto para classificação.""" return f"Classificado: {len(texto)} caracteres" </code></pre> <p>Existe também a opção de rodar guardrails em <strong>modo bloqueante</strong> (<code>run_in_parallel=False</code>) — onde o guardrail termina antes do agente começar, garantindo zero tokens gastos em requests inválidos. Por default rodam em paralelo (melhor latência, mas o agente pode já ter começado quando o guardrail dispara).</p> <h3>Tracing — observabilidade de graça</h3> <p>Todo <code>Runner.run()</code> é automaticamente rastreado. Sem configuração, sem setup adicional. O SDK coleta:</p> <ul> <li>Gerações LLM (prompt, completion, token counts)</li> <li>Tool calls (nome, input, output, duração)</li> <li>Handoffs (fonte, alvo, razão)</li> <li>Guardrail checks (qual guardrail, resultado, duração)</li> </ul> <p>Os traces vão pro dashboard de Traces da OpenAI por padrão. Quer mandar pro Grafana, Datadog ou outro backend? Implemente um <code>TraceProcessor</code> custom:</p> <pre><code>from agents import trace with trace(workflow_name="Suporte ao Cliente"): resultado = Runner.run_sync(agente_triagem, "Preciso de ajuda") </code></pre> <p>Essa é uma funcionalidade que frameworks concorrentes ou não têm, ou cobram à parte (oi, LangSmith). Aqui é grátis desde o primeiro <code>run()</code>. Quando você está debugando por que um agente fez um handoff estranho ou por que uma tool falhou, os traces são ouro.</p> <h3>Context — estado compartilhado</h3> <p>O <code>RunContextWrapper</code> permite injetar contexto customizado que todas as tools e guardrails acessam:</p> <pre><code>from dataclasses import dataclass from agents import Agent, Runner, function_tool, RunContextWrapper @dataclass class ContextoApp: user_id: str plano: str saldo: float @function_tool def verificar_saldo(ctx: RunContextWrapper[ContextoApp]) -&gt; str: """Verifica o saldo do usuário.""" return f"Saldo atual: R$ {ctx.context.saldo:.2f}" contexto = ContextoApp(user_id="usr_123", plano="pro", saldo=150.00) resultado = await Runner.run(agente, "Qual meu saldo?", context=contexto) </code></pre> <p>O context é type-safe via generics. Se você tentar acessar um campo que não existe, o linter pega.</p> <h3>Sessions — memória persistente</h3> <p>Pra manter conversa entre turns (o agente lembrar o que o usuário disse antes), o SDK oferece sessions plugáveis:</p> <pre><code>from agents import Agent, Runner from agents.extensions.memory import SQLAlchemySession session = await SQLAlchemySession.create( connection_string="sqlite:///agente.db" ) agente = Agent(name="Memória", instructions="Lembre preferências do usuário.") await Runner.run(agente, "Meu nome é João.", session=session) resultado = await Runner.run(agente, "Qual meu nome?", session=session) # → "Seu nome é João." </code></pre> <p>Backends disponíveis: SQLite (dev), Redis (multi-processo), PostgreSQL via SQLAlchemy (produção), MongoDB, e até DaprSession pra ambientes cloud-native.</p> <h3>MCP — ferramentas externas</h3> <p>O SDK tem suporte nativo ao <a href="/blog/ferramentas-tools-e-mcp-servers">Model Context Protocol</a>, permitindo conectar qualquer MCP server como tool do agente:</p> <pre><code>from agents import Agent from agents.mcp import MCPServerStdio async with MCPServerStdio( name="Filesystem", params={"command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]} ) as server: agente = Agent( name="File Manager", instructions="Gerencie arquivos para o usuário.", mcp_servers=[server], ) </code></pre> <p>Isso abre um universo: databases, APIs, browsers, sistemas de arquivo — qualquer coisa que tenha um MCP server vira tool acessível pros seus agentes.</p> <hr /> <h2>Spider Chart</h2> <p>Avaliação em 8 eixos (0–100):</p> <pre><code> Facilidade de Uso 95 │ Documentação │ Ecosystem/Comunidade 80 ─────────┼───────── 65 ╱│╲ Tracing/ ╱ │ ╲ Flexibilidade Observ. 90 ──╱──│──╲── 55 ╱ │ ╲ Guardrails ╱ │ ╲ Multi-Provider 85 ───╱─────│─────╲─── 60 ╱ │ ╲ ╱ │ ╲ Multi-Agent │ Maturidade 75 ─────────┼───────── 80 </code></pre> <table> <thead> <tr> <th>Eixo</th> <th>Nota</th> <th>Justificativa</th> </tr> </thead> <tbody> <tr> <td><strong>Facilidade de Uso</strong></td> <td>95</td> <td>Quatro primitivos, zero boilerplate. Curva de aprendizado mais suave que qualquer concorrente.</td> </tr> <tr> <td><strong>Documentação</strong></td> <td>80</td> <td>Docs oficiais completas, com exemplos. Falta conteúdo em português e tutoriais avançados.</td> </tr> <tr> <td><strong>Tracing/Observabilidade</strong></td> <td>90</td> <td>Automático, gratuito, integrado. Difícil bater isso.</td> </tr> <tr> <td><strong>Guardrails</strong></td> <td>85</td> <td>Três escopos (input, output, tool), tripwire pattern elegante. Falta approval flows sofisticados.</td> </tr> <tr> <td><strong>Multi-Agent</strong></td> <td>75</td> <td>Handoffs funcionam bem pra padrão router/supervisor. Falta execução paralela nativa.</td> </tr> <tr> <td><strong>Multi-Provider</strong></td> <td>60</td> <td>Funciona com 100+ modelos via LiteLLM, mas features premium (tracing dashboard, hosted tools) são OpenAI-only.</td> </tr> <tr> <td><strong>Flexibilidade</strong></td> <td>55</td> <td>Opinado por design. Se seu workflow não é tree-shaped, vai lutar contra o framework.</td> </tr> <tr> <td><strong>Ecosystem/Comunidade</strong></td> <td>65</td> <td>Crescendo rápido, mas ainda atrás de LangChain/LangGraph em tamanho de comunidade e plugins.</td> </tr> <tr> <td><strong>Maturidade</strong></td> <td>80</td> <td>Em produção desde 2025. Empresas como Oscar Health já usam em produção. API estabilizando.</td> </tr> </tbody> </table> <hr /> <h2>Prós e Contras</h2> <h3>O que brilha</h3> <ul> <li> <p><strong>Zero cerimônia</strong> — Você vai de <code>pip install</code> a multi-agent funcionando em 20 minutos. Sério. Sem YAML, sem grafos, sem configuração de infraestrutura.</p> </li> <li> <p><strong>Tracing gratuito e automático</strong> — Não precisa configurar nada. Todo <code>Runner.run()</code> gera traces. Compare com LangSmith que cobra planos a partir de $39/mês pra funcionalidades similares.</p> </li> <li> <p><strong>Guardrails como cidadão de primeira classe</strong> — Não é um afterthought ou plugin. O sistema de tripwires é simples, testável e cobre input, output e tools.</p> </li> <li> <p><strong>Economia por design</strong> — Modelo barato no guardrail, modelo barato na triagem, modelo caro só no especialista. O SDK incentiva esse padrão naturalmente.</p> </li> <li> <p><strong>MCP nativo</strong> — Qualquer MCP server é tool. Sem adapters, sem wrappers, sem gambiarras.</p> </li> <li> <p><strong>Sandbox Agents</strong> — A evolução de abril/2026 permite rodar agentes em ambientes isolados com filesystem, shell e persistência. É basicamente o <a href="/blog/codex-openai">Codex</a> como library.</p> </li> </ul> <h3>Onde dói</h3> <ul> <li> <p><strong>Sem execução paralela nativa</strong> — Se você precisa de fan-out/fan-in (rodar 3 agentes em paralelo e sintetizar), vai ter que orquestrar com <code>asyncio.gather()</code> na mão. LangGraph faz isso out of the box.</p> </li> <li> <p><strong>Human-in-the-loop limitado</strong> — Guardrails conseguem <em>parar</em> a execução, mas não <em>pausar e retomar</em>. Fluxos de aprovação tipo "agente propõe → humano aprova → agente continua" exigem gambiarra.</p> </li> <li> <p><strong>Vendor lock-in prático</strong> — Sim, suporta outros modelos via LiteLLM. Mas tracing dashboard, hosted tools (WebSearch, FileSearch, CodeInterpreter), e sandbox agents são exclusivos OpenAI. Rodar com Anthropic ou local perde metade das features.</p> </li> <li> <p><strong>Sem TypeScript (ainda)</strong> — O SDK oficial é Python-only. Existe um port comunitário em TS, mas sem garantia de paridade. Se seu stack é Node, vai ter que esperar ou usar alternativas.</p> </li> <li> <p><strong>Handoffs são sequenciais</strong> — Um agente delega pra outro que delega pra outro. É sempre linear. Workflows onde dois agentes precisam dialogar entre si (A → B → A → B) ficam desajeitados.</p> </li> <li> <p><strong>Custos invisíveis</strong> — O SDK abstrai contagem de tokens. Você só descobre quanto gastou depois, nos traces. Não existe budget governor ou custo máximo por run.</p> </li> </ul> <hr /> <h2>Quando usar</h2> <p>O OpenAI Agents SDK é a escolha certa quando:</p> <p>✅ <strong>Seu stack já é OpenAI</strong> — Se você usa GPT-4o/gpt-5.x e a Responses API, o SDK adiciona orquestração multi-agent sem nova superfície de abstração.</p> <p>✅ <strong>Seu padrão é router → especialistas</strong> — Triagem que delega pra N especialistas é exatamente o que handoffs fazem bem. Suporte ao cliente com departamentos, pipelines de processamento com etapas especializadas.</p> <p>✅ <strong>Guardrails e compliance são requisitos</strong> — Se precisa de validação de input/output como requisito regulatório ou de segurança, o SDK entrega isso pronto.</p> <p>✅ <strong>Prototipagem rápida com caminho pra produção</strong> — Ao contrário do CrewAI (ótimo pra prototipar mas questionável em prod), o Agents SDK é production-ready desde o dia um. Tracing, sessions, error handling — tudo incluído.</p> <p>✅ <strong>Migração do Assistants API</strong> — O Assistants API será sunset em agosto de 2026. Se você usa, essa é a migração recomendada oficialmente pela OpenAI.</p> <p>✅ <strong>Agentes que operam em arquivos e código</strong> — Com sandbox agents, seu agente pode inspecionar arquivos, rodar comandos e editar código em ambientes isolados. Pense num <a href="/blog/harness-e-loop-arquitetura-agentes">harness de agente de codificação</a> encapsulado numa lib.</p> <h2>Quando NÃO usar</h2> <p>❌ <strong>Workflows com paralelismo complexo</strong> — Se você precisa de fan-out/fan-in, dependency graphs entre tasks, ou múltiplos agentes rodando simultâneamente com estado compartilhado, LangGraph é melhor equipado.</p> <p>❌ <strong>Diálogos multi-turn entre agentes</strong> — Se seu valor está em agentes que se criticam mutuamente (um escreve, outro revisa, o primeiro corrige), AutoGen modela isso naturalmente com group chat. Handoffs são unidirecionais.</p> <p>❌ <strong>Stack 100% TypeScript/JavaScript</strong> — Sem SDK oficial em TS, você vai lutar com bindings incompletas. Espere o suporte oficial ou use o Vercel AI SDK como alternativa.</p> <p>❌ <strong>Orçamento apertado de tokens com controle granular</strong> — O SDK não tem cost governor. Se cada token conta e você precisa de budget caps por agent run, vai ter que instrumentar manualmente.</p> <p>❌ <strong>Multi-provider como requisito core</strong> — Se amanhã você quer trocar OpenAI por Anthropic sem perder funcionalidade, vai perder tracing dashboard, hosted tools e sandbox. A promessa "provider-agnostic" é parcial.</p> <p>❌ <strong>Fluxos de aprovação humana sofisticados</strong> — Pra workflows onde um agente propõe uma ação, pausa, um humano revisa no Slack, aprova, e o agente continua — o SDK não tem mecanismo nativo. Precisa de infra custom em volta.</p> <hr /> <h2>Comparativo rápido com concorrentes</h2> <table> <thead> <tr> <th></th> <th>Agents SDK</th> <th>LangGraph</th> <th>CrewAI</th> <th>AutoGen/MAF</th> </tr> </thead> <tbody> <tr> <td><strong>Curva de aprendizado</strong></td> <td>Baixa</td> <td>Alta</td> <td>Baixa</td> <td>Média</td> </tr> <tr> <td><strong>Multi-agent</strong></td> <td>Handoffs</td> <td>Grafos</td> <td>Roles+Tasks</td> <td>Group Chat</td> </tr> <tr> <td><strong>Parallelismo</strong></td> <td>Manual</td> <td>Nativo</td> <td>Sequencial</td> <td>Via chat</td> </tr> <tr> <td><strong>Guardrails</strong></td> <td>Nativo (3 scopes)</td> <td>Via callbacks</td> <td>—</td> <td>Limitado</td> </tr> <tr> <td><strong>Tracing</strong></td> <td>Grátis/automático</td> <td>LangSmith (pago)</td> <td>Limitado</td> <td>Third-party</td> </tr> <tr> <td><strong>MCP</strong></td> <td>Nativo</td> <td>Community</td> <td>Via plugins</td> <td>Community</td> </tr> <tr> <td><strong>Maturidade</strong></td> <td>Alta</td> <td>Mais alta</td> <td>Crescendo</td> <td>Em transição (MAF)</td> </tr> </tbody> </table> <hr /> <h2>Próximos passos</h2> <h3>Se você quer começar agora</h3> <ol> <li><strong><code>pip install openai-agents</code></strong> — instale e rode o quickstart da <a href="https://openai.github.io/openai-agents-python/quickstart/">documentação oficial</a></li> <li><strong>Monte um triagem + 2 especialistas</strong> — use o padrão router do tutorial acima como base</li> <li><strong>Adicione guardrails</strong> — comece com um input guardrail simples que bloqueia off-topic</li> <li><strong>Habilite tracing</strong> — já vem ligado, mas explore o dashboard em platform.openai.com/traces</li> <li><strong>Conecte um MCP server</strong> — filesystem ou database, pra experimentar tools externas</li> </ol> <h3>Se quer ir além</h3> <ul> <li>Explore <strong>Sandbox Agents</strong> pra agentes que operam em código — <a href="https://openai.com/en-US/index/the-next-evolution-of-the-agents-sdk/">o post da OpenAI de abril/2026</a> detalha o modelo de isolamento</li> <li>Combine com <strong>sessions em Redis/PostgreSQL</strong> pra agentes stateful em produção</li> <li>Implemente um <code>TraceProcessor</code> custom pra mandar traces pro <a href="/blog/harness-e-loop-arquitetura-agentes">Grafana ou seu stack de observabilidade</a></li> <li>Avalie se handoffs atendem ou se você precisa de algo mais sofisticado — se sim, olhe LangGraph</li> </ul> <h3>Leituras complementares aqui no blog</h3> <ul> <li><a href="/blog/agent-frameworks-vs-coding-agents">Agent Frameworks vs Coding Agents: Qual a diferença?</a></li> <li><a href="/blog/harness-e-loop-arquitetura-agentes">Harness e Loop: A Arquitetura por Trás dos Agentes</a></li> <li><a href="/blog/ferramentas-tools-e-mcp-servers">Ferramentas, Tools e MCP Servers</a></li> <li><a href="/blog/codex-openai">Codex da OpenAI: Agente de Código na Nuvem</a></li> </ul> <hr /> <h2>Veredicto</h2> <p>O OpenAI Agents SDK é a resposta certa pra pergunta "qual o menor framework que me dá multi-agent funcional em produção?". Quatro primitivos. Tracing grátis. Guardrails embutidos. MCP nativo. Sessions plugáveis.</p> <p>Não é a resposta certa pra tudo — se você precisa de grafos complexos, paralelismo nativo, ou independência total de provider, existem ferramentas melhores. Mas pra 80% dos casos de uso "tenho um sistema que precisa rotear requests entre agentes especializados", o SDK entrega mais com menos código e menos dependências que qualquer alternativa.</p> <p>A OpenAI está apostando que minimalismo com opinião ganha de generalismo com complexidade. No ecossistema de agentes de codificação onde todos reclamam de excesso de abstração, talvez eles tenham razão.</p> <hr /> <p><em>Precisa de ajuda implementando agentes em produção? Consultoria personalizada em <a href="https://ft.ia.br">ft.ia.br</a>.</em></p>