Claude Code 소스맵 유출 사건 - npm 실수 한 번에 512,000줄 공개, 유출된 Claude Code 소스로 본 미공개 기능 분석
- -
안녕하세요! 갓대희 입니다.

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 — 18종 상세 사양
- KAIROS — 4개 전용 도구
- ULTRAPLAN — 원격 Opus 계획 엔진
- Capybara 모델 패밀리
- betas.ts 피처 플래그 전체 목록
- 숨겨진 슬래시 커맨드 17개
- 출시 타임라인 예측
- 내부 안전장치 & 기술 분석
- Undercover Mode — Co-Authored-By 헤더 삭제 포함
- ANTI_DISTILLATION_CC — 경쟁사 방어
- 감정 분석: 정규식 vs LLM
- 코드 품질 위기: 테스트 없는 64,464줄
- 텔레메트리: 1,000개+ 이벤트 & tengu_frond_boric
- 커뮤니티 반응과 논쟁 포인트
- Anthropic의 대응과 법적 맥락
- 개발자가 알아야 할 인사이트
- CLAUDE.md 로딩 순서 (4단계 우선순위)
- system-reminder 주입 타이밍
- 트러블슈팅 Q&A
- 결론: 의도치 않은 오픈소스의 교훈

| 항목 | 내용 | 출처 |
|---|---|---|
| 유출 날짜 | 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/ 당일 공개 |
일부 커뮤니티에서는 이 사건이 Anthropic의 에이프릴 풀(April Fools) 마케팅이라는 주장도 나온다. 실제로 소스 코드에는 BUDDY 기능의 "April 1-7, 2026 teaser window"가 명시되어 있다. 그러나 소스맵 유출 자체는 2025년에도 있었던 실수의 반복이며, Anthropic이 신속히 패키지를 수정한 것으로 보아 의도된 공개가 아닌 것으로 판단된다.
2. 소스맵 유출이란 무엇인가 — 기술적 배경
이 사건을 이해하려면 먼저 소스맵(source map)이 무엇인지 알아야 한다.

소스맵이란?
TypeScript나 JavaScript 코드를 배포할 때는 보통 다음 과정을 거친다:
- TypeScript 컴파일 — .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 — 785KB |
| 최대 단일 모듈 | Query Engine — 46,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)도 코드에서 확인됐다.
에이전트 루프 내부 동작 — 6단계

유출 코드 분석을 토대로 작성된 커뮤니티 아키텍처 문서는 Claude Code의 매 턴이 다음 6단계로 실행됨을 보여준다.
| 단계 | 동작 | 소스 구현 |
|---|---|---|
| ① 메시지 수신 | 대화형(REPL) 또는 --print/stdin 비대화형 모드로 입력 수신, 대화 이력에 추가 |
React/Ink UI 또는 stdout |
| ② 컨텍스트 조립 | API 호출 전 시스템 프롬프트 구성 — 현재 날짜, Git 상태(git status --short 2000자 제한), 최근 커밋 5개, CLAUDE.md, 도구 목록 |
context.ts — lodash/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 — AI 반려동물

