Elton José logo
Elton José
AWS Kiro

AWS Kiro: O IDE Construído do Zero para SDD — E Por Que Isso Muda Tudo

AWS Kiro: O IDE Construído do Zero para SDD — E Por Que Isso Muda Tudo
0 visualizações
12 minutos de leitura
#AWS Kiro

AWS Kiro: O IDE Construído do Zero para SDD — E Por Que Isso Muda Tudo

Tem uma diferença fundamental entre um IDE com IA e um IDE para IA.

O Cursor, o Windsurf, o GitHub Copilot no VS Code — todos são IDEs com IA. Pegaram uma ferramenta existente e adicionaram capacidades de IA em cima: autocompletar, chat, refactor, geração de código. A IA é um add-on, uma camada sobre um IDE que foi projetado para humanos digitando código.

O Kiro é diferente. A AWS partiu de uma premissa: e se o IDE fosse projetado do zero para um mundo onde agentes de IA executam a maior parte do código? Qual seria a interface adequada não para escrever código, mas para especificar o que o sistema deve fazer e deixar o agente implementar?

A resposta é um IDE onde o ponto de partida não é um arquivo TypeScript em branco — é uma spec.


O Que É o Kiro

O Kiro é um IDE em public preview desenvolvido pela AWS, construído sobre o Code OSS (a base open source do VS Code), mas com uma filosofia de design completamente diferente.

Em vez de começar com "abra um arquivo e escreva código", o Kiro começa com "descreva o que você quer construir". A partir dessa descrição em linguagem natural, o Kiro:

  1. Gera requirements detalhados com critérios de aceitação em notação EARS
  2. Produz uma especificação técnica com decisões de design e arquitetura
  3. Decompõe em tasks discretas e implementáveis
  4. Tem agentes que executam as tasks, guiados pelos artefatos acima

Isso é exatamente o ciclo do SDD — e o Kiro é a primeira ferramenta que implementa esse ciclo como fluxo nativo do IDE, não como um processo externo.

Fluxo do Kiro: prompt do usuário → requirements (EARS) → spec técnica → tasks → execução por agentes

A Notação EARS

Um detalhe que diferencia o Kiro de outros IDEs com IA: os requirements são escritos em EARS (Easy Approach to Requirements Syntax), uma notação semi-formal para especificações de software.

EARS define templates de frases para diferentes tipos de requisitos:

# Tipos de requisitos EARS

UBIQUITOUS (sempre verdadeiro):
"O sistema SHALL [ação]"
→ "O sistema SHALL validar o formato do email antes de criar um usuário"

EVENT-DRIVEN (disparado por evento):
"WHEN [condição] THE [sistema] SHALL [ação]"
→ "WHEN um usuário tenta fazer login com senha incorreta 3 vezes
   THE sistema SHALL bloquear a conta por 15 minutos"

UNWANTED BEHAVIOR (tratamento de erro):
"IF [condição indesejada] THEN THE [sistema] SHALL [resposta]"
→ "IF o serviço de email estiver indisponível
   THEN THE sistema SHALL enfileirar o email e tentar novamente em 5 minutos"

STATE-DRIVEN (baseado em estado):
"WHILE [estado] THE [sistema] SHALL [ação]"
→ "WHILE o usuário não estiver autenticado THE sistema SHALL redirecionar para /login"

Por que EARS importa? Porque transforma intenção ambígua em critério de aceitação verificável. "O sistema deve ser rápido" não é um requirement. "O sistema SHALL retornar a lista de posts em menos de 200ms para 95% das requisições" é.

Quando o Kiro gera requirements a partir da sua descrição, ele usa EARS para estruturar os critérios de aceitação. Isso significa que cada requirement já vem com a resposta para "como eu sei que isso está implementado corretamente?"


A Anatomia de um Projeto no Kiro

.kiro/specs/

O coração do projeto Kiro. Cada funcionalidade tem sua própria spec:

