Pipeline Agentic
~40 min Avançado Parte 6

W5: Pipeline 100% Agentic

Zero intervenção humana. Um trigger (GitHub issue, webhook, cron) inicia um orchestrator que spawna agentes especializados criados em runtime, executa em paralelo, verifica, testa e faz merge — completamente autônomo.

Filosofia e quando usar

O pipeline 100% agentic representa o topo da pirâmide de automação com Claude Code. Nenhum humano aprova etapas intermediárias: do trigger ao merge em produção, tudo ocorre por decisão de agentes. Isso é viável — e confiável — apenas sob condições muito específicas.

Para que cenários este workflow é adequado

  • Features bem-definidas: spec clara, critérios de aceite explícitos, sem ambiguidade de produto
  • Tarefas repetitivas ou de manutenção: rate limiting, paginação, adição de campos, atualizações de dependências
  • Hotfixes com escopo restrito: erros de validação, mensagens de erro, ajustes de configuração
  • Automações de infraestrutura: rotação de secrets, atualização de certificados, bumps de versão

Para que cenários este workflow NÃO é adequado

  • Features de alta ambiguidade ou que dependem de julgamento de produto
  • Mudanças de arquitetura com impacto transversal no codebase
  • Qualquer alteração onde o custo de erro é alto e rollback é complexo
  • Código que lida com PII, dados financeiros ou compliance regulatório sem revisão humana adicional

Pré-requisito inegociável: o pipeline deve ter testes rigorosos antes de ser autônomo

Antes de ativar autonomia total, você precisa de:

  • Suíte de testes com cobertura de pelo menos 80% nas rotas críticas
  • Testes de integração com banco de dados real (não mocks)
  • Testes E2E cobrindo as jornadas de usuário afetadas
  • Load tests estabelecendo baseline de throughput
  • Gates de qualidade que bloqueiam o pipeline se qualquer teste falhar
Autonomia sem testes do pipeline é caos automatizado. Um agente que faz merge direto em produção sem uma suíte de testes robusta não é automação — é uma roleta-russa executada em escala. Invista primeiro nos testes, depois na autonomia.

Arquitetura do pipeline

O pipeline agentic tem três camadas: triggers que iniciam o processo, agentes especializados que trabalham em paralelo, e gates de qualidade que bloqueiam o avanço até que todos os critérios sejam satisfeitos.

flowchart TD T1[GitHub Issue\nWebhook] --> ORC T2[Cron Job] --> ORC T3[API Trigger] --> ORC ORC[Orchestrator\ncontexto < 80K tokens] --> ORC1[Lê issue/ticket\nAnalisa codebase] ORC1 --> ORC2{Quais especialistas\nsão necessários?} ORC2 -->|Backend| BA[Backend Agent\n< 60K tokens\nHex Arch + TDD] ORC2 -->|Frontend| FA[Frontend Agent\n< 60K tokens\nshadcn/ui + Lucide] ORC2 -->|Testes| TA[Test Agent\n< 60K tokens\nTDD-first] ORC2 -->|Segurança| SA[Security Agent\n< 60K tokens\nOWASP Top 10] BA --> F1[Arquivos de implementação] FA --> F2[Componentes UI] TA --> F3[Suíte de testes] SA --> F4[Security report] F1 & F2 & F3 & F4 --> ORC3[Orchestrator consolida] ORC3 --> ORC4[Review Agent\ncode quality + SOLID] ORC4 --> GATE1{Passou\nreview?} GATE1 -->|Não| ORC5[Debug Agent\ncontexto do erro] ORC5 --> BA GATE1 -->|Sim| TEST[Testing Pipeline] TEST --> T1A[vitest unit] T1A --> T2A[vitest integration] T2A --> T3A[cypress headless] T3A --> T4A{API mudou?} T4A -->|Sim| T5A[k6 load + stress] T4A -->|Não| GATE2 T5A --> GATE2 GATE2{Todos os\ntestes passaram?} -->|Não| ORC6[Análise de falha\nnovo ciclo] ORC6 --> BA GATE2 -->|Sim| MERGE[gh pr create\nauto-approve policy\ngh pr merge] MERGE --> DEPLOY[vercel deploy\nsmoke test] DEPLOY --> CLOSE[gh issue close]

