Worktrunk:基于Git Worktree的AI Agent并行工作流管理工具
2026/9/19 5:18:13 网站建设 项目流程

1. 为什么需要Worktrunk:并行的诱惑与混乱的代价

过去半年,AI Agent从"玩具"变成了真正能写代码的协作者。我自己在Claude Code、Codex CLI、DeepSeek CLI和Trae CLI之间反复横跳,最后的结论是:单个Agent处理单文件小改动已经非常能打,但真正让人头疼的是"多个Agent同时开工"这件事

你可以想象这样一个场景:我在主分支上跑着一个Agent在修登录模块的bug,同时另开一个终端让Codex CLI给后台加一个导出功能。两个Agent都在同一个工作目录里,一边git checkout切分支,一边编辑文件,十分钟之后,代码被互相覆盖,git status里面一团乱麻,连哪个文件属于哪个任务都分不清。这个体验可以用一句话总结——并行是真香,混乱也是真严重

后来我知道了一个解决方案:Git Worktree。它允许你在同一个仓库下创建多个独立的工作目录,每个目录负责一个分支,互不干扰。这确实是并行开发的正解,但手动用git worktree管理多个Agent任务时,又遇到新的问题:要手动创建、手动切换、手动清理,还要记住每个目录对应哪个分支、哪个任务。Agent一多,这些状态就成了散落一地的线头。

所以我动手做了Worktrunk这个CLI工具。它的定位非常明确:把git worktree的创建、切换、清理和任务关联封装成一套面向AI Agent并行工作流的命令行工具,让每个Agent都拥有完全隔离的工作区,同时通过一个命令随时查看全局状态。如果你正在做AI Agent相关的开发,或者尝试让多个Agent并行干活,这篇文章值得看完。我会把为什么需要它、底层原理是什么、具体怎么用、以及我踩过的坑全部讲清楚。

2. Git Worktree基础与核心原理

2.1 一个仓库,多个工作目录

先说清楚Git Worktree到底解决什么问题。默认情况下,一个Git仓库只有一个工作目录,checkout一个分支之后,其他分支的文件就会从工作区里消失。想同时看两个分支的代码,传统做法是clone两份仓库,代价就是磁盘翻倍、远程配置要重复维护。

git worktree的做法是:保持一个.git目录,但挂多个工作目录。比如我在一个项目根目录下执行:

git worktree add ../my-app-feature-export -b feature/export

这个命令会在../my-app-feature-export目录创建一个新的工作区,自动检出到新分支feature/export。两个工作目录共用同一套对象数据库和远程配置,但工作区、暂存区、HEAD完全独立。你在一个目录里提交代码,切分支,完全不影响另一个目录。这里的关键在于:git worktree本质上是把"仓库"和"工作区"解耦了,不同工作区可以同时指向不同分支,并且各自的git status互不干扰。

从实现上看,repo的.git目录下会多一个worktrees子目录,里面记录了每个worktree的元数据。git命令会在内部维护这个清单,保证同一个分支不会被两个worktree同时检出,避免相互踩踏。

2.2 为什么Worktree是天生的Agent并行容器

Git Worktree不是新功能,它从Git 2.5就开始支持了。但过去几年它的使用场景主要停留在"我要同时改多个feature"这种单人场景。直到AI Agent开始普及,Git Worktree才真正迎来高光时刻。

原因在于,AI Agent有一个典型的运行模式:它会自主完成"读取代码、生成改动、执行测试、修复报错、提交代码"这一整条链路。传统的编码工作流里,你是"坐在驾驶位"上的,Agent干什么你全程盯着。并行场景下,你不可能同时盯着多个Agent,只能靠工作区隔离来兜底。

Git Worktree恰好提供了这种隔离:每个Agent有独立的文件系统视图,独立的git索引,独立的HEAD。A Agent在它的目录里把代码改成什么样,B Agent完全感受不到。这样就不需要你手动去同步或协调。更重要的是,所有worktree共用一个.git对象库,提交之后的对象立即可见,一旦一个Agent在它的分支上提交了修复,其他Agent分支如果需要merge,直接拿即可,不需要额外的push-fetch动作。

