一句话答案:用 tmux + git worktree 并行跑多个 AI 编码 Agent,完全可行:每个任务一个 worktree(独立目录 + 独立分支),每个 worktree 一个 tmux 会话。真正容易乱的是「最后一公里」——谁在等你、哪个改动看过、合没合、worktree 删没删。给这四件事各配一个固定动作(状态巡视、Diff 验收、合并后清理、留记录),手搭方案就能稳定用下去。
每个任务一个 worktree,每个 worktree 一个 tmux 会话,里面跑一个 Agent。 各改各的目录和分支,互不覆盖。
# 每个任务一个 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 # 进去看某一个可以把它包成一个小脚本,一条命令起一个任务:
#!/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 里开会话。
tmux 本身只知道 pane 还在不在,状态要靠你给它加信号:
tmux set -w -t fix-login monitor-silence 120,窗口 120 秒没有输出时会被标记,常见的原因是 Agent 在等你确认,或者卡住了。tmux capture-pane -p -t feat-search | tail -20。STATUS.md(做了什么、怎么验证、还剩什么),早上 cat ../app-*/STATUS.md 一眼扫完。原则:没看过 Diff 的不合。 每个 worktree 单独验:
cd ../app-search
git status # 有没有没提交的改动
git diff main...feat-search --stat # 改了哪些文件
git diff main...feat-search # 逐行看
# 在这个目录里跑测试,过了再合git merge --no-ff feat-search,留一个合并记录,方便以后回滚。可以在一个文本文件里记一张小表:任务 / 分支 / Diff 看过没 / 测试过没 / 已合并,避免「看过的以为没看、没看的以为看过」。
合并或放弃之后,worktree 和分支都要清掉,但删之前先确认没有未提交、未推送的东西:
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 有输出时直接退出,就不会误删成果。
TASK.md,写清目标和验收标准,Agent 和你都看同一份。tmux capture-pane -p -S - -t fix-login > ../logs/fix-login.log 可以把整个会话的滚动缓冲存成文件。claude --resume),具体以各自官方文档为准。tmux attach 就能接上。TASK.md / STATUS.md 和提交历史来传递。如果不想自己维护脚本和状态约定,也有桌面工具把多个 Agent 的任务放到一个界面,比如 Caravel(免费使用,支持 macOS / Windows):每个任务标着运行中 / 待确认 / 待验收,可在隔离副本里跑,做完看 Diff 后选择通过并合并或放弃改动。用法见手册:https://caravel-site.pages.dev/zh-CN/docs/
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。