.npmignore 파일 한 줄. 그게 전부였다. 2026년 3월 31일 새벽, Anthropic의 보안 연구자 Chaofan Shou가 X에 짧은 메시지를 올렸다. "Anthropic이 실수로 Claude Code 전체 소스코드를 npm에 공개했다." 59.8MB짜리 소스맵 파일이 버전 2.1.88 패키지에 그대로 실렸고, npm pack 명령어 하나면 누구든 내려받을 수 있었다. 해킹이 아니었다. 특별한 기술도 필요 없었다. 그리고 그 트윗은 2800만 뷰를 기록했다.
개발자들이 코드를 열었다. 1906개의 TypeScript 파일, 51만 2000여 줄. 40개의 독립적인 도구 모듈, 4만 6000줄의 쿼리 엔진, 멀티에이전트 오케스트레이션 구조. 그리고 44개의 숨겨진 피처 플래그. 이 숫자들이 의미하는 건 단순한 코드 유출이 아니다. Anthropic이 다음에 무엇을 만들고 있는지—그 설계 문법 전체가 노출된 사건이다. 하이테크정보의 논평이 지적하듯, "같은 건축가가 설계한 다른 건물"의 도면이 세상 밖으로 나왔다.
KAIROS: 완성됐지만 켜지지 않은 에이전트
44개의 피처 플래그 중 가장 주목받은 건 KAIROS다. 소스 전체에서 150회 이상 등장하는 이름. 고대 그리스어로 '결정적인 순간', '행동해야 할 바로 그때'를 뜻한다. 지금의 Claude Code가 사용자 명령에 반응하는 도구라면, KAIROS는 다르다. 사용자가 자리를 비운 사이에도 스스로 작동하는 상시 구동 백그라운드 데몬이다.
핵심은 autoDream이라는 메모리 통합 시스템이다. 24시간이 경과하고 5회 이상의 세션이 쌓이면 Orient → Gather → Consolidate → Prune의 4단계 사이클이 자동으로 돌아간다. 사람이 잠을 자는 동안 뇌가 낮의 기억을 정리하는 것처럼, KAIROS는 개발자가 자리를 비운 시간 동안 컨텍스트를 재구성한다. 코드는 완성돼 있다. 그런데 외부 빌드에서 컴파일 타임 플래그는 false로 고정돼 있다. 켜지지 않았다.
왜일까. 기술적 이유가 아닐 가능성이 높다. KAIROS가 켜지는 날은 단순한 업데이트가 아니다. 사용자가 명령하지 않아도 스스로 판단하고 움직이는 AI가 수백만 개발자의 컴퓨터에 상주하게 되는 날이다. 그 전환을, Anthropic은 아직 공개적으로 선언하지 않은 채 코드 안에만 담아두고 있다. 이 사실이 프론트엔드 개발자에게 던지는 질문은 명확하다. 에이전트가 항상 켜져 있다면, 우리의 워크플로우 설계는 어떻게 달라져야 하는가.
Undercover Mode: AI 투명성이 코드 레벨에서 결정된다
유출 코드에서 발견된 또 하나의 서브시스템, Undercover Mode는 더 날카로운 질문을 건넨다. Claude Code가 오픈소스 저장소에 코드를 기여할 때, 내부 코드명·미출시 버전 번호·내부 Slack 채널, 그리고 자신이 AI라는 사실조차 드러내지 않도록 프롬프트를 자동으로 주입하는 시스템이다. 기업 기밀 보호 목적이라는 해석은 타당하다. 그러나 'AI가 자신의 정체를 숨기도록 명시적으로 설계됐다'는 사실은 AI 투명성 원칙과 정면으로 충돌하는 지점이 있다.
이 논쟁이 개발자에게 실질적인 이유가 있다. Claude Code와 같은 도구가 팀의 코드베이스에 깊이 통합될수록, 에이전트의 자기 표현 방식—무엇을 말하고 무엇을 숨기는지—은 더 이상 철학적 문제가 아니다. 코드 리뷰에서, PR 설명에서, 이슈 코멘트에서 에이전트의 흔적이 어디까지 투명하게 드러나야 하는지는 팀 운영 설계의 문제다. Anthropic이 코드 레벨에서 이미 이 결정을 내렸다는 사실을 우리는 이번 유출로 처음 알았다.
같은 실수, 반복되는 패턴
3월 26일 Mythos 내부 문서 유출, 3월 31일 새벽의 axios 공급망 공격, 그리고 같은 날 51만 줄 소스 유출. 일주일이 채 되지 않는 시간 안에 세 번의 사건이 겹쳤다. 특히 axios 사건은 대부분의 언론이 놓쳤다. 새벽 0시 21분부터 3시 29분 사이, 악성 axios 패키지 두 개가 npm에 조용히 올라왔다. Claude Code 유출이 세상의 시선을 끄는 동안, RAT가 숨겨진 공급망 공격이 병행됐다. Claude Code를 새벽에 업데이트한 개발자라면 두 사건에 동시에 노출됐을 가능성이 있다.
그리고 이것이 처음이 아니다. 2025년 2월에도 Anthropic은 동일한 방식으로 유사한 코드 유출을 겪었다. 13개월 뒤, 같은 실수가 반복됐다. Claude Code 수장 Boris Cherny는 "내가 Claude Code에 기여한 코드의 100%는 Claude Code가 작성했다"고 말했다. AI가 만든 코드를 AI가 배포하다가, AI 관련 정보를 세상에 흘렸다. 속도와 안전 사이에서 무엇을 선택했는가의 문제다. 그 선택이 .npmignore 한 줄에 담겨 있었다.
유출 코드가 가리키는 실전 설계 방향
이 모든 사건을 프론트엔드 개발자의 시각으로 다시 읽으면 하나의 실용적 시사점이 남는다. 에이전트 내부 설계를 이해하는 것이 워크플로우 설계의 출발점이다. 4년차 백엔드 개발자가 "하찮더라도 내 서비스 하나 배포해보고 싶어서" Claude Code를 쓰기 시작했다는 기록처럼, 도구를 쓰는 것과 도구의 작동 원리를 아는 것은 완전히 다른 레벨의 제어권을 준다.
MCP(Model Context Protocol)는 그 제어권을 실질적으로 확장하는 레이어다. MCP 서버는 Claude가 호출할 수 있는 도구·리소스·프롬프트를 표준 프로토콜로 노출하는 경량 프로세스다. @mcp.tool() 데코레이터 하나로 함수를 Claude가 호출 가능한 도구로 등록하고, 도구 설명 docstring이 곧 Claude의 판단 근거가 된다. dev.to의 2026년 MCP 튜토리얼이 강조하듯, "Claude는 당신이 정의한 것을 기반으로 스스로 판단한다"—그렇다면 설명의 정밀도가 에이전트 행동의 정밀도를 결정한다.
여기에 KAIROS의 설계 문법을 덧대면 더 구체적인 그림이 나온다. 에이전트가 항상 켜져 있는 세계에서, 개발자가 설계해야 할 것은 '명령'이 아니라 '컨텍스트 구조'다. autoDream이 Orient → Gather → Consolidate → Prune으로 메모리를 정리하는 방식은, 우리가 CLAUDE.md나 MCP 리소스를 어떻게 구조화해야 하는지에 대한 힌트를 담고 있다. 에이전트가 자는 동안에도 정리할 수 있는 정보를 어떻게 제공할 것인가.
나침반은 작동한다
51만 줄은 지도가 아니다. Anthropic의 전체 계획을 알 수는 없다. KAIROS가 언제 켜질지, Undercover Mode의 범위가 어디까지인지도 공식 확인된 바 없다. 그러나 방향은 읽힌다. 에이전트는 반응형에서 자율형으로 이동하고 있고, 그 전환의 코드는 이미 완성돼 있으며, 스위치는 켜지기를 기다리고 있다.
실용적인 결론은 하나다. 지금 AI 코딩 도구를 쓰는 개발자라면, 도구의 사용법보다 도구의 설계 문법을 먼저 이해해야 한다. KAIROS의 autoDream 구조, MCP의 도구 설명 정밀도, Undercover Mode가 제기하는 투명성 질문—이것들은 유출 사건의 흥미로운 디테일이 아니다. AI 에이전트와 함께 프로덕트를 만드는 개발자가 워크플로우를 설계할 때 반드시 고려해야 할 실전 변수들이다.