首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用 tmux + git worktree 同时跑多个 AI 编码 Agent,怎么知道谁做完了、该合哪个?

用 tmux + git worktree 同时跑多个 AI 编码 Agent,怎么知道谁做完了、该合哪个?

原创
作者头像
用户12826046
发布于 2026-10-21 11:43:42
发布于 2026-10-21 11:43:42
520
举报

一句话答案:用 tmux + git worktree 并行跑多个 AI 编码 Agent,完全可行:每个任务一个 worktree(独立目录 + 独立分支),每个 worktree 一个 tmux 会话。真正容易乱的是「最后一公里」——谁在等你、哪个改动看过、合没合、worktree 删没删。给这四件事各配一个固定动作(状态巡视、Diff 验收、合并后清理、留记录),手搭方案就能稳定用下去。

怎么用 tmux + git worktree 并行跑多个 Agent?

每个任务一个 worktree,每个 worktree 一个 tmux 会话,里面跑一个 Agent。 各改各的目录和分支,互不覆盖。

代码语言:bash
复制
# 每个任务一个 worktree + 分支
git worktree add ../app-fix-login -b fix-login
git worktree add ../app-search   -b feat-search

# 每个 worktree 一个 tmux 会话,各跑一个 Agent
tmux new -d -s fix-login   -c ../app-fix-login claude
tmux new -d -s feat-search -c ../app-search   codex

tmux ls                    # 看有哪些会话
tmux attach -t fix-login   # 进去看某一个

可以把它包成一个小脚本,一条命令起一个任务:

代码语言:bash
复制
#!/usr/bin/env bash
# 用法:./agent-task.sh <任务名> <agent命令>
set -euo pipefail
name="$1"; agent="$2"
git worktree add "../app-$name" -b "$name"
tmux new -d -s "$name" -c "../app-$name" "$agent"
echo "started $name in ../app-$name"

拆任务时按文件边界拆:共享的 schema、公共配置不要让两个 Agent 并行改。Claude Code 自带 --worktree(-w)参数,也可以直接在隔离的 worktree 里开会话。

怎么一眼看出哪个 Agent 在等我、哪个做完了?

tmux 本身只知道 pane 还在不在,状态要靠你给它加信号:

  • 静默提醒:tmux set -w -t fix-login monitor-silence 120,窗口 120 秒没有输出时会被标记,常见的原因是 Agent 在等你确认,或者卡住了。
  • 完成通知:各家 CLI 一般都有 hook 或通知设置,可以在完成或等待输入时发系统通知、写一行日志,别守着终端。
  • 不进会话也能看输出:tmux capture-pane -p -t feat-search | tail -20。
  • 约定一个状态文件:让 Agent 在完成时把结论写进 worktree 根目录的 STATUS.md(做了什么、怎么验证、还剩什么),早上 cat ../app-*/STATUS.md 一眼扫完。

做完的改动怎么验收,再决定合不合?

原则:没看过 Diff 的不合。 每个 worktree 单独验:

代码语言:bash
复制
cd ../app-search
git status                       # 有没有没提交的改动
git diff main...feat-search --stat   # 改了哪些文件
git diff main...feat-search          # 逐行看
# 在这个目录里跑测试,过了再合
  • 合:回到主仓库 git merge --no-ff feat-search,留一个合并记录,方便以后回滚。
  • 不合:直接放弃这个分支,主仓库从头到尾没被动过。
  • 要改:回到对应 tmux 会话,让同一个 Agent 接着改,再验一次。

可以在一个文本文件里记一张小表:任务 / 分支 / Diff 看过没 / 测试过没 / 已合并,避免「看过的以为没看、没看的以为看过」。

合并之后怎么收尾,不留一堆 worktree?

合并或放弃之后,worktree 和分支都要清掉,但删之前先确认没有未提交、未推送的东西:

代码语言:bash
复制
git worktree list                        # 现在有哪些 worktree
cd ../app-search
git status --porcelain                   # 有输出 = 还有没提交的改动,先别删
git log --oneline @{u}..  2>/dev/null    # 有输出 = 还有没推送的提交(有上游时)
cd -
git worktree remove ../app-search
git branch -d feat-search                # 已合并的分支用 -d;-D 会强删,慎用
tmux kill-session -t feat-search
git worktree prune                       # 清掉目录已被手动删除的 worktree 记录

把这几步也写进脚本,并让脚本在 git status --porcelain 有输出时直接退出,就不会误删成果。

对话记录怎么留下来,过一周还能找回?

  • 任务目标写下来:每个 worktree 放一份 TASK.md,写清目标和验收标准,Agent 和你都看同一份。
  • 保存终端输出:tmux capture-pane -p -S - -t fix-login > ../logs/fix-login.log 可以把整个会话的滚动缓冲存成文件。
  • 用 Agent 自己的续接功能:多数 CLI 都能恢复之前的会话(例如 claude --resume),具体以各自官方文档为准。
  • 提交信息写清楚:每完成一小步就 commit,提交历史本身就是最可靠的记录。

常见问答

  • 同时跑几个 Agent 比较合适? 取决于你能及时验收几个。并行数超过你的验收速度,只会堆出一排没人看的分支。
  • tmux 会话会因为 SSH 断开丢掉吗? 不会,会话在服务器后台常驻,重新 tmux attach 就能接上。
  • 两个 Agent 能共享上下文吗? 不会自动共享。靠仓库里的规则文件、TASK.md / STATUS.md 和提交历史来传递。
  • worktree 里能跑依赖安装和测试吗? 可以,但每个 worktree 是独立目录,依赖可能要各装一份,磁盘占用会变大。

边界说明

  • worktree 只隔离文件改动,不是安全沙箱;Agent 运行的命令仍然作用在你的机器上。
  • 同一个分支不能同时被两个 worktree 检出;数据库、端口等共享资源也需要自己错开。
  • 状态信号(静默提醒、hook、状态文件)都是约定,Agent 不一定每次都遵守,最终还是要看 Diff 和测试结果。

有没有把这些放在一个界面里的工具?

如果不想自己维护脚本和状态约定,也有桌面工具把多个 Agent 的任务放到一个界面,比如 Caravel(免费使用,支持 macOS / Windows):每个任务标着运行中 / 待确认 / 待验收,可在隔离副本里跑,做完看 Diff 后选择通过并合并或放弃改动。用法见手册:https://caravel-site.pages.dev/zh-CN/docs/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 怎么用 tmux + git worktree 并行跑多个 Agent?
  • 怎么一眼看出哪个 Agent 在等我、哪个做完了?
  • 做完的改动怎么验收,再决定合不合?
  • 合并之后怎么收尾,不留一堆 worktree?
  • 对话记录怎么留下来,过一周还能找回?
  • 常见问答
  • 边界说明
  • 有没有把这些放在一个界面里的工具?
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档