Claude Code 的跨會話訊息傳遞
自 v2.1.224 起,Mac 或 Linux 上的每個互動式 Claude Code 會話一啟動就會綁定一個 Unix socket(我這台的位置是 /tmp/cc-socks/38590.sock,權限僅限擁有者),而您執行的任何其他會話都能往裡面投遞一則文字訊息。1 支撐這項功能的是兩個工具:ListAgents 找出哪些會話連得上,SendMessage 依名稱把訊息送到其中一個。2 不必啟用,也不必設定。只要兩個會話都在同一台機器上跑 v2.1.224 或更新的版本,它們現在就能對話。
TL;DR
Claude Code 的會話現在可以互相傳訊:在同一台機器上,訊息走本機 socket,完全不經過 Anthropic 的伺服器;跨機器則透過 Remote Control 傳遞——推出時只能回覆,v2.1.225 才加入依名稱主動發起對話的能力。15 訊息只有純文字,不含對話紀錄、檔案或權限;接收端的會話把它當成輸入,而非命令權威:訊息無法核准提示、修改設定,也無法執行指令。1 這項功能讓一群各自為政的終端機更像一支團隊,而最好的用途,正是那些過去得靠您手動轉達的協調訊息:「遷移跑完了」、「我把那個欄位改名了」、「main 可以安全 rebase 了」。最尖銳的陷阱是無聲的缺席:四個彼此無關的隱私環境變數,任何一個都會悄悄把這項功能關掉。3
這次推出了什麼
v2.1.224 在 macOS 與 Linux 上加入了跨會話的 SendMessage,並以 ListAgents 負責探索;v2.1.225 進一步讓會話能主動發起與其他機器上 Remote Control 會話的對話——先前它只能被動回覆。45
有三個地方可以看見這套機制的運作:
/list-agents(別名/peers)會列出 Claude 能連到的每一個會話:目前會話內的子代理、您其他的本機會話(含背景執行的),以及在 Remote Control 連線期間,您在其他機器上與網頁版 Claude Code 上的會話。1/status會顯示一列Peer address,內容是該會話自己的收件 socket,前綴為uds:。1CLAUDE_CODE_MESSAGING_SOCKET會匯出給每一個掛鉤與 Bash 指令,內含該會話自己的 socket 路徑。6 這點為何重要,下文會談。
我在自己機器上驗證過:一個跑 v2.1.226 的會話列出了兩個對等會話,附帶狀態(「busy」)與存活時間;socket 檔案的權限是 srw-------,只有我這個使用者讀寫得了——在共用機器上,這就是那道界線。1
會話以名稱作為地址。您可以用 /rename 或 --name 旗標指定,否則 Claude Code 會依工作目錄推導一個,例如 myapp-3f。1 若兩個會話撞名,清單會以工作目錄與一段簡短識別碼加以區分。1
真正有意思的是信任模型
Anthropic 的設計回答了一個多數多代理系統含糊帶過的問題:來自另一個代理的訊息,究竟值多少?這裡的答案很精確:訊息是資訊,絕不是權限。1
當會話 A 傳訊給會話 B,抵達的內容受四條規則約束:1
- 它不能核准任何事。 B 端待處理的權限提示,會忽略 A 說的一切。只有您能回答提示。
- 它不能更改設定。 接收端的 Claude 被明確要求:絕不因為另一個會話開口,就去改動權限設定、
CLAUDE.md或任何設定。 - 指令只以文字抵達。 訊息內文裡的
/compact不過是幾個字元的文字,永遠不會被當成指令執行。 - 權限提示照樣會跳出來。 若依訊息行動需要 B 沒有的權限,您會看到與其他工作一模一樣的提示。
入站傳遞另有一道關口。每則抵達的訊息會走向三種結果之一——直接送達、扣住等您核准,或是拒收——由 crossSessionInbound 設定(accept、hold、refuse)決定。1 若您什麼都不設,Claude Code 會依兩個會話的權限模式逐則判斷,而這套預設邏輯相當漂亮:略過權限提示的會話自成一類,其餘的歸另一類。會提示的會話可以自由接收訊息,卻會扣住任何來自略過權限會話的訊息;略過權限的會話則扣住一切,只放行同樣略過權限的會話所發的訊息。1 這種不對稱是刻意的:訊息不得挾帶寬鬆會話的權限。v2.1.224 把這條原則套用在入站方向,而 v2.1.222 早已在 auto 模式的出站方向落實——在該模式下,每則訊息送出前都要先經權限分類器審查。7
被扣住的訊息會跳出核准對話框,顯示寄件者與預覽;若五分鐘內無人回應,對話框就會過期(可用 dialogExpiry 調整),訊息隨之丟棄。1 同一時間最多只能扣住 100 則訊息。1 另有兩道控制把範圍收得更緊:isolatePeerMachines: true 要求任何訊息離開本機前都得經您明示核准,即使處於 bypassPermissions 模式亦然;而且只要任一設定層級給出 true 就算數,因此簽入版控的專案設定檔只能收緊、永遠無法放寬。1 組織端若要徹底停用這項功能,可在受管設定中對 SendMessage 與 ListAgents 下拒絕規則,再加上 crossSessionInbound: "refuse"。1
訊息如何傳遞
對方會話跑在哪裡,決定了傳輸路徑,也決定了您能送什麼:1
| 目標 | 傳輸方式 | 可傳送的內容 |
|---|---|---|
| 同一台機器 | 每個會話各自的 Unix socket,完全不經 Anthropic 伺服器 | 新訊息與回覆 |
| 您的另一台機器 | 經 Anthropic 伺服器,透過該機器的 Remote Control 連線抵達 | 回覆;自 v2.1.225 起,在 Remote Control 連線期間也可發起新對話5 |
| 網頁版 Claude Code | 經 Anthropic 伺服器直達雲端會話 | 僅限回覆 |
有一處文件矛盾值得點出:截至撰稿時,Anthropic 的跨會話訊息說明頁仍把所有跨機器傳訊描述成僅能回覆,而 v2.1.225 的版本說明則寫著 SendMessage「現在可以依名稱,主動與您在其他機器上的 Remote Control 會話展開對話」。版本說明較新,是文件頁沒跟上。15
所謂「同一台機器」,實際規則是檔案系統的可見性:會話會在磁碟上的檔案中註冊,因此兩個會話只有在看得到同一批檔案時才連得上。容器內的會話與主機上的會話無法對話;同一個容器內的兩個會話則可以。1
傳遞也會配合接收端會話的節奏:回合進行中,訊息會在兩次工具呼叫之間被讀取,絕不打斷正在執行的工具;若會話處於閒置,訊息則會開啟一個新回合。1 已送達的訊息計入用量,與您親手輸入的提示無異。1
五種值得打造的模式
1. worktree 協調。 最顯而易見的一種,官方文件也拿它當範例:在不同 worktree 中處理同一個儲存庫的會話,互相告知有什麼已經落地。1「Schema 遷移完成:新欄位是 tenant_id,現在可以安全地對 main 做 rebase。」就是文件自己給的範例訊息——這類更新若少了它,您得自己察覺、切換終端機、再重打一次。若幾個會話共用同一份 checkout 而非 worktree,這種協調訊息的價值更高:「我要提交 content/guides/ 了,先別 stage」就能避開共用工作樹上的經典衝突——一個會話把另一個會話做到一半的東西給提交出去。
2. 監看者與執行者。 開一個監看會話盯著部署、測試套件或日誌,一出狀況就傳訊給負責修復的會話。接收端拿到的是脈絡,不是命令;要怎麼做,仍由它在自己的權限之下決定。再搭配背景會話與通知掛鉤,您就得到一條通報鏈——只有在該找人的時候,它才會找上人。
3. 會回報的長時間任務。 在一個會話裡啟動遷移或長時間的測試,讓它回報給您真正盯著的那個會話。1 狀態不再躺在您早就忘掉的終端機裡。反過來也行——從監看那一端問就好:「問問我另一個終端機裡的會話,遷移跑完了沒」本身就是一句提示,探索、定址與措辭都交給 Claude 自己處理。1
4. 無人看管的工作者機群。 headless 的 claude -p 會話同樣會綁定收件 socket,因此長時間執行的 -p 工作者收得到訊息,也會出現在清單裡。8 但有個關卡:-p 會話無法顯示核准對話框,被扣住的訊息就會一直扣著,除非改設定或改模式,否則沒有送達的途徑(v2.1.225 也修掉了這類訊息無聲停滯、又不會過期的問題)。想讓工作者在無人看管下接收訊息,就在它的 --settings 值裡帶上 crossSessionInbound: "accept" 啟動:這是針對單一工作者的授權,而不是在使用者設定裡放一個會波及每個會話的 accept。8 bare 模式的會話則完全不建立 socket,始終連不上。8
5. 可程式化的收件匣。 低調卻威力十足的一種:由於 CLAUDE_CODE_MESSAGING_SOCKET 會匯出給掛鉤與 Bash 指令,腳本可以直接把訊息投進會話自己的收件匣。6 Claude Code 會驗證「自家子程序」的訊息:當沒有明確的 crossSessionInbound 設定時,由掛鉤或指令回投到自身會話的訊息會直接送達,毫無繁文縟節。1 夜間排程、git 掛鉤、CI 包裝腳本——任何能寫入 Unix socket 的東西,現在都能往生成它的那個會話注入一行脈絡。在 Linux 上,即使投遞的程序已經結束,驗證依然成立;在 macOS 上則只在程序仍存活時有效;若在容器中 Claude Code 是 PID 1,驗證會失敗,訊息就退回一般的入站規則處理。1 沙箱中的指令,則需透過 sandbox.network.allowUnixSockets 放行該 socket。1
它刻意不做的事
這些限制都是設計上的取捨,尊重它們,才不會把力氣花在錯的東西上。
不是核准通道。 信任模型裡的一切,都是為了防止一個會話替另一個會話的行動背書。任何形如「會話 A 核准、會話 B 執行」的工作流程,都是設計上刻意要擋掉的。權限一律經由人來下放。1
不是脈絡搬運。 訊息只是一個 Claude 寫給另一個 Claude 的文字,絕不包含對話紀錄或檔案。Anthropic 的文件說得直白:要搬動一段對話,請改用恢復會話的方式。1 摘要,別傾倒。
不是代理團隊。 各自獨立的會話互傳訊息,屬於點對點的情境。由 Claude 生成並監督的協同團隊(結構化的協定訊息、成員名冊、共享的任務狀態)則是代理團隊(agent teams)功能,而結構化的團隊訊息刻意只留在團隊內部。1 如果您發現自己正在跨會話文字之上設計一套訊息協定,那您要的其實是代理團隊。
不是聊天迴圈。 Claude Code 會針對每個寄件者對重複訊息做速率限制,丟棄短時間內抵達的相同重複訊息,並把每個會話未讀的已接受訊息上限設為 50 則——因此兩個會話之間的訊息迴圈,會依設計自行餓死。1 請打造一問一答的交換,而不是對話。
那些陷阱
隱私環境變數會悄悄把它關掉。 跨會話傳訊仰賴功能旗標的評估,而 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC、DISABLE_TELEMETRY、DO_NOT_TRACK、DISABLE_GROWTHBOOK 之中任何一個,都可能讓評估停擺,連帶把傳訊功能一起拉下水,而且毫無聲響。3 診斷方式是 /list-agents:若這道指令根本不被辨識,代表該會話完全沒有這項功能;若指令可用、訊息卻送不到,問題就更侷限了——可能是拒絕規則、接收端的入站控制,或是一個只收回覆的跨機器目標。1
平台與供應商的缺口。 沒有原生 Windows 支援(WSL 2 裡的 Linux 可以)。在 Amazon Bedrock、AWS 上的 Claude Platform、Google Cloud 的 Agent Platform 或 Microsoft Foundry 上都無法使用。1
單向回覆的邊界情況。 若回覆端本身未連上 Remote Control,發給另一台機器上會話的回覆仍會抵達,卻不帶回覆地址,因此對方無法回話。Claude 在送出時就會被告知這一點;v2.1.225 的修正也收緊了定址,確保已確認的跨機器收件者,絕不會被悄悄換成同名的本機會話。5
headless 的扣留。 那個莫名其妙不理會訊息的 -p 工作者,幾乎都是訊息被扣住的問題:沒有對話框,就沒有送達。該監聽訊息的工作者,記得設上 crossSessionInbound: "accept"。8
重點整理
給日常使用 Claude Code 的人:
- 先跑一次 /list-agents,看看您的會話現在已經能連到哪些對象;重要的會話請用 /rename 命名,訊息才好乾淨地定址。
- 用日常語言下指令傳訊(「告訴那個在處理付款的會話我們改了什麼」),讓 Claude 自己把訊息寫出來。1
給打造自動化的人:
- 透過 CLAUDE_CODE_MESSAGING_SOCKET,從掛鉤與腳本把訊息投進會話;在 Linux 上,自家子程序的訊息送達時不會卡在核准這一關。16
- 給無人看管的 -p 工作者,在它自己的 --settings 裡設 crossSessionInbound: "accept",而不是設在全域。8
給團隊與資安審查者:
- 這項功能的預設值是對的:訊息不帶任何權限、略過權限的會話預設被隔離,而 isolatePeerMachines 加上受管設定的拒絕規則,提供了單機與全組織兩級的關閉開關。1
- 在斷定傳訊壞掉之前,先稽核那四個隱私環境變數;也要知道,一個拒收訊息的會話,在對等會話眼中看不出任何差別。1
參考資料
-
Anthropic,“Message your other Claude Code sessions”,Claude Code 文件。存取日期:2026年8月8日。 ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩
-
Anthropic,“Tools reference”,Claude Code 文件:
ListAgents與SendMessage條目。 ↩ -
Anthropic,“Environment variables”,Claude Code 文件:關於
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC、DISABLE_TELEMETRY、DO_NOT_TRACK與DISABLE_GROWTHBOOK的功能旗標評估說明。 ↩↩ -
Anthropic,Claude Code v2.1.224 版本說明,2026年8月7日:「Added cross-session
SendMessage: Claude Code sessions can now message each other, on any of your machines, withListAgentsto discover them (macOS and Linux).」 ↩ -
Anthropic,Claude Code v2.1.225 版本說明,發布於 2026年8月8日(UTC):「SendMessage can now start a conversation with your Remote Control sessions on other machines by name (
ListAgentsshows them asname [ref]), instead of only replying after they message you first.」已確認的收件者絕不會被替換成同名的本機會話。 ↩↩↩↩↩ -
Anthropic,“Environment variables”,Claude Code 文件:
CLAUDE_CODE_MESSAGING_SOCKET會在任何掛鉤(含SessionStart)執行前匯出。 ↩↩↩ -
Anthropic,Claude Code v2.1.222 版本說明,2026年8月4日:「Improved auto mode safety: messages sent to other agent sessions via
SendMessageare now evaluated by the permission classifier before dispatch.」分類器的審查適用於 auto 模式(以及 plan 模式中由 auto 分類器審查指令的情形),並非全面適用。 ↩ -
Anthropic,“Headless mode”,Claude Code 文件,以及跨會話訊息說明頁中關於非互動式會話的段落:
-p會話會綁定收件 socket,bare 模式不會,而被扣住的訊息若要在無人看管下送達,需設定crossSessionInbound: "accept"。 ↩↩↩↩↩