最推荐的方式是:tmux 分屏 + 每个任务一个独立 git worktree + 每个窗格一个 Codex 会话 。Codex CLI 本身是在终端中运行的本地 coding agent,可以读、改、运行所选目录里的代码;官方也支持用 --cd <path> 指定工作目录。
1. 最简单:一个项目目录里开多个 Codex 窗格
bash
tmux new -s codex
常用快捷键:
text
Ctrl-b % 左右分屏
Ctrl-b " 上下分屏
Ctrl-b o 切换窗格
Ctrl-b z 当前窗格最大化/还原
Ctrl-b d 退出但保持后台运行
tmux attach -t codex 重新进入
每个窗格里分别运行:
bash
cd ~/your_project
codex
这种方式适合:一个窗口让 Codex 看 bug,一个窗口让 Codex 写实验脚本,一个窗口让 Codex 查代码结构。
但注意:多个 Codex 同时改同一个目录,容易互相覆盖或产生冲突。
2. 更推荐:每个任务一个 git worktree
例如并行做三个任务:baseline、ablation、plot。
bash
cd ~/your_repo
mkdir -p ../codex-worktrees
git worktree add ../codex-baseline -b codex/baseline
git worktree add ../codex-ablation -b codex/ablation
git worktree add ../codex-plot -b codex/plot
然后在 tmux 三个窗格中分别运行:
bash
codex --cd ../codex-baseline
bash
codex --cd ../codex-ablation
bash
codex --cd ../codex-plot
这样每个 Codex 都在独立分支和独立目录里工作,互不污染。最后再分别检查 diff:
bash
cd ../codex-baseline
git diff
git status
合并时:
bash
cd ~/your_repo
git merge codex/baseline
git merge codex/ablation
git merge codex/plot
3. 非交互式并行:适合批量小任务
Codex 支持 codex exec 做非交互式任务,官方说明它会把最终计划和结果输出到 stdout,适合接进脚本。
例如:
bash
mkdir -p logs
codex exec --cd ../codex-baseline "检查并修复 baseline 复现实验中的路径问题" > logs/baseline.log 2>&1 &
codex exec --cd ../codex-ablation "实现 ablation: remove uncertainty loss" > logs/ablation.log 2>&1 &
codex exec --cd ../codex-plot "根据 results.csv 生成论文图表脚本" > logs/plot.log 2>&1 &
wait
跑完看日志:
bash
tail -n 80 logs/baseline.log
tail -n 80 logs/ablation.log
tail -n 80 logs/plot.log
4. Codex 内置并行:subagents
现在 Codex 也支持 subagent workflow:可以显式要求它"为每个方向 spawn 一个 agent 并行处理,等全部完成后汇总"。官方说明 subagents 会并行启动专门 agent,然后把结果汇总;默认启用,但只有你明确要求时才会启动,而且会消耗更多 token。
可以这样在一个 Codex 会话里说:
text
请并行启动 4 个 subagents:
1. 一个检查数据加载和预处理问题;
2. 一个检查模型实现是否和论文一致;
3. 一个检查训练脚本和参数配置;
4. 一个检查评估指标和可视化脚本。
每个 agent 只读代码,先不要修改。等全部完成后,汇总问题、证据文件路径和建议修改顺序。
如果要让它们改代码,最好也限制范围:
text
请 spawn 3 个 agents 并行修改,但每个 agent 只能修改自己负责的目录:
- agent A: src/data/
- agent B: src/models/
- agent C: scripts/plot/
完成后汇总所有 diff 和潜在冲突。
官方文档还提到可以用 /agent 在 CLI 里查看和切换 active agent threads;默认 agents.max_threads 是 6,可以在配置中控制并发线程数。
5. 多服务器分屏并行
在本地或服务器 A 上开 tmux:
bash
tmux new -s multi-codex
不同窗格分别 ssh 到不同服务器:
bash
ssh serverA
ssh serverB
ssh serverC
每台服务器进入对应项目目录后:
bash
codex
更稳的方式是每台服务器承担不同职责:
text
serverA: baseline / main experiments
serverB: ablation experiments
serverC: visualization / analysis / paper table
不要让多个服务器同时往同一个共享目录写结果。可以约定:
text
results/serverA/
results/serverB/
results/serverC/
最后统一 rsync 或 git 合并。
推荐工作流
对于科研项目,直接这样用:
bash
cd ~/your_repo
git worktree add ../wt-baseline -b codex/baseline
git worktree add ../wt-method -b codex/method
git worktree add ../wt-analysis -b codex/analysis
tmux new -s codex
三个窗格分别:
bash
codex --cd ../wt-baseline
codex --cd ../wt-method
codex --cd ../wt-analysis
然后给每个 Codex 明确边界:
text
你只负责 baseline 复现,不要修改 method 相关代码。先阅读 README、configs 和 scripts/train*.py,给出计划后再改。
text
你只负责新方法实现,不要动 baseline 和 plotting。修改前先列出将要改的文件。
text
你只负责结果分析和画图,不要改训练代码。所有输出放到 analysis_outputs/。
核心原则:分屏只是操作方式,真正避免混乱靠 worktree、任务边界、独立输出目录和最后人工 review diff。