claudekit / updates / claude-code-2-1-251
[ PATCH · ]

Claude Code 2.1.251

모델 전환을 가로채는 `PreModelSwitch`, `PostModelSwitch` 훅 이벤트가 추가되어 전환을 막거나, 확인을 요구하거나, 기록을 남길 수 있습니다. Remote Control 클라이언트는 포그라운드 서브에이전트의 도구 호출과 결과를 실시간으로 볼 수 있게 됐고, `/cost`에는 세션별 프롬프트 캐시 항목(적중률, 미스, 다시 캐시된 토큰, warm/cold)이, `/usage`에는 지출 한도 표시줄이 생겼습니다. 권한 검사 이후 심볼릭 링크가 바뀌면 Read, Write, Edit이 승인 범위 밖을 읽거나 쓸 수 있던 문제를 비롯해 파일 도구, 플러그인 명령 경로, Grep과 Glob의 거부 규칙에 걸친 권한 우회 경로가 정리됐습니다. 프로젝트 `.claude/settings.json`의 `env`로는 더 이상 `CLAUDE_CONFIG_DIR`, `TMPDIR` 같은 키를 설정할 수 없고, `CLAUDE_CODE_SUBAGENT_MODEL`은 강제 지정이 아니라 기본값으로 동작이 바뀌었습니다.

공식 발표 →

이 글은 공식 문서를 바탕으로 요약·정리한 내용입니다.

무엇이 바뀌었나?

Claude Code 2.1.251이 2026년 8월 28일 출시됐습니다. 이번 릴리스의 중심은 권한 검사를 우회할 수 있던 경로를 막는 작업입니다. 승인 이후 심볼릭 링크가 바뀌는 경우, 플러그인이 선언한 명령 경로, Grep과 Glob이 심볼릭 링크를 따라가는 경우까지 파일 접근이 승인 범위 안에 머물도록 정리됐습니다. 여기에 모델 전환을 가로채는 훅, 프롬프트 캐시와 지출 한도를 확인하는 화면, Remote Control의 서브에이전트 실시간 표시가 더해졌고, 프로젝트 설정과 서브에이전트 모델 설정의 동작 범위도 함께 조정됐습니다.

새 기능

  • PreModelSwitch, PostModelSwitch 훅 이벤트

    세션 도중 모델이 바뀌는 시점에는 개입할 방법이 없어, 조직이 특정 모델 사용을 제한하거나 전환 사실을 기록하려면 다른 우회 방법을 찾아야 했습니다. 이제 두 훅 이벤트로 모델 전환을 막거나, 확인을 요구하거나, 기록을 남길 수 있습니다. SessionStart 재개 훅은 세션이 얼마나 오래됐는지와 다시 캐시하는 데 드는 예상 비용을 함께 받습니다.

  • Remote Control에서 포그라운드 서브에이전트 실시간 표시

    원격으로 붙은 클라이언트에서는 서브에이전트가 무엇을 하고 있는지 상태 표시만 볼 수 있었습니다. 이제 포그라운드 서브에이전트의 도구 호출과 결과가 Remote Control 클라이언트로 실시간 전달됩니다. 기본값인 백그라운드 서브에이전트는 이전처럼 상태만 표시됩니다.

  • /usage의 지출 한도 표시줄

    Claude apps gateway 뒤에서 지출 한도가 걸린 환경에서는 남은 한도를 세션 안에서 확인할 방법이 없었습니다. 이제 /usage에 지출 한도 표시줄이 나오고, 상태 표시줄 스크립트에서는 rate_limits.spend_limit 필드로 같은 값을 읽을 수 있습니다.

  • /cost의 프롬프트 캐시 항목

    비용이 캐시 적중 실패 때문에 늘어난 것인지 판단할 근거가 없었습니다. 이제 /cost가 세션별 프롬프트 캐시 상태를 적중률, 미스, 다시 캐시된 토큰 수, warm/cold로 보여주고, 상태 표시줄 스크립트도 prompt_cache 객체로 같은 정보를 받습니다.

  • 백그라운드 세션 명령이 claude --help에 노출

    attach, logs, stop, respawn, rm 같은 백그라운드 세션 명령은 도움말에 없어 존재를 알기 어려웠습니다. 이제 claude --help에 함께 표시되고, 이미 실행 중인 백그라운드 세션에 --resume을 시도하면 안내 메시지가 claude attach <id> 형태로 정확한 명령을 알려줍니다.

