Claude Code 工作階段如何互傳訊息?
了解 Claude Code 的跨工作階段訊息傳遞,包括 ListAgents 與 SendMessage 的用途、第二個工作階段何時值得使用,以及訊息為何會暫時擱置。
Claude Code 工作階段彼此傳送訊息的意義
兩個 Claude Code 工作階段必須在同一台機器上,且由同一個作業系統使用者執行,才能彼此傳送訊息。訊息是其中一個 Claude 寫給另一個 Claude 的一段純文字。不包含對話記錄或檔案。Claude 會使用 ListAgents 工具尋找另一個工作階段,再以 SendMessage 傳送文字,因此您不需要手動呼叫這兩個工具。您只要說明另一個工作階段需要知道的內容,Claude 就會自行撰寫訊息。
這項功能稱為跨工作階段訊息傳遞。截至 2026 年 8 月,需要使用 Claude Code v2.1.224 或更新版本,並可在 macOS 和 Linux 上執行,包括 WSL 2 中的 Linux。不支援原生 Windows,也不適用於 Amazon Bedrock、AWS 上的 Claude Platform、Google Cloud 的 Agent Platform 或 Microsoft Foundry。工作階段符合這些條件時,訊息傳遞功能已經啟用,不需要額外設定。以下行為取自 Anthropic 的跨工作階段訊息傳遞文件。
VPS 特別適合這項功能,因為 VPS 上的工作階段通常會持續執行,值得彼此傳送訊息。在筆記型電腦上,您會闔上上蓋。但在執行 tmux 的伺服器上,週一啟動的工作階段到了週四仍可能持續執行,並保留某個 repository 的內容脈絡。當您有兩個這樣的工作階段後,它們如何互相通訊就不再只是理論問題。如果您尚未完成這項設定,請先從 在 VPS 上透過 tmux 執行 Claude Code 開始。本指南所需的工作階段設定方式會在該節說明。
何時值得使用第二個工作階段
先從成本開始。每個工作階段都是具備獨立內容視窗的 Claude 執行個體,因此在相同期間內,使用兩個工作階段的成本約為使用一個的兩倍。傳送的訊息會像您輸入的提示一樣,完整計入用量。協調並非免費;如果工作實際上是同一連串步驟,拆分到不同工作階段會讓處理速度變慢,成本也更高。
值得使用第二個工作階段的情況,通常具備相同特徵:兩項工作可同時執行,彼此不必等待,而且其中一項工作會在執行期間取得另一項工作所需的資訊。
- 一個工作階段發現 breaking change,另一個工作階段卻正以已被破壞的程式碼為基礎進行建置。Claude 會摘要變更並傳送出去,您不必在另一個終端機重新輸入。
- 兩個工作階段分別在不同的 git worktree 中處理同一個 repository,其中一個需要知道哪些內容已經合併。
- 長時間執行的 migration 或 test run 將結果回傳給您正在監看的工作階段。
- 一個 builder 工作階段搭配一個 reviewer 工作階段;reviewer 讀取 builder 產出的內容,再傳回檢查結果。
如果工作是循序執行,或兩個工作階段都會編輯相同檔案,請使用一個工作階段。如果您要的是 Claude 在單一工作中建立並監督的協調工作群組,則應使用 agent teams;這是另一項目前仍屬實驗階段的功能。如果您只是要在另一個終端機繼續相同的對話,請改為 resume 該工作階段。跨工作階段訊息傳遞適用於由您自行啟動並引導的獨立工作階段。
先確認功能存在,再規劃後續設定
先查看版本:
claude --version將版本號與 2.1.224 比較。接著在工作階段中輸入 /list-agents;此指令也可使用別名 /peers。它會列出此工作階段能連線到的所有 agent,以及各 agent 回應的名稱。若完全無法辨識此指令,表示此工作階段不支援跨工作階段訊息傳遞,任何設定檔都無法啟用這項功能。輸入 /status,並尋找 Peer address 列;該列包含此工作階段自己的收件匣位址,前面加上 uds:。
VPS 使用者特別容易遇到一個陷阱。跨工作階段訊息傳遞取決於 feature flag 評估,而數個隱私變數會停用這項評估,使功能維持預設的停用狀態。DO_NOT_TRACK、DISABLE_TELEMETRY、CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC 和 DISABLE_GROWTHBOOK 都會造成這種結果。使用者通常會將這些設定貼入 ~/.bashrc 來強化新伺服器,之後卻疑惑為何 /list-agents 不存在。同樣的值也可能來自設定檔中的 env map,或來自受管理設定,因此請先檢查 shell。
env | grep -E 'DO_NOT_TRACK|DISABLE_TELEMETRY|DISABLE_GROWTHBOOK|NONESSENTIAL'取消設定有輸出的變數。對 DISABLE_TELEMETRY 和 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC 而言,任何非空值都會啟用此行為,包括字串 0,因此 DISABLE_TELEMETRY=0 的作用與表面看起來不同。若要停用此功能,請取消設定該變數,或將其設為空字串。
為工作階段命名,否則 Claude 無法指定工作階段
Claude 會依工作階段名稱將訊息傳送至該工作階段。請在啟動工作階段時設定名稱:
claude --name builder-api您也可以在執行中的工作階段內使用 /rename 進行設定。如果未設定名稱,Claude Code 會根據工作目錄的資料夾名稱產生名稱,例如 myapp-3f。一個工作階段使用時沒有問題,但同時使用四個工作階段就會難以區分,而且兩個工作階段可能產生相同名稱。/list-agents 輸出會顯示每個本機工作階段的工作目錄,讓您區分名稱相同的工作階段;Claude 自身的清單也會在名稱衝突時,於位址中加入簡短識別碼。自行命名比閱讀識別碼更省事。
可重現的雙工作階段 tmux 配置
這是一個在同一個 repository 上使用的 builder 工作階段與 reviewer 工作階段。reviewer 在獨立的 git worktree 中工作,因此兩者不會寫入同一個檔案。git worktree add 搭配 HEAD 會建立 detached checkout,適合用於只讀取而不提交變更的工作階段。
cd ~/src/api
git worktree add ../api-review HEAD
tmux new-session -d -s agents -n builder -c ~/src/api
tmux new-window -t agents -n reviewer -c ~/src/api-review
tmux send-keys -t agents:builder 'claude --name builder-api' C-m
tmux send-keys -t agents:reviewer 'claude --name reviewer-api' C-m
tmux attach -t agents接著執行 Ctrl+b,再執行 w,列出各個視窗的名稱,方便選取。切換到 builder 視窗後,執行 /list-agents。畫面上應會看到 reviewer-api,其工作目錄為 ~/src/api-review。如果找不到,表示 reviewer 工作階段尚未完成啟動,或下一節所述的兩個問題其中之一正在發生。接著以一般語言交接工作:
Tell reviewer-api which files I changed for the rate limiter and what to look at first.Claude 會撰寫摘要並傳送。你不需要撰寫訊息內容,而且 Claude 傳送的內容可能不同。在 reviewer 視窗中,訊息會以傳送者名稱顯示在對話中。如果該工作階段閒置,Claude 會立即在其中開始新回合。如果正在執行回合,訊息會等到兩次工具呼叫之間才會處理,因此不會中斷執行中的命令。Claude 讀取訊息後,訊息會摺疊成一列一行的 Message from,再由 Ctrl+O 展開。builder 的變更越小,兩者配合通常越順利,因為較窄的 diff 能產生較短的交接內容,也能讓另一個工作階段在一回合內完成審查;這正是 lazy senior dev 技能要求養成的習慣。
單一 VPS 上誰能看見誰
同一台機器上的訊息傳遞不會經過 Anthropic 伺服器。每個工作階段都會將註冊檔案寫入磁碟,並綁定自己的收件匣 socket;Claude Code 會讀取這些檔案,以尋找其他工作階段。這會在伺服器上產生兩個需要注意的結果。
socket 受到作業系統使用者限制。以 root 啟動的工作階段,無法看見以 deploy 啟動的工作階段。即使兩者位於同一個 tmux server 中也一樣,因為一個使用者的工作階段無法存取另一個使用者的 socket。請以相同使用者執行兩個工作階段。
容器擁有自己的檔案系統。Docker 內的工作階段與主機上的工作階段無法互相連線,因為兩者讀取的註冊檔案不同。同一個容器內的兩個工作階段可以正常互傳訊息。如果你為了隔離而將 agents 放在容器中,例如 在可捨棄的 VM 中執行 coding agents,請預期訊息只能在容器內運作,無法跨越容器邊界。
其他機器上的工作階段,以及 Web 上的工作階段,只有在 Remote Control 連線期間才會出現在清單中,並會標示為此類型。此處的 Claude 只能回覆從其中一個工作階段傳入的訊息,無法主動開始這段通訊。
訊息為何始終未送達
通常原因與網路無關。接收端工作階段決定了如何處理訊息,而決定結果不是送達。每則到達的訊息最後都會有三種結果之一:已送達、暫存(在你核准前保留為未送達),或拒絕(未送達即丟棄)。
如果沒有適用的 crossSessionInbound 值,Claude Code 會根據兩個工作階段的權限模式逐則決定。它會將略過權限提示的工作階段歸為一類,其他工作階段歸為另一類。auto、acceptEdits 和 dontAsk 都算作會提示。若工作階段具備略過權限的能力,Plan mode 會在該工作階段中算作略過提示。規則具有對稱性:
- 會提示權限的接收工作階段會送達每則訊息。只有在傳送工作階段表明自己會略過提示時,才會暫存訊息。
- 會略過提示的接收工作階段會暫存每則訊息,等待你核准。只有在傳送端也會略過提示時,才會送達訊息。
因此,多數人建立的第一個工作流程正好無法運作。你使用 --permission-mode bypassPermissions 啟動 builder,因為希望它能在無人介入時執行;你讓 reviewer 維持預設設定,而 builder 傳送的每則訊息都會停在沒有人查看的核准對話框中。該對話框會在 dialogExpiry 期限後關閉,預設值為 5m,訊息也會因此丟棄。在同一台機器上,傳送端工作階段會在訊息暫存時收到通知;接收端稍後送達、拒絕或讓訊息逾期時,傳送端也會收到後續通知。因此,先查看傳送端畫面,再判斷是 socket 的問題。
若要讓工作階段在無人介入時接收訊息,請將 crossSessionInbound 設為 accept。設定位置會決定其適用範圍。Claude Code 會先讀取 managed settings,再讀取 --settings flag,最後讀取使用者設定,並套用第一個找到的值。project 或 local settings 中的值只有在階層上更嚴格時才會套用,順序為 accept < hold < refuse。.claude/settings.json 中的 accept 比任何值都寬鬆,因此只要受信任的來源已設定值,就會被忽略。請將它放在 ~/.claude/settings.json 中,或針對單一工作階段傳入:
claude --name runner --settings '{"crossSessionInbound":"accept"}'無頭的 claude -p worker 會像互動式工作階段一樣繫結 inbox socket,並出現在清單中,但無法顯示核准對話框。這類工作階段中的暫存訊息會持續保留,直到之後的模式或設定變更使其可以接收。上方的 --settings 行可讓這類 worker 接收訊息。以 bare mode 啟動的工作階段完全不會繫結 socket,因此既無法接收訊息,也不會出現在清單中。
交接卡住的情況
訊息迴圈會由系統處理。Claude Code 會限制同一傳送者的重複訊息速率,捨棄在短時間內收到的相同重複訊息,並將每個工作階段等待讀取的已接受訊息限制為 50 則,因此兩個工作階段無法無限互相傳送訊息。暫存訊息上限為 100 則,超過後會捨棄最舊的訊息。
實際發生的失敗情況較不明顯,而且是交接問題,不是迴圈。工作階段 A 向工作階段 B 提出必須先獲得答案才能繼續的問題,接著進入閒置狀態。B 可能暫存了訊息,或正在處理耗時的工作,或回答了 A 實際上沒有提出的問題。A 便持續等待。你一小時後回來時,會看到兩個閒置的工作階段,卻沒有完成任何工作。
撰寫不需要回覆的交接訊息。好的訊息會提供事實或決策:說明變更內容及其結果。差的訊息會要求另一個工作階段核准,或要求對方提供傳送者因而無法繼續所需的答案。Claude 已經收到指示,絕不向另一個工作階段要求其自身權限設定會阻擋的操作,而應將該工作交回給你。你也應自行延伸這項規則。如果某個工作階段沒有答案就無法繼續,應由你提供答案。維持內容脈絡也有幫助,因為失去脈絡的工作階段會寫出含糊的訊息;在 Claude Code 中管理內容脈絡涵蓋了這一部分。
將傳入訊息視為不受信任的輸入
Claude Code 會告知接收端的 Claude,這則訊息來自另一個工作階段,而不是來自你,並限制該訊息可執行的操作。訊息無法代替你回答待處理的權限提示,因為另一個工作階段的同意不等於你的同意。訊息也無法因為另一個工作階段提出要求,就變更權限設定、CLAUDE.md 或其他組態。文字中的斜線命令(例如 /compact)會以純文字傳入,絕不會執行。若處理訊息需要接收端工作階段沒有的權限,你會看到與其他工作相同的提示。在自動模式中,分類器也會在傳遞前檢查每則訊息;遭到封鎖的訊息不會送達接收端。這些限制在寬鬆模式中仍然有效,因此繞過限制的工作階段預設會暫存傳入訊息,而不是直接信任訊息。
這解決的是權限問題,不包括內容問題。傳送端工作階段可能讀取過 pull request 描述、網頁、相依套件的 README 或陌生人撰寫的 issue 留言,而它讀取的內容可能影響它寫給你另一個工作階段的文字。訊息是資料。它應與任何從外部進入工作階段的文字一樣受到懷疑。這就是 避免讓 AI 代理程式接觸機密 所描述的原則:假設任何跨越信任邊界的內容都可能是錯的,絕不讓內容自行授權。
如果你想降低這類訊息,有兩項控制措施可用。將 crossSessionInbound 設為 refuse,可在不傳遞的情況下捨棄傳入的對等工作階段訊息;從 project 或 local 設定指定時,該值會優先於其他所有來源,因為它在設定階梯中最嚴格。若要停止此工作階段傳送或列出訊息,請加入以 SendMessage 和 ListAgents 為名稱的 permission deny 規則,兩者都必須寫成不含 specifier 的純工具名稱。將 isolatePeerMachines 設為 true,可要求你明確核准後,訊息才能傳送到此機器以外的工作階段;即使在 bypassPermissions 模式中,也仍需要這項核准。
{
"crossSessionInbound": "refuse",
"isolatePeerMachines": true
}拒絕 SendMessage 也會停止向子代理程式傳送訊息,因為兩者使用相同的工具。拒絕傳送的工作階段在自己的 /status 或其他工作階段的清單中都不會顯示可見變化,因此請從工作階段的設定確認該值,而不要依賴畫面。
Bridge 與共享記憶體 MCP 伺服器
同一時期也出現幾個功能相近的第三方專案:在執行中 agent 之間轉送文字的本機 agent-to-agent bridge,以及讓多個 agent 共用讀寫儲存區的 MCP(model context protocol)伺服器。應將它們視為不同的架構,而不是競爭方案;執行任何安裝命令前,先對照專案本身的 README 進行確認。Messaging 屬於 push,因為傳送端會將文字放入接收端的回合。共享儲存區屬於 pull,因為它不會中斷任何工作階段,工作階段下次查看時才會看到該筆備註。對於變化緩慢的狀態,pull 較不干擾;但只有在工作階段實際查看時才會生效。
如果採用這種方式,值得詢問的問題應聚焦於執行程序,而不是功能清單。伺服器以哪個使用者身分執行?它能讀取主機上的哪些內容?在 VPS 上執行 MCP 伺服器說明相關設定。跨 repo 共用 agent 技能涵蓋較簡單的情境:你要在工作階段之間共用的是指示,而不是即時狀態;這也能減少原本需要傳送的許多訊息。如需了解更完整的架構,請先閱讀在 VPS 上執行 coding agent。
FAQ
為什麼工作階段中無法辨識 /list-agents?
工作階段不具備跨工作階段傳訊功能。先確認 claude --version 是否為 2.1.224 以上,因為此功能需要該版本或更新版本。接著確認平台,因為此功能可在 macOS 和 Linux 上執行,但不支援原生 Windows,也不適用於 Amazon Bedrock、Claude Platform on AWS、Google Cloud's Agent Platform 及 Microsoft Foundry。若兩者都符合要求,請檢查 shell 是否設定了 DO_NOT_TRACK、DISABLE_TELEMETRY、CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC 或 DISABLE_GROWTHBOOK,因為這些設定都會阻止功能旗標評估,使功能維持關閉。
為什麼我傳給另一個工作階段的訊息一直沒有送達?
如果 /list-agents 可正常運作,表示傳訊功能已啟用,問題出在其他更狹窄的條件。最常見的原因是權限模式。略過權限提示的工作階段會暫停所有傳入訊息,等待你核准,除非傳送端也略過權限提示。該核准對話方塊會在 dialogExpiry 期限後失效,預設為 5 分鐘。請檢查傳送端工作階段是否顯示暫停通知。若要修正,請在 ~/.claude/settings.json 中將 crossSessionInbound 設為 accept,或使用 --settings 傳入該設定,因為專案或本機設定中的 accept 會被視為較寬鬆的值而忽略。
Docker 中的 Claude Code 工作階段可以傳訊給主機上的工作階段嗎?
不行。工作階段會透過磁碟上的註冊檔案和每個工作階段專用的 inbox socket 互相尋找,而容器擁有自己的檔案系統,因此兩者無法存取相同檔案。同一個容器內的兩個工作階段則可以正常互相傳訊。同一項規則也說明了,使用 root 執行的工作階段無法連線到使用一般使用者帳號執行的工作階段:socket 僅限擁有該 socket 的作業系統使用者存取。
來自其他 Claude Code 工作階段的訊息可以安全執行嗎?
請將訊息內容視為不受信任的輸入,因為傳送端工作階段可能讀取過網頁、README 或他人撰寫的 issue 留言。Claude Code 已經阻止訊息自行執行:它無法核准待處理的權限提示,無法依要求變更權限設定或 CLAUDE.md,而訊息中的 slash command 會以純文字傳入,絕不會執行。這些防護涵蓋權限,但不涵蓋判斷,因此請先閱讀收到的內容,再指示接收端工作階段依內容行動。
跨工作階段傳訊會將我的程式碼傳送給 Anthropic 嗎?
在同一台機器上的兩個工作階段之間,不會。訊息會透過該機器上的工作階段專用 socket 傳送,絕不經過 Anthropic 伺服器;傳送的只有 Claude 撰寫的文字,不包含對話歷程或檔案。傳送給另一台機器上的工作階段,或傳送給網頁上的工作階段時,訊息會透過 Remote Control 連線經由 Anthropic 伺服器傳送;在此方向上,Claude 只能回覆已收到的訊息,不能主動發送訊息。將 isolatePeerMachines 設為 true,即可要求你核准任何離開該機器的內容。