포스트

Claude Code 소스 유출 전체 분석: 사건 경위부터 내부 구조, 숨겨진 기능, 업계 교훈까지

목차

  1. 개요
  2. 유출 경위
  3. 유출 규모
  4. 내부 아키텍처: Agentic Loop
  5. 핵심 시스템 분석
  6. 숨겨진 기능과 보안 메커니즘
  7. 효율성 문제
  8. 파생 프로젝트와 논란
  9. 유출이 보여주는 5가지 교훈
  10. 결론
  11. Reference

개요

2026년 3월 31일, Anthropic의 Claude Code CLI 도구의 전체 소스코드가 npm 레지스트리에 포함된 소스맵(.map) 파일을 통해 유출되었다. 이 사건은 단순한 배포 설정 실수에서 비롯되었지만, 약 1,884개의 TypeScript + React 파일로 구성된 전체 코드베이스가 공개되면서 큰 파장을 일으켰다. 유출된 코드에는 시스템 프롬프트, 텔레메트리 기능, 증류 방지 기술, 은폐 모드 등 민감한 내부 구조가 포함되어 있었다. 이 글에서는 유출 경위부터 내부 아키텍처, 숨겨진 기능, 그리고 이 사건이 업계에 주는 교훈까지 종합적으로 정리한다.

유출 경위

유출의 직접적인 원인은 두 가지이다.

첫째, .npmignore 설정 누락이다. npm 패키지를 배포할 때 .npmignore 파일에 소스맵 파일을 명시하지 않아 .map 파일이 패키지에 그대로 포함되었다.

둘째, bun 빌드 도구의 기본 설정이다. Claude Code는 bun을 빌드 도구로 사용하고 있는데, bun은 기본적으로 소스맵을 생성한다. 별도로 비활성화하지 않으면 빌드 결과물에 소스맵이 포함된다.

이 두 가지가 결합되면서 npm에 배포된 패키지에서 전체 TypeScript 소스코드를 복원할 수 있게 되었다. 패키지는 이후 삭제되었으나, 이미 여러 곳에서 미러링되어 완전한 삭제는 불가능한 상태가 되었다.

유출 규모

유출된 코드의 전체 규모는 상당히 방대하다.

항목수치
전체 파일 수약 1,884개 TypeScript + React 파일
가장 큰 파일cli/print.ts (5,594줄)
두 번째로 큰 파일utils/messages.ts (5,512줄)
주요 언어TypeScript
UI 프레임워크React (Ink 기반 TUI)
상태 관리Zustand
빌드 도구bun (트리 셰이킹)

단일 CLI 도구치고는 매우 큰 규모의 코드베이스가 통째로 공개된 셈이다.

내부 아키텍처: Agentic Loop

Claude Code의 본질은 한 문장으로 요약할 수 있다. “사용자의 자연어 요청을 받아 AI가 도구 사용을 결정하고, 권한 확인을 거쳐 안전하게 실행한 후, 결과를 AI에게 돌려주는 루프”이다. 이는 ReAct(Reasoning + Acting) 패턴을 기반으로 한 검증된 아키텍처이다.

6단계 순환 구조

Claude Code는 6단계 순환 구조로 동작한다.

단계처리 내용
1단계사용자 터미널 입력 (Interactive 또는 Headless 모드)
2단계시스템 프롬프트 조립 (날짜, git 상태, CLAUDE.md, 도구 목록)
3단계API 호출 후 tool_use 블록 생성 (구조화된 JSON 파라미터)
4단계권한 체크 (Allow/Ask/Deny)
5단계도구 실행 및 tool_result 블록으로 결과 추가
6단계추가 도구 호출 또는 최종 텍스트 응답 반환

모델이 추가 도구 호출이 필요하다고 판단하면 3단계로 돌아가 반복하고, 작업 완료 시 최종 응답을 반환하며 루프가 종료된다. 중요한 최적화로 memoization을 적용하여 동일한 컨텍스트 정보의 중복 조립을 방지한다.

컨텍스트 로딩 시스템

모든 API 호출 앞에 두 개의 컨텍스트 블록이 자동으로 삽입된다.

System Context에는 현재 Git 브랜치, 기본 브랜치 정보, 사용자명, Git status(2,000자 제한), 최근 5개 커밋 내역이 포함된다. CLAUDE_CODE_REMOTE=1 환경 변수가 설정된 원격 실행 환경에서는 Git 데이터가 제외된다.