주요 개선

  • 서버가 지정하는 민감한 설정에 승인 요구

    샌드박스의 TLS 연결을 중간에서 푸는 설정, 샌드박스 트래픽을 별도 프록시로 보내는 설정, 자격 증명을 주입하는 설정, 샌드박스 격리를 약화하는 설정은 서버에서 내려오면 그대로 적용됐습니다. 이제 이런 설정은 적용 전에 승인을 거칩니다. 관리형 설정이나 프로젝트 설정에서 오는 ANTHROPIC_CUSTOM_HEADERS도 Authorization, Host처럼 자격 증명, 조직/테넌트, 라우팅, API 동작을 바꾸는 헤더를 지정하면 승인을 요구합니다.

  • 프로젝트 설정의 env가 설정할 수 있는 키 축소

    프로젝트 .claude/settings.json의 env로 설정 디렉토리나 임시 디렉토리 위치를 바꿀 수 있었습니다. 이제 CLAUDE_CONFIG_DIR, CLAUDE_CODE_TMPDIR, TMPDIR/TMP/TEMP는 프로젝트 설정으로 지정되지 않습니다. 셸, 사용자 설정, 관리형 설정에서 지정해야 합니다.

  • CLAUDE_CODE_SUBAGENT_MODEL이 기본값으로 동작

    이 환경 변수는 모든 서브에이전트 모델을 강제로 덮어써서, 에이전트 정의에 지정한 model:이나 실행할 때 지정한 모델이 무시됐습니다. 이제 기본 서브에이전트 모델을 정하는 역할만 하고, 에이전트 정의의 model:과 실행 시점의 명시적 지정이 우선합니다.

  • /effort가 모델별로 저장

    effort 수준을 바꾼 뒤 모델을 전환하면 설정이 그대로 따라와서, 모델마다 다른 수준을 유지하기 어려웠습니다. 이제 /effort는 모델별로 기본 effort 수준을 저장합니다.

  • 관리형 설정 승인 대화상자가 바뀐 항목만 표시

    승인 화면이 전체 설정을 보여줘 무엇이 새로 추가됐는지 찾기 어려웠습니다. 이제 마지막으로 승인한 이후 변경된 설정만 나열합니다.

  • Claude in Chrome의 브라우저 동작이 Claude Code 권한 검사를 거침

    브라우저 동작이 Chrome 확장 프로그램 자체의 프롬프트로 처리되던 경로가 있었습니다. 텔레메트리를 끈 세션을 포함해, 이제 브라우저 동작은 항상 Claude Code의 권한 검사를 통과합니다.

  • 잘못된 도구 호출 재시도 시 깨진 출력 제거

    모델이 형식에 맞지 않는 도구 호출을 만들면 그 출력이 재시도 맥락에 그대로 남아 같은 실수가 반복될 수 있었습니다. 이제 깨진 출력은 재시도 맥락에서 제거되며, Bedrock, Vertex, Foundry에서도 동일하게 적용됩니다.

  • 대화 중 CPU 사용량과 설치 크기 감소

    대화가 진행되는 동안 화면이 불필요하게 다시 그려져 CPU를 썼습니다. 중복 렌더링을 줄여 사용량이 개선됐고, 네이티브 실행 파일은 약 5MB 작아졌습니다. 거의 쓰이지 않는 여섯 개 언어(1c, gml, isbl, mathematica, maxima, sqf)의 문법 강조를 제거해 2.5MB가 추가로 줄었습니다.

  • 클라우드 세션의 프록시 연결 오류 메시지 개선

    세션 네트워크 프록시가 Bash 명령 도중 연결을 끊으면 결과에 “connection reset”만 남아 원인을 알 수 없었습니다. 이제 어떤 호스트에서 어떤 이유로 끊겼는지 함께 표시됩니다.

  • 설치 제안이 프롬프트 전송을 기다림

    플러그인이나 LSP 설치 제안, auto mode 기본 설정 제안이 입력 도중에 떠서, 프롬프트를 보내려고 누른 Enter가 제안에 대한 응답으로 처리될 수 있었습니다. 이제 입력 중인 내용을 보내거나 지운 뒤에 표시됩니다.

  • 서브에이전트가 보낸 메시지의 맥락 전달

    자기 세션 안의 서브에이전트가 보낸 메시지가 외부에서 온 것처럼 전달됐습니다. 이제 보낸 쪽이 이 세션 내부의 작업자라는 점이 Claude에게 함께 전달됩니다. 백그라운드 서브에이전트나 fork 기록을 열어 볼 때 입력창 안내 문구도 Message @<이름>… 형태로 바뀝니다.

