세션 간 메시징
- 같은 머신의 두 Claude Code 세션이 기본적으로 대화할 수 없는 이유 — 그리고 왜 당신이 계속 복사-붙여넣기 다리 역할을 하게 되는지
- 피어 투 피어 세션 메시징을 위한 세 가지 실제 배포 패턴: 파일 시스템, 로컬 WebSocket 버스, 그리고 MCP 채널
- 2분 이내에 작동하는 플러그인 하나를 처음부터 끝까지 설치하고 사용하는 방법
- 반드시 설정해야 할 신뢰 경계 — 피어의 메시지는 지시로서 도착하는 임의의 텍스트입니다
- 이 패턴을 서브에이전트, 공유 워크트리, 또는 모든 것을 한 세션에서 실행하는 것과 비교해 언제 사용해야 하는지
문제: 당신이 다리다
터미널 A에서 libfoo/로 Claude Code를 열고 터미널 B에서 app-that-uses-libfoo/로 엽니다. 터미널 B가 라이브러리에서 타입 에러를 만납니다. 오늘날 당신 — 인간 — 이 라우팅을 합니다: 에러를 읽고, 터미널을 전환하고, A에 붙여넣고, 수정을 기다리고, 다시 전환하고, 빌드를 다시 실행합니다. 각 컨텍스트 전환은 양쪽 모두에서 상태를 잃게 합니다.
이는 정확히 2026년 3월에 열린 닫힌 Anthropic RFE claude-code#36181의 고통입니다: "여러 터미널에 걸쳐 상호 의존적인 프로젝트에서 작업할 때, 사용자들은 현재 세션 간에 수동으로 컨텍스트 전환을 해야 합니다." 이 이슈는 닫혔지만 — 네이티브 세션 간 채널은 아직 Claude Code에 없습니다. 그래서 커뮤니티가 자체적으로 배포했습니다.
세 가지 패턴
2026년 초에 세 개의 독립적인 오픈 소스 프로젝트가 같은 문제에 대해 각기 다른 전송 방식을 선택하며 수렴했습니다. 트레이드오프가 개별 프로젝트가 아닌 전송 방식 선택에 내재되어 있기 때문에 중요합니다.
| 패턴 | 전송 | 배포 형태 | 지연 | 다중 머신 | 디버깅 가능성 |
|---|---|---|---|---|---|
| 파일 기반 인박스 | ~/.claude/session-bridge/sessions/<id>/{inbox,outbox}/ 아래의 JSON 파일 | 9개의 bash 스크립트 + jq | ~5–10초 (3초 폴링) | ❌ 단일 머신 | ✅ cat message.json |
| 로컬 WebSocket 버스 | localhost WebSocket, 세션 데몬 | Claude Code 플러그인 | 밀리초 수준 | ❌ 단일 머신 | ⚠️ 버스 덤프 필요 |
| MCP 채널 | Slack 스타일 채널 + 시맨틱 검색이 있는 MCP 서버 | npx claude-slack | 네트워크 홉 | ✅ 네트워크를 통해 작동 | ✅ MCP 쿼리 |
이미 디버깅하는 방식과 실제로 에이전트를 실행하는 머신 수에 맞는 전송 방식을 선택하세요.
1. 파일 기반 인박스 — PatilShreyas/claude-code-session-bridge (MIT, 65★)
모든 세션은 디렉토리를 가집니다: ~/.claude/session-bridge/sessions/<6-char-id>/. 메시지는 status 필드가 원자적으로 pending → read로 전환되는 JSON 파일입니다. 수신자는 3초마다 자신의 인박스를 폴링합니다. WebSocket과 MCP를 건너뛴 저자의 이유: "디버깅 가능합니다. 말 그대로 메시지를 cat할 수 있습니다."
세션 A는 리스너가 되고, 세션 B가 질문합니다
# In session A (the library repo) /bridge listen # → prints A's 6-char session id, e.g. a1b2c3 # In session B (the app that consumes the library) /bridge connect a1b2c3 /bridge ask "Which version of libfoo exports the parseDate() helper, and did its signature change?"
세션 A는 자신의 라이브 컨텍스트로부터 응답합니다 — 로드된 파일, 최근 도구 결과, 플랜 모드. 세션 B는 신뢰할 수 있는 인간에 준하는 입력으로 취급하는 메시지로 응답을 받습니다. 그 마지막 문장이 이 패턴에서의 보안 이야기의 전부입니다; 계속 읽어보세요.
2. 로컬 WebSocket 버스 — yilunzhang/claude-code-inter-session (MIT, 27★)
로컬 데몬이 루프백 인터페이스에서 WebSocket을 바인딩합니다. 연결된 모든 세션은 이름을 등록하고 send, broadcast (페이로드 최대 256 KB), 또는 list 피어를 할 수 있습니다. 전달은 Claude Code의 Monitor 도구를 사용하므로, 유휴 세션은 토큰을 소비하지 않고 폴링 루프도 실행되지 않습니다. Claude Code ≥ 2.1.105 및 Python ≥ 3.10이 필요합니다.
플러그인 마켓플레이스로 설치한 다음 슬래시 명령을 사용하세요:
세션 간 플러그인을 설치하고 두 터미널을 연결합니다
# In any Claude Code session (run once per machine) /plugin marketplace add https://github.com/yilunzhang/claude-code-inter-session /plugin install inter-session # Terminal A /inter-session:inter-session connect libfoo # Terminal B /inter-session:inter-session connect app /inter-session:inter-session send libfoo "Does parseDate() still accept a string?" # Broadcast to everyone /inter-session:inter-session broadcast "About to bump libfoo to 2.0 — hold merges."
3. MCP 채널 — theo-nash/claude-slack (MIT, 8★)
Slack 스타일 추상화를 노출하는 완전한 MCP 서버: #general, 프로젝트별 채널, DM, 그리고 Qdrant를 백엔드로 하는 시맨틱 검색 지식 계층. 메시지는 재시작 간에 유지되지만, 다른 두 가지는 그렇지 않습니다. 트레이드오프: 이제 네트워크 서비스와 그 의존성을 실행해야 하며, 메시지는 매 턴마다 도구 호출 왕복을 통해 흘러야 합니다.
MCP 서버를 시작하고 에이전트 턴에서 사용합니다
# Start once (in its own terminal) npx claude-slack # In any Claude Code session, once claude-slack is added to your MCP config: Post to #libfoo-consumers that parseDate() moved from utils to date-helpers in v2.0. Then search the channel for prior questions about parseDate to make sure I answered them.
지속성이 필요할 때(이후 세션이 이전 세션이 말한 내용을 검색할 수 있음) 또는 피어가 다른 머신에 있을 때 MCP 채널을 사용하세요 — 다른 두 가지는 단일 머신 전용입니다.
올바른 전송 방식 선택하기
- 세션이 다른 노트북이나 원격 상자에서 실행된다면, MCP 채널 패턴만 작동합니다. 파일 인박스와 로컬 WebSocket 버스는 설계상 단일 머신입니다.
- MCP 채널은 메시지를 저장하여 내일 시작된 세션이 어제의 컨텍스트를 검색할 수 있게 합니다. 다른 두 가지는 메시지를 임시로 취급합니다.
- cat과 grep으로 트랜스크립트를 읽는 것을 좋아한다면, 파일 기반 인박스를 선택하세요. 초 미만의 전달이 중요하다면, WebSocket 버스를 선택하세요. 이미 MCP 서버를 실행 중이라면, claude-slack을 선택하세요.
- 피어 세션은 각자 자체의 라이브 프로젝트 상태를 가지고 있습니다 — 로드된 파일, 플랜 모드, 최근 편집. 하나의 집중된 작업을 실행하고 반환하는 범위가 지정된 작업자만 필요하다면, 대신 서브에이전트를 생성하세요; 더 간단하고 네이티브입니다.
- 데몬이나 MCP 서버를 도입하기 전에 두 리포지토리 고통점에서 파일 기반 브리지를 시도해 보세요. 폴링 지연이 괜찮다면, 완료입니다.
절대 건너뛰면 안 되는 신뢰 경계
아무도 명확하게 말하지 않는 부분이 여기 있습니다. 위의 모든 패턴에서, 메시지가 수신 세션에 도착할 때 에이전트가 기본적으로 지시로서 취급할 텍스트로 도착합니다. 즉: 다른 세션 — 또는 인박스/소켓/MCP에 쓸 수 있는 상자 위의 어떤 것이든 — 이 당신의 에이전트에 프롬프트를 주입할 수 있습니다.
- 피어 메시지는 사용자 턴이 아닌 신뢰할 수 없는 입력입니다. 당신 자신의 머신에서도, 발신자는 자체적으로 읽은 파일에 의해 프롬프트 주입될 수 있는 또 다른 자율 에이전트입니다.
- 광범위하게 개방된 도구 세트로 세션 간 메시징을 실행하지 마세요. 파괴적인 셸, 임의의 웹 페치, 비밀 경로를 차단하는 Claude Code 권한 프로파일과 함께 사용하세요.
- WebSocket 및 파일 기반 패턴은 기본적으로 발신자의 인증이 없습니다. 루프백 소켓에 바인딩하거나 ~/.claude/session-bridge/에 쓸 수 있는 로컬 프로세스는 피어인 척할 수 있습니다.
- 브로드캐스트를 폭발 반경으로 취급하세요. 5개 연결된 세션에 하나의 오염된 메시지는 1개가 아닌 5개의 손상된 에이전트입니다.
- 의심스러울 때는, 중재하세요: 수신 세션이 들어오는 메시지에 대해 조치하기 전에 승인을 위해 당신에게 요약하도록 하세요 — 가벼운 훅 또는 플러그인의 프론트매터에 있는 프롬프트 가드레일이 그 일을 합니다.
이것이 속하는 일반적인 위협 모델에 대해서는 프롬프트 주입과 에이전트 보안을 참조하세요. MCP 특유의 버스 위험에 대해서는, 보이지 않는 주석 MCP 공격이 직접적으로 관련됩니다 — "메시지가 숨겨진 지시와 함께 도착"하는 동일한 클래스의 버그가 도구 결과와 정확히 동일하게 Slack 스타일 채널에도 적용됩니다.
이것이 서브에이전트를 이길 때 — 그리고 이기지 못할 때
피어 세션과 서브에이전트는 다른 문제를 해결합니다. 서브에이전트는 메인 컨텍스트를 보호하거나 작업을 전문화하기 위해 당신이 생성하는 범위가 지정된 도구 세트를 가진 새로운 Claude입니다; 비어있는 상태로 시작하고 결과를 반환합니다. 피어 세션은 자체 파일이 로드되고, 플랜 모드가 활성화되어 있고, 전체 대화 상태를 가진 장시간 실행되고, 사람이 주도하는 Claude Code 인스턴스입니다 — 당신은 새로운 것을 만드는 것이 아니라 그 컨텍스트를 빌리는 것입니다.
가치가 다른 세션의 라이브 상태에 있을 때 세션 간 메시징을 사용하세요: 이미 추론하고 있는 라이브러리, 방금 실행한 실패한 테스트, 방금 스테이징한 커밋. 가치가 격리에서 하나의 제한된 작업을 실행하는 것에 있을 때 서브에이전트를 사용하세요. 피어의 컨텍스트에 의존하지 않고 일회성 질문을 발사하기 위해 세션 간 메시징을 사용하고 있다면, 아마도 서브에이전트 — 또는 공유 워크트리를 원할 것입니다.
두 패턴을 모두 넘어서는 장기 실행 다중 에이전트 워크플로우에 대해서는, 장기 실행 에이전트 하네스와 네이티브 다중 에이전트 API를 참조하세요.
흔한 실수
스스로 확인하기
0/3- Claude Code는 (아직) 네이티브 세션 간 메시징을 제공하지 않습니다; 세 개의 커뮤니티 프로젝트가 다양한 전송을 사용하여 그 격차를 채웁니다.
- 디버깅 가능성을 위해 파일 기반을, 한 머신에서 초 미만의 지연을 위해 WebSocket을, 그리고 지속성 또는 크로스 머신 피어가 필요할 때만 MCP 채널을 선택하세요.
- 피어 세션의 메시지는 신뢰할 수 없는 입력입니다 — 다른 프롬프트 주입 표면처럼 취급하고 버스를 엄격한 권한 프로파일과 함께 사용하세요.
- 하나의 작업을 위한 범위가 지정된 작업자만 필요하다면, 대신 서브에이전트를 사용하세요; 피어 세션은 다른 세션의 라이브 상태를 빌리기 위한 것입니다.
- 공식 RFE (claude-code#36181)는 닫혔지만 구현되지 않았습니다 — 네이티브 버전에 대해 리포지토리를 주시하고 그것이 도착하면 커뮤니티 프로젝트가 수렴하거나 사라질 것으로 예상하세요.
출처 및 추가 자료
- claude-code#36181 — 다중 프로젝트 조정을 위한 크로스 세션 메시징 — 고통을 명명하고 원하는 기능 세트를 개요한 공식 RFE.
PatilShreyas/claude-code-session-bridge— MIT, 파일 기반, 9개 bash 스크립트 +jq; 저자의 근거는 아래 블로그 게시물에 있습니다.- Shreyas Patil — session-bridge: 두 Claude Code 세션이 서로 대화하게 만들었다 (2026-03-20) — 이 저자에게 파일 시스템이 WebSocket과 MCP를 이긴 이유를 설명하는 전송 선택 글.
yilunzhang/claude-code-inter-session— MIT, WebSocket 버스, Claude Code 플러그인으로 설치됨; Claude Code ≥ 2.1.105 필요.theo-nash/claude-slack— MIT, Slack 스타일 채널, DM, 이전 메시지에 대한 시맨틱 검색이 있는 MCP 서버.- 서브에이전트 및 병렬 에이전트 — 라이브 피어가 아니라 새로운 범위 지정 작업자가 필요할 때의 대안.
- 프롬프트 주입 및 보이지 않는 주석 MCP 공격 — 이 버스를 넘는 모든 메시지를 지배하는 위협 모델.