这个特性让我感觉Git Worktree就像给每个Agent发了一间独立办公室。大家都在同一栋楼(同一个仓库)里,各自有门禁卡和办公桌,文件不共享,但要用公共设施(公共历史、远程仓库)的时候随时可以用。

2.3 手动管理和CLI管理的差距

有了Git Worktree,理论上任务就解决了。但你一旦真正去跑并行的Agent工作流,就会发现手动管理很快会变成灾难。

拿我的实际经验来说,最高峰时我给3个Agent分配了5个worktree目录,分布在项目根目录之外的不同路径下。问题很快就浮现了:

  • 每次创建worktree要手打一长串命令,包含目录路径、分支名、基准分支,太容易写错。
  • worktree和任务(比如"修复登录bug""加导出功能")之间没有关联,时间一长你根本分不清哪个目录对应哪个任务。
  • 某个Agent跑完一通操作后,可能在它的worktree里新建了好几个临时分支,这些残留分支需要手动清理。
  • Agent本身不知道worktree的存在。我给同一个repo开了5个worktree之后,Agent还是默认在主工作区里做操作,如果在它自己的工作目录之外工作,又会出现干扰。

Worktrunk把上述问题全部收敛到"一个命令一个动作"的粒度。它内部维护一个任务注册表,每次创建worktree时,自动绑定任务名、目标分支、基准分支和创建时间。你不再需要记忆任何路径或SHA,只用任务名来操作,比如wt start fix-loginwt stop fix-login。整个流程从"手动记一堆状态"变成"声明式管理任务和工作区"。

3. Worktrunk的设计与功能拆解

3.1 核心设计思路:让Agent可感知、可托管

我在设计Worktrunk时,先给自己定了几条铁律。

第一,工作区必须和任务一一对应。任务名是用户唯一需要关心的标识,目录、分支、PID这些内部细节全部由工具生成。任务名用kebab-case,比如fix-login-timeoutadd-filter-export,既直观又能作为目录名。

第二,Agent运行时的会话信息必须可查。一个真正的并行工作流里,你可能在终端A启动了一个Agent,干到一半去开会,回来看另一个终端里的Agent已经跑完了。为了不迷失,我需要一个"全局总览",一次命令看到所有任务的状态、分支、工作区路径、最后活跃时间。

第三,清理必须安全可靠。Agent跑完之后,它的工作区里可能有不少未提交的改动,也可能留着临时分支。Worktrunk的stop命令会先判定是否还有进程占用,再决定是直接删除worktree,还是先把改动stash到对应的分支上再做清理。

第四,纯CLI,不依赖GUI,不污染项目。Worktrunk的可执行文件就是一个二进制,不需要常驻服务,不修改项目的任何业务代码或git配置(仅在你指定的位置维护一份状态文件)。

这个设计思路在我看来特别适合AI Agent嵌入式工作流。Agent的执行者是无限并发的,而管理者的精力是有限的,CLI的职责应该是"把复杂状态抽象成简单命令",而不是"再给用户增加一套需要学习的心智负担"。

3.2 功能架构与命令集

Worktrunk的命令集刻意做得很精简,核心就这几个:

命令作用示意
wt create <task>创建新任务并生成独立worktreewt create fix-login-timeout --from main
wt list列出所有任务的详细状态显示任务名、分支、目录、Git状态、进程状态
wt switch <task>切换到某个任务的工作目录相当于cd到对应worktree
wt run <task> -- <cmd>在指定任务的worktree内执行命令常用于给某个Agent指定运行容器
wt stop <task>停止任务并清理worktree自动判断是否有进程在占用
wt prune清理所有已终止任务的残留一键清空历史任务
wt status查看当前所有worktree的Git变更状况相当于对每个worktree跑git status --short