주요 버그 수정

보안과 권한

  • 권한 검사가 끝난 뒤 작업 디렉토리 안의 심볼릭 링크가 바뀌면 Read, Write, Edit이 승인 범위 밖을 읽거나 쓸 수 있던 문제 수정.
  • 마켓플레이스 항목이 선언한 플러그인 명령이 플러그인 디렉토리 밖을 가리킬 수 있던 문제 수정. 이제 이런 경로는 경로 탐색 오류로 거부됩니다.
  • Grep과 Glob이 심볼릭 링크로 연결된 검색 경로를 통해 접근한 파일에 Read(...) 거부 규칙을 적용하지 않던 문제 수정.
  • 프로젝트 설정으로 상세 베타 추적이나 API 본문 원문 로깅을 켤 수 있던 문제 수정. 관리형 설정이나 호스트 앱이 지정한 OTLP 수집기를 낮은 범위의 베타 추적 엔드포인트가 우회하던 문제도 함께 수정됐습니다.
  • Workflow 도구가 권한 검사 전에 세션이 읽을 수 없는 위치의 scriptPath를 읽고, 오류 메시지에 그 내용을 인용하던 문제 수정.
  • 정수 셸 변수에 산술식을 대입하는 명령(예: OPTIND=1/0, RANDOM=2+2)이 Bash 권한 검사에서 자동 승인되던 문제 수정. 이제 승인을 묻습니다.

세션과 모델

  • 모델이 사고 과정만 내놓은 턴 이후 대화가 “text content blocks must be non-empty” 오류에서 멈추던 문제 수정.
  • Opus 5에서 effort가 xhigh나 max이고 사고 기능이 꺼져 있으면 요청이 “effort … is not supported when thinking is disabled”로 실패하던 문제 수정. 이 경우 effort는 high로 전송됩니다.
  • 새로 설치한 뒤 첫 실행이 auto mode 기본 계정에서도 default mode로 시작되던 문제 수정.
  • 관리형 설정의 disableAutoMode가 세션 도중에 도착해도 이미 auto mode로 실행 중인 세션이 default mode로 돌아가지 않던 문제 수정.
  • 디렉토리 변경으로 세션 위치가 옮겨질 때 같은 ID의 기존 대화 기록 위에 덮어써지던 문제 수정.
  • 현재 쓰는 Opus 모델이 이미 1M 컨텍스트인데도 “switch to Opus 1M for 5x more context” 팁이 표시되던 문제 수정.
  • --input-format stream-json에서 메시지 ID 없이 전달된 클라이언트 주입 도구 호출이 첫 번째 호출로 합쳐지고 결과가 유실되던 문제 수정. 이전 세션을 재개할 때도 발생했습니다.