Pipeline 100% agentic: do trigger ao merge autônomo com gates de qualidade em cada etapa

Responsabilidades de cada camada

Orchestrator (< 80K tokens de contexto ativo): analisa o issue, decide quais agentes spawnar, consolida resultados e mantém o estado do pipeline em arquivos — nunca em memória. É o único agente que tem visão do pipeline completo.

Agentes especializados (< 60K tokens cada): recebem um brief focado, trabalham em paralelo, e escrevem output em arquivos no diretório .pipeline/[issue-number]/. Nunca se comunicam diretamente entre si — apenas através do orchestrator.

Review Agent: audita o output consolidado contra critérios de qualidade: SOLID, ausência de regressões, OWASP Top 10. Produz um relatório estruturado que o orchestrator usa para decidir se avança ou inicia um novo ciclo de correção.

Testing Pipeline: sequência determinística de testes. Cada etapa só executa se a anterior passou. O resultado é um JSON estruturado que o orchestrator usa como gate final.

Exemplo concreto — do zero ao merge

Cenário real: Issue GitHub #247 reportando abuso na API de usuários. Acompanhe cada passo do pipeline desde o webhook de trigger até o fechamento automático do issue.

Passo 1 — Trigger: webhook do GitHub

O GitHub envia um webhook quando o issue é aberto. Seu servidor de automação (ou GitHub Actions) intercepta o payload e inicia o orchestrator.

// Webhook payload do GitHub
{
  "action": "opened",
  "issue": {
    "number": 247,
    "title": "Adicionar rate limiting de 100 req/min na API de usuários",
    "body": "Estamos sofrendo abuse na rota GET /api/users. Precisamos de rate limiting por IP com resposta 429.",
    "labels": [{"name": "enhancement"}, {"name": "security"}]
  }
}

Passo 2 — Orchestrator boot (< 30K tokens de contexto inicial)

O orchestrator lê o issue, analisa o codebase relevante e produz um plano estruturado de quais agentes spawnar. O output é limitado a 2K tokens para manter o contexto enxuto.

claude -p "
Issue #247: Adicionar rate limiting 100 req/min na API de usuários.
Leia src/api/users/ e identifique:
1. Qual middleware de rate limiting está disponível no projeto
2. Quais agentes você vai spawnar e por quê
3. Escreva agents-plan.json com a lista de agentes e seus briefs
Contexto máximo: mantenha resposta < 2K tokens.
Escreva resultado em .pipeline/247/orchestrator-plan.json"

O arquivo .pipeline/247/orchestrator-plan.json gerado contém o mapa de agentes e os briefs que cada um receberá. Isso separa a decisão de planejamento da execução.

{
  "issue": 247,
  "agents": [
    {
      "id": "backend",
      "brief_file": ".pipeline/247/backend-brief.txt",
      "rationale": "Implementar middleware rate-limit em src/api/users/ com resposta 429"
    },
    {
      "id": "test",
      "brief_file": ".pipeline/247/test-brief.txt",
      "rationale": "TDD-first: escrever testes para rate limiting antes da implementação"
    },
    {
      "id": "security",
      "brief_file": ".pipeline/247/security-brief.txt",
      "rationale": "Issue tem label security — auditar OWASP A03 (injection via IP header) e A07 (auth bypass)"
    }
  ]
}

Passo 3 — Spawn paralelo dos agentes especializados

O orchestrator lança os agentes em paralelo usando subshells em background. O wait garante que todos terminem antes de consolidar.

# Backend Agent — implementa o middleware
claude -p "$(cat .pipeline/247/backend-brief.txt)" &

# Test Agent — TDD: escreve testes ANTES da implementação
claude -p "$(cat .pipeline/247/test-brief.txt)" &

# Security Agent — OWASP A03: injection via X-Forwarded-For, A07: bypass por header
claude -p "$(cat .pipeline/247/security-brief.txt)" &

wait # aguarda os 3 terminarem antes de consolidar
Por que o Test Agent roda em paralelo com o Backend Agent? O Test Agent recebe um brief com a spec da feature (o que o middleware deve fazer), não o código do Backend Agent. Ele escreve testes contra a interface esperada. Quando o Backend Agent termina, os testes já existem — o ciclo Red/Green começa imediatamente na fase de consolidação.

Passo 4 — Gate de integração: Review Agent

