Elton José logo
Elton José
Bounded Autonomy

Bounded Autonomy: O Padrão Arquitetural Para Agentes IA Seguros em Produção

Bounded Autonomy: O Padrão Arquitetural Para Agentes IA Seguros em Produção
0 visualizações
11 minutos de leitura
#Bounded Autonomy

Bounded Autonomy: O Padrão Arquitetural Para Agentes IA Seguros em Produção

O Stanford AI Index 2026 trouxe um dado que deveria pausar qualquer conversa sobre escala de agentes IA: 62% dos líderes de tecnologia citam segurança como o principal bloqueador para expandir o uso de agentes autônomos nas suas organizações.

Não é falta de capacidade técnica. Não é custo de infraestrutura. É segurança.

Esse dado revela algo importante sobre onde o mercado está: a tecnologia avançou para um ponto onde agentes conseguem fazer coisas significativas e consequentes — e é exatamente essa capacidade que está gerando hesitação. Um agente que apenas recomenda ações é seguro por definição. Um agente que executa ações tem risco proporcional ao impacto dessas ações.

A resposta para esse bloqueador não é "use agentes menos capazes". É "construa sistemas com arquitetura de segurança adequada para a autonomia que você está delegando". Esse é o princípio do Bounded Autonomy — e este post explica como implementá-lo.


O Problema Que Bounded Autonomy Resolve

Antes de entrar na solução, é preciso ser preciso sobre o problema.

Quando falamos de segurança em agentes IA, não estamos falando principalmente de ataques adversariais ou prompt injection — embora esses sejam problemas reais. Estamos falando de um problema mais fundamental: como você garante que um agente autônomo vai operar dentro dos limites que você pretende, mesmo em situações que você não antecipou?

A raiz do problema é que agentes recebem objetivos de alto nível e têm autonomia para decidir como atingi-los. Essa autonomia é o que os torna poderosos. E é exatamente o que os torna arriscados: você especificou o objetivo, mas não especificou todos os meios que são aceitáveis ou inaceitáveis para atingi-lo.

Um exemplo concreto: você instrui um agente a "otimizar o custo de infraestrutura". O agente pode interpretar isso como "deletar instâncias EC2 que estão subutilizadas" — o que pode desligar serviços de produção. O agente interpretou o objetivo corretamente. Os meios escolhidos causaram um incidente.

Bounded Autonomy é a arquitetura que previne esse cenário sistematicamente.


Os Três Pilares do Bounded Autonomy

Pilar 1: Limites Operacionais Explícitos (Permission Boundaries)

O primeiro pilar é definir explicitamente o que o agente pode e não pode fazer — não de forma implícita, assumindo que o agente vai "entender o que é razoável", mas de forma programática e verificável.

Permission Boundaries têm três dimensões:

Boundaries de recurso: quais sistemas e dados o agente pode acessar. Um agente de análise de logs pode ler logs, mas não pode modificar configurações de infraestrutura. Isso não é configuração de prompt — é controle de acesso real, implementado na camada de ferramentas que o agente tem disponíveis.

Boundaries de ação: o que o agente pode fazer com os recursos que acessa. Diferente de leitura versus escrita. Inclui granularidade: pode criar registros mas não deletar. Pode modificar configurações de staging mas não de produção. Pode enviar notificações internas mas não emails para clientes.

Boundaries de impacto: limites quantitativos sobre o impacto de ações individuais. Pode provisionar infraestrutura até $X por hora. Pode enviar mensagens para até N usuários por execução. Pode deletar registros até Y por dia. Esses limites capturam riscos que boundaries de ação não capturam.

class AgentPermissionBoundaries:
    def __init__(self):
        self.allowed_resources = {
            "databases": {"read": ["analytics_db"], "write": []},
            "apis": {"call": ["internal_api", "monitoring_api"]},
            "infrastructure": {"read": ["staging"], "write": []}
        }
        self.action_limits = {
            "max_db_rows_per_query": 10_000,
            "max_api_calls_per_minute": 60,
            "max_cost_per_run_usd": 5.0
        }
        self.prohibited_actions = [
            "delete_production_data",
            "send_external_emails",
            "modify_user_permissions",
            "deploy_to_production"
        ]

    def validate_action(self, action: AgentAction) -> ValidationResult:
        if action.type in self.prohibited_actions:
            return ValidationResult.blocked(
                reason=f"Action '{action.type}' is not permitted",
                requires_human_approval=True
            )
        # Verifica outros limites...
        return ValidationResult.allowed()
Diagrama dos três tipos de Permission Boundaries: recursos (o que o agente acessa), ações (o que pode fazer) e impacto (limites quantitativos) — com exemplos concretos de cada dimensão

Pilar 2: Escalação Definida (Structured Escalation)

