🔥 플래그 하나 켜놓고 돌아서니 Claude Code가 6번 업데이트됐다 — 2.1.109부터 2.1.114까지

#Claude Code#Anthropic#CHANGELOG#Opus 4.7#ultrareview
1502자
19분

Claude Code 2.1.109부터 2.1.114까지 — 사용자 제어 레버와 런타임 교체

지난 글에서 ENABLE_PROMPT_CACHING_1H.zshrc에 박아두고 당분간 청구서를 지켜보겠다고 썼다. 그게 불과 며칠 전인데, 그 사이에 claude-code CHANGELOG가 2.1.109에서 2.1.114까지 버전을 여섯 번 찍었다. Opus 4.7이 공개된 4월 16일 전후로 며칠 사이에 몰려 나온 릴리스들이다. 이 정도 속도면 "이번 릴리스가 특별하다"고 말하기도 애매하다.

그래서 캐시 플래그가 아니라 다른 축으로 읽을 필요가 있었다. 이번에는 두 갈래가 보였다. 하나는 2.1.108에서 이어지는 "사용자가 명시적으로 튜닝하는 레버"가 더 붙은 쪽. 다른 하나는 Claude Code 자체의 런타임이 바뀐 쪽 — 네이티브 바이너리 전환과 sandbox 정책 강화다. 두 흐름이 같은 주에 몰린 건 우연은 아닌 것 같다.

2.1.111 — Opus 4.7 xhigh와 /effort 슬라이더

가장 눈에 띄는 건 2.1.111이다. Anthropic이 4월 16일에 공개한 Opus 4.7에 맞춰 Claude Code가 xhigh 효과 레벨을 열어줬다. 기존의 highmax 사이에 낀 새 티어다.

체감 시나리오가 구체적이다. 평소엔 high로 빠르게 돌리다가 어려운 리팩토링이나 버그를 잡을 때 max로 올리는 사람이 많은데, max는 토큰을 쓸어 담는 대신 응답이 눈에 띄게 느리다. xhigh는 그 둘 사이의 타협점이다. Anthropic이 공개한 Opus 4.7 발표에서는 4.7이 4.6보다 같은 작업을 더 적은 토큰으로 처리한다고 강조하는데, xhigh는 그 개선분을 가장 직접적으로 체감하게 해주는 새 티어라고 생각하면 된다.

조작 UI도 바뀌었다. /effort를 인자 없이 부르면 슬라이더가 뜬다. 화살표로 low/medium/high/xhigh/max를 오가고 Enter로 확정한다. 기본값으로 돌아가고 싶을 때를 위한 auto 옵션도 따로 있다. 내가 3월에 이 명령을 처음 썼을 땐 --effort high 같은 플래그를 직접 쳐야 했는데, 이제는 "지금 이 순간 내가 쏟을 생각의 깊이"를 한 번의 화면 전환으로 바꾼다. 이전 글에서 1시간짜리 TTL이 불투명한 기본값에서 명시적 옵트인으로 풀린 것과 같은 결이다. 정책이 아니라 조작계가 개선됐다.

한 가지 주의. xhigh는 Opus 4.7 전용이다. Sonnet이나 Haiku에서 xhigh를 선택하면 자동으로 high로 떨어진다. 모델 픽커에서도 이 차이가 보이니, "내가 쓴다고 생각한 레벨이 실제 적용됐는지"는 한 번 확인하는 편이 안전하다.

여기에 덤이 두 개 더 붙었다. Max 구독자는 이제 Opus 4.7에서 auto mode를 쓸 수 있고, 3월에 옵트인용으로 나왔던 --enable-auto-mode 플래그는 이제 필요 없다. auto mode는 3월 24일에 Team 플랜 연구 프리뷰로 나온 뒤 한 달 만에 Max까지 확장됐다. 권한 피로감을 풀어주는 장치가 조용히 기본값으로 올라온 셈이다.

/ultrareview — PR 리뷰가 별도 샌드박스로 빠졌다