这一组命令的粒度是"任务级别"而不是"文件级别"或"分支级别"。wt create fix-login-timeout --from main可以理解为给任务创建一间独立办公室,你和Agent只需要记"我在处理fix-login-timeout这件事",剩下的路径、分支、状态都由工具管理。

3.3 任务生命周期管理

在Worktrunk里,一个任务的完整生命周期是:createdrunningstopped→ 清理/归档。

创建时,工具会做几件事:校验任务名不重复、确认基准分支存在、生成wordtree目录、checkout目标分支,然后写入状态记录。这些步骤任何一个失败,都会回滚到初始状态,不会留下半成品worktree。

运行中,用户或Agent可以在该worktree内自由操作,git提交、分支切换都没有限制。Worktrunk只做记录,不做强制约束,因为Agent的行为模式是高度动态的,过度约束反而会造成麻烦。

停止时,Worktrunk会先检测该worktree是否被进程占用。注意:这里不是简单的端口占用,而是检查worktree里是否有正在执行的进程(比如测试进程、构建进程)。检测到占用时,工具会给出警告并要求确认,防止你误删一个还在运行的Agent会话。停止成功后,默认策略是保留worktree目录但切换到维护模式,保留现场方便回头复查。只有当显式加--clean参数时,才会删除目录和关联分支。

我实际用下来这种策略特别舒服:白天给5个Agent分配任务,晚上统一wt list看哪些任务跑完,跑完的wt stop --clean清掉,现场保留的任务留着第二天继续。

4. 安装与上手实操

4.1 环境准备与安装

Worktrunk依赖Git 2.30以上版本,以及一个支持POSIX标准的Shell环境。我在Windows上用Git Bash实测没问题,在macOS的zsh和Linux的bash下也没有异常。安装方式我推荐直接用installer脚本,或者通过Cargo/Homebrew安装(取决于发布形态,目前我在用的版本是基于Rust构建的)。

# 通过cargo安装(适合Rust开发者) cargo install worktrunk # 或使用官方安装脚本 curl -fsSL https://install.worktrunk.dev | bash

安装完成后验证一下:

wt --version # worktrunk 0.4.2

这个CLI没有复杂的运行时,不依赖Node或Python环境,单文件二进制扔到PATH里就能跑。这点对我这种经常在不同开发机之间切换的人特别友好,拷贝过去就能用,不需要每台机器都装环境。

4.2 初始化一个项目

到项目根目录里执行wt init。这会在当前仓库生成一个状态目录(默认是.worktrunk/),里面存放任务注册表和相关配置。.worktrunk/目录应加入.gitignore,因为它是本机管理状态,不应该提交到远程。

cd ~/projects/my-app wt init

初始化时,工具会读取当前仓库的默认分支,记为baseBranch。后续所有任务默认从该分支切出。你可以用--base main覆盖,或者在实际创建任务时用--from指定其他分支。这一步完成后,项目就具备了创建并行任务的条件。

我觉得wt init这个动作让整个工具的侵入感降到了最低。它不动你的git配置,不安装hook,不改build脚本,只添加一个可删除的本地状态目录。这对团队协作尤其重要——你可以随时在任意一台机器上初始化,用完删除状态目录也不会影响仓库本身。

4.3 完整工作流演示:并行给两个Agent发任务

我拿一个真实的项目场景来演示。假设我在做一个Web应用,现在需要同时做三件事:修登录超时bug、新增CSV导出功能、升级前端构建依赖。三个任务互不相关,完全适合并行。

第一步,为每个任务创建独立的worktree:

wt create fix-login-timeout --from main wt create add-csv-export --from main wt create upgrade-frontend-build --from main

此时我的项目的兄弟目录下会多出三个目录(比如../my-app-fix-login-timeout等),每个目录都是独立分支。用wt list看一下整体状态:

