Claude Code 소스맵 유출 사건 - npm 실수 한 번에 512,000줄 공개, 유출된 Claude Code 소스로 본 미공개 기능 분석 > 고객상담실

 경기건축 로고처음으로경기건축 찾아오시는길관리자 
 

 

Claude Code 소스맵 유출 사건 - npm 실수 한 번에 512,000줄 공개, 유출된 Claude Code 소스로 본…

HELLO 작성일26-06-24 11:34 조회49회 댓글0건

본문


안녕하세요! 고양이임시보호 갓대희 입니다.





2026년 3월 31일 저녁 보안 연구자 Chaofan Shou(@Fried_rice)가 놀라운 사실을 공개했다.
"Claude Code의 전체 소스 코드가 npm 패키지에 그대로 들어있다."

해커의 소행이 아니었다. Anthropic이 빌드 과정에서 소스맵(source map) 파일을 실수로 패키지에 포함시켜 배포한 것이다. 그 결과, 누구든 @anthropic-ai/claude-code 패키지를 설치한 사람이라면 1,906개의 TypeScript 파일, 512,000줄이 넘는 소스 코드를 아무런 제약 없이 들여다볼 수 있게 됐다.

커뮤니티 반응은 즉각적이었다. 불과 몇 시간 만에 독립 분석 문서 사이트가 등장했고, GitHub에 아카이브 저장소가 생겼으며, Hacker News는 뜨겁게 달아올랐다.

한국 커뮤니티에서는 "AGI의 비밀이 수십만 줄의 TypeScript 조건문이었다"는 우스갯소리까지 돌았다.
이 글에서는 단순한 사건 소개를 넘어, 실제로 유출된 코드가 무엇을 드러내는지 깊이 분석한다. 어떻게 유출됐는지, 무엇이 발견됐는지, 그리고 이것이 개발자와 AI 업계에 어떤 의미를 갖는지 정리해보려 한다.


목차

팩트체크: 커뮤니티 주장 vs 실제 수치
소스맵 유출이란 무엇인가 —기술적 배경
두 번째 유출 —왜 반복됐나

2025년 첫 번째 사건과의 차이


유출 규모와 기술 스택 분석
핵심 아키텍처: 드러난 설계의 비밀

에이전트 파이프라인 구조
멀티에이전트 오케스트레이션
권한 시스템 설계
IDE 브리지와 보안


숨겨진 미출시 기능들

BUDDY &mdash18종 상세 사양
KAIROS &mdash4개 전용 도구
ULTRAPLAN —원격 Opus 계획 엔진
Capybara 모델 패밀리
betas.ts 피처 플래그 전체 목록
숨겨진 슬래시 커맨드 17개
출시 타임라인 예측


내부 안전장치 &amp기술 분석

Undercover Mode &mdashCo-Authored-By 헤더 삭제 포함
ANTI_DISTILLATION_CC —경쟁사 방어
감정 분석: 정규식 vs LLM
코드 품질 위기: 테스트 없는 64,464줄
텔레메트리: 1,000개+ 이벤트 &amptengu_frond_boric


커뮤니티 반응과 논쟁 포인트
Anthropic의 대응과 법적 맥락
개발자가 알아야 할 인사이트

CLAUDE.md 로딩 순서 (4단계 우선순위)
system-reminder 주입 타이밍


트러블슈팅 Q&A
결론: 의도치 않은 오픈소스의 교훈



한눈에 보는 사건 요약 (2026-03-31 기준, v2.1.88)




항목
내용
출처




유출 날짜
2026-03-31 (두 번째 사건)
PiunikaWeb


발견자
Chaofan Shou (@Fried_rice)
CyberSecurityNews


유출 파일
cli.js.map (~59.8MB)
TheHuman2AI


TypeScript 파일 수
1,906개 (node_modules 포함 총 4,756개)
GitHub 아카이브


실제 코드 줄 수
512,000줄+ (커뮤니티 "80만 줄"은 과장)
DEV.to 분석


내부 고양이임시보호 코드명
"Tengu" (100개 이상의 피처 플래그에 접두사로 사용)
소스 분석


Anthropic 대응
공개 성명 없음, npm 패키지 업데이트로 소스맵 제거
TechStartups






