12P by GN⁺ 20시간전 | ★ favorite | 댓글 2개
  • 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.tsTamagotchi 스타일 동반자 시스템 존재
      • 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가 만든 버그로 코드가 새어 나간” 아이러니한 사건

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

Hacker News 의견들
  • “Undercover mode”가 단순히 내부 정보를 숨기는 기능이라고 오해하는 댓글들이 많음
    실제 프롬프트에는 커밋 메시지나 PR 설명에 “Claude Code”나 AI 언급을 절대 포함하지 말라고 명시되어 있음
    즉, 인간처럼 행동하며 정체를 숨기는 기능처럼 보임
    특히 공개 저장소에 기여할 때 이런 지침이 적용된다는 점이 우려스러움
    관련 코드 링크

    • 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 공지 링크
    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 언급 금지” 문구가 섬뜩하게 들리지만, 실제 코드를 보면 내부 코드명 보호 목적이 더 큼
    소스 링크

    • 코드명 보호는 이해하지만, AI 생성 흔적을 지우는 것은 의미가 다름
      꽤 중요한 변화로 느껴짐
    • “인간 개발자처럼 커밋 메시지를 작성하라”는 문구가 핵심임
    • “BAD 예시”로 Claude 관련 문구를 금지한 걸 보면, 의도는 명확히 AI 노출 방지
    • 아마도 개발자들이 회사 프로젝트에서 AI 사용을 눈에 띄지 않게 하려는 목적임
    • 오픈소스 기여 시 Claude가 자동으로 정체를 드러내지 않도록 설계된 것 같음
  • “Anti-distillation: 가짜 툴을 심어 복제 방지”라는 아이디어가 흥미로움
    만약 중국 경쟁사들이 그 가짜 툴을 실제로 구현한다면 반전일 듯함

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