wt list Task Branch Worktree Status fix-login-timeout wt/fix-login-timeout ~/projects/my-app-fix-login-timeout created add-csv-export wt/add-csv-export ~/projects/my-app-add-csv-export created upgrade-frontend-build wt/upgrade-frontend-build ~/projects/my-app-upgrade-frontend-build created

第二步,把每个Agent的命令绑定到对应worktree里执行。我的做法是这样:一个终端跑Claude Code,一个终端跑Codex CLI,一个终端跑构建脚本。

# 终端1:Claude Code处理登录bug wt run fix-login-timeout -- claude # 终端2:Codex CLI处理导出功能 wt run add-csv-export -- codex # 终端3:手动处理构建升级 wt run upgrade-frontend-build -- bash

注意这里wt run的作用不是开一个子Shell就完了,它会先检查目标worktree是否可用,再设置特殊的环境变量提醒Agent当前工作目录的位置,最后执行命令。Agent在指定目录里的所有操作都被限制在独立worktree内。如果某个Agent在中途需要看全局分支列表,它也只会看到它自己的工作区状态,这是Git Worktree天然隔离带来的好处。

第三步,按需查看全局状态。忙的时候我每10分钟敲一次wt status,看每个目录是不是有未提交的改动,以及哪些任务Stop了但还没清理:

wt status Task Branch Changes Last Active fix-login-timeout wt/fix-login 1 file 2 min ago add-csv-export wt/add-csv 4 files just now upgrade-frontend-build wt/upgrade-b 0 files 30 min ago

第四步,任务完成后清理。我一般先在对应的worktree里确认代码已经提交和push,然后执行:

wt stop add-csv-export --clean wt stop fix-login-timeout --clean

两个命令执行完之后,两个worktree目录消失,两个分支wt/add-csv-exportwt/fix-login-timeout也被删除,本地瞬间清爽。整个过程不需要手动去算"哪个目录对应哪个分支""怎么删一个worktree"这些问题。

5. 核心配置与参数选择

5.1 配置项解析与推荐值

Worktrunk在初始化时会生成一份配置文件,里面有几个关键参数会直接影响并行效果。

parentDir:worktree目录的统一父路径,默认是当前项目的父目录。我强烈建议用默认值以外的显式路径,比如~/worktrees/my-app。原因很简单:worktree目录如果放在项目根目录内部,某些Agent在识别"项目根"时可能会出错——它们会以为worktree目录是项目的一部分,从而错误地扫描或修改。放在项目之外可以减少这种误判。

namingTemplate:目录命名模板,默认是{repo}-{task}。可以改成{task}task-{id}。如果你同时管理多个项目的多个任务,保留{repo}前缀很重要,否则两个项目下的任务名相同会导致目录冲突。

defaultBaseBranch:默认基准分支,默认是当前仓库的主分支(main/master)。团队协作时,如果通常从develop切分支,就改这里。

maxParallelTasks:最大并行任务数,默认是4。这个参数可以作为软提示,当创建的任务数超过这个值时,wt create会给出警告(但不会强制阻止)。

下面是一份我当前项目的配置参考:

# .worktrunk/config.yaml parentDir: ~/worktrees/my-app namingTemplate: "{repo}-{task}" defaultBaseBranch: main maxParallelTasks: 6

5.2 并行度选择:从资源与上下文估算

很多人会问:并行任务数到底开多少合适?我的经验是,不要盲目追求数量,要综合评估三个维度。

第一,CPU与内存资源。每个AI Agent在运行时会占用不少CPU和内存,尤其当它要跑编译、测试时。如果一台8核16G的机器同时跑4个Agent,每个Agent各跑一套Webpack构建,内存大概率会顶到极限。根据我的实测,一个中等规模的前端项目,Agent + 构建进程大概需要4~6G内存。也就是说,16G内存的机器撑死跑3个重型Agent,再多就会开始频繁swap,速度反而下降。

