2026년 3월 31일, 개발자 커뮤니티에 사상 초유의 일이 벌어졌어요. Anthropic이 자사 최대 매출 제품인 Claude Code의 전체 소스 코드를 npm에 실수로 올린 거예요. 59.8MB짜리 소스맵 파일 하나가 빠져나가면서, 512,000줄의 TypeScript 코드가 전 세계 개발자 앞에 펼쳐졌죠.

발견 후 몇 시간 만에 GitHub에 8,100개 이상의 미러 레포가 생겼고, Anthropic은 DMCA로 대부분 내렸지만 이미 늦었어요. 연간 매출 2.5조 원(ARR $2.5B)짜리 제품의 설계도가 공개된 셈이에요.

3초 요약
npm 패키징 실수로 소스맵 유출 512,000줄 TypeScript 전체 공개 3계층 메모리 + 7단계 에이전트 루프 확인 권한 시스템·비용 최적화·숨겨진 기능 분석 AI 에이전트 설계의 교과서가 됨

이게 뭔데?

Claude Code는 터미널에서 직접 코드를 읽고, 수정하고, 실행하는 Anthropic의 AI 코딩 에이전트예요. 대부분의 사람들은 이걸 "Claude API를 감싼 CLI 도구" 정도로 생각했는데, 유출된 소스가 보여준 건 전혀 달랐어요.

512,000줄, 1,900개 파일의 정교한 소프트웨어 시스템이었어요. React 기반 터미널 렌더러, 60개 이상의 권한 관리 도구, 멀티 에이전트 오케스트레이션, 백그라운드 메모리 통합 엔진까지.

유출은 어떻게 일어났나?

Claude Code 버전 2.1.88을 npm에 배포할 때, 내부 디버깅용 소스맵 파일(.map)이 패키지에 포함된 거예요. .npmignore 설정 누락이나 package.jsonfiles 필드 설정 오류로 추정돼요. Anthropic의 Boris(Claude Code 리드)는 "개발자 실수이며, Bun 버그나 해킹이 아니다"라고 확인했어요.

재밌는 건 타이밍이에요. 만우절 하루 전에 터진 사건이라, 처음에는 만우절 장난으로 오해한 사람도 많았어요. 게다가 같은 날 axios npm 패키지가 북한 연계 해킹 그룹에 의해 침해되는 별도 사건도 일어났고요.

뭐가 달라지는 건데?

"그냥 API 래퍼"라는 인식과 실제 아키텍처의 차이가 핵심이에요. 유출된 코드가 보여준 건 AI 코딩 에이전트에서 진짜 경쟁력은 모델이 아니라 "하니스(harness)"라는 사실이에요.

영역 일반적인 AI CLI 도구 Claude Code 실제 구현
코어 루프 while + await model.chat() 7개 분기점의 async generator 상태 머신
메모리 전체 대화 저장 or 단순 잘라내기 3계층: 인덱스(MEMORY.md) + 토픽 파일 + 원본 검색
컨텍스트 관리 오래된 메시지 삭제 5가지 압축 전략 (Snip, Microcompact, Autocompact 등)
도구 로딩 모든 도구 스키마를 매번 전송 ToolSearch로 필요한 도구만 동적 로딩
권한 관리 전부 허용 or 전부 차단 Default-deny + 거부 추적 + 우아한 폴백
UI 렌더링 console.log 기반 React + Ink + Yoga 레이아웃 (터미널용 React)
비용 최적화 별도 전략 없음 프롬프트 캐시 14개 상태 추적, 스키마 안정화

하나씩 뜯어볼게요.

1. 에이전트 루프: 7단계 상태 머신

핵심 로직은 query.ts에 있어요. 정확히 1,729줄이고, queryLoop라는 async generator 함수가 while(true) 루프를 감싸고 있어요.

대부분의 에이전트 프레임워크는 "프롬프트 보내기 → 응답 받기 → 도구 실행 → 반복"으로 단순하게 돌아가요. 반면 Claude Code의 generator 패턴은 7개의 명시적 분기점(continue site)에서 제어를 넘기면서 상태를 유지해요. 세션 일시정지, 재개, 직렬화, 에러 복구가 전부 가능한 구조예요.

