
Claude Code v2.1.210|Write(path) 권한 규칙에 시작 시 경고 발생|매일 Changelog 해설
요약
Claude Code v2.1.210 업데이트에서 권한 규칙 설정 방식의 변경 사항과 주요 버그 수정 내용을 다룹니다. Write(path) 대신 Edit(path) 또는 Read(path)를 사용하도록 권장하며, worktree 격리 문제와 ultracode 보안 관련 개선 사항이 포함되었습니다.
핵심 포인트
- Write(path) 권한 규칙을 Edit(path) 또는 Read(path)로 전환 권장
- worktree 분리 서브 에이전트의 메인 리포지토리 접근 버그 수정
- ultracode opt-in이 webhook 등 비인간 입력에서도 작동하던 문제 개선
- git worktree lock이 남는 문제 해결 및 자동 스윕 기능 추가
Write(path) 형식의 권한 규칙을 settings.json에 작성하고 있으면, v2.1.210부터 시작 시 경고가 나타납니다. 안내되는 대체 대상은 Edit(path)와 Read(path)입니다. permission을 세세하게 작성하고 있는 설정일수록 영향을 받습니다.
Write(path) 계열의 권한 규칙에 시작 시 경고—Write(path) / NotebookEdit(path) / Glob(path)를 Edit(path) / Read(path)로 전환하도록 안내 (v2.1.210)
worktree 분리 서브 에이전트가 메인 리포지토리를 건드리고 있었음—git을 변경하는 명령이 자신의 worktree 외부로 전달됨 (v2.1.210)
ultracode의 opt-in이 webhook에서도 성립됨—인간 유래가 아닌 입력에서 키워드가 발화 (v2.1.210)
훅(hook)의 타임아웃이 사용자 거부로 보고됨—무인 세션이 멈춰서 대기하게 되는 원인 (v2.1.210)
접기(folding) 도구 행에 경과 시간 카운터 추가—장시간 도구 호출이 정지된 것처럼 보이는 문제에 대한 대처 (v2.1.210)
auto 모드의 권한 분류기가 외부 세션에서 Sonnet 5 기본값으로 설정—세션 첫 번째 요청에서 검증하고, 이후에는 고정 (v2.1.210)
대상 독자: settings.json의 permissions에 도구 이름 + 경로 형태로 규칙을 작성하고 있는 사람
Edit(path)와 Read(path)로 전환하라는 것이 경고의 내용입니다. 대체 방법은 changelog에서 명시하고 있습니다.
Added a startup warning for Write(path), NotebookEdit(path), and Glob(path) permission rules — use Edit(path) or Read(path) instead
수정 방향은 간단합니다. 파일을 쓰는 계열은 Edit(path)로, 파일을 읽거나 찾는 계열은 Read(path)로 전환합니다.
{
"permissions": {
"allow": [
...
이것을 다음 형태로 바꿉니다. Write와 NotebookEdit는 Edit로, Glob은 Read로 전환합니다.
{
"permissions": {
"allow": [
...
settings.json을 팀에서 공유하고 있다면, 모든 구성원의 시작 시 동일한 경고가 나타납니다. 수정은 빠를수록 나중에 되돌리는 수고를 줄일 수 있습니다. 교체한 후에는 의도한 범위 내에서 허용(allow)과 거부(deny)가 제대로 작동하는지 한 번 확인해 주세요.
isolation: 'worktree'를 지정한 서브 에이전트가 git을 변경하는 명령을 메인 리포지토리의 체크아웃(checkout)에 대해 실행할 수 있었습니다. 분리를 위해 worktree를 생성했음에도 불구하고, 그 분리를 넘어 원래의 리포지토리를 건드릴 수 있는 상태였습니다. v2.1.210에서 수정되어, git 조작은 자신의 worktree 내로 한정됩니다.
worktree를 생성하는 목적 자체가 병렬 실행 시 파일 충돌을 방지하기 위함입니다. 그 전제가 깨져 있었던 것입니다. 같은 버전에서, 중단된 백그라운드 세션이 git worktree lock을 남겨두는 문제도 해결되었습니다. 소유 프로세스가 사라진 락(lock)은 정기적인 스윕(sweep)을 통해 해제되도록 변경되었습니다.
ultracode의 키워드 opt-in이 webhook의 페이로드(payload)나 중계된 PR 코멘트와 같이 인간이 직접 입력하지 않은 입력에서도 성립되었습니다. 중계된 PR 코멘트 본문에 ultracode라고 적혀 있는 것만으로도 opt-in이 통과되는 경로였습니다.
같은 방향의 변경으로, Agent 도구가 서브 에이전트가 읽은 내용을 경유하는 간접 프롬프트 인젝션(indirect prompt injection)에 대해 강화되었습니다.
| 버전 | 카테고리 | 변경 사항 | 개요 |
|---|---|---|---|
| v2.1.210 | UI | 경과 시간 카운터 | 접힌 도구 요약 행에서 시간이 흐르며, 장시간 호출 시 정지된 것처럼 보이지 않게 개선 |
| ... | cd 처리 수정 | 명령이 백그라운드(background)로 넘어간 후, 모델이 cd가 적용된 것으로 오인하던 문제 수정. 작업 디렉토리가 변경되지 않는다는 점을 도구 결과에 명시 | |
| v2.1.210 | auto 모드 | 권한 분류기(Permission Classifier) 기본값을 Sonnet 5로 설정 | 외부 세션용. 첫 번째 요청에서 검증하며, 해당 세션 동안은 고정 |
| v2.1.210 | 플랜 (Plan) | 승인 라벨 오류 수정 | 편집이 없는 승인이 '(edited by user)'로 표시되어, 오래된 스냅샷으로 플랜 파일을 덮어쓰던 문제 수정 |
| v2.1.210 | 스킬 (Skill) | $1 / $2 소실 수정 | 지원되지 않는 위치 플레이스홀더(position placeholder)가 조용히 삭제되던 문제 수정. 앞으로는 그대로 유지 |
| v2.1.210 | MCP | 플러그인 제공 서버의 연쇄 중단 수정 | 세션 도중 MCP 재동기화 시, 플러그인 유래 서버가 종료되던 문제 수정 |
| v2.1.210 | MCP | SDK 서버의 연결 시작 수정 | initialize 제어 요청을 통해 등록된 서버가 다음 턴까지 연결을 대기하던 문제 수정 |
| v2.1.210 | CLI | claude attach 실패 수정 | 세션 전환 중 발생하는 "job not found", "agent is still starting" 문제 수정. 데몬(daemon)의 안정화를 기다린 후, 지연된 리사이즈도 완료된 뒤에 적용 |
| v2.1.210 | 에이전트 (Agent) | --effort ultracode 소실 수정 | claude agents --effort ultracode 값이 디스패치(dispatch) 대상 세션에 전달되지 않고 조용히 버려지던 문제 수정 |
| v2.1.210 | Grep | 페이징 끝부분의 잘못된 표시 수정 | content 모드에서 결과의 끝을 넘어서면 "No matches found"라고 반환하던 문제 수정 |
| v2.1.210 | 메모리 (Memory) | 무언의 절단(truncation) 폐지 | MEMORY.md가 읽기 상한을 초과하는 쓰기 작업을 수행할 경우, 명시적인 에러를 발생시킴 |
| v2.1.210 | 샌드박스 (Sandbox) | 지연 심볼릭 링크(symbolic link) 포함 | 나중에 나타난 .claude/* 심볼릭 링크가 deny-write 리스트에 반영되지 않던 문제 수정 |
| ... |
v2.1.210은 시작 시 경고가 단 1건 늘어난 것처럼 보일 수 있지만, settings.json 작성 방식 자체를 깊게 다루고 있습니다. 만약 Write(path)를 작성하고 있었다면, 그 부분은 수정 대상이라는 뜻입니다. worktree 분리와 ultracode 수정 또한 자동화 환경을 운영할수록 효과적입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기