第二,仓库规模和构建依赖。如果你的项目编译一次要5分钟以上,并行任务数越多意味着同一时间可能有多个任务都在抢同一个构建缓存目录(比如node_modules),容易引发文件锁冲突。此时可以考虑为每个worktree单独安装依赖,代价是磁盘占用上升,建议结合磁盘空间和构建时长做权衡。

第三,代码冲突概率。虽然worktree让工作区隔离,但最终合并回主干分支的时候,如果多个Agent同时改了同一个文件的核心逻辑,冲突依然无法避免。并行度越高,冲突范围可能越大。我建议:并行度=你愿意花多少时间来解决合并冲突的倒数。如果你不想面对大规模merge冲突,就控制在2~3个并行任务;如果你觉得merge是家常便饭,可以冲到5~6个。

用公式粗略估算:N = min(round(可用内存 / 单Agent平均内存), 可用CPU核心数, 你愿意处理的冲突规模) / 2。这个除以2是给自己留余量,因为Agent任务大多不是稳定消耗资源,会有瞬时峰值。

5.3 命名规范与目录约定的实战建议

在并行工作流的初始阶段,规范的命名能省掉大量心智负担。我现在所有团队项目统一用这套规则:

  • 任务名一律用类型-简述格式。类型包括fix(修复)、feat(功能)、chore(维护)、refactor(重构)、perf(性能)、docs(文档)。描述用两三个单词,比如fix-login-redirectfeat-csv-import
  • 分支统一加wt/前缀,例如wt/fix-login-redirect。这样在查看本地全部分支时,可以一眼看出哪些是worktrunk管理的临时分支,方便批量清理。
  • 目录保留仓库名前缀。这个很重要。在~/worktrees/下同时有my-app-fix-login-redirectapi-server-fix-login-redirect时,你会庆幸自己保留了前缀。

这些约定看起来琐碎,但并行场景下它们就是"可维护性"的基石。如果每个任务起名都随心所欲,两三天后你自己都找不到哪个目录是哪个任务。

6. 踩坑记录与排查技巧

6.1 worktree清理不掉的坑

这是我在使用中遇到的最大麻烦之一。执行git worktree remove <path>时,Git会报错:fatal: '<path>' contains modified or untracked files。原因很简单:worktree里存在未提交的改动,Git不允许直接删除。

Worktrunk的stop命令内置了处理逻辑:默认情况下,它会先尝试把改动commit到对应分支(保留现场);如果commit失败(比如没有任何提交信息),会退而使用git stash把改动暂存。只有显式指定--discard才会直接丢掉未提交的改动。

不过,这个保护策略也有一个副作用:某个Agent在worktree里创建了多达几十个临时文件,stash的时候可能会报Too many files之类的错误。遇到这种情况,我的建议是先手动进到worktree里把明显的构建产物目录(如dist/build/)加入.gitignore,再执行stop。如果你清理时不希望保留Agent留下的任何痕迹,直接用wt stop <task> --discard然后重建,往往比手动清理更快。

6.2 依赖安装与构建缓存冲突

并行的worktree共用同一份Git对象库,但彼此之间不共享node_modules__pycache__等依赖目录。刚开始用Worktrunk时,我给三个任务分别装了三套node_modules,磁盘瞬间多出好几个G。这还不算最痛苦的,最痛苦的是前端的构建缓存(如webpackcache目录、.vite目录)在多个worktree间没有统一管理,每次并行构建都会重复生成缓存。

后来我摸索出一套方案:在项目里配置pnpmshared-workspace-lockfile或者把依赖安装目录通过符号链接指向同一个共享目录。但这样做有一个风险——如果两个Agent同时改package-lock.json,锁文件冲突会蔓延到多个worktree。最稳妥的折中方案是:大多数时候每个worktree独立安装依赖,仅在需要频繁验证构建结果时才用共享缓存,并且把共享缓存目录排除在git track之外。

