【tmux x Claude Code 教學】#03 多個 Claude Code 同時跑:tmux 實戰工作流

測驗:tmux x Claude Code 多個 Claude Code 同時跑

共 5 題,點選答案後會立即顯示結果

1. 文章提到 tmux + Claude Code 有三種工作模式,其中「監督模式」的核心概念是什麼?

  • A. 用 claude -p 在背景跑任務,定期回來收結果
  • B. 一個面板跑 Claude Code,旁邊的面板即時觀察它在改什麼
  • C. 不同視窗各跑一個 Claude Code,分別處理不同任務
  • D. 讓多個 Claude Code 實例透過 Agent Teams 自動協作

2. 在多任務模式中,為什麼要避免讓兩個 Claude Code 同時編輯同一個檔案?

  • A. 會導致 tmux session 崩潰
  • B. Claude Code 會自動偵測衝突並停止執行
  • C. 後存的會覆蓋先存的,之前的修改會消失
  • D. 兩個 Claude Code 會自動合併變更但可能產生語法錯誤

3. SSH 連線中斷時,為什麼 tmux 裡的 Claude Code 不會受影響?

  • A. Claude Code 會自動儲存進度到雲端
  • B. SSH 斷線時 tmux 會自動把任務轉到背景程序
  • C. tmux 內建了斷線重連機制,會自動重建 SSH 連線
  • D. tmux session 是跑在伺服器上的,跟 SSH 連線無關

4. 以下指令的作用是什麼?

claude -p “幫 auth module 加上 JSDoc 註解” –allowedTools “Read,Edit”
  • A. 啟動互動式 Claude Code 並限制只能使用 Read 和 Edit 工具
  • B. 以非互動模式執行 Claude Code,授權它使用 Read 和 Edit 工具來完成任務
  • C. 在背景啟動 Claude Code 並將結果輸出到檔案
  • D. 接續上次的 Claude Code session 繼續執行任務

5. 如果多個 Claude Code 的任務之間有檔案重疊的風險,文章建議使用什麼方案來做完全隔離?

  • A. 使用 Git Worktree 讓每個 Claude 在完全獨立的目錄裡工作
  • B. 把專案複製成多份放在不同資料夾
  • C. 使用 tmux 的 pane 鎖定功能防止同時寫入
  • D. 在每個 Claude Code 的 prompt 中加上檔案限制清單

前兩篇學會了 tmux 的基本操作和面板切分,現在進入真正的重頭戲:怎麼用 tmux 同時跑多個 Claude Code,讓你的開發效率直接翻倍。

一句話說明

tmux 最強的用法就是「讓好幾個 Claude Code 各做各的事,你在旁邊看著,需要時切過去檢查」。

學習目標

讀完這篇,你會知道:

  • 怎麼設計適合 AI 輔助開發的 tmux 佈局
  • 怎麼同時跑多個 Claude Code 實例處理不同任務
  • 「一邊讓 Claude 跑、一邊自己做事」的工作模式
  • SSH 遠端開發時怎麼搭配 tmux 不怕斷線
  • 什麼時候該「盯著看」、什麼時候該「放著跑」

前置知識

  • 會用 tmux 的基本操作(session、window、pane 的建立與切換)
  • 有使用 Claude Code 的經驗

三種工作流模式

先講結論。tmux + Claude Code 有三種主要的工作模式,你可以根據任務性質選擇:

模式 適合場景 你在幹嘛
監督模式 修改核心邏輯、不太確定 Claude 會改什麼 盯著看,隨時介入
多任務模式 同時推進多個獨立功能 在不同視窗間切換檢查
放養模式 單純的重複性工作、文件生成 丟出去跑,回來收結果

接下來一個一個看。


模式一:監督模式

核心概念:一個面板跑 Claude Code,旁邊的面板即時觀察它在改什麼。

這是最安全的模式。當你不太確定 Claude 會怎麼改你的程式碼,就用這招。

佈局設定

左邊大面板跑 Claude Code,右邊小面板用來監控:

# 建立 session
tmux new-session -s dev

# 左邊跑 Claude Code(目前所在的面板)
# 先水平切一個右邊面板
# Ctrl-b %