.kiro/
  specs/
    user-authentication/
      requirements.md    # o que o sistema deve fazer (EARS)
      design.md          # como vai ser implementado
      tasks.md           # decomposição em tasks executáveis
    post-scheduling/
      requirements.md
      design.md
      tasks.md

requirements.md — gerado pelo Kiro a partir da sua descrição, editável por você:

# Requirements: User Authentication

## User Stories

**US-001**: Como usuário, quero fazer login com email e senha para acessar
minha conta.

**US-002**: Como usuário, quero redefinir minha senha via email para recuperar
acesso caso esqueça.

## Functional Requirements

1. WHEN um usuário submete email e senha válidos THE sistema SHALL criar uma
   sessão autenticada e redirecionar para o dashboard.

2. WHEN um usuário submete credenciais inválidas THE sistema SHALL exibir
   mensagem de erro genérica (sem indicar se o email ou senha está incorreto).

3. IF um usuário tenta login com senha incorreta 5 vezes consecutivas THEN
   THE sistema SHALL bloquear o IP por 30 minutos e notificar o email
   cadastrado.

4. O sistema SHALL invalidar a sessão após 24 horas de inatividade.

5. O sistema SHALL suportar autenticação via Google OAuth como alternativa
   ao email/senha.

## Acceptance Criteria

- [ ] Login com credenciais válidas redireciona para dashboard em < 500ms
- [ ] Tentativas inválidas não revelam se o email existe na base
- [ ] Após 5 tentativas falhas, conta é bloqueada por 30 min
- [ ] Sessões expiram após 24h de inatividade
- [ ] OAuth Google funciona como alternativa

tasks.md — gerado a partir do design, com granularidade de implementação:

# Tasks: User Authentication

## Phase 1: Core Login

- [ ] **T001** — Criar tabela `users` com campos: id, email, password_hash,
      created_at, last_login_at, is_blocked, block_expires_at
- [ ] **T002** — Implementar endpoint POST /auth/login com validação de
      credenciais e criação de sessão JWT
- [ ] **T003** — Implementar middleware de rate limiting: máximo 5 tentativas
      por IP em janela de 10 minutos
- [ ] **T004** — Implementar lógica de bloqueio de conta após 5 tentativas

## Phase 2: Password Recovery

- [ ] **T005** — Implementar endpoint POST /auth/forgot-password com envio
      de email via SES
- [ ] **T006** — Implementar endpoint POST /auth/reset-password com validação
      de token e expiração
...

Agent Hooks: O Diferencial Mais Poderoso

Os Agent Hooks são o que transforma o Kiro de "IDE com specs" para "IDE onde agentes trabalham ao seu lado continuamente".

Um Agent Hook é uma automação event-driven: quando algo acontece no ambiente de desenvolvimento (você salva um arquivo, cria um componente, modifica uma interface), um agente é disparado para executar uma tarefa relacionada.

Exemplos práticos:

# .kiro/hooks/hooks.yaml

hooks:
  - name: "Generate tests on save"
    trigger:
      type: file_save
      pattern: "src/**/*.ts"
      exclude: "**/*.test.ts"
    agent:
      instruction: |
        Analise o arquivo salvo. Se contém funções públicas sem testes
        correspondentes, crie ou atualize o arquivo de teste colocado com
        o código (mesmo diretório, extensão .test.ts) cobrindo os casos
        principais incluindo edge cases e tratamento de erros.
      max_tokens: 4000

  - name: "Update API docs on interface change"
    trigger:
      type: file_save
      pattern: "src/types/**/*.ts"
    agent:
      instruction: |
        Verifique se as mudanças no arquivo de tipos impactam a documentação
        da API em docs/api/. Se sim, atualize automaticamente os arquivos
        de documentação afetados.

  - name: "Check spec compliance on task completion"
    trigger:
      type: task_completed
      spec: "*"
    agent:
      instruction: |
        Compare a implementação com os acceptance criteria da spec.
        Gere um relatório em .kiro/reports/{spec_name}-validation.md indicando
        quais critérios passam e quais ainda precisam de trabalho.

