oh-my-customcode 2.0.3 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -2709,6 +2709,196 @@ Opus 4.8에서 thinking blocks가 수정되어 API 오류가 발생하던 버그
|
|
|
2709
2709
|
**Action items**:
|
|
2710
2710
|
- 관측한 범위에서 행동 변화를 위해 룰·CLAUDE.md·에이전트·훅을 바꿔야 한다고 확정한 항목은 없습니다(R016: CC 지식은 이 가이드에 두고 룰 파일에는 행동 변화가 필요할 때만 1줄). 위 `[가설 — …]` 표기는 판정 기준을 충족하는 측정이 이루어지기 전에는 결론으로 쓰지 않습니다.
|
|
2711
2711
|
|
|
2712
|
+
---
|
|
2713
|
+
|
|
2714
|
+
## v2.1.306 (2026-10-21)
|
|
2715
|
+
|
|
2716
|
+
> Issue: #1867 — Claude Code v2.1.306 compatibility documentation
|
|
2717
|
+
> Scope-ceiling check (R017): 조사 시점(2026-10-25)의 최신 릴리즈는 2.1.310입니다(`claude --version`=2.1.310, `npm view @anthropic-ai/claude-code version`=2.1.310). 2.1.307·2.1.308·2.1.309·2.1.310 CHANGELOG 절을 각각 잘라 `2.1.306` 문자열과 "Revert"를 검색한 결과 네 절 모두 두 문자열이 0건이었으므로(`for v in 2.1.307 2.1.308 2.1.309 2.1.310; do awk -v v="$v" '/^## /{p=($2==v)} p' CHANGELOG.md | grep -c -F -e 2.1.306; awk -v v="$v" '/^## /{p=($2==v)} p' CHANGELOG.md | grep -c -i revert; done` 출력 0 여덟 줄), 이 릴리즈의 두 항목을 되돌리거나 좁히는 문장은 관측되지 않았습니다. 같은 compaction 영역의 후속 항목은 `for v in 2.1.307 2.1.308 2.1.309 2.1.310; do awk -v v="$v" '/^## /{p=($2==v)} p' CHANGELOG.md | grep -n -i compact; done` 검색에서 여섯 줄이 걸렸습니다(절 머리 줄을 1행으로 센 번호): 307:11("Autocompact is thrashing" 오류 일부, PDF 페이지·이미지·큰 도구 결과를 많이 읽는 턴), 307:12(cloud 세션 재시작 뒤 `/autocompact` 창), 309:14(매우 큰 중첩 CLAUDE.md 아래 파일을 읽은 뒤 반복 compaction), 309:38(compaction이 일어난 턴의 남은 artifact 업데이트마다 권한을 묻던 결함), 310:11(비대화형 세션(`-p`, Agent SDK)에서 트랜스크립트 파일이 매우 클 때 compaction 중 메모리 사용), 그리고 310:6 "Fixed compaction after a "Prompt is too long" error keeping too much of a conversation with dense text, such as base64 or SVG, so the next request could fail again"입니다. 여섯 줄 모두 롤백이 아니며 아래 MCP 세션 오류 보고 항목과 조건이 다른 별개 수정입니다. 릴리즈 게시 시각은 2026-10-21T03:16:31Z입니다(`gh release view v2.1.306 -R anthropics/claude-code --json publishedAt`).
|
|
2718
|
+
|
|
2719
|
+
### MCP · compaction 오류 보고
|
|
2720
|
+
|
|
2721
|
+
- CHANGELOG 원문: "Fixed an API error being replaced by "prompt is too long", and an unneeded compaction, in sessions with many MCP tools"
|
|
2722
|
+
(306) MCP 도구가 많은 세션에서 API 오류가 "prompt is too long"으로 바뀌어 보고되던 결함과 불필요한 compaction이 일어나던 결함이 함께 수정되었습니다. 원문의 인과 방향은 실제 API 오류가 "prompt is too long"으로 대체된 것이므로, 306 이전 MCP 도구가 많은 세션에서 본 "prompt is too long" 보고는 컨텍스트 초과의 증거가 아니었을 수 있고, 같은 조건의 세션에서 일어난 compaction도 필요해서 일어난 것이 아니었을 수 있습니다. R013은 다른 조건의 "Prompt is too long" 결함 수정을 기록하고 있습니다. (269) 노트는 auto-compaction이 요약할 완전한 이전 대화 교환이 없을 때(주로 매우 큰 프롬프트를 쓰는 SDK 세션)의 경우이고(`.claude/rules/SHOULD-ecomode.md:99`, 보이는 텍스트), (274) 노트는 훅 주도 세션(활성 `/goal` 등)에서 컨텍스트가 다시 넘칠 때의 경우입니다(`.claude/rules/SHOULD-ecomode.md:101`, 보이는 텍스트). 이 저장소의 `.mcp.json`은 서버 2개(`ontology-rag` stdio, `eraser` http)를 정의합니다(`git show HEAD:.mcp.json`). user 범위 설정이나 claude.ai 커넥터가 더하는 MCP 도구는 저장소 사실이 아니므로 세지 않았고, 원문이 "many"의 기준 수치를 밝히지 않으므로 이 저장소를 쓰는 세션이 결함 조건에 해당했는지는 [가설 — 306 이전 트랜스크립트에서 MCP 도구가 많은 세션의 "prompt is too long" 사례와 실제 컨텍스트 크기를 대조하면 판정 가능]입니다. 이 재해석은 실패·중단 보고도 ground-truth를 확인하기 전에는 실패로 단정하지 않는다는 R020 「Failure/Interrupt Report ≠ Actual Failure」 본문(`.claude/rules/MUST-completion-verification.md:526`, 보이는 텍스트)과 같은 계열의 진단 함의입니다. R013 임계값은 창 대비 백분율이므로(`.claude/rules/SHOULD-ecomode.md:91`) 이 수정으로 바뀌지 않습니다.
|
|
2723
|
+
|
|
2724
|
+
### 중첩 `claude -p` 실행
|
|
2725
|
+
|
|
2726
|
+
- CHANGELOG 원문: "Fixed `claude -p` inside cloud sessions reporting "Not logged in" when started without the session's environment variables"
|
|
2727
|
+
(306) cloud 세션 안에서 세션의 환경 변수 없이 시작된 `claude -p`가 "Not logged in"을 보고하던 결함이 수정되었습니다. 이 저장소 코드에서 `claude -p` 호출은 같은 줄 검색 `git grep -n -P '(\bclaude\b|CLAUDE[A-Z_]*BIN)[^\n]*?\s-p(\s|$|")' HEAD -- '*.sh' '*.bash' '*.ts' '*.js' '*.mjs' '*.cjs' '*.py' '*.yml' '*.yaml' '.husky/*'`와 줄 이음 검색 `git grep -n -P -A1 '(\bclaude\b|CLAUDE[A-Z_]*BIN)[^\n]*\\\s*$' HEAD -- '*.sh' '*.bash' '*.ts' '*.js' '*.mjs' '*.cjs' '*.py' '*.yml' '*.yaml' '.husky/*'`로 관측한 범위에서 네 계열(미러·테스트를 뺀 파일 5개)에 나타납니다. 첫째, 훅 `.claude/hooks/scripts/playwright-compress.sh:54`가 `claude -p --model haiku`로 브라우저 MCP 출력을 요약하며, 이 훅은 `.claude/settings.json:579`에 `mcp__playwright__.*|mcp__claude-in-chrome__.*` matcher(`:582`)로 배선되어 있습니다. 둘째, Web UI 서버 `packages/serve/src/lib/server/claude-cli.ts:40`, `:86`, `:117`, `:174`가 `` `claude -p ${escapeShellArg(prompt)} --no-input` `` 명령 문자열을 조립합니다. 셋째, `agora` 스킬의 `.claude/skills/agora/scripts/reviewers.sh:168`~`:169`와 `.claude/skills/agora/scripts/judge.sh:223`~`:224`가 변수 바이너리 `"$AGORA_CLAUDE_BIN"` 뒤의 이음 줄에서 `-p`를 넘깁니다. 넷째, `infra/hada-scout/scout-runner.sh:109`가 `timeout "${SCOUT_TIMEOUT}" claude -p`를 실행합니다. 같은 줄 검색의 나머지 히트는 `templates/` 아래 미러(`playwright-compress.sh:54`)와 테스트 주석(`tests/unit/core/hooks-scripts.test.ts:2863`)이고, 이음 줄 검색의 나머지 히트는 `templates/` 아래 `agora` 미러(같은 줄 번호)와 다음 줄이 `-p`가 아닌 줄(`.claude/hooks/scripts/adaptive-harness-scan.sh:12`와 그 미러, `.github/workflows/ci.yml:336`~`:337`, `tests/unit/skills/agora-scripts.test.ts:373`의 주석)입니다. 이 검색은 코드 확장자 파일에서 같은 줄과 바로 다음 이음 줄의 형태만 잡으므로 다른 변수명·배열 인자 형태의 호출은 놓칠 수 있으며, 배열 인자 형태 검색(`git grep -n -P "['\"]claude['\"]\s*,\s*\[|['\"]-p['\"]" HEAD -- '*.ts' '*.js' '*.mjs' '*.py' ':!**/*.test.ts'`)은 0건이었습니다. `agora`의 `run_sanitized`는 `AGORA_` 접두 환경 변수만 제거해 자식 프로세스를 띄웁니다(`.claude/skills/agora/scripts/reviewers.sh:49`~`:53`, `:151`). `playwright-compress.sh`는 출력이 3000자 이상일 때만 요약을 시도하고(`:44`~`:48`), `claude -p`가 0이 아닌 코드로 끝나면 원본 입력을 그대로 돌려줍니다(`:54`~`:58`). 다만 "Not logged in" 상태의 `claude -p`가 0으로 끝나며 그 문구를 stdout에 낸다면, 그 문구가 요약으로 쓰여 `:80`~`:81`에서 `tool_response`·`updatedMCPToolOutput`을 대체할 수 있습니다 [가설 — 로그아웃 상태 `claude -p`의 exit code와 stdout으로 판정]. 이 저장소를 cloud 세션에서 실행하는지, 위 자식 프로세스들이 "세션의 환경 변수 없이 시작된" 조건에 해당하는지는 관측하지 않았습니다 [가설 — cloud 세션에서 브라우저 MCP 도구를 호출한 뒤 훅이 요약을 돌려주는지 원본을 돌려주는지 306 전후로 비교하면 판정 가능].
|
|
2728
|
+
|
|
2729
|
+
기타 0건 — 이 저장소 비해당 항목은 없습니다. 실측: `gh release view v2.1.306 --repo anthropics/claude-code --json body --jq .body | grep -c '^- '` = 2건 중 위 본문 2건을 다뤘으므로 2 − 2 = 0건입니다. 계수 범위는 해당 릴리즈 노트의 최상위 불릿 줄(`- `로 시작하는 줄)입니다.
|
|
2730
|
+
|
|
2731
|
+
**Action items**:
|
|
2732
|
+
- 관측한 범위에서 훅·설정 변경이 필요하다고 확정한 항목은 없습니다. 첫 항목은 진단 해석에 관한 것입니다. 둘째 항목의 `playwright-compress.sh`는 `claude -p`가 0이 아닌 코드로 끝나는 경우 원본을 반환하도록 작성되어 있으나(`.claude/hooks/scripts/playwright-compress.sh:54`~`:58`), 로그아웃 상태에서 0으로 끝나는 경우의 동작은 위 [가설]입니다.
|
|
2733
|
+
- 306 이전 버전에서 MCP 도구가 많은 세션의 "prompt is too long" 보고나 compaction을 진단할 때는 컨텍스트 초과로 단정하기 전에 실제 컨텍스트 크기와 원래 API 오류를 먼저 확인합니다. 룰 변경 제안은 없습니다(R016: CC 지식은 이 가이드에 둡니다).
|
|
2734
|
+
- (306) 항목 중 `[가설 — …]` 표기는 판정 기준을 충족하는 측정이 이루어지기 전에는 결론으로 쓰지 않습니다.
|
|
2735
|
+
|
|
2736
|
+
---
|
|
2737
|
+
|
|
2738
|
+
## v2.1.307 (2026-10-21)
|
|
2739
|
+
|
|
2740
|
+
> Issue: #1870 — Claude Code v2.1.307 compatibility documentation
|
|
2741
|
+
> Scope-ceiling check (R017): 조사 시점(2026-10-25)의 최신 릴리즈는 2.1.310입니다(`claude --version`=2.1.310, `npm view @anthropic-ai/claude-code version`=2.1.310). 2.1.308·2.1.309·2.1.310 CHANGELOG 절을 각각 잘라 `2.1.307` 문자열과 "Revert"를 검색한 결과 세 절 모두 두 문자열이 0건이었으므로(`for v in 2.1.308 2.1.309 2.1.310; do awk -v v="$v" '/^## /{p=($2==v)} p' CHANGELOG.md | grep -c -F -e 2.1.307; awk -v v="$v" '/^## /{p=($2==v)} p' CHANGELOG.md | grep -c -i revert; done` 출력 0 여섯 줄), 이 릴리즈 항목을 되돌리거나 좁히는 문장은 관측되지 않았습니다. 아래 본문 항목의 핵심어로 309·310 절을 검색하면(`for v in 2.1.309 2.1.310; do awk -v v="$v" '/^## /{p=($2==v)} p' CHANGELOG.md | grep -n -i -E 'keychain|sleep|idempotent|thrash|compact|safety_event|\[1m\]|recently[- ]denied|unparseable|axScreenReader'; done`) 309 절 14·38행과 310 절 3·6·11행이 걸립니다(절 머리 줄을 1행으로 센 번호). 310:3은 Monitor 도구 항목으로 "sleep" 단어가 일치했을 뿐 MCP 연결 중 절전과는 무관합니다. compaction 히트 가운데 309:14(매우 큰 중첩 CLAUDE.md 아래 파일을 읽은 뒤 세션이 반복 compaction하던 결함, 크기 한도를 넘는 중첩 CLAUDE.md는 이제 앞부분만 로드)가 아래 "Autocompact is thrashing" 항목과 가장 가까운 후속 항목이지만, 원인 조건이 다른 별개 수정이며 307 항목을 되돌리거나 좁히지 않습니다. 309:38(compaction이 일어난 턴의 남은 artifact 업데이트마다 권한을 묻던 결함), 310:6(base64·SVG 같은 밀도 높은 텍스트가 있는 대화에서 "Prompt is too long" 오류 뒤의 compaction, 2.1.306 절에서 인용), 310:11(비대화형 세션(`-p`, Agent SDK)에서 트랜스크립트 파일이 매우 클 때 compaction 중 메모리 사용)도 별개 수정입니다. 릴리즈 게시 시각은 2026-10-21T22:17:02Z입니다(`gh release view v2.1.307 -R anthropics/claude-code --json publishedAt`).
|
|
2742
|
+
|
|
2743
|
+
### 모델 · 컨텍스트 · compaction
|
|
2744
|
+
|
|
2745
|
+
- CHANGELOG 원문: "Fixed requests failing with a model-not-found error when `CLAUDE_CODE_DISABLE_1M_CONTEXT` is set and the model is an alias with the `[1m]` suffix, such as `opus[1m]`"
|
|
2746
|
+
(307) `CLAUDE_CODE_DISABLE_1M_CONTEXT`가 설정된 상태에서 모델이 `opus[1m]`처럼 `[1m]` 접미사가 붙은 별칭이면 요청이 model-not-found 오류로 실패하던 결함이 수정되었습니다. R013은 이 환경 변수가 native 1M 창 모델을 auto-compaction으로 200K에 유지한다고 기록하고(`.claude/rules/SHOULD-ecomode.md:91`, 보이는 텍스트), R006은 `[1m]` 접미사를 1M 창 활성화 표기로 설명합니다(`.claude/rules/MUST-agent-design.md:62`, 보이는 텍스트). 저장소가 추적하는 파일 범위에서 에이전트 frontmatter의 `model:` 값은 `claude-sonnet-5-5` 42개, `claude-opus-5-5` 5개, `haiku` 3개이고(`git grep -h -E '^model:' HEAD -- '.claude/agents/*.md' | sort | uniq -c`), `[1m]` 표기는 `.claude/agents`·`.claude/settings.json`·`templates/.claude/settings.json`에서 0건이며(`git grep -n -F '[1m]' HEAD -- .claude/agents .claude/settings.json templates/.claude/settings.json` 출력 없음), `CLAUDE_CODE_DISABLE_1M_CONTEXT`는 tracked 설정 두 파일에 없습니다(`git grep -c CLAUDE_CODE_DISABLE_1M_CONTEXT HEAD -- .claude/settings.json templates/.claude/settings.json` rc=1). 검색을 코드·설정 확장자 전체로 넓힌 `git grep -n -F -e '[1m]' -e 'CLAUDE_CODE_DISABLE_1M_CONTEXT' HEAD -- '*.sh' '*.bash' '*.ts' '*.js' '*.mjs' '*.py' '*.yml' '*.yaml' '*.json' '.husky/*'`에서도 환경 변수는 0건이고, `[1m]` 히트는 주석(`.claude/hooks/scripts/audit-log.sh:29`와 그 미러)과 테스트 픽스처(`tests/unit/core/hooks-scripts-shape.test.ts:274`, `:280`, `tests/unit/core/template-validation.test.ts:108`, `:526`)입니다. 따라서 관측한 범위에서 저장소가 추적하는 설정만으로는 이 결함의 두 조건이 함께 만들어지지 않습니다. 다만 이 환경 변수와 모델 별칭은 셸 환경, user 범위 설정, gitignore된 `.claude/settings.local.json`(`git check-ignore -v --no-index .claude/settings.local.json` 결과 `.gitignore:40:.claude/*`)에서도 정해질 수 있으므로, 실제 해당 여부는 기기마다 다릅니다. 유지보수자 기기에서의 관측(2026-10-25, CC 2.1.310)으로는 셸 환경 변수가 설정되지 않았고(`[ -n "${CLAUDE_CODE_DISABLE_1M_CONTEXT+x}" ]` 거짓), user·local 설정 파일의 `CLAUDE_CODE_DISABLE_1M_CONTEXT`·`[1m]` 계수도 0이었습니다(`command grep -c -F -e CLAUDE_CODE_DISABLE_1M_CONTEXT ~/.claude/settings.json .claude/settings.local.json`, `command grep -c -F -e '[1m]' ~/.claude/settings.json .claude/settings.local.json`). R002가 기록한 이 저장소 실행 환경의 `claude-opus-5[1m]`(`.claude/rules/MUST-permissions.md:145`, 보이는 텍스트)은 `claude -p --output-format stream-json` init 이벤트에서 얻은 측정값이며(측정 방법은 `:143`, HTML 주석 안), `opus[1m]` 별칭을 골라 나온 값일 수도 있습니다. 그러나 그 측정 기록에는 `CLAUDE_CODE_DISABLE_1M_CONTEXT` 설정 여부가 적혀 있지 않으므로 이 결함 조건의 증거로 쓰지 않습니다. 수정 뒤 이 조합이 어떤 창 크기로 실행되는지는 원문이 밝히지 않습니다 [가설 — 환경 변수를 켜고 `opus[1m]`으로 시작한 세션의 `/context` 창 크기를 확인하면 판정 가능].
|
|
2747
|
+
- CHANGELOG 원문: "Fixed some "Autocompact is thrashing" errors in turns that read many PDF pages, images or other large tool results"
|
|
2748
|
+
(307) PDF 페이지·이미지·그 밖의 큰 도구 결과를 많이 읽는 턴에서 나던 "Autocompact is thrashing" 오류 일부가 수정되었습니다. 원문이 "some"으로 범위를 한정하므로 이 조건의 턴에서도 이 오류가 모두 해소되었다고 보지 않습니다. 관측한 범위(`git grep -n -i thrashing HEAD -- . ':!guides/claude-code/15-version-compatibility.md' ':!templates/guides/claude-code/15-version-compatibility.md'` 0건)에서 이 저장소의 룰·스킬·훅은 이 오류 문구를 참조하지 않습니다. R013 컨텍스트 예산 임계값은 창 대비 백분율이므로(`.claude/rules/SHOULD-ecomode.md:91`) 이 수정으로 바뀌지 않습니다.
|
|
2749
|
+
|
|
2750
|
+
### MCP
|
|
2751
|
+
|
|
2752
|
+
- CHANGELOG 원문: "Fixed MCP servers showing "needs authentication" in `claude -p` on macOS while the login keychain was locked; they now say why, and the next run after an unlock connects without a new sign-in"
|
|
2753
|
+
(307) macOS에서 로그인 키체인이 잠긴 동안 `claude -p`의 MCP 서버가 "needs authentication"으로 표시되던 결함이 수정되어, 이제 MCP 서버가 그 이유를 알려주고, 잠금 해제 뒤의 다음 실행은 새 로그인 없이 연결됩니다. `.mcp.json`의 `eraser`는 `url`과 `type: "http"`만 가진 원격 서버 정의이므로(`git show HEAD:.mcp.json`, `.mcp.json:14`~`:17`), 저장소 설정만으로는 이 서버가 키체인에 자격 증명을 두는 인증을 거치는지 알 수 없습니다. `/fsd` 스킬은 무인(`claude -p`, 예약 실행) 세션에서 `/goal`·`/loop`를 호출하는 경로를 권장하며(`.claude/skills/fsd/SKILL.md:172`), 저장소 코드가 `claude -p`를 직접 띄우는 예로는 `agora` 스킬의 `.claude/skills/agora/scripts/reviewers.sh:168`~`:169`(`"$AGORA_CLAUDE_BIN"` 뒤 이음 줄의 `-p`)가 있습니다. 이런 `claude -p` 실행이 macOS에서 로그인 키체인이 잠긴 동안 이뤄졌고 그때 MCP 서버가 "needs authentication"으로 보였다면, 원인 하나가 키체인 잠금이었을 수 있습니다 [가설 — 키체인이 잠긴 macOS에서 `claude -p`의 MCP 상태 메시지를 306과 307에서 비교하면 판정 가능]. 원문은 잠금 해제 뒤의 다음 실행이 연결된다고 적을 뿐 잠긴 동안 연결된다고 적지 않으므로, 무인 실행의 MCP 의존 단계는 계속 연결 상태를 실측합니다.
|
|
2754
|
+
- CHANGELOG 원문: "Fixed MCP servers being reported as timed out, and staying failed in headless runs, when a macOS or Linux computer went to sleep while they were connecting"
|
|
2755
|
+
(307) MCP 서버가 연결되는 도중 macOS·Linux 컴퓨터가 절전에 들어가면 타임아웃으로 보고되던 결함과, 그때 headless 실행에서는 실패 상태로 남던 결함이 수정되었습니다. R004는 절전·연결 끊김·서버 오류로 mid-stream 절단된 서브에이전트 응답이 자동으로 이어진다는 (257) 노트를 두고 있으며(`.claude/rules/SHOULD-error-handling.md:30`, 보이는 텍스트), 이 수정은 같은 절전 계열이지만 대상이 MCP 연결 단계라는 점이 다릅니다. 307 이전 macOS·Linux에서 MCP 서버가 연결 중 "timed out"으로 보고되었다면 서버 장애가 아니라 연결 중 절전이 원인이었을 수 있고, 그 실행이 headless(`claude -p`)였다면 원문상 실패 상태가 그대로 남는 결과까지 이어졌을 수 있습니다 [가설 — 실패 시각과 시스템 절전 기록(`pmset -g log`)을 대조하면 판정 가능]. 원문이 전송 방식을 한정하지 않으므로 `.mcp.json`의 두 서버(stdio `ontology-rag`, http `eraser`, `git show HEAD:.mcp.json`) 중 어느 쪽이 해당하는지는 구분하지 않습니다.
|
|
2756
|
+
- CHANGELOG 원문: "Fixed HTTP MCP tool calls being sent twice when the connection closed mid-call; only read-only or idempotent tools are now retried"
|
|
2757
|
+
(307) 호출 도중 연결이 닫히면 HTTP MCP 도구 호출이 두 번 전송되던 결함이 수정되어, 이제 읽기 전용이거나 멱등인 도구만 재시도됩니다. `.mcp.json`의 두 서버 중 HTTP 전송은 `eraser`(`.mcp.json:15`~`:16`)이고 `ontology-rag`는 stdio입니다(`.mcp.json:4`, `git show HEAD:.mcp.json`). 어떤 `eraser` 도구가 읽기 전용·멱등으로 분류되는지는 저장소 설정에서 알 수 없습니다. 307 이전에는 호출 도중 연결이 닫힌 경우 멱등이 아닌 도구 호출(예: 생성 계열)도 두 번 전송되어 중복 산출물을 남겼을 수 있습니다 [가설 — 중복 산출물 유무는 확인하지 않음]. 307 이후 멱등이 아닌 도구는 재시도되지 않으므로, 같은 상황에서 그 호출이 원격에 반영됐는지는 원격 상태를 확인한 뒤 재호출 여부를 정하는 것이 안전합니다 [가설 — 재시도하지 않는 경우의 오류 보고 형태는 원문이 밝히지 않음].
|
|
2758
|
+
|
|
2759
|
+
### 권한 · auto mode · 설정 범위
|
|
2760
|
+
|
|
2761
|
+
- CHANGELOG 원문: "Fixed `/permissions` > Recently denied not showing the denied shell command, and auto mode's local classifier ignoring an approval from there when it checks a retried command; approving a row now names the command, not its description"
|
|
2762
|
+
(307) `/permissions` > Recently denied에 거부된 셸 명령이 표시되지 않던 결함과, auto mode의 로컬 classifier가 재시도된 명령을 검사할 때 그 화면에서 한 승인을 무시하던 결함이 수정되었고, 이제 행을 승인하면 설명이 아니라 명령 자체가 지정됩니다. R015는 "allow 규칙으로는 safety-classifier 차단이 해소되지 않습니다"라고 적고 사용자 직접 실행(`!`)이나 차단 트리거 제거를 안내합니다(`.claude/rules/MUST-intent-transparency.md:138`, 보이는 텍스트). 307 이전에 auto mode에서 "Recently denied에서 승인했는데도 재시도가 다시 막혔다"는 관측이 있었다면 로컬 classifier가 재시도된 명령을 검사하며 그 승인을 무시한 결함이었을 수 있습니다. 원문은 로컬 classifier의 재시도 검사만 언급하므로, 이 화면 승인이 R015가 말하는 safety-classifier 차단까지 해소하는지는 [가설 — Recently denied에서 승인한 명령을 auto mode에서 재시도해 차단 여부를 확인하면 판정 가능]입니다. 관측한 범위(`git grep -n -i -E 'recently[- ]denied|recent denials' HEAD -- . ':!guides/claude-code/15-version-compatibility.md' ':!templates/guides/claude-code/15-version-compatibility.md'` 8줄)에서 이 화면에 관한 기록은 룰 파일의 경우 모두 HTML 주석 안에 있습니다: R002의 ARCHIVED 주석 두 줄(`.claude/rules/MUST-permissions.md:65`, `:67`, 자동 주입되지 않음), R001의 HTML 주석(`.claude/rules/MUST-safety.md:200`에서 열리는 주석 안의 `:201`, 자동 주입되지 않음), 그리고 이 세 줄의 `templates/` 미러입니다. 나머지 2줄은 위키 사본(`wiki/rules/r002.md:75`, `:77`)입니다. 이 중 R002 `:65`는 v2.1.191부터 Recently-denied 탭이 승인한 거부 항목을 닫을 때 유지한다고 기록하며, 이번 수정은 그 탭에서 한 승인이 auto mode 로컬 classifier의 재시도 검사에서 무시되던 결함을 다룹니다. 저장소가 추적하는 project 설정의 `permissions.defaultMode`는 `bypassPermissions`입니다(`git show HEAD:.claude/settings.json | jq -r '.permissions.defaultMode // "unset"'`). R010은 2.1.257+에서 project 범위의 `bypassPermissions`가 무시되어 그 범위가 `default`로 귀결된다고 `claude -p` 실측으로 기록하고, 대화형 세션의 결과는 `[가설]`로 남깁니다(`.claude/rules/MUST-orchestrator-coordination.md:588`, 보이는 텍스트). 실효 모드는 저장소 밖의 user·managed 범위 설정과 실행 플래그에도 좌우되므로, auto mode에서만 해당하는 두 번째 결함이 이 저장소를 쓰는 세션에 해당하는지는 기기마다 다르며 여기서 단정하지 않습니다.
|
|
2763
|
+
- CHANGELOG 원문: "Changed the `axScreenReader` setting and `CLAUDE_AX_SCREEN_READER` in a settings `env` block to apply only from user, managed or `--settings` settings (since 2.1.305)"
|
|
2764
|
+
(307) `axScreenReader` 설정과 settings `env` 블록의 `CLAUDE_AX_SCREEN_READER`가 user·managed·`--settings` 설정에서만 적용되도록 바뀌었으므로, project(`.claude/settings.json`)·local(`.claude/settings.local.json`) 범위에 적은 값은 적용 대상이 아닙니다. 이 설정은 2.1.208 CHANGELOG 절이 화면 낭독기 모드를 추가하면서 안내한 것이므로(`awk '/^## /{v=$2} /axScreenReader/{print v}' CHANGELOG.md` 결과 2.1.208과 2.1.307 두 절), 원문 괄호의 "(since 2.1.305)"는 도입 시점이 아니며 그 정확한 뜻은 원문만으로 확정하지 않습니다. 저장소가 추적하는 파일에서는 이 키가 쓰이지 않습니다(`git grep -n -i -E 'axScreenReader|AX_SCREEN_READER' HEAD -- . ':!guides/claude-code/15-version-compatibility.md' ':!templates/guides/claude-code/15-version-compatibility.md'` 0건). gitignore된 `.claude/settings.local.json`과 user 범위 설정은 저장소 사실이 아니므로 이 결론의 근거에 넣지 않았습니다. project·local 범위 값이 무시되거나 그 범위로는 켤 수 없는 설정의 예로는 다음이 있으며, 이 항목이 같은 계열에 더해집니다. R010은 2.1.257+에서 project·local의 `defaultMode: "bypassPermissions"`가 무시되고 `"auto"`도 같은 CHANGELOG에 따라 무시된다고 적으며 `auto`는 미측정 `[가설]`로 둡니다(`.claude/rules/MUST-orchestrator-coordination.md:588`, 보이는 텍스트). `monitoring-setup` 스킬은 2.1.282부터 project·local 설정의 OpenTelemetry 변수 중 export를 켜거나 endpoint를 지정하거나 내용을 캡처하는 변수가 무시된다고 적습니다(`.claude/skills/monitoring-setup/SKILL.md:24`). 2.1.232 CHANGELOG는 `sandbox.ripgrep`을 user·managed·`--settings`에서만 적용하도록 바꿨고, R002는 이를 HTML 주석 안 버전 노트로 기록합니다(`.claude/rules/MUST-permissions.md:99`, `:85`에서 열리는 DETAIL 주석 안, 자동 주입되지 않음). 같은 주석 안의 (2.1.222) 노트는 Remote Control auto-start를 repo-local 설정으로는 켤 수 없고 끄는 것만 가능하다고 적습니다(`.claude/rules/MUST-permissions.md:93`, HTML 주석 안).
|
|
2765
|
+
|
|
2766
|
+
### 서브에이전트 · 도구 호출 · 백그라운드
|
|
2767
|
+
|
|
2768
|
+
- CHANGELOG 원문: "Improved fork subagents launched together: each is now told which launch is its own, so forks are much less likely to try to start each other's work"
|
|
2769
|
+
(307) 함께 실행된 fork 서브에이전트가 이제 각자 어느 실행이 자기 것인지 전달받으므로, 서로의 작업을 시작하려 할 가능성이 크게 줄었습니다. R010은 「Parallel Delegation — Sibling-Agent Disclosure」 절(제목 `.claude/rules/MUST-orchestrator-coordination.md:493`)의 표에서 병렬 스폰 프롬프트마다 동시 실행 에이전트 수·각자 담당 범위·"자기 담당 범위만 기준으로 보고" 지시를 명시하도록 요구합니다(`.claude/rules/MUST-orchestrator-coordination.md:517`, 보이는 텍스트). 원문의 개선은 함께 실행된 각 fork에게 자기 실행이 어느 것인지 알려주는 것이며 형제의 담당 범위나 보고 범위 지시를 대신한다고 적지 않으므로, R010의 고지 의무는 그대로 둡니다. v2.1.232+에서 `subagent_type: "fork"` 서브에이전트가 전체 대화와 prompt cache를 상속한다는 기록은 R009의 DETAIL 주석 안에 있습니다(`.claude/rules/MUST-parallel-execution.md:197`에서 열리는 `<!-- DETAIL: CC version notes (v2.1.224-v2.1.273) + Fable 5 note` 주석의 `:200`, 자동 주입되지 않음). 관측한 범위(`git grep -n -E 'subagent_type: *"?fork|"fork"' HEAD -- .claude/skills .claude/agents` 출력 없음)에서 스킬·에이전트 정의는 fork 서브에이전트를 지정하지 않으므로, 이 개선은 오케스트레이터가 Agent 도구에서 직접 fork 여러 개를 함께 실행하는 경우에 해당합니다.
|
|
2770
|
+
- CHANGELOG 원문: "Improved recovery from unparseable tool calls: Claude Code now retries the call up to twice before ending the turn with an error"
|
|
2771
|
+
(307) 파싱할 수 없는 도구 호출에서의 복구가 개선되어, 이제 Claude Code가 턴을 오류로 끝내기 전에 그 호출을 최대 두 번 재시도합니다. R018은 멤버 프롬프트가 크거나 여러 도메인에 걸치면 "malformed-parsing truncation" 위험이 있다며 약 5000토큰·단일 도메인 상한을 둡니다(`.claude/rules/MUST-agent-teams.md:583`, 보이는 텍스트). 다만 R018 전체는 Detection이 No이면 휴면이고 R009/R010이 적용됩니다(`.claude/rules/MUST-agent-teams.md:36`, 보이는 텍스트). 이 가이드의 「Known Platform Issues & Workarounds」 절에 있는 「Agent tool malformed parsing on long / special-character prompts (#1241)」 항목은 Agent 도구가 매우 길거나 특수문자가 많은 위임 프롬프트를 간헐적으로 파싱하지 못해 도구 호출을 `malformed`로 보고하는 증상과 그 우회책을 적고 있습니다. R018과 그 #1241 항목이 말하는 실패가 원문의 "unparseable tool calls"와 같은 실패인지는 확인하지 않았습니다 [가설 — 상한을 넘는 위임에서 파싱 실패가 307 전후로 턴 종료로 이어지는 빈도를 비교하면 판정 가능]. 같은 실패라 해도 원문은 재시도 두 번 뒤에는 턴을 오류로 끝낸다고 적으므로 상한과 우회책의 필요성은 남습니다. 또한 307 이후에는 파싱 실패가 재시도로 가려질 수 있으므로, 위임 결과 판정은 계속 R020 ground-truth로 합니다.
|
|
2772
|
+
- CHANGELOG 원문: "Fixed subagent transcripts recording placeholder token usage and an empty stop reason for streamed responses"
|
|
2773
|
+
(307) 스트리밍 응답에 대해 서브에이전트 트랜스크립트가 자리표시용 토큰 사용량과 빈 stop reason을 기록하던 결함이 수정되었습니다. 관측한 범위(`git grep -l -E 'transcript_path' HEAD -- .claude/hooks`)에서 트랜스크립트 경로를 다루는 훅 스크립트는 `r007-r008-drift-advisor.sh`, `session-env-check.sh`, `task-outcome-recorder.sh` 세 개이고, `git grep -n -E 'stop_reason|input_tokens|output_tokens|"usage"|\.usage' HEAD -- .claude/hooks .claude/statusline.sh`가 출력 없이 끝났으므로 관측한 범위에서 훅과 상태줄에 트랜스크립트의 토큰 사용량이나 stop reason을 파싱하는 코드는 나오지 않았습니다. 비용 경고 훅 `cost-cap-advisor.sh`는 트랜스크립트가 아니라 `/tmp/.claude-cost-${PPID}` 파일에서 비용을 읽습니다(`.claude/hooks/scripts/cost-cap-advisor.sh:10`, `:43`). `packages/eval-core/src/db/schema.ts:41`에 `input_tokens` 열이 있으나, `git grep -n -F -e inputTokens -e input_tokens HEAD -- packages/eval-core/src ':!**/*.test.ts'`가 돌려준 것은 스키마·마이그레이션 정의 4줄(`db/schema.ts:41`, `:62`, `db/migrate.ts:40`, `:56`)이고 `git grep -n -P '\.usage\b|usage\?\.|message\.usage' HEAD -- packages/eval-core/src`는 0건(rc=1)이어서, 그 값을 서브에이전트 트랜스크립트에서 채우는 경로는 이 이름들로는 찾지 못했습니다 [가설 — eval-core의 세션 수집 경로를 읽으면 판정 가능]. 307 이전 서브에이전트 트랜스크립트로 토큰을 사후 집계했다면 스트리밍 응답분은 자리표시 값이었을 수 있으므로, 그런 과거 집계는 근거로 쓰지 않습니다.
|
|
2774
|
+
- CHANGELOG 원문: "Fixed a background command stopped through a connected app (such as the desktop app archiving an idle session) being reported to Claude as stopped by the user; the notice now names its output file"
|
|
2775
|
+
(307) 연결된 앱(예: 유휴 세션을 보관하는 데스크톱 앱)을 통해 중지된 백그라운드 명령이 Claude에게 사용자가 중지한 것으로 보고되던 결함이 수정되어, 이제 알림이 그 명령의 출력 파일을 지정합니다. R020 「Failure/Interrupt Report ≠ Actual Failure」 본문은 실패·중단 보고도 ground-truth를 확인하기 전에는 실패로 단정하지 않는다고 규정하며(`.claude/rules/MUST-completion-verification.md:526`, 보이는 텍스트), 이 결함은 중단의 주체가 잘못 보고되던 사례입니다. 307 이전에 "사용자가 중지함"으로 보고된 백그라운드 명령은 연결된 앱을 통해 중지된 경우라면 사용자 조치가 아니었으므로 사용자 의도의 근거로 쓰지 않습니다 [가설 — 이 저장소 사용자가 데스크톱 앱 등 연결된 앱으로 세션을 다루는지는 관측하지 않음]. 이제 알림이 출력 파일을 지정하므로, 중지된 명령이 어디까지 진행했는지는 그 파일을 읽어 확인하는 것이 R020의 ground-truth 원칙에 맞습니다.
|
|
2776
|
+
|
|
2777
|
+
### 텔레메트리
|
|
2778
|
+
|
|
2779
|
+
- CHANGELOG 원문: "Added the `claude_code.safety_event` OpenTelemetry event for each tool call a permission rule, auto mode, a safety check, a hook or the sandbox stopped, prompted or sent back"
|
|
2780
|
+
(307) 권한 규칙·auto mode·안전 검사·훅·샌드박스가 도구 호출을 멈추거나, 확인을 요청하거나, 되돌려 보낼 때마다 발생하는 `claude_code.safety_event` OpenTelemetry 이벤트가 추가되었습니다. 이 저장소의 `monitoring-setup` 스킬은 2.1.307이 속하는 「2.1.282 이상」 갈래(`.claude/skills/monitoring-setup/SKILL.md:58`)에서 `CLAUDE_CODE_ENABLE_TELEMETRY`·`OTEL_METRICS_EXPORTER`·`OTEL_LOGS_EXPORTER`를 console로 켜는 env 블록(`:66`~`:68`)을 user-scope 설정이나 셸 export로 배치하도록 안내합니다(`:73`~`:74`). 원문은 이 이벤트가 어느 exporter로 나가는지 밝히지 않으므로, 그 절차로 켠 console 출력에 이 이벤트가 나타나는지는 [가설 — 텔레메트리를 켠 세션에서 훅 차단 1건을 일으켜 console 출력에 `claude_code.safety_event`가 찍히는지 확인하면 판정 가능]입니다. R021 표는 Hard Block 훅으로 stage-blocker, dev-server tmux, rule-deletion-guard를 듭니다(`.claude/rules/MUST-enforcement-policy.md:19`, 보이는 텍스트). 이 중 `exit 2`로 끝나는 차단 경로가 코드에서 확인되는 것은 `.claude/hooks/scripts/stage-blocker.sh:13`과 `.claude/hooks/scripts/rule-deletion-guard.sh`(`:32`, `:46`, `:56`, `:881`)이며(`git show HEAD:.claude/hooks/scripts/stage-blocker.sh | grep -n 'exit 2'`, `git show HEAD:.claude/hooks/scripts/rule-deletion-guard.sh | grep -n 'exit 2'`), 이 이벤트는 이 두 훅이 도구 호출을 멈춘 경우를 세는 결정론적 소스 후보입니다. dev-server tmux 훅은 `.claude/settings.json:52`의 인라인 명령이 `exit 1`로 끝나므로(`git show HEAD:.claude/settings.json | awk 'NR==52' | grep -o -E 'exit [0-9]+'` = `exit 1`) 실제로 도구 호출을 멈추는지가 열린 이슈 #1856에서 아직 실측되지 않았고, 이 이벤트가 그 훅에 대해 기록되는지도 [가설 — #1856의 런타임 차단 실측과 함께 판정]입니다. R010 「Subagent Scope-Creep STOP Protocol」의 2회 trip 계수(`.claude/rules/MUST-orchestrator-coordination.md:262`, 보이는 텍스트)에도 쓸 수 있을지는, 이 이벤트가 서브에이전트의 classifier trip을 다른 차단과 구분해 기록하는지 원문이 밝히지 않으므로 [가설 — 이벤트 속성에 차단 주체와 에이전트 식별자가 있는지 확인하면 판정 가능]입니다. R021 표의 `failure-ledger.sh`(`.claude/rules/MUST-enforcement-policy.md:24`, 보이는 텍스트)는 PostToolUseFailure 훅으로 도구 실패를 원장에 남기는 별도 장치이며, 관측한 범위(`git grep -n safety_event HEAD -- . ':!guides/claude-code/15-version-compatibility.md' ':!templates/guides/claude-code/15-version-compatibility.md'` 0건)에서 이 저장소는 아직 이 이벤트를 참조하지 않습니다.
|
|
2781
|
+
|
|
2782
|
+
기타 31건 — 이 저장소 비해당으로 판단한 항목입니다: Claude API 코드를 API 버전 `2026-10-21`로 옮기는 옵트인 명령 `/claude-api api-version`, 맞춤 `ANTHROPIC_BASE_URL` 게이트웨이 뒤와 Foundry에서의 `prompt-caching-scope` 헤더(저장소가 추적하는 `.claude/settings.json`·`templates/.claude/settings.json`에 `ANTHROPIC_BASE_URL` 0건, `git grep -c ANTHROPIC_BASE_URL HEAD -- .claude/settings.json templates/.claude/settings.json` rc=1), Agent SDK 전용 항목(백그라운드 작업이 도는 동안 턴이 때때로 SDK MCP 서버의 최신 도구 없이 시작되던 결함, API 확인이 5초를 넘을 때의 `setModel()` 대기), cloud sessions·self-hosted runner 전용 항목(재시작 뒤 `/autocompact` 창 유지, 재시작 시 `/clear`한 대화가 때때로 되살아나던 결함, 웹 검색 403 사유 표시, 데스크톱 앱 MCP 연결 실패 시의 첫 응답 지연, checkout 훅·인증서·git proxy 등), Claude apps gateway 전용 항목(`CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`, Desktop 텔레메트리), 앱·도구 연동 세부(Cowork cloud 세션의 WebFetch, 데스크톱 앱 Code 탭의 GitHub MCP 양식, Artifact 도구 읽기의 연결 재사용), CLI 브라우저 로그인 성공 페이지가 뜨는 시점, 큰 붙여넣기 이미지·PDF 읽기가 든 세션의 Remote Control 연결 시간, `/help`·`/` 메뉴의 번들 스킬 설명 표시, WebSearch 예산 소진 안내 문구, VSCode·Cloud sessions·Code Review 전용 항목. 기능어 표본 검색(`git grep -l -i -E 'api-version|prompt-caching-scope|setModel|createSdkMcpServer|CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS|OTEL_EXPORTER_OTLP_HEADERS|Cowork|remote.control|checkout-hook|use-anthropic-git-proxy|self-hosted|WebSearch budget' HEAD -- .claude CLAUDE.md .github package.json`)의 히트 파일은 `.claude/rules/` 아래 8개와 `.github/scripts/send-report.ts` 하나이며, 후자의 히트는 GitHub REST 요청 헤더 `X-GitHub-Api-Version`(`:44`)의 부분 문자열 일치입니다. 룰 파일 8개의 히트는 문맥별로 판정하지 않았고, 기능어가 없는 표시·성능 항목도 검색으로 판정하지 않았습니다 [가설 — 항목별 저장소 측정은 위 본문 항목에 한해 실행했습니다]. 실측: `gh release view v2.1.307 --repo anthropics/claude-code --json body --jq .body | grep -c '^- '` = 43건 중 위 본문 12건을 다뤘으므로 43 − 12 = 31건입니다. 계수 범위는 해당 릴리즈 노트의 최상위 불릿 줄(`- `로 시작하는 줄)입니다.
|
|
2783
|
+
|
|
2784
|
+
**Action items**:
|
|
2785
|
+
- 관측한 범위에서 저장소가 추적하는 훅·설정·에이전트를 바꿔야 한다고 확정한 항목은 없습니다. 근거는 위 각 항목의 HEAD 측정입니다(`[1m]`·`CLAUDE_CODE_DISABLE_1M_CONTEXT`·`axScreenReader`가 tracked 설정에 없음, 트랜스크립트의 토큰 값을 파싱하는 훅이 위 `git grep`에서 나오지 않음). dev-server tmux 훅의 차단 여부는 이 릴리즈와 별개로 열린 이슈 #1856에서 다룹니다. 룰 문안 변경 가능성은 이 문서에서 판정하지 않습니다.
|
|
2786
|
+
- 후보: 이 가이드 「Known Platform Issues & Workarounds」의 #1241 항목에 307의 도구 호출 재시도 개선을 주석으로 달지는, 위 unparseable 항목의 [가설]이 판정된 뒤 결정합니다.
|
|
2787
|
+
- 307 이전 버전의 다음 관측은 각 조건에서 결함 산물이었을 수 있으므로 원인 진단의 결론으로 쓰지 않습니다: `CLAUDE_CODE_DISABLE_1M_CONTEXT` 설정과 `[1m]` 별칭 모델이 겹친 경우의 model-not-found, PDF 페이지·이미지·큰 도구 결과를 많이 읽는 턴의 "Autocompact is thrashing"(일부), macOS의 `claude -p`에서 로그인 키체인이 잠긴 동안의 MCP "needs authentication", macOS·Linux에서 연결 중 절전이 끼었을 때의 MCP "timed out" 보고와 headless 실행의 실패 상태 지속, 호출 도중 연결이 닫힌 HTTP MCP 호출의 이중 전송, 거부된 셸 명령이 보이지 않던 Recently denied 화면과 auto mode 로컬 classifier가 재시도된 명령을 검사하며 그 화면의 승인을 무시한 재차단, 연결된 앱을 통해 중지된 백그라운드 명령의 "사용자가 중지함" 보고, 스트리밍 응답에 대한 서브에이전트 트랜스크립트의 자리표시 토큰 사용량과 빈 stop reason.
|
|
2788
|
+
- 룰 문안 변경 제안은 이 문서에 두지 않습니다(R016: CC 지식은 이 가이드에 두고, 룰 파일에는 행동 변화가 필요할 때만 1줄). (307) 항목 중 `[가설 — …]` 표기는 판정 기준을 충족하는 측정이 이루어지기 전에는 결론으로 쓰지 않습니다.
|
|
2789
|
+
|
|
2790
|
+
---
|
|
2791
|
+
|
|
2792
|
+
## v2.1.308 (2026-10-22)
|
|
2793
|
+
|
|
2794
|
+
> Issue: #1869 — Claude Code v2.1.308 compatibility documentation
|
|
2795
|
+
> Scope-ceiling check (R017): 조사 시점(2026-10-25)의 최신 릴리즈는 2.1.310입니다(`claude --version`=2.1.310, `npm view @anthropic-ai/claude-code version`=2.1.310). 2.1.309·2.1.310 CHANGELOG 절을 각각 잘라 `2.1.308` 문자열과 "Revert"를 검색한 결과 두 절 모두 두 문자열이 0건이었으므로(`for v in 2.1.309 2.1.310; do awk -v v="$v" '/^## /{p=($2==v)} p' CHANGELOG.md | grep -c -F -e 2.1.308; awk -v v="$v" '/^## /{p=($2==v)} p' CHANGELOG.md | grep -c -i revert; done` 출력 0 네 줄), 이 릴리즈를 되돌리거나 좁히는 문장은 관측되지 않았습니다. 릴리즈 게시 시각은 2026-10-22T04:34:55Z입니다(`gh release view v2.1.308 -R anthropics/claude-code --json publishedAt`).
|
|
2796
|
+
|
|
2797
|
+
### 일반 안정성 개선
|
|
2798
|
+
|
|
2799
|
+
- CHANGELOG 원문: "Bug fixes and reliability improvements"
|
|
2800
|
+
(308) 이 릴리즈의 노트는 대상 기능을 밝히지 않고 버그 수정과 신뢰성 개선을 한 줄로 묶어 적습니다(`awk -v v=2.1.308 '/^## /{p=($2==v)} p' CHANGELOG.md | grep -c '^- '` = 1). 원문이 대상을 특정하지 않으므로 이 저장소의 훅·서브에이전트·스킬·설정 중 어디에 영향이 있는지 판정할 근거가 원문에 없으며, 저장소 측 조치도 도출하지 않습니다. 2.1.307과 2.1.309 사이에서 관측한 동작 차이를 이 릴리즈로 귀속하려면 버전을 고정해 재현합니다 [가설 — 2.1.307과 2.1.308을 각각 고정 실행해 같은 입력의 결과가 다르면 308 귀속 가능].
|
|
2801
|
+
|
|
2802
|
+
기타 0건 — 이 저장소 비해당 항목은 없습니다. 실측: `gh release view v2.1.308 --repo anthropics/claude-code --json body --jq .body | grep -c '^- '` = 1건 중 위 본문 1건을 다뤘으므로 1 − 1 = 0건입니다. 계수 범위는 해당 릴리즈 노트의 최상위 불릿 줄(`- `로 시작하는 줄)입니다.
|
|
2803
|
+
|
|
2804
|
+
**Action items**:
|
|
2805
|
+
- 훅·설정·룰 변경 제안은 없습니다. 원문에 구체 항목이 없으므로 이 릴리즈를 근거로 한 진단 재해석도 하지 않습니다.
|
|
2806
|
+
|
|
2807
|
+
---
|
|
2808
|
+
|
|
2809
|
+
## v2.1.309 (2026-10-22)
|
|
2810
|
+
|
|
2811
|
+
> Issue: #1871 — Claude Code v2.1.309 compatibility documentation
|
|
2812
|
+
> Scope-ceiling check (R017): 조사 시점(2026-10-25)의 최신 릴리즈는 2.1.310입니다(`claude --version`=2.1.310, `npm view @anthropic-ai/claude-code version`=2.1.310). 상한 이후 릴리즈인 2.1.310(게시 2026-10-23T23:39:00Z, `gh release view v2.1.310 -R anthropics/claude-code --json publishedAt`)의 CHANGELOG 절을 잘라 "2.1.309"와 "Revert"를 검색했으며(`gh api -H "Accept: application/vnd.github.raw" repos/anthropics/claude-code/contents/CHANGELOG.md | awk -v v=2.1.310 '/^## /{p=($2==v)} p' | grep -c -F '2.1.309'`=0, 같은 파이프라인 끝을 대소문자 무시 `grep -c -i 'revert'`로 바꾼 결과=0), 이 릴리즈 항목을 되돌리거나 좁히는 문장은 관측되지 않았습니다. 릴리즈 게시 시각은 2026-10-22T22:18:57Z입니다(`gh release view v2.1.309 -R anthropics/claude-code --json publishedAt`).
|
|
2813
|
+
|
|
2814
|
+
### 권한 · Bash 권한 검사
|
|
2815
|
+
|
|
2816
|
+
- CHANGELOG 원문: "Fixed Bash permission checks not prompting for some compound commands that change directory before running git when the `cd` is wrapped or prefixed, as they do for a plain `cd`"
|
|
2817
|
+
(309) 디렉토리를 바꾼 뒤 git을 실행하는 일부 복합 명령에서 `cd`가 감싸이거나(wrapped) 접두어가 붙은(prefixed) 경우, 일반 `cd`일 때와 달리 Bash 권한 검사가 승인을 요청하지 않던 결함이 수정되었습니다. 이제 이런 명령도 일반 `cd`처럼 승인을 요청합니다. R005는 지속 `cd`를 남기지 말고 절대 경로나 서브셸 `( cd <dir> && … )`을 쓰라고 규정하므로(`.claude/rules/MAY-optimization.md:89`, 보이는 본문 줄) 그중 서브셸 형태가 원문의 "wrapped" `cd`에 해당할 수 있습니다 [가설 — 원문은 "wrapped"의 구체 형태를 밝히지 않으므로, 비-bypass 모드에서 `( cd templates && git status )`를 실행해 프롬프트가 뜨는지로 판정]. 같은 계열의 기록으로, R002 버전 노트(`.claude/rules/MUST-permissions.md:125`의 (d), HTML 주석 안)는 2.1.271에서 디렉토리 변경 2회·서브셸·`cd`+`git` 체인을 가진 Bash 명령이 bypass·auto 모드의 `permissions.blockReadsOutsideWorkingDirectories`에서 프롬프트를 건너뛰던 결함이 수정되었다고 적습니다. 이 저장소의 두 settings에는 그 키가 없습니다(`git grep -n blockReadsOutsideWorkingDirectories HEAD -- .claude/settings.json templates/.claude/settings.json` rc=1). 저장소의 project settings에는 `Bash(git:*)` allow 규칙이 있으나(`.claude/settings.json:8`) 이 규칙이 `cd` 뒤 git 검사의 프롬프트를 억제하는지는 측정하지 않았습니다. 저장소의 project settings는 `defaultMode: "bypassPermissions"`이고 배포 미러 `templates/.claude/settings.json`에는 `defaultMode`가 없습니다(`git show HEAD:.claude/settings.json | jq -c '{defaultMode: .permissions.defaultMode}'` = `{"defaultMode":"bypassPermissions"}`, `git show HEAD:templates/.claude/settings.json | jq -c '{defaultMode: .permissions.defaultMode}'` = `{"defaultMode":null}`). R010 「Universal bypassPermissions」(제목 줄 `.claude/rules/MUST-orchestrator-coordination.md:579`, 본문 `:588`)는 2.1.257부터 project·local의 `bypassPermissions`가 무시되어, user 값이 `plan`·`auto`·`acceptEdits`처럼 bypass가 아닐 때 `claude -p`에서 `default`로 귀결된다고 기록합니다(#1828, CC 2.1.289 실측). 따라서 user 값이 bypass가 아닌 기기의 `claude -p` 무인 실행에서는 새 프롬프트가 나타날 수 있습니다 [가설 — 같은 본문 줄이 `default`가 실제로 프롬프트를 띄우는지와 TTY 세션을 미관측으로 남기므로, 해당 기기의 비-bypass 실행으로 판정]. `git -C templates status`처럼 디렉토리를 바꾸지 않는 형태는 원문의 대상 조건("change directory before running git")에 들지 않으며, R010 「사전 실측 리터럴」(본문 `.claude/rules/MUST-orchestrator-coordination.md:388`, 코드 블록 줄 `:391`)도 `cd` 없이 `git rev-parse`를 실행하는 형태입니다.
|
|
2818
|
+
- CHANGELOG 원문: "Fixed the Bash permission check trusting a variable set by a command whose redirect can fail to open"
|
|
2819
|
+
(309) 리다이렉트 대상을 열지 못할 수 있는 명령이 설정한 변수를 Bash 권한 검사가 신뢰하던 결함이 수정되었습니다. 원문은 수정 뒤의 결과(승인 요청 여부)를 밝히지 않으므로, 이전에 자동 승인되던 일부 명령이 이제 승인을 요청하는지는 단정하지 않습니다 [가설 — 원문에 결과어가 없으므로 영향 방향은 미확정]. 저장소의 project allow 규칙은 `Bash(git:*)`·`Bash(sed:*)` 같은 접두 규칙이며(`.claude/settings.json:8`, `:16`), 이런 형태(리다이렉트가 붙은 변수 설정 뒤 그 변수를 쓰는 명령)를 지시하는 스킬이 있는지는 측정하지 않았습니다.
|
|
2820
|
+
- CHANGELOG 원문: "Changed `sed -i` to get the standard Bash prompt and run as written, not a simulated file-edit preview; like other Bash edits, it is no longer restored by `/rewind`"
|
|
2821
|
+
(309) `sed -i`가 모의 파일 편집 미리보기 대신 표준 Bash 프롬프트를 받고 쓰인 그대로 실행되도록 바뀌었으며, 다른 Bash 편집처럼 `/rewind`로 복원되지 않습니다. 기본 동작 변경입니다. 저장소의 project settings에는 `Bash(sed:*)` allow 규칙이 있습니다(`.claude/settings.json:16`). 표준 Bash 프롬프트 경로에서는 이 접두 규칙이 `sed -i`에도 적용될 수 있습니다 [가설 — 비-bypass 모드에서 `sed -i` 실행 시 프롬프트 유무로 판정]. 관측한 범위에서 훅·스킬·에이전트·project settings에는 `sed -i` 명령이 없고(`git grep -n -P '\bsed\b[^|;&\n]*\s-i' HEAD -- .claude/hooks .claude/skills .claude/agents .claude/settings.json` rc=1; 이 정규식이 `sed -E -i`·`sed -i.bak` 형태도 잡는 것을 픽스처로 확인) `/rewind`를 쓰는 절차도 없으므로(`git grep -n -F '/rewind' HEAD -- .claude/skills .claude/agents .claude/hooks` rc=1), 관측한 영향 조건은 Claude가 즉석에서 쓰는 `sed -i` 편집입니다. 그런 편집은 이제 `/rewind` 복원 대상이 아닙니다. R005 버전 노트(`.claude/rules/MAY-optimization.md:108`, HTML 주석 안)와 R023 버전 노트(`.claude/rules/SHOULD-verification-ladder.md:351`, HTML 주석 안)는 2.1.269의 `bashEditDiffEnabled`(2.1.269 CHANGELOG: "Added a diff of the files a Bash command changed to the Bash tool result when the Bash tool handles file edits (setting `bashEditDiffEnabled`)")를 셸 편집의 사후 점검 수단으로 기록하며, R005 노트는 이로써 위임받은 에이전트의 `sed -i`가 감사 가능해진다고 적습니다. `sed -i`가 이제 모의 편집 미리보기가 아니라 다른 Bash 편집처럼 처리되므로 그 노트의 전제가 계속 성립하는지는 판정하지 않았습니다 [가설 — `bashEditDiffEnabled`를 켠 세션에서 `sed -i` 실행 결과에 diff가 붙는지로 판정]. 이 저장소의 두 settings에는 `bashEditDiffEnabled`가 없습니다(`git grep -n bashEditDiffEnabled HEAD -- .claude/settings.json templates/.claude/settings.json` rc=1).
|
|
2822
|
+
|
|
2823
|
+
### MCP · headless
|
|
2824
|
+
|
|
2825
|
+
- CHANGELOG 원문: "Fixed a disabled MCP server being reconnected by a later permission prompt in print and SDK sessions"
|
|
2826
|
+
(309) print(`-p`)·SDK 세션에서 비활성화된 MCP 서버가 나중의 권한 프롬프트로 다시 연결되던 결함이 수정되었습니다. v2.1.296 절의 headless 항목(headless 세션이 디렉토리 변경이나 플러그인 재로드 뒤, 그 폴더에서 꺼 둔 `.mcp.json` 서버나 플러그인 MCP 서버를 시작하던 결함)과 같은 계열의 수정입니다. 이 저장소는 `.mcp.json`에 서버 2개(`ontology-rag` stdio, `eraser` http)를 두며(`git cat-file -p HEAD:.mcp.json | jq -c '.mcpServers | to_entries | map({name: .key, type: (.value.type // "stdio")})'`), 두 서버 항목의 키에는 비활성화 키가 없습니다(`git cat-file -p HEAD:.mcp.json | jq -c '.mcpServers | map_values(keys)'` = `{"ontology-rag":["args","command","env","type"],"eraser":["type","url"]}`). 저장소의 project settings는 `enableAllProjectMcpServers: true`, `enabledMcpjsonServers: ["ontology-rag"]`이고 `disabledMcpjsonServers`는 null이며(`git show HEAD:.claude/settings.json | jq -c '{enableAllProjectMcpServers, enabledMcpjsonServers, disabledMcpjsonServers}'`), 배포 미러에서는 세 키가 모두 null로 나옵니다(`git show HEAD:templates/.claude/settings.json | jq -c '{enableAllProjectMcpServers, enabledMcpjsonServers, disabledMcpjsonServers}'`). 따라서 저장소 설정 범위에서는 비활성화된 서버가 관측되지 않았습니다. 사용자가 기기별로 끈 서버의 상태(사용자 `~/.claude.json` 등)는 관측하지 않았습니다 [가설 — 사용자 scope에서 끈 서버가 있고, print(`-p`)·SDK 세션(예: `claude -p`로 실행한 `/fsd`)에서 나중에 권한 프롬프트가 뜬 경우에 해당].
|
|
2827
|
+
|
|
2828
|
+
### CLAUDE.md 로딩 · 컨텍스트
|
|
2829
|
+
|
|
2830
|
+
- CHANGELOG 원문: "Fixed sessions compacting repeatedly after reading files under a very large nested CLAUDE.md; a nested CLAUDE.md over the size limit now loads only its start"
|
|
2831
|
+
(309) 매우 큰 nested CLAUDE.md 아래의 파일을 읽은 뒤 세션이 반복해서 compact되던 결함이 수정되었으며, 크기 한도를 넘는 nested CLAUDE.md는 이제 앞부분만 로드됩니다. 이 저장소의 추적 CLAUDE.md는 2개로, 루트 `CLAUDE.md`(13,846바이트)와 nested `templates/CLAUDE.md`(13,817바이트)입니다(`git ls-files -- '*CLAUDE*.md' '*claude.md'`, `git cat-file -s HEAD:CLAUDE.md`, `git cat-file -s HEAD:templates/CLAUDE.md`). 원문은 크기 한도 값을 밝히지 않으므로 `templates/CLAUDE.md`가 한도를 넘어 앞부분만 로드되는지는 판정하지 못했습니다 [가설 — `templates/` 아래 파일을 읽은 세션에서 `templates/CLAUDE.md`가 끝까지 로드되는지 `/context`나 `InstructionsLoaded` 훅으로 확인하면 판정]. `templates/CLAUDE.md`가 원문의 "very large" 조건에 해당하고, 구버전에서 `templates/` 아래 파일을 읽은 뒤 반복 compaction을 겪었다면 이 결함이 원인 후보입니다 [가설 — 크기 조건 충족 여부와 그런 반복 compaction은 관측하지 않음].
|
|
2832
|
+
|
|
2833
|
+
### 서브에이전트 · 팀원 · worktree
|
|
2834
|
+
|
|
2835
|
+
- CHANGELOG 원문: "Fixed split-pane agent teammates not inheriting the tool deny and `--tools` rules given on the leader's command line"
|
|
2836
|
+
(309) split-pane 에이전트 팀원이 리더의 명령줄에서 준 도구 deny 규칙과 `--tools` 규칙을 상속하지 않던 결함이 수정되었습니다. 저장소 settings(`.claude/settings.json`, `templates/.claude/settings.json`)에는 `teammateMode` 키가 없으므로(`git grep -n teammateMode HEAD -- .claude/settings.json templates/.claude/settings.json` rc=1) 팀원이 split-pane으로 표시되는지는 사용자 settings나 실행 옵션에 달려 있습니다 [가설 — `teammateMode` 값과 split-pane 표시의 대응은 원문 외 미확인]. R018은 `TeamCreate`가 없어도 이름 붙인 `Agent` 스폰이 세션의 암묵적 팀의 팀원을 만든다고 기록합니다(`.claude/rules/MUST-agent-teams.md:22`, 보이는 표 행, CC 2.1.289 실측). 다만 그런 팀원이 split-pane으로 뜨는지는 측정하지 않았습니다 [가설 — 이름 붙인 스폰 뒤 tmux pane 생성 여부로 판정]. 관측한 범위에서 이 저장소의 스킬·훅·워크플로·`package.json`은 `--tools`·`--disallowedTools`·`--allowedTools` 계열 플래그를 쓰지 않으며(`git grep -n -E -e '--tools|--disallowedTools|--disallowed-tools|--allowedTools|--allowed-tools' HEAD -- .claude/skills .claude/hooks .github package.json` rc=1), 가이드 쌍을 뺀 저장소 전체에서 이 플래그 계열이 나오는 파일은 `.claude/rules/MUST-permissions.md`, 그 `templates/` 미러, `wiki/rules/r002.md`입니다(`git grep -l -E -e '--tools|--disallowedTools|--disallowed-tools|--allowedTools|--allowed-tools' HEAD -- . ':!guides/claude-code/15-version-compatibility.md' ':!templates/guides/claude-code/15-version-compatibility.md'`). 따라서 상속될 리더 명령줄 규칙은 저장소 쪽에서 관측되지 않았습니다. 사용자가 실행 alias로 이런 플래그를 주는지는 관측하지 않았습니다. 에이전트 frontmatter의 `tools:`·`disallowedTools:` 제한(R010 「Known Limitations (Active Cache)」, 제목 줄 `.claude/rules/MUST-orchestrator-coordination.md:811`)은 원문 대상인 리더 명령줄 규칙과 별개입니다.
|
|
2837
|
+
- CHANGELOG 원문: "Fixed worktree-isolated sessions accepting some locale-prefixed commands the isolation guard should refuse"
|
|
2838
|
+
(309) worktree로 격리된 세션이, 격리 가드가 거부해야 할 일부 locale 접두 명령을 받아들이던 결함이 수정되었습니다. 관측한 범위(`git grep -n -E 'isolation: *"?worktree|EnterWorktree' HEAD -- .claude/agents .claude/skills .claude/settings.json`)에서 에이전트·스킬·project settings가 지시하는 worktree 격리 절차는 `omcustom-auto-improve` 스킬의 `EnterWorktree` 단계입니다(`.claude/skills/omcustom-auto-improve/SKILL.md:59`). 이 pathspec 밖에는 호출 단위 `isolation: "worktree"` 위임 기록이 있습니다. R009 버전 노트(`.claude/rules/MUST-parallel-execution.md:208`, HTML 주석 안)는 worktree 병렬 위임(`isolation: "worktree"`)을 다루고, R006은 frontmatter `isolation: worktree | sandbox`를 예시하며(`.claude/rules/MUST-agent-design.md:220`, HTML 주석 안), v2.1.305 절의 worktree 정리 항목도 호출 단위 `isolation: "worktree"` 위임을 관련 경로로 둡니다. 같은 격리 가드에 관한 기록으로, R002 버전 노트는 2.1.257에서 worktree 격리 세션이 git을 건드리지 않는 Bash 반복문·`$VAR` 읽기·`"$(…)"`·heredoc을 거부하던 결함이 수정되었다고 적고(`.claude/rules/MUST-permissions.md:113`의 (e), HTML 주석 안), 2.1.274에서 특정 중첩 셸 확장을 포함한 Bash 명령이 다시 거부되므로 R009 worktree 위임에서 이를 격리 결함으로 진단하지 말고 명령을 단순화하라고 적습니다(같은 파일 `:127`, HTML 주석 안). 이번 수정은 2.1.274처럼 가드가 거부하는 쪽으로 움직이는 변경입니다. `EnterWorktree`로 들어간 세션과 호출 단위 `isolation: "worktree"` 위임 세션이 원문의 "worktree-isolated sessions"에 해당하는지는 측정하지 않았습니다 [가설 — 두 경로에서 locale 접두 명령에 대한 가드의 거부 메시지를 관측하면 판정]. locale 접두(`LC_ALL=C`)는 관측한 범위에서 훅·스킬 스크립트의 코드 줄(`.claude/hooks/scripts/cost-cap-advisor.sh:22`, `:49`, `.claude/skills/agora/scripts/anonymize.sh:266`)에 나타나며(`git grep -n -E '(^|[ ;&|(])(LC_ALL|LANG|LC_[A-Z]+)=' HEAD -- .claude/skills .claude/hooks .claude/agents`), 이는 Bash 도구 명령 문자열이 아니라 스크립트 본문이므로 가드 검사 대상이 아니라고 봅니다 [가설 — 가드가 명령 문자열을 검사한다는 전제].
|
|
2839
|
+
- CHANGELOG 원문: "Fixed worktree-isolated sessions on zsh accepting some arithmetic commands that the isolation guard should refuse"
|
|
2840
|
+
(309) zsh의 worktree 격리 세션이, 격리 가드가 거부해야 할 일부 산술 명령을 받아들이던 결함이 수정되었습니다. R002 버전 노트는 이 저장소의 Bash 도구 실행 셸을 zsh로 기록하므로(`.claude/rules/MUST-permissions.md:113`의 (b), HTML 주석 안) zsh 조건에 해당할 수 있으나, 실제 셸은 사용자 기기마다 다릅니다. 위 항목과 같은 worktree 격리 경로(`EnterWorktree` 단계, 호출 단위 `isolation: "worktree"` 위임)에 관련되며 [가설], 이 수정은 가드가 더 많은 명령을 거부하는 방향이므로 zsh 격리 세션 안의 일부 즉석 산술 명령이 거부될 수 있습니다 [가설 — 거부 대상 산술 형태는 원문에 나오지 않음].
|
|
2841
|
+
|
|
2842
|
+
### Bash · 도구 동작 · transcript
|
|
2843
|
+
|
|
2844
|
+
- CHANGELOG 원문: "Fixed long tool output previews being cut through an emoji, leaving session transcripts that `jq` could not parse"
|
|
2845
|
+
(309) 긴 도구 출력 미리보기가 이모지 중간에서 잘려 `jq`가 파싱할 수 없는 세션 transcript를 남기던 결함이 수정되었습니다. 이 저장소의 R007/R008 drift advisor와 Stop 훅 회고는 transcript를 줄 단위로 나눈 뒤(`split("\n")`, `.claude/hooks/scripts/r007-r008-drift-advisor.sh:227`, `.claude/hooks/scripts/session-reflection.sh:167`) 각 줄을 `fromjson? // empty`로 파싱하므로(같은 파일의 코드 줄 `:228`, `:168`) 파싱할 수 없는 줄은 오류 없이 건너뜁니다. 따라서 구버전 transcript에서 긴 도구 출력 미리보기가 이모지 중간에서 잘린 줄은 판정에서 빠졌을 수 있습니다 [가설 — 잘린 줄이 판정에 쓰이는 레코드였는지는 미조사; 기존 transcript에서 `fromjson`이 실패하는 줄을 세면 판정]. R020 「Self-Violation Counting Is Also Diagnosis」(제목 줄 `.claude/rules/MUST-completion-verification.md:381`)의 표 행(`:389`)은 transcript를 파싱해 실측 집계한 뒤 보고하라고 요구하므로, 2.1.309 이전에 기록된 transcript를 `?` 없는 `jq`로 파싱하면 그런 줄에서 실패할 수 있습니다. 원문은 이미 기록된 transcript를 고친다고 서술하지 않습니다.
|
|
2846
|
+
- CHANGELOG 원문: "Improved disk-full handling: a Bash command cut off by a full disk now says so and names the folder to free up, and starting on a full temp volume prints a clear message, not a raw ENOSPC error"
|
|
2847
|
+
(309) 디스크가 가득 차 Bash 명령이 중단되면 이제 그 사실과 비워야 할 폴더를 알려 주고, 임시 볼륨이 가득 찬 상태로 시작하면 원시 ENOSPC 오류 대신 명확한 메시지를 출력합니다. R020은 실행 중 인터럽트된 셸 명령이 잘렸다는 표시 없이 "Ran 1 shell command"로만 표시되던 v2.1.246 이전 사례를 들어 출력 완결성 확인을 요구합니다(`.claude/rules/MUST-completion-verification.md:532`, 보이는 표 행). 이 개선은 디스크 부족으로 인한 Bash 명령 중단을 명시적으로 보고하는 방향이며, R020의 출력 완결성 확인 의무는 바뀌지 않습니다. v2.1.305 절의 `ENOSPC` 항목은 디스크가 가득 차 명령이 아무것도 실행되지 않은 경우를 다루며 실행 도중 끊긴 경우로 이 문장을 참조합니다. 두 경우는 구분되며, 이 항목처럼 실행 도중 끊긴 명령은 부분 산출물을 남겼을 수 있습니다.
|
|
2848
|
+
|
|
2849
|
+
### GitHub 기록
|
|
2850
|
+
|
|
2851
|
+
- CHANGELOG 원문: "Fixed Claude notifying unrelated GitHub users by writing role names and placeholders as mentions in PRs, issues and comments"
|
|
2852
|
+
(309) Claude가 PR·이슈·코멘트에 역할 이름과 플레이스홀더를 멘션 형태로 써서 무관한 GitHub 사용자에게 알림을 보내던 결함이 수정되었습니다. 이 저장소는 PR·이슈·코멘트를 `gh`로 작성하는 스킬을 두며(`git grep -l -E 'gh (issue|pr) (create|comment)' HEAD -- .claude/skills | wc -l`=5), R015는 에이전트 직접 지정 문법으로 `@{agent-name} {command}`를 규정합니다(`.claude/rules/MUST-intent-transparency.md:40`, 보이는 본문 줄; 예시는 `.claude/skills/intent-detection/SKILL.md:144`의 `@lang-python-expert`). 이 표기가 GitHub 본문에 들어가면 같은 이름의 GitHub 사용자 멘션으로 해석될 수 있었습니다 [가설 — 이 저장소가 작성한 이슈·PR 본문에서 `@<agent-name>` 형태를 검색하면 판정]. `.claude/skills/pipeline/workflows/auto-dev.yaml:504`, `:609`의 `--add-assignee @me`는 `gh` 명령 인자이며 본문 텍스트가 아니므로 원문 대상이 아닙니다.
|
|
2853
|
+
|
|
2854
|
+
기타 68건 — 이 저장소 비해당(샌드박스 항목: macOS·Linux 샌드박스의 셸 startup 파일 실행, `denyWrite` symlink glob, `--mcp-config` 파일 보호, 샌드박스 제외 명령의 쓰기 승인, Linux 백그라운드 명령의 write deny, Linux 샌드박스의 PDF Read — 저장소 settings에 `sandbox` 설정 0건(`git grep -n -i sandbox HEAD -- .claude/settings.json templates/.claude/settings.json` rc=1), `--mcp-config` 실행 경로 0건(`git grep -n -e '--mcp-config' HEAD -- .claude .github package.json` rc=1); 단 `.claude/agents/sec-codeql-expert.md:8`의 `isolation: sandbox`(R006 예시의 주석은 "sandbox = restricted bash", `.claude/rules/MUST-agent-design.md:220`, HTML 주석 안)를 CC가 Bash 샌드박스로 취급하는지는 확인하지 않았습니다 [가설 — 이 에이전트를 스폰해 샌드박스 적용 여부를 관측하면 판정; 해당하면 위 샌드박스 항목 일부가 이 에이전트에 관련]; `Edit(path)` deny 규칙의 Bash 리다이렉트 차단 — 저장소 settings의 deny 규칙 null(`git show HEAD:.claude/settings.json | jq -c '.permissions.deny'`, `git show HEAD:templates/.claude/settings.json | jq -c '.permissions.deny'`); worktree·브랜치 체크아웃의 git replace refs 무시 — 원격의 replace ref 0개(`git ls-remote origin 'refs/replace/*' | wc -l`=0); worktree 생성·재사용에서 git이 객체를 on-demand로 가져오지 않도록 한 변경(대상은 일반 clone과, Bash 샌드박스가 설정된 partial clone이며 그런 partial clone은 객체를 먼저 가져옴) — 저장소 settings에 sandbox 설정 0건(위 명령)이고, 일반 clone에서는 on-demand fetch가 일어나지 않는다고 봅니다 [가설 — 일반 clone에서 `EnterWorktree` 전후 git 네트워크 요청 유무로 판정]; `--add-dir` 스킬 이름 충돌 — 실행 경로 0건(`git grep -n -e 'add-dir' HEAD -- .claude/skills .claude/hooks .claude/agents .github package.json` rc=1); `claude ultrareview` workspace trust — 실행 경로 0건(`git grep -n -i ultrareview HEAD -- .claude/skills .claude/hooks .claude/agents .github package.json` rc=1); PowerShell 훅·Windows 전용 수정 — `"shell": "powershell"` 0건(`git grep -n -E '"shell" *: *"powershell"' HEAD -- .claude/settings.json templates/.claude/settings.json .claude/hooks/hooks.json` rc=1); Desktop·VSCode 전용 항목(Desktop app·VS Code의 bypass 모드에서 위험 `rm`·`rmdir` 프롬프트를 즉시 거부하는 변경 포함), Cloud sessions·Claude Tag·Code Review·self-hosted runner, mods(`turn.step` 별칭, hooks module 깊이 오류), artifact 게시·갱신, Amazon Bedrock·gateway keepalive, `/claude-api` 스킬·번들 dataviz 스킬, claude.ai synced plugin·skill, `/verify`·`/code-review`의 nested package 스킬 탐색, 터미널 UI(ctrl+enter, ctrl+o, 키 바인딩 slash command, `/rename`, `/rewind` 목록 표시), macOS Command Line Tools 대화상자, `/privacy-settings`·feedback, `claude remote-control` 상태줄, profile store symlink 보호, Claude Code 자체 git 명령의 Windows 속도·영어 오류 메시지). 실측: `gh release view v2.1.309 --repo anthropics/claude-code --json body --jq .body | grep -c '^- '` = 79건 중 위 본문 11건을 다뤘으므로 79 − 11 = 68건입니다. 계수 범위는 해당 릴리즈 노트의 최상위 불릿 줄(`- `로 시작하는 줄)입니다.
|
|
2855
|
+
|
|
2856
|
+
**Action items**:
|
|
2857
|
+
|
|
2858
|
+
- 본문 11개 항목 가운데 원문이 `Changed`로 시작하는 기본 동작 변경은 `sed -i` 항목 1개입니다(본문 인용 11줄의 첫 단어: Fixed 9, Changed 1, Improved 1). 이 릴리즈 전체의 `- Changed` 불릿은 6개이며(`gh release view v2.1.309 --repo anthropics/claude-code --json body --jq .body | grep -c '^- Changed'`=6) 나머지 5개는 기타로 분류했습니다. 본문의 결함 수정 9개 가운데 이 저장소의 실행에서 승인 요청이나 거부가 늘 수 있는 방향의 항목은 `cd`를 감싸거나 접두어를 붙인 뒤 git을 실행하는 일부 복합 명령, worktree 격리 가드 2건(일부 locale 접두 명령, zsh의 일부 산술 명령 — 해당 세션 경로는 [가설]), 그리고 리더를 deny·`--tools` 명령줄 규칙으로 실행하고 split-pane 팀원을 쓰는 경우의 규칙 상속입니다(본문에서 저장소 쪽 사용은 관측되지 않았습니다). 비활성 MCP 서버의 재연결 방지는 사용자가 끈 상태를 유지하는 수정이므로 이 목록에 넣지 않았습니다. 기타로 분류한 항목에도 거부나 승인 요청이 늘 수 있는 방향의 변경이 있으나(예: `Edit(path)` deny 규칙의 Bash 리다이렉트 차단, `--mcp-config` 파일 보호, 샌드박스 제외 명령의 쓰기 전 승인 요청, Windows PowerShell의 `Set-Location`·`cd` 승인 요청), 위 기타 문장의 측정과 범주 분류에 따라 이 저장소 비해당으로 두었습니다. 리다이렉트를 열지 못할 수 있는 명령이 설정한 변수 항목은 원문에 결과어가 없어 방향을 분류하지 않았습니다. 이 저장소에서 실제로 프롬프트·거부가 생기는지는 아래 후속 실측 후보 (1)·(2)·(5)·(6)으로 남깁니다. 룰·CLAUDE.md·에이전트·훅 문안 변경은 이 절에서 확정하지 않습니다(R016: CC 지식은 이 가이드에 두고 룰 파일에는 행동 변화가 필요할 때만 1줄).
|
|
2859
|
+
- 후속 실측 후보: (1) 비-bypass 모드에서 `( cd templates && git status )`가 프롬프트를 띄우는지, `Bash(git:*)`가 이를 억제하는지 확인합니다. (2) 비-bypass 모드에서 `Bash(sed:*)`가 `sed -i`에 적용되는지, `bashEditDiffEnabled`를 켠 세션에서 `sed -i` 결과에 diff가 붙는지 확인합니다. (3) `templates/CLAUDE.md`(13,817바이트)가 nested 크기 한도를 넘는지 확인합니다. (4) 2.1.309 이전 transcript에서 `fromjson`이 실패하는 줄 수를 셉니다. (5) `EnterWorktree` 세션과 호출 단위 `isolation: "worktree"` 위임 세션에서 locale 접두 명령과 zsh 산술 명령이 거부되는지 확인합니다. (6) 리더를 `--disallowedTools`·`--tools`로 실행한 세션에서 이름 붙인 스폰이 split-pane 팀원이 되는지, 그 팀원이 리더의 규칙을 상속하는지 확인합니다.
|
|
2860
|
+
- (309) 항목 중 `[가설 — …]` 표기는 판정 기준을 충족하는 측정이 이루어지기 전에는 결론으로 쓰지 않습니다.
|
|
2861
|
+
|
|
2862
|
+
---
|
|
2863
|
+
|
|
2864
|
+
## v2.1.310 (2026-10-23)
|
|
2865
|
+
|
|
2866
|
+
> Issue: #1872 — Claude Code v2.1.310 compatibility documentation
|
|
2867
|
+
> Scope-ceiling check (R017): 조사 시점(2026-10-25)의 최신 릴리즈는 2.1.310입니다(`claude --version`=2.1.310, `npm view @anthropic-ai/claude-code version`=2.1.310, `gh release list -R anthropics/claude-code --limit 3`의 첫 행이 `v2.1.310 Latest`). 이 릴리즈가 스코프 상한이므로 이후 릴리즈의 롤백 확인 대상이 없습니다. 릴리즈 게시 시각은 2026-10-23T23:39:00Z입니다(`gh release view v2.1.310 -R anthropics/claude-code --json publishedAt`).
|
|
2868
|
+
|
|
2869
|
+
### Bash · Monitor 도구
|
|
2870
|
+
|
|
2871
|
+
- CHANGELOG 원문: "Added the Monitor tool and plugin monitors on Bedrock, Vertex, and Foundry, and when telemetry or nonessential traffic is disabled; long foreground sleeps are now blocked there too"
|
|
2872
|
+
(310) Bedrock·Vertex·Foundry에서, 그리고 텔레메트리나 비필수 트래픽을 끈 경우에도 Monitor 도구와 플러그인 monitor가 추가되었고, 그 환경에서도 이제 긴 foreground sleep이 차단됩니다. R002는 Monitor를 Tier 3 도구로 분류합니다(`.claude/rules/MUST-permissions.md:11`, 주석 밖 표 행). 추적되는 프로젝트 settings와 그 `templates/` 미러에는 `env` 키가 없습니다(`for f in .claude/settings.json templates/.claude/settings.json; do git show "HEAD:$f" | jq 'has("env")'; done` = `false`, `false`). `git grep -n -E 'CLAUDE_CODE_USE_(BEDROCK|VERTEX|FOUNDRY)|DISABLE_TELEMETRY|DISABLE_NONESSENTIAL_TRAFFIC' HEAD -- . ':!guides/claude-code/15-version-compatibility.md' ':!templates/guides/claude-code/15-version-compatibility.md'`의 출력은 15줄이며, 그중 `CLAUDE_CODE_USE_` 히트는 없습니다. 15줄의 내역은 다음과 같습니다. `.claude/skills/monitoring-setup/SKILL.md`의 4줄 중 `:251`·`:253`은 변수 설명 표이고, `:262`·`:264`는 "Enterprise Configuration" 예시의 `env` 블록에서 `DISABLE_TELEMETRY`와 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`를 `"1"`로 둡니다. `.claude/skills/skills-sh-search/SKILL.md:211`은 skills CLI 텔레메트리를 끄려면 `DISABLE_TELEMETRY=1`을 설정하라고 안내합니다. `guides/claude-code/13-cli-flags.md:141`·`:143`은 변수 설명 표이고, `docs/superpowers/plans/2026-03-29-v0.65.0-release.md:29`는 계획 문서의 작업 항목입니다. 나머지 7줄은 앞의 세 파일(`monitoring-setup` 4줄, `skills-sh-search` 1줄, `13-cli-flags.md` 2줄)의 `templates/` 미러입니다. Enterprise Configuration 예시를 적용한 환경은 이 릴리즈부터 Monitor 도구를 받고 긴 foreground sleep도 차단되는 조건에 들어갑니다 [가설 — 이 예시를 실제로 적용한 사용자 환경은 미관측]. `skills-sh-search`의 안내를 따라 Claude Code가 실행되는 셸에 `DISABLE_TELEMETRY=1`을 export하는 것도 같은 조건에 들어가는 또 하나의 경로일 수 있습니다 [가설 — CC가 그 셸 변수를 텔레메트리 비활성 조건으로 읽는지와 사용자의 export 여부는 미관측]. foreground sleep 쪽은 `git grep -n -P '(?<![A-Za-z_])sleep(?![A-Za-z_])' HEAD -- .claude/skills .claude/hooks .claude/agents`로 재면 30줄이 걸립니다. 그중 셸 `sleep` 명령은 agora 스크립트 watchdog의 `( sleep "$secs"; kill -TERM -- "-$pid" 2>/dev/null ) &` 2줄(`.claude/skills/agora/scripts/judge.sh:140`, `.claude/skills/agora/scripts/reviewers.sh:106`)입니다. 나머지 28줄은 같은 두 스크립트의 주석 6줄, `.claude/skills/claude-code-bible/scripts/fetch-docs.js`의 JS `sleep` 함수 2줄, `fastapi-best-practices`·`java-best-practices` 문서의 Python·Java `sleep` 언급 3줄, `systematic-debugging`의 TS 예시와 임의 대기 반패턴 서술 15줄, 워크플로 스크립트 사본에서 `sleep`을 무력화하라는 `.claude/skills/pipeline/workflows/auto-dev.yaml` 서술 2줄입니다. 숫자 인자만 찾는 ERE `git grep -n -E '(^|[^a-zA-Z_])sleep [0-9]' HEAD -- .claude/skills .claude/hooks .claude/agents`는 이 변수 인자 형태를 놓쳐 출력이 없습니다(rc=1). agora watchdog의 `sleep`은 스크립트 안에서 `&`로 띄운 서브셸에 있으며, 이 차단이 스크립트 안의 그런 sleep에도 적용되는지는 관측하지 않았습니다 [가설 — Bedrock·Vertex·Foundry나 텔레메트리·비필수 트래픽을 끈 환경에서 agora를 실행해 watchdog 서브셸의 sleep이 차단되는지 확인하면 판정].
|
|
2873
|
+
|
|
2874
|
+
### 컨텍스트 · compaction · 무인(`-p`) 실행
|
|
2875
|
+
|
|
2876
|
+
- CHANGELOG 원문: "Fixed compaction after a "Prompt is too long" error keeping too much of a conversation with dense text, such as base64 or SVG, so the next request could fail again"
|
|
2877
|
+
(310) "Prompt is too long" 오류 뒤의 compaction이 base64나 SVG처럼 밀도 높은 텍스트가 든 대화를 너무 많이 남겨, 다음 요청이 다시 실패할 수 있던 결함이 수정되었습니다. 룰에서는 예컨대 R013 노트(`.claude/rules/SHOULD-ecomode.md:99`, `:101`, 주석 밖 본문 줄)가 같은 오류 계열의 compaction 수정을 기록합니다. 이 가이드에서 원문 인용 줄에 "Prompt is too long"이 들어간 항목은, 이 절을 넣기 전(HEAD 5600fc87) 기준으로 (284)(288)(290)(302)(304) 5건입니다(`git show HEAD:guides/claude-code/15-version-compatibility.md | command grep -n -F 'CHANGELOG 원문: "' | command grep -F 'Prompt is too long'` = 5줄). 이 저장소에서는 `diagram-design` 스킬이 SVG 다이어그램 생성을 목적으로 합니다(`.claude/skills/diagram-design/SKILL.md:3`). 이 스킬로 SVG 텍스트가 많이 쌓인 대화에서 "Prompt is too long" 오류 뒤 compaction을 거친 다음 요청이 다시 실패했다면 구버전의 이 결함이 원인 후보입니다 [가설 — 해당 스킬을 쓴 세션에서 그런 재실패 사례는 미관측]. R013의 임계값 정의는 바뀌지 않습니다.
|
|
2878
|
+
- CHANGELOG 원문: "Improved memory use of non-interactive sessions (`-p`, Agent SDK) during compaction when the transcript file is very large"
|
|
2879
|
+
(310) 트랜스크립트 파일이 매우 클 때 비대화형 세션(`-p`, Agent SDK)이 compaction 중 쓰는 메모리가 개선되었습니다. `/fsd`는 무인(`claude -p`, 예약 실행) 세션에서 `/goal`·`/loop` 경로를 권장하고(`.claude/skills/fsd/SKILL.md:172`), `claude -p` 경로에서는 env `OMCUSTOM_UNATTENDED=1`을 쓰도록 안내합니다(`:133`). R013은 메모리 사용량이 치명적일 때의 가시적 경고(v2.1.274)를 기록합니다(`.claude/rules/SHOULD-ecomode.md:101`, 주석 밖 본문 줄). 장기 `-p` 실행에서 트랜스크립트 파일이 매우 커지면 이 개선이 해당할 수 있으나, CHANGELOG는 "very large"의 기준을 밝히지 않습니다 [가설 — 트랜스크립트 파일이 매우 큰 장기 `-p` `/fsd` 실행에서 compaction 시점 메모리를 2.1.310 전후로 비교하면 판정]. 룰 변경은 필요하지 않습니다.
|
|
2880
|
+
|
|
2881
|
+
### 권한 · permission mode · settings
|
|
2882
|
+
|
|
2883
|
+
- CHANGELOG 원문: "Improved auto mode's prompt before the first read outside the working directories: it now says when blocking those reads makes shell commands ask for permission"
|
|
2884
|
+
(310) auto mode에서 작업 디렉토리 밖의 첫 읽기 전에 표시되는 프롬프트가 개선되어, 그런 읽기를 차단하면 셸 명령이 권한을 요청하게 되는 경우 이제 그 사실을 알려 줍니다. R002의 v2.1.257 노트는 HTML 주석 안의 DETAIL 블록(자동 주입되지 않음)에 있으며(`.claude/rules/MUST-permissions.md:113`, 주석 시작 `:85`), auto mode에서 작업 디렉토리 밖 첫 파일 읽기 전에 1회 프롬프트를 표시하고 그런 읽기를 차단하는 동작을 `permissions.blockReadsOutsideWorkingDirectories` 설정의 동작으로 서술합니다. 같은 DETAIL 블록에는 이 설정과 셸 명령을 함께 다룬 기록이 더 있습니다. v2.1.271 노트의 (d)(`:125`, HTML 주석 안)는 디렉토리 변경 2회, 서브셸, `cd`+`git` 체인을 가진 명령이 bypass·auto 모드의 이 설정에서 프롬프트를 건너뛰던 결함의 수정을 기록합니다. v2.1.273/274 노트의 (273) 항목(`:127`, HTML 주석 안)은 권한 검사기가 완전히 분석할 수 없는 Bash 명령이 이 설정에서 프롬프트를 건너뛰던 결함의 수정을 기록합니다. 추적되는 프로젝트 settings와 그 `templates/` 미러에는 이 설정이 없습니다(`for f in .claude/settings.json templates/.claude/settings.json; do git show "HEAD:$f" | jq '(.permissions // {}) | has("blockReadsOutsideWorkingDirectories")'; done` = `false`, `false`). `for f in .claude/settings.json templates/.claude/settings.json; do git show "HEAD:$f" | jq -c '{defaultMode: (.permissions.defaultMode // "unset"), has: ((.permissions // {}) | has("defaultMode"))}'; done`의 출력은 `{"defaultMode":"bypassPermissions","has":true}`, `{"defaultMode":"unset","has":false}`이므로, 추적되는 프로젝트 settings의 `permissions.defaultMode`는 `bypassPermissions`이고 `templates/` 미러에는 이 키가 없습니다. R010은 2.1.257부터 프로젝트·로컬의 `bypassPermissions`가 무시된다고 기록하고, `claude -p` 실측(CC 2.1.289)으로 그 결과를 두 갈래로 나눕니다. 사용자 값이 `bypassPermissions`가 아니면(`plan`/`auto`/`acceptEdits`) 무시된 범위가 `default`로 귀결되어 사용자 값을 덮고, 사용자 값이 `bypassPermissions`이면 결과가 `bypassPermissions`로 남습니다. 대화형 TTY 세션의 유효 모드는 R010이 `[가설]`로 남겨 두었습니다(`.claude/rules/MUST-orchestrator-coordination.md:588`, 주석 밖 본문 줄). 사용자·managed settings와 실행 플래그는 저장소 밖에 있으므로, 이 프롬프트가 이 저장소 세션에서 표시되는지는 관측하지 않았습니다 [가설 — 설정을 켠 auto mode 세션에서 작업 디렉토리 밖을 처음 읽을 때 문구를 확인하면 판정].
|
|
2885
|
+
- CHANGELOG 원문: "Fixed file read permission prompts not showing where a symbolic link leads"
|
|
2886
|
+
(310) 파일 읽기 권한 프롬프트가 심볼릭 링크의 대상 위치를 보여 주지 않던 결함이 수정되었습니다. 쓰기 쪽의 같은 계열 수정은 이 가이드의 (280) 항목이 기록하며, 그 수정의 결과는 두 가지입니다. 하나는 심볼릭 링크 경로를 통한 쓰기에서 프롬프트가 실제 쓰기 위치를 표시하는 것이고, 다른 하나는 `acceptEdits`·allow 규칙·auto mode가 밖에 떨어지는 쓰기를 더 이상 승인하지 않는 것입니다. 관측한 범위에서 이 저장소의 추적 심볼릭 링크는 `docs/plans/refs/latest` 1개이며(`git ls-files -s | awk '$1=="120000"{print $4}'`), 대상은 저장소 안의 상대 경로 `../2025-01-25`입니다(`git cat-file -p HEAD:docs/plans/refs/latest`). 이 수정의 대상은 프롬프트에 표시되는 내용이며, `.claude/settings.json`의 `permissions` 규칙은 바뀌지 않습니다.
|
|
2887
|
+
- CHANGELOG 원문: "Fixed background cleanup deleting some recent files, such as pasted images, when `cleanupPeriodDays` is set to a very large value"
|
|
2888
|
+
(310) `cleanupPeriodDays`를 매우 큰 값으로 설정했을 때 백그라운드 정리가 붙여 넣은 이미지 같은 최근 파일 일부를 지우던 결함이 수정되었습니다. 추적되는 프로젝트 settings와 그 `templates/` 미러에는 `cleanupPeriodDays`가 없습니다(`for f in .claude/settings.json templates/.claude/settings.json; do git show "HEAD:$f" | jq 'has("cleanupPeriodDays")'; done` = `false`, `false`). 저장소 안에서는 `git grep -n cleanupPeriodDays HEAD -- . ':!guides/claude-code/15-version-compatibility.md' ':!templates/guides/claude-code/15-version-compatibility.md'`의 히트가 R011의 HTML 주석 안 DETAIL 블록(자동 주입되지 않음, 주석 시작 `.claude/rules/SHOULD-memory-integration.md:551`)에 있는 노트(`:552`)와 그 `templates/` 미러, `wiki/rules/r011.md:142` 사본의 서술 3건이며, 이 키를 설정하는 추적 파일은 이 출력에 없습니다. 따라서 저장소 설정 범위에서는 결함 조건(매우 큰 값 설정)이 관측되지 않았습니다. 사용자 settings의 값은 저장소 밖이므로 이 결론에 넣지 않습니다.
|
|
2889
|
+
|
|
2890
|
+
### MCP
|
|
2891
|
+
|
|
2892
|
+
- CHANGELOG 원문: "Changed the error for an MCP tool call that times out in a non-interactive session while the server's elicitation is unanswered: it now tells Claude that no answer came and not to repeat the call"
|
|
2893
|
+
(310) 비대화형 세션에서 서버의 elicitation에 답이 없는 채로 MCP 도구 호출이 타임아웃되면, 이제 오류가 Claude에게 답이 오지 않았다는 사실과 호출을 반복하지 말라는 지시를 함께 알려 줍니다. 이 저장소의 `.mcp.json`은 `ontology-rag`(stdio, 명령 `.venv/bin/python -m ontology_rag.mcp_server`)와 `eraser`(http, `https://app.eraser.io/api/mcp`) 두 서버를 둡니다(`git show HEAD:.mcp.json | jq -c '.mcpServers | to_entries[] | {name: .key, type: .value.type, command: .value.command, args: .value.args, url: .value.url}'`). `ontology-rag`의 서버 소스는 추적 파일 `packages/ontology-rag/src/ontology_rag/mcp_server.py`이며, `git grep -n -i elicit HEAD -- packages`는 출력이 없었습니다(rc=1). 따라서 추적 소스 범위에서 `ontology-rag`가 elicitation을 요청하는 코드는 관측되지 않았습니다. `.venv`에 설치된 실행본이 이 추적 소스와 같은지는 기기 로컬 상태라 확인하지 않았습니다. 원격 http 서버 `eraser`가 elicitation을 요청하는지는 관측하지 않았습니다 [가설 — 서버 동작이나 `-p` 실행 로그로 판정]. 추적되는 프로젝트 settings와 그 `templates/` 미러에는 `Elicitation`·`ElicitationResult` 훅 키가 없습니다(`for f in .claude/settings.json templates/.claude/settings.json; do git show "HEAD:$f" | jq -c '.hooks | {Elicitation: has("Elicitation"), ElicitationResult: has("ElicitationResult")}'; done` = 두 줄 모두 `{"Elicitation":false,"ElicitationResult":false}`). 저장소 전체로 넓힌 `git grep -l -i elicit HEAD -- . ':!guides/claude-code/15-version-compatibility.md' ':!templates/guides/claude-code/15-version-compatibility.md'`의 히트 파일 8개는 R006 훅 카탈로그(`.claude/rules/MUST-agent-design.md`, 히트 줄은 HTML 주석 안)와 그 `templates/` 미러, `tests/unit/core/` 테스트 4개, `wiki/guides/claude-code.md`, `wiki/rules/r006.md`입니다. R004의 Retryable 행은 "Retry up to 3x with backoff (1s, 2s, 4s), then report"를 규정합니다(`.claude/rules/SHOULD-error-handling.md:25`, 주석 밖 표 행). 새 오류 문구는 같은 호출을 반복하지 말라고 지시하므로, `-p` 무인 실행에서 elicitation 미응답 타임아웃 오류를 받으면 R004의 Retryable 행보다 Non-recoverable 행(`:26`)으로 다루는 편이 문구와 맞습니다 [가설 — 이 오류를 실제로 받은 사례는 미관측]. 이 문서는 룰 반영 여부를 정하지 않습니다.
|
|
2894
|
+
|
|
2895
|
+
기타 19건 — 이 저장소 비해당(일부 gateway·호환 서버가 `effort-2025-11-24` beta 값이나 대화 중간 system 메시지를 거부할 때 그것들 없이 다시 시도하는 수정, 긴 편집 뒤 외부 편집기를 닫는 순간 질문의 auto-continue 타임아웃이 발화하던 터미널 UI 결함, Git Bash가 없고 훅 명령이 따옴표 문자열뿐일 때 PreToolUse·PermissionRequest 훅이 도구 호출을 통과시키던 Windows 전용 결함, mod `Image` 렌더링, AppArmor 제한이 bubblewrap의 샌드박스 시작을 막을 때 Linux `/sandbox`가 표시하는 안내, `[VSCode]` 2건, `[Cloud sessions]` 7건, `[Claude Tag]` 3건, `[Code Review]` 2건). 실측: `gh release view v2.1.310 --repo anthropics/claude-code --json body --jq .body | grep -c '^- '` = 26건 중 위 본문 7건을 다뤘으므로 26 − 7 = 19건입니다. 계수 범위는 해당 릴리즈 노트의 최상위 불릿 줄(`- `로 시작하는 줄)입니다.
|
|
2896
|
+
|
|
2897
|
+
**Action items**:
|
|
2898
|
+
- 이 릴리즈의 본문 7건은 다음과 같습니다. 추가 1건은 Bedrock·Vertex·Foundry에서, 그리고 텔레메트리나 비필수 트래픽을 끈 경우의 Monitor 도구·플러그인 monitor 제공과 그 환경의 긴 foreground sleep 차단입니다. 결함 수정 3건은 "Prompt is too long" 오류 뒤 dense text 대화의 compaction, 심볼릭 링크 대상을 보여 주지 않던 파일 읽기 권한 프롬프트, `cleanupPeriodDays`가 매우 클 때 최근 파일 일부를 지우던 백그라운드 정리입니다. 개선 2건은 트랜스크립트 파일이 매우 클 때 비대화형 세션의 compaction 메모리, 그리고 auto mode의 작업 디렉토리 밖 첫 읽기 프롬프트입니다. 변경 1건은 비대화형 세션에서 elicitation 미응답으로 타임아웃된 MCP 도구 호출의 오류 문구입니다. 위 항목별 측정(`git show HEAD:`·`jq`·`git grep`·`git cat-file`) 범위에서 추적되는 저장소 설정(`.claude/settings.json`, `templates/.claude/settings.json`, `.mcp.json`)을 바꿔야 하는 항목은 찾지 못했습니다(R016: CC 지식은 이 가이드에 두고 룰 파일에는 행동 변화가 필요할 때만 1줄).
|
|
2899
|
+
- 후속 실측 후보(본문 `[가설]` 8개에 대응): (1) Bedrock·Vertex·Foundry나 텔레메트리·비필수 트래픽을 끈 환경에서 Monitor 도구 제공과 긴 foreground sleep 차단을 확인합니다. 이때 `monitoring-setup` 스킬의 Enterprise Configuration 예시(`.claude/skills/monitoring-setup/SKILL.md:262`~`:264`)를 적용한 경로와 `skills-sh-search`의 `DISABLE_TELEMETRY=1` 안내(`.claude/skills/skills-sh-search/SKILL.md:211`)를 셸에 export한 경로를 함께 보고, agora watchdog 서브셸의 `sleep`(`.claude/skills/agora/scripts/judge.sh:140`, `.claude/skills/agora/scripts/reviewers.sh:106`)이 차단되는지도 확인합니다. (2) `diagram-design`으로 SVG 텍스트가 많이 쌓인 대화에서 "Prompt is too long" 오류 뒤 compaction을 거친 다음 요청이 다시 실패하는지 확인합니다. (3) 트랜스크립트 파일이 매우 큰 장기 `-p` `/fsd` 실행에서 compaction 시점 메모리를 2.1.310 전후로 비교합니다. (4) `permissions.blockReadsOutsideWorkingDirectories`를 켠 auto mode 세션에서 작업 디렉토리 밖 첫 읽기 프롬프트의 문구를 확인합니다. (5) 원격 http 서버 `eraser`가 elicitation을 요청하는지 확인합니다. (6) 비대화형 세션에서 elicitation 미응답 타임아웃 오류를 실제로 받은 사례가 있는지 확인합니다.
|
|
2900
|
+
- (310) 항목 중 `[가설 — …]` 표기는 판정 기준을 충족하는 측정이 이루어지기 전에는 결론으로 쓰지 않습니다.
|
|
2901
|
+
|
|
2712
2902
|
## Known Platform Issues & Workarounds
|
|
2713
2903
|
|
|
2714
2904
|
### Agent tool malformed parsing on long / special-character prompts (#1241)
|
|
@@ -2776,6 +2966,11 @@ Opus 4.8에서 thinking blocks가 수정되어 API 오류가 발생하던 버그
|
|
|
2776
2966
|
- #1865 — Claude Code v2.1.303 compatibility documentation
|
|
2777
2967
|
- #1866 — Claude Code v2.1.304 compatibility documentation
|
|
2778
2968
|
- #1868 — Claude Code v2.1.305 compatibility documentation
|
|
2969
|
+
- #1867 — Claude Code v2.1.306 compatibility documentation
|
|
2970
|
+
- #1870 — Claude Code v2.1.307 compatibility documentation
|
|
2971
|
+
- #1869 — Claude Code v2.1.308 compatibility documentation
|
|
2972
|
+
- #1871 — Claude Code v2.1.309 compatibility documentation
|
|
2973
|
+
- #1872 — Claude Code v2.1.310 compatibility documentation
|
|
2779
2974
|
- `.claude/skills/claude-native/` — auto-generation source
|
|
2780
2975
|
- `.claude/rules/SHOULD-hud-statusline.md` — R012 statusline integration
|
|
2781
2976
|
- `.claude/rules/MUST-agent-design.md` — R006 agent frontmatter spec
|
package/templates/manifest.json
CHANGED