Anthropic이 같은 실수를 두 번 했다. Claude Code의 TypeScript 소스 512,000줄이 npm 패키지에 소스맵째 딸려 나왔고, 누군가가 이걸 Python으로 처음부터 다시 썼다. 그 레포가 2시간 만에 GitHub 스타 50,000개를 찍었다. AI 코딩 에이전트의 내부 구조가 이렇게 적나라하게 공개된 건 처음이다.
npm에서 시작된 사고
3월 31일, 보안 연구자 Chaofan Shou가 @anthropic-ai/claude-code v2.1.88 패키지 안에 59.8MB짜리 소스맵 파일이 포함된 걸 발견했다. 소스맵은 minified JavaScript를 원본 TypeScript로 되돌려주는 디버깅 도구다. 프로덕션 빌드에 절대 포함되면 안 되는 물건인데, Bun 번들러의 알려진 버그 탓에 빌드 설정을 무시하고 생성됐다.
Anthropic 측은 "릴리스 패키징 과정의 휴먼 에러이며 보안 침해가 아니다"라고 확인했다. 고객 데이터, API 키, 모델 가중치는 유출되지 않았다. 그런데 이게 두 번째다 — 첫 사고가 2025년 2월. 같은 경로, 같은 원인이라는 게 좀 민망한 부분이다.
유출된 소스는 약 1,900개 파일, 512,000줄의 TypeScript. 그리고 그 안에 44개의 미공개 피처 플래그가 포함돼 있었다. 빌드됐지만 출시 안 된 기능들의 목록 — 경쟁사 입장에서 로드맵이 통째로 읽히는 셈이다.
Claw Code가 태어나기까지
유출 후 몇 시간 만에 GitHub에 미러 레포가 쏟아졌다. Anthropic은 즉시 DMCA 테이크다운을 날렸고, 원본 파일을 그대로 호스팅한 레포 대부분이 내려갔다.
여기서 다른 길을 간 사람이 있다. Sigrid Jin(@instructkr)은 원본을 복사하는 대신 아키텍처 패턴만 읽고 Python+Rust로 처음부터 재구현했다. 이른바 클린룸 리라이트. 법적으로 원본 저작권 침해와 구별되는 접근이다 — 적어도 이론상으로는. 실제로 클린룸 방식이 저작권 노출을 완전히 회피하는지는 아직 법적으로 확정되지 않은 영역이다.
결과는 폭발적이었다. 2시간 만에 스타 50,000개, 며칠 뒤 72,000개 돌파. 포크 수 72,600. GitHub 역사상 최빠 스타 누적 기록 중 하나가 됐다. 개발자들이 얼마나 에이전트 내부 구조에 목말라 있었는지 보여주는 숫자다.
에이전트 하네스, 뚜껑 열어보니
코드 유출보다 흥미로운 건 드러난 설계 패턴이다. Claude Code는 단순한 챗봇 루프가 아니었다. 핵심 구조를 정리하면 이렇다:
CLI 입력 → route_prompt(Python) → 슬래시 커맨드 or 쿼리 엔진
→ API 요청 구성 → Anthropic API (SSE 스트리밍)
→ 도구 실행 (권한 검사) → 트랜스크립트 압축
→ 구문 강조 렌더링
40개 이상의 도구가 카테고리별로 정리돼 있고, LLM 컨텍스트가 넘치지 않도록 한 번에 최대 15개만 노출한다. 컨텍스트 압축은 12턴 누적 시 자동으로 발동해서 마지막 10개 메시지만 남기고 토큰을 10,000개 이하로 줄인다.
가장 인상 깊은 건 권한 시스템이다. 에이전트별로 도구 접근 정책이 분리되고, 복합 bash 명령어는 서브커맨드 단위로 쪼개서 하나씩 평가한다. deny 리스트가 항상 allow를 이긴다. 에이전트를 프로덕션에 넣을 때 제일 까다로운 샌드박싱 문제를 이렇게 풀었구나, 하는 레퍼런스가 생긴 것이다.
서브에이전트 스포닝도 주목할 만하다. 탐색 작업이 메인 컨텍스트 윈도우를 채울 위험이 있으면 독립된 컨텍스트를 가진 서브에이전트를 띄운다. 메인 실행 스레드 오염 방지 + 병렬 처리라는 두 마리 토끼를 잡는 구조다. 워크트리 격리까지 결합하면 여러 작업을 동시에 안전하게 돌릴 수 있다.
프로덕션에 쓸 수 있나
솔직히 말하면, 아직 안 된다. 일주일도 안 된 프로젝트다. 안정 릴리스가 없고, Rust 포트는 진행 중이며, 레포 안에 parity_audit.py라는 파일이 원본 대비 미구현 부분을 직접 추적하고 있다. 이건 투명하다는 점에서 긍정적이지만, 그만큼 빈 곳이 많다는 뜻이기도 하다.
법적 리스크도 남아 있다. DMCA는 원본 복제 레포에만 적용됐지만, 클린룸 재구현의 경계가 어디까지인지는 판례가 쌓여야 알 수 있다. WaveSpeed AI의 분석도 같은 결론이다 — "코드를 읽어라, 프로덕션에 돌리지는 마라."
그래서 뭘 가져갈 수 있나
Claw Code 자체를 갖다 쓰는 게 포인트가 아니다. 이번 유출로 에이전트 하네스 설계의 기준선이 확 높아졌다. 서브에이전트 스포닝, 도구 샌드박싱, 컨텍스트 압축, 권한 레이어링 — 이 패턴들이 이제 "당연히 있어야 하는 것"이 됐다. 자체 에이전트를 만들고 있다면, 이 아키텍처를 안 읽어보는 건 손해다.
44개 피처 플래그 쪽은 Anthropic 입장에서 더 아플 것이다. 코드는 바뀌지만 전략적 방향성은 되돌릴 수 없으니까.
npm 소스맵 빼먹기가 두 번째라는 사실만큼 씁쓸한 교훈도 드물다.