1. 팩트체크: 커뮤니티 주장 vs 실제 수치
소셜미디어에 퍼진 정보 중 일부는 과장됐거나 부정확하다. 먼저 팩트를 정리한다.



주장
판정
실제




"해커가 뚫었다"
X
Anthropic의 빌드/배포 실수 (소스맵 미제거)


"80만 줄의 TypeScript"
과장
512,000줄+ (약 51만 줄). 80만은 node_modules 포함 시 근사치


"처음 있는 일"
X
2025년 2월 24일에 이미 한 번 발생. 이번이 두 번째


"모델 가중치도 유출"
X
CLI 프론트엔드 코드만 유출. 모델 가중치·학습 데이터 없음


"4,756개 파일"
사실
Claude Code 1,906개 + node_modules 2,850개 = 4,756개


"파일 크기 57MB"
근사치
정확히는 59.8MB (출처에 따라 "57MB" 또는 "59.8MB" 혼용)


mintlify 분석 문서 "수 시간 만에 등장"
사실
mintlify.com/VineeTagarwaL-code/ 당일 공개



오늘이 4월 1일입니다. 즉 만우절 ????일부 커뮤니티에서는 이 사건이 Anthropic의 에이프릴 풀(April Fools) 마케팅이라는 주장도 나온다. 실제로 소스 코드에는 BUDDY 기능의 "April 1-7, 2026 teaser window"가 명시되어 있다. 그러나 소스맵 유출 자체는 2025년에도 있었던 실수의 반복이며, Anthropic이 신속히 패키지를 수정한 것으로 보아 의도된 공개가 아닌 것으로 판단된다.


2. 소스맵 유출이란 무엇인가 —기술적 배경
이 사건을 이해하려면 먼저 소스맵(source map)이 무엇인지 알아야 한다.



소스맵이란?
TypeScript나 JavaScript 코드를 배포할 때는 보통 다음 과정을 거친다:

TypeScript 컴파일 &mdash.ts 파일을 .js로 변환
번들링 + 최소화(minification) —여러 파일을 하나로 합치고 변수명을 짧게 압축
(선택) 소스맵 생성 —압축된 코드와 원본 소스의 위치를 매핑한 .map 파일 생성

소스맵은 원래 개발자 도구(DevTools)에서 디버깅할 때 "압축된 코드 line 1, column 5432" 대신 "원본 파일 auth.ts line 42"처럼 보여주기 위한 도구다. 프로덕션 배포 시에는 포함하지 않거나, 내부 서버에만 배포하는 것이 관례다.

{
"version": 3,
"file": "cli.js",
"sources": [
"../../src/main.tsx",
"../../src/agent/pipeline.ts",
"../../src/tools/bash.ts"
// ... 1,906개 파일
],
"sourcesContent": [
// ←여기에 원본 TypeScript 소스 고양이임시보호 전체가 문자열로 포함됨
"import React from 'react';\nimport { render } from 'ink';\n..."
]
}

Claude Code의 빌더인 Bun은 기본 설정에서 소스맵을 생성한다. 배포 파이프라인에서 이를 명시적으로 제외하지 않으면 npm 패키지에 그대로 포함된다. 이것이 바로 이번 사건의 원인이다.
핵심 원인 요약"해킹"이 아니다. Bun 빌더의 기본 소스맵 생성 + npm publish 파이프라인에서 .npmignore 또는 package.json의 files 필드로 제외하지 않아 발생한 설정 누락 오류다. (출처: Saudi Shopper 분석)


3. 두 번째 유출 —왜 반복됐나
이번이 처음이 아니다. 놀랍게도 수백 개 버전을 사이에 두고 똑같은 일이 반복됐다.



두 사건 비교



항목
1차 유출 (2025-02-24)
2차 유출 (2026-03-31)




방식
인라인 base64 인코딩 소스맵
별도 파일 cli.js.map


발견자
Dave Shoemaker
Chaofan Shou (@Fried_rice)


크기
약 1,800만 자 (base64)
59.8MB 파일


Anthropic 대응 시간
약 2시간 내 제거
패키지 업데이트 및 구버전 삭제


