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
  • 项目
  • 项目