📍 真實場景
阿凱,一人接案的全端工程師,常常為了趕件同時開三、四個 Claude Code 視窗處理同一個專案的不同分支
他在視窗A把一個共用函式的參數名稱改掉,同時視窗B正在另一條分支寫呼叫這個函式的新功能
😖 卡住的地方:他得自己記得回頭去跟視窗B說一聲『我改了那個參數』,常常忙到忘記,結果視窗B寫到一半才發現接不起來,還得重寫一次
💡 這課教你怎麼讓兩個Claude Code視窗直接互相『傳話』,發現什麼、改了什麼,不用再靠你自己複製貼上兩邊跑
🧭 這到底是什麼(白話版)
如果你同時開很多個 Claude Code 視窗工作,每個視窗就是一個獨立的 session工作階段,你可以把它想成一個獨立的對話視窗,裡面的 Claude 有自己的記憶和正在做的事 。以前這些視窗彼此互不相干,視窗A發現了什麼、做了什麼決定,只能靠你自己複製貼上到視窗B,像人肉快遞一樣兩邊跑。現在 Claude Code 多了一個「跨工作階段傳訊息」的功能,讓視窗之間可以直接互相傳話。
背後其實只有兩個動作:先用 ListAgents一個工具,列出目前有哪些工作階段或代理可以被聯絡到,類似查一下現在有誰在線上 找到要傳話的對象,再用 SendMessage把訊息實際送出去的工具,指定收件人的名字並附上內容 把訊息送過去。重點是,你自己完全不用去呼叫這兩個工具——Claude會在它判斷這件事另一個視窗需要知道的時候自己動手,你也可以直接開口叫它去傳。
訊息送到之後不會立刻打斷對方。如果對方那個視窗正在執行一個 tool call工具呼叫,就是Claude實際去跑指令、改檔案、查資料這些動手做的動作 ,Claude Code會等這次動作跟下一次動作中間的空檔才把訊息拿給它看,確保正在做的事不會做到一半被打斷。如果對方那個視窗閒置中,Claude Code就直接幫它開一個新的 turn回合,你可以想成一輪對話:你丟一句話出去,Claude回應並可能動手做事,就算一個回合 ,把訊息當作新的任務往下處理。
而且對方不是訊息一來就照單全收——接收端有自己的 inbound controls收件規則,由接收那一端自己設定,決定進來的每一則訊息要怎麼處理 ,每一則進來的訊息都要先過這一關,結果可能是直接送達給Claude,也可能被暫時保留。這代表傳訊息這件事,主動權其實在收件人那邊,不是你想傳什麼對方就一定馬上看得到。
🧠 工程思維透鏡(資深工程師看到的是什麼)
🔭 為什麼設計成『等兩個工具呼叫中間的空檔』才讀訊息,而不是像中斷訊號一樣訊息一到就插進去?
這是可靠性和即時性之間的取捨。如果訊息一到就打斷,正在跑到一半的操作(例如寫檔案寫到一半、跑一個多步驟的安裝流程)可能被腰斬,留下不一致的中間狀態。設計成『只在安全的空檔讀』,是用稍微慢一點的延遲,換取正在做的事絕對不會在危險的中間狀態被打斷,跟資料庫要等交易走到commit點才讓別人看見結果,是同一種思路。
🔭 為什麼要先用ListAgents查一次『現在有誰在』,而不是直接給一個固定位址就能傳訊息?
這是『動態查詢』和『寫死位址』之間的取捨。工作階段是隨時可能開啟、隨時可能被你關掉的,如果讓系統或使用者去硬記每個視窗的身分,一旦視窗關掉重開,所有寫死的東西就全部失效。用ListAgents讓Claude在真正要傳訊息前才去問一次『現在有誰在』,把複雜度轉嫁成一次執行期查詢,而不是要求任何一方事先知道整個拓撲長什麼樣子。
🔭 為什麼訊息會不會『送達』是由收件那一端的規則決定,而不是發送端說了算?
這是信任邊界的設計問題。發送端不該有權力強迫另一個工作階段、甚至另一台機器接受打擾,尤其這些工作階段可能橫跨不同專案、不同機器、不同的人。讓收件方自己設門檻,類似防火牆的邏輯——你可以敲門,但開不開門由我決定,這樣才不會演變成任何一個視窗都能隨意騷擾別的視窗。
🔭 為什麼『跨機器』的時候特別限制成只能回覆、不能主動開啟一段新對話?
這是安全性上刻意做出的不對稱設計。同一台機器上的兩個視窗,通常屬於同一個使用者、同一組權限,信任程度天生就比較高;但跨機器時,如果任一台機器上的Claude都能對另一台機器主動發起新對話,等於任何一台機器上的自動化流程都可以單方面把工作塞給另一台機器,擴大了誤用或被濫用的範圍。只能回覆、不能發起,把『要不要開啟一段新的跨機器互動』這個決定權,留在按下那個開頭訊息的人類手上。
📝 隨堂考(點選答案,立即回饋)
Q1. 視窗B目前正在執行一個工具(例如安裝套件跑到一半),這時另一個視窗傳訊息過來,Claude Code會怎麼處理?
立刻中斷正在跑的工具,先讀訊息
等這次工具呼叫跟下一次中間的空檔才讀
直接忽略,除非收件人手動去看
訊息會直接遺失
✅ 原文說接收端的Claude是在活躍回合中兩次工具呼叫之間讀訊息,所以正在跑的工具永遠不會被打斷。
Q2. 如果視窗B目前是閒置狀態,沒有在跑任何動作,收到訊息後Claude Code會怎麼做?
什麼都不做,等你自己去點開
直接開一個新回合,把訊息當成新的任務繼續處理
自動把那個視窗關閉
只顯示一個通知,不會真的處理
✅ 原文說當接收端閒置時,Claude Code會用這則訊息開啟一個新的回合。
Q3. 如果你想要同時看著、同時操控很多個正在跑的工作階段,原文建議用哪個功能而不是跨工作階段傳訊息?
resume session
agent view
channels
remote control
✅ 原文明確指出,要從一個地方同時看、同時操控多個工作階段,該用agent view。
Q4. 關於跨機器傳訊息,原文特別指出的限制是什麼?
完全不能跨機器傳訊息
跨機器時只能回覆,不能主動開啟新的對話
跨機器傳訊息需要額外付費
跨機器的訊息會被自動翻譯成英文
✅ 原文寫道,跨機器時Claude只能回覆,無法主動發起交流(Across machines, Claude can only reply. It can't start the exchange)。
Q5. 使用者自己需要手動去呼叫ListAgents或SendMessage這兩個工具嗎?
需要,你要自己打指令呼叫
不需要,Claude會在背後自己呼叫,你只要用白話跟它說你要做什麼
只有ListAgents需要手動呼叫
只有付費版才能用這兩個工具
✅ 原文說Claude用ListAgents找到目標、用SendMessage送出,所以你自己從來不用呼叫這兩個工具。