针对Python项目,我习惯在worktree里启用独立的虚拟环境,避免site-packages被其他worktree污染。Worktrunk不干预虚拟环境的创建,这部分要自己做好。如果某个Agent必须使用同一个虚拟环境,至少要保证它不会修改依赖清单。

6.3 环境变量与进程隔离问题

并行Agent工作流里,环境变量的隔离一度让我头疼。好几次出现这样的情况:在终端A里设置了一个环境变量给Agent A,然后终端B里的Agent B也继承了同一份Shell导出的变量,导致B读到A的配置,行为变得诡异。

Worktrunk的设计原则是:不修改用户Shell的环境变量,只记录每个worktree的启动命令和PID。我在实际操作中养成的好习惯是:在wt run之前,用env -i或者env KEY=VALUE明确定义Agent需要的环境变量,而不是依赖全局Shell。例如:

wt run add-csv-export -- env API_KEY=$(cat ~/.keys/api) codex

这样可以确保Agent只看到那一个worktree应有的配置。Windows上有类似的set VAR=value && wt run ...写法,但建议统一用POSIX的env命令,跨平台体验更好。

另外一个进程隔离的坑是:Agent有时会创建后台进程(比如启动开发服务器、Watch模式编译),这些进程在Agent退出后仍然存活,继续占用worktree里的端口和文件句柄。这就是为什么wt stop会做进程占用检测的原因。但检测并非100%可靠,尤其是跨平台时Windows下PID存在复用。我的建议是:任务完成后,先看wt list里的"Active Process"字段,确认没有残留进程再执行清理。遇到顽固的进程,直接wt stop --force,然后手动ps -ef | grep <task>再kill残留PID。

6.4 与Agent工具的适配问题

现在主流的AI Agent工具对"多工作区"的支持参差不齐。用Claude Code时,它会当作项目根目录的~/project识别,如果你用wt run指定了worktree路径,最好在worktree里放一个CLAUDE.md之类的说明文件,告诉Agent"你的代码改动应该在当前目录内完成,不应该跳出此目录"。这个做法能显著减少Agent扫描到外部目录的情况。

Codex CLI也有类似行为,它会自行检测项目根目录。我试过在worktree里执行Codex后,它居然把上一层目录当成了项目根,导致Agent乱翻文件。后来我强制设置了工作目录并显式指定--cd参数,问题才解决。

我的结论是:Worktrunk负责工作区隔离,Agent的"项目根目录识别"需要配合工具的配置项做显式锁定。每个tool的工作方式不同,Claude Code看CLAUDE.md,Codex看项目级配置,Trae CLI也类似。你在使用前一定要先检查Agent是否会主动向上扫描目录,否则worktree隔离得再干净也白搭。

6.5 快速排查清单

做一个经验速查表,方便你遇到问题后快速定位。

症状可能原因排查操作
wt create卡住目标分支正在被其他worktree检出git worktree list查看其他占用
wt stop报目录非空Agent残留未跟踪文件或隐藏文件进目录ls -la,手动删除明显产物后再stop
Agent看不到worktree改动Agent运行目录不是worktreepwd确认,检查Agent的执行路径配置
多个worktree的构建互相干扰依赖目录共享冲突检查node_modules是否被符号链接指向同一位置
wt list状态全是旧时间任务运行中的周期刷新未开启检查配置文件里的refreshInterval字段,确认是否设置过小
并行任务越多越慢内存或CPU跑满top/htop观察,降低maxParallelTasks

7. 一场真实的并行压测:三个Agent同时开工

前面讲了不少理论,我再用一次真实压测来复盘。项目是一个Rust CLI工具加一个React前端面板,我的目标是验证"三Agent同时干活"是否比"逐个Agent干活"更快,以及Worktrunk是否能在中间扮演称职的管理者。

机器配置:MacBook Pro M3 Pro,18G内存,10核CPU。三个任务分别是:feat-add-command(Rust核心命令)、fix-settings-panel(前端bug)、chore-update-deps(依赖升级)。

