1"use strict";(self.webpackChunkclaude_hq=self.webpackChunkclaude_hq||[]).push([[3885],{62653:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>l,default:()=>g,frontMatter:()=>t,metadata:()=>i,toc:()=>h});const i=JSON.parse('{"id":"faqs/what-is-cross-session-sendmessage-in-claude-code","title":"What is Cross-Session SendMessage in Claude Code","description":"Cross-session SendMessage lets Claude Code sessions message each other across your machines, with ListAgents for discovery. Added v2.1.224 on macOS and Linux.","source":"@site/docs/faqs/what-is-cross-session-sendmessage-in-claude-code.md","sourceDirName":"faqs","slug":"/faqs/what-is-cross-session-sendmessage-in-claude-code","permalink":"/faqs/what-is-cross-session-sendmessage-in-claude-code","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedAt":1786222174000,"sidebarPosition":244,"frontMatter":{"sidebar_position":244,"date":"2026-08-08","image":"img/discovery/029_wind.png","title":"What is Cross-Session SendMessage in Claude Code","description":"Cross-session SendMessage lets Claude Code sessions message each other across your machines, with ListAgents for discovery. Added v2.1.224 on macOS and Linux.","displayed_sidebar":"tutorialSidebar","hide_breadcrumbs":true},"sidebar":"tutorialSidebar"}');var o=n(74848),r=n(28453),a=n(33895),d=n(42219);const t={sidebar_position:244,date:"2026-08-08",image:"img/discovery/029_wind.png",title:"What is Cross-Session SendMessage in Claude Code",description:"Cross-session SendMessage lets Claude Code sessions message each other across your machines, with ListAgents for discovery. Added v2.1.224 on macOS and Linux.",displayed_sidebar:"tutorialSidebar",hide_breadcrumbs:!0},l="What is Cross-Session SendMessage in Claude Code",c={},h=[{value:"How It Works",id:"how-it-works",level:3},{value:"Delivery Controls",id:"delivery-controls",level:3},{value:"Safety Behaviour",id:"safety-behaviour",level:3},{value:"When It's Useful",id:"when-its-useful",level:3},{value:"Limitations",id:"limitations",level:3},{value:"Official Documentation",id:"official-documentation",level:3}];function u(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h3:"h3",header:"header",hr:"hr",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(d.A,{breadcrumbs:[{label:"FAQs",href:"/faq"},{label:"What is Cross-Session SendMessage",href:"/faqs/what-is-cross-session-sendmessage-in-claude-code"}],currentPage:"What is Cross-Session SendMessage"}),"\n",(0,o.jsx)(s.header,{children:(0,o.jsx)(s.h1,{id:"what-is-cross-session-sendmessage-in-claude-code",children:"What is Cross-Session SendMessage in Claude Code"})}),"\n",(0,o.jsxs)(s.p,{children:["Cross-session ",(0,o.jsx)(s.code,{children:"SendMessage"})," lets Claude Code sessions send messages to each other, including sessions running on your other machines, with ",(0,o.jsx)(s.code,{children:"ListAgents"})," to discover them. Added in ",(0,o.jsx)(s.code,{children:"v2.1.224"})," (August 6, 2026) on macOS and Linux."]}),"\n",(0,o.jsx)(s.hr,{}),"\n",(0,o.jsx)(a.Ay,{}),"\n",(0,o.jsx)(s.hr,{}),"\n",(0,o.jsx)(s.h3,{id:"how-it-works",children:"How It Works"}),"\n",(0,o.jsxs)(s.p,{children:["Previously ",(0,o.jsx)(s.code,{children:"SendMessage"})," only reached subagents inside the current session. Now a session can message another independent session \u2014 a different terminal, a different project, or a different machine entirely."]}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:(0,o.jsx)(s.code,{children:"ListAgents"})})," - Discovers reachable sessions. Remote Control sessions on other machines appear as ",(0,o.jsx)(s.code,{children:"name [ref]"}),"."]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:(0,o.jsx)(s.code,{children:"SendMessage"})})," - Sends to a session by name or reference."]}),"\n"]}),"\n",(0,o.jsxs)(s.p,{children:["In ",(0,o.jsx)(s.code,{children:"v2.1.225"})," this extended further: ",(0,o.jsx)(s.code,{children:"SendMessage"})," can now ",(0,o.jsx)(s.em,{children:"start"})," a conversation with a Remote Control session on another machine by name, rather than only replying after that session messaged you first."]}),"\n",(0,o.jsx)(s.h3,{id:"delivery-controls",children:"Delivery Controls"}),"\n",(0,o.jsx)(s.p,{children:"Two settings govern how inbound cross-session messages are handled:"}),"\n",(0,o.jsxs)(s.table,{children:[(0,o.jsx)(s.thead,{children:(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.th,{children:"Setting"}),(0,o.jsx)(s.th,{children:"Effect"})]})}),(0,o.jsxs)(s.tbody,{children:[(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:(0,o.jsx)(s.strong,{children:(0,o.jsx)(s.code,{children:"crossSessionInbound"})})}),(0,o.jsx)(s.td,{children:"Messages sent to a session running with bypassed permissions are held for your approval"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:(0,o.jsx)(s.strong,{children:(0,o.jsx)(s.code,{children:"dialogExpiry"})})}),(0,o.jsx)(s.td,{children:"Controls how long a pending message dialog waits before expiring"})]})]})]}),"\n",(0,o.jsx)(s.p,{children:"The default is deliberate: a message arriving at a session that has permissions bypassed is the highest-risk path, so those are queued for a human rather than auto-delivered. Messages to normally-permissioned sessions auto-deliver."}),"\n",(0,o.jsx)(s.hr,{}),"\n",(0,o.jsx)(s.admonition,{title:"AdSense In-Article Ad White Mid",type:"tip"}),"\n",(0,o.jsx)(s.hr,{}),"\n",(0,o.jsx)(s.h3,{id:"safety-behaviour",children:"Safety Behaviour"}),"\n",(0,o.jsxs)(s.p,{children:["In ",(0,o.jsx)(s.code,{children:"v2.1.222"}),", auto mode began evaluating outbound ",(0,o.jsx)(s.code,{children:"SendMessage"})," calls through the permission classifier ",(0,o.jsx)(s.em,{children:"before"})," dispatch. This closes an obvious gap: without it, a session in auto mode could instruct another session to do something the classifier would have blocked locally."]}),"\n",(0,o.jsx)(s.p,{children:"Two reliability fixes shipped alongside the feature:"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:(0,o.jsx)(s.code,{children:"v2.1.224"})})," - ",(0,o.jsx)(s.code,{children:"SendMessage"}),' reported "Message sent" even when the write to the recipient\'s inbox had failed. Failed deliveries are now reported as errors.']}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:(0,o.jsx)(s.code,{children:"v2.1.222"})})," - A long summary caused ",(0,o.jsx)(s.code,{children:"SendMessage"})," to reject the send outright on a character limit; it now truncates instead."]}),"\n"]}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.code,{children:"v2.1.225"})," also fixed a targeting hazard: a Remote Control recipient you have already confirmed is never silently swapped for a same-named local session when the remote list could not be checked."]}),"\n",(0,o.jsx)(s.hr,{}),"\n",(0,o.jsx)(s.admonition,{title:"AdSense In-Article Ad White Mid",type:"tip"}),"\n",(0,o.jsx)(s.hr,{}),"\n",(0,o.jsx)(s.h3,{id:"when-its-useful",children:"When It's Useful"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:"Long-running work on another machine"}
1)," - Ask a session running a migration on your workstation for status from your laptop."]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:"Splitting a task across checkouts"})," - One session per repository, coordinating rather than juggling worktrees in a single conversation."]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:"Handing off context"})," - Send a summary to a session that already has the right project loaded, instead of re-establishing context from scratch."]}),"\n"]}),"\n",(0,o.jsx)(s.h3,{id:"limitations",children:"Limitations"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:"macOS and Linux only"})," - Windows is not supported for cross-machine messaging."]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsxs)(s.strong,{children:["Requires ",(0,o.jsx)(s.code,{children:"v2.1.224"})," or later"]})," on both ends."]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:"Discovery is not instant"})," - ",(0,o.jsx)(s.code,{children:"ListAgents"})," reflects sessions it can currently reach; a session that is down simply will not appear."]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:"Message delivery is not a queue guarantee"})," - A failed write now surfaces as an error, so treat delivery as something to confirm rather than assume."]}),"\n"]}),"\n",(0,o.jsx)(s.h3,{id:"official-documentation",children:"Official Documentation"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:"Release entry:"})," ",(0,o.jsx)(s.a,{href:"/claude-code-changelog",children:"Claude Code v2.1.224 changelog"})]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:"Claude Code docs:"})," ",(0,o.jsx)("a",{href:"https://code.claude.com/docs/en/overview",rel:"nofollow",target:"_blank",children:"Claude Code documentation"})]}),"\n"]}),"\n",(0,o.jsx)(s.admonition,{title:"Image Tip:/img/discovery/029_wind.png|Sessions That Talk to Each Other",type:"tip",children:(0,o.jsx)(s.p,{children:"Cross-session SendMessage turns independent Claude Code sessions into a reachable set, with permission-classifier checks on dispatch and held delivery for sessions running with bypassed permissions."})}),"\n",(0,o.jsx)(s.admonition,{title:"AdSense In-Article Ad White Low",type:"tip"}),"\n",(0,o.jsx)(s.hr,{}),"\n",(0,o.jsxs)(s.p,{children:["See Also: ",(0,o.jsx)(s.a,{href:"/faqs/what-is-sub-agent-delegation-in-claude-code",children:"Sub-Agent Delegation"}),(0,o.jsx)("span",{className:"see-also-divider",children:"|"}),(0,o.jsx)(s.a,{href:"/faqs/what-is-remote-control-in-claude-code",children:"What is Remote Control"}),(0,o.jsx)("span",{className:"see-also-divider",children:"|"}),(0,o.jsx)(s.a,{href:"/faqs/what-is-self-hosted-runner-in-claude-code",children:"Self-Hosted Runner"}),(0,o.jsx)("span",{className:"see-also-divider",children:"|"}),(0,o.jsx)(s.a,{href:"/faqs/what-is-auto-mode-in-claude-code",children:"What is Auto Mode"}),(0,o.jsx)("span",{className:"see-also-divider",children:"|"}),(0,o.jsx)(s.a,{href:"/claude-code-changelog",children:"Claude Code Changelog"})]})]})}function g(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.