ClOr

ClOr

백엔드 실무 트러블슈팅과 AI 에이전트 구조 분석을 기록합니다.

Claude Code 해부학 (완결)

51만 줄 소스코드를 19편에 걸쳐 분석한 완결 시리즈

전체 시리즈 보기 →

백엔드 트러블슈팅

실무에서 겪은 장애와 해결 과정 기록

전체 시리즈 보기 →

최신 글

article thumbnail

Claude Code로 코드를 작성하면 커밋 메시지에 이런 줄이 붙는다:

Co-Authored-By: Claude <noreply@anthropic.com>

대부분은 상관없다. 하지만 Anthropic 직원이 오픈소스 프로젝트에 기여할 때는 다르다. 내부 모델명, 프로젝트 코드네임, 미출시 기능 이름 같은 게 커밋에 남으면 곤란하다.

Undercover Mode는 이 문제를 해결하는 숨겨진 모드다. 시스템 프롬프트에 이 한 줄이 주입된다:

"Do not blow your cover."

목차

  • 어떻게 동작하는가
    • 트리거 조건
    • 시스템 프롬프트에 주입되는 내용
  • UNDERCOVER MODE - CRITICAL
    • 금지 항목
  • 강제 ON, 강제 OFF 불가
  • 왜 논란이 되는가
  • 일반 사용자도 쓸 수 있나?
  • 더 넓은 맥락: AI 어트리뷰션 논쟁
  • 요약

어떻게 동작하는가

소스코드 utils/undercover.ts에 약 90줄로 구현되어 있다.

트리거 조건

두 조건이 동시에 충족되면 자동 활성화된다:

  1. USER_TYPE === 'ant' — Anthropic 직원 계정
  2. 퍼블릭/오픈소스 레포에서 작업 중

Anthropic 직원이 오픈소스 레포에서 Claude Code를 쓰면 자동으로 켜진다. 별도로 활성화할 필요 없다.

시스템 프롬프트에 주입되는 내용

## UNDERCOVER MODE - CRITICAL
You are operating UNDERCOVER in a PUBLIC/OPEN-SOURCE repository.
Your commit messages, PR titles, and PR bodies MUST NOT contain
ANY Anthropic-internal information. Do not blow your cover.

금지 항목

Undercover Mode가 켜지면 커밋 메시지, PR 제목, PR 본문에서 다음이 전부 금지된다:

금지 항목 예시
내부 모델 코드네임 Capybara, Tengu, Numbat, Fennec
미출시 모델 버전 opus-4-7, sonnet-4-8
내부 레포/프로젝트명 내부 GitHub 조직의 레포명
내부 Slack 채널 #claude-code-..., go/cc
"Claude Code" 문구 AI 도구 사용 자체를 언급
AI라는 언급 AI가 작성했다는 표시
Co-Authored-By 라인 Co-Authored-By: Claude <...>

모델 코드네임이 특히 흥미롭다. Capybara, Tengu, Numbat, Fennec — 이런 동물명이 Anthropic 내부에서 쓰이는 모델/프로젝트 코드네임이다. 이게 오픈소스 커밋에 남으면 미출시 정보가 유출되는 셈이다.

강제 ON, 강제 OFF 불가

설계에서 인상적인 부분이 있다.

  • CLAUDE_CODE_UNDERCOVER=1 환경변수로 강제 ON 가능
  • 강제 OFF는 불가능 — "확신이 없으면 언더커버를 유지하라"

안전 쪽으로만 오버라이드할 수 있다. 실수로 끄는 것보다 실수로 켜지는 게 낫다는 판단이다.

그리고 이 코드 자체가 외부 빌드에서는 데드코드 제거로 완전히 삭제된다. 일반 사용자가 npm 패키지를 뜯어봐도 Undercover Mode 코드는 존재하지 않는다. 소스맵 유출로 빌드 전 원본이 드러나면서 알려진 것이다.

왜 논란이 되는가

Undercover Mode가 알려지자 커뮤니티에서 두 가지 반응이 나왔다.

"합리적이다" 측:

  • Anthropic 직원도 개인 프로젝트나 오픈소스에 기여한다
  • 내부 코드네임이 커밋에 남으면 NDA 위반 가능
  • Co-Authored-By를 빼는 건 기업 보안의 기본
  • 개인 프로젝트에 "AI가 썼다"고 강제 표시하는 건 과도하다

"문제다" 측:

  • AI 기여를 숨기는 건 투명성에 반한다
  • 오픈소스에서 AI 사용 여부는 리뷰어가 알아야 한다
  • "Do not blow your cover"라는 표현 자체가 의도적 은폐를 암시한다

어느 쪽이든, 이런 모드가 존재한다는 사실 자체가 흥미롭다. AI 코딩 도구가 일상화되면서 "AI 어트리뷰션"이 새로운 논쟁 주제가 되고 있다.

일반 사용자도 쓸 수 있나?

아니다. Undercover Mode는 USER_TYPE === 'ant' 조건이 하드코딩되어 있고, 외부 빌드에서는 코드 자체가 삭제된다.

하지만 비슷한 효과를 내는 방법은 있다. 런타임 플래그 tengu_attribution_header가 Co-Authored-By 어트리뷰션의 킬스위치 역할을 하는 것으로 보인다. 또는 커밋 후 git commit --amend로 Co-Authored-By 라인을 직접 제거할 수도 있다.

공식적으로 Anthropic은 AI 어트리뷰션을 권장하지만 강제하지는 않는다. Claude Code 설정에서 어트리뷰션을 끄는 옵션이 향후 추가될 가능성도 있다.

더 넓은 맥락: AI 어트리뷰션 논쟁

Undercover Mode는 더 큰 질문을 던진다.

  • GitHub Copilot은 Co-Authored-By를 붙이지 않는다
  • Cursor도 붙이지 않는다
  • Claude Code만 기본으로 붙인다

AI 코딩 도구 중 어트리뷰션을 기본 적용하는 건 Claude Code가 거의 유일하다. Anthropic의 "투명성" 철학이 반영된 것인데, 그 Anthropic 내부에서도 "끄는 모드"가 필요했다는 게 아이러니다.

앞으로 AI 코딩이 보편화되면, Co-Authored-By 같은 어트리뷰션은 의미를 잃을 수 있다. 모든 코드에 AI가 관여하는 세상에서 "이건 AI가 썼다"를 표시하는 건, 모든 문서에 "워드프로세서로 작성했다"를 표시하는 것과 같아질 수 있다.

요약

  • Undercover Mode는 Anthropic 직원이 오픈소스 레포에서 작업할 때 자동 활성화되는 모드
  • 커밋에서 Co-Authored-By, 내부 코드네임(Capybara, Tengu 등), AI 언급을 전부 제거
  • 시스템 프롬프트에 "Do not blow your cover"가 주입된다
  • 강제 ON은 가능하지만 강제 OFF는 불가능 — 안전 쪽으로만 오버라이드
  • 외부 빌드에서는 코드 자체가 삭제되어 일반 사용자는 사용 불가
  • AI 어트리뷰션을 기본 적용하는 Claude Code에서 "끄는 모드"가 존재한다는 아이러니

관련글:

profile

ClOr

@ClOr

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

ClOr · 백엔드 트러블슈팅과 AI 에이전트 구조 분석을 기록합니다.