Claude Code가 Fable 5에서 Opus로 전환하는 이유와 오탐을 방지하는 워크스페이스 위생
요약
Claude Code 사용 시 Fable 5 안전 분류기에 의한 오탐 문제를 방지하기 위한 워크스페이스 위생 관리법을 다룹니다. 또한 settings.json 설정 오류로 인해 모델 선택이 무시되는 현상과 해결 방법을 설명합니다.
핵심 포인트
- Fable 5 안전 분류기는 CLAUDE.md 등 워크스페이스 컨텍스트를 모두 검사함
- 엔지니어링 용어가 보안/생물학 관련 오탐을 유발할 수 있음
- 워크스페이스 위생을 위해 중립적인 문서 관리 필요
- settings.json의 모델 값이 손상되면 기본 모델로 폴백될 수 있음
Behavior described as of June 2026 — Anthropic tunes these classifiers, so details may change. Sources at the end.
간단 요약: Claude Fable 5는 안전 분류기(주로 offensive-cybersecurity 및 biology)를 실행합니다. 요청 중 하나가 플래그 지정되면, Claude Code는 Opus에서 이를 재실행하고 세션은 Opus에 유지됩니다. 이 분류기는 **모델이 읽는 모든 것 — 자동 로드된 CLAUDE.md를 포함하여 —**을 읽기 때문에, 사용자가 아무것도 입력하기 전에 세션이 _첫 번째 메시지_로 폴백할 수 있습니다. 합법적인 작업을 위해서는 가장 지속 가능한 해결책은 **워크스페이스 위생(workspace hygiene)**입니다: 자동 로드되는 문서는 중립적이고 아키텍처에만 초점을 맞추고, 메커니즘 중심의 도메인 텍스트는 자동 로드되지 않는 파일로 이동해야 합니다.
이것이 무엇이며, 무엇이 아닌가. 이것은 합법적인 작업을 위한 _오탐(false positives)_을 제거하는 것에 관한 것입니다. 저희도 스스로 경험했습니다: 저희 프로젝트 문서에는 평범한 글쓰기 습관(
Anthropic의 도움말 문서와 Claude Code 문서를 참고하면 다음과 같습니다:
- Fable 5는 몇 가지 범주에 대한 자동 안전 검사를 제공합니다. 공격적인 사이버 보안과 생물학/생명 과학이 대부분의 개발자에게 중요한 두 분야입니다.
- 이 검사는 **"최신 메시지뿐만 아니라 메모리, 커넥터 콘텐츠, 웹 검색 결과 및 파일을 포함하여 모델이 읽는 모든 것"**을 검토합니다.
- 문서에는 다음과 같이 직접 명시되어 있습니다: "폴백(Fallback)은 세션의 첫 번째 요청에서 발생할 수 있습니다... 왜냐하면 첫 번째 요청에 CLAUDE.md 콘텐츠와 git 상태와 같은 워크스페이스 컨텍스트가 담겨 있기 때문입니다."
- 이 검사들은 (Anthropic의 표현으로는) "의도적으로 광범위합니다" — 이것이 합법적인 작업에서 오탐(false positives)이 발생하는 이유입니다.
대부분의 팀이 놓치는 부분: 트리거는 종종 사용자가 _무엇을 하는지_가 아니라, 작성된 문서들이 _어떻게 이야기하는지_에 달려 있습니다. 엔지니어링 글쓰기는 전투 은유(attack, kill, hit the target, defend the perimeter) — 공격하고, 죽이고, 목표를 타격하며, 경계를 방어하는 방식 — 와 보안/생물학에서 가져온 메커니즘 약어(
settings.json의 함정: 세션이 잘못된 모델로 조용히 시작되는 문제
관련이 있지만 다른 유형의 실패 사례가 있습니다. Fable을 저장했음에도 불구하고 Claude Code가 계속해서 사용자의 티어(tier) 기본 모델(Opus/Sonnet)로 시작되는 현상입니다. v2.1.153 버전부터는 /model 명령어가 사용자의 선택을 ~/.claude/settings.json 파일의 model 필드에 기록합니다. 따라서 실제로 어떤 값이 기록되었는지 확인해 보세요:
python -c "import json,pathlib;print(repr(json.load(open(pathlib.Path.home()/'.claude'/'settings.json'))['model']))"
만약 값이 깔끔한 ID/별칭(alias)이 아니라면 — 즉, 길을 잃은 터미널 이스케이프 문자(terminal-escape characters)가 포함되어 있거나, 해당 기능을 지원하지 않는 ID에 접미사(suffix)가 붙어 있다면 (예: opus/sonnet에 대해 문서화된 [1m] 1M-컨텍스트 접미사) — Claude Code가 이를 인식하지 못하고 조용히 기본 모델로 넘어갈(fall through) 수 있습니다. 저희는 정확히 이러한 형태의 손상된 값을 마주했습니다. 해결 방법은 수동으로 한 줄만 수정하면 됩니다:
{ "model": "claude-fable-5" }
그 후 다음 세션이 시작될 때 /status 명령어를 통해 활성화된 모델을 확인하여 검증하십시오.
예방: 워크스페이스 위생 (workspace hygiene)
저희의 오탐(false positives)을 제거한 네 가지 실천 방안을 영향력이 큰 순서대로 나열합니다:
- 자동 로드되는 문서는 아키텍처 전용으로 유지하세요.
CLAUDE.md에는 파일 레이아웃, 이름, 명령(commands), 상태(status)를 담아야 하며, 도메인 메커니즘(domain mechanism)을 담아서는 안 됩니다. 만약 프로젝트가 민감하게 들릴 수 있는 도메인(건강 데이터, 방어 보안, 실험실 관련 도구 등)을 정당하게 다루고 있다면, *메커니즘 서사(mechanism narrative)*를 자동 로드되지 않는 별도의 문서(예:DOMAIN.md)로 옮기고 이름으로 참조하세요. - 메커니즘 언어보다 결과 언어를 사용하세요. 민감한 부분이 어떻게 작동하는지가 아니라, 시스템이 무엇을 생성하는지를 말하세요. 정직한 콘텐츠 자체는 변하지 않으며, 프레이밍(framing)이 결과물을 명명할 뿐입니다.
- 전투적 은유보다 중립적인 동사를 사용하세요. 문제에 접근하고(approach), 프로세스를 중단하며(stop), 대상에게 도달하세요(reach). 이는 사람들에게도 더 잘 읽힙니다. 은유는 결코 핵심적인 역할을 수행하는 것이 아니었습니다.
- 문제가 발생하기 전에 검사기를 실행하세요. 저희가 자체 워크스페이스(workspace)에서 사용하던 스크립트를 의존성이 없는 작은 검사기(checker)로 일반화했습니다. 이 검사기는
CLAUDE.md파일에서 플래그(flag)를 유발하기 쉬운 상용구(코드 범위 보호, 파일 이름, 식별자 등)를 스캔하고,settings.json의 모델 ID를 무결성 검사(sanity-check)하며, 제안 사항을 출력합니다. 이 도구는 파일을 절대 수정하지 않습니다:
curl -O https://tagmac.dev/tools/claudemd-hygiene-check.py
python claudemd-hygiene-check.py
Python 3 표준 라이브러리(stdlib)만 사용하며, 발견 사항이 있을 경우 종료 코드(exit code) 1을 반환합니다 (CI 또는 pre-commit hook에 삽입 가능).
출처
- Anthropic Help Center — Why Claude switched models in your conversation with Fable 5
- Claude Code docs — Model configuration (automatic fallback,
--safe-mode,/configtoggle,[1m]suffix,/modelpersistence) - 공개 보고서: claude-code#66670 · #66916 · #67246
원문은 tagmac.dev에 게시되었습니다. 저희는 이곳에서 수행하는 모든 실습을 저희의 자체 운영 환경에 먼저 적용합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기