O ganho é enorme: coisas que você normalmente esquece de fazer (escrever testes, atualizar docs, validar contra a spec) acontecem automaticamente no momento certo.

Diagrama de Agent Hooks do Kiro: eventos (file save, task complete, build fail) disparando agentes automaticamente

Kiro vs. Cursor: Uma Comparação Honesta

O Cursor continua sendo o melhor IDE para quem quer IA como copiloto de código — autocomplete superior, chat contextual muito bom, edição inline fluida. Se você está feliz com o Cursor e seu fluxo é principalmente "escrevo código com ajuda da IA", o Cursor é provavelmente a escolha certa.

O Kiro é melhor quando:

Você está começando algo do zero: o fluxo specs → design → tasks é mais valioso no início de um projeto ou feature. Pegar uma codebase existente e tentar retroativamente aplicar specs a ela é mais trabalhoso.

Você trabalha em times: as specs do Kiro são artefatos compartilháveis que toda a equipe pode consultar. O CLAUDE.md do seu Cursor é um arquivo local, pessoal. As specs do .kiro/specs/ vivem no repositório e servem de referência para humanos e agentes igualmente.

Você quer Agent Hooks: a automação event-driven é única do Kiro hoje. Cursor não tem equivalente nativo.

SDD já é seu processo: se você já trabalha com specs antes de implementar, o Kiro vai parecer um IDE feito para você. Se você está tentando adotar SDD, o Kiro pode ser a ferramenta que torna a adoção mais natural — o processo está na interface, não é algo que você força externamente.

Por outro lado, o Kiro ainda está em public preview. A edição de código direto é menos fluida que o Cursor, o ecossistema de extensões é muito menor (herda do Code OSS, mas não é 100% compatível com extensões do VS Code), e o suporte a linguagens e frameworks menos populares ainda é inconsistente.

A minha avaliação: para projetos novos onde SDD é o processo e você tem um time alinhado, vale experimentar o Kiro. Para código legado ou workflow onde você já é produtivo no Cursor, a troca provavelmente não vale o custo de adaptação agora.


O Ciclo Completo: Do Problema ao Código

Para tornar isso concreto, veja como fica um ciclo completo no Kiro para uma feature real — "adicionar autenticação com Google OAuth ao blog".

Passo 1: Você descreve o problema

"Quero adicionar login com Google ao blog. O usuário clica em
'Entrar com Google', autentica via OAuth 2.0, e o sistema cria
uma conta local se for o primeiro acesso ou faz login se já existe."

Passo 2: Kiro gera os requirements

# Requirements: Google OAuth Authentication

1. WHEN um usuário clica em "Entrar com Google" THE sistema SHALL
   redirecionar para o fluxo de autorização Google OAuth 2.0.

2. WHEN o Google retorna um código de autorização válido THE sistema SHALL:
   a) Trocar o código por access token e profile do usuário
   b) Se email não existe na base: criar conta com nome, email e avatar do Google
   c) Se email já existe: fazer login na conta existente
   d) Criar sessão JWT e redirecionar para a página anterior ou /dashboard

3. IF o Google retornar erro de autorização THEN THE sistema SHALL
   redirecionar para /login com mensagem de erro amigável.

4. O sistema SHALL armazenar apenas: nome, email, avatar_url, google_id.
   NÃO SHALL armazenar o access token do Google.

5. WHEN um usuário com conta OAuth tenta fazer login por email/senha
   THE sistema SHALL exibir mensagem sugerindo login via Google.