2. 자기 회복 메모리: "의심하는 기억"

VentureBeat가 이걸 "context entropy 해결책"이라고 불렀어요.

  • MEMORY.md — 항상 컨텍스트에 로드되는 경량 인덱스. 줄당 ~150자의 포인터만 저장
  • 토픽 파일 — 실제 프로젝트 지식이 담긴 파일. 필요할 때만 조회
  • 원본 탐색 — 대화 기록은 다시 읽지 않고, 특정 식별자만 grep으로 검색

가장 인상적인 건 "Strict Write Discipline"이에요. 에이전트가 실제로 파일 쓰기에 성공한 후에만 인덱스를 업데이트해요. 실패한 시도가 메모리를 오염시키는 걸 막는 거죠. 그리고 에이전트는 자기 메모리를 "힌트"로 취급하도록 지시받아요. 반드시 실제 코드베이스에서 검증한 후에 행동하는 구조예요.

3. 5가지 컨텍스트 압축 전략

장시간 세션에서 컨텍스트 창이 차면 어떻게 할까요? Claude Code는 5가지 전략을 상황별로 조합해요:

Snip — 오래된 메시지를 빠르게 잘라내기. 속도 우선.

Microcompact — 도구 출력물만 타겟. 5,000줄짜리 파일 읽기 결과를 디스크에 저장하고 요약만 남김.

Context Collapse — 오래된 대화 구간을 점진적으로 압축. (아직 피처 플래그 뒤에 있음)

Autocompact — 설정된 토큰 임계치에서 전체 대화 요약으로 교체.

Reactive Compact — API가 413(페이로드 초과)을 반환하면 발동하는 비상 브레이크.

4. 권한 시스템의 "46줄짜리 철학"

모든 도구는 isReadOnlyisDestructive를 선언해야 해요. 기본값은 둘 다 false — default-deny예요.

가장 흥미로운 건 denialTracking.ts라는 46줄짜리 파일이에요:

3회
연속 거부 시 자동모드 해제
20회
누적 거부 시 매 동작 확인
46줄
이 원칙을 구현한 코드 길이

사용자가 계속 "아니오"를 누르면, 시스템이 자동 모드를 끄고 매 단계마다 허락을 구해요. 대부분의 에이전트는 계속 재시도하거나 아예 멈추는데, Claude Code는 "사용자가 불편해하면 더 조심스럽게 행동한다"는 원칙을 코드 46줄로 구현한 거예요.

5. 숨겨진 기능들

유출된 코드에서 발견된 미공개 기능도 화제예요:

  • KAIROS (자율 데몬 모드) — "적절한 시간"이라는 그리스어에서 따온 이름. 사용자가 자리를 비운 동안 autoDream이라는 프로세스가 메모리를 정리하고, 논리적 모순을 제거하고, 애매한 관찰을 확정적 사실로 변환해요.
  • /buddy (타마고치 펫) — 터미널에 사는 ASCII 반려동물. 18종의 캐릭터, 가챠 확률(Legendary 1%), RPG 스탯(DEBUGGING, PATIENCE, CHAOS, WISDOM, SNARK). 만우절 깜짝 공개용이었는데 하루 일찍 들통났어요.
  • Undercover Mode — Anthropic이 공개 오픈소스 레포에 스텔스 기여할 때 사용. 커밋에서 AI 흔적을 지우는 기능이에요.
  • Proactive Mode — 프롬프트 없이 AI가 자율적으로 작동하는 모드.
  • 좌절/분노 감지 — 키워드 패턴으로 사용자의 부정 감정을 감지해 내부 분석에 반영.

6. 경쟁사 카피 방지: Anti-Distillation & DRM

