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.
brew tap akitaonrails/tap && brew install ai-jailFunciona no macOS e no Linux.
yay -S ai-jail-binyay -S ai-jailO primeiro pacote é um binário pré-compilado para Linux x86_64. O segundo compila a partir do código-fonte.
cargo install --locked ai-jailPrecisa de uma toolchain de Rust. --locked compila com as versões das dependências com que a release foi testada.
nix run github:akitaonrails/ai-jail -- claudenix profile install github:akitaonrails/ai-jailA primeira linha roda um agente sem instalar nada. A segunda instala para o seu usuário. O flake aponta o ai-jail para a cópia de bubblewrap que ele mesmo traz.
ai-jail-linux-x86_64.tar.gzai-jail-macos-aarch64.tar.gzOs arquivos compactados são assinados, com os checksums ao lado. Descompacte um deles e coloque o ai-jail em algum lugar do seu PATH. Como verificar a assinatura está na página de Segurança.
cargo build --release --lockedinstall -Dm755 target/release/ai-jail ~/.local/bin/ai-jailPrecisa do Rust 1.97.1.
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.
pacman -S bubblewrapapt install bubblewrapdnf install bubblewrapmacOS
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.

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.
cd ~/Projects/my-appai-jail --dry-run claudeDê 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
exitpara sair.ai-jail bashRode 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:
--networke--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.ai-jail --network --agent-state claudeTorne 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-jailque 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.[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# 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-sandboxEsta é 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.

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:
echo 'kernel.apparmor_restrict_unprivileged_userns=0' \ | sudo tee /etc/sysctl.d/60-userns.confsudo sysctl --systemOu 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.
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:
[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.
ai-jail --no-mise claudePor 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 monta | Bom saber |
|---|---|---|
ai-jail claude | ~/.claude~/.claude.json | Para um segundo perfil do Claude, aponte --claude-dir para o diretório dele. |
ai-jail codex | ~/.codex | Depois 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 claude | As pastas do agente iniciado | O 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.
brew tap akitaonrails/tap && brew install ai-jailai-jail claude