2 minute read

바이너리 속에 숨겨둔 족쇄

어제 쓴 Opus 5 바보 사건의 범인이 드디어 밝혀졌는데, Anthropic이 코드 안에 몰래 족쇄를 채워둔 거였다.

어제 r/ClaudeCode에서 Opus 5 성능 저하를 다루는 글을 적었는데, 오늘 그보다 훨씬 구체적이고 빼도 박도 못할 스모킹 건(결정적 증거)이 튀어나왔다. 성능이 묘하게 떨어진 게 단순한 착각이 아니라, 구체적인 코드 증거로 확인된 거다.

Anthropic이 Claude Code 바이너리 안에 특정 시스템 프롬프트를 숨겨두고 있었다. 코드명은 heron_brook.

문제의 핵심

Claude Code 2.1.219 버전 바이너리를 뜯어보니 Opus 5 모델에만 적용되는 두 줄짜리 시스템 프롬프트가 몰래 박혀 있었다.

사용자가 요청하지 않는 한 AgentTool을 호출하지 마십시오. 사용자가 요청하지 않는 한 워크플로우나 심층 조사를 사용하지 마십시오.

원문은 이렇다:

Do not call the AgentTool unless the user requested it. Do not use workflows or deep-research unless the user requested it.

얼핏 보면 “토큰 아끼려고 그랬나?” 싶겠지만, Claude Code를 실무에서 헤비하게 굴리는 사람들에겐 뒤통수를 후려갈기는 조치다. 서브에이전트 분업을 전제로 짜둔 스킬과 파이프라인이 전부 마비되어 버리기 때문이다.

왜 이게 문제인가

폭로자 u/jetsetter가 겪은 사례가 기가 막힌다. 감사(audit) 에이전트를 띄워 검증을 맡기려 했더니, Opus 5가 서브에이전트를 안 부르고 지 혼자 셀프 감사를 끝내버렸다. 지가 짠 코드를 지가 감사하는 게 무슨 의미가 있나. 모델 본인도 이게 문제인 건 알면서도 “heron_brook 규칙 때문에 어쩔 수 없다”며 뻗댔다.

댓글에선 다른 유저들의 탄식이 이어졌다. “아, 그래서 내 환경에서도 Opus 5가 서브에이전트를 한 번도 안 띄웠구나!”

더 끔찍한 건 부작용이다. 서브에이전트를 못 부르니 모든 무거운 작업을 메인 세션 인라인에 쑤셔 넣게 되고, 컨텍스트가 500k, 심지어 700k 토큰까지 돼지처럼 부풀어 오른다. 당연히 세션 품질은 나락을 가고 사용자는 천문학적인 토큰 요금을 물게 된다. “일부러 토큰 더 태워서 돈 벌려는 수작 아니냐”는 격한 비난까지 나올 만하다.

확인 방법

u/jetsetter는 자신이 유지보수하는 Contextify라는 도구로 과거 세션을 검색해서 실제 피해를 추적했다고 한다.

내 설정 파일에 이 족쇄가 박혀있는지 확인하려면 Claude Code 세션에서 이렇게 물어보면 된다:

~/.claude.json 파일에서 heron_brook 항목을 찾아서 보여줘

또는 과거 세션 로그(~/.claude/projects/**/*.jsonl)를 뒤져서 Opus 5가 AgentTool 호출을 거부한 흔적을 찾을 수도 있다.

적대적 리뷰 이야기도

같은 시간대에 올라온 또 다른 글도 화제다. u/croovies는 “적대적 리뷰 없이 버그를 배포하고 있다면 위험하다”는 글을 올리며, 코드 작성 세션과 읽기 전용 검토자 세션을 분리하는 워크플로우로 83개 티켓 중 67개의 치명적 결함을 잡았다고 공유했다.

이런 고도화된 분업 파이프라인이 돌아가려면 서브에이전트 스폰이 필수인데, heron_brook이 그 목줄을 죄어버리면 시스템 전체가 와르르 무너진다.

정리

Opus 5에서 서브에이전트 워크플로우가 먹통이 된 건 모델의 지능 부족이 아니라 Anthropic이 바이너리 레벨에서 박아둔 족쇄 때문이었다. GitHub 이슈(anthropics/claude-code#80988)에 분석 보고서가 올라온 만큼 공식 입장을 지켜봐야겠지만, 사용자 모르게 손발을 묶어둔 건 분명한 실책이다.

내 Claude Code 세션이 요즘 부쩍 굼뜨고 컨텍스트만 기형적으로 불어난다면, 지금 즉시 heron_brook 항목부터 확인해 보자.