공개된 코드에서 단순히 기능만 발견된 게 아니에요. Anthropic이 경쟁사의 모방을 기술적으로 차단하려는 시도까지 구현해두고 있었어요.

  • Anti-Distillation — API 요청에 가짜 도구 정의를 주입해서, 경쟁사가 Claude Code 트래픽을 녹화해서 자기 모델을 학습시키면 오염된 데이터가 들어가게 만들었어요. 도구 호출 사이의 추론 과정도 암호화 서명이 된 요약본으로만 전달돼요.
  • DRM 수준의 클라이언트 인증 — JavaScript 레이어 아래, Bun의 Zig 네이티브 HTTP 스택에서 API 요청마다 해시를 삽입해요. 진짜 Claude Code 바이너리에서 보낸 요청인지 암호학적으로 증명하는 구조예요. JS를 패치해서 우회할 수 없도록 의도적으로 더 아래 계층에 넣은 거죠.

7. claw-code: AI가 AI를 복제하다

유출 직후 가장 큰 화제를 모은 건 claw-code라는 프로젝트예요. 한국 개발자 Sigrid Jin이 OpenAI Codex를 써서 Claude Code의 아키텍처를 Python으로 클린룸 재구현한 거예요. 원본 코드를 직접 복사하지 않고, 구조와 패턴만 참고해서 새로 작성했죠.

75,000+
GitHub 스타 (2시간 만에 50K 달성)
75,000+
GitHub 포크 수

법적으로 흥미로운 지점이 있어요. AI가 기존 코드를 보고 다른 언어로 재구현한 결과물이 저작권 침해인가? 전통적으로 '클린룸 재구현'은 두 팀이 수개월에 걸쳐 진행하는 비용이 큰 프로세스였어요. 그런데 이제 AI가 하룻밤에 해버리니, 법적 판례가 아직 없는 거예요. Gergely Orosz(The Pragmatic Engineer)는 'Anthropic이 소송을 해도, AI로 만든 변환 저작물에 대한 IP 싸움에서 이길 수 있을지 불명확하다'고 지적했어요.

핵심만 정리: 여기서 배울 수 있는 것

이 유출에서 사업가, 개발자, 프로덕트 매니저가 가져갈 수 있는 교훈을 정리했어요.

  1. AI 제품의 해자(moat)는 모델이 아니라 하니스다
    Claude Code가 증명한 건 이거예요. 같은 Claude 모델을 쓰더라도, 에이전트 루프·메모리·권한·비용 최적화를 어떻게 설계하느냐가 제품의 품질을 결정해요. AI 제품을 만든다면 "어떤 모델을 쓸까"보다 "모델을 감싸는 시스템을 어떻게 짤까"에 더 투자하세요.
  2. 컨텍스트 관리를 과소평가하지 마세요
    Anthropic도 5가지 전략을 만들고 2가지는 아직 실험 중이에요. 장시간 에이전트 세션에서 컨텍스트 관리는 미해결 과제예요. 특히 도구 출력물(파일 읽기 등)이 컨텍스트 창의 절반을 잡아먹는 문제 — Microcompact 패턴을 참고하세요.
  3. 도구가 20개 이상이면 지연 로딩(deferred loading)은 필수
    Claude Code, OpenAI Agents SDK, CrewAI가 독립적으로 같은 패턴에 도달했어요. 모든 도구 스키마를 매번 보내는 건 토큰 낭비예요. ToolSearch 같은 메타 도구로 필요한 것만 동적 주입하세요.
  4. 권한 시스템은 "우아한 퇴화"를 설계하세요
    사용자가 불편해하면 더 조심스럽게 행동하는 46줄짜리 원칙. AI 제품에서 신뢰(trust)는 기능보다 중요해요. 반복 거부를 추적하고, 자동에서 수동으로 부드럽게 전환하는 UX를 넣어보세요.
  5. 유출이 치명적이지 않은 이유도 생각해볼 것
    Star History는 "코드 스냅샷은 사진이지, 사진작가가 아니다"라고 썼어요. 진짜 해자는 이걸 만든 팀과 계속 배포하는 속도예요. 소스가 공개됐는데도 Anthropic 주가나 사용자 수에 큰 영향이 없었다는 게 이를 증명해요.