Pular para o conteúdo
Menu
Preciso disso?O que um agente alcança na sua máquinaComo funcionaAs camadas entre o agente e o seu sistemaCompararSandboxes embutidos, Docker e VMsConfigurarAbra só o que a tarefa precisaSegurançaO modelo de ameaças e seus limitesInstalar
Instalar

Instale, olhe lá dentro, rode o seu agente

O ai-jail é um programa só, sem daemon e sem root. Você instala, coloca o nome dele na frente do comando que já digita, e o agente inicia dentro de um sandbox.

Instalar

Escolha o jeito como você já instala ferramentas de linha de comando. Todos os métodos entregam o mesmo programa único, o ai-jail.

terminal
brew tap akitaonrails/tap && brew install ai-jail

Funciona no macOS e no Linux.

O que o seu sistema precisa ter

Linux

Instale o bubblewrap, o programa pequeno que o ai-jail usa para montar o sandbox. A maioria das distribuições empacota como bubblewrap.

terminal
pacman -S bubblewrapapt install bubblewrapdnf install bubblewrap

macOS

Nada para instalar. O ai-jail usa o sandbox-exec, que já vem com o macOS. A Apple marca essa interface como obsoleta.

Windows

Não é suportado. Use o WSL2 e siga os passos de Linux dentro dele.

Sua primeira execução

Três comandos levam você de um plano a uma olhada lá dentro e, por fim, a um agente funcionando. O ai-jail não abre nada até você pedir.

Três painéis da esquerda para a direita. Dry run: a cela é só um contorno tracejado e o agente espera do lado de fora. Dar uma olhada: a cela é sólida e contém um terminal e a pasta do projeto. Rodar o agente: o agente e o projeto estão lá dentro, com duas aberturas no muro, uma para a rede e outra para o login do agente. A sua pasta home fica gradeada do lado de fora nos três.
Seu diretório home fica de fora em todas as etapas. Só a última etapa abre alguma coisa, e só as duas de que um agente em nuvem precisa.
  1. Veja o plano sem rodar nada

    Vá até o seu projeto e peça um dry run. O ai-jail imprime o comando de sandbox que usaria e sai. Um dry run nunca grava arquivo nenhum.

    dry run
    cd ~/Projects/my-appai-jail --dry-run claude
  2. Dê uma olhada lá dentro

    Abra um shell comum na jaula. Seu projeto está lá, no caminho real, e você pode editá-lo. Seu diretório home é um novo, vazio, e os tokens do seu shell sumiram. Digite exit para sair.

    um shell na jaula
    ai-jail bash
  3. Rode o agente com as duas coisas de que ele precisa

    Um agente que conversa com um modelo em nuvem precisa da rede para chegar até ele e do próprio login salvo para provar quem você é. Os dois vêm desligados por padrão, então você liga: --network e --agent-state. Desde a versão 1.22, se você iniciar um agente conhecido sem uma delas, o ai-jail imprime um aviso com o nome da flag que falta.

    a execução de verdade
    ai-jail --network --agent-state claude
  4. Torne isso o padrão para esse agente

    Coloque as duas configurações em ~/.ai-jail, o seu arquivo de configuração, embaixo do nome do agente. Depois disso o comando curto basta. O arquivo .ai-jail que pode aparecer no projeto só consegue apertar a jaula. Ele nunca liga a rede nem um login, então um repositório que você clona não consegue abrir a jaula para si mesmo.

    ~/.ai-jail
    [commands.claude]network = trueagent_state = true # from now on, in any project:# ai-jail claude

O que você vai ver lá dentro

O prompt muda para (jail) e o projeto está onde sempre esteve. O que valeria a pena roubar não está.

ai-jail bash, no Linux
$ ai-jail bash# o projeto está no caminho real(jail) ~/Projects/my-app $ pwd/home/you/Projects/my-app# um token exportado no seu shell não veio junto(jail) ~/Projects/my-app $ echo $GITHUB_TOKEN # suas chaves não estão neste home(jail) ~/Projects/my-app $ cat ~/.ssh/id_ed25519cat: /home/you/.ssh/id_ed25519: No such file or directory# a jaula tem hostname próprio(jail) ~/Projects/my-app $ hostnameai-sandbox