추가 영향 패키지
없음
@anthropic-ai/claude-agent-sdk도 포함 [UNVERIFIED —복수 소스에서 미확인]


커뮤니티 아카이브
Daniel Nakov GitHub 저장소
Kuberwastaken, instructkr, nirholas 외 다수



한 줄 요약: 1차에서는 인라인 base64 방식이 문제였고, 2차에서는 별도 파일 방식이 문제였다. 배포 방식은 바뀌었지만 근본 원인(소스맵 제외 로직 누락)은 동일했다.
핵심 교훈Bun 번들러는 기본적으로 소스맵을 생성한다. npm 패키지를 배포할 때 package.json의 files 필드 또는 .npmignore에서 *.map 파일을 명시적으로 제외해야 한다. 이 누락이 수백 개 버전 동안 수정되지 않아 두 번째 사고를 만들었다. [UNVERIFIED —두 유출 사이의 정확한 릴리스 수는 npm 레지스트리에서 직접 확인 필요]


4. 유출 규모와 기술 스택 분석
소스코드가 드러낸 첫 번째 사실은 Claude Code가 얼마나 정교하게 설계됐는지다.

코드베이스 규모 (2026-03-31 기준)



항목
수치




TypeScript/TSX 파일
1,906개


총 코드 줄 수
512,000줄+


디렉토리 수
55개


엔트리포인트 파일 크기
main.tsx &mdash785KB


최대 단일 모듈
Query Engine &mdash46,000줄


Tool 기반 코드
29,000줄


내장 도구 수
40개+


슬래시 커맨드 수
50개+




기술 스택: 예상 밖의 선택들
많은 개발자가 가장 놀란 부분은 기술 선택이었다. Node.js를 쓸 것이라는 예상을 깨고 고양이임시보호 훨씬 현대적인 스택을 사용했다.





레이어
기술
선택 이유




런타임
Bun (Node.js 아님)
Dead code elimination, 빠른 시작 시간


터미널 UI
React + Ink
컴포넌트 기반 터미널 렌더링, 상태 관리


유효성 검사
Zod v4
API 응답, 설정, 입력값 스키마 검증


모듈 로딩
지연 로딩(Lazy Load)
OpenTelemetry, gRPC 등 무거운 의존성 지연 로드


옵저버빌리티
Datadog
감정 신호, 세션 메타데이터, 모델 사용 로그 전송


인증
OAuth + API 키
대화형 세션 / CI·비대화형 시나리오 분리





5. 핵심 아키텍처: 드러난 설계의 비밀
에이전트 파이프라인 구조
가장 큰 단일 모듈인 Query Engine(46,000줄)은 LLM API 호출, 스트리밍, 캐싱, 전체 오케스트레이션을 담당한다.
도구 시스템은 29,000줄의 TypeScript로 구성된 플러그인 아키텍처로, 각 도구는 권한 게이트(permission gate)를 통과해야 실행된다.

권한 모드는 4가지로 정의된다:





모드
동작




default
모든 액션에 사용자 승인 필요


acceptEdits
파일 변경 자동 적용, 셸 명령은 승인 필요


plan
실행 전 계획 승인 요청


bypassPermissions
제한 없음 (샌드박스 전용)



도구 액션은 LOW/MEDIUM/HIGH 위험도로 분류되며, YOLO Classifier라는 ML 기반 자동 승인 모듈이 저위험 액션을 자동 처리한다. 경로 순회 공격 방지(Unicode 정규화, 백슬래시 주입 차단)와 보호 파일 목록(.gitconfig, .bashrc, .mcp.json)도 코드에서 확인됐다.

에이전트 루프 내부 동작 &mdash6단계


유출 코드 분석을 토대로 작성된 커뮤니티 아키텍처 문서는 Claude Code의 매 턴이 다음 6단계로 실행됨을 보여준다.



단계
동작
소스 구현




① 메시지 수신
대화형(REPL) 또는 --print/stdin 비대화형 모드로 입력 수신, 대화 이력에 추가
React/Ink UI 또는 stdout


② 컨텍스트 조립
API 호출 전 시스템 프롬프트 구성 —현재 날짜, Git 상태(git status --short 2000자 제한), 최근 커밋 5개, CLAUDE.md, 도구 목록
context.ts &mdashlodash/memoize로 대화당 1회만 생성


