Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 58

Implementing Agent Guardrails

Recommended resources

Olá! Na lição anterior, estabelecemos os pilares da segurança do nosso agente: gerenciamento de segredos e o Princípio do Menor Privilégio (PoLP). Vimos a importância de nunca codificar credenciais e de conceder apenas as permissões estritamente necessárias.

Agora, vamos transformar esses princípios em ações concretas. Um agente com permissão para escrever código é como um desenvolvedor júnior extremamente rápido: poderoso, mas que precisa de supervisão e limites claros para não causar problemas. Nesta lição, vamos construir esses limites.

O nosso objetivo é implementar "guardrails" para restringir as ações do agente. Guardrails são as barreiras de proteção que garantem que o agente opere de forma segura e previsível. Vamos explorar como implementar essas barreiras em três níveis: na plataforma onde o agente atua (ex: GitHub), nas ferramentas que ele utiliza (Forge/Rovo) e em seu próprio comportamento (através de prompts estruturados). Para o seu projeto, isso é o que garantirá que o agente possa interagir com seus repositórios C# e React sem colocar em risco branches críticas como a main.

1. A Necessidade de Limites Explícitos

Antes de mergulharmos nas implementações, é crucial entender por que os guardrails são indispensáveis. Um agente autônomo, por definição, toma decisões. Sem limites claros, ele pode tomar decisões indesejadas.

Guide to Architect Secure AI Agents: Best Practices for Safety

Para enquadrar o nosso pensamento, vamos assistir a uma breve introdução do vídeo 'Guide to Architect Secure AI Agents' da IBM Technology. Ele estabelece a necessidade de agentes operarem dentro de 'limites explícitos'.

Assista à seção de introdução (00:00:30 - 00:01:06). Preste atenção à terminologia: os agentes precisam ser seguros, governados e auditáveis, operando dentro de limites explícitos.

Esses "limites explícitos" são os nossos guardrails. Vamos construí-los camada por camada.


2. Camada 1: Guardrails de Plataforma (A Cerca Externa)

A primeira linha de defesa não está no agente, mas nas plataformas com as quais ele interage. A principal delas é o seu sistema de controle de versão, como o GitHub. Mesmo que o agente tente realizar uma ação proibida, a plataforma deve bloqueá-la.

A prática mais importante aqui é a proteção de branches (Branch Protection).

GitHub Branch Protection Rules Configuration
Esta imagem mostra a tela de configuração de regras de proteção de branch do GitHub. Regras como exigir a revisão de um pull request antes do merge são um guardrail fundamental para impedir que código não validado—seja por um humano ou por um agente—chegue a branches críticas.

Para o seu agente, isso significa que:

  1. O agente criará um Pull Request (PR) em uma feature branch.
  2. Ele não poderá fazer o merge desse PR diretamente na branch main ou develop.
  3. A regra de proteção de branch exigirá que um ou mais membros da sua equipe revisem o código gerado pelo agente.
  4. Além disso, você pode exigir que todos os testes de integração contínua (CI), como os que você já usa com GitLab CI ou Jenkins, passem com sucesso antes que o merge seja habilitado.

Isso cria um ponto de verificação humano-no-loop essencial, aproveitando a velocidade do agente para a geração de código e a experiência da sua equipe para a validação estratégica.

Outro guardrail de plataforma é aplicar o PoLP nas permissões do GitHub App que você criou na lição anterior, garantindo que ele tenha acesso de escrita apenas aos repositórios do seu projeto (backend-api, frontend-app, mobile-app) e não a outros repositórios da organização.


3. Camada 2: Guardrails de Ferramentas (A Coleira do Agente)

A segunda camada de defesa está nas configurações das ferramentas que compõem o agente, como Atlassian Forge e Rovo.

Permissões Explícitas no Atlassian Forge

Como vimos, o arquivo manifest.yml de um aplicativo Forge é onde você declara as permissões (escopos) que seu agente necessita. A plataforma Forge foi projetada para ser segura por padrão.

Build custom AI Agents with Atlassian Rovo in 10 Minutes with Forge!

Vamos revisitar a importância das permissões explícitas no Forge. O vídeo 'Build custom AI Agents with Atlassian Rovo' tem uma seção de Q&A sobre segurança que é extremamente relevante.

Assista à seção de Q&A sobre segurança (00:36:55 - 00:38:57). A mensagem principal é clara: um aplicativo Forge (e, por extensão, um agente Rovo) não pode realizar ações destrutivas ou vazar dados, a menos que essas permissões sejam explicitamente definidas no manifesto e aprovadas por um administrador.

Isso funciona como um contrato: seu agente diz exatamente o que pretende fazer, e a plataforma garante que ele não possa fazer nada além disso.

Controle de Ferramentas no Rovo Dev CLI

Para as tarefas que o agente executará localmente no ambiente de desenvolvimento ou em um executor de CI/CD, o Rovo Dev CLI oferece um mecanismo de guardrail muito granular. Você pode controlar exatamente quais ferramentas e comandos o agente pode executar.

Use tools in Rovo Dev CLI

A documentação 'Use tools in Rovo Dev CLI' detalha como configurar essas permissões. Isso lhe dará controle total sobre as ações do agente.