# 右邊面板用來監控檔案變化
Code language: PHP (php)

切完之後,你的畫面大概長這樣:

+----------------------------+------------------+
|                            |                  |
|   Claude Code              |   監控面板        |
|   (主要工作區)             |   watch/git diff |
|                            |                  |
+----------------------------+------------------+

右邊面板可以放什麼

根據你想觀察的東西,右邊面板有幾種常見用法:

watch 即時監控檔案變化:

# 每 2 秒刷新一次,顯示 src 目錄下最近修改的檔案
watch -n 2 'find src -name "*.ts" -newer /tmp/marker -type f 2>/dev/null | head -20'
Code language: PHP (php)

這在幹嘛:watch -n 2 表示每 2 秒執行一次後面的指令,讓你即時看到哪些檔案被 Claude 改過。

git diff 看改了什麼:

# 每 2 秒顯示目前的 git 變更
watch -n 2 'git diff --stat'
Code language: PHP (php)

這在幹嘛:git diff --stat 會列出哪些檔案被改了、增減了幾行,讓你快速掌握 Claude 的改動範圍。

tail -f 盯 log:

# 如果 Claude 在跑測試,你可以盯測試輸出
tail -f test-output.log
Code language: CSS (css)

監督模式的操作流程

  1. 左邊面板:啟動 Claude Code,給它任務
  2. 右邊面板:用 watchgit diff 監控
  3. 發現不對勁:Ctrl-b 然後方向鍵切到左邊,按 Esc 中斷 Claude
  4. 沒問題就讓它跑完

**Vibe Coder 檢查點**:監督模式的關鍵是「能隨時看到 Claude 在改什麼」。如果你看到它改了不該改的檔案,馬上切過去中斷。


模式二:多任務模式

核心概念:不同視窗各跑一個 Claude Code,分別處理前端、後端、測試等任務。

當你有多個獨立的任務要同時推進,這是最實用的模式。

佈局設定

用不同的 window(視窗)來隔離每個任務:

# 建立 session,第一個視窗自動命名為 frontend
tmux new-session -s project -n frontend

# 新增後端視窗
# Ctrl-b c    (建立新視窗)
# Ctrl-b ,    (重新命名為 backend)

# 新增測試視窗
# Ctrl-b c
# Ctrl-b ,    (重新命名為 tests)
Code language: PHP (php)

或者用一行指令搞定:

tmux new-session -s project -n frontend \; \
  new-window -n backend \; \
  new-window -n tests \; \
  select-window -t frontend
Code language: JavaScript (javascript)

這在幹嘛:一次建好三個視窗,分別叫 frontendbackendtests,最後切回 frontend\; 是 tmux 的指令分隔符號。

你的視窗列會長這樣:

[project] 0:frontend* 1:backend 2:tests
Code language: CSS (css)

每個視窗跑不同的 Claude Code

在每個視窗裡啟動各自的 Claude Code,給不同的任務:

# 視窗 frontend:
claude
> 幫我把登入頁面改成用 shadcn/ui 的元件

# 視窗 backend(Ctrl-b 1 切過去):
claude
> 幫我加一個 /api/users 的 CRUD endpoint

# 視窗 tests(Ctrl-b 2 切過去):
claude
> 幫現有的 auth module 補上單元測試
Code language: PHP (php)

切換與檢查

Ctrl-b 0    → 切到 frontend 看進度
Ctrl-b 1    → 切到 backend 看進度
Ctrl-b 2    → 切到 tests 看進度
Ctrl-b w    → 列出所有視窗,用方向鍵選

多任務模式的關鍵:避免衝突

多個 Claude Code 同時跑,最怕的就是改到同一個檔案。遵守這個原則:

每個 Claude 負責不同的檔案範圍

好的分工:

視窗 Claude 的任務 碰到的檔案
frontend 改登入頁面 src/pages/Login.tsx
backend 加 API src/api/users.ts
tests 補測試 tests/auth.test.ts

壞的分工(會衝突):

視窗 Claude 的任務 碰到的檔案
task-1 重構 utils src/utils.ts
task-2 修 utils 的 bug src/utils.ts