O Review Agent lê os outputs de todos os agentes e produz um relatório estruturado. O orchestrator usa esse relatório para decidir: avança para o testing pipeline ou inicia um novo ciclo com o Debug Agent.

# Review agent consolida e audita
claude -p "Leia .pipeline/247/backend-output/, .pipeline/247/tests/, .pipeline/247/security-report.json.
Verifique: SOLID, sem regressões, OWASP OK.
Escreva .pipeline/247/review-result.json com status e issues."
// .pipeline/247/review-result.json
{
  "status": "approved",
  "solid_violations": [],
  "owasp_issues": [],
  "regression_risk": "low",
  "notes": "X-Forwarded-For sanitizado corretamente. Testes cobrem cenários de bypass."
}

Passo 5 — Testing pipeline sequencial

Com o review aprovado, o pipeline executa testes em sequência determinística. Cada comando gera um JSON que o orchestrator analisa para decidir se avança ou dispara análise de falha.

# Unidade: domínio isolado, sem I/O externo
npx vitest run --reporter=json > .pipeline/247/test-results.json

# E2E: jornadas críticas com browser headless
npx cypress run --headless --reporter json > .pipeline/247/cypress-results.json

# Load + stress: somente se API mudou (rate limiting mudou o contrato)
k6 run --out json=.pipeline/247/k6-results.json k6/load.js

# Auditoria de dependências: OWASP A06
npm audit --json > .pipeline/247/audit-results.json

Passo 6 — PR criação, merge automático e fechamento do issue

Todos os gates passaram. O orchestrator cria o PR, aplica a auto-approve policy e fecha o issue com referência ao PR gerado.

gh pr create \
  --title "feat: rate limiting 100 req/min na API de usuários (closes #247)" \
  --body "$(cat .pipeline/247/pr-description.md)"

gh pr merge --squash --auto

gh issue close 247 --comment "Implementado via pipeline autônomo. PR #$(gh pr view --json number -q .number)"
Do webhook ao merge em produção: zero interação humana, todos os gates de qualidade respeitados, rastreabilidade completa em .pipeline/247/. O histórico do pipeline fica disponível para auditoria e post-mortem.

Dynamic agent spawning — criação em runtime

Uma das características centrais deste pipeline é que não existe lista fixa de agentes. O orchestrator analisa cada issue e decide em runtime quais especialistas são necessários. A mesma pipeline que spawna 3 agentes para um rate limiting pode spawnar 6 para uma feature que envolve migração de banco, frontend e mudança de autenticação.

Como o orchestrator decide quais agentes criar

A decisão é baseada em análise do issue: labels, palavras-chave no corpo, e impacto nos módulos do codebase identificados na fase de boot.

# Regras de decisão do orchestrator (lógica de seleção de agentes)

# Label "security" presente → spawna security agent com checklist OWASP
if issue.labels includes "security":
  spawn security-agent --brief security-brief.txt

# Corpo menciona "frontend" ou "UI" → spawna frontend agent com skill frontend-design
if issue.body matches /(frontend|UI|componente|tela)/i:
  spawn frontend-agent --skill frontend-design --brief frontend-brief.txt

# Corpo menciona "banco" ou "migration" → spawna migration agent
if issue.body matches /(database|migration|schema|PostgreSQL)/i:
  spawn migration-agent --brief migration-brief.txt

# Corpo menciona "performance" ou "latência" → spawna perf agent com k6
if issue.body matches /(performance|latência|throughput|slow)/i:
  spawn perf-agent --tools k6 --brief perf-brief.txt

Como criar um skill especializado em runtime

Para issues com domínios incomuns — como zero-downtime migrations de PostgreSQL — o orchestrator pode gerar um skill temporário antes de spawnar o agente correspondente. O skill é criado como arquivo Markdown no diretório do pipeline e passado ao agente via --skill ou injetado no brief.

claude -p "Crie um skill temporário em .pipeline/247/skills/migration-agent.md
para um agente especializado em migrations de banco PostgreSQL com zero downtime.
O skill deve ter: instruções de como criar migrations reversíveis,
checklist de segurança, e formato de output."

O skill gerado em runtime tem a mesma estrutura de qualquer skill do Claude Code: frontmatter YAML com description, corpo com instruções e exemplos. A diferença é que ele é efêmero — existe apenas para este pipeline run e é descartado após o merge.

