Visão geral
O SDK oficial (anthropic-sdk-go) resolve o loop de mensagem e retry em nível de HTTP. Não
resolve o que separa uma demonstração de um agente rodando em produção de verdade: uma ferramenta
irreversível (mandar mensagem em massa, cobrar cartão, apagar registro) precisa de aprovação
humana antes de rodar, uma ferramenta que está falhando repetido precisa parar de ser chamada, e
uma conversa de WhatsApp que dura dias precisa sobreviver a um restart do processo. O Aegis é
essa camada, construída em cima dos tipos reais do SDK, não escondida atrás de abstração própria.
Como funciona
Toda ferramenta marcada RequiresConfirmation passa por um ConfirmationGate antes de rodar; sem
gate configurado, o padrão é recusar a ação, nunca executar. Um circuit breaker por ferramenta
abre depois de N falhas seguidas e recusa a chamada antes mesmo de acionar o handler, evitando
que um agente gaste rodada inteira do modelo numa ferramenta fora do ar. Um OutputContract
valida a resposta final contra um JSON Schema (validador próprio, sem dependência externa); se o
modelo errar o formato, o erro volta pro próprio modelo corrigir, até um limite de tentativas.
Sessão persiste em arquivo com escrita atômica, e cada decisão vai pra um audit log append-only.
Testes
27 testes automatizados, sem chamada de rede e sem chave de API: o cliente de mensagens é substituído por um fake construído a partir de JSON real de resposta da API (decodificado pelo próprio SDK, não montado em struct à mão, porque o SDK guarda o JSON bruto internamente pros métodos de leitura). Cobre o loop de tool-use ponta a ponta, ferramenta irreversível negada por padrão e liberada só com aprovação, circuit breaker respeitado antes de chamar o handler, e contrato de saída pedindo correção ao modelo antes de desistir.
Decisão assumida
O validador de JSON Schema é um subconjunto deliberado (type, properties, required, enum, minimum/maximum, items), não a especificação completa — cobre o que um contrato de saída de agente precisa, documentado no README junto com o que fica de fora.
Stack
Go 1.24, github.com/anthropics/anthropic-sdk-go como única dependência real de produção.