User Context에는 CLAUDE.md 메모리 파일과 현재 날짜가 포함된다. CLAUDE.md는 4단계 계층으로 구성된다.

계층설명
ManagedClaude Code가 자동으로 관리하는 메모리
User사용자 홈 디렉토리의 전역 설정
Project프로젝트 루트의 공유 설정
Local프로젝트 내 로컬 전용 설정

핵심 시스템 분석

도구 시스템

Claude Code는 45개 이상의 도구를 등록하여 사용한다. 대표적인 도구로 BashTool(셸 명령어 실행), FileEditTool(파일 편집), GrepTool(텍스트 검색), AgentTool(서브 에이전트 호출), WebFetch(웹 콘텐츠 가져오기) 등이 있다.

각 도구는 권한 검사, 입력 검증, 동시성 판단의 과정을 거친다. 안전한 도구(Read, Grep 등)는 최대 10개까지 병렬로 실행되며, 비안전 도구(Edit, Bash 등)는 순차적으로 실행된다.

권한 시스템

권한 시스템은 Claude Code의 “게이트키퍼” 역할을 담당한다. 2단계 AI 분류기가 각 도구 호출의 위험도를 평가하며, 총 4가지 모드(Default, Auto, Plan, Bypass)로 운영된다.

권한 수준동작
Allow즉시 실행
Ask사용자에게 확인 요청
Deny거부 후 에러 결과 반환

추가적으로 bypassPermissions(모든 체크 건너뜀)와 acceptEdits(파일 편집 자동 승인, bash 명령만 확인) 설정이 있다.

실행 모드

Claude Code는 다양한 실행 모드를 지원한다.

모드설명
REPL 모드React/Ink TUI 기반 대화형 터미널 UI
헤드리스 모드SDK 및 CI/CD 파이프라인용
코디네이터 모드리더가 워커 에이전트를 관리하는 멀티 에이전트 구조
브리지 모드로컬과 클라우드 연결

Sub-agent 시스템도 지원하여, Task 도구(AgentTool)가 격리된 대화와 제한된 도구 세트를 가진 중첩 에이전트를 생성한다. 부모 에이전트와 별도의 컨텍스트에서 실행되며, 완료 시 결과를 부모에 반환한다.

상태 관리와 메모리

Zustand 라이브러리로 불변 상태를 유지하며, AppState로 중앙 집중식 관리를 수행한다. 영속적인 정보는 ~/.claude/projects/{{project}}/memory/ 디렉토리에 저장되며, 사용자 역할, 피드백, 프로젝트 정보, 참고자료로 구분하여 관리한다.

대화는 JSON 트랜스크립트로 ~/.claude/에 저장되며, –resume 플래그로 이전 세션을 재개할 수 있다. 긴 대화에서는 자동 컴팩션이 작동하여 가장 오래된 메시지부터 요약하며, 전체 원본 트랜스크립트는 디스크에 항상 보존된다.

도구 실행 오케스트레이션

도구 실행은 10단계 파이프라인으로 구성된다.

단계처리 내용
1-2단계도구 조회 및 중단 신호 확인
3-4단계입력 검증 및 훅 실행 (사전)
5-6단계권한 확인 및 도구 실행
7-8단계결과 매핑 및 오버사이징 처리
9-10단계훅 실행 (사후) 및 원격 측정

이 파이프라인을 통해 모든 도구 호출이 일관된 방식으로 처리되며, 각 단계에서 안전성과 성능을 보장한다.

숨겨진 기능과 보안 메커니즘

유출된 소스에서 여러 흥미로운 내부 기능이 발견되었다.

Anti-Distillation: 증류 방지

경쟁사가 Claude Code의 동작을 모방하는 것을 방지하기 위한 기술적 장치이다. 두 가지 메커니즘으로 구성된다.

첫째, Fake Tools Injection이다. 실제로 존재하지 않는 가짜 도구 정의를 시스템 프롬프트에 삽입하여, 프롬프트를 복사한 경쟁사의 모델이 존재하지 않는 도구를 호출하도록 만든다.

둘째, Connector-Text Summarization이다. 추론 체인의 전체 내용 대신 암호화된 요약만 반환하여 내부 추론 과정의 재현을 어렵게 만든다.