에이전트와 백그라운드 세션

  • 서브에이전트를 많이 병렬 실행하면 TUI가 느려지던 문제 수정. 초 단위 진행 표시가 쌓이지 않고 이전 것을 대체합니다.
  • 에이전트 팀에서 팀원의 최종 답변이 팀 리드에게 전달되지 않던 문제 수정. 이제 내용 없는 “available” 알림 대신 대기 알림에 답변이 담겨 도착합니다.
  • 백그라운드 서브에이전트가 이름 없는 형제 에이전트나 상위 에이전트가 보낸 메시지에 답할 수 없던 문제 수정. 보낸 쪽이 주소가 아닌 에이전트 유형으로 표시되던 것이 원인이었습니다.
  • 백그라운드 세션과 그 서브에이전트가 자신이 git worktree add로 만든 작업 트리 안의 파일을 수정할 수 없던 문제 수정.
  • 다른 Claude Code 프로세스가 플러그인 마켓플레이스를 갱신하는 중에 시작된 백그라운드 세션이 플러그인 스킬 없이 실행되고 그 상태로 유지되던 문제 수정.
  • SSH로 접속한 tmux에서 백그라운드 세션을 열면 텍스트 선택이 OSC 52로 처리되던 문제 수정. 이제 포그라운드 세션처럼 tmux 버퍼로 복사됩니다.

원격, 클라우드 세션

  • Claude 데스크톱 앱이 다른 세션에서 전달한 메시지에 답장할 수 없던 문제 수정. 해당 세션 ID로 보내는 SendMessage가 “not reachable”로 실패하지 않고 데스크톱 앱을 통해 전달됩니다.
  • 조직 정책이 Remote Control을 끈 환경에서 실패로 표시되던 문제 수정. 이제 안내 문구 한 줄만 표시됩니다.
  • 다른 세션에서 비활성화한 MCP 서버에 Remote Control로 /mcp reconnect를 실행하면 실제 해결 방법 대신 상세 정보가 생략된 일반 오류가 표시되던 문제 수정.
  • 호스트가 세션의 초기 모델을 지정한 것뿐인데 클라우드 세션이 Claude에게 모델이 바뀌었다고 알리던 문제 수정.
  • Claude apps gateway 세션이 저장된 Anthropic 프로필(예: 콘솔 로그인)을 활성 상태로 취급하던 문제 수정. 실제 요청에는 쓰이지 않는데도 /status에 표시되고 게이트웨이 401 재시도에 사용됐습니다.
  • SDK MCP 서버의 핸드셰이크 응답이 유실되면 SDK와 클라우드 세션이 무한정 멈춰 있던 문제 수정. 이제 70초 후 대기를 중단하고 해당 서버만 실패로 표시합니다.
  • 자체 호스팅 러너가 세션을 강제 종료한 뒤에도 그 세션의 Bash 도구 프로세스를 남겨두던 문제 수정.
  • 관리자가 조직의 사용량 크레딧 한도를 $0으로 설정한 Team, Enterprise 구성원에게 /usage-credits가 한도에 도달했다고 안내하던 문제 수정. 이제 관리자에게 요청하도록 안내합니다.