2.1.111의 진짜 헤드라인은 /ultrareview다. Claude Code 공식 문서에 따르면 이 커맨드는 내가 열어둔 CLI 세션 안에서 돌지 않는다. Anthropic의 웹 인프라에 별도의 리뷰어 에이전트 무리를 띄우고, 그 안에서 브랜치 diff 또는 지정한 GitHub PR을 훑게 한다. 에이전트들이 각자 의심 가는 구간을 파고, 버그를 찾으면 재현까지 돌려본 뒤 결과를 내 세션으로 돌려준다.

구동 방식이 흥미롭다. /ultrareview를 인자 없이 치면 현재 브랜치와 디폴트 브랜치 사이의 diff를 스테이지 된 변경까지 포함해서 리뷰한다. /ultrareview 1234처럼 숫자를 붙이면 GitHub PR #1234를 당겨와서 검토한다. 작업은 5~10분쯤 걸리고 백그라운드로 돌기 때문에, 나는 그 사이에 다른 질문을 던지거나 터미널을 닫아도 된다.

가격이 조금 걸리는 부분이다. 공식 문서에 따르면 Pro/Max 구독자는 3회 무료(1회성, 갱신 없음)를 받고 그다음부터는 extra-usage로 과금된다. 변경 규모에 따라 한 건당 대략 5~20달러 선이라고 명시돼 있다. "정적 분석"만 하는 기존 리뷰 도구와 달리, 버그를 보고하기 전에 실행 환경에서 재현까지 돌려본 뒤 결과를 내준다는 점이 차별점이다. 단순히 의심 구간을 지적하는 게 아니라 "돌려봤더니 실제로 실패했다"까지 검증해서 가져오는 거다.

솔직히 /ultrareview/review와 뭐가 다른지 헷갈릴 사람이 많을 것 같다. /review는 내 세션 안에서 내 모델이 돈다. /ultrareview는 별도 세션 무리가 클라우드에서 돌고, 결과만 내게 온다. 세션 컨텍스트를 아끼고 싶을 때 / 혹은 "내가 놓친 것"을 제3자처럼 확인하고 싶을 때 쓰라는 포지셔닝이다. 3번의 무료 실행으로 체감해 보면 감이 올 것 같다.

2.1.113 — CLI가 Node.js를 떠났다

2.1.113은 한 줄로 요약하면 "claude 커맨드가 더 이상 번들된 자바스크립트를 실행하지 않는다"다. CHANGELOG에는 "Changed the CLI to spawn a native Claude Code binary (via a per-platform optional dependency) instead of bundled JavaScript" 라고 적혀 있다. macOS에서는 Apple 공증을 받은 네이티브 바이너리가, Linux와 Windows에서도 각 플랫폼의 네이티브 실행 파일이 npm 패키지 옆에 딸려온다. 실행 시점에 Node 런타임을 거치지 않는다는 뜻이다.

무엇이 바뀌나. 내 로컬에서는 그동안 nvm이나 fnm으로 Node 버전을 바꿀 때마다 claude 커맨드가 가끔 엉뚱한 Node로 돌아가는 증상이 있었다. asdf 쓰는 팀원들도 비슷한 이슈를 이야기했다. 이제는 그게 사라진다. 공식 setup 문서에 따르면 설치된 claude 바이너리 자체는 Node를 호출하지 않으며, 백그라운드 자동 업데이트가 붙는다.

설치 경로도 살짝 달라진다. 기존에 npm install -g @anthropic-ai/claude-code로 깔았던 사람은 claude install을 한 번 돌려 네이티브 바이너리를 내려받고, 그 뒤에 npm 전역 패키지를 제거하는 게 Anthropic이 권하는 마이그레이션 경로다. npm 패키지 자체는 당분간 배포를 유지하겠지만, 더 이상 실행 주체가 아니라 "바이너리를 끌어오는 껍데기"에 가깝다.

이 변화를 캐시 이야기 옆에 놓고 보면 재밌다. 2.1.108까지 Anthropic이 건드린 건 프로토콜 레벨(토큰 캐시 제어)이었다. 2.1.113은 더 아래, 프로세스 모델 자체를 뜯었다. 같은 "사용자 비용을 지키는" 방향이긴 하지만, 건드리는 층이 다르다. 클라이언트 측 오버헤드를 깎아 한 세션의 실행 비용을 낮추는 작업이 시작됐다고 보면 된다.

샌드박스와 권한 레일을 동시에 조였다

