如何用 Git worktree 并行运行 Claude Code、Codex 和 OpenCode 会话(在手机上)
一套实用工作流:把任务隔离到不同 worktree,并行运行 Claude Code、Codex、OpenCode 会话,并在手机上安全地审阅和提交,全部在一个地方完成。
- CLI
- 0.2.17
- 预览 ref
- a2c45c8
worktree 在这里有用,并不是因为“你可以同时检出两个分支”。
而是因为多代理工作。
在同一个文件夹里运行两个会话,出问题的方式是可以预料的:
- 代理改到同一批文件
- diff 纠缠在一起
- 你分不清哪些改动属于哪个任务
一条简单的规则就能解决大部分问题:
每个任务一个 worktree
这样,如果你想:
- 用一个 Claude Code 会话做重构
- 用一个 Codex 会话写测试
- 用一个 OpenCode 会话写文档
就可以并行进行,互不干扰。
本指南介绍这套工作流。
快速定义:worktree 是什么(以及它为什么对代理有用)
Git 官方文档把 worktree 描述为一种管理同一仓库下多个工作树的方式,让你可以同时检出多个分支。(来源:https://git-scm.com/docs/git-worktree)
对于多代理工作,重点更简单:
- 每个 worktree 是一个独立的文件夹
- 每个代理拥有自己的文件夹
于是“这个文件是哪个代理改的?”就变成了看目录就能回答的问题,而不是一场侦探游戏。
常见做法以及它们的问题
- 一个分支、一个文件夹,按顺序运行代理: 安全,但慢。
- 一个文件夹,多个代理: 快,但混乱。
- 在任务之间来回 stash: 可行,但频繁操作时容易出错。
worktree 是第一个让人觉得既快又安全的办法。
一套行之有效的工作流
这套工作流把 Happier 作为控制中心。Happier 是一款开源应用,可以跨设备运行和编排 Claude Code、Codex 等代理。
它在一个地方提供两样东西:
- 会话: 跨设备启动和监控 Claude Code、Codex 和 OpenCode 会话
- 每个会话的文件和 Git: 每个会话绑定一个文件夹,所以它的 文件(Files)和 Git 标签页只显示那个文件夹
取舍:你的电脑仍然需要在线。
如果你第一次听说 Happier(它是什么,去哪里获取)
Happier 是一款开源配套应用(移动端、网页、桌面),让你在信任的电脑上运行会话,然后在手机上管理它们。
开始设置:
- GitHub: https://github.com/happier-dev/happier
- 安装和下载: https://github.com/happier-dev/happier#how-it-works
- Discord: https://discord.gg/W6Pb8KuHfg
模式:每个任务一个 worktree
简单的版本:
- 为任务 A 创建一个 worktree
- 为任务 B 创建一个 worktree
- 在每个 worktree 中运行一个会话
- 分别审阅和提交每个 worktree
如果这篇指南你只记住一件事,就记住这个。
分步操作
1) 选出你真正想并行的任务
并行是一种工具。
适合并行的任务:
- 测试和文档
- 重构和小的 UI 调整
- 修 bug 和写迁移计划
不适合并行的任务:
- 两个代理编辑同一组核心文件
2) 创建 worktree
用原生 Git 的话,你会用 git worktree add ... 创建关联的 worktree。(来源:https://git-scm.com/docs/git-worktree)
实际上重要的是结果:
- 两个文件夹,各自检出自己的分支
3) 每个 worktree 文件夹启动一个会话
在 Happier 中启动一个新的 Claude Code、Codex 或 OpenCode 会话,选择 worktree 文件夹作为工作目录。第二个 worktree 也一样。
因为会话绑定到自己的文件夹,每个会话的 Git 标签页就是一个按 worktree 划分的 diff、提交和推送视图,改动不会混在一起。
保持整洁的习惯:
- 用 worktree 或任务的名字给会话命名
- 限定会话的范围(“只修改这个 worktree 中的文件”)
4) 在一个地方监控会话
多个会话运行起来后,目标不是读完每一份转录。
而是:
- 看哪些会话在运行
- 处理审批
- 发一条后续消息
当某件事完成时:
- 打开那个会话的 Git 标签页
- 审阅 diff
- 提交并推送(Git 写操作是实验功能,默认关闭,见 Git 文档)
5) 按 worktree 审阅和提交
安全规则:
- 永远不要把跨 worktree 的改动放进同一个提交
否则就失去了隔离的好处。
终端(可选)
当内嵌终端可用时,会话中会显示 终端(Terminal)标签页。根据功能矩阵,它是实验功能。
用它执行一次性命令(grep、快速查看 status),不要把它当作主要工作流。
常见问题
为什么不直接用分支而不用 worktree?
因为在同一个文件夹里切换分支,会迫使你依赖 stash 或 WIP 提交。
worktree 让你的工作保持原样。
每个 worktree 都需要一个代理吗?
不一定。
但如果你在并行运行代理,每个 worktree 一个代理是防止冲突的简单办法。
常见的大错误是什么?
创建了 worktree,却仍然在同一个文件夹里运行多个代理。
隔离只有真正使用时才有效。
worktree 和会话该怎么命名?
让名字在手机屏幕上一看就懂。
- worktree:
hotfix-<ticket>/docs-<topic>/tests-<area> - 会话:与 worktree 同名,再加上代理名(例如“hotfix-123 (Codex)”)
并行会话多少个算“太多”?
关键不在数量,而在于你是否还能安全地审阅。
比较好的默认是 2 到 3 个并行会话:
- 一个做主要改动
- 一个做次要任务(测试或文档)
- 可选的一个做审阅或检查
怎样防止代理改到错误的 worktree?
两个习惯很有帮助:
- 在第一条消息中写明 worktree 名称:“你只在
<worktree-name>中工作。” - 在前几步之后要求一份阶段性总结。
如果你不在键盘前,明确说清楚更值得。
多个会话运行时,“手机检查循环”是怎样的?
一个简单的循环:
- 打开 Happier
- 查看哪些会话在运行
- 处理审批
- 发一条简短的后续消息(或者“停下来总结一下”)
- 会话完成后,审阅它所在 worktree 的 diff 并提交
目标是保持掌控,而不是在手机上做深度编码。
怎样安全地审阅每个代理的工作?
把每个 worktree 当作独立的审阅和提交单元。
- 版本控制(Source control)→ 更改的文件(Changed files)→ ↓ 审阅(Review)
- 用范围明确的消息提交
- 只在有把握时推送
如果两个代理需要改同一个文件怎么办?
到这一步,并行的帮助就不大了。
可选做法:
- 按顺序进行(先代理 A,再代理 B)
- 拆分任务,让它们修改代码库的不同部分
- 或者让一个代理做改动,另一个做审阅
这只在手机上有用吗?
不是,但在手机上尤其有用。
worktree 让文件系统保持整洁。
无论你在移动端、桌面还是网页上,Happier 都让你能在同一个地方监控会话并审阅和提交。