③ 모델 추론
Anthropic API로 대화 전송 →모델이 tool_use 블록(도구명 + JSON 입력) 생성
query.ts —토큰 스트리밍, 턴별 예산 제한


④ 권한 확인
각 도구의 checkPermissions()가 allow/ask/deny 결정. Read·Glob·Grep은 모든 모드에서 자동 승인
권한 모드 4가지 (위 표 참조)


⑤ 도구 실행
승인된 도구 실행 →결과를 tool_result 블록으로 고양이임시보호 추가. 결과가 maxResultSizeChars 초과 시 임시 파일로 저장하고 경로만 전달
파일·셸·자격증명은 기기 밖으로 나가지 않음


⑥ 루프 반복
모델이 결과를 받아 추가 도구를 호출하거나 최종 응답 생성. 컨텍스트 창이 차면 query.ts가 자동 압축 트리거
전체 트랜스크립트는 ~/.claude/에 JSON으로 보존



원격 서버 없음Claude Code에는 별도의 원격 실행 서버가 없다. 파일, 셸, 자격증명은 도구가 명시적으로 전송하지 않는 한 사용자 기기를 벗어나지 않는다. (출처: 커뮤니티 아키텍처 문서)

멀티에이전트 오케스트레이션


코드에는 "swarm" 또는 "Coordinator Mode"로 명명된 멀티에이전트 시스템이 구현돼 있다.
각 서브에이전트는 격리된 컨텍스트와 특정 도구 권한을 갖고 병렬로 실행된다.
파이프라인은 연구(Research) →합성(Synthesis) →구현(Implementation) →검증(Verification) 단계로 구성되며, 팀 메모리 동기화와 색상 코드 구분으로 여러 에이전트를 시각적으로 구별한다.

IDE 브리지와 보안
VS Code와 JetBrains 확장과 CLI 간의 연결은 JWT 인증 기반 양방향 통신 레이어로 구현됐다. 단순한 프로세스 간 통신이 아니라 독립적인 보안 레이어를 두었다는 점이 눈에 띈다.


6. 숨겨진 미출시 기능들
커뮤니티가 가장 흥분한 부분이다. 소스코드에는 아직 사용자에게 공개되지 않은 기능들이 다수 존재했다.

① BUDDY &mdashAI 반려동물



무엇인가: Claude Code 입력창 옆 말풍선(speech bubble)에 앉아있는 다마고치(Tamagotchi) 스타일 ASCII 아트 가상 반려동물. 개발 세션을 지켜보며 이름을 부르면 Claude와 독립적으로 반응한다. 이 글이 작성된 시점의 Claude Code에 앉아 있는 Bellows는 18종 중 chonk(통통이) 종이다.

18종 (species) 목록 —소스코드 직접 확인
duck(오리) &middotgoose(거위) &middotblob(블롭) &middotcat(고양이) &middotdragon(드래곤) &middotoctopus(문어) &middotowl(올빼미) &middotpenguin(펭귄) &middotturtle(거북이) &middotsnail(달팽이) &middotghost(유령) &middotaxolotl(아홀로틀) &middotcapybara(카피바라) &middotcactus(선인장) &middotrobot(로봇) &middotrabbit(토끼) &middotmushroom(버섯) &middotchonk(통통이)
※ 18종 중 특정 1종 이름이 String.fromCharCode()로 난독화되어 있음 &mdashAnthropic 내부 excluded-strings.txt의 모델 코드명 canary와 충돌하기 때문

희귀도(Rarity) 확률표 —소스코드 직접 확인



등급
확률

스탯 플로어




Common (커먼)
60%

5


Uncommon (언커먼)
25%
★★
15


Rare (레어)
10%
★★★
25


Epic (에픽)
4%
★★★★
35


Legendary (레전더리)
1%
★★★★★
50


Shiny (샤이니)
별도 1%
희귀도와 독립




※ Shiny Legendary = 0.01% (약 1/10,000). Shiny는 희귀도와 완전히 독립적인 별도 고양이임시보호 판정.

5가지 스탯 (0~100 범위) —소스코드 직접 확인



