독립된 컴포넌트를 만들고 있어서 클로드 코드 세션 두 개를 동시에 돌리고 있었다. 그런데 하다 보니 두 컴포넌트가 공통 유틸을 같이 써야 하는 상황이 됐다. 한쪽 세션에서 유틸 명세를 만들고 다른 쪽 세션은 그 명세를 참조해야 했다.
명세를 만든 김에 다른 쪽에서 봐도 괜찮은지 검토를 받고 싶었다. 원래는 이럴 때 대화 내용을 복사해서 옆 세션에 붙여넣는 식으로 맥락을 넘겼는데, 그날은 그게 유독 귀찮았다. 그래서 혹시나 하는 마음에 한 세션한테 지금 돌아가고 있는 다른 세션이 있는 걸 아는지, 거기에 메시지를 보낼 방법이 있는지 물어봤는데... 있다고 했다!
그럼 지금까지 나눈 대화의 맥락을 그 세션에 전달해 달라고 했더니 정말 전달했다. 메시지를 보낼 때마다 내가 승인을 해줘야 하긴 했는데, 승인-승인-승인-승인을 계속 하다 보니 둘이서 대화를 꽤 잘 하고 있었다. 물론 나한테 계속 물어보라는 하네스를 걸어뒀기 때문에 대화 중간중간 내 확인을 필요로 하긴 했지만(이게 중요한 포인트 😉) 그래도 둘이 주고받는 걸 지켜보고 있자니 관전자가 된 기분이라 묘했다.

나중에 공식 문서를 찾아보니 SendMessage 기능을 쓴 거였다. 공식 이름은 cross-session messaging이고 8월 초에 추가됐다. 아직 깊게 보지는 못해서 간단히만 정리해 둔다.
- 클로드가
ListAgents로 다른 세션을 찾고SendMessage로 메시지를 보낸다. 도구를 직접 부를 필요는 없고 말로 부탁하면 메시지 내용도 클로드가 쓴다. - 오가는 건 클로드가 쓴 텍스트뿐이다. 대화 기록이나 파일이 통째로 넘어가지는 않는다.
- 같은 컴퓨터 안의 세션끼리는 세션마다 열어 두는 로컬 소켓으로 주고받는다.
- 다른 세션에서 온 메시지로는 권한 요청을 대신 승인할 수 없고 설정 파일이나 CLAUDE.md도 바꾸지 않는다.
/list-agents로 메시지를 보낼 수 있는 세션 목록을 볼 수 있다.
뭔가 멀티스레드나 멀티프로세스 간 통신 같은 느낌이다.
아직은 이걸 어떤 식으로 활용하면 좋을지 잘 모르겠지만, 그래도 완전히 독립적이라고 생각했던 세션들 사이에도 메시지를 전달할 수 있는 창구가 있다는 게 신기했다.
🚀 Reference