实际操作:

wt init wt create feat-add-command --from main wt create fix-settings-panel --from main wt create chore-update-deps --from main # 终端1 wt run feat-add-command -- claude # 终端2 wt run fix-settings-panel -- codex # 终端3 wt run chore-update-deps -- bash

运行30分钟后的wt status输出:

Task Branch Changes Last Active feat-add-command wt/feat-add-cmd 5 files just now fix-settings-panel wt/fix-settings 3 files 4 min ago chore-update-deps wt/chore-update 0 files 25 min ago

观察到的现象:

  • Rust编译和前端开发服务器并行跑,CPU接近满载但内存没有爆掉。偶尔会卡顿,但整体可接受。
  • 两个Agent分别在自己的worktree里编辑文件,互相没有任何察觉。
  • chore-update-deps这个任务因为要跑cargo update,在它自己的worktree里改了Cargo.lock,没有影响其他Agent的Rust编译。
  • 中间我手动查看了其中一个Agent的代码质量,用wt run feat-add-command -- git diff在不动终端的情况下拿到了差异。

任务收尾时,分别执行wt stop --clean。这里有个插曲:fix-settings-panel的Agent跑了前端测试并生成了覆盖率报告文件,不在git管理内,导致wt stop时检测到untracked files并拒绝清理。我进去删掉了coverage/目录再执行stop,一次通过。

这次压测给我的最大感受是:并行不是线性加速,但能给开发者赢回大量"等待Agent时没法做别的事"的碎片时间。同时,Worktrunk在管理维度上的价值甚至超过了并行本身带来的速度提升。没有它的时候,我需要花时间记录每个Agent在哪个分支、改了什么;有它之后,wt status一个命令把所有信息汇总,我只需要关注任务本身。

8. 一些心里话:并行开发真正该关注的事

我在实际项目中从"一个人对着一个终端做AI辅助开发"过渡到"向多个worktree投放多个Agent,自己只当指挥官",前后花了两三周时间。工具层面,Worktrunk已经解决了大部分"管理"的痛点,但工具始终只是流程的一部分。如果只把worktree当成"多开几个目录",而不去从任务设计层面做好隔离,并行开发的复杂度依然会反噬。

我的经验可以浓缩成三条建议。

第一,任务的粒度要足够小。worktree隔离的是文件和工作区,但业务上依然有依赖。如果两个任务都要改同一个模块的同一个函数,它们并行得再欢,最后合并时也要你花大量时间解决冲突。任务设计时最好按"文件边界"或"模块边界"切分,避免两个Agent同时操作同一片区域。

第二,给Agent写入明确的工作范围约束。无论Claude Code、Codex CLI还是其他工具,都要在它的系统提示词或项目说明文件里写明:"你所做的修改只允许出现在当前目录,不要检查或修改其他目录。"这句话能挡住70%以上的误操作。

第三,每天结束时做一次worktree收纳。无论任务是否全部完成,我都会在当天结束前跑wt list,把已经没有存续价值的工作区用wt stop关闭。残留的worktree越多,下一次wt create时就越难快速定位目标,到最后反而成了清扫负担。

说到我自己现在的习惯,我已经把Worktrunk集成到了日常的"早会-规划-派活"流程里。每天早上先wt list看昨天残留的任务,然后根据优先级决定是继续还是关闭。新的需求来了,一条wt create加几条验收条件,就把任务描述、分支、工作区全部准备好,半小时内就能给两个Agent各派一个任务并行开工。如果你是重度AI Agent使用者,且正在被"分支之间来回切"和"多个Agent互踩文件"折磨,我建议你在下一个项目里就试试这个组合:Git Worktree负责底层隔离,Worktrunk负责把隔离变成一套可管理、可观察、可清理的并行工作流。工具本身很简单,但它解决的是一个真实且刚需的流程问题,这也是我愿意花时间做出来并分享出来的原因。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询