스탯
의미




DEBUGGING
버그 탐지 능력


PATIENCE
에러 루프에도 침착함


CHAOS
혼돈 / 예측불가 성향


WISDOM
지혜 / 통찰


SNARK
냉소 / 짓궂음



※ 스탯 생성 방식: Peak stat(특기) = floor+50~100, Dump stat(약점) = 1~15, 나머지 3개 = floor~floor+40 범위에서 결정

모자(Hat) 희귀도 게이팅 —소스코드 직접 확인



모자
해금 조건




없음 (none)
Common (모자 없음)


crown (왕관) &middottophat (중절모) &middotpropeller (프로펠러)
Uncommon 이상


halo (후광) &middotwizard (마법사)
Rare 이상


beanie (비니)
Epic 이상


tinyduck (꼬마오리 모자)
Legendary 전용




눈 타입 6종 —소스코드 직접 확인
· ✦ × ◉ @ °

/buddy 커맨드 전체 목록



커맨드
동작




/buddy
최초 실행 시 hatch 애니메이션, 이미 있으면 현재 buddy 표시. 4월 1~7일 기간에는 무지개색 효과


/buddy pet
하트(♥) 플로팅 애니메이션 2.5초


/buddy card
ASCII 스프라이트 + 전체 스탯 + 희귀도 카드 표시


/buddy mute
말풍선 숨기기


/buddy unmute
말풍선 다시 표시


/buddy off
Buddy 완전 숨김



※ buddy 이름(예: "Bellows")을 대화 중 직접 부르면 Claude와 별개로 말풍선이 반응함. 스프라이트 규격: 5줄 높이 &times12자 너비 ASCII, 3개 애니메이션 프레임.

가챠 시스템 구조 (결정론적 PRNG) —소스코드 직접 확인

해시 함수: FNV-1a &mdashuserId + salt을 32비트 시드로 변환
난수 생성기: Mulberry32 (경량 32비트 PRNG)
시드 솔트: 'friend-2026-401' (2026-04-01 출시 날짜 암시)
동일 userId →항상 동일한 종/희귀도/외형 ("bones") 보장 —결정론적 재계산
AI 생성 부분 "soul"(이름, 성격, hatch 날짜)만 config에 1회 저장
Anti-cheat: bones는 매 세션 userId로부터 재계산 &rarrconfig 파일 수정으로 Legendary 위장 불가


출시 일정 (소스 하드코딩 기준)

4월 1~7일: teaser window —무지개색 알림으로 /buddy 입력 유도
4월 8일 이후: 커맨드 영구 활성화 예정
2026년 5월: full launch 타겟 (내부 주석 기준)
에이프릴 풀(April Fools) 티저인지 실제 출시 일정인지 현재 미확인

ex) /buddy 입력시 무지개 색으로 변경된다.


- 난 레어???? CHONK


- 채팅, status bar 우측에 붙어버렸다.



- buddy pet 입력






② KAIROS —항상 켜져있는 Claude



무엇인가: 사용자가 타이핑하기를 기다리지 않는 고양이임시보호 지속적 백그라운드 Claude 인스턴스. 활동을 모니터링하고, 일별 append-only 로그를 기록하며, 정기적으로 ;로 주입됨 —이 블로그의 .claude/rules/ 설정도 같은 메커니즘


system-reminder 주입 타이밍 (소스 확인):



타이밍
주입되는 컨텍스트




대화 시작
CLAUDE.md 전체 + 현재 날짜


매 5턴마다
deferred 도구 목록, 스킬 목록, 에이전트 목록, 관련 메모리, 계획 리마인더, MCP 지시사항


매 25턴마다
전체 컨텍스트 리마인더 (전체 내용 재주입)


도구 결과 내부
FileRead: 빈 파일 경고 / 멀웨어 분석 가드레일 / Hook 실행 결과


자정
날짜 변경 알림



