Instálalo, mira dentro, ejecuta tu agente
ai-jail es un solo programa, sin daemon y sin root. Lo instalas, pones su nombre delante del comando que ya escribes y el agente arranca dentro de un sandbox.
Instalar
Elige la forma en que ya instalas tus herramientas de línea de comandos. Todos los métodos te dan el mismo y único programa ai-jail.
brew tap akitaonrails/tap && brew install ai-jailFunciona en macOS y en Linux.
yay -S ai-jail-binyay -S ai-jailEl primer paquete es un binario precompilado para Linux x86_64. El segundo compila desde el código fuente.
cargo install --locked ai-jailNecesita una toolchain de Rust. --locked compila con las versiones de dependencias con las que se probó la versión publicada.
nix run github:akitaonrails/ai-jail -- claudenix profile install github:akitaonrails/ai-jailLa primera línea ejecuta un agente sin instalar nada. La segunda instala para tu usuario. El flake hace que ai-jail use su propia copia de bubblewrap.
ai-jail-linux-x86_64.tar.gzai-jail-macos-aarch64.tar.gzLos archivos comprimidos están firmados y traen sus checksums al lado. Descomprime uno y pon ai-jail en algún lugar de tu PATH. Cómo verificar la firma está en la página de Seguridad.
cargo build --release --lockedinstall -Dm755 target/release/ai-jail ~/.local/bin/ai-jailNecesita Rust 1.97.1.
Lo que necesita tu sistema
Linux
Instala bubblewrap, el pequeño programa que ai-jail usa para construir el sandbox. La mayoría de las distribuciones lo empaquetan como bubblewrap.
pacman -S bubblewrapapt install bubblewrapdnf install bubblewrapmacOS
No hay nada que instalar. ai-jail usa sandbox-exec, que viene con macOS. Apple marca esa interfaz como obsoleta.
Windows
No está soportado. Usa WSL2 y sigue dentro de él los pasos de Linux.
Tu primera ejecución
Tres comandos te llevan del plan a un vistazo por dentro y de ahí a un agente funcionando. ai-jail no abre nada hasta que lo pidas.

Mira el plan sin ejecutar nada
Ve a tu proyecto y pide un dry run, una simulación. ai-jail imprime el comando de sandbox que usaría y termina. Un dry run nunca escribe un archivo.
cd ~/Projects/my-appai-jail --dry-run claudeEcha un vistazo dentro
Arranca una shell simple en la jaula. Tu proyecto está ahí, en su ruta real, y puedes editarlo. Tu directorio home es uno nuevo y vacío, y los tokens de tu shell ya no están. Escribe
exitpara salir.ai-jail bashEjecuta el agente con las dos cosas que necesita
Un agente que habla con un modelo en la nube necesita la red para llegar a él, y su propio login guardado para demostrar quién eres. Ambos están apagados por defecto, así que los activas:
--networky--agent-state. Desde la versión 1.22, si arrancas un agente conocido sin uno de ellos, ai-jail imprime una advertencia con el nombre del flag que falta.ai-jail --network --agent-state claudeDéjalo como predeterminado para ese agente
Pon los dos ajustes en
~/.ai-jail, tu propio archivo de configuración, bajo el nombre del agente. A partir de ahí basta con el comando corto. El archivo.ai-jailque puede aparecer en el proyecto solo puede endurecer la jaula. Nunca puede activar la red ni un login, así que un repositorio que clonas no puede abrirse la jaula a sí mismo.[commands.claude]network = trueagent_state = true # from now on, in any project:# ai-jail claude
Lo que verás dentro
El prompt cambia a (jail) y el proyecto está donde siempre estuvo. Falta lo que vale la pena robar.
$ ai-jail bash# el proyecto está en su ruta real(jail) ~/Projects/my-app $ pwd/home/you/Projects/my-app# un token exportado en tu shell no vino contigo(jail) ~/Projects/my-app $ echo $GITHUB_TOKEN # tus claves no están en este home(jail) ~/Projects/my-app $ cat ~/.ssh/id_ed25519cat: /home/you/.ssh/id_ed25519: No such file or directory# la jaula tiene su propio hostname(jail) ~/Projects/my-app $ hostnameai-sandboxEsta es una sesión de Linux. macOS no tiene forma de construir un árbol de archivos aparte, así que ahí las mismas rutas existen y se deniega su lectura.

Desde dentro, el proyecto es lo único tuyo que existe. La red también queda fuera hasta que pases --network.
Si no arranca
Estos son los casos que cubre la sección de problemas del README, más las dos reglas de configuración con las que la gente tropieza.
bwrap: setting up uid map: Permission denied
Ubuntu 24.04 y posteriores y Debian 13 y posteriores traen una política de AppArmor que impide a los programas crear user namespaces sin root, que es como bubblewrap aísla la jaula. Afecta a todas las herramientas sin root de este tipo. Relájala para todo el sistema:
echo 'kernel.apparmor_restrict_unprivileged_userns=0' \ | sudo tee /etc/sysctl.d/60-userns.confsudo sysctl --systemO conserva la política y exime solo a bwrap. Guarda esto como /etc/apparmor.d/bwrap y luego ejecuta sudo apparmor_parser -r /etc/apparmor.d/bwrap.
abi <abi/4.0>,include <tunables/global>profile bwrap /usr/bin/bwrap flags=(unconfined) { userns,}Tu BWRAP_BIN es rechazado
Puedes apuntar ai-jail a un bubblewrap concreto con BWRAP_BIN. ai-jail lo acepta solo cuando resuelve a un programa propiedad de root que otros usuarios no pueden escribir, o a uno en un /nix/store multiusuario estándar. Rechaza una copia en tu propio home, porque quien pueda reemplazar ese archivo controla la jaula.
Faltan las herramientas de mise dentro
ai-jail activa mise cuando lo encuentra, pero el home nuevo no tiene ni la configuración de mise ni sus herramientas instaladas, así que omite la activación. Mapea ambas hacia dentro, en solo lectura, desde tu propia configuración:
[commands.claude]ro_maps = ["~/.config/mise", "~/.local/share/mise"]Failed to create stream fd al arrancar
Viene de un script de inicio de sesión de Ubuntu desktop durante la preparación de mise. Es inofensivo y mise sigue funcionando. Pasa --no-mise para omitir la preparación de mise y, con ella, el mensaje.
ai-jail --no-mise claudePor agente
ai-jail sabe dónde guarda su login cada agente. --agent-state monta solo las carpetas del agente que arrancas, y solo si existen.
| Ejecutas | --agent-state monta | Conviene saber |
|---|---|---|
ai-jail claude | ~/.claude~/.claude.json | Para un segundo perfil de Claude, apunta --claude-dir a su directorio. |
ai-jail codex | ~/.codex | Después de redimensionar la ventana, ai-jail le envía a Codex una tecla de redibujado para que la pantalla se repinte. |
ai-jail opencode | ~/.config/opencode~/.local/share/opencode | |
ai-jail gemini | ~/.gemini | |
ai-jail ai-memory run claude | Las carpetas del agente lanzado | ai-jail reconoce al agente que lanza ai-memory y aplica los ajustes de ese agente, con ambos programas en una sola jaula. |
Lo mismo funciona con crush, grok, jcode, pi, aider, soulforge, omp y los comandos de kimi. Cualquier otro comando también se ejecuta. Recibe la misma jaula y ninguna carpeta de login.
Pon a tu agente tras las rejas
ai-jail es un único binario que no necesita daemon ni root. Añades una palabra delante del comando que ya usas.
brew tap akitaonrails/tap && brew install ai-jailai-jail claude