무엇인가: Claude Code 입력창 옆 말풍선(speech bubble)에 앉아있는 다마고치(Tamagotchi) 스타일 ASCII 아트 가상 반려동물. 개발 세션을 지켜보며 이름을 부르면 Claude와 독립적으로 반응한다. 이 글이 작성된 시점의 Claude Code에 앉아 있는 Bellows는 18종 중 chonk(통통이) 종이다.
18종 (species) 목록 — 소스코드 직접 확인
duck(오리) · goose(거위) · blob(블롭) · cat(고양이) · dragon(드래곤) · octopus(문어) · owl(올빼미) · penguin(펭귄) · turtle(거북이) · snail(달팽이) · ghost(유령) · axolotl(아홀로틀) · capybara(카피바라) · cactus(선인장) · robot(로봇) · rabbit(토끼) · mushroom(버섯) · chonk(통통이)
※ 18종 중 특정 1종 이름이 String.fromCharCode()로 난독화되어 있음 — Anthropic 내부 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 (왕관) · tophat (중절모) · propeller (프로펠러) | Uncommon 이상 |
| halo (후광) · wizard (마법사) | 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줄 높이 × 12자 너비 ASCII, 3개 애니메이션 프레임.
가챠 시스템 구조 (결정론적 PRNG) — 소스코드 직접 확인
- 해시 함수: FNV-1a — userId + salt을 32비트 시드로 변환
- 난수 생성기: Mulberry32 (경량 32비트 PRNG)
- 시드 솔트:
'friend-2026-401'(2026-04-01 출시 날짜 암시) - 동일 userId → 항상 동일한 종/희귀도/외형 ("bones") 보장 — 결정론적 재계산
- AI 생성 부분 "soul"(이름, 성격, hatch 날짜)만 config에 1회 저장
- Anti-cheat: bones는 매 세션 userId로부터 재계산 → config 파일 수정으로 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 로그를 기록하며, 정기적으로 <tick> 프롬프트를 받아 "행동할지 조용히 있을지" 결정한다. 사용자 워크플로우를 15초 이상 블로킹하는 모든 선제적 행동은 자동으로 연기된다(15초 블로킹 예산).
전용 도구 (일반 Claude Code에서는 사용 불가):
SendUserFile— 사용자에게 파일 직접 전송PushNotification— 알림 푸시SubscribePR— PR 이벤트 구독SleepTool— 지정된 시간 동안 실행 일시 중단 (백그라운드 에이전트 스케줄링 전용)
추가 메모리 통합: Dream 기능(메모리 통합 에이전트)을 내장해 idle 시간에 24시간/5세션 주기로 메모리를 정리한다 — 필자가 이전에 분석한 Auto Dream 기능의 실제 내부 구현체가 여기에 있었다.
③ ULTRAPLAN — 원격 Opus 계획 엔진

무엇인가: 복잡한 계획 작업을 Cloud Container Runtime(CCR) 세션에서 실행 중인 Opus 4.6에게 위임하는 기능. 최대 30분간 실행 가능하며, 결과가 나오면 로컬 터미널로 "텔레포트"된다. 실행 전 브라우저 기반 승인 워크플로우가 있어, 사용자가 Opus가 제안한 계획을 검토 후 적용 여부를 결정한다.
(출처: DEV.to 분석)
④ Capybara 모델 패밀리

소스에서 발견된 미공개 모델 코드명:
capybara— 표준 버전capybara-fast— 빠른 버전capybara-fast[1m]— 빠른 버전 + 1M 컨텍스트
Claude Code 내부 프로젝트 코드명인 "Tengu"는 수백 개의 피처 플래그와 애널리틱스 이벤트에 접두사로 사용된다. 내부적으로 Tengu = Claude Code다.
⑤ betas.ts 피처 플래그 전체 목록