---
description: Agente especializado em migrations PostgreSQL com zero downtime
---

## Regras de zero-downtime migration

1. NUNCA use `ALTER TABLE ... DROP COLUMN` sem um ciclo de deploy intermediário
2. Adicione colunas como nullable primeiro, popule com default, então adicione constraint
3. Use transactions explícitas: `BEGIN; ... COMMIT;`
4. Toda migration deve ter `up()` e `down()` implementados e testados

## Checklist de segurança
- [ ] Migration reversível via `down()`
- [ ] Testada em snapshot da base de produção (anonimizada)
- [ ] Lock time estimado < 100ms (senão use `pg_repack` ou online DDL)
- [ ] Plano de rollback documentado em migration-plan.md

## Formato de output
Escreva os arquivos em `.pipeline/[issue]/migrations/`:
- `YYYYMMDDHHMMSS_description.sql` — a migration em si
- `migration-plan.md` — estimativa de lock time e plano de rollback
Skills temporários são poderosos para domínios de nicho. Em vez de tentar cobrir todos os possíveis especialismos em skills permanentes, o orchestrator gera o conhecimento especializado sob demanda. O custo é uma chamada extra ao Claude — o benefício é um agente com instruções precisas para o problema específico daquele issue.

Context Window discipline no pipeline agentic

O pipeline 100% agentic é o cenário mais crítico para context discipline. Com múltiplos agentes rodando em paralelo e um orchestrator que precisa manter visibilidade do estado global, um descuido no gerenciamento de contexto causa dois tipos de falha: context overflow (o agente perde informação importante) ou context poisoning (output irrelevante polui o raciocínio).

Limites obrigatórios

  • Orchestrator: máximo 80K tokens ativos. Nunca acumular outputs completos dos agentes.
  • Cada agente spawned: máximo 60K tokens de contexto inicial (brief + arquivos relevantes).
  • Entre waves pesadas: /compact obrigatório antes de iniciar nova fase.
  • Handoffs: sempre via arquivos (PLAN.md, CONTEXT.md, ADR.md) — nunca in-memory.
  • Ciclo de vida dos agentes: destruídos após tarefa; estado persiste exclusivamente em arquivos.
  • Reinício do orchestrator: após 3 waves, reiniciar com CONTEXT.md como única fonte de estado.

Anti-pattern: orchestrator que pede output completo de todos os agentes

Este é o erro mais comum e o que causa context overflow com maior frequência. O orchestrator não precisa saber o conteúdo completo de cada arquivo gerado — apenas onde estão e se a geração foi bem-sucedida.

# ANTI-PATTERN: solicitar output completo causa context overflow
claude -p "
Mostre o conteúdo completo de todos os arquivos em .pipeline/247/backend-output/,
.pipeline/247/tests/, e .pipeline/247/security-report.json.
Analise tudo e me diga se está OK."

# Problema: com 3 agentes gerando código, você facilmente injeta 50K+ tokens
# de output de implementação no contexto do orchestrator.

Pattern correto: orchestrator solicita apenas status e paths

O orchestrator pede um summary estruturado — não o conteúdo dos arquivos. O Review Agent, que tem contexto próprio e limitado, é quem lê os arquivos completos e produz o relatório de qualidade.

# PATTERN CORRETO: orchestrator pede apenas { status, output_files[], issues[] }
claude -p "
Cada agente escreveu um arquivo de resultado em .pipeline/247/:
- backend-result.json
- test-result.json
- security-result.json

Leia APENAS esses três arquivos de resultado (não os outputs completos).
Produza um summary em .pipeline/247/wave-1-summary.json com:
{ status: 'ok'|'failed', output_files: [], issues: [] }
Mantenha a resposta abaixo de 500 tokens."

Cada agente especializado é responsável por produzir seu próprio arquivo *-result.json com o summary do que fez. O orchestrator consome apenas esse summary. Os arquivos de implementação ficam em disco e são lidos apenas pelos agentes que precisam deles.