如果兩個 Claude 同時改同一個檔案,後存的會覆蓋先存的,之前的修改就白做了。

進階:用 Git Worktree 做完全隔離

如果你的任務之間有檔案重疊的風險,可以用 Git Worktree 讓每個 Claude 在完全獨立的目錄裡工作:

# 建立 worktree(各自有獨立的檔案副本,但共享 git 歷史)
git worktree add ../project-feature-a -b feature-a
git worktree add ../project-feature-b -b feature-b
Code language: PHP (php)

這在幹嘛:git worktree add 會在另一個目錄建立同一個 repo 的獨立工作副本,各自在不同的 branch 上。修改互不影響。

然後在 tmux 裡:

# 視窗 1:feature-a
cd ../project-feature-a && claude

# 視窗 2:feature-b
cd ../project-feature-b && claude
Code language: PHP (php)

完成後合併:

# 回到主目錄
cd ../project
git merge feature-a
git merge feature-b

# 清理 worktree
git worktree remove ../project-feature-a
git worktree remove ../project-feature-b
Code language: PHP (php)

模式三:放養模式

核心概念:用 claude -p 在背景跑,定期回來收結果。

適合那些「你很確定 Claude 不會搞砸」的任務,例如:生成文件、格式化程式碼、批次重新命名。

什麼是 claude -p

-p(或 --print)是 Claude Code 的非互動模式。它收到指令後直接執行,做完就結束,不會等你輸入。

# 最基本的用法:問一個問題,印出答案
claude -p "解釋 src/auth.ts 的邏輯"

# 讓它做事情:加上 --allowedTools 授權工具
claude -p "幫 auth module 加上 JSDoc 註解" --allowedTools "Read,Edit"

# 結果存檔
claude -p "幫我寫一份 API 文件" > api-docs.md
Code language: PHP (php)

這在幹嘛:
-p 表示「非互動模式」,Claude 執行完就退出
--allowedTools 指定 Claude 可以用哪些工具(不指定的話它只能回答,不能改檔案)
> 把輸出導到檔案

在 tmux 裡放養

# 開一個專門放養的 session
tmux new-session -s background -n task1

# 丟任務下去
claude -p "掃描整個 src 目錄,找出所有沒用到的 import 並移除" \
  --allowedTools "Read,Edit,Bash"

# 開新視窗再丟一個
# Ctrl-b c
claude -p "幫所有 .ts 檔案加上 JSDoc 註解" \
  --allowedTools "Read,Edit"
Code language: PHP (php)

然後你可以 detachCtrl-b d),去做其他事。過一陣子回來:

tmux attach -t background

切到各個視窗看結果就好。

放養模式的進階用法

接續上次的對話:

# 第一次執行
claude -p "分析這個專案的架構" --output-format json > result.json

# 擷取 session ID
session_id=$(cat result.json | jq -r '.session_id')

# 用同一個 session 繼續問
claude -p "那你覺得哪裡最需要重構?" --resume "$session_id"
Code language: PHP (php)

這在幹嘛:--output-format json 會輸出包含 session_id 的 JSON。用 --resume 帶上這個 ID,就能接續之前的上下文繼續對話。

串進 shell 腳本:

#!/bin/bash
# review.sh — 自動 review 所有改過的檔案

for file in $(git diff --name-only); do
  echo "=== Reviewing: $file ==="
  claude -p "Review 這個檔案的變更,指出潛在問題:$(git diff $file)" \
    --output-format text
  echo ""
done
Code language: PHP (php)

實戰範例:開發一個功能的完整流程

假設你要開發一個「使用者通知」功能,來看完整的 tmux + Claude Code 工作流。

Step 1:建立 session 和分配任務

# 建立工作 session,三個視窗
tmux new-session -s notification -n api \; \
  new-window -n ui \; \
  new-window -n test \; \
  select-window -t api
Code language: PHP (php)

Step 2:各視窗啟動 Claude Code

# 視窗 api(Ctrl-b 0):
claude
> 在 src/api/ 下建立通知系統的 CRUD API,包含
> - GET /notifications
> - POST /notifications
> - PATCH /notifications/:id/read
> 使用現有的 Express + Prisma 架構

