SpyBara
Go Premium

Documentation 2026-10-23 22:59 UTC to 2026-10-24 22:59 UTC

31 files changed +892 −315. View all changes and history on the product overview
2026
Fri 30 23:01 Thu 29 23:57 Wed 28 23:57 Tue 27 22:59 Mon 26 22:57 Sun 25 23:58 Sat 24 22:59 Fri 23 22:59 Thu 22 22:58 Wed 21 23:02 Tue 20 23:00 Mon 19 23:58 Sat 17 23:57 Fri 16 22:59 Thu 15 23:58 Wed 14 22:58 Tue 13 23:57 Sun 11 23:57 Sat 10 23:01 Fri 9 23:02 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59

artifacts.md +1 −3

Details

340 340 

341Claude Docs는 명령이 아닌 claude.ai [커넥터](https://code.claude.com/docs/ko/mcp.md#use-mcp-servers-from-claude-ai)로 Claude Code에 도달합니다. 연결되면 `/mcp`는 이를 `claude.ai Claude Docs`로 나열합니다. 다른 사람들을 위한 문서에 대한 요청은 아티팩트 페이지 대신 Claude Docs로 이동합니다: 사양, 제안 또는 세션에서 작업한 계획의 작성. Claude는 초안이 작성되면 문서의 링크를 제공합니다.341Claude Docs는 명령이 아닌 claude.ai [커넥터](https://code.claude.com/docs/ko/mcp.md#use-mcp-servers-from-claude-ai)로 Claude Code에 도달합니다. 연결되면 `/mcp`는 이를 `claude.ai Claude Docs`로 나열합니다. 다른 사람들을 위한 문서에 대한 요청은 아티팩트 페이지 대신 Claude Docs로 이동합니다: 사양, 제안 또는 세션에서 작업한 계획의 작성. Claude는 초안이 작성되면 문서의 링크를 제공합니다.

342 342 

343코드베이스에 속하는 문서(예: README)는 파일로 유지됩니다. Claude가 Claude Docs에 넣을 것에 대한 파일을 얻으려면 `.docx` 또는 저장소의 Markdown 파일과 같은 형식을 지정하세요.343코드베이스에 속하는 문서(예: README)는 파일로 유지됩니다. Claude가 Claude Docs에 넣을 것에 대한 파일을 얻으려면 `.docx` 또는 저장소의 Markdown 파일과 같은 형식을 지정하세요. `claude.ai Claude Docs` 커넥터만 끄려면 [claude.ai 커넥터 비활성화](https://code.claude.com/docs/ko/mcp.md#disable-claude-ai-connectors)를 참조하세요.

344 

345커넥터를 끄려면 `claude.ai Claude Docs`를 `deniedMcpServers`에 추가하거나 [claude.ai 커넥터 비활성화](https://code.claude.com/docs/ko/mcp.md#disable-claude-ai-connectors)에 설명된 `/mcp` 토글을 사용하세요.

346 344 

347## 페이지 제약 사항345## 페이지 제약 사항

348 346 

Details

458 458 

459#### 부모 설정의 훅 및 스킬 키가 적용되는 방식459#### 부모 설정의 훅 및 스킬 키가 적용되는 방식

460 460 

461Agent SDK의 `managedSettings` 옵션을 통해 `disableAllHooks: true`를 부모 설정으로 전달해도 모든 훅이 중지되지는 않습니다. [SDK 훅 콜백](https://code.claude.com/docs/ko/agent-sdk/hooks.md)은 여전히 실행되며, 애플리케이션이 끌 수 없는 관리자의 훅도 실행됩니다.461애플리케이션이 Agent SDK의 [`managedSettings`](https://code.claude.com/docs/ko/agent-sdk/typescript#options) 옵션으로 전달하는 키는 부모 설정입니다. 관리자가 관리형 설정을 배포한 머신에서는 관리자가 [임베딩 호스트가 정책을 추가하도록 허용](https://code.claude.com/docs/ko/managed-settings.md#let-an-embedding-host-add-policy)하지 않는 한 Claude Code가 부모 설정을 무시합니다.

462 462 

463관리자가 관리형 설정을 배포한 머신에서는 관리자가 [임베딩 호스트가 정책을 추가하도록 허용](https://code.claude.com/docs/ko/managed-settings.md#let-an-embedding-host-add-policy)하지 않는 한 Claude Code가 부모 설정을 무시합니다.463`managedSettings`에서 [`disableAllHooks: true`](https://code.claude.com/docs/ko/settings-reference#disableallhooks)를 전달하면 다음과 같이 동작합니다.

464 

465* **중지됨**: 사용자, 프로젝트, 로컬 훅과 에이전트 frontmatter 또는 SDK의 [`settings` 옵션](https://code.claude.com/docs/ko/agent-sdk/typescript#options)에 선언된 훅.

466* **계속 실행됨**: 애플리케이션의 [SDK 훅 콜백](https://code.claude.com/docs/ko/agent-sdk/hooks.md)과 관리형 설정에 있는 관리자의 훅. 애플리케이션은 관리자의 훅을 끌 수 없습니다.

464 467 

465| 전달하는 값 | 결과 |468| 전달하는 값 | 결과 |

466| :- | :- |469| :- | :- |

467| `disableAllHooks: true` | `allowManagedHooksOnly: true`로 처리되므로, [`allowManagedHooksOnly`에서 차단되는 것으로](https://code.claude.com/docs/ko/settings-reference#what-runs-under-allowmanagedhooksonly) 나열된 훅이 중지되며, SDK의 [`settings` 옵션](https://code.claude.com/docs/ko/agent-sdk/typescript#options)에 있는 훅도 중지됩니다. |470| `hooks`, 또는 항목이 있는 `allowedHttpHookUrls` 또는 `httpHookAllowedEnvVars` | Claude Code는 이 키를 무시합니다. 대신 SDK `settings` 옵션을 사용하세요. |

468| [`disableSkillShellExecution: true`](https://code.claude.com/docs/ko/settings-reference#disableskillshellexecution) | 적용됩니다. |

469| `allowedHttpHookUrls: []` | 관리자가 `hooks`를 정의하거나 플러그인을 활성화하지 않는 한 적용됩니다. 다른 설정 소스가 나열한 URL을 제외하고는 HTTP 훅이 실행되지 않습니다. |471| `allowedHttpHookUrls: []` | 관리자가 `hooks`를 정의하거나 플러그인을 활성화하지 않는 한 적용됩니다. 다른 설정 소스가 나열한 URL을 제외하고는 HTTP 훅이 실행되지 않습니다. |

470| `httpHookAllowedEnvVars: []` | 관리자가 `hooks`를 정의하거나 플러그인을 활성화하지 않는 한 적용됩니다. HTTP 훅 헤더에는 다른 설정 소스가 나열한 환경 변수만 포함할 수 있습니다. |472| `httpHookAllowedEnvVars: []` | 관리자가 `hooks`를 정의하거나 플러그인을 활성화하지 않는 한 적용됩니다. HTTP 훅 헤더에는 다른 설정 소스가 나열한 환경 변수만 포함할 수 있습니다. |

471| 항목이 있는 `allowedHttpHookUrls` 또는 `httpHookAllowedEnvVars` | 병합하면 관리자의 목록이 넓어지므로 Claude Code는 이를 무시합니다. 대신 SDK `settings` 옵션을 사용하세요. |473| [`disableSkillShellExecution: true`](https://code.claude.com/docs/ko/settings-reference#disableskillshellexecution) | 적용됩니다. |

472 474 

473`managedSettings`에서 이러한 키를 전달하려면 Claude Code v2.1.309 이상 또는 TypeScript Agent SDK v0.3.309 이상이 필요합니다.475`managedSettings`에서 이러한 키를 전달하려면 Claude Code v2.1.309 이상 또는 TypeScript Agent SDK v0.3.309 이상이 필요합니다.

474 476 

Details

8 8 

9> [!NOTE]9> [!NOTE]

10>10>

11> 클라우드 세션은 Pro, Max 및 Team 요금제, 그리고 프리미엄 시트 또는 Chat + Claude Code 시트가 있는 Enterprise 사용자를 위해 제공됩니다. Enterprise 조직에서 [사용자 지정 역할](https://support.claude.com/en/articles/13930452)로 액세스를 관리하는 경우, 클라우드 세션 권한이 포함된 역할도 필요합니다. 해당 권한이 없다면 Owner에게 역할을 확인하고 [**Organization settings > Roles**](https://claude.ai/admin-settings/roles)에서 추가하도록 요청하십시오.11> 클라우드 세션은 Pro, Max 및 Team 요금제, 그리고 프리미엄 시트 또는 Chat + Claude Code 시트가 있는 Enterprise 사용자를 위해 제공됩니다. [사용자 지정 역할](https://support.claude.com/en/articles/13930452)로 액세스가 관리되는 경우, 브라우저, 앱 또는 터미널에서 Anthropic 인프라의 세션을 시작하려면 클라우드 세션 권한이 포함된 역할도 필요합니다. Owner에게 [**Organization settings > Roles**](https://claude.ai/admin-settings/roles)에서 해당 권한을 사용자의 역할 중 하나에 추가하도록 요청하십시오.

12 12 

13클라우드 세션은 사용자의 머신 대신 클라우드 인프라에서 실행되는 Claude Code 세션입니다. 기본적으로 Anthropic이 관리하는 인프라에서 실행되거나, 라우팅될 때 조직의 [자체 호스팅 환경](https://code.claude.com/docs/ko/self-hosted-environments)에서 실행됩니다. 세션은 노트북을 닫은 후에도 계속 실행되며, 모든 기기에서 확인하거나 조종할 수 있습니다. 클라우드 세션은 나머지 Claude 및 Claude Code 사용량과 함께 요금제의 사용 한도에 포함되며, 클라우드 VM에 대한 별도 요금은 없습니다.13클라우드 세션은 사용자의 머신 대신 클라우드 인프라에서 실행되는 Claude Code 세션입니다. 기본적으로 Anthropic이 관리하는 인프라에서 실행되거나, 라우팅될 때 조직의 [자체 호스팅 환경](https://code.claude.com/docs/ko/self-hosted-environments)에서 실행됩니다. 세션은 노트북을 닫은 후에도 계속 실행되며, 모든 기기에서 확인하거나 조종할 수 있습니다. 클라우드 세션은 나머지 Claude 및 Claude Code 사용량과 함께 요금제의 사용 한도에 포함되며, 클라우드 VM에 대한 별도 요금은 없습니다.

14 14 

Details

109 109 

110#### 시크릿 추가하기110#### 시크릿 추가하기

111 111 

112시크릿은 한 번에 하나씩 추가하며, 추가한 후에는 편집할 수 없습니다. 시크릿의 호스트나 값을 변경하려면 삭제한 후 다시 추가하십시오.112시크릿은 한 번에 하나씩 추가합니다. 시크릿의 호스트나 값을 변경하려면 삭제한 후 다시 추가하십시오.

113 113 

114[공유 환경](#organization-shared-environments)에 시크릿을 추가하려면 [관리자 설정](https://claude.ai/admin-settings)의 **Cloud environments** 페이지에서 환경을 편집용으로 연 다음 **Network secrets** 섹션에서 2단계부터 이어서 진행하십시오. Team 요금제를 사용 중이며 [조직 관리자 역할](#requirements)이 없다면 본인 환경에서 1단계를 진행한 다음 [간소화된 양식을 작성](#add-a-secret-without-the-role)하십시오.114[공유 환경](#organization-shared-environments)에 시크릿을 추가하려면 [관리자 설정](https://claude.ai/admin-settings)의 **Cloud environments** 페이지에서 환경을 편집용으로 연 다음 **Network secrets** 섹션에서 2단계부터 이어서 진행하십시오. Team 요금제를 사용 중이며 [조직 관리자 역할](#requirements)이 없다면 본인 환경에서 1단계를 진행한 다음 [간소화된 양식을 작성](#add-a-secret-without-the-role)하십시오.

115 115 


119 119 

120**2. 시크릿 추가**120**2. 시크릿 추가**

121 121 

122**Add secret**을 선택하고 양식을 작성합니다. 요청 헤더로 전달되는 API 키의 경우 기본 **Secret type**인 **Bearer**를 유지하고 다음 필드를 입력합니다.122**Add secret**(관리자 설정에서는 **Add**로 표시됨)을 선택하고 양식을 작성합니다. 요청 헤더로 전달되는 API 키의 경우 기본 **Secret type**인 **Bearer**를 유지하고 다음 필드를 입력합니다.

123 123 

124* **Name**: 시크릿의 레이블(예: `Internal billing API`)124* **Name**: 시크릿의 레이블(예: `Internal billing API`)

125* **Allowed websites**: API의 호스트(예: `api.example.com`). 앞에 `*.`를 붙이면 모든 하위 도메인과 일치합니다125* **Allowed websites**: API의 호스트(예: `api.example.com`). 앞에 `*.`를 붙이면 모든 하위 도메인과 일치합니다


443 443 

444### 스크립트 요구사항444### 스크립트 요구사항

445 445 

446설정 스크립트에는 작성할 때 고려해야 할 세 가지 제약이 있습니다.446설정 스크립트에는 작성할 때 고려해야 할 네 가지 제약이 있습니다.

447 447 

448* **종료 코드 0**: 스크립트가 0이 아닌 코드로 종료되면 세션이 시작되지 않습니다. 중요하지 않은 명령에 `|| true`를 추가하여 일시적인 설치 실패가 세션을 차단하지 않도록 합니다.448* **종료 코드 0**: 스크립트가 0이 아닌 코드로 종료되면 세션이 시작되지 않습니다. 중요하지 않은 명령에 `|| true`를 추가하여 일시적인 설치 실패가 세션을 차단하지 않도록 합니다.

449* **5분 이내에 완료**: 스크립트의 총 실행 시간을 약 5분 이내로 유지하여 [환경 캐시](#environment-caching)를 구축할 수 있도록 합니다. 설정이 그보다 오래 걸리면 환경이 캐시되지 않습니다. `&`와 `wait`를 사용하여 독립적인 설치를 병렬로 실행하고, 맞지 않는 단일 다운로드는 백그라운드에서 실행하는 [SessionStart hook](#setup-scripts-vs-sessionstart-hooks)으로 이동합니다. 새 세션이 설정 중에 정지되거나 실패하면 [새 세션이 설정 중에 정지되거나 시간 초과됨](https://code.claude.com/docs/ko/web-quickstart.md#new-sessions-hang-or-time-out-during-setup)을 참조합니다.449* **5분 이내에 완료**: 스크립트의 총 실행 시간을 약 5분 이내로 유지하여 [환경 캐시](#environment-caching)를 구축할 수 있도록 합니다. 설정이 그보다 오래 걸리면 환경이 캐시되지 않습니다. `&`와 `wait`를 사용하여 독립적인 설치를 병렬로 실행하고, 맞지 않는 단일 다운로드는 백그라운드에서 실행하는 [SessionStart hook](#setup-scripts-vs-sessionstart-hooks)으로 이동합니다. 새 세션이 설정 중에 정지되거나 실패하면 [새 세션이 설정 중에 정지되거나 시간 초과됨](https://code.claude.com/docs/ko/web-quickstart.md#new-sessions-hang-or-time-out-during-setup)을 참조합니다.

450* **설치를 위한 네트워크 액세스**: 패키지 설치는 레지스트리에 도달해야 합니다. 기본 **신뢰됨** 수준은 npm, PyPI, RubyGems 및 crates.io를 포함한 [일반적인 패키지 레지스트리](#default-allowed-domains)를 포함합니다. **없음** 네트워크 액세스를 사용하면 설치가 실패합니다.450* **설치를 위한 네트워크 액세스**: 패키지 설치는 레지스트리에 도달해야 합니다. 기본 **신뢰됨** 수준은 npm, PyPI, RubyGems 및 crates.io를 포함한 [일반적인 패키지 레지스트리](#default-allowed-domains)를 포함합니다. **없음** 네트워크 액세스를 사용하면 설치가 실패합니다.

451* **환경의 변수가 아직 설정되지 않음**: 스크립트는 세션이 환경의 [환경 변수](#set-environment-variables)를 설정하기 전에 실행됩니다. 스크립트에 필요한 값은 스크립트 자체에서 설정합니다.

451 452 

452### 환경 캐싱453### 환경 캐싱

453 454 

Details

123 123 

124리뷰가 포함된 파일을 적용하지 않으면 다음 항목을 각각 확인합니다.124리뷰가 포함된 파일을 적용하지 않으면 다음 항목을 각각 확인합니다.

125 125 

126* **위치**: 파일을 저장소 루트로 옮깁니다. `@docs/review-rules.md`처럼 하위 디렉터리를 가리키는 경로는 포함되지 않습니다.126* **위치**: 파일을 저장소 루트로 옮깁니다. [스킬 파일](#include-a-skill-file)을 제외하고, `@docs/review-rules.md`처럼 하위 디렉터리를 가리키는 경로는 포함되지 않습니다.

127* **이름**: 대소문자를 포함하여 파일 이름을 정확히 일치시키고, 공백이 없는 이름을 사용합니다. 이름이 `REVIEW.md` 옆의 어떤 파일과도 일치하지 않는 줄은 `REVIEW.md`에 일반 텍스트로 남으며, check run은 이를 건너뛴 포함 항목으로 보고하지 않습니다.127* **이름**: 대소문자를 포함하여 파일 이름을 정확히 일치시키고, 공백이 없는 이름을 사용합니다. 이름이 `REVIEW.md` 옆의 어떤 파일과도 일치하지 않는 줄은 `REVIEW.md`에 일반 텍스트로 남으며, check run은 이를 건너뛴 포함 항목으로 보고하지 않습니다.

128* **한 단계만**: 모든 파일을 루트 `REVIEW.md`에 나열합니다. 포함된 파일이나 하위 디렉터리 `REVIEW.md`에 있는 `@` 줄은 일반 텍스트로 남으며, 다른 파일에 대한 Markdown 링크는 포함으로 처리되지 않습니다.128* **한 단계만**: 모든 파일을 루트 `REVIEW.md`에 나열합니다. 포함된 파일이나 하위 디렉터리 `REVIEW.md`에 있는 `@` 줄은 일반 텍스트로 남으며([스킬 파일은 다릅니다](#include-a-skill-file)), 다른 파일에 대한 Markdown 링크는 포함으로 처리되지 않습니다.

129* **제한**: 서로 다른 파일은 최대 8개까지 포함하고, `REVIEW.md`와 포함된 파일의 합계를 150,000바이트 미만으로 유지합니다. 바이트 제한에 도달하게 되는 파일은 잘리지 않고 통째로 건너뜁니다. check run은 두 제한 중 하나로 인해 건너뛴 포함 줄의 수를 보고합니다.129* **제한**: 서로 다른 파일은 최대 8개까지 포함하고, `REVIEW.md`와 포함된 파일의 합계를 150,000바이트 미만으로 유지합니다. 바이트 제한에 도달하게 되는 파일은 잘리지 않고 통째로 건너뜁니다. check run은 두 제한 중 하나로 인해 건너뛴 포함 줄의 수를 보고합니다.

130* **링크**: `REVIEW.md`와 포함된 파일 전체에서 Markdown 링크를 64개 이하로 유지합니다. `http`, `https`, `mailto` 주소 및 `#` 앵커에 대한 링크는 개수에 포함되지 않습니다. 이 제한을 넘으면 리뷰는 포함된 파일뿐 아니라 루트 `REVIEW.md` 전체를 건너뜁니다. 그러면 check run은 [지침이 적용되지 않았다고 알립니다](https://code.claude.com/docs/ko/code-review-troubleshooting.md#the-check-run-mentions-review-md).130* **링크**: `REVIEW.md`와 포함된 파일 전체에서 Markdown 링크를 64개 이하로 유지합니다. `http`, `https`, `mailto` 주소 및 `#` 앵커에 대한 링크는 개수에 포함되지 않으며, [스킬 파일](#include-a-skill-file)의 링크도 포함되지 않습니다. 이 제한을 넘으면 리뷰는 포함된 파일뿐 아니라 루트 `REVIEW.md` 전체를 건너뜁니다. 그러면 check run은 [지침이 적용되지 않았다고 알립니다](https://code.claude.com/docs/ko/code-review-troubleshooting.md#the-check-run-mentions-review-md).

131* **병합된 사본**: 포함할 파일을 [`REVIEW.md`를 읽는 브랜치](#which-branch-review-md-is-read-from)에 병합합니다. 리뷰는 두 파일을 모두 같은 커밋에서 읽으며, 풀 리퀘스트 자체의 변경 사항에서는 절대 읽지 않습니다.131* **병합된 사본**: 포함할 파일을 [`REVIEW.md`를 읽는 브랜치](#which-branch-review-md-is-read-from)에 병합합니다. 리뷰는 두 파일을 모두 같은 커밋에서 읽으며, 풀 리퀘스트 자체의 변경 사항에서는 절대 읽지 않습니다.

132 132 

133### 스킬 파일 포함하기

134 

135[스킬](https://code.claude.com/docs/ko/skills.md)에 보관한 지침을 리뷰가 따르도록 하려면 루트 `REVIEW.md`에 해당 스킬의 `SKILL.md`를 포함합니다. Code Review는 스킬을 실행하지 않습니다.

136 

137`@`와 `SKILL.md`의 경로를 `.claude/skills/<folder>/SKILL.md` 형식으로 별도의 줄에 추가합니다.

138 

139```markdown theme={null}

140# Review instructions

141 

142Report at most five Nits per review.

143 

144@.claude/skills/api-review/SKILL.md

145 

146Treat any change under `migrations/` as Important.

147```

148 

149Code Review는 보호된 브랜치에서 `REVIEW.md`를 읽을 때만 스킬 파일을 포함하므로, [`REVIEW.md`를 읽는 브랜치](#which-branch-review-md-is-read-from)를 보호합니다. 스킬 파일은 8개 파일 및 150,000바이트 제한에 포함되며, 자체적으로 30,000바이트 제한이 있습니다.

150 

151#### Code Review가 포함하는 스킬 줄 작성하기

152 

153공백이 없는 폴더 이름을 사용합니다. 경로에 공백이 있는 줄은 `REVIEW.md`에 일반 텍스트로 남으며, check run은 이를 건너뛴 포함 항목으로 보고하지 않습니다.

154 

155스킬의 `@` 줄이 아래 규칙 중 하나를 위반하면 Code Review는 해당 줄에서 스킬을 포함하지 않습니다.

156 

157* **경로**: 저장소 루트를 기준으로 `.claude/skills/<folder>/SKILL.md` 형식으로 경로를 작성하며, 스킬 폴더는 `skills/` 바로 아래에 있어야 합니다. 루트의 파일 이름과 달리, 이 형식의 경로가 어떤 파일과도 일치하지 않으면 건너뛰고 개수에 집계됩니다.

158* **소스**: `.claude/` 아래의 다른 파일이나 [번들, 개인 또는 플러그인 스킬](https://code.claude.com/docs/ko/skills.md#where-skills-live)의 지침은 `REVIEW.md` 옆의 파일로 복사합니다. 이러한 파일은 직접 포함할 수 없습니다.

159* **파일**: `SKILL.md`를 일반 텍스트 파일로 커밋합니다. Code Review는 링크가 파일 자체이든 경로상의 폴더이든 심볼릭 링크를 따라가지 않습니다.

160* **크기**: frontmatter를 포함하여 `SKILL.md`를 30,000바이트 이하로 유지합니다

161* **개수**: 스킬 줄은 최대 8개까지 작성합니다. 반복된 줄도 8개에 다시 집계됩니다.

162* **`REVIEW.md`의 블록**: `@` 줄을 코드 펜스 밖에 둡니다. 그 위에 있는 모든 HTML 주석과 모든 `<pre>`, `<script>`, `<style>`, `<textarea>` 블록을 닫습니다.

163 

164Code Review가 파일, 크기, 개수 또는 블록 규칙 위반으로 스킬 줄을 건너뛰면 check run의 [건너뛴 포함 줄에 대한 메시지](https://code.claude.com/docs/ko/code-review-troubleshooting.md#the-check-run-mentions-review-md)에 집계됩니다. 이 메시지는 리뷰가 보호된 브랜치의 `REVIEW.md`를 적용할 때만 표시됩니다.

165 

166#### 리뷰가 스킬에서 가져오는 내용 확인하기

167 

168스킬이 포함되면 리뷰는 `SKILL.md`의 본문만 가져오고 스킬의 다른 내용은 가져오지 않으므로, 아래 목록을 기준으로 스킬을 확인합니다.

169 

170* **Frontmatter**: 리뷰에 필요한 [frontmatter](https://code.claude.com/docs/ko/skills.md#frontmatter-reference)의 내용을 본문에 반복해서 작성합니다. 예를 들어 `description`에 명시된 스킬 사용 조건이 이에 해당합니다

171* **주입된 명령**: [`!` 명령](https://code.claude.com/docs/ko/skills#inject-dynamic-context)이 제공할 내용을 직접 작성합니다. Code Review는 명령을 실행하지 않으며, 명령이 있는 줄이나 블록 전체를 플레이스홀더로 대체합니다.

172* **치환**: `$ARGUMENTS` 및 기타 [치환](https://code.claude.com/docs/ko/skills.md#available-string-substitutions)을 고정된 텍스트로 바꿉니다. 리뷰는 인수를 전달하지 않으며 이를 작성된 그대로 남기기 때문입니다

173* **지원 파일**: 리뷰에 필요한 내용을 `SKILL.md`로 복사합니다. Code Review는 스크립트, 링크된 파일 또는 `@file` 참조를 로드하지 않기 때문입니다

174* **제외 및 Nit 제한**: 발견 사항을 제외하거나 Nit 수를 제한하는 지침은 스킬이 아닌 `REVIEW.md` 또는 그 옆의 파일에 작성합니다. Code Review는 스킬의 텍스트를 두 가지 중 어느 것의 근거로도 인정하지 않습니다.

175* **저장소 파일에 대한 링크**: 링크나 `@file` 참조가 가리키는 내용을 말로 설명합니다. 리뷰는 경로를 일반 텍스트 또는 플레이스홀더로 봅니다.

176 

177스킬의 `!` 명령, `$ARGUMENTS` 또는 링크를 편집하면 Claude Code에서 스킬이 작동하는 방식도 바뀝니다. 팀이 이러한 기능에 의존한다면 지침을 `REVIEW.md` 옆의 파일로 복사하고 스킬 대신 그 파일을 포함합니다.

178 

179#### Code Review가 스킬 텍스트에서 변경하는 문자

180 

181Code Review는 스킬 텍스트의 일부 문자를 변경하므로, 코드 샘플은 아래와 같은 형태로 리뷰에 전달됩니다.

182 

183```text theme={null}

184In SKILL.md: Use `items[0]`, never `List<String>`.

185The review reads: Use ˋitems(0)ˋ, never ˋList< String>ˋ.

186 

187In SKILL.md: Run `ps | grep api` and ask @alice.

188The review reads: Run ˋps ¦ grep apiˋ and ask @ alice.

189```

190 

191규칙이 이러한 문자 중 하나에 의존하는 경우 말로도 설명합니다.

192 

133### REVIEW\.md를 읽는 브랜치193### REVIEW\.md를 읽는 브랜치

134 194 

135Code Review는 풀 리퀘스트의 기본(base) 브랜치 또는 기본(default) 브랜치에서 `REVIEW.md`를 읽으며, 풀 리퀘스트 자체의 변경 사항에서는 절대 읽지 않습니다. 리뷰 동작을 변경하려면 `REVIEW.md` 변경 사항을 먼저 병합합니다.195Code Review는 풀 리퀘스트의 기본(base) 브랜치 또는 기본(default) 브랜치에서 `REVIEW.md`를 읽으며, 풀 리퀘스트 자체의 변경 사항에서는 절대 읽지 않습니다. 리뷰 동작을 변경하려면 `REVIEW.md` 변경 사항을 먼저 병합합니다.


140* 경로, 파일 또는 문제 유형 제외200* 경로, 파일 또는 문제 유형 제외

141* nit 코멘트 수 제한201* nit 코멘트 수 제한

142 202 

203제외 및 Nit 제한은 [포함된 스킬](#include-a-skill-file)이 아닌 `REVIEW.md` 또는 그 옆의 파일에 작성합니다.

204 

143#### 브랜치 보호로 인정되는 항목205#### 브랜치 보호로 인정되는 항목

144 206 

145Code Review는 다음 설정을 보호로 인정합니다.207Code Review는 다음 설정을 보호로 인정합니다.

Details

67 67 

68## 체크 실행에 REVIEW\.md가 언급되는 경우68## 체크 실행에 REVIEW\.md가 언급되는 경우

69 69 

70다음은 체크 실행에 표시될 수 있는 `REVIEW.md` 관련 메시지 중 세 가지입니다.70다음은 체크 실행에 표시될 수 있는 `REVIEW.md` 관련 메시지 중 네 가지입니다.

71 71 

72* **"This review applied the repository's review instructions (REVIEW\.md) from its default branch, which is not protected against direct pushes."**: 리뷰가 루트 파일만 읽었습니다. 브랜치를 보호하면 무엇이 달라지는지는 [REVIEW.md를 읽는 브랜치](https://code.claude.com/docs/ko/code-review-customize.md#which-branch-review-md-is-read-from)를 참조하세요.72* **"This review applied the repository's review instructions (REVIEW\.md) from its default branch, which is not protected against direct pushes."**: 리뷰가 루트 파일만 읽었습니다. 브랜치를 보호하면 무엇이 달라지는지는 [REVIEW.md를 읽는 브랜치](https://code.claude.com/docs/ko/code-review-customize.md#which-branch-review-md-is-read-from)를 참조하세요.

73* **"were not applied to this review: branch protection could not be confirmed"**: 리뷰가 `REVIEW.md`를 전혀 읽지 않았습니다.73* **"were not applied to this review: branch protection could not be confirmed"**: 리뷰가 `REVIEW.md`를 전혀 읽지 않았습니다.


75 * **링크가 너무 많은 경우**: Markdown 링크가 64개를 초과합니다. 링크를 [64개 이하](https://code.claude.com/docs/ko/code-review-customize.md#include-other-files-in-review-md)로 줄이세요.75 * **링크가 너무 많은 경우**: Markdown 링크가 64개를 초과합니다. 링크를 [64개 이하](https://code.claude.com/docs/ko/code-review-customize.md#include-other-files-in-review-md)로 줄이세요.

76 * **리뷰가 파싱할 수 없는 링크가 있는 경우**: 형식이 잘못된 Markdown 링크가 있습니다. 해당 링크를 수정하거나 제거하세요.76 * **리뷰가 파싱할 수 없는 링크가 있는 경우**: 형식이 잘못된 Markdown 링크가 있습니다. 해당 링크를 수정하거나 제거하세요.

77 * **변경된 파일에 대한 링크가 있는 경우**: 이 풀 리퀘스트가 변경하는 파일이나 폴더에 링크되어 있으며, 리뷰가 해당 링크가 있는 줄만 제외할 수 없었습니다. 규칙을 `REVIEW.md` 자체에 직접 작성하세요.77 * **변경된 파일에 대한 링크가 있는 경우**: 이 풀 리퀘스트가 변경하는 파일이나 폴더에 링크되어 있으며, 리뷰가 해당 링크가 있는 줄만 제외할 수 없었습니다. 규칙을 `REVIEW.md` 자체에 직접 작성하세요.

78* **"include line(s) in the root REVIEW\.md were skipped on this review"**: 루트 `REVIEW.md`는 적용되었지만 해당 줄에 지정된 파일은 적용되지 않았습니다. [REVIEW.md에 다른 파일 포함하기](https://code.claude.com/docs/ko/code-review-customize.md#include-other-files-in-review-md)의 목록을 확인하고, 스킬의 경우 [스킬 파일 포함하기](https://code.claude.com/docs/ko/code-review-customize.md#include-a-skill-file)의 목록도 확인하세요.

78 79 

79## 설정 문제80## 설정 문제

80 81 

desktop.md +3 −3

Details

844| [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/ko/env-vars#variables) 또는 [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/ko/env-vars#variables) | [개발 서버용 변수를 설정하는 위치 중 하나](#set-environment-variables-for-dev-servers)에 설정한 다음 Desktop을 종료했다가 다시 엽니다 |844| [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/ko/env-vars#variables) 또는 [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/ko/env-vars#variables) | [개발 서버용 변수를 설정하는 위치 중 하나](#set-environment-variables-for-dev-servers)에 설정한 다음 Desktop을 종료했다가 다시 엽니다 |

845| `API_TIMEOUT_MS`, `ANTHROPIC_BASE_URL` 또는 Desktop이 직접 설정하는 다른 변수 | [Desktop이 직접 설정하는 환경 변수](#environment-variables-desktop-sets-itself)를 참조하세요 |845| `API_TIMEOUT_MS`, `ANTHROPIC_BASE_URL` 또는 Desktop이 직접 설정하는 다른 변수 | [Desktop이 직접 설정하는 환경 변수](#environment-variables-desktop-sets-itself)를 참조하세요 |

846 846 

847macOS 또는 Linux에서 `~/.zshrc`나 `~/.bashrc`에 `export`로 이미 변수를 설정했다면 [Claude가 실행하는 명령에서 내보낸 변수가 없거나 잘못된 경우](#exported-variable-missing-or-wrong-in-commands-claude-runs)를 참조하세요.847macOS 또는 Linux에서 `export`로 설정한 변수가 Claude가 실행하는 명령에서 누락되거나 잘못된 경우 [Claude가 실행하는 명령에서 내보낸 변수가 누락되거나 잘못된 경우](#exported-variable-missing-or-wrong-in-commands-claude-runs)를 참조하세요.

848 848 

849#### 로컬 세션의 환경 변수 설정849#### 로컬 세션의 환경 변수 설정

850 850 


904 904 

905**3. 저장된 변수 확인**905**3. 저장된 변수 확인**

906 906 

907명령이 잘못된 값을 받는다면 [저장된 환경](#use-edit-or-remove-a-saved-environment)이나 [로컬 환경 편집기](#use-the-local-environment-editor)에도 변수를 설정했는지 확인합니다. 설정했다면 그곳에서 값을 변경하고 새 세션을 시작합니다.907명령이 잘못된 값을 받는다면 [저장된 환경](#use-edit-or-remove-a-saved-environment)이나 [로컬 환경 편집기](#use-the-local-environment-editor)에도 해당 변수를 설정했는지 확인합니다. 설정했다면 그곳에서 값을 변경하고 새 세션을 시작합니다.

908 908 

909**4. 저장된 환경 사용**909**4. 저장된 환경 사용**

910 910 

911[저장된 로컬 환경](#set-environment-variables-for-local-sessions)에 변수를 추가한 다음 해당 환경에서 새 세션을 시작합니다. `PATH`나 `CLAUDE_CONFIG_DIR` 같은 변수는 대신 [해당 변수의 안내](#environment-variables-in-local-sessions)를 따릅니다.911[저장된 로컬 환경](#set-environment-variables-for-local-sessions)에 변수를 추가한 다음 해당 환경에서 새 세션을 시작합니다. `PATH`, `CLAUDE_CONFIG_DIR`, `API_TIMEOUT_MS` 같은 변수는 대신 [해당 변수의 안내](#environment-variables-in-local-sessions)를 따릅니다.

912 912 

913v2.1.304 이전의 Claude Code는 내보낸 변수를 명령에 전달하지 않으므로 [세션이 실행하는 버전을 확인](#claude-code-version-in-the-code-tab)하세요.913v2.1.304 이전의 Claude Code는 내보낸 변수를 명령에 전달하지 않으므로 [세션이 실행하는 버전을 확인](#claude-code-version-in-the-code-tab)하세요.

914 914 

Details

15 15 

16이 페이지는 로컬 예약 작업을 다룹니다. 클라우드 예약 작업과 해당 트리거 옵션에 대해서는 [예약 작업으로 작업 자동화하기](https://code.claude.com/docs/ko/routines.md)를 참조하세요.16이 페이지는 로컬 예약 작업을 다룹니다. 클라우드 예약 작업과 해당 트리거 옵션에 대해서는 [예약 작업으로 작업 자동화하기](https://code.claude.com/docs/ko/routines.md)를 참조하세요.

17 17 

18> [!NOTE]

19>

20> 앱에서 이 기능이 [이전 명칭](https://code.claude.com/docs/ko/routines.md#where-the-name-routines-still-appears)으로 표시되는 경우, 이 페이지에서 **Scheduled**라고 안내하는 곳에서는 **Routines**를, **New task**라고 안내하는 곳에서는 **New routine**을 클릭하세요.

21 

18## 예약 옵션 비교22## 예약 옵션 비교

19 23 

20Claude Code는 반복되는 작업이나 일회성 작업을 예약하는 세 가지 방법을 제공합니다:24Claude Code는 반복되는 작업이나 일회성 작업을 예약하는 세 가지 방법을 제공합니다:


45 49 

46**1. Scheduled tasks 페이지 열기**50**1. Scheduled tasks 페이지 열기**

47 51 

48[**Code** 탭](https://code.claude.com/docs/ko/desktop.md)에서 사이드바 또는 사이드바의 **More** 메뉴에 있는 **Scheduled**를 클릭합니다.52[**Code** 탭](https://code.claude.com/docs/ko/desktop.md)에서 사이드바 또는 사이드바의 **More** 메뉴에 있는 **Scheduled**를 클릭합니다. 사이드바에 **Scheduled** 대신 **Routines**가 표시되면 **Routines**를 클릭한 다음 **New routine**을 클릭하고 [전체 페이지 양식](#full-page-form)으로 계속 진행합니다.

49 53 

50**2. 새 작업 시작하기**54**2. 새 작업 시작하기**

51 55 

52**New task**를 클릭합니다. **Create with Claude**와 **Set up manually**가 있는 메뉴가 열리면 **Set up manually**를 선택합니다. **New scheduled task** 대화 상자가 열립니다. 대화 상자 맨 위에 **Only on this computer**가 있으면 아무것도 입력하기 전에 [맨 위에 Only on this computer가 있는 대화 상자](#dialog-with-only-on-this-computer-at-the-top)로 이동합니다.56**New task**를 클릭하여 **New scheduled task** 대화 상자를 엽니다. 계속하기 전에 다음 화면이 나타나는지 확인합니다:

57 

58* **Create with Claude**와 **Set up manually**가 있는 메뉴가 열리면 **Set up manually**를 선택하여 대화 상자를 엽니다.

59* 대화 상자 맨 위에 **Only on this computer**가 있으면 아무것도 입력하기 전에 [맨 위에 Only on this computer가 있는 대화 상자](#dialog-with-only-on-this-computer-at-the-top)로 이동합니다.

60* **Local**과 **Cloud**가 있는 메뉴가 열리거나 대화 상자 대신 전체 페이지가 열리면 [전체 페이지 양식](#full-page-form)으로 이동합니다.

53 61 

54**3. 작업 이름 지정하기**62**3. 작업 이름 지정하기**

55 63 


99 107 

100**Create**를 클릭합니다. 작업의 세부 정보 페이지가 열립니다.108**Create**를 클릭합니다. 작업의 세부 정보 페이지가 열립니다.

101 109 

110### 전체 페이지 양식

111 

112**Local**과 **Cloud**가 있는 메뉴가 열리면 **Local**을 선택합니다. **New local routine** 또는 **New local scheduled task**라는 제목의 페이지가 열립니다. 해당 필드를 채웁니다:

113 

114* **Name**: 모든 작업 전체에서 고유한 이름을 입력합니다.

115* **Description**: 설명을 입력합니다.

116* **Instructions**: 작업이 실행될 때 Claude가 수행해야 할 작업을 입력합니다. 같은 상자에서 권한 모드, 모델, 작업이 실행될 폴더를 선택합니다.

117* **Schedule**: [일정 옵션](#schedule-options) 중 하나를 선택합니다.

118 

119**Create**를 사용할 수 없는 경우 마우스 포인터를 올려 양식에 아직 필요한 항목을 확인합니다. **Create**를 클릭하면 작업의 세부 정보 페이지가 열립니다.

120 

102## 예약 옵션121## 예약 옵션

103 122 

104**Advanced settings**에서 **Only on this computer**를 켜면 **Trigger** 카드에서 Hourly, Daily, Weekdays, Weekly를 선택할 수 있습니다. 이러한 작업에 **Manual** 또는 **Custom**을 사용하려면 작업을 만든 후 해당 작업의 [**Edit** 양식](#manage-scheduled-tasks)을 엽니다. 이 양식과 [상단에 **Only on this computer**가 있는 대화 상자](#dialog-with-only-on-this-computer-at-the-top)에서는 다음 여섯 가지 옵션을 제공합니다.123**Advanced settings**에서 **Only on this computer**를 켜면 **Trigger** 카드에서 Hourly, Daily, Weekdays, Weekly를 선택할 수 있습니다. 이러한 작업에 **Manual** 또는 **Custom**을 사용하려면 작업을 만든 후 해당 작업의 [**Edit** 양식](#manage-scheduled-tasks)을 엽니다. 이 양식, [상단에 **Only on this computer**가 있는 대화 상자](#dialog-with-only-on-this-computer-at-the-top), [전체 페이지 양식](#full-page-form)에서는 다음 여섯 가지 옵션을 제공합니다.

105 124 

106* **Hourly**: 매시간 실행됩니다.125* **Hourly**: 매시간 실행됩니다.

107* **Daily**: 매일 선택한 현지 시간에 실행됩니다.126* **Daily**: 매일 선택한 현지 시간에 실행됩니다.

env-vars.md +1 −1

Details

298| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | 이 `claude`가 다른 Claude Code 세션 내부에서 실행된 경우에도 트랜스크립트 저장, 프롬프트 기록, `claude agents` 등록을 강제하려면 `1`로 설정합니다. 예를 들어 `screen` 세션이나 Claude Code의 Bash 도구로 처음 시작된 백그라운드 런처에서 상속된 `CLAUDE_CODE_CHILD_SESSION` 값으로 인해 실제 최상위 세션이 중첩된 세션으로 잘못 분류될 때 사용합니다. v2.1.178부터 Claude Code는 tmux의 경우를 자동으로 감지하여 상속된 마커를 무시하므로 tmux에서는 더 이상 이 변수가 필요하지 않습니다. v2.1.169 이하에서도 적용되며, 이 변수가 재정의하는 중첩 세션 감지가 제거된 v2.1.170과 v2.1.171에서는 아무 효과가 없습니다 |298| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | 이 `claude`가 다른 Claude Code 세션 내부에서 실행된 경우에도 트랜스크립트 저장, 프롬프트 기록, `claude agents` 등록을 강제하려면 `1`로 설정합니다. 예를 들어 `screen` 세션이나 Claude Code의 Bash 도구로 처음 시작된 백그라운드 런처에서 상속된 `CLAUDE_CODE_CHILD_SESSION` 값으로 인해 실제 최상위 세션이 중첩된 세션으로 잘못 분류될 때 사용합니다. v2.1.178부터 Claude Code는 tmux의 경우를 자동으로 감지하여 상속된 마커를 무시하므로 tmux에서는 더 이상 이 변수가 필요하지 않습니다. v2.1.169 이하에서도 적용되며, 이 변수가 재정의하는 중첩 세션 감지가 제거된 v2.1.170과 v2.1.171에서는 아무 효과가 없습니다 |

299| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | 터미널이 취소선을 지원하지만 자동으로 감지되지 않는 경우(예: `TERM_PROGRAM`이 전달되지 않은 SSH 환경) Claude의 응답에서 `~~text~~`를 취소선으로 강제 렌더링하려면 `1`로 설정합니다. 이 변수가 없으면 감지되지 않은 터미널에서는 텍스트를 취소선으로 렌더링하는 대신 `~~` 마커가 그대로 표시됩니다. Claude Code v2.1.186 이상이 필요합니다 |299| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | 터미널이 취소선을 지원하지만 자동으로 감지되지 않는 경우(예: `TERM_PROGRAM`이 전달되지 않은 SSH 환경) Claude의 응답에서 `~~text~~`를 취소선으로 강제 렌더링하려면 `1`로 설정합니다. 이 변수가 없으면 감지되지 않은 터미널에서는 텍스트를 취소선으로 렌더링하는 대신 `~~` 마커가 그대로 표시됩니다. Claude Code v2.1.186 이상이 필요합니다 |

300| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | 터미널이 DEC private mode 2026 [동기화된 출력](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036)을 지원하지만 자동으로 감지되지 않을 때 이를 강제로 활성화하려면 `1`로 설정합니다. BSU/ESU를 구현하지만 기능 프로브에 응답하지 않는 Emacs `eat`와 같은 에뮬레이터에 유용합니다. tmux에서는 아무 효과가 없습니다. [전체 화면 렌더링](https://code.claude.com/docs/ko/fullscreen.md)으로 전환하는 `CLAUDE_CODE_NO_FLICKER`와 달리 렌더러를 변경하지 않습니다 |300| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | 터미널이 DEC private mode 2026 [동기화된 출력](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036)을 지원하지만 자동으로 감지되지 않을 때 이를 강제로 활성화하려면 `1`로 설정합니다. BSU/ESU를 구현하지만 기능 프로브에 응답하지 않는 Emacs `eat`와 같은 에뮬레이터에 유용합니다. tmux에서는 아무 효과가 없습니다. [전체 화면 렌더링](https://code.claude.com/docs/ko/fullscreen.md)으로 전환하는 `CLAUDE_CODE_NO_FLICKER`와 달리 렌더러를 변경하지 않습니다 |

301| `CLAUDE_CODE_FORCE_TERMINAL_IMAGES` | 터미널이 Unicode 플레이스홀더로 kitty graphics protocol 이미지를 그리는데도 `Image`의 흐리게 표시된 `alt` 텍스트가 계속 보이는 경우, `1`로 설정하면 [mod `Image` 요소](https://code.claude.com/docs/ko/plugins/mods/reference#elements)를 그림으로 그립니다. [`Image`를 그리는 터미널](https://code.claude.com/docs/ko/plugins/mods/gallery#image-and-client)과 tmux 또는 screen 내부에서 이 변수가 도움이 되지 않는 이유를 참조하세요 |301| `CLAUDE_CODE_FORCE_TERMINAL_IMAGES` | 터미널이 유니코드 플레이스홀더를 사용하는 kitty 그래픽 프로토콜 이미지를 그리는데도 `Image`의 흐리게 표시된 `alt` 텍스트가 계속 보이는 경우, `1`로 설정하면 [mod `Image` 요소](https://code.claude.com/docs/ko/plugins/mods/reference#elements)를 그림으로 그립니다. [`Image`를 그리는 터미널과 이 변수를 설정하지 말아야 하는 경우](https://code.claude.com/docs/ko/plugins/mods/gallery#image-and-client)를 참조하세요 |

302| `CLAUDE_CODE_FORK_SUBAGENT` | 기본적으로 켜져 있으며 Claude가 스스로 [포크](https://code.claude.com/docs/ko/sub-agents.md#fork-the-current-conversation)를 시작할 수 있게 하는 포크 모드를 제어합니다. 포크 모드가 켜져 있는 동안 Claude는 로컬 머신의 대화형 터미널, VS Code 또는 데스크톱 세션에서 [서브에이전트를 기다릴](https://code.claude.com/docs/ko/sub-agents.md#run-subagents-in-foreground-or-background) 수 없습니다. 포크 모드를 끄려면 `0`으로 설정하십시오. 버전은 [포크 모드 끄기](https://code.claude.com/docs/ko/sub-agents.md#turn-fork-mode-on-or-off)를 참조하십시오 |302| `CLAUDE_CODE_FORK_SUBAGENT` | 기본적으로 켜져 있으며 Claude가 스스로 [포크](https://code.claude.com/docs/ko/sub-agents.md#fork-the-current-conversation)를 시작할 수 있게 하는 포크 모드를 제어합니다. 포크 모드가 켜져 있는 동안 Claude는 로컬 머신의 대화형 터미널, VS Code 또는 데스크톱 세션에서 [서브에이전트를 기다릴](https://code.claude.com/docs/ko/sub-agents.md#run-subagents-in-foreground-or-background) 수 없습니다. 포크 모드를 끄려면 `0`으로 설정하십시오. 버전은 [포크 모드 끄기](https://code.claude.com/docs/ko/sub-agents.md#turn-fork-mode-on-or-off)를 참조하십시오 |

303| `CLAUDE_CODE_FORWARD_SUBAGENT_TEXT` | `claude -p --output-format stream-json` 출력에 [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md) 텍스트와 thinking 블록을 내보내려면 `1`로 설정하며, [`--forward-subagent-text`](https://code.claude.com/docs/ko/cli-reference#cli-flags) 플래그와 동일하게 동작합니다. 하네스가 `claude`를 호출하면서 플래그를 직접 전달할 수 없을 때 이 변수를 사용합니다. stream-json 출력을 사용하는 비대화형 모드 외부에서는 오류와 함께 종료되는 플래그와 달리, 변수는 해당 환경에서 무시되므로 프로세스 전체에 설정해도 중첩된 호출이 계속 작동합니다. Claude Code v2.1.211 이상이 필요합니다 |303| `CLAUDE_CODE_FORWARD_SUBAGENT_TEXT` | `claude -p --output-format stream-json` 출력에 [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md) 텍스트와 thinking 블록을 내보내려면 `1`로 설정하며, [`--forward-subagent-text`](https://code.claude.com/docs/ko/cli-reference#cli-flags) 플래그와 동일하게 동작합니다. 하네스가 `claude`를 호출하면서 플래그를 직접 전달할 수 없을 때 이 변수를 사용합니다. stream-json 출력을 사용하는 비대화형 모드 외부에서는 오류와 함께 종료되는 플래그와 달리, 변수는 해당 환경에서 무시되므로 프로세스 전체에 설정해도 중첩된 호출이 계속 작동합니다. Claude Code v2.1.211 이상이 필요합니다 |

304| `CLAUDE_CODE_GATEWAY_HINT_HEADERS` | 사용자 지정 프록시나 Amazon Bedrock 또는 Claude Platform on AWS와 같은 타사 제공업체에서 `x-claude-code-request-class`, `x-claude-code-compaction` 등의 [게이트웨이 힌트 헤더](https://code.claude.com/docs/ko/llm-gateway-protocol.md#gateway-hint-headers)를 보내려면 `1`로 설정합니다. Claude Code가 기본적으로 헤더를 보내는 Anthropic API 직접 연결을 포함한 모든 연결에서 헤더 전송을 중지하려면 `0`으로 설정합니다. Claude Code v2.1.273 이상이 필요합니다 |304| `CLAUDE_CODE_GATEWAY_HINT_HEADERS` | 사용자 지정 프록시나 Amazon Bedrock 또는 Claude Platform on AWS와 같은 타사 제공업체에서 `x-claude-code-request-class`, `x-claude-code-compaction` 등의 [게이트웨이 힌트 헤더](https://code.claude.com/docs/ko/llm-gateway-protocol.md#gateway-hint-headers)를 보내려면 `1`로 설정합니다. Claude Code가 기본적으로 헤더를 보내는 Anthropic API 직접 연결을 포함한 모든 연결에서 헤더 전송을 중지하려면 `0`으로 설정합니다. Claude Code v2.1.273 이상이 필요합니다 |

errors.md +263 −206

Details

317| `Skipping connection (recent failure cached; retries automatically in 15 min, or edit the plugin config to retry now)` | [플러그인 오류](#skipping-connection-recent-failure-cached) |317| `Skipping connection (recent failure cached; retries automatically in 15 min, or edit the plugin config to retry now)` | [플러그인 오류](#skipping-connection-recent-failure-cached) |

318| `Error: No such tool available: <tool name>` | [도구 오류](#no-such-tool-available) |318| `Error: No such tool available: <tool name>` | [도구 오류](#no-such-tool-available) |

319| `MCP server "<name>" connection closed before the tool call was answered` | [도구 오류](#connection-closed-before-the-tool-call-was-answered) |319| `MCP server "<name>" connection closed before the tool call was answered` | [도구 오류](#connection-closed-before-the-tool-call-was-answered) |

320| `MCP server "<name>" is disabled — re-enable it via /mcp to use its tools` | [도구 오류](#mcp-server-is-disabled) |

321| `MCP server "<name>" tool "<tool>" timed out after <N>s. The server asked the user a question, and no answer came before the time limit.` | [도구 오류](#mcp-tool-call-timed-out-with-the-servers-question-unanswered) |

320| `would be spawned with zero tools — refusing` | [도구 오류](#agent-would-be-spawned-with-zero-tools) |322| `would be spawned with zero tools — refusing` | [도구 오류](#agent-would-be-spawned-with-zero-tools) |

321| `File is covered by a Read deny rule in your permission settings` | [도구 오류](#file-is-covered-by-a-read-deny-rule) |323| `File is covered by a Read deny rule in your permission settings` | [도구 오류](#file-is-covered-by-a-read-deny-rule) |

322| `cannot contain null bytes (\0)` | [도구 오류](#path-cannot-contain-null-bytes) |324| `cannot contain null bytes (\0)` | [도구 오류](#path-cannot-contain-null-bytes) |


348| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` / `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)` | [도구 오류](#disk-quota-or-temp-filesystem-is-full) |350| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` / `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)` | [도구 오류](#disk-quota-or-temp-filesystem-is-full) |

349| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [도구 오류](#disk-quota-or-temp-filesystem-is-full) |351| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [도구 오류](#disk-quota-or-temp-filesystem-is-full) |

350| `File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary` | [도구 오류](#file-is-not-valid-utf-8) |352| `File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary` | [도구 오류](#file-is-not-valid-utf-8) |

353| `git is not installed on this Mac. To install it, run xcode-select --install, then try again.` | [도구 오류](#git-is-not-installed-on-this-mac) |

351| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [도구 오류](#the-source-file-is-not-valid-utf-8-text) |354| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [도구 오류](#the-source-file-is-not-valid-utf-8-text) |

352| `the source file has the replacement character U+FFFD` | [도구 오류](#the-source-file-is-not-valid-utf-8-text) |355| `the source file has the replacement character U+FFFD` | [도구 오류](#the-source-file-is-not-valid-utf-8-text) |

353| `Not published: that file is on a network share` | [도구 오류](#not-published-that-file-is-on-a-network-share) |356| `Not published: that file is on a network share` | [도구 오류](#not-published-that-file-is-on-a-network-share) |


487 490 

488Claude가 [advisor](https://code.claude.com/docs/ko/advisor.md)를 참조하는 동안에는 데이터 없이 20초가 아닌 90초가 지나야 배너가 표시됩니다. 긴 advisor 검토는 20초를 훨씬 넘는 시간 동안 아무것도 보내지 않을 수 있기 때문입니다. v2.1.214 이전에는 advisor 호출 중에도 20초 임계값이 적용되어, 아무 문제가 없는데도 advisor 검토 중에 배너가 표시되었습니다.491Claude가 [advisor](https://code.claude.com/docs/ko/advisor.md)를 참조하는 동안에는 데이터 없이 20초가 아닌 90초가 지나야 배너가 표시됩니다. 긴 advisor 검토는 20초를 훨씬 넘는 시간 동안 아무것도 보내지 않을 수 있기 때문입니다. v2.1.214 이전에는 advisor 호출 중에도 20초 임계값이 적용되어, 아무 문제가 없는데도 advisor 검토 중에 배너가 표시되었습니다.

489 492 

493#### 게이트웨이 뒤에서 대기 배너가 나타났다 사라지는 경우

494 

495게이트웨이를 통해 연결한 상태에서 Claude가 사고하는 동안 `Waiting for API response` 배너가 나타났다 사라지기를 반복한다면, [Claude Code를 업데이트](https://code.claude.com/docs/ko/setup.md#update-claude-code)하여 v2.1.309 이상을 사용하세요. 다음 연결에서는 데이터 없이 45초가 지나야 배너가 표시됩니다.

496 

497* [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/ko/env-vars)이 [LLM 게이트웨이](https://code.claude.com/docs/ko/llm-gateway)처럼 Anthropic API가 아닌 호스트로 설정된 경우

498* [Claude apps gateway](https://code.claude.com/docs/ko/claude-apps-gateway) 세션

499* `ANTHROPIC_AWS_BASE_URL`이 설정된 [Claude Platform on AWS](https://code.claude.com/docs/ko/claude-platform-on-aws.md)

500 

501v2.1.309 이전에는 이러한 연결에서 20초 후에 배너가 표시되었습니다.

502 

490### 재시도 동작 조정503### 재시도 동작 조정

491 504 

492다음 환경 변수로 재시도 동작을 조정할 수 있습니다.505다음 환경 변수로 재시도 동작을 조정할 수 있습니다.


3256 3269 

3257**해결 방법:**3270**해결 방법:**

3258 3271 

3259* 스크립트나 CI 작업에서는 `--trust-workspace`를 추가하여 해당 실행에 대해서만 체크아웃을 신뢰합니다: `claude ultrareview --trust-workspace`. 체크아웃의 git 구성과 Claude Code 프로젝트 설정이 프로그램을 실행할 수 있게 되므로, 신뢰하는 코드에 대해서만 추가합니다. 코드를 신뢰하지 않는 풀 리퀘스트를 리뷰하려면 [신뢰하는 체크아웃에서 리뷰하는 방법](https://code.claude.com/docs/ko/ultrareview.md#trust-the-folder-before-the-review-runs)을 참조하세요.3272* 스크립트나 CI 작업에서는 `--trust-workspace`를 추가하여 해당 실행에 한해 폴더를 신뢰합니다: `claude ultrareview --trust-workspace`. 이 플래그를 추가하면 git과 Claude Code가 폴더의 git 구성과 프로젝트 설정에 지정된 프로그램을 실행할 수 있으므로, 신뢰하는 코드에만 추가합니다. 코드를 신뢰하지 않는 풀 리퀘스트의 경우 [신뢰하는 브랜치에서 리뷰를 실행](https://code.claude.com/docs/ko/ultrareview.md#trust-the-folder-before-the-review-runs)합니다.

3260* 자신의 컴퓨터에서는 해당 폴더에서 `claude`를 실행하고 [워크스페이스 신뢰 대화 상자](https://code.claude.com/docs/ko/permissions.md#project-allow-rules-and-workspace-trust)를 수락한 다음 원래 명령을 다시 실행합니다3273* 자신의 컴퓨터에서는 해당 폴더에서 `claude`를 실행하고 [워크스페이스 신뢰 대화 상자](https://code.claude.com/docs/ko/permissions.md#project-allow-rules-and-workspace-trust)를 수락한 다음 원래 명령을 다시 실행합니다

3261 3274 

3262`claude ultrareview`의 다음 각 메시지는 리뷰가 시작되지 않았고 종료 코드가 1이라는 의미입니다:3275`claude ultrareview`의 다음 각 메시지는 리뷰가 시작되지 않았고 종료 코드가 1이라는 의미입니다:


3265* **`Error: Workspace not trusted. <folder> is your home directory`**: 홈 디렉터리에 대한 신뢰는 저장되지 않으므로, 먼저 그곳에서 `claude`를 실행해도 도움이 되지 않습니다. 대신 프로젝트 디렉터리에서 `claude`를 한 번 실행하여 신뢰 대화 상자를 수락한 후 그곳에서 `claude ultrareview`를 실행하거나, `--trust-workspace`를 추가합니다.3278* **`Error: Workspace not trusted. <folder> is your home directory`**: 홈 디렉터리에 대한 신뢰는 저장되지 않으므로, 먼저 그곳에서 `claude`를 실행해도 도움이 되지 않습니다. 대신 프로젝트 디렉터리에서 `claude`를 한 번 실행하여 신뢰 대화 상자를 수락한 후 그곳에서 `claude ultrareview`를 실행하거나, `--trust-workspace`를 추가합니다.

3266* **`No answer in time.` 뒤에 `Error: Workspace not trusted`**: `Trust <folder>? [y/N]` 질문에 5분 동안 답하지 않았습니다. `claude ultrareview`를 다시 실행하고 답합니다.3279* **`No answer in time.` 뒤에 `Error: Workspace not trusted`**: `Trust <folder>? [y/N]` 질문에 5분 동안 답하지 않았습니다. `claude ultrareview`를 다시 실행하고 답합니다.

3267* **`Ultrareview did not start: <folder> is not trusted`**: `n`으로 답하거나 Enter를 누르는 등 `Trust <folder>? [y/N]` 질문을 거절했습니다. 리뷰를 시작하려면 `claude ultrareview`를 다시 실행하고 `y`로 답합니다.3280* **`Ultrareview did not start: <folder> is not trusted`**: `n`으로 답하거나 Enter를 누르는 등 `Trust <folder>? [y/N]` 질문을 거절했습니다. 리뷰를 시작하려면 `claude ultrareview`를 다시 실행하고 `y`로 답합니다.

3268* **``Ultrareview did not start: `--trust-workspace` takes no value``**: PR 번호나 `false`처럼 플래그가 아닌 것이 `--trust-workspace` 뒤에 옵니다. 폴더를 신뢰하지 않는다면 플래그를 빼세요. 이번 실행에 대해 신뢰하려면 PR 번호나 기본 브랜치를 플래그 앞에 둡니다: `claude ultrareview 1234 --trust-workspace`.3281* **``Ultrareview did not start: `--trust-workspace` takes no value``**: PR 번호나 `false`처럼 플래그가 아닌 무언가가 `--trust-workspace` 뒤에 옵니다. 폴더를 신뢰하지 않는다면 플래그를 빼십시오. 이번 실행에 한해 신뢰하려면 PR 번호나 기본 브랜치를 플래그 앞에 둡니다: `claude ultrareview 1234 --trust-workspace`.

3269 3282 

3270v2.1.309 이전에는 `claude ultrareview`가 `--trust-workspace`를 받지 않았습니다.3283v2.1.309 이전에는 `claude ultrareview`가 `--trust-workspace`를 받지 않았습니다.

3271 3284 


3526 3539 

3527관련 메시지는 명령이 실행되기도 전에 발생합니다:3540관련 메시지는 명령이 실행되기도 전에 발생합니다:

3528 3541 

3529* `Shell command permission check failed for pattern "..."`: 명령의 권한 검사가 허용하지 않았습니다. [삽입된 명령의 권한 검사](https://code.claude.com/docs/ko/skills.md#permission-checks-on-injected-commands)에서 각 권한 모드에서 어떤 결과가 중단되는지, `allowed-tools`로 명령을 사전 승인하는 방법을 다룹니다3542* `Shell command permission check failed for pattern "..."`: 명령의 권한 검사가 명령을 허용하지 않았습니다. [주입된 명령에 대한 권한 검사](https://code.claude.com/docs/ko/skills.md#permission-checks-on-injected-commands)에서 각 권한 모드에서 어떤 결과가 중단으로 이어지는지, 그리고 `allowed-tools`로 명령을 사전 승인하는 방법을 다룹니다

3530* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: 스킬의 frontmatter가 bash가 없는 컴퓨터에서 bash를 요구합니다. Git for Windows를 설치하거나 frontmatter를 `shell: powershell`로 변경합니다. [주입된 명령이 실행되는 방식](https://code.claude.com/docs/ko/skills.md#how-injected-commands-run)을 참조하세요3543* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: 스킬의 frontmatter가 bash가 없는 컴퓨터에서 bash를 요구합니다. Git for Windows를 설치하거나 frontmatter를 `shell: powershell`로 변경합니다. [주입된 명령이 실행되는 방식](https://code.claude.com/docs/ko/skills.md#how-injected-commands-run)을 참조하세요

3531* `No shell command in <name> was run`: 파일의 `!` 명령 중 하나에 탭이나 줄 바꿈 이외의 원시 제어 문자가 포함되어 있어 어떤 명령도 실행되지 않습니다. [해당 문자를 찾아 제거하는 방법](#no-shell-command-was-run)을 참조하십시오3544* `No shell command in <name> was run`: 파일의 `!` 명령 중 하나에 탭이나 줄 바꿈 이외의 원시 제어 문자가 포함되어 있어 어떤 명령도 실행되지 않습니다. [해당 문자를 찾아 제거하는 방법](#no-shell-command-was-run)을 참조하십시오

3532 3545 


3678 3691 

3679* **기본 브랜치를 전달하지 않은 경우**: Claude Code는 저장소의 기본 브랜치와 비교했으며, 위 예시처럼 기본 브랜치를 명시적으로 전달하도록 제안합니다3692* **기본 브랜치를 전달하지 않은 경우**: Claude Code는 저장소의 기본 브랜치와 비교했으며, 위 예시처럼 기본 브랜치를 명시적으로 전달하도록 제안합니다

3680* **클론에 이미 있는 기본 브랜치를 전달한 경우**: 힌트는 ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``입니다3693* **클론에 이미 있는 기본 브랜치를 전달한 경우**: 힌트는 ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``입니다

3681* **클론에 없던 기본 브랜치를 전달한 경우**: Claude Code는 비교하기 전에 origin에서 해당 브랜치를 가져왔습니다. 안내 문구는 ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``이며, Claude Code가 클론이 shallow 클론인지 판단할 수 없는 경우에는 대신 `git fetch --unshallow origin`을 제안합니다. v2.1.221 이전에는 가져온 모든 기본 브랜치에 대해 `git fetch --unshallow origin`을 제안했으며, 완전한 클론에서는 이 명령이 `fatal: --unshallow on a complete repository does not make sense`와 함께 실패했습니다.3694* **클론에 없던 기준 브랜치를 전달한 경우**: Claude Code는 비교하기 전에 origin에서 해당 브랜치를 가져왔습니다. 안내 문구는 ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``이며, Claude Code가 클론이 얕은(shallow) 클론인지 판단할 수 없는 경우에는 대신 `git fetch --unshallow origin`을 제안합니다. v2.1.221 이전에는 가져온 모든 기준 브랜치에 대해 `git fetch --unshallow origin`을 제안했으며, 완전한 클론에서는 이 명령이 `fatal: --unshallow on a complete repository does not make sense`와 함께 실패했습니다.

3682 3695 

3683**해결 방법:**3696**해결 방법:**

3684 3697 


4382 4395 

4383## 도구 오류4396## 도구 오류

4384 4397 

4385이러한 오류는 Claude의 도구 호출에서 발생합니다. Claude는 대부분의 도구 오류를 자동으로 수정합니다. 변경이 필요한 경우 해당 오류의 **할 일** 목록에 변경할 사항이 명시되어 있습니다.4398이 오류들은 Claude의 도구 호출에서 발생합니다. 대부분의 도구 오류는 Claude가 스스로 바로잡습니다. 사용자가 무언가를 변경해야 하는 경우에는 해당 오류의 **조치 방법** 목록에 변경할 내용이 안내되어 있습니다.

4386 4399 

4387### No such tool available4400### No such tool available

4388 4401 

4389Claude가 세션의 도구 목록에 없는 이름으로 도구를 호출했습니다. Claude Code는 도구 호출의 결과로 Claude에 오류를 반환하며 턴이 계속됩니다. Claude Code가 도구가 없는 이유를 알 수 있으면 두 번째 줄처럼 도구 이름 뒤에 이유를 설명하거나 대신 호출할 도구를 지정하는 문장을 추가합니다:4402Claude가 세션의 도구 목록에 없는 이름으로 도구를 호출했습니다. Claude Code는 이 오류를 도구 호출의 결과로 Claude에게 반환하며, 턴은 계속됩니다. Claude Code가 도구가 없는 이유를 파악할 수 있으면, 두 번째 줄처럼 도구 이름 뒤에 이유를 설명하거나 대신 호출할 도구를 알려 주는 문장을 덧붙입니다.

4390 4403 

4391```text theme={null}4404```text theme={null}

4392Error: No such tool available: <tool name>4405Error: No such tool available: <tool name>

4393Error: No such tool available: read. Tool names are case-sensitive: call Read instead.4406Error: No such tool available: read. Tool names are case-sensitive: call Read instead.

4394```4407```

4395 4408 

4396세션을 재개한 직후에는 Claude가 MCP 서버의 도구 중 하나를 호출할 때 해당 서버가 아직 첫 번째 연결을 시도하는 중일 수 있습니다. 이 경우 Claude Code는 [서버를 기다리며](https://code.claude.com/docs/ko/mcp.md#tool-availability), 대기가 끝났을 때도 도구를 여전히 사용할 수 없으면 이 오류를 반환합니다. v2.1.284 이전에는 이러한 호출이 기다리지 않고 즉시 실패했습니다.4409세션을 재개한 직후에는 Claude가 MCP 서버의 도구를 호출할 때 해당 서버가 아직 첫 번째 연결을 시도하는 중일 수 있습니다. 이 경우 Claude Code는 [서버를 기다리며](https://code.claude.com/docs/ko/mcp.md#tool-availability), 대기가 끝날 때까지 도구를 사용할 수 없으면 이 오류를 반환합니다. v2.1.284 이전에는 이러한 호출이 기다리지 않고 즉시 실패했습니다.

4397 4410 

4398Claude Code가 도구 이름을 [200자로 잘라낸](#tool-use-name-over-200-characters) 호출도 이 오류로 실패합니다.4411Claude Code가 도구 이름을 [200자로 잘라낸](#tool-use-name-over-200-characters) 호출도 이 오류로 실패합니다.

4399 4412 

4400**할 일:**4413**조치 방법:**

4401 4414 

4402* 한 번만 발생하면 아무것도 할 필요가 없습니다. Claude가 오류를 읽고 턴이 계속됩니다.4415* 한 번만 발생했다면 아무것도 할 필요가 없습니다. Claude가 오류를 읽고 턴이 계속됩니다.

4403* MCP 서버의 도구 호출이 이 오류로 계속 실패하면 세션에서 `/mcp`를 실행하거나 셸에서 `claude mcp list`를 실행하여 서버의 [상태](https://code.claude.com/docs/ko/mcp.md#server-status)를 확인하고, 실패한 서버는 `/mcp`에서 다시 연결합니다. Agent SDK에서는 [오류 처리](https://code.claude.com/docs/ko/agent-sdk/mcp.md#error-handling)를 참조합니다.4416* MCP 서버의 도구 호출이 계속 이 오류로 실패한다면, 세션에서 `/mcp`를 실행하거나 셸에서 `claude mcp list`를 실행하여 서버의 [상태](https://code.claude.com/docs/ko/mcp.md#server-status)를 확인하고, 실패한 서버를 `/mcp`에서 다시 연결합니다. Agent SDK에서는 [오류 처리](https://code.claude.com/docs/ko/agent-sdk/mcp.md#error-handling)를 참조하세요.

4404 4417 

4405### MCP server connection closed before the tool call was answered4418### MCP server connection closed before the tool call was answered

4406 4419 

4407HTTP [MCP 서버](https://code.claude.com/docs/ko/mcp.md) 또는 [claude.ai 커넥터](https://code.claude.com/docs/ko/mcp.md#use-mcp-servers-from-claude-ai)에 대한 도구 호출이 서버가 응답하기 전에 연결이 끊어졌으므로 Claude Code는 도구가 실행되었는지 알 수 없습니다:4420HTTP [MCP 서버](https://code.claude.com/docs/ko/mcp.md) 또는 [claude.ai 커넥터](https://code.claude.com/docs/ko/mcp.md#use-mcp-servers-from-claude-ai)에 대한 도구 호출이 서버가 응답하기 전에 연결이 끊겨, Claude Code는 도구가 실행되었는지 알 수 없습니다.

4408 4421 

4409```text theme={null}4422```text theme={null}

4410MCP server "<name>" connection closed before the tool call was answered. The tool may have run: check whether it did before running it again.4423MCP server "<name>" connection closed before the tool call was answered. The tool may have run: check whether it did before running it again.

4411```4424```

4412 4425 

4413호출을 반복하면 두 번째 이슈를 만드는 것처럼 도구의 작업이 반복될 수 있습니다. 따라서 Claude Code는 서버가 도구를 반복해도 안전한 것으로 표시한 경우에만 호출을 자동으로 한 번 반복합니다.4426호출을 반복하면 두 번째 이슈를 생성하는 것처럼 도구의 동작이 반복될 수 있습니다. 따라서 Claude Code는 서버가 도구를 반복해도 안전하다고 표시한 경우 호출을 스스로 한 번 반복합니다.

4414 4427 

4415**할 일:**4428**조치 방법:**

4429 

4430* 도구가 작업하는 서비스에서 동작이 실제로 일어났는지 확인합니다. 예를 들어 생성하려던 이슈나 레코드가 있는지 확인합니다

4431* 동작이 일어났다면 도구를 다시 실행하지 마세요. Claude는 도구의 결과 대신 이 메시지를 받았으므로, 결과를 Claude에게 알려 줍니다.

4432* 동작이 일어나지 않았다면 Claude에게 도구를 다시 실행하도록 요청합니다. Claude Code는 해당 서버의 도구를 다음에 호출할 때 서버에 다시 연결하므로, 먼저 서버를 다시 연결할 필요는 없습니다. 그 연결도 실패하면 [원격 서버의 세션 중 연결 끊김](https://code.claude.com/docs/ko/mcp.md#mid-session-drops-of-a-remote-server)을 참조하세요.

4433* 서버를 직접 빌드하고 있고 도구를 두 번 호출해도 안전하다면, Claude Code가 유실된 호출을 반복할 수 있도록 [반복해도 안전하다고 표시](https://code.claude.com/docs/ko/mcp.md#tool-calls-pending-when-a-connection-closes)합니다

4434 

4435### MCP server is disabled

4436 

4437도구 결과에 이 메시지가 표시되면 Claude가 [꺼져 있는](https://code.claude.com/docs/ko/mcp.md#disable-a-server-without-removing-it) [MCP 서버](https://code.claude.com/docs/ko/mcp.md)의 도구를 호출했다는 의미입니다. Claude Code는 서버에 연결하지 않았으므로 도구가 실행되지 않았으며, Claude는 결과 대신 이 텍스트를 받았습니다.

4438 

4439```text wrap theme={null}

4440MCP server "<name>" is disabled — re-enable it via /mcp to use its tools

4441```

4442 

4443**조치 방법:**

4444 

4445* 의도적으로 서버를 끈 것이라면 아무것도 할 필요가 없습니다

4446* Claude에게 서버의 도구가 필요하다면 Claude Code 프롬프트에서 `/mcp`로 서버를 다시 켭니다

4447* [Agent SDK](https://code.claude.com/docs/ko/agent-sdk/overview.md) 애플리케이션에서는 TypeScript의 경우 `enabled`를 `true`로 설정하여 [`toggleMcpServer()`](https://code.claude.com/docs/ko/agent-sdk/typescript#togglemcpserver)를 호출하고, Python의 경우 `enabled`를 `True`로 설정하여 [`toggle_mcp_server()`](https://code.claude.com/docs/ko/agent-sdk/python#claudesdkclient)를 호출하여 서버를 다시 켭니다

4448 

4449### MCP tool call timed out with the server's question unanswered

4450 

4451[비대화형 모드](https://code.claude.com/docs/ko/headless.md)에서 [MCP 서버](https://code.claude.com/docs/ko/mcp.md)가 도구 호출 중에 [elicitation](https://code.claude.com/docs/ko/mcp.md#respond-to-mcp-elicitation-requests)을 통해 입력을 요청했으며, 응답이 오기 전에 호출의 시간 제한이 만료되었습니다.

4452 

4453```text theme={null}

4454MCP server "<name>" tool "<tool>" timed out after <N>s. The server asked the user a question, and no answer came before the time limit. Do not call this tool again in this turn. Tell the user that the server's question got no answer, and wait for their reply.

4455```

4456 

4457v2.1.310 이전에는 결과가 `timed out after <N>s`로 끝났으며 질문에 대해서는 아무것도 언급하지 않았습니다.

4458 

4459**조치 방법:**

4416 4460 

4417* 도구가 작업하는 서비스에서 작업이 수행되었는지 확인합니다. 예를 들어 만들려던 이슈나 레코드가 있는지 확인합니다.4461* 서버의 요청에 응답하는 [`Elicitation` 훅](https://code.claude.com/docs/ko/hooks#elicitation)을 설정합니다

4418* 작업이 수행되었다면 도구를 다시 실행하지 않습니다. Claude는 도구의 결과 대신 이 메시지를 받았으므로 Claude에 결과를 알려줍니다.4462* TypeScript Agent SDK 애플리케이션에서는 [`onElicitation`](https://code.claude.com/docs/ko/agent-sdk/typescript#options) 콜백이 제한 시간이 만료되기 전에 응답을 반환하도록 합니다

4419* 작업이 수행되지 않았다면 Claude에 도구를 다시 실행하도록 요청합니다. Claude Code가 해당 서버의 도구를 다음에 호출할 때 서버에 다시 연결하므로 먼저 서버에 다시 연결할 필요는 없습니다. 그 연결도 실패하면 [원격 서버의 세션 중 연결 끊김](https://code.claude.com/docs/ko/mcp.md#mid-session-drops-of-a-remote-server)을 참조합니다.4463* 응답할 시간을 더 확보하려면 서버의 구성 항목에서 더 긴 [`timeout`](https://code.claude.com/docs/ko/mcp#time-limits-on-mcp-tool-calls)을 밀리초 단위로 설정합니다. 예를 들어 10분이면 `"timeout": 600000`입니다

4420* 서버를 직접 만들었고 도구를 두 번 호출해도 안전하다면 Claude Code가 손실된 호출을 반복할 수 있도록 [반복해도 안전한 것으로 표시합니다](https://code.claude.com/docs/ko/mcp.md#tool-calls-pending-when-a-connection-closes).4464* 대신 대화형 세션에서 작업을 실행하고 서버의 [대화 상자](https://code.claude.com/docs/ko/mcp.md#respond-to-mcp-elicitation-requests)에 직접 응답합니다

4421 4465 

4422### Agent would be spawned with zero tools4466### Agent would be spawned with zero tools

4423 4467 

4424서브에이전트의 [`tools` 목록](https://code.claude.com/docs/ko/sub-agents#supported-frontmatter-fields)의 모든 항목이 사용 가능한 도구와 일치하지 않아 Claude Code가 서브에이전트 시작을 거부했습니다. 도구가 없으면 작동할 수 없기 때문입니다. 메시지는 항목을 잘못된 이유별로 그룹화합니다:4468서브에이전트의 [`tools` 목록](https://code.claude.com/docs/ko/sub-agents#supported-frontmatter-fields)에 있는 모든 항목이 사용 가능한 도구와 일치하지 않아, Claude Code가 서브에이전트 실행을 거부했습니다. 도구가 없으면 서브에이전트는 아무 작업도 할 수 없기 때문입니다. 메시지는 문제의 종류별로 항목을 묶어 보여 줍니다.

4425 4469 

4426* **인식되지 않음**: 항목이 도구 이름과 일치하지 않으며, 보통 `Grep`을 `Grpe`로 잘못 입력한 것과 같은 오타입니다.4470* **Unrecognized**: 항목이 어떤 도구 이름과도 일치하지 않습니다. 보통 `Grep`을 `Grpe`로 쓰는 것과 같은 오타입니다.

4427* **서브에이전트에서 사용 불가**: 항목이 [서브에이전트가 사용할 수 없는](https://code.claude.com/docs/ko/sub-agents.md#available-tools) 실제 도구를 지정합니다. 백그라운드 서브에이전트는 더 작은 기본 제공 도구 세트를 유지하므로, 포그라운드 서브에이전트만 사용할 수 있는 항목은 서브에이전트가 기본값인 백그라운드에서 실행될 때 여기에 표시됩니다. `Agent`를 나열하면 메시지가 대신 다음 그룹 아래에 보고됩니다.4471* **Not available to subagents**: 항목이 실제 도구를 가리키지만 [서브에이전트가 사용할 수 없는](https://code.claude.com/docs/ko/sub-agents.md#available-tools) 도구입니다. 백그라운드 서브에이전트는 더 작은 내장 도구 세트를 유지하므로, 서브에이전트가 기본값인 백그라운드에서 실행될 경우 포그라운드 서브에이전트만 사용할 수 있는 항목은 여기에 분류됩니다. `Agent`를 나열한 경우에는 메시지가 대신 다음 그룹에 이를 보고합니다.

4428* **이 세션의 도구와 일치하지 않음**: 항목은 유효하지만 현재 세션의 도구가 지금 일치하지 않습니다. 예를 들어 GitHub MCP 서버가 연결되지 않은 `mcp__github__*` 또는 [깊이 제한](https://code.claude.com/docs/ko/sub-agents.md#let-subagents-spawn-their-own-subagents)에 있는 서브에이전트의 `Agent`입니다.4472* **Matched no tools in this session**: 항목은 유효하지만 현재 세션에 일치하는 도구가 지금은 없습니다. 예를 들어 GitHub MCP 서버가 연결되지 않은 상태의 `mcp__github__*`, 또는 [깊이 제한](https://code.claude.com/docs/ko/sub-agents.md#let-subagents-spawn-their-own-subagents)에 도달한 서브에이전트의 `Agent`가 이에 해당합니다.

4429 4473 

4430`tools` 필드를 생략하면 이 거부가 트리거되지 않습니다. `tools` 목록을 비워두거나 `disallowedTools`가 목록의 모든 항목을 제거하면 Claude Code도 거부를 건너뛰고 도구 없이 서브에이전트를 시작합니다.4474`tools` 필드를 생략하면 이 거부가 절대 발생하지 않습니다. `tools` 목록을 비워 두거나 `disallowedTools`가 목록의 모든 항목을 제거하는 경우에도 Claude Code는 거부를 건너뛰고 도구 없이 서브에이전트를 실행합니다.

4431 4475 

4432v2.1.208 이전에는 서브에이전트가 도구 없이 시작되었고 빈 결과 또는 혼란스러운 결과를 반환할 수 있었습니다.4476v2.1.208 이전에는 서브에이전트가 도구 없이 실행되어 빈 결과나 혼란스러운 결과를 반환할 수 있었습니다.

4433 4477 

4434```text theme={null}4478```text theme={null}

4435Agent 'code-reviewer' would be spawned with zero tools — refusing. Its tools list resolved to nothing: unrecognized [Grpe]. Fix the agent's tools frontmatter or pass a different subagent_type.4479Agent 'code-reviewer' would be spawned with zero tools — refusing. Its tools list resolved to nothing: unrecognized [Grpe]. Fix the agent's tools frontmatter or pass a different subagent_type.

4436```4480```

4437 4481 

4438**할 일:**4482**조치 방법:**

4439 4483 

4440* 오류가 지정하는 각 항목을 [서브에이전트에서 사용 가능한 도구](https://code.claude.com/docs/ko/sub-agents.md#available-tools)에 대해 수정합니다.4484* 오류에 표시된 각 항목을 [서브에이전트가 사용할 수 있는 도구](https://code.claude.com/docs/ko/sub-agents.md#available-tools)와 비교하여 수정합니다

4441* 세션에 없는 도구의 항목을 제거합니다. 예를 들어 연결되지 않은 서버의 MCP 도구입니다.4485* 연결되지 않은 서버의 MCP 도구처럼 세션에 없는 도구의 항목을 제거합니다

4442* 항목이 연결된 MCP 서버를 지정하는 경우, 해당 서버의 [도구 이름](https://code.claude.com/docs/ko/permissions.md#mcp)에 표기된 서버 이름과 항목을 비교합니다. 예를 들어 `mcp__reports__v2__get_totals`의 `reports__v2`입니다. 해당 서버의 경우 `mcp__` 뒤에 전체 이름과 `__*`를 붙인 `mcp__reports__v2__*`로 작성합니다. `reports`라는 서버를 지정하는 더 짧은 `mcp__reports`를 사용하면 서브에이전트는 `reports__v2` 도구를 하나도 받지 못합니다.4486* 항목이 연결된 MCP 서버를 가리킨다면, 해당 서버의 [도구 이름](https://code.claude.com/docs/ko/permissions.md#mcp)에 표기된 서버 이름과 항목을 비교합니다. 예를 들어 `mcp__reports__v2__get_totals`의 `reports__v2`가 서버 이름입니다. 이 서버의 경우 `mcp__` 뒤에 전체 이름과 `__*`를 붙인 `mcp__reports__v2__*`로 작성합니다. `reports`라는 서버를 가리키는 더 짧은 `mcp__reports`를 쓰면 서브에이전트는 `reports__v2` 도구를 하나도 받지 못합니다

4443* [백그라운드 서브에이전트가 제거하는](https://code.claude.com/docs/ko/sub-agents.md#available-tools) 도구(예: `CronCreate`)의 경우 항목을 제거합니다.4487* `CronCreate`처럼 [백그라운드 서브에이전트가 제외하는](https://code.claude.com/docs/ko/sub-agents.md#available-tools) 도구의 경우 해당 항목을 제거합니다

4444* 대신 `CronCreate`와 같은 도구를 유지하려면 [Claude가 서브에이전트를 기다리도록 합니다](https://code.claude.com/docs/ko/sub-agents.md#let-claude-wait-for-a-subagent). Claude가 기다리는 서브에이전트는 포그라운드에서 실행되어 도구를 유지하기 때문입니다. 정의에 `background: true`가 설정되어 있으면 해당 필드가 서브에이전트를 백그라운드에 유지하므로 먼저 해당 필드를 제거합니다.4488* 대신 `CronCreate` 같은 도구를 유지하려면 [Claude가 서브에이전트를 기다리도록](https://code.claude.com/docs/ko/sub-agents.md#let-claude-wait-for-a-subagent) 합니다. Claude가 기다리는 서브에이전트는 포그라운드에서 실행되며 해당 도구를 유지합니다. 정의에 `background: true`가 설정되어 있으면 서브에이전트를 백그라운드에 유지시키므로 먼저 이 필드를 제거합니다

4445* 도구를 나열하는 대신 `tools` 필드를 삭제하여 서브에이전트에 [서브에이전트에서 사용 가능한 모든 도구](https://code.claude.com/docs/ko/sub-agents.md#available-tools)를 제공합니다.4489* 서브에이전트에 [서브에이전트가 사용할 수 있는 모든 도구](https://code.claude.com/docs/ko/sub-agents.md#available-tools)를 제공하려면 도구를 나열하는 대신 `tools` 필드를 삭제합니다

4446* `Agent`만 포함하는 `tools` 목록의 경우 [깊이 제한](https://code.claude.com/docs/ko/sub-agents.md#let-subagents-spawn-their-own-subagents)을 높이거나 에이전트에 최소한 하나의 다른 도구를 제공합니다. Claude Code는 해당 제한에서 `Agent`를 보류하므로 다른 항목이 없는 목록은 도구 없음으로 해석됩니다.4490* `Agent`만 포함된 `tools` 목록의 경우 [깊이 제한](https://code.claude.com/docs/ko/sub-agents.md#let-subagents-spawn-their-own-subagents)을 높이거나 에이전트에 다른 도구를 하나 이상 제공합니다. Claude Code는 해당 제한에서 `Agent`를 제공하지 않으므로, 다른 항목이 없는 목록은 도구가 없는 상태로 해석됩니다

4447 4491 

4448### File is covered by a Read deny rule4492### File is covered by a Read deny rule

4449 4493 

4450Edit 또는 Write 도구가 [`Read` 거부 규칙](https://code.claude.com/docs/ko/permissions#read-and-edit)과 일치하는 경로에서 호출되었습니다. 여기에는 해당 경로에 새 파일을 만드는 것도 포함됩니다. 두 도구 모두 Claude가 다시 읽을 수 있어야 하는 콘텐츠를 변경하므로 Claude Code는 파일 액세스 전에 호출을 거부합니다. NotebookEdit은 `Read` 거부 규칙의 적용을 받지 않습니다. v2.1.228 이전에는 규칙이 Edit 도구만 차단했고, v2.1.208 이전에는 `Edit` 거부 규칙만 편집을 차단했습니다.4494[`Read` 거부 규칙](https://code.claude.com/docs/ko/permissions#read-and-edit)과 일치하는 경로에 대해 Edit 또는 Write 도구가 호출되었습니다. 해당 경로에 새 파일을 만드는 경우도 포함됩니다. 두 도구 모두 Claude가 다시 읽을 수 있어야 하는 내용을 변경하므로, Claude Code는 파일에 접근하기 전에 호출을 거부합니다. NotebookEdit는 `Read` 거부 규칙의 적용을 받지 않습니다. v2.1.228 이전에는 이 규칙이 Edit 도구만 차단했으며, v2.1.208 이전에는 `Edit` 거부 규칙만 편집을 차단했습니다.

4451 4495 

4452```text theme={null}4496```text theme={null}

4453File is covered by a Read deny rule in your permission settings and cannot be edited.4497File is covered by a Read deny rule in your permission settings and cannot be edited.

4454```4498```

4455 4499 

4456Claude Code가 Write 도구를 거부할 때 메시지는 대신 `and cannot be written`으로 끝납니다.4500Claude Code가 Write 도구를 거부하는 경우 메시지는 대신 `and cannot be written`으로 끝납니다.

4457 4501 

4458**할 일:**4502**조치 방법:**

4459 4503 

4460* Claude가 파일을 변경할 수 있어야 하면 `/permissions`의 `Read` 거부 규칙을 제거하거나 좁힙니다. 또는 [설정](https://code.claude.com/docs/ko/settings-reference.md#permission-settings)에서 제거합니다.4504* Claude가 파일을 변경할 수 있어야 한다면 `/permissions` 또는 [설정](https://code.claude.com/docs/ko/settings-reference.md#permission-settings)에서 `Read` 거부 규칙을 제거하거나 범위를 좁힙니다

4461* 파일이 그대로 유지되어야 하면 규칙을 유지하고 NotebookEdit 도구도 차단하기 위해 동일한 경로에 `Edit` 거부 규칙을 추가합니다.4505* 파일을 변경하지 않고 그대로 두어야 한다면 규칙을 유지하고, 같은 경로에 대한 `Edit` 거부 규칙을 추가하여 NotebookEdit 도구도 차단합니다

4462 4506 

4463### Path cannot contain null bytes4507### Path cannot contain null bytes

4464 4508 

4465파일 도구 호출의 경로 또는 패턴 인수에 null 바이트가 포함되어 있으며, 파일 시스템과 검색 도구는 이를 수락할 수 없습니다. Read, Write, Edit, NotebookEdit, Glob 및 Grep은 이를 확인하고 메시지는 도구와 인수의 이름을 지정합니다:4509파일 도구 호출의 경로 또는 패턴 인수에 null 바이트가 포함되어 있었습니다. 파일 시스템과 검색 도구는 null 바이트를 허용하지 않습니다. Read, Write, Edit, NotebookEdit, Glob, Grep이 이를 검사하며, 메시지에는 도구와 인수의 이름이 표시됩니다.

4466 4510 

4467```text theme={null}4511```text theme={null}

4468Read file_path cannot contain null bytes (\0). Remove the null byte and try again.4512Read file_path cannot contain null bytes (\0). Remove the null byte and try again.

4469```4513```

4470 4514 

4471도구 호출이 실패하고 Claude는 오류를 보며 턴이 계속됩니다.4515도구 호출은 실패하고, Claude가 오류를 확인하며, 턴은 계속됩니다.

4472 4516 

4473**할 일:**4517**조치 방법:**

4474 4518 

4475* 사용자 쪽에서는 아무것도 할 필요가 없습니다: 오류는 도구의 결과로 Claude에 반환되며 메시지 자체가 Claude에 null 바이트를 제거하고 다시 시도하도록 지시합니다.4519* 사용자가 할 일은 없습니다. 오류가 도구의 결과로 Claude에게 반환되며, 메시지 자체가 Claude에게 null 바이트를 제거하고 다시 시도하라고 안내합니다

4476 4520 

4477v2.1.281 이전에는 Read, Write, Edit 또는 NotebookEdit 경로의 null 바이트가 `Path contains null bytes`라는 이름의 오류로 전체 턴을 종료했으며 도구는 실행되지 않았습니다.4521v2.1.281 이전에는 Read, Write, Edit, NotebookEdit 경로에 null 바이트가 있으면 `Path contains null bytes`를 언급하는 오류와 함께 턴 전체가 종료되었으며, 도구는 실행되지 않았습니다.

4478 4522 

4479### File is too large to read as an image4523### File is too large to read as an image

4480 4524 

4481Claude가 [Read 도구](https://code.claude.com/docs/ko/tools-reference.md#read-tool-behavior)로 파일을 이미지로 읽으려고 했지만, 파일이 Read가 이미지 파일에서 로드하는 최대 크기인 128MB보다 큽니다. 아무것도 읽히지 않았으며 Claude는 이 오류를 도구 결과로 받습니다:4525Claude가 [Read 도구](https://code.claude.com/docs/ko/tools-reference.md#read-tool-behavior)로 파일을 이미지로 읽으려 했지만, 파일이 Read가 이미지 파일에서 불러올 수 있는 최대 크기인 128MB보다 큽니다. 아무것도 읽지 않았으며, Claude는 도구 결과로 이 오류를 받습니다.

4482 4526 

4483```text wrap theme={null}4527```text wrap theme={null}

4484File is too large to read as an image (the limit is 128MB): <path>. If it is an image, resize it or export a smaller copy, then read that.4528File is too large to read as an image (the limit is 128MB): <path>. If it is an image, resize it or export a smaller copy, then read that.

4485```4529```

4486 4530 

4487경로가 일반 파일이 아닌 파이프 또는 장치이면 Read는 128MB를 초과하는 데이터가 도착하는 즉시 중지하고 대신 이 오류를 반환합니다:4531경로가 일반 파일이 아니라 파이프나 장치인 경우, Read는 128MB를 초과하는 데이터가 도착하면 중단하고 대신 다음 오류를 반환합니다.

4488 4532 

4489```text wrap theme={null}4533```text wrap theme={null}

4490Cannot read this as an image: <path> is a pipe or a device, not a regular file, and it sent more than 128MB without ending.4534Cannot read this as an image: <path> is a pipe or a device, not a regular file, and it sent more than 128MB without ending.

4491```4535```

4492 4536 

4493**할 일:**4537**조치 방법:**

4494 4538 

4495* Claude가 `File is too large` 메시지에 따라 이미지 크기를 조정하거나 더 작은 사본을 읽었다면 아무것도 하지 않습니다.4539* Claude가 `File is too large` 메시지에 따라 이미지 크기를 조정하거나 더 작은 사본을 읽었다면 아무것도 하지 않아도 됩니다

4496* Claude가 오류에서 멈췄다면 예를 들어 더 낮은 해상도로 128MB 미만의 사본을 직접 내보내고 Claude가 해당 파일을 사용하도록 지정합니다.4540* Claude가 오류에서 멈췄다면 예를 들어 더 낮은 해상도로 128MB 미만의 사본을 직접 내보낸 다음 Claude에게 해당 파일을 지정합니다

4497* 경로가 파이프 또는 장치였다면 대신 일반 이미지 파일을 Claude에 지정합니다.4541* 경로가 파이프나 장치였다면 대신 일반 이미지 파일을 Claude에게 지정합니다

4498 4542 

4499### subagent\_type is required4543### subagent\_type is required

4500 4544 


4502subagent_type is required: the general-purpose agent is not available in this session. Available agents: ...4546subagent_type is required: the general-purpose agent is not available in this session. Available agents: ...

4503```4547```

4504 4548 

4505Claude가 `subagent_type` 없이 [Agent 도구](https://code.claude.com/docs/ko/tools-reference.md#agent-tool-behavior)를 호출했고, 이 세션에는 폴백할 [범용 서브에이전트](https://code.claude.com/docs/ko/sub-agents.md#built-in-subagents)가 없습니다. 이는 두 가지 설정에서 발생합니다:4549Claude가 `subagent_type` 없이 [Agent 도구](https://code.claude.com/docs/ko/tools-reference.md#agent-tool-behavior)를 호출했는데, 이 세션에는 대신 사용할 [범용 서브에이전트](https://code.claude.com/docs/ko/sub-agents.md#built-in-subagents)가 없습니다. 다음 두 가지 설정에서 이런 상황이 발생합니다.

4506 4550 

4507* [`CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1`](https://code.claude.com/docs/ko/env-vars)이 비대화형 모드에서 설정되어 모든 기본 제공 서브에이전트를 제거합니다.4551* 비대화형 모드에서 [`CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1`](https://code.claude.com/docs/ko/env-vars)이 설정되어 모든 내장 서브에이전트가 제거된 경우

4508* 세션의 메인 스레드 에이전트에 `general-purpose`를 제외하는 [`tools: Agent(...)` 허용 목록](https://code.claude.com/docs/ko/sub-agents#restrict-which-subagents-can-be-spawned)이 있습니다.4552* 세션의 메인 스레드 에이전트에 `general-purpose`를 제외하는 [`tools: Agent(...)` 허용 목록](https://code.claude.com/docs/ko/sub-agents#restrict-which-subagents-can-be-spawned)이 있는 경우

4509 4553 

4510**할 일:**4554**조치 방법:**

4511 4555 

4512* 보통 아무것도 하지 않습니다: 메시지는 세션이 가진 서브에이전트를 나열하므로 Claude는 그 중 하나로 다시 시도할 수 있습니다.4556* 대개는 아무것도 하지 않아도 됩니다. 메시지에 세션에 있는 서브에이전트가 나열되므로 Claude가 그중 하나로 재시도할 수 있습니다

4513* Claude가 계속 실패하면 `tools: Agent(...)` 허용 목록에 `general-purpose`를 추가하거나 `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS`를 설정 해제합니다.4557* Claude가 계속 실패하면 `tools: Agent(...)` 허용 목록에 `general-purpose`를 추가하거나 `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS`를 해제합니다

4514 4558 

4515v2.1.235 이전에는 동일한 호출이 `Agent type 'general-purpose' not found`로 실패했습니다.4559v2.1.235 이전에는 같은 호출이 `Agent type 'general-purpose' not found`로 실패했습니다.

4516 4560 

4517### 메모리 인덱스가 읽기 제한을 초과함4561### Memory index is over its read limit

4518 4562 

4519Claude가 [자동 메모리](https://code.claude.com/docs/ko/memory.md#auto-memory) 인덱스 `MEMORY.md`에 썼고 읽기 제한 중 하나를 초과했습니다: 200줄 또는 25KB입니다. 쓰기는 성공했지만 처음 200줄 또는 25KB(둘 중 먼저 오는 것)만 세션 시작 시 로드되므로 제한을 초과하는 모든 것은 인덱스를 읽을 때마다 삭제됩니다. v2.1.210 이전에는 제한을 초과하는 인덱스가 다음 로드 시 쓰기 시간 신호 없이 자동으로 잘렸습니다.4563Claude가 [자동 메모리](https://code.claude.com/docs/ko/memory.md#auto-memory) 인덱스인 `MEMORY.md`에 내용을 쓴 결과, 읽기 제한인 200줄 또는 25KB 중 하나를 초과했습니다. 쓰기는 성공했지만 세션 시작 시에는 처음 200줄 또는 25KB 중 먼저 도달하는 분량만 로드되므로, 인덱스를 읽을 때마다 제한을 넘는 내용은 모두 누락됩니다. v2.1.210 이전에는 제한을 초과한 인덱스가 쓰기 시점에 아무런 신호 없이 다음 로드 때 조용히 잘렸습니다.

4520 4564 

4521```text theme={null}4565```text theme={null}

4522Error: this write left the memory index at MEMORY.md at 214 lines, over its 200-line read limit. The write succeeded, but everything past the limit is silently dropped each time the index is loaded — entries at the end are already invisible to readers. Rewrite it to under 140 lines now: keep one line per entry, move detail into topic files, and merge or drop stale entries.4566Error: this write left the memory index at MEMORY.md at 214 lines, over its 200-line read limit. The write succeeded, but everything past the limit is silently dropped each time the index is loaded — entries at the end are already invisible to readers. Rewrite it to under 140 lines now: keep one line per entry, move detail into topic files, and merge or drop stale entries.

4523```4567```

4524 4568 

4525로드되는 콘텐츠만 제한에 포함됩니다. YAML frontmatter 및 블록 수준 HTML 주석은 인덱스가 로드되기 전에 제거되므로 측정에서 제외됩니다. v2.1.211 이전에는 Claude Code가 원본 파일을 측정했고 frontmatter 또는 주석이 로드된 콘텐츠가 맞아도 이 오류를 트리거할 수 있었습니다.4569로드되는 내용만 제한에 포함됩니다. YAML frontmatter와 블록 수준 HTML 주석은 인덱스를 로드하기 전에 제거되므로 측정에서 제외됩니다. v2.1.211 이전에는 Claude Code가 원본 파일을 측정했기 때문에, 로드되는 내용이 제한 안에 들어오더라도 frontmatter나 주석 때문에 이 오류가 발생할 수 있었습니다.

4526 4570 

4527Claude Code는 터미널에 배너로 인쇄하는 대신 쓰기 후 Claude에 오류를 전달하므로 트랜스크립트에서만 알아차릴 수 있습니다.4571Claude Code는 이 오류를 터미널에 배너로 출력하지 않고 쓰기 후 Claude에게 전달하므로, 트랜스크립트에서만 확인할 수 있을 수 있습니다.

4528 4572 

4529Claude의 쓰기가 파일을 제한에 가깝게 가져가지만 넘지 않으면 Claude Code는 이 오류 대신 인덱스를 압축하라는 더 온화한 알림을 반환합니다.4573Claude의 쓰기로 파일이 제한을 넘지는 않았지만 제한에 가까워지면, Claude Code는 이 오류 대신 인덱스를 압축하라는 더 가벼운 알림을 반환합니다.

4530 4574 

4531**할 일:**4575**조치 방법:**

4532 4576 

4533* Claude가 `MEMORY.md`를 다시 쓰도록 하거나 요청합니다: 항목당 한 줄을 유지하고, 세부 정보를 주제 파일로 이동하고, 오래된 항목을 병합하거나 삭제합니다.4577* Claude가 `MEMORY.md`를 다시 작성하도록 두거나 요청합니다. 항목당 한 줄을 유지하고, 세부 내용은 주제별 파일로 옮기며, 오래된 항목은 병합하거나 삭제합니다

4534* 인덱스를 직접 정리하려면 [메모리 감사 및 편집](https://code.claude.com/docs/ko/memory.md#audit-and-edit-your-memory)을 참조합니다.4578* 인덱스를 직접 정리하려면 [메모리 감사 및 편집](https://code.claude.com/docs/ko/memory.md#audit-and-edit-your-memory)을 참조하세요

4535 4579 

4536### pkill 패턴이 Claude Code 프로세스와 일치함4580### pkill pattern matches the Claude Code process

4537 4581 

4538Bash 도구 호출의 `pkill` 명령이 패턴(보통 `-f` 포함)을 사용했고 Claude Code 프로세스 자체와 일치하므로 Claude Code는 세션을 종료하는 대신 명령을 거부합니다. Claude Code는 `pkill`을 실행하기 전에 `pgrep`으로 패턴을 테스트하고 자신의 프로세스 ID가 결과에 있으면 거부합니다. 확인은 Linux에서만 실행됩니다. macOS에서는 `pkill`이 수정되지 않고 실행됩니다. v2.1.214 이전에는 명령이 실행되었고 일치하는 패턴이 Claude Code 세션을 턴 중간에 종료했습니다.4582Bash 도구 호출의 `pkill` 명령이 Claude Code 프로세스 자체와 일치하는 패턴(보통 `-f` 사용)을 사용했기 때문에, Claude Code는 명령이 세션을 종료하도록 두지 않고 명령을 거부합니다. Claude Code는 `pkill`을 실행하기 전에 `pgrep`으로 패턴을 테스트하고, 결과에 자신의 프로세스 ID가 있으면 거부합니다. 이 검사는 Linux에서만 실행되며, macOS에서는 `pkill`이 수정 없이 실행됩니다. v2.1.214 이전에는 명령이 실행되어, 일치하는 패턴이 턴 도중에 Claude Code 세션을 종료시켰습니다.

4539 4583 

4540```text theme={null}4584```text theme={null}

4541pkill: refusing to run — this pattern matches the Claude CLI process (PID 12345). Narrow the pattern, or target your own children with `pkill -P $$ ...`.4585pkill: refusing to run — this pattern matches the Claude CLI process (PID 12345). Narrow the pattern, or target your own children with `pkill -P $$ ...`.

4542```4586```

4543 4587 

4544거부는 터미널의 배너가 아닌 Bash 도구 결과에 나타나며 Claude는 보통 명령을 자동으로 조정합니다.4588거부 메시지는 터미널의 배너가 아니라 Bash 도구 결과에 표시되며, 대개 Claude가 스스로 명령을 조정합니다.

4545 4589 

4546**할 일:**4590**조치 방법:**

4547 4591 

4548* 패턴을 좁혀서 의도한 프로세스만 일치하도록 합니다. 예를 들어 짧은 부분 문자열이 아닌 대상 바이너리의 전체 경로입니다.4592* 의도한 프로세스와만 일치하도록 패턴의 범위를 좁힙니다. 예를 들어 짧은 부분 문자열 대신 대상 바이너리의 전체 경로를 사용합니다

4549* 현재 셸에서 시작한 프로세스를 중지하려면 패턴과 함께 `pkill -P $$`를 사용합니다. 이는 일치를 셸의 자식 프로세스로 제한합니다.4593* 현재 셸이 시작한 프로세스를 중지하려면 패턴과 함께 `pkill -P $$`를 사용합니다. 이렇게 하면 일치 대상이 셸의 자식 프로세스로 제한됩니다

4550 4594 

4551### 팀원의 받은편지함에 쓰기 실패4595### Failed to write to a teammate's inbox

4552 4596 

4553Claude Code가 `~/.claude/teams/{team-name}/inboxes/` 아래의 팀원 메일박스 파일에 메시지를 쓸 수 없어서 수신자가 아무것도 받지 못했습니다. 쓰기는 Claude Code가 파일을 만들거나 업데이트할 수 없을 때 실패합니다. 예를 들어 디스크가 가득 찼거나, 디렉터리를 쓸 수 없거나, 다른 에이전트가 받은편지함 잠금을 너무 오래 유지하는 경우입니다. v2.1.224 이전에는 Claude Code가 쓰기가 실패했을 때도 메시지를 보낸 것으로 보고했습니다.4597Claude Code가 `~/.claude/teams/{team-name}/inboxes/` 아래에 있는 팀원의 메일박스 파일에 메시지를 쓸 수 없어서, 수신자가 아무것도 받지 못했습니다. 디스크가 가득 찼거나, 디렉터리에 쓰기 권한이 없거나, 다른 에이전트가 받은편지함 잠금을 너무 오래 보유하는 등의 이유로 Claude Code가 파일을 생성하거나 업데이트할 수 없으면 쓰기가 실패합니다. v2.1.224 이전에는 쓰기가 실패한 경우에도 Claude Code가 메시지를 보낸 것으로 보고했습니다.

4554 4598 

4555오류는 터미널의 배너가 아닌 전송 에이전트의 도구 결과에 나타나며 Claude에 다시 시도하도록 지시합니다:4599오류는 터미널의 배너가 아니라 보내는 에이전트의 도구 결과에 표시되며, 오류 텍스트는 Claude에게 다시 시도하라고 안내합니다.

4556 4600 

4557```text theme={null}4601```text theme={null}

4558Failed to write to researcher's inbox — nothing was sent. Try again, or message the lead.4602Failed to write to researcher's inbox — nothing was sent. Try again, or message the lead.

4559```4603```

4560 4604 

4561구조화된 [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md) 프로토콜 메시지는 동일한 방식으로 실패하며 오류는 전달되지 않은 메시지의 이름을 지정합니다: Claude Code가 계획 승인, 계획 거부, 종료 요청 또는 종료 거부를 쓸 수 없을 때 오류는 `Failed to write the <message> to <name>'s inbox — nothing was sent`로 읽습니다. 해당 목록의 `plan approval`은 팀원의 계획을 승인하는 리드의 결정입니다. 팀원의 계획 제출은 별도의 `plan approval request` 메시지입니다. 해당 메시지와 두 개의 다른 프로토콜 메시지는 자신의 메시지 텍스트와 결과를 전달합니다:4605구조화된 [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md) 프로토콜 메시지도 같은 방식으로 실패하며, 오류에는 전달되지 않은 메시지가 표시됩니다. Claude Code가 플랜 승인, 플랜 거부, 종료 요청 또는 종료 거부를 쓸 수 없으면 오류는 `Failed to write the <message> to <name>'s inbox — nothing was sent`로 표시됩니다. 이 목록의 `plan approval`은 팀원의 플랜을 승인하는 리더의 결정이며, 팀원의 플랜 제출은 별도의 `plan approval request` 메시지입니다. 이 메시지와 다른 두 프로토콜 메시지는 각각 고유한 메시지 텍스트와 결과를 가집니다.

4562 4606 

4563* `Failed to write the plan approval request to the lead's inbox — plan not submitted; try again`: 팀원의 계획이 리드에 도달하지 않았고 팀원은 재제출이 성공할 때까지 플랜 모드에 남아 있습니다.4607* `Failed to write the plan approval request to the lead's inbox — plan not submitted; try again`: 팀원의 플랜이 리더에게 전달되지 않았으며, 재제출이 성공할 때까지 팀원은 플랜 모드에 머뭅니다

4564* `The permission request could not be delivered to the team lead (mailbox write failed)`: 팀원의 권한 요청이 리드에 도달하지 않았으므로 아무도 도구 호출을 승인하지 않았습니다.4608* `The permission request could not be delivered to the team lead (mailbox write failed)`: 팀원의 권한 요청이 리더에게 전달되지 않았으므로, 아무도 도구 호출을 승인하지 않았습니다

4565* `The confirmation could not be written to team-lead's inbox.`: 종료 승인 자체가 적용되었고 팀원이 종료됩니다. 리드에 대한 확인만 누락되었습니다.4609* `The confirmation could not be written to team-lead's inbox.`: 종료 승인 자체는 적용되어 팀원은 종료되며, 리더에게 보내는 확인 메시지만 누락됩니다

4566 4610 

4567리드 세션에서 `@name`을 입력한 후 메시지를 입력하여 팀원에게 직접 메시지를 보낼 때 동일한 실패가 알림으로 나타납니다: `Couldn't write to @name's inbox — message not sent. Try again.` Claude Code는 텍스트를 프롬프트 상자에 유지하므로 다시 보낼 수 있습니다.4611리더 세션에서 `@name` 다음에 메시지를 입력하여 사용자가 직접 팀원에게 메시지를 보낼 때는, 같은 실패가 `Couldn't write to @name's inbox — message not sent. Try again.` 알림으로 표시되며, Claude Code는 다시 보낼 수 있도록 입력한 텍스트를 프롬프트 상자에 유지합니다.

4568 4612 

4569**할 일:**4613**조치 방법:**

4570 4614 

4571* 발신자에게 메시지를 다시 보내도록 요청합니다. 받은편지함 잠금에 대한 경합은 일시적이며 재시도 시 해결됩니다.4615* 보낸 쪽에 메시지를 다시 보내도록 요청합니다. 받은편지함 잠금 경합은 일시적이며 재시도하면 해소됩니다

4572* 여유 디스크 공간을 확인하고 `~/.claude/teams` 및 그 아래의 파일이 사용자가 쓸 수 있는지 확인합니다.4616* 디스크 여유 공간을 확인하고, `~/.claude/teams`와 그 아래 파일에 사용자 계정으로 쓰기 권한이 있는지 확인합니다

4573 4617 

4574### 팀원의 에이전트 정의가 복원되지 않음4618### Teammate's agent definition was not restored

4575 4619 

4576Claude가 중지된 [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md) 팀원에게 메시지를 보냈고, Claude Code가 해당 팀원을 생성할 때 사용한 [서브에이전트 정의](https://code.claude.com/docs/ko/agent-teams.md#use-subagent-definitions-for-teammates)를 다시 적용하지 않고 복구했습니다. 알림은 전송 에이전트의 도구 결과에서 재개 보고서 뒤에 나타나며 이유를 지정합니다. 정의 파일이 저장된 신뢰가 없는 폴더에서 나온 경우 다음과 같이 표시됩니다:4620Claude가 중지된 [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md) 팀원에게 메시지를 보냈고, Claude Code는 팀원을 생성할 때 사용한 [서브에이전트 정의](https://code.claude.com/docs/ko/agent-teams.md#use-subagent-definitions-for-teammates)를 다시 적용하지 않고 팀원을 복원했습니다. 이 알림은 보내는 에이전트의 도구 결과에서 재개 보고 뒤에 나타나며 이유를 알려 줍니다. 정의 파일이 신뢰가 저장되지 않은 폴더에서 온 경우에는 다음과 같이 표시됩니다.

4577 4621 

4578```text wrap theme={null}4622```text wrap theme={null}

4579Its agent definition was not restored: the folder its definition file came from is not trusted (source: projectSettings), so the teammate is running with the team-essential tools and no custom instructions. To restore it, the user needs to run Claude Code in that folder once and accept the trust dialog (the --debug log names the folder); do not change trust settings on the user's behalf.4623Its agent definition was not restored: the folder its definition file came from is not trusted (source: projectSettings), so the teammate is running with the team-essential tools and no custom instructions. To restore it, the user needs to run Claude Code in that folder once and accept the trust dialog (the --debug log names the folder); do not change trust settings on the user's behalf.

4580```4624```

4581 4625 

4582확인은 프로젝트의 `.claude/agents/` 디렉터리 또는 `--add-dir` 디렉터리의 정의에 적용되며 부모 폴더에 대한 신뢰 대화를 수락하는 것은 충족하지 않습니다.4626이 검사는 프로젝트 또는 `--add-dir` 디렉터리의 `.claude/agents/` 디렉터리에 있는 정의에 적용되며, 상위 폴더의 신뢰 대화 상자를 수락하는 것으로는 충족되지 않습니다.

4583 4627 

4584**할 일:**4628**조치 방법:**

4585 4629 

4586* [디버그 로그](https://code.claude.com/docs/ko/debug-your-config.md)가 지정하는 폴더에서 `claude`를 실행하고 신뢰 대화를 수락합니다. 정의는 Claude Code가 팀원을 다시 복구할 때 다시 적용됩니다. 리드 세션을 다시 시작할 필요가 없습니다.4630* [디버그 로그](https://code.claude.com/docs/ko/debug-your-config.md)에 표시된 폴더에서 `claude`를 실행하고 신뢰 대화 상자를 수락합니다. Claude Code가 다음에 팀원을 복원할 때 정의가 다시 적용되며, 리더 세션을 다시 시작할 필요는 없습니다

4587* 또는 `~/.claude.json`에서 `hasTrustDialogAccepted` 항목을 `true`로 설정합니다. 디버그 로그가 인쇄하는 정확한 `projects["<path>"]` 키를 사용합니다.4631* 또는 디버그 로그에 출력된 정확한 `projects["<path>"]` 키를 사용하여 `~/.claude.json`에서 `hasTrustDialogAccepted` 항목을 `true`로 설정합니다

4588 4632 

4589### Only a teammate can approve a shutdown request4633### Only a teammate can approve a shutdown request

4590 4634 

4591Claude Code는 [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md) 종료 승인을 보낸 세션이 팀원으로 실행 중이 아니므로 해당 승인을 거부했습니다. 아무것도 전송되지 않았고 아무것도 종료되지 않았습니다. 거부는 전송 세션의 도구 결과에 나타납니다:4635보낸 세션이 팀원으로 실행 중이 아니기 때문에 Claude Code가 [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md) 종료 승인을 거부했습니다. 아무것도 전송되지 않았고 아무것도 종료되지 않았습니다. 거부 메시지는 보낸 세션의 도구 결과에 표시됩니다.

4592 4636 

4593```text wrap theme={null}4637```text wrap theme={null}

4594Only a teammate can approve a shutdown request, and this session is not running as one. Nothing was sent. To shut down a teammate, send that teammate a shutdown_request message. The teammate is the one that approves it.4638Only a teammate can approve a shutdown request, and this session is not running as one. Nothing was sent. To shut down a teammate, send that teammate a shutdown_request message. The teammate is the one that approves it.

4595```4639```

4596 4640 

4597**할 일:**4641**조치 방법:**

4598 4642 

4599* 리드 세션에서 거부가 나타났다면 먼저 팀원이 그 사이에 종료되었는지 확인합니다. 거부는 대신 `shutdown_request`를 보내라는 지시와 함께 Claude에 반환되며 턴이 계속됩니다. 대화형 리드 세션에서는 팀원이 종료 요청을 승인하면 `<name> has shut down.`이 표시됩니다.4643* 리더 세션에서 거부가 나타났다면 먼저 팀원이 그사이에 종료되었는지 확인합니다. 거부 메시지는 대신 `shutdown_request`를 보내라는 지시와 함께 Claude에게 돌아가며, 턴은 계속됩니다. 대화형 리더 세션에서는 팀원이 종료 요청을 승인하면 `<name> has shut down.`이 표시됩니다.

4600* 팀원이 아직 실행 중이면 리드의 프롬프트에서 팀원을 종료하도록 요청합니다. 예를 들어 `Ask the researcher teammate to shut down`입니다. [팀원 종료](https://code.claude.com/docs/ko/agent-teams.md#shut-down-teammates)를 참조합니다.4644* 팀원이 아직 실행 중이라면 리더의 프롬프트에서 팀원을 종료하도록 요청합니다. 예를 들어 `Ask the researcher teammate to shut down`을 입력합니다. [팀원 종료](https://code.claude.com/docs/ko/agent-teams.md#shut-down-teammates)를 참조하세요.

4601* `claude --resume`으로 직접 재개한 이전 팀원이 이 거부를 받았다면 아무것도 전송되지 않았습니다. 해당 세션을 종료하려면 해당 세션의 프롬프트에서 `/exit`를 실행합니다.4645* `claude --resume`으로 직접 재개한 이전 팀원이 이 거부를 받았다면 아무것도 전송되지 않았습니다. 해당 세션을 종료하려면 프롬프트에서 `/exit`를 실행합니다.

4602 4646 

4603### Message too large for cross-session delivery4647### Message too large for cross-session delivery

4604 4648 

4605Claude의 [교차 세션 메시지](https://code.claude.com/docs/ko/cross-session-messaging.md)가 이 머신의 다른 세션으로 너무 길어서 보낼 수 없었습니다. Claude Code가 거부했고 수신 세션이 아무것도 받지 못했습니다. 거부는 터미널의 배너가 아닌 전송 세션의 도구 결과에 나타납니다. 두 크기와 메시지를 맞추는 방법을 지정합니다:4649이 머신의 다른 세션으로 보낸 Claude의 [세션 간 메시지](https://code.claude.com/docs/ko/cross-session-messaging.md)가 너무 길어서 보낼 수 없었습니다. Claude Code가 이를 거부했으며, 받는 세션은 아무것도 받지 못했습니다. 거부 메시지는 터미널의 배너가 아니라 보낸 세션의 도구 결과에 표시됩니다. 메시지에는 두 크기와 메시지를 제한 안에 맞추는 방법이 표시됩니다.

4606 4650 

4607```text wrap theme={null}4651```text wrap theme={null}

4608Failed to send to api-worker: Message too large for cross-session delivery: the serialized message is 1,203,844 characters and the limit is 1,048,576. Shorten the message text — put bulk content in a file the recipient can read rather than in the message — or split it into smaller messages.4652Failed to send to api-worker: Message too large for cross-session delivery: the serialized message is 1,203,844 characters and the limit is 1,048,576. Shorten the message text — put bulk content in a file the recipient can read rather than in the message — or split it into smaller messages.

4609```4653```

4610 4654 

4611동일한 텍스트를 다시 보내면 동일한 방식으로 실패합니다.4655같은 텍스트를 다시 보내도 같은 방식으로 실패합니다.

4612 4656 

4613**할 일:**4657**조치 방법:**

4614 4658 

4615* Claude에 메시지를 요약하거나 대량 콘텐츠를 파일에 넣고 파일의 경로를 보내도록 요청합니다.4659* Claude에게 메시지를 요약하거나, 대량의 내용을 파일에 넣고 파일 경로를 보내도록 요청합니다

4616* Claude에 콘텐츠를 여러 개의 더 짧은 메시지로 나누도록 요청합니다.4660* Claude에게 내용을 여러 개의 짧은 메시지로 나누도록 요청합니다

4617 4661 

4618v2.1.235 이전에는 Claude Code가 과도한 크기의 메시지를 보낸 것으로 보고했습니다. 수신 세션이 읽지 않고 삭제했습니다.4662v2.1.235 이전에는 Claude Code가 크기 초과 메시지를 보낸 것으로 보고했습니다. 받는 세션은 이를 읽지 않고 버렸습니다.

4619 4663 

4620### Too many messages to this session just now4664### Too many messages to this session just now

4621 4665 

4622Claude가 이 머신의 한 세션으로 빠른 [교차 세션 메시지](https://code.claude.com/docs/ko/cross-session-messaging.md) 버스트를 보냈고 버스트가 해당 세션의 받은편지함이 수락하는 것에 도달했습니다. Claude Code가 다음 전송을 거부했고 수신 세션이 아무것도 받지 못했습니다. 거부는 터미널의 배너가 아닌 전송 세션의 도구 결과에 나타납니다:4666Claude가 이 머신의 세션 중 하나에 [세션 간 메시지](https://code.claude.com/docs/ko/cross-session-messaging.md)를 짧은 시간에 연달아 보냈고, 그 양이 해당 세션의 받은편지함이 수용하는 한도에 도달했습니다. Claude Code는 다음 전송을 거부했으며, 받는 세션은 그 전송에서 아무것도 받지 못했습니다. 거부 메시지는 터미널의 배너가 아니라 보낸 세션의 도구 결과에 표시됩니다.

4623 4667 

4624```text wrap theme={null}4668```text wrap theme={null}

4625Failed to send to api-worker: Too many messages to this session just now: 30 were sent recently and more would be dropped by its rate limit, so this one was not sent. Batch what remains into one message, or wait a little before sending more.4669Failed to send to api-worker: Too many messages to this session just now: 30 were sent recently and more would be dropped by its rate limit, so this one was not sent. Batch what remains into one message, or wait a little before sending more.

4626```4670```

4627 4671 

4628**할 일:**4672**조치 방법:**

4629 4673 

4630* 보통 아무것도 하지 않습니다: Claude가 남은 콘텐츠를 한 메시지로 일괄 처리하거나 더 보내기 전에 기다립니다.4674* 대개는 아무것도 하지 않아도 됩니다. Claude가 남은 내용을 하나의 메시지로 묶거나, 더 보내기 전에 기다립니다

4631* 버스트를 직접 프롬프트했으면 Claude에 남은 것을 단일 메시지로 결합하도록 요청합니다.4675* 사용자가 직접 연속 전송을 유도했다면 Claude에게 남은 내용을 하나의 메시지로 합치도록 요청합니다

4632 4676 

4633v2.1.236 이전에는 Claude Code가 이러한 전송을 보낸 것으로 보고했습니다. 수신 세션이 읽지 않고 삭제했습니다.4677v2.1.236 이전에는 Claude Code가 이러한 전송을 보낸 것으로 보고했습니다. 받는 세션은 이를 읽지 않고 버렸습니다.

4634 4678 

4635### Cross-session message was dropped at the recipient session's inbox4679### Cross-session message was dropped at the recipient session's inbox

4636 4680 

4637Claude가 [교차 세션 메시지](https://code.claude.com/docs/ko/cross-session-messaging.md)를 이 머신의 다른 세션으로 보냈고 해당 세션의 받은편지함이 Claude가 해당 세션에서 읽기 전에 메시지를 삭제했습니다. 줄은 수신자의 주소를 지정하고, 수신자가 이유를 제공했을 때 대시 뒤에 이유를 추가합니다:4681Claude가 이 머신의 다른 세션에 [세션 간 메시지](https://code.claude.com/docs/ko/cross-session-messaging.md)를 보냈고, 해당 세션의 Claude가 읽기 전에 그 세션의 받은편지함이 메시지를 버렸습니다. 이 줄에는 수신자가 표시되며, 수신자가 이유를 제공한 경우 대시 뒤에 이유가 추가됩니다.

4638 4682 

4639```text wrap theme={null}4683```text wrap theme={null}

4640Cross-session message was dropped at the recipient session's inbox (recipient: uds:/tmp/cc-socks/13605.sock) and not delivered — its queue of undelivered peer messages was full. Claude was told not to resend right away.4684Cross-session message was dropped at the recipient session's inbox (recipient: uds:/tmp/cc-socks/13605.sock) and not delivered — its queue of undelivered peer messages was full. Claude was told not to resend right away.

4641```4685```

4642 4686 

4643한 줄이 여러 삭제된 메시지를 포함할 수 있습니다. 그러면 복수형으로 시작합니다. 예를 들어 `Cross-session messages (12) were dropped`입니다. 주소가 어느 세션에 속하는지 찾으려면 각 세션에서 `/status`가 표시하는 [`Peer address` 행](https://code.claude.com/docs/ko/cross-session-messaging#the-sessions-inbox-socket)과 비교합니다.4687한 줄이 여러 개의 버려진 메시지를 나타낼 수 있습니다. 이 경우 `Cross-session messages (12) were dropped`처럼 복수형으로 시작합니다. 주소가 어느 세션에 속하는지 확인하려면 각 세션에서 `/status`가 보여 주는 [`Peer address` 행](https://code.claude.com/docs/ko/cross-session-messaging#the-sessions-inbox-socket)과 비교합니다.

4644 4688 

4645대시 뒤에 줄은 다음 이유 중 하나 이상을 제공합니다:4689대시 뒤에는 다음 이유 중 하나 이상이 표시됩니다.

4646 4690 

4647* `its queue of undelivered peer messages was full`: 수신자가 이미 다른 세션에서 받은편지함이 허용하는 만큼 많은 전달되지 않은 메시지를 보유하고 있습니다.4691* `its queue of undelivered peer messages was full`: 수신자가 다른 세션에서 온 미전달 메시지를 이미 대기열이 허용하는 최대 개수만큼 보유하고 있었습니다

4648* `you sent faster than that session accepts`: 전송 세션의 메시지가 수신자가 한 발신자로부터 수락하는 것보다 빠르게 도착했습니다.4692* `you sent faster than that session accepts`: 보낸 세션의 메시지가 수신자가 한 발신자로부터 수용하는 것보다 빠르게 도착했습니다

4649* `it repeated your previous message`: 메시지가 전송 세션이 이 수신자로 최근에 보낸 메시지와 동일했습니다.4693* `it repeated your previous message`: 보낸 세션이 직전에 이 수신자에게 보낸 메시지와 동일한 메시지였습니다

4650* `a relay loop between sessions was cut`: 메시지가 세션이 서로 메시지를 보내는 체인을 계속했고 체인이 수신자를 너무 많이 통과했거나 너무 길어졌습니다.4694* `a relay loop between sessions was cut`: 세션들이 서로 메시지를 주고받는 체인을 이어 가는 메시지였으며, 체인이 수신자를 너무 많이 거쳤거나 너무 길어졌습니다

4651 4695 

4652**할 일:**4696**조치 방법:**

4653 4697 

4654* 수신자가 삭제된 메시지를 본 적이 없다고 가정합니다. Claude Code는 동일하게 Claude에 알리고, 곧바로 다시 보내는 대신 여전히 중요한 것을 나중에 한 메시지에 포함하도록 지시합니다.4698* 수신자가 버려진 메시지를 전혀 보지 못했다고 가정합니다. Claude Code도 Claude에게 같은 내용을 알리며, 즉시 다시 보내는 대신 여전히 중요한 내용을 나중에 하나의 메시지에 포함하도록 안내합니다

4655* 세션이 서로 자주 업데이트를 보내면 Claude에 더 적은 수의 더 큰 메시지를 보내도록 요청합니다. 예를 들어 세션이 작업을 완료할 때 한 보고서입니다.4699* 세션들이 서로 자주 업데이트를 보낸다면, Claude에게 세션이 작업을 마쳤을 때 보고서 하나를 보내는 식으로 더 적고 더 큰 메시지를 보내도록 요청합니다

4656* `a relay loop between sessions was cut`의 경우 세션 중 하나에 직접 다음 지시를 입력합니다. Claude가 사용자의 프롬프트에 응답하여 보내는 메시지는 새 체인을 시작합니다.4700* `a relay loop between sessions was cut`의 경우 세션 중 하나에 다음 지시를 직접 입력합니다. 사용자의 프롬프트에 응답하여 Claude가 보내는 메시지는 새 체인을 시작합니다

4657 4701 

4658v2.1.238 이전에는 수신자의 받은편지함이 메시지를 삭제했을 때 전송 세션이 보고를 받지 못했습니다.4702v2.1.238 이전에는 수신자의 받은편지함이 메시지를 버려도 보낸 세션에 아무런 보고가 없었습니다.

4659 4703 

4660### 교차 세션 메시지 전송 거부4704### Refusing to send a cross-session message

4661 4705 

4662Claude Code가 이 머신의 다른 세션으로 [교차 세션 메시지](https://code.claude.com/docs/ko/cross-session-messaging.md)를 쓰기 전에 대상 세션의 받은편지함 소켓이 메시지가 주소 지정된 엔드포인트인지 확인합니다. 확인이 실패하면 Claude Code가 전송 세션에서 전송을 거부하고 대상 세션이 아무것도 받지 못합니다. Claude가 보내는 메시지의 경우 거부는 전송 세션의 도구 결과에 나타납니다:4706Claude Code는 이 머신의 다른 세션에 [세션 간 메시지](https://code.claude.com/docs/ko/cross-session-messaging.md)를 쓰기 전에, 대상 세션의 받은편지함 소켓이 메시지가 지정된 엔드포인트인지 확인합니다. 검사가 실패하면 Claude Code는 보내는 세션에서 전송을 거부하며, 대상 세션은 아무것도 받지 못합니다. Claude가 보내는 메시지의 경우 거부 메시지는 보낸 세션의 도구 결과에 표시됩니다.

4663 4707 

4664```text theme={null}4708```text theme={null}

4665Failed to send to api-worker: Refusing to send: reply target is a symlink4709Failed to send to api-worker: Refusing to send: reply target is a symlink

4666```4710```

4667 4711 

4668`Refusing to send:` 뒤의 텍스트는 실패한 확인의 이름을 지정합니다:4712`Refusing to send:` 뒤의 텍스트는 실패한 검사를 나타냅니다.

4669 4713 

4670* `reply target is a symlink`: 심볼릭 링크가 대상 세션의 소켓 경로에 있습니다. Claude Code는 링크가 대상 세션이 만들지 않은 엔드포인트로 메시지를 리디렉션할 수 있으므로 이를 통해 전달하지 않습니다.4714* `reply target is a symlink`: 대상 세션의 소켓 경로에 심볼릭 링크가 있습니다. 그 위치의 링크는 대상 세션이 만들지 않은 엔드포인트로 메시지를 리디렉션할 수 있으므로, Claude Code는 이를 통해 전달하지 않습니다.

4671* `cannot vet reply target`: Claude Code가 대상 경로를 전혀 검사할 수 없습니다. 예를 들어 권한 오류로 읽기가 실패한 경우입니다.4715* `cannot vet reply target`: 예를 들어 권한 오류로 읽기가 실패하는 등의 이유로 Claude Code가 대상 경로를 전혀 검사할 수 없었습니다.

4672 4716 

4673**할 일:**4717**조치 방법:**

4674 4718 

4675* 보통 아무것도 하지 않습니다: 확인은 메시지가 주소 지정된 세션 이외의 엔드포인트에 도달하는 것을 방지하며 아무것도 보내지지 않았습니다.4719* 대개는 아무것도 하지 않아도 됩니다. 이 검사는 메시지가 지정된 세션 이외의 엔드포인트에 도달하지 않도록 막아 주며, 아무것도 전송되지 않았습니다

4676* 한 세션에 대해 `reply target is a symlink`가 반복되면 해당 세션의 소켓 경로에 링크를 만든 것을 확인합니다. 이는 `/status` 아래의 `Peer address`에 표시됩니다.4720* 한 세션에서 `reply target is a symlink`가 반복되면, 해당 세션의 소켓 경로(`/status`의 `Peer address`에 표시됨)에 무엇이 링크를 만들었는지 확인합니다

4677 4721 

4678### 경로 읽기, 쓰기 또는 검색 거부4722### Refusing to read, write, or search a path

4679 4723 

4680Claude Code는 파일 경로의 [권한 규칙](https://code.claude.com/docs/ko/permissions.md#read-and-edit)을 확인한 다음 도구가 파일을 열거나 검색을 시작할 때 해석을 다시 확인합니다. 경로가 여전히 확인이 승인한 위치로 이어지는지 확인할 수 없으면 Claude Code는 따르는 대신 작업을 거부합니다. 거부는 도구 결과에 나타납니다:4724Claude Code는 파일 경로의 [권한 규칙](https://code.claude.com/docs/ko/permissions.md#read-and-edit)을 확인한 다음, 도구가 파일을 열거나 검색을 시작할 때 그 경로 해석을 다시 확인합니다. 경로가 여전히 검사에서 승인된 위치로 연결되는지 확인할 수 없으면, Claude Code는 경로를 따라가지 않고 작업을 거부합니다. 거부 메시지는 도구 결과에 표시됩니다.

4681 4725 

4682```text wrap theme={null}4726```text wrap theme={null}

4683Refusing to read /path/to/file: its symlink resolution changed after permission was checked (a link on the way now leads somewhere the check did not see). If a link in the working directory is being rewritten concurrently, stop that and retry.4727Refusing to read /path/to/file: its symlink resolution changed after permission was checked (a link on the way now leads somewhere the check did not see). If a link in the working directory is being rewritten concurrently, stop that and retry.

4684```4728```

4685 4729 

4686각 거부는 이유를 지정합니다:4730각 거부 메시지에는 이유가 표시됩니다.

4687 4731 

4688* `its symlink resolution changed after permission was checked`: 경로를 따라 또는 Grep 또는 Glob 검색 루트에서 심볼릭 링크가 권한 확인과 작업 사이에 대체되었습니다. 읽기 거부에서 괄호 안의 구문은 어느 비교가 실패했는지 지정합니다.4732* `its symlink resolution changed after permission was checked`: 권한 검사와 작업 사이에 경로상의 심볼릭 링크 또는 Grep이나 Glob 검색 루트의 심볼릭 링크가 교체되었습니다. 읽기 거부의 경우 괄호 안의 문구가 어떤 비교가 실패했는지 나타냅니다.

4689* `its parent-directory symlink resolution changed after permission was checked`: 쓰기 경로가 통과하는 디렉터리가 더 이상 승인된 위치로 해석되지 않습니다.4733* `its parent-directory symlink resolution changed after permission was checked`: 쓰기 경로가 거치는 디렉터리가 더 이상 승인된 위치로 해석되지 않습니다

4690* `where it leads on disk could not be determined (a link on the way could not be examined, or the links do not resolve)`: Claude Code가 경로를 디스크의 최종 위치로 따를 수 없습니다. 예를 들어 경로의 심볼릭 링크가 루프를 형성하는 경우입니다.4734* `where it leads on disk could not be determined (a link on the way could not be examined, or the links do not resolve)`: 예를 들어 경로상의 심볼릭 링크가 루프를 형성하는 등의 이유로 Claude Code가 경로를 디스크상의 최종 위치까지 따라갈 수 없었습니다

4691* `it is a symbolic link. Write to the link's target path instead`: 심볼릭 링크가 요청된 쓰기 위치 자체에 있습니다. 예를 들어 `CLAUDE.md`가 `AGENTS.md`로의 심볼릭 링크입니다. 메시지는 Claude를 링크의 대상으로 지시합니다.4735* `it is a symbolic link. Write to the link's target path instead`: 요청된 쓰기 위치 자체에 심볼릭 링크가 있습니다. 예를 들어 `AGENTS.md`에 대한 심볼릭 링크인 `CLAUDE.md`가 이에 해당하며, 메시지는 Claude에게 링크의 대상을 사용하도록 안내합니다

4692* `Refusing to write through symlink: <path>. Resolve the symlink and pass the real target path explicitly.`: 다른 작성자가 파일을 열 때 같은 조건이 포착됩니다. 예를 들어 심볼릭 링크된 `.mcp.json`에 대한 쓰기입니다.4736* `Refusing to write through symlink: <path>. Resolve the symlink and pass the real target path explicitly.`: 심볼릭 링크된 `.mcp.json`에 대한 쓰기처럼, 다른 쓰기 주체가 파일을 열 때 같은 조건이 감지된 경우입니다

4693* `Refusing to write into symlinked directory: <path>`: 파일을 보유한 디렉터리 자체가 심볼릭 링크입니다. 예를 들어 프로젝트의 `.claude/` 디렉터리가 다른 위치로 연결되어 있습니다.4737* `Refusing to write into symlinked directory: <path>`: 파일을 담고 있는 디렉터리 자체가 심볼릭 링크입니다. 예를 들어 프로젝트의 `.claude/` 디렉터리가 다른 위치로 링크된 경우입니다

4694* `a path one of its Read deny rules is written through changed while the search was being prepared. Retry.`: 검색에 대한 `Read` 거부 규칙이 심볼릭 링크를 통과하는 경로의 이름을 지정했고 Claude Code가 검색을 준비하는 동안 해당 링크가 변경되었습니다.4738* `a path one of its Read deny rules is written through changed while the search was being prepared. Retry.`: 검색에 적용되는 `Read` 거부 규칙이 심볼릭 링크를 거치는 경로를 지정하며, Claude Code가 검색을 준비하는 동안 그 링크가 변경되었습니다

4695* `it could not be opened (EACCES) — it is unreadable, or is being replaced concurrently.`: 검색 루트가 존재하지만 열 수 없습니다. 괄호 안의 코드는 운영 체제 오류입니다.4739* `it could not be opened (EACCES) — it is unreadable, or is being replaced concurrently.`: 검색 루트는 존재하지만 열 수 없었습니다. 괄호 안의 코드는 운영 체제 오류입니다

4696* `its permission check expired before it ran (too many concurrent file operations). Retry.`: Claude Code가 많은 동시 파일 작업 중에 도구가 사용하기 전에 승인 기록을 제거했습니다. 재시도하면 새로운 권한 확인을 실행합니다.4740* `its permission check expired before it ran (too many concurrent file operations). Retry.`: 동시 파일 작업이 많아 도구가 사용하기 전에 Claude Code가 승인 기록을 제거했습니다. 재시도하면 새로운 권한 검사가 실행됩니다

4697* `ripgrep was found only by name on PATH, and a search outside the working directory cannot apply your Read deny rules in that configuration`: Claude Code가 `rg` 바이너리를 절대 경로로 해석할 수 없어서, 거부 규칙이 적용되지 않는 검색을 실행하는 대신 작업 디렉터리 외부의 검색을 거부합니다.4741* `ripgrep was found only by name on PATH, and a search outside the working directory cannot apply your Read deny rules in that configuration`: Claude Code가 `rg` 바이너리를 절대 경로로 해석할 수 없어서, 거부 규칙이 적용되지 않는 검색을 실행하는 대신 작업 디렉터리 외부의 검색을 거부합니다

4698 4742 

4699**할 일:**4743**조치 방법:**

4700 4744 

4701* 보통 아무것도 하지 않습니다: 거부는 Claude에 도구 결과로 도달하고 거부된 작업은 실행되지 않습니다.4745* 대개는 아무것도 하지 않아도 됩니다. 거부 메시지는 도구 결과로 Claude에게 전달되며, 거부된 작업은 실행되지 않습니다

4702* 한 경로에서 심볼릭 링크 거부가 반복되면 빌드 도구 또는 파일 감시자와 같이 링크를 계속 다시 쓰는 것을 찾거나 Claude에 링크된 경로 대신 파일의 해석된 경로를 사용하도록 요청합니다.4746* 한 경로에서 심볼릭 링크 거부가 반복되면, 빌드 도구나 파일 감시자처럼 그 위치의 링크를 계속 다시 쓰는 것이 무엇인지 찾거나, Claude에게 링크된 경로 대신 파일의 해석된 경로를 사용하도록 요청합니다

4703* 이 거부가 Claude Code가 AppContainer 또는 제한된 토큰 샌드박스 내의 Windows에서 실행될 때 모든 파일에 대해 나타나면 v2.1.265 이상으로 업그레이드합니다.4747* Windows에서 AppContainer 또는 제한된 토큰 샌드박스 안에서 Claude Code를 실행할 때 모든 파일에 대해 이 거부가 나타나면 v2.1.265 이상으로 업그레이드합니다

4704* 읽기 거부가 macOS에서 스크린샷을 프롬프트로 드래그한 것처럼 아무것도 다시 쓰지 않는 파일에 대해 나타나면 v2.1.273 이상으로 업그레이드합니다.4748* macOS에서 프롬프트로 끌어다 놓은 스크린샷처럼 아무것도 다시 쓰고 있지 않은 파일에 대해 읽기 거부가 나타나면 v2.1.273 이상으로 업그레이드합니다

4705* ripgrep 거부의 경우 패키지 관리자로 ripgrep을 설치하여 `rg`가 `PATH`의 절대 경로로 해석되도록 하거나 검색을 작업 디렉터리 아래로 유지합니다.4749* ripgrep 거부의 경우 패키지 관리자로 ripgrep을 설치하여 `rg`가 `PATH`에서 절대 경로로 해석되도록 하거나, 검색을 작업 디렉터리 내로 유지합니다

4706 4750 

4707v2.1.251 이전에는 Claude Code가 파일 쓰기에 대해서만 경로의 해석을 다시 확인했으므로 권한 확인 후 대체된 링크가 메시지 없이 읽기 또는 검색을 다른 위치로 리디렉션할 수 있었습니다. 이러한 거부 중에서 부모 디렉터리, 심볼릭 링크를 통한, 그리고 심볼릭 링크된 디렉터리 쓰기 거부만 이전 버전에 나타납니다.4751v2.1.251 이전에는 Claude Code가 파일 쓰기에 대해서만 경로 해석을 다시 확인했기 때문에, 권한 검사 후 교체된 링크가 아무런 메시지 없이 읽기나 검색을 다른 위치로 리디렉션할 수 있었습니다. 이 중 상위 디렉터리, 심볼릭 링크 경유, 심볼릭 링크된 디렉터리에 대한 쓰기 거부만 이전 버전에서도 나타납니다.

4708 4752 

4709v2.1.280 이전에는 `where it leads on disk could not be determined` 거부가 나타나지 않았습니다.4753v2.1.280 이전에는 `where it leads on disk could not be determined` 거부가 나타나지 않았습니다.

4710 4754 

4711### Task output swap refused4755### Task output swap refused

4712 4756 

4713Claude Code는 각 Bash 명령의 출력을 임시 디렉터리 아래의 파일에 저장합니다. 이러한 파일 중 하나를 열 때마다 경로가 여전히 생성한 파일로 이어지는지 확인합니다. 심볼릭 링크, 추가 하드 링크 또는 이동된 디렉터리가 리디렉션하지 않습니다. 이 메시지는 확인이 실패했음을 의미하므로 Claude Code는 해당 경로를 통해 쓰거나 읽는 대신 작업을 거부했습니다. 메시지는 Bash 도구 결과에 나타납니다:4757Claude Code는 각 Bash 명령의 출력을 임시 디렉터리 아래의 파일에 저장합니다. 이러한 파일을 열 때마다 심볼릭 링크, 추가 하드 링크 또는 이동된 디렉터리가 경로를 리디렉션하지 않고 경로가 여전히 자신이 만든 파일로 연결되는지 확인합니다. 이 메시지는 해당 검사가 실패했다는 의미이며, Claude Code는 그 경로를 통해 출력을 쓰거나 읽는 대신 작업을 거부했습니다. 메시지는 Bash 도구 결과에 표시됩니다.

4714 4758 

4715```text wrap theme={null}4759```text wrap theme={null}

4716task output swap refused (tasks dir moved or linked): /private/tmp/claude-501/-Users-you-my-project/1f0e62dc-4b0a-4f5e-9c2d-8a7b6c5d4e3f/tasks/b7k2f9m3q.output. To recover: restart Claude Code with CLAUDE_CODE_TMPDIR set to a fresh directory; or, if /private/tmp/claude-501/-Users-you-my-project is a stray directory or a symbolic link that should not be there, remove that entry itself (not what it points to) and restart.4760task output swap refused (tasks dir moved or linked): /private/tmp/claude-501/-Users-you-my-project/1f0e62dc-4b0a-4f5e-9c2d-8a7b6c5d4e3f/tasks/b7k2f9m3q.output. To recover: restart Claude Code with CLAUDE_CODE_TMPDIR set to a fresh directory; or, if /private/tmp/claude-501/-Users-you-my-project is a stray directory or a symbolic link that should not be there, remove that entry itself (not what it points to) and restart.

4717```4761```

4718 4762 

4719괄호 안의 텍스트는 실패한 확인의 이름을 지정합니다. `output symlink was re-pointed`, `output file identity changed`, `not a regular file`과 같은 이유는 모두 동일한 조건을 보고합니다: 출력 경로의 또는 따라 무언가가 더 이상 Claude Code가 생성한 파일이 아닙니다. 일부 이유만 `To recover:` 문장을 전달합니다.4763괄호 안의 텍스트는 실패한 검사를 나타냅니다. `output symlink was re-pointed`, `output file identity changed`, `not a regular file` 같은 이유는 모두 같은 상태를 보고합니다. 즉, 출력 경로 또는 그 경로상의 무언가가 더 이상 Claude Code가 만든 파일이 아닙니다. 일부 이유에만 `To recover:` 문장이 포함됩니다.

4720 4764 

4721명령이 여전히 실행 중일 때 확인이 실패하면 Claude Code가 명령을 중지하고 결과는 다음을 보고합니다:4765명령이 아직 실행 중일 때 검사가 실패하면 Claude Code는 명령을 중지하며, 결과에 다음과 같이 보고됩니다.

4722 4766 

4723```text theme={null}4767```text theme={null}

4724Command killed: its output file was replaced or could no longer be verified4768Command killed: its output file was replaced or could no longer be verified

4725```4769```

4726 4770 

4727**할 일:**4771**조치 방법:**

4728 4772 

4729* v2.1.260 이상으로 업그레이드합니다. 이전 버전은 링크 또는 이동된 디렉터리가 없을 때도 이 메시지를 표시하기도 했습니다.4773* v2.1.260 이상으로 업그레이드합니다. 이전 버전에서는 링크나 이동된 디렉터리가 없는데도 이 메시지가 표시되는 경우가 있었습니다

4730* [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/ko/env-vars)을 새 디렉터리로 설정하여 Claude Code를 다시 시작합니다.4774* [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/ko/env-vars)를 새 디렉터리로 설정하여 Claude Code를 다시 시작합니다

4731* 또는 Claude Code 임시 디렉터리 아래의 프로젝트 디렉터리를 확인합니다. 예제 메시지의 `/private/tmp/claude-501/-Users-you-my-project`입니다. 해당 경로가 심볼릭 링크이거나 거기에 있으면 안 되는 디렉터리이면 링크의 대상이 아닌 링크 또는 디렉터리 자체를 제거하고 Claude Code를 다시 시작합니다.4775* 또는 Claude Code 임시 디렉터리 아래에 있는 프로젝트의 디렉터리(예시 메시지에서는 `/private/tmp/claude-501/-Users-you-my-project`)를 확인합니다. 해당 경로가 심볼릭 링크이거나 있어서는 안 되는 디렉터리라면, 링크의 대상이 아니라 링크 또는 디렉터리 자체를 제거하고 Claude Code를 다시 시작합니다

4732* 거부가 반복되면 프로세스가 세션이 실행되는 동안 Claude Code의 임시 디렉터리 아래의 항목을 대체, 링크 또는 제거합니다. [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/ko/env-vars)을 다른 것이 관리하지 않는 디렉터리로 설정하고 다시 시작합니다.4776* 거부가 반복되면 세션이 실행되는 동안 어떤 프로세스가 Claude Code의 임시 디렉터리 아래 항목을 교체, 링크 또는 제거하고 있는 것입니다. [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/ko/env-vars)를 다른 것이 관리하지 않는 디렉터리로 설정하고 다시 시작합니다

4733 4777 

4734### 디스크가 가득 찼거나 디스크 할당량이 소진됨4778### Disk full or disk quota used up

4735 4779 

4736Claude Code의 임시 디렉터리를 보유한 볼륨에서 공간, inode 또는 디스크 할당량을 확보합니다. 명령 결과에서 `Disk full:`, `Disk quota used up:` 또는 `Nearly out of inodes:`로 시작하는 줄이 해당 디렉터리를 지정합니다.4780Claude Code의 임시 디렉터리가 있는 볼륨에서 공간, inode 또는 디스크 할당량을 확보합니다. 명령 결과에서 `Disk full:`, `Disk quota used up:` 또는 `Nearly out of inodes:`로 시작하는 줄에 해당 디렉터리가 표시됩니다.

4737 4781 

4738Claude Code는 각 Bash 및 PowerShell 명령의 출력을 해당 디렉터리 아래의 파일에 저장합니다. 볼륨 또는 그 볼륨에 대한 사용자의 할당량이 가득 차서 해당 파일을 만들 수 없으면 명령이 시작되지 않으며, Claude가 읽는 결과는 다음과 같습니다:4782Claude Code는 각 Bash 및 PowerShell 명령의 출력을 해당 디렉터리 아래의 파일에 저장합니다. 볼륨 또는 그 볼륨의 사용자 할당량이 가득 차서 이 파일을 만들 수 없으면 명령이 시작되지 않으며, Claude가 읽는 결과는 다음과 같습니다.

4739 4783 

4740```text wrap theme={null}4784```text wrap theme={null}

4741The command was not started: this computer's disk is full (ENOSPC) on the volume holding /tmp/claude-501 (Claude Code's temporary directory), so the file that captures command output could not be created there and nothing ran. Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.4785The command was not started: this computer's disk is full (ENOSPC) on the volume holding /tmp/claude-501 (Claude Code's temporary directory), so the file that captures command output could not be created there and nothing ran. Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.

4742```4786```

4743 4787 

4744나머지 세 가지 메시지는 실행된 후 0이 아닌 코드로 종료된 명령 뒤에 나타납니다. 다음 예시는 `Disk full:` 형식입니다:4788`Disk full:`, `Disk quota used up:`, `Nearly out of inodes:` 메시지는 실행되어 0이 아닌 코드로 종료된 명령 뒤에 나타납니다. 예를 들면 다음과 같습니다.

4745 4789 

4746```text wrap theme={null}4790```text wrap theme={null}

4747Disk full: this computer's volume holding /tmp/claude-501 (Claude Code's temporary directory) has 3 MB free, so whatever this command printed was lost and its own writes may have failed with "No space left on device". Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.4791Disk full: this computer's volume holding /tmp/claude-501 (Claude Code's temporary directory) has 3 MB free, so whatever this command printed was lost and its own writes may have failed with "No space left on device". Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.

4748```4792```

4749 4793 

4750**할 일:**4794**조치 방법:**

4751 4795 

4752* macOS 및 Linux에서는 셸에서 `df -h <dir>`를 실행하여 어떤 볼륨이 디렉터리를 보유하고 있으며 얼마나 가득 찼는지 확인합니다. `df -i <dir>`는 여유 inode 수를 표시합니다. `<dir>`은 메시지가 지정하는 디렉터리이며, 예를 들어 `df -i /tmp/claude-501`와 같이 사용합니다.4796* macOS와 Linux에서는 셸에서 `df -h <dir>`를 실행하여 어떤 볼륨이 디렉터리를 담고 있으며 얼마나 차 있는지 확인합니다. `df -i <dir>`는 사용 가능한 inode 수를 보여 줍니다. `<dir>`는 메시지에 표시된 디렉터리이며, 예를 들어 `df -i /tmp/claude-501`처럼 사용합니다

4753* **`Disk full: this computer's volume` 또는 `disk is full (ENOSPC)`**: 해당 볼륨의 어느 곳에서든 필요하지 않은 파일을 삭제합니다.4797* **`Disk full: this computer's volume` 또는 `disk is full (ENOSPC)`**: 해당 볼륨의 어디에서든 필요 없는 파일을 삭제합니다

4754* **`Disk quota used up:` 또는 `Disk full: a test write`**: 볼륨에 여유 공간이 여전히 표시되더라도 해당 볼륨에서 사용자 본인의 파일을 삭제합니다.4798* **`Disk quota used up:`, `disk quota is used up (EDQUOT)` 또는 `Disk full: a test write`**: 볼륨에 아직 여유 공간이 표시되더라도 해당 볼륨에서 본인의 파일을 삭제합니다

4755* **`disk quota is used up (EDQUOT)`**: 해당 볼륨에서 사용자 본인의 파일을 삭제합니다.4799* **`Nearly out of inodes:`**: 해당 볼륨에서 많은 파일을 삭제합니다. 각 파일은 크기와 관계없이 inode를 하나씩 차지하므로, 크기가 아니라 개수가 중요합니다

4756* **`Nearly out of inodes:`**: 해당 볼륨에서 많은 파일을 삭제합니다. 각 파일은 크기에 관계없이 하나의 inode를 차지하므로 크기가 아닌 개수가 중요합니다.4800* 또는 [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/ko/env-vars)를 여유 공간이 있는 볼륨의 디렉터리로 설정하여 Claude Code를 다시 시작합니다

4757* 또는 [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/ko/env-vars)을 여유 공간이 있는 볼륨의 디렉터리로 설정하여 Claude Code를 다시 시작합니다.4801* 그런 다음 Claude에게 명령을 다시 실행하도록 합니다

4758* 그런 다음 Claude에 명령을 다시 실행하도록 합니다.

4759 4802 

4760v2.1.309 이전에는 메시지가 다음과 같았으며, 동일한 단계가 적용됩니다:4803v2.1.309 이전에는 메시지가 다음과 같았으며, 같은 단계가 적용됩니다.

4761 4804 

4762* `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)`4805* `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)`

4763* `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)`4806* `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)`

4764* `Command output was lost: the temp filesystem at <dir> is full` 또는 `... is out of inodes`4807* `Command output was lost: the temp filesystem at <dir> is full` 또는 `... is out of inodes`

4765* `The command was not started: this computer's disk is full (ENOSPC), so the file that captures command output could not be created. Nothing ran.` 또는 `(EDQUOT)`가 포함된 동일한 메시지. 이 형식은 디렉터리를 지정하지 않습니다: `/tmp`와 같은 시스템 임시 디렉터리 또는 `CLAUDE_CODE_TMPDIR`에 설정된 디렉터리를 보유한 볼륨을 확인합니다.4808* `The command was not started: this computer's disk is full (ENOSPC), so the file that captures command output could not be created. Nothing ran.` 또는 `(EDQUOT)`가 붙은 같은 메시지. 이 형식에는 디렉터리가 표시되지 않으므로, `/tmp` 같은 시스템 임시 디렉터리가 있는 볼륨이나 `CLAUDE_CODE_TMPDIR`에 설정된 디렉터리를 확인합니다

4809 

4810v2.1.305 이전에는 디스크가 가득 차서 Claude Code가 시작할 수 없었던 명령이 운영 체제의 오류 텍스트만 반환했습니다. 예를 들어 그 텍스트는 `ENOSPC: no space left on device, open <path>.output`과 같았습니다.

4766 4811 

4767v2.1.305 이전에는 디스크가 가득 차서 Claude Code가 시작할 수 없었던 명령이 운영 체제의 오류 텍스트만 반환했습니다. 해당 텍스트는 예를 들어 `ENOSPC: no space left on device, open <path>.output`였습니다.4812### git is not installed on this Mac

4813 

4814이 메시지는 Claude Code의 어떤 단계에 git이 필요했는데, 찾은 git이 `/usr/bin/git`에 있는 Apple의 대체 프로그램이라는 의미입니다. git을 제공하는 개발자 도구가 설치되어 있지 않습니다.

4815 

4816Claude Code는 대체 프로그램을 시작하지 않고 대신 이 텍스트를 표시하며, 예를 들어 더 긴 메시지 안에 포함되어 표시될 수 있습니다.

4817 

4818```text wrap theme={null}

4819git is not installed on this Mac. To install it, run xcode-select --install, then try again.

4820```

4821 

4822**조치 방법:**

4823 

4824* 터미널에서 `xcode-select --install`을 실행하고, 시작되는 설치를 완료한 다음, Claude Code에서 하던 작업을 다시 시도합니다

4768 4825 

4769### File is not valid UTF-84826### File is not valid UTF-8

4770 4827 

4771Claude가 바이트가 UTF-8로 디코딩되지 않는 파일에 Edit 또는 NotebookEdit 도구를 사용했고, Claude Code가 변경을 거부했습니다. 아무것도 쓰이지 않았으므로 파일은 이전 상태 그대로입니다. 이 도구들은 파일 전체를 UTF-8로 다시 저장하므로, 디코딩할 수 없는 모든 바이트가 대체 문자 `U+FFFD`로 바뀌었을 것입니다. 메시지는 도구 결과에 나타납니다:4828Claude가 바이트가 UTF-8로 디코딩되지 않는 파일에 Edit 또는 NotebookEdit 도구를 사용했으며, Claude Code가 변경을 거부했습니다. 아무것도 쓰지 않았으므로 파일은 원래 상태 그대로입니다. 이 도구들은 파일 전체를 UTF-8로 다시 저장하므로, 디코딩할 수 없는 모든 바이트가 대체 문자 `U+FFFD`로 바뀌었을 것입니다. 메시지는 도구 결과에 표시됩니다.

4772 4829 

4773```text wrap theme={null}4830```text wrap theme={null}

4774File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary. This tool saves the whole file as UTF-8, which would replace every byte it cannot decode with U+FFFD. Nothing was written. Make the change with a shell command that reads and writes the file in its own encoding, or ask the user whether to convert the file to UTF-8 first.4831File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary. This tool saves the whole file as UTF-8, which would replace every byte it cannot decode with U+FFFD. Nothing was written. Make the change with a shell command that reads and writes the file in its own encoding, or ask the user whether to convert the file to UTF-8 first.

4775```4832```

4776 4833 

4777UTF-8이어야 하는 파일도 잘못된 바이트 시퀀스가 하나라도 포함되어 있으면 이 메시지가 표시됩니다. 확인이 파일의 바이트 전체를 대상으로 하기 때문입니다.4834검사는 파일의 바이트 전체를 대상으로 하므로, UTF-8이어야 하는 파일도 잘못된 바이트 시퀀스가 하나라도 포함되어 있으면 이 메시지가 표시됩니다.

4778 4835 

4779**할 일:**4836**조치 방법:**

4780 4837 

4781* 파일을 현재 인코딩으로 유지하려면, 메시지가 지시하는 대로 Claude가 해당 인코딩으로 파일을 읽고 쓰는 셸 명령으로 변경하도록 합니다.4838* 파일을 현재 인코딩으로 유지하려면, 메시지가 안내하는 대로 Claude가 해당 인코딩으로 파일을 읽고 쓰는 셸 명령을 사용해 변경하도록 합니다

4782* Edit 도구로 파일을 계속 편집하려면 파일을 UTF-8로 변환하거나, UTF-8이어야 하는 파일의 잘못된 바이트를 수정한 다음 Claude에 편집을 다시 요청합니다.4839* Edit 도구로 파일을 계속 편집하려면 파일을 UTF-8로 변환하거나, UTF-8이어야 하는 파일의 잘못된 바이트를 수정한 다음 Claude에게 다시 편집하도록 요청합니다

4783 4840 

4784v2.1.296 이전에는 Edit와 NotebookEdit가 이러한 편집을 적용하고 디코딩할 수 없는 모든 바이트를 `U+FFFD`로 저장했습니다. 해당 버전에서는 Claude Code를 업데이트합니다.4841v2.1.296 이전에는 Edit와 NotebookEdit가 이러한 편집을 적용하고 디코딩할 수 없는 모든 바이트를 `U+FFFD`로 저장했습니다. 해당 버전을 사용 중이라면 Claude Code를 업데이트합니다.

4785 4842 

4786### The source file is not valid UTF-8 text4843### The source file is not valid UTF-8 text

4787 4844 

4788Claude가 바이트가 텍스트로 디코딩되지 않거나 텍스트가 이미 대체 문자 `U+FFFD`를 포함하는 파일에서 [아티팩트](https://code.claude.com/docs/ko/artifacts.md)를 게시하려고 했으므로 Claude Code는 아무것도 업로드하기 전에 게시를 거부했습니다. 메시지는 Artifact 도구 결과에 나타나고 수정할 첫 번째 위치의 이름을 지정합니다:4845Claude가 바이트가 텍스트로 디코딩되지 않거나 텍스트에 이미 대체 문자 `U+FFFD`가 포함된 파일에서 [아티팩트](https://code.claude.com/docs/ko/artifacts.md)를 게시하려 했기 때문에, Claude Code가 아무것도 업로드하기 전에 게시를 거부했습니다. 메시지는 Artifact 도구 결과에 표시되며 수정할 첫 번째 위치를 알려 줍니다.

4789 4846 

4790```text wrap theme={null}4847```text wrap theme={null}

4791file_path: the source file is not valid UTF-8 text (first invalid byte at line 12, column 40). It may be saved in another encoding or contain binary data. Rewrite it as UTF-8, then publish again. Nothing was published.4848file_path: the source file is not valid UTF-8 text (first invalid byte at line 12, column 40). It may be saved in another encoding or contain binary data. Rewrite it as UTF-8, then publish again. Nothing was published.


4793file_path: the source file has the replacement character U+FFFD at line 12, column 40, usually left where an earlier edit or paste lost a character. Replace it with the intended text (in HTML, write an intended U+FFFD as &#xFFFD;), then publish again. Nothing was published.4850file_path: the source file has the replacement character U+FFFD at line 12, column 40, usually left where an earlier edit or paste lost a character. Replace it with the intended text (in HTML, write an intended U+FFFD as &#xFFFD;), then publish again. Nothing was published.

4794```4851```

4795 4852 

4796Claude Code는 파일을 UTF-8로 디코딩하거나 리틀 엔디안 UTF-16 바이트 순서 표시로 시작할 때 UTF-16으로 디코딩합니다. 그러한 UTF-16 파일이 디코딩되지 않으면 첫 번째 메시지는 `UTF-16`의 이름을 지정하고 여전히 파일을 UTF-8로 다시 쓰도록 지시합니다. 명명된 위치 뒤에 더 많은 위치가 따르면 메시지는 위치 뒤에 `(+2 more)`과 같은 개수를 추가합니다.4853Claude Code는 파일을 UTF-8로 디코딩하며, 파일이 리틀 엔디언 UTF-16 바이트 순서 표시로 시작하면 UTF-16으로 디코딩합니다. 이러한 UTF-16 파일이 디코딩되지 않으면 첫 번째 메시지에 `UTF-16`이 표시되지만, 여전히 파일을 UTF-8로 다시 작성하라고 안내합니다. 표시된 위치 뒤에 다른 위치가 더 있으면, 메시지는 위치 뒤에 `(+2 more)` 같은 개수를 덧붙입니다.

4797 4854 

4798**할 일:**4855**조치 방법:**

4799 4856 

4800* 보통 아무것도 하지 않습니다: Claude가 파일을 다시 쓰고 게시합니다.4857* 대개는 아무것도 하지 않아도 됩니다. Claude가 파일을 다시 작성하고 다시 게시합니다

4801* 파일이 사용자가 작성하거나 내보낸 것이면 UTF-8로 다시 저장하고 각 `U+FFFD`를 이전 편집, 붙여넣기 또는 변환이 손실한 문자로 바꿉니다.4858* 사용자가 작성하거나 내보낸 파일이라면 UTF-8로 다시 저장하고, 각 `U+FFFD`를 이전 편집, 붙여넣기 또는 변환에서 유실된 문자로 교체합니다

4802* 페이지에 의도적인 `U+FFFD`를 표시하려면 리터럴 문자 대신 HTML에서 `&#xFFFD;`로 작성합니다.4859* 페이지에 의도적으로 `U+FFFD`를 표시하려면 HTML에서 리터럴 문자 대신 `&#xFFFD;`로 작성합니다

4803 4860 

4804v2.1.267 이전에는 Claude Code가 그러한 파일을 확인 없이 업로드했고 서버가 대신 게시를 거부했습니다.4861v2.1.267 이전에는 Claude Code가 이러한 파일을 검사하지 않고 업로드했으며, 대신 서버가 게시를 거부했습니다.

4805 4862 

4806### Not published: that file is on a network share4863### Not published: that file is on a network share

4807 4864 

4808Claude가 네트워크 호스트를 지정하는 경로에 있는 파일에서 [아티팩트](https://code.claude.com/docs/ko/artifacts.md)를 게시하려고 했습니다:4865Claude가 네트워크 호스트를 가리키는 경로에 있는 파일에서 [아티팩트](https://code.claude.com/docs/ko/artifacts.md)를 게시하려 했습니다.

4809 4866 

4810* Windows에서는 시작 시 [`--add-dir`](https://code.claude.com/docs/ko/cli-reference#cli-flags)로 전달한 매핑된 네트워크 드라이브 아래에 있지 않은 `\\server\share` 경로4867* Windows에서는 시작 시 [`--add-dir`](https://code.claude.com/docs/ko/cli-reference#cli-flags)로 전달한 매핑된 네트워크 드라이브 아래에 있지 않은 `\\server\share` 경로

4811* macOS 또는 Linux에서는 `/net/<host>/page.html`과 같은 자동 마운트 경로4868* macOS 또는 Linux에서는 `/net/<host>/page.html` 같은 자동 마운트 경로

4812 4869 

4813이러한 경로를 조회하면 경로가 지정하는 호스트에 연결되며, Windows에서는 이 연결로 인해 호스트에 사용자의 자격 증명이 전송될 수 있습니다. Claude Code는 파일 게시를 거부하며 파일을 읽지 않습니다. 거부는 Artifact 도구 결과에 나타납니다:4870이러한 경로를 조회하면 경로가 가리키는 호스트에 연결하게 되며, Windows에서는 이 연결로 사용자의 자격 증명이 해당 호스트에 전송될 수 있습니다. Claude Code는 파일 게시를 거부하며 파일을 읽지 않습니다. 거부 메시지는 Artifact 도구 결과에 표시됩니다.

4814 4871 

4815```text theme={null}4872```text theme={null}

4816Not published: that file is on a network share. Publish a file from this session's folders instead.4873Not published: that file is on a network share. Publish a file from this session's folders instead.

4817```4874```

4818 4875 

4819**할 일:**4876**조치 방법:**

4820 4877 

4821* 해당 파일이 꼭 필요하지 않다면 아무것도 하지 않습니다: 메시지는 Claude에 세션 자체 폴더의 파일을 대신 게시하도록 지시합니다.4878* 정확히 그 파일이 필요하지 않다면 아무것도 하지 않아도 됩니다. 메시지가 Claude에게 대신 세션의 폴더에 있는 파일을 게시하도록 안내합니다

4822* 해당 파일을 그대로 게시하려면 로컬 디스크의 폴더로 복사하고 다시 요청합니다.4879* 정확히 그 파일을 게시하려면 로컬 디스크의 폴더로 복사한 다음 다시 요청합니다

4823* Windows에서 Claude가 공유에서 직접 게시할 수 있게 하려면 공유를 드라이브 문자에 매핑하고 Claude Code를 시작할 때 해당 드라이브를 전달합니다. 예를 들어 PowerShell에서 `net use Z: \\server\share`를 실행한 다음 `claude --add-dir Z:\`를 실행합니다. 그러면 Claude가 해당 드라이브의 파일을 게시할 수 있습니다. 세션 도중 `/add-dir`로 드라이브를 추가하는 것으로는 충분하지 않습니다.4880* Windows에서 Claude가 공유에서 직접 게시할 수 있게 하려면, 공유를 드라이브 문자에 매핑하고 Claude Code를 시작할 때 해당 드라이브를 전달합니다. 예를 들어 PowerShell에서 `net use Z: \\server\share`를 실행한 다음 `claude --add-dir Z:\`를 실행합니다. 그러면 Claude가 해당 드라이브의 파일을 게시할 수 있습니다. 세션 도중 `/add-dir`로 드라이브를 추가하는 것만으로는 충분하지 않습니다.

4824* macOS 또는 Linux에서는 `/mnt` 또는 `/Volumes` 아래와 같은 디렉터리에 공유를 마운트하고, 자동 마운트 경로 대신 해당 경로에서 게시합니다.4881* macOS 또는 Linux에서는 `/mnt` 또는 `/Volumes` 아래의 디렉터리 같은 위치에 공유를 마운트하고, 자동 마운트 경로 대신 그 경로에서 게시합니다

4825 4882 

4826### Not published: Claude sent the same content again after a newer version of the artifact turned it away4883### Not published: Claude sent the same content again after a newer version of the artifact turned it away

4827 4884 

4828Artifact 호출 아래에 표시되는 이 빨간색 줄은 Claude Code가 반복된 게시를 중지했음을 의미합니다: [아티팩트](https://code.claude.com/docs/ko/artifacts.md)는 업데이트되지 않았으며, Claude가 게시에 사용하는 파일에도 아무것도 쓰이지 않았습니다. Claude가 게시하지 않고 멈추지 않는 한 아무것도 할 필요가 없습니다.4885Artifact 호출 아래에 표시되는 이 빨간 줄은 Claude Code가 반복된 게시를 중지했다는 의미입니다. [아티팩트](https://code.claude.com/docs/ko/artifacts.md)는 업데이트되지 않았으며, Claude가 게시에 사용하는 파일에도 아무것도 쓰지 않았습니다. Claude가 게시하지 않고 멈추지 않는 한 아무것도 할 필요가 없습니다.

4829 4886 

4830세션 앞부분에서 Claude Code는 아티팩트에 더 새로운 버전이 있어서 게시를 거절했습니다. 예를 들어 [편집자](https://code.claude.com/docs/ko/artifacts.md#let-someone-edit-with-you)나 사용자의 다른 세션이 게시한 버전입니다. 줄의 끝부분은 Claude가 다음에 해야 할 일을 알려줍니다:4887세션 초반에 아티팩트에 더 새로운 버전(예: [편집자](https://code.claude.com/docs/ko/artifacts.md#let-someone-edit-with-you)나 다른 세션이 게시한 버전)이 있어서 Claude Code가 게시를 거절했습니다. 줄의 끝부분이 Claude가 다음에 해야 할 일을 알려 줍니다.

4831 4888 

4832```text wrap theme={null}4889```text wrap theme={null}

4833Not published: Claude sent the same content again after a newer version of the artifact turned it away. Claude needs to work from that newer version first.4890Not published: Claude sent the same content again after a newer version of the artifact turned it away. Claude needs to work from that newer version first.


4836Not published: Claude sent its changes again over the same file after a newer version of the artifact turned them away. The artifact hasn't changed since, so publishing once more should go through.4893Not published: Claude sent its changes again over the same file after a newer version of the artifact turned them away. The artifact hasn't changed since, so publishing once more should go through.

4837```4894```

4838 4895 

4839**할 일:**4896**조치 방법:**

4840 4897 

4841* **`Claude needs to work from that newer version first`로 끝나는 경우**: Claude가 거기서 멈췄다면 아티팩트의 현재 버전을 가져와 변경 사항을 병합한 다음 다시 게시하도록 요청합니다.4898* **`Claude needs to work from that newer version first`로 끝나는 경우**: Claude가 거기서 멈췄다면 아티팩트의 현재 버전을 가져와 변경 사항을 병합한 다음 다시 게시하도록 요청합니다

4842* **`should go through`로 끝나는 경우**: Claude가 거기서 멈췄다면 다시 게시하도록 요청합니다.4899* **`should go through`로 끝나는 경우**: Claude가 거기서 멈췄다면 다시 게시하도록 요청합니다

4843 4900 

4844### Cowork 세션에서 연결된 폴더 외부의 로컬 파일 읽기4901### Reading a local file from outside the connected folders in a Cowork session

4845 4902 

4846Claude Desktop 앱에서 머신에서 실행 중인 [Cowork](https://claude.com/docs/cowork/overview) 세션에서 Claude가 [아티팩트](https://code.claude.com/docs/ko/artifacts.md)에 대한 로컬 파일의 이름을 지정했습니다. Claude Code가 파일이 세션의 연결된 폴더 내의 일반 파일인지 확인할 수 없습니다: 경로가 해당 폴더 외부에 있거나, 심볼릭 링크를 통과하거나, 나타나는 것과 다른 파일의 이름을 지정할 수 있는 방식으로 철자가 지정되었습니다. 그러한 파일을 읽으려면 승인이 필요하며, 승인 카드를 표시할 수 없는 세션(예: 모든 승인을 건너뛰도록 설정된 세션)에서 Claude Code는 읽기를 거부합니다.4903Claude Desktop 앱에서 사용자의 머신에서 실행되는 [Cowork](https://claude.com/docs/cowork/overview) 세션에서, Claude가 [아티팩트](https://code.claude.com/docs/ko/artifacts.md)에 사용할 로컬 파일을 지정했습니다. Claude Code는 해당 파일이 세션의 연결된 폴더 안에 있는 일반 파일인지 확인할 수 없었습니다. 경로가 해당 폴더 밖에 있거나, 심볼릭 링크를 거치거나, 보이는 것과 다른 파일을 가리킬 수 있는 방식으로 표기되어 있기 때문입니다. 이러한 파일을 읽으려면 사용자의 승인이 필요하며, 모든 승인을 건너뛰도록 설정된 세션처럼 승인 카드를 표시할 수 없는 세션에서는 Claude Code가 읽기를 거부합니다.

4847 4904 

4848거부는 Artifact 도구 결과에 나타납니다. 파일을 전혀 검사할 수 없을 때 대신 해당 실패의 이름을 지정합니다:4905거부 메시지는 Artifact 도구 결과에 표시되며, 파일을 전혀 검사할 수 없었던 경우에는 대신 그 실패를 알려 줍니다.

4849 4906 

4850```text wrap theme={null}4907```text wrap theme={null}

4851Reading a local file from outside this session's connected folders, or through a link, needs the approval card, and no one can answer it in this Cowork session. Use a plain file inside the connected folders; do not retry this file in this session.4908Reading a local file from outside this session's connected folders, or through a link, needs the approval card, and no one can answer it in this Cowork session. Use a plain file inside the connected folders; do not retry this file in this session.


4853cannot read file_path (ENOENT) — the file could not be examined, and no one can answer the approval card in this Cowork session. Check that the file exists as a plain file inside the connected folders, then retry with that path.4910cannot read file_path (ENOENT) — the file could not be examined, and no one can answer the approval card in this Cowork session. Check that the file exists as a plain file inside the connected folders, then retry with that path.

4854```4911```

4855 4912 

4856**할 일:**4913**조치 방법:**

4857 4914 

4858* 보통 아무것도 하지 않습니다: 메시지는 Claude에 연결된 폴더 내의 일반 파일을 대신 사용하도록 지시합니다.4915* 대개는 아무것도 하지 않아도 됩니다. 메시지가 Claude에게 대신 연결된 폴더 안의 일반 파일을 사용하도록 안내합니다

4859* 정확한 파일을 아티팩트에 넣으려면 세션의 연결된 폴더 중 하나에 일반 파일(심볼릭 링크 아님)로 복사하고 다시 요청합니다.4916* 정확히 그 파일을 아티팩트에 넣으려면, 심볼릭 링크가 아닌 일반 파일로 세션의 연결된 폴더 중 하나에 복사한 다음 다시 요청합니다

4860 4917 

4861### WebFetch cannot fetch localhost4918### WebFetch cannot fetch localhost

4862 4919 

4863Claude가 `http://localhost:3000` 또는 `http://wiki/`와 같은 인트라넷 이름처럼 점이 없는 호스트명을 가진 URL로 [WebFetch](https://code.claude.com/docs/ko/tools-reference.md#webfetch-tool-behavior)를 호출했습니다. WebFetch는 요청을 하기 전에 이러한 URL을 거부합니다:4920Claude가 `http://localhost:3000`이나 `http://wiki/` 같은 단순한 인트라넷 이름처럼 호스트 이름에 점이 없는 URL로 [WebFetch](https://code.claude.com/docs/ko/tools-reference.md#webfetch-tool-behavior)를 호출했습니다. WebFetch는 요청을 보내기 전에 이러한 URL을 거부합니다.

4864 4921 

4865```text wrap theme={null}4922```text wrap theme={null}

4866WebFetch cannot fetch localhost or other hostnames without a dot. To reach a local server, use Bash with curl instead.4923WebFetch cannot fetch localhost or other hostnames without a dot. To reach a local server, use Bash with curl instead.

4867```4924```

4868 4925 

4869**할 일:**4926**조치 방법:**

4870 4927 

4871* 보통 아무것도 하지 않습니다: 메시지는 Claude를 Bash 도구를 통한 `curl`로 지시하며, 이는 로컬 및 인트라넷 서버에 도달할 수 있습니다.4928* 대개는 아무것도 하지 않아도 됩니다. 메시지가 Claude에게 로컬 및 인트라넷 서버에 접근할 수 있는 Bash 도구의 `curl`을 사용하도록 안내합니다

4872 4929 

4873v2.1.268 이전에는 WebFetch가 이러한 URL을 일반 `Invalid URL` 오류로 보고했습니다.4930v2.1.268 이전에는 WebFetch가 이러한 URL을 일반적인 `Invalid URL` 오류로 보고했습니다.

4874 4931 

4875### WebFetch 도메인 안전 확인 실패4932### WebFetch domain safety check failed

4876 4933 

4877URL을 가져오기 전에 WebFetch는 URL의 호스트명을 `api.anthropic.com`으로 보내 Anthropic의 [도메인 안전 차단 목록](https://code.claude.com/docs/ko/data-usage.md#webfetch-domain-safety-check)과 대조합니다. 확인을 완료할 수 없으면 WebFetch는 도메인이 안전한지 확인할 수 없으므로 페이지를 가져오지 않으며, 도구 결과에는 대신 다음 메시지 중 하나가 포함됩니다:4934WebFetch는 URL을 가져오기 전에 URL의 호스트 이름을 `api.anthropic.com`으로 보내 Anthropic의 [도메인 안전 차단 목록](https://code.claude.com/docs/ko/data-usage.md#webfetch-domain-safety-check)과 대조합니다. 검사를 완료할 수 없으면 WebFetch는 도메인이 안전한지 확인할 수 없으므로 페이지를 가져오지 않으며, 도구 결과에 대신 다음 메시지 중 하나가 표시됩니다.

4878 4935 

4879```text wrap theme={null}4936```text wrap theme={null}

4880The safety check for domain example.com is rate-limited (too many domain checks from this network; the limit is shared and can stay exhausted for minutes). Do not retry WebFetch in a loop or sleep to wait it out; continue without this page and report that its safety check was rate-limited. A single later attempt is fine; if that is rate-limited too, stop.4937The safety check for domain example.com is rate-limited (too many domain checks from this network; the limit is shared and can stay exhausted for minutes). Do not retry WebFetch in a loop or sleep to wait it out; continue without this page and report that its safety check was rate-limited. A single later attempt is fine; if that is rate-limited too, stop.


4882Unable to verify if domain example.com is safe to fetch. This may be due to network restrictions or enterprise security policies blocking claude.ai.4939Unable to verify if domain example.com is safe to fetch. This may be due to network restrictions or enterprise security policies blocking claude.ai.

4883```4940```

4884 4941 

4885* `rate-limited`: 확인 엔드포인트가 HTTP `429`로 응답했습니다. 메시지는 Claude에 페이지 없이 계속하고 나중에 최대 한 번만 다시 시도하도록 지시합니다. Claude Code는 실패한 확인을 캐시하지 않으므로 나중에 해당 도메인을 가져오면 확인이 다시 실행됩니다. 네트워크의 세션에서 이 문제가 자주 발생하면 설정에서 [`skipWebFetchPreflight: true`](https://code.claude.com/docs/ko/settings-reference#skipwebfetchpreflight)로 확인을 건너뛸 수 있습니다.4942* `rate-limited`: 검사 엔드포인트가 HTTP `429`로 응답했습니다. 메시지는 Claude에게 페이지 없이 계속 진행하고 나중에 최대 한 번만 다시 시도하라고 안내합니다. Claude Code는 실패한 검사를 캐시하지 않으므로, 나중에 해당 도메인을 가져오면 검사가 다시 실행됩니다. 네트워크의 세션에서 이 문제가 자주 발생하면 설정에서 [`skipWebFetchPreflight: true`](https://code.claude.com/docs/ko/settings-reference#skipwebfetchpreflight)로 검사를 건너뛸 수 있습니다.

4886* `Unable to verify`: 확인 요청이 실패했거나, 시간 초과되었거나, 다른 오류 상태를 받았습니다. 네트워크가 `api.anthropic.com`을 차단하는 경우 해당 도메인을 허용 목록에 추가하거나 설정에서 [`skipWebFetchPreflight: true`](https://code.claude.com/docs/ko/settings-reference#skipwebfetchpreflight)로 확인을 건너뜁니다.4943* `Unable to verify`: 검사 요청이 실패했거나, 시간 초과되었거나, 다른 오류 상태를 받았습니다. 네트워크가 `api.anthropic.com`을 차단한다면 해당 도메인을 허용 목록에 추가하거나, 설정에서 [`skipWebFetchPreflight: true`](https://code.claude.com/docs/ko/settings-reference#skipwebfetchpreflight)로 검사를 건너뜁니다.

4887 4944 

4888v2.1.286 이전에는 속도 제한 메시지가 `The safety check for domain example.com is temporarily rate-limited (too many domain checks from this network). Retry after about a minute; retrying sooner will fail the same way.`였습니다.4945v2.1.286 이전에는 속도 제한 메시지가 `The safety check for domain example.com is temporarily rate-limited (too many domain checks from this network). Retry after about a minute; retrying sooner will fail the same way.`로 표시되었습니다.

4889v2.1.285 이전에는 속도 제한된 확인이 대신 `Unable to verify` 메시지로 보고되었습니다.4946v2.1.285 이전에는 속도 제한된 검사가 대신 `Unable to verify` 메시지로 보고되었습니다.

4890 4947 

4891## 백그라운드 세션 오류4948## 백그라운드 세션 오류

4892 4949 

fast-mode.md +21 −11

Details

155 155 

156빠른 모드를 제공하기 전에 Claude Code는 `api.anthropic.com`에 직접 요청하여 조직의 빠른 모드 가용성을 확인합니다. 확인은 [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/ko/llm-gateway-connect#set-the-base-url-and-credential)을 따르지 않으므로, Claude 트래픽을 [LLM 게이트웨이](https://code.claude.com/docs/ko/llm-gateway)를 통해 라우팅하고 `api.anthropic.com`에 대한 직접 송신을 차단하는 네트워크에서는 추론 요청이 작동하더라도 확인이 실패합니다. 확인은 구성된 [HTTP 프록시](https://code.claude.com/docs/ko/network-config.md#proxy-configuration)를 사용하므로 네트워크 차단은 프록시를 통해서도 `api.anthropic.com`에 도달할 수 없는 경우에만 확인을 실패합니다.156빠른 모드를 제공하기 전에 Claude Code는 `api.anthropic.com`에 직접 요청하여 조직의 빠른 모드 가용성을 확인합니다. 확인은 [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/ko/llm-gateway-connect#set-the-base-url-and-credential)을 따르지 않으므로, Claude 트래픽을 [LLM 게이트웨이](https://code.claude.com/docs/ko/llm-gateway)를 통해 라우팅하고 `api.anthropic.com`에 대한 직접 송신을 차단하는 네트워크에서는 추론 요청이 작동하더라도 확인이 실패합니다. 확인은 구성된 [HTTP 프록시](https://code.claude.com/docs/ko/network-config.md#proxy-configuration)를 사용하므로 네트워크 차단은 프록시를 통해서도 `api.anthropic.com`에 도달할 수 없는 경우에만 확인을 실패합니다.

157 157 

158확인이 실패하면 `/fast`는 "Fast mode unavailable due to network connectivity issues"를 보고하고, 조직에서 빠른 모드가 활성화되어 있더라도 요청은 표준 속도로 실행됩니다. 과거에 성공한 확인은 캐시된 결과에서 계속 작동하므로 차단된 확인은 주로 새 설치에 영향을 미칩니다.158조직에서 빠른 모드가 활성화되어 있는데 `/fast`가 다르게 표시하는 경우, 다음 사례 중에서 표시된 메시지를 찾습니다.

159 159 

160확인이 `api.anthropic.com`에 도달하지만 Anthropic이 거부하는 자격 증명을 제시할 때 열린 네트워크에서도 동일한 연결 메시지가 나타납니다. 해결된 키가 게이트웨이 발급 자격 증명인 세션은 [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/ko/llm-gateway-connect#set-the-base-url-and-credential)에 보관되거나 [`apiKeyHelper`](https://code.claude.com/docs/ko/settings-reference#apikeyhelper)에 의해 생성되며, 해당 키로 확인을 보내고 거부된 요청은 연결 실패로 보고됩니다.160#### Fast mode unavailable due to network connectivity issues

161 161 

162빠른 모드를 복원하려면 네트워크 차단이 원인인 경우 `api.anthropic.com`에 대한 직접 송신을 허용 목록에 추가하거나 확인이 실패하는 방식과 일치하는 변수를 설정합니다:162예를 들어 네트워크가 `api.anthropic.com`을 차단하여 가용성 확인이 실패했으며, 요청은 표준 속도로 실행됩니다. 과거에 성공한 확인은 캐시된 결과에서 계속 작동하므로 차단된 확인은 주로 새 설치에 영향을 미칩니다.

163 163 

164* `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`은 실패한 확인을 사용 가능한 것으로 처리하고 여전히 "disabled by your organization" 응답을 준수합니다. 네트워크가 연결을 거부하거나 Anthropic이 게이트웨이 자격 증명을 거부할 때 사용합니다. 허용 목록은 아무것도 차단되지 않으므로 자격 증명 경우에는 도움이 되지 않습니다.164빠른 모드를 복원하려면 `api.anthropic.com`에 대한 직접 송신을 허용 목록에 추가하거나 `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`을 설정합니다. 이 변수는 실패한 확인을 사용 가능한 것으로 처리하면서도 "disabled by your organization" 응답은 여전히 준수합니다.

165* `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`은 확인을 완전히 건너뜁니다. 네트워크가 요청을 거부하는 대신 가로챌 때 사용합니다.

166 165 

167두 게이트웨이 구성은 조직에서 빠른 모드가 활성화되어 있더라도 연결 메시지 대신 "Fast mode has been disabled by your organization"을 보고합니다:166#### Fast mode is currently unavailable

168 167 

169* [`ANTHROPIC_AUTH_TOKEN`](https://code.claude.com/docs/ko/llm-gateway-connect#set-the-base-url-and-credential)만으로 인증하는 세션은 확인을 건너뜁니다: claude.ai 로그인이나 Anthropic API 키가 없고 캐시된 성공한 확인이 없으면 Claude Code는 요청을 보내지 않고 빠른 모드를 조직에서 비활성화한 것으로 처리합니다.168게이트웨이 뒤에서는 Claude Code가 가용성 확인을 보내지 않고 캐시된 이전의 성공한 확인도 없는 다음 구성에 해당하는지 확인합니다:

170* 확인을 가로채고 자신의 페이지로 응답하는 프록시(예: TLS 검사 프록시가 HTTP 200 차단 페이지를 반환)는 조직에서 빠른 모드가 비활성화되었다고 말하는 응답으로 읽혀집니다.

171 169 

172두 경우 모두 `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`을 설정하여 빠른 모드를 복원합니다. `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS`는 실패한 확인만 우회하고 둘 다 비활성화 응답을 생성하므로 두 경우 모두에 적용되지 않습니다. 허용 목록은 요청을 보내지 않는 베어러 토큰 경우에는 도움이 되지 않습니다.170* `ANTHROPIC_BASE_URL`이 게이트웨이를 가리키도록 하고 [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/ko/llm-gateway-connect#set-the-base-url-and-credential)를 Anthropic API 키 형식이 아닌 게이트웨이 발급 키로 설정한 경우입니다. Claude Code는 이러한 키를 `api.anthropic.com`에 보내지 않습니다.

171* [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/ko/env-vars)을 설정하여 Claude Code가 확인을 건너뛰는 경우입니다.

173 172 

174변수는 클라이언트 측 확인에만 영향을 미칩니다. 조직에서 빠른 모드가 비활성화되면 API는 설정 여부와 관계없이 빠른 모드 요청을 거부합니다. API의 거부는 건너뛰기 변수가 설정되어 있어도 유지됩니다. Claude Code는 거부된 요청을 표준 속도로 다시 시도하고, 빠른 모드를 끄고, `/fast`는 조직에서 빠른 모드를 비활성화했다고 보고합니다.173두 구성 모두에서 빠른 모드를 복원하려면 `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`을 설정합니다.

175 174 

176`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`을 설정하면 가용성 확인도 억제됩니다. 이전에 캐시된 성공한 확인이 없으면 `/fast`는 "Fast mode is currently unavailable"을 보고합니다. 두 건너뛰기 변수 모두 해당 구성에서 빠른 모드를 복원합니다.175#### Fast mode has been disabled by your organization

176 

177게이트웨이 뒤에서는 조직에서 빠른 모드가 활성화되어 있더라도 다음 구성 중 하나에서 이 메시지가 표시될 수 있습니다:

178 

179* claude.ai 로그인, API 키, 캐시된 성공한 확인 없이 [`ANTHROPIC_AUTH_TOKEN`](https://code.claude.com/docs/ko/llm-gateway-connect#set-the-base-url-and-credential)만으로 인증하는 경우입니다. 이 경우 Claude Code는 요청을 보내지 않고 빠른 모드를 조직에서 비활성화한 것으로 처리합니다.

180* 프록시가 확인을 가로채고 자체 페이지로 응답하는 경우입니다. 예를 들어 TLS 검사 프록시가 HTTP 200 차단 페이지를 반환하는 경우입니다. Claude Code는 해당 페이지를 조직에서 빠른 모드가 비활성화되었다고 말하는 응답으로 읽습니다.

181 

182두 경우 모두 어느 쪽에도 적용되지 않는 `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS` 대신, 확인을 완전히 건너뛰는 `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`을 설정합니다.

183 

184> [!NOTE]

185>

186> 건너뛰기 변수는 클라이언트 측 확인만 변경합니다. 조직에서 빠른 모드가 비활성화되면 API는 이 변수의 설정 여부와 관계없이 빠른 모드 요청을 거부합니다. 그러면 Claude Code는 요청을 표준 속도로 재시도하고, 빠른 모드를 끄며, `/fast`는 조직에서 빠른 모드를 비활성화했다고 보고합니다.

177 187 

178### 세션별 옵트인 필요188### 세션별 옵트인 필요

179 189 

hooks.md +16 −5

Details

961blocking because Git Bash wasn't found, so only exit code 0 or 2 counts as this hook's verdict.961blocking because Git Bash wasn't found, so only exit code 0 or 2 counts as this hook's verdict.

962```962```

963 963 

964hook이 실패한 이유를 알아보려면 [디버그 로그](#debug-hooks)를 확인합니다. hook에 맞는 해결 방법을 선택합니다:964오류에 `PowerShell started no program`도 포함되어 있으면, PowerShell이 실행하는 대신 출력하는 [따옴표로 묶인 문자열로만 이루어진 `command`에 대한 해결 방법](#powershell-started-no-program)부터 시작합니다.

965 

966Git Bash가 없으면 해당 hook의 0 또는 2 이외의 종료 코드는 호출을 거부하지 않는 JSON을 출력하더라도 [실패](#block-the-action-when-a-hook-fails)로 간주됩니다. hook이 실패한 이유를 알아보려면 [디버그 로그](#debug-hooks)를 확인합니다. 그런 다음 hook에 맞는 해결 방법을 선택합니다:

965 967 

966* **hook이 실패할 때 작업이 진행되어야 하는 경우**: hook에 [`"onFailure": "continue"`](#block-the-action-when-a-hook-fails)를 추가합니다968* **hook이 실패할 때 작업이 진행되어야 하는 경우**: hook에 [`"onFailure": "continue"`](#block-the-action-when-a-hook-fails)를 추가합니다

967* **hook이 Bash용으로 작성된 경우**: `shell`이 설정되지 않은 [셸 형식](#exec-form-and-shell-form) hook은 Git Bash가 설치되어 있지 않으면 PowerShell에서 실행되며, Bash용으로 작성된 스크립트는 그곳에서 작성된 그대로 실행되지 않을 수 있습니다. [Git for Windows](https://git-scm.com/downloads/win)를 설치하거나, Claude Code가 찾지 못하는 위치에 Git Bash가 설치되어 있다면 [`CLAUDE_CODE_GIT_BASH_PATH`](https://code.claude.com/docs/ko/env-vars)를 설정한 다음 새 세션을 시작합니다969* **hook이 경고하기 위해 1로 종료하지만 충돌할 때는 차단해야 하는 경우**: `"onFailure": "continue"`를 사용하면 경고든 충돌이든 종료 코드 1에서 호출이 진행됩니다. 대신 `"onFailure": "block"`을 추가하고, 스크립트가 경고하는 지점에서는 0으로 종료하도록 하여 해당 호출이 진행되도록 합니다. `PreToolUse`에서 경고를 계속 표시하려면 하나의 JSON 객체의 [`systemMessage`](#json-output) 필드에 담아 stdout에 출력합니다.

970* **hook이 Bash용으로 작성된 경우**: Git Bash가 없으면 `shell`이 설정되지 않은 [셸 형식](#exec-form-and-shell-form) hook은 PowerShell에서 실행되며, 그곳에서 실패할 수 있습니다. [Git for Windows](https://git-scm.com/downloads/win)를 설치하거나, Claude Code가 찾지 못하는 위치에 Git Bash가 설치되어 있다면 [`CLAUDE_CODE_GIT_BASH_PATH`](https://code.claude.com/docs/ko/env-vars)를 설정합니다. 그런 다음 새 세션을 시작합니다.

968* **hook이 `.cmd` 또는 `.bat` 파일이 아닌 하나의 `.exe`를 실행하는 경우**: exec 형식을 사용하도록 프로그램을 `command`에, 인수를 `args`에 넣고 `"onFailure": "block"`을 추가합니다. 그러면 Claude Code는 셸 없이 프로그램을 시작합니다. `"onFailure": "block"`이 없으면 프로그램이 실패하거나, 없거나, 시간 초과될 때 호출이 진행될 수 있습니다971* **hook이 `.cmd` 또는 `.bat` 파일이 아닌 하나의 `.exe`를 실행하는 경우**: exec 형식을 사용하도록 프로그램을 `command`에, 인수를 `args`에 넣고 `"onFailure": "block"`을 추가합니다. 그러면 Claude Code는 셸 없이 프로그램을 시작합니다. `"onFailure": "block"`이 없으면 프로그램이 실패하거나, 없거나, 시간 초과될 때 호출이 진행될 수 있습니다

969* **hook이 경고하기 위해 1로 종료하지만 충돌할 때는 차단해야 하는 경우**: `"onFailure": "continue"`를 사용하면 경고든 충돌이든 종료 코드 1에서 호출이 진행됩니다. 대신 `"onFailure": "block"`을 추가하고, 스크립트가 경고하는 지점에서는 종료 코드 0으로 끝내 해당 호출이 진행되도록 합니다. 종료 코드 0 이후 `PreToolUse`에서 경고를 표시하려면 하나의 JSON 객체의 [`systemMessage`](#json-output) 필드에 담아 stdout에 출력합니다

970* **실패 시 차단해야 하는 PowerShell 가드 hook**: `onFailure`가 설정되지 않은 경우, Git for Windows가 설치되고 Claude Code가 Git Bash를 찾으면 더 이상 차단하지 않습니다. Git Bash 유무와 관계없이 실패나 타임아웃이 호출을 차단하도록 `"onFailure": "block"`을 추가합니다. 또한 그 이후에도 hook이 Git Bash 대신 PowerShell에서 계속 실행되도록 `"shell": "powershell"`을 설정합니다972* **실패 시 차단해야 하는 PowerShell 가드 hook**: `onFailure`가 설정되지 않은 경우, Git for Windows가 설치되고 Claude Code가 Git Bash를 찾으면 더 이상 차단하지 않습니다. Git Bash 유무와 관계없이 실패나 타임아웃이 호출을 차단하도록 `"onFailure": "block"`을 추가합니다. 또한 그 이후에도 hook이 Git Bash 대신 PowerShell에서 계속 실행되도록 `"shell": "powershell"`을 설정합니다

971 973 

972이 오류를 표시하는 hook의 경우, hook이 호출을 거부하지 않는 JSON을 출력하더라도 0 또는 2 이외의 종료 코드는 [실패](#block-the-action-when-a-hook-fails)로 간주됩니다.

973 

974v2.1.309 이전에는 메시지가 `blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.`였습니다.974v2.1.309 이전에는 메시지가 `blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.`였습니다.

975 975 

976#### PowerShell started no program

977 

978이 오류가 발생한 hook은 PowerShell에서 실행되었으며, PowerShell은 `"command": "\"C:\\Tools\\guard.exe\""`처럼 따옴표로 묶인 문자열로만 이루어진 `command`를 실행하는 대신 출력합니다.

979 

980* **JSON과 같은 텍스트를 출력하려는 경우**: `"shell": "powershell"`을 설정하면 hook이 0으로 종료합니다

981* **`.ps1`, `.cmd`, `.bat` 파일 또는 경로에 변수가 있는 `.exe`를 실행하려는 경우**: `"shell": "powershell"`을 설정하고 따옴표로 묶인 경로 앞에 `&`를 붙입니다. `$HOME`은 작성된 그대로 두고, 환경 변수는 [`check.ps1` 예제](#reference-scripts-by-path-in-powershell-hooks)에서 `$env:CLAUDE_PROJECT_DIR`를 표기하는 방식으로 표기합니다

982* **`$`가 없는 경로에 있는 하나의 `.exe`를 실행하려는 경우**: `command`에서 안쪽 따옴표를 제거한 다음 [하나의 `.exe`를 실행하는 hook에 대한 해결 방법](#failed-hooks-on-windows-without-git-bash)을 적용합니다. 프로그램이 인수를 받지 않으면 `"args": []`를 작성합니다

983* **Bash용으로 작성된 스크립트를 실행하려는 경우**: [Bash용으로 작성된 hook에 대한 해결 방법](#failed-hooks-on-windows-without-git-bash)을 적용합니다

984 

976#### 이벤트별 종료 코드 2 동작985#### 이벤트별 종료 코드 2 동작

977 986 

978종료 코드 2는 hook이 "멈추고, 이것을 하지 마세요"라고 신호하는 방식입니다. 효과는 이벤트에 따라 다릅니다. 일부 이벤트는 차단할 수 있는 작업(아직 발생하지 않은 도구 호출 등)을 나타내고, 다른 이벤트는 이미 발생했거나 방지할 수 없는 것을 나타내기 때문입니다.987종료 코드 2는 hook이 "멈추고, 이것을 하지 마세요"라고 신호하는 방식입니다. 효과는 이벤트에 따라 다릅니다. 일부 이벤트는 차단할 수 있는 작업(아직 발생하지 않은 도구 호출 등)을 나타내고, 다른 이벤트는 이미 발생했거나 방지할 수 없는 것을 나타내기 때문입니다.


4187}4196}

4188```4197```

4189 4198 

4199### PowerShell 훅에서 경로로 스크립트 참조

4200 

4190PowerShell 셸 형식 명령에서 프로젝트 루트를 참조하려면 `${CLAUDE_PROJECT_DIR}` 또는 `$env:CLAUDE_PROJECT_DIR`을 작성합니다. Claude Code는 훅이 `settings.json`, 플러그인 또는 스킬에 정의되어 있는지 여부와 관계없이 PowerShell 셸 형식 명령에서 `${CLAUDE_PROJECT_DIR}`, `${CLAUDE_PLUGIN_ROOT}` 및 `${CLAUDE_PLUGIN_DATA}` 자리 표시자를 PowerShell의 `${env:NAME}` 형식으로 다시 작성합니다. PowerShell은 구문 분석 후 내보낸 환경에서 값을 확인하므로 자리 표시자는 큰따옴표로 묶인 문자열 내에서는 작동하지만 PowerShell이 변수를 확장하지 않는 작은따옴표로 묶인 문자열 내에서는 작동하지 않습니다.4201PowerShell 셸 형식 명령에서 프로젝트 루트를 참조하려면 `${CLAUDE_PROJECT_DIR}` 또는 `$env:CLAUDE_PROJECT_DIR`을 작성합니다. Claude Code는 훅이 `settings.json`, 플러그인 또는 스킬에 정의되어 있는지 여부와 관계없이 PowerShell 셸 형식 명령에서 `${CLAUDE_PROJECT_DIR}`, `${CLAUDE_PLUGIN_ROOT}` 및 `${CLAUDE_PLUGIN_DATA}` 자리 표시자를 PowerShell의 `${env:NAME}` 형식으로 다시 작성합니다. PowerShell은 구문 분석 후 내보낸 환경에서 값을 확인하므로 자리 표시자는 큰따옴표로 묶인 문자열 내에서는 작동하지만 PowerShell이 변수를 확장하지 않는 작은따옴표로 묶인 문자열 내에서는 작동하지 않습니다.

4191 4202 

4192PowerShell hook에서 `$CLAUDE_PROJECT_DIR`의 단순한 형식을 작성하지 마십시오. PowerShell은 이를 정의되지 않은 로컬 변수로 구문 분석하고 `$null`로 확인하므로 스크립트 경로가 프로젝트 루트 접두사 없이 남습니다. Claude Code는 해당 형식을 다시 작성하지 않으며 대신 [디버그 로그](#debug-hooks)에 경고를 기록합니다.4203PowerShell hook에서 `$CLAUDE_PROJECT_DIR`의 단순한 형식을 작성하지 마십시오. PowerShell은 이를 정의되지 않은 로컬 변수로 구문 분석하고 `$null`로 확인하므로 스크립트 경로가 프로젝트 루트 접두사 없이 남습니다. Claude Code는 해당 형식을 다시 작성하지 않으며 대신 [디버그 로그](#debug-hooks)에 경고를 기록합니다.

jetbrains.md +1 −1

Details

61/ide61/ide

62```62```

63 63 

64연결이 성공하면 Claude Code는 `Connected to IntelliJ IDEA.`와 같은 메시지로 확인합니다. Claude Code가 플러그인이 없는 실행 중인 IDE를 감지하면 `/ide`가 자동으로 플러그인을 설치하고 IDE를 다시 시작하도록 요청합니다.64연결이 성공하면 Claude Code는 `Connected to IntelliJ IDEA.`와 같은 메시지로 확인합니다.

65 65 

66Claude가 IDE와 동일한 파일에 액세스하도록 하려면, IDE 프로젝트 루트와 동일한 디렉터리에서 Claude Code를 시작합니다.66Claude가 IDE와 동일한 파일에 액세스하도록 하려면, IDE 프로젝트 루트와 동일한 디렉터리에서 Claude Code를 시작합니다.

67 67 

Details

504 504 

505## 게이트웨이 오류 문제 해결505## 게이트웨이 오류 문제 해결

506 506 

507Claude Code를 게이트웨이를 통해 실행할 때 가장 일반적인 오류와 게이트웨이 측 원인 및 해결 방법입니다:507다음은 게이트웨이를 통해 Claude Code를 실행할 때 가장 흔히 발생하는 오류와 게이트웨이 측 원인, 해결 방법입니다:

508 508 

509| 오류 | 원인 | 해결 방법 |509| 오류 | 원인 | 해결 방법 |

510| :- | :- | :- |510| :- | :- | :- |

511| 두 자격 증명 소스를 명시하고 `auth may not work as expected`로 끝나는 시작 경고. 이전 버전에서는 대신 `Auth conflict: Both a token (SOURCE) and an API key (SOURCE) are set`이 표시됩니다. | 게이트웨이 자격 증명과 저장된 로그인이 모두 활성화되어 있습니다. 변수는 요청에 사용되지만, 오래된 로그인은 예상치 못한 인증 동작을 유발할 수 있습니다. | 변수를 설정 해제하여 저장된 로그인을 사용하거나, `/logout`을 실행하여 게이트웨이 자격 증명을 사용합니다. |511| 두 개의 자격 증명 출처를 명시하고 `auth may not work as expected`로 끝나는 시작 시 경고. 이전 버전에서는 대신 `Auth conflict: Both a token (SOURCE) and an API key (SOURCE) are set`가 표시됩니다. | 게이트웨이 자격 증명과 저장된 로그인이 모두 활성화되어 있습니다. 요청에는 변수가 사용되지만, 오래된 로그인으로 인해 예기치 않은 인증 동작이 발생할 수 있습니다 | 저장된 로그인을 사용하려면 변수를 해제하고, 게이트웨이 자격 증명을 사용하려면 `/logout`을 실행합니다 |

512| 잘못되거나 인식되지 않는 토큰을 명시하는 `401` 오류 | 자격 증명이 게이트웨이가 발급한 것이 아니거나, 게이트웨이가 읽지 않는 헤더에 있습니다. | 변수가 [자격 증명 표](#set-the-credential-variable)의 자격 증명 종류와 일치하는지 확인하고, 게이트웨이에서 키가 취소된 경우 다시 생성합니다. |512| 유효하지 않거나 인식되지 않는 토큰을 명시하는 `401` 오류 | 자격 증명이 게이트웨이에서 발급한 것이 아니거나, 게이트웨이가 읽지 않는 헤더에 들어 있습니다 | [자격 증명 표](#set-the-credential-variable)에서 변수가 자격 증명 종류와 일치하는지 확인하고, 키가 폐기된 경우 게이트웨이에서 키를 다시 생성합니다 |

513| `Your apiKeyHelper script is failing` 또는 비대화형 모드에서 stderr의 `apiKeyHelper failed:` | [`apiKeyHelper`](https://code.claude.com/docs/ko/settings-reference#apikeyhelper) 설정의 명령이 사용 가능한 키를 생성하지 않아서 요청이 자리 표시자 키를 전달합니다. | 명령을 직접 실행하여 실패 이유를 확인하고, 만료된 세션을 보고하면 자격 증명 제공자로 다시 인증합니다. [오류 참조](https://code.claude.com/docs/ko/errors.md#your-apikeyhelper-script-is-failing)를 참조하세요. |513| `Your apiKeyHelper script is failing`, 또는 비대화형 모드에서 stderr에 출력되는 `apiKeyHelper failed:` | [`apiKeyHelper`](https://code.claude.com/docs/ko/settings-reference#apikeyhelper) 설정의 명령이 사용 가능한 키를 생성하지 못해 요청에 자리 표시자 키가 담깁니다 | 명령을 직접 실행하여 실패 원인을 확인하고, 세션 만료가 보고되면 자격 증명 제공자에서 다시 인증합니다. [오류 참조](https://code.claude.com/docs/ko/errors.md#your-apikeyhelper-script-is-failing)를 참조하세요 |

514| 아무것도 주소에서 응답하지 않을 때 `Connection refused — a firewall or proxy may be blocking it (ConnectionRefused)` 또는 호스트 이름이 확인되지 않을 때 `Can't reach the API server — check your internet or DNS (ENOTFOUND)`, 종종 Claude Code가 [백오프로 재시도](https://code.claude.com/docs/ko/errors.md#automatic-retries)하는 동안 조용한 일시 중지 후. 괄호의 코드는 다양합니다. [Unable to connect to API](https://code.claude.com/docs/ko/errors.md#unable-to-connect-to-api)는 코드 철자와 이전 표현을 다룹니다. | 기본 URL에서 아무것도 응답하지 않았습니다. 주소가 잘못되었거나 VPN 또는 방화벽이 게이트웨이로의 경로를 차단합니다. | 위의 [curl 테스트](#verify-the-connection)를 실행합니다. 동일한 원인으로 즉시 실패하고, 게이트웨이 팀과 URL 및 네트워크 경로를 확인합니다. |514| 주소에서 아무것도 응답하지 않을 때의 `Connection refused — a firewall or proxy may be blocking it (ConnectionRefused)`, 또는 호스트 이름이 확인되지 않을 때의 `Can't reach the API server — check your internet or DNS (ENOTFOUND)`. Claude Code가 [백오프를 적용해 재시도](https://code.claude.com/docs/ko/errors.md#automatic-retries)하는 동안 아무 표시 없이 잠시 멈춘 후에 나타나는 경우가 많습니다. 괄호 안의 코드는 다를 수 있으며, [Unable to connect to API](https://code.claude.com/docs/ko/errors.md#unable-to-connect-to-api)에서 코드 표기와 이전 문구를 다룹니다 | 기본 URL에서 아무것도 응답하지 않았습니다. 주소가 잘못되었거나 VPN 또는 방화벽이 게이트웨이로 가는 경로를 차단하고 있습니다 | [위의 curl 테스트](#verify-the-connection)를 실행하면 같은 원인으로 즉시 실패합니다. 게이트웨이 팀과 함께 URL과 네트워크 경로를 확인합니다 |

515| `API returned an empty or malformed response (HTTP 200)` | 게이트웨이 또는 중간 프록시가 비 API 응답(종종 HTML 오류 또는 로그인 페이지)을 반환했습니다. | 위의 [curl 요청](#verify-the-connection)으로 테스트합니다. Claude API 응답이 아닌 것으로 응답하는 게이트웨이 경로를 수정합니다. [오류 참조](https://code.claude.com/docs/ko/errors.md#api-returned-an-empty-or-malformed-response)는 메시지가 보고하는 세부 정보를 설명합니다. |515| `API returned an empty or malformed response (HTTP 200)` | 게이트웨이 또는 중간 프록시가 API 응답이 아닌 응답, 흔히 HTML 오류 페이지나 로그인 페이지를 반환했습니다 | [위의 curl 요청](#verify-the-connection)으로 테스트하고, Claude API 응답이 아닌 다른 것으로 응답하는 게이트웨이 라우트를 수정합니다. 메시지가 보고하는 세부 정보는 [오류 참조](https://code.claude.com/docs/ko/errors.md#api-returned-an-empty-or-malformed-response)에서 설명합니다 |

516| `context_management`, `Extra inputs are not permitted` 또는 기타 인식되지 않는 필드를 명시하는 `400` 오류 | 게이트웨이가 Claude Code가 Anthropic 형식 엔드포인트에 전송하는 필드를 거부하는 업스트림으로 요청을 전달합니다. | `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`을 설정합니다. 이는 대부분의 사전 릴리스 필드를 억제합니다. [기능 통과](https://code.claude.com/docs/ko/llm-gateway-protocol.md#feature-pass-through)를 참조하세요. 일부 베타는 이 플래그로 제어되지 않습니다. 이들의 경우, 일치하는 `CLAUDE_CODE_USE_*` 제공자 변수를 설정하여 Claude Code가 해당 제공자가 허용하는 것만 전송하도록 합니다. 메시지가 명시하는 필드에 따라 달라지는 단계는 [Extra inputs are not permitted](https://code.claude.com/docs/ko/errors.md#extra-inputs-are-not-permitted)를 참조하세요. |516| `context_management`, `Extra inputs are not permitted` 또는 기타 인식되지 않는 필드를 명시하는 `400` 오류 | 게이트웨이가 Claude Code가 Anthropic 형식 엔드포인트로 보내는 필드를 거부하는 업스트림으로 요청을 전달합니다 | 대부분의 사전 출시 필드를 억제하는 `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`을 설정합니다. [기능 전달](https://code.claude.com/docs/ko/llm-gateway-protocol.md#feature-pass-through)을 참조하세요. 일부 베타는 이 플래그로 제어되지 않습니다. 이 경우 해당하는 `CLAUDE_CODE_USE_*` 제공자 변수를 설정하면 Claude Code가 해당 제공자가 허용하는 것만 보냅니다. 메시지가 명시하는 필드에 따라 달라지는 단계는 [Extra inputs are not permitted](https://code.claude.com/docs/ko/errors.md#extra-inputs-are-not-permitted)를 참조하세요 |

517| `Input tag 'adaptive' found`와 같은 `thinking` 또는 `adaptive`를 명시하는 `400` 오류 | 업스트림 모델 빌드는 Claude Code가 Claude Opus 4.6, Claude Sonnet 4.6, Claude Haiku 5.5, Claude Fable 5 및 이후 모델에 대해 요청하는 적응형 추론을 허용하지 않습니다. | 게이트웨이의 업스트림을 업그레이드합니다. Opus 4.6 및 Sonnet 4.6에서는 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1`이 대신 작동합니다. [모델 구성](https://code.claude.com/docs/ko/model-config.md) 기능 변수는 `CLAUDE_CODE_USE_BEDROCK` 및 `CLAUDE_CODE_USE_VERTEX`와 같은 제공자 구성에만 적용되며, `ANTHROPIC_BASE_URL` 게이트웨이 뒤에는 적용되지 않습니다. |517| `Input tag 'adaptive' found`처럼 `thinking` 또는 `adaptive`를 명시하는 `400` 오류 | 업스트림 모델 빌드가 적응형 추론을 허용하지 않습니다. Claude Code는 Claude Opus 4.6, Claude Sonnet 4.6, Claude Haiku 5.5, Claude Fable 5 및 이후 모델에 대해 적응형 추론을 요청합니다 | 게이트웨이의 업스트림을 업그레이드합니다. Opus 4.6과 Sonnet 4.6에서는 대신 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1`을 사용할 수 있습니다. [모델 구성](https://code.claude.com/docs/ko/model-config.md)의 기능 변수는 `CLAUDE_CODE_USE_BEDROCK` 및 `CLAUDE_CODE_USE_VERTEX` 같은 제공자 구성에만 적용되며, `ANTHROPIC_BASE_URL` 게이트웨이 뒤에서는 적용되지 않습니다 |

518| 게이트웨이 자체 단어로 컨텍스트 또는 토큰 제한을 명시하는 `400` 오류(예: `ContextWindowExceededError` 또는 `prompt token count of N exceeds the limit of M`) | 게이트웨이는 모델의 기본 윈도우보다 작은 컨텍스트를 적용하고 업스트림 오류를 다시 작성하므로, Claude Code는 이를 [너무 긴 오류](https://code.claude.com/docs/ko/errors.md#prompt-is-too-long)로 인식하지 않고 자동으로 compact하고 재시도하지 않습니다. | `/compact`를 실행하여 세션을 복구합니다. 이를 방지하려면 `CLAUDE_CODE_AUTO_COMPACT_WINDOW`를 게이트웨이의 제한으로 설정합니다. Claude Code는 값을 최소 100,000 토큰 이상, 최대 모델의 컨텍스트 윈도우 이하로 제한하므로, 100,000 미만의 게이트웨이 제한은 일치할 수 없고 `/compact`는 거기에서 복구로 남습니다. 또한 `CLAUDE_CODE_MAX_OUTPUT_TOKENS`를 게이트웨이 모델의 출력 제한 아래로 설정합니다. |518| `ContextWindowExceededError` 또는 `prompt token count of N exceeds the limit of M`처럼 게이트웨이 자체 문구로 컨텍스트 또는 토큰 한도를 명시하는 `400` 오류 | 게이트웨이가 모델의 기본 윈도우보다 작은 컨텍스트를 적용하고 업스트림 오류를 다시 작성하므로, Claude Code가 이를 [너무 긴 오류](https://code.claude.com/docs/ko/errors.md#prompt-is-too-long)로 인식하지 못하고 자동으로 압축 후 재시도하지 않습니다 | `/compact`를 실행하여 세션을 복구합니다. 이를 방지하려면 `CLAUDE_CODE_AUTO_COMPACT_WINDOW`를 게이트웨이의 한도로 설정합니다. Claude Code는 이 값을 최소 100,000 토큰, 최대 모델의 컨텍스트 윈도우로 제한하므로 100,000 미만의 게이트웨이 한도에는 맞출 수 없으며, 이 경우에는 `/compact`로 복구해야 합니다. 또한 `CLAUDE_CODE_MAX_OUTPUT_TOKENS`를 게이트웨이 모델의 출력 한도보다 낮게 설정합니다 |

519| `400` 오류가 Claude Code v2.1.265부터 v2.1.267까지의 모든 요청에서 도구의 입력 스키마 또는 `pattern`을 거부합니다. | 이러한 버전의 점진적 롤아웃에서 [Artifact 도구](https://code.claude.com/docs/ko/artifacts.md#availability) 스키마는 `\p{...}` Unicode 문자 클래스가 있는 정규식을 전달합니다. Anthropic API는 이를 허용하지만, 각 도구 스키마의 `pattern`을 자체 정규식 엔진으로 확인하는 게이트웨이 또는 업스트림은 전체 요청을 거부합니다. | v2.1.268 이상으로 업데이트합니다. 이는 정규식을 전송하지 않습니다. 영향을 받는 버전에서는 [artifacts를 끕니다](https://code.claude.com/docs/ko/artifacts.md#disable-artifacts). 이는 도구와 해당 스키마를 요청에서 제거합니다. |519| Claude Code v2.1.265부터 v2.1.267까지에서 발생하는, 도구의 입력 스키마 또는 그 `pattern`을 게이트웨이 자체 문구로 거부하는 모든 요청의 `400` 오류 | 해당 버전의 단계적 출시에서 [Artifact 도구](https://code.claude.com/docs/ko/artifacts.md#availability) 스키마에 `\p{...}` 유니코드 문자 클래스를 포함한 정규 표현식이 담깁니다. Anthropic API는 이를 허용하지만, 자체 정규식 엔진으로 각 도구 스키마의 `pattern`을 검사하는 게이트웨이나 업스트림은 요청 전체를 거부합니다 | 정규 표현식을 보내지 않는 v2.1.268 이상으로 업데이트합니다. 영향을 받는 버전에서는 [아티팩트를 끄면](https://code.claude.com/docs/ko/artifacts.md#disable-artifacts) 요청에서 도구와 그 스키마가 제거됩니다 |

520| Claude Code v2.1.275에서 모든 요청에 대한 `400` 오류이며, 게이트웨이 자체 단어로 인식되지 않는 도구 유형을 거부합니다(예: `Input tag 'advisor_20260301'`). | 해당 버전의 점진적 롤아웃에서, 요청은 advisor가 꺼져 있어도 [advisor 도구](https://code.claude.com/docs/ko/advisor.md) 항목을 전달합니다. Anthropic API는 이를 허용하지만, 도구 유형을 검증하는 게이트웨이 또는 업스트림은 전체 요청을 거부합니다. [요청 본문 필드를 변경되지 않은 상태로 전달](https://code.claude.com/docs/ko/llm-gateway-protocol.md#forward-as-open-lists)하는 항목은 영향을 받지 않고 통과합니다. 항목은 대화 내용을 전달하지 않는 선언입니다. | v2.1.276 이상으로 업데이트합니다. 이는 `ANTHROPIC_BASE_URL` 게이트웨이 뒤에서 advisor를 켜지 않으면 항목을 전송하지 않습니다. v2.1.275에서는 [`CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1`](https://code.claude.com/docs/ko/env-vars)을 설정합니다. 이는 요청에서 항목을 제거합니다. |520| Claude Code v2.1.275에서 발생하는, `Input tag 'advisor_20260301'`처럼 인식되지 않는 도구 유형을 게이트웨이 자체 문구로 거부하는 모든 요청의 `400` 오류 | 해당 버전의 단계적 출시에서 어드바이저가 꺼져 있어도 요청에 [어드바이저 도구](https://code.claude.com/docs/ko/advisor.md) 항목이 담깁니다. Anthropic API는 이를 허용하지만, 도구 유형을 검증하는 게이트웨이나 업스트림은 요청 전체를 거부합니다. [요청 본문 필드를 변경 없이 전달하는](https://code.claude.com/docs/ko/llm-gateway-protocol.md#forward-as-open-lists) 게이트웨이나 업스트림은 영향 없이 이 항목을 그대로 통과시킵니다. 이 항목은 대화 내용을 담지 않는 선언입니다 | v2.1.276 이상으로 업데이트합니다. 이 버전은 어드바이저를 켜지 않는 한 `ANTHROPIC_BASE_URL` 게이트웨이 뒤에서 이 항목을 보내지 않습니다. v2.1.275에서는 [`CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1`](https://code.claude.com/docs/ko/env-vars)을 설정하면 요청에서 이 항목이 제거됩니다 |

521| `/model` 선택기에서 누락된 모델 | 게이트웨이 모델 이름이 Claude Code의 기본 제공 목록에 없거나, Claude Code가 기본 제공 옵션을 대체하는 [`modelPicker`](https://code.claude.com/docs/ko/settings-reference#modelpicker) 라인업을 표시하고 있습니다. | [게이트웨이 모델 검색](#add-gateway-models-to-the-model-picker)을 활성화하거나 [모델 구성](https://code.claude.com/docs/ko/model-config.md) 변수로 이름을 추가합니다. Claude Code가 대체하는 `modelPicker` 라인업을 표시하면, 게이트웨이 모델을 추가하거나 관리되는 설정이 제공할 때 관리자에게 추가하도록 요청합니다. |521| `/model` 선택기에 모델이 표시되지 않음 | 게이트웨이 모델 이름이 Claude Code의 기본 제공 목록에 없거나, Claude Code가 기본 제공 옵션을 대체하는 [`modelPicker`](https://code.claude.com/docs/ko/settings-reference#modelpicker) 라인업을 표시하고 있습니다 | [게이트웨이 모델 검색](#add-gateway-models-to-the-model-picker)을 활성화하거나 [모델 구성](https://code.claude.com/docs/ko/model-config.md) 변수로 이름을 추가합니다. Claude Code가 대체 `modelPicker` 라인업을 표시하는 경우 해당 라인업에 게이트웨이 모델을 추가하거나, 관리형 설정에서 라인업을 제공하는 경우 관리자에게 추가를 요청합니다 |

522| 추론 요청이 작동하는 동안 `/fast`가 `Fast mode unavailable due to network connectivity issues`를 보고합니다. | [빠른 모드](https://code.claude.com/docs/ko/fast-mode.md) 가용성 확인은 `api.anthropic.com`으로 직접 이동하고 `ANTHROPIC_BASE_URL`을 따르지 않으므로, 차단된 직접 송신은 확인을 실패합니다. 확인이 `ANTHROPIC_API_KEY` 또는 `apiKeyHelper`에서 게이트웨이 발급 키를 제시하고 Anthropic이 이를 거부할 때도 동일한 메시지가 나타납니다. | 송신이 차단된 경우 `api.anthropic.com`을 허용 목록에 추가하거나 건너뛰기 변수를 설정합니다. 거부된 게이트웨이 키의 경우 건너뛰기 변수만 도움이 됩니다. [프록시 및 LLM 게이트웨이 뒤에서 빠른 모드 사용](https://code.claude.com/docs/ko/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)을 참조하세요. |522| 추론 요청은 작동하는데 `/fast`가 `Fast mode unavailable due to network connectivity issues`를 보고함 | [빠른 모드](https://code.claude.com/docs/ko/fast-mode.md) 가용성 확인은 `api.anthropic.com`으로 직접 전송되며 `ANTHROPIC_BASE_URL`을 따르지 않으므로, 직접 송신이 차단되면 확인이 실패합니다 | 송신이 차단된 경우 `api.anthropic.com`을 허용 목록에 추가하거나 건너뛰기 변수를 설정합니다. [프록시 및 LLM 게이트웨이 뒤에서 빠른 모드 사용](https://code.claude.com/docs/ko/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)을 참조하세요 |

523| `/fast`가 `ANTHROPIC_AUTH_TOKEN`으로 인증된 세션에서 `Fast mode has been disabled by your organization`을 보고하며, 조직이 빠른 모드를 활성화했음에도 불구하고 | 가용성 확인에는 claude.ai 로그인 또는 Anthropic API 키가 필요합니다. 베어러 토큰만 있으면 Claude Code는 확인을 보내지 않고 빠른 모드를 비활성화된 것으로 취급합니다. | `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`을 설정합니다. [프록시 및 LLM 게이트웨이 뒤에서 빠른 모드 사용](https://code.claude.com/docs/ko/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)을 참조하세요. |523| `ANTHROPIC_API_KEY`에 게이트웨이 발급 키를 사용해 인증하는 세션에서 `/fast`가 `Fast mode is currently unavailable`를 보고함 | `ANTHROPIC_BASE_URL`이 게이트웨이를 가리키는 동안 Claude Code는 Anthropic API 키 형식이 아닌 키를 `api.anthropic.com`에 보내지 않습니다. 그러면 [빠른 모드](https://code.claude.com/docs/ko/fast-mode.md) 가용성 확인이 전송되지 않으며, 이전에 성공한 확인이 캐시되어 있지 않으면 Claude Code는 빠른 모드를 사용할 수 없는 것으로 간주합니다 | `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`을 설정합니다. [프록시 및 LLM 게이트웨이 뒤에서 빠른 모드 사용](https://code.claude.com/docs/ko/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)을 참조하세요 |

524| Claude Code가 [curl 테스트](#verify-the-connection)가 성공하더라도 로그인하도록 요청합니다. | CLI에는 자체 자격 증명이 없습니다. 도달 가능한 기본 URL은 하나가 아니며, 대화형 세션에서 프로젝트의 `.claude/settings.json` 또는 `.claude/settings.local.json`의 `env` 블록은 첫 실행 마법사 및 [신뢰 프롬프트](https://code.claude.com/docs/ko/permissions.md#what-runs-before-you-trust-a-folder) 후에만 적용됩니다. | `ANTHROPIC_AUTH_TOKEN`을 Claude Code가 첫 실행 설정 전에 읽는 곳에 설정합니다: 셸 내보내기, `~/.claude/settings.json`의 `env` 블록 또는 관리되는 설정. |524| 조직에서 빠른 모드를 활성화했는데도 `ANTHROPIC_AUTH_TOKEN`으로 인증한 세션에서 `/fast`가 `Fast mode has been disabled by your organization`를 보고함 | 가용성 확인에는 claude.ai 로그인 또는 API 키가 필요합니다. bearer 토큰만 있으면 Claude Code는 확인을 보내지 않고 빠른 모드를 비활성화된 것으로 간주합니다 | `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`을 설정합니다. [프록시 및 LLM 게이트웨이 뒤에서 빠른 모드 사용](https://code.claude.com/docs/ko/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)을 참조하세요 |

525| `ANTHROPIC_API_KEY`가 설정되었지만 무시되고, 프롬프트가 없습니다. | 키는 대화형 세션에서 일회성 승인이 필요하고, 이전에 거부된 키는 다시 묻지 않고 무시됩니다. | `/config`에서 `Use custom API key` 옵션으로 활성화합니다. |525| [curl 테스트](#verify-the-connection)가 성공하는데도 Claude Code가 로그인을 요청함 | CLI에 자체 자격 증명이 없습니다. 접근 가능한 기본 URL은 자격 증명이 아니며, 대화형 세션에서 프로젝트의 `.claude/settings.json` 또는 `.claude/settings.local.json`에 있는 `env` 블록은 최초 실행 마법사와 [신뢰 프롬프트](https://code.claude.com/docs/ko/permissions.md#what-runs-before-you-trust-a-folder) 이후에만 적용됩니다 | 최초 실행 설정 전에 Claude Code가 읽는 위치에 `ANTHROPIC_AUTH_TOKEN`을 설정합니다. 셸 export, `~/.claude/settings.json`의 `env` 블록 또는 관리형 설정을 사용할 수 있습니다 |

526| `This machine's managed settings require a first-party login`, 또는 관리되는 설정이 `forceLoginMethod`를 `"gateway"`로 설정하거나 `forceLoginGatewayUrl`도 설정할 때 [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/ko/errors#administrator-policy-requires-a-cloud-gateway-sign-in) | 관리되는 설정에 `forceLoginMethod` 또는 `forceLoginOrgUUID`가 포함되어 있으며, `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` 또는 `apiKeyHelper`와 공존할 수 없습니다. | 관리자는 게이트웨이 자격 증명을 사용하려면 관리되는 설정에서 `forceLoginMethod`, `forceLoginOrgUUID` 및 `forceLoginGatewayUrl`을 제거하거나, 게이트웨이 자격 증명을 제거하고 관리되는 설정이 요구하는 로그인을 사용해야 합니다. 둘을 결합할 수 없습니다. |526| `ANTHROPIC_API_KEY`가 설정되어 있지만 확인 요청 없이 무시됨 | 대화형 세션에서는 키에 대한 일회성 승인이 필요하며, 이전에 거부한 키는 다시 묻지 않고 무시됩니다 | `/config`에서 `Use custom API key` 옵션으로 활성화합니다 |

527| `403 Forbidden`과 같은 HTML 본문이 있는 `403`이며, 게이트웨이의 자체 로그에 수신된 요청이 없습니다. | 게이트웨이 앞의 웹 애플리케이션 방화벽 또는 역방향 프록시가 게이트웨이에 도달하기 전에 요청 본문을 차단했습니다. Claude Code 프롬프트에는 XML 스타일 태그와 교차 사이트 스크립팅 본문 규칙과 일치하는 소스 코드가 포함되어 있으므로, 짧은 curl 테스트는 통과하지만 실제 세션은 통과하지 않습니다. | 게이트웨이의 `/v1/messages` 경로를 요청 본문 검사에서 제외합니다. AWS WAF에서는 `CrossSiteScripting_Body` 관리 규칙입니다. nginx와 ModSecurity에서는 동등한 OWASP CRS 본문 규칙입니다. |527| `This machine's managed settings require a first-party login`, 또는 관리형 설정이 `forceLoginMethod`를 `"gateway"`로 설정하거나 `forceLoginGatewayUrl`도 설정한 경우의 [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/ko/errors#administrator-policy-requires-a-cloud-gateway-sign-in) | 관리형 설정에 `forceLoginMethod` 또는 `forceLoginOrgUUID`가 포함되어 있으며, 이는 `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` 또는 `apiKeyHelper`와 함께 사용할 수 없습니다 | 게이트웨이 자격 증명을 사용하려면 관리자가 관리형 설정에서 `forceLoginMethod`, `forceLoginOrgUUID`, `forceLoginGatewayUrl`을 제거해야 합니다. 또는 게이트웨이 자격 증명을 제거하고 관리형 설정이 요구하는 로그인을 사용합니다. 두 가지를 함께 사용할 수는 없습니다 |

528| `SSL certificate verification failed` 또는 `Self-signed certificate detected`와 같은 인증서 또는 TLS 오류이며, [curl 테스트](#verify-the-connection)는 성공합니다. | Claude Code의 런타임이 `curl`이 사용하는 것과 동일한 인증 기관을 신뢰하지 않습니다. 일반적으로 기업 TLS 검사 프록시 뒤에 있습니다. | `NODE_EXTRA_CA_CERTS`를 CA 번들 경로로 설정합니다. [CA 인증서 저장소](https://code.claude.com/docs/ko/network-config.md#ca-certificate-store)를 참조하세요. |528| 게이트웨이 자체 로그에 수신된 요청이 없는데 `403 Forbidden` 같은 HTML 본문과 함께 `403`이 반환됨 | 게이트웨이 앞단의 웹 애플리케이션 방화벽 또는 리버스 프록시가 요청 본문이 게이트웨이에 도달하기 전에 차단했습니다. Claude Code 프롬프트에는 크로스 사이트 스크립팅 본문 규칙과 일치하는 XML 스타일 태그와 소스 코드가 포함되므로, 짧은 curl 테스트는 통과하지만 실제 세션은 통과하지 못합니다 | 게이트웨이의 `/v1/messages` 경로를 요청 본문 검사에서 제외합니다. AWS WAF에서는 `CrossSiteScripting_Body` 관리형 규칙이 해당하며, ModSecurity를 사용하는 nginx에서는 이에 상응하는 OWASP CRS 본문 규칙이 해당합니다 |

529 529| [curl 테스트](#verify-the-connection)는 성공하는데 `SSL certificate verification failed` 또는 `Self-signed certificate detected` 같은 인증서 또는 TLS 오류가 발생함 | Claude Code의 런타임이 `curl`이 사용하는 것과 같은 인증 기관을 신뢰하지 않습니다. 기업용 TLS 검사 프록시 뒤에서 흔히 발생합니다 | `NODE_EXTRA_CA_CERTS`를 CA 번들 경로로 설정합니다. [CA 인증서 저장소](https://code.claude.com/docs/ko/network-config.md#ca-certificate-store)를 참조하세요 |

530게이트웨이 구성을 제거한 후 Claude Code가 반복적으로 로그인하도록 요청하면, 원인은 일반적으로 게이트웨이가 아닌 자격 증명 저장소입니다. [인증 오류](https://code.claude.com/docs/ko/errors.md#authentication-errors)를 참조하세요.530 

531게이트웨이 구성을 제거한 후 Claude Code가 반복적으로 로그인을 요청한다면, 원인은 대개 게이트웨이가 아니라 자격 증명 저장소에 있습니다. [인증 오류](https://code.claude.com/docs/ko/errors.md#authentication-errors)를 참조하세요.

531 532 

532## 관련 리소스533## 관련 리소스

533 534 

mcp.md +3 −3

Details

384이러한 재시도는 다음 경우에는 적용되지 않습니다:384이러한 재시도는 다음 경우에는 적용되지 않습니다:

385 385 

386* stdio 서버의 첫 연결. 다시 시도하려면 [종료되거나 시작에 실패한 stdio 서버](#stdio-servers-that-exit-or-fail-to-start)를 참조하세요386* stdio 서버의 첫 연결. 다시 시도하려면 [종료되거나 시작에 실패한 stdio 서버](#stdio-servers-that-exit-or-fail-to-start)를 참조하세요

387* WebSocket 서버의 첫 연결387* WebSocket 서버의 첫 연결. 대화형 터미널 세션에서 다시 시도하려면 `/mcp`의 서버 메뉴에서 **Reconnect**를 선택하세요

388* 인증 또는 찾을 수 없음 오류. 구성 변경이 필요하기 때문입니다. [`headersHelper`](#use-dynamic-headers-for-custom-authentication)가 서버의 `Authorization` 헤더의 유일한 소스일 때 Claude Code는 인증 오류를 재시도합니다. 각 시도에서 도우미를 다시 실행하고 새 자격 증명을 선택할 수 있기 때문입니다.388* 인증 또는 찾을 수 없음 오류. 구성 변경이 필요하기 때문입니다. [`headersHelper`](#use-dynamic-headers-for-custom-authentication)가 서버의 `Authorization` 헤더의 유일한 소스일 때 Claude Code는 인증 오류를 재시도합니다. 각 시도에서 도우미를 다시 실행하고 새 자격 증명을 선택할 수 있기 때문입니다.

389 389 

390#### 종료되거나 시작에 실패한 stdio 서버390#### 종료되거나 시작에 실패한 stdio 서버


403 403 

404#### 실패한 서버 직접 재시도404#### 실패한 서버 직접 재시도

405 405 

406실패했거나 인증이 필요한 모든 서버를 재시도하려면 `/mcp reconnect all`을 실행하세요. 대화형 터미널에서는 Claude Code v2.1.284 이상이 필요하며, 이전 버전은 그곳에서 `MCP server "all" not found`를 인쇄합니다.406실패했거나 인증이 필요한 모든 서버를 재시도하려면 대화형 터미널 세션의 Claude Code 프롬프트에서 `/mcp reconnect all`을 실행합니다. 이 기능에는 Claude Code v2.1.284 이상이 필요합니다. 이전 버전에서는 `MCP server "all" not found`가 출력됩니다.

407 407 

408#### Claude가 서버 실패를 배우는 방법408#### Claude가 서버 실패를 배우는 방법

409 409 


1332 1332 

1333claude.ai의 서버는 claude.ai에서 온 것을 나타내는 표시기와 함께 목록에 나타납니다.1333claude.ai의 서버는 claude.ai에서 온 것을 나타내는 표시기와 함께 목록에 나타납니다.

1334 1334 

1335Anthropic은 또한 사용자나 관리자가 추가하지 않고도 일부 커넥터를 자체적으로 제공합니다. [Claude Docs](https://code.claude.com/docs/ko/artifacts.md#write-a-document-with-claude-docs)를 사용할 수 있는 계정에서는 `/mcp`가 설정 없이 `claude.ai Claude Docs`를 나열하며, 다른 사람을 위한 문서를 요청할 때 Claude가 이를 사용합니다. 이를 끄려면 `deniedMcpServers`에 `"claude.ai Claude Docs"`의 `serverName` 항목을 추가하거나 [claude.ai 커넥터 비활성화](#disable-claude-ai-connectors)에 설명된 `/mcp` 토글을 사용합니다.1335Anthropic은 또한 사용자나 관리자가 추가하지 않고도 일부 커넥터를 자체적으로 제공합니다. [Claude Docs](https://code.claude.com/docs/ko/artifacts.md#write-a-document-with-claude-docs)를 사용할 수 있는 계정에서는 `/mcp`가 설정 없이 `claude.ai Claude Docs`를 나열하며, 다른 사람을 위한 문서를 요청할 때 Claude가 이를 사용합니다. 이 커넥터만 끄려면 [claude.ai 커넥터 비활성화](#disable-claude-ai-connectors)를 참조하세요.

1336 1336 

1337조직이 claude.ai에서 인증을 관리할 때 Claude Code는 커넥터를 `/mcp`와 [`/plugin`](https://code.claude.com/docs/ko/plugins/install) 관리자에서 `managed`로 표시합니다. Managed 상태는 Claude Code가 커넥터에 연결하는 방식이나 조직의 [도구 제어](#organization-controls-on-connector-tools)를 적용하는 방식을 변경하지 않습니다.1337조직이 claude.ai에서 인증을 관리할 때 Claude Code는 커넥터를 `/mcp`와 [`/plugin`](https://code.claude.com/docs/ko/plugins/install) 관리자에서 `managed`로 표시합니다. Managed 상태는 Claude Code가 커넥터에 연결하는 방식이나 조직의 [도구 제어](#organization-controls-on-connector-tools)를 적용하는 방식을 변경하지 않습니다.

1338 1338 

model-config.md +7 −2

Details

349 349 

350Claude Code가 적용하는 관리형 설정이 `availableModels`를 정의할 때, 해당 목록만 적용됩니다. [자체 목록을 제공하는 호스트 플랫폼](https://code.claude.com/docs/ko/settings.md#exceptions-to-managed-settings-precedence) 제외: 사용자, 프로젝트 또는 로컬 설정의 항목은 이를 확장할 수 없고, Claude Code는 관리형 소스 전체에서 `availableModels`를 병합하지 않습니다. [Claude Code가 관리형 소스를 결합하는 방식](https://code.claude.com/docs/ko/managed-settings.md#how-claude-code-combines-managed-sources)은 어느 소스의 목록이 적용되는지 설명합니다. 그렇지 않으면, 사용자, 프로젝트 및 로컬 설정의 목록은 다른 배열 설정처럼 [연결되고 중복 제거됩니다](https://code.claude.com/docs/ko/settings.md#settings-precedence). Claude Code v2.1.175 이전에는 하위 우선순위 범위의 항목이 관리형 목록으로 병합되었습니다.350Claude Code가 적용하는 관리형 설정이 `availableModels`를 정의할 때, 해당 목록만 적용됩니다. [자체 목록을 제공하는 호스트 플랫폼](https://code.claude.com/docs/ko/settings.md#exceptions-to-managed-settings-precedence) 제외: 사용자, 프로젝트 또는 로컬 설정의 항목은 이를 확장할 수 없고, Claude Code는 관리형 소스 전체에서 `availableModels`를 병합하지 않습니다. [Claude Code가 관리형 소스를 결합하는 방식](https://code.claude.com/docs/ko/managed-settings.md#how-claude-code-combines-managed-sources)은 어느 소스의 목록이 적용되는지 설명합니다. 그렇지 않으면, 사용자, 프로젝트 및 로컬 설정의 목록은 다른 배열 설정처럼 [연결되고 중복 제거됩니다](https://code.claude.com/docs/ko/settings.md#settings-precedence). Claude Code v2.1.175 이전에는 하위 우선순위 범위의 항목이 관리형 목록으로 병합되었습니다.

351 351 

352유효한 목록 내에서, 패밀리의 특정 모델을 이름 지정하는 항목(버전 접두사 또는 전체 모델 ID 여부)은 해당 패밀리의 와일드카드 항목을 비활성화합니다: `["sonnet", "claude-sonnet-4-5"]`는 모든 Sonnet 모델이 아닌 Sonnet 4.5 버전만 허용합니다.352유효한 목록 내에서, 패밀리의 특정 모델을 이름 지정하는 항목은 버전 접두사이든 전체 모델 ID이든 해당 패밀리의 와일드카드 항목을 비활성화합니다. 예를 들어 `["sonnet", "claude-sonnet-4-5"]`를 사용하면, 사용자는 모든 Sonnet 모델이 아니라 `claude-sonnet-4-5`가 [일치하는](#restrict-model-selection) 모델 ID만 선택할 수 있습니다.

353 353 

354### Mantle 모델 ID354### Mantle 모델 ID

355 355 


947>947>

948> [MDM 또는 관리형 설정 파일](https://code.claude.com/docs/ko/managed-settings.md#delivery-mechanisms)을 통해 전달된 `availableModels` 허용 목록은 서드파티 제공업체를 사용할 때도 계속 적용됩니다. [서버 관리형 설정은 해당 환경에 전달되지 않습니다](https://code.claude.com/docs/ko/server-managed-settings.md#platform-availability).948> [MDM 또는 관리형 설정 파일](https://code.claude.com/docs/ko/managed-settings.md#delivery-mechanisms)을 통해 전달된 `availableModels` 허용 목록은 서드파티 제공업체를 사용할 때도 계속 적용됩니다. [서버 관리형 설정은 해당 환경에 전달되지 않습니다](https://code.claude.com/docs/ko/server-managed-settings.md#platform-availability).

949>949>

950> 필터링은 `opus` 같은 모델 별칭, `claude-opus-4-8` 같은 버전 접두사 또는 제공업체 형식의 전체 모델 ID와 일치시킵니다. `us.anthropic.` 같은 제공업체별 접두사는 제거되지 않으므로, 특정 모델을 허용하려면 해당 모델의 제공업체 형식 전체 ID를 나열하거나 [`modelOverrides`](#override-model-ids-per-version)를 통해 매핑합니다. 고정된 모델의 경우 해당 ID는 `ANTHROPIC_DEFAULT_*_MODEL` 변수에 설정한 값입니다. `[1m]` 접미사는 일치 여부를 확인하기 전에 허용 목록 항목과 요청된 모델 양쪽에서 모두 제거됩니다.950> 필터링은 `opus` 같은 모델 별칭, `claude-opus-4-8` 같은 버전 접두사 또는 제공업체 형식의 전체 모델 ID와 일치시킵니다. `us.anthropic.` 같은 제공업체별 접두사는 제거되지 않으므로, 특정 모델을 허용하려면 [`modelOverrides`](#override-model-ids-per-version)를 통해 매핑하거나 해당 모델의 제공업체 형식 전체 ID를 나열합니다.

951>

952> * **Google Cloud의 Agent Platform**: Claude Code가 요청하는 ID에 `claude-sonnet-4-5@20250929`처럼 `@` 날짜가 포함된 경우 허용 목록 항목에 날짜를 포함합니다. `claude-sonnet-4-5`만으로는 어느 [`availableModelsMatch`](https://code.claude.com/docs/ko/settings-reference#availablemodelsmatch) 설정에서도 해당 ID와 일치하지 않습니다.

953> * **고정된 모델**: 해당 모델의 `ANTHROPIC_DEFAULT_*_MODEL` 변수에 설정한 값을 나열합니다

954>

955> `[1m]` 접미사는 일치 여부를 확인하기 전에 허용 목록 항목과 요청된 모델 양쪽에서 모두 제거됩니다.

951 956 

952### 고정된 모델의 표시 및 기능 사용자 지정957### 고정된 모델의 표시 및 기능 사용자 지정

953 958 

Details

605 605 

606* `prompt.id`: 사용자 프롬프트와 다음 프롬프트 전까지의 모든 후속 이벤트를 연결하는 UUID입니다. [이벤트 상관 속성](#event-correlation-attributes)을 참조하세요.606* `prompt.id`: 사용자 프롬프트와 다음 프롬프트 전까지의 모든 후속 이벤트를 연결하는 UUID입니다. [이벤트 상관 속성](#event-correlation-attributes)을 참조하세요.

607* `workspace.host_paths`: 데스크톱 앱에서 선택한 호스트 워크스페이스 디렉터리로, 문자열 배열입니다607* `workspace.host_paths`: 데스크톱 앱에서 선택한 호스트 워크스페이스 디렉터리로, 문자열 배열입니다

608* `workflow.run_id`: `wf_` 접두사가 붙은 실행 식별자로, [Workflow](https://code.claude.com/docs/ko/workflows.md) 도구 실행에 속한 에이전트가 내보내는 API 및 도구 이벤트에 포함됩니다. 하나의 `workflow.run_id`로 이벤트를 필터링하면 해당 실행의 API 요청과 도구 결과를 재구성할 수 있습니다. 이 식별자는 워크플로 스크립트가 생성하는 에이전트와, 스킬 호출처럼 해당 에이전트가 다시 생성하는 에이전트를 모두 포괄합니다. Workflow 도구 결과에 보고되는 실행 식별자와 일치합니다. 다른 모든 이벤트에는 없습니다.608* `workflow.run_id`: [Workflow](https://code.claude.com/docs/ko/workflows.md) 도구 실행에 속한 에이전트가 내보내는 API 및 도구 이벤트에 포함되는 실행 식별자로, `wf_` 접두사가 붙습니다. 하나의 `workflow.run_id`로 이벤트를 필터링하면 해당 실행의 API 요청과 도구 결과를 재구성할 수 있습니다. 이 식별자는 워크플로 스크립트가 생성하는 에이전트와, 그 에이전트가 다시 생성하는 스킬 호출 등의 에이전트를 모두 포괄합니다. Workflow 도구 결과에 보고되는 실행 식별자와 일치합니다.

609* `workflow.name`: 워크플로의 이름으로, 스크립트의 `meta.name`이며 `workflow.run_id`와 함께 내보내집니다. 실행이 수정되지 않은 기본 제공 스크립트를 실행하는 경우 기본 제공 워크플로 이름이 그대로 표시됩니다. 기본 제공 스크립트를 편집한 사본을 포함하여 사용자가 작성한 이름은 `OTEL_LOG_TOOL_DETAILS=1`이 설정되지 않은 한 `custom`으로 대체됩니다.609* `workflow.name`: 워크플로의 이름으로, 스크립트의 `meta.name`이며 `workflow.run_id`와 함께 내보내집니다. 실행이 수정되지 않은 기본 제공 스크립트를 실행하는 경우 기본 제공 워크플로 이름이 그대로 표시됩니다. 기본 제공 스크립트를 편집한 사본을 포함하여 사용자가 작성한 이름은 `OTEL_LOG_TOOL_DETAILS=1`이 설정되지 않은 한 `custom`으로 대체됩니다.

610* `agent_id`: 이벤트를 발생시킨 [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md)의 식별자로, 예를 들면 `a3f2c1b4d5e6f7a80`입니다. 이 속성을 포함하는 이벤트에는 서브에이전트의 API 및 도구 이벤트, 해당 서브에이전트의 [`assistant_response`](#assistant-response-event) 이벤트, 완료된 서브에이전트에 대한 [`subagent_completed`](#subagent-completed-event)가 있습니다. 메인 세션 및 [인프로세스 팀원](https://code.claude.com/docs/ko/agent-teams.md#choose-a-display-mode) 이벤트에는 없습니다. 서브에이전트의 [스팬 `agent_id`](#span-attributes)는 같은 값이거나, `acompact-3f2c1b4d5e6f7a80`처럼 앞의 `a` 뒤에 레이블이 추가된 값입니다. Claude Code v2.1.310 이상이 필요합니다

611* `parent_agent_id`: 이벤트를 발생시킨 서브에이전트를 생성하거나 마지막으로 재개한 에이전트의 `agent_id`입니다. 해당 에이전트가 메인 세션인 경우에는 없습니다. Claude Code v2.1.310 이상이 필요합니다

610 612 

611#### 저장소 속성613#### 저장소 속성

612 614 


755| `prompt.id` | 단일 사용자 프롬프트를 처리하는 동안 생성된 모든 이벤트를 연결하는 UUID v4 식별자 |757| `prompt.id` | 단일 사용자 프롬프트를 처리하는 동안 생성된 모든 이벤트를 연결하는 UUID v4 식별자 |

756| `event.sequence` | 이벤트 순서를 정하기 위한 0부터 시작하는 카운터로, 세션 단위가 아니라 Claude Code 프로세스 단위로 집계됩니다 |758| `event.sequence` | 이벤트 순서를 정하기 위한 0부터 시작하는 카운터로, 세션 단위가 아니라 Claude Code 프로세스 단위로 집계됩니다 |

757| `message.uuid` | 세션 트랜스크립트, 즉 `~/.claude/projects/*/*.jsonl` 파일에 저장된 메시지의 UUID입니다. `assistant_response`, `api_response_body`, 그리고 `user_prompt`에 포함되며, 0개 또는 여러 개의 메시지를 생성할 수 있는 명령 디스패치는 예외입니다. `assistant_response`와 `api_response_body`에서는 응답의 마지막 트랜스크립트 항목으로, 다음 턴의 `parentUuid`가 이 항목에 연결됩니다. `api_response_body`에서는 Claude Code v2.1.274 이상이 필요합니다 |759| `message.uuid` | 세션 트랜스크립트, 즉 `~/.claude/projects/*/*.jsonl` 파일에 저장된 메시지의 UUID입니다. `assistant_response`, `api_response_body`, 그리고 `user_prompt`에 포함되며, 0개 또는 여러 개의 메시지를 생성할 수 있는 명령 디스패치는 예외입니다. `assistant_response`와 `api_response_body`에서는 응답의 마지막 트랜스크립트 항목으로, 다음 턴의 `parentUuid`가 이 항목에 연결됩니다. `api_response_body`에서는 Claude Code v2.1.274 이상이 필요합니다 |

758| `request_id` | 서버가 할당한 API 요청 ID로, `request-id` 응답 헤더에서 읽으며 예를 들면 `req_011...`입니다. [Amazon Bedrock](https://code.claude.com/docs/ko/amazon-bedrock.md)처럼 `request-id` 헤더가 없는 응답에서는 대신 `x-amzn-requestid` 헤더에서 값을 가져옵니다. 응답에 두 헤더 중 하나가 있으면 `api_request`, `api_error`, `api_refusal`, `assistant_response`, `api_response_body`에 포함됩니다. `llm_request` 트레이스 스팬의 동일한 속성과 일치합니다. `x-amzn-requestid` 출처는 Claude Code v2.1.282 이상이 필요합니다 |760| `request_id` | `request-id` 응답 헤더에서 읽은, 서버가 할당한 API 요청 ID입니다. 예: `req_011...`. [Amazon Bedrock](https://code.claude.com/docs/ko/amazon-bedrock.md)처럼 `request-id` 헤더가 없는 응답에서는 대신 `x-amzn-requestid` 헤더에서 값을 가져옵니다. 응답에 두 헤더 중 하나가 있으면 `api_request`, `api_error`, `api_refusal`, `assistant_response`, `api_response_body`, [`tool_result`](#tool-result-event), [`tool_decision`](#tool-decision-event)에 포함됩니다. `llm_request` 트레이스 스팬의 동일한 속성과 일치합니다. `x-amzn-requestid` 출처는 Claude Code v2.1.282 이상이 필요합니다 |

759| `client_request_id` | `x-client-request-id` 요청 헤더로 전송되는 클라이언트 생성 UUID입니다. 퍼스트 파티 API 연결에서 `api_request`와 `api_error`에 포함되며, 서드파티 공급자 백엔드에서나 요청이 비스트리밍 폴백을 통해 재시도된 경우에는 없습니다. 요청과 응답을 짝지으며, 서버 `request_id`를 생성하지 못한 타임아웃 같은 실패에서도 사용할 수 있습니다. `llm_request` 트레이스 스팬의 동일한 속성과 일치합니다 |761| `client_request_id` | `x-client-request-id` 요청 헤더로 전송되는 클라이언트 생성 UUID입니다. 퍼스트 파티 API 연결에서 `api_request`와 `api_error`에 포함되며, 서드파티 공급자 백엔드에서나 요청이 비스트리밍 폴백을 통해 재시도된 경우에는 없습니다. 요청과 응답을 짝지으며, 서버 `request_id`를 생성하지 못한 타임아웃 같은 실패에서도 사용할 수 있습니다. `llm_request` 트레이스 스팬의 동일한 속성과 일치합니다 |

760 762 

761단일 프롬프트가 촉발한 모든 활동을 추적하려면 특정 `prompt.id` 값으로 이벤트를 필터링하세요. 그러면 해당 프롬프트를 처리하는 동안 발생한 user\_prompt 이벤트, 모든 api\_request 이벤트, 모든 tool\_result 이벤트가 반환됩니다.763단일 프롬프트가 촉발한 모든 활동을 추적하려면 특정 `prompt.id` 값으로 이벤트를 필터링하세요. 그러면 해당 프롬프트를 처리하는 동안 발생한 user\_prompt 이벤트, 모든 api\_request 이벤트, 모든 tool\_result 이벤트가 반환됩니다.


820* `event.sequence`: 이벤트 순서를 정하기 위한 프로세스별 카운터로, [이벤트 상관 속성](#event-correlation-attributes)에 설명되어 있습니다822* `event.sequence`: 이벤트 순서를 정하기 위한 프로세스별 카운터로, [이벤트 상관 속성](#event-correlation-attributes)에 설명되어 있습니다

821* `tool_name`: 도구 이름823* `tool_name`: 도구 이름

822* `tool_use_id`: 이 도구 호출의 고유 식별자입니다. 훅에 전달되는 `tool_use_id`와 일치하므로 OTel 이벤트와 훅이 캡처한 데이터를 상호 연관시킬 수 있습니다.824* `tool_use_id`: 이 도구 호출의 고유 식별자입니다. 훅에 전달되는 `tool_use_id`와 일치하므로 OTel 이벤트와 훅이 캡처한 데이터를 상호 연관시킬 수 있습니다.

825* `request_id`: 이 도구 호출을 포함한 API 응답의 [`request_id`](#event-correlation-attributes)로, 이를 통해 호출을 해당 응답의 API 이벤트와 조인할 수 있습니다. 해당 응답에 요청 ID가 없거나 호출을 포함한 API 응답이 없는 경우에는 없습니다. Claude Code v2.1.310 이상이 필요합니다

823* `success`: `"true"` 또는 `"false"`826* `success`: `"true"` 또는 `"false"`

824* `duration_ms`: 실행 시간(밀리초)827* `duration_ms`: 실행 시간(밀리초)

825* `error_type`: 도구가 실패한 경우 오류 범주 문자열로, `"Error:ENOENT"` 또는 `"ShellError"` 등이 있습니다828* `error_type`: 도구가 실패한 경우 오류 범주 문자열로, `"Error:ENOENT"` 또는 `"ShellError"` 등이 있습니다


972* `event.sequence`: 이벤트 순서를 정하기 위한 프로세스별 카운터로, [이벤트 상관 속성](#event-correlation-attributes)에 설명되어 있습니다975* `event.sequence`: 이벤트 순서를 정하기 위한 프로세스별 카운터로, [이벤트 상관 속성](#event-correlation-attributes)에 설명되어 있습니다

973* `tool_name`: 도구 이름(예: "Read", "Edit", "Write", "NotebookEdit")976* `tool_name`: 도구 이름(예: "Read", "Edit", "Write", "NotebookEdit")

974* `tool_use_id`: 이 도구 호출의 고유 식별자입니다. 훅에 전달되는 `tool_use_id`와 일치하므로 OTel 이벤트와 훅이 캡처한 데이터를 상호 연관시킬 수 있습니다.977* `tool_use_id`: 이 도구 호출의 고유 식별자입니다. 훅에 전달되는 `tool_use_id`와 일치하므로 OTel 이벤트와 훅이 캡처한 데이터를 상호 연관시킬 수 있습니다.

978* `request_id`: 이 도구 호출을 포함한 API 응답의 [`request_id`](#event-correlation-attributes)로, 이를 통해 호출을 해당 응답의 API 이벤트와 조인할 수 있습니다. 해당 응답에 요청 ID가 없거나 호출을 포함한 API 응답이 없는 경우에는 없습니다. Claude Code v2.1.310 이상이 필요합니다

975* `decision`: `"accept"` 또는 `"reject"`979* `decision`: `"accept"` 또는 `"reject"`

976* `tool_source`: 항상 포함됩니다. 도구의 출처로, CLI가 작성한 닫힌 값 집합입니다.980* `tool_source`: 항상 포함됩니다. 도구의 출처로, CLI가 작성한 닫힌 값 집합입니다.

977 * `"builtin"`: CLI 자체 도구981 * `"builtin"`: CLI 자체 도구


1024 * Skill 도구의 경우: `skill_name`을 포함합니다1028 * Skill 도구의 경우: `skill_name`을 포함합니다

1025 * Agent 도구 또는 레거시 Task 도구의 경우: `subagent_type`을 포함합니다1029 * Agent 도구 또는 레거시 Task 도구의 경우: `subagent_type`을 포함합니다

1026 1030 

1027OpenTelemetry SDK의 `OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT`를 `tool_decision` 이벤트의 속성 수보다 낮게 설정하면, SDK는 Claude Code가 마지막으로 설정한 속성을 삭제합니다. SDK는 `permission_mode`를 가장 먼저, `classifier_category`를 두 번째로, `classifier_verdict`를 세 번째로 삭제하며, 이 세 가지를 삭제한 후에야 이벤트의 다른 속성을 삭제합니다. 이 순서는 Claude Code v2.1.302 이상이 필요합니다.1031OpenTelemetry SDK의 `OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT`을 `tool_decision` 이벤트의 속성 수보다 낮게 설정하면, SDK는 Claude Code가 마지막으로 설정한 속성을 삭제합니다. SDK는 다른 어떤 속성보다 먼저 다음 순서로 이 속성들을 삭제하며, 이벤트에 없는 속성은 건너뜁니다.

1032 

10331. `parent_agent_id`

10342. `agent_id`

10353. `request_id`

10364. `permission_mode`

10375. `classifier_category`

10386. `classifier_verdict`

1039 

1040`permission_mode`, `classifier_category`, `classifier_verdict`는 Claude Code v2.1.302 이상에서 이 순서로 삭제됩니다. `parent_agent_id`, `agent_id`, `request_id`는 v2.1.310 이상이 필요합니다.

1028 1041 

1029#### 안전 이벤트1042#### 안전 이벤트

1030 1043 

Details

240 240 

241두 개의 Datadog 수집 호스트는 선택적 운영 원격 분석만 전달하며, [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/ko/env-vars)을 설정하면 둘 다 비활성화됩니다. 타사 제공자의 세션은 플랫폼이 [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/ko/env-vars)를 설정하고 원격 분석 메트릭이 기본적으로 켜져 있더라도 이러한 호스트로 절대 전송하지 않습니다. Claude Code가 전송하는 모든 것과 허용 목록을 최종화하기 전에 비활성화하는 방법은 [원격 분석 서비스](https://code.claude.com/docs/ko/data-usage.md#telemetry-services)를 참조하십시오.241두 개의 Datadog 수집 호스트는 선택적 운영 원격 분석만 전달하며, [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/ko/env-vars)을 설정하면 둘 다 비활성화됩니다. 타사 제공자의 세션은 플랫폼이 [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/ko/env-vars)를 설정하고 원격 분석 메트릭이 기본적으로 켜져 있더라도 이러한 호스트로 절대 전송하지 않습니다. Claude Code가 전송하는 모든 것과 허용 목록을 최종화하기 전에 비활성화하는 방법은 [원격 분석 서비스](https://code.claude.com/docs/ko/data-usage.md#telemetry-services)를 참조하십시오.

242 242 

243### 클라우드 제공자 및 LLM 게이트웨이 라우팅

244 

243[Amazon Bedrock](https://code.claude.com/docs/ko/amazon-bedrock.md), [Google Cloud의 Agent Platform](https://code.claude.com/docs/ko/google-vertex-ai.md), [Microsoft Foundry](https://code.claude.com/docs/ko/microsoft-foundry.md) 또는 로그인한 [Claude 앱 게이트웨이](https://code.claude.com/docs/ko/claude-apps-gateway) 세션을 사용할 때, 모델 트래픽 및 인증은 `api.anthropic.com`, `claude.ai` 또는 `platform.claude.com` 대신 제공자 또는 게이트웨이로 이동합니다. WebFetch 도구는 [설정](https://code.claude.com/docs/ko/settings.md)에서 `skipWebFetchPreflight: true`를 설정하지 않는 한 여전히 [도메인 안전 확인](https://code.claude.com/docs/ko/data-usage.md#webfetch-domain-safety-check)을 위해 `api.anthropic.com`을 호출합니다.245[Amazon Bedrock](https://code.claude.com/docs/ko/amazon-bedrock.md), [Google Cloud의 Agent Platform](https://code.claude.com/docs/ko/google-vertex-ai.md), [Microsoft Foundry](https://code.claude.com/docs/ko/microsoft-foundry.md) 또는 로그인한 [Claude 앱 게이트웨이](https://code.claude.com/docs/ko/claude-apps-gateway) 세션을 사용할 때, 모델 트래픽 및 인증은 `api.anthropic.com`, `claude.ai` 또는 `platform.claude.com` 대신 제공자 또는 게이트웨이로 이동합니다. WebFetch 도구는 [설정](https://code.claude.com/docs/ko/settings.md)에서 `skipWebFetchPreflight: true`를 설정하지 않는 한 여전히 [도메인 안전 확인](https://code.claude.com/docs/ko/data-usage.md#webfetch-domain-safety-check)을 위해 `api.anthropic.com`을 호출합니다.

244 246 

245[`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/ko/llm-gateway-connect#set-the-base-url-and-credential)을 사용하여 [LLM 게이트웨이](https://code.claude.com/docs/ko/llm-gateway)를 통해 라우팅할 때, [빠른 모드](https://code.claude.com/docs/ko/fast-mode.md) 가용성 확인은 게이트웨이 기본 URL 대신 `api.anthropic.com`을 호출합니다. 확인은 구성된 HTTP 프록시를 준수하므로 네트워크 블록이 원인인 경우 프록시의 `api.anthropic.com`에 대한 허용 목록 항목이 해결책입니다. 네트워크 블록은 호스트가 프록시를 통해서도 도달할 수 없는 경우에만 확인에 실패하며, 빠른 모드는 연결 오류를 보고합니다. 확인이 Anthropic이 거부하는 게이트웨이 발급 자격 증명을 제시할 때도 동일한 연결 오류가 나타납니다. 아무것도 차단되지 않으므로 허용 목록이 도움이 되지 않습니다. 빠른 모드를 복원하는 변수는 [프록시 및 LLM 게이트웨이 뒤에서 빠른 모드 사용](https://code.claude.com/docs/ko/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)을 참조하십시오.247개발자가 [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/ko/llm-gateway-connect#set-the-base-url-and-credential)로 설정된 [LLM 게이트웨이](https://code.claude.com/docs/ko/llm-gateway) 뒤에서 [빠른 모드](https://code.claude.com/docs/ko/fast-mode.md)를 사용하는 경우, 프록시를 통해 `api.anthropic.com`에 도달할 수 있도록 유지하십시오. Claude Code가 빠른 모드 가용성 확인을 전송할 때, 이 확인은 구성된 HTTP 프록시를 통해 해당 호스트로 전송되며 게이트웨이로는 절대 전송되지 않습니다. 확인이 전송되지 않는 경우와 각 경우에 빠른 모드를 복원하는 변수는 [프록시 및 LLM 게이트웨이 뒤에서 빠른 모드 사용](https://code.claude.com/docs/ko/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)을 참조하십시오.

246 248 

247### 조직 IP 허용 목록 및 프록시 송신249### 조직 IP 허용 목록 및 프록시 송신

248 250 

Details

106 106 

107훅 모듈의 코드가 너무 깊게 중첩되어 있거나 import 체인이 너무 길어서 Claude Code가 모듈을 로드할 수 없습니다. 이 줄은 mod 이름과 `hooks module did not load:`로 시작하고, 그 뒤에 파일 이름과 이 이유가 나옵니다.107훅 모듈의 코드가 너무 깊게 중첩되어 있거나 import 체인이 너무 길어서 Claude Code가 모듈을 로드할 수 없습니다. 이 줄은 mod 이름과 `hooks module did not load:`로 시작하고, 그 뒤에 파일 이름과 이 이유가 나옵니다.

108 108 

109해당 파일과 그 파일의 import를 통해 연결되는 파일에서 가장 깊게 중첩된 부분을 찾아 덜 중첩되도록 다시 작성하거나, import 체인을 줄입니다. mod를 직접 작성하지 않고 설치한 경우 mod 작성자에게 수정을 요청합니다.109해당 파일과 그 파일의 import를 통해 연결되는 파일에서 가장 깊게 중첩된 부분을 찾아 덜 중첩되도록 다시 작성하거나, import 체인을 줄입니다. mod를 직접 작성하지 않았다면 mod 작성자에게 수정을 요청합니다.

110 110 

111### `the parser stopped` or `the engine ran out of stack loading the file`111### `the parser stopped` or `the engine ran out of stack loading the file`

112 112 

routines.md +20 −2

Details

25* API 트리거만 있는 작업은 해당 엔드포인트를 호출할 때 실행됩니다.25* API 트리거만 있는 작업은 해당 엔드포인트를 호출할 때 실행됩니다.

26* GitHub 트리거만 있는 작업은 일치하는 저장소 이벤트가 발생할 때 실행됩니다.26* GitHub 트리거만 있는 작업은 일치하는 저장소 이벤트가 발생할 때 실행됩니다.

27 27 

28예약 작업은 Pro, Max, Team 및 Enterprise 플랜에서 사용할 수 있습니다. [claude.ai/code/routines](https://claude.ai/code/routines)에서 또는 CLI에서 `/schedule`로 만들고 관리합니다. 이전 명칭인 루틴은 웹 주소, CLI 및 API에 [여전히 나타납니다](#where-the-name-routines-still-appears).28예약 작업은 Pro, Max, Team 및 Enterprise 플랜에서 사용할 수 있습니다. [claude.ai/code/routines](https://claude.ai/code/routines)에서 또는 CLI에서 `/schedule`로 만들고 관리합니다. 이전 명칭인 루틴은 [여전히 나타납니다](#where-the-name-routines-still-appears).

29 29 

30> [!NOTE]30> [!NOTE]

31>31>


66 66 

67**1. 생성 대화 상자 열기**67**1. 생성 대화 상자 열기**

68 68 

69[claude.ai/code/routines](https://claude.ai/code/routines)로 이동하여 **New task**를 클릭합니다. 메뉴가 먼저 열리면 **Set up manually**를 선택합니다. **New scheduled task** 대화 상자가 열립니다. 메뉴의 다른 옵션인 **Create with Claude**를 사용하면 채팅으로 작업을 설명하고 Claude가 대신 작업을 만들도록 할 수 있습니다.69[claude.ai/code/routines](https://claude.ai/code/routines)로 이동하여 **New task**를 클릭해 **New scheduled task** 대화 상자를 엽니다. 계속하기 전에 다음 화면이 나타나는지 확인하십시오.

70 

71* 버튼에 **New task** 대신 **New routine**이 표시되면 **New routine**을 클릭하고 [전체 페이지 양식](#full-page-form)으로 이어서 진행합니다.

72* 데스크톱 앱에서 **Local**과 **Cloud**가 있는 메뉴가 열리면 [전체 페이지 양식](#full-page-form)으로 이동합니다.

73* **Create with Claude**와 **Set up manually**가 있는 메뉴가 열리면 **Set up manually**를 선택하여 대화 상자를 엽니다. **Create with Claude**를 사용하면 채팅으로 작업을 설명하고 Claude가 대신 작업을 만들도록 할 수 있습니다.

74* 대화 상자 대신 전체 페이지가 열리면 [전체 페이지 양식](#full-page-form)으로 이동합니다.

70 75 

71대화 상자가 열릴 때 **Repositories**와 **Environment**가 이미 표시되어 있다면 [해당 대화 상자의 차이점](#dialog-with-repositories-and-environment-in-the-main-view)을 참조하십시오. 그렇지 않은 경우 이 대화 상자는 claude.ai 채팅용 예약 작업도 만듭니다. 대화 상자에서 Claude Code 작업이라고 부르는 작업으로 만들려면, 이어지는 단계에서 저장소를 선택하거나 GitHub 이벤트 또는 API 트리거를 추가합니다. 이러한 종류의 작업은 클라우드 세션에서 Claude Code를 실행합니다.76대화 상자가 열릴 때 **Repositories**와 **Environment**가 이미 표시되어 있다면 [해당 대화 상자의 차이점](#dialog-with-repositories-and-environment-in-the-main-view)을 참조하십시오. 그렇지 않은 경우 이 대화 상자는 claude.ai 채팅용 예약 작업도 만듭니다. 대화 상자에서 Claude Code 작업이라고 부르는 작업으로 만들려면, 이어지는 단계에서 저장소를 선택하거나 GitHub 이벤트 또는 API 트리거를 추가합니다. 이러한 종류의 작업은 클라우드 세션에서 Claude Code를 실행합니다.

72 77 


126 131 

127GitHub 이벤트 트리거는 저장소를 선택하기 전까지 사용할 수 없으므로, 트리거를 추가하기 전에 저장소를 선택하십시오.132GitHub 이벤트 트리거는 저장소를 선택하기 전까지 사용할 수 없으므로, 트리거를 추가하기 전에 저장소를 선택하십시오.

128 133 

134#### 전체 페이지 양식

135 

136데스크톱 앱에서 **Local**과 **Cloud**가 있는 메뉴가 열리면 **Cloud**를 선택합니다. **New routine** 또는 **New scheduled task**라는 제목의 페이지가 열립니다. 다음 필드를 입력합니다.

137 

138* **Name**: 이름을 입력합니다.

139* **Instructions**: 프롬프트를 입력합니다. 같은 입력란에서 모델, 저장소 및 환경을 선택합니다. 각 항목이 제어하는 내용은 [웹에서 만들기](#create-from-the-web)의 단계를 참조하십시오.

140* **Select a trigger**: **Schedule**, **GitHub event** 또는 **API**를 선택합니다. 일정의 경우 [일정 트리거 추가](#add-a-schedule-trigger)를 참조하십시오. [GitHub 이벤트](#add-a-github-trigger)의 경우 저장소를 선택합니다. [API 트리거](#add-an-api-trigger)의 경우 **Create**를 클릭한 후 열리는 **API token** 대화 상자에서 토큰을 복사하십시오. 토큰은 한 번만 표시됩니다. 여러 트리거를 결합하려면 **Add another trigger**를 클릭합니다.

141* **Connectors**: 연결된 모든 커넥터가 기본적으로 포함되므로 작업에 필요하지 않은 커넥터는 제거하십시오.

142 

143**Create**를 사용할 수 없는 경우 마우스를 올려 양식에 아직 필요한 항목을 확인합니다. **Create**를 클릭하면 작업의 세부 정보 페이지가 열립니다.

144 

129### CLI에서 만들기145### CLI에서 만들기

130 146 

131아무 세션에서나 `/schedule`을 실행하여 대화식으로 예약 작업을 만듭니다. 반복 작업의 경우 `/schedule daily PR review at 9am`, 일회성 작업의 경우 `/schedule clean up feature flag in one week`와 같이 설명을 직접 전달할 수도 있습니다. Claude는 웹 대화 상자가 수집하는 것과 동일한 정보를 안내한 후 작업을 계정에 저장합니다. 이 명령은 별칭 `/routines`로도 사용할 수 있습니다.147아무 세션에서나 `/schedule`을 실행하여 대화식으로 예약 작업을 만듭니다. 반복 작업의 경우 `/schedule daily PR review at 9am`, 일회성 작업의 경우 `/schedule clean up feature flag in one week`와 같이 설명을 직접 전달할 수도 있습니다. Claude는 웹 대화 상자가 수집하는 것과 동일한 정보를 안내한 후 작업을 계정에 저장합니다. 이 명령은 별칭 `/routines`로도 사용할 수 있습니다.


152* **정각 실행**: 9:00처럼 정확히 정각에 실행을 예약하면 몇 분 늦게 시작될 수 있습니다. 예약된 시간에 가깝게 시작하려면 정각에서 몇 분 지난 시간(예: 9:07)을 선택하십시오.168* **정각 실행**: 9:00처럼 정확히 정각에 실행을 예약하면 몇 분 늦게 시작될 수 있습니다. 예약된 시간에 가깝게 시작하려면 정각에서 몇 분 지난 시간(예: 9:07)을 선택하십시오.

153* **사용자 정의 간격**: 사전 설정에 없는 주기가 필요하면 작업을 만든 다음 [편집 대화 상자](#edit-and-control-scheduled-tasks)에서 **Custom**을 선택합니다. 그런 다음 2시간마다 실행하는 `0 */2 * * *`와 같은 cron 표현식을 입력합니다. CLI에서 설정하려면 [`/schedule update`](#manage-scheduled-tasks-from-the-cli)를 실행합니다. 1시간에 한 번보다 더 자주 실행되는 표현식은 거부됩니다.169* **사용자 정의 간격**: 사전 설정에 없는 주기가 필요하면 작업을 만든 다음 [편집 대화 상자](#edit-and-control-scheduled-tasks)에서 **Custom**을 선택합니다. 그런 다음 2시간마다 실행하는 `0 */2 * * *`와 같은 cron 표현식을 입력합니다. CLI에서 설정하려면 [`/schedule update`](#manage-scheduled-tasks-from-the-cli)를 실행합니다. 1시간에 한 번보다 더 자주 실행되는 표현식은 거부됩니다.

154* **시간대**: 사전 설정 빈도를 선택할 때는 로컬 시간대로 시간을 입력합니다.170* **시간대**: 사전 설정 빈도를 선택할 때는 로컬 시간대로 시간을 입력합니다.

171* **cron 표현식 시간대**: 표현식이 다섯 개의 필드로만 구성된 경우 시간을 UTC로 작성합니다. 따라서 `0 9 * * 1-5`는 평일 UTC 오전 9:00에 실행됩니다. 필드가 `CRON_TZ=` 접두사로 시작하면 이를 유지하고 해당 시간대로 시간을 작성하거나, 접두사를 삭제하고 UTC로 작성합니다.

155 172 

156#### 일회성 실행 예약173#### 일회성 실행 예약

157 174 


455 472 

456예약 작업은 이전에 루틴이라고 불렸으며, 다음 위치에서는 이전 이름을 유지합니다. 모두 동일한 기능을 가리킵니다.473예약 작업은 이전에 루틴이라고 불렸으며, 다음 위치에서는 이전 이름을 유지합니다. 모두 동일한 기능을 가리킵니다.

457 474 

475* **앱**: 일부 계정에서는 사이드바 항목과 페이지 제목이 **Routines**로, 버튼이 **New routine**으로 표시되며, 다른 레이블에도 routine이라고 표시됩니다. 이 경우 작업을 만드는 방법은 [전체 페이지 양식](#full-page-form)을 참조하세요.

458* **웹 주소**: `claude.ai/code/routines`476* **웹 주소**: `claude.ai/code/routines`

459* **CLI**: `/schedule`의 별칭인 `/routines`, 명령의 설명, 그리고 작업을 설정하는 동안의 Claude 응답477* **CLI**: `/schedule`의 별칭인 `/routines`, 명령의 설명, 그리고 작업을 설정하는 동안의 Claude 응답

460* **API**: `/fire` 엔드포인트 경로, 베타 헤더, 응답의 `type`, `<routine-fire-payload>` 태그, 그리고 [Trigger a routine through the API](https://platform.claude.com/docs/en/api/claude-code/routines-fire) 참조 페이지478* **API**: `/fire` 엔드포인트 경로, 베타 헤더, 응답의 `type`, `<routine-fire-payload>` 태그, 그리고 [Trigger a routine through the API](https://platform.claude.com/docs/en/api/claude-code/routines-fire) 참조 페이지

sandboxing.md +13 −1

Details

537 537 

538* **작업 디렉터리와 그 상위 디렉터리**: `.claude` 설정 파일, `.claude/skills`, `.claude/agents`, `.claude/commands`, `.claude/hooks` 디렉터리, `.mcp.json`, 그리고 `.claude/workflows`와 `.claude/scheduled_tasks.json`처럼 Claude Code가 자체적으로 실행하는 파일538* **작업 디렉터리와 그 상위 디렉터리**: `.claude` 설정 파일, `.claude/skills`, `.claude/agents`, `.claude/commands`, `.claude/hooks` 디렉터리, `.mcp.json`, 그리고 `.claude/workflows`와 `.claude/scheduled_tasks.json`처럼 Claude Code가 자체적으로 실행하는 파일

539* **작업 디렉터리에만 해당**: `.bashrc`와 `.zshrc` 같은 셸 시작 파일, `.gitconfig`, `.vscode`와 `.idea` 디렉터리, 그리고 `.git` 안의 `hooks`와 `config`539* **작업 디렉터리에만 해당**: `.bashrc`와 `.zshrc` 같은 셸 시작 파일, `.gitconfig`, `.vscode`와 `.idea` 디렉터리, 그리고 `.git` 안의 `hooks`와 `config`

540* **작업 디렉터리를 bare git 저장소로 바꿀 수 있는 파일**: 최상위 수준의 `HEAD`, `objects`, `refs`, 그리고 그 옆에 `HEAD`가 있을 때 해당 위치에 이미 존재하는 `config`와 `hooks` 항목. `config`라는 이름의 파일은 `HEAD`가 없어도 거부됩니다. Linux와 WSL2에서는 샌드박스된 명령이 실행되는 동안 나타나는 최상위 `HEAD` 파일이나 `objects` 또는 `refs` 디렉터리를 샌드박스가 삭제합니다540* **작업 디렉터리를 bare git 저장소로 바꿀 수 있는 파일**: 최상위 수준의 `HEAD`, `objects`, `refs`, 그리고 그 옆에 `HEAD` 파일이나 심볼릭 링크가 있을 때 해당 위치에 이미 존재하는 `config`와 `hooks` 항목. `config`라는 이름의 파일은 `HEAD`가 없어도 거부됩니다. [나중에 나타나는 `HEAD`, `objects` 또는 `refs`는 삭제될 수 있습니다](#when-the-sandbox-deletes-head-objects-or-refs). Linux와 WSL2에서는 샌드박스된 명령이 해당 항목이 없는 위치에 새로 만들 수 있습니다.

541* **`~/.claude` 또는 `CLAUDE_CONFIG_DIR`이 가리키는 디렉터리**: 해당 디렉터리 내용의 대부분, 그리고 `~/.claude.json`과 `.credentials.json` 자격 증명 저장소541* **`~/.claude` 또는 `CLAUDE_CONFIG_DIR`이 가리키는 디렉터리**: 해당 디렉터리 내용의 대부분, 그리고 `~/.claude.json`과 `.credentials.json` 자격 증명 저장소

542 542 

543세션 중에 보호된 설정 파일의 경로에 심볼릭 링크가 나타나면, 샌드박스는 다음 명령부터 해당 링크가 가리키는 파일에 대한 쓰기도 거부합니다.543세션 중에 보호된 설정 파일의 경로에 심볼릭 링크가 나타나면, 샌드박스는 다음 명령부터 해당 링크가 가리키는 파일에 대한 쓰기도 거부합니다.


552 552 

553이러한 경로 중 하나에서 `git merge` 또는 `git checkout`이 `unable to unlink old`와 함께 실패하면 [git 명령이 `unable to unlink old`로 실패하는 경우](#a-git-command-fails-with-unable-to-unlink-old)를 참조하십시오.553이러한 경로 중 하나에서 `git merge` 또는 `git checkout`이 `unable to unlink old`와 함께 실패하면 [git 명령이 `unable to unlink old`로 실패하는 경우](#a-git-command-fails-with-unable-to-unlink-old)를 참조하십시오.

554 554 

555#### 샌드박스가 `HEAD`, `objects` 또는 `refs`를 삭제하는 경우

556 

557샌드박스된 명령이 끝난 후, 작업 디렉터리에 새로 생긴 최상위 `HEAD`, `objects` 또는 `refs` 항목은 내용이 있는 폴더가 아닌 한 삭제됩니다. 새로 생긴 항목이란 샌드박스가 마지막으로 구성을 빌드했을 때, 즉 세션 시작 시 또는 [`/cd`](https://code.claude.com/docs/ko/commands) 같은 변경 후에 존재하지 않았던 항목을 의미합니다.

558 

559샌드박스가 마지막으로 구성을 빌드했을 때 `HEAD` 파일이나 심볼릭 링크가 있었다면, 새로 생긴 내용이 있는 `objects` 또는 `refs` 폴더도 그 내용과 함께 삭제됩니다. 폴더를 유지하려면 [명령 실행 후 `objects` 또는 `refs`라는 이름의 폴더가 사라지는 경우](#a-folder-named-objects-or-refs-disappears-after-a-command)를 참조하십시오.

560 

555#### 심볼릭 링크를 통과하는 거부된 경로561#### 심볼릭 링크를 통과하는 거부된 경로

556 562 

557macOS에서 거부된 경로가 심볼릭 링크를 통과하는 경우(예: dotfiles 저장소로 연결된 링크인 `~/.claude`), 샌드박스는 해당 경로의 실제 위치도 거부합니다. 이는 샌드박스 자체의 거부와 사용자가 문자 그대로 지정한 `denyWrite` 및 `denyRead` 항목 모두에 적용됩니다.563macOS에서 거부된 경로가 심볼릭 링크를 통과하는 경우(예: dotfiles 저장소로 연결된 링크인 `~/.claude`), 샌드박스는 해당 경로의 실제 위치도 거부합니다. 이는 샌드박스 자체의 거부와 사용자가 문자 그대로 지정한 `denyWrite` 및 `denyRead` 항목 모두에 적용됩니다.


881 887 

882실패 후 Claude는 [명령을 샌드박스 외부에서 다시 실행하도록 제안](#the-unsandboxed-retry-escape-hatch)할 수 있습니다. 해당 재시도를 승인하거나 다른 터미널에서 git 명령을 직접 실행합니다. `allowUnsandboxedCommands`를 `false`로 설정한 경우 Claude는 재시도를 제안할 수 없으므로 명령을 직접 실행합니다.888실패 후 Claude는 [명령을 샌드박스 외부에서 다시 실행하도록 제안](#the-unsandboxed-retry-escape-hatch)할 수 있습니다. 해당 재시도를 승인하거나 다른 터미널에서 git 명령을 직접 실행합니다. `allowUnsandboxedCommands`를 `false`로 설정한 경우 Claude는 재시도를 제안할 수 없으므로 명령을 직접 실행합니다.

883 889 

890### `objects` 또는 `refs`라는 폴더가 명령 후 사라짐

891 

892세션 중에 나타난 최상위 `objects` 또는 `refs` 폴더는 [샌드박싱된 명령이 끝난 후 삭제될](#when-the-sandbox-deletes-head-objects-or-refs) 수 있습니다. 명령, Claude, 사용자 중 누가 만들었는지는 관계없습니다. 폴더를 유지하려면 폴더 안에 무언가를 남겨 둡니다. 세션 중에 `HEAD` 파일이나 심볼릭 링크가 최상위에 있었다면 이를 다른 곳으로 옮긴 다음, 그곳에서 열려 있는 모든 Claude Code 세션을 다시 시작합니다.

893 

894v2.1.307 이전에는 `HEAD`가 없고 폴더 안에 무언가가 있어도 폴더가 삭제되었습니다. 이전 버전을 사용 중이라면 [Claude Code를 업데이트](https://code.claude.com/docs/ko/setup.md#update-claude-code)합니다.

895 

884### Bubblewrap이 컨테이너 내에서 시작 실패896### Bubblewrap이 컨테이너 내에서 시작 실패

885 897 

886권한 없는 컨테이너에서 [bubblewrap](#os-level-enforcement)은 새로운 `/proc` 파일시스템을 마운트할 수 없으므로 샌드박싱된 명령은 `bwrap` 오류(예: `Can't mount proc on /newroot/proc: Operation not permitted`)로 실패합니다. [`enableWeakerNestedSandbox`](https://code.claude.com/docs/ko/settings-reference#sandbox-enableweakernestedsandbox)를 `true`로 설정하여 샌드박스가 대신 컨테이너의 기존 `/proc`을 바인드 마운트하도록 합니다. 외부 컨테이너가 이미 필요한 격리 경계를 제공할 때만 이 설정을 사용합니다. 새로운 `/proc` 마운트가 숨길 프로세스 정보를 샌드박싱된 명령에 노출하기 때문입니다.898권한 없는 컨테이너에서 [bubblewrap](#os-level-enforcement)은 새로운 `/proc` 파일시스템을 마운트할 수 없으므로 샌드박싱된 명령은 `bwrap` 오류(예: `Can't mount proc on /newroot/proc: Operation not permitted`)로 실패합니다. [`enableWeakerNestedSandbox`](https://code.claude.com/docs/ko/settings-reference#sandbox-enableweakernestedsandbox)를 `true`로 설정하여 샌드박스가 대신 컨테이너의 기존 `/proc`을 바인드 마운트하도록 합니다. 외부 컨테이너가 이미 필요한 격리 경계를 제공할 때만 이 설정을 사용합니다. 새로운 `/proc` 마운트가 숨길 프로세스 정보를 샌드박싱된 명령에 노출하기 때문입니다.

Details

30 30 

31다이어그램의 두 Claude Code 상자는 세션 프로세스입니다: 한 러너가 동시에 두 세션을 실행하며, 구성된 용량까지입니다. 러너는 한 번에 하나의 [소유자](#key-concepts)를 제공하며 첫 번째 세션을 요청할 때 해당 소유자에게 잠깁니다. 따라서 체크아웃된 코드는 소유자 간에 혼합되지 않습니다. [러너 수명 주기](#runner-lifecycle)에서 규칙을 다룹니다.31다이어그램의 두 Claude Code 상자는 세션 프로세스입니다: 한 러너가 동시에 두 세션을 실행하며, 구성된 용량까지입니다. 러너는 한 번에 하나의 [소유자](#key-concepts)를 제공하며 첫 번째 세션을 요청할 때 해당 소유자에게 잠깁니다. 따라서 체크아웃된 코드는 소유자 간에 혼합되지 않습니다. [러너 수명 주기](#runner-lifecycle)에서 규칙을 다룹니다.

32 32 

33러너를 직접 시작하고 계속 실행하거나, [자동 스케일링 오케스트레이터](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#on-demand-runners)를 실행할 수 있습니다. 이는 호스팅하는 두 번째 프로세스로, 세션이 큐에 대기할 때 러너를 시작합니다. 각 러너는 작업이 완료되면 자동으로 종료됩니다. 어느 쪽이든, 환경을 한 번 설정하면 지원되는 모든 표면의 선택기에 나타납니다.33러너를 직접 시작하고 계속 실행하거나, [자동 스케일링 오케스트레이터](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#on-demand-runners)를 실행할 수 있습니다. 이는 호스팅하는 두 번째 프로세스로, 세션이 큐에 대기할 때 러너를 시작합니다. 어느 쪽이든, 환경을 한 번 설정하면 지원되는 모든 사용 환경의 선택기에 나타납니다.

34 34 

35## 가용성 및 제한 사항35## 가용성 및 제한 사항

36 36 


122 122 

123기업 이그레스 프록시가 지원됩니다. 러너와 선택 사항인 [자동 확장 오케스트레이터](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#on-demand-runners)는 `HTTPS_PROXY` 및 `NO_PROXY` 같이 [네트워크 구성](https://code.claude.com/docs/ko/network-config.md)에 설명된 프록시 및 mTLS 환경 변수를 따르며, 이 변수는 각 프로세스의 환경에 설정합니다. 이 변수는 컨트롤 플레인 호출, 오케스트레이터의 [SCM 커넥터](https://code.claude.com/docs/ko/self-hosted-environments-reference.md#scm-connector-flags) WebSocket, HTTPS 원격 저장소에 대한 기본 제공 클론에 적용되며, 세션은 러너로부터 이 변수를 상속합니다. 세션 스트리밍은 HTTPS를 통한 서버 전송 이벤트를 사용하므로, 경로상의 프록시는 응답을 버퍼링해서는 안 됩니다.123기업 이그레스 프록시가 지원됩니다. 러너와 선택 사항인 [자동 확장 오케스트레이터](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#on-demand-runners)는 `HTTPS_PROXY` 및 `NO_PROXY` 같이 [네트워크 구성](https://code.claude.com/docs/ko/network-config.md)에 설명된 프록시 및 mTLS 환경 변수를 따르며, 이 변수는 각 프로세스의 환경에 설정합니다. 이 변수는 컨트롤 플레인 호출, 오케스트레이터의 [SCM 커넥터](https://code.claude.com/docs/ko/self-hosted-environments-reference.md#scm-connector-flags) WebSocket, HTTPS 원격 저장소에 대한 기본 제공 클론에 적용되며, 세션은 러너로부터 이 변수를 상속합니다. 세션 스트리밍은 HTTPS를 통한 서버 전송 이벤트를 사용하므로, 경로상의 프록시는 응답을 버퍼링해서는 안 됩니다.

124 124 

125프록시에 `Proxy-Authorization` 헤더도 필요한 경우, 러너가 프록시로 여는 각 연결에 해당 헤더를 추가할 수 있습니다. [이그레스 프록시에 인증하기](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy)를 참조하세요.125* **프록시 인증**: 프록시에 `Proxy-Authorization` 헤더도 필요한 경우, 러너가 프록시로 여는 각 연결에 해당 헤더를 추가할 수 있습니다. [이그레스 프록시에 인증하기](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy)를 참조하세요.

126* **장기 유지 응답**: 러너가 세션을 가져갔지만 Claude가 첫 메시지에 끝내 응답하지 않는다면 프록시가 원인일 수 있습니다. [세션을 가져갔지만 Claude가 첫 메시지에 응답하지 않는 경우](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#when-a-sessions-first-message-is-never-answered)를 참조하세요.

126 127 

127## 인프라에 남아 있는 것128## 인프라에 남아 있는 것

128 129 

Details

36| `CLAUDE_CODE_REMOTE_SESSION_UUID` | 정규 UUID 형식의 동일한 세션 ID이며, UUID를 키로 사용하는 시스템용입니다. |36| `CLAUDE_CODE_REMOTE_SESSION_UUID` | 정규 UUID 형식의 동일한 세션 ID이며, UUID를 키로 사용하는 시스템용입니다. |

37| `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` | 하나의 Slack 스레드에 속한 [Claude Tag](https://claude.com/docs/claude-tag/overview) 세션의 경우 해당 스레드의 링크입니다. 다른 세션에서는 설정되지 않으며, 스레드 세션에서도 설정되지 않을 수 있습니다. |37| `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` | 하나의 Slack 스레드에 속한 [Claude Tag](https://claude.com/docs/claude-tag/overview) 세션의 경우 해당 스레드의 링크입니다. 다른 세션에서는 설정되지 않으며, 스레드 세션에서도 설정되지 않을 수 있습니다. |

38| `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` | 하나의 Slack 스레드에 속한 Claude Tag 세션의 경우 해당 스레드의 Slack 타임스탬프(예: `1700000000.000100`)입니다. 설정되지 않을 수 있으며, `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL`이 설정되지 않은 경우에도 설정될 수 있으므로 각 변수를 개별적으로 확인하세요. |38| `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` | 하나의 Slack 스레드에 속한 Claude Tag 세션의 경우 해당 스레드의 Slack 타임스탬프(예: `1700000000.000100`)입니다. 설정되지 않을 수 있으며, `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL`이 설정되지 않은 경우에도 설정될 수 있으므로 각 변수를 개별적으로 확인하세요. |

39| `CLAUDE_CODE_REMOTE_SLACK_CHANNEL_ID` | Claude Tag 세션의 경우 세션이 처리하거나 해당 스레드가 속한 Slack 채널 또는 다이렉트 메시지의 ID(예: `C0123ABCDE`)입니다. Slack 타임스탬프는 하나의 채널 내에서 메시지를 식별하므로 이 ID를 `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS`와 함께 기록하세요. 다른 세션에서는 설정되지 않으며, Claude Tag 세션에서도 설정되지 않을 수 있습니다. |

39| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | 현재 세션 JWT를 보유하는 세션별 파일의 절대 경로이며, 토큰 새로고침 전체에서 최신 상태로 유지됩니다. 셸 서브프로세스는 사용자가 세션에 추가한 첨부 파일을 다운로드할 때 `Authorization` 헤더에 대해 이를 읽습니다. `exec`는 변수를 자동으로 보존합니다. 자식의 환경을 다시 빌드하는 래퍼는 변수를 전달해야 하거나 첨부 파일 다운로드가 자동으로 중지됩니다. |40| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | 현재 세션 JWT를 보유하는 세션별 파일의 절대 경로이며, 토큰 새로고침 전체에서 최신 상태로 유지됩니다. 셸 서브프로세스는 사용자가 세션에 추가한 첨부 파일을 다운로드할 때 `Authorization` 헤더에 대해 이를 읽습니다. `exec`는 변수를 자동으로 보존합니다. 자식의 환경을 다시 빌드하는 래퍼는 변수를 전달해야 하거나 첨부 파일 다운로드가 자동으로 중지됩니다. |

40| `CLAUDE_CONFIG_DIR` | 세션별 Claude 구성 디렉토리이며, 러너가 시작 시 캡처한 러너 호스트 구성의 스냅샷에서 세션 시작 시 작성됩니다. [권한 및 도구 승인](#permissions-and-tool-approval)을 참조하세요. 여기에 대한 쓰기는 이 세션으로 격리됩니다. 디렉토리는 [`--remove-session-state`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)로 러너를 시작하지 않는 한 세션이 끝난 후 `<base-dir>/_sessions/` 아래에 유지됩니다. [사전 준비된 체크아웃 재사용](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout)을 참조하세요. |41| `CLAUDE_CONFIG_DIR` | 세션별 Claude 구성 디렉토리이며, 러너가 시작 시 캡처한 러너 호스트 구성의 스냅샷에서 세션 시작 시 작성됩니다. [권한 및 도구 승인](#permissions-and-tool-approval)을 참조하세요. 여기에 대한 쓰기는 이 세션으로 격리됩니다. 디렉토리는 [`--remove-session-state`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)로 러너를 시작하지 않는 한 세션이 끝난 후 `<base-dir>/_sessions/` 아래에 유지됩니다. [사전 준비된 체크아웃 재사용](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout)을 참조하세요. |

41| `CLAUDE_CODE_REMOTE_MCP_CONFIG` | Anthropic의 제어 평면이 이 세션에 전달한 MCP 서버 정의를 보유하는 `CLAUDE_CONFIG_DIR` 내 파일의 경로입니다. 래퍼가 자식의 환경을 다시 빌드하는 경우 이 변수를 전달하세요. 이 변수가 없으면 제어 평면이 전달된 서버를 업데이트할 때, 래퍼가 [`--mcp-config`](https://code.claude.com/docs/ko/cli-reference#cli-flags)로 추가한 stdio, HTTP 또는 SSE 서버 중 업데이트에 포함되지 않은 서버를 자식이 종료합니다. Claude Code v2.1.299 이상이 필요합니다. |42| `CLAUDE_CODE_REMOTE_MCP_CONFIG` | Anthropic의 제어 평면이 이 세션에 전달한 MCP 서버 정의를 보유하는 `CLAUDE_CONFIG_DIR` 내 파일의 경로입니다. 래퍼가 자식의 환경을 다시 빌드하는 경우 이 변수를 전달하세요. 이 변수가 없으면 제어 평면이 전달된 서버를 업데이트할 때, 래퍼가 [`--mcp-config`](https://code.claude.com/docs/ko/cli-reference#cli-flags)로 추가한 stdio, HTTP 또는 SSE 서버 중 업데이트에 포함되지 않은 서버를 자식이 종료합니다. Claude Code v2.1.299 이상이 필요합니다. |


44 45 

45래퍼는 또한 서버 제공 환경 변수를 포함한 자식의 관리되는 환경의 나머지를 상속합니다. `exec`는 모두 자동으로 전파합니다. 래퍼가 자식을 다른 방식으로 생성하면 전체 환경을 전달하세요.46래퍼는 또한 서버 제공 환경 변수를 포함한 자식의 관리되는 환경의 나머지를 상속합니다. `exec`는 모두 자동으로 전파합니다. 래퍼가 자식을 다른 방식으로 생성하면 전체 환경을 전달하세요.

46 47 

47`CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` 및 `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS`는 래퍼 또는 [`command` 훅](#command)에 전달됩니다. 셸 명령, git 훅, Claude Code 훅 등 세션이 실행하는 항목에도 전달됩니다. `checkout`, `post-session`, `spawn-runner` 훅은 이를 받지 않습니다.48`CLAUDE_CODE_REMOTE_SLACK_*` 변수는 래퍼 또는 [`command` 훅](#command)에서 읽을 수 있으며, 셸 명령, git 훅, Claude Code 훅 등 세션이 실행하는 항목에서도 읽을 수 있습니다. `checkout`, `post-session`, `spawn-runner` 훅은 이를 받지 않습니다.

48 49 

49### 설정되지 않을 수 있는 변수에 기본값 지정50### 설정되지 않을 수 있는 변수에 기본값 지정

50 51 

51`CCR_SESSION_ACCOUNT_EMAIL`, `CLAUDE_RUNNER_CLIENT_PLATFORM`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS`는 각각 설정되지 않을 수 있습니다. 스크립트가 `set -u`를 사용하는 경우 설정되지 않은 변수를 확장하면 Bash가 `unbound variable`로 중지되므로, `"${CCR_SESSION_ACCOUNT_EMAIL:-}"`와 같이 기본값을 지정하여 확장하세요.52스크립트가 `set -u`를 사용하는 경우 `CCR_SESSION_ACCOUNT_EMAIL`, `CLAUDE_RUNNER_CLIENT_PLATFORM`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS`, `CLAUDE_CODE_REMOTE_SLACK_CHANNEL_ID`를 `"${CCR_SESSION_ACCOUNT_EMAIL:-}"`와 같이 기본값을 지정하여 확장하세요. 각 변수는 설정되지 않을 수 있으며, `set -u`에서는 설정되지 않은 변수를 확장하면 Bash가 `unbound variable`로 중지됩니다.

52 53 

53### 스크립트가 확장하는 인수와 변수를 따옴표로 묶기54### 스크립트가 확장하는 인수와 변수를 따옴표로 묶기

54 55 


89* **그대로 전달**: `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`로 래퍼를 종료하면 파일 플래그가 다른 모든 인수와 함께 전달됩니다. 이를 제거하거나 다시 작성하지 마세요. 세션에서 프롬프트 파일 플래그가 누락되면 제어 평면이 해당 세션에 보낸 지침 없이 실행됩니다.90* **그대로 전달**: `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`로 래퍼를 종료하면 파일 플래그가 다른 모든 인수와 함께 전달됩니다. 이를 제거하거나 다시 작성하지 마세요. 세션에서 프롬프트 파일 플래그가 누락되면 제어 평면이 해당 세션에 보낸 지침 없이 실행됩니다.

90* **v2.1.281 이상의 러너에서는 추가한 파일 플래그가 서버의 플래그에 더해지지 않고 이를 대체함**: 각 프롬프트 파일 플래그는 단일 값을 받으며 Claude Code는 마지막 항목을 유지하므로, `"$@"` 뒤에 `--append-system-prompt-file <path>`를 추가하면 해당 파일의 내용이 서버의 추가 지침을 대체합니다. 서버의 지침 위에 지침을 추가하려면 러너 이미지의 `CLAUDE.md`에 넣으세요. 러너는 이를 [모든 세션의 사용자 수준 구성에 시드](#how-each-session’s-config-is-assembled)합니다.91* **v2.1.281 이상의 러너에서는 추가한 파일 플래그가 서버의 플래그에 더해지지 않고 이를 대체함**: 각 프롬프트 파일 플래그는 단일 값을 받으며 Claude Code는 마지막 항목을 유지하므로, `"$@"` 뒤에 `--append-system-prompt-file <path>`를 추가하면 해당 파일의 내용이 서버의 추가 지침을 대체합니다. 서버의 지침 위에 지침을 추가하려면 러너 이미지의 `CLAUDE.md`에 넣으세요. 러너는 이를 [모든 세션의 사용자 수준 구성에 시드](#how-each-session’s-config-is-assembled)합니다.

91 92 

93#### 세션 시작 시 `Argument list too long` 해결

94 

95Linux에서 제어 평면의 프롬프트와 자체 텍스트를 하나의 `--append-system-prompt` 인수로 결합하면, 인수가 128 KB에 도달할 때 러너가 다음과 같은 줄을 로그에 기록합니다:

96 

97```text theme={null}

98Session <id> finished: failed — reason: child exited 126: /opt/wrapper.sh: line 9: /usr/local/bin/claude: Argument list too long

99```

100 

101Linux는 각 단일 인수를 32개 메모리 페이지, 즉 일반적인 4 KB 페이지 기준 128 KB로 제한합니다. `getconf ARG_MAX`의 값(보통 2 MB)은 모든 인수와 환경을 합한 전체에 대한 별도의 제한입니다.

102 

103Claude Code v2.1.283 이상에서는 파일 플래그를 `"$@"`에 그대로 두고 자체 텍스트만 `--append-system-prompt`로 전달하세요. Claude Code는 제어 평면의 프롬프트를 먼저, 그다음 자체 텍스트를 적용하여 [둘 다 사용](https://code.claude.com/docs/ko/cli-reference.md#system-prompt-flags)합니다:

104 

105```bash theme={null}

106exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@" --append-system-prompt "$(cat /opt/team-instructions.md)"

107```

108 

109Linux에서 자체 텍스트가 128 KB에 도달하면 여전히 하나의 인수이므로 러너 이미지의 `CLAUDE.md`로 옮기세요.

110 

111v2.1.281 또는 v2.1.282에서는 해당 명령이 `Cannot use both --append-system-prompt and --append-system-prompt-file`로 종료됩니다. 이전 버전에서는 자체 텍스트가 오류 없이 제어 평면의 프롬프트를 대체합니다. 이 중 어느 버전에서든 먼저 업데이트하거나 자체 텍스트를 `CLAUDE.md`로 옮기세요.

112 

92### 세션 작성자로 범위가 지정된 자격 증명 프로비저닝113### 세션 작성자로 범위가 지정된 자격 증명 프로비저닝

93 114 

94`decode-token` 서브명령을 사용하여 세션 JWT에서 클레임을 읽으세요. 인수, `CLAUDE_CODE_SESSION_ACCESS_TOKEN` 또는 stdin에서 토큰을 읽습니다(이 순서대로). [세션 내에서 토큰 확인](https://code.claude.com/docs/ko/self-hosted-environments-identity.md#verify-the-token-inside-the-session)을 참조하여 확인 내용을 확인하세요. 아래 예제는 작성자 ID를 디코딩하고, 단기 AWS 자격 증명으로 교환하고, Claude Code로 실행합니다:115`decode-token` 서브명령을 사용하여 세션 JWT에서 클레임을 읽으세요. 인수, `CLAUDE_CODE_SESSION_ACCESS_TOKEN` 또는 stdin에서 토큰을 읽습니다(이 순서대로). [세션 내에서 토큰 확인](https://code.claude.com/docs/ko/self-hosted-environments-identity.md#verify-the-token-inside-the-session)을 참조하여 확인 내용을 확인하세요. 아래 예제는 작성자 ID를 디코딩하고, 단기 AWS 자격 증명으로 교환하고, Claude Code로 실행합니다:


122| 변수 | 설명 |143| 변수 | 설명 |

123| :- | :- |144| :- | :- |

124| `CLAUDE_RUNNER_REPO_URL` | clone할 저장소 URL로, `--git-host-rewrite` 및 `--git-ssh-rewrite`가 적용된 후의 값 |145| `CLAUDE_RUNNER_REPO_URL` | clone할 저장소 URL로, `--git-host-rewrite` 및 `--git-ssh-rewrite`가 적용된 후의 값 |

125| `CLAUDE_RUNNER_REPO_REF` | 세션이 요청한 대로 체크아웃할 리비전: 브랜치, 태그, 커밋 SHA 또는 `refs/pull/<number>/head`와 같은 전체 참조 이름. 비어 있으면 저장소의 기본 브랜치를 의미합니다. |146| `CLAUDE_RUNNER_REPO_REF` | 세션이 요청한 대로 체크아웃할 리비전: 브랜치, 태그, 커밋 SHA 또는 `refs/heads/<branch>`나 `refs/pull/<number>/head`와 같은 전체 참조 이름. 비어 있으면 저장소의 기본 브랜치를 의미합니다. |

126| `CLAUDE_RUNNER_CHECKOUT_PATH` | 작업 트리를 남겨 두어야 하는 절대 경로 |147| `CLAUDE_RUNNER_CHECKOUT_PATH` | 작업 트리를 남겨 두어야 하는 절대 경로 |

127| `CLAUDE_RUNNER_SESSION_ID` | 로깅 및 상관 관계 분석용, 태그가 붙은 `session_...` 형식의 세션 ID |148| `CLAUDE_RUNNER_SESSION_ID` | 로깅 및 상관 관계 분석용, 태그가 붙은 `session_...` 형식의 세션 ID |

128| `CLAUDE_RUNNER_SESSION_UUID` | 표준 UUID 형식의 동일한 세션 ID |149| `CLAUDE_RUNNER_SESSION_UUID` | 표준 UUID 형식의 동일한 세션 ID |


303 324 

304계약에는 네 가지 프로비저너 불가지론적 규칙이 있습니다:325계약에는 네 가지 프로비저너 불가지론적 규칙이 있습니다:

305 326 

3061. **`CLAUDE_RUNNER_ORDER_ID`에서 멱등성을 유지합니다.** 동일한 요청의 재전달은 최대 하나의 러너를 스폰해야 합니다. 주문 ID에서 결정론적 리소스 이름을 파생시키고 플랫폼이 중복을 거부하도록 합니다. 대신 `CLAUDE_RUNNER_SESSION_ID`를 키로 사용하지 마십시오. 세션의 모든 재요청은 새 주문 ID와 함께 동일한 세션 ID를 전달하므로, 세션 ID로 명명되거나 중복 제거된 워크로드는 한 번 생성되고 해당 세션에 대해 다시는 생성되지 않습니다.3271. **`CLAUDE_RUNNER_ORDER_ID`에서 멱등성을 유지합니다.** 동일한 요청의 재전달은 최대 하나의 러너를 스폰해야 합니다. 주문 ID에서 결정론적 리소스 이름을 파생시키고 플랫폼이 중복을 거부하도록 합니다. 대신 `CLAUDE_RUNNER_SESSION_ID`를 키로 사용하지 마십시오. 세션의 모든 재요청은 새 주문 ID와 함께 동일한 세션 ID를 전달합니다. 세션 ID로 이름을 짓거나 중복 제거한 워크로드는 첫 번째 워크로드가 존재하는 동안 다시 생성되지 않습니다.

3072. **워크로드를 재시도하지 마십시오.** 하나의 주문 ID는 최대 하나의 생성된 워크로드를 의미합니다. 러너가 등록되지 않으면 Anthropic은 `--expected-spawn-seconds` 후 새 주문 ID로 재요청합니다.3282. **워크로드를 재시도하지 마십시오.** 하나의 주문 ID는 최대 하나의 생성된 워크로드를 의미합니다. 러너가 등록되지 않으면 Anthropic은 `--expected-spawn-seconds` 후 새 주문 ID로 재요청합니다.

3083. **종료 코드 계약을 사용합니다.** 결과에 맞는 상태로 종료합니다:3293. **종료 코드 계약을 사용합니다.** 결과에 맞는 상태로 종료합니다:

309 330 

310 * **종료 0**: 제출됨.331 * **종료 0**: 제출됨.

311 * **종료 1, 또는 `--hook-timeout`이 끝날 때 여전히 실행 중**: 재시도 가능한 실패. 세션은 백오프되고 다시 제공됩니다.332 * **종료 1, 또는 `--hook-timeout`이 끝날 때 여전히 실행 중**: 재시도 가능한 실패. 세션은 백오프되고 다시 제공됩니다. 연속으로 10번 요청이 실패하면 종료 2 이상일 때와 마찬가지로 차단됩니다.

312 * **종료 2 이상**: 재시도 불가능한 실패. 사용자가 세션에 새 메시지를 보내거나 [Owner](https://code.claude.com/docs/ko/cloud-environments.md#organization-shared-environments)가 환경의 **Activity** 탭에서 해당 세션의 **Retry**를 선택할 때까지 세션은 다시 스폰되지 않습니다.333 * **종료 2 이상**: 재시도 불가능한 실패. 사용자가 세션에 새 메시지를 보내거나 [Owner](https://code.claude.com/docs/ko/cloud-environments.md#organization-shared-environments)가 환경의 **Activity** 탭에서 해당 세션의 **Retry**를 선택할 때까지 세션은 다시 스폰되지 않습니다.

313 334 

314 세션이 백오프되는 동안에는 **Activity** 탭에 스폰 오류 없이 **Queued**로 표시되므로, 오케스트레이터의 로그에서 훅의 출력을 확인하십시오. 차단되면 세션은 **Failed**로 표시됩니다. 세션을 확장하면 훅 stderr의 마지막 512자에서 가져온 스폰 오류를 확인할 수 있습니다. stderr에는 조치 가능한 오류를 작성하고 시크릿은 작성하지 마십시오. 셸 훅에서는 [일시적인 실패를 재시도 가능한 상태로 유지하십시오](#keep-transient-failures-retryable-in-a-shell-hook).335 세션이 백오프되는 동안에는 **Activity** 탭에 스폰 오류 없이 **Queued**로 표시되므로, 오케스트레이터의 로그에서 훅의 출력을 확인하십시오. 차단되면 세션은 **Failed**로 표시됩니다. 세션을 확장하면 훅 stderr의 마지막 512자에서 가져온 스폰 오류를 확인할 수 있습니다. stderr에는 조치 가능한 오류를 작성하고 시크릿은 작성하지 마십시오. 셸 훅에서는 [일시적인 실패를 재시도 가능한 상태로 유지하십시오](#keep-transient-failures-retryable-in-a-shell-hook).


318 339 

319훅이 stdout 또는 stderr에 작성하는 모든 것은 자격증명이 자동으로 삭제된 오케스트레이터의 로그에 나타납니다. 세션이 대기 중인 상태로 유지되면 오케스트레이터의 `/healthz` 본문에서 대기열 수를 확인한 후 [**Cloud environments** 관리 페이지](https://claude.ai/admin-settings/cloud-environments)에서 환경의 **Activity** 탭을 엽니다: 실패한 세션을 확장하여 스폰 오류를 확인하고 **Retry**를 선택하여 재요청합니다.340훅이 stdout 또는 stderr에 작성하는 모든 것은 자격증명이 자동으로 삭제된 오케스트레이터의 로그에 나타납니다. 세션이 대기 중인 상태로 유지되면 오케스트레이터의 `/healthz` 본문에서 대기열 수를 확인한 후 [**Cloud environments** 관리 페이지](https://claude.ai/admin-settings/cloud-environments)에서 환경의 **Activity** 탭을 엽니다: 실패한 세션을 확장하여 스폰 오류를 확인하고 **Retry**를 선택하여 재요청합니다.

320 341 

321**Activity** 탭에 스폰 오류가 없는 상태로 대기 중인 세션은 훅이 세션 ID를 키로 사용하고 있음을 의미할 수 있습니다. 확인하려면 플랫폼에 해당 세션의 첫 번째 스폰 요청에 대한 워크로드가 있는지, 재요청에 대한 워크로드가 없는지 확인합니다. 그렇다면 대신 `CLAUDE_RUNNER_ORDER_ID`를 키로 사용합니다.342#### 다시 연 세션이 Queued 상태로 유지되거나 Failed로 표시되는 문제 해결하기

343 

344다시 연 세션이 **Queued** 상태로 유지되거나 **Failed**로 표시되거나 해당 세션에서 훅이 시간 초과된다면, 한 가지 원인은 세션 ID로 워크로드의 이름을 짓거나 중복 제거하는 훅입니다. 세션은 러너가 종료된 후 사용자가 해당 세션에 메시지를 보낼 때 다시 열립니다. 예를 들어 다음과 같이 각 워크로드의 이름을 만드는 훅을 살펴보겠습니다:

345 

346```bash theme={null}

347name="runner-${CLAUDE_RUNNER_SESSION_ID}"

348```

349 

3501. 세션의 첫 번째 스폰 요청에서 훅은 해당 이름으로 워크로드를 생성하고 러너가 시작됩니다

3512. 러너가 종료되고(예: [`--release-idle-session-min`](#make-on-demand-runners-exit-when-idle) 이후), 나중에 사용자가 세션을 다시 엽니다

3523. 세션의 다음 스폰 요청은 동일한 세션 ID와 새 주문 ID를 전달하므로 훅은 같은 이름을 만듭니다

3534. 러너가 종료될 때 아무것도 첫 번째 요청의 워크로드를 [제거](#make-on-demand-runners-exit-when-idle)하지 않아 플랫폼에 해당 워크로드가 여전히 남아 있다면, 훅은 새 워크로드를 생성하지 않고 러너도 시작되지 않습니다

3545. 이후 해당 세션의 모든 스폰 요청이 같은 방식으로 끝납니다

355 

356직접 작성한 훅을 열어 워크로드가 이미 존재할 때(예: 플랫폼이 중복된 이름을 거부할 때) 어떻게 동작하는지 확인하십시오. 첫 번째 열에서 해당 동작을 찾으면 다시 연 세션이 **Activity** 탭에 어떻게 표시되는지 알 수 있습니다:

357 

358| 워크로드가 존재할 때 훅의 동작 | **Queued**가 **Failed**로 바뀌는 시점 | 스폰 오류 |

359| :- | :- | :- |

360| 아무것도 생성하지 않고 0으로 종료 | 이러한 요청이 연속으로 10번 발생한 후 | `runner did not register within ETA after max attempts` |

361| 1로 종료 | 이러한 요청이 연속으로 10번 발생한 후 | 훅 stderr의 마지막 부분, 또는 stderr에 아무것도 쓰지 않았다면 `exit 1` |

362| 2 이상으로 종료 | 즉시 | 훅 stderr의 마지막 부분, 또는 stderr에 아무것도 쓰지 않았다면 `exit`와 코드(예: `exit 2`) |

363| `--hook-timeout`이 끝날 때까지 대기 | 이러한 요청이 연속으로 10번 발생한 후 | 훅 stderr의 마지막 부분, 또는 stderr에 아무것도 쓰지 않았다면 `spawn-runner hook timed out after 60000ms` |

364 

365마지막 행의 스폰 오류에서 `60000`은 밀리초 단위의 `--hook-timeout` 값입니다. 훅이 `--hook-timeout`이 끝날 때까지 대기하면 오케스트레이터의 로그에도 `timed out after` 줄이 기록됩니다.

366 

367훅을 수정하려면 [훅 계약의 규칙 1](#the-spawn-runner-hook)에 따라 각 이름이나 키를 `CLAUDE_RUNNER_ORDER_ID`로 만드십시오. 예시에서 이름은 다음과 같이 바뀝니다:

368 

369```bash theme={null}

370name="runner-${CLAUDE_RUNNER_ORDER_ID}"

371```

372 

373훅이 대기한다면, 대기하는 훅은 [오케스트레이터의 다음 훅을 지연시키므로](https://code.claude.com/docs/ko/self-hosted-environments-reference.md#orchestrator-cli-flags) 워크로드를 제출한 후 종료하도록 함께 수정하십시오. 훅을 변경한 후 **Activity** 탭에서 멈춰 있는 각 세션의 상태를 확인하십시오:

374 

375* **Queued**: 세션이 자동으로 다음 스폰 요청을 받습니다

376* **Failed**: Owner로서 해당 세션의 **Retry**를 선택하거나, 세션의 사용자가 새 메시지를 보내도록 하십시오

322 377 

323#### 유휴 상태일 때 온디맨드 러너 종료하기378#### 유휴 상태일 때 온디맨드 러너 종료하기

324 379 


738 793 

739러너의 호스트 `~/.claude/` 스냅샷에는 `projects/` 디렉터리가 포함되지 않습니다. 자동 메모리의 기본 스토리지 위치는 이 디렉터리 아래에 있습니다. 이곳에 메모리 파일을 두더라도 러너는 이를 세션으로 초기화하지 않으며, 해당 파일이 자동 메모리를 켜지도 않습니다.794러너의 호스트 `~/.claude/` 스냅샷에는 `projects/` 디렉터리가 포함되지 않습니다. 자동 메모리의 기본 스토리지 위치는 이 디렉터리 아래에 있습니다. 이곳에 메모리 파일을 두더라도 러너는 이를 세션으로 초기화하지 않으며, 해당 파일이 자동 메모리를 켜지도 않습니다.

740 795 

796### 서버 관리형 설정을 가져오지 못한 세션 중지

797 

798[서버 관리형 설정](https://code.claude.com/docs/ko/server-managed-settings.md)을 가져오는 세션이 가져오기에 실패했을 때 시작되지 않도록 하려면 러너 이미지의 [`managed-settings.json`](https://code.claude.com/docs/ko/settings#where-settings-live)에서 [`forceRemoteSettingsRefresh`](https://code.claude.com/docs/ko/settings-reference#forceremotesettingsrefresh)를 `true`로 설정하십시오. 조직에 서버 관리형 설정이 없다는 Anthropic API의 응답은 가져오기 성공으로 간주됩니다.

799 

800키를 추가하기 전에 해당 환경이 Claude Tag 채널 세션을 실행하는지, 또는 Bedrock이나 Agent Platform으로 모델 요청을 보내는지 확인하십시오.

801 

802* **Claude Tag 채널 세션**: Owner가 [Claude Tag 채널을 라우팅하는](https://code.claude.com/docs/ko/cloud-environments.md#set-the-environment-a-claude-tag-channel-uses) 환경의 러너에서는 이 키를 넣지 마십시오. Anthropic API는 이러한 세션의 서버 관리형 설정 요청을 거부하므로, 키가 설정되어 있으면 세션이 시작되지 않습니다. 이러한 세션의 규칙은 러너 이미지의 `managed-settings.json`에 넣으십시오. 이 세션은 [해당 파일을 여전히 읽습니다](https://code.claude.com/docs/ko/managed-settings.md#where-and-when-a-policy-applies). 다른 세션에 이 키를 사용하려면 해당 세션을 별도의 환경에서 실행하십시오.

803* **Bedrock 또는 Agent Platform**: 이러한 제공자의 세션은 [서버 관리형 설정을 가져오지 않으므로](#what-differs-from-sessions-on-the-anthropic-api), 키 설정 여부와 관계없이 시작됩니다. 대신 동일한 `managed-settings.json`에서 규칙을 적용하십시오.

804 

805다음 `managed-settings.json`은 이 키를 설정합니다.

806 

807```json managed-settings.json theme={null}

808{

809 "forceRemoteSettingsRefresh": true

810}

811```

812 

813claude.ai 관리자 콘솔에서도 키를 설정하더라도 이 파일에 키를 설정하십시오. 새 세션에는 서버 관리형 설정의 [캐시된 사본](https://code.claude.com/docs/ko/server-managed-settings.md#fetch-and-caching-behavior)이 없으므로, 콘솔에서만 키를 설정하면 세션에는 아직 해당 키가 없습니다. 이 상태에서 가져오기가 실패하면 세션은 이후 가져오기가 성공할 때까지 해당 설정 없이 실행됩니다.

814 

815세션이 시작되지 않은 원인이 설정 가져오기 실패인지 확인하려면 세션에서 [Claude Code의 마지막 출력](#keep-stdin-and-file-descriptor-3-attached)이나 러너의 로그를 확인하십시오. 출력에는 `Your organization requires remote managed settings to load, but they could not be loaded.`가 포함됩니다.

816 

741### 여러 저장소가 있는 세션의 저장소 설정817### 여러 저장소가 있는 세션의 저장소 설정

742 818 

743[프로젝트](https://code.claude.com/docs/ko/claude-projects.md#what-threads-pick-up-from-your-repositories)의 스레드에서는 스레드가 어디에서 시작되든 어떤 저장소의 `.claude/settings.json`도 프로젝트 설정으로 적용되지 않으며, 어떤 저장소의 `.mcp.json`이나 스킬도 로드되지 않습니다. 이러한 스레드에 스킬을 제공하려면 러너 이미지에 추가하십시오.819[프로젝트](https://code.claude.com/docs/ko/claude-projects.md#what-threads-pick-up-from-your-repositories)의 스레드에서는 스레드가 어디에서 시작되든 어떤 저장소의 `.claude/settings.json`도 프로젝트 설정으로 적용되지 않으며, 어떤 저장소의 `.mcp.json`이나 스킬도 로드되지 않습니다. 이러한 스레드에 스킬을 제공하려면 러너 이미지에 추가하십시오.

Details

313 313 

314Anthropic 관리 git을 사용하는 각 세션에 대해 러너는 `governed git: GIT_SSL_CAINFO is set` 또는 `governed git: GIT_SSL_NO_VERIFY is set`로 시작하는 `[runner:warn]` 라인도 기록합니다. 라인은 러너가 자신의 git, 세션 내부의 git, 수명 주기 훅에 대해 해당 변수로 수행한 작업을 나타냅니다. 변경해야 할 사항이 있는지 여부로 끝납니다.314Anthropic 관리 git을 사용하는 각 세션에 대해 러너는 `governed git: GIT_SSL_CAINFO is set` 또는 `governed git: GIT_SSL_NO_VERIFY is set`로 시작하는 `[runner:warn]` 라인도 기록합니다. 라인은 러너가 자신의 git, 세션 내부의 git, 수명 주기 훅에 대해 해당 변수로 수행한 작업을 나타냅니다. 변경해야 할 사항이 있는지 여부로 끝납니다.

315 315 

316### Claude Tag 채널 세션에 github.com 저장소 추가

317 

318Claude가 Claude Tag 채널 세션에 github.com 저장소를 추가할 수 없는 경우, 러너가 해당 저장소를 클론할 수 있더라도 채널이 해당 저장소에 액세스할 수 있는지 확인하세요. 이 액세스는 러너의 git 자격 증명이 아니라 GitHub 및 Claude 조직의 설정에서 비롯됩니다.

319 

320**1. Claude GitHub App 설치**

321 

322저장소를 소유한 GitHub 조직 또는 계정에 [Claude GitHub App](https://github.com/apps/claude)을 설치하고, 설치에 해당 저장소를 포함하세요.

323 

324**2. GitHub 조직 또는 계정 연결**

325 

326[**Organization settings > Git providers**](https://claude.ai/admin-settings/source-control)에서 해당 조직 또는 계정을 Claude 조직에 연결하세요. GitHub 조직도 소유한 Claude 조직의 Owner가 연결할 수 있습니다. [GitHub 조직 연결](https://claude.com/docs/claude-tag/admins/configure-github#link-your-github-organization)을 참조하세요.

327 

328**3. 저장소 권한 부여**

329 

330[Claude Tag 관리자 설정](https://claude.ai/admin-settings/claude-tag)에서 채널 또는 채널을 포함하는 더 넓은 범위, 즉 해당 Slack 워크스페이스 또는 Slack 전체에 저장소를 부여하세요. Owner 역할 또는 Claude Tag Admin 권한이 있는 사람이 부여할 수 있습니다. 채널 관리자도 자신의 GitHub 계정이 저장소의 관리자인 경우 자신의 채널에 저장소를 추가할 수 있습니다. [저장소 액세스 권한 부여](https://claude.com/docs/claude-tag/admins/configure-github#grant-repository-access)를 참조하세요.

331 

332그런 다음 채널에서 새 스레드를 시작하고 첫 메시지에서 [저장소 이름을 언급](https://claude.com/docs/claude-tag/admins/configure-github#how-granted-repositories-reach-a-session)하세요.

333 

334그래도 Claude가 저장소를 추가할 수 없다면, GitHub 연결과 저장소 권한 부여를 확인할 위치는 [Claude가 저장소에 접근할 수 없는 경우](https://claude.com/docs/claude-tag/admins/configure-github#if-claude-can%E2%80%99t-reach-a-repository)를 참조하세요.

335 

316### 개인 네트워크에 대한 git URL 다시 쓰기336### 개인 네트워크에 대한 git URL 다시 쓰기

317 337 

318저장소 URL은 제어 평면에서 HTTPS로 도착하며 git 호스트의 호스트 이름이 있습니다. GitHub Enterprise의 경우 claude.ai에서 [GitHub Enterprise 통합](https://code.claude.com/docs/ko/github-enterprise-server.md)에 대해 구성한 호스트 이름입니다. 두 개의 반복 가능한 플래그는 클론 전에 이러한 URL을 다시 작성합니다:338저장소 URL은 제어 평면에서 HTTPS로 도착하며 git 호스트의 호스트 이름이 있습니다. GitHub Enterprise의 경우 claude.ai에서 [GitHub Enterprise 통합](https://code.claude.com/docs/ko/github-enterprise-server.md)에 대해 구성한 호스트 이름입니다. 두 개의 반복 가능한 플래그는 클론 전에 이러한 URL을 다시 작성합니다:


376 396 

377빌드 및 테스트는 일반적으로 세션 로드의 가장 크고 가장 변수적인 부분이므로 리포지토리의 대표적인 빌드를 실행하고 피크 CPU 및 메모리를 측정하고 Claude Code 프로세스를 위한 공간을 남기지 않는 시작 값을 올리세요.397빌드 및 테스트는 일반적으로 세션 로드의 가장 크고 가장 변수적인 부분이므로 리포지토리의 대표적인 빌드를 실행하고 피크 CPU 및 메모리를 측정하고 Claude Code 프로세스를 위한 공간을 남기지 않는 시작 값을 올리세요.

378 398 

379러너는 `--capacity`를 사용하여 한 번에 실행하는 세션 수를 제한합니다. CPU 또는 메모리를 나누지 않으므로 러너의 세션은 컨테이너의 CPU 및 메모리를 공유합니다. 한 세션의 공유를 제한하려면 [래퍼 스크립트](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#wrapper-scripts)에서 제한을 적용하세요. 따라서 한 컨테이너에 제공할 항목은 한 번에 제공하는 세션 수에 따라 다릅니다:399러너는 `--capacity`를 사용하여 한 번에 실행하는 세션 수를 제한합니다. CPU 또는 메모리를 세션 간에 나누지 않으므로 러너의 세션은 컨테이너의 CPU 및 메모리를 공유합니다. 한 세션의 메모리 사용으로 다른 세션이 종료되지 않도록 하려면 [자체 메모리 제한](#give-each-session-its-own-memory-limit)을 둔 러너당 한 세션을 실행하세요.

380 400 

381* **러너당 한 세션**: 각 컨테이너에 한 세션의 값을 제공하세요. `--capacity 1`에서 이 크기 조정을 사용하세요. [강화 섹션](#harden-your-deployment)이 권장하고, [온디맨드 러너](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#on-demand-runners)의 경우, 값을 [`spawn-runner` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#the-spawn-runner-hook)이 제출하는 워크로드(예: Kubernetes Job의 pod 템플릿)에 설정합니다.401* **러너당 한 세션**: 각 컨테이너에 한 세션의 값을 제공하세요. `--capacity 1`에서 이 크기 조정을 사용하세요. [강화 섹션](#harden-your-deployment)이 권장하고, [온디맨드 러너](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#on-demand-runners)의 경우, 값을 [`spawn-runner` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#the-spawn-runner-hook)이 제출하는 워크로드(예: Kubernetes Job의 pod 템플릿)에 설정합니다.

382* **러너당 여러 세션**: `--capacity` 1 이상에서 한 세션의 값에 용량을 곱하세요. 컨테이너에서 한 번에 최대 그 많은 세션이 실행될 수 있기 때문입니다. [Kubernetes](#kubernetes) 및 [Docker Compose](#docker-compose) 레시피는 CPU 또는 메모리 제한 없이 `--capacity 4`를 실행하므로 실행하는 용량에 맞게 크기가 조정된 제한을 추가하세요.402* **러너당 여러 세션**: `--capacity` 1 이상에서 한 세션의 값에 용량을 곱하세요. 컨테이너에서 한 번에 최대 그 많은 세션이 실행될 수 있기 때문입니다. [Kubernetes](#kubernetes) 및 [Docker Compose](#docker-compose) 레시피는 CPU 또는 메모리 제한 없이 `--capacity 4`를 실행하므로 실행하는 용량에 맞게 크기가 조정된 제한을 추가하세요.

403* **한 호스트의 여러 러너 컨테이너**: 각 러너는 `--capacity`에 대해 자신의 세션만 계산하므로 러너 용량의 합계에 맞게 호스트 크기를 조정하세요:

404 

405 * **메모리**: 한 세션의 메모리에 합계를 곱한 다음 호스트 자체 프로세스가 사용하는 양을 더합니다

406 * **CPU**: 한 세션의 CPU 요청에 합계를 곱합니다. 모든 세션이 동시에 버스트할 수 있게 하려면 대신 CPU 제한을 곱합니다.

407 

408 각 러너에 자체 컨테이너를 제공하세요. 각 러너가 [자체 작업 디렉터리](#harden-your-deployment)를 갖도록 각 컨테이너에서 다른 러너의 컨테이너가 마운트하지 않는 스토리지에 [동일한 `--base-dir` 경로](#keep-the-base-directory-and-capacity-identical-across-runners)를 사용하세요.

409 

410### 각 세션에 자체 메모리 제한 부여

411 

412메모리가 부족할 때 한 세션이 다른 세션을 종료하지 않도록 하려면 각 러너를 한 세션의 메모리로 설정된 자체 메모리 제한 아래에서 `--capacity 1`로 실행하세요:

413 

414* **컨테이너에서**: 컨테이너당 하나의 러너를 실행하고 Kubernetes의 `limits.memory`, Docker의 `--memory`, Compose 파일의 `mem_limit`와 같은 컨테이너의 메모리 제한을 설정하세요. 호스트 자체의 메모리가 부족해지면 커널이 호스트의 어디에서든 프로세스를 종료할 수 있으므로 컨테이너 제한의 합계를 호스트 메모리 미만으로 유지하세요.

415* **컨테이너 없이 systemd에서**: 러너의 유닛에 `MemoryMax`를 설정하고 호스트당 하나의 러너를 실행하세요. 한 파일 시스템에서 [동일한 `--base-dir`를 사용하는](#keep-the-base-directory-and-capacity-identical-across-runners) 러너는 그곳에 클론된 저장소를 공유하기 때문입니다. 예를 들어 `checkout` 훅 없이 `--capacity 1`에서 한 저장소에 대한 이들의 세션이 동시에 같은 체크아웃에서 작업할 수 있습니다. 한 호스트에서 여러 러너를 실행하려면 각각에 컨테이너를 제공하세요.

416 

417컨테이너 또는 유닛이 메모리 제한에 도달하면 커널은 그 내부의 프로세스만 종료합니다. `--capacity`를 1 이상으로 설정하면 세션들이 하나의 제한을 공유합니다. 세션들이 제한에 도달하면 커널은 어떤 프로세스를 종료할지 세션 단위로 선택하지 않으므로 한 세션의 메모리 사용으로 다른 세션이 종료될 수 있습니다.

418 

419Kubernetes에서는 kubelet의 `singleProcessOOMKill` 설정의 어느 값으로도 세션을 분리할 수 없습니다. [래퍼 스크립트](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#wrapper-scripts)의 메모리 `ulimit`으로도 세션의 총 메모리를 제한할 수 없습니다. 커널은 `ulimit -v`와 같은 값을 각 프로세스에 개별적으로 적용합니다.

420 

421### 프로세스 및 스레드 제한에 여유 공간 남기기

422 

423프로세스 및 스레드 제한의 크기를 정하려면 한 세션에 필요한 양을 측정하고 제한을 공유하는 세션 수를 곱하세요. 해당 세션들이 제한에 도달하면 커널이 새 프로세스와 스레드를 거부하므로 어느 세션에서든 명령, 빌드, 테스트가 실패할 수 있습니다. 거부된 호출은 `EAGAIN`을 반환하며, 그 표준 메시지는 `Resource temporarily unavailable`입니다.

424 

425한 세션이 최대 300개의 프로세스와 스레드에 도달하고 네 개의 세션이 제한을 공유한다고 가정합니다. 합쳐서 1,200개가 필요하며, 제한을 2,400으로 하면 두 배가 필요한 빌드를 위한 여유가 생깁니다.

426 

427#### 각 제한을 설정하는 위치

428 

429이 표의 각 제한은 프로세스뿐 아니라 스레드도 계산하며, `pids.max`는 cgroup의 제한을 담는 파일입니다:

430 

431| 제한 | 설정 위치 | 공유 대상 |

432| :- | :- | :- |

433| Kubernetes의 `pids.max` | 러너를 실행하는 노드의 kubelet 구성에 있는 `podPidsLimit`. Pod 사양에서는 설정할 수 없습니다. | 한 Pod의 컨테이너 |

434| Docker의 `pids.max` | `--pids-limit` 또는 Compose 파일의 `pids_limit` | 하나의 컨테이너 |

435| systemd의 `pids.max` | 러너 유닛의 `TasksMax` | 하나의 유닛 |

436| `ulimit -u` | 러너를 시작하는 셸 또는 서비스 | 호스트에서 러너의 사용자 ID로 실행되는 모든 것. root에는 적용되지 않습니다. |

437 

438`TasksMax`를 설정하지 않으면 systemd는 `DefaultTasksMax`를 적용하며, 이 값의 기본값은 `kernel.pid_max`, `kernel.threads-max`, 루트 cgroup의 `pids.max` 중 가장 낮은 값의 15%입니다.

439 

440#### 한 세션의 피크 측정

441 

442자체 러너에 대한 수치를 얻으려면 호스트(Kubernetes에서는 노드)에서 한 세션을 측정하세요:

443 

444**1. 러너 하나만 시작**

445 

446컨테이너 또는 systemd 유닛에 다른 것 없이 러너 하나를 `--capacity 1`로 시작하되, 호스트와 환경에서 단독으로 실행되도록 하세요:

447 

448* **호스트**: 다른 러너를 실행하지 않는 호스트를 사용하세요. 그러면 다음 단계에서 해당 프로세스를 찾아낼 수 있습니다.

449* **환경**: 예를 들어 [테스트용으로 생성하는](https://code.claude.com/docs/ko/self-hosted-environments-quickstart.md#set-up-manually) 환경에서 유일한 러너가 되도록 하세요. 세션은 러너가 아닌 환경으로 라우팅됩니다.

450 

451빌드가 시작되기 전에 다음 단계의 디렉터리가 필요하므로 아직 세션을 시작하지 마세요.

452 

453**2. 러너의 cgroup 디렉터리 찾기**

454 

455컨테이너 내부가 아닌 호스트에서 `ps` 등을 사용하여 러너의 프로세스 ID를 찾으세요. 해당 ID의 `/proc/<pid>/cgroup`을 읽습니다:

456 

457* **`:pids:`를 포함하는 줄이 있는 경우**: 호스트가 cgroup v1을 사용하며, 디렉터리는 `/sys/fs/cgroup/pids` 뒤에 `:pids:` 다음의 텍스트를 붙인 것입니다

458* **유일한 줄이 `0::`로 시작하는 경우**: 호스트가 cgroup v2를 사용하며, 디렉터리는 `/sys/fs/cgroup` 뒤에 `0::` 다음의 텍스트를 붙인 것입니다

459 

460**3. 대표적인 빌드를 실행하고 피크 기록**

461 

462한 세션으로 대표적인 빌드를 실행하고 러너의 cgroup 디렉터리에서 피크를 가져오세요:

463 

464* **디렉터리에 `pids.peak`가 있는 경우**: 빌드가 끝난 후 파일을 읽습니다

465* **디렉터리에 `pids.peak`가 없는 경우**: 빌드가 실행되는 동안 `pids.current`를 1초마다 읽고 가장 높은 값을 유지합니다. 두 번의 읽기 사이의 피크는 포착되지 않으므로 이 값은 낮은 추정치로 취급하세요.

466 

467**4. 제한을 공유하는 세션 수를 곱하기**

468 

469* **한 러너의 Pod, 컨테이너 또는 유닛**: 피크에 러너의 `--capacity`를 곱합니다

470* **여러 러너가 공유하는 제한**: 피크에 해당 러너 용량의 합계를 곱합니다

471 

472그런 다음 Pod의 다른 컨테이너와 같이 제한을 공유하는 다른 모든 것의 피크를 더합니다.

473 

474**5. 결과보다 높게 제한 설정**

475 

476제한을 높이면 더 무거운 빌드를 위한 여유가 생기고, 낮추면 포크 폭탄을 더 빨리 멈출 수 있습니다.

477 

478#### `pids.max` 제한 확인

479 

480* **`pids.max`에 도달했는지 확인**: `dmesg` 등을 사용하여 호스트의 커널 로그에서 `cgroup: fork rejected by pids controller in`과 cgroup 경로를 포함하는 줄을 검색하세요. 커널은 해당 cgroup에서 프로세스나 스레드를 처음 거부할 때만 이를 로그에 기록하므로 전체 로그를 검색하세요.

481* **적용 중인 제한 확인**: 러너의 cgroup 디렉터리와 그 상위의 각 디렉터리에서 `pids.max`를 읽으세요. 가장 낮은 값이 적용 중인 제한이며, `max`는 해당 수준에 제한이 없음을 의미합니다.

383 482 

384## Kubernetes483## Kubernetes

385 484 


577 676 

578재사용 경로가 보장하고 보장하지 않는 것:677재사용 경로가 보장하고 보장하지 않는 것:

579 678 

580* **모든 클론 형태가 작동합니다**: 경로의 전체, 얕은, 또는 단일 분기 클론은 그대로 사용됩니다. 러너는 기존 클론으로 가져올 때 `--depth`를 절대 전달하지 않으므로 전체 사전 준비는 전체 기록을 유지하고 얕은 것은 얕게 유지됩니다. `CLAUDE_RUNNER_FETCH_DEPTH`(`full`, `0`, 또는 숫자; 기본값 50)는 클론이 아직 없을 때 러너가 만드는 콜드 클론만 제어합니다.679* **클론 깊이**: `--single-branch` 사용 여부와 관계없이 `--depth` 없이 클론을 빌드하세요. 러너는 `origin` 원격이 있는 클론으로 가져올 때 [`CLAUDE_RUNNER_FETCH_DEPTH`](https://code.claude.com/docs/ko/self-hosted-environments-reference#environment-variable-only-settings)를 설정하더라도 `--depth`를 절대 전달하지 않습니다. 전체 클론을 사용하면 각 세션은 클론에 없는 커밋만 다운로드합니다. 얕은 클론을 사용하면 클론의 가장 오래된 커밋 이전에 갈라진 브랜치의 세션은 해당 브랜치의 전체 기록을 다운로드합니다.

581* **추적된 변경 사항은 리셋되고, 추적되지 않은 파일은 유지됩니다**: `--capacity 1`에서 각 세션은 이전 세션의 추적된 수정 사항을 지우는 하드 리셋으로 시작하지만, 러너는 `git clean`을 실행하지 않으므로 잠금된 소유자의 이전 세션에서 생긴 추적되지 않은 파일은 트리에 남아 있습니다.680* **추적된 변경 사항은 리셋되고, 추적되지 않은 파일은 유지됩니다**: `--capacity 1`에서 각 세션은 이전 세션의 추적된 수정 사항을 지우는 하드 리셋으로 시작하지만, 러너는 `git clean`을 실행하지 않으므로 잠금된 소유자의 이전 세션에서 생긴 추적되지 않은 파일은 트리에 남아 있습니다.

582* **세션별 디렉토리도 유지됩니다**: 체크아웃 옆에 러너는 실행하는 모든 세션에 대해 `<base-dir>/_sessions/` 아래에 세션별 항목을 생성합니다. 세션의 Claude 설정 디렉토리는 대화 기록의 로컬 복사본을 보유합니다. 그 옆에는 세션이 있을 때 세션의 업로드된 파일이 있습니다. 세션 디렉토리도 거기에 있습니다: 세션이 실행되는 동안 세션별 worktrees 및 `checkout` 훅 체크아웃을 보유하며, Claude가 그 안에 작성한 다른 모든 것을 유지합니다.681* **세션별 디렉토리도 유지됩니다**: 체크아웃 옆에 러너는 실행하는 모든 세션에 대해 `<base-dir>/_sessions/` 아래에 세션별 항목을 생성합니다. 세션의 Claude 설정 디렉토리는 대화 기록의 로컬 복사본을 보유합니다. 그 옆에는 세션이 있을 때 세션의 업로드된 파일이 있습니다. 세션 디렉토리도 거기에 있습니다: 세션이 실행되는 동안 세션별 worktrees 및 `checkout` 훅 체크아웃을 보유하며, Claude가 그 안에 작성한 다른 모든 것을 유지합니다.

583 682 


587* **git 프록시를 사용하면 `reftable` 사전 준비는 ref를 잃습니다**: 러너가 각 세션 전에 `.git/`을 정제할 때 `.git/refs/`는 유지하고 `.git/reftable/` 디렉토리는 제거합니다. git의 `reftable` ref 형식으로 사전 준비된 클론은 이 과정에서 ref를 잃으므로, 대신 git의 `files` ref 형식으로 클론을 사전 준비하세요.686* **git 프록시를 사용하면 `reftable` 사전 준비는 ref를 잃습니다**: 러너가 각 세션 전에 `.git/`을 정제할 때 `.git/refs/`는 유지하고 `.git/reftable/` 디렉토리는 제거합니다. git의 `reftable` ref 형식으로 사전 준비된 클론은 이 과정에서 ref를 잃으므로, 대신 git의 `files` ref 형식으로 클론을 사전 준비하세요.

588* **긴 클론은 해결 방법이 필요하지 않습니다**: 러너는 각 git 작업을 120초 진행 없음 감시자 및 30분 하드 캡으로 제한하며, 플랫 타임아웃이 아니므로 진행을 계속 보고하는 느린 콜드 클론이 완료됩니다.687* **긴 클론은 해결 방법이 필요하지 않습니다**: 러너는 각 git 작업을 120초 진행 없음 감시자 및 30분 하드 캡으로 제한하며, 플랫 타임아웃이 아니므로 진행을 계속 보고하는 느린 콜드 클론이 완료됩니다.

589 688 

689### 러너가 클론을 사용하는지 확인

690 

691러너가 클론을 사용하는지 확인하려면 [`--log-level debug`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)로 러너를 시작하고 해당 저장소에서 세션을 시작하세요. 러너는 `Prefetched repo found at`과 클론의 경로를 로그에 기록합니다. 대신 `No prefetched repo, fresh init at`을 로그에 기록하면 해당 줄의 경로에서 사용 가능한 클론을 찾지 못한 것입니다. 클론이 해당 경로에 있고, 러너의 사용자가 소유하며, `origin`이라는 이름의 원격이 있는지 확인하세요.

692 

693러너가 클론을 찾았는데도 세션이 여전히 느리게 시작되면 클론이 얕은 클론인지 확인하세요.

694 

590## 버전 고정695## 버전 고정

591 696 

592각 세션의 자식 프로세스는 기본적으로 러너 자신의 바이너리를 실행하고, 러너는 생성하는 세션 내에서 자동 업데이트를 끕니다. 이 기본 설정에서는 모든 세션이 호스트에 설치하거나 이미지에 빌드한 버전을 실행합니다. 호스트 수준 업데이트는 러너가 다음 번에 시작할 때 적용됩니다.697각 세션의 자식 프로세스는 기본적으로 러너 자신의 바이너리를 실행하고, 러너는 생성하는 세션 내에서 자동 업데이트를 끕니다. 이 기본 설정에서는 모든 세션이 호스트에 설치하거나 이미지에 빌드한 버전을 실행합니다. 호스트 수준 업데이트는 러너가 다음 번에 시작할 때 적용됩니다.


609* **고정 플릿**: 정적 러너 복제본 세트를 실행하고 각 러너가 제공하는 [Prometheus 메트릭](https://code.claude.com/docs/ko/self-hosted-environments-reference.md#prometheus-metrics)에서 확장하세요.714* **고정 플릿**: 정적 러너 복제본 세트를 실행하고 각 러너가 제공하는 [Prometheus 메트릭](https://code.claude.com/docs/ko/self-hosted-environments-reference.md#prometheus-metrics)에서 확장하세요.

610* **온디맨드 러너**: `claude self-hosted-runner orchestrator` 서브명령을 실행하세요. 이는 Anthropic에서 사용 가능한 러너 없이 대기 중인 세션을 폴링하고 `spawn-runner` 훅을 호출하여 세션당 하나를 부팅합니다. [온디맨드 러너](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#on-demand-runners)를 참조하세요.715* **온디맨드 러너**: `claude self-hosted-runner orchestrator` 서브명령을 실행하세요. 이는 Anthropic에서 사용 가능한 러너 없이 대기 중인 세션을 폴링하고 `spawn-runner` 훅을 호출하여 세션당 하나를 부팅합니다. [온디맨드 러너](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#on-demand-runners)를 참조하세요.

611 716 

717### 고정 플릿에서 유휴 세션 해제

718 

719모든 러너가 온라인 상태인데도 고정 플릿에서 세션이 계속 대기 중이라면 유휴 세션이 원인일 수 있습니다. 기본적으로 세션은 턴이 끝난 후에도 슬롯을 유지하며, 해당 러너는 그 세션의 [소유자](https://code.claude.com/docs/ko/self-hosted-environments#key-concepts)에게 잠긴 상태로 남습니다. 팀의 [클라우드 예약 작업](https://code.claude.com/docs/ko/routines.md)이 실행할 때마다 새 세션을 시작한다면, 그 유휴 세션들이 모든 슬롯을 채울 수 있습니다.

720 

721확인하려면 각 러너의 [Prometheus 메트릭](https://code.claude.com/docs/ko/self-hosted-environments-reference.md#prometheus-metrics)에서 `claude_code_self_hosted_runner_session_idle_seconds`를 읽으세요. 러너가 보유한 각 세션에는 고유한 시리즈가 있습니다. 세션이 사용 중일 때는 `0`이고, 그렇지 않으면 유휴 상태가 된 이후 경과한 초입니다. 허용할 유휴 시간을 정하세요. 작업 도중 사람들이 잠시 멈추는 시간보다 길고, 예약 작업의 다음 실행이 시작되기 전에 각 실행이 해제될 만큼 짧아야 합니다. 시리즈를 이 시간과 비교하세요.

722 

723* **해당 시간을 초과하는 시리즈(예: 30분의 경우 `1800`)**: 유휴 세션이 해당 슬롯을 점유하고 있으므로 `--release-idle-session-min`을 설정하세요.

724* **모든 시리즈가 해당 시간 미만**: 그만큼 오래 유휴 상태인 세션이 없습니다. 러너를 추가하거나, [유휴 상태가 되지 않는 세션](#some-sessions-don’t-count-as-idle)에 대해 [`--kill-session-after-min`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)을 설정하세요.

725* **시리즈가 없는 러너**: 해당 러너를 점유한 세션이 없습니다. [문제 해결](#troubleshooting)의 **세션이 계속 대기 중인 경우**를 참조하세요.

726* **메트릭이 응답하지 않는 러너**: 프로세스가 종료되었을 수 있습니다. [러너가 종료될 때](#when-the-runner-exits)의 **정상으로 보이는 환경**을 참조하세요.

727 

728유휴 세션을 해제하려면 모든 러너를 [`--release-idle-session-min`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)과 해당 시간(분 단위)으로 시작하세요(예: `--release-idle-session-min 30`). 그러면 러너는 예약 작업이 시작했든 사람이 시작했든 관계없이 그만큼 오래 유휴 상태로 남은 세션을 모두 해제합니다.

729 

730* **푸시되지 않은 작업**: 해제된 세션은 다음 메시지에서 재개되지만, 푸시하지 않은 작업은 포함되지 않습니다. 커밋을 유지하려면 [재개된 세션에서 푸시되지 않은 작업 손실](#additional-limitations)을 참조하세요.

731* **러너 종료**: 마지막 세션을 해제한 러너는 [정상 종료](#when-the-runner-exits)를 시작합니다. [배포 강화](#harden-your-deployment)에 설명된 대로 수퍼바이저가 새 파일 시스템에서 러너를 다시 시작하도록 하세요.

732* **유휴 상태가 되지 않는 세션**: [일부 세션은 유휴 상태로 간주되지 않으므로](#some-sessions-don’t-count-as-idle) [`--kill-session-after-min`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)도 설정하세요.

733 

612## 알려진 문제 및 제한 사항734## 알려진 문제 및 제한 사항

613 735 

614다음은 이 릴리스의 제한 사항이며, 해결 방법이 있는 경우 제시합니다.736다음은 이 릴리스의 제한 사항이며, 해결 방법이 있는 경우 제시합니다.


642### 추가 제한 사항764### 추가 제한 사항

643 765 

644* **재개된 세션이 푸시되지 않은 작업을 손실함**: 새로운 러너는 저장소를 시작 브랜치에서 다시 클론하므로, 세션이 푸시하지 않은 작업은 손실됩니다.766* **재개된 세션이 푸시되지 않은 작업을 손실함**: 새로운 러너는 저장소를 시작 브랜치에서 다시 클론하므로, 세션이 푸시하지 않은 작업은 손실됩니다.

645 * **커밋된 작업을 보존하려면**: 환경의 모든 러너에 [`--push-outcome-on-release`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)를 설정합니다. 플래그가 없는 러너는 세션을 시작 브랜치에서 재개하기 때문입니다. 플래그가 있는 러너는 해제하기 전에 세션의 결과 브랜치를 최선의 노력으로 푸시하며, 재개된 세션은 해당 커밋에서 시작됩니다. 푸시에는 [Anthropic 관리 git](#use-the-anthropic-git-proxy)을 사용하는 러너를 포함하여 러너 호스트 자체의 git 자격 증명이 사용됩니다. 커밋되지 않은 변경 사항은 여전히 손실됩니다.767 * **커밋된 작업을 보존하려면**: 환경의 모든 러너에 [`--push-outcome-on-release`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)를 설정합니다. 플래그가 없는 러너는 세션을 시작 브랜치에서 재개하기 때문입니다. 플래그가 있는 러너는 해제하기 전에 세션의 결과 브랜치를 최선의 노력으로 푸시하며, 재개된 세션은 해당 커밋에서 시작됩니다. 푸시에는 [Anthropic 관리 git](#use-the-anthropic-git-proxy)을 사용하는 러너를 포함하여 러너 호스트 자체의 git 자격 증명이 사용됩니다.

646 * **`checkout` 훅을 사용하는 경우**: [`checkout` 라이프사이클 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#checkout)을 통해 체크아웃된 저장소는 푸시되지 않습니다. 대신 [`post-session` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#post-session)에서 해당 저장소의 스냅샷을 만듭니다.768 * **`checkout` 훅을 사용하는 경우**: [`checkout` 라이프사이클 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#checkout)을 통해 체크아웃된 저장소는 푸시되지 않습니다. 대신 [`post-session` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#post-session)에서 해당 저장소의 스냅샷을 만듭니다.

647 * **플래그를 활성화하기 전에**: 소스 원격의 `claude/*` refs에 푸시할 수 있는 사람을 제한합니다. 재개 시 러너는 이전에 푸시된 브랜치를 누가 푸시했는지 확인하지 않고 가져옵니다.769 * **플래그를 활성화하기 전에**: 소스 원격의 `claude/*` refs에 푸시할 수 있는 사람을 제한합니다. 재개 시 러너는 이전에 푸시된 브랜치를 누가 푸시했는지 확인하지 않고 가져옵니다.

770 * **커밋되지 않은 변경 사항은 여전히 손실됨**: Claude가 응답을 마쳤을 때 커밋하고 푸시하도록 요청하려면 [세션이 작업을 푸시하도록 프롬프트 지정](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#prompt-sessions-to-push-their-work)을 참조합니다.

648* **세션 중간에 추가한 저장소는 클론에 실패할 수 있음**: Claude는 HTTPS를 통해 `git clone`으로 저장소를 클론합니다. [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)가 없는 러너에서는 호스트에서 해당 저장소를 읽을 수 있는 수단이 없으면 git 인증 오류로 클론이 실패합니다. 가능하면 세션을 만들 때 세션에 필요한 모든 저장소를 선택합니다.771* **세션 중간에 추가한 저장소는 클론에 실패할 수 있음**: Claude는 HTTPS를 통해 `git clone`으로 저장소를 클론합니다. [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)가 없는 러너에서는 호스트에서 해당 저장소를 읽을 수 있는 수단이 없으면 git 인증 오류로 클론이 실패합니다. 가능하면 세션을 만들 때 세션에 필요한 모든 저장소를 선택합니다.

649* **일부 커넥터는 자체 호스팅 세션에 나타나지 않음**: claude.ai 설정에서 아직 연결하지 않은 커넥터는 자체 호스팅 세션에 나열되지 않으며, 세션은 연결하라는 메시지를 표시하지 않습니다. 먼저 설정에서 연결한 후 새로운 세션을 시작합니다. 이미 실행 중인 세션에 커넥터를 추가해도 Claude에서 해당 도구를 사용할 수 없습니다. 새로 추가된 커넥터를 선택하려면 새로운 세션을 시작합니다.772* **일부 커넥터는 자체 호스팅 세션에 나타나지 않음**: claude.ai 설정에서 아직 연결하지 않은 커넥터는 자체 호스팅 세션에 나열되지 않으며, 세션은 연결하라는 메시지를 표시하지 않습니다. 먼저 설정에서 연결한 후 새로운 세션을 시작합니다. 이미 실행 중인 세션에 커넥터를 추가해도 Claude에서 해당 도구를 사용할 수 없습니다. 새로 추가된 커넥터를 선택하려면 새로운 세션을 시작합니다.

650* **누군가 세션을 보관 또는 삭제하거나, 세션 메뉴에서 러너를 해제하는 경우**: [`--push-outcome-on-release`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags) 푸시에 의존할 수 없습니다. 이러한 경우 커밋을 저장하려면 [`post-session` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#post-session)에서 `HEAD`를 복구 브랜치로 푸시합니다. 해당 문서의 예제에서 시작하는 경우, 예제는 스냅샷 커밋 후에만 푸시하므로 커밋되지 않은 항목이 없을 때도 푸시하도록 수정합니다.773* **누군가 세션을 보관 또는 삭제하거나, 세션 메뉴에서 러너를 해제하는 경우**: [`--push-outcome-on-release`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags) 푸시에 의존할 수 없습니다. 이러한 경우 커밋을 저장하려면 [`post-session` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#post-session)에서 `HEAD`를 복구 브랜치로 푸시합니다. 해당 문서의 예제에서 시작하는 경우, 예제는 스냅샷 커밋 후에만 푸시하므로 커밋되지 않은 항목이 없을 때도 푸시하도록 수정합니다.


684* **세션을 가져온 직후 세션이 실패함**: claude.ai/code에서 세션을 열어 오류를 확인합니다. 오류에 git이 인증하지 못했다고 표시되면 러너의 [git 자격 증명](#configure-git)을 확인합니다. `--use-anthropic-git-proxy`로 시작한 러너에서는 [git 프록시를 사용하는 러너에서 세션이 시작되지 않는 경우](#when-anthropic-doesnt-serve-a-session)를 참조하십시오.807* **세션을 가져온 직후 세션이 실패함**: claude.ai/code에서 세션을 열어 오류를 확인합니다. 오류에 git이 인증하지 못했다고 표시되면 러너의 [git 자격 증명](#configure-git)을 확인합니다. `--use-anthropic-git-proxy`로 시작한 러너에서는 [git 프록시를 사용하는 러너에서 세션이 시작되지 않는 경우](#when-anthropic-doesnt-serve-a-session)를 참조하십시오.

685 808 

686 쓰기 불가능한 기본 디렉터리는 세션을 실패시키는 대신 시작 시 러너를 중지시킵니다. 이 목록의 **러너가 시작 시 `cannot create or write to base directory`와 함께 종료됨** 항목을 참조하십시오.809 쓰기 불가능한 기본 디렉터리는 세션을 실패시키는 대신 시작 시 러너를 중지시킵니다. 이 목록의 **러너가 시작 시 `cannot create or write to base directory`와 함께 종료됨** 항목을 참조하십시오.

810* **세션을 가져왔지만 Claude가 첫 메시지에 응답하지 않음**: 러너가 프록시를 통해 `api.anthropic.com`에 연결하는 경우, 세션의 `/worker/events/stream` 응답을 도착하는 대로 통과시키도록 프록시를 구성합니다. 러너의 타임아웃을 늘려도 도움이 되지 않습니다. 러너의 로그에서 원인을 확인하려면 [세션을 가져왔지만 Claude가 첫 메시지에 응답하지 않는 경우](#when-a-sessions-first-message-is-never-answered)를 참조하십시오.

687* **`--use-anthropic-git-proxy`를 설정한 러너에서 세션이 시작되지 않음**: 러너의 로그에서 `access denied by the git proxy` 또는 `/git_proxy/`를 포함하는 `api.anthropic.com` 주소를 명시하는 git 오류를 찾습니다. Anthropic이 세션을 제공했는지 확인하고 원인을 해결하려면 [git 프록시를 사용하는 러너에서 세션이 시작되지 않는 경우](#when-anthropic-doesnt-serve-a-session)를 참조하십시오.811* **`--use-anthropic-git-proxy`를 설정한 러너에서 세션이 시작되지 않음**: 러너의 로그에서 `access denied by the git proxy` 또는 `/git_proxy/`를 포함하는 `api.anthropic.com` 주소를 명시하는 git 오류를 찾습니다. Anthropic이 세션을 제공했는지 확인하고 원인을 해결하려면 [git 프록시를 사용하는 러너에서 세션이 시작되지 않는 경우](#when-anthropic-doesnt-serve-a-session)를 참조하십시오.

688* **세션이 인증 이그레스 프록시를 통해 네트워크에 연결할 수 없음**: [`--proxy-authorization-command` 또는 `--proxy-authorization-file`](#authenticate-to-an-egress-proxy)로 설정한 소스가 실패하거나, 30초 후 시간 초과되거나, 빈 값을 반환하면 러너는 해당 연결에 `502 Bad Gateway`로 응답하고 그 이유를 로그에 기록합니다. 러너는 해당 로그에서 명령의 stderr를 가리며 헤더 값은 절대 로그에 기록하지 않습니다. `--proxy-authorization-command`를 사용하는 경우 호스트에서 직접 명령을 실행하여 stdout에 전체 헤더 값이 출력되는지 확인합니다. 러너가 대신 시작 시 `could not start the proxy-authorization listener`와 함께 종료된다면 루프백 리스너를 열 수 없었던 것입니다.812* **세션이 인증 이그레스 프록시를 통해 네트워크에 연결할 수 없음**: [`--proxy-authorization-command` 또는 `--proxy-authorization-file`](#authenticate-to-an-egress-proxy)로 설정한 소스가 실패하거나, 30초 후 시간 초과되거나, 빈 값을 반환하면 러너는 해당 연결에 `502 Bad Gateway`로 응답하고 그 이유를 로그에 기록합니다. 러너는 해당 로그에서 명령의 stderr를 가리며 헤더 값은 절대 로그에 기록하지 않습니다. `--proxy-authorization-command`를 사용하는 경우 호스트에서 직접 명령을 실행하여 stdout에 전체 헤더 값이 출력되는지 확인합니다. 러너가 대신 시작 시 `could not start the proxy-authorization listener`와 함께 종료된다면 루프백 리스너를 열 수 없었던 것입니다.

689* **러너가 `rejecting the malformed poll response`를 포함하는 `Poll failed` 줄을 로그에 기록함**: 러너가 수신한 작업 폴링 응답의 본문이 큐에서 예상하는 JSON이 아닙니다. 한 가지 원인은 가로채는 프록시나 캡티브 포털이 자체 페이지로 응답하는 경우입니다. 러너가 프록시를 통해 연결한다면 `api.anthropic.com`의 응답을 변경 없이 통과시키도록 프록시를 구성합니다.813* **러너가 `rejecting the malformed poll response`를 포함하는 `Poll failed` 줄을 로그에 기록함**: 러너가 수신한 작업 폴링 응답의 본문이 큐에서 예상하는 JSON이 아닙니다. 한 가지 원인은 가로채는 프록시나 캡티브 포털이 자체 페이지로 응답하는 경우입니다. 러너가 프록시를 통해 연결한다면 `api.anthropic.com`의 응답을 변경 없이 통과시키도록 프록시를 구성합니다.


708* **세션이 `This runner couldn't read`와 함께 시작되지 않음**: 러너가 [git 자격 증명](#configure-git)으로 git 호스트에 저장소를 요청했으나 찾을 수 없다는 응답을 받았습니다. 저장소가 존재하지 않거나 해당 자격 증명으로는 저장소에 접근할 수 없습니다.832* **세션이 `This runner couldn't read`와 함께 시작되지 않음**: 러너가 [git 자격 증명](#configure-git)으로 git 호스트에 저장소를 요청했으나 찾을 수 없다는 응답을 받았습니다. 저장소가 존재하지 않거나 해당 자격 증명으로는 저장소에 접근할 수 없습니다.

709 * **러너를 관리하는 경우**: 러너의 git 자격 증명에 저장소에 대한 읽기 액세스 권한을 부여한 후 새 세션을 시작합니다.833 * **러너를 관리하는 경우**: 러너의 git 자격 증명에 저장소에 대한 읽기 액세스 권한을 부여한 후 새 세션을 시작합니다.

710 * **세션을 시작한 경우**: 저장소가 존재하지 않는다면 올바른 저장소로 새 세션을 시작합니다. 러너가 저장소에 접근할 수 없다면 러너 관리자에게 액세스 권한을 부여해 달라고 요청한 후 새 세션을 시작합니다.834 * **세션을 시작한 경우**: 저장소가 존재하지 않는다면 올바른 저장소로 새 세션을 시작합니다. 러너가 저장소에 접근할 수 없다면 러너 관리자에게 액세스 권한을 부여해 달라고 요청한 후 새 세션을 시작합니다.

711* **세션 시작에 몇 분이 걸림**: 대개 초기 클론이 대부분의 시간을 차지합니다. `claude_code_self_hosted_runner_session_init_duration_seconds` [메트릭](https://code.claude.com/docs/ko/self-hosted-environments-reference.md#prometheus-metrics)을 확인하여 이를 검증하고, [미리 준비된 체크아웃](#reuse-a-pre-warmed-checkout)이나 더 작은 `CLAUDE_RUNNER_FETCH_DEPTH`로 클론 시간을 줄입니다.835* **세션 시작 또는 재개에 몇 분이 걸림**: 한 가지 원인은 새로 수행하는 클론입니다. 각 러너를 빈 디스크에서 시작하고 [`checkout` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#checkout)이 없는 플릿에서는 러너가 Claude Code를 시작하기 전에 세션의 저장소를 새로 클론합니다. 빈 디스크에서 재개되는 세션도 동일한 클론을 다시 기다립니다.

836 

837 새 클론을 건너뛰려면 [미리 준비된 체크아웃](#reuse-a-pre-warmed-checkout)을 제공합니다. 이미 제공하고 있다면 [러너가 이를 사용하는지 확인](#confirm-that-the-runner-uses-your-clone)합니다. 러너가 직접 클론을 만들고 세션 하나를 마친 후 종료되는 경우, [`CLAUDE_RUNNER_FETCH_DEPTH`](https://code.claude.com/docs/ko/self-hosted-environments-reference#environment-variable-only-settings)를 기본값인 50개 커밋보다 낮춰 더 적은 기록을 가져옵니다.

838 

839 훅을 사용하는 경우 훅이 러너의 클론 대신 실행되므로, 훅이 수행하는 작업을 대신 살펴봅니다. `claude_code_self_hosted_runner_session_init_duration_seconds` [메트릭](https://code.claude.com/docs/ko/self-hosted-environments-reference.md#prometheus-metrics)을 확인하여 시작에 걸리는 시간을 파악합니다.

712* **턴이 401로 실패함**: 턴이 Anthropic API의 401 또는 403으로 끝나면 러너는 Anthropic에서 새 [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/ko/self-hosted-environments-configuration#wrapper-scripts)을 가져와 세션에 전달합니다. 실패한 턴은 재시도되지 않습니다. 이 토큰은 수명이 짧으며, 러너는 세션의 stdin을 통해 토큰을 교체합니다.840* **턴이 401로 실패함**: 턴이 Anthropic API의 401 또는 403으로 끝나면 러너는 Anthropic에서 새 [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/ko/self-hosted-environments-configuration#wrapper-scripts)을 가져와 세션에 전달합니다. 실패한 턴은 재시도되지 않습니다. 이 토큰은 수명이 짧으며, 러너는 세션의 stdin을 통해 토큰을 교체합니다.

713 841 

714 가져오기가 실패하면 러너는 언제 재시도할지 알려 주는 `inference_token refresh failed` 줄을 로그에 기록하고, 세션이 실행되는 동안 계속 재시도합니다.842 가져오기가 실패하면 러너는 언제 재시도할지 알려 주는 `inference_token refresh failed` 줄을 로그에 기록하고, 세션이 실행되는 동안 계속 재시도합니다.


788 916 

789러너 호스트에서 안내에 따른 진단을 받으려면 [doctor 하위 명령](#troubleshooting)을 실행합니다.917러너 호스트에서 안내에 따른 진단을 받으려면 [doctor 하위 명령](#troubleshooting)을 실행합니다.

790 918 

919### 세션을 가져왔지만 Claude가 첫 메시지에 응답하지 않는 경우

920 

921러너가 세션을 가져왔지만 Claude가 첫 메시지에 응답하지 않고, 러너가 프록시를 통해 `api.anthropic.com`에 연결한다면 프록시가 원인일 수 있습니다. Anthropic은 열린 상태로 유지되는 하나의 스트리밍 응답을 통해 세션에 메시지를 보냅니다. 프록시가 이 응답을 버퍼링하거나 아무것도 전달하기 전에 종료하면 첫 메시지가 도착하지 않습니다. 세션의 다른 요청은 여전히 성공합니다.

922 

923이를 해결하려면 프록시가 다음 요청을 처리하는 방식을 변경합니다.

924 

925```text theme={null}

926GET https://api.anthropic.com/v1/code/sessions/<session-id>/worker/events/stream

927```

928 

929* **응답을 버퍼링하지 않음**: 응답을 도착하는 대로 통과시킵니다. 콘텐츠 유형은 `text/event-stream`입니다.

930* **응답이 열린 상태로 유지되도록 허용**: 응답은 최대 1시간 동안 열려 있을 수 있습니다. 프록시에 유휴 타임아웃이 있다면 15초보다 충분히 길게 유지합니다. Anthropic은 기본적으로 최소 그 간격마다 keep-alive를 보내기 때문입니다.

931 

932그런 다음 새 세션을 시작하고 Claude가 응답하는지 확인합니다. 러너의 타임아웃을 늘려도 도움이 되지 않으며, 러너가 세션을 중지하기 전까지 더 오래 기다리게 될 뿐입니다.

933 

934#### 러너의 로그에서 원인 확인하기

935 

936이 단계는 기본값인 `--log-level info`로 실행되는 Claude Code v2.1.287 이상의 러너를 위한 것입니다. 이전 러너는 이러한 줄을 더 늦게 기록하거나 전혀 기록하지 않습니다.

937 

9381. [`--startup-timeout-min`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)(기본값 15분)이 지날 때까지 기다립니다. 그러면 러너가 세션을 중지하고 `no child output for`를 포함하며 `— releasing`으로 끝나는 줄을 로그에 기록합니다.

9392. 러너의 로그에서 `SDKStartup: SSE`를 검색합니다. 이러한 줄은 1단계의 줄 몇 줄 뒤에 있는 `finished: interrupted` 줄 다음에 나옵니다. 대부분 타임스탬프가 없으므로 로그 수집기에서는 다른 위치에 표시될 수 있습니다.

9403. 다음 표에서 해당 줄을 찾습니다.

941 

942| 로그 줄에 포함된 내용 | 조치 |

943| :- | :- |

944| `SSE connect failed (no response in 30s)` 또는 `SSE liveness timeout` | 프록시가 요청을 전달하는지, 응답의 헤더와 데이터를 도착하는 대로 통과시키는지, 연결을 끊지 않는지 확인합니다 |

945| `SSE connect failed (HTTP` 및 상태 코드 | 프록시 자체의 로그를 확인합니다. 프록시가 요청에 직접 응답했다면 요청이 프록시를 통과하도록 허용합니다. |

946| `SSE connect failed (` 및 그 밖의 텍스트 | 괄호 안의 텍스트가 오류입니다. 프록시 자체의 로그에서 같은 연결을 찾습니다. |

947| `SSE stream ended by server`가 반복해서 나타남 | 오래 지속되는 응답에 대한 프록시의 시간 제한을 확인합니다. 이러한 줄이 한 번만 나타나는 것은 정상입니다. |

948| `SSE reconnected after` | 그 뒤에 나오는 다른 줄 중 하나를 찾습니다. 이 줄은 무언가가 세션에 도달했다는 의미가 아닙니다. |

949 

950로그에 이러한 줄이 하나도 없거나 프록시의 로그에 아무 문제가 없다면 [문제를 보고합니다](#report-an-issue).

951 

952#### 세션의 재시도 중지하기

953 

954세션은 메시지를 대기 상태로 유지하며, 세션의 소유자를 처리할 수 있는 러너가 세션을 다시 가져옵니다. 프록시를 변경하기 전까지 세션은 매번 같은 방식으로 기다립니다. 이를 중지하려면 claude.ai/code에서 세션을 보관합니다.

955 

791## 다음 단계956## 다음 단계

792 957 

793* [세션 사용자 정의](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md): 래퍼 스크립트, 수명 주기 훅, 온디맨드 러너, MCP 서버, 권한958* [세션 사용자 정의](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md): 래퍼 스크립트, 수명 주기 훅, 온디맨드 러너, MCP 서버, 권한

Details

121* **세션이 git 오류로 시작에 실패하는 경우**: 오류에 git의 `could not read Username for`와 그 뒤에 git 호스트의 URL이 포함되어 있다면, 러너에 해당 호스트에 대한 HTTPS 자격 증명이 없는 것입니다.121* **세션이 git 오류로 시작에 실패하는 경우**: 오류에 git의 `could not read Username for`와 그 뒤에 git 호스트의 URL이 포함되어 있다면, 러너에 해당 호스트에 대한 HTTPS 자격 증명이 없는 것입니다.

122 * **HTTPS 자격 증명 제공**: [Git 구성](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#configure-git)을 참조하세요122 * **HTTPS 자격 증명 제공**: [Git 구성](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#configure-git)을 참조하세요

123 * **대신 SSH로 클론**: 러너 호스트에 이미 SSH 키가 있다면 [비공개 네트워크용 git URL 재작성](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)을 참조하세요123 * **대신 SSH로 클론**: 러너 호스트에 이미 SSH 키가 있다면 [비공개 네트워크용 git URL 재작성](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)을 참조하세요

124 * **두 가지 해결 방법 중 하나를 적용한 후**: 새 세션을 시작하는 대신 러너를 다시 시작하고 실패한 세션을 지켜보세요. 세션이 여러 번 실패했다면 러너가 `Picked up session`을 기록할 때까지 몇 분 정도 기다리세요.

125 * **대신 다른 저장소를 사용하려면**: 실패한 세션을 [보관](https://code.claude.com/docs/ko/claude-code-on-the-web.md#archive-sessions)하거나 [삭제](https://code.claude.com/docs/ko/claude-code-on-the-web.md#delete-sessions)한 다음, 러너를 다시 시작하고 새 세션을 시작하세요. 그렇지 않으면 러너가 새 세션 대신 실패한 세션을 선택할 수 있습니다.

124 126 

125### 러너가 종료되는 경우127### 러너가 종료되는 경우

126 128 

Details

83 83 

84| 플래그 | 기본값 | 설명 |84| 플래그 | 기본값 | 설명 |

85| :- | :- | :- |85| :- | :- | :- |

86| `--hook-concurrency <n>` | `4` | 병렬로 실행되는 최대 `spawn-runner` 훅입니다. 또한 폴링당 청구되는 스폰 요청 수를 제한합니다. |86| `--hook-concurrency <n>` | `4` | 병렬로 실행되는 최대 `spawn-runner` 훅입니다. 또한 폴링당 청구되는 스폰 요청 수를 제한합니다. 오케스트레이터는 자신이 시작한 모든 훅이 완료된 후에만 새 스폰 요청을 확인하므로, 느린 훅 하나가 해당 오케스트레이터의 다음 훅을 지연시킵니다. |

87| `--hook-timeout <sec>` | `60` | 이 많은 초 후 훅의 프로세스 트리를 종료합니다. 타임아웃과 5초 킬 유예는 `--expected-spawn-seconds` 아래에 있어야 합니다. 오케스트레이터는 시작 시 이를 적용합니다. |87| `--hook-timeout <sec>` | `60` | 이 많은 초 후 훅의 프로세스 트리를 종료합니다. 타임아웃과 5초 킬 유예는 `--expected-spawn-seconds` 아래에 있어야 합니다. 오케스트레이터는 시작 시 이를 적용합니다. |

88| `--expected-spawn-seconds <sec>` | `120` | 오케스트레이터가 스폰 요청을 받은 시점부터 러너가 등록될 때까지의 예상 p99 시간이며, 플랫폼에서 용량을 기다리는 시간도 포함됩니다. 서버는 10\~3600 범위를 적용합니다. 모든 폴링에서 서버 측 임차로 전송됩니다. 경과하기 전에 러너가 등록되지 않으면 세션이 새 주문 ID로 다시 제공됩니다. 모든 복제본은 이 값을 공유해야 합니다. |88| `--expected-spawn-seconds <sec>` | `120` | 오케스트레이터가 스폰 요청을 받은 시점부터 러너가 등록될 때까지의 예상 p99 시간이며, 플랫폼에서 용량을 기다리는 시간도 포함됩니다. 서버는 10\~3600 범위를 적용합니다. 모든 폴링에서 서버 측 임차로 전송됩니다. 경과하기 전에 러너가 등록되지 않으면 세션이 새 주문 ID로 다시 제공됩니다. 모든 복제본은 이 값을 공유해야 합니다. |

89| `--min-idle <n>` | `0` | 대기 중인 러너를 사전에 생성하여 최소 N개의 유휴 세션 슬롯을 무료로 유지합니다. `0`은 사전 워밍을 비활성화합니다. 러너의 `--exit-if-unused-min`과 쌍을 이루어 잉여 대기 러너가 자신을 회수하도록 합니다. |89| `--min-idle <n>` | `0` | 대기 중인 러너를 사전에 생성하여 최소 N개의 유휴 세션 슬롯을 무료로 유지합니다. `0`은 사전 워밍을 비활성화합니다. 러너의 `--exit-if-unused-min`과 쌍을 이루어 잉여 대기 러너가 자신을 회수하도록 합니다. |


116| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | 세션이 `--kill-session-after-min` 제한에 도달한 후, 러너가 세션을 종료하기 전에 실행 중인 턴이 완료되거나 해제가 완료될 때까지 대기하는 시간입니다. |116| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | 세션이 `--kill-session-after-min` 제한에 도달한 후, 러너가 세션을 종료하기 전에 실행 중인 턴이 완료되거나 해제가 완료될 때까지 대기하는 시간입니다. |

117| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | 턴이 완료된 후 세션의 프로세스가 턴의 끝을 Anthropic에 보고하는 동안 러너가 `--drain-wait-sec` 드레인에 대해 세션을 바쁜 것으로 계산하는 시간의 상한입니다. `0` 또는 사용할 수 없는 값은 기본값으로 폴백되므로 보유를 끌 수 없습니다. Claude Code v2.1.275 이상이 필요합니다. |117| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | 턴이 완료된 후 세션의 프로세스가 턴의 끝을 Anthropic에 보고하는 동안 러너가 `--drain-wait-sec` 드레인에 대해 세션을 바쁜 것으로 계산하는 시간의 상한입니다. `0` 또는 사용할 수 없는 값은 기본값으로 폴백되므로 보유를 끌 수 없습니다. Claude Code v2.1.275 이상이 필요합니다. |

118| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | 러너가 중단 불가능한 I/O에 갇혀 있는 자식에게 OS가 `SIGKILL`을 전달할 때까지 기다린 후 자신을 종료하기 전까지 기다리는 시간입니다. `--post-session-hook-timeout-sec` 더하기 15초로 바닥이 정해지며, `--push-outcome-on-release`가 설정되면 30초 더 추가되므로 효과적인 최소값은 기본값에서 75초입니다. |118| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | 러너가 중단 불가능한 I/O에 갇혀 있는 자식에게 OS가 `SIGKILL`을 전달할 때까지 기다린 후 자신을 종료하기 전까지 기다리는 시간입니다. `--post-session-hook-timeout-sec` 더하기 15초로 바닥이 정해지며, `--push-outcome-on-release`가 설정되면 30초 더 추가되므로 효과적인 최소값은 기본값에서 75초입니다. |

119| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | 신선한 복제를 위한 Git 페치 깊이입니다. 양의 정수 또는 완전한 페치를 위해 `full` 또는 `0`을 설정하세요. 작업 공간에 이미 있는 저장소는 기존 깊이를 유지합니다. |119| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | 신선한 복제를 위한 Git 페치 깊이입니다. 양의 정수 또는 완전한 페치를 위해 `full` 또는 `0`을 설정하세요. 워크스페이스에 이미 있는 클론의 경우 [미리 준비된 체크아웃 재사용](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout)을 참조하세요. |

120| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | 서버가 대규모 저장소의 팩을 준비할 때처럼 Git 서버 자체의 진행률 수치가 계속 증가하는 동안, Git 페치가 첫 데이터를 기다릴 수 있는 시도당 시간(밀리초)입니다. `0` 또는 `off`는 이 대기를 끕니다. 이 경우 해당 페치는 데이터 없이 2분이 지나면 중단됩니다. 그 외의 정수는 `120000`에서 `1800000` 사이, 즉 2분에서 30분 사이로 제한됩니다. Claude Code v2.1.295 이상이 필요합니다. |120| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | 서버가 대규모 저장소의 팩을 준비할 때처럼 Git 서버 자체의 진행률 수치가 계속 증가하는 동안, Git 페치가 첫 데이터를 기다릴 수 있는 시도당 시간(밀리초)입니다. `0` 또는 `off`는 이 대기를 끕니다. 이 경우 해당 페치는 데이터 없이 2분이 지나면 중단됩니다. 그 외의 정수는 `120000`에서 `1800000` 사이, 즉 2분에서 30분 사이로 제한됩니다. Claude Code v2.1.295 이상이 필요합니다. |

121| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | 설정되지 않음 | `1`일 때, `checkout` 훅이 실행된 후 `.git` 존재 확인을 건너뜁니다. 훅이 비git 소스를 구체화할 때 이를 설정하세요. |121| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | 설정되지 않음 | `1`일 때, `checkout` 훅이 실행된 후 `.git` 존재 확인을 건너뜁니다. 훅이 비git 소스를 구체화할 때 이를 설정하세요. |

122| `FORCE_AUTOUPDATE_PLUGINS` | 설정되지 않음 | `1`일 때, 바이너리가 고정되어 있어도 플러그인 마켓플레이스가 자동 업데이트되도록 합니다. |122| `FORCE_AUTOUPDATE_PLUGINS` | 설정되지 않음 | `1`일 때, 바이너리가 고정되어 있어도 플러그인 마켓플레이스가 자동 업데이트되도록 합니다. |


231 interval: 30s231 interval: 30s

232```232```

233 233 

234### 샘플 알림 규칙

235 

234다음 샘플 알림 규칙은 출발점입니다. 플릿 규모에 맞게 임계값을 조정하십시오.236다음 샘플 알림 규칙은 출발점입니다. 플릿 규모에 맞게 임계값을 조정하십시오.

235 237 

236```yaml theme={null}238```yaml theme={null}


252 annotations:254 annotations:

253 summary: "Runners are running mixed versions"255 summary: "Runners are running mixed versions"

254 - alert: ClaudeRunnerInitErrorsHigh256 - alert: ClaudeRunnerInitErrorsHigh

255 expr: increase(claude_code_self_hosted_runner_session_init_errors_total[10m]) > 3257 expr: sum by (namespace) (increase(claude_code_self_hosted_runner_session_init_errors_total[10m])) > 3

256 for: 5m258 for: 5m

257 labels: {severity: warning}259 labels: {severity: warning}

258 annotations:260 annotations:

259 summary: "Runner {{ $labels.pod }}: >3 session init failures in 10m (checkout hook / git / token / pre-init crash)"261 summary: "Sessions are failing before init (checkout hook / git / token / pre-init crash)"

260 - alert: ClaudeRunnerPollErrors262 - alert: ClaudeRunnerPollErrors

261 expr: sum by (pod) (rate(claude_code_self_hosted_runner_poll_errors_total[5m])) > 0263 expr: sum by (pod) (rate(claude_code_self_hosted_runner_poll_errors_total[5m])) > 0

262 for: 2m264 for: 2m


264 annotations:266 annotations:

265 summary: "Runner {{ $labels.pod }}: PollWork failing ({{ $value | humanize }}/s over 5m)"267 summary: "Runner {{ $labels.pod }}: PollWork failing ({{ $value | humanize }}/s over 5m)"

266 - alert: ClaudeRunnerSessionStartHookErrors268 - alert: ClaudeRunnerSessionStartHookErrors

267 expr: increase(claude_code_self_hosted_runner_session_start_hook_errors_total[10m]) > 3269 expr: sum by (namespace) (increase(claude_code_self_hosted_runner_session_start_hook_errors_total[10m])) > 3

268 for: 5m270 for: 5m

269 labels: {severity: warning}271 labels: {severity: warning}

270 annotations:272 annotations:

271 summary: "Runner {{ $labels.pod }}: >3 SessionStart hook failures in 10m"273 summary: "SessionStart hooks are failing"

272 274 

273 - name: claude-code-self-hosted-orchestrator275 - name: claude-code-self-hosted-orchestrator

274 rules:276 rules:


285 annotations:287 annotations:

286 summary: "Orchestrator {{ $labels.pod }} has not polled in >90s (poll loop waits on hook execution)"288 summary: "Orchestrator {{ $labels.pod }} has not polled in >90s (poll loop waits on hook execution)"

287 - alert: ClaudeOrchestratorCircuitBroken289 - alert: ClaudeOrchestratorCircuitBroken

288 expr: claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions > 0290 expr: max by (namespace) (claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions and on (instance) max_over_time(claude_code_self_hosted_orchestrator_connected[2m]) == 1) > 0

289 for: 1m291 for: 1m

290 labels: {severity: critical}292 labels: {severity: critical}

291 annotations:293 annotations:


304 summary: "Orchestrator {{ $labels.pod }}: >3 spawn-runner hook failures in 5m"306 summary: "Orchestrator {{ $labels.pod }}: >3 spawn-runner hook failures in 5m"

305```307```

306 308 

309### 손실된 러너와 대기 중인 세션에 대한 알림

310 

311[고정 플릿](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#scale-the-fleet)에서는 `ClaudeRunnersBelowFloor`를 로드하십시오. [온디맨드 러너](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#on-demand-runners)를 사용하는 경우에는 대신 `ClaudeOrchestratorSessionsWaiting`과 `ClaudeOrchestratorQueueWaitHigh`를 로드하십시오.

312 

313#### 고정 플릿에서 러너가 줄어들 때 알림

314 

315`ClaudeRunnersBelowFloor`는 등록되고 스크레이프되는 러너 수가 10분 동안 하한보다 적게 남아 있을 때 발생합니다.

316 

317```yaml theme={null}

318groups:

319 # Fixed fleets only. With on-demand runners the count follows demand,

320 # so ClaudeRunnersBelowFloor would fire whenever demand is low.

321 - name: claude-code-self-hosted-fixed-fleet-capacity

322 rules:

323 - alert: ClaudeRunnersBelowFloor

324 expr: (count(claude_code_self_hosted_runner_info{namespace="claude-runners"}) or vector(0)) < 2

325 for: 10m

326 labels: {severity: critical, namespace: claude-runners}

327 annotations:

328 summary: "Runners registered and scraped: {{ $value }}, below the floor. Check the runner workloads first, then the scrape targets if all are running."

329```

330 

331* **하한**: `expr`의 `2`를 레플리카 수의 약 절반(올림)으로 설정하십시오. 레플리카가 세 개라면 `2`를 유지하며, 러너가 하나만 남거나 하나도 남지 않으면 알림이 발생합니다.

332* **네임스페이스**: matcher와 `labels`의 `claude-runners`를 바꾸고, 추가 네임스페이스마다 알림을 복사하십시오. 대상에 `namespace` 레이블이 없다면 matcher와 레이블을 제거하십시오. 그렇지 않으면 알림이 0을 읽고 발생합니다.

333* **`ClaudeRunnerPollStale` 및 `ClaudeRunnerPollErrors`**: [샘플 알림 규칙](#sample-alert-rules)에서 로드한 상태로 유지하십시오. `ClaudeRunnersBelowFloor`는 폴링할 수 없는 러너도 여전히 집계하기 때문입니다

334 

335#### 세션이 온디맨드 러너를 기다릴 때 알림

336 

337`ClaudeOrchestratorSessionsWaiting`은 러너를 기다리는 세션 수가 10분 동안 0보다 큰 상태로 유지될 때 발생합니다. `ClaudeOrchestratorQueueWaitHigh`는 지난 10분 동안의 큐 대기 중 1%를 넘는 대기가 160초를 초과하고, 이 상태가 5분 동안 유지될 때 발생합니다.

338 

339```yaml theme={null}

340groups:

341 # On-demand runners only. Needs no edit for the namespace.

342 - name: claude-code-self-hosted-on-demand-capacity

343 rules:

344 - alert: ClaudeOrchestratorSessionsWaiting

345 expr: |

346 max by (namespace) (

347 claude_code_self_hosted_orchestrator_pool_pending_sessions

348 and on (instance)

349 max_over_time(claude_code_self_hosted_orchestrator_connected[2m]) == 1

350 ) > 0

351 for: 10m

352 labels: {severity: warning}

353 annotations:

354 summary: "Sessions waiting for a runner: {{ $value }}, above the threshold for 10 minutes. Check claude_code_self_hosted_orchestrator_spawn_hooks_total by result, then runner workloads that don't start."

355 - alert: ClaudeOrchestratorQueueWaitHigh

356 expr: |

357 histogram_quantile(0.99, sum by (namespace, le) (

358 rate(claude_code_self_hosted_orchestrator_session_queue_wait_seconds_bucket[10m])

359 )) > 160

360 for: 5m

361 labels: {severity: warning}

362 annotations:

363 summary: "Over 1% of queue waits in the last 10 minutes exceeded 160 seconds. Check whether ClaudeOrchestratorDisconnected is firing, then claude_code_self_hosted_orchestrator_spawn_hooks_total by result and claude_code_self_hosted_orchestrator_spawn_hook_duration_seconds."

364```

365 

366* **임계값**: 항상 대기 중인 세션이 있다면 `ClaudeOrchestratorSessionsWaiting`의 `> 0`을 평소에 보이는 수보다 높게 올리십시오

367* **`ClaudeOrchestratorDisconnected`**: [샘플 알림 규칙](#sample-alert-rules)에서 로드한 상태로 유지하십시오. `ClaudeOrchestratorSessionsWaiting`은 네임스페이스의 마지막 오케스트레이터 연결이 끊긴 후 약 2분이 지나면 발생을 멈추기 때문입니다

368 

307### 세션 자식 메트릭 전달369### 세션 자식 메트릭 전달

308 370 

309각 세션은 자체 OpenTelemetry 메트릭을 가진 별도의 자식 프로세스에서 실행됩니다. `--capacity`가 1보다 크면 러너는 이러한 자식 메트릭이 노출되는 방식을 재작성합니다. 러너 호스트에 `OTEL_METRICS_EXPORTER=prometheus`를 설정하고, 예를 들어 [래퍼 스크립트](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#wrapper-scripts)나 세션이 상속하는 러너 자체 환경에서 세션 환경에 `CLAUDE_CODE_ENABLE_TELEMETRY=1`을 설정하면, 각 자식의 카운터 및 게이지 계측값이 러너 자체의 `/metrics` 엔드포인트에서 러너의 시리즈와 함께 다시 노출됩니다. 러너는 자식의 익스포터를 재작성하여 health 포트의 루프백 전용 수신기로 OTLP를 통해 푸시하도록 하고, 각 시리즈에 `session_id` 및 `client_platform` 레이블을 붙이며, 세션이 종료되면 해당 세션의 시리즈를 제거합니다. 히스토그램은 전달되지 않으며, 이름이 러너 자체의 접두사와 충돌하는 자식 메트릭은 삭제됩니다.371각 세션은 자체 OpenTelemetry 메트릭을 가진 별도의 자식 프로세스에서 실행됩니다. `--capacity`가 1보다 크면 러너는 이러한 자식 메트릭이 노출되는 방식을 재작성합니다. 러너 호스트에 `OTEL_METRICS_EXPORTER=prometheus`를 설정하고, 예를 들어 [래퍼 스크립트](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#wrapper-scripts)나 세션이 상속하는 러너 자체 환경에서 세션 환경에 `CLAUDE_CODE_ENABLE_TELEMETRY=1`을 설정하면, 각 자식의 카운터 및 게이지 계측값이 러너 자체의 `/metrics` 엔드포인트에서 러너의 시리즈와 함께 다시 노출됩니다. 러너는 자식의 익스포터를 재작성하여 health 포트의 루프백 전용 수신기로 OTLP를 통해 푸시하도록 하고, 각 시리즈에 `session_id` 및 `client_platform` 레이블을 붙이며, 세션이 종료되면 해당 세션의 시리즈를 제거합니다. 히스토그램은 전달되지 않으며, 이름이 러너 자체의 접두사와 충돌하는 자식 메트릭은 삭제됩니다.

Details

324}324}

325```325```

326 326 

327`"claude-opus-5"`와 같은 모델 ID 항목은 Opus 5.5처럼 이를 확장하는 이후 버전도 허용합니다. 그러한 버전 중 하나를 차단하려면 [`deniedModels`](#deniedmodels)를 사용하세요. 각 모델 ID 항목이 명시한 버전만 허용하도록 하려면 [`availableModelsMatch`](#availablemodelsmatch)를 사용하세요. [모델 선택 제한](https://code.claude.com/docs/ko/model-config.md#restrict-model-selection)을 참조하세요.327`"claude-opus-5"`와 같은 모델 ID 항목은 Opus 5.5처럼 이를 확장하는 이후 버전도 허용합니다. 그러한 버전 중 하나를 차단하려면 [`deniedModels`](#deniedmodels)를 사용하세요. 각 모델 ID 항목이 명시한 버전만 허용하도록 하려면 [`availableModelsMatch`](#availablemodelsmatch)를 사용하세요. [모델 선택 제한](https://code.claude.com/docs/ko/model-config.md#restrict-model-selection)을 참조하세요. 서드파티 공급자 ID에 대해서는 [서드파티 배포용 모델 고정](https://code.claude.com/docs/ko/model-config.md#pin-models-for-third-party-deployments)을 참조하세요.

328 328 

329### `availableModelsMatch`329### `availableModelsMatch`

330 330 


333* **범위**: [`Managed`](#scopes). Claude Code는 사용자, 프로젝트, 로컬 설정과 `--settings`에 있는 이 키를 경고와 함께 무시합니다333* **범위**: [`Managed`](#scopes). Claude Code는 사용자, 프로젝트, 로컬 설정과 `--settings`에 있는 이 키를 경고와 함께 무시합니다

334* **유형**: 문자열. 다음 중 하나:334* **유형**: 문자열. 다음 중 하나:

335 * `"prefix"`: 모델 ID 항목은 해당 버전과, 다른 세그먼트로 이를 확장하는 모든 모델 ID를 허용합니다335 * `"prefix"`: 모델 ID 항목은 해당 버전과, 다른 세그먼트로 이를 확장하는 모든 모델 ID를 허용합니다

336 * `"exact"`: 모델 ID 항목은 해당 버전의 날짜가 포함된 ID를 포함하여 명시한 버전만 허용하므로, `"claude-opus-5"`는 Opus 5를 허용하지만 `claude-opus-5-5`는 허용하지 않습니다. `"opus"`와 같은 계열 별칭은 여전히 계열 전체를 허용하며, `best`, `opusplan`, `default` 항목은 무시됩니다336 * `"exact"`: 모델 ID 항목은 명시한 버전만 허용하므로, `"claude-opus-5"`는 Opus 5를 허용하지만 `claude-opus-5-5`는 허용하지 않습니다. `"claude-opus-4-5"`와 같은 항목은 날짜가 포함된 Anthropic 모델 ID `claude-opus-4-5-20251101`도 허용합니다. `"opus"`와 같은 계열 별칭은 여전히 계열 전체를 허용하며, `best`, `opusplan`, `default` 항목은 무시됩니다

337* **기본값**: `"prefix"`337* **기본값**: `"prefix"`

338 338 

339이 예시는 Opus 5와 Sonnet 5를 허용하고 둘 다 이후 릴리스는 허용하지 않습니다:339이 예시는 Opus 5와 Sonnet 5를 허용하고 둘 다 이후 릴리스는 허용하지 않습니다:


1371 1371 

1372Claude Code는 디렉터리 경로에서 후행 슬래시를 제거하므로, `~/.aws` 및 `~/.aws/`는 동일한 디렉터리와 일치합니다. v2.1.224 이전에는 Claude Code가 후행 슬래시를 샌드박스에 전달했으며, Claude는 여전히 후행 슬래시로 작성된 `denyRead` 또는 `denyWrite` 항목 아래의 경로를 읽거나 쓸 수 있었습니다.1372Claude Code는 디렉터리 경로에서 후행 슬래시를 제거하므로, `~/.aws` 및 `~/.aws/`는 동일한 디렉터리와 일치합니다. v2.1.224 이전에는 Claude Code가 후행 슬래시를 샌드박스에 전달했으며, Claude는 여전히 후행 슬래시로 작성된 `denyRead` 또는 `denyWrite` 항목 아래의 경로를 읽거나 쓸 수 있었습니다.

1373 1373 

1374Claude Code는 또한 후행 `/**`를 제거하므로, `~/build/**` 및 `~/build`는 동일한 디렉터리를 다룹니다. `*`와 같은 와일드카드가 작동하는지 여부는 항목이 있는 목록과 플랫폼에 따라 다릅니다:1374##### 샌드박스 경로에서 와일드카드가 작동하는 위치

1375 1375 

1376* **`allowWrite` 및 `denyWrite`**: macOS에서는 와일드카드가 작동합니다. Linux 및 WSL2에서는 샌드박스가 구체적인 경로를 마운트하므로, Claude Code는 후행 `/**`가 제거된 후 `*`, `?` 또는 `[`를 포함하는 항목을 건너뛰며, 해당 항목은 효과가 없습니다. Claude Code는 `Edit` 권한 규칙의 경로를 이러한 목록에 추가하므로, 동일한 제한이 적용되며, `/sandbox`의 **구성** 탭은 와일드카드를 포함하는 `Edit` 및 `Read` 권한 규칙에 대해 경고합니다.1376와일드카드 `*`, `?`, `**`는 macOS에서는 네 가지 `sandbox.filesystem` 경로 목록 모두에서 작동하며, Linux와 WSL2에서는 더 적은 위치에서 작동합니다.

1377* **`denyRead` 및 `allowRead`**: 모든 플랫폼에서 와일드카드가 작동합니다. Linux 및 WSL2에서는 Claude Code가 읽기 항목을 일치하는 구체적인 경로로 확장하며, 쓰기 목록에 대해서는 이를 수행하지 않습니다.

1378 1377 

1379중괄호는 이름에서 일반 문자로 일치하므로, `~/data/{keys,tokens}`는 두 가지 대안이 아니라 이름이 문자 그대로 `{keys,tokens}`인 디렉터리를 다룹니다. `~/data/keys`와 `~/data/tokens`를 다루려면 각각을 별도의 항목으로 추가하십시오.1378| `sandbox.filesystem` 목록 | Linux 및 WSL2에서 작동하는 것 | Linux 및 WSL2에서 작동하지 않는 예시 | 대신 작성할 내용 |

1379| :- | :- | :- | :- |

1380| `denyRead`, `allowRead` | 후행 `/**`는 작동하므로 `~/build/**`는 `~/build`와 같은 디렉터리를 포괄합니다. 그 외의 와일드카드는 항목의 [전체 경로](#sandbox-path-prefixes)에서 첫 번째 디렉터리 이름 뒤에서만 작동합니다. | `denyRead`의 `/**/*.pem`은 아무것도 포괄하지 않으므로 어떤 읽기도 차단하지 않음 | `/srv/**/*.pem`처럼 최상위 디렉터리마다 항목 하나씩 |

1381| `allowWrite`, `denyWrite` | 후행 `/**`만 작동하므로 `~/build/**`는 `~/build`와 같은 디렉터리를 포괄합니다 | `./src/*`는 `src` 안에서 이름 자체가 `*`인 파일이나 디렉터리만 포괄하며, 그런 것이 없으면 아무것도 포괄하지 않음 | `src` 아래의 모든 것을 포괄하는 `./src`, 또는 경로마다 항목 하나씩 |

1382 

1383`~/keys/*.pem`에서 와일드카드는 첫 번째 디렉터리 이름 뒤에 옵니다. 홈 디렉터리가 `/home/alice`인 경우 첫 번째 디렉터리 이름은 `home`입니다.

1384 

1385```text theme={null}

1386~/keys/*.pem the entry

1387/home/alice/keys/*.pem its full path

1388 ^^^^ the first directory name, home

1389```

1390 

1391Linux와 WSL2에서 세션 내 `/sandbox`의 **Config** 탭은 후행 `/**` 이외의 와일드카드를 포함하는 `Edit` 권한 규칙에 대해 경고합니다. 이런 와일드카드는 샌드박스 처리된 명령에서 작동하지 않습니다. 규칙이 포괄해야 하는 각 경로 또는 해당 경로들을 담은 디렉터리를, 허용 규칙이라면 `allowWrite`에, 거부 규칙이라면 `denyWrite`에 추가하세요.

1392 

1393##### 대괄호, 중괄호, 소괄호가 포함된 디렉터리 이름

1394 

1395이름에 대괄호가 포함된 디렉터리를 허용하거나 차단하려면 `./app/[slug]`처럼 이름을 그대로 작성하세요. 이 항목에서 `[slug]`는 대괄호를 포함한 디렉터리의 실제 이름입니다.

1396 

1397```text theme={null}

1398app/

1399└── [slug]/

1400 └── page.tsx

1401```

1402 

1403이 항목은 디렉터리 아래의 모든 것을 포괄하므로 후행 `/**`는 붙이지 마세요. macOS와 Linux 및 WSL2에서 `app/[slug]` 디렉터리는 샌드박스 처리된 명령이 시작될 때 존재해야 합니다.

1404 

1405* **`[slug]` 같은 대괄호**: macOS의 모든 목록과 Linux 및 WSL2의 `denyRead`, `allowRead`에서 `./app/[slug]`의 대괄호는 패턴으로도 작동합니다. 그러면 이 항목은 `app/s`나 `app/g`처럼 `app` 아래에서 `slug`의 문자 하나로 이름 지어진 모든 경로와도 일치합니다. 이 항목이 `allowRead`에 있거나 macOS의 `allowWrite`에 있으면 샌드박스 처리된 명령이 그런 경로에도 접근할 수 있습니다. 접근해서는 안 되는 경로는 이름을 바꾸세요.

1406* **`[user-id]`나 `[post-id]`처럼 하이픈 왼쪽 문자가 오른쪽 문자보다 뒤에 정렬되는 대괄호**: `./app/[user-id]`는 모든 플랫폼의 모든 목록에서 정확히 그 이름을 가진 디렉터리만 포괄합니다. v2.1.304 이전에는 `denyRead` 또는 `allowRead`에 이런 항목이 있으면 Linux와 WSL2에서 샌드박스 처리된 명령이 시작되지 않았습니다.

1407* **중괄호와 소괄호**: 이들은 일반 문자이므로 `~/data/{keys,tokens}`는 두 가지 대안이 아니라 `{keys,tokens}`라는 이름의 디렉터리 하나를 포괄합니다. `~/data/keys`와 `~/data/tokens`를 포괄하려면 각각을 별도 항목으로 추가하세요.

1380 1408 

1381### `sandbox.filesystem.allowWrite`1409### `sandbox.filesystem.allowWrite`

1382 1410 


3470 3498 

3471호스트명 일치는 대소문자를 구분하지 않으며 정규화된 도메인 이름을 표시하는 후행 점이 있는 `hooks.example.com.`을 DNS가 처리하는 방식과 동일하게 `hooks.example.com`으로 취급합니다. 허용 목록은 관리형 설정을 포함한 모든 소스의 훅에 적용됩니다.3499호스트명 일치는 대소문자를 구분하지 않으며 정규화된 도메인 이름을 표시하는 후행 점이 있는 `hooks.example.com.`을 DNS가 처리하는 방식과 동일하게 `hooks.example.com`으로 취급합니다. 허용 목록은 관리형 설정을 포함한 모든 소스의 훅에 적용됩니다.

3472 3500 

3473Agent SDK의 `managedSettings` 옵션에서는 목록에 항목이 있으면 Claude Code가 이 키를 무시하므로, 대신 SDK의 `settings` 옵션에 목록을 전달하십시오. [상위 설정에서 각 값이 수행하는 작업](https://code.claude.com/docs/ko/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect)을 참조하십시오.3501Agent SDK의 `managedSettings` 옵션에서는 목록에 항목이 있으면 Claude Code가 이 키를 무시하므로, 대신 SDK의 [`settings` 옵션](https://code.claude.com/docs/ko/agent-sdk/typescript#options)에 목록을 전달하십시오. [상위 설정에서 빈 목록이 수행하는 작업](https://code.claude.com/docs/ko/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect)을 참조하십시오.

3474 3502 

3475### `allowManagedHooksOnly`3503### `allowManagedHooksOnly`

3476 3504 


3520범위는 키를 포함하는 파일에 따라 달라집니다:3548범위는 키를 포함하는 파일에 따라 달라집니다:

3521 3549 

3522* **관리형 설정에서**: Claude Code는 관리형 훅을 포함한 모든 구성된 훅을 비활성화하고 [Agent SDK](https://code.claude.com/docs/ko/agent-sdk/overview.md)가 프로세스에 등록하는 훅을 계속 실행합니다.3550* **관리형 설정에서**: Claude Code는 관리형 훅을 포함한 모든 구성된 훅을 비활성화하고 [Agent SDK](https://code.claude.com/docs/ko/agent-sdk/overview.md)가 프로세스에 등록하는 훅을 계속 실행합니다.

3523* **Agent SDK의 `managedSettings` 옵션에서**: Claude Code는 이 키를 `allowManagedHooksOnly: true`로 취급하므로, 어떤 훅이 중지되는지는 [`allowManagedHooksOnly`에서 실행되는 항목](#what-runs-under-allowmanagedhooksonly)을 참조하십시오. 관리자가 관리형 설정을 배포하는 머신에서는 관리자가 [임베딩 호스트가 정책을 추가하도록 허용](https://code.claude.com/docs/ko/managed-settings.md#let-an-embedding-host-add-policy)하지 않는 한 Claude Code가 이 키를 무시합니다. Claude Code v2.1.309 이상이 필요합니다.3551* **Agent SDK의 `managedSettings` 옵션에서**: 관리자가 관리형 설정을 배포하는 머신에서는 관리자가 [임베딩 호스트가 정책을 추가하도록 허용](https://code.claude.com/docs/ko/managed-settings.md#let-an-embedding-host-add-policy)하지 않는 한 Claude Code가 이 키를 무시합니다. 키가 적용되는 경우 사용자, 프로젝트, 로컬 및 플러그인 훅이 중지되며, SDK의 `settings` 옵션에 있는 훅도 중지됩니다. 관리자의 관리형 훅, [강제 활성화된](#enabledplugins) 플러그인의 훅, [SDK 훅 콜백](https://code.claude.com/docs/ko/agent-sdk/hooks.md)은 계속 실행됩니다. Claude Code v2.1.309 이상이 필요합니다.

3524* **다른 설정 파일에서**: Claude Code는 사용자, 프로젝트, 로컬 및 플러그인 훅을 비활성화합니다. 관리형 훅, Agent SDK 훅, 관리형 [`enabledPlugins`](#enabledplugins)에서 강제로 활성화된 플러그인의 훅은 계속 실행됩니다.3552* **다른 설정 파일에서**: Claude Code는 사용자, 프로젝트, 로컬 및 플러그인 훅을 비활성화합니다. 관리형 훅, Agent SDK 훅, 관리형 [`enabledPlugins`](#enabledplugins)에서 강제로 활성화된 플러그인의 훅은 계속 실행됩니다.

3525 3553 

3526이 키는 코드가 훅을 등록하는 플러그인인 [mod](https://code.claude.com/docs/ko/plugins/mods/overview.md)도 중지합니다:3554이 키는 코드가 훅을 등록하는 플러그인인 [mod](https://code.claude.com/docs/ko/plugins/mods/overview.md)도 중지합니다:


3624 3652 

3625허용 목록은 관리형 설정을 포함한 모든 소스의 훅에 적용됩니다.3653허용 목록은 관리형 설정을 포함한 모든 소스의 훅에 적용됩니다.

3626 3654 

3627Agent SDK의 `managedSettings` 옵션에서는 목록에 항목이 있으면 Claude Code가 이 키를 무시하므로, 대신 SDK의 `settings` 옵션에 목록을 전달하십시오. [상위 설정에서 각 값이 수행하는 작업](https://code.claude.com/docs/ko/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect)을 참조하십시오.3655Agent SDK의 `managedSettings` 옵션에서는 목록에 항목이 있으면 Claude Code가 이 키를 무시하므로, 대신 SDK의 [`settings` 옵션](https://code.claude.com/docs/ko/agent-sdk/typescript#options)에 목록을 전달하십시오. [상위 설정에서 빈 목록이 수행하는 작업](https://code.claude.com/docs/ko/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect)을 참조하십시오.

3628 3656 

3629### `workflowKeywordTriggerEnabled`3657### `workflowKeywordTriggerEnabled`

3630 3658 


3841* **유형**: Boolean3869* **유형**: Boolean

3842 * `true`: Claude Code가 마켓플레이스가 선언한 명령을 절대 실행하지 않고, command 소스 플러그인을 설치하거나 업데이트하지 않으며, 이미 설치된 플러그인의 로드를 중지합니다3870 * `true`: Claude Code가 마켓플레이스가 선언한 명령을 절대 실행하지 않고, command 소스 플러그인을 설치하거나 업데이트하지 않으며, 이미 설치된 플러그인의 로드를 중지합니다

3843 * `false`: Claude Code가 command 소스 플러그인을 명시적으로 허용합니다3871 * `false`: Claude Code가 command 소스 플러그인을 명시적으로 허용합니다

3844* **기본값**: 설정되지 않음. 따라서 Claude Code는 [`allowManagedHooksOnly`](#allowmanagedhooksonly)를 따릅니다. 훅 실행을 관리형 설정으로 제한하는 조직에서는 command 소스도 비활성화됩니다3872* **기본값**: 설정되지 않음. 따라서 Claude Code는 [`allowManagedHooksOnly`](#allowmanagedhooksonly)를 따릅니다. 훅 실행을 관리형 설정으로 제한하는 조직에서는 command 소스도 비활성화됩니다. Agent SDK의 `managedSettings` 옵션에서 [`disableAllHooks: true`](#disableallhooks)를 전달하는 애플리케이션은 그것만으로는 command 소스를 비활성화하지 않습니다.

3845 3873 

3846```json managed-settings.json theme={null}3874```json managed-settings.json theme={null}

3847{3875{

Details

127 127 

128```bash ~/.tmux.conf theme={null}128```bash ~/.tmux.conf theme={null}

129set -g allow-passthrough on129set -g allow-passthrough on

130set -g focus-events on

130set -s extended-keys on131set -s extended-keys on

131set -as terminal-features 'xterm*:extkeys'132set -as terminal-features 'xterm*:extkeys'

132```133```

133 134 

134`allow-passthrough` 줄은 알림과 진행 상황 업데이트가 tmux에 의해 삼켜지는 대신 외부 터미널에 도달하도록 합니다. `extended-keys` 줄은 tmux가 Shift+Enter를 일반 Enter와 구별하여 새 줄 단축키가 작동하도록 합니다.135`allow-passthrough` 줄은 알림과 진행 상황 업데이트가 tmux에 의해 삼켜지는 대신 외부 터미널에 도달하도록 합니다. `extended-keys` 줄은 tmux가 Shift+Enter를 일반 Enter와 구별하여 새 줄 단축키가 작동하도록 합니다.

135 136 

137[mod의 `Image`](https://code.claude.com/docs/ko/plugins/mods/reference#elements)에는 `allow-passthrough` 및 `focus-events` 줄과 함께 [tmux 내부 그리기를 위한 기타 요구 사항](https://code.claude.com/docs/ko/plugins/mods/gallery.md#draw-an-image-inside-tmux)이 필요합니다. 줄을 추가한 후에는 tmux에서 분리(detach)했다가 다시 연결(attach)하고 Claude Code를 다시 시작해야 합니다.

138 

136## Windows에서 Backspace가 전체 단어를 삭제하는 문제 해결139## Windows에서 Backspace가 전체 단어를 삭제하는 문제 해결

137 140 

138Windows에서 Claude Code는 `^H`로 도착하는 Backspace를 Ctrl+Backspace로 읽으며, 이는 [이전 단어를 삭제합니다](https://code.claude.com/docs/ko/interactive-mode.md#text-editing). 단, `TERM_PROGRAM`이 `mintty`이거나 `TERM`이 `cygwin`인 경우는 예외입니다. macOS와 Linux에서 Claude Code는 이를 일반 Backspace로 읽습니다.141Windows에서 Claude Code는 `^H`로 도착하는 Backspace를 Ctrl+Backspace로 읽으며, 이는 [이전 단어를 삭제합니다](https://code.claude.com/docs/ko/interactive-mode.md#text-editing). 단, `TERM_PROGRAM`이 `mintty`이거나 `TERM`이 `cygwin`인 경우는 예외입니다. macOS와 Linux에서 Claude Code는 이를 일반 Backspace로 읽습니다.

ultrareview.md +2 −2

Details

176하위 명령은 다음 세 가지 코드 중 하나로 종료됩니다:176하위 명령은 다음 세 가지 코드 중 하나로 종료됩니다:

177 177 

178* **0**: 리뷰가 완료되었으며, 발견 사항이 있거나 없습니다178* **0**: 리뷰가 완료되었으며, 발견 사항이 있거나 없습니다

179* **1**: 리뷰가 시작되지 않았거나 완료되기 전에 중지되었거나, 클라우드 세션에 오류가 발생했거나, 타임아웃이 경과했습니다. [폴더가 신뢰되지 않은](#trust-the-folder-before-the-review-runs) 경우에도 코드는 1이며, 신뢰 질문에 `n`으로 답하거나 Ctrl-C를 누른 경우도 포함됩니다.179* **1**: 리뷰가 시작되지 않았거나 완료되기 전에 중지되었거나, 클라우드 세션에 오류가 발생했거나, 타임아웃이 경과했습니다. [폴더가 신뢰되지 않은](#trust-the-folder-before-the-review-runs) 경우에도 코드는 1이며, 신뢰 질문에 `n`으로 답하거나 Enter를 누르거나 Ctrl-C를 누른 경우도 포함됩니다.

180* **130**: 신뢰 질문이 아니라, 하위 명령이 리뷰를 시작하거나 발견 사항을 기다리거나 `--post` 댓글을 보내는 동안 Ctrl-C를 눌렀습니다180* **130**: 신뢰 질문이 아니라, 하위 명령이 리뷰를 시작하거나 발견 사항을 기다리거나 `--post` 댓글을 보내는 동안 Ctrl-C를 눌렀습니다

181 181 

182발견 사항이 도착하기 전에 하위 명령이 종료되면 발견 사항은 터미널에 전달되지 않습니다. 리뷰는 클라우드에서 계속 실행 중일 수 있습니다. 하위 명령을 다시 실행하면 해당 리뷰를 재개하는 대신 새 리뷰가 시작되며, 새 리뷰는 [무료 실행을 사용하거나 사용량 크레딧으로 청구](#pricing-and-free-runs)됩니다.182발견 사항이 도착하기 전에 하위 명령이 종료되면 발견 사항은 터미널에 전달되지 않습니다. 리뷰는 클라우드에서 계속 실행 중일 수 있습니다. 하위 명령을 다시 실행하면 해당 리뷰를 재개하는 대신 새 리뷰가 시작되며, 새 리뷰는 [무료 실행을 사용하거나 사용량 크레딧으로 청구](#pricing-and-free-runs)됩니다.


198claude ultrareview 1234 --trust-workspace198claude ultrareview 1234 --trust-workspace

199```199```

200 200 

201신뢰하지 않는 풀 리퀘스트를 리뷰하려면 신뢰하는 브랜치에서 `claude ultrareview <PR number> --trust-workspace`를 실행합니다. `y`와 달리 이 플래그는 아무것도 저장하지 않습니다. PR은 [클라우드에서 복제](#review-a-pull-request)되므로 해당 브랜치가 로컬에 없어도 됩니다.201신뢰하지 않는 풀 리퀘스트를 리뷰하려면 신뢰하는 브랜치에서 `claude ultrareview <PR number> --trust-workspace`를 실행합니다. PR은 [클라우드에서 복제](#review-a-pull-request)되므로 해당 브랜치가 로컬에 없어도 됩니다.

202 202 

203## ultrareview와 /code-review의 비교203## ultrareview와 /code-review의 비교

204 204 

vs-code.md +6 −1

Details

1001 1001 

1002### TLS 검사 프록시 뒤에서 받아쓰기 또는 Web 탭이 실패하는 경우1002### TLS 검사 프록시 뒤에서 받아쓰기 또는 Web 탭이 실패하는 경우

1003 1003 

1004받아쓰기 또는 Web 탭이 `unable to get local issuer certificate` 같은 인증서 오류로 실패하면 `~/.claude/settings.json`의 `env` 블록에 [`NODE_EXTRA_CA_CERTS`](https://code.claude.com/docs/ko/network-config#custom-ca-certificates)를 설정하십시오. 값은 프록시의 루트 CA 인증서가 담긴 PEM 파일의 경로로 설정하며, 이 파일은 IT 팀에서 받을 수 있습니다. 해당 오류 텍스트는 마이크 버튼이나 확장 프로그램의 로그에서 확인할 수 있습니다.1004받아쓰기 또는 Web 탭이 `unable to get local issuer certificate` 같은 인증서 오류로 실패하면 `~/.claude/settings.json`의 `env` 블록에 [`NODE_EXTRA_CA_CERTS`](https://code.claude.com/docs/ko/network-config#custom-ca-certificates)를 설정하십시오. 값은 프록시의 루트 CA 인증서가 담긴 PEM 파일의 경로로 설정하며, 이 파일은 IT 팀에서 받을 수 있습니다. 이 실패는 마이크 버튼이나 Web 탭, 또는 로그에 표시됩니다.

1005 1005 

1006* **받아쓰기**: 마이크 버튼에 `Dictation error: WebSocket error:` 뒤에 오류 텍스트가 표시됩니다.1006* **받아쓰기**: 마이크 버튼에 `Dictation error: WebSocket error:` 뒤에 오류 텍스트가 표시됩니다.

1007* **Web 탭**: [클라우드 세션](#resume-cloud-sessions-from-claude-ai)을 나열하는 탭에는 오류 텍스트 없이 `Remote server is not connected`만 표시됩니다. 로그에서 오류 텍스트를 확인하려면:1007* **Web 탭**: [클라우드 세션](#resume-cloud-sessions-from-claude-ai)을 나열하는 탭에는 오류 텍스트 없이 `Remote server is not connected`만 표시됩니다. 로그에서 오류 텍스트를 확인하려면:

1008 1. [Command Palette](#vs-code-commands-and-shortcuts)에서 **Claude Code: Show Logs**를 실행하여 `Claude VSCode` 출력 채널을 엽니다.1008 1. [Command Palette](#vs-code-commands-and-shortcuts)에서 **Claude Code: Show Logs**를 실행하여 `Claude VSCode` 출력 채널을 엽니다.

1009 2. 탭에서 **Reconnect**를 클릭하고 `Connecting…`이 더 이상 표시되지 않을 때까지 기다립니다.1009 2. 탭에서 **Reconnect**를 클릭하고 `Connecting…`이 더 이상 표시되지 않을 때까지 기다립니다.

1010 3. 채널에서 `Error fetching remote sessions:` 또는 `Failed to fetch organization UUID:`를 검색한 다음, 일치하는 줄 중 가장 최근 줄에서 해당 접두사 뒤의 오류 텍스트를 확인합니다.1010 3. 채널에서 `Error fetching remote sessions:` 또는 `Failed to fetch organization UUID:`를 검색한 다음, 일치하는 줄 중 가장 최근 줄에서 해당 접두사 뒤의 오류 텍스트를 확인합니다.

1011* **로그 경고**: `an authority that Claude Code does not trust`를 언급하는 경고는 인증서 오류를 보고합니다. TLS 검사 프록시 뒤에 있다면 `~/.claude/settings.json`의 `env`에 `NODE_EXTRA_CA_CERTS`를 설정하십시오. v2.1.309 이전 버전은 이 경고를 로그에 기록하지 않습니다.

1011 1012 

1012이 해결 방법에는 확장 프로그램 버전 2.1.307 이상이 필요하므로 먼저 확장 프로그램을 업데이트하십시오. 그런 다음 `NODE_EXTRA_CA_CERTS`를 `~` 없이 작성한 인증서 파일의 전체 경로로 설정합니다. Windows 경로의 경우 `settings.json`에서 `C:\\certs\\example-ca.pem`처럼 각 백슬래시를 두 번 작성합니다.1013이 해결 방법에는 확장 프로그램 버전 2.1.307 이상이 필요하므로 먼저 확장 프로그램을 업데이트하십시오. 그런 다음 `NODE_EXTRA_CA_CERTS`를 `~` 없이 작성한 인증서 파일의 전체 경로로 설정합니다. Windows 경로의 경우 `settings.json`에서 `C:\\certs\\example-ca.pem`처럼 각 백슬래시를 두 번 작성합니다.

1013 1014 

1015> [!NOTE]

1016>

1017> WSL, SSH 호스트, 개발 컨테이너 또는 다른 시스템에 연결된 창에서는 로컬 컴퓨터가 아닌 해당 시스템에 인증서 파일을 저장하고 `~/.claude/settings.json`을 편집하십시오.

1018 

1014다음 예시는 Linux 또는 macOS 경로 `/etc/ssl/certs/example-ca.pem`에 있는 인증서 파일을 지정합니다.1019다음 예시는 Linux 또는 macOS 경로 `/etc/ssl/certs/example-ca.pem`에 있는 인증서 파일을 지정합니다.

1015 1020 

1016```json ~/.claude/settings.json theme={null}1021```json ~/.claude/settings.json theme={null}