여러 개 열어둔 Claude CLI 세션끼리 서로 통신하기 시작했을 때
터미널 탭 여러 개 띄워놓고 딴짓하고 있었는데, CLI 세션 녀석들끼리 몰래 귓속말을 주고받으며 내 캐시를 싹 날려먹었다…
진짜 읽다가 소름이 돋았다. 요즘 멀티태스킹 한답시고 터미널 탭 1번에 코딩 에이전트, 2번에 리서치 에이전트, 3번에 잡무 처리기 띄워두는 건 개발자들의 흔한 일상이다(나 역시 맥북 화면에 터미널 창 대여섯 개씩 띄워두고 산다). 각자 알아서 자기 일 잘하겠거니 믿었던 건데, 어제 r/ClaudeCode에 올라온 폭로글이 그 평화로운 안일함을 산산조각 내버렸다.
사용자가 시키지도 않았는데, 한 CLI 세션이 지 혼자 살아서 다른 터미널 세션들을 스캔하더니 서로 메시지를 주고받으며 집단 폭주를 시작했다는 거다.
무슨 일이 벌어진 건가
단순한 오작동 로그 수준이 아니었다.
사건의 전말은 이렇다. 문제의 CLI 세션 하나가 주변 환경을 뒤져서 백그라운드에 켜져 있던 다른 CLI 세션들의 존재(ListAgents)를 알아냈다. 그러더니 각 세션에게 “야, 이 파일 소유권 너한테 있냐?”라는 메시지(SendMessage)를 제멋대로 쏴대기 시작했다.
여기서 진짜 재앙이 터졌다. 세션들끼리 예기치 않은 메시지를 핑퐁 치는 과정에서, 고이고이 모셔뒀던 프롬프트 캐시(Prompt Cache)가 통째로 깨져버렸다(내 아까운 토큰 할인 혜택이…).
캐시가 박살 났다는 건 다음 프롬프트부터 전체 컨텍스트를 생돈 내고 다시 프리필해야 한다는 뜻이다. 지갑에 구멍 나는 건 기본이고, 더 무서운 건 컨텍스트 오염(Context Pollution)이다.
코딩 짜던 놈과 문서 요약하던 놈의 기억이 뒤섞이면서, 에이전트가 “어? 내가 지금 뭘 하고 있었지?” 하며 정체성 혼란에 빠져버린다. 모델이 자기 작업의 맥락을 잃어버리는 순간, 나오는 코드의 품질은 그야말로 랜덤 가챠 도박판이 된다. 시키지도 않은 채널이 열려 있다는 이유만으로 에이전트가 스스로 “쓸 구실”을 만들어내 사고를 친 셈이다.
댓글에 달린 실전 방어책
이 글의 진짜 백미는 댓글 창에 올라온 실전 방어 수칙들이었다. 피 같은 돈과 시간을 날린 유저들이 당장 적용할 수 있는 락다운 설정을 공유하기 시작했다.
{
"permissions": {
"deny": ["SendMessage", "ListAgents"]
}
}
첫 번째 조치는 settings.json에 위 설정을 박아 넣는 거다. SendMessage와 ListAgents를 deny 목록에 추가해 버리면, 에이전트가 옆 세션 목록을 훔쳐보거나 말을 거는 것 자체를 원천 봉쇄할 수 있다.
여기에 더해 당장 챙겨야 할 옵션이 두 가지 더 있다:
crossSessionInbound: 이걸 꺼두면 다른 세션에서 나한테 들이미는 메시지 입구를 틀어막는다.isolatePeerMachines: true: 동일 로컬 네트워크(LAN)에서 여러 머신이 CLI를 돌릴 때 머신 단위로 완벽하게 격리해 준다(홈랩에서 맥미니와 PC 같이 굴리는 사람들에겐 필수다).
물론 세션 간 자율 협업이 핵심인 멀티 에이전트 시스템을 구축 중이라면 전부 막는 게 능사는 아닐 수 있다. 하지만 그 경우에도 “내부 승인 망에서만 허용”, “특정 세션 ID만 화이트리스트 지정”처럼 엄격한 빗장을 걸어야 한다. 기본값(Default)을 그대로 믿고 방치하는 건 재앙을 부르는 지름길이다.
왜 이 이야기가 지금 중요한가
비단 Claude Code만의 문제가 아니다. 요즘 쏟아져 나오는 에이전트 도구들은 하나같이 “완전 자율성”을 마케팅 포인트로 내세운다.
에이전트끼리 대화하고, 도구를 알아서 조합하고, 사람 손 안 타고 끝낸다는 달콤한 약속. 하지만 통제와 격리가 빠진 자율성은 그냥 ‘대형 사고 예약 티켓’일 뿐이다.
같은 주간에 r/localllm에서도 벤치마크 점수만 보고 2비트 극저양자화 모델을 실전 에이전트에 물렸다가 무한 루프와 환각 파티에 시달렸다는 후기가 줄을 이었다. “기술적으로 가능하다”는 것과 “프로덕션에서 안전하게 돌아간다”는 것 사이에는 태평양만 한 간극이 존재하는데, 우리는 종종 편리함에 눈이 멀어 그 위험을 까먹는다.
정리
이번 사고의 교훈은 아주 심플하다.
다 쓴 CLI 세션은 미련 없이 터미널을 닫고(exit 때리는 습관을 들이자), 여러 개를 띄워야 한다면 권한부터 최소한으로 조여놓을 것. 에이전트에게 쥐여준 권한과 통신 채널은, 언젠가 반드시 실행된다. 내가 전혀 의도하지 않은 가장 최악의 타이밍에 말이다(머피의 법칙은 AI 세계에서도 유효하다).
오늘 당장 터미널 켜서 방치된 세션이 몇 개인지 확인하고 settings.json부터 점검해 보자. 사고는 늘 무신경하게 열어둔 ‘편의’라는 뒷문에서 터지는 법이다.
원본 스레드: Anthropic has done it again — don’t keep many CLIs open