Chopi 沙箱怎么用,macOS 上给 agent 加护栏
chopi 沙箱怎么用:macOS Seatbelt 限文件、chopi-proxy 限域名、GitHub 推送白名单,safe write 改走补丁队列,非容器方案。

chopi 沙箱怎么用,先记住它不是 Docker:命令仍在你本机真实环境里跑,靠 macOS Seatbelt、本地 CONNECT 代理和 GitHub 中继把文件、域名、推送范围卡住。适合想在 Mac 上跑 Claude Code 等 agent,又怕 auto 模式乱写盘、乱连网、乱 push 的人。
安装与必须先开的 proxy
danra/chopi 早期 OSS(Show HN ~2026-08-11)。克隆后执行 ./install.sh,首次使用前读 config/ 下模板。
两步分工:
# 终端 A:前台跑代理,拒绝连接会打日志 + macOS 通知
chopi-proxy
# 终端 B:在 git 仓库根目录
cd ~/path/to/your/repo
chopi claude
chopi 不会替你起 proxy;proxy 没起来会直接 fail fast。域名白名单改 config/proxy-rules.yaml,可热加载;GitHub 仓库白名单改 config/github-allowlist。沙箱策略改 config/sandbox.sh 里的 CHOPI_SAFEHOUSE_FLAGS 等,下次 chopi invocation 生效。
工作区必须是 git worktree 根目录,否则拒绝启动,避免「裸跑」没有 git 加固。子目录或非 git 目录都会被拦。
安装后建议先 dry run:在测试仓跑 chopi echo hello,同时盯 proxy 终端有没有意外 DENY。再逐步放开 proxy-rules.yaml 里的 API 域名(如 api.anthropic.com)。config/templates 只在首次 install 生成本地 config,之后升级不会覆盖你的 edits,但 upstream 模板变了要手动 diff 合并。
chopi --worktree feature-x claude 会从仓库根创建 /.worktrees/feature-x 并 checkout 分支 feature-x;已存在则复用,方便长会话恢复。worktree 模式下可用 CHOPI_WORKTREE_SETUP 在沙箱启动前跑 submodule init 等,因为沙箱内 git submodule update 会因只读 config 失败。
三层防护各自管什么
Chopi 叠了三层,因为 Seatbelt alone 不能按 hostname 过滤出站:
| 层 | 组件 | 管什么 |
|---|---|---|
| 文件 | Agent Safehouse + Seatbelt | 工作区读写、仅允许连本地代理端口 |
| 域名 | Smokescreen CONNECT 代理 | 允许列表外的主机拒绝并记录 |
| 仓库 | Caddy GitHub 中继 | 私有读、任意 push、带 token API 限 allowlist |
出站路径被 Seatbelt 钉死到 127.0.0.1:4760/4761 与中继 socket;agent 必须尊重 HTTP_PROXY/HTTPS_PROXY。Claude Code、Codex 等主流 CLI 默认会走代理;Cursor CLI 需 NODE_USE_ENV_PROXY=1,chopi 会在沙箱 env 里设好。
高级用法:chopi --config FILE 可单次换 sandbox 配置,但 FILE 必须在 workspace 外,防 agent 改自己的笼门。chopi-proxy --rules FILE 的规则文件 likewise 不要放在会被 sandbox 的目录里。host 侧 GitHub token 由 Caddy 中继注入,sandbox 内看不到明文 token,只允许 allowlist 仓库的 push 与私有读。
跑 claude 时,chopi 还会把沙箱说明 append 进 system prompt,并检查 CLAUDE.md 等 allowlist 上下文文件是否可读。与 Claude Code CLI 基础 里讲的权限提示互补:前者是产品层确认,后者是 OS 层硬拦。
safe write 与补丁队列
有些路径不应让 agent 直接写,例如团队共享知识库或工作区外的 CLAUDE.md。在 config/sandbox.sh 的 CHOPI_SAFE_WRITE_TARGETS 里声明后,agent 只能往 ~/.chopi/patch-queue 丢 git format-patch 形补丁。
命令结束或手动跑 chopi-review 时,你在沙箱外逐条看 diff,选择 apply、reject 或 skip。未批准不会落盘。这比「全自动写进 ~/dev/team/common_knowledge」多一步,但能挡住 auto 模式的脑补段落。
补丁队列按 workspace 分目录存放在 ~/.chopi/patch-queue。reject 的 patch 不会自动重试,agent 若需改写法要在下一轮 session 重新生成。apply 时若目标文件有冲突,chopi-review 会停住让你手工 merge,不会 silent overwrite。团队规范可把「所有写 CLAUDE.md 的变更必须经 chopi-review」写进 CONTRIBUTING,与 PR review 并列。
--worktree 模式可在 /.worktrees/NAME 开隔离分支跑 agent,适合长任务不污染 main。worktree 隔离目标是减少 agent 误读别的分支上下文,不是完美多租户;git objects 仍共享,官方 README 也写明 hardening 应按整仓看待。
git 加固细节:.git 可读,但 config、hooks 只读,防 agent 植入下次 unsandboxed git 操作会执行的脚本。沙箱终止时会 abort 进行中的 rebase/cherry-pick,避免 todo 里被注入的 exec 在沙箱外跑。若 launch 时已有 rebase 进行中,交互式会 [y/N] 询问,非交互直接拒绝。
排错常见两条:网络被拒,先确认 proxy 在跑,再把 host 加进 proxy-rules.yaml;gh 报 not an allowed API operation,用 -R owner/repo 显式指 repo,或出沙箱跑。非网络拒绝见 Agent Safehouse 的 Debugging Sandbox Denials 文档。
边界与失效场景
非 macOS 无 chopi。不是 VM,恶意或过度宽松的域名白名单仍可能经 paste 类站点外传数据,README 明确警告不要随便 allow 可滥用的域名。
以下操作要在沙箱外做:git remote add、改 hooks、装 husky、部分 submodule 更新。沙箱内写 .git/config 会被拒。
与 Cursor 本地与 Cloud Agent 怎么交接 不同:chopi 是本地命令级沙箱,不提供云端持久电脑。适合「信模型但不信 auto 写盘」;若你要 24/7 跨 SaaS,那是 Grok Bot 一类产品的赛道,不是 chopi 要解决的。
macOS 15+ 上 Seatbelt 拒绝有时只给 opaque denial,README 指向 Agent Safehouse debugging 页。常见误配是把 workspace 放在 iCloud 同步目录,sandbox 与 cloud 冲突会导致莫名 read deny。另一个坑是 VPN 全局代理与 chopi 本地 proxy 叠在一起,agent 以为走了 HTTPS_PROXY 但实际 traffic 被 VPN 截走;排错时先关 VPN 验证。
开发 chopi 本身时,默认不能 sandbox 自己的安装目录;设 CHOPI_ALLOW_SELF=1 才可 dogfood。早期 OSS,API 与配置字段可能随 commit 变,升级时对照 config/templates diff。
与容器方案比:chopi 不复制 toolchain,agent 用的是你本机 Node、git、credential helper,调试体验接近裸跑,但约束靠 Seatbelt + 代理叠层。适合个人 Mac 日常 coding agent;团队 CI 若要 reproducible 镜像,仍倾向 Docker/Firecracker 类方案。Show HN 反馈集中在「终于有 hostname 级 egress 控制」,也提醒 allowlist 维护成本不低,API 域名变了要自己加规则。
日常习惯可以是:开两个 terminal tab,一个常开 chopi-proxy,另一个 chopi claude 或 chopi codex。换项目时 cd 到对应 git 根再 launch,proxy 可共用。第一次接私有 GitHub 仓记得改 github-allowlist,否则 push 会在 Caddy 中继层被拒,日志里能看到 repo 名。denylist 里已知 telemetry 域名会 quiet deny,减少通知噪音,但别因此忽略真正可疑的新 host。
Chopi 适合「本地 agent 要放开权限又怕乱写乱推」的场景;它不替代 Grok Bot 那种云端登录 SaaS 的产品形态。选工具时先分清威胁模型是本机仓库还是云端账号,再决定沙箱还是审批流。