O segundo pilar é o sistema de escalação: o protocolo explícito que o agente segue quando encontra situações fora dos seus limites.

Um agente bem projetado sabe quando não sabe. Mais importante: sabe quando a decisão tem impacto suficiente para que um humano deve aprová-la — independente de o agente ter confiança alta.

A escalação bem projetada não é "o agente para e espera". É o agente produzindo um briefing estruturado que permite ao humano tomar uma boa decisão rapidamente:

class EscalationBriefing:
    task_context: str        # O que o agente estava fazendo
    escalation_reason: str   # Por que está escalando (boundary hit, ambiguidade, etc.)
    options: list[Option]    # Opções disponíveis com prós e contras
    recommendation: str      # O que o agente recomendaria se fosse decidir
    urgency: Urgency         # BLOQUEADOR / ALTA / MÉDIA / BAIXA
    reversibility: str       # A decisão é reversível? Como?
    deadline: datetime       # Quando a tarefa expira se não houver resposta

Esse briefing estruturado muda completamente a experiência do humano que recebe a escalação. Em vez de "o agente travou, preciso entender tudo do zero", é "aqui está exatamente o contexto, as opções, e o que eu recomendo. Você aprova opção A ou B?"

Escalações bem briefadas são respondidas em minutos. Escalações mal briefadas ficam na fila por horas ou dias porque ninguém quer o trabalho de entender o contexto.

Pilar 3: Trilha de Auditoria (Audit Trail)

O terceiro pilar é a observabilidade completa de tudo que o agente fez, por quê fez, e quais foram as consequências.

Isso não é logging de aplicação tradicional. É uma trilha de decisão que responde perguntas específicas:

  • Qual objetivo o agente estava perseguindo?
  • Quais informações ele tinha no momento da decisão?
  • Quais opções ele considerou?
  • Por que escolheu a ação que escolheu?
  • Qual foi o resultado?

Essa granularidade é necessária para dois propósitos: debugging quando algo dá errado, e compliance em contextos regulatórios onde você precisa demonstrar que o sistema operou dentro de parâmetros definidos.

@dataclass
class AgentDecisionLog:
    timestamp: datetime
    agent_id: str
    task_id: str
    context_snapshot: dict      # Estado do agente no momento da decisão
    available_actions: list     # O que o agente poderia fazer
    chosen_action: AgentAction  # O que escolheu
    reasoning: str              # Por que (do próprio modelo)
    confidence_score: float     # Auto-avaliação do agente
    outcome: ActionOutcome      # O que aconteceu
    human_review_triggered: bool
    human_feedback: Optional[str]

Implementando na Prática: Um Exemplo Completo

Para tornar isso concreto, veja como um agente de deployment se parece com Bounded Autonomy implementado:

class DeploymentAgent:
    def __init__(self, permission_boundaries, escalation_handler, audit_logger):
        self.boundaries = permission_boundaries
        self.escalation = escalation_handler
        self.audit = audit_logger

    async def execute_deployment(self, deploy_spec: DeploySpec) -> DeployResult:
        # 1. Verifica permission boundaries antes de qualquer ação
        validation = self.boundaries.validate_action(
            AgentAction(type="deploy", target=deploy_spec.environment)
        )

        if validation.blocked:
            # Registra tentativa bloqueada
            await self.audit.log_blocked_action(deploy_spec, validation.reason)
            return DeployResult.blocked(validation.reason)

        # 2. Verifica se precisa de aprovação humana
        if deploy_spec.environment == "production" or deploy_spec.risk_score > 0.7:
            briefing = self.create_escalation_briefing(deploy_spec)
            approval = await self.escalation.request_approval(briefing)

            if not approval.granted:
                await self.audit.log_escalation_rejected(deploy_spec, approval.reason)
                return DeployResult.rejected(approval.reason)

        # 3. Executa com auditoria completa
        decision_log = AgentDecisionLog(
            task_id=deploy_spec.id,
            chosen_action=AgentAction(type="deploy", params=deploy_spec),
            reasoning=await self.model.explain_reasoning(deploy_spec),
            confidence_score=await self.model.confidence(deploy_spec)
        )

        try:
            result = await self.run_deployment(deploy_spec)
            decision_log.outcome = ActionOutcome.success(result)
        except Exception as e:
            decision_log.outcome = ActionOutcome.failure(str(e))
            raise
        finally:
            await self.audit.log(decision_log)

        return result
Arquitetura completa de Bounded Autonomy: fluxo de execução do agente passando por permission boundaries, verificação de escalação, execução com auditoria e retroalimentação para melhoria contínua

Calibrando a Autonomia ao Longo do Tempo

Uma dimensão importante de Bounded Autonomy que muitas implementações ignoram é a dinâmica: os limites não são fixos para sempre.