// Formato padrão de result.json para cada agente
{
  "agent": "backend",
  "status": "ok",
  "output_files": [
    "src/middleware/rate-limit.ts",
    "src/api/users/index.ts"
  ],
  "issues": [],
  "tokens_used": 18420,
  "duration_seconds": 47
}
Context discipline é o que diferencia um pipeline que escala de um que trava na 3ª wave. Orquestradores que acumulam contexto tendem a falhar silenciosamente: o modelo começa a ignorar partes do contexto quando se aproxima do limite, produzindo outputs incompletos ou inconsistentes sem sinalizar erro.

Como configurar o pipeline

A infraestrutura do pipeline requer três componentes: estrutura de diretórios para persistência de estado, GitHub Actions para trigger automático, e política de auto-approve configurada com os guardrails corretos.

Estrutura de diretórios

project-root/
├── .pipeline/               # Estado dos pipelines em execução e histórico
│   └── [issue-number]/      # Diretório isolado por issue
│       ├── orchestrator-plan.json
│       ├── backend-brief.txt
│       ├── test-brief.txt
│       ├── security-brief.txt
│       ├── backend-output/  # Arquivos gerados pelo backend agent
│       ├── tests/           # Testes gerados pelo test agent
│       ├── security-report.json
│       ├── wave-1-summary.json
│       ├── review-result.json
│       ├── test-results.json
│       ├── cypress-results.json
│       ├── k6-results.json
│       ├── audit-results.json
│       └── pr-description.md
├── k6/
│   ├── load.js              # Cenário de carga: baseline de throughput
│   └── stress.js            # Cenário de stress: ponto de ruptura
├── scripts/
│   ├── orchestrator.sh      # Script principal do pipeline
│   ├── spawn-agents.sh      # Lançamento paralelo de agentes
│   └── testing-pipeline.sh  # Sequência determinística de testes
└── .github/
    └── workflows/
        └── agentic-pipeline.yml

GitHub Actions: trigger automático por issue label

O workflow só dispara quando o issue tem labels específicas que indicam que a feature é elegível para automação. Isso evita que issues exploratórios ou de produto ativem o pipeline.

# .github/workflows/agentic-pipeline.yml
name: Agentic Pipeline

on:
  issues:
    types: [labeled]

jobs:
  run-pipeline:
    # Só dispara para labels que indicam feature elegível para automação
    if: |
      github.event.label.name == 'agentic-ready' ||
      github.event.label.name == 'auto-implement'
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      issues: write

    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Install Claude Code CLI
        run: npm install -g @anthropic-ai/claude-code

      - name: Install GitHub CLI
        run: |
          type -p curl >/dev/null || apt install curl -y
          curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
          echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null
          apt update && apt install gh -y

      - name: Run agentic pipeline
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          ISSUE_NUMBER: ${{ github.event.issue.number }}
          ISSUE_TITLE: ${{ github.event.issue.title }}
          ISSUE_BODY: ${{ github.event.issue.body }}
        run: bash scripts/orchestrator.sh

Script principal do orchestrator

#!/usr/bin/env bash
# scripts/orchestrator.sh
set -euo pipefail

ISSUE=$ISSUE_NUMBER
PIPELINE_DIR=".pipeline/$ISSUE"
mkdir -p "$PIPELINE_DIR/skills"

echo "=== Pipeline iniciado para issue #$ISSUE ==="

# Fase 1: Boot do orchestrator — análise e planejamento
claude -p "
Issue #$ISSUE: $ISSUE_TITLE
Corpo: $ISSUE_BODY