2.1.113의 나머지 절반은 보안 쪽이다. 개인적으로 이번 릴리스에서 가장 눈길이 오래 머문 건 이 묶음이었다.

먼저 sandbox.network.deniedDomains 설정이 추가됐다. Claude Code 샌드박스 문서에 나와 있듯, 기존에는 allowedDomains만 있었다. "*.company.com을 전부 허용하되 vault.company.com만 뺀다"는 표현이 불가능했다. deniedDomainsallowedDomains보다 우선순위가 높게 평가되면서 이 패턴을 깔끔하게 지원한다. 이슈 #35159에서 엔터프라이즈 관리자들이 오래전부터 요청해온 항목이다.

Bash 권한 레일 쪽은 좀 더 날카롭게 조여졌다. 구체적으로:

  • env, sudo, watch, ionice, setsid 같은 exec 래퍼로 감싼 명령도 deny 룰에 걸리도록 매칭이 확장됐다. 예전엔 rm -rf /tmp/foo가 거부돼도 env rm -rf /tmp/foo로 우회가 됐다. 이제는 안 된다.
  • Bash(find:*) 허용 룰에 있어도 find -exec / find -delete는 자동 승인에서 빠졌다. find는 "읽기 전용"으로 착각하기 좋지만 -delete-exec rm을 달면 순식간에 파괴 도구가 된다. 이걸 기본 허용선에서 빼버린 건 합리적이다.
  • macOS에서 /private/{etc,var,tmp,home} 경로가 Bash(rm:*) 허용 룰 아래에서도 "위험한 삭제 대상"으로 분류된다. macOS는 /tmp가 심볼릭 링크로 /private/tmp를 가리키기 때문에 이 경로가 빠져 있으면 우회가 가능했다.
  • Bash dangerouslyDisableSandbox가 권한 프롬프트 없이 샌드박스 바깥에서 명령을 실행하던 버그도 고쳐졌다.

네 줄을 한 줄로 요약하면 "Bash(...) 허용 룰로 안전하다고 믿고 있던 경로들의 빈틈이 같은 릴리스에서 묶여서 메워졌다"는 얘기다. 누가 딱히 악의를 가지고 찔러본 건 아니어도, 이런 우회 경로 하나하나가 공급망 공격 시나리오에서 체감하는 리스크를 높인다. /less-permission-prompts로 허용 룰을 늘리기 시작한 지금, 그 허용 룰이 엄격하게 해석되는 건 오히려 다행이다.

/less-permission-prompts가 2.1.111에서 같이 들어왔다. 내 세션 로그를 훑어서 자주 쓰는 읽기 전용 Bash/MCP 호출을 찾아낸 뒤, 우선순위를 매겨 .claude/settings.json 허용 룰로 제안해 준다. 현재 커맨드 레퍼런스에서는 /fewer-permission-prompts라는 이름으로 바뀌어 있는데, 릴리스 직후 이름이 정리된 듯하다. 권한 프롬프트가 잦아서 피로한 사람이 직접 룰을 설계하지 않아도 되게 해준다. 2.1.113의 deny 확장과 묶어서 보면 "허용은 더 쉽게 추가하고, 허용된 것도 더 엄격하게 해석한다"는 대칭 구조가 보인다.

나머지 변화 — /tui 풀스크린, 푸시, 확장 사고 표시

헤드라인은 위까지고, 그 밖에 몇 가지를 짧게.

2.1.110에서 /tui 커맨드가 들어왔다. /tui fullscreen으로 전환하면 깜빡임 없는(flicker-free) 렌더링이 된다. 긴 세션에서 로그가 쌓이며 프롬프트가 점점 위로 밀려가는 스크롤 지옥을 줄여준다. 같은 버전에 /focus 커맨드도 붙었는데, Ctrl+O로 뭉뚱그려 돌리던 뷰 모드를 분리해서 더 세밀하게 제어하게 했다.

--resume--continue가 이제 만료되지 않은 예약 작업까지 살려낸다. 휴식 사이에 돌려두고 싶은 자동화가 있을 때 실용적이다.