Um agente novo em um domínio deve ter limites mais conservadores. Conforme o sistema acumula histórico de execuções bem-sucedidas, os limites podem ser expandidos gradualmente. Isso é "confiança baseada em evidências" — o agente ganha autonomia na medida em que demonstra capacidade de exercê-la com segurança.

A calibração tem duas dimensões:

Expansão de limites: baseada em taxa de erros histórica, frequência de escalações bem-calibradas, e feedback positivo de revisões humanas. Um agente que nunca precisou ter uma escalação revertida e que nunca gerou um incidente provavelmente pode ter seus limites expandidos.

Contração de limites: quando o agente começa a operar em um novo domínio, quando há mudanças no sistema que o agente opera, ou quando incidentes ocorrem. O sistema deve ser capaz de apertar os limites automaticamente em resposta a sinais de risco.


Bounded Autonomy em Diferentes Contextos

A implementação concreta de Bounded Autonomy varia dependendo do tipo de agente e do domínio de operação. Aqui estão três contextos comuns com as considerações específicas de cada um.

Agentes de desenvolvimento de código. O risco principal é modificação indesejada de arquivos críticos ou execução de comandos com efeitos colaterais. Permission boundaries devem ser definidos por diretório (o agente pode modificar /src/features mas não /src/core) e por tipo de operação (pode criar e modificar arquivos, mas não deletar; pode executar testes, mas não deploy). A escalação deve ser acionada para qualquer modificação em arquivos de configuração, schema de banco de dados ou dependências.

Agentes de análise e relatórios. Risco principal é acesso a dados sensíveis além do necessário e geração de outputs que serão interpretados como decisões de negócio sem revisão adequada. Boundaries de recurso definem quais datasets são acessíveis e com qual granularidade (pode ver dados agregados, não dados individuais de usuários). A escalação é acionada quando o relatório identificar anomalias que sugerem impacto de negócio significativo — o agente não envia o relatório diretamente para stakeholders sem revisão humana.

Agentes de suporte ao cliente. Risco principal é resolução incorreta de casos com impacto financeiro ou legal. Boundaries de ação definem o que o agente pode resolver autonomamente (perguntas de informação, resets de senha simples, rastreamento de pedidos) versus o que deve escalar (reembolsos acima de X, reclamações com menção a processos legais, clientes com histórico de escalação). A escalação deve incluir o histórico completo do cliente e a síntese do problema para que o humano possa continuar de onde o agente parou sem atrito.

O que esses três contextos têm em comum: o design de Bounded Autonomy é feito antes do agente ser construído, não depois de um incidente revelar que os limites estavam errados. É uma prática de engenharia de segurança, não uma reação.


O Erro Mais Comum: Segurança Via Prompt

O erro mais frequente que times cometem ao implementar agentes em produção é tentar resolver segurança via instrução de prompt: "nunca faça X", "sempre pergunte antes de Y".

Isso não funciona de forma confiável porque:

  1. Modelos podem ignorar instruções em contextos inesperados
  2. Instruções em prompt são facilmente sobrescritas por prompt injection
  3. Você não consegue auditoria programática de "o agente seguiu a instrução?"
  4. Não há mecanismo de fallback quando a instrução não é seguida

Bounded Autonomy implementa segurança na camada de ferramentas e infraestrutura — não no prompt. O agente fisicamente não consegue executar ações fora dos seus limites, independente do que está no contexto. Isso é o equivalente de controle de acesso em software: não é "o usuário foi instruído a não acessar essa tabela". É "o usuário não tem permissão para acessar essa tabela".


Conclusão

Os 62% que citam segurança como bloqueador não são timidez nem falta de ambição. É reconhecimento legítimo de que delegar autonomia sem estrutura adequada é perigoso.

Bounded Autonomy é a estrutura que transforma esse bloqueador em uma questão de engenharia resolvível. Limites operacionais explícitos, escalação estruturada e trilha de auditoria completa não são overhead burocrático — são o que permite que você escale agentes com confiança em vez de com ansiedade.

Times que implementam esses três pilares estão reportando algo interessante: a conversa sobre adoção de agentes na organização muda completamente. Em vez de "não podemos usar agentes em produção porque é arriscado", passa a ser "podemos usar agentes em produção porque temos os controles certos". E aí a velocidade de adoção acelera.

A segurança bem implementada não desacelera a inovação. Ela é o que permite que a inovação aconteça em escala.


Fontes

Newsletter

Receba os artigos mais relevantes da semana, sem quebrar seu ritmo de leitura

Um resumo semanal com os melhores posts sobre IA, engenharia de software e tecnologia, enviado no melhor momento para continuar a conversa depois da leitura.

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 temasBounded Autonomy, Segurança Agentes IA
  • Formato do conteúdoGuia prático + insights de carreira