본문으로 건너뛰기

세션 간 메시징

고급
What you'll learn
  • 같은 머신의 두 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 채널을 사용하세요 — 다른 두 가지는 단일 머신 전용입니다.

올바른 전송 방식 선택하기

Guided walkthrough1 of 5
  1. 세션이 다른 노트북이나 원격 상자에서 실행된다면, MCP 채널 패턴만 작동합니다. 파일 인박스와 로컬 WebSocket 버스는 설계상 단일 머신입니다.

절대 건너뛰면 안 되는 신뢰 경계

아무도 명확하게 말하지 않는 부분이 여기 있습니다. 위의 모든 패턴에서, 메시지가 수신 세션에 도착할 때 에이전트가 기본적으로 지시로서 취급할 텍스트로 도착합니다. 즉: 다른 세션 — 또는 인박스/소켓/MCP에 쓸 수 있는 상자 위의 어떤 것이든 — 이 당신의 에이전트에 프롬프트를 주입할 수 있습니다.

Watch out
  • 피어 메시지는 사용자 턴이 아닌 신뢰할 수 없는 입력입니다. 당신 자신의 머신에서도, 발신자는 자체적으로 읽은 파일에 의해 프롬프트 주입될 수 있는 또 다른 자율 에이전트입니다.
  • 광범위하게 개방된 도구 세트로 세션 간 메시징을 실행하지 마세요. 파괴적인 셸, 임의의 웹 페치, 비밀 경로를 차단하는 Claude Code 권한 프로파일과 함께 사용하세요.
  • WebSocket 및 파일 기반 패턴은 기본적으로 발신자의 인증이 없습니다. 루프백 소켓에 바인딩하거나 ~/.claude/session-bridge/에 쓸 수 있는 로컬 프로세스는 피어인 척할 수 있습니다.
  • 브로드캐스트를 폭발 반경으로 취급하세요. 5개 연결된 세션에 하나의 오염된 메시지는 1개가 아닌 5개의 손상된 에이전트입니다.
  • 의심스러울 때는, 중재하세요: 수신 세션이 들어오는 메시지에 대해 조치하기 전에 승인을 위해 당신에게 요약하도록 하세요 — 가벼운 훅 또는 플러그인의 프론트매터에 있는 프롬프트 가드레일이 그 일을 합니다.

이것이 속하는 일반적인 위협 모델에 대해서는 프롬프트 주입에이전트 보안을 참조하세요. MCP 특유의 버스 위험에 대해서는, 보이지 않는 주석 MCP 공격이 직접적으로 관련됩니다 — "메시지가 숨겨진 지시와 함께 도착"하는 동일한 클래스의 버그가 도구 결과와 정확히 동일하게 Slack 스타일 채널에도 적용됩니다.

이것이 서브에이전트를 이길 때 — 그리고 이기지 못할 때

피어 세션과 서브에이전트는 다른 문제를 해결합니다. 서브에이전트는 메인 컨텍스트를 보호하거나 작업을 전문화하기 위해 당신이 생성하는 범위가 지정된 도구 세트를 가진 새로운 Claude입니다; 비어있는 상태로 시작하고 결과를 반환합니다. 피어 세션은 자체 파일이 로드되고, 플랜 모드가 활성화되어 있고, 전체 대화 상태를 가진 장시간 실행되고, 사람이 주도하는 Claude Code 인스턴스입니다 — 당신은 새로운 것을 만드는 것이 아니라 그 컨텍스트를 빌리는 것입니다.

가치가 다른 세션의 라이브 상태에 있을 때 세션 간 메시징을 사용하세요: 이미 추론하고 있는 라이브러리, 방금 실행한 실패한 테스트, 방금 스테이징한 커밋. 가치가 격리에서 하나의 제한된 작업을 실행하는 것에 있을 때 서브에이전트를 사용하세요. 피어의 컨텍스트에 의존하지 않고 일회성 질문을 발사하기 위해 세션 간 메시징을 사용하고 있다면, 아마도 서브에이전트 — 또는 공유 워크트리를 원할 것입니다.

두 패턴을 모두 넘어서는 장기 실행 다중 에이전트 워크플로우에 대해서는, 장기 실행 에이전트 하네스네이티브 다중 에이전트 API를 참조하세요.

흔한 실수

함정 — 수정하려면 각 카드를 뒤집으세요
Enter 또는 스페이스 키를 눌러 카드를 뒤집습니다. 좌우 화살표 키로 카드를 이동할 수 있습니다.용어가 표시되었습니다.
1 / 5

스스로 확인하기

0/3
  1. 같은 노트북의 두 Claude Code 세션이 메시지를 교환해야 하고, 내일 열린 세션이 어제의 컨텍스트를 검색할 수 있도록 저장되기를 원합니다. 어떤 패턴이 적합합니까?
  2. 파일 기반 인박스와 로컬 WebSocket 버스에서 기본적으로 참인 보안 가정은 무엇입니까?
  3. 하나의 제한된 작업을 실행하고 결과를 반환하기 위해 범위가 지정된 도구 세트를 가진 새로운 Claude를 생성해야 합니다. 무엇을 사용해야 합니까?
Key takeaways
  • Claude Code는 (아직) 네이티브 세션 간 메시징을 제공하지 않습니다; 세 개의 커뮤니티 프로젝트가 다양한 전송을 사용하여 그 격차를 채웁니다.
  • 디버깅 가능성을 위해 파일 기반을, 한 머신에서 초 미만의 지연을 위해 WebSocket을, 그리고 지속성 또는 크로스 머신 피어가 필요할 때만 MCP 채널을 선택하세요.
  • 피어 세션의 메시지는 신뢰할 수 없는 입력입니다 — 다른 프롬프트 주입 표면처럼 취급하고 버스를 엄격한 권한 프로파일과 함께 사용하세요.
  • 하나의 작업을 위한 범위가 지정된 작업자만 필요하다면, 대신 서브에이전트를 사용하세요; 피어 세션은 다른 세션의 라이브 상태를 빌리기 위한 것입니다.
  • 공식 RFE (claude-code#36181)는 닫혔지만 구현되지 않았습니다 — 네이티브 버전에 대해 리포지토리를 주시하고 그것이 도착하면 커뮤니티 프로젝트가 수렴하거나 사라질 것으로 예상하세요.

출처 및 추가 자료