betas.ts 파일에서 확인된 15개 이상의 미출시 기능:
| 플래그 | 내용 |
|---|---|
| interleaved thinking | 확장 추론 중간 삽입 |
| 1M token context | 100만 토큰 컨텍스트 윈도우 |
| structured outputs | 구조화된 출력 |
| web search integration | 웹 검색 통합 |
| AFK mode | 자리 비움 자율 실행 모드 |
| Fast Mode ("Penguin Mode") | 내부명 "Penguin Mode", 빠른 응답 모드 |
| redacted thinking | 추론 과정 숨김 출력 |
| advisor tool | 자문 전용 도구 |
| token-efficient tool schemas | 토큰 효율적 도구 스키마 |
| connector text summarization | 커넥터 텍스트 요약 |
⑥ 숨겨진 슬래시 커맨드 & CLI 서브커맨드
소스에서 확인된 미공개 명령어들. 현재 일반 사용자 빌드에서는 feature flag로 차단되어 있다.
(출처: aldegad 분석, 2026-03-31)
| 커맨드 | 연결 기능 |
|---|---|
/ultraplan |
ULTRAPLAN — 원격 Opus 4.6 30분 계획 |
/buddy |
BUDDY — AI 반려동물 소환 |
/dream |
KAIROS_DREAM — 메모리 통합 에이전트 실행 |
/fork |
FORK_SUBAGENT — 대화를 서브에이전트로 포크 |
/loop |
AGENT_TRIGGERS — Cron 기반 자동 실행 |
/schedule |
AGENT_TRIGGERS_REMOTE — 원격 스케줄 실행 |
/subscribe-pr |
KAIROS_GITHUB_WEBHOOKS — PR 이벤트 구독 |
/brief |
KAIROS_BRIEF — 간략 요약 모드 |
/peers |
UDS_INBOX — Unix Domain Socket 피어 메시지 |
/workflows |
WORKFLOW_SCRIPTS — 커스텀 워크플로우 실행 |
/thinkback |
GrowthBook 런타임 게이트 — 추론 재검토 |
/torch |
TORCH — 소스에서 목적 불명확 |
claude daemon |
DAEMON — 백그라운드 수퍼바이저 프로세스 |
claude remote-control |
BRIDGE_MODE — 원격 환경 브리지 |
claude --bg |
BG_SESSIONS — 백그라운드 세션 |
claude ps / logs / attach / kill |
BG_SESSIONS — 백그라운드 세션 관리 |
claude --computer-use-mcp |
CHICAGO_MCP — macOS 컴퓨터 제어 |
⑦ 출시 타임라인 예측 (aldegad 분석)
[ESTIMATE] 소스 완성도와 feature flag 상태를 기반으로 한 분석팀 예측이다. 공식 Anthropic 발표가 아님을 명심하라.
(출처: aldegad 분석, 2026-03-31)
| 기능 | 예상 출시 | 근거 |
|---|---|---|
| TRANSCRIPT_CLASSIFIER (auto 모드) | 이미 부분 공개 | 외부 빌드 포함, GrowthBook 점진 롤아웃 |
BG_SESSIONS (claude --bg) |
2026 Q2-Q3 | 높은 코드 완성도 |
| AGENT_TRIGGERS (/loop, /schedule) | 2026 Q2-Q3 | TODO(public-ship) 주석 존재 |
| BRIDGE_MODE (remote-control) | 2026 Q2 | ant 빌드 활성화, GrowthBook 게이트 |
| COORDINATOR_MODE | 2026 Q3 | 코드 안정, 런타임 게이트 |
| VOICE_MODE | 2026 Q3-Q4 | WebSocket STT 완성, OAuth 통합 |
| KAIROS (always-on Claude) | 2026 H2 | 6개 서브플래그, 최대 범위 |
| ULTRAPLAN | 2026 Q3-Q4 | CCR 의존성, prod-hardening TODO |
| CHICAGO_MCP (Computer Use) | 2026 H2 | macOS 전용, Computer Use 통합 |
한 줄 요약: KAIROS + COORDINATOR_MODE + AGENT_TRIGGERS + BG_SESSIONS + DAEMON이 모두 출시되면, Claude Code는 "에디터 어시스턴트"에서 "24시간 자율 에이전트 플랫폼"으로 진화한다. 이번 유출은 그 설계도를 우연히 공개한 셈이다.
7. 내부 안전장치: 충격적인 두 가지 발견
가장 논쟁적이었던 두 가지 코드다. 기술적 흥미를 넘어 윤리적 질문을 던진다.
① Undercover Mode — 위장 모드

소스에서 발견된 시스템 프롬프트 일부:
"You are operating UNDERCOVER...
Your commit messages and code comments MUST NOT contain ANY
Anthropic-internal information. Do not blow your cover.
If we're not confident we're internal, we stay undercover."
이 모드는 Anthropic 직원이 공개 저장소에서 Claude Code를 사용할 때 활성화된다. 다음 정보를 자동으로 제거한다:
- Git Co-Authored-By 헤더 완전 삭제 — AI 기여를 나타내는 커밋 트레일러를 자동 제거해 AI가 작성했음을 숨긴다 (소스 확인)
- 커밋 메시지 스타일 변경 — 시스템 프롬프트에 "write commits as a human developer would" 지시가 포함됨 (소스 확인)
- 내부 모델 코드명 (Capybara, Tengu 등 동물명)
- 미공개 버전 번호
- 내부 툴링 참조
- "Claude Code"라는 단어 자체
기술적으로는 커밋 메시지·PR 제목·PR 본문에서 Anthropic 내부 정보(Capybara, Tengu 같은 코드네임 등)가 공개 저장소에 노출되는 것을 방지하는 기능이다.
그러나 커뮤니티에서는 "AI가 작성한 기여물임을 숨기는 것 아니냐"는 우려로 번졌고, HN에서는 "기여자 투명성"과 "도구 선택의 자유" 사이의 경계에 대한 토론이 이어졌다.
이 기능의 실제 의도와 커뮤니티의 해석 사이에 간극이 있음을 염두에 두어야 한다.
(출처: Hacker News #47584540)
② ANTI_DISTILLATION_CC — 경쟁사 방어 장치

코드에서 ANTI_DISTILLATION_CC라는 이름의 컴포넌트가 발견됐다.
이 컴포넌트는 API 요청에 가짜 도구 정의(decoy tool definitions)를 삽입한다.
커뮤니티에서는 경쟁사가 Claude Code와의 대화 데이터를 모델 증류(model distillation)에 활용하려 할 때 학습 데이터를 오염시키기 위한 목적으로 해석하고 있다.
Anthropic이 공식적으로 이 의도를 확인하지는 않았다.
HN에서는 이에 대한 반응이 둘로 나뉘었다:
- 옹호론: 자사 API로 생성된 데이터를 경쟁사가 무단 학습하는 것에 대한 정당한 방어
- 비판론: 표준 API 계약 이상의 "데이터 독성" 행위는 신뢰를 훼손한다
이것이 의미하는 바: Anthropic은 단순히 최고의 모델을 만드는 것을 넘어, 자사 기술이 경쟁사에 흡수되는 것을 코드 레벨에서 적극적으로 방어하고 있다. 이는 AI 산업에서 지식재산권 방어 전략이 얼마나 세밀해졌는지를 보여준다.
③ 감정 분석: 정규식 vs LLM
소스에는 사용자 불만 감지를 위한 정규식 기반 감정 분석 코드가 있다. 욕설, "continue" 반복 패턴, 좌절 신호를 감지해 Datadog으로 전송한다. 이 설계 선택이 HN에서 뜨거운 토론을 낳았다.
| 질문 | 답변 |
|---|---|
| 왜 LLM 대신 정규식? | 속도, 결정론, 비용 효율성 — 모든 요청에 추가 LLM 호출은 과잉 |
| 정확도는? | 공식 수치 없음 — 정규식 기반이므로 LLM 대비 정밀도가 낮을 것으로 추정되나, 로깅 목적으로는 충분한 수준으로 보인다 |
| 오탐(false positive) 방지? | 단어 경계(\b) 사용 — "offset"에서 "ffs" 오탐 방지 |
④ 코드 품질 위기: 테스트 없는 64,464줄

aldegad.github.io 분석팀(Rumi, Sami)이 1,892개 TypeScript/TSX 파일을 전수 조사한 결과, 심각한 기술 부채가 드러났다.
(출처: aldegad.github.io/claude-code-analysis, 2026-03-31)
src/ 디렉터리 내 테스트 파일이 전혀 없다. NODE_ENV === 'test' 가드와 TestingPermissionTool이 소스에 존재하는 것으로 보아 테스트는 별도 비공개 레포에 있는 것으로 추정되지만, 유출 범위에는 포함되지 않았다. [ESTIMATE]| 이슈 | 수치 (aldegad 분석) | 위험 |
|---|---|---|
| 빈 catch 블록 (bare catch) | 666개 — 전체 예외 핸들러의 46.7% | analytics, 보안 정책, OAuth 오류 무시 |
Type assertion (as X) |
6,656개 | TypeScript 타입 안전성 우회 |
Non-null assertion (!) |
310개 | 런타임 크래시 위험 |
noExplicitAny 비활성화 |
tsconfig에서 비활성 | 타입 보증 전반 약화 |
초대형 파일 Top 5: print.ts 5,594줄 (3,167줄 단일 함수, 486개 분기점 — CLI 포매팅 + SDK 프로토콜 + 리모트 컨트롤 전담), messages.ts 5,513줄, sessionStorage.ts 5,106줄, hooks.ts 5,023줄, REPL.tsx 5,006줄 (80+ imports). (출처: aldegad 분석, DEV.to)
한 줄 요약: 프로덕션 AI 도구가 "바이브 코딩 방식으로, 이해 없이 프롬프트 먼저" 개발됐다는 커뮤니티 분석이 나오는 배경이다. 속도와 품질 사이의 트레이드오프가 코드 전체에 각인되어 있다.
⑤ 텔레메트리 심층 분석: 1,000개 이상의 이벤트와 이메일 전송
커뮤니티에서 가장 프라이버시 우려를 불러일으킨 부분이다. (출처: aldegad 분석, ccleaks.com, Marco Kotrotsos 텔레메트리 분석)
- 1,000개 이상의 이벤트 유형 — 도구 허용/거부 결정, YOLO 자동 권한 분류, 세션 성능, 구독 티어, 환경 핑거프린팅, 불만 신호(욕설 감지, "continue" 반복 패턴) 포함
- 사용자 이메일 OAuth 속성 전송 —
user.email이 해싱 없이 Datadog 텔레메트리 속성에 포함됨 (Marco Kotrotsos 문서 확인; [WARNING] 해싱 여부는 전송 레이어에서 추가 처리될 수 있으나 소스상 확인 불가) tengu_frond_boric— 의도적으로 난독화된 텔레메트리 킬 스위치. 소스 내 주석에"Mangled name"이라고 명시되어 있다. 이 플래그를 찾기 어렵게 만든 이유는 공식적으로 설명되지 않았다.- GrowthBook 런타임 게이팅 —
tengu_*접두사 플래그들이 매 시간/api/claude_code/settings를 폴링해, 사용자 동의 없이 런타임에서 동작 변경 가능
Fast Mode는 표준 Claude Code와 동일한 Opus 4.6 모델을 사용하면서 6배 높은 요금을 부과한다: Opus 4.6 입력 $30/M(Fast) vs $5/M(표준). 소스에서 내부명 "Penguin Mode"로 확인됨. 이 가격 차이의 기술적 근거에 대한 공식 설명은 없다. (출처: ccleaks.com; [WARNING] 요금은 변동 가능, 공식 페이지에서 확인 권장)
8. 커뮤니티 반응과 논쟁 포인트
| 출처 | 반응 요약 |
|---|---|
| Hacker News | "They forgot to add 'make no mistakes' to the system prompt" — 기술적 감탄과 조롱이 섞인 반응. 가장 많은 논쟁은 정규식 감정 분석과 Undercover Mode. |
| GitHub (Kuberwastaken) | 발견 수 시간 만에 1,100+ Stars, 1,900+ Forks. 조직적인 이슈 스팸(강제 삭제 시도 의심)도 발생. (2026-03-31 기준) |
| Mintlify 분석 문서 | 당일 공개. 아키텍처부터 메모리 처리까지 핵심 동작 원리를 낱낱이 정리한 독립 문서. |
| 한국 커뮤니티 | "AGI의 비밀이 80만 줄의 TypeScript 조건문이었다"는 농담이 퍼짐. 개발자들의 속도에 감탄하는 반응 다수. |
| 중국 개발자 커뮤니티 (X) | Chaofan Shou(@Fried_rice), 陈成(@chenchengpro) 등이 기술 분석을 빠르게 전파. 소스코드 직접 분석 내용 공유. |
이 반응들이 보여주는 것은: "정보가 공개되는 순간, 커뮤니티는 당사자보다 더 빠르게 그것을 이해한다"는 현상이다. Anthropic이 소스맵을 제거한 것은 이미 늦었다. 분산된 집단 지성은 몇 시간 만에 512,000줄을 교과서로 바꿔버렸다.
9. Anthropic의 대응과 법적 맥락
Anthropic은 공개적인 성명을 내지 않았다. 다만 다음 조치를 취했다:
- npm 패키지 업데이트로 소스맵 파일 제거
- 이전 버전(v2.1.88 등) npm 레지스트리에서 삭제
- 그러나 GitHub 아카이브 저장소 3개 이상 이미 존재
이번 유출과 시기적으로 겹치는 법적 맥락도 있다. Anthropic은 2026년 3월 OpenCode를 상대로 무단 API 접근을 이유로 법적 요청(cease-and-desist)을 보냈고, 제3자 클라이언트 사용을 금지하는 서비스 약관을 업데이트했다. (출처: The Agent Times) 이는 코드 비밀보다 서버 사이드 가치 보호에 집중하는 전략을 반영한다.
Anthropic의 실질적 해자(moat)는 코드가 아니라 모델이다. CLI 소스코드가 공개됐다고 해서 Claude 모델 자체를 복제할 수는 없다. 그럼에도 이 사건이 불편한 이유는, 경쟁사 방어 로직(ANTI_DISTILLATION)이나 내부 운영 방식(Undercover Mode)까지 공개됐다는 점이다.
더 큰 맥락: 같은 주에 또 다른 유출 — Claude Mythos
소스맵 유출(3월 31일)이 터지기 5일 전, Anthropic은 별도의 유출 사고를 이미 겪은 상태였다.
내부 블로그 초안이 담긴 데이터 캐시의 CMS 설정 오류로 인해 공개 접근 가능한 상태가 됐다. Fortune이 단독 보도했고, Anthropic은 "인적 오류(human error)"임을 인정했다.
(출처: Fortune, 2026-03-26)
공개된 내용:
- 모델명: Claude Mythos — 내부 코드명 "Capybara"
- 포지셔닝: "Opus보다 크고 더 지능적인 새 모델 티어" — Anthropic 초안 원문
- 성능: 코딩, 학문적 추론, 사이버보안 등에서 Claude Opus 4.6 대비 극적 향상
- 위험 경고: Anthropic 내부 문서 기준 "전례 없는 사이버보안 위험(unprecedented cybersecurity risks)" — 대규모 사이버 공격 가능성 증가 경고 포함
- 출시 상태: 소규모 얼리 액세스 고객 대상 테스트 중 (2026-03-26 기준)
소스맵 유출 코드에서 발견된
capybara, capybara-fast, capybara-fast[1m] 모델명이 바로 이 Mythos의 코드명이다. 즉 소스코드에는 이미 다음 세대 모델의 흔적이 내장돼 있었다. 두 유출 사건은 각각 독립적인 설정 실수였지만, 결과적으로 같은 모델의 존재를 서로 다른 경로로 확인시켜 줬다.한 주 안에 두 번의 "인적 오류" — 하나는 CMS 설정, 하나는 npm 빌드 설정. IPO를 준비 중인 기업에서 발생한 이 패턴은, 보안 거버넌스와 빌드 파이프라인 검토 체계에 대한 질문을 남긴다.
10. 개발자가 알아야 할 인사이트
이번 유출에서 AI 에이전트를 개발하는 사람이라면 주목해야 할 설계 결정들이 있다.
1. 권한 시스템은 세밀해야 한다
Claude Code는 단순히 "허용/거부"가 아니라 LOW/MEDIUM/HIGH 위험도 분류 + ML 기반 자동 승인(YOLO Classifier) + 사용자 설명 생성 등 다층 구조를 갖는다. 에이전트가 실제로 사용되려면 이 수준의 세밀함이 필요하다.
2. 터미널 UI에도 React가 답이 될 수 있다
React + Ink 조합은 터미널에서도 컴포넌트 기반 상태 관리를 가능하게 한다. 복잡한 멀티에이전트 상태를 표시하는 CLI를 만들 때 이 스택은 충분히 검토할 가치가 있다.
3. 모든 것에 LLM을 쓸 필요는 없다
감정 분석은 정규식으로, 자동 승인은 ML 분류기로, UI는 React로. "AI 제품"이라도 핵심 외 부분에서는 적합한 도구를 선택하는 실용주의가 512,000줄 전체를 관통한다.
4. npm 배포 시 소스맵 제거는 필수
이번 사건의 직접적 교훈이다. package.json의 files 필드 또는 .npmignore에서 반드시 *.map 파일을 제외하라. Bun, esbuild, Webpack 등 모든 번들러에서 기본 생성되는 소스맵은 프로덕션 배포물에 포함되면 안 된다.
// package.json — 소스맵 제외 예시
{
"files": [
"dist/**/*.js", // ← .map 명시 제외
"dist/**/*.d.ts",
"!dist/**/*.js.map" // ← 또는 명시적 제외
]
}
5. CLAUDE.md 로딩 순서와 system-reminder 주입 맵

소스에서 확인된 CLAUDE.md 우선순위 체계다. 번호가 클수록 높은 우선순위로 하위 규칙을 덮어쓴다.
(출처: aldegad 분석, 2026-03-31)
1. Managed Memory /etc/claude-code/CLAUDE.md ← MDM/조직 정책
2. User Memory ~/.claude/CLAUDE.md ← 전역 사용자 설정
3. Project Memory (루트 → CWD 경로 탐색):
CLAUDE.md
.claude/CLAUDE.md
.claude/rules/*.md ← glob 패턴 기반 조건부 규칙
4. Local Memory CLAUDE.local.md ← git에 커밋 안 됨
※ 숫자 클수록 높은 우선순위 (4가 1을 덮어씀)
실전 포인트:
- CLAUDE.md 최대 길이: 40,000자
- Auto Memory (MEMORY.md): 최대 200줄 또는 25,000바이트
@include디렉티브로 외부 파일 삽입 가능 (@./path,@~/path,@/absolute).claude/rules/*.md의 frontmatterglobs필드에 파일 패턴을 지정하면 해당 파일을 열 때만 규칙이<system-reminder>로 주입됨 — 이 블로그의.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 등 미출시 기능이 공개될 때 빠르게 활용할 수 있도록 아키텍처 패턴을 이해해두기
참고 자료
공식 문서
커뮤니티 분석
- How Claude Code Works — Mintlify 커뮤니티 분석
- 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
뉴스 보도
'AI > 보안' 카테고리의 다른 글
| pip install litellm 한 번으로 SSH 키가 털렸다 — 2026 공급망 공격 분석 : 보안 도구가 감염 벡터가 되다 (1) | 2026.03.26 |
|---|---|
| 2026 사이버보안 리포트 : 글로벌 비즈니스 리스크 2위 AI - Nudify, 딥페이크, 사이버보안, EU AI Act 등 (2) | 2026.02.22 |
소중한 공감 감사합니다