Phase 19 - Lesson 16
Capstone 16 — Agente Autônomo GitHub Issue-to-PR
O AWS Remote SWE Agents, o Cursor Background Agents, a nuvem OpenAI Codex e o Google Jules entregam o mesmo formato de produto em 2026: rotule uma issue e receba um PR. Execute um agente em um sandbox na nuvem, verifique se os testes passam e envie um PR pronto para revisão com a justificativa (rationale). As partes difíceis são reproduzir o ambiente de build do repositório automaticamente, evitar o vazamento de credenciais, aplicar orçamentos por repositório e garantir que o agente não possa realizar force-push. Este capstone constrói a versão auto-hospedada (self-hosted) e a compara em custo e taxa de sucesso com as alternativas hospedadas.
Tipo: Capstone Idiomas: Python (agente), TypeScript (GitHub App), YAML (Actions) Pré-requisitos: Fase 11 (engenharia de LLM), Fase 13 (ferramentas), Fase 14 (agentes), Fase 15 (autônomo), Fase 17 (infraestrutura) Fases exercitadas: P11 · P13 · P14 · P15 · P17 Tempo: 30 horas
Problema
O agente de codificação assíncrono na nuvem é uma categoria de produto separada dos agentes de codificação interativos (capstone 01). A experiência do usuário (UX) é uma etiqueta (label) no GitHub. Você rotula uma issue como @agent fix this, um worker é iniciado em um sandbox na nuvem, clona o repositório, roda testes, edita arquivos, verifica e abre um PR com a justificativa do agente no corpo. Sem loop interativo, sem terminal. AWS Remote SWE Agents, Cursor Background Agents, nuvem OpenAI Codex, Google Jules e Factory Droids convergem todos para isso.
Os desafios de engenharia são concretos: reprodução do ambiente (o agente tem que construir o repositório do zero sem uma imagem de desenvolvimento em cache), testes instáveis (flaky tests, que devem ser executados novamente ou isolados), escopo de credenciais (um GitHub App com permissões refinadas mínimas), aplicação de orçamento por repositório por dia e política de proibição de force-push. O capstone mede a taxa de sucesso (pass rate), custo e segurança em relação às alternativas hospedadas.
Conceito
O gatilho (trigger) é um webhook do GitHub (etiqueta de issue ou comentário de PR). Um despachante (dispatcher) enfileira o trabalho no ECS Fargate ou Lambda. O worker puxa o repositório para um sandbox Daytona ou E2B com um Dockerfile genérico inferido a partir do repositório (idioma, framework). O agente executa um loop do mini-swe-agent ou SWE-agent v2 contra o Claude Opus 4.7 ou GPT-5.4-Codex. Ele realiza iterações: lê código, propõe correção, aplica patch, roda testes.
A verificação é a etapa restritiva (gate). O CI completo deve passar no sandbox antes que o PR seja aberto. O delta de cobertura é calculado; se for negativo além de um limite, o PR é aberto, mas recebe a etiqueta needs-review. O agente publica a justificativa como a descrição do PR, além de uma thread @agent que o revisor pode marcar para acompanhamentos.
A segurança tem seu escopo definido por meio de duas superfícies diferentes do GitHub: o App fornece um token de instalação de curta duração com permissões de workflows: read e escopos restritos de conteúdo de repositório/PR; a proteção de branch (e não as permissões do app) impõe "nenhuma gravação direta na main" e "nenhum force-push" — o app nunca é adicionado à lista de desvio (bypass list). O acesso somente leitura com escopo de caminho para .github/workflows não é uma primitiva real de GitHub App, de modo que a lista de permissões (allow-list) do agente para edições de arquivos deve impor isso diretamente no worker. Os tetos de orçamento por repositório por dia são aplicados no dispatcher (por exemplo, no máximo 5 PRs por repositório por dia,