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 melhores artigos toda semana

Sem spam. Só conteúdo de qualidade sobre IA & Dev.

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