## Acceptance Criteria
- [ ] Fluxo completo funciona em < 3 segundos
- [ ] Primeiro acesso cria conta automaticamente
- [ ] Acesso subsequente faz login sem criar conta duplicada
- [ ] Erro de cancelamento pelo usuário é tratado graciosamente
- [ ] Testes cobrindo todos os cenários do fluxo OAuth

Passo 3: Kiro gera o design técnico

O Kiro analisa o código existente — stack, bibliotecas já instaladas, padrões de auth já presentes — e propõe uma implementação que se encaixa no projeto:

# Design: Google OAuth

## Abordagem
Usar next-auth v5 (já presente no projeto) com o provider Google.
Tabela users já existe — adicionar coluna google_id nullable.

## Mudanças necessárias
1. Adicionar GOOGLE_CLIENT_ID e GOOGLE_CLIENT_SECRET ao .env
2. Configurar GoogleProvider no next-auth config
3. Adicionar migration: ALTER TABLE users ADD COLUMN google_id TEXT
4. Atualizar callback de signIn para merge de conta por email
5. Adicionar botão "Entrar com Google" na página de login

Passo 4: Tasks geradas automaticamente

- [ ] T001 — Adicionar variáveis GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET ao .env.example
- [ ] T002 — Configurar GoogleProvider em src/lib/auth.ts
- [ ] T003 — Criar migration SQL para adicionar google_id na tabela users
- [ ] T004 — Implementar lógica de merge de conta por email no callback
- [ ] T005 — Criar componente GoogleLoginButton em src/components/
- [ ] T006 — Atualizar página /login para incluir o botão
- [ ] T007 — Escrever testes para o fluxo OAuth (mock do provider)
- [ ] T008 — Verificar acceptance criteria contra implementação

Passo 5: Agentes executam as tasks

Você seleciona as tasks, o Kiro as delega para agentes, e cada uma é implementada seguindo os artefatos criados nos passos anteriores. Os agentes têm o contexto completo — o requirement original, o design escolhido, as convenções do projeto via steering files — e produzem código alinhado com tudo isso.

O que levaria um ciclo de planejamento em reunião + implementação manual se transforma em um fluxo guiado onde o plano e a execução vivem no mesmo lugar.


O Modelo por Baixo

O Kiro é construído sobre Amazon Bedrock e usa Claude Sonnet como modelo principal (com opção de escolher entre Claude 4.0 e 3.7). Isso significa que se você já usa Claude Code ou tem familiaridade com como o Claude raciocina, o comportamento dos agentes do Kiro vai ser familiar.

A escolha da Anthropic pela AWS não é acidental — é uma parceria estratégica. A Anthropic usa AWS como cloud principal, e o Kiro é o veículo pelo qual a AWS distribui Claude para o mercado de desenvolvedores. Para a Anthropic, é distribuição. Para a AWS, é diferenciação no mercado de ferramentas de IA para devs.


Como Começar

O Kiro está em public preview gratuito (com limites de uso).

# Download em kiro.dev
# Após instalar, inicie um novo projeto:
kiro new meu-projeto

# Ou abra um projeto existente e inicialize o Kiro:
kiro init

No primeiro uso, o Kiro vai pedir que você descreva o projeto. A partir daí, ele gera a estrutura inicial de specs e você começa a trabalhar a partir dela.

Para explorar sem compromisso: tente criar um projeto novo com uma feature pequena e bem definida. O ciclo specs → tasks → implementação fica mais claro em algo simples do que em um projeto grande com muitas variáveis.


Recursos

Newsletter

Receba os melhores artigos toda semana

Sem spam. Só conteúdo de qualidade sobre IA & Dev.

Foto de Elton José

Escrito por

eltonjose

Engenheiro de software e estrategista de produtos digitais, focado em IA pragmática e em transformar experiências de trabalho remoto em aprendizados aplicáveis. Compartilho frameworks e decisões reais que uso em consultorias e projetos.

  • Principais temasAWS Kiro, SDD
  • Formato do conteúdoGuia prático + insights de carreira