# 視窗 ui(Ctrl-b 1):
claude
> 在 src/components/ 下建立通知元件:
> - NotificationBell(右上角的鈴鐺圖示 + 未讀數量)
> - NotificationList(通知列表)
> 用 React + Tailwind,參考現有元件的風格

# 視窗 test(Ctrl-b 2):
# 先等 API 寫好再跑,所以先做別的
claude
> 幫我整理 src/utils/ 裡面的 TODO 註解,列出所有待辦事項
Code language: PHP (php)

Step 3:切換檢查進度

Ctrl-b 0    → API 寫到哪了?看看 Claude 的輸出
Ctrl-b 1    → UI 元件做好了嗎?
Ctrl-b 2    → TODO 整理完了?好,開始寫測試

# 回到 test 視窗,給新任務
> 好的,現在 src/api/notifications.ts 已經寫好了,
> 幫它寫整合測試
Code language: PHP (php)

Step 4:收工

# 所有 Claude 都跑完後,在任一視窗檢查成果
git diff --stat
git add -A
git commit -m "feat: add notification system"
Code language: PHP (php)

遠端開發:SSH + tmux 不怕斷線

這是 tmux 最經典的用途之一。連到遠端伺服器跑 Claude Code,就算 SSH 斷線也不會中斷。

基本流程

# 1. SSH 連到伺服器
ssh [email protected]

# 2. 建立 tmux session
tmux new-session -s remote-dev

# 3. 在裡面跑 Claude Code
claude

# 4. 給它一個長時間的任務
> 重構整個 src/legacy/ 目錄,把 CommonJS 改成 ES modules

# 5. Detach(斷開但不結束)
# Ctrl-b d

# 6. 斷開 SSH(甚至關掉筆電去睡覺)
exit
Code language: PHP (php)

第二天:

# 1. 重新 SSH
ssh [email protected]

# 2. 重新接上 tmux session
tmux attach -t remote-dev

# 3. Claude Code 還在跑(或已經跑完),檢查結果就好
Code language: PHP (php)

為什麼這行得通

你的筆電 ──SSH──→ 遠端伺服器
                    └── tmux session(一直活著)
                         └── Claude Code(一直在跑)

SSH 只是你和伺服器之間的「管道」。tmux session 是跑在伺服器上的,跟你的 SSH 連線無關。所以:

  • SSH 斷線 → tmux 不受影響
  • 關掉筆電 → tmux 不受影響
  • 換一台電腦 SSH 回去 → tmux attach 就接回來了

遠端開發的實用技巧

自動 attach:

在你的 .bashrc.zshrc 加上:

# 如果是 SSH 登入,自動 attach 到 dev session(沒有就建一個)
if [ -n "$SSH_CONNECTION" ] && [ -z "$TMUX" ]; then
  tmux attach -t dev 2>/dev/null || tmux new-session -s dev
fi
Code language: PHP (php)

這在幹嘛:判斷是否透過 SSH 登入($SSH_CONNECTION),而且還沒在 tmux 裡面($TMUX 為空),就自動 attach 或建新 session。


命名慣例:管理多個任務不迷路

當你同時開很多 session 和 window,好的命名是關鍵。

Session 命名

# 用專案名稱
tmux new-session -s myapp

# 用任務描述
tmux new-session -s fix-auth-bug

# 用日期 + 任務
tmux new-session -s 0207-refactor
Code language: PHP (php)

Window 命名

# 用功能區域
Ctrl-b ,   → api
Ctrl-b ,   → ui
Ctrl-b ,   → test
Ctrl-b ,   → docs
Code language: PHP (php)

確認目前的全貌

# 列出所有 session 和 window
tmux ls
Code language: PHP (php)

輸出範例:

fix-auth-bug: 2 windows (created Fri Feb  7 10:30:00 2026)
myapp: 3 windows (created Fri Feb  7 09:00:00 2026)
notification: 3 windows (created Fri Feb  7 14:00:00 2026)
Code language: CSS (css)

Claude Code session 也要命名