Analise src/ e identifique os módulos impactados.
Decida quais agentes spawnar. Escreva os briefs.
Output em $PIPELINE_DIR/orchestrator-plan.json e $PIPELINE_DIR/*-brief.txt
Mantenha resposta abaixo de 2K tokens." \
  --output-format json

# Fase 2: Spawn paralelo de agentes especializados
bash scripts/spawn-agents.sh "$PIPELINE_DIR"

# Fase 3: Consolidação e review
claude -p "
Leia $PIPELINE_DIR/*-result.json (apenas os result files, não os outputs completos).
Produza $PIPELINE_DIR/wave-1-summary.json com { status, output_files[], issues[] }"

REVIEW_STATUS=$(jq -r '.status' "$PIPELINE_DIR/wave-1-summary.json")
if [ "$REVIEW_STATUS" != "ok" ]; then
  echo "Wave 1 falhou. Iniciando ciclo de debug..." >&2
  exit 1
fi

# Fase 4: Testing pipeline
bash scripts/testing-pipeline.sh "$PIPELINE_DIR"

# Fase 5: PR + merge + fechamento
bash scripts/merge-and-close.sh "$PIPELINE_DIR" "$ISSUE"

echo "=== Pipeline concluído para issue #$ISSUE ==="

Configuração de auto-approve policy

A auto-approve policy é a parte mais delicada da configuração. Ela define quais PRs o pipeline pode mergear sem aprovação humana. Comece restritivo e expanda gradualmente conforme o histórico de sucesso aumenta.

# .github/auto-approve.yml (usando hmarr/auto-approve-action ou equivalente)
# Política restritiva para início: apenas PRs pequenos com todos os gates passando

rules:
  - conditions:
      # Só aprova automaticamente PRs criados pelo pipeline agentic
      - author: "github-actions[bot]"
      # Requer que todos os checks de CI passem
      - check-success: "vitest"
      - check-success: "cypress"
      - check-success: "npm-audit"
      # Limita o tamanho do PR para mudanças incrementais
      - "files-changed < 15"
      - "additions + deletions < 300"
    actions:
      approve: true
      merge:
        method: squash

Smoke tests pós-deploy

Após o merge e deploy, o pipeline executa um smoke test mínimo para confirmar que a feature está funcionando em produção antes de fechar o issue.

# Smoke test pós-deploy: verifica endpoints críticos
PROD_URL="https://api.seuapp.com"

# Verifica que o rate limiting responde corretamente
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" "$PROD_URL/api/users")
if [ "$RESPONSE" != "200" ]; then
  echo "SMOKE TEST FAILED: /api/users retornou $RESPONSE" >&2
  # Aciona rollback automático via vercel rollback ou gh workflow run rollback
  gh workflow run rollback.yml -f deployment_id="$DEPLOYMENT_ID"
  exit 1
fi

# Verifica que rate limiting está ativo (deve retornar 429 após 100 requests)
for i in $(seq 1 101); do
  STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$PROD_URL/api/users")
  if [ "$i" -eq 101 ] && [ "$STATUS" != "429" ]; then
    echo "SMOKE TEST FAILED: rate limiting não ativou na requisição 101" >&2
    exit 1
  fi
done

echo "Smoke tests passaram. Issue fechado."

Limitações e quando NÃO usar

O pipeline 100% agentic é uma ferramenta poderosa dentro de um escopo específico. Fora desse escopo, ele cria mais problemas do que resolve. Reconhecer os limites é tão importante quanto saber configurar o pipeline.

Cenários onde o pipeline agentic NÃO deve ser usado

  • Features de alta ambiguidade: quando a spec não está clara, o agente vai tomar decisões de produto que deveriam ser humanas. O resultado é implementação tecnicamente correta mas funcionalmente errada — e o erro só aparece em produção.
  • Mudanças de arquitetura: refactoring de camadas, introdução de novos patterns, migração de framework. O custo de erro é propagado por múltiplos módulos e o rollback é complexo.
  • Features que precisam de julgamento de produto: trade-offs de UX, decisões de monetização, alterações em fluxos de onboarding. Agentes não têm o contexto de negócio necessário para esse tipo de decisão.
  • Custo de erro alto com rollback difícil: migrations de banco de dados em produção com dados sensíveis, mudanças em sistemas de pagamento, alterações em pipelines de dados com downstream dependents.
  • Domínios sem cobertura de testes: se o módulo impactado não tem testes, o pipeline não tem como verificar que não quebrou nada. Nunca use o pipeline agentic para adicionar autonomia onde não há observabilidade.
  • Primeiros deploys de uma feature: o pipeline é adequado para iterar sobre features existentes, não para criar do zero. Features novas geralmente envolvem decisões de design que requerem revisão humana.

Sinais de que o pipeline está sendo usado incorretamente

  • O orchestrator está spawning mais de 6 agentes para um único issue
  • Os briefs dos agentes contêm perguntas abertas sobre o que implementar
  • O Review Agent frequentemente retorna status: failed (indica spec ambígua)
  • O pipeline está rodando em branches que não têm testes de integração
  • A auto-approve policy está aprovando PRs com mais de 500 linhas de alteração
Comece com o pipeline supervisionado. Nas primeiras implementações, configure o pipeline para criar o PR mas não fazer merge automaticamente — um engenheiro revisa e aprova. Só ative o auto-merge após 20+ PRs com zero regressões em produção. A confiança no pipeline deve ser earned, não assumed.

Checklist antes de ativar autonomia total

# Checklist de maturidade para pipeline 100% agentic

## Cobertura de testes
- [ ] Cobertura de testes unitários >= 80% nas rotas críticas
- [ ] Testes de integração com banco de dados real (sem mocks de infra)
- [ ] Testes E2E cobrindo jornadas de usuário afetadas pelo pipeline
- [ ] Load tests com baseline documentado de throughput e latência

## Gates do pipeline
- [ ] Review Agent configurado com checklist SOLID e OWASP Top 10
- [ ] Testing pipeline bloqueia merge se qualquer teste falhar
- [ ] Smoke tests pós-deploy com rollback automático em caso de falha
- [ ] npm audit como gate obrigatório (bloqueia em vulnerabilidades críticas)

## Auto-approve policy
- [ ] Policy restritiva por padrão: PRs pequenos, todos os checks passando
- [ ] Limitação de tamanho de PR configurada (recomendado: < 300 linhas)
- [ ] 20+ PRs supervisionados com zero regressões antes de ativar auto-merge

## Observabilidade
- [ ] Logs estruturados em cada etapa do pipeline (JSON, não texto livre)
- [ ] Alertas configurados para falhas de smoke test
- [ ] Histórico de pipelines auditável em .pipeline/ com retenção adequada

## Rollback
- [ ] Procedimento de rollback documentado e testado manualmente
- [ ] Rollback automático configurado para falhas de smoke test
- [ ] Canal de comunicação (Slack/PagerDuty) para falhas críticas do pipeline

Hooks no pipeline agentic

No pipeline 100% autônomo, hooks são críticos — não há humano revisando. Cada agente do pipeline precisa ter hooks configurados para que erros sejam detectados antes de chegarem ao merge gate.

Pipeline sem hooks = risco alto: O orchestrator confia no output dos agentes. Se um agente escrever código com vulnerabilidade ou testes falhando, sem hooks o pipeline pode avançar até o merge.

Cada agente do pipeline deve rodar com hooks ativos

# Backend Agent com hooks ativos
claude -p "$(cat .pipeline/247/backend-brief.txt)" \
  --settings .claude/settings-strict.json &

# Test Agent com hooks ativos
claude -p "$(cat .pipeline/247/test-brief.txt)" \
  --settings .claude/settings-strict.json &

# Security Agent com hooks ativos
claude -p "$(cat .pipeline/247/security-brief.txt)" \
  --settings .claude/settings-strict.json &

wait

settings-strict.json — configuração para agentes do pipeline

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [{"type": "command", "command": "node scripts/quality-gate.mjs \"$CLAUDE_TOOL_INPUT_FILE_PATH\""}]
      }
    ],
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [{"type": "command", "command": "node scripts/bash-guard.mjs"}]
      }
    ],
    "Stop": [
      {
        "hooks": [{"type": "command", "command": "node scripts/agent-report.mjs"}]
      }
    ]
  }
}

agent-report.mjs — relatório ao final de cada agente

#!/usr/bin/env node
// agent-report.mjs — escreve relatório de qualidade que o orchestrator lê
import { execSync, writeFileSync } from 'node:child_process';
import { mkdirSync } from 'node:fs';

const pipelineDir = process.env.PIPELINE_DIR ?? '.pipeline/current';
mkdirSync(pipelineDir, { recursive: true });

let status = 'ok';
let issues = [];

try {
  execSync('npx vitest run --reporter=json', { stdio: 'pipe' });
} catch (e) {
  status = 'failed';
  issues.push('testes falhando');
}

try {
  execSync('npm audit --audit-level high', { stdio: 'pipe' });
} catch {
  issues.push('vulnerabilidades em dependências');
}

writeFileSync(
  `${pipelineDir}/quality-report.json`,
  JSON.stringify({ status, issues, timestamp: new Date().toISOString() }, null, 2)
);

console.log(`[agent-report] status=${status}, issues=${issues.length}`);
if (status === 'failed') process.exit(1);

Scripts base (quality-gate.mjs, bash-guard.mjs) no Módulo 22 — Fundamentos.