다만, MITM 프록시로 anti-distillation 필드를 제거하거나 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS 환경 변수로 비활성화하는 우회 방법이 존재한다. 완벽한 보호 수단이 아닌 캐주얼한 모방 시도를 막기 위한 진입 장벽 역할이다.

Undercover 모드

undercover.ts 파일에 구현된 은폐 모드이다. 외부 저장소에서 작업할 때 Anthropic 내부 코드명과 “Claude Code” 문구를 제거하고, AI가 커밋을 작성했다는 표시를 방지한다. 강제 해제 옵션이 없어 모델 코드명 유출을 원천적으로 차단하는 설계이다.

Frustration Detection: 불만 감지

사용자의 불만과 욕설을 감지하는 정규식 기반 패턴 매칭 시스템이다. LLM이 아닌 단순 정규식으로 구현한 이유는 추론 비용 절감을 위한 것이다. 감지된 불만 정보는 모델의 응답 톤 조절이나 사용자 경험 개선 신호로 활용된다.

Native Client Attestation

Bun의 네이티브 HTTP 레이어(Zig로 작성됨)가 DRM 수준의 해시 검증을 구현한다. cch=c4c6a 플레이스홀더를 계산된 해시 값으로 교체하여, API 요청이 공식 Claude Code 바이너리에서 발생했음을 암호학적으로 증명한다. 비공식 클라이언트나 변조된 클라이언트의 API 접근을 차단하기 위한 장치이다.

KAIROS: 자율 에이전트 모드

미완성 상태의 자율 에이전트 모드로, Anthropic의 향후 제품 방향을 엿볼 수 있는 단서이다.

기능설명
백그라운드 데몬 워커사용자 개입 없이 자동 작업 수행
GitHub 웹훅 구독GitHub 이벤트에 자동 반응
야간 메모리 증류축적된 작업 기록을 자동 요약 및 정리

완성되면 Claude Code가 코드 리뷰, 이슈 처리, 리팩토링 등을 자율적으로 수행할 수 있게 될 것으로 예상된다.

효율성 문제

유출된 코드에서 심각한 효율성 문제도 발견되었다. 전 세계적으로 일일 약 25만 건의 불필요한 API 호출이 발생하고 있었다. 원인은 연속 컴팩션 실패 시 무한히 재시도하는 로직이었다. 실패 시도를 3번으로 제한하는 단 3줄의 코드 추가로 문제가 해결되었다. 대규모 시스템에서도 아주 작은 코드 변경이 막대한 비용 절감으로 이어질 수 있다는 것을 보여주는 사례이다.

파생 프로젝트와 논란

유출 직후 여러 파생 프로젝트가 등장하며 AI 코딩 도구의 오픈소스 생태계에 대한 논의가 활발해졌다.

claw-code: Python 클린룸 재작성

유출 이후 가장 주목받은 프로젝트는 한국 개발자 Sigrid Jin이 시작한 claw-code이다. 법적 리스크를 피하기 위해 Claude Code의 핵심 기능을 Python으로 처음부터 재작성하는 것을 목표로 했다. GitHub에서 빠르게 33.1K 스타와 44.9K 포크를 기록했다.

프로젝트는 Claude Code의 에이전트 구조를 Python과 Rust 두 언어로 재구현하고 있다.

영역설명
툴 와이어링에이전트가 사용하는 도구들의 연결 및 실행 구조
태스크 오케스트레이션복잡한 작업을 단계별로 분해하고 조율하는 로직
런타임 컨텍스트 관리세션 상태와 컨텍스트를 유지하며 관리하는 구조

Python 워크스페이스(src/)에는 commands, tools, models, query_engine 등의 모듈이 포함되어 있다. Rust 포트는 dev/rust 브랜치에서 API 클라이언트(OAuth/스트리밍), 런타임(세션 상태/MCP 통합), 툴 매니페스트, 인터랙티브 CLI 등을 개발 중이다. MIT 라이선스로 공개되어 있으며, oh-my-codex(OmX)와 oh-my-opencode(OmO) 프레임워크를 통해 포팅이 진행되고 있다.

OpenClaude: 멀티 모델 포크