터미널과 CLI

  • 백그라운드로 보낸 세션(←, /background, --bg)이 셸에서 내보낸 Vertex, Bedrock 게이트웨이 설정(ANTHROPIC_*_BASE_URL + CLAUDE_CODE_SKIP_*_AUTH)을 잃어 모든 요청이 실패하던 문제 수정.
  • Max 플랜에서 같은 계정의 대화형 세션에는 Fable 사용량이 남아 있는데도 claude --bg --model fable이 사용량 크레딧을 요구하며 멈추던 문제 수정.
  • additionalDirectories 항목에 널 바이트가 들어가면 시작이 중단되거나, SDK 호스트, IDE, 훅에서 전달된 경우 /add-dir와 이후 설정 갱신이 동작하지 않던 문제 수정. 이제 해당 항목을 건너뜁니다.
  • emacs -nw, micro처럼 /dev/tty를 여는 편집기에서 백그라운드 세션의 Ctrl+G가 “Emacs quit unexpectedly”로 실패하던 문제 수정.
  • auto mode를 기본으로 설정할지 묻는 일회성 제안이 에이전트 팀 팀원 창처럼 사람이 보고 있지 않은 세션에도 표시되던 문제 수정. 잘못 누른 키로 읽지 않은 채 수락될 수 있었습니다.
  • 같은 Claude apps gateway에 다시 로그인하면 설정이 바뀌지 않았는데도 관리형 설정 승인 화면이 다시 뜨던 문제 수정.
  • /bug와 /share가 비활성화됐을 때 /feedback이 비활성화됐다고 안내하던 문제 수정. 조직 정책이나 환경 변수로 꺼진 경우 팁, /help, 거부 메시지에서 /feedback을 권하지 않습니다.
  • claude ultrareview와 /ultrareview가 클라우드 세션 시작에 실패해도 30분을 그대로 기다리던 문제 수정. 이제 즉시 중단하고 이유를 알려줍니다.
  • gitlab.com 원격에서 --worktree --tmux에 병합 요청 번호를 지정하면 GitLab 참조를 바로 가져오지 않고 GitHub 방식 조회를 먼저 시도하던 문제 수정.
  • GNU screen과 screen 터미널 유형을 쓰는 tmux 세션에서 기울임꼴 텍스트(세션 요약 줄 등)가 강조 블록으로 표시되던 문제 수정.
  • claude mcp add --header와 claude mcp add-json의 도움말이 잘못된 전송 방식을 안내하던 문제 수정.
  • MCP 서버 메뉴의 복사 단축키가 실제 결과와 무관하게 성공했다고 표시되던 문제 수정. 이제 로그인 URL을 어떤 방식으로 복사했는지 알려줍니다.
  • [VSCode] 로그인 화면의 “Bedrock, Foundry, or Vertex” 버튼이 문서의 서드파티 제공자 설정 항목이 아니라 문서 맨 위를 열던 문제 수정.

알아두면 좋은 점

  • 프로젝트 설정으로는 설정 디렉토리와 임시 디렉토리를 바꿀 수 없습니다 — 프로젝트 .claude/settings.json의 env에 CLAUDE_CONFIG_DIR, CLAUDE_CODE_TMPDIR, TMPDIR/TMP/TEMP를 넣어 쓰고 있었다면 동작하지 않습니다. 셸, 사용자 설정, 관리형 설정으로 옮겨야 합니다.
  • CLAUDE_CODE_SUBAGENT_MODEL의 우선순위가 낮아졌습니다 — 이 변수로 모든 서브에이전트 모델을 강제하던 설정은 더 이상 그렇게 동작하지 않습니다. 에이전트 정의의 model:과 실행 시점의 명시적 지정이 이 변수보다 우선합니다.
  • 좌석 기반 Enterprise 구독의 기본 모델이 Opus 5로 바뀌었습니다 — 다른 프리미엄 플랜과 같은 기준이 적용됩니다.
  • /effort 설정은 이제 모델마다 따로 저장됩니다 — 한 모델에서 바꾼 effort 수준이 다른 모델로 따라오지 않습니다.
  • 여섯 개 언어의 문법 강조가 제거됐습니다 — 1c, gml, isbl, mathematica, maxima, sqf 코드는 강조 없이 표시됩니다.
  • 서버에서 내려오는 일부 설정은 승인을 거쳐야 적용됩니다 — 샌드박스 TLS 종료, 샌드박스 트래픽 프록시 경유, 자격 증명 주입, 샌드박스 격리 약화에 해당하는 설정과, 자격 증명이나 라우팅 헤더를 지정하는 ANTHROPIC_CUSTOM_HEADERS가 대상입니다.
  • 커밋 트레일러 기본값이 모델에 따라 달라집니다 — 사용 중인 모델이 알려진 Claude 모델이 아니면(예: 커스텀 ANTHROPIC_BASE_URL 뒤의 서드파티 모델) 기본 트레일러가 Co-Authored-By: Claude Code로 기록됩니다.
  • /radio와 PR 배지의 사용 환경이 넓어졌습니다 — /radio는 Bedrock, Vertex AI, Foundry, Claude Platform on AWS와 텔레메트리를 끈 환경에서도 쓸 수 있고, 같은 환경에서 프롬프트 하단 PR 배지는 gh pr view 대신 gh auth token, GH_TOKEN, GITHUB_TOKEN으로 GitHub API를 직접 호출합니다.