Esta é uma sessão no Linux. O macOS não tem como montar uma árvore de arquivos separada, então lá os mesmos caminhos existem e a leitura deles é recusada.

A vista de dentro da cela. O agente fica ao lado de uma pasta de projeto grande e iluminada, com um home vazio e as ferramentas do sistema atrás dela. Do lado de fora das grades, apagados e gradeados: chaves SSH, logins de nuvem, outros projetos e a rede.

Visto de dentro, o projeto é a única coisa sua que existe. A rede também fica de fora até você passar --network.

Se ele não iniciar

Estes são os casos cobertos pela seção de troubleshooting do README, mais as duas regras de instalação em que o pessoal costuma tropeçar.

bwrap: setting up uid map: Permission denied

O Ubuntu, a partir do 24.04, e o Debian, a partir do 13, vêm com uma política do AppArmor que impede programas de criar user namespaces sem root, e é assim que o bubblewrap isola a jaula. Isso afeta toda ferramenta rootless desse tipo. Para afrouxar a política no sistema inteiro:

terminal
echo 'kernel.apparmor_restrict_unprivileged_userns=0' \  | sudo tee /etc/sysctl.d/60-userns.confsudo sysctl --system

Ou mantenha a política e abra exceção só para o bwrap. Salve isto como /etc/apparmor.d/bwrap e depois rode sudo apparmor_parser -r /etc/apparmor.d/bwrap.

/etc/apparmor.d/bwrap
abi <abi/4.0>,include <tunables/global>profile bwrap /usr/bin/bwrap flags=(unconfined) {  userns,}

Seu BWRAP_BIN é recusado

Você pode apontar o ai-jail para um bubblewrap específico com BWRAP_BIN. O ai-jail só aceita quando ele resolve para um programa que pertence ao root e em que outros usuários não podem escrever, ou para um programa num /nix/store multiusuário padrão. Ele recusa uma cópia no seu próprio home, porque quem consegue trocar esse arquivo controla a jaula.

As ferramentas do mise somem lá dentro

O ai-jail ativa o mise quando o encontra, mas o home novo não tem a configuração do mise nem as ferramentas instaladas por ele, então a ativação é pulada. Mapeie os dois para dentro, somente leitura, a partir da sua própria configuração:

~/.ai-jail
[commands.claude]ro_maps = ["~/.config/mise", "~/.local/share/mise"]

Failed to create stream fd na inicialização

Isso vem de um script de login do Ubuntu desktop durante a preparação do mise. É inofensivo e o mise continua funcionando. Passe --no-mise para pular a preparação do mise, e a mensagem vai junto.

terminal
ai-jail --no-mise claude

Por agente

O ai-jail sabe onde cada agente guarda o login. --agent-state monta só as pastas do agente que você inicia, e só se elas existirem.

Você roda--agent-state montaBom saber
ai-jail claude~/.claude
~/.claude.json
Para um segundo perfil do Claude, aponte --claude-dir para o diretório dele.
ai-jail codex~/.codexDepois que você redimensiona a janela, o ai-jail envia ao Codex uma tecla de redesenho para a tela ser repintada.
ai-jail opencode~/.config/opencode
~/.local/share/opencode
ai-jail gemini~/.gemini
ai-jail ai-memory run claudeAs pastas do agente iniciadoO ai-jail reconhece o agente que o ai-memory inicia e aplica as configurações desse agente, com os dois programas na mesma jaula.

O mesmo vale para crush, grok, jcode, pi, aider, soulforge, omp e os comandos do kimi. Qualquer outro comando também roda. Ele recebe a mesma jaula e nenhuma pasta de login.

Coloque seu agente atrás das grades

O ai-jail é um binário único que não precisa de daemon nem de root. Você acrescenta uma palavra na frente do comando que já usa.

terminal
brew tap akitaonrails/tap && brew install ai-jailai-jail claude