Leia este documento para entender como configurar os guardrails do Rovo Dev: Tool permissions: Entenda o modelo allow (permitir), ask (perguntar) e deny (negar). O modo interativo ask é um ótimo guardrail durante o desenvolvimento. Configuration: Veja como essas permissões são definidas no arquivo ~/.rovodev/config.yml. Command patterns: Note a capacidade de usar expressões regulares (regex) para definir permissões para grupos de comandos (ex: git .*, dotnet .*). Isso é muito poderoso para o seu caso de uso. External path access: Aprenda a restringir o acesso do agente ao sistema de arquivos, permitindo apenas diretórios específicos. YOLO mode: Entenda o que este modo faz—ele desativa a maioria dos guardrails—e por que deve ser usado com extrema cautão.

Por exemplo, no seu arquivo config.yml, você poderia configurar algo assim:

toolPermissions:
  bash:
    default: ask # Pergunta por padrão para qualquer comando
    commands:
      - command: ls.*
        permission: allow # Permite listar arquivos sem perguntar
      - command: cat.*
        permission: allow # Permite ler arquivos sem perguntar
      - command: dotnet build
        permission: allow # Permite compilar o projeto .NET
      - command: npm install
        permission: allow # Permite instalar dependências do Node
      - command: git commit.*
        permission: ask # Sempre pergunta antes de um commit
      - command: rm .*
        permission: deny # Nega completamente a remoção de arquivos
  allowedExternalPaths:
    - "/path/to/your/project/backend-api"
    - "/path/to/your/project/frontend-app"

Este arquivo se torna um guardrail fundamental, definindo a "caixa de areia" (sandbox) operacional do seu agente.


4. Camada 3: Guardrails Comportamentais (Ensinando as Regras ao Agente)

A última camada é talvez a mais sofisticada. Ter as permissões corretas não garante que o agente as usará da maneira certa. Precisamos guiar seu comportamento. A abordagem de simplesmente dar uma instrução vaga e esperar o melhor resultado, que podemos chamar de "vibe coding", é arriscada.

A solução é uma abordagem mais estruturada chamada Spec-Driven Development (SDD).

Spec Driven Development with Rovo Dev

O artigo 'Spec Driven Development with Rovo Dev' do blog da Atlassian é uma leitura essencial. Ele introduz o conceito de SDD como uma forma de estabelecer 'guardrails e contextos' para agentes de codificação.

Leia o artigo completo, focando nestes pontos: A crítica ao 'vibe coding': entenda por que prompts de uma só vez falham em projetos complexos. A definição de Spec-Driven Development (SDD): o ciclo de planejar, revisar, iterar e executar. O uso de arquivos como .agents.md: uma forma de criar um conjunto de instruções e melhores práticas reutilizáveis que funcionam como um guardrail comportamental. O exemplo de prompt de regra SDD: analise as regras propostas, como 'dividir grandes solicitações em etapas pequenas e verificáveis' e 'sempre planejar, nunca ir direto para as alterações'. O exemplo prático: veja como o agente primeiro cria um plano de ação, que o humano pode revisar e corrigir antes da execução. Isso demonstra o poder do guardrail de revisão de plano.

Para o seu projeto, isso significa que em vez de dizer ao agente "Implemente a funcionalidade X descrita no JIRA-123", você o instruirá usando os princípios do SDD:

"Com base no JIRA-123 e nas regras de negócio e arquitetura, crie um plano detalhado para implementar a funcionalidade X. O plano deve listar todos os arquivos a serem modificados nos repositórios de backend (C#) e frontend (React), e indicar se uma migração de banco de dados (MariaDB) é necessária. Apresente o plano para minha revisão antes de gerar qualquer código."

Esse prompt transforma o agente de um "caixa-preta" para um parceiro de trabalho transparente, cujo plano você pode validar e corrigir, garantindo que ele siga as boas práticas e a arquitetura definidas nos seus documentos.


Conclusão

Nesta lição, você aprendeu a construir as barreiras de proteção essenciais para operar um agente de código de forma segura. Vimos que os guardrails não são uma única solução, mas um sistema de defesa em camadas.

Principais Pontos:

  • Guardrails são Multi-camadas: A segurança eficaz vem da combinação de restrições na plataforma, nas ferramentas e no comportamento do agente.
  • Guardrails de Plataforma: Use recursos como a proteção de branches do GitHub para impor processos de revisão humana e garantir a qualidade e segurança do código que entra em branches críticas.
  • Guardrails de Ferramentas: Aproveite a configuração explícita de permissões do Atlassian Forge (manifest.yml) e o controle granular de ferramentas do Rovo Dev CLI (config.yml) para criar uma "caixa de areia" segura para o seu agente.
  • Guardrails Comportamentais: Adote o Spec-Driven Development (SDD) para superar as limitações do "vibe coding". Force o agente a criar e apresentar um plano detalhado para sua revisão antes de qualquer execução, transformando-o em um colaborador transparente.

Com esses guardrails implementados, você estará muito mais perto de ter um agente que não é apenas produtivo, mas também confiável e seguro para operar no ambiente da sua empresa.

Na próxima lição, vamos abordar como garantir que esses guardrails e o comportamento geral do agente funcionem como esperado. Vamos aprender a definir um conjunto de casos de teste para validar o comportamento do agente em cenários comuns e de borda.