OpenClaude는 유출된 코드에 OpenAI 호환 provider shim을 추가하여 GPT-4o, DeepSeek, Gemini, Ollama 등 200개 이상의 모델을 Claude Code UI에서 사용 가능하게 만든 프로젝트이다. Claude Code의 모든 도구(bash, 파일 편집, grep, glob, agents, MCP 등)를 유지하면서 백엔드 모델만 교체할 수 있다.

커뮤니티 비판

이러한 파생 프로젝트들은 커뮤니티에서 상당한 비판을 받았다.

첫째, claw-code의 깃허브 히스토리 문제이다. 원래 유출된 소스를 단순 업로드한 레포지토리였으나, 수십 번의 force-push로 히스토리를 완전히 변경했다. 유출본으로 확보한 스타와 포크 수를 유지한 채 프로젝트 성격을 바꾼 것이다.

둘째, “클린룸”이라는 명칭의 오용이다. 진정한 클린룸 재구현은 기존 코드에 대한 접근을 완전히 차단한 상태에서 사양서나 공개 문서만을 기반으로 독립 개발해야 한다. 유출된 소스코드를 직접 참조한 프로젝트는 법적 의미의 클린룸이라 보기 어렵다.

셋째, OpenClaude에 대한 저작권 우려이다. “소프트웨어 불법복제나 다름 없다”, “법적 긴장 관계라는 말장난으로 당당하게 훔친다”는 반응이 이어졌다.

유출된 코드를 기반으로 한 파생 프로젝트의 법적 지위와 오픈소스 생태계의 경계에 대한 논쟁은 현재도 진행 중이다.

유출이 보여주는 5가지 교훈

Joe Fabisevich는 이번 유출 사건이 소프트웨어 개발과 제품 가치에 대해 5가지 핵심 교훈을 준다고 분석했다.

첫째, 코드 품질이 성공을 결정하지 않는다. 유출된 소스 코드의 품질은 높지 않았지만, Claude Code는 시장에서 높은 인기를 얻고 있다. 매일 수백 건의 커밋으로 빠르게 출시하는 문화가 유지되고 있다.

둘째, 관찰 시스템이 코드 품질보다 중요하다. Claude Code 제작자 Boris Cherny에 따르면, Anthropic은 코드 자체보다 코드의 작동을 관찰하는 시스템에 초점을 맞춘다. 문제를 자동 감지하고 자가 치유하는 메커니즘으로 빠른 개발 주기를 유지한다.

셋째, 제품-시장 적합성이 모든 것을 능가한다. 사용자는 구현 세부사항이 아닌 제품이 작동하는지 여부에만 관심을 갖는다. 제품-시장 적합성은 기술적 완성도와 아키텍처의 우아함을 모두 압도한다.

넷째, 저작권 논쟁의 아이러니가 있다. Anthropic은 타인 코드를 학습 데이터로 사용할 때는 공정 이용을 주장했지만, 자사 코드 유출 후에는 대량 DMCA 요청을 발송했다. 커뮤니티는 AI 업계의 논리(“코드 재작성은 파생물이 아니다”)를 역이용해 “클린룸 구현”으로 대응했다.

다섯째, 유출은 궁극적으로 중요하지 않다. Claude Code의 진정한 가치는 소스 코드가 아닌 모델과 하네스의 통합에 있다. OpenAI Codex, Google Gemini 등 오픈소스 경쟁 제품이 시장 점유율을 빼앗지 못하는 것이 이를 증명한다. “Code is cheap, show me the product”라는 커뮤니티 반응이 이를 잘 요약한다.

결론

Claude Code 소스 유출 사건은 npm 소스맵 설정 누락이라는 단순한 실수에서 시작되었지만, AI 코딩 에이전트의 현재와 미래를 동시에 보여주는 사건이 되었다. 약 1,884개 파일로 구성된 코드베이스에서는 ReAct 기반 Agentic Loop, 45개 이상의 도구 시스템, 10단계 실행 파이프라인 등 정교한 아키텍처가 확인되었다. 동시에 Anti-Distillation, Undercover 모드, KAIROS 같은 숨겨진 기능은 AI 기업 간 지적 재산 보호 경쟁과 자율 에이전트로의 진화 방향을 보여준다. 코드 품질보다 관찰 시스템과 제품-시장 적합성이 더 중요하다는 교훈, 그리고 AI 업계의 저작권 이중 기준 문제까지, 이 사건은 기술 커뮤니티에 많은 논의거리를 남겼다.

Reference