푸시 알림 도구도 2.1.110에서 새로 생겼다. Remote Control을 켜두고 "Push when Claude decides" 설정을 활성화해 두면, Claude가 스스로 "지금 알려야 한다"고 판단한 순간에 모바일로 푸시가 온다. 이건 사용법을 잘못 잡으면 귀찮기만 할 텐데, /ultrareview처럼 백그라운드에서 오래 돌아가는 작업이 끝났을 때 노트북을 덮어두고도 알림을 받는 용도로는 적절해 보인다.

2.1.109는 확장 사고 인디케이터에 회전 진행 힌트를 붙였다. 별거 아닌 것 같아도, xhighmax에서 몇 초 이상 모델이 생각하는 동안 "지금도 뭔가 돌고 있다"는 신호가 있는 것과 없는 것은 체감이 다르다. UI 수준의 작은 배려가 지속적으로 들어가는 게 보인다.

끝으로 2.1.112는 claude-opus-4-7 is temporarily unavailable 핫픽스 한 줄, 2.1.114는 팀원(teammate)이 도구 권한을 요청할 때 권한 다이얼로그가 크래시 나던 버그 픽스 한 줄이다. 릴리스 페이스가 빠른 만큼 중간에 긴급 배포가 두 번 끼어든 셈인데, 이것도 이 주의 성격을 잘 보여준다.

정리하면서 내가 실제로 바꾼 것

지난 글 끝에서 ENABLE_PROMPT_CACHING_1H=1.zshrc에 박아뒀다고 썼다. 이번 릴리스들을 훑고 나서 내가 실제로 추가한 건 네 가지다.

하나. claude install을 돌려 네이티브 바이너리로 넘어갔다. nvm 전환할 때 가끔 이상하게 동작하던 문제를 한번에 없애고 싶었다.

둘. 어려운 문제에 붙을 때 /effort xhigh를 의식적으로 쓰기 시작했다. max가 필요한 작업은 생각보다 드물고, high는 깊은 리팩토링엔 얕다.

셋. sandbox.network.deniedDomains에 회사 내부 시크릿 서비스 도메인 몇 개를 박아넣었다. 지금까지 allowedDomains 와일드카드로만 통제하고 있었는데, 누구나 한 번쯤 실수할 수 있는 경로를 명시적으로 막아두는 게 맞다는 생각이 들었다.

넷. /fewer-permission-prompts를 한 번 돌려 허용 룰을 정리했다(릴리스 노트 기준으로는 /less-permission-prompts). 읽기 전용 git log, ls, grep 같은 것들이 내 .claude/settings.json에 정돈된 형태로 들어갔다. 체감으로 프롬프트 수가 확연히 줄었다.

/ultrareview는 아직 안 썼다. 무료 3회가 아깝지 않을 시점에 쓰려고 아껴두는 중이다. 큰 PR이 쌓이는 주에 작정하고 한 번에 두세 개 돌려볼 생각이다.

며칠 간격으로 버전 6개가 올라오는 주기에서 한두 개는 놓치기 쉽다. 특히 2.1.113 같이 네이티브 바이너리 전환 같은 구조적 변화는 CHANGELOG 한 줄로는 무게감이 잘 안 전해진다. 이렇게 한 주를 묶어서 다시 읽어보면, 한쪽에선 "사용자가 만질 수 있는 레버가 늘고", 다른 쪽에선 "레버가 달려 있는 엔진 자체가 바뀌고 있다"는 게 같이 보인다. 다음 릴리스가 어느 쪽으로 기울지 모르겠지만, 당분간 CHANGELOG.md는 계속 열어두게 될 것 같다.

참고 자료

YouTube 영상

채널 보기
우리가 매일 쓰는 맞춤법 검사기와 라우터 속에 숨겨진 알고리즘은? | Trie 자료구조 이야기
행렬의 기본 연산 - 행렬 덧셈, 스칼라 곱, 전치 | 선형대수학
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학
Trie 자료구조 파이썬 구현: Search와 Starts With 연산 | Trie 자료구조 이야기
AI 추천 시스템의 원리, 벡터 사이의 각도와 코사인 유사도 | 선형대수학
AI는 왜 수백 차원의 벡터를 사용할까? 고차원 공간과 행렬 | 선형대수학
스칼라 곱셈과 내적의 기하학적 의미 | 선형대수학
투영과 예측, 그리고 선형 결합 | 선형대수학