帖子说了什么
@Diegocp01 分享了一个并行工作的常用做法:在两个终端里分别运行 claude --worktree ui 和 claude --worktree bugfix,每个会话有自己的一份文件和分支,互不覆盖,合并前再审一遍。他特意补了一句:worktree 不是安全沙箱,出处是 Claude Code 官方文档。
官方文档怎么说
我们去看了官方的 worktree 文档。会话在 worktree 里运行时,Claude Code 会做四项检查:
- 拦截目标路径在主检出目录里的
Edit、Write等文件编辑; - 拦截工作目录落在主检出目录(或无法确认不在)的命令;
- 拦截用
git -C、--git-dir、GIT_DIR等方式把 git 指回主目录的命令; - 命令文本无法确认 git 只在 worktree 里运行时,直接拒绝。
但文档也写得很清楚:这些检查只看编辑目标路径、命令所在目录和命令文本,不追踪 shell 命令实际写了哪些文件。所以一条不调用 git、直接用 cp 或 shell 重定向(>)写进主检出目录的命令,不会被隔离检查拦下,它只按你的权限和沙箱设置来处理。
换句话说,worktree 的作用是「防止并行会话互相踩文件」,不是「防止 Agent 碰到工作区以外的东西」。你的 ~/.ssh、.env、别的项目目录,worktree 一概不管。
落地做法
- 把 worktree 当作协作工具。 用它分开并行任务,不要因为开了 worktree 就放宽权限。
- 安全边界交给权限和沙箱。 敏感路径(
.env、凭证目录、主检出目录)写进 deny 规则;无人值守任务开沙箱,并限制可写路径。 - 合并前看 diff,也看主目录。 跑完一轮后在主检出目录执行
git status,确认没有被「绕路」写进来的改动。 - 先信任工作区。 文档提到交互式
--worktree需要先接受工作区信任;而claude -p --worktree会跳过信任检查,脚本里用要格外小心。 - 保持最新版本。 2.1.309 还修了几种隔离检查本该拒绝却放行的命令写法,升级后复测你依赖的规则。
小结
worktree 解决的是「并行不打架」,安全靠权限、沙箱和你自己的检查。两件事分开想,就不会把协作工具当成防护墙。