Claude Code 自己也有 session 的概念。在 Claude Code 裡面用 /rename 命名:

> /rename notification-api

之後可以用 claude --resume notification-api 接回來。這跟 tmux 的 session 是獨立的兩套東西,但搭配使用時建議用一致的命名。


多個 Claude Code 實例的注意事項

Token 用量

每個 Claude Code 實例都是獨立的 context window,各自消耗 token。同時跑三個,token 用量大約是三倍。

實際成本 = 單個 Claude Code 用量 x 同時跑的數量

所以不要無腦開一堆。想清楚哪些任務值得平行跑,哪些等前一個跑完再接著做就好。

如何分配任務避免衝突

按檔案範圍分:

Claude A → 只碰 src/api/ 底下的檔案
Claude B → 只碰 src/components/ 底下的檔案
Claude C → 只碰 tests/ 底下的檔案

按功能層分:

Claude A → 資料庫 migration + model
Claude B → API route + controller
Claude C → 前端頁面 + 元件

按專案分(用 Git Worktree):

Claude A → worktree-feature-x/(完全獨立的副本)
Claude B → worktree-feature-y/(完全獨立的副本)

同時編輯同一檔案會怎樣

最壞的情況:後存的覆蓋先存的,之前的修改消失。

如果真的不小心衝突了:

# 用 git 找回被覆蓋的版本
git diff           # 看目前的變更
git stash          # 暫存目前的
git checkout -- .  # 還原
git stash pop      # 拿回暫存的
# 手動合併
Code language: PHP (php)

進階:Agent Teams(實驗性功能)

Claude Code 有一個實驗性功能叫 Agent Teams,讓多個 Claude Code 實例自動協作。當你在 tmux 裡面跑時,每個 teammate 會自動開一個 pane。

// ~/.claude/settings.json
{
  "env": {
    "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
  }
}
Code language: JSON / JSON with Comments (json)

啟用後,你可以跟 Claude 說:

建立一個 agent team 來重構通知模組。
一個負責 API、一個負責前端、一個做測試。

Claude 會自動建立團隊、分配任務、在 tmux pane 裡顯示每個 teammate 的進度。

注意:這是實驗功能,目前有些限制(例如無法 resume、有時 teammate 會意外停止)。如果你想要穩定的多 Claude 工作流,建議先用前面介紹的手動模式。


必看懂 vs 知道就好

必看懂(每天都會用到):
- 監督模式的佈局(一邊 Claude Code,一邊 watch/git diff)
- 多任務模式的視窗管理(Ctrl-b 0/1/2 快速切換)
- SSH + tmux 的 detach/attach 流程
- 任務分工原則(不同 Claude 碰不同的檔案)

知道就好(需要時再回來查):
- claude -p 的放養模式細節
- Git Worktree 的完全隔離方案
- Agent Teams 實驗功能
- Session 接續(--resume)的用法

Vibe Coder 檢查點

看到 tmux + 多 Claude Code 的操作時,確認以下幾點:

  1. 有沒有命名 — session 和 window 有意義的名字,不然多開幾個就搞混了
  2. 有沒有分工 — 每個 Claude 負責不同檔案,避免覆蓋衝突
  3. 有沒有監控 — 至少用 git diff --stat 知道改了什麼
  4. 有沒有備份 — 重要操作前先 git commit,隨時能回退

下一篇預告

第 4 篇(最終回)會講 tmux 的客製化設定,包括 .tmux.conf 怎麼寫、怎麼自訂快捷鍵、搭配 Claude Code 的最佳設定。


本篇指令速查

指令 功能
tmux new-session -s name -n window 建立有名字的 session 和視窗
Ctrl-b % 水平切割面板
Ctrl-b c 新增視窗
Ctrl-b , 重新命名視窗
Ctrl-b 0/1/2 切到第 0/1/2 個視窗
Ctrl-b w 列出所有視窗
Ctrl-b d Detach(離開但不關閉)
tmux attach -t name 重新接回 session
tmux ls 列出所有 session
claude -p "指令" Claude Code 非互動模式
claude -p "指令" --allowedTools "Read,Edit" 非互動模式 + 授權工具
claude --resume session-id 接回指定的 Claude Code session
git worktree add ../dir -b branch 建立 Git Worktree
git worktree remove ../dir 移除 Git Worktree
watch -n 2 'command' 每 2 秒執行一次指令

