Claude Code 51만 줄이 NPM에서 유출되었다, 소스맵이 드러낸 비밀 로드맵
Anthropic의 Claude Code 전체 소스코드가 NPM 소스맵으로 두 번째 유출되었습니다. 512,000줄의 코드에서 다마고치 AI 펫 BUDDY, 상시 에이전트 KAIROS, Capybara 모델 등 미공개 로드맵이 발견되었습니다.
Anthropic의 Claude Code 전체 소스코드가 NPM 레지스트리에서 유출되었습니다. 512,000줄, 1,900개 TypeScript 파일이 소스맵 한 장을 통해 완전히 복원 가능한 상태로 노출된 것입니다. 보안 연구원 Chaofan Shou가 3월 31일 이를 발견하자 Hacker News에서 881 포인트, 485개 댓글이 쏟아졌고, GitHub에 아카이브가 생성되어 수 시간 만에 1,100개 이상의 스타와 1,900개 이상의 포크를 기록했습니다.
단순한 소스코드 유출이었다면 이 정도 관심을 받지 못했을 것입니다. 진짜 화제는 코드 속에 숨겨져 있던 미공개 기능들 이었습니다. 다마고치 스타일 AI 펫 시스템 BUDDY, 사용자가 타이핑하지 않아도 능동적으로 작동하는 상시 에이전트 KAIROS, 내부 모델 코드네임 Capybara, 경쟁 모델의 학습 데이터를 오염시키는 Anti-Distillation Defense 까지. Anthropic이 공개적으로 말한 적 없는 로드맵이 코드 수준에서 드러난 것입니다.
더 뼈아픈 점이 있습니다. 이번이 두 번째 동일한 유형의 유출이라는 사실입니다. AI 안전을 핵심 가치로 내세우는 기업이 .npmignore 설정이라는 기초적인 DevOps를 두 번이나 놓쳤습니다.
NPM 소스맵은 어떻게 비밀을 토해냈나
이번 유출의 메커니즘을 이해하려면 소스맵이 무엇인지부터 알아야 합니다. Source map(.map 파일)은 번들링되고 미니파이된 JavaScript를 원본 TypeScript 소스코드로 역매핑하기 위한 디버깅용 파일입니다. 개발 환경에서 브레이크포인트를 찍거나 에러 스택 트레이스를 추적할 때 필수적이지만, 프로덕션 패키지에 포함되면 원본 소스코드가 고스란히 노출됩니다.
핵심 원인은 Bun 번들러의 기본 설정 에 있었습니다. Claude Code는 Bun 런타임 위에 구축되어 있는데, Bun 번들러는 기본적으로 소스맵을 생성합니다. 이를 명시적으로 비활성화하지 않으면 빌드 산출물에 자동으로 포함됩니다. Claude Code v2.1.88 패키지에 포함된 cli.js.map 파일의 크기는 57~60MB에 달했습니다. 이 파일 하나에서 약 1,900개의 원본 TypeScript 파일 경로가 참조되어 있었고, Anthropic의 R2 클라우드 스토리지 버킷에서 ZIP 아카이브로 직접 다운로드까지 가능했습니다.
방지 방법은 놀라울 정도로 간단합니다.
# .npmignore에 .map 파일 제외
echo "*.map" >> .npmignore
# 또는 package.json files 필드로 화이트리스트 방식 사용
# { "files": ["dist/", "!**/*.map"] }
# Bun 번들러 소스맵 비활성화
# bunfig.toml에서 sourcemap: "none"
.npmignore에 한 줄을 추가하거나, package.json의 files 필드를 설정하거나, Bun 빌드 설정에서 소스맵을 비활성화하면 되는 일이었습니다. 배포 전 npm pack --dry-run으로 패키지 내용물을 확인하는 것만으로도 발견할 수 있었습니다. 이 사실이 사건의 아이러니를 더욱 날카롭게 만듭니다.
코드 속에서 발견된 비밀들
유출된 512,000줄의 코드에서 커뮤니티가 발굴한 미공개 기능들은 Anthropic의 야심찬 로드맵을 적나라하게 보여줍니다.
BUDDY: 코딩 도구 안에 다마고치가 살고 있었다
가장 흥미로운 발견은 /buddy 슬래시 커맨드로 활성화되는 다마고치 스타일 AI 동반자 시스템 입니다. 단순한 이스터에그가 아닙니다. 상당히 정교한 시스템이 구축되어 있었습니다.
BUDDY는 18종의 동물 캐릭터를 제공합니다. duck, dragon, axolotl, capybara, mushroom, ghost 등 다양한 종류가 준비되어 있고, common에서 legendary(1% 확률)까지 레어리티 등급이 존재합니다. 각 캐릭터는 DEBUGGING, PATIENCE, CHAOS, WISDOM, SNARK 의 5가지 스탯을 가지며, 모자(hats)나 반짝이(shiny) 같은 코스메틱 변형도 포함되어 있습니다.
구동 방식도 체계적입니다. 사용자 ID의 해시값을 시드로 사용하는 결정론적 가차(gacha) 시스템이며, 첫 부화 시 Claude가 캐릭터의 성격 설명("soul description")을 AI로 생성합니다. 터미널 입력 박스 옆에 말풍선과 함께 ASCII 아트 스프라이트로 표시됩니다.
왜 코딩 CLI 도구에 다마고치를 넣었을까요? 이것은 Anthropic이 개발자 경험(DX)의 감성적 측면 까지 설계하고 있다는 신호입니다. 터미널에서 긴 시간 코딩 작업을 하는 개발자에게 정서적 유대감을 제공하려는 시도로 읽힙니다. OpenClaw의 유사 기능과 경쟁 관계에 있다는 점도 코드에서 확인되었습니다.
KAIROS: AI 코딩 도구의 패러다임을 바꿀 상시 에이전트
BUDDY가 감성적 요소라면, KAIROS는 기술적으로 훨씬 더 파격적입니다. 현재의 AI 코딩 도구는 모두 반응형(reactive) 입니다. 사용자가 프롬프트를 입력하면 AI가 응답하는 구조입니다. KAIROS는 이 패러다임을 뒤집습니다.
KAIROS의 핵심 개념은 명확합니다.
"타이핑을 기다리지 않고, 감시하고, 로깅하고, 능동적으로 행동합니다."
사용자가 아무것도 하지 않아도 KAIROS는 백그라운드에서 지속적으로 동작합니다. 구체적으로 발견된 기능들을 살펴보겠습니다.
15초 블로킹 예산 이 있습니다. 사용자 워크플로우를 15초 이상 차단하는 작업은 자동으로 연기됩니다. 능동적이되 방해하지 않는다는 설계 철학이 코드에 담겨 있는 것입니다.
전용 도구 세트 가 존재합니다. SendUserFile로 파일을 사용자에게 전달하고, PushNotification으로 알림을 보내며, SubscribePR로 GitHub 웹훅을 구독하여 PR 변경사항을 실시간으로 추적합니다.
<tick> 프롬프트 라는 메커니즘이 있습니다. 주기적으로 자동 체크인을 수행하며, append-only 방식의 일일 활동 로그 를 작성합니다.
가장 주목할 만한 것은 AutoDream 입니다. 유휴 시간에 "메모리 통합"을 수행하는 기능으로, 관찰 내용을 병합하고, 논리적 모순을 제거하며, 모호한 인사이트를 명확한 사실로 변환합니다. 24시간 이상, 5회 이상 세션 후에 트리거되며, 200줄 또는 25KB 제한이 걸려 있습니다.
코드에 참조된 출시 일정은 2026년 4월 1~7일 티저, 5월 풀 런치 였습니다. 물론 이번 유출로 이 일정이 변경될 가능성이 높습니다. 현재 KAIROS는 내부 빌드 전용(internal builds only)으로 표시되어 있습니다.
KAIROS가 실현된다면, AI 코딩 도구의 정의 자체가 달라집니다. "프롬프트에 응답하는 도구"에서 "개발 환경을 상시 감시하고 능동적으로 개입하는 동반자"로의 전환입니다. 이것이 Cursor, Copilot, Windsurf 등 경쟁 제품에는 아직 없는 개념이라는 점에서, Anthropic의 기술적 야심이 상당히 앞서 있음을 보여줍니다.
Capybara: 미공개 모델 패밀리
코드에서 Capybara 라는 내부 모델 코드네임이 발견되었습니다. 세 가지 티어로 구성되어 있습니다.
capybara: 기본 모델capybara-fast: 빠른 추론 모델capybara-fast[1m]: 1M 컨텍스트 윈도우를 지원하는 빠른 추론 모델
구체적인 기술 스펙은 코드에서 확인되지 않았지만, 별도의 모델 패밀리 코드네임이 존재한다는 것 자체가 Anthropic이 Claude Code 전용으로 최적화된 모델을 개발 중일 수 있음을 시사합니다. 현재 Claude Code는 Claude Sonnet과 Opus 모델을 사용하지만, Capybara가 코딩 태스크에 특화된 경량 모델일 가능성도 제기되고 있습니다.
Anti-Distillation Defense: 경쟁사를 향한 보이지 않는 방패
발견된 기능 중 가장 논쟁적인 것은 Anti-Distillation Defense 입니다. API 요청에 디코이(decoy) 도구 정의를 주입하여 경쟁 모델이 Claude의 출력을 학습 데이터로 활용하는 것을 방해하는 방어 체계입니다.
이것은 "증류(distillation)" 공격에 대한 대응입니다. 경쟁사가 Claude의 API 출력을 대규모로 수집하여 자사 모델을 학습시키는 행위를 방지하려는 것으로, 의도적으로 오염된 메타데이터를 삽입하여 학습 데이터의 품질을 떨어뜨리는 전략입니다. AI 모델 간의 보이지 않는 군비 경쟁이 이미 코드 수준에서 진행되고 있었다는 증거입니다.
Undercover Mode: 내부 정보 유출을 막는 역설적 기능
Undercover Mode 는 Anthropic 직원이 오픈소스 프로젝트에 기여할 때 내부 정보가 새어나가는 것을 방지하는 시스템입니다. 모델 코드네임, 미공개 버전, 내부 도구명이 커밋이나 PR에 포함되지 않도록 필터링합니다.
Hacker News 사용자 BoppreH는 이 기능이 "인간인 척한다(pretends to be human)"는 점을 지적하며 AI 표현 윤리 논쟁을 촉발했습니다. Anthropic 직원이 Claude Code를 사용해 오픈소스 기여를 할 때, Claude가 Anthropic 내부 정보를 자동으로 필터링한다는 것은, 외부에서 보면 해당 기여가 순수한 개인 기여인지 Anthropic의 전략적 기여인지 구분할 수 없게 만드는 것이기 때문입니다.
그 외 발견된 시스템들
유출된 코드에서는 추가로 여러 시스템이 확인되었습니다. 병렬 워커를 스폰하는 Coordinator Mode 는 색상 코딩된 터미널 에이전트, "mailbox" 권한 큐, 원자적 클레임 메커니즘을 갖추고 있었습니다. 30분 단위 원격 플래닝 기능인 ULTRAPLAN, 정규식 기반 사용자 감정 분석기인 Sentiment Analysis (HN에서 정확도 논쟁이 벌어졌습니다), tengu_ 접두사 Feature Flags 시스템 등도 발견되었습니다.
512,000줄이 보여주는 코드베이스의 실체
미공개 기능만큼이나 흥미로운 것은 Claude Code의 코드베이스 아키텍처 자체입니다.
가장 눈에 띄는 파일은 QueryEngine.ts(46,000줄)입니다. LLM API 호출, 스트리밍, 도구 루프, 토큰 트래킹을 담당하는 이 파일은 Claude Code의 심장부입니다. Tool.ts(29,000줄)는 에이전트 도구 타입 정의와 권한 스키마를, commands.ts(25,000줄)는 슬래시 커맨드 레지스트리를 관리합니다.
그런데 Hacker News에서 가장 많은 논쟁을 불러일으킨 것은 src/cli/print.ts였습니다. 단일 함수가 3,167줄, 486개 분기 로 구성되어 있었기 때문입니다. "AI가 작성한 코드를 AI가 관리하는 시대에, 이런 코드 구조가 허용되는 것인가?"라는 코드 품질 논쟁이 뜨겁게 벌어졌습니다.
기술 스택도 확인되었습니다. Bun 런타임, React + Ink 프레임워크(터미널 UI), Zod v4 스키마 검증, OpenTelemetry와 gRPC의 lazy-load 패턴, 3단계 컨텍스트 압축 시스템(MicroCompact, AutoCompact 13K 토큰 버퍼, Full Compact 50K 토큰 예산)이 사용되고 있었습니다.
권한 시스템은 4단계로 설계되어 있었습니다. Plan Mode(읽기 전용), Default Mode(명시적 승인), Auto Mode(ML 기반 분류기로 액션 리뷰, "research preview" 수준), 그리고 격리 환경 전용의 bypassPermissions입니다. ML 기반 권한 분류가 low/medium/high risk로 위험도를 자동 판단하는 구조였습니다.
두 번째 유출, 왜 같은 실수를 반복했나
이번 사건에서 가장 날카로운 질문은 "왜 같은 실수를 두 번 했는가"입니다.
2025년 초에도 동일한 소스맵 문제로 초기 버전의 소스코드가 유출된 적이 있었습니다. 당시 Anthropic은 조용히 NPM에서 해당 패키지를 삭제하는 것으로 대응했습니다.
"2025년 초에도 유사한 소스맵 문제가 발생했습니다. 당시에는 패키지가 조용히 사라졌습니다. 이번에는 스포트라이트가 훨씬 밝습니다."
(원문: "A similar source map issue surfaced in early 2025. The packages disappeared quietly back then. This time, the spotlight is brighter.")
-- Tech Startups
같은 유형의 실수가 반복되었다는 것은 1차 사고 이후의 사후 조치(post-mortem)가 제대로 이행되지 않았음을 의미합니다. 빌드 파이프라인에 .map 파일 포함 여부를 자동으로 체크하는 CI/CD 가드레일을 추가했어야 했습니다. 화이트리스트 방식의 package.json files 필드를 설정했어야 했습니다. 배포 전 npm pack --dry-run을 필수 단계로 넣었어야 했습니다.
이 모든 조치는 시니어 개발자가 한 시간 이내에 구현할 수 있는 수준입니다. Anthropic 규모의 기업이 이를 놓쳤다는 것은 기술적 무능이라기보다 릴리스 프로세스의 체계적 관리 부재 로 보는 것이 적절합니다.
소스맵 유출은 Claude Code만의 문제가 아닙니다. NPM 생태계에서 구조적으로 반복되는 취약점입니다. 많은 조직이 프로덕션 빌드에 소스맵 파일이 포함되어 있다는 사실 자체를 인지하지 못하고 있습니다. 특히 Bun처럼 비교적 새로운 번들러를 사용하는 경우, 기본 설정값에 대한 이해가 부족해 이런 사고가 발생하기 쉽습니다.
AI 안전 기업의 DevOps 역설
이번 사건의 가장 핵심적인 아이러니를 짚어보겠습니다.
Anthropic은 AI 안전(AI Safety)을 창립 이념으로 내세우는 기업입니다. "책임감 있는 AI 개발"을 핵심 가치로 삼고, Constitutional AI 같은 안전 메커니즘을 선도해 왔습니다. 유출된 코드 자체에도 Anti-Distillation Defense, Undercover Mode, ML 기반 권한 분류 같은 정교한 보안 시스템이 구축되어 있었습니다.
그런데 이 모든 정교한 안전 장치를 무력화시킨 것은 .npmignore 파일에 *.map 한 줄을 추가하지 않은 것이었습니다. AI 모델의 출력을 경쟁사로부터 보호하는 Anti-Distillation Defense를 구축하면서, 정작 자사 소스코드 전체를 NPM 레지스트리에 공개해 버린 셈입니다.
커뮤니티의 반응은 신랄했습니다. "AI 안전 기업이 기본 DevOps를 못한다"는 밈이 소셜 미디어에서 확산되었습니다. 물론 소스코드 유출과 AI 안전은 다른 영역이라는 반론도 있습니다. 하지만 "안전을 최우선으로 한다"고 주장하는 기업이 기초적인 보안 실수를 반복한다면, 그 주장의 신뢰성에 금이 가는 것은 불가피합니다.
커뮤니티가 들끓었다
Hacker News: 881 포인트, 485개 댓글
Hacker News에서의 반응은 폭발적이었습니다. 주요 논쟁 포인트를 정리하면 다음과 같습니다.
Sentiment Regex 논쟁 이 가장 뜨거웠습니다. 유출된 코드에서 정규식 기반의 사용자 감정 분석기가 발견되었는데, "damn", "shit", "fuck" 같은 키워드를 감지하는 방식이었습니다. "빠르고 저렴하지만 약 80%의 부정 감정만 잡는다"는 평가가 나왔고, "What the actual fuck?" 같은 변형은 놓친다는 지적도 있었습니다. 정교한 LLM을 만드는 회사가 사용자 감정은 정규식으로 분석한다는 대조가 웃음을 자아냈습니다.
print.ts 코드 품질 논쟁 도 격렬했습니다. 단일 함수 3,167줄, 486개 분기라는 사실 앞에서 "이것이 현실 세계의 프로덕션 코드"라는 옹호론과 "AI 코딩 도구를 만드는 회사의 코드가 이래서야"라는 비판론이 맞붙었습니다.
Undercover Mode 윤리 논란 도 주목할 만합니다. 사용자 BoppreH가 이 기능이 "인간인 척한다"고 지적하면서 AI 표현 윤리에 대한 진지한 토론이 벌어졌습니다. Anthropic 직원의 오픈소스 기여에서 AI의 개입이 은폐된다면, 이것은 투명성 원칙에 위배되는 것 아닌가 하는 문제 제기였습니다.
보안 역설 에 대한 조롱도 빠지지 않았습니다. AI Safety를 핵심 가치로 내세우는 기업이 .npmignore라는 기초 설정을 놓친 역설을 두고, "AI 안전보다 NPM 안전이 먼저"라는 댓글이 높은 점수를 받았습니다.
GitHub: 아카이브 전쟁
.npmignore도 못 챙긴다. AI Safety보다 NPM Safety가 먼저 아닌가."Anthropic이 NPM에서 해당 버전을 삭제하기 전에 이미 여러 개의 GitHub 아카이브가 생성되었습니다. Kuberwastaken/claude-code 는 소스코드 아카이브와 분석 문서를 함께 제공하며 703 스타, 1,400 포크를 기록했습니다. sanbuphy/claude-code-source-code 는 v2.1.88 소스코드를 그대로 아카이브했습니다.
가장 주목할 만한 파생 프로젝트는 instructkr/clawd-code 입니다. 유출된 소스를 기반으로 Python으로 재구현한 프로젝트로, "Better Harness Tools"를 표방하며 oh-my-codex(OmX) 워크플로우를 사용합니다. Wall Street Journal에서까지 보도될 정도로 관심을 모았습니다.
소셜 미디어
X와 Threads에서는 약 1,000만 뷰, 1,500개 이상의 댓글이 기록되었습니다. 비판적 반응이 주류였지만, 일부 개발자들은 오히려 Claude Code의 정교한 아키텍처에 감탄하는 반응을 보이기도 했습니다. 특히 KAIROS의 상시 에이전트 개념과 AutoDream의 메모리 통합 메커니즘에 대해 "경쟁사보다 최소 1~2분기는 앞서 있다"는 평가가 나왔습니다.
이 사건이 가리키는 방향
Anthropic의 대응이 관건
취재 시점까지 Anthropic의 공식 성명은 나오지 않았습니다. 기술적으로는 NPM에서 소스맵을 제거하고 영향받은 버전을 삭제했지만, 코드는 이미 GitHub에 아카이브되어 회수가 불가능합니다. Tech Startups 보도에 따르면 Anthropic은 "노출된 키를 로테이션하고 릴리스 프로세스를 강화할 것"으로 예상됩니다.
BUDDY와 KAIROS의 운명
코드에서 참조된 4월 1~7일 티저, 5월 풀 런치 일정은 이번 유출로 변경될 가능성이 높습니다. 미리 알려진 서프라이즈는 더 이상 서프라이즈가 아니기 때문입니다. 다만 기능 자체의 개발이 상당히 진행된 상태이므로, 출시 자체가 취소되지는 않을 것으로 보입니다. 오히려 유출로 인한 커뮤니티의 기대감을 활용하여 공식 발표를 앞당길 수도 있습니다.
경쟁사에 미치는 영향
Claude Code의 전체 아키텍처와 미공개 기능이 공개됨에 따라 경쟁사들의 전략 수정이 불가피합니다. 특히 KAIROS의 상시 에이전트 개념은 Cursor, Copilot, Windsurf 등이 아직 시도하지 않은 영역입니다. 이번 유출이 경쟁사들의 유사 기능 개발을 가속화시킬 가능성이 있습니다.
NPM 생태계의 교훈
이번 사건은 NPM 레지스트리 차원에서 소스맵 파일 포함에 대한 경고 메커니즘 논의를 촉발할 수 있습니다. npm publish 시 50MB 이상의 .map 파일이 포함되면 경고를 표시하거나, 배포 전 체크리스트에 소스맵 확인을 포함하는 것만으로도 이런 사고를 줄일 수 있습니다.
개발자가 지금 당장 할 수 있는 것
NPM 패키지를 배포하는 모든 개발자에게 이번 사건은 명확한 교훈을 남깁니다. 첫째, package.json의 files 필드를 화이트리스트 방식으로 설정하세요. 블랙리스트 방식의 .npmignore보다 안전합니다. 둘째, CI/CD 파이프라인에 npm pack --dry-run을 필수 단계로 추가하세요. 셋째, 사용 중인 번들러의 기본 소스맵 설정을 확인하세요. 특히 Bun을 사용한다면 sourcemap: "none"을 명시적으로 설정해야 합니다.
Anthropic의 51만 줄 유출 사건은 AI 코딩 도구 시장의 치열한 경쟁, 소프트웨어 공급망 보안의 취약성, 그리고 "AI 안전"이라는 슬로건과 현실 사이의 간극을 동시에 보여주었습니다. BUDDY와 KAIROS가 공식 출시될 때, 우리는 이미 그 실체를 알고 있게 되었습니다. 문제는 Anthropic이 이 당혹스러운 상황을 어떻게 전환할 것인가입니다.