O limite de execução do agente é por processo e lê o primeiro IP encaminhado
[!NOTE] Resumo Executivo (DEV-2026-059): POST /agent tem um teto por minuto. O contador vive na memória daquele processo e a chave é o primeiro endereço de X-Forwarded-For.
🚨 O Desafio Técnico / Contexto
Várias chamadas seguidas no mesmo agente não tinham teto. Um limite só no processo também não acompanha outro worker, e o IP visto pelo app não é o da conexão quando há proxy.
💡 Principais Lições Aprendidas & Descobertas
- 💡 RateLimitMiddleware só olha POST cujo path é /agent ou começa com /agent/. Acima do teto responde 429 com Retry-After 60.
- 💡 AGENTS_RATE_LIMIT default 60 por janela de 60 segundos. Valor 0 desliga. O deque está em memória: um processo, um contador.
- 💡 client_ip usa o primeiro trecho de X-Forwarded-For. Sem esse header, usa request.client.host.
🛠️ Especificação Técnica & Código-Chave
# POST /agent/{id}
# AGENTS_RATE_LIMIT=60 → 429 depois do teto
# AGENTS_RATE_LIMIT=0 → sem limite
📈 Impacto no Ecossistema & Valor Prático
A execução do agente passou a ter teto por IP naquele processo, com desligamento explícito no ambiente.
- Projetos Relacionados:
_agents - Registro de Origem:
_data/daily.dev-05.yml
Publicado originalmente como parte do Diário de Desenvolvimento 2026 do ecossistema Artes do Sul & Araguaci.