Github 原文:shareAI-lab/learn-claude-code
如果你用过 codex 和 cc 的工作树,我想你已经知道这篇文章我们要讲什么了。
问题
之前的 Agent 任务中,Alice 和 Bob 都在同一个目录下工作。Alice 的任务是”重构认证模块”,Bob 的任务是”重构 UI 登录页”。
但是万一他们同时在运行过程中都要改某一个文件,那不炸了吗?没错,这就是隔离工作空间,就是工作树!之前我们在当前版本新神 codex,你需要的都在这!也做过详细的介绍!
解决方案
Git worktree 让你在同一仓库中创建多个独立的工作目录,每个有自己的分支。Alice 在 .worktrees/auth-refactor/ 下工作,Bob 在 .worktrees/ui-login/ 下工作——互不干扰。
| 能力 | 作用 |
|---|---|
| create_worktree | 为任务创建独立目录 + 独立分支 |
| bind_task_to_worktree | 把任务和工作目录绑定(不改状态) |
| remove_worktree / keep_worktree | 完成后清理或保留 |
| validate_worktree_name | 拒绝路径穿越和非法字符 |
工作原理
创建:任务和工作树绑定
一个任务绑定一个 worktree。绑定不改任务状态——任务仍是 pending,队友自动认领时才推进到 in_progress。这样 Lead 可以提前创建任务和 worktree,队友 idle 时自然认领带 worktree 的任务。在 CC 中,如果在工作树中创建 Subagent,subagent 的工作空间也是在 worktree。
工具路径切换
教学版给每个队友维护一个 wt_ctx 字典,记录当前 worktree 路径。队友认领带 worktree 的任务时,wt_ctx 自动设置为 worktree 路径;队友的 bash、read_file、write_file 在 worktree 目录下执行。这个也是老生常谈了,不再过多说明,几乎所有关于工作树介绍的都有讲。
收尾:保留还是拒绝
当这个任务完成后,有两个选择:
-
Keep = 留着分支,等人工 review 后合并到主分支。
-
Remove = 有改动时默认拒绝,需要
discard_changes=true确认。
也就是说,工作树里面 Agent不会像之前一样,完成了提交一下 inbox 就跑去干别的去了,自动 complete task,而是完成由队友的 complete_task 显式触发。