進階測驗:tmux x Claude Code 多個 Claude Code 同時跑

測驗目標:驗證你是否能在實際情境中應用所學。
共 5 題,包含情境題與錯誤診斷題。

1. 你正在開發一個電商網站,需要同時完成三個任務:重構購物車 API(src/api/cart.ts)、更新商品列表頁面(src/pages/Products.tsx)、以及替結帳模組補上單元測試(tests/checkout.test.ts)。你打算用 tmux 搭配三個 Claude Code 同時跑。以下哪種做法最合適? 情境題

  • A. 在同一個 tmux window 裡切三個 pane,每個 pane 跑一個 Claude Code
  • B. 建立一個 tmux session 含三個有命名的 window(api、ui、test),每個 window 跑一個 Claude Code 負責對應的檔案
  • C. 用三個獨立的 Git Worktree,每個 Claude Code 在不同的 worktree 工作
  • D. 用 claude -p 放養模式把三個任務都丟到背景跑

2. 你 SSH 到遠端伺服器,用 tmux 跑了一個 Claude Code 任務來重構 legacy 模組,預計需要 30 分鐘以上。你想先去吃飯,回來再看結果。以下哪個操作流程是正確的? 情境題

  • A. 直接關閉終端機視窗,tmux 會自動儲存 Claude Code 的工作進度
  • B. 先用 Ctrl-c 暫停 Claude Code,然後 Ctrl-b d detach,回來後 tmux attach 再手動恢復 Claude
  • C. 用 Ctrl-b d detach tmux session,然後離開 SSH。回來後重新 SSH 連線,執行 tmux attach -t session名稱 接回去看結果
  • D. 用 Ctrl-b & 關閉 tmux window,Claude Code 會自動在伺服器背景繼續跑

3. 你需要讓 Claude Code 自動掃描所有 .ts 檔案並移除沒用到的 import,這類工作你很確定不會搞砸。你想在背景跑完後直接得到結果。以下哪個指令最適合? 情境題

# 選項中的指令,哪個最適合這個場景?
  • A. claude "掃描 src 目錄,移除所有沒用到的 import"
  • B. claude -p "掃描 src 目錄,移除所有沒用到的 import"
  • C. claude -p "掃描 src 目錄,移除所有沒用到的 import" --allowedTools "Read"
  • D. claude -p "掃描 src 目錄,移除所有沒用到的 import" --allowedTools "Read,Edit,Bash"

4. 小華在 tmux 裡同時跑了兩個 Claude Code,分別在不同的 window 中。任務分配如下,但他發現最後 src/utils.ts 裡只有 task-2 的修改,task-1 的重構結果不見了。最可能的原因是什麼? 錯誤診斷

# Window: task-1 claude > 重構 src/utils.ts,把所有 function 改成 arrow function # Window: task-2 claude > 修復 src/utils.ts 裡 formatDate 函式的 bug
  • A. tmux 的 window 切換有 bug,導致 task-1 的 Claude Code 被意外中斷
  • B. 兩個 Claude Code 同時編輯同一個檔案(src/utils.ts),後存的覆蓋了先存的
  • C. Claude Code 的 token 用量超過限制,task-1 提前被強制結束
  • D. task-1 的 Claude Code 偵測到檔案衝突後自動回滾了修改

5. 小明想用一行指令建立一個有三個視窗的 tmux session,但執行後發現只建了一個視窗。以下是他的指令,問題出在哪裡? 錯誤診斷

tmux new-session -s project -n frontend; new-window -n backend; new-window -n tests; select-window -t frontend
  • A. -n 參數不能用在 new-session 指令中
  • B. 應該用 && 而非 ; 來串接多個 tmux 指令
  • C. 串接多個 tmux 子指令應該用 \; 而非 ;,後者會被 shell 解讀為獨立指令
  • D. new-window 需要加上 -t project 才能指定在哪個 session 建立視窗

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *