# Claude Code 소스 유출: 가짜 도구, 욕설 감지 정규식, 은폐 모드 등 내부 구조 드러남

> Clean Markdown view of GeekNews topic #28074. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=28074](https://news.hada.io/topic?id=28074)
- GeekNews Markdown: [https://news.hada.io/topic/28074.md](https://news.hada.io/topic/28074.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-04-01T09:49:22+09:00
- Updated: 2026-04-01T09:49:22+09:00
- Original source: [alex000kim.com](https://alex000kim.com/posts/2026-03-31-claude-code-source-leak/)
- Points: 19
- Comments: 3

## Summary

위 유출 건의 상세 분석 글입니다. 코드 안에는 **모델 모방 방지용 가짜 도구 삽입(anti-distillation)**, AI임을 숨기는 **undercover 모드**, 사용자 감정을 감지하는 **욕설 정규식** 등 흥미로운 내부 구조가 담겨 있었습니다. 미완성 상태의 **자율 에이전트 모드(KAIROS)** 나 **Tamagotchi형 동반자 시스템** 같은 실험 기능도 확인되었고요. 하루 **25만 건의 실패 API 호출**이 있다는 내부 주석도 눈에 띕니다. AI 제품이 내부적으로 어떤 구조로 설계되는지 엿볼 수 있는 분석입니다.

## Topic Body

- Anthropic이 npm 패키지에 **소스맵을 포함해 배포**하면서 Claude Code의 전체 코드가 공개되어, 내부 기능과 실험적 플래그가 모두 드러남
- 코드에는 **모델 모방 방지를 위한 가짜 도구 삽입(anti-distillation)**, **AI 정체를 숨기는 undercover 모드**, **욕설 감지용 frustration regex** 등이 포함됨
- **네이티브 클라이언트 인증**과 **DRM 수준의 해시 검증** 구조가 존재해, 비공식 도구의 API 접근을 차단하도록 설계됨
- 내부 주석에서는 하루 **25만 건의 실패 API 호출**, 미완성 **KAIROS 자율 에이전트 모드**, **Tamagotchi형 동반자 시스템** 등 다양한 실험 기능이 확인됨
- 이번 유출은 **Anthropic의 핵심 제품 구조와 로드맵이 노출된 사례**로, Bun 런타임의 소스맵 버그가 원인일 가능성이 제기됨

---

### 소스맵 유출로 드러난 Claude Code 내부 구조
- Anthropic이 npm 패키지에 **소스맵을 포함해 배포**하면서 Claude Code의 전체 소스가 공개됨
  - 패키지는 이후 삭제되었으나, 코드가 여러 곳에 **미러링되어 분석 대상**이 됨
  - 이는 일주일 내 두 번째 유출 사건으로, 앞서 모델 사양 문서가 노출된 바 있음
  - 최근 Anthropic이 제3자 도구의 **내부 API 사용을 법적으로 차단**한 직후 발생
- ## Anti-distillation: 모방 방지를 위한 가짜 도구 삽입
  - `claude.ts`에는 `ANTI_DISTILLATION_CC` 플래그가 존재하며, 활성화 시 API 요청에 `anti_distillation: ['fake_tools']`를 포함해 **가짜 도구 정의를 시스템 프롬프트에 삽입**
    - 이는 API 트래픽을 캡처해 모델을 모방하려는 시도를 **오염시키는 목적**
    - GrowthBook 플래그 `tengu_anti_distill_fake_tool_injection`이 켜진 **1차 CLI 세션에서만 작동**
  - `betas.ts`에는 두 번째 메커니즘으로 **요약 기반 서버 측 보호 기능**이 존재
    - 도구 호출 사이의 텍스트를 요약 후 암호 서명과 함께 반환, 이후 복원 가능
    - 외부에서 트래픽을 기록해도 **전체 추론 과정을 볼 수 없음**
  - 이 기능은 여러 조건이 동시에 충족되어야 하며, **MITM 프록시로 필드 제거 시 무력화 가능**
    - 환경 변수 `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` 설정으로 비활성화 가능
    - `USER_TYPE === 'ant'` 조건으로 인해 **Anthropic 내부 사용자 전용**
  - 실질적 방어 수단은 기술적 장치보다 **법적 제약에 가까운 형태**
- ## Undercover mode: AI 정체를 숨기는 모드
  - `undercover.ts`는 외부 저장소에서 사용될 때 **Anthropic 내부 코드명, Slack 채널, “Claude Code” 문구** 등을 제거
    - `"There is NO force-OFF"` 문구로 **비활성화 불가**
    - 환경 변수 `CLAUDE_CODE_UNDERCOVER=1`로 강제 활성화 가능
  - 외부 빌드에서는 함수가 **무의미한 반환으로 제거**되어 일방향적 구조
  - 이로 인해 Anthropic 직원이 오픈소스에 기여할 때 **AI 작성 여부가 표시되지 않음**
    - 내부 정보 은폐 목적은 합리적이지만, **AI가 인간처럼 위장하는 효과** 발생
- ## Frustration regex: 욕설 감지용 정규식
  - `userPromptKeywords.ts`에는 사용자의 **불만·욕설을 감지하는 정규식 패턴**이 포함
    - “wtf”, “this sucks”, “fuck you” 등 다양한 표현을 탐지
  - LLM 기업이 **감정 분석에 정규식을 사용하는 아이러니**를 보여주지만,
    - LLM 호출보다 **비용과 속도 면에서 효율적**
- ## Native client attestation: JS 런타임 아래의 클라이언트 인증
  - `system.ts`에는 API 요청 시 `cch=00000` 자리표시자가 포함되어,
    - Bun의 Zig 기반 네이티브 HTTP 스택이 이를 **해시로 대체**
    - 서버는 이 해시를 검증해 **공식 Claude Code 바이너리 여부를 확인**
  - 이는 **OpenCode 법적 분쟁의 기술적 근거**로,
    - 제3자 도구가 API를 직접 호출하지 못하도록 **DRM 수준의 검증** 수행
  - 단, `NATIVE_CLIENT_ATTESTATION` 플래그가 꺼져 있거나
    - `CLAUDE_CODE_ATTRIBUTION_HEADER`가 비활성화되면 작동하지 않음
    - Zig 해시 교체는 **공식 Bun 바이너리에서만 작동**, Node 환경에서는 무효
  - 서버가 잘못된 해시를 거부하는지는 불명확하며,
    - `_parse_cc_header`가 “unknown extra fields”를 허용한다는 주석 존재
- ## 25만 건의 낭비된 API 호출
  - `autoCompact.ts` 주석에 따르면,
    - 하루 약 **25만 건의 API 호출이 실패 루프로 낭비**되고 있었음
    - 1,279개 세션에서 50회 이상 연속 실패, 최대 3,272회
  - 수정은 단 3줄로, `MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3` 설정 시
    - 3회 연속 실패 후 자동 압축 기능이 비활성화됨
- ## KAIROS: 미공개 자율 에이전트 모드
  - 코드 전반에 `KAIROS`라는 **기능 게이트 모드**가 존재
    - `main.tsx` 기준, **자율형 에이전트 기능**으로 추정
    - `/dream` 스킬(야간 메모리 증류), GitHub 웹훅, 백그라운드 데몬, 5분 주기 크론 리프레시 포함
  - 구현은 미완성이지만, **항상 실행되는 백그라운드 에이전트 기반 구조**가 마련됨
- ## 기타 발견 사항
  - **만우절 이스터에그**: `buddy/companion.ts`에 **Tamagotchi 스타일 동반자 시스템** 존재
    - 18종 생물, 희귀도·RPG 스탯·1% 확률의 ‘shiny’ 버전 포함
    - 사용자 ID 기반 PRNG로 결정, 문자열 인코딩으로 빌드 검사 회피
  - **터미널 렌더링 엔진**(`ink/screen.ts`, `ink/optimizer.ts`)은
    - `Int32Array` 기반 ASCII 버퍼, 비트마스크 스타일 메타데이터, **50배 성능 향상 캐시** 구현
  - **보안 검사**(`bashSecurity.ts`)는 23단계로 구성되어
    - Zsh 내장 명령 차단, `=curl` 우회 방지, 유니코드 제로폭·널바이트 주입 차단 등 수행
    - **Zsh 전용 위협 모델**을 가진 드문 사례
  - **프롬프트 캐시 관리**(`promptCacheBreakDetection.ts`)는
    - 14가지 캐시 파손 벡터 추적, 모드 전환 시 캐시 유지용 ‘sticky latch’ 사용
    - `DANGEROUS_uncachedSystemPromptSection()` 주석 존재
    - **토큰 단가 절감 중심의 설계 철학** 반영
  - **멀티 에이전트 조정기**(`coordinatorMode.ts`)는
    - 코드가 아닌 **프롬프트 기반 오케스트레이션 알고리듬** 사용
    - “약한 작업 승인 금지”, “이해 없이 위임 금지” 등 지침 포함
  - **코드 품질 문제**도 존재
    - `print.ts`는 5,594줄, 단일 함수가 3,167줄에 달함
    - HTTP 요청에 **Axios 사용**, 최근 npm 악성 버전 사건과 시기적으로 겹침
- ## 의미와 파장
  - Google Gemini CLI나 OpenAI Codex의 공개 SDK와 달리,
    - 이번 유출은 **Anthropic의 핵심 제품 내부 구조 전체**가 드러난 사례
  - 가장 큰 피해는 코드 자체보다 **Feature Flag와 로드맵 노출**
    - KAIROS, Anti-distillation 등 **전략적 기능이 경쟁사에 공개**
  - Anthropic은 지난해 **Bun을 인수**했으며, Claude Code는 Bun 위에서 동작
    - Bun의 **소스맵 버그**(`oven-sh/bun#28001`)가 원인일 가능성 존재
    - 프로덕션 모드에서도 소스맵이 노출되는 문제로, 아직 미해결 상태
  - 결과적으로 Anthropic은 **자사 도구 체인 버그로 자사 제품을 유출**한 셈
    - 한 트위터 반응처럼, “AI가 작성한 코드를 배포하다가 AI가 만든 버그로 코드가 새어 나간” 아이러니한 사건

## Comments



### Comment 54537

- Author: kaydash
- Created: 2026-04-03T11:09:56+09:00
- Points: 2

똑똑하다

### Comment 54351

- Author: bbulbum
- Created: 2026-04-01T14:40:35+09:00
- Points: 2

AI 로 커밋하다가 발생한 문제였다면.?!

### Comment 54282

- Author: neo
- Created: 2026-04-01T09:49:22+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=47586778) 
- “Undercover mode”가 단순히 내부 정보를 숨기는 기능이라고 오해하는 댓글들이 많음  
  실제 프롬프트에는 커밋 메시지나 PR 설명에 **“Claude Code”나 AI 언급을 절대 포함하지 말라**고 명시되어 있음  
  즉, 인간처럼 행동하며 정체를 숨기는 기능처럼 보임  
  특히 공개 저장소에 기여할 때 이런 지침이 적용된다는 점이 우려스러움  
  [관련 코드 링크](https://github.com/chatgptprojects/claude-code/blob/642c7f94...)
  - Claude가 커밋 공동 작성자로 등장할 때마다 **민망함**을 느낌  
    Git 히스토리는 책임과 소유권을 추적하는 용도이지, 도구 목록을 기록하는 곳이 아님  
    그렇다면 나도 내 PR에 linter나 IDE를 공동 작성자로 넣어야 하는지 의문임
  - 나처럼 이미 CLAUDE.md 파일에 이런 지침을 추가한 사람도 있을 거라 생각함  
    사실상 **사소한 설정 한 줄**로 해결 가능한 문제임
  - 인간인 척하려는 의도보다는, 코드 품질이 낮을 때 **Claude가 조롱받지 않도록** 하려는 목적 같음  
    결국 책임은 인간 개발자가 지는 구조임
  - 코드의 목표는 정보 유출 방지지만, 실제 구현은 그보다 **범위가 넓음**  
    아마도 목표 달성을 위해 의도적으로 넓게 설정했거나, 숨은 의도가 있을 수도 있음  
    다만 “인간인 척한다”고 단정하기보다는, “인간 개발자처럼 작성하라”는 문구 그대로 해석하는 게 타당함  
    회의적일수록 **사실 기반으로 비판**하는 게 설득력 있음
  - 나도 PR에서 “coauthored by Claude Code” 문구를 본 적 있음  
    솔직히 그런 건 원치 않음

- 최근 연이은 **Mythos 유출**과 Claude Code 전체 코드베이스 노출로 신뢰 문제가 커지고 있음  
  개별 사건은 흥미롭지만, 연속적으로 발생하니 패턴처럼 느껴짐  
  결국 “이런 도구를 코드베이스에 계속 신뢰할 수 있는가”라는 질문으로 이어짐
  - 이런 걱정은 과도하다고 생각함  
    나는 여전히 140달러를 내고 CC를 쓰고 있음  
    오히려 이런 유출이 **Anthropic의 윤리적 모델**과 맞닿아 있다고 봄 — 실패를 통해 성장하는 느낌임
  - 큰 영향은 없다고 봄  
    진짜 가치는 코드가 아니라 **모델 접근권**에 있음  
    코드베이스는 엉망이지만, 구독형 모델 접근은 여전히 매력적이라 매일 Claude Code를 씀
  - 솔직히 Claude 자체가 **vibe coded slop** 같음  
    웹 UI나 CC에서 자잘한 오류가 너무 많음  
    tmux 제어도 문서대로 안 되고, 세션 정리도 안 됨  
    그래도 여전히 좋아하는 제품임 — 엉성하지만 매력 있음

- 내 GitHub의 **anthropics/claude-code 포크**가 DMCA로 삭제됨  
  유출된 코드를 포함하지 않았는데도 전체 네트워크(8.1K개 저장소)가 일괄 차단됨  
  [DMCA 공지 링크](https://github.com/github/dmca/blob/master/2026/03/2026-03-3...)  
  Anthropic이 종을 울려놓고 다시 멈출 수 있다고 생각하는 건 **어리석음**임
  - 어차피 변호사 비용은 이미 청구되고 있을 테니, 그냥 **법무팀을 활용**하는 셈임  
    유출은 되돌릴 수 없으니 차라리 제품 로드맵에 포함시키는 게 현실적임

- 과거 회사들이 **영업비밀**이라 부르던 내용이 소스에 그대로 들어가 있는 걸 보고 놀람  
  주석에 비즈니스 배경까지 적혀 있음  
  예: “하루 25만 API 호출 낭비” 같은 운영 데이터가 그대로 노출됨  
  - 주석은 사실상 **에이전트 코딩의 핵심 해킹**임  
    문서보다 주석을 더 잘 읽기 때문에, 장기 기억처럼 활용 가능함
  - 대부분의 대형 비공개 코드베이스도 비슷함  
    단지 Anthropic은 유출될 줄 몰랐을 뿐임
  - 설정 이유를 설명하는 좋은 주석임  
    경쟁사 입장에서는 별 가치 없는 정보임
  - 코드 내에 가능한 많은 정보를 담는 게 실용적임  
    어차피 유출을 예상하지 않았을 것임
  - 모든 맥락을 코드 안에 넣는 건 **에이전트 친화적 설계의 종착점** 같음  
    별도 문서로 설명할 필요가 없어짐

- 일부 기능이 `process.env.USER_TYPE === 'ant'` 조건으로 잠겨 있음  
  즉, **Anthropic 직원용 지침이 더 엄격하고 솔직함** — 흥미로운 구조임

- 이미 HN 원글이 인기인데, 굳이 HN 댓글 요약 블로그를 또 올릴 필요가 있나 의문임  
  - 해당 블로그는 **AI가 일부 작성한 흔적**이 보임  
  - 원글이 산만했기 때문에 요약이 필요했다는 의견도 있음  
  - HN 문화가 **자기참조적**으로 흐르는 경향이 있음

- 여전히 Claude Code는 훌륭하다고 생각함  
  OpenAI나 Gemini로 바꿀 이유가 없음  
  - 나는 Claude Code에 실망해 **Codex로 전환**했는데, 웹·모바일 개발에서는 거의 비슷하게 잘 작동함

- “Undercover mode”라는 이름과 “Claude Code 언급 금지” 문구가 섬뜩하게 들리지만, 실제 코드를 보면 내부 코드명 보호 목적이 더 큼  
  [소스 링크](https://github.com/alex000kim/claude-code/blob/main/src/util...)
  - 코드명 보호는 이해하지만, **AI 생성 흔적을 지우는 것**은 의미가 다름  
    꽤 중요한 변화로 느껴짐
  - “인간 개발자처럼 커밋 메시지를 작성하라”는 문구가 핵심임  
  - “BAD 예시”로 Claude 관련 문구를 금지한 걸 보면, 의도는 명확히 **AI 노출 방지**임  
  - 아마도 개발자들이 회사 프로젝트에서 AI 사용을 **눈에 띄지 않게** 하려는 목적임  
  - 오픈소스 기여 시 Claude가 자동으로 **정체를 드러내지 않도록** 설계된 것 같음

- “Anti-distillation: 가짜 툴을 심어 복제 방지”라는 아이디어가 흥미로움  
  만약 중국 경쟁사들이 그 가짜 툴을 실제로 구현한다면 반전일 듯함
  - 조만간 **zAI, Qwen, Minimax CC** 같은 복제 버전이 나올 것 같음  
    요즘은 모델보다 **데이터와 인퍼런스 비용**이 경쟁 포인트라 생각함  
    이 주제에 대해 더 이야기 나누고 싶음
  - 이런 **distillation 논의 자체가 공허**하게 느껴짐  
    이미 이 회사들도 남의 데이터를 도용해 제국을 세웠으니까임
  - 사실 양쪽 모두 서로를 **증류(copy)** 하고 있음  
    품질은 정체되고, 진짜 차이는 **툴링 완성도**에 있음  
    이번 유출로 그 격차가 줄어들 수도 있음
  - 가짜 툴은 단순히 **정규식으로 걸러낼 수 있는 미끼**일 뿐임  
    요즘은 distillation 자체가 줄어드는 추세임
  - “우리는 남의 저작물을 훔쳤지만, 너희는 우리 걸 훔치지 마라”는 식의 **아이러니한 태도**가 웃김

- 내가 만든 **시각적 가이드**를 공유함  
  [ccunpacked.dev](https://ccunpacked.dev)
