akitaonrails/ai-jail
Multi-OS sandbox to run AI agents with better constraints (it is not 100% secure, but enough)
ai-jail 是一个命令行工具,可在操作系统级沙箱中启动 AI 编码代理(Claude、Codex、Codex 风格的 harness 等)。其目的狭窄且诚实:它不防御试图逃脱的恶意攻击者——仅防御能力强但可能犯错的 AI 代理犯下诚实的错误,例如执行打错的命令而删除项目外的文件。
它如何保护你
代理会获得一个全新、一次性的家目录(tmpfs),而非你的真实 $HOME,而你正在工作的项目目录则保持可读写。主机上的其他一切皆隐藏,除非你明确暴露。在 Linux 上,它使用 bubblewrap 加上 Landlock(文件系统访问控制)和 seccomp(系统调用过滤);在 macOS 上,它使用 Apple 的 sandbox-exec。
默认开启的项(开发者友好,非锁定)
- 代理自身的凭据目录(
~/.claude、~/.codex等)以读写方式挂载,因此它会以预先验证的状态启动,而非要求你每次登录。你可以使用--no-agent-state选择退出。 - 持久、由 jail 拥有的依赖缓存(cargo、npm、go 等)加上只读的 Rust 工具链,因此
npm install/cargo build可直接运行,无需暴露你的真实工具链。 - 仅允许对包注册表的过滤网络出口,因此依赖下载可成功。
默认关闭的项
网络、GPU、KVM、显示、音频、Docker socket、SSH 密钥、Tailscale 和云凭据(GitHub/AWS/kube/gcloud/docker)——每个都是明确的可选标志,并附有记录的风险,因为沙箱中运行的任何东西都可以使用你挂载的任何内容。
值得注意的功能
--lockdown:最严格的模式——只读项目、无凭据、无网络、严格的 seccomp。仍然不是 VM。--allow-host HOST:通过沙箱内的代理进行过滤出口,仅拨打列出的主机;结合--secret KEY=host,真实 API 密钥永远不会进入沙箱——仅在对该主机的请求中,占位符会被替换为真实值。--dry-run:模拟启动而不写入任何内容。- 可写性范围:项目目录是爆炸半径,因此用户可以安全地在代理 harness 中启用“自动接受”(YOLO)模式。
安装/使用:Homebrew、Arch(AUR)、cargo install、Nix flakes 或 GitHub releases。使用方式很简单:在项目目录内运行 ai-jail claude(或 codex 等)。Linux 需要 bubblewrap;macOS 使用已弃用的 sandbox-exec;Windows 仅通过 WSL2。
结论:这是一个实用的意外预防层,用于在本地运行基于 LLM 的编码代理——不是安全边界。范围明确、设计周到,且对其威胁模型异常坦诚。
相关
- 项目
- 项目
- Dispatch
- 项目
- 项目