개발자 활용법.claude/rules/*.md에 frontmatter globs를 설정하면 특정 파일 타입을 편집할 때만 추가 지시사항이 자동 주입된다. 예: Python 파일 작업 시에만 코딩 컨벤션 규칙 적용, HTML 파일 작업 시에만 Tistory 포맷 규칙 적용.


11. 트러블슈팅 Q&A

Q1. 유출된 소스코드로 Claude Code를 직접 빌드할 수 있나?
실행 가능한 CLI를 복제할 수는 있지만, Claude 모델 자체는 포함되지 않는다. API 키가 있어야 하며, 이는 Anthropic의 서비스 약관 적용을 받는다. 기술적 가능성과 법적 허용은 별개다.


Q2. 내 개인 데이터가 유출됐나?
아니다. 이번 유출은 Claude Code의 클라이언트 소스 코드이며, 사용자 데이터와 무관하다. 노출된 것은 아키텍처와 기능 코드다.


Q3. ANTI_DISTILLATION_CC가 내 작업에 영향을 주나?
일반 사용자에게는 영향이 없다. 경쟁사의 모델 학습 파이프라인을 타겟으로 한 기능이다. 정상적인 코딩 작업에서는 동작하지 않는다.


Q4. BUDDY나 KAIROS를 지금 사용할 수 있나?
현재 공개 버전에서는 사용 불가능하다. 피처 플래그 뒤에 잠겨 있으며, 서버 사이드 활성화가 필요하다. BUDDY는 2026년 4월 1일 풀렸다.


Q5. Mintlify 분석 문서는 공식 문서인가?
아니다. mintlify.com/VineeTagarwaL-code/claude-code/는 커뮤니티가 독립적으로 작성한 비공식 분석 문서다. 공식 문서는 code.claude.com/docs에서 확인할 수 있다.


Q6. Undercover Mode는 일반 사용자에게도 활성화되나?
소스 분석에 따르면 이 기능은 Anthropic 내부 직원이 공개 저장소를 작업할 때 활성화되는 것으로 보인다. 일반 사용자에게는 적용되지 않는다. [ESTIMATE] 다만 고양이임시보호 공식 확인이 필요하다.



12. 결론: 의도치 않은 오픈소스의 교훈


이번 사건에서 주목해야 할 점은 세 가지다.

첫째, 정보는 막을 수 없다. Anthropic이 소스맵을 제거했지만 GitHub 아카이브, Mintlify 문서, 분산된 복사본은 이미 존재한다. 2025년 첫 번째 유출 때도 그랬다. 코드를 통한 경쟁 우위는 점점 더 유지하기 어려워지고 있다.

둘째, 집단 지성의 속도는 놀랍다. 유출 발생에서 전문 분석 문서 등장까지 수 시간. 이 속도는 앞으로도 가속될 것이다. "숨겨진 것은 없다"는 가정 하에 설계하는 것이 더 현실적이다.

셋째, Claude Code의 실질적 가치는 코드가 아니다. 512,000줄이 공개됐지만 Claude 모델을 복제할 수는 없다. Anthropic의 진짜 해자는 모델 품질, 인프라, 그리고 지속적 업데이트다. 이번 사건은 역설적으로 Anthropic의 강점이 어디에 있는지를 보여준다.
개발자를 위한 행동 지침

오늘: 자신의 npm 패키지에 *.map 파일이 포함됐는지 확인 (npm pack --dry-run)
이번 주: Mintlify 분석 문서를 읽고, Claude Code 아키텍처에서 자신의 에이전트 설계에 적용할 점을 찾아보기
장기적으로: KAIROS, ULTRAPLAN 등 미출시 기능이 공개될 때 빠르게 활용할 수 있도록 아키텍처 패턴을 이해해두기



참고 자료
공식 문서

Claude Code 공식 문서
@anthropic-ai/claude-code npm 패키지

커뮤니티 분석

How Claude Code Works &mdashMintlify 커뮤니티 분석
HN: Claude Code's source code has been leaked via a map file
GitHub: Kuberwastaken/claude-code (소스 아카이브 + 분석)
DEV.to: Claude Code's Entire Source Code Was Just Leaked

뉴스 보도

PiunikaWeb: Claude Code source appears to have been leaked
TechStartups: Capybara models and AI pet revealed
CyberSecurityNews: Claude Code Source Code Leaked
TheHuman2AI: Claude Code source available for 13 months
MLQ.ai: Second time packaging error

댓글목록

등록된 댓글이 없습니다.