SpyBara
Go Premium

Documentation 2026-10-26 22:57 UTC to 2026-10-27 22:59 UTC

68 files changed +1,648 −1,312. 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
Details

79| `Permission Required:` | 답변을 기다리는 권한 프롬프트 |79| `Permission Required:` | 답변을 기다리는 권한 프롬프트 |

80| `Cost:` | Claude Code가 종료될 때의 세션 비용 요약(계정이 [비용을 표시](https://code.claude.com/docs/ko/costs.md)하는 경우) |80| `Cost:` | Claude Code가 종료될 때의 세션 비용 요약(계정이 [비용을 표시](https://code.claude.com/docs/ko/costs.md)하는 경우) |

81 81 

82Claude Code는 터미널 커서를 입력 캐럿에 유지하므로 스크린 리더의 현재 줄 읽기 명령은 편집 중인 프롬프트를 읽습니다.82Claude Code는 터미널 커서를 입력 캐럿에 유지하므로 스크린 리더의 현재 줄 읽기 명령은 편집 중인 프롬프트를 읽습니다. 입력 줄의 끝에 입력할 때, 또는 거기서 `Backspace`를 누를 때, Claude Code는 변경된 문자만 작성합니다. 스크린 리더는 해당 문자만 에코합니다.

83 

84입력 줄의 끝에 입력할 때, 또는 거기서 `Backspace`를 누를 때, Claude Code는 변경된 문자만 작성합니다. 스크린 리더는 해당 문자만 에코합니다.

85 83 

86[텍스트 편집 바로 가기](https://code.claude.com/docs/ko/interactive-mode.md#text-editing) 중 하나로 단어나 줄을 삭제할 때, Claude Code는 삭제된 텍스트를 발표합니다:84[텍스트 편집 바로 가기](https://code.claude.com/docs/ko/interactive-mode.md#text-editing) 중 하나로 단어나 줄을 삭제할 때, Claude Code는 삭제된 텍스트를 발표합니다:

87 85 

admin-setup.md +1 −0

Details

191* [Server-managed settings](https://code.claude.com/docs/ko/server-managed-settings.md): Claude 관리자 콘솔에서 관리 정책 전달191* [Server-managed settings](https://code.claude.com/docs/ko/server-managed-settings.md): Claude 관리자 콘솔에서 관리 정책 전달

192* [All settings](https://code.claude.com/docs/ko/settings-reference.md): 모든 설정 키, 파일 위치 및 예제192* [All settings](https://code.claude.com/docs/ko/settings-reference.md): 모든 설정 키, 파일 위치 및 예제

193* [Which value Claude Code uses](https://code.claude.com/docs/ko/settings.md#which-value-claude-code-uses): 관리, 프로젝트, 로컬 및 사용자 설정 전반의 우선순위 규칙193* [Which value Claude Code uses](https://code.claude.com/docs/ko/settings.md#which-value-claude-code-uses): 관리, 프로젝트, 로컬 및 사용자 설정 전반의 우선순위 규칙

194* [Manage plugins for your organization](https://code.claude.com/docs/ko/plugins/org.md): 관리형 설정을 통해 모든 머신에 공유 플러그인 설치

194* [Monorepos and large repos](https://code.claude.com/docs/ko/large-codebases.md): 모노레포에 배포하는 조직을 위한 디렉터리별 구성 패턴195* [Monorepos and large repos](https://code.claude.com/docs/ko/large-codebases.md): 모노레포에 배포하는 조직을 위한 디렉터리별 구성 패턴

195* [Amazon Bedrock](https://code.claude.com/docs/ko/amazon-bedrock.md), [Google Cloud's Agent Platform](https://code.claude.com/docs/ko/google-vertex-ai.md), [Microsoft Foundry](https://code.claude.com/docs/ko/microsoft-foundry.md): 제공자별 배포196* [Amazon Bedrock](https://code.claude.com/docs/ko/amazon-bedrock.md), [Google Cloud's Agent Platform](https://code.claude.com/docs/ko/google-vertex-ai.md), [Microsoft Foundry](https://code.claude.com/docs/ko/microsoft-foundry.md): 제공자별 배포

196* [Claude Enterprise Administrator Guide](https://claude.com/resources/tutorials/claude-enterprise-administrator-guide): SSO, SCIM, 시트 관리 및 롤아웃 플레이북197* [Claude Enterprise Administrator Guide](https://claude.com/resources/tutorials/claude-enterprise-administrator-guide): SSO, SCIM, 시트 관리 및 롤아웃 플레이북

Details

41 41 

42이는 4턴이었습니다: 도구 호출이 있는 3턴, 최종 텍스트 전용 응답 1턴.42이는 4턴이었습니다: 도구 호출이 있는 3턴, 최종 텍스트 전용 응답 1턴.

43 43 

44`max_turns` / `maxTurns`로 루프를 제한할 수 있으며, 이는 도구 사용 턴만 계산합니다. 예를 들어, 위의 루프에서 `max_turns=2`는 편집 단계 전에 중지했을 것입니다. `max_budget_usd` / `maxBudgetUsd`를 사용하여 지출 임계값에 따라 턴을 제한할 수도 있습니다.44`max_turns` / `maxTurns`로 루프를 제한할 수 있습니다. 도구 호출이 있는 각 턴을 세고, 최종 텍스트 전용 응답을 위해 1턴을 더합니다. 이 추가 턴이 없으면 실행은 하위 유형이 `error_max_turns`인 `ResultMessage`로 끝나며 최종 응답이 없습니다. 예를 들어, 위의 루프에서 `max_turns=2`는 편집 단계 전에 중지했을 것입니다. `max_budget_usd` / `maxBudgetUsd`를 사용하여 지출 임계값에 따라 턴을 제한할 수도 있습니다.

45 45 

46제한이 없으면 Claude가 자체적으로 완료될 때까지 루프가 실행되며, 이는 잘 정의된 작업에는 괜찮지만 개방형 프롬프트("improve this codebase")에서는 오래 실행될 수 있습니다. 예산을 설정하는 것은 프로덕션 에이전트에 좋은 기본값입니다. 옵션 참조는 아래의 [턴과 예산](#turns-and-budget)을 참조하세요.46제한이 없으면 Claude가 자체적으로 완료될 때까지 루프가 실행되며, 이는 잘 정의된 작업에는 괜찮지만 개방형 프롬프트("improve this codebase")에서는 오래 실행될 수 있습니다. 예산을 설정하는 것은 프로덕션 에이전트에 좋은 기본값입니다. 옵션 참조는 아래의 [턴과 예산](#turns-and-budget)을 참조하세요.

47 47 


191 191 

192| 옵션 | 제어 대상 | 기본값 |192| 옵션 | 제어 대상 | 기본값 |

193| :- | :- | :- |193| :- | :- | :- |

194| 최대 턴(`max_turns` / `maxTurns`) | 도구 사용 왕복 최대 횟수 | 제한 없음 |194| 최대 턴(`max_turns` / `maxTurns`) | 최대 [턴](#turns-and-messages) 수 | 제한 없음 |

195| 최대 예산(`max_budget_usd` / `maxBudgetUsd`) | 루프가 중지되는 예상 지출액 | 제한 없음 |195| 최대 예산(`max_budget_usd` / `maxBudgetUsd`) | 루프가 중지되는 예상 지출액 | 제한 없음 |

196 196 

197두 제한 중 하나에 도달하면 SDK는 해당 오류 하위 유형(`error_max_turns` 또는 `error_max_budget_usd`)이 포함된 `ResultMessage`를 반환합니다. 이러한 하위 유형을 확인하는 방법은 [결과 처리](#handle-the-result)를, 구문은 [`ClaudeAgentOptions`](https://code.claude.com/docs/ko/agent-sdk/python#claudeagentoptions) / [`Options`](https://code.claude.com/docs/ko/agent-sdk/typescript#options)를 참조하세요.197두 제한 중 하나에 도달하면 SDK는 해당 오류 하위 유형(`error_max_turns` 또는 `error_max_budget_usd`)이 포함된 `ResultMessage`를 반환합니다. 이러한 하위 유형을 확인하는 방법은 [결과 처리](#handle-the-result)를, 구문은 [`ClaudeAgentOptions`](https://code.claude.com/docs/ko/agent-sdk/python#claudeagentoptions) / [`Options`](https://code.claude.com/docs/ko/agent-sdk/typescript#options)를 참조하세요.

Details

161 161 

162두 언어 모두 동일한 설정자를 가집니다:162두 언어 모두 동일한 설정자를 가집니다:

163 163 

164* **`setModel()` / `set_model()`**: 모델을 전환합니다. 옵션에서 전달한 `model` 대신 [Claude Code의 기본 모델](https://code.claude.com/docs/ko/model-config.md#default-model-setting)로 전환하려면 모델 없이 호출하세요.164* **`setModel()` / `set_model()`**: 모델을 전환합니다. 옵션에서 전달한 `model` 대신 [Claude Code의 기본 모델](https://code.claude.com/docs/ko/model-config.md#default-model-setting)로 전환하려면 모델 없이 호출하세요. 세션이 자동 모드인 상태에서 자동 모드를 지원하지 않는 모델로 전환하면 세션이 `default` 모드로 변경됩니다. 자동 모드로 돌아가려면 [자동 모드(`auto`)](https://code.claude.com/docs/ko/agent-sdk/permissions#auto-mode-auto)를 참조하세요.

165* **`setPermissionMode()` / `set_permission_mode()`**: 권한 모드를 전환합니다165* **`setPermissionMode()` / `set_permission_mode()`**: 권한 모드를 전환합니다

166 166 

167TypeScript는 또한 `applyFlagSettings()` 및 `updateSettings()`를 가집니다:167TypeScript는 또한 `applyFlagSettings()` 및 `updateSettings()`를 가집니다:

Details

192 192 

193컨테이너에는 SDK의 언어 런타임이 필요합니다:193컨테이너에는 SDK의 언어 런타임이 필요합니다:

194 194 

195* Python SDK의 경우 Python 3.10+ 또는 TypeScript SDK의 경우 Node.js 18+195* Python SDK의 경우 Python 3.10+ 또는 TypeScript SDK의 경우 Node.js 18.14+

196* TypeScript 및 Python SDK 모두 대부분의 설치에 대해 네이티브 Claude Code 바이너리를 번들로 제공하며, 생성된 CLI는 별도의 Node.js 설치가 필요하지 않습니다. 별도의 네이티브 Claude Code 설치가 필요한 설치는 [빠른 시작의 설치 참고](https://code.claude.com/docs/ko/agent-sdk/quickstart.md)를 참조하십시오.196* TypeScript 및 Python SDK 모두 대부분의 설치에 대해 네이티브 Claude Code 바이너리를 번들로 제공하며, 생성된 CLI는 별도의 Node.js 설치가 필요하지 않습니다. 별도의 네이티브 Claude Code 설치가 필요한 설치는 [빠른 시작의 설치 참고](https://code.claude.com/docs/ko/agent-sdk/quickstart.md)를 참조하십시오.

197 197 

198번들된 바이너리는 SDK 패키지 버전에 고정되므로 SDK를 업데이트하는 것이 CLI를 업데이트하는 방법입니다. SDK는 semver를 따릅니다: 패치 릴리스를 지속적으로 적용하고 마이너 버전을 적용하기 전에 [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) 또는 [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) 변경 로그를 검토하십시오.198번들된 바이너리는 SDK 패키지 버전에 고정되므로 SDK를 업데이트하는 것이 CLI를 업데이트하는 방법입니다. SDK는 semver를 따릅니다: 패치 릴리스를 지속적으로 적용하고 마이너 버전을 적용하기 전에 [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) 또는 [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) 변경 로그를 검토하십시오.


335 335 

336| 제한 사항 | 해결 방법 |336| 제한 사항 | 해결 방법 |

337| - | - |337| - | - |

338| 최상위 세션 타임아웃 없음 | 세션은 자동으로 타임아웃되지 않습니다. TypeScript에서 `maxTurns`를 설정하거나 Python에서 `max_turns`를 설정하여 에이전트가 중지되기 전에 수행하는 도구 사용 왕복 횟수를 제한하십시오. |338| 최상위 세션 타임아웃 없음 | 세션은 자동으로 타임아웃되지 않습니다. TypeScript에서 `maxTurns`를 설정하거나 Python에서 `max_turns`를 설정하여 에이전트가 중지되기 전에 수행하는 [턴](https://code.claude.com/docs/ko/agent-sdk/agent-loop.md#turns-and-messages) 수를 제한하십시오. |

339| 장시간 세션에서의 메모리 증가 | 세션 길이를 제한하거나 주기적으로 서브프로세스를 재활용하십시오. [확장성 및 동시성](#scaling-and-concurrency)을 참조하십시오. |339| 장시간 세션에서의 메모리 증가 | 세션 길이를 제한하거나 주기적으로 서브프로세스를 재활용하십시오. [확장성 및 동시성](#scaling-and-concurrency)을 참조하십시오. |

340| 대규모 병렬 서브에이전트 팬아웃이 속도 제한에 도달할 수 있음 | 광범위한 디스패치를 한 번에 발행하는 대신 작업을 더 작은 배치로 나누십시오. |340| 대규모 병렬 서브에이전트 팬아웃이 속도 제한에 도달할 수 있음 | 광범위한 디스패치를 한 번에 발행하는 대신 작업을 더 작은 배치로 나누십시오. |

341| 서브에이전트별 벽시계 데드라인 없음 | 각 [서브에이전트](https://code.claude.com/docs/ko/agent-sdk/subagents.md)를 `AgentDefinition`의 `maxTurns`로 제한하십시오. `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`는 서브에이전트가 출력 생성을 중지할 때 발동하는 정지 감시 장치를 설정합니다. 이는 총 런타임 데드라인이 아닙니다. |341| 서브에이전트별 벽시계 데드라인 없음 | 각 [서브에이전트](https://code.claude.com/docs/ko/agent-sdk/subagents.md)를 `AgentDefinition`의 `maxTurns`로 제한하십시오. `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`는 서브에이전트가 출력 생성을 중지할 때 발동하는 정지 감시 장치를 설정합니다. 이는 총 런타임 데드라인이 아닙니다. |

Details

425 425 

426기본 제공 커밋 및 풀 리퀘스트 지침을 제외하려면 `includeGitInstructions`를 `false`로 설정합니다. 이 지침은 Bash 도구 설명의 일부이므로 사용자 정의 `systemPrompt`를 사용할 때도 Claude에 도달합니다. 다만 최소 기본값, 사용자 정의 `systemPrompt`, 또는 자체 프롬프트가 있는 사용자 정의 메인 스레드 에이전트를 사용하는 경우에는 git 상태 스냅샷 없이 세션이 시작됩니다.426기본 제공 커밋 및 풀 리퀘스트 지침을 제외하려면 `includeGitInstructions`를 `false`로 설정합니다. 이 지침은 Bash 도구 설명의 일부이므로 사용자 정의 `systemPrompt`를 사용할 때도 Claude에 도달합니다. 다만 최소 기본값, 사용자 정의 `systemPrompt`, 또는 자체 프롬프트가 있는 사용자 정의 메인 스레드 에이전트를 사용하는 경우에는 git 상태 스냅샷 없이 세션이 시작됩니다.

427 427 

428`CLAUDE_CODE_DISABLE_ATTACHMENTS`를 설정하면, Claude Code는 또한 `@` 파일 언급을 파일 콘텐츠로 확장하는 대신 일반 텍스트로 전송합니다. 사용 가능한 서브에이전트 목록 및 백그라운드 작업 알림은 여전히 도착합니다. `@` 파일 언급의 확장만 중지하려면 Claude Code v2.1.299 이상에서 대신 [`CLAUDE_CODE_DISABLE_FILE_MENTIONS=1`](https://code.claude.com/docs/ko/env-vars#variables)을 설정합니다. 그러면 Claude는 언급된 경로와 함께 파일 도구로 해당 경로를 읽으라는 메모를 받습니다.428* `CLAUDE_CODE_DISABLE_ATTACHMENTS`를 설정하면, Claude Code는 또한 `@` 파일 언급을 파일 콘텐츠로 확장하는 대신 일반 텍스트로 전송합니다. 사용 가능한 서브에이전트 목록 및 백그라운드 작업 알림은 여전히 도착합니다.

429* `@` 파일 언급의 확장만 중지하려면 Claude Code v2.1.299 이상에서 대신 [`CLAUDE_CODE_DISABLE_FILE_MENTIONS=1`](https://code.claude.com/docs/ko/env-vars#variables)을 설정합니다. 그러면 Claude는 언급된 경로와 함께 파일 도구로 해당 경로를 읽으라는 메모를 받고, `PreToolUse` 훅은 각 파일 읽기를 도구 호출로 인식합니다.

429 430 

430다음 예제는 `append`에 자체 커밋 규칙을 포함하는 에이전트용입니다. 트레일러 및 푸터를 제거하기 위해 두 `attribution` 키를 빈 문자열로 설정하고, Claude Code의 자체 커밋 워크플로우 지침이 귀하의 지침과 경쟁하지 않도록 `includeGitInstructions`를 끕니다:431다음 예제는 `append`에 자체 커밋 규칙을 포함하는 에이전트용입니다. 트레일러 및 푸터를 제거하기 위해 두 `attribution` 키를 빈 문자열로 설정하고, Claude Code의 자체 커밋 워크플로우 지침이 귀하의 지침과 경쟁하지 않도록 `includeGitInstructions`를 끕니다:

431 432 

Details

43활성 [권한 모드](#permission-modes)를 적용합니다.43활성 [권한 모드](#permission-modes)를 적용합니다.

44 44 

45* `bypassPermissions` 모드에서 Claude Code는 이 단계에 도달하는 모든 것을 승인합니다. 단, 인식된 [중요 경로 제거](https://code.claude.com/docs/ko/permission-modes.md#critical-paths)와 [`Dangerous rm operation not ruled out`](https://code.claude.com/docs/ko/permission-modes#dangerous-rm-operation-not-ruled-out)으로 표시된 Bash 명령은 승인되지 않고 대신 전달됩니다.45* `bypassPermissions` 모드에서 Claude Code는 이 단계에 도달하는 모든 것을 승인합니다. 단, 인식된 [중요 경로 제거](https://code.claude.com/docs/ko/permission-modes.md#critical-paths)와 [`Dangerous rm operation not ruled out`](https://code.claude.com/docs/ko/permission-modes#dangerous-rm-operation-not-ruled-out)으로 표시된 Bash 명령은 승인되지 않고 대신 전달됩니다.

46 * 프롬프트 없이 이러한 제거를 실행하려면 [중요 경로 제거 프롬프트 끄기](https://code.claude.com/docs/ko/permission-modes.md#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode)를 참조하세요.

46* `acceptEdits` 모드에서 Claude Code는 [Accept edits mode](#accept-edits-mode-acceptedits)에 나열된 파일 작업을 승인합니다.47* `acceptEdits` 모드에서 Claude Code는 [Accept edits mode](#accept-edits-mode-acceptedits)에 나열된 파일 작업을 승인합니다.

47* `plan` 모드에서 Claude Code는 allow 규칙과 관계없이 파일 편집 도구를 `canUseTool` 콜백으로 보냅니다.48* `plan` 모드에서 Claude Code는 allow 규칙과 관계없이 파일 편집 도구를 `canUseTool` 콜백으로 보냅니다.

48* 다른 모드에서는 요청이 전달됩니다.49* 다른 모드에서는 요청이 전달됩니다.


305> `allowed_tools`는 이 모드를 제한하지 않습니다. 나열한 도구뿐만 아니라 모든 도구가 승인됩니다. 다음 제어는 여전히 적용됩니다.306> `allowed_tools`는 이 모드를 제한하지 않습니다. 나열한 도구뿐만 아니라 모든 도구가 승인됩니다. 다음 제어는 여전히 적용됩니다.

306>307>

307> * 거부 규칙, 명시적 `ask` 규칙 및 훅은 모드 확인 전에 평가되며 여전히 도구를 차단할 수 있습니다.308> * 거부 규칙, 명시적 `ask` 규칙 및 훅은 모드 확인 전에 평가되며 여전히 도구를 차단할 수 있습니다.

308> * [조직이 `ask`로 설정한](https://code.claude.com/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구, 사용자 상호작용이 필요한 도구, 그리고 인식된 [중요 경로 삭제](https://code.claude.com/docs/ko/permission-modes.md#critical-paths)는 여전히 `canUseTool` 콜백으로 넘어갑니다. 이러한 삭제를 인식하는 검사는 [일부 명령을 놓칠 수 있습니다](https://code.claude.com/docs/ko/permission-modes.md#critical-paths). [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md) 외부에서는 애플리케이션이 [`always_ask`로 지정한](https://code.claude.com/docs/ko/agent-sdk/custom-tools#require-approval-for-specific-tools) 커스텀 도구 호출도 콜백으로 넘어갑니다.309> * [조직이 `ask`로 설정한](https://code.claude.com/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구, 사용자 상호작용이 필요한 도구, 그리고 인식된 [중요 경로 삭제](https://code.claude.com/docs/ko/permission-modes.md#critical-paths)는 여전히 `canUseTool` 콜백으로 넘어갑니다. 이러한 삭제를 인식하는 검사는 [일부 명령을 놓칠 수 있으며](https://code.claude.com/docs/ko/permission-modes.md#critical-paths), [중요 경로 삭제 프롬프트를 끌 수도 있습니다](https://code.claude.com/docs/ko/permission-modes.md#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode). [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md) 외부에서는 애플리케이션이 [`always_ask`로 지정한](https://code.claude.com/docs/ko/agent-sdk/custom-tools#require-approval-for-specific-tools) 커스텀 도구 호출도 콜백으로 넘어갑니다.

309> * [세션 간 메시징 보호 장치](https://code.claude.com/docs/ko/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)는 여전히 적용됩니다.310> * [세션 간 메시징 보호 장치](https://code.claude.com/docs/ko/permission-modes.md#skip-all-checks-with-bypasspermissions-mode)는 여전히 적용됩니다.

310 311 

311#### 플랜 모드(`plan`)312#### 플랜 모드(`plan`)

Details

880| `continue_conversation` | `bool` | `False` | 가장 최신 대화 계속하기 |880| `continue_conversation` | `bool` | `False` | 가장 최신 대화 계속하기 |

881| `resume` | `str \| None` | `None` | 재개할 세션 ID |881| `resume` | `str \| None` | `None` | 재개할 세션 ID |

882| `session_id` | `str \| None` | `None` | 자동 생성된 세션 ID 대신 특정 세션 ID를 사용합니다. 유효한 UUID여야 합니다. `fork_session`도 설정되지 않으면 `continue_conversation` 또는 `resume`과 결합할 수 없습니다 |882| `session_id` | `str \| None` | `None` | 자동 생성된 세션 ID 대신 특정 세션 ID를 사용합니다. 유효한 UUID여야 합니다. `fork_session`도 설정되지 않으면 `continue_conversation` 또는 `resume`과 결합할 수 없습니다 |

883| `max_turns` | `int \| None` | `None` | 최대 에이전트 턴 (도구 사용 왕복) |883| `max_turns` | `int \| None` | `None` | 최대 에이전트 [턴](https://code.claude.com/docs/ko/agent-sdk/agent-loop.md#turns-and-messages) |

884| `max_budget_usd` | `float \| None` | `None` | 클라이언트 측 비용 추정이 이 USD 값에 도달하면 쿼리 중지. 추정치가 이 값을 넘어설 수 있으므로 [여유분을 남겨 두십시오](https://code.claude.com/docs/ko/agent-sdk/agent-loop.md#budget-headroom). 호출 자체의 지출만 계산합니다. 재개된 세션에서 복원된 총액은 계산되지 않습니다. 정확도 주의 사항 및 재설정 동작은 [비용 및 사용량 추적](https://code.claude.com/docs/ko/agent-sdk/cost-tracking.md) 참조 |884| `max_budget_usd` | `float \| None` | `None` | 클라이언트 측 비용 추정이 이 USD 값에 도달하면 쿼리 중지. 추정치가 이 값을 넘어설 수 있으므로 [여유분을 남겨 두십시오](https://code.claude.com/docs/ko/agent-sdk/agent-loop.md#budget-headroom). 호출 자체의 지출만 계산합니다. 재개된 세션에서 복원된 총액은 계산되지 않습니다. 정확도 주의 사항 및 재설정 동작은 [비용 및 사용량 추적](https://code.claude.com/docs/ko/agent-sdk/cost-tracking.md) 참조 |

885| `disallowed_tools` | `list[str]` | `[]` | 거부할 도구. `"Bash"`와 같은 단순 이름은 Claude의 컨텍스트에서 도구를 제거합니다. `"Bash(rm *)"` 같은 범위 지정 규칙은 도구를 사용 가능하게 유지하고, `bypassPermissions`를 포함한 모든 권한 모드에서 [작성된 대로의](https://code.claude.com/docs/ko/permissions.md#bash-rule-limits) 명령과 일치하는 호출을 거부합니다. [권한](https://code.claude.com/docs/ko/agent-sdk/permissions.md#allow-and-deny-rules) 참조 |885| `disallowed_tools` | `list[str]` | `[]` | 거부할 도구. `"Bash"`와 같은 단순 이름은 Claude의 컨텍스트에서 도구를 제거합니다. `"Bash(rm *)"` 같은 범위 지정 규칙은 도구를 사용 가능하게 유지하고, `bypassPermissions`를 포함한 모든 권한 모드에서 [작성된 대로의](https://code.claude.com/docs/ko/permissions.md#bash-rule-limits) 명령과 일치하는 호출을 거부합니다. [권한](https://code.claude.com/docs/ko/agent-sdk/permissions.md#allow-and-deny-rules) 참조 |

886| `enable_file_checkpointing` | `bool` | `False` | 되감기를 위한 파일 변경 추적 활성화. [파일 체크포인트](https://code.claude.com/docs/ko/agent-sdk/file-checkpointing.md) 참조 |886| `enable_file_checkpointing` | `bool` | `False` | 되감기를 위한 파일 변경 추적 활성화. [파일 체크포인트](https://code.claude.com/docs/ko/agent-sdk/file-checkpointing.md) 참조 |


2568 2568 

2569### Agent2569### Agent

2570 2570 

2571**도구 이름:** `Agent`. 이전 이름 `Task`는 여전히 별칭으로 허용되며, init [`SystemMessage`](#systemmessage)의 `tools` 목록은 하위 호환성을 위해 이 도구를 `Task`로 보고합니다.2571**도구 이름:** `Agent`. 이전 이름 `Task`는 이 도구를 세션에서 사용할 수 있을 때 여전히 별칭으로 허용됩니다.

2572 

2573init [`SystemMessage`](#systemmessage)의 `tools` 목록은 하위 호환성을 위해 이 도구를 `Task`로 보고합니다.

2572 2574 

2573**입력:**2575**입력:**

2574 2576 


3642| `deniedDomains` | `list[str]` | `[]` | 샌드박스된 프로세스가 접근할 수 없는 도메인 이름입니다. `allowedDomains`보다 우선합니다 |3644| `deniedDomains` | `list[str]` | `[]` | 샌드박스된 프로세스가 접근할 수 없는 도메인 이름입니다. `allowedDomains`보다 우선합니다 |

3643| `allowManagedDomainsOnly` | `bool` | `False` | 관리되는 설정만: 관리되는 설정에서 설정되면, 관리되지 않는 설정 소스의 `allowedDomains` 및 `WebFetch(domain:...)` 허용 규칙을 무시합니다. SDK 옵션을 통해 설정할 때는 효과가 없습니다 |3645| `allowManagedDomainsOnly` | `bool` | `False` | 관리되는 설정만: 관리되는 설정에서 설정되면, 관리되지 않는 설정 소스의 `allowedDomains` 및 `WebFetch(domain:...)` 허용 규칙을 무시합니다. SDK 옵션을 통해 설정할 때는 효과가 없습니다 |

3644| `allowUnixSockets` | `list[str]` | `[]` | macOS만 해당: 프로세스가 접근할 수 있는 Unix 소켓 경로 (예: Docker 소켓). Linux에서는 무시됩니다 |3646| `allowUnixSockets` | `list[str]` | `[]` | macOS만 해당: 프로세스가 접근할 수 있는 Unix 소켓 경로 (예: Docker 소켓). Linux에서는 무시됩니다 |

3645| `allowAllUnixSockets` | `bool` | `False` | 모든 Unix 소켓에 대한 접근 허용 |3647| `allowAllUnixSockets` | `bool` | `False` | 모든 Unix 소켓에 대한 접근 허용, Linux에서는 VM 소켓(`AF_VSOCK`)에 대한 접근도 허용 |

3646| `allowLocalBinding` | `bool` | `False` | 프로세스가 로컬 포트에 바인딩하도록 허용 (예: 개발 서버용) |3648| `allowLocalBinding` | `bool` | `False` | 프로세스가 로컬 포트에 바인딩하도록 허용 (예: 개발 서버용) |

3647| `allowMachLookup` | `list[str]` | `[]` | macOS만 해당: 허용할 XPC/Mach 서비스 이름입니다. 후행 와일드카드를 지원합니다 |3649| `allowMachLookup` | `list[str]` | `[]` | macOS만 해당: 허용할 XPC/Mach 서비스 이름입니다. 후행 와일드카드를 지원합니다 |

3648| `httpProxyPort` | `int` | `None` | 네트워크 요청을 위한 HTTP 프록시 포트 |3650| `httpProxyPort` | `int` | `None` | 네트워크 요청을 위한 HTTP 프록시 포트 |

Details

16 16 

17## 필수 조건17## 필수 조건

18 18 

19* **Node.js 18+** 또는 **Python 3.10+**19* **Node.js 18.14+** 또는 **Python 3.10+**

20* **Anthropic 계정**. 계정이 없으신 경우 [여기서 가입하세요](https://platform.claude.com/).20* **Anthropic 계정**. 계정이 없으신 경우 [여기서 가입하세요](https://platform.claude.com/).

21 21 

22## 설정22## 설정

Details

118 118 

119### 중단된 스트림 처리하기119### 중단된 스트림 처리하기

120 120 

121턴을 중단하거나 연결이 끊기는 경우처럼 스트림이 메시지 도중에 중단되더라도, 턴이 끝나기 전에 해당 메시지의 `message_stop`을 수신합니다. 중단된 텍스트 블록이나 thinking 블록도 `content_block_stop`을 받습니다. 중단된 도구 호출은 이를 받지 않으므로, 도구 호출의 블록이 아직 열려 있는 상태에서 `message_stop`이 도착하면 해당 호출의 입력을 불완전한 것으로 처리해야 합니다.121스트림이 메시지 도중에 중단되더라도, 턴이 끝나기 전에 해당 메시지의 `message_stop`을 수신합니다. 스트림이 중단되는 원인으로는 턴 중단, 연결 끊김, 비스트리밍 요청으로의 폴백 등이 있습니다. 해당 `message_stop` 이전에 `content_block_stop`과 `message_delta`가 누락될 수 있습니다:

122 

123* **`content_block_stop`**: 열려 있던 블록에 대해 도착하지만, 해당 블록이 도구 호출인 경우에는 도착하지 않습니다. 도구 호출의 블록이 아직 열려 있는 상태에서 `message_stop`이 도착하면 해당 호출의 입력을 불완전한 것으로 처리하십시오.

124* **`message_delta`**: 턴을 중단하면 도착하지만, 연결이 끊기거나 비스트리밍으로 폴백한 후에는 누락될 수 있으므로 중단된 메시지에서는 이를 기다리지 마십시오.

122 125 

123Claude Code v2.1.290 이전에는 중단된 스트림이 `message_stop` 없이 턴을 종료할 수 있었기 때문에, 스트림 이벤트로 렌더링한 응답이 계속 진행 중으로 표시될 수 있었습니다. TypeScript Agent SDK는 v0.3.290부터, Python Agent SDK는 v0.2.164부터 Claude Code v2.1.290 이상을 번들로 포함합니다. 턴이 끝난 후에도 응답이 계속 진행 중으로 표시된다면 SDK를 업데이트하십시오.126Claude Code v2.1.290 이전에는 중단된 스트림이 `message_stop` 없이 턴을 종료할 수 있었기 때문에, 스트림 이벤트로 렌더링한 응답이 계속 진행 중으로 표시될 수 있었습니다. TypeScript Agent SDK는 v0.3.290부터, Python Agent SDK는 v0.2.164부터 Claude Code v2.1.290 이상을 번들로 포함합니다. 턴이 끝난 후에도 응답이 계속 진행 중으로 표시된다면 SDK를 업데이트하십시오.

124 127 

Details

105 105 

106부프로세스가 생성되고 초기화 핸드셰이크를 완료한 후 해결되는 `Promise<`[`WarmQuery`](#warmquery)`>`를 반환합니다.106부프로세스가 생성되고 초기화 핸드셰이크를 완료한 후 해결되는 `Promise<`[`WarmQuery`](#warmquery)`>`를 반환합니다.

107 107 

108핸드셰이크가 완료되기 전에 `SessionStart` 또는 `Setup` 훅이 내보내는 [`hook_progress`](#sdkhookprogressmessage) 메시지 중에서는 가장 최신 메시지만 전달되며, 이 메시지에는 지금까지의 훅 출력 전체가 담겨 있습니다. `startup()`은 해당 메시지, 훅의 [`hook_started`](#sdkhookstartedmessage) 메시지, 그리고 핸드셰이크가 완료되기 전에 부프로세스가 내보내는 그 밖의 모든 메시지를 보관합니다. 보관된 메시지는 `WarmQuery`에서 `.query()`를 호출하고 결과를 반복할 때 전달됩니다.

109 

108#### 예제110#### 예제

109 111 

110`startup()`을 조기에 호출합니다(예: 애플리케이션 부팅 시). 그런 다음 프롬프트가 준비되면 반환된 핸들에서 `.query()`를 호출합니다. 이렇게 하면 부프로세스 생성 및 초기화가 중요 경로에서 제거됩니다.112`startup()`을 조기에 호출합니다(예: 애플리케이션 부팅 시). 그런 다음 프롬프트가 준비되면 반환된 핸들에서 `.query()`를 호출합니다. 이렇게 하면 부프로세스 생성 및 초기화가 중요 경로에서 제거됩니다.


524| `managedSettings` | `Settings` | `undefined` | 호스트 프로세스가 생성된 세션에 제공하는 정책 계층 설정입니다. 관리자가 배포한 관리형 설정이 있는 머신에서는 관리자의 최우선 관리형 소스가 `parentSettingsBehavior: 'merge'`를 설정하지 않는 한 Claude Code가 이를 무시하며, [`policyHelper`](https://code.claude.com/docs/ko/settings-reference#policyhelper)가 관리형 설정을 제공하는 동안에는 절대 병합하지 않습니다. 병합된 값은 제한 전용 필터를 거칩니다. 필터가 허용하는 항목과 `allowManaged*Only` 잠금은 [상위 설정 제한](https://code.claude.com/docs/ko/claude-apps-gateway#restrict-parent-settings)에서 다룹니다. [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/ko/env-vars)를 설정한 호스트는 대신 세 개의 키를 이 페이로드에서 직접 읽습니다. Claude Code v2.1.222 이상에서의 [모델 구성](https://code.claude.com/docs/ko/model-config.md#restrict-model-selection), v2.1.246 이상에서 관리형 소스가 설정하지 않은 경우의 [`modelPricing`](https://code.claude.com/docs/ko/settings-reference#modelpricing), v2.1.247 이상에서의 `ENABLE_TOOL_SEARCH` env 항목입니다 |526| `managedSettings` | `Settings` | `undefined` | 호스트 프로세스가 생성된 세션에 제공하는 정책 계층 설정입니다. 관리자가 배포한 관리형 설정이 있는 머신에서는 관리자의 최우선 관리형 소스가 `parentSettingsBehavior: 'merge'`를 설정하지 않는 한 Claude Code가 이를 무시하며, [`policyHelper`](https://code.claude.com/docs/ko/settings-reference#policyhelper)가 관리형 설정을 제공하는 동안에는 절대 병합하지 않습니다. 병합된 값은 제한 전용 필터를 거칩니다. 필터가 허용하는 항목과 `allowManaged*Only` 잠금은 [상위 설정 제한](https://code.claude.com/docs/ko/claude-apps-gateway#restrict-parent-settings)에서 다룹니다. [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/ko/env-vars)를 설정한 호스트는 대신 세 개의 키를 이 페이로드에서 직접 읽습니다. Claude Code v2.1.222 이상에서의 [모델 구성](https://code.claude.com/docs/ko/model-config.md#restrict-model-selection), v2.1.246 이상에서 관리형 소스가 설정하지 않은 경우의 [`modelPricing`](https://code.claude.com/docs/ko/settings-reference#modelpricing), v2.1.247 이상에서의 `ENABLE_TOOL_SEARCH` env 항목입니다 |

525| `maxBudgetUsd` | `number` | `undefined` | 클라이언트 측 비용 추정치가 이 USD 값에 도달하면 쿼리를 중지합니다. 추정치가 이 값을 초과할 수 있으므로 [여유분을 두세요](https://code.claude.com/docs/ko/agent-sdk/agent-loop.md#budget-headroom). 해당 호출 자체의 지출만 집계하며, 재개된 세션에서 복원된 합계는 포함하지 않습니다. 정확도에 관한 주의 사항과 재설정 동작은 [비용 및 사용량 추적](https://code.claude.com/docs/ko/agent-sdk/cost-tracking.md)을 참조하세요 |527| `maxBudgetUsd` | `number` | `undefined` | 클라이언트 측 비용 추정치가 이 USD 값에 도달하면 쿼리를 중지합니다. 추정치가 이 값을 초과할 수 있으므로 [여유분을 두세요](https://code.claude.com/docs/ko/agent-sdk/agent-loop.md#budget-headroom). 해당 호출 자체의 지출만 집계하며, 재개된 세션에서 복원된 합계는 포함하지 않습니다. 정확도에 관한 주의 사항과 재설정 동작은 [비용 및 사용량 추적](https://code.claude.com/docs/ko/agent-sdk/cost-tracking.md)을 참조하세요 |

526| `maxThinkingTokens` | `number` | `undefined` | *지원 중단:* 대신 `thinking`을 사용하세요. 사고 과정의 최대 토큰 수입니다 |528| `maxThinkingTokens` | `number` | `undefined` | *지원 중단:* 대신 `thinking`을 사용하세요. 사고 과정의 최대 토큰 수입니다 |

527| `maxTurns` | `number` | `undefined` | 최대 에이전트 턴 수(도구 사용 왕복)입니다 |529| `maxTurns` | `number` | `undefined` | 최대 에이전트 [턴](https://code.claude.com/docs/ko/agent-sdk/agent-loop.md#turns-and-messages) 수 |

528| `mcpServers` | `Record<string, [`McpServerConfig`](#mcpserverconfig)>` | `{}` | MCP 서버 구성입니다 |530| `mcpServers` | `Record<string, [`McpServerConfig`](#mcpserverconfig)>` | `{}` | MCP 서버 구성입니다 |

529| `model` | `string` | CLI의 기본값 | Claude 모델 별칭 또는 전체 모델 이름입니다. [허용되는 값 및 제공업체별 ID](https://code.claude.com/docs/ko/model-config.md#available-models)를 참조하세요 |531| `model` | `string` | CLI의 기본값 | Claude 모델 별칭 또는 전체 모델 이름입니다. [허용되는 값 및 제공업체별 ID](https://code.claude.com/docs/ko/model-config.md#available-models)를 참조하세요 |

530| `onElicitation` | `(request: ElicitationRequest, options: { signal: AbortSignal }) => Promise<ElicitationResult>` | `undefined` | MCP elicitation 요청을 처리하는 콜백입니다. MCP 서버가 사용자 입력을 요청하고 이를 먼저 처리하는 훅이 없을 때 호출됩니다. 제공되지 않으면 처리되지 않은 elicitation 요청은 자동으로 거부됩니다 |532| `onElicitation` | `(request: ElicitationRequest, options: { signal: AbortSignal }) => Promise<ElicitationResult>` | `undefined` | MCP elicitation 요청을 처리하는 콜백입니다. MCP 서버가 사용자 입력을 요청하고 이를 먼저 처리하는 훅이 없을 때 호출됩니다. 제공되지 않으면 처리되지 않은 elicitation 요청은 자동으로 거부됩니다 |


1403 };1405 };

1404```1406```

1405 1407 

1408`updatedPermissions`에 4,096개를 초과하는 항목과 함께 `allow`를 반환하면 Claude Code는 결과를 유효하지 않은 것으로 처리하고 도구 호출을 거부합니다. 각 업데이트가 항목 하나로 계산되며, 그 `rules` 또는 `directories` 목록의 각 항목도 마찬가지입니다. 거부 메시지는 `updatedPermissions may hold at most 4096 updates, rules and directories in all`로 끝납니다. 호출이 허용되도록 하려면 4,096개 이하의 항목을 반환하십시오.

1409 

1406### `ToolConfig`1410### `ToolConfig`

1407 1411 

1408기본 제공 도구 동작에 대한 구성입니다.1412기본 제공 도구 동작에 대한 구성입니다.


1464 1468 

1465#### `McpSdkServerConfigWithInstance`1469#### `McpSdkServerConfigWithInstance`

1466 1470 

1467[`createSdkMcpServer()`](#createsdkmcpserver)가 생성하여 애플리케이션 프로세스 내부에서 실행되는 인프로세스 MCP 서버의 구성입니다. `createSdkMcpServer()`가 반환하는 객체에, 직접 추가하는 선택적 [`McpServerToolPolicy`](#mcpservertoolpolicy) 항목의 `tools` 목록을 더한 것입니다. 서버 도구 중 하나에 대한 호출에 승인을 요구하거나 호출을 거부하려면 해당 도구 이름을 지정한 항목을 추가합니다.1471인프로세스 MCP 서버의 구성입니다. [`createSdkMcpServer()`](#createsdkmcpserver)가 반환하는 값에, 사용자가 추가하는 선택적 [`McpServerToolPolicy`](#mcpservertoolpolicy) 항목의 `tools` 목록을 더한 것입니다.

1468 1472 

1469```typescript theme={null}1473```typescript theme={null}

1470type McpSdkServerConfigWithInstance = {1474type McpSdkServerConfigWithInstance = {


1476};1480};

1477```1481```

1478 1482 

1479정책을 설정하려면 `createSdkMcpServer()`가 반환한 객체를 `mcpServers`의 새 객체에 스프레드하고, 그 새 객체에 `tools` 목록을 추가합니다. `createSdkMcpServer()` 자체의 `tools` 옵션은 도구 정의를 담는 별개의 목록으로, 정책 항목을 허용하지 않습니다. 정책 목록에는 Agent SDK v0.3.301 이상이 필요하며, 각 `permission_policy` 값의 동작은 [`McpServerToolPolicy`](#mcpservertoolpolicy)에서 설명합니다.1483서버 도구 중 하나에 대한 호출에 승인을 요구하거나 이를 거부하려면, 해당 도구의 이름을 지정하는 정책 항목을 추가합니다. 함수의 `tools` 옵션은 정책 항목이 아닌 도구 정의를 받으므로, `createSdkMcpServer()`가 반환하는 값을 `mcpServers` 아래의 객체에 펼치고 해당 객체의 `tools` 목록에 항목을 넣으십시오. 정책 목록에는 Agent SDK v0.3.301 이상이 필요하며, 각 `permission_policy` 값의 동작은 [`McpServerToolPolicy`](#mcpservertoolpolicy)에 설명되어 있습니다.

1480 1484 

1481다음 예시는 `allowedTools` 와일드카드로 `records` 서버의 모든 도구를 미리 승인한 다음, `delete_record`를 `always_ask`로 표시하여 해당 호출이 어쨌든 `canUseTool`로 전달되도록 합니다. `destructiveHint: true` 어노테이션이 있으므로, 세션이 `auto` 모드에서 실행되어 자동 모드 [분류기](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)가 호출을 승인할 수 있는 경우에도 호출은 여전히 콜백에 도달합니다.1485이 스크립트에서는 `allowedTools` 와일드카드가 `records` 서버의 모든 도구를 사전 승인하지만, `delete_record`는 `always_ask`로 표시되어 있으므로 해당 호출은 어쨌든 `canUseTool`로 전달됩니다. `destructiveHint: true` 어노테이션이 있으므로 세션이 `auto` 모드로 실행되더라도 호출이 콜백에 도달합니다. 그렇지 않으면 자동 모드 [분류기](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)가 이를 승인할 수 있습니다.

1482 1486 

1483```typescript theme={null}1487```typescript theme={null}

1484import { query, tool, createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk";1488import { query, tool, createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk";


1517}1521}

1518```1522```

1519 1523 

1520Claude가 도구를 호출하면, `allowedTools` 항목이 원래라면 호출을 승인했을 것임에도 스크립트는 `delete_record` 도구가 실행되기 전에 `Approval requested for mcp__records__delete_record`를 출력합니다.1524Claude가 `delete_record`를 호출하면 스크립트는 `Approval requested for mcp__records__delete_record`를 출력합니다.

1521 1525 

1522세션 실행 중에 도구의 정책을 변경하거나 해제하려면, 새 `tools` 값을 포함한 서버 구성을 [`setMcpServers()`](#mcpsetserversresult)에 전달합니다. 전달한 `tools` 값은 Claude가 해당 서버의 도구를 다음에 호출할 때부터 적용됩니다.1526세션 실행 중에 도구의 정책을 변경하거나 해제하려면, 새 `tools` 값을 포함한 서버 구성을 [`setMcpServers()`](#mcpsetserversresult)에 전달합니다. 전달한 `tools` 값은 Claude가 해당 서버의 도구를 다음에 호출할 때부터 적용됩니다.

1523 1527 


1556 1560 

1557##### `always_ask` 호출을 승인할 수 있는 권한 모드1561##### `always_ask` 호출을 승인할 수 있는 권한 모드

1558 1562 

1559`auto`, `plan`, `bypassPermissions` 모드에서는 [`always_ask`](#permission-policy-values)로 표시된 도구에 대한 호출이 `canUseTool` 콜백에 도달하기 전에 승인될 수 있습니다. 이 목록에서 세션의 모드를 찾아 해당 승인이 언제 이루어지는지, 그리고 호출이 그래도 콜백에 도달하도록 하려면 무엇을 설정해야 하는지 확인합니다.1563`auto`, `plan`, `bypassPermissions` 모드에서는 [`always_ask`](#permission-policy-values)로 표시된 도구에 대한 호출이 `canUseTool` 콜백에 도달하기 전에 승인될 수 있습니다.

1560 1564 

1561* **`auto`**: 자동 모드 [분류기](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)가 호출을 검토하여 허용할 수 있습니다. `auto` 모드에서 모든 호출이 콜백에 도달하도록 하려면 도구의 [어노테이션](#toolannotations)에 `destructiveHint: true`를 설정합니다1565* **`auto`**: 자동 모드 [분류기](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)가 호출을 검토하여 허용할 수 있습니다. `auto` 모드에서 모든 호출이 콜백에 도달하도록 하려면 도구의 [어노테이션](#toolannotations)에 `destructiveHint: true`를 설정합니다

1562* **`plan`**: 세션에서 [자동 모드를 사용할 수 있는](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode) 동안, `readOnlyHint: true`로 어노테이션된 `always_ask` 도구에 대한 호출은 자동 모드 분류기로 전달되며, 분류기가 이를 허용할 수 있습니다. 다른 `always_ask` 도구에 대한 호출은 콜백에 도달합니다. 읽기 전용 도구의 호출도 콜백에 도달하도록 하려면 해당 도구의 어노테이션에 `readOnlyHint: true`와 함께 `destructiveHint: true`를 추가합니다. 또는 [`useAutoModeDuringPlan`](https://code.claude.com/docs/ko/settings-reference#useautomodeduringplan)을 `false`로 설정하여 계획 중에 분류기를 끌 수 있습니다1566* **`plan`**: 세션에서 [자동 모드를 사용할 수 있는](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode) 동안, `readOnlyHint: true`로 어노테이션된 `always_ask` 도구에 대한 호출은 자동 모드 분류기로 전달되며, 분류기가 이를 허용할 수 있습니다. 다른 `always_ask` 도구에 대한 호출은 콜백에 도달합니다. 읽기 전용 도구의 호출도 콜백에 도달하도록 하려면 해당 도구의 어노테이션에 `readOnlyHint: true`와 함께 `destructiveHint: true`를 추가합니다. 또는 [`useAutoModeDuringPlan`](https://code.claude.com/docs/ko/settings-reference#useautomodeduringplan)을 `false`로 설정하여 계획 중에 분류기를 끌 수 있습니다


1692 1696 

1693`aborted`는 인터럽트 또는 중단으로 인해 스트림이 완료되기 전에 어시스턴트 메시지가 잘렸을 때 `true`입니다. 이 경우 메시지에는 `stop_reason`이 없으며 콘텐츠가 단어 중간에서 끝날 수 있습니다. 정상적으로 완료된 메시지에는 이 필드가 없습니다. Agent SDK v0.3.214 이상이 필요합니다.1697`aborted`는 인터럽트 또는 중단으로 인해 스트림이 완료되기 전에 어시스턴트 메시지가 잘렸을 때 `true`입니다. 이 경우 메시지에는 `stop_reason`이 없으며 콘텐츠가 단어 중간에서 끝날 수 있습니다. 정상적으로 완료된 메시지에는 이 필드가 없습니다. Agent SDK v0.3.214 이상이 필요합니다.

1694 1698 

1695`agent_id`는 메시지를 생성한 서브에이전트를 식별하며, 메인 스레드 메시지에는 없습니다. 이 값은 해당 서브에이전트의 [`task_started`](#sdktaskstartedmessage) 및 기타 작업 이벤트의 `task_id`와 같으며, 서브에이전트가 [재개](https://code.claude.com/docs/ko/agent-sdk/subagents.md#resume-subagents)되어도 변경되지 않습니다. 이 필드에는 Agent SDK v0.3.292 이상이 필요합니다.1699`agent_id`는 메시지를 생성한 서브에이전트를 식별하며, 메인 스레드 메시지에는 없습니다. 값은 해당 서브에이전트의 [`task_started`](#sdktaskstartedmessage) 및 기타 작업 이벤트의 `task_id`와 같으며, 서브에이전트가 [재개](https://code.claude.com/docs/ko/agent-sdk/subagents.md#resume-subagents)되어도 변경되지 않습니다. [중첩된 서브에이전트](https://code.claude.com/docs/ko/sub-agents.md#let-subagents-spawn-their-own-subagents)의 메시지에서는 이를 생성한 서브에이전트가 아니라 중첩된 서브에이전트를 가리킵니다. 이 필드에는 Agent SDK v0.3.292 이상이 필요합니다.

1696 1700 

1697서브에이전트의 메시지를 작업 이벤트와 매칭할 때는 메시지의 `parent_tool_use_id`를 작업 이벤트의 `tool_use_id`와 짝짓지 말고 `agent_id`를 기준으로 매칭하세요. 도구 호출이 서브에이전트를 재개하면 작업 이벤트는 해당 호출의 `tool_use_id`를 가지지만, 메시지는 서브에이전트를 처음 시작한 도구 호출의 `parent_tool_use_id`를 유지하므로 두 값이 더 이상 일치하지 않습니다.1701서브에이전트의 메시지를 작업 이벤트와 매칭할 때는 메시지의 `parent_tool_use_id`를 작업 이벤트의 `tool_use_id`와 짝짓지 말고 `agent_id`를 기준으로 매칭하세요. 도구 호출이 서브에이전트를 재개하면 작업 이벤트는 해당 호출의 `tool_use_id`를 가지지만, 메시지는 서브에이전트를 처음 시작한 도구 호출의 `parent_tool_use_id`를 유지하므로 두 값이 더 이상 일치하지 않습니다.

1698 1702 


3269 3273 

3270### Agent3274### Agent

3271 3275 

3272**도구 이름:** `Agent`. 이전 이름인 `Task`는 여전히 별칭으로 수락되며, [`SDKSystemMessage`](#sdksystemmessage) 초기화 메시지의 `tools` 배열은 현재 이 도구를 하위 호환성을 위해 `Task`로 나열합니다.3276**도구 이름:** `Agent`. 이 도구를 세션에서 사용할 수 있을 때 이전 이름인 `Task`도 여전히 별칭으로 수락됩니다.

3277 

3278[`SDKSystemMessage`](#sdksystemmessage) 초기화 메시지의 `tools` 배열은 하위 호환성을 위해 이 도구를 `Task`로 나열합니다.

3273 3279 

3274> [!NOTE]3280> [!NOTE]

3275>3281>


4006 4012 

4007### Agent4013### Agent

4008 4014 

4009**도구 이름:** `Agent`. 이전 이름 `Task`는 여전히 별칭으로 수락되며, [`SDKSystemMessage`](#sdksystemmessage) 초기화 메시지의 `tools` 배열은 현재 이 도구를 하위 호환성을 위해 `Task`로 나열합니다.4015**도구 이름:** `Agent`. 이 도구를 세션에서 사용할 수 있을 때 이전 이름 `Task`도 여전히 별칭으로 수락됩니다.

4010 4016 

4011```typescript theme={null}4017```typescript theme={null}

4012type AgentOutput =4018type AgentOutput =


5040 5046 

5041### `ApiKeySource`5047### `ApiKeySource`

5042 5048 

5043세션의 요청에 대한 API 키가 어디에서 왔는지를 나타내며, [`SDKSystemMessage`](#sdksystemmessage) 초기화 메시지의 `apiKeySource`로 보고됩니다.5049세션의 요청에 사용된 API 키의 출처로, [`SDKSystemMessage`](#sdksystemmessage) init 메시지에 `apiKeySource`로 보고됩니다.

5044 5050 

5045```typescript theme={null}5051```typescript theme={null}

5046type ApiKeySource =5052type ApiKeySource =


5055 | "oauth";5061 | "oauth";

5056```5062```

5057 5063 

5058Claude Code는 다음 네 가지 값 중 하나를 보고합니다:5064Claude Code는 다음 네 가지 값 중 하나를 보고합니다.

5059 5065 

5060| 값 | 사용 중인 키 |5066| 값 | 사용 중인 키 |

5061| - | - |5067| - | - |

5062| `ANTHROPIC_API_KEY` | `ANTHROPIC_API_KEY` 환경 변수의 키 |5068| `ANTHROPIC_API_KEY` | `ANTHROPIC_API_KEY` 환경 변수의 키 |

5063| `apiKeyHelper` | [`apiKeyHelper`](https://code.claude.com/docs/ko/settings-reference#apikeyhelper) 명령에서 반환된 키 |5069| `apiKeyHelper` | [`apiKeyHelper`](https://code.claude.com/docs/ko/settings-reference#apikeyhelper) 명령이 반환한 키 |

5064| `/login managed key` | [Claude Console 계정](https://code.claude.com/docs/ko/authentication.md#claude-console-authentication)으로 로그인할 때 Claude Code가 저장한 키 |5070| `/login managed key` | [Claude Console 계정](https://code.claude.com/docs/ko/authentication.md#claude-console-authentication)으로 로그인할 때 Claude Code가 저장한 키 |

5065| `none` | API 키 없음. 세션이 다른 방식으로 인증됩니다. 예를 들어 claude.ai 로그인, 베어러 토큰 또는 클라우드 제공자 |5071| `none` | API 키가 없습니다. 세션은 claude.ai 로그인, bearer 토큰, 클라우드 제공자 등 다른 방식으로 인증합니다 |

5066 5072 

5067Agent SDK v0.3.234 이상은 타입에서 이 네 가지 값을 나열합니다. 타입은 또한 `user`, `project`, `org`, `temporary` 및 `oauth`를 유지하므로 이전 코드는 여전히 컴파일되며, Claude Code는 이들을 보고하지 않습니다.5073Agent SDK v0.3.234 이상에서는 타입에 이 네 가지 값이 나열됩니다. 이전 코드가 계속 컴파일되도록 타입에는 `user`, `project`, `org`, `temporary`, `oauth`도 남아 있지만, Claude Code는 이 값들을 보고하지 않습니다.

5068 5074 

5069### `SdkBeta`5075### `SdkBeta`

5070 5076 

5071`betas` 옵션을 통해 활성화할 수 있는 사용 가능한 베타 기능입니다. [베타 헤더](https://platform.claude.com/docs/en/api/beta-headers)를 참조하세요.5077`betas` 옵션으로 활성화할 수 있는 베타 기능입니다. 자세한 내용은 [베타 헤더](https://platform.claude.com/docs/en/api/beta-headers)를 참조하세요.

5072 5078 

5073```typescript theme={null}5079```typescript theme={null}

5074type SdkBeta = "context-1m-2025-08-07";5080type SdkBeta = "context-1m-2025-08-07";


5076 5082 

5077> [!WARNING]5083> [!WARNING]

5078>5084>

5079> Claude API에서 `context-1m-2025-08-07` 베타는 Claude Sonnet 4.5 및 Claude Sonnet 4에 대해 폐기되었습니다. 두 모델 중 하나와 함께 이 값을 여전히 전달하면 표준 200K 토큰 컨텍스트 윈도우를 초과하는 요청이 오류를 반환하므로, `betas`에서 제거하세요. 1M 토큰 컨텍스트 윈도우로 세션을 실행하려면 `model`을 `claude-sonnet-5-5` 또는 `claude-opus-5-5`처럼 [기본적으로 1M 윈도우로 실행되는](https://code.claude.com/docs/ko/model-config.md#extended-context) 모델로 설정하세요. `[1m]` 변형을 통해서만 1M에 도달하는 모델의 경우, `claude-opus-4-6[1m]`처럼 모델 ID에 접미사를 추가하세요.5085> Claude API에서 `context-1m-2025-08-07` 베타는 Claude Sonnet 4.5와 Claude Sonnet 4에 대해 종료되었습니다. 두 모델 중 하나에 이 베타를 계속 전달하면 표준 200K 토큰 컨텍스트 윈도우를 초과하는 요청은 오류를 반환하므로, `betas`에서 제거해야 합니다. 1M 토큰 컨텍스트 윈도우로 세션을 실행하려면 `claude-sonnet-5-5` 또는 `claude-opus-5-5`처럼 [기본적으로 1M 윈도우로 실행되는](https://code.claude.com/docs/ko/model-config.md#extended-context) 모델로 `model`을 설정합니다. `[1m]` 변형을 통해서만 1M에 도달하는 모델의 경우 `claude-opus-4-6[1m]`처럼 모델 ID에 접미사를 추가합니다.

5080 5086 

5081### `SlashCommand`5087### `SlashCommand`

5082 5088 


5092};5098};

5093```5099```

5094 5100 

5095`builtin`은 명령이 Claude Code 자체이고 `/name`을 입력하면 실행될 때 행에서 `true`입니다. 사용자, 프로젝트, 플러그인 또는 MCP 서버에서 정의한 명령이나, 이들 중 하나가 [이름으로 대체](https://code.claude.com/docs/ko/skills.md#resolve-skills-that-share-a-name)하는 번들 명령의 경우 없습니다. Agent SDK v0.3.277 이상이 필요합니다.5101`builtin`은 해당 명령이 Claude Code 자체 명령이고 `/name`을 입력하면 그 명령이 실행되는 경우 해당 항목에서 `true`입니다. 사용자, 프로젝트, 플러그인 또는 MCP 서버가 정의한 명령, 그리고 이들 중 하나가 [이름으로 대체한](https://code.claude.com/docs/ko/skills.md#resolve-skills-that-share-a-name) 번들 명령에는 이 필드가 없습니다. Agent SDK v0.3.277 이상이 필요합니다.

5096 5102 

5097### `ModelInfo`5103### `ModelInfo`

5098 5104 


5114 5120 

5115| 필드 | 타입 | 설명 |5121| 필드 | 타입 | 설명 |

5116| :- | :- | :- |5122| :- | :- | :- |

5117| `value` | `string` | API 호출에서 전달할 모델 식별자 |5123| `value` | `string` | API 호출에 전달할 모델 식별자 |

5118| `resolvedModel` | `string \| undefined` | 이 항목의 `value`가 확인되는 모델 ID입니다. 예를 들어 `sonnet` 별칭 항목의 경우 `claude-sonnet-5-5`입니다. Claude Code v2.1.197 이상이 필요합니다. |5124| `resolvedModel` | `string \| undefined` | 이 항목의 `value`가 해석되는 모델 ID입니다. 예를 들어 `sonnet` 별칭 항목의 경우 `claude-sonnet-5-5`입니다. Claude Code v2.1.197 이상이 필요합니다. |

5119| `displayName` | `string` | 사람이 읽을 수 있는 표시 이름 |5125| `displayName` | `string` | 사람이 읽을 수 있는 표시 이름 |

5120| `description` | `string` | 모델의 기능에 대한 설명 |5126| `description` | `string` | 모델 기능에 대한 설명 |

5121| `supportsEffort` | `boolean \| undefined` | 이 모델이 effort 수준을 지원하는지 여부 |5127| `supportsEffort` | `boolean \| undefined` | 이 모델이 effort 수준을 지원하는지 여부 |

5122| `supportedEffortLevels` | `("low" \| "medium" \| "high" \| "xhigh" \| "max")[] \| undefined` | 이 모델이 허용하는 effort 수준 |5128| `supportedEffortLevels` | `("low" \| "medium" \| "high" \| "xhigh" \| "max")[] \| undefined` | 이 모델이 허용하는 effort 수준 |

5123| `supportsAdaptiveThinking` | `boolean \| undefined` | 이 모델이 Claude가 언제 그리고 얼마나 사고할지 결정하는 적응형 사고를 지원하는지 여부 |5129| `supportsAdaptiveThinking` | `boolean \| undefined` | 이 모델이 Claude가 언제, 얼마나 사고할지 결정하는 적응형 사고를 지원하는지 여부 |

5124| `supportsFastMode` | `boolean \| undefined` | 이 모델이 빠른 모드를 지원하는지 여부 |5130| `supportsFastMode` | `boolean \| undefined` | 이 모델이 빠른 모드를 지원하는지 여부 |

5125| `supportsAutoMode` | `boolean \| undefined` | 이 모델이 자동 모드를 지원하는지 여부 |5131| `supportsAutoMode` | `boolean \| undefined` | 이 모델이 자동 모드를 지원하는지 여부 |

5126 5132 


5138 5144 

5139| 필드 | 타입 | 설명 |5145| 필드 | 타입 | 설명 |

5140| :- | :- | :- |5146| :- | :- | :- |

5141| `name` | `string` | 에이전트 타입 식별자 (예: `"Explore"`, `"general-purpose"`) |5147| `name` | `string` | 에이전트 타입 식별자(예: `"Explore"`, `"general-purpose"`) |

5142| `description` | `string` | 이 에이전트를 사용할 시기에 대한 설명 |5148| `description` | `string` | 이 에이전트를 언제 사용해야 하는지에 대한 설명 |

5143| `model` | `string \| undefined` | 이 에이전트가 사용하는 모델입니다. 별칭 또는 모델 ID이거나, 부모의 모델을 상속하는 경우 `'inherit'`입니다. `undefined`일 때, Claude Code는 [서브에이전트 모델 순서](https://code.claude.com/docs/ko/sub-agents.md#choose-a-model)에서 모델을 선택합니다. |5149| `model` | `string \| undefined` | 이 에이전트가 사용하는 모델입니다. 별칭 또는 모델 ID이거나, 상위 에이전트의 모델을 사용하는 경우 `'inherit'`입니다. `undefined`이면 Claude Code가 [서브에이전트 모델 순서](https://code.claude.com/docs/ko/sub-agents.md#choose-a-model)에 따라 모델을 선택합니다 |

5144 5150 

5145### `McpServerProvenance`5151### `McpServerProvenance`

5146 5152 

5147`mcp__*` 도구를 제공하는 MCP 서버와 해당 서버의 정의가 어디에서 왔는지입니다. [`PreToolUse`](#pretoolusehookinput), `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` 및 `PermissionDenied` 훅 입력은 이를 `mcp_server`로 전달하고, [`CanUseTool`](#canusetool) 옵션은 이를 `mcpServer`로 전달합니다. 둘 다 MCP 서버에서 오지 않는 도구의 경우 이를 생략합니다.5153`mcp__*` 도구를 제공하는 MCP 서버와 해당 서버 정의의 출처입니다. [`PreToolUse`](#pretoolusehookinput), `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` 훅 입력은 이를 `mcp_server`로 전달하고, [`CanUseTool`](#canusetool) 옵션은 `mcpServer`로 전달합니다. 두 경우 모두 MCP 서버에서 오지 않은 도구에서는 이 값을 생략합니다.

5148 5154 

5149```typescript theme={null}5155```typescript theme={null}

5150type McpServerProvenance = {5156type McpServerProvenance = {


5155 5161 

5156| 필드 | 타입 | 설명 |5162| 필드 | 타입 | 설명 |

5157| :- | :- | :- |5163| :- | :- | :- |

5158| `name` | `string` | 서버가 등록된 이름이며, [`mcpServerStatus()`](#query-object)가 이에 대해 보고하는 동일한 값입니다. |5164| `name` | `string` | 서버가 등록된 이름으로, [`mcpServerStatus()`](#query-object)가 해당 서버에 대해 보고하는 값과 같습니다 |

5159| `source` | `string` | 서버의 정의가 어디에서 왔는지: `sdk`, `plugin` 또는 구성 범위 |5165| `source` | `string` | 서버 정의의 출처: `sdk`, `plugin` 또는 구성 범위 |

5160 5166 

5161`source`는 다음 값 중 하나를 취합니다. 집합이 열려 있으므로, 인식하지 못하는 값을 구성된 소스로 취급하고, `sdk`로 취급하지 마세요:5167`source`는 다음 값 중 하나를 가집니다. 값의 집합은 열려 있으므로, 인식하지 못하는 값은 절대 `sdk`로 취급하지 말고 구성된 출처로 취급해야 합니다.

5162 5168 

5163* **`sdk`**: 애플리케이션이 등록한 인프로세스 서버입니다. SDK 호스트 애플리케이션만 하나를 등록할 수 있으므로, 구성된 서버는 이름이 무엇이든 `sdk`를 보고하지 않습니다.5169* **`sdk`**: 애플리케이션이 등록한 인프로세스 서버입니다. SDK 호스트 애플리케이션만 이를 등록할 수 있으므로, 구성된 서버는 이름과 관계없이 절대 `sdk`를 보고하지 않습니다.

5164* **`plugin`**: [플러그인](https://code.claude.com/docs/ko/agent-sdk/plugins.md)이 제공하는 서버입니다. 해당 `name`은 [플러그인 제공 MCP 서버](https://code.claude.com/docs/ko/mcp.md#plugin-provided-mcp-servers) 아래에 설명된 범위가 지정된 `plugin:<plugin-name>:<server-name>` 형식입니다.5170* **`plugin`**: [플러그인](https://code.claude.com/docs/ko/agent-sdk/plugins.md)이 제공하는 서버입니다. 이 서버의 `name`은 [플러그인 제공 MCP 서버](https://code.claude.com/docs/ko/mcp.md#plugin-provided-mcp-servers)에서 설명하는 범위가 지정된 `plugin:<plugin-name>:<server-name>` 형식입니다.

5165* **구성 범위**: `user`, `project`, `local`, `dynamic`, `managed`, `enterprise`, `claudeai` 또는 `agent`. `.mcp.json` 서버는 `project`를 보고하고, [MCP 설치 범위](https://code.claude.com/docs/ko/mcp.md#mcp-installation-scopes)는 `local`, `project` 및 `user`를 정의합니다. 애플리케이션이 [`mcpServers` 옵션](#options)에서 전달하는 서버(인프로세스 SDK 서버 제외)는 `dynamic`을 보고합니다.5171* **구성 범위**: `user`, `project`, `local`, `dynamic`, `managed`, `enterprise`, `claudeai` 또는 `agent`입니다. `.mcp.json` 서버는 `project`를 보고하며, [MCP 설치 범위](https://code.claude.com/docs/ko/mcp.md#mcp-installation-scopes)에서 `local`, `project`, `user`를 정의합니다. 애플리케이션이 [`mcpServers` 옵션](#options)으로 전달한 서버는 인프로세스 SDK 서버를 제외하고 `dynamic`을 보고합니다.

5166 5172 

5167`name` 또는 `mcp__<server>__` 도구 이름 접두사가 아닌 `source`를 기반으로 신뢰 결정을 내리세요. `sdk` 이외의 모든 소스에 대해 `name`은 신뢰할 수 없는 텍스트입니다. 표시하기 전에 이스케이프하세요.5173신뢰 결정은 `name`이나 `mcp__<server>__` 도구 이름 접두사가 아닌 `source`를 기준으로 내려야 합니다. `sdk` 이외의 출처에서 `name`은 신뢰할 수 없는 텍스트이므로 표시하기 전에 이스케이프해야 합니다.

5168 5174 

5169`McpServerProvenance` 및 이를 전달하는 필드는 Agent SDK v0.3.274 이상이 필요합니다.5175`McpServerProvenance`와 이를 전달하는 필드에는 Agent SDK v0.3.274 이상이 필요합니다.

5170 5176 

5171### `McpServerStatus`5177### `McpServerStatus`

5172 5178 


5197};5203};

5198```5204```

5199 5205 

5200서버를 얼마나 신뢰할지 결정하려면 `source`를 사용하고, 서버가 해당 도구에 첨부한 UI 리소스를 찾으려면 각 `tools` 항목의 `_meta`를 사용하세요:5206서버를 얼마나 신뢰할지 결정하려면 `source`를 사용하고, 서버가 특정 도구에 첨부한 UI 리소스를 찾으려면 각 `tools` 항목의 `_meta`를 사용합니다.

5201 5207 

5202* **`source`**: 서버의 정의가 어디에서 왔는지를 나타내며, [`McpServerProvenance`](#mcpserverprovenance)의 `source`와 동일한 값을 가집니다. 다른 서버가 어떤 이름으로 등록되든 자체 인프로세스 서버만 `sdk`를 보고하므로, `name`이 아닌 `source`를 기반으로 신뢰 결정을 내리세요. `source` 값을 인식하지 못하는 경우, 해당 서버를 `source`가 `sdk`가 아닌 다른 서버와 동일하게 취급하세요. Agent SDK v0.3.274 이상이 필요합니다5208* **`source`**: 서버 정의의 출처로, [`McpServerProvenance`](#mcpserverprovenance)의 `source`와 같은 값을 가집니다. 다른 서버가 어떤 이름으로 등록되어 있든 자체 인프로세스 서버만 `sdk`를 보고하므로, 신뢰 결정은 `name`이 아닌 `source`를 기준으로 내려야 합니다. 인식하지 못하는 `source` 값이 있으면 해당 서버를 `source`가 `sdk`가 아닌 다른 서버와 동일하게 취급합니다. Agent SDK v0.3.274 이상이 필요합니다

5203* **`_meta`**: 서버가 도구에 대해 선언한 `_meta`의 `ui` 객체와 `ui/resourceUri` 문자열입니다. Claude Code는 다른 모든 `_meta` 키를 보류합니다. `ui/resourceUri`는 `ui.resourceUri`의 이전 최상위 표기입니다. 서버가 도구에 [MCP Apps UI 리소스](https://code.claude.com/docs/ko/mcp.md#reference-mcp-resources)를 첨부하면 `ui.resourceUri` 또는 `ui/resourceUri`에 리소스의 `ui://` URI가 담깁니다. [`readMcpResource()`](#query-object)로 해당 URI를 가져와 애플리케이션에서 리소스를 렌더링하세요. Agent SDK v0.3.280 이상이 필요합니다5209* **`_meta`**: 서버가 해당 도구에 대해 선언한 `_meta`의 `ui` 객체와 `ui/resourceUri` 문자열입니다. Claude Code는 그 외의 모든 `_meta` 키를 전달하지 않습니다. `ui/resourceUri`는 `ui.resourceUri`의 이전 최상위 표기입니다. 서버가 도구에 [MCP Apps UI 리소스](https://code.claude.com/docs/ko/mcp.md#reference-mcp-resources)를 첨부하면 `ui.resourceUri` 또는 `ui/resourceUri`에 해당 리소스의 `ui://` URI가 담깁니다. [`readMcpResource()`](#query-object)로 해당 URI를 가져와 애플리케이션에서 리소스를 렌더링합니다. Agent SDK v0.3.280 이상이 필요합니다

5204 5210 

5205Claude Code는 subtype이 `init`인 `system` 메시지의 [`capabilities`](#sdksystemmessage) 배열에 `mcp_tool_ui_meta_v1`이 나열될 때만 `_meta`를 전송합니다. `mcp_tool_ui_meta_v1`은 직접 켜는 것이 아닙니다.5211Claude Code는 subtype이 `init`인 `system` 메시지의 [`capabilities`](#sdksystemmessage) 배열에 `mcp_tool_ui_meta_v1`이 나열된 경우에만 `_meta`를 보냅니다. `mcp_tool_ui_meta_v1`은 사용자가 직접 켜는 것이 아닙니다.

5206 5212 

5207#### 도구의 `_meta.ui`에 `visibility`만 있는 경우5213#### 도구의 `_meta.ui`에 `visibility`만 있는 경우

5208 5214 

5209서버가 도구에 대해 `ui.resourceUri`를 선언했지만 애플리케이션이 받은 `_meta.ui`에 `visibility`만 있다면, 서버가 보낸 `ui` 객체가 Claude Code의 검사 중 하나를 통과하지 못한 것입니다. Claude Code는 `ui`와 `ui/resourceUri`를 별도로 검사하므로, 한 키가 실패해도 다른 키는 애플리케이션에 도달할 수 있습니다. 서버의 `tools/list` 응답에 있는 `_meta`를 각 키에 대한 검사와 비교하세요:5215서버가 도구에 대해 `ui.resourceUri`를 선언했지만 애플리케이션이 받은 `_meta.ui`에 `visibility`만 있다면, 서버가 보낸 `ui` 객체가 Claude Code의 검사 중 하나를 통과하지 못한 것입니다. 서버의 `tools/list` 응답에 있는 `_meta`를 각 키에 대한 검사와 비교해 보세요.

5210 5216 

5211* **`ui`**: 다음 세 가지 검사를 모두 통과하면 `resourceUri` 및 `visibility` 이외의 멤버를 포함하여 변경 없이 애플리케이션에 도달합니다:5217* **`ui`**: 다음 세 가지 검사를 모두 통과하면 `resourceUri`와 `visibility` 이외의 멤버를 포함해 변경 없이 애플리케이션에 전달됩니다.

5212 5218 

5213 * `resourceUri`가 없거나, `ui://`로 시작하는 문자열입니다5219 * `resourceUri`가 없거나, `ui://`로 시작하는 문자열입니다

5214 * `visibility`가 없거나, `"model"`과 `"app"`만 나열합니다5220 * `visibility`가 없거나, `"model"`과 `"app"`만 나열합니다

5215 * 전체 객체를 JSON으로 직렬화했을 때 최대 4,096자입니다5221 * 객체 전체를 JSON으로 직렬화했을 때 최대 4,096자입니다

5216 5222 

5217 검사 중 하나라도 실패하면, 애플리케이션은 기껏해야 서버가 나열한 `"model"` 및 `"app"` 항목으로 된 `visibility` 배열만을 유일한 멤버로 가진 `ui`를 받습니다.5223 검사 중 하나라도 실패하면 애플리케이션은 기껏해야 서버가 나열한 `"model"` 및 `"app"` 항목이 담긴 `visibility` 배열만을 유일한 멤버로 가진 `ui`를 받습니다.

5218* **`ui/resourceUri`**: `ui://`로 시작하고 최대 4,096자인 문자열이면 애플리케이션에 도달합니다. 그렇지 않으면 Claude Code가 이를 삭제합니다5224* **`ui/resourceUri`**: `ui://`로 시작하고 최대 4,096자인 문자열이면 애플리케이션에 전달됩니다. 그렇지 않으면 Claude Code가 이를 삭제합니다

5219 5225 

5220Claude Code에 전송할 `ui` 멤버와 `ui/resourceUri` 문자열이 하나도 남지 않으면, 해당 `tools` 항목에는 `_meta`가 전혀 없습니다.5226Claude Code가 보낼 `ui` 멤버도 `ui/resourceUri` 문자열도 남아 있지 않으면, 해당 `tools` 항목에는 `_meta`가 전혀 없습니다.

5221 5227 

5222### `McpServerStatusConfig`5228### `McpServerStatusConfig`

5223 5229 

5224`mcpServerStatus()`에서 보고한 MCP 서버의 구성입니다. 이는 모든 MCP 서버 전송 타입의 합집합입니다.5230`mcpServerStatus()`가 보고하는 MCP 서버의 구성입니다. 모든 MCP 서버 전송 타입의 유니온입니다.

5225 5231 

5226```typescript theme={null}5232```typescript theme={null}

5227type McpServerStatusConfig =5233type McpServerStatusConfig =


5232 | McpClaudeAIProxyServerConfig;5238 | McpClaudeAIProxyServerConfig;

5233```5239```

5234 5240 

5235각 전송 타입의 세부 정보는 [`McpServerConfig`](#mcpserverconfig)를 참조하세요.5241각 전송 타입에 대한 자세한 내용은 [`McpServerConfig`](#mcpserverconfig)를 참조하세요.

5236 5242 

5237### `AccountInfo`5243### `AccountInfo`

5238 5244 


5250 5256 

5251### `ModelUsage`5257### `ModelUsage`

5252 5258 

5253결과 메시지에서 반환된 모델별 사용 통계입니다. `costUSD` 값은 클라이언트 측 추정입니다. [비용 및 사용량 추적](https://code.claude.com/docs/ko/agent-sdk/cost-tracking.md)에서 청구 주의 사항을 참조하세요.5259결과 메시지에 반환되는 모델별 사용량 통계입니다. `costUSD` 값은 클라이언트 측 추정치입니다. 청구 관련 주의 사항은 [비용 및 사용량 추적](https://code.claude.com/docs/ko/agent-sdk/cost-tracking.md)을 참조하세요.

5254 5260 

5255```typescript theme={null}5261```typescript theme={null}

5256type ModelUsage = {5262type ModelUsage = {


5269};5275};

5270```5276```

5271 5277 

5272`thinkingTokens`는 이 모델이 생성한 사고 토큰을 계산합니다. `outputTokens`는 이미 이들을 포함하므로 둘을 함께 더하지 마세요. 필드는 이를 기록하는 Claude Code 버전에서 턴이 실행될 때까지 없으므로, 이전 버전에서 시작된 재개된 세션은 부분 개수를 보고합니다. `thinkingTokens`는 Agent SDK v0.3.257 이상이 필요합니다.5278`thinkingTokens`는 이 모델이 생성한 사고 토큰 수를 셉니다. `outputTokens`에 이미 포함되어 있으므로 두 값을 더하면 안 됩니다. 이 필드는 이를 기록하는 Claude Code 버전에서 턴이 실행될 때까지 존재하지 않으므로, 이전 버전에서 시작되어 재개된 세션은 부분적인 수를 보고합니다. `thinkingTokens`에는 Agent SDK v0.3.257 이상이 필요합니다.

5273 5279 

5274`canonicalModel` 및 `provider` 필드는 Claude Code v2.1.218 이상이 필요합니다. `canonicalModel`은 가격 조회가 사용하는 정규 모델 ID입니다. 예를 들어 해당 문자열이 제공자별 ID 또는 별칭일 때 항목을 키하는 원본 모델 문자열과 다를 수 있습니다.5280`canonicalModel` 및 `provider` 필드에는 Claude Code v2.1.218 이상이 필요합니다. `canonicalModel`은 가격 조회에 사용되는 정규 모델 ID이며, 예를 들어 항목의 키가 되는 원시 모델 문자열이 제공자별 ID나 별칭인 경우 해당 문자열과 다를 수 있습니다.

5275 5281 

5276`provider`는 모델을 제공한 API 백엔드의 이름을 지정합니다. 예를 들어 `firstParty`, `bedrock`, `vertex`, `foundry`, `anthropicAws`, `mantle` 또는 `gateway`.5282`provider`는 모델을 제공한 API 백엔드의 이름으로, `firstParty`, `bedrock`, `vertex`, `foundry`, `anthropicAws`, `mantle`, `gateway` 등이 있습니다.

5277 5283 

5278`costBasis`는 모델의 최신 요청에 가격을 책정한 가격 테이블의 이름을 지정합니다. 목록 가격의 경우 `list`, [`modelPricing`](https://code.claude.com/docs/ko/settings-reference#modelpricing) 테이블의 경우 `managed`, 또는 모델 ID와 일치하는 것이 없을 때 `unknown`. 필드는 Claude Code v2.1.246 이상이 필요합니다.5284`costBasis`는 모델의 최신 요청 가격을 책정한 가격표를 나타냅니다. 정가의 경우 `list`, [`modelPricing`](https://code.claude.com/docs/ko/settings-reference#modelpricing) 테이블의 경우 `managed`, 둘 다 모델 ID와 일치하지 않은 경우 `unknown`입니다. 이 필드에는 Claude Code v2.1.246 이상이 필요합니다.

5279 5285 

5280### `ConfigScope`5286### `ConfigScope`

5281 5287 


5285 5291 

5286### `NonNullableUsage`5292### `NonNullableUsage`

5287 5293 

5288`fallback_credit`을 제외한 모든 nullable 필드가 non-nullable로 만들어진 [`Usage`](#usage)의 버전입니다. `fallback_credit`은 여전히 `null`일 수 있습니다.5294여전히 `null`일 수 있는 `fallback_credit`을 제외하고 nullable 필드를 모두 non-nullable로 만든 [`Usage`](#usage) 버전입니다.

5289 5295 

5290```typescript theme={null}5296```typescript theme={null}

5291type NonNullableUsage = {5297type NonNullableUsage = {


5297 5303 

5298### `Usage`5304### `Usage`

5299 5305 

5300토큰 사용 통계입니다. 이는 `@anthropic-ai/sdk`의 `BetaUsage` 타입입니다.5306토큰 사용량 통계입니다. `@anthropic-ai/sdk`의 `BetaUsage` 타입입니다.

5301 5307 

5302```typescript theme={null}5308```typescript theme={null}

5303type Usage = {5309type Usage = {


5319};5325};

5320```5326```

5321 5327 

5322`BetaServerToolUsage`, `BetaIterationsUsage`, `BetaOutputTokensDetails` 및 `BetaFallbackCreditUsage`는 `@anthropic-ai/sdk`에서 정의됩니다.5328`BetaServerToolUsage`, `BetaIterationsUsage`, `BetaOutputTokensDetails`, `BetaFallbackCreditUsage`는 `@anthropic-ai/sdk`에 정의되어 있습니다.

5323 5329 

5324`output_tokens_details`는 청구된 출력을 카테고리별로 분류합니다. 현재 하나의 필드 `thinking_tokens: number`를 전달하며, 모델이 내부 추론으로 생성한 출력 토큰을 계산합니다. 여기에는 사고 블록 구분 기호가 포함됩니다. `output_tokens_details` 필드는 TypeScript SDK v0.3.228 이상이 필요하며, 이는 Claude Code v2.1.228을 번들로 제공합니다.5330`output_tokens_details`는 청구된 출력을 카테고리별로 분류합니다. 현재는 `thinking_tokens: number` 필드 하나만 있으며, 사고 블록 구분자를 포함해 모델이 내부 추론으로 생성한 출력 토큰 수를 셉니다. `output_tokens_details` 필드에는 Claude Code v2.1.228이 번들된 TypeScript SDK v0.3.228 이상이 필요합니다.

5325 5331 

5326* **청구**: 청구를 위해서가 아니라 관찰 가능성을 위해 분류를 읽으세요. `output_tokens`는 권위 있는 합계로 유지되며, `output_tokens - thinking_tokens`는 비추론 출력을 근사합니다.5332* **청구**: 이 분류는 청구가 아닌 관측 목적으로 읽어야 합니다. `output_tokens`가 여전히 권위 있는 합계이며, `output_tokens - thinking_tokens`는 추론이 아닌 출력의 근사치입니다.

5327* **개수가 포함하는 것**: 모델이 생성한 원본 추론이며, 응답 본문에서 반환된 사고 텍스트보다 길 수 있습니다. API는 해당 원본 텍스트를 다시 토큰화하여 계산하므로, 모델의 정확한 생성 개수와 몇 토큰 정도 다를 수 있습니다.5333* **집계 대상**: 모델이 생성한 원시 추론으로, 응답 본문에 반환되는 사고 텍스트보다 길 수 있습니다. API는 해당 원시 텍스트를 다시 토큰화하여 계산하므로, 모델의 정확한 생성 수와 몇 토큰 차이가 날 수 있습니다.

5328* **스트리밍**: 스트리밍된 어시스턴트 메시지에서 이 분류는 `output_tokens`처럼 `message_start` 자리 표시자이며 실제 개수를 전달하지 않으므로, [결과 메시지에서 출력 토큰 읽기](https://code.claude.com/docs/ko/agent-sdk/cost-tracking.md#read-output-tokens-from-the-result-message)에서 설명하는 대로 결과 메시지의 `usage`에서 읽으세요. 결과 메시지에서 모델 또는 제공자가 분류를 보고하지 않을 때 `thinking_tokens`는 `0`입니다.5334* **스트리밍**: 스트리밍된 어시스턴트 메시지에서 이 분류는 `output_tokens`와 마찬가지로 `message_start` 자리 표시자이며 실제 수를 담고 있지 않으므로, [결과 메시지에서 출력 토큰 읽기](https://code.claude.com/docs/ko/agent-sdk/cost-tracking.md#read-output-tokens-from-the-result-message)에서 설명하는 대로 결과 메시지의 `usage`에서 읽어야 합니다. 결과 메시지에서 모델이나 제공자가 분류를 보고하지 않으면 `thinking_tokens`는 `0`입니다.

5329* **`null` 경우**: `output_tokens_details` 자체는 Claude Code가 합성하는 어시스턴트 메시지(예: API 오류 메시지)에서 `null`입니다.5335* **`null`인 경우**: API 오류 메시지처럼 Claude Code가 합성한 어시스턴트 메시지에서는 `output_tokens_details` 자체가 `null`입니다.

5330 5336 

5331`Usage`가 `fallback_credit`을 포함하는지 여부는 설치된 `@anthropic-ai/sdk`에 따라 달라지며, 이 필드는 0.115.0에서 추가되었습니다.5337`Usage`에 `fallback_credit`이 포함되는지는 설치된 `@anthropic-ai/sdk`에 따라 다르며, 0.115.0에서 추가되었습니다.

5332 5338 

5333### `CallToolResult`5339### `CallToolResult`

5334 5340 

5335MCP 도구 결과 타입 (`@modelcontextprotocol/sdk/types.js`에서). `structuredContent`는 `content`와 함께 반환될 수 있는 JSON 객체이며, 이미지 블록을 포함합니다. [구조화된 데이터 반환](https://code.claude.com/docs/ko/agent-sdk/custom-tools.md#return-structured-data)을 참조하세요.5341MCP 도구 결과 타입입니다(`@modelcontextprotocol/sdk/types.js`에서 제공). `structuredContent`는 이미지 블록을 포함한 `content`와 함께 반환할 수 있는 JSON 객체입니다. [구조화된 데이터 반환](https://code.claude.com/docs/ko/agent-sdk/custom-tools.md#return-structured-data)을 참조하세요.

5336 5342 

5337```typescript theme={null}5343```typescript theme={null}

5338type CallToolResult = {5344type CallToolResult = {


5347 5353 

5348### `SDKMcpResourceLink`5354### `SDKMcpResourceLink`

5349 5355 

5350MCP 도구가 참조로 반환한 하나의 파일입니다. Claude Code는 도구의 결과에서 `resource_link` 블록에서 각 항목을 빌드하고 목록을 [`SDKUserMessage.tool_use_result`](#sdkusermessage)의 `resourceLinks`로 전달하거나, 호출이 백그라운드에서 완료되었을 때 [`SDKTaskNotificationMessage`](#sdktasknotificationmessage)의 `resource_links`로 전달합니다. Agent SDK v0.3.257 이상이 필요합니다.5356MCP 도구가 참조로 반환한 파일 하나입니다. Claude Code는 도구 결과의 `resource_link` 블록에서 각 항목을 만들고, 목록을 [`SDKUserMessage.tool_use_result`](#sdkusermessage)의 `resourceLinks`로 전달하거나, 호출이 백그라운드에서 완료된 경우 [`SDKTaskNotificationMessage`](#sdktasknotificationmessage)의 `resource_links`로 전달합니다. Agent SDK v0.3.257 이상이 필요합니다.

5351 5357 

5352```typescript theme={null}5358```typescript theme={null}

5353type SDKMcpResourceLink = {5359type SDKMcpResourceLink = {


5361};5367};

5362```5368```

5363 5369 

5364Claude Code는 `uri` 또는 `name`이 문자열이 아닌 블록을 삭제하고, 값이 나열된 타입이 아닌 선택적 필드를 생략합니다.5370Claude Code는 `uri` 또는 `name`이 문자열이 아닌 블록을 삭제하고, 값이 나열된 타입이 아닌 선택적 필드는 생략합니다.

5365 5371 

5366| 필드 | 타입 | 설명 |5372| 필드 | 타입 | 설명 |

5367| :- | :- | :- |5373| :- | :- | :- |

5368| `uri` | `string` | 리소스의 URI이며, 서버가 반환한 것입니다. |5374| `uri` | `string` | 서버가 반환한 리소스의 URI |

5369| `name` | `string` | 서버가 리소스에 부여한 이름 |5375| `name` | `string` | 서버가 리소스에 부여한 이름 |

5370| `title` | `string \| undefined` | 서버가 설정한 경우 표시 제목 |5376| `title` | `string \| undefined` | 서버가 설정한 경우 표시 제목 |

5371| `description` | `string \| undefined` | 서버가 설정한 경우 설명 |5377| `description` | `string \| undefined` | 서버가 설정한 경우 설명 |

5372| `mimeType` | `string \| undefined` | 서버가 설정한 경우 MIME 타입 |5378| `mimeType` | `string \| undefined` | 서버가 설정한 경우 MIME 타입 |

5373| `size` | `number \| undefined` | 서버가 설정한 경우 바이트 단위의 크기 |5379| `size` | `number \| undefined` | 서버가 설정한 경우 바이트 단위 크기 |

5374| `annotations` | `Record<string, unknown> \| undefined` | 서버가 설정한 경우 블록의 MCP 주석 객체 |5380| `annotations` | `Record<string, unknown> \| undefined` | 서버가 설정한 경우 블록의 MCP annotations 객체 |

5375 5381 

5376### `ThinkingConfig`5382### `ThinkingConfig`

5377 5383 


5381type ThinkingDisplay = "summarized" | "omitted";5387type ThinkingDisplay = "summarized" | "omitted";

5382 5388 

5383type ThinkingConfig =5389type ThinkingConfig =

5384 | { type: "adaptive"; display?: ThinkingDisplay } // 모델이 언제 그리고 얼마나 추론할지 결정합니다 (Opus 4.6+)5390 | { type: "adaptive"; display?: ThinkingDisplay } // The model determines when and how much to reason (Opus 4.6+)

5385 | { type: "enabled"; budgetTokens?: number; display?: ThinkingDisplay } // 고정 사고 토큰 예산5391 | { type: "enabled"; budgetTokens?: number; display?: ThinkingDisplay } // Fixed thinking token budget

5386 | { type: "disabled" }; // 확장 사고 없음5392 | { type: "disabled" }; // No extended thinking

5387```5393```

5388 5394 

5389선택적 `display` 필드는 사고 텍스트가 `"summarized"` 또는 `"omitted"`로 반환되는지 제어합니다. Claude Opus 4.7 이상에서 API 기본값은 `"omitted"`이므로, `thinking` 블록에서 사고 콘텐츠를 받으려면 `"summarized"`를 설정하세요. Claude Code는 Amazon Bedrock 및 Google Cloud의 Agent Platform 같은 일부 제공자에는 `display` 값을 전달하지 않습니다. 이러한 제공자에서 Opus 4.7 이상은 `display`를 `"summarized"`로 설정한 경우에도 빈 `thinking` 블록을 반환합니다.5395선택적 `display` 필드는 사고 텍스트를 `"summarized"`로 반환할지 `"omitted"`로 반환할지 제어합니다. Claude Opus 4.7 이상에서 API 기본값은 `"omitted"`이므로, `thinking` 블록에서 사고 내용을 받으려면 `"summarized"`로 설정합니다. Claude Code는 Amazon Bedrock이나 Google Cloud의 Agent Platform 같은 일부 제공자에는 `display` 값을 전달하지 않습니다. 이러한 제공자에서는 `display`를 `"summarized"`로 설정해도 Opus 4.7 이상이 빈 `thinking` 블록을 반환합니다.

5390 5396 

5391### `SpawnedProcess`5397### `SpawnedProcess`

5392 5398 

5393사용자 정의 프로세스 생성을 위한 인터페이스 (`spawnClaudeCodeProcess` 옵션과 함께 사용). `ChildProcess`는 이미 이 인터페이스를 만족합니다.5399사용자 지정 프로세스 생성을 위한 인터페이스입니다(`spawnClaudeCodeProcess` 옵션과 함께 사용). `ChildProcess`는 이미 이 인터페이스를 충족합니다.

5394 5400 

5395```typescript theme={null}5401```typescript theme={null}

5396interface SpawnedProcess {5402interface SpawnedProcess {


5419 5425 

5420### `SpawnOptions`5426### `SpawnOptions`

5421 5427 

5422사용자 정의 생성 함수에 전달된 옵션입니다.5428사용자 지정 spawn 함수에 전달되는 옵션입니다.

5423 5429 

5424```typescript theme={null}5430```typescript theme={null}

5425interface SpawnOptions {5431interface SpawnOptions {


5433 5439 

5434> [!NOTE]5440> [!NOTE]

5435>5441>

5436> `signal` 필드는 프로세스를 종료할 시기를 생성 함수에 알립니다. 이를 Node의 `spawn()`에 `signal` 옵션으로 전달하거나, VM 또는 컨테이너 종료 핸들러에 전달하세요.5442> `signal` 필드는 spawn 함수에 프로세스를 종료할 시점을 알려 줍니다. Node의 `spawn()`에 `signal` 옵션으로 전달하거나, VM 또는 컨테이너 종료 핸들러에 전달합니다.

5437>5443>

5438> 이 신호는 [`Options.abortController`](#options)가 중단되는 순간 즉시 발생하지 않습니다. SDK는 먼저 프로세스의 stdin을 닫고 CLI가 깔끔하게 종료될 수 있도록 약 2초를 기다린 후, 이 신호를 중단합니다. 호출자가 중단되는 순간 즉시 반응하려면, 생성 함수가 인클로징 스코프에서 참조할 수 있는 자신의 `Options.abortController.signal`을 수신하세요.5444> 이 시그널은 [`Options.abortController`](#options)가 중단되는 즉시 발생하지 않습니다. SDK는 먼저 프로세스의 stdin을 닫고 CLI가 정상적으로 종료될 수 있도록 약 2초간 기다린 다음 이 시그널을 중단합니다. 호출자가 중단하는 순간 바로 반응하려면 자체 `Options.abortController.signal`을 수신 대기합니다. spawn 함수는 이를 상위 스코프에서 참조할 수 있습니다.

5439 5445 

5440### `McpSetServersResult`5446### `McpSetServersResult`

5441 5447 


5449};5455};

5450```5456```

5451 5457 

5452`setMcpServers()`를 호출할 때, Claude Code는 다음 규칙을 적용합니다:5458`setMcpServers()`를 호출하면 Claude Code는 다음 규칙을 적용합니다.

5453 5459 

5454* **호출이 이름을 지정하지 않는 서버**: [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md) 외부에서 Claude Code는 이전 `setMcpServers()` 호출이 추가한 서버와 인프로세스 SDK 서버의 연결을 끊고 이를 `removed`에 나열합니다. 다른 서버는 계속 실행되며 `removed`에 나열되지 않습니다. 여기에는 [`mcpServers`](#options) 옵션의 stdio, HTTP 및 SSE 서버, 설정 파일의 서버, 플러그인 제공 서버가 포함됩니다.5460* **호출에서 지정하지 않은 서버**: [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md) 외부에서 Claude Code는 이전 `setMcpServers()` 호출이 추가한 서버와 인프로세스 SDK 서버의 연결을 끊고 `removed`에 나열합니다. 그 밖의 서버는 계속 실행되며 `removed`에 나열되지 않습니다. 여기에는 [`mcpServers`](#options) 옵션의 stdio, HTTP, SSE 서버, 설정 파일의 서버, 플러그인 제공 서버가 포함됩니다.

5455* **이전 `setMcpServers()` 호출이 추가한 stdio, HTTP 및 SSE 서버**: 클라우드 세션 외부에서, 동일한 구성으로 다시 이름을 지정한 서버는 연결과 도구를 유지합니다. 이 서버는 `added`와 `removed` 어디에도 나타나지 않습니다. 변경된 구성을 전달하면 Claude Code는 해당 구성을 사용하여 서버를 다시 연결하고 `removed`가 아닌 `added`에 나열합니다.5461* **이전 `setMcpServers()` 호출이 추가한 stdio, HTTP, SSE 서버**: 클라우드 세션 외부에서 동일한 구성으로 다시 지정한 서버는 연결과 도구를 유지합니다. 이 서버는 `added`에도 `removed`에도 나타나지 않습니다. 변경된 구성을 전달하면 Claude Code는 해당 구성으로 서버를 다시 연결하고 `removed`가 아닌 `added`에 나열합니다.

5456* **이전 호출이 추가하지 않았는데 호출이 이름을 지정하는 stdio, HTTP 및 SSE 서버**: 클라우드 세션 외부에서 Claude Code는 서버를 추가하고 `added`에 나열하며, 서버를 거부하는 경우에는 `errors`에 나열합니다.5462* **이전 호출이 추가하지 않았고 이번 호출에서 지정한 stdio, HTTP, SSE 서버**: 클라우드 세션 외부에서 Claude Code는 서버를 추가하고 `added`에 나열하며, 서버를 거부하는 경우 `errors`에 나열합니다.

5457* **호출이 이름을 지정하는 인프로세스 SDK 서버**: `mcpServers` 또는 이전 호출을 통해 이미 등록된 서버는 실행 중인 인스턴스와 타임아웃을 유지합니다. 해당 서버에 대해 [`tools` 정책 목록](#mcpsdkserverconfigwithinstance)을 전달하면, 빈 목록이라도 정책이 교체됩니다. 그렇지 않으면 정책이 그대로 유지됩니다. 클라우드 세션 외부에서 새 인스턴스를 실행하려면 한 호출에서 서버를 제외한 다음 호출에서 이름을 지정하세요.5463* **호출에서 지정한 인프로세스 SDK 서버**: `mcpServers` 또는 이전 호출을 통해 이미 등록된 서버는 실행 중인 인스턴스와 타임아웃을 유지합니다. 해당 서버에 대해 [`tools` 정책 목록](#mcpsdkserverconfigwithinstance)을 전달하면, 빈 목록이라도 정책이 대체되고, 그렇지 않으면 정책이 유지됩니다. 클라우드 세션 외부에서 새 인스턴스를 실행하려면 한 호출에서 서버를 생략한 다음 다음 호출에서 지정합니다.

5458* **CLI가 시작 시 시작한 기본 제공 서버**: 호출이 하나를 이름으로 지정하면, Claude Code는 해당 항목을 삭제하고 `errors`에서 보고합니다.5464* **CLI가 시작 시 시작한 기본 제공 서버**: 호출에서 이 서버를 지정하면 Claude Code는 해당 항목을 삭제하고 `errors`에 보고합니다.

5459* **`.mcp.json`과 같은 MCP 설치 범위의 서버와 이름이 같은 stdio, HTTP 또는 SSE 서버**: 해당 이름에 대해 세션은 [설치 범위 서버](https://code.claude.com/docs/ko/mcp.md#mcp-installation-scopes)의 도구 대신 사용자의 서버 도구를 사용합니다. Claude Code v2.1.305 이전에는 앱이 [플러그인을 다시 로드](#query-object)할 때 Claude Code가 사용자의 서버 연결을 끊고 설치 범위 서버를 연결할 수 있었습니다.5465* **`.mcp.json` 같은 MCP 설치 범위의 서버와 이름이 같은 stdio, HTTP 또는 SSE 서버**: 해당 이름으로 세션은 [설치 범위 서버](https://code.claude.com/docs/ko/mcp.md#mcp-installation-scopes)가 아닌 사용자 서버의 도구를 사용합니다. Claude Code v2.1.305 이전에는 앱이 [플러그인을 다시 로드](#query-object)할 때 Claude Code가 사용자 서버의 연결을 끊고 설치 범위 서버를 연결할 수 있었습니다.

5460 5466 

5461프로미스는 새로 추가된 stdio, HTTP 및 SSE 서버가 연결되거나 실패한 후 해결되므로, 연결된 서버의 도구는 다음 턴에서 사용 가능합니다.5467프로미스는 새로 추가된 stdio, HTTP, SSE 서버가 연결되거나 실패한 후에 resolve되므로, 연결된 서버의 도구는 다음 턴에서 사용할 수 있습니다.

5462 5468 

5463`added`는 Claude Code가 추가하거나 교체한 서버를 나열하며, 연결 여부와 관계없이 나열합니다. 연결 실패한 서버는 `added`와 `errors` 모두에 나타나며, `errors` 아래에 실패 텍스트가 있고 [`mcpServerStatus()`](#methods)에서 `failed` 행이 있습니다. Claude Code v2.1.257 이전에는 연결 시도가 예외를 던진 서버는 `errors` 아래에만 보고되었습니다.5469`added`는 연결 여부와 관계없이 Claude Code가 추가하거나 대체한 서버를 나열합니다. 연결에 실패한 서버는 `added`와 `errors` 모두에 나타나며, `errors`에는 실패 텍스트가, [`mcpServerStatus()`](#methods)에는 `failed` 항목이 표시됩니다. Claude Code v2.1.257 이전에는 연결 시도에서 예외가 발생한 서버가 `errors`에만 보고되었습니다.

5464 5470 

5465### `RewindFilesResult`5471### `RewindFilesResult`

5466 5472 


5477};5483};

5478```5484```

5479 5485 

5480`skippedLinks`는 되감기가 링크 안전을 위해 복원하거나 삭제하기를 거부한 추적된 경로의 개수를 계산합니다. 추적된 경로의 심볼릭 링크, 하드 링크 또는 기타 일반 파일이 아닌 파일, 체크포인트가 생성되었을 때 가리키던 위치로 더 이상 확인되지 않는 부모 디렉토리, 또는 안전하게 읽을 수 없는 백업입니다. 필드는 Claude Code v2.1.216 이상이 필요합니다. `rewindFiles(userMessageId, { dryRun: true })`를 사용한 미리보기 호출은 이를 설정하지 않습니다.5486`skippedLinks`는 링크 안전성 때문에 되감기에서 복원이나 삭제를 거부한 추적 경로의 수를 셉니다. 추적 경로에 있는 심볼릭 링크, 하드 링크 또는 기타 일반 파일이 아닌 파일, 체크포인트를 생성할 때 가리키던 위치로 더 이상 해석되지 않는 상위 디렉터리, 또는 안전하게 읽을 수 없는 백업이 이에 해당합니다. 이 필드에는 Claude Code v2.1.216 이상이 필요합니다. `rewindFiles(userMessageId, { dryRun: true })`를 사용한 미리 보기 호출에서는 절대 설정되지 않습니다.

5481 5487 

5482### `SDKStatusMessage`5488### `SDKStatusMessage`

5483 5489 

5484상태 업데이트 메시지 (예: 압축).5490상태 업데이트 메시지입니다(예: 압축 중).

5485 5491 

5486```typescript theme={null}5492```typescript theme={null}

5487type SDKStatusMessage = {5493type SDKStatusMessage = {


5496 5502 

5497### `SDKTaskNotificationMessage`5503### `SDKTaskNotificationMessage`

5498 5504 

5499백그라운드 작업이 완료, 실패 또는 중지될 때의 알림입니다. 백그라운드 작업에는 `run_in_background` Bash 명령, [Monitor](#monitor) 감시 및 백그라운드 서브에이전트가 포함됩니다. `run_id` 및 `ambient` 필드는 이를 정의하고 버전 요구 사항을 설명하는 [`SDKTaskStartedMessage`](#sdktaskstartedmessage)를 참조하세요.5505백그라운드 작업이 완료되거나, 실패하거나, 중지될 때의 알림입니다. 백그라운드 작업에는 `run_in_background` Bash 명령, [Monitor](#monitor) 감시, 백그라운드 서브에이전트가 포함됩니다. `run_id` 및 `ambient` 필드에 대해서는 해당 필드와 버전 요구 사항을 정의하는 [`SDKTaskStartedMessage`](#sdktaskstartedmessage)를 참조하세요.

5500 5506 

5501```typescript theme={null}5507```typescript theme={null}

5502type SDKTaskNotificationMessage = {5508type SDKTaskNotificationMessage = {


5521};5527};

5522```5528```

5523 5529 

5524`reason`은 작업이 자체 완료, 실패 또는 중지가 아닌 다른 원인으로 종료될 때 설정되며, Agent SDK v0.3.273 이상이 필요합니다. Claude Code는 claude.ai를 통해 연결되는 세션에서만 이를 설정합니다. 자체 호스팅 러너의 세션을 포함한 클라우드 세션과 Remote Control 세션이 해당됩니다. 로컬 `query()` 호출은 이를 설정하지 않습니다. 유일한 값인 `worker_restart`는 작업을 실행하던 Claude Code 프로세스가 다시 시작되었음을 의미합니다. 알림은 상태 `"stopped"`를 전달하므로, 해당 작업을 완료나 실패로 취급하지 마세요.5530`reason`은 작업이 자체 완료, 실패 또는 중지 이외의 원인으로 종료될 때 설정되며, Agent SDK v0.3.273 이상이 필요합니다. Claude Code는 claude.ai를 통해 연결되는 세션, 즉 자체 호스팅 러너의 세션을 포함한 클라우드 세션과 Remote Control 세션에서만 이 값을 설정합니다. 로컬 `query()` 호출에서는 절대 설정되지 않습니다. 유일한 값인 `worker_restart`는 작업을 실행하던 Claude Code 프로세스가 재시작되었음을 의미합니다. 알림의 상태는 `"stopped"`이므로, 해당 작업은 완료도 실패도 아닌 것으로 취급해야 합니다.

5525 5531 

5526Claude Code가 [긴 MCP 도구 호출을 백그라운드로 이동](https://code.claude.com/docs/ko/mcp.md#automatic-backgrounding-of-long-tool-calls)할 때, 해당 호출에 대한 `tool_result` 블록은 자리 표시자만 보유하고 호출의 실제 결과는 이 알림에서 도착합니다. `tool_use_id`를 사용하여 알림을 호출과 일치시킵니다. `completed` 알림에서 `resource_links`는 도구가 [`SDKMcpResourceLink`](#sdkmcpresourcelink) 항목으로 참조로 반환한 파일을 나열하며, [`tool_use_result.resourceLinks`](#sdkusermessage)와 동일한 50개 링크 및 64 KiB 제한이 있습니다. Claude Code는 결과에 링크가 없을 때 `resource_links`를 생략하고 MCP 도구 호출이 아닌 작업에 대한 알림에서 생략합니다. `resource_links`는 Agent SDK v0.3.257 이상이 필요합니다.5532Claude Code가 [오래 걸리는 MCP 도구 호출을 백그라운드로 이동](https://code.claude.com/docs/ko/mcp.md#automatic-backgrounding-of-long-tool-calls)하면, 해당 호출의 `tool_result` 블록에는 자리 표시자만 담기고 호출의 실제 결과는 이 알림으로 도착합니다. `tool_use_id`로 알림을 호출과 연결합니다. `completed` 알림에서 `resource_links`는 도구가 참조로 반환한 파일을 [`SDKMcpResourceLink`](#sdkmcpresourcelink) 항목으로 나열하며, [`tool_use_result.resourceLinks`](#sdkusermessage)와 동일한 50개 링크 및 64 KiB 제한이 적용됩니다. 결과에 링크가 없거나 MCP 도구 호출이 아닌 작업에 대한 알림에서는 Claude Code가 `resource_links`를 생략합니다. `resource_links`에는 Agent SDK v0.3.257 이상이 필요합니다.

5527 5533 

5528Claude Code는 모델에 전송하는 모든 작업 알림 앞에 공지를 추가합니다. 단, [`scheduled-trigger` 서브종류](#task-notification-subkinds)로 스탬프된 전달은 예외이며, 이들은 대신 할당된 작업 프레이밍을 전달합니다. 공지는 사람의 입력이 발생하지 않았음을 명시하므로, 모델은 알림을 사용자 지시나 승인으로 취급하지 않습니다.5534Claude Code는 모델에 보내는 모든 작업 알림 앞에 안내문을 추가합니다. 단, [`scheduled-trigger` subkind](#task-notification-subkinds)가 지정된 전달은 예외이며, 이 경우 대신 할당된 작업이라는 프레이밍이 담깁니다. 안내문은 사람의 입력이 없었음을 명시하므로, 모델은 알림을 사용자 지시나 승인으로 취급하지 않습니다.

5529 5535 

5530작업 알림 턴을 감지하려면, 공지 텍스트와 일치시키는 대신 [`SDKUserMessage`](#sdkusermessage) 또는 [`SDKResultMessage`](#sdkresultmessage)의 `origin.kind === "task-notification"`을 확인하세요. 무엇이 이를 발생시켰는지 알아야 하는 경우 동일한 필드에서 `subkind`를 읽으세요. v2.1.205 이전에 Claude Code는 세션이 유휴 상태일 때 도착한 알림에서 공지를 생략했습니다.5536작업 알림 턴을 감지하려면 안내문 텍스트를 매칭하는 대신 [`SDKUserMessage`](#sdkusermessage) 또는 [`SDKResultMessage`](#sdkresultmessage)에서 `origin.kind === "task-notification"`을 확인합니다. 무엇이 알림을 발생시켰는지 알아야 하는 경우 같은 필드에서 `subkind`를 읽습니다. v2.1.205 이전에는 세션이 유휴 상태일 때 도착한 알림에 Claude Code가 안내문을 추가하지 않았습니다.

5531 5537 

5532### `SDKToolUseSummaryMessage`5538### `SDKToolUseSummaryMessage`

5533 5539 

5534대화에서의 도구 사용 요약입니다.5540대화의 도구 사용 요약입니다.

5535 5541 

5536```typescript theme={null}5542```typescript theme={null}

5537type SDKToolUseSummaryMessage = {5543type SDKToolUseSummaryMessage = {


5545 5551 

5546### `SDKHookStartedMessage`5552### `SDKHookStartedMessage`

5547 5553 

5548훅이 실행을 시작할 때 내보내집니다.5554훅 실행이 시작될 때 발생합니다.

5555 

5556Claude Code는 세션 시작 중 `SessionStart` 또는 `Setup` 훅이 아직 실행 중인 동안을 포함해, 이 메시지와 [`SDKHookProgressMessage`](#sdkhookprogressmessage), [`SDKHookResponseMessage`](#sdkhookresponsemessage)를 메시지 스트림에 즉시 전달합니다. Claude Code v2.1.169부터 v2.1.203까지는 `SessionStart` 또는 `Setup` 훅이 완료된 후 이 메시지들을 한 번에 전달했으며, v2.1.204에서 실시간 전달이 복원되었습니다.

5549 5557 

5550Claude Code는 이 메시지, [`SDKHookProgressMessage`](#sdkhookprogressmessage) 및 [`SDKHookResponseMessage`](#sdkhookresponsemessage)를 메시지 스트림에 즉시 전달합니다. 여기에는 `SessionStart` 또는 `Setup` 훅이 세션 시작 중에 여전히 실행 중인 동안도 포함됩니다. Claude Code v2.1.169부터 v2.1.203까지는 `SessionStart` 또는 `Setup` 훅이 완료된 후 이러한 메시지를 한 배치로 전달했습니다. v2.1.204는 라이브 전달을 복원했습니다.5558[`startup()`](#startup)으로 세션을 시작하는 경우, `.query()`를 호출하고 그 결과를 반복하면 이러한 메시지가 전달됩니다.

5551 5559 

5552```typescript theme={null}5560```typescript theme={null}

5553type SDKHookStartedMessage = {5561type SDKHookStartedMessage = {


5563 5571 

5564### `SDKHookProgressMessage`5572### `SDKHookProgressMessage`

5565 5573 

5566훅이 실행 중일 때 stdout/stderr 출력과 함께 내보내집니다.5574훅이 실행되는 동안 stdout/stderr 출력과 함께 발생합니다.

5567 5575 

5568```typescript theme={null}5576```typescript theme={null}

5569type SDKHookProgressMessage = {5577type SDKHookProgressMessage = {


5582 5590 

5583### `SDKHookResponseMessage`5591### `SDKHookResponseMessage`

5584 5592 

5585훅이 실행을 완료할 때 내보내집니다.5593훅 실행이 완료될 때 발생합니다.

5586 5594 

5587```typescript theme={null}5595```typescript theme={null}

5588type SDKHookResponseMessage = {5596type SDKHookResponseMessage = {


5603 5611 

5604### `SDKToolProgressMessage`5612### `SDKToolProgressMessage`

5605 5613 

5606도구가 실행 중일 때 진행 상황을 나타내기 위해 주기적으로 내보내집니다.5614도구가 실행되는 동안 진행 상황을 나타내기 위해 주기적으로 발생합니다.

5607 5615 

5608```typescript theme={null}5616```typescript theme={null}

5609type SDKToolProgressMessage = {5617type SDKToolProgressMessage = {


5628};5636};

5629```5637```

5630 5638 

5631도구 호출이 주 대화에서 실행되는 동안, Claude Code는 `heartbeat: true`를 사용하여 30초마다 `tool_progress` 메시지를 내보냅니다. 각 하트비트는 도구 이름과 경과 초를 전달하므로, 장시간 실행되는 호출을 정지된 세션과 구별할 수 있습니다. Claude Code는 서브에이전트 내부의 도구 호출에 대해 하트비트를 내보내지 않습니다. `heartbeat` 필드는 Agent SDK v0.3.214 이상이 필요합니다. v2.1.257 이전에 Claude Code는 포그라운드 Agent 도구 호출에 대해서도 하트비트를 내보내지 않았습니다.5639메인 대화에서 도구 호출이 실행되는 동안 Claude Code는 30초마다 `heartbeat: true`가 포함된 `tool_progress` 메시지를 내보냅니다. 각 하트비트에는 도구 이름과 경과 시간(초)이 담기므로, 오래 실행되는 호출과 멈춘 세션을 구분할 수 있습니다. Claude Code는 서브에이전트 내부의 도구 호출에 대해서는 하트비트를 내보내지 않습니다. `heartbeat` 필드에는 Agent SDK v0.3.214 이상이 필요합니다. v2.1.257 이전에는 Claude Code가 포그라운드 Agent 도구 호출에 대해서도 하트비트를 내보내지 않았습니다.

5632 5640 

5633하트비트가 아닌 Agent 도구에 대한 `tool_progress` 메시지에서 `subagent_type`은 실행 중인 서브에이전트 타입의 이름을 지정합니다. 예를 들어 `general-purpose`. `subagent_retry`는 해당 서브에이전트가 API 오류 백오프(예: 속도 제한 또는 과부하)를 기다리는 동안 나타나며, 재시도 시도당 하나의 메시지가 있습니다. 두 필드 모두 Agent SDK v0.3.214 이상이 필요합니다.5641하트비트가 아닌 Agent 도구의 `tool_progress` 메시지에서 `subagent_type`은 `general-purpose`처럼 실행 중인 서브에이전트 타입을 나타냅니다. `subagent_retry`는 해당 서브에이전트가 속도 제한이나 과부하 같은 API 오류 백오프를 기다리는 동안 존재하며, 재시도 시도마다 메시지가 하나씩 발생합니다. 두 필드 모두 Agent SDK v0.3.214 이상이 필요합니다.

5634 5642 

5635`subagent_retry`에서 재시도 표시기를 렌더링하려면:5643`subagent_retry`로 재시도 표시기를 렌더링하려면 다음을 따릅니다.

5636 5644 

5637* `parent_tool_use_id`로 표시기를 추적합니다. 이는 서브에이전트당 고유합니다. `tool_use_id`는 하나의 어시스턴트 턴에서 병렬 서브에이전트에 의해 공유되므로, 이를 통해 추적하면 한 서브에이전트의 업데이트가 다른 서브에이전트의 표시기를 지울 수 있습니다.5645* 서브에이전트마다 고유한 `parent_tool_use_id`로 표시기를 추적합니다. `tool_use_id`는 한 어시스턴트 턴에서 나온 병렬 서브에이전트들이 공유하므로, 이를 기준으로 추적하면 한 서브에이전트의 업데이트가 다른 서브에이전트의 표시기를 지울 수 있습니다.

5638* 동일한 `parent_tool_use_id`에 대한 나중의 `tool_progress`가 `subagent_retry` 또는 `heartbeat: true` 없이 도착하거나 도구의 결과 메시지가 도착할 때 표시기를 지웁니다. `heartbeat: true`가 있는 프레임은 생동성만 보고하므로, 하나가 도착할 때 표시기를 유지합니다. `attempt`는 지속적인 재시도 아래에서 `max_retries`를 초과할 수 있으므로, 카운터에서 지우기를 파생하지 마세요.5646* 같은 `parent_tool_use_id`에 대해 `subagent_retry`도 `heartbeat: true`도 없는 이후의 `tool_progress`가 도착하거나, 도구의 결과 메시지가 도착하면 표시기를 지웁니다. `heartbeat: true`가 있는 프레임은 활성 상태만 보고하므로, 이러한 프레임이 도착해도 표시기를 유지합니다. 지속적인 재시도에서는 `attempt`가 `max_retries`를 초과할 수 있으므로, 카운터를 기준으로 지우기를 결정하면 안 됩니다.

5639* `error_category`를 자신의 메시지 텍스트를 선택하기 위한 토큰으로 취급하고, 표시 텍스트로 취급하지 마세요. 값은 `rate_limit`, `overloaded`, `authentication_failed`, `server_error`, `cloud_credential_error` 및 `unknown`입니다. 이후 릴리스에서 값이 추가될 수 있으므로, 인식하지 못하는 값은 `unknown`을 처리하는 방식으로 처리하세요.5647* `error_category`는 표시 텍스트가 아니라 자체 메시지 텍스트를 선택하기 위한 토큰으로 취급합니다. 값은 `rate_limit`, `overloaded`, `authentication_failed`, `server_error`, `cloud_credential_error`, `unknown`입니다. 이후 릴리스에서 값이 추가될 수 있으므로, 인식하지 못하는 값은 `unknown`과 같은 방식으로 처리합니다.

5640 5648 

5641### `SDKAuthStatusMessage`5649### `SDKAuthStatusMessage`

5642 5650 

5643인증 흐름 중에 내보내집니다.5651인증 흐름 중에 발생합니다.

5644 5652 

5645```typescript theme={null}5653```typescript theme={null}

5646type SDKAuthStatusMessage = {5654type SDKAuthStatusMessage = {


5655 5663 

5656### `SDKTaskStartedMessage`5664### `SDKTaskStartedMessage`

5657 5665 

5658작업이 시작될 때 내보내집니다. `task_type` 필드는 Bash 명령 및 [Monitor](#monitor) 감시의 경우 `"local_bash"`, 서브에이전트의 경우 `"local_agent"` 또는 `"remote_agent"`입니다.5666작업이 시작될 때 발생합니다. `task_type` 필드는 Bash 명령과 [Monitor](#monitor) 감시의 경우 `"local_bash"`, 서브에이전트의 경우 `"local_agent"`, 또는 `"remote_agent"`입니다.

5659 5667 

5660```typescript theme={null}5668```typescript theme={null}

5661type SDKTaskStartedMessage = {5669type SDKTaskStartedMessage = {


5675};5683};

5676```5684```

5677 5685 

5678`run_id`는 작업의 한 번의 실행을 식별합니다. [Claude가 재개하는 서브에이전트](https://code.claude.com/docs/ko/agent-sdk/subagents.md#resume-subagents)처럼 작업이 동일한 `task_id`로 다시 실행되면, 새 실행은 새 `run_id`를 받습니다. 필드는 Agent SDK v0.3.292 이상이 필요합니다. 이를 사용하여 한 작업의 실행들을 구분하세요:5686`run_id`는 작업의 한 번의 실행을 식별합니다. [Claude가 재개한 서브에이전트](https://code.claude.com/docs/ko/agent-sdk/subagents.md#resume-subagents)처럼 작업이 같은 `task_id`로 다시 실행되면, 새 실행은 새 `run_id`를 받습니다. 이 필드에는 Agent SDK v0.3.292 이상이 필요합니다. 이를 사용해 한 작업의 실행들을 구분합니다.

5679 5687 

5680* **메시지를 실행과 일치시키기**: 한 실행의 `task_started`, [`task_progress`](#sdktaskprogressmessage), [`task_updated`](#sdktaskupdatedmessage) 및 [`task_notification`](#sdktasknotificationmessage) 메시지는 동일한 `run_id`를 전달합니다. 각 [`SDKBackgroundTasksChangedMessage`](#sdkbackgroundtaskschangedmessage)에 있는 해당 실행의 항목도 이를 전달하며, 해당 실행의 알림을 전달하는 사용자 메시지의 origin에 있는 [`runId`](#task-notification-subkinds)도 마찬가지입니다.5688* **메시지를 실행과 연결**: 한 실행의 `task_started`, [`task_progress`](#sdktaskprogressmessage), [`task_updated`](#sdktaskupdatedmessage), [`task_notification`](#sdktasknotificationmessage) 메시지는 같은 `run_id`를 가집니다. 각 [`SDKBackgroundTasksChangedMessage`](#sdkbackgroundtaskschangedmessage)에 있는 해당 실행의 항목에도 이 값이 담기며, 실행의 알림을 전달하는 사용자 메시지의 origin에 있는 [`runId`](#task-notification-subkinds)에도 담깁니다.

5681* **늦게 도착한 메시지 감지하기**: 일반 문자열로 비교하면 한 작업의 실행 ID는 실행이 시작된 순서대로 정렬되므로, `run_id`가 표시 중인 실행보다 앞에 정렬되는 메시지는 이전 실행에서 온 것입니다. 이 비교 외에는 값을 불투명한 것으로 취급하세요.5689* **늦게 도착한 메시지 감지**: 일반 문자열로 비교하면 한 작업의 실행 ID는 실행이 시작된 순서대로 정렬되므로, `run_id`가 현재 표시 중인 실행보다 앞에 정렬되는 메시지는 이전 실행에서 온 것입니다. 이 비교 외에는 값을 불투명한 것으로 취급합니다.

5682* **`task_id`로 대체하기**: 이전 프로세스가 시작한 작업을 닫기 위해 재개된 세션이 내보내는 `task_notification`처럼 메시지에 `run_id`가 없을 때는 `task_id`로 귀속시키세요.5690* **`task_id`로 대체**: 이전 프로세스가 시작한 작업을 닫기 위해 재개된 세션이 내보내는 `task_notification`처럼 메시지에 `run_id`가 없는 경우, `task_id`로 귀속시킵니다.

5683 5691 

5684예를 들어, 식별 필드만 남기고 줄인 다음 세 메시지는 Claude가 한 번 재개한 백그라운드 서브에이전트에서 온 것입니다. 두 `task_started` 메시지는 `task_id`를 공유하며, 첫 번째 실행을 종료한 알림은 첫 번째 실행의 ID를 전달합니다:5692예를 들어, 식별 필드만 남긴 다음 세 메시지는 Claude가 한 번 재개한 백그라운드 서브에이전트에서 나온 것입니다. 두 `task_started` 메시지는 `task_id`를 공유하며, 첫 번째 실행을 종료한 알림은 첫 번째 실행의 ID를 가집니다.

5685 5693 

5686```json theme={null}5694```json theme={null}

5687{"subtype": "task_started", "task_id": "a5c2e8f41b09d7a36", "run_id": "0mubbs7i8-6f0c2d41"}5695{"subtype": "task_started", "task_id": "a5c2e8f41b09d7a36", "run_id": "0mubbs7i8-6f0c2d41"}


5689{"subtype": "task_started", "task_id": "a5c2e8f41b09d7a36", "run_id": "0mubc18m1-b7719e05"}5697{"subtype": "task_started", "task_id": "a5c2e8f41b09d7a36", "run_id": "0mubc18m1-b7719e05"}

5690```5698```

5691 5699 

5692`ambient`는 세션의 작업의 일부가 아닌 작업(예: Claude Code가 자신의 작업을 위해 실행하는 작업)에 대해 `true`입니다. 라이브 업데이트 감시자도 ambient이며, 여기에는 사용자가 요청한 감시자가 포함됩니다. ambient 작업을 활동 표시기에서 제외하세요. 필드는 Agent SDK v0.3.247 이상이 필요합니다.5700`ambient`는 Claude Code가 자체 운영을 위해 실행하는 작업처럼 세션의 작업에 속하지 않는 작업에 대해 `true`입니다. 사용자가 요청한 감시자를 포함해 실시간 업데이트 감시자도 ambient입니다. 활동 표시기에서 ambient 작업은 제외합니다. 이 필드에는 Agent SDK v0.3.247 이상이 필요합니다.

5693 5701 

5694`ambient`는 또한 [`SDKTaskNotificationMessage`](#sdktasknotificationmessage) 및 [`SDKBackgroundTasksChangedMessage`](#sdkbackgroundtaskschangedmessage) 항목에 나타납니다.5702`ambient`는 [`SDKTaskNotificationMessage`](#sdktasknotificationmessage)와 [`SDKBackgroundTasksChangedMessage`](#sdkbackgroundtaskschangedmessage) 항목에도 나타납니다.

5695 5703 

5696`is_backgrounded` 및 `spawn_depth`는 Claude Code가 작업을 시작한 방식을 설명합니다. 두 필드 모두 Agent SDK v0.3.238 이상이 필요합니다.5704`is_backgrounded`와 `spawn_depth`는 Claude Code가 작업을 시작한 방식을 설명합니다. 두 필드 모두 Agent SDK v0.3.238 이상이 필요합니다.

5697 5705 

5698* `is_backgrounded`: Claude Code는 `"local_agent"` 및 `"local_bash"` 작업에서 이를 설정합니다. `true`는 작업이 백그라운드에서 실행됨을 의미합니다. `false`는 작업이 포그라운드에서 실행되고, 이를 시작한 도구 호출은 작업이 완료되거나 백그라운드로 이동할 때까지 차단된 상태로 유지됨을 의미합니다.5706* `is_backgrounded`: Claude Code는 `"local_agent"` 및 `"local_bash"` 작업에 이 값을 설정합니다. `true`는 작업이 백그라운드에서 실행됨을 의미합니다. `false`는 작업이 포그라운드에서 실행됨을 의미하며, 작업을 시작한 도구 호출은 작업이 완료되거나 백그라운드로 이동할 때까지 차단된 상태로 유지됩니다.

5699* `spawn_depth`: Claude Code는 `"local_agent"` 작업에서만 이를 설정합니다. 주 스레드가 생성한 서브에이전트는 깊이 `1`을 가집니다. 깊이 `1` 서브에이전트가 생성한 서브에이전트는 깊이 `2`를 가지며, 이런 식으로 계속됩니다.5707* `spawn_depth`: Claude Code는 `"local_agent"` 작업에만 이 값을 설정합니다. 메인 스레드가 생성한 서브에이전트의 깊이는 `1`입니다. 깊이 `1`인 서브에이전트가 생성한 서브에이전트의 깊이는 `2`이며, 이후도 마찬가지입니다.

5700 5708 

5701[재개된 서브에이전트](https://code.claude.com/docs/ko/agent-sdk/subagents.md#resume-subagents)는 항상 `is_backgrounded: true`를 보고합니다. Claude Code는 모든 재개된 서브에이전트를 백그라운드에서 실행하기 때문입니다. 포그라운드 작업이 나중에 백그라운드로 이동할 때, Claude Code는 두 번째 `task_started`를 전송하는 대신 새로운 `is_backgrounded` 값을 [`task_updated`](#sdktaskupdatedmessage) 메시지에서 보고합니다.5709Claude Code는 재개된 모든 서브에이전트를 백그라운드에서 실행하므로, [재개된 서브에이전트](https://code.claude.com/docs/ko/agent-sdk/subagents.md#resume-subagents)는 항상 `is_backgrounded: true`를 보고합니다. 포그라운드 작업이 나중에 백그라운드로 이동하면, Claude Code는 두 번째 `task_started`를 보내는 대신 [`task_updated`](#sdktaskupdatedmessage) 메시지로 새 `is_backgrounded` 값을 보고합니다.

5702 5710 

5703`parent_task_id`는 이 작업을 시작한 서브에이전트의 `task_id`를 담습니다. 이를 사용하여 각 작업을 해당 작업을 시작한 서브에이전트 아래에 그룹화하세요. Claude Code는 서브에이전트, Bash 및 [Monitor](#monitor) 작업에서 이를 설정합니다. 필드는 Agent SDK v0.3.292 이상이 필요합니다. 다음 경우에는 없습니다:5711`parent_task_id`에는 이 작업을 실행한 서브에이전트의 `task_id`가 담깁니다. 이를 사용해 각 작업을 시작한 서브에이전트 아래로 그룹화합니다. Claude Code는 서브에이전트, Bash, [Monitor](#monitor) 작업에 이 값을 설정합니다. 이 필드에는 Agent SDK v0.3.292 이상이 필요합니다. 다음의 경우에는 이 필드가 없습니다.

5704 5712 

5705* 주 스레드가 작업을 시작한 경우5713* 메인 스레드가 작업을 실행한 경우

5706* Claude Code가 더 이상 부모 작업을 추적하지 않는 경우5714* Claude Code가 더 이상 상위 작업을 추적하지 않는 경우

5707* [팀원](https://code.claude.com/docs/ko/agent-teams.md) 또는 워크플로 내부의 에이전트가 작업을 시작한 경우5715* [팀원](https://code.claude.com/docs/ko/agent-teams.md) 또는 워크플로 내부의 에이전트가 작업을 실행한 경우

5708 5716 

5709부모는 포그라운드 작업이거나 이미 종료된 작업일 수 있으므로, 인식하지 못하는 ID는 부모가 없는 것으로 취급하세요.5717상위 작업은 포그라운드 작업이거나 이미 종료된 작업일 수 있으므로, 인식하지 못하는 ID는 상위 작업이 없는 것으로 취급합니다.

5710 5718 

5711### `SDKTaskProgressMessage`5719### `SDKTaskProgressMessage`

5712 5720 

5713서브에이전트 또는 백그라운드 작업이 실행 중일 때 주기적으로 내보내집니다. `run_id` 필드는 이를 정의하고 버전 요구 사항을 설명하는 [`SDKTaskStartedMessage`](#sdktaskstartedmessage)를 참조하세요.5721서브에이전트 또는 백그라운드 작업이 실행되는 동안 주기적으로 발생합니다. `run_id` 필드에 대해서는 해당 필드와 버전 요구 사항을 정의하는 [`SDKTaskStartedMessage`](#sdktaskstartedmessage)를 참조하세요.

5714 5722 

5715서브에이전트 작업의 경우, `summary` 필드는 모델 생성 진행 상황 요약을 전달하며 [`agentProgressSummaries`](#options)가 활성화되었을 때만 채워집니다. [백그라운드 MCP 도구 호출](https://code.claude.com/docs/ko/mcp.md#automatic-backgrounding-of-long-tool-calls)의 경우, `summary`는 MCP 서버의 최신 보고된 진행 상황을 전달하며 해당 옵션에 따라 달라지지 않습니다.5723서브에이전트 작업의 경우 `summary` 필드에는 모델이 생성한 진행 상황 요약이 담기며, [`agentProgressSummaries`](#options)가 활성화된 경우에만 채워집니다. [백그라운드로 이동한 MCP 도구 호출](https://code.claude.com/docs/ko/mcp.md#automatic-backgrounding-of-long-tool-calls)의 경우 `summary`에는 MCP 서버가 마지막으로 보고한 진행 상황이 담기며, 해당 옵션과는 관계가 없습니다.

5716 5724 

5717```typescript theme={null}5725```typescript theme={null}

5718type SDKTaskProgressMessage = {5726type SDKTaskProgressMessage = {


5737 5745 

5738### `SDKTaskUpdatedMessage`5746### `SDKTaskUpdatedMessage`

5739 5747 

5740백그라운드 작업의 상태가 변경될 때 내보내집니다. 예를 들어 `running`에서 `completed`로 전환될 때입니다. `patch`를 `task_id`로 키가 지정된 로컬 작업 맵에 병합하세요. `end_time` 필드는 Unix epoch 타임스탬프(밀리초)이며 `Date.now()`와 비교할 수 있습니다. `run_id` 필드는 이를 정의하고 버전 요구 사항을 설명하는 [`SDKTaskStartedMessage`](#sdktaskstartedmessage)를 참조하세요.5748백그라운드 작업의 상태가 `running`에서 `completed`로 전환될 때처럼 변경될 때 발생합니다. `task_id`를 키로 하는 로컬 작업 맵에 `patch`를 병합합니다. `end_time` 필드는 밀리초 단위의 Unix epoch 타임스탬프로, `Date.now()`와 비교할 수 있습니다. `run_id` 필드에 대해서는 해당 필드와 버전 요구 사항을 정의하는 [`SDKTaskStartedMessage`](#sdktaskstartedmessage)를 참조하세요.

5741 5749 

5742```typescript theme={null}5750```typescript theme={null}

5743type SDKTaskUpdatedMessage = {5751type SDKTaskUpdatedMessage = {


5760 5768 

5761### `SDKBackgroundTasksChangedMessage`5769### `SDKBackgroundTasksChangedMessage`

5762 5770 

5763라이브 백그라운드 작업 집합이 변경될 때마다 내보내집니다. 작업이 시작되거나, 완료되거나, 종료되거나, 포그라운드 에이전트가 백그라운드로 전환되거나, 작업의 `description`, `ambient` 또는 `parent_task_id` 필드가 변경될 때입니다. 각 항목의 `run_id` 및 `parent_task_id` 필드는 이를 정의하고 버전 요구 사항을 설명하는 [`SDKTaskStartedMessage`](#sdktaskstartedmessage)를 참조하세요.5771활성 백그라운드 작업 집합이 변경될 때마다 발생합니다. 작업이 시작, 완료 또는 종료되거나, 포그라운드 에이전트가 백그라운드로 이동하거나, 작업의 `description`, `ambient` 또는 `parent_task_id` 필드가 변경되는 경우입니다. 각 항목의 `run_id` 및 `parent_task_id` 필드에 대해서는 해당 필드와 버전 요구 사항을 정의하는 [`SDKTaskStartedMessage`](#sdktaskstartedmessage)를 참조하세요.

5764 5772 

5765`tasks` 배열은 전체 라이브 집합입니다. `task_started` 및 `task_notification` 이벤트를 쌍으로 맞추는 대신 각 페이로드로 캐시된 집합을 교체하세요. 그러면 다음 멤버십 변경이 놓친 이벤트를 바로잡습니다.5773`tasks` 배열은 전체 활성 집합입니다. `task_started`와 `task_notification` 이벤트를 짝짓는 대신 각 페이로드로 캐시된 집합을 대체하면, 놓친 이벤트가 있더라도 다음 구성원 변경 시 바로잡힙니다.

5766 5774 

5767작업이 종료되면 해당 작업의 [`task_updated`](#sdktaskupdatedmessage) 및 [`task_notification`](#sdktasknotificationmessage)이 목록에서 해당 작업을 제거하는 `background_tasks_changed`보다 먼저 도착합니다. 그 외에는 작업별 이벤트에 대한 순서가 지정되지 않습니다.5775작업이 종료되면 해당 작업의 [`task_updated`](#sdktaskupdatedmessage)와 [`task_notification`](#sdktasknotificationmessage)이 목록에서 해당 작업을 제거하는 `background_tasks_changed`보다 먼저 도착합니다. 그 외에 작업별 이벤트와의 상대적 순서는 지정되어 있지 않습니다.

5768 5776 

5769시작 시 아무것도 내보내지지 않습니다. 세션의 CLI 프로세스가 시작되거나 다시 시작될 때마다 빈 집합으로 재설정하고 다음 멤버십 변경이 다시 채우도록 하세요.5777시작 시에는 아무것도 발생하지 않습니다. 세션의 CLI 프로세스가 시작되거나 재시작될 때마다 빈 집합으로 재설정하고, 다음 구성원 변경으로 다시 채워지도록 합니다.

5770 5778 

5771실행 중인 세션에 반복된 `initialize` 제어 요청을 전송할 때(예: 전송 간격 후 [`reinitialize()`](#query-object) 사용), Claude Code는 응답 뒤에 현재 라이브 집합의 스냅샷을 보냅니다. 비어 있을 때도 마찬가지입니다. 따라서 재연결하는 호스트는 다음 멤버십 변경을 기다리지 않고 실행 중인 것을 알 수 있습니다. Agent SDK v0.3.239 이전에 Claude Code는 반복된 `initialize` 후 스냅샷을 전송하지 않았습니다.5779전송 중단 후 [`reinitialize()`](#query-object)를 사용하는 경우처럼 실행 중인 세션에 반복된 `initialize` 제어 요청을 보내면, Claude Code는 응답 뒤에 현재 활성 집합의 스냅샷을 보내며, 집합이 비어 있어도 보냅니다. 따라서 다시 연결하는 호스트는 다음 구성원 변경을 기다리지 않고도 무엇이 실행 중인지 알 수 있습니다. Agent SDK v0.3.239 이전에는 반복된 `initialize` 후에 Claude Code가 스냅샷을 보내지 않았습니다.

5772 5780 

5773Claude Code v2.1.203 이상이 필요합니다.5781Claude Code v2.1.203 이상이 필요합니다.

5774 5782 


5790};5798};

5791```5799```

5792 5800 

5793`subagent_type`은 [`task_type`](#sdktaskstartedmessage)이 `"local_agent"`인 항목에서 서브에이전트 타입의 이름을 지정합니다. 예를 들어 `general-purpose` 또는 사용자 정의 서브에이전트의 이름입니다. 필드는 Agent SDK v0.3.293 이상이 필요합니다.5801`subagent_type`은 [`task_type`](#sdktaskstartedmessage)이 `"local_agent"`인 항목에서 `general-purpose`나 사용자 지정 서브에이전트의 이름처럼 서브에이전트 타입을 나타냅니다. 이 필드에는 Agent SDK v0.3.293 이상이 필요합니다.

5794 5802 

5795### `SDKThinkingTokensMessage`5803### `SDKThinkingTokensMessage`

5796 5804 

5797Claude가 사고 블록(편집된 블록 포함)을 생성하는 동안 내보내집니다. `estimated_tokens`는 현재 블록에서 지금까지 생성된 사고 토큰의 누적 추정치이고, `estimated_tokens_delta`는 이 프레임이 전달하는 증분입니다. 이 추정치는 진행 상황 표시에 사용하세요.5805Claude가 수정된(redacted) 블록을 포함해 thinking 블록을 생성하는 동안 발생합니다. `estimated_tokens`는 현재 블록에서 지금까지 생성된 사고 토큰의 누적 추정치이고, `estimated_tokens_delta`는 이 프레임이 전달하는 증가분입니다. 이 추정치는 진행 상황 표시에 사용합니다.

5798 5806 

5799모델 또는 제공자가 분류를 보고할 때, 최상위 에이전트 루프의 최종 개수는 결과 메시지의 [`usage.output_tokens_details.thinking_tokens`](#usage)입니다. 이는 [서브에이전트 토큰을 포함하지 않습니다](https://code.claude.com/docs/ko/agent-sdk/cost-tracking.md#get-the-total-cost-of-a-query).5807모델이나 제공자가 분류를 보고하는 경우, 최상위 에이전트 루프의 최종 수는 결과 메시지의 [`usage.output_tokens_details.thinking_tokens`](#usage)이며, 여기에는 [서브에이전트 토큰이 포함되지 않습니다](https://code.claude.com/docs/ko/agent-sdk/cost-tracking.md#get-the-total-cost-of-a-query).

5800 5808 

5801Claude Code v2.1.153 이상이 필요합니다.5809Claude Code v2.1.153 이상이 필요합니다.

5802 5810 


5814 5822 

5815### `SDKSessionStateChangedMessage`5823### `SDKSessionStateChangedMessage`

5816 5824 

5817Claude Code가 세션의 상태를 보고할 때 내보내집니다. 이러한 메시지를 받으려면 [`CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1`](https://code.claude.com/docs/ko/env-vars#variables)을 설정하세요. Claude Code는 동일한 상태를 두 번 이상 보고할 수 있으므로, 메시지를 전환이 아니라 세션의 현재 상태로 해석하세요.5825Claude Code가 세션의 상태를 보고할 때 발생합니다. 이 메시지를 받으려면 [`CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1`](https://code.claude.com/docs/ko/env-vars#variables)을 설정합니다. Claude Code는 같은 상태를 두 번 이상 보고할 수 있으므로, 메시지를 전환이 아닌 세션의 현재 상태로 읽어야 합니다.

5818 5826 

5819`state` 필드는 다음 값 중 하나를 전달합니다:5827`state` 필드에는 다음 값 중 하나가 담깁니다.

5820 5828 

5821* `running`: 세션이 작업 중입니다.5829* `running`: 세션이 작업 중입니다.

5822* `idle`: Claude Code가 다음 프롬프트를 기다리고 있습니다.5830* `idle`: Claude Code가 다음 프롬프트를 기다리고 있습니다.

5823* `requires_action`: 세션이 호스트에 보낸 요청(예: 권한 프롬프트)에 대한 응답을 기다리며 차단되어 있습니다.5831* `requires_action`: 세션이 권한 프롬프트처럼 호스트에 보낸 요청에 대한 응답을 기다리며 차단되어 있습니다.

5824 5832 

5825턴의 `idle` 메시지와 `result` 메시지는 어느 순서로든 도착할 수 있습니다. 백그라운드 서브에이전트나 [워크플로](https://code.claude.com/docs/ko/workflows.md) 실행 같은 백그라운드 작업을 `idle`이 기다릴지 여부를 변경하려면 [`CLAUDE_CODE_BG_TASKS_REPORT_RUNNING`](https://code.claude.com/docs/ko/env-vars#variables)을 참조하세요.5833한 턴의 `idle` 메시지와 `result` 메시지는 어느 순서로든 도착할 수 있습니다. 백그라운드 서브에이전트나 [워크플로](https://code.claude.com/docs/ko/workflows.md) 실행 같은 백그라운드 작업을 `idle`이 기다릴지 여부를 변경하려면 [`CLAUDE_CODE_BG_TASKS_REPORT_RUNNING`](https://code.claude.com/docs/ko/env-vars#variables)을 참조하세요.

5826 5834 

5827```typescript theme={null}5835```typescript theme={null}

5828type SDKSessionStateChangedMessage = {5836type SDKSessionStateChangedMessage = {


5836 5844 

5837### `SDKFilesPersistedEvent`5845### `SDKFilesPersistedEvent`

5838 5846 

5839파일 체크포인트가 디스크에 지속될 때 내보내집니다.5847파일 체크포인트가 디스크에 저장될 때 발생합니다.

5840 5848 

5841```typescript theme={null}5849```typescript theme={null}

5842type SDKFilesPersistedEvent = {5850type SDKFilesPersistedEvent = {


5852 5860 

5853### `SDKRateLimitEvent`5861### `SDKRateLimitEvent`

5854 5862 

5855세션이 속도 제한을 만날 때 내보내집니다.5863세션이 속도 제한에 걸렸을 때 발생합니다.

5856 5864 

5857```typescript theme={null}5865```typescript theme={null}

5858type SDKRateLimitEvent = {5866type SDKRateLimitEvent = {


5870};5878};

5871```5879```

5872 5880 

5873`errorCode`가 `"credits_required"`일 때, 거부는 포함된 사용량이 소진된 claude.ai 구독에서 발생하며, 사용자가 사용량 크레딧을 구매할 때까지 세션을 계속할 수 없습니다. `canUserPurchaseCredits`는 인증된 사용자가 계정에 대한 크레딧을 구매할 수 있는지 여부를 나타내고, `hasChargeableSavedPaymentMethod`는 저장된 결제 수단이 등록되어 있는지 여부를 나타냅니다. 세 필드 모두 크레딧 필수 거부가 아닌 속도 제한 이벤트에서는 없습니다. Claude Code v2.1.181 이상이 필요합니다.5881`errorCode`가 `"credits_required"`이면 포함된 사용량이 소진된 claude.ai 구독에서 거부된 것이며, 사용자가 사용량 크레딧을 구매할 때까지 세션을 계속할 수 없습니다. `canUserPurchaseCredits`는 인증된 사용자가 계정에 대한 크레딧을 구매할 수 있는지를 나타내고, `hasChargeableSavedPaymentMethod`는 저장된 결제 수단이 등록되어 있는지를 나타냅니다. 크레딧 필요로 인한 거부가 아닌 속도 제한 이벤트에는 세 필드 모두 없습니다. Claude Code v2.1.181 이상이 필요합니다.

5874 5882 

5875### `SDKLocalCommandOutputMessage`5883### `SDKLocalCommandOutputMessage`

5876 5884 

5877Claude Code는 이 메시지 타입을 내보내지 않습니다. `/context` 또는 `/usage`와 같은 명령을 프롬프트로 전송할 때, 해당 출력은 [`SDKAssistantMessage`](#sdkassistantmessage)로 도착합니다.5885Claude Code는 이 메시지 타입을 내보내지 않습니다. `/context`나 `/usage` 같은 명령을 프롬프트로 보내면 그 출력은 [`SDKAssistantMessage`](#sdkassistantmessage)로 도착합니다.

5878 5886 

5879```typescript theme={null}5887```typescript theme={null}

5880type SDKLocalCommandOutputMessage = {5888type SDKLocalCommandOutputMessage = {


5888 5896 

5889### `SDKCommandsChangedMessage`5897### `SDKCommandsChangedMessage`

5890 5898 

5891사용 가능한 명령 집합이 세션 중간에 변경될 때 내보내집니다. 예를 들어 에이전트가 하위 디렉토리에 들어갈 때 Claude Code가 스킬을 발견하는 경우입니다. `commands` 배열은 전체 업데이트된 목록이므로, 캐시된 명령 목록을 이 페이로드로 교체하세요. 이 메시지 후 [`supportedCommands()`](#query-object)를 호출하면 동일한 업데이트된 목록을 반환합니다. 메서드는 최신 푸시를 추적하기 때문입니다. 이는 Agent SDK v0.3.216 이상이 필요합니다. 이전 SDK 버전에서 `supportedCommands()`는 초기화 시 캡처된 스냅샷을 반환하며 세션 중간 변경을 반영하지 않습니다.5899에이전트가 하위 디렉터리에 들어갈 때 Claude Code가 스킬을 발견하는 경우처럼, 세션 중에 사용 가능한 명령 집합이 변경될 때 발생합니다. `commands` 배열은 업데이트된 전체 목록이므로, 캐시된 명령 목록을 이 페이로드로 대체합니다. 이 메서드는 최신 푸시를 추적하므로, 이 메시지 이후 [`supportedCommands()`](#query-object)를 호출하면 동일한 업데이트된 목록이 반환됩니다. 이를 위해서는 Agent SDK v0.3.216 이상이 필요합니다. 이전 SDK 버전에서는 `supportedCommands()`가 초기화 시 캡처한 스냅샷을 반환하며 세션 중 변경 사항을 절대 반영하지 않습니다.

5892 5900 

5893Claude Code는 또한 MCP 서버의 [프롬프트](https://code.claude.com/docs/ko/mcp.md#use-mcp-prompts-as-commands)가 목록에 추가되거나 제거될 때 이 메시지를 내보냅니다. 예를 들어 세션이 시작된 후 서버가 연결을 완료할 때입니다. 이는 Claude Code v2.1.281 이상이 필요합니다.5901Claude Code는 예를 들어 세션이 시작된 후 서버 연결이 완료될 때처럼 MCP 서버의 [프롬프트](https://code.claude.com/docs/ko/mcp.md#use-mcp-prompts-as-commands)가 목록에 추가되거나 목록에서 제거될 때도 이 메시지를 내보냅니다. 이를 위해서는 Claude Code v2.1.281 이상이 필요합니다.

5894 5902 

5895```typescript theme={null}5903```typescript theme={null}

5896type SDKCommandsChangedMessage = {5904type SDKCommandsChangedMessage = {


5904 5912 

5905### `SDKPromptSuggestionMessage`5913### `SDKPromptSuggestionMessage`

5906 5914 

5907[`promptSuggestions`](#options)가 활성화되어 있고 Claude Code가 해당 턴에 대한 제안을 생성한 경우 턴 후에 내보내집니다. 예측된 다음 사용자 프롬프트를 포함합니다. 제안을 받지 않는 턴은 [Claude Code가 제안을 건너뛸 때](https://code.claude.com/docs/ko/interactive-mode.md#when-claude-code-skips-suggestions)를 참조하세요.5915[`promptSuggestions`](#options)가 활성화되어 있고 Claude Code가 해당 턴에 대한 제안을 생성한 경우, 턴이 끝난 후 발생합니다. 예측된 다음 사용자 프롬프트가 담깁니다. 제안을 받지 않는 턴에 대해서는 [Claude Code가 제안을 건너뛰는 경우](https://code.claude.com/docs/ko/interactive-mode.md#when-claude-code-skips-suggestions)를 참조하세요.

5908 5916 

5909```typescript theme={null}5917```typescript theme={null}

5910type SDKPromptSuggestionMessage = {5918type SDKPromptSuggestionMessage = {


5917 5925 

5918### `SDKConversationResetMessage`5926### `SDKConversationResetMessage`

5919 5927 

5920세션의 대화가 세션을 종료하지 않고 바뀔 때 내보내집니다. `query()` 호출에서 `/clear` 및 해당 별칭만 이 메시지를 생성합니다. `new_conversation_id` 아래에 빈 트랜스크립트를 마운트하고 캐시된 세션 제목을 버리세요.5928세션을 종료하지 않고 세션의 대화가 대체될 때 발생합니다. `query()` 호출에서는 `/clear`와 그 별칭만 이 메시지를 생성합니다. `new_conversation_id` 아래에 빈 트랜스크립트를 마운트하고 캐시된 세션 제목을 삭제합니다.

5921 5929 

5922```typescript theme={null}5930```typescript theme={null}

5923type SDKConversationResetMessage = {5931type SDKConversationResetMessage = {


5931};5939};

5932```5940```

5933 5941 

5934선택적 필드는 재설정을 설명합니다:5942선택적 필드는 재설정을 설명합니다.

5935 5943 

5936* `trigger`: 대화를 버린 것입니다. 이 필드가 없거나 인식하지 못하는 값을 전달하는 경우를 포함하여 모든 `conversation_reset` 메시지에서 트랜스크립트를 재설정하세요.5944* `trigger`: 대화를 폐기한 원인입니다. 이 필드가 없거나 인식하지 못하는 값이 담긴 경우를 포함해 모든 `conversation_reset` 메시지에서 트랜스크립트를 재설정합니다.

5937* `user_message_uuid`: `/clear`를 전달한 사용자 메시지의 `uuid`입니다. 이를 사용하여 재설정을 해당 메시지와 일치시키세요.5945* `user_message_uuid`: `/clear`를 담은 사용자 메시지의 `uuid`입니다. 재설정을 해당 메시지와 연결하는 데 사용합니다.

5938* `timestamp`: 재설정이 발생한 시간이며, UTC의 ISO 8601 문자열입니다. 메시지 순서 지정이 아닌 표시에 사용하세요.5946* `timestamp`: 재설정이 발생한 시각으로, UTC 기준 ISO 8601 문자열입니다. 메시지 순서 지정이 아닌 표시 용도로 사용합니다.

5939 5947 

5940`trigger`, `user_message_uuid` 및 `timestamp` 필드는 Claude Code v2.1.281 이상이 필요합니다.5948`trigger`, `user_message_uuid`, `timestamp` 필드에는 Claude Code v2.1.281 이상이 필요합니다.

5941 5949 

5942SDK의 게시된 타이핑은 Claude Code v2.1.203 이상에서 `SDKConversationResetMessage`를 선언합니다. v2.1.203 이전에는 `SDKMessage`가 타입을 선언하지 않고 참조했으므로, `skipLibCheck`가 비활성화되었을 때 `type === "conversation_reset"`에 대한 타입 좁히기가 타입 검사에 실패했습니다.5950SDK의 공개 타입 정의는 Claude Code v2.1.203 이상에서 `SDKConversationResetMessage`를 선언합니다. v2.1.203 이전에는 `SDKMessage`가 이 타입을 선언 없이 참조했기 때문에, `skipLibCheck`가 비활성화된 경우 `type === "conversation_reset"`으로 타입을 좁히면 타입 검사에 실패했습니다.

5943 5951 

5944### `BUILTIN_TOOL_NAMES` 및 `LEGACY_TOOL_NAME_ALIASES`5952### `BUILTIN_TOOL_NAMES` 및 `LEGACY_TOOL_NAME_ALIASES`

5945 5953 

5946애플리케이션 사용자가 입력하는 도구 이름을 확인하려면 이 두 상수를 사용하세요. 두 상수 모두 각 이름을 권한 규칙, 훅 matcher, `tools` 및 `disallowedTools` 옵션에서 작성하는 방식 그대로 표기합니다. `@anthropic-ai/claude-agent-sdk` 또는 `@anthropic-ai/claude-agent-sdk/core`에서 가져오세요. Agent SDK v0.3.301 이상이 필요하며 알파 상태입니다.5954애플리케이션 사용자가 입력한 도구 이름을 확인하려면 이 두 상수를 사용합니다. 두 상수 모두 권한 규칙, 훅 matcher, `tools` 및 `disallowedTools` 옵션에서 작성하는 방식대로 각 이름을 표기합니다. `@anthropic-ai/claude-agent-sdk` 또는 `@anthropic-ai/claude-agent-sdk/core`에서 가져옵니다. Agent SDK v0.3.301 이상이 필요하며 알파 단계입니다.

5947 5955 

5948SDK의 타입 선언은 `BUILTIN_TOOL_NAMES`에 readonly 튜플 타입을, `LEGACY_TOOL_NAME_ALIASES`에 문자열-문자열 레코드 타입을 부여합니다:5956SDK의 타입 선언은 `BUILTIN_TOOL_NAMES`에 readonly 튜플 타입을, `LEGACY_TOOL_NAME_ALIASES`에 문자열-문자열 레코드 타입을 부여합니다.

5949 5957 

5950```typescript theme={null}5958```typescript theme={null}

5951const BUILTIN_TOOL_NAMES: readonly ["Agent", /* ...more names... */ "Write"];5959const BUILTIN_TOOL_NAMES: readonly ["Agent", /* ...more names... */ "Write"];

5952const LEGACY_TOOL_NAME_ALIASES: Readonly<Record<string, string>>;5960const LEGACY_TOOL_NAME_ALIASES: Readonly<Record<string, string>>;

5953```5961```

5954 5962 

5955* **`BUILTIN_TOOL_NAMES`**: `Agent`, `Bash`, `Read` 같은 Claude Code 기본 제공 도구의 이름을 알파벳순으로 나열합니다. MCP 도구 이름은 포함되지 않습니다. 타입이 문자열 리터럴의 튜플이므로, `(typeof BUILTIN_TOOL_NAMES)[number]`로 이름들의 유니온 타입을 얻을 수 있습니다5963* **`BUILTIN_TOOL_NAMES`**: `Agent`, `Bash`, `Read`처럼 Claude Code 기본 제공 도구의 이름을 알파벳순으로 나열합니다. MCP 도구 이름은 포함되지 않습니다. 타입이 문자열 리터럴의 튜플이므로 `(typeof BUILTIN_TOOL_NAMES)[number]`로 이름의 유니온 타입을 얻을 수 있습니다

5956* **`LEGACY_TOOL_NAME_ALIASES`**: 권한 규칙, 훅 matcher, `tools` 및 `disallowedTools` 옵션이 여전히 허용하는 이전 도구 이름입니다. 각 키는 이전 이름이고 값은 현재 이름입니다. 예를 들어 `Task`는 `Agent`에 매핑되고, `KillShell`과 `KillBash`는 `TaskStop`에 매핑됩니다5964* **`LEGACY_TOOL_NAME_ALIASES`**: 권한 규칙, 훅 matcher, `tools` 및 `disallowedTools` 옵션에서 여전히 허용되는 이전 도구 이름입니다. 각 키는 이전 이름이고 값은 현재 이름입니다. 예를 들어 `Task`는 `Agent`에 매핑되고, `KillShell`과 `KillBash`는 `TaskStop`에 매핑됩니다

5957 5965 

5958이름은 두 가지 검사 중 하나로 확인할 수 있습니다. `BUILTIN_TOOL_NAMES`에 포함되어 있거나, `Object.hasOwn(LEGACY_TOOL_NAME_ALIASES, name)`이 `true`를 반환하는 경우입니다. `BUILTIN_TOOL_NAMES`는 MCP 도구와 일부 기본 제공 도구를 제외하므로, 두 검사를 모두 통과하지 못한 이름도 유효할 수 있습니다. `BUILTIN_TOOL_NAMES`로 거부 목록을 만들면, Claude는 이 상수에서 제외된 도구를 여전히 사용할 수 있습니다. 모든 도구를 거부하려면 대신 [`disallowedTools: ["*"]`](https://code.claude.com/docs/ko/agent-sdk/permissions#allow-and-deny-rules)를 설정하세요.5966이름은 두 가지 테스트 중 하나로 확인할 수 있습니다. `BUILTIN_TOOL_NAMES`에 포함되어 있거나, `Object.hasOwn(LEGACY_TOOL_NAME_ALIASES, name)`이 `true`를 반환하는 경우입니다. `BUILTIN_TOOL_NAMES`에는 MCP 도구와 일부 기본 제공 도구가 빠져 있으므로, 두 테스트를 모두 통과하지 못한 이름도 유효할 수 있습니다. `BUILTIN_TOOL_NAMES`로 거부 목록을 만들면 Claude는 이 상수에서 빠진 도구를 여전히 사용할 수 있습니다. 모든 도구를 거부하려면 대신 [`disallowedTools: ["*"]`](https://code.claude.com/docs/ko/agent-sdk/permissions#allow-and-deny-rules)를 설정합니다.

5959 5967 

5960`BUILTIN_TOOL_NAMES`에서 이름을 찾았다고 해서 세션에 해당 도구가 있다는 의미는 아닙니다. `TodoWrite`는 [기본적으로 비활성화](https://code.claude.com/docs/ko/tools-reference.md)되어 있지만 목록에 포함되어 있습니다. 세션에 어떤 도구가 있는지 확인하려면 해당 세션의 [`SDKSystemMessage`](#sdksystemmessage)에 있는 `tools` 배열을 읽으세요. 이 배열은 MCP 도구를 포함하고 Agent 도구를 `Task`로 나열하므로, `BUILTIN_TOOL_NAMES`와 비교하기 전에 각 이름을 `LEGACY_TOOL_NAME_ALIASES`로 매핑하세요.5968`BUILTIN_TOOL_NAMES`에서 이름을 찾았다고 해서 세션에 해당 도구가 있다는 의미는 아닙니다. 예를 들어 `TodoWrite`는 [기본적으로 비활성화](https://code.claude.com/docs/ko/tools-reference.md)되어 있지만 목록에 포함되어 있습니다. 세션에 어떤 도구가 있는지 확인하려면 해당 세션의 [`SDKSystemMessage`](#sdksystemmessage)에 있는 `tools` 배열을 읽습니다. 이 배열에는 MCP 도구가 포함되고 Agent 도구가 `Task`로 나열되므로, `BUILTIN_TOOL_NAMES`와 비교하기 전에 각 이름을 `LEGACY_TOOL_NAME_ALIASES`로 매핑합니다.

5961 5969 

5962### `AbortError`5970### `AbortError`

5963 5971 

5964중단 작업을 위한 사용자 정의 오류 클래스입니다.5972중단 작업을 위한 사용자 지정 오류 클래스입니다.

5965 5973 

5966```typescript theme={null}5974```typescript theme={null}

5967class AbortError extends Error {}5975class AbortError extends Error {}

5968```5976```

5969 5977 

5970SDK의 타입 API에서 `AbortError`는 유일한 오류 클래스입니다. Claude Code 프로세스 종료 또는 시작 실패와 같은 다른 실패는 일치시킬 SDK 클래스가 없는 오류로 메시지 반복을 거부합니다. [문제 해결](https://code.claude.com/docs/ko/agent-sdk/troubleshooting.md)은 이러한 오류를 메시지별로 정리하여 각각의 원인과 해결 방법을 제공합니다.5978`AbortError`는 SDK의 타입이 지정된 API에서 유일한 오류 클래스입니다. Claude Code 프로세스가 종료되거나 실행에 실패하는 것과 같은 다른 실패는 매칭할 SDK 클래스가 없는 오류로 메시지 반복을 reject합니다. [문제 해결](https://code.claude.com/docs/ko/agent-sdk/troubleshooting.md)에서는 이러한 오류를 메시지별로 정리하고 각각의 원인과 해결 방법을 안내합니다.

5971 5979 

5972## 샌드박스 구성5980## 샌드박스 구성

5973 5981 


6068| `allowManagedDomainsOnly` | `boolean` | `false` | 관리형 설정 전용입니다. [관리형 설정](https://code.claude.com/docs/ko/managed-settings.md)에서 설정되었을 때 관리형 설정의 `allowedDomains` 항목 및 관리형 설정의 `WebFetch(domain:...)` 허용 규칙만 적용되며 사용자, 프로젝트 또는 로컬 설정의 허용 항목은 무시됩니다. SDK에서 [`managedSettings`](#options) 옵션을 통해 전달합니다 |6076| `allowManagedDomainsOnly` | `boolean` | `false` | 관리형 설정 전용입니다. [관리형 설정](https://code.claude.com/docs/ko/managed-settings.md)에서 설정되었을 때 관리형 설정의 `allowedDomains` 항목 및 관리형 설정의 `WebFetch(domain:...)` 허용 규칙만 적용되며 사용자, 프로젝트 또는 로컬 설정의 허용 항목은 무시됩니다. SDK에서 [`managedSettings`](#options) 옵션을 통해 전달합니다 |

6069| `allowLocalBinding` | `boolean` | `false` | 프로세스가 로컬 포트에 바인딩하도록 허용합니다 (예: 개발 서버의 경우) |6077| `allowLocalBinding` | `boolean` | `false` | 프로세스가 로컬 포트에 바인딩하도록 허용합니다 (예: 개발 서버의 경우) |

6070| `allowUnixSockets` | `string[]` | `[]` | 프로세스가 액세스할 수 있는 Unix 소켓 경로 (예: Docker 소켓) |6078| `allowUnixSockets` | `string[]` | `[]` | 프로세스가 액세스할 수 있는 Unix 소켓 경로 (예: Docker 소켓) |

6071| `allowAllUnixSockets` | `boolean` | `false` | 모든 Unix 소켓에 대한 액세스 허용 |6079| `allowAllUnixSockets` | `boolean` | `false` | 모든 Unix 소켓 및 Linux에서는 VM 소켓(`AF_VSOCK`)에 대한 액세스 허용 |

6072| `httpProxyPort` | `number` | `undefined` | 네트워크 요청을 위한 HTTP 프록시 포트 |6080| `httpProxyPort` | `number` | `undefined` | 네트워크 요청을 위한 HTTP 프록시 포트 |

6073| `socksProxyPort` | `number` | `undefined` | 네트워크 요청을 위한 SOCKS 프록시 포트 |6081| `socksProxyPort` | `number` | `undefined` | 네트워크 요청을 위한 SOCKS 프록시 포트 |

6074 6082 

agent-view.md +8 −2

Details

320 320 

321#### 과거 세션 다시 가져오기321#### 과거 세션 다시 가져오기

322 322 

323Claude Code v2.1.212 이상에서 세션을 다시 가져오려면 [디스패치 입력](#dispatch-an-agent-from-agent-view)에 `/resume`을 입력합니다. 피커가 열리며 에이전트 뷰를 연 저장소의 과거 세션이 최신순으로 표시되며, 목록에서 삭제한 세션을 포함합니다. 이미 행이 있는 세션은 나열되지 않습니다. `Enter`를 눌러 선택된 세션을 백그라운드 세션으로 재개하면 목록에 행으로 다시 추가됩니다.323세션을 다시 가져오려면 [디스패치 입력](#dispatch-an-agent-from-agent-view)에 `/resume`을 입력합니다. 피커가 열리며 에이전트 뷰를 연 저장소의 과거 세션이 최신순으로 표시되며, 목록에서 삭제한 세션을 포함합니다. 이미 행이 있는 세션은 나열되지 않습니다. `Enter`를 눌러 선택된 세션을 백그라운드 세션으로 재개하면 목록에 행으로 다시 추가됩니다.

324 324 

325다음과 같은 경우 `/resume`은 `isn't available in agent view`와 함께 실패합니다:325다음과 같은 경우 `/resume`은 `isn't available in agent view`와 함께 실패합니다:

326 326 


410* `/logout`은 로그아웃합니다410* `/logout`은 로그아웃합니다

411* `/model`, `/effort`, `/fast`는 [다음에 디스패치하는 세션이 시작할 때 사용할 값](#set-the-model-effort-and-fast-mode)을 설정합니다. `/effort`와 `/fast`는 Claude Code v2.1.299 이상이 필요합니다.411* `/model`, `/effort`, `/fast`는 [다음에 디스패치하는 세션이 시작할 때 사용할 값](#set-the-model-effort-and-fast-mode)을 설정합니다. `/effort`와 `/fast`는 Claude Code v2.1.299 이상이 필요합니다.

412* `/login`은 세션에 연결하지 않고 다시 로그인할 수 있도록 로그인 대화 상자를 엽니다412* `/login`은 세션에 연결하지 않고 다시 로그인할 수 있도록 로그인 대화 상자를 엽니다

413* 인수 없는 `/resume` 또는 그 별칭 `/continue`는 저장소의 과거 세션 선택기를 열어 하나를 백그라운드 세션으로 [다시 가져옵니다](#bring-back-a-past-session). Claude Code v2.1.212 이상이 필요합니다413* 인수 없는 `/resume` 또는 그 별칭 `/continue`는 저장소의 과거 세션 선택기를 열어 하나를 백그라운드 세션으로 [다시 가져옵니다](#bring-back-a-past-session)

414 414 

415스킬, 사용자 정의 명령, 그리고 `/init`과 같은 프롬프트 확장 기본 제공 명령은 새로운 백그라운드 세션에 첫 번째 프롬프트로 전송됩니다. `isn't available in agent view` 힌트는 입력한 기본 제공 명령이 실행되지 않았음을 의미합니다. 이를 실행하려면 [세션에 연결](#attach-to-a-session)하여 그곳에서 입력합니다. 입력한 모든 내용이 힌트 옆의 입력에 남아 있으므로 편집할 수 있습니다.415스킬, 사용자 정의 명령, 그리고 `/init`과 같은 프롬프트 확장 기본 제공 명령은 새로운 백그라운드 세션에 첫 번째 프롬프트로 전송됩니다. `isn't available in agent view` 힌트는 입력한 기본 제공 명령이 실행되지 않았음을 의미합니다. 이를 실행하려면 [세션에 연결](#attach-to-a-session)하여 그곳에서 입력합니다. 입력한 모든 내용이 힌트 옆의 입력에 남아 있으므로 편집할 수 있습니다.

416 416 


454 454 

455[에이전트 뷰가 꺼져 있으면](#turn-off-agent-view), `/fork`는 세션을 복사하는 대신 [분기된 서브에이전트](https://code.claude.com/docs/ko/sub-agents.md#fork-the-current-conversation)를 시작합니다.455[에이전트 뷰가 꺼져 있으면](#turn-off-agent-view), `/fork`는 세션을 복사하는 대신 [분기된 서브에이전트](https://code.claude.com/docs/ko/sub-agents.md#fork-the-current-conversation)를 시작합니다.

456 456 

457##### 복사본에 프롬프트를 보내고 세션 열기

458 

457`/fork open a draft pull request with the work so far`와 같은 프롬프트를 전달하면 복사본이 즉시 작업을 시작합니다. 프롬프트가 없으면 복사본은 첫 번째 지시사항을 기다립니다. `claude agents`에서 해당 행을 선택하고 `Space`를 눌러 지시사항을 보내거나, `claude attach <id>`를 실행합니다. 기다리는 동안 선택한 행에는 `space to send it a prompt`가 표시됩니다.459`/fork open a draft pull request with the work so far`와 같은 프롬프트를 전달하면 복사본이 즉시 작업을 시작합니다. 프롬프트가 없으면 복사본은 첫 번째 지시사항을 기다립니다. `claude agents`에서 해당 행을 선택하고 `Space`를 눌러 지시사항을 보내거나, `claude attach <id>`를 실행합니다. 기다리는 동안 선택한 행에는 `space to send it a prompt`가 표시됩니다.

458 460 

459`/fork` 확인 메시지는 복사본의 상태(예: `session running`), 에이전트 뷰 행의 이름, 그리고 `claude attach`에 사용할 세션 ID를 보여주는 한 줄입니다. 이름을 클릭하면 복사본으로 전환됩니다. 이 세션은 `←`를 누른 것과 동일하게 백그라운드로 이동하고, 에이전트 뷰가 복사본의 세션을 엽니다.461`/fork` 확인 메시지는 복사본의 상태(예: `session running`), 에이전트 뷰 행의 이름, 그리고 `claude attach`에 사용할 세션 ID를 보여주는 한 줄입니다. 이름을 클릭하면 복사본으로 전환됩니다. 이 세션은 `←`를 누른 것과 동일하게 백그라운드로 이동하고, 에이전트 뷰가 복사본의 세션을 엽니다.

460 462 

463##### 복사본이 실행되는 위치

464 

461복사본이 [제자리에서 편집](#how-file-edits-are-isolated)하는 경우를 제외하고, Claude Code는 코드를 변경하기 전에 자체 워크트리를 생성하도록 복사본에 지시합니다. git 저장소 외부에서는 훅으로 생성된 워크트리에서 빠져나온 복사본만 이 지시를 받으며, [`WorktreeCreate` 훅](https://code.claude.com/docs/ko/hooks#worktreecreate)이 없으면 복사본은 제자리에서 편집합니다. 사용자의 워크트리에서 빠져나온 복사본은 격리 설정과 관계없이 해당 워크트리를 편집하거나, 그 안에서 명령을 실행하거나, 그 안으로 들어가지 말라는 지시도 받습니다.465복사본이 [제자리에서 편집](#how-file-edits-are-isolated)하는 경우를 제외하고, Claude Code는 코드를 변경하기 전에 자체 워크트리를 생성하도록 복사본에 지시합니다. git 저장소 외부에서는 훅으로 생성된 워크트리에서 빠져나온 복사본만 이 지시를 받으며, [`WorktreeCreate` 훅](https://code.claude.com/docs/ko/hooks#worktreecreate)이 없으면 복사본은 제자리에서 편집합니다. 사용자의 워크트리에서 빠져나온 복사본은 격리 설정과 관계없이 해당 워크트리를 편집하거나, 그 안에서 명령을 실행하거나, 그 안으로 들어가지 말라는 지시도 받습니다.

462 466 

463복사본이 시작되는 위치는 현재 세션이 실행 중인 위치에 따라 다릅니다:467복사본이 시작되는 위치는 현재 세션이 실행 중인 위치에 따라 다릅니다:


467* 메인 작업 트리가 있는 저장소의 연결된 워크트리 안에서 세션을 시작한 경우, 복사본은 해당 메인 작업 트리에서 시작하며, 자체 워크트리 규칙은 동일하지만 브랜치 지시는 없습니다. 여기서도 확인 메시지는 `runs in the origin tree`로 끝납니다.471* 메인 작업 트리가 있는 저장소의 연결된 워크트리 안에서 세션을 시작한 경우, 복사본은 해당 메인 작업 트리에서 시작하며, 자체 워크트리 규칙은 동일하지만 브랜치 지시는 없습니다. 여기서도 확인 메시지는 `runs in the origin tree`로 끝납니다.

468* 베어 저장소 레이아웃의 워크트리 안에서 시작한 세션은 돌아갈 메인 작업 트리가 없으므로, 복사본은 제자리에 머물며 확인 메시지는 `edits this checkout`으로 끝납니다. 연결된 워크트리 안에 있지 않은 세션에서 워크트리 격리가 [꺼져 있을](#how-file-edits-are-isolated) 때도 같은 메모가 표시됩니다. 이 경우 복사본이 사용자가 열어 둔 파일을 편집하기 때문입니다.472* 베어 저장소 레이아웃의 워크트리 안에서 시작한 세션은 돌아갈 메인 작업 트리가 없으므로, 복사본은 제자리에 머물며 확인 메시지는 `edits this checkout`으로 끝납니다. 연결된 워크트리 안에 있지 않은 세션에서 워크트리 격리가 [꺼져 있을](#how-file-edits-are-isolated) 때도 같은 메모가 표시됩니다. 이 경우 복사본이 사용자가 열어 둔 파일을 편집하기 때문입니다.

469 473 

474##### 분기할 수 없는 세션

475 

470대체된 시스템 프롬프트나 `--tools` 허용 목록처럼 복사본이 상속하지 않는 시작 플래그로 시작한 세션은 분기할 수 없습니다. Claude Code는 부분 복사본을 만드는 대신 그 사실을 알립니다. 에이전트 뷰에서 디스패치된 세션은 정상적으로 분기됩니다. 복사본은 원래 세션과 동일한 [에이전트 정의](https://code.claude.com/docs/ko/sub-agents.md) 및 추가된 지시사항으로 시작됩니다.476대체된 시스템 프롬프트나 `--tools` 허용 목록처럼 복사본이 상속하지 않는 시작 플래그로 시작한 세션은 분기할 수 없습니다. Claude Code는 부분 복사본을 만드는 대신 그 사실을 알립니다. 에이전트 뷰에서 디스패치된 세션은 정상적으로 분기됩니다. 복사본은 원래 세션과 동일한 [에이전트 정의](https://code.claude.com/docs/ko/sub-agents.md) 및 추가된 지시사항으로 시작됩니다.

471 477 

472#### 백그라운드로 이동할 때 이어지는 것478#### 백그라운드로 이동할 때 이어지는 것

agents.md +1 −1

Details

32 32 

33> [!NOTE]33> [!NOTE]

34>34>

35> 여러 세션이나 서브에이전트를 동시에 실행하면 토큰 사용량이 증가합니다. 사용량 및 속도 제한 세부 정보는 [비용](https://code.claude.com/docs/ko/costs.md)을 참조하세요.35> 여러 세션이나 서브에이전트를 동시에 실행하면 토큰 사용량이 배로 늘어납니다. 사용량 및 속도 제한에 대한 자세한 내용은 [비용](https://code.claude.com/docs/ko/costs.md)을 참조하세요.

36 36 

37## 접근 방식 선택하기37## 접근 방식 선택하기

38 38 

Details

251| 기본 모델 | Opus 5.5, 예: `us-*` 영역의 `us.anthropic.claude-opus-5-5` |251| 기본 모델 | Opus 5.5, 예: `us-*` 영역의 `us.anthropic.claude-opus-5-5` |

252| 소형/빠른 모델 | Sonnet 4.5, 예: `us-*` 영역의 `us.anthropic.claude-sonnet-4-5-20250929-v1:0` |252| 소형/빠른 모델 | Sonnet 4.5, 예: `us-*` 영역의 `us.anthropic.claude-sonnet-4-5-20250929-v1:0` |

253 253 

254v2.1.280 이전에는 Amazon Bedrock의 기본 모델이 Opus 5로 기본값이 지정되었고 `opus` 별칭은 v2.1.219부터 Opus 5로 해결되었습니다.

255 

254세션 제목 생성과 같은 백그라운드 작업은 소형/빠른 모델(일반적으로 Haiku 클래스 모델)을 사용합니다. Amazon Bedrock에서 Claude Code는 모든 계정 또는 영역에서 Haiku를 사용하지 못할 수 있으므로 백그라운드 작업에 기본 Sonnet 모델을 사용합니다. 두 가지 선택이 어떤 모델이 이를 수행하는지 변경합니다.256세션 제목 생성과 같은 백그라운드 작업은 소형/빠른 모델(일반적으로 Haiku 클래스 모델)을 사용합니다. Amazon Bedrock에서 Claude Code는 모든 계정 또는 영역에서 Haiku를 사용하지 못할 수 있으므로 백그라운드 작업에 기본 Sonnet 모델을 사용합니다. 두 가지 선택이 어떤 모델이 이를 수행하는지 변경합니다.

255 257 

256* `--model`, `ANTHROPIC_MODEL` 또는 `model` 설정으로 기본 모델을 선택하면 백그라운드 작업이 해당 모델을 사용합니다. Claude Code가 [`ANTHROPIC_DEFAULT_MODEL`](https://code.claude.com/docs/ko/model-config#set-a-default-model-for-new-sessions)로 설정한 모델에서 세션을 시작하면 백그라운드 작업도 해당 모델을 사용합니다. `ANTHROPIC_DEFAULT_SONNET_MODEL` 없이 `ANTHROPIC_DEFAULT_OPUS_MODEL`을 설정하는 것도 선택으로 계산됩니다. 기본 제공 Sonnet 모델이 자체 Opus를 조종하는 계정에서 활성화되지 않을 수 있기 때문입니다.258* `--model`, `ANTHROPIC_MODEL` 또는 `model` 설정으로 기본 모델을 선택하면 백그라운드 작업이 해당 모델을 사용합니다. Claude Code가 [`ANTHROPIC_DEFAULT_MODEL`](https://code.claude.com/docs/ko/model-config#set-a-default-model-for-new-sessions)로 설정한 모델에서 세션을 시작하면 백그라운드 작업도 해당 모델을 사용합니다. `ANTHROPIC_DEFAULT_SONNET_MODEL` 없이 `ANTHROPIC_DEFAULT_OPUS_MODEL`을 설정하는 것도 선택으로 계산됩니다. 기본 제공 Sonnet 모델이 자체 Opus를 조종하는 계정에서 활성화되지 않을 수 있기 때문입니다.


260>262>

261> Opus 모델은 Sonnet 모델보다 토큰당 가격이 높으므로 기본 모델을 고정하지 않으면 Opus 요금으로 청구됩니다. Sonnet 4.5를 기본 모델로 사용하려면 `ANTHROPIC_MODEL`을 전체 모델 ID로 설정합니다. `ANTHROPIC_DEFAULT_SONNET_MODEL`로 기본값을 조종하고 `ANTHROPIC_DEFAULT_OPUS_MODEL`을 설정하지 않는 배포는 조종된 Sonnet 모델을 기본값으로 유지합니다.263> Opus 모델은 Sonnet 모델보다 토큰당 가격이 높으므로 기본 모델을 고정하지 않으면 Opus 요금으로 청구됩니다. Sonnet 4.5를 기본 모델로 사용하려면 `ANTHROPIC_MODEL`을 전체 모델 ID로 설정합니다. `ANTHROPIC_DEFAULT_SONNET_MODEL`로 기본값을 조종하고 `ANTHROPIC_DEFAULT_OPUS_MODEL`을 설정하지 않는 배포는 조종된 Sonnet 모델을 기본값으로 유지합니다.

262 264 

263v2.1.280 이전에는 Amazon Bedrock의 기본 모델이 Opus 5로 기본값이 지정되었고 `opus` 별칭은 v2.1.219부터 Opus 5로 해결되었습니다. v2.1.207부터 v2.1.218에서 Amazon Bedrock의 기본 모델은 Opus 4.8로 기본값이 지정되었고 `opus` 별칭은 Opus 4.8로 해결되었습니다.

264 

265모델을 추가로 사용자 정의하려면 다음 방법 중 하나를 사용합니다.265모델을 추가로 사용자 정의하려면 다음 방법 중 하나를 사용합니다.

266 266 

267```bash theme={null}267```bash theme={null}

artifacts.md +2 −2

Details

95 95 

96아티팩트를 선택한 다음 다음 키 중 하나를 누릅니다.96아티팩트를 선택한 다음 다음 키 중 하나를 누릅니다.

97 97 

98* **`Enter`**: 현재 세션에 이미 첨부되어 있으면 브라우저에서 열고, 첨부되어 있지 않으면 첨부합니다. v2.1.216 이전에는 `Enter`를 누르면 브라우저에서 열렸습니다98* **`Enter`**: 현재 세션에 이미 첨부되어 있으면 브라우저에서 열고, 첨부되어 있지 않으면 첨부합니다

99* **`o`**: 브라우저에서 엽니다99* **`o`**: 브라우저에서 엽니다

100* **`c`**: 링크를 복사합니다100* **`c`**: 링크를 복사합니다

101* **`d`**: [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md) 외부에서 사용하며, 확인을 거친 후 소유한 아티팩트를 영구적으로 삭제합니다. 해당 링크는 본인을 포함한 모든 사람에게 더 이상 작동하지 않습니다101* **`d`**: [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md) 외부에서 사용하며, 확인을 거친 후 소유한 아티팩트를 영구적으로 삭제합니다. 해당 링크는 본인을 포함한 모든 사람에게 더 이상 작동하지 않습니다


225 225 

226커넥터 기반 페이지가 렌더링되지만 조직의 보는 사람에 대해 실시간 섹션이 비어 있을 때, 다음 원인을 확인합니다:226커넥터 기반 페이지가 렌더링되지만 조직의 보는 사람에 대해 실시간 섹션이 비어 있을 때, 다음 원인을 확인합니다:

227 227 

228* **보는 사람이 커넥터를 연결하지 않았습니다**: 커넥터는 계정별이므로, 각 보는 사람은 페이지가 호출하는 모든 커넥터에 대한 자신의 연결이 필요합니다. claude.ai의 **설정 > 커넥터**에서 추가한 후 페이지를 다시 로드할 수 있습니다.228* **보는 사람이 커넥터를 연결하지 않았습니다**: 커넥터는 계정별이므로, 각 보는 사람은 페이지가 호출하는 모든 커넥터에 대한 자신의 연결이 필요합니다. claude.ai의 [**Customize > Connectors**](https://claude.ai/customize/connectors)에서 추가한 후 페이지를 다시 로드할 수 있습니다.

229* **보는 사람이 권한 요청을 거부했습니다**: 거부는 해당 페이지 로드의 나머지 기간 동안 지속됩니다. 페이지를 다시 로드하면 권한 요청이 다시 나타납니다.229* **보는 사람이 권한 요청을 거부했습니다**: 거부는 해당 페이지 로드의 나머지 기간 동안 지속됩니다. 페이지를 다시 로드하면 권한 요청이 다시 나타납니다.

230* **조직에 대해 커넥터 호출이 꺼져 있습니다**: 소유자가 관리자 설정에서 [**아티팩트 커넥터 활성화** 토글](#control-connector-calls-from-artifacts)을 제어합니다.230* **조직에 대해 커넥터 호출이 꺼져 있습니다**: 소유자가 관리자 설정에서 [**아티팩트 커넥터 활성화** 토글](#control-connector-calls-from-artifacts)을 제어합니다.

231* **페이지가 커넥터가 노출하지 않는 도구 이름을 호출합니다**: 영향을 받는 섹션은 당신을 포함한 모든 사람에게 비어 있습니다. 이는 페이지가 자신의 도구만 몇 개 노출하는 게이트웨이 스타일 커넥터 뒤의 개별 도구의 이름을 지정할 때 발생할 수 있습니다. Claude에게 페이지가 호출하는 도구 이름을 수정하고 다시 게시하도록 요청합니다.231* **페이지가 커넥터가 노출하지 않는 도구 이름을 호출합니다**: 영향을 받는 섹션은 당신을 포함한 모든 사람에게 비어 있습니다. 이는 페이지가 자신의 도구만 몇 개 노출하는 게이트웨이 스타일 커넥터 뒤의 개별 도구의 이름을 지정할 때 발생할 수 있습니다. Claude에게 페이지가 호출하는 도구 이름을 수정하고 다시 게시하도록 요청합니다.

best-practices.md +416 −352

Details

4 4 

5# Claude Code 모범 사례5# Claude Code 모범 사례

6 6 

7> 환경 구성부터 병렬 세션 확장까지 Claude Code를 최대한 활용하기 위한 팁과 패턴입니다.7> Claude Code를 더 효과적으로 활용하는 방법: Claude가 볼 수 없는 정보를 알려 주고, 실행할 확인 수단을 제공하고, 예외가 있어서는 안 되는 규칙을 강제합니다.

8 8 

9Claude Code는 에이전트 코딩 환경입니다. 질문에 답하고 기다리는 챗봇과 달리 Claude Code는 파일을 읽고, 명령을 실행하고, 변경을 수행하며, 당신이 지켜보거나 방향을 바꾸거나 완전히 떠나 있는 동안에도 자율적으로 문제를 해결할 수 있습니다.9Claude Code는 대부분의 경우 새 세션에서 입력한 첫 번째 평범한 프롬프트만으로도 별도의 설정 없이 올바르게 작동하도록 만들어졌습니다.

10 10 

11이는 작업 방식을 바꿉니다. 직접 코드를 작성하고 Claude에게 검토를 요청하는 대신, 원하는 것을 설명하면 Claude가 어떻게 구축할지 파악합니다. Claude는 탐색하고, 계획하고, 구현합니다.11예를 들면 다음과 같습니다.

12 12 

13하지만 이러한 자율성에도 학습 곡선이 있습니다. Claude는 이해해야 할 특정 제약 조건 내에서 작동합니다.13* 명령을 하나하나 승인하지 않아도 안전하게 실행되도록, 새 터미널 및 VS Code 세션은 [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)에서 시작되며, 위험한 작업은 실행 전에 분류기가 검토합니다.

14* 독립적인 작업이 병렬로 진행되는 동안 메인 대화가 집중된 상태를 유지하도록, Claude는 서브에이전트에 작업을 위임하고 꼭 필요할 때만 확인을 요청합니다.

15* 사용자가 직접 관리하지 않아도 긴 세션을 계속 이어갈 수 있도록, 컨텍스트 윈도우가 가득 차기 전에 대화가 자동으로 압축됩니다.

14 16 

15이 가이드는 Anthropic의 내부 팀과 다양한 코드베이스, 언어, 환경에서 Claude Code를 사용하는 엔지니어들 사이에서 효과적으로 입증된 패턴을 다룹니다. 에이전트 루프가 내부적으로 어떻게 작동하는지에 대해서는 [Claude Code 작동 방식](https://code.claude.com/docs/ko/how-claude-code-works.md)을 참조하십시오.17이 페이지에서는 기본값만으로 충분하지 않을 때 해야 할 일을 다룹니다. 이는 보통 프로젝트에 Claude가 코드만으로는 알 수 없는 지식, 규칙, 제약 조건이 있을 때 발생합니다.

16 18 

17***19* 누군가의 머릿속에만 있는 배포 프로세스

20* 절대 읽어서는 안 되는 파일

21* 어떤 작업이든 완료로 인정되기 전에 반드시 통과해야 하는 검사

22* 넘지 말아야 하는 예산

18 23 

19대부분의 모범 사례는 하나의 제약 조건을 기반으로 합니다: Claude의 context window가 빠르게 채워지고, 채워질수록 성능이 저하됩니다.24어떤 기본값도 프로젝트에 관한 이런 사항을 알 수 없으므로, 바로 이 지점에서 약간의 설정이 큰 효과를 발휘합니다.

20 25 

21Claude의 context window는 모든 메시지, Claude가 읽은 모든 파일, 모든 명령 출력을 포함한 전체 대화를 보유합니다. 그러나 이는 빠르게 채워질 수 있습니다. 단일 디버깅 세션이나 코드베이스 탐색만으로도 수만 개의 토큰을 생성하고 소비할 수 있습니다.26세션이 예상대로 진행되지 않을 때는 거의 항상 다음 중 하나에 해당합니다.

22 27 

23LLM 성능이 context가 채워질수록 저하되기 때문에 이는 중요합니다. context window가 거의 가득 차면 Claude는 이전 지시사항을 "잊기" 시작하거나 더 많은 실수를 할 수 있습니다. context window는 관리해야 할 가장 중요한 리소스입니다. 세션이 실제로 어떻게 채워지는지 보려면 [대화형 연습](https://code.claude.com/docs/ko/context-window.md)을 시청하여 시작 시 로드되는 것과 각 파일 읽기의 비용을 확인하십시오. [사용자 정의 상태 줄](https://code.claude.com/docs/ko/statusline.md)로 context 사용량을 지속적으로 추적하고, [토큰 사용량 감소](https://code.claude.com/docs/ko/costs.md#reduce-token-usage)에서 토큰 사용량을 줄이기 위한 전략을 참조하십시오.28* Claude가 의도와 다른 것을 만들었거나, 매 세션 시작마다 같은 사실을 다시 찾아내야 합니다. 저장소를 읽어서는 얻을 수 없는 정보가 부족한 것입니다. [Claude가 볼 수 없는 것 알려 주기](#tell-claude-what-it-cant-see)를 참조하십시오.

29* Claude가 완료했다고 했지만 실제로는 완전히 끝나지 않았습니다. 대개 자신의 작업을 확인할 방법이 없었기 때문입니다. [Claude에게 실행할 확인 수단 제공하기](#give-claude-a-check-to-run)를 참조하십시오.

30* Claude가 이 저장소에서 절대 일어나서는 안 되는 일을 했거나, 반드시 거쳐야 하는 단계를 건너뛰었습니다. 프롬프트만으로는 어느 쪽도 보장할 수 없습니다. [예외가 있어서는 안 되는 규칙 강제하기](#enforce-the-rules-that-cant-have-exceptions)를 참조하십시오.

31* Claude가 올바르게 처리했지만, 작업의 가치에 비해 너무 많은 시간, 토큰, 권한 프롬프트가 들었습니다. [기본값 변경하기](#change-a-default)를 참조하십시오.

24 32 

25***33[사용자 없이 Claude 실행하기](#let-claude-run-without-you)에서는 같은 네 가지 사항을 무인 실행에 적용하며, [더 이상 하지 않아도 되는 것](#what-you-can-stop-doing)에서는 최신 모델 덕분에 불필요해진 조언을 정리합니다.

26 34 

27## Claude에게 작업을 검증할 방법 제공하기35> [!NOTE]

28 

29> [!TIP]

30>36>

31> Claude가 실행할 수 있는 확인 방법을 제공하세요: 테스트, 빌드, 비교할 스크린샷. 이것이 당신이 지켜보는 세션과 떠나있는 세션의 차이입니다.37> 팀 전체를 위한 설정은 별도 페이지에서 다룹니다: [조직을 위한 Claude Code 설정](https://code.claude.com/docs/ko/admin-setup.md).

32 38 

33Claude는 작업이 완료된 것처럼 보일 때 멈춥니다. 실행할 수 있는 확인 방법이 없으면 "완료된 것처럼 보인다"는 것이 유일한 신호이며, 당신이 검증 루프가 됩니다: 모든 실수가 당신이 알아차릴 때까지 기다립니다. Claude에게 통과 또는 실패를 나타내는 것을 제공하면 루프가 자동으로 닫힙니다. Claude는 작업을 수행하고, 확인을 실행하고, 결과를 읽고, 확인이 통과할 때까지 반복합니다.39## 결정론적 지시와 비결정론적 지시

34 40 

35확인은 대화에서 Claude가 읽을 수 있는 신호를 반환하는 모든 것입니다: 테스트 스위트, 빌드 종료 코드, linter, 출력을 고정값과 비교하는 스크립트, 또는 디자인과 비교한 [브라우저 스크린샷](https://code.claude.com/docs/ko/chrome.md). [`/verify`](https://code.claude.com/docs/ko/skills#run-and-verify-your-app)를 Claude의 확인이 통과한 후 직접 실행하여 실행 중인 앱에 대한 변경 사항을 확인하세요.41Claude Code에 제공하는 모든 지시는 다음 중 하나입니다.

36 42 

37| 전략 | 이전 | 이후 |431. 비결정론적: 지시를 작성하면 Claude(모델)가 이를 읽습니다. 프롬프트, `CLAUDE.md`, 스킬이 여기에 해당합니다. 그런 다음 모델이 이 정보로 무엇을 할지 결정합니다. 모델은 대개 명령을 따르며, 최신 모델은 많은 컨텍스트 없이도 의도를 잘 파악하지만, 지시를 따른다는 *보장*은 없습니다. 여전히 어떤 일을 하지 않기로 하거나 다른 일을 할 수 있습니다.

38| - | - | - |442. 결정론적: 지시를 구성하면 Claude Code(하네스)가 이를 *반드시* 실행합니다. 훅, 거부 규칙, 관리형 설정이 여기에 해당합니다. Claude Code는 모델이 무엇을 하기로 결정했든 관계없이 매번 이를 적용합니다.

39| **검증 기준 제공** | *"이메일 주소를 검증하는 함수를 구현하세요"* | *"validateEmail 함수를 작성하세요. 예제 테스트 케이스: [user@example.com](mailto:user@example.com)은 true, invalid는 false, [user@.com](mailto:user@.com)은 false입니다. 구현 후 테스트를 실행하세요"* |

40| **UI 변경 사항을 시각적으로 검증** | *"대시보드를 더 좋게 보이게 하세요"* | *"\[스크린샷 붙여넣기] 이 디자인을 구현하세요. 결과의 스크린샷을 찍고 원본과 비교하세요. 차이점을 나열하고 수정하세요"* |

41| **증상이 아닌 근본 원인 해결** | *"빌드가 실패하고 있습니다"* | *"빌드가 이 오류로 실패합니다: \[오류 붙여넣기]. 수정하고 빌드가 성공하는지 확인하세요. 근본 원인을 해결하고 오류를 억제하지 마세요"* |

42 45 

43확인이 존재하면, 그것이 중지를 얼마나 엄격하게 제어할지 결정하세요:46Claude Code의 대부분의 기능은 두 가지 형태로 모두 제공됩니다.

44 47 

45* **한 번의 프롬프트에서**: Claude에게 확인을 실행하고 같은 메시지에서 반복하도록 요청하세요. 위의 표와 같습니다.48| | 비결정론적 (Claude가 결정) | 결정론적 (Claude Code가 강제) |

46* **세션 전체에서**: 확인을 [`/goal` 조건](https://code.claude.com/docs/ko/goal)으로 설정하세요. 별도의 평가자가 매 턴 후에 다시 확인하고 Claude는 조건이 충족될 때까지 계속 작업합니다. Claude가 멈추면 Claude Code는 결국 목표가 여전히 설정된 상태로 실행을 중지합니다 — [/goal 평가가 어떻게 작동하는지](https://code.claude.com/docs/ko/goal.md#how-evaluation-works) 참조하세요.49| :- | :- | :- |

47* **결정론적 게이트로**: [Stop hook](https://code.claude.com/docs/ko/hooks.md#stop)이 확인을 스크립트로 실행하고 통과할 때까지 턴이 끝나지 않도록 차단합니다. [Stop input](https://code.claude.com/docs/ko/hooks.md#stop-input)은 연속 차단의 상한을 다룹니다.50| 무엇을 할지 | 프롬프트, `CLAUDE.md`, Claude가 스스로 사용하는 스킬 | 훅, 그리고 사용자만 시작할 수 있는 스킬 |

48* **두 번째 의견으로**: [검증 서브에이전트](https://code.claude.com/docs/ko/sub-agents.md) 또는 자신의 발견을 확인하는 [동적 워크플로우](https://code.claude.com/docs/ko/workflows.md)가 새로운 모델로 결과를 반박하려고 시도하므로, 작업을 수행하는 에이전트가 채점하는 것이 아닙니다.51| 무엇에 접근할 수 있는지 | 자동 모드의 분류기 | 거부 규칙, [strict 모드](https://code.claude.com/docs/ko/sandboxing.md#turn-off-the-retry-with-strict-sandbox-mode)의 샌드박스, 관리형 설정 |

52| 언제 완료되는지 | 증거 요청, `/goal`, `/code-review` | 테스트, 타입 검사, `Stop` 훅, CI |

53| 얼마나 소비하는지 | effort 수준, Claude 자체의 작업 속도 | `-p`와 함께 쓰는 `--max-turns` 또는 [`--max-budget-usd`](https://code.claude.com/docs/ko/cli-reference), 직접 설정한 [지출 한도](https://code.claude.com/docs/ko/costs.md) |

54| 최종 결정권은 누구에게 있는지 | Claude가 수행한 작업에 대한 요약 | 브랜치 보호, 병합을 승인하는 사람 |

49 55 

50각 단계는 설정을 주의력으로 교환합니다. 프롬프트 버전은 오늘 모든 작업에서 작동합니다. `/goal` 및 Stop hook 버전은 당신이 없어도 무인 실행이 올바르게 완료되도록 하는 것입니다.56대부분의 경우에는 Claude가 결정하도록 하는 것이 좋습니다. 거의 모든 지침에는 예외가 있으며, 최신 모델은 눈앞의 코드를 읽고 지침이 상황에 맞는지 판단하는 데 능숙합니다. 실제 코드를 보고 있는 Claude가 미리 작성해 둔 규칙보다 대개 더 나은 판단을 내릴 수 있습니다.

51 57 

52Claude가 성공을 주장하기보다는 증거를 보여주도록 하세요: 테스트 출력, 실행한 명령과 반환된 내용, 또는 결과의 스크린샷. 증거를 검토하는 것이 검증을 직접 다시 실행하는 것보다 빠르며, 당신이 지켜보지 않은 세션에서도 작동합니다.58결정론적 방식은 모델이 무엇을 결정하든 특정 일이 *항상* 일어나도록(또는 절대 일어나지 않도록) 보장하고 싶을 때 사용합니다. 대단한 일일 필요는 없습니다. 자동 모드는 이미 프로덕션 배포나 다른 사람의 작업을 덮어쓰는 force push 같은 [심각한 작업을 차단합니다](https://code.claude.com/docs/ko/permission-modes.md#what-the-classifier-blocks-by-default). 대개는 *해당* 프로젝트에 특화된 것이며, 원하는 만큼 세부적일 수 있습니다.

53 59 

54***60* `src/gen/`의 생성된 클라이언트는 절대 편집하지 않기

61* 파일을 생성한 후에는 항상 라이선스 헤더 스크립트 실행하기

55 62 

56## 먼저 탐색하고, 그 다음 계획하고, 그 다음 코드 작성하기63둘 중 어느 것이든 `CLAUDE.md`나 프롬프트에 한 줄로 적을 수 있었고, Claude는 거의 매번 이를 따랐을 것입니다. 하지만 아무리 강하게 표현하더라도, 특정 턴에서 Claude가 그 줄을 따를지는 여전히 Claude의 판단에 달려 있습니다.

57 64 

58> [!TIP]65> [!TIP]

59>66>

60> 연구 및 계획을 구현과 분리하여 잘못된 문제를 해결하는 것을 피하십시오.67> `CLAUDE.md`의 어떤 줄에 계속 강조를 추가하는데도 Claude가 여전히 놓친다면, 그 줄은 훅으로 옮겨야 한다는 신호입니다. 반대도 마찬가지입니다. 단순한 선호 사항에 대한 훅이 있다면 삭제하고 Claude가 결정하도록 하십시오.

61 68 

62Claude가 바로 코딩으로 뛰어들도록 하면 잘못된 문제를 해결하는 코드가 생성될 수 있습니다. [Plan Mode](https://code.claude.com/docs/ko/permission-modes.md#analyze-before-you-edit-with-plan-mode)를 사용하여 탐색을 실행과 분리하십시오.69## Claude가 볼 수 없는 것 알려 주기

63 70 

64권장 워크플로우에는 4가지 단계가 있습니다:71> [!TIP]

72>

73> Claude가 저장소를 읽어서 찾을 수 없는 것, 또는 그렇지 않으면 매 세션마다 다시 찾아내는 데 시간을 써야 하는 것만 적어 두십시오.

65 74 

66**1. 탐색**75Claude는 모든 작업을 코드를 읽는 것으로 시작하며, 최신 모델은 이 일에 *매우* 능숙합니다. 파일 구조, 규칙, 테스트 프레임워크, 기존 컴포넌트의 구성 방식을 찾아내며, 대개 사용자가 설명하는 것보다 더 빠릅니다. 즉, Claude를 위해 적어 두고 싶은 내용 대부분을 Claude는 이미 알고 있습니다.

67 76 

68`Shift+Tab`을 눌러 Plan Mode를 입력하십시오. 상태 표시줄에 `⏸ plan mode on`이 표시될 때까지 누르거나, `claude --permission-mode plan`으로 세션을 시작하십시오. Claude는 파일을 읽고 변경을 수행하지 않고 질문에 답합니다.77Claude가 찾을 수 없는 것은 애초에 저장소에 없었던 정보입니다.

69 78 

70```txt title="claude (plan mode)" wrap theme={null}79* 팀이 회의에서 내린 결정

71read /src/auth and understand how we handle sessions and login.80* 한 사람의 머릿속에만 있는 배포 프로세스

72also look at how we manage environment variables for secrets.81* 통합 테스트에 필요한 환경 변수

73```

74 82 

75**2. 계획**83저장소에 *있기는* 하지만 찾으려면 몇 분간 파고들어야 하는 정보도 있으며, Claude는 매 세션 시작마다 그 작업을 다시 해야 합니다.

76 84 

77Claude에게 상세한 구현 계획을 작성하도록 요청하십시오.85Claude를 위해 무언가를 적기 전에 해 볼 만한 좋은 테스트가 있습니다.

78 86 

79```txt title="claude (plan mode)" wrap theme={null}871. 코드를 읽어서 이것을 찾을 수 있는가?

80I want to add Google OAuth. What files need to change?882. 실제로 찾아보러 갈 것인가?

81What's the session flow? Create a plan.

82```

83 89 

84`Ctrl+G`를 눌러 Claude가 진행하기 전에 텍스트 편집기에서 계획을 열어 직접 편집하십시오.90둘 다 '예'라면 적지 마십시오.

85 91 

86**3. 구현**92### 구체적인 프롬프트 작성하기

87 93 

88계획을 승인하거나 `Shift+Tab`을 눌러 Plan Mode를 종료한 다음, Claude가 코드를 작성하도록 하여 계획에 대해 검증하십시오.94구체적인 프롬프트가 도움이 되는 것도 같은 이유입니다. Claude가 아직 갖고 있지 않은 정보를 제공하기 때문입니다. 파일 이름을 지정하고, 증상을 설명하고, "수정됨"이 어떤 모습인지 처음부터 밝히면 대개 나중에 한 차례의 수정을 줄일 수 있습니다.

89 95 

90```txt title="claude" wrap theme={null}96두 가지 합리적인 접근 방식 사이의 선호도도 마찬가지입니다. Claude는 코드에서 이를 읽어 낼 수 없으므로, 어느 쪽을 택할지 중요하다면 처음부터 말하십시오.

91implement the OAuth flow from your plan. write tests for the

92callback handler, run the test suite and fix any failures.

93```

94 97 

95**4. 커밋**98| 이렇게 하는 대신 | 이렇게 해 보십시오 |

99| :- | :- |

100| *"로그인 버그 수정해 줘"* | *"사용자들이 세션 시간 초과 후 로그인이 실패한다고 보고했어. src/auth/의 토큰 새로 고침을 살펴보고, 문제를 재현하는 실패하는 테스트를 작성한 다음 수정해 줘"* |

101| *"캘린더 위젯 추가해 줘"* | *"HotDogWidget.php의 패턴을 따라서 월을 선택하고 연도 간에 페이지를 넘길 수 있는 캘린더 위젯을 만들어 줘. 새 라이브러리는 쓰지 마"* |

96 102 

97Claude에게 설명적인 메시지로 커밋하고 PR을 생성하도록 요청하십시오.103Claude에게 필요한 것을 이미 가지고 있다면, 설명하는 대신 직접 넘겨주십시오.

98 104 

99```txt title="claude" wrap theme={null}105* 파일: `@`와 경로를 입력하여 메시지에 [파일 내용을 포함](https://code.claude.com/docs/ko/common-workflows.md#reference-files-and-directories)합니다.

100commit with a descriptive message and open a PR106* 이미지: 디자인이나 오류의 스크린샷을 프롬프트에 붙여 넣습니다.

101```107* 명령 출력: 셸에서 `cat error.log | claude -p "what's going on here"`로 파이프합니다.

102 108 

103Plan Mode는 유용하지만 오버헤드도 추가합니다.109`think step by step`나 `be thorough` 같은 문구는 키워드가 아니라 일반적인 프롬프트 텍스트입니다. Claude가 얼마나 깊이 생각할지를 조절하는 주요 수단은 [effort 수준](https://code.claude.com/docs/ko/model-config.md#adjust-effort-level)이며, [모델과 effort 변경하기](#change-the-model-and-effort)에서 다룹니다. 이런 표현은 effort 설정 범위 안에서 Claude를 약간 유도할 수는 있지만, 설정 수준을 넘어서게 하지는 못합니다.

104 110 

105범위가 명확하고 수정이 작은 작업(예: 오타 수정, 로그 줄 추가 또는 변수 이름 바꾸기)의 경우 Claude에게 직접 수행하도록 요청하십시오.111여전히 도움이 되는 문구 하나는 `be ambitious`입니다. Claude는 사용자가 얼마나 기대하는지 알 수 없기 때문에 요청을 보수적으로 해석하고 요청을 충족하는 최소한의 것을 만드는 경향이 있습니다. 엣지 케이스를 처리하고 자연스러운 후속 작업까지 포함한 더 완전한 버전을 원한다면 그렇게 말하십시오.

106 112 

107계획은 접근 방식이 불확실할 때, 변경이 여러 파일을 수정할 때, 또는 수정 중인 코드에 익숙하지 않을 때 가장 유용합니다. diff를 한 문장으로 설명할 수 있다면 계획을 건너뛰십시오.113```text theme={null}

114build the settings page from the mockup. be ambitious: empty and error states, the save flow wired up, keyboard navigation, not just the layout

115```

108 116 

109***117이는 얼마나 깊이 생각할지가 아니라, 사용자만 알고 있는 범위를 Claude에게 알려 주는 것입니다.

110 118 

111## 프롬프트에서 구체적인 컨텍스트 제공하기119그리고 특정 문제를 수정하는 것이 아니라 탐색 중이라면 `what would you improve in this file?` 같은 모호한 프롬프트도 전혀 문제없습니다. 진행하면서 조금 더 수정하게 되겠지만, 그것이 감수할 부분입니다.

112 120 

113> [!TIP]121### 먼저 Claude와 브레인스토밍하기

114>

115> 지시사항이 정확할수록 필요한 수정이 적습니다.

116 122 

117Claude는 의도를 추론할 수 있지만 마음을 읽을 수는 없습니다. 특정 파일을 참조하고, 제약 조건을 언급하고, 예제 패턴을 지적하십시오.123아직 원하는 것이 정확히 무엇인지 모르더라도 프롬프트를 입력하기 전에 모든 것을 정리할 필요는 없습니다. 대신 Claude에게 인터뷰를 요청하십시오.

118 124 

119| 전략 | 이전 | 이후 |125```text theme={null}

120| - | - | - |126I want to add rate limiting to the public API but haven't thought it through yet. Interview me until you could write the spec, then write it to SPEC.md.

121| **작업 범위 지정.** 어떤 파일, 어떤 시나리오, 테스트 선호도를 지정하십시오. | *"foo.py에 대한 테스트 추가"* | *"사용자가 로그아웃된 경우의 엣지 케이스를 다루는 foo.py에 대한 테스트를 작성하세요. 모의 객체를 피하세요."* |127```

122| **소스 지적.** Claude를 질문에 답할 수 있는 소스로 안내하십시오. | *"ExecutionFactory가 왜 그렇게 이상한 API를 가지고 있습니까?"* | *"ExecutionFactory의 git 히스토리를 살펴보고 API가 어떻게 되었는지 요약하세요"* |

123| **기존 패턴 참조.** Claude를 코드베이스의 패턴으로 지적하십시오. | *"캘린더 위젯 추가"* | *"홈 페이지에서 기존 위젯이 어떻게 구현되는지 살펴보고 패턴을 이해하세요. HotDogWidget.php는 좋은 예입니다. 패턴을 따라 사용자가 월을 선택하고 앞뒤로 이동하여 연도를 선택할 수 있는 새로운 캘린더 위젯을 구현하세요. 코드베이스에서 이미 사용 중인 라이브러리 외에는 라이브러리를 사용하지 않고 처음부터 빌드하세요."* |

124| **증상 설명.** 증상, 가능한 위치, "수정됨"의 모습을 제공하십시오. | *"로그인 버그 수정"* | *"사용자가 세션 시간 초과 후 로그인이 실패한다고 보고합니다. src/auth/의 인증 흐름, 특히 토큰 새로 고침을 확인하세요. 문제를 재현하는 실패한 테스트를 작성한 다음 수정하세요"* |

125 128 

126모호한 프롬프트는 탐색 중이고 과정을 수정할 여유가 있을 때 유용할 수 있습니다. `"이 파일에서 무엇을 개선하시겠습니까?"`와 같은 프롬프트는 당신이 생각하지 못했을 것들을 드러낼 수 있습니다.129Claude는 아직 확정하지 않은 부분에 대해 객관식 질문을 합니다. 사용자별 한도와 키별 한도 중 무엇을 쓸지, 한도를 초과한 요청은 어떻게 처리할지, 무엇이 범위 밖인지 등입니다. 답변이 모여 사양이 될 때까지 질문을 계속합니다.

127 130 

128### 풍부한 콘텐츠 제공하기131`SPEC.md`가 만들어지면 새 세션을 시작하여 이를 바탕으로 구현하십시오. 그러면 깨끗한 컨텍스트와 문서화된 완료 기준을 가지고 구현을 시작할 수 있습니다. 이 파일은 나중에 [Claude에게 실행할 확인 수단 제공하기](#give-claude-a-check-to-run)에서 리뷰어에게 가리킬 파일이기도 합니다.

129 132 

130> [!TIP]133### CLAUDE.md를 짧게 유지하기

131>

132> `@`를 사용하여 파일을 참조하거나, 스크린샷/이미지를 붙여넣거나, 데이터를 직접 파이프하십시오.

133 134 

134여러 가지 방법으로 Claude에게 풍부한 데이터를 제공할 수 있습니다:135Claude Code는 모든 세션에 [`CLAUDE.md`](https://code.claude.com/docs/ko/memory)를 로드합니다. 즉, 파일의 모든 줄이 관련 여부와 관계없이 *모든* 작업에서 Claude의 주의력을 조금씩 차지합니다. 그래서 이 파일은 Claude가 코드 자체에서 파악할 수 없는 내용만 담을 때 가장 효과적입니다.

135 136 

136* **`@`로 파일 참조** 코드가 어디에 있는지 설명하는 대신. Claude는 응답하기 전에 파일을 읽습니다.137* 이 저장소에서 작업을 확인하는 방법: 정확한 테스트, 타입 검사, 린트 명령과 단일 테스트 파일을 실행하는 방법

137* **이미지를 직접 붙여넣기**. 프롬프트에 이미지를 복사/붙여넣기 또는 드래그 앤 드롭하십시오.138* 코드가 오해를 일으키는 부분: 곳곳에 있지만 새 코드에서는 따라 하면 안 되는 오래된 패턴, 사용되지 않는 것처럼 보이지만 실제로는 사용되는 디렉터리

138* **문서 및 API 참조에 URL 제공**. `/permissions`를 사용하여 자주 사용되는 도메인을 허용 목록에 추가하십시오.139* 저장소에 없는 결정 사항: 팀이 어떤 오류 헬퍼를 쓰기로 정했는지, 배포가 어떻게 이루어지는지, 무엇이 마이그레이션 리뷰를 필요로 하는지

139* **데이터 파이프** `cat error.log | claude -p "explain this error"`를 실행하여 파일 내용을 직접 전송하십시오.140* 이미 두 번 이상 수정해야 했던 모든 것

140* **Claude가 필요한 것을 가져오도록 하기**. Bash 명령, MCP 도구 또는 파일 읽기를 사용하여 Claude가 자체적으로 컨텍스트를 가져오도록 하십시오.

141 141 

142***142이 테스트를 통과한 `CLAUDE.md`는 짧게 유지됩니다.

143 143 

144## 환경 구성144```markdown CLAUDE.md theme={null}

145# Commands

146- Install: pnpm install

147- Run one test file: pnpm vitest run path/to/file.test.ts

148- Typecheck: pnpm tsc --noEmit

145 149 

146몇 가지 설정 단계를 거치면 모든 세션에서 Claude Code를 훨씬 더 효과적으로 사용할 수 있습니다. 확장 기능의 전체 개요와 각 기능을 언제 사용해야 하는지는 [Claude Code 확장](https://code.claude.com/docs/ko/features-overview.md)을 참조하십시오.150# Conventions

151- Use the error helpers in src/lib/errors.ts, never throw raw strings

152- src/legacy/ is still live but don't copy its patterns into new code

147 153 

148### 효과적인 CLAUDE.md 작성154# Gotchas

155- Integration tests need DATABASE_URL set, see .env.example

156```

149 157 

150> [!TIP]158세션에서 `/context`를 실행하여 Claude가 파일을 로드했는지 확인하십시오.

151>

152> `/init`을 실행하여 현재 프로젝트 구조를 기반으로 시작용 CLAUDE.md 파일을 생성한 다음, 시간을 두고 다듬으십시오.

153 159 

154CLAUDE.md는 Claude가 모든 대화를 시작할 때 읽는 특별한 파일입니다. Bash 명령, 코드 스타일, 워크플로 규칙을 포함하십시오. 이를 통해 Claude는 코드만으로는 추론할 수 없는 지속적인 컨텍스트를 얻습니다.160타입 검사 줄에는 명령만 있다는 점에 주목하십시오. Claude는 작업하면서 자신의 작업을 확인할 수 있도록 명령을 알아야 합니다. Claude가 작업을 마치기 전에 타입 검사 통과를 Claude Code가 *강제*하도록 하려면 [`Stop` 훅](#enforce-the-check-with-a-stop-hook)을 사용해야 합니다. 이 파일에 `Always typecheck before you finish` 같은 줄을 넣으면 대부분은 작동하지만 매번 작동하지는 않습니다.

155 161 

156CLAUDE.md 파일에 필수 형식은 없지만, 짧고 사람이 읽기 쉽게 유지하십시오. 예를 들면 다음과 같습니다.162파일을 처음부터 작성할 필요는 없습니다.

157 163 

158```markdown CLAUDE.md theme={null}164* `/init`은 코드베이스에서 시작 버전을 생성합니다. 거기서부터는 대부분 줄을 삭제하는 작업입니다. [메모리 가이드](https://code.claude.com/docs/ko/memory.md#write-effective-instructions)에서는 200줄 미만으로 유지할 것을 권장합니다.

159# Code style165* `/doctor`는 Claude가 [이미 코드에서 파악할 수 있는](https://code.claude.com/docs/ko/memory.md#my-claude-md-is-too-large) 내용에 대한 삭제를 제안합니다.

160- Use ES modules (import/export) syntax, not CommonJS (require)166* `/doctor prompt-audit`은 이전 모델을 위해 작성된 지시, 더 이상 존재하지 않는 파일을 가리키는 지시, [서로 모순되는](https://code.claude.com/docs/ko/memory.md#audit-your-instruction-files) 지시를 표시합니다.

161- Destructure imports when possible (eg. import { foo } from 'bar')

162 167 

163# Workflow168개인 선호 사항은 `CLAUDE.md` 대신 `CLAUDE.local.md`에 넣고, 저장소에 포함되지 않도록 이 파일을 `.gitignore`에 추가합니다.

164- Be sure to typecheck when you're done making a series of code changes

165- Prefer running single tests, and not the whole test suite, for performance

166```

167 169 

168`/context`를 실행하여 Claude가 파일을 로드했는지 확인하십시오. CLAUDE.md는 모든 세션에서 로드되므로 광범위하게 적용되는 내용만 포함하십시오. 가끔씩만 관련되는 도메인 지식이나 워크플로에는 대신 [스킬](https://code.claude.com/docs/ko/skills.md)을 사용하십시오. Claude는 스킬을 필요할 때 로드하므로 모든 대화가 비대해지지 않습니다.170> [!NOTE]

171>

172> `CLAUDE.md`에 *분명히 있는* 줄을 Claude가 계속 무시한다면, IMPORTANT를 추가해도 해결되지 않을 가능성이 높습니다. 파일이 너무 길어져서 그 줄이 묻히고 있거나, 그 줄이 예외가 있어서는 안 되는 규칙인 경우입니다. 후자라면 [훅](#enforce-the-rules-that-cant-have-exceptions)으로 옮겨야 합니다.

169 173 

170간결하게 유지하십시오. 각 줄마다 *"이 줄을 제거하면 Claude가 실수를 하게 될까?"* 라고 자문해 보십시오. 그렇지 않다면 삭제하십시오. CLAUDE.md 파일이 비대해지면 Claude가 실제 지침을 무시하게 됩니다!174### 코드베이스의 특정 부분에만 규칙 적용하기

171 175 

172| ✅ 포함할 것 | ❌ 제외할 것 |176규칙이 코드베이스의 한 부분에서만 중요하다면, `paths:` 필터와 함께 [`.claude/rules/`](https://code.claude.com/docs/ko/memory#path-specific-rules)에 넣어 Claude가 실제로 그 부분에서 작업할 때만 로드되도록 하십시오. 예를 들어 다음 `.claude/rules/api.md`는 `src/api/` 아래의 TypeScript 파일에 대해 로드됩니다.

173| - | - |

174| Claude가 추측할 수 없는 Bash 명령 | Claude가 코드를 읽어서 파악할 수 있는 모든 것 |

175| 기본값과 다른 코드 스타일 규칙 | Claude가 이미 알고 있는 표준 언어 규칙 |

176| 테스트 지침 및 선호하는 테스트 러너 | 상세한 API 문서(대신 문서 링크 제공) |

177| 저장소 에티켓(브랜치 이름 지정, PR 규칙) | 자주 변경되는 정보 |

178| 프로젝트에 특화된 아키텍처 결정 사항 | 긴 설명이나 튜토리얼 |

179| 개발 환경의 특이 사항(필수 환경 변수) | 코드베이스의 파일별 설명 |

180| 흔한 함정이나 자명하지 않은 동작 | "깨끗한 코드를 작성하라"와 같은 자명한 관행 |

181 177 

182이를 금지하는 규칙이 있는데도 Claude가 원하지 않는 작업을 계속한다면, 파일이 너무 길어서 규칙이 묻히고 있을 가능성이 높습니다. Claude가 CLAUDE.md에 답이 있는 질문을 한다면 표현이 모호할 수 있습니다. CLAUDE.md를 코드처럼 다루십시오. 문제가 생기면 검토하고, 정기적으로 정리하며, Claude의 동작이 실제로 바뀌는지 관찰하여 변경 사항을 테스트하십시오. 체크인된 CLAUDE.md의 경우 [`/doctor`](https://code.claude.com/docs/ko/commands#all-commands)를 실행하면 Claude가 코드베이스에서 도출할 수 있는 내용에 대한 삭제를 제안합니다.178```markdown .claude/rules/api.md theme={null}

179---

180paths:

181 - "src/api/**/*.ts"

182---

183- Validate request bodies with the zod schemas in src/api/schemas/, don't hand-roll checks

184- Every new endpoint needs an entry in openapi.yaml, CI fails without it

185```

183 186 

184Claude가 특정 지침 하나를 계속 건너뛴다면 해당 줄에만 "IMPORTANT"와 같은 강조를 추가하십시오. 많은 줄을 강조하면 어느 것도 눈에 띄지 않습니다. 팀이 기여할 수 있도록 CLAUDE.md를 git에 체크인하십시오. 이 파일의 가치는 시간이 지날수록 누적됩니다.187### 팀 절차를 스킬에 넣기

185 188 

186CLAUDE.md 파일은 `@path/to/import` 구문을 사용하여 추가 파일을 가져올 수 있습니다. 가져오기 규칙과 CLAUDE.md 파일을 둘 수 있는 위치는 [CLAUDE.md 파일](https://code.claude.com/docs/ko/memory.md#claude-md-files)을 참조하십시오.189더 뛰어난 모델은 엔지니어링에 대해 더 많이 알고 있지만, *해당* 팀이 릴리스를 어떻게 하는지, 장애 대응 런북에 무엇이 적혀 있는지, API 문서를 어떻게 작성하기를 원하는지는 알지 못합니다. 이런 종류의 지식은 [스킬](https://code.claude.com/docs/ko/skills.md)에 넣습니다. 스킬은 `.claude/skills/<name>/SKILL.md`에 저장된 절차나 팀 지식입니다.

187 190 

188### 권한 구성191이런 용도에서는 스킬이 `CLAUDE.md`보다 컨텍스트 부담도 적습니다. Claude가 스스로 시작할 수 있는 스킬의 경우, Claude는 모든 세션에서 이름과 설명만 보고, 작업에 필요할 때만 [전체 파일을 읽습니다](https://code.claude.com/docs/ko/skills.md#skill-content-lifecycle). 스킬에 들어 있는 긴 릴리스 절차는 `CLAUDE.md`에 있을 때처럼 관련 없는 버그 수정 작업에 부담을 주지 않습니다.

189 192 

190> [!TIP]193> [!NOTE]

191>194>

192> 제어권을 포기하지 않으면서 프롬프트를 줄이려면 `/permissions`로 신뢰하는 도구를 사전 승인하고, `/sandbox`로 샌드박스 처리된 명령이 묻지 않고 실행되도록 하십시오. 편집과 명령을 직접 승인하려면 Manual 모드로 전환하십시오.195> `CLAUDE.md`의 원칙은 스킬에도 적용됩니다. Claude가 스스로 찾을 수 없는 것만 적어 두십시오.

193 196 

194Claude Code v2.1.283 이상에서는 자동 모드가 대화형 터미널 및 VS Code 세션의 [기본 제공 시작 권한 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)입니다. 별도의 분류기 모델이 사용자 대신 대부분의 작업을 검토하고, 범위 확대, 알 수 없는 인프라, 악의적인 콘텐츠에 의해 유도된 작업 등 위험해 보이는 작업만 차단합니다. 이전 버전에서는 자동 모드가 Pro, Max, Team 플랜에서만 기본 제공 시작 권한 모드입니다.197실제로 릴리스를 만드는 것처럼 부수 효과가 있는 워크플로에는 `disable-model-invocation: true`를 추가하십시오. 그러면 Claude는 [스스로 스킬을 시작할 수 없으며](https://code.claude.com/docs/ko/skills.md#control-who-invokes-a-skill), 사용자가 직접 `/release`를 입력할 때만 실행됩니다. `.claude/skills/release/SKILL.md`로 저장하면 다음과 같은 모습일 수 있습니다.

195 198 

196Manual 모드에서 Claude Code는 파일 쓰기, Bash 명령, MCP 도구 등 시스템을 수정할 수 있는 작업 전에 확인을 요청합니다. 이는 안전하지만 번거롭습니다. 열 번째 승인쯤 되면 검토하기보다는 그냥 클릭하게 됩니다. 다음 두 가지 도구는 Manual 모드에서 이러한 중단을 줄여 주며 자동 모드에서도 적용됩니다.199```markdown .claude/skills/release/SKILL.md theme={null}

200---

201name: release

202description: Cut a new release. Bumps the version, writes the changelog entry, tags it and pushes the tag so CI can publish.

203disable-model-invocation: true

204---

2051. Make sure you're on main with a clean tree. If not, stop and ask.

2062. Run `pnpm changeset version` and commit the result.

2073. Summarize the PRs merged since the last tag into CHANGELOG.md, one line each, user-facing changes only.

2084. Tag `v<new version>` and push the tag. CI publishes from there, never publish from your machine.

209```

197 210 

198* **권한 허용 목록**: `npm run lint`나 `git commit`처럼 안전하다고 알고 있는 특정 도구를 허용합니다211### Claude에게 필요한 도구 연결하기

199* **샌드박싱**: 파일 시스템 및 네트워크 접근을 제한하는 OS 수준의 격리를 활성화하여, Claude가 정의된 경계 내에서 더 자유롭게 작업할 수 있도록 합니다

200 212 

201[권한 모드](https://code.claude.com/docs/ko/permission-modes.md), [권한 규칙](https://code.claude.com/docs/ko/permissions.md), [샌드박싱](https://code.claude.com/docs/ko/sandboxing.md)에 대해 자세히 알아보십시오.213Claude가 볼 수 없는 정보 중 일부는 이슈 트래커나 오류 대시보드처럼 아예 다른 시스템에 있습니다. 해당 시스템에 CLI가 있다면 대개 그것이 가장 쉬운 연결 방법입니다. 예를 들어 `gh`가 설치되어 있고 로그인되어 있으면, Claude는 별다른 설명 없이도 풀 리퀘스트를 열고 리뷰 댓글을 읽습니다. Claude가 처음 보는 CLI라면 `--help`를 알려 주는 것으로 충분합니다.

202 214 

203### CLI 도구 사용215CLI가 없는 시스템에는 [MCP](https://code.claude.com/docs/ko/mcp.md)가 있습니다. 셸에서 서버를 추가합니다.

204 216 

205> [!TIP]217```bash theme={null}

206>218claude mcp add --transport http notion https://mcp.notion.com/mcp

207> 외부 서비스와 상호 작용할 때 `gh`, `aws`, `gcloud`, `sentry-cli`와 같은 CLI 도구를 사용하도록 Claude Code에 지시하십시오.219```

220 

221그러면 서버가 세션 안의 `/mcp`에 표시됩니다. 연결된 서버는 사용하지 않을 때도 도구 이름과 지시를 컨텍스트에 추가하므로, 그곳에서 [필요 없는 서버를 끄는](https://code.claude.com/docs/ko/mcp.md#disable-a-server-without-removing-it) 것이 좋습니다.

222 

223그리고 타입 언어로 작업한다면, [코드 인텔리전스 플러그인](https://code.claude.com/docs/ko/plugins/code-intelligence.md)을 사용하면 Claude가 여러 파일을 읽으며 정의를 찾는 대신 바로 정의로 이동할 수 있습니다.

208 224 

209CLI 도구는 외부 서비스와 상호 작용하는 가장 컨텍스트 효율적인 방법입니다. GitHub를 사용한다면 `gh` CLI를 설치하십시오. Claude는 이슈 생성, 풀 리퀘스트 열기, 댓글 읽기에 이를 사용하는 방법을 알고 있습니다. `gh`가 없어도 Claude는 GitHub API를 사용할 수 있지만, 인증되지 않은 요청은 속도 제한에 걸리는 경우가 많습니다.225## Claude에게 실행할 확인 수단 제공하기

210 226 

211Claude는 아직 알지 못하는 CLI 도구를 학습하는 데에도 효과적입니다. `Use 'foo-cli-tool --help' to learn about foo tool, then use it to solve A, B, C.`와 같은 프롬프트를 시도해 보십시오.227Claude는 작업이 완료된 것처럼 보일 때 멈춥니다. 작업이 실제로 완료되었는지 알려 주는 실행 수단이 없다면, Claude가 의지할 수 있는 것은 "완료된 것처럼 보인다"는 판단뿐입니다. 실제로는 사용자가 테스트 스위트 역할을 하게 되며, 모든 실수는 사용자가 우연히 알아차릴 때까지 그대로 남아 있습니다.

212 228 

213### MCP 서버 연결229통과 또는 실패를 반환하는 무언가를 제공하면 Claude가 그 루프를 스스로 닫을 수 있습니다. 변경을 수행하고, 확인을 실행하고, 무언가 깨졌다면 출력을 읽고 수정한 뒤 다시 확인을 실행합니다.

214 230 

215> [!TIP]231> [!TIP]

216>232>

217> 서버 이름과 URL 또는 명령을 지정하여 `claude mcp add`를 실행하면 Notion, Figma, 데이터베이스 같은 외부 도구를 연결할 수 있습니다. 예: `claude mcp add --transport http notion https://mcp.notion.com/mcp`.233> Claude에게 실행할 수 있고 통과 또는 실패를 반환하는 무언가를 제공하십시오. 이것이 있으면 Claude는 스스로 계속 작업할 수 있고, 사용자는 지켜볼 필요가 없습니다.

218 234 

219[MCP 서버](https://code.claude.com/docs/ko/mcp.md)를 사용하면 Claude에게 이슈 트래커의 기능 구현, 데이터베이스 쿼리, 모니터링 데이터 분석, Figma 디자인 통합, 워크플로 자동화를 요청할 수 있습니다.235Claude가 결과를 읽을 수만 있다면 확인 수단은 거의 무엇이든 될 수 있습니다.

220 236 

221### 훅 설정237* 테스트 파일

238* 빌드의 종료 코드

239* 린터

240* 출력을 고정값과 비교하는 스크립트

241* 목업과 나란히 놓은 [브라우저 스크린샷](https://code.claude.com/docs/ko/chrome.md)

222 242 

223> [!TIP]243저장소에 이미 이런 것이 있다면, `CLAUDE.md`에서 가장 유용한 한 줄은 그것을 실행하는 명령입니다.

224>

225> 예외 없이 매번 실행되어야 하는 작업에는 훅을 사용하십시오.

226 244 

227[훅](https://code.claude.com/docs/ko/hooks-guide.md)은 Claude 워크플로의 특정 시점에 스크립트를 자동으로 실행합니다. 권고 사항인 CLAUDE.md 지침과 달리, 훅은 결정론적이며 작업이 반드시 실행되도록 보장합니다.245확인을 얼마나 엄격하게 할지는 사용자가 정합니다. 선택지는 Claude가 스스로 판단하는 것부터 Claude Code가 강제하는 것까지 있습니다.

228 246 

229Claude가 훅을 대신 작성해 줄 수 있습니다. *"Write a hook that runs eslint after every file edit"* 또는 \*"Write a hook that blocks writes to the migrations folder."\*와 같은 프롬프트를 시도해 보십시오. 훅을 수동으로 구성하려면 `.claude/settings.json`을 직접 편집하고, 구성된 내용을 살펴보려면 `/hooks`를 실행하십시오.247* 프롬프트에서: `run the auth tests after, and keep going until they pass`. Claude가 언제 충분한지 스스로 판단합니다. 이 방법은 설정 없이 지금 바로 모든 작업에서 작동합니다.

248* 목표로: [`/goal all tests in tests/auth pass and lint is clean`](https://code.claude.com/docs/ko/goal)은 매 턴 후 별도의 모델이 대화를 기준으로 확인하는 조건을 설정하며, Claude는 조건이 충족될 때까지 계속 작업합니다. 세션 안에서 직접 이것이 필요한 경우는 드뭅니다. 긴 백그라운드 실행에서 중요합니다. 그런 실행에서는 Claude가 아직 남은 항목이 있는데도 진행 상황 요약으로 턴을 끝내는 경우가 있는데, 목표가 Claude를 다시 작업으로 돌려보냅니다.

249* Stop 훅으로: [`Stop` 훅](https://code.claude.com/docs/ko/hooks#stop)은 Claude가 턴을 끝내려 할 때마다 스크립트를 실행하고, 스크립트가 종료 코드 2로 끝나면 Claude를 다시 작업으로 돌려보냅니다. 이는 Claude Code(하네스)가 강제하므로, 타입 검사가 통과하거나 [차단 한도](https://code.claude.com/docs/ko/hooks.md#stop-input)에 도달할 때까지 턴이 끝나지 않습니다. [아래에 예제](#enforce-the-check-with-a-stop-hook)가 있습니다.

250* 코드를 작성하지 않은 쪽이: 터미널에서 [`/code-review`](https://code.claude.com/docs/ko/code-review-local)는 대화를 본 적 없는 새 서브에이전트에서 diff를 리뷰합니다. 코드를 만들어 낸 추론에 영향을 받지 않습니다.

230 251 

231### 스킬 생성252어떤 방법을 사용하든 Claude에게 *증거*를 요청하십시오. 실행한 명령과 그 출력, 또는 스크린샷입니다. "모든 테스트 통과"라는 말만으로는 알 수 있는 것이 거의 없으며, 출력을 읽는 것이 직접 확인을 다시 실행하는 것보다 빠릅니다. 지켜보지 않은 세션이라면 그것이 유일한 증거이기도 합니다.

232 253 

233> [!TIP]254> [!TIP]

234>255>

235> `.claude/skills/`에 `SKILL.md` 파일을 생성하여 Claude에게 도메인 지식과 재사용 가능한 워크플로를 제공하십시오.256> Claude가 완료했다고 하면 세션에서 [`/verify`](https://code.claude.com/docs/ko/skills#run-and-verify-your-app)를 실행할 수도 있습니다. 그러면 Claude가 앱을 빌드하고 실행하여 결과를 확인합니다. 이를 통해 테스트와 타입 검사가 놓치는 종류의 문제를 잡아낼 수 있습니다.

236 257 

237[스킬](https://code.claude.com/docs/ko/skills.md)은 프로젝트, 팀 또는 도메인에 특화된 정보로 Claude의 지식을 확장합니다. Claude는 관련이 있을 때 스킬을 자동으로 적용하며, `/skill-name`으로 직접 호출할 수도 있습니다.258### 사양을 기준으로 리뷰하기

238 259 

239`.claude/skills/`에 `SKILL.md`가 포함된 디렉터리를 추가하여 스킬을 생성합니다.260리뷰가 일반적인 버그를 찾기보다 계획을 기준으로 작업을 확인하기를 원한다면, 리뷰 프롬프트를 직접 작성하십시오.

240 261 

241```markdown .claude/skills/api-conventions/SKILL.md theme={null}262```text theme={null}

242name: api-conventions263use a subagent to review the rate limiter diff against SPEC.md, check every requirement is implemented and the listed edge cases have tests, report gaps that affect correctness and skip style

243description: REST API design conventions for our services

244# API Conventions

245- Use kebab-case for URL paths

246- Use camelCase for JSON properties

247- Always include pagination for list endpoints

248- Version APIs in the URL path (/v1/, /v2/)

249```264```

250 265 

251스킬은 직접 호출하는 반복 가능한 워크플로를 정의할 수도 있습니다.266> [!NOTE]

252 267>

253```markdown .claude/skills/fix-issue/SKILL.md theme={null}268> 프롬프트에서 `skip style` 부분을 빼지 마십시오. 문제를 찾으라는 요청을 받은 리뷰어는 항상 *무언가*를 찾아냅니다. 모든 지적 사항을 고치다 보면 불필요한 추상화 계층과 일어날 수 없는 경우에 대한 테스트가 추가됩니다.

254name: fix-issue269 

255description: Fix a GitHub issue270### Stop 훅으로 확인 강제하기

256disable-model-invocation: true271 

257Analyze and fix the GitHub issue: $ARGUMENTS.272타입 검사 규칙의 `Stop` 훅 버전은 `.claude/settings.json`에 몇 줄만 추가하면 됩니다. 종료 코드 2가 중지를 차단합니다. 명령이 stderr로 출력하는 내용은 Claude가 아직 끝낼 수 없는 이유로 Claude에게 전달되므로, 컴파일러 출력을 그곳으로 리디렉션합니다.

258 273 

2591. Use `gh issue view` to get the issue details274```json .claude/settings.json theme={null}

2602. Understand the problem described in the issue275{

2613. Search the codebase for relevant files276 "hooks": {

2624. Implement the necessary changes to fix the issue277 "Stop": [

2635. Write and run tests to verify the fix278 {

2646. Ensure code passes linting and type checking279 "hooks": [

2657. Create a descriptive commit message280 { "type": "command", "command": "pnpm tsc --noEmit 1>&2 || exit 2" }

2668. Push and create a PR281 ]

282 }

283 ]

284 }

285}

267```286```

268 287 

269호출하려면 `/fix-issue 1234`를 실행하십시오. 수동으로 트리거하려는 부수 효과가 있는 워크플로에는 `disable-model-invocation: true`를 사용하십시오.288작동을 확인하려면 Claude에게 타입을 깨뜨리는 변경을 요청하십시오. Claude는 작업을 마치는 대신 컴파일러 오류를 돌려받고 `tsc`가 통과할 때까지 계속 작업합니다. 훅이 그 사이에 도구 호출 없이 [연속으로 여덟 번 중지를 차단](https://code.claude.com/docs/ko/hooks.md#stop-input)하면, Claude Code는 다음 차단을 재정의하고 턴을 끝냅니다. 상한을 높이려면 [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](https://code.claude.com/docs/ko/env-vars)을 설정하십시오.

270 289 

271### 사용자 지정 서브에이전트 생성290## 예외가 있어서는 안 되는 규칙 강제하기

272 291 

273> [!TIP]292> [!TIP]

274>293>

275> Claude가 격리된 작업을 위임할 수 있는 전문 어시스턴트를 `.claude/agents/`에 정의하십시오.294> 무언가가 매번 일어나야 한다면 훅, 거부 규칙, 관리형 설정으로 만드십시오. `CLAUDE.md`는 지침을 위한 것이며, Claude는 어떤 지침이 적용되지 않는다고 판단할 수 있습니다.

276 295 

277[서브에이전트](https://code.claude.com/docs/ko/sub-agents.md)는 자체 허용 도구 세트와 함께 자체 컨텍스트에서 실행됩니다. 많은 파일을 읽거나 메인 대화를 어지럽히지 않고 전문적인 집중이 필요한 작업에 유용합니다.296현재 `CLAUDE.md`에 있을 법한 세 가지 규칙을 생각해 보십시오. `Never read .env`, `Always run the formatter after editing`, `Don't touch the migrations folder`. Claude는 거의 매번 이를 따릅니다. "거의"로는 충분하지 않은 몇 가지는 `CLAUDE.md`에서 빼내어 Claude Code(하네스)가 직접 적용하는 구성으로 옮기십시오. 그러면 그때부터 결과는 모델이 무엇을 기억하거나 결정하는지에 좌우되지 않습니다.

278 297 

279```markdown .claude/agents/security-reviewer.md theme={null}298### 훅으로 단계 강제하기

280name: security-reviewer299 

281description: Reviews code for security vulnerabilities300[훅](https://code.claude.com/docs/ko/hooks-guide.md)은 Claude 루프의 정해진 시점에 사용자가 지정한 무언가를 실행합니다. 도구 호출 전후, Claude가 멈추려 할 때, 세션이 시작될 때 등입니다. 그 무언가는 다음과 같을 수 있습니다.

282tools: Read, Grep, Glob, Bash301 

283model: opus302* 셸 명령 (일반적인 경우)

284You are a senior security engineer. Review code for:303* HTTP 엔드포인트로의 POST

285- Injection vulnerabilities (SQL, XSS, command injection)304* MCP 서버 중 하나에 대한 도구 호출

286- Authentication and authorization flaws305* 모델이 결정하도록 하는 [`prompt` 또는 `agent` 훅](https://code.claude.com/docs/ko/hooks#hook-handler-fields)

287- Secrets or credentials in code306 

288- Insecure data handling307`prompt` 또는 `agent` 훅은 *다른 모델*에게 결정을 요청하므로 역시 결정론적이지 않습니다. 실제로 강제하려면 `command` 또는 `http` 훅을 사용하고, 훅 자체가 충돌하거나 시간 초과될 때도 작업을 중지해야 한다면 [`onFailure: "block"`](https://code.claude.com/docs/ko/hooks#block-the-action-when-a-hook-fails)을 추가하십시오. 예를 들어 커밋에서 시크릿을 검사하는 훅이라면, 스캐너가 중단된 동안 검사되지 않은 커밋을 통과시키기보다는 차단하는 편이 낫습니다.

308 

309다음은 포매터 규칙을 `PostToolUse` 훅으로 만든 것입니다. 모든 `Edit` 또는 `Write` 후에 실행되며, Claude가 규칙을 기억하는지는 더 이상 중요하지 않습니다. Claude가 실행하는 것이 아니기 때문입니다.

289 310 

290Provide specific line references and suggested fixes.311```json .claude/settings.json theme={null}

312{

313 "hooks": {

314 "PostToolUse": [

315 {

316 "matcher": "Edit|Write",

317 "hooks": [

318 { "type": "command", "command": "npx prettier --write --ignore-unknown \"$(jq -r '.tool_input.file_path')\"" }

319 ]

320 }

321 ]

322 }

323}

291```324```

292 325 

293Claude에게 서브에이전트를 사용하도록 명시적으로 지시하십시오: *"Use a subagent to review this code for security issues."*326훅을 확인하려면 Claude에게 Prettier가 포맷하는 파일에 들여쓰기가 잘못된 줄을 추가하도록 요청하십시오. 저장된 파일은 들여쓰기가 수정된 상태로 돌아옵니다.

294 327 

295### 플러그인 설치328마이그레이션 규칙은 `migrations/` 아래의 모든 경로에 대해 종료 코드 2로 끝나는 [`PreToolUse` 훅](https://code.claude.com/docs/ko/hooks-guide#block-edits-to-protected-files)이 됩니다. 직접 작성할 필요는 없습니다. `write a hook that blocks edits to the migrations folder`를 프롬프트로 입력하면 되고, `/hooks`에서 결과를 확인할 수 있습니다. 다만 지나치게 사용하지는 마십시오. 훅은 예외가 *전혀* 없는 규칙을 위한 것이며, `Prefer named exports`에는 예외가 많으므로 이런 규칙은 `CLAUDE.md`에 남겨 둡니다.

296 329 

297> [!TIP]330### 권한 규칙과 샌드박스로 접근 제한하기

298>

299> `/plugin`을 실행하여 마켓플레이스를 둘러보십시오. 플러그인은 별도의 구성 없이 스킬, 도구, 통합 기능을 추가합니다.

300 331 

301[플러그인](https://code.claude.com/docs/ko/plugins/overview.md)은 커뮤니티와 Anthropic이 제공하는 스킬, 훅, 서브에이전트, MCP 서버를 설치 가능한 단일 단위로 묶습니다. 타입 언어로 작업한다면 [코드 인텔리전스 플러그인](https://code.claude.com/docs/ko/plugins/code-intelligence.md)을 설치하여 Claude에게 정확한 심볼 탐색과 편집 후 자동 오류 감지 기능을 제공하십시오.332[권한 규칙](https://code.claude.com/docs/ko/permissions.md)은 Claude가 무엇을 실행하고, 읽고, 가져올 수 있는지를 결정합니다. `deny` 규칙은 자동 모드와 `bypassPermissions`를 포함한 모든 권한 모드에서 유지되며, 바로 이 때문에 `.env` 규칙은 여기에 속합니다.

302 333 

303스킬, 서브에이전트, 훅, MCP 중에서 선택하는 방법에 대한 안내는 [Claude Code 확장](https://code.claude.com/docs/ko/features-overview.md#match-features-to-your-goal)을 참조하십시오.334```json .claude/settings.json theme={null}

335{

336 "permissions": {

337 "allow": ["Bash(pnpm tsc --noEmit)"],

338 "ask": ["Bash(git push *)"],

339 "deny": ["Read(./.env)", "Read(./.env.local)", "Read(./secrets/**)"]

340 }

341}

342```

304 343 

305***344이를 저장하면 Claude에게 `.env`에 무엇이 있는지 물어도 `Read` 도구를 통해서든 `cat .env`를 통해서든 실패합니다.

306 345 

307## 효과적으로 소통하기346규칙은 의도가 아니라 도구 호출과 일치하므로, 경계가 어디인지 알아 두는 것이 좋습니다.

308 347 

309다른 엔지니어에게 물어볼 질문을 Claude에게 하고, 더 큰 기능의 경우 Claude가 당신을 인터뷰하고 구현을 시작하기 전에 사양을 작성하도록 하십시오.348* `Read` 규칙은 `cat .env`를 *잡아냅니다*. Claude Code가 [일반적인 파일 읽기 명령](https://code.claude.com/docs/ko/permissions.md#read-and-edit)을 인식하기 때문입니다.

349* 파일을 여는 스크립트는 잡아내지 못합니다.

350* 도메인에 대한 `WebFetch` 거부 규칙은 샌드박스가 켜져 있지 않은 한 같은 도메인으로의 `curl`에는 아무 효과가 없습니다.

310 351 

311### 코드베이스 질문 하기352파일 시스템이나 네트워크 접근을 OS 수준에서 제한하려면 세션에서 `/sandbox`로 [샌드박스](https://code.claude.com/docs/ko/sandboxing.md)를 켜십시오. 샌드박스는 macOS, Linux, WSL2에서 Claude의 셸 명령을 격리하며 [`Read` 거부 규칙과 `WebFetch(domain:...)` 규칙도 반영](https://code.claude.com/docs/ko/sandboxing#permission-rules)하므로, 보안 관련 사항이라면 둘 다 사용하는 것이 좋습니다.

312 353 

313> [!TIP]354기본적으로 Claude는 차단된 명령을 샌드박스 밖에서 재시도하도록 여전히 요청할 수 있으며, 그 요청은 일반적인 권한 흐름을 거칩니다. `/sandbox`의 **Overrides** 탭에 있는 [strict 샌드박스 모드](https://code.claude.com/docs/ko/sandboxing.md#turn-off-the-retry-with-strict-sandbox-mode)는 이 재시도를 끕니다.

355 

356> [!WARNING]

314>357>

315> 선임 엔지니어에게 물어볼 질문을 Claude에게 하십시오.358> 자동 모드는 엄격한 규칙이 아니라 각 작업을 판단하는 분류기 모델입니다. 판단에 능숙하지만, 모든 판단이 그렇듯 틀릴 수 있습니다. 또한 무엇을 위험하게 취급할지 조정할 수 있고, 조직이 이를 완전히 끌 수도 있으므로, "절대" 규칙은 거부 규칙이나 훅에 두어야 합니다.

359 

360### 규칙을 적용할 대상 선택하기

316 361 

317새로운 코드베이스에 온보딩할 때 Claude Code를 학습 및 탐색에 사용하십시오. Claude에게 다른 엔지니어에게 물어볼 것과 같은 종류의 질문을 할 수 있습니다:362규칙이 어디에 있는지에 따라 누구에게 적용되는지가 결정됩니다.

318 363 

319* 로깅은 어떻게 작동합니까?364* `.claude/settings.local.json`과 `~/.claude/settings.json`은 본인에게만 적용됩니다. 명령에 대해 **Yes, and don't ask again**을 선택하면 Claude Code는 해당 규칙을 로컬 파일에 저장합니다.

320* 새로운 API 엔드포인트를 어떻게 만듭니까?365* `.claude/settings.json`과 그 안의 훅은 저장소에 속합니다. 커밋하면 저장소에서 작업하는 모든 사람에게 적용됩니다. 거부 규칙은 즉시 적용됩니다. `allow` 규칙은 각 사람이 해당 폴더의 [신뢰 대화 상자](https://code.claude.com/docs/ko/permissions.md#what-runs-before-you-trust-a-folder)를 수락할 때까지 대기하며, [워크스페이스 신뢰](https://code.claude.com/docs/ko/hooks.md#workspace-trust)는 훅이 각자의 머신에서 언제 실행되기 시작할지도 결정합니다.

321* `foo.rs`의 134번 줄에서 `async move { ... }`는 무엇을 합니까?366* [관리형 설정](https://code.claude.com/docs/ko/managed-settings.md)은 조직에 속합니다. 관리 콘솔, MDM 또는 `managed-settings.json` 파일에서 제공되며, 어떤 개인 설정 파일로도 재정의할 수 없으므로 보안 팀의 정책을 둘 수 있는 유일한 곳입니다. 이를 설정하는 담당자라면 [조직을 위한 Claude Code 설정](https://code.claude.com/docs/ko/admin-setup.md)을 참조하십시오.

322* `CustomerOnboardingFlowImpl`은 어떤 엣지 케이스를 처리합니까?

323* 이 코드가 333번 줄에서 `bar()` 대신 `foo()`를 호출하는 이유는 무엇입니까?

324 367 

325이런 방식으로 Claude Code를 사용하는 것은 효과적인 온보딩 워크플로우이며, 램프업 시간을 개선하고 다른 엔지니어의 부담을 줄입니다. 특별한 프롬프팅이 필요하지 않습니다: 직접 질문하십시오.368범위가 무엇이든 강제되는 항목은 적게 유지하십시오. 모든 훅과 거부 규칙은 가끔 작동해서는 안 될 때 작동하며, 누군가는 각각을 유지 관리해야 합니다. 그런 항목이 40개에 이른다면, 대부분은 Claude가 스스로 판단할 수 있었던 선호 사항일 가능성이 높습니다.

326 369 

327### Claude가 당신을 인터뷰하도록 하기370## 기본값 변경하기

328 371 

329> [!TIP]372> [!TIP]

330>373>

331> 더 큰 기능의 경우 Claude가 먼저 당신을 인터뷰하도록 하십시오. 최소한의 프롬프트로 시작하고 Claude에게 `AskUserQuestion` 도구를 사용하여 당신을 인터뷰하도록 요청하십시오.374> 작업에 필요 이상으로 시간, 토큰, 중단이 들기 전까지는 기본값을 그대로 두어도 충분합니다. 그런 일이 생기면 세션에서 `/usage`를 실행하여 어디에 소비되었는지 확인하십시오.

332 375 

333Claude는 기술 구현, UI/UX, 엣지 케이스, 트레이드오프를 포함하여 아직 고려하지 않은 것들에 대해 질문합니다. 프롬프트를 보내기 전에 `[간단한 설명]`을 당신의 기능으로 바꾸십시오.376새 세션은 이미 몇 가지 결정을 대신 내립니다.

334 377 

335```text wrap theme={null}378* 대화형 터미널 및 VS Code 세션은 자동 모드에서 시작합니다.

336[간단한 설명]을 빌드하고 싶습니다. AskUserQuestion 도구를 사용하여 자세히 인터뷰해주세요.379* 대부분의 플랜과 제공업체에서 [Claude Opus 5.5를 medium effort로](https://code.claude.com/docs/ko/model-config.md#default-model-setting) 실행합니다.

380* 이유가 있다고 판단하면 서브에이전트에 작업을 위임합니다.

381* 대화가 길어지면 압축합니다.

337 382 

338기술 구현, UI/UX, 엣지 케이스, 우려 사항, 트레이드오프에 대해 질문하세요. 명백한 질문을 하지 마세요, 당신이 고려하지 않았을 수 있는 어려운 부분을 파고드세요.383대부분의 경우 이런 것들을 신경 쓸 필요가 없습니다. 작업에 필요 이상의 비용이 든다면, 대개 이 네 가지 중 하나가 원인입니다.

339 384 

340모든 것을 다룰 때까지 인터뷰를 계속한 다음 SPEC.md에 완전한 사양을 작성하세요.385### 권한 모드 변경하기

341```

342 386 

343사양이 완료되면 새 세션을 시작하여 실행하십시오. 새 세션은 구현에만 집중하는 깨끗한 context를 가지고 있으며, 참조할 수 있는 작성된 사양이 있습니다.387권한 범위의 양쪽 끝에는 모두 비용이 있습니다.

344 388 

345가장 유용한 사양은 자체 포함적입니다: 관련된 파일과 인터페이스의 이름을 지정하고, 범위를 벗어난 것을 명시하며, 기능이 작동함을 증명하는 엔드투엔드 검증 단계로 끝납니다. 사양을 정확하게 만드는 데 소비한 시간은 구현을 지켜보는 데 소비한 시간보다 더 많은 보상을 제공합니다.389* **Manual 모드**: 읽기 전용이 아닌 모든 편집과 명령을 직접 승인합니다. 안전하지만, 열 번째 프롬프트쯤 되면 읽지 않고 승인하게 되며, 자리를 비운 동안에는 아무것도 진행되지 않습니다.

390* **`bypassPermissions`**: 거부 및 확인 규칙에 해당하지 않는 모든 것을 승인하며, 일회용 컨테이너에서만 의미가 있습니다.

346 391 

347***392[자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)는 그 중간에 있으며, 대화형 터미널 및 VS Code 세션이 [시작되는 모드](https://code.claude.com/docs/ko/permission-modes.md#which-mode-a-session-starts-in)입니다. Claude는 일상적인 승인을 위해 멈추지 않고 작업하며, 별도의 분류기 모델이 작업이 실행되기 전에 [정해진 순서](https://code.claude.com/docs/ko/permission-modes.md#how-the-classifier-evaluates-actions)로 확인합니다. 분류기는 [사람이 막기를 원할 만한 것](https://code.claude.com/docs/ko/permission-modes.md#what-the-classifier-blocks-by-default)에 집중합니다.

348 393 

349## 세션 관리하기394* `curl | bash`

395* 프로덕션 배포 및 마이그레이션

396* 다른 사람의 작업을 덮어쓰는 force push

397* 외부 엔드포인트로 전송되는 민감한 데이터

398* 사용자가 아니라 Claude가 읽은 콘텐츠에 의해 유도된 것으로 보이는 작업

350 399 

351대화는 지속적이고 되돌릴 수 있습니다. 이를 활용하십시오!400분류기가 무언가를 차단하면 알림이 표시되고, 해당 작업은 `/permissions`의 **Recently denied** 아래에 나타나며, 그곳에서 수동 승인으로 재시도할 수 있습니다. [연속 세 번 차단](https://code.claude.com/docs/ko/permission-modes.md#when-auto-mode-falls-back)(또는 총 20번)되면 자동 모드는 일시 중지되고 다시 확인을 요청하는 방식으로 돌아갑니다.

352 401 

353### 조기에 자주 방향 수정하기402이 중 어느 것도 결정론적 통제를 대체하지 않습니다. 분류기는 그 *이후에* 실행되기 때문입니다. 거부 및 확인 규칙과 `PreToolUse` 훅은 분류기가 무엇이든 보기 전에 적용되므로, 거부 규칙은 다른 모든 곳과 똑같이 자동 모드에서도 차단합니다. 샌드박스는 여전히 [샌드박스가 감싸는 셸 명령](https://code.claude.com/docs/ko/sandboxing.md#what-runs-outside-the-sandbox)을 격리합니다.

354 403 

355> [!TIP]404> [!NOTE]

356>405>

357> Claude가 궤도를 벗어나는 것을 알아차리면 즉시 수정하십시오.406> 대화에서 `don't push until I've reviewed`라고 말할 수도 있으며, 분류기는 [이를 차단 신호로 취급합니다](https://code.claude.com/docs/ko/permission-modes.md#boundaries-you-state-in-conversation). 그래도 이는 트랜스크립트를 읽는 모델이며, 대화가 압축될 때 그 문장이 사라질 수 있으므로 중요한 것은 거부 규칙에 두어야 합니다.

407 

408반대 문제는 분류기가 해당 환경에서는 일상적인 작업을 반복해서 막는 경우입니다. 매번 수동으로 승인하는 대신, `autoMode.allow`에 추가하거나 [자동 모드 구성](https://code.claude.com/docs/ko/auto-mode-config.md)에서 신뢰할 수 있는 인프라를 설명하십시오. 패턴이 아닌 평이한 영어로 작성하며, [`/auto-mode-setup`](https://code.claude.com/docs/ko/auto-mode-config#generate-environment-entries)이 프로젝트와 최근 세션을 바탕으로 `environment` 부분의 초안을 작성해 줄 수 있습니다.

409 

410```json ~/.claude/settings.json theme={null}

411{

412 "autoMode": {

413 "environment": [

414 "$defaults",

415 "Source control: github.com/example-org and every repo under it",

416 "Trusted internal domains: *.internal.example.com"

417 ],

418 "allow": [

419 "$defaults",

420 "Deploying to the staging namespace is fine, it's isolated from production and resets nightly"

421 ]

422 }

423}

424```

358 425 

359최고의 결과는 긴밀한 피드백 루프에서 나옵니다. Claude가 때때로 첫 시도에서 문제를 완벽하게 해결하지만, 빠르게 수정하면 일반적으로 더 빠르게 더 나은 솔루션을 생성합니다.426> [!WARNING]

427>

428> 설정하는 모든 목록에 `"$defaults"`를 유지하십시오. 이것이 없으면 입력한 항목이 해당 목록의 기본 제공 규칙에 추가되는 대신 이를 *대체*합니다. `environment`와 `allow`에서는 기본 제공 컨텍스트와 예외를 잃게 되며, `soft_deny` 목록에서 이를 빼면 force push와 프로덕션 배포에 대한 기본 제공 차단이 사라집니다.

429>

430> 또한 `autoMode` 블록은 프로젝트가 아니라 `~/.claude/settings.json`에 있어야 합니다. 분류기는 프로젝트 설정의 `autoMode`를 무시하기 때문입니다.

360 431 

361* **`Esc`**: `Esc` 키로 Claude의 작업을 중간에 중지하십시오. Context는 보존되므로 방향을 바꿀 수 있습니다.432모든 편집과 명령을 실행 전에 보고 싶다면, 세션에서 `Shift+Tab`을 눌러 Manual을 포함한 권한 모드를 순환하거나, 셸에서 `claude --permission-mode manual`로 시작하십시오. 그리고 Manual에서 확인 요청이 너무 잦다면, `/fewer-permission-prompts`가 최근 트랜스크립트에서 자주 쓰이는 읽기 전용 Bash 및 MCP 호출을 찾아 `.claude/settings.json`의 허용 목록에 추가합니다.

362* **`Esc + Esc` 또는 `/rewind`**: `Esc`를 두 번 누르거나 `/rewind`를 실행하여 rewind 메뉴를 열고 이전 대화 및 코드 상태를 복원하거나 선택한 메시지에서 요약하십시오.

363* **`"Undo that"`**: Claude에게 변경 사항을 되돌리도록 하십시오.

364* **`/clear`**: 관련 없는 작업 간에 context를 재설정하십시오. 관련 없는 context가 있는 긴 세션은 성능을 줄일 수 있습니다.

365 433 

366한 세션에서 같은 문제에 대해 Claude를 두 번 이상 수정했다면 context는 실패한 접근 방식으로 복잡해져 있습니다. `/clear`를 실행하고 배운 내용을 통합하는 더 구체적인 프롬프트로 새로 시작하십시오. 누적된 수정이 있는 긴 세션보다 더 나은 프롬프트가 있는 깨끗한 세션이 거의 항상 더 나은 성능을 발휘합니다.434### 모델과 effort 변경하기

367 435 

368### context 적극적으로 관리하기436[Effort](https://code.claude.com/docs/ko/model-config.md#adjust-effort-level)는 Claude가 얼마나 오래 생각할지를 조절하는 주요 수단이며, 예전에 프롬프트 문구로 하던 일 대부분을 대체합니다. Claude Opus 5.5, Sonnet 5.5, Haiku 5.5의 기본값은 `medium`이며, 범위가 명확한 일상적인 기능 작업에는 이것으로 충분합니다. 세션에서 `/effort`로 조정할 만한 경우는 다음과 같습니다.

369 437 

370> [!TIP]438* 놓치기 쉬운 경우에 따라 결과의 정확성이 좌우된다면 `/effort high` 또는 `/effort xhigh`로 높이십시오. 직접 작성하지 않은 코드의 버그, 불안정한 테스트, Claude가 이전 형태를 읽는 모든 곳을 찾아야 하는 스키마 변경 등을 생각해 보십시오. 그러면 Claude는 답하기 전에 더 많은 엣지 케이스를 확인하고 작업을 더 많이 검증하며, 추가 시간과 토큰은 여기에 쓰입니다.

371>439* 빠르게 주고받으면서 어차피 결과를 하나하나 검토하는 경우에는 `/effort low`로 낮추십시오. 브레인스토밍, 첫 스케치, 몇 개 파일에 걸친 이름 변경 등입니다. Claude가 더 빨리 출발점을 제공하며, 모든 단계를 사용자가 조종하고 있으므로 추가 숙고는 기다리는 시간 외에는 크게 달라지게 하지 않았을 것입니다.

372> 관련 없는 작업 간에 `/clear`를 자주 실행하여 context window를 재설정하십시오.440* `max`는 보안 취약점 탐색처럼 Claude가 사용자 없이 끝까지 파고들기를 원하는 어려운 문제에만 사용하십시오. 일반적인 작업에서는 지나치게 생각하는 경향이 있어서, `high`가 줬을 답보다 나을 것이 없는 답에 더 많은 비용을 지불하게 됩니다.

441* 다른 부분은 일상적인 작업 중에 까다로운 질문 하나처럼 다음 메시지에만 필요하다면, 설정을 바꾸는 대신 해당 프롬프트에 [`ultrathink`](https://code.claude.com/docs/ko/model-config#use-ultrathink-for-one-off-deep-reasoning)를 넣으십시오.

373 442 

374Claude Code는 context 제한에 접근할 때 대화 기록을 자동으로 압축하여 중요한 코드와 결정을 보존하면서 공간을 확보합니다.443모델 자체의 경우, 기본값인 Opus 5.5가 대부분의 코딩을 잘 처리하고 Sonnet은 일상적인 작업에서 비용이 적게 듭니다. [Claude Fable 5.1](https://code.claude.com/docs/ko/model-config.md#work-with-fable)은 `/model fable`로 명시적으로 선택하면 사용할 수 있고, Haiku는 간단한 작업을 하는 서브에이전트에 잘 맞습니다. 플랜 및 제공업체별 전체 목록은 [모델 구성](https://code.claude.com/docs/ko/model-config.md)에 있습니다.

375 444 

376긴 세션 동안 Claude의 context window는 관련 없는 대화, 파일 내용, 명령으로 채워질 수 있습니다. 이는 성능을 줄이고 때때로 Claude를 산만하게 할 수 있습니다.445### 서브에이전트의 비용 알기

377 446 

378* 작업 간에 자주 `/clear`를 사용하여 context window를 완전히 재설정하십시오447Claude는 스스로 [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md)에 작업을 위임합니다.

379* 자동 압축이 트리거되면 Claude는 코드 패턴, 파일 상태, 주요 결정을 포함하여 가장 중요한 것을 요약합니다

380* 더 많은 제어를 위해 `/compact <instructions>`를 실행하십시오(예: `/compact Focus on the API changes`)

381* 대화의 일부만 압축하려면 `Esc + Esc` 또는 `/rewind`를 사용하고, 메시지 체크포인트를 선택하고, **Summarize from here** 또는 **Summarize up to here**를 선택하십시오. 첫 번째는 해당 지점부터의 메시지를 압축하면서 이전 context를 유지하고, 두 번째는 이전 메시지를 압축하면서 최근 메시지를 완전히 유지합니다. [rewind 메뉴의 요약 옵션](https://code.claude.com/docs/ko/checkpointing.md#rewind-and-summarize)을 참조하십시오.

382* CLAUDE.md에서 `"When compacting, always preserve the full list of modified files and any test commands"`와 같은 지시사항으로 압축 동작을 사용자 정의하여 중요한 context가 요약을 통해 유지되도록 하십시오

383* 빠른 질문의 경우 context에 들어가지 않아야 하므로 [`/btw`](https://code.claude.com/docs/ko/interactive-mode#side-questions-with-%2Fbtw)를 사용하십시오. 답변은 대화 기록에 들어가지 않으므로 context를 증가시키지 않고 세부 정보를 확인할 수 있습니다.

384 448 

385### subagents를 사용하여 조사하기449* 광범위한 코드베이스 검색은 기본 제공 Explore 에이전트로 넘어갑니다.

450* 부수적인 작업은 fork 모드가 켜져 있는 동안(기본값) [분기](https://code.claude.com/docs/ko/sub-agents.md#fork-the-current-conversation)됩니다.

451* Claude가 시작하는 서브에이전트는 기본적으로 백그라운드에서 실행되므로 메인 대화가 계속 진행됩니다.

386 452 

387> [!TIP]453이 중 무엇도 직접 요청할 필요는 거의 없지만, 무엇을 얻고 비용이 얼마나 드는지 알아 두면 도움이 됩니다.

388>

389> `"use subagents to investigate X"`로 연구를 위임하십시오. 그들은 별도의 context에서 탐색하여 구현을 위해 주요 대화를 깨끗하게 유지합니다.

390 454 

391context가 기본 제약 조건이므로 subagents를 사용하여 연구를 context 밖에 유지하십시오. Claude가 코드베이스를 연구할 때 많은 파일을 읽으며, 모두 context를 소비합니다. Subagents는 별도의 context window에서 실행되고 요약을 보고합니다:455서브에이전트는 다음과 같은 상황에서 효과를 발휘합니다.

392 456 

393```text wrap theme={null}457* 독립적인 작업을 동시에 실행하여 전체 작업을 더 빨리 끝내기

394Use subagents to investigate how our authentication system handles token458* 전체 테스트 실행이나 광범위한 검색처럼 긴 출력이 메인 대화에 들어오지 않게 하기. 그렇지 않으면 세션의 나머지 내내 따라다닙니다

395refresh, and whether we have any existing OAuth utilities I should reuse.459* 코드가 어떻게 작성되었는지 보지 않은 리뷰어 확보하기

396```460* 읽을 수는 있지만 편집할 수는 없는 리뷰어처럼, 메인 세션보다 적은 도구로 작업 수행하기

397 461 

398Claude가 구현한 후 검증을 위해 subagents를 사용할 수도 있습니다. [적대적 검토 단계 추가](#add-an-adversarial-review-step)를 참조하십시오.462비용은 주로 토큰입니다. 모든 서브에이전트는 자체 요청을 보내며, 이는 메인 대화와 같은 사용량에 포함됩니다. 때로는 시간도 듭니다. 새 서브에이전트는 대화에 이미 있던 컨텍스트를 먼저 수집해야 하므로, 현재 위치에서 작업하는 것보다 *더 느릴* 수 있습니다.

399 463 

400### 체크포인트로 rewind하기464그리고 기본적으로 같은 작업에 같은 모델(또는 더 작은 모델)을 사용합니다. 병렬 처리나 새로운 시각은 얻을 수 있지만, 더 똑똑한 답을 얻지는 못합니다.

401 465 

402> [!TIP]466비용을 줄이려면 다음을 고려하십시오.

403>

404> 보내는 모든 프롬프트는 체크포인트를 생성합니다. 이전 체크포인트로 대화, 코드 또는 둘 다를 복원할 수 있습니다.

405 467 

406Claude는 각 변경 전에 자동으로 파일을 스냅샷하므로 체크포인트가 파일을 복원할 수 있습니다. `Escape`를 두 번 누르거나 `/rewind`를 실행하여 rewind 메뉴를 열기. 대화만 복원하거나, 코드만 복원하거나, 둘 다 복원하거나, 선택한 메시지에서 요약할 수 있습니다. 자세한 내용은 [Checkpointing](https://code.claude.com/docs/ko/checkpointing.md)을 참조하십시오.468* 모듈을 import하는 파일을 수집하거나 문서의 링크를 확인하는 것처럼 작업이 단순하다면 서브에이전트 정의에 [`model: haiku`](https://code.claude.com/docs/ko/sub-agents#choose-a-model)를 설정하십시오. 그런 작업에는 큰 모델이 필요 없으며, Haiku는 요청당 비용이 훨씬 적습니다.

469* 짧은 요약을 반환하도록 요청하여, 결과 20개가 결국 컨텍스트를 채우지 않도록 하십시오.

470* `/usage`를 확인하여 각 서브에이전트 유형이 사용량에서 차지하는 비중을 보고, 어떤 것이 비용만큼의 가치를 하는지 판단하십시오.

471* `.claude/agents/`의 사용자 지정 서브에이전트에 `tools: Read, Grep, Glob`만 부여하십시오. 그러면 아무것도 편집할 수 없는 리뷰어가 되며, 그 제한은 프롬프트로 요청되는 것이 아니라 Claude Code가 강제합니다.

407 472 

408모든 움직임을 신중하게 계획하는 대신 Claude에게 위험한 것을 시도하도록 할 수 있습니다. 작동하지 않으면 rewind하고 다른 접근 방식을 시도하십시오. 체크포인트는 세션과 함께 저장되므로 터미널을 닫아도 나중에 세션을 재개하고 여전히 rewind할 수 있습니다.473그 리뷰어는 짧은 파일 하나, `.claude/agents/reviewer.md`입니다.

409 474 

410> [!WARNING]475```markdown .claude/agents/reviewer.md theme={null}

411>476---

412> 체크포인트는 Claude의 파일 편집 도구를 통해 수행된 변경만 추적합니다. Bash 명령이나 외부 프로세스를 통해 수행된 변경은 캡처되지 않습니다. 이는 git의 대체품이 아닙니다.477name: reviewer

478description: Reviews changed files against the spec they were built from. Use after implementing a feature, before opening the PR.

479tools: Read, Grep, Glob

480---

481You're reviewing code you didn't write. Compare the changed files against the spec you're given,

482check that every requirement is implemented and the listed edge cases have tests,

483and report only the gaps that affect correctness. Skip style.

484```

413 485 

414### 대화 재개하기486Claude에게 `have the reviewer compare the rate limiter against SPEC.md`라고 요청하면, 누락된 부분이 세션으로 돌아오고 Claude가 이를 수정할 수 있습니다.

415 487 

416> [!TIP]488### 비용과 컨텍스트 줄이기

417>

418> `/rename`으로 세션에 이름을 지정하고 분기처럼 취급하십시오: 각 작업 스트림은 자체 지속적인 context를 가집니다.

419 489 

420Claude Code는 대화를 로컬로 저장하므로 작업이 여러 세션에 걸쳐 있을 때 context를 다시 설명할 필요가 없습니다. [`claude --continue`](https://code.claude.com/docs/ko/sessions#resume-a-session)를 실행하여 가장 최근 세션을 선택하거나, `claude --resume`을 실행하여 목록에서 선택하십시오. `oauth-migration`과 같은 설명적인 이름으로 세션에 이름을 지정하여 나중에 찾을 수 있도록 하십시오. [세션 관리](https://code.claude.com/docs/ko/sessions.md)에서 전체 resume, branch, naming 제어 집합을 참조하십시오.490대부분의 최신 모델이 1M 토큰 윈도우를 가지고 있고 그 상한 근처에서 압축이 이루어지므로, 컨텍스트가 부족해지는 경우는 드뭅니다. 그래도 필요 없는 컨텍스트에 *비용을 지불*할 수는 있습니다. 모든 요청은 전체 대화를 보내므로, 관련 없는 작업 세 개가 쌓인 세션은 네 번째 작업의 매 턴마다 세 작업을 모두 다시 읽습니다. 이는 [캐시가 유효한 동안에는 할인되며](https://code.claude.com/docs/ko/costs.md#why-usage-climbs-in-a-long-session) 캐시가 만료되면 정가가 적용됩니다.

421 491 

422***492[`/usage`](https://code.claude.com/docs/ko/costs)가 가장 먼저 확인할 곳입니다. Pro, Max, Team, Enterprise에서는 사용량을 스킬, 서브에이전트, 플러그인, MCP 서버별로 분류해 보여 줍니다. 또한 긴 컨텍스트나 잦은 캐시 미스 같은 패턴이 사용량의 10%를 넘으면 이를 표시합니다. 그다음 일반적인 해결 방법은 다음과 같습니다.

423 493 

424## 자동화 및 확장하기494* 관련 없는 작업 사이에는 `/clear`를 실행하십시오. 비용이 들지 않으며, 다음 작업이 이전 작업의 기록에 계속 비용을 지불하지 않게 됩니다. `/clear oauth-migration`은 떠나는 세션에 이름을 붙여 나중에 다시 돌아올 수 있게 합니다.

495* `/compact keep the API changes and the test commands`처럼 초점을 지정하여 `/compact`를 실행하십시오. 긴 세션에서는 `/compact` 자체가 큰 요청입니다. 요약하기 위해 전체 대화를 읽기 때문이며, 캐시가 만료된 후라면 더욱 그렇습니다.

496* 백그라운드 작업을 주시하십시오. `/loop`, 매 턴 후 실행되는 목표 확인, Claude 자체의 서브에이전트는 모두 사용자가 입력하지 않는 동안에도 계속 요청을 보냅니다.

425 497 

426한 Claude로 효과적이 되면 병렬 세션, 비대화형 모드, fan-out 패턴으로 출력을 곱하십시오.498> [!NOTE]

499>

500> [프롬프트 캐시](https://code.claude.com/docs/ko/prompt-caching.md)는 구독에서는 약 1시간, API 키, 클라우드 제공업체, 사용량 크레딧에서는 5분간 유지됩니다. 서브에이전트는 변경하지 않는 한 5분입니다.

501>

502> 1시간 캐시에서는 약 200K 토큰을 넘은 세션이 유휴 상태로 있으면 캐시가 만료되기 직전에 압축되므로, 점심 식사 후에는 요약에서 이어서 작업하게 됩니다. 기록이 전혀 필요 없다면 새 세션이 여전히 비용이 적게 듭니다.

427 503 

428### 비대화형 모드 실행하기504## 세션 조종하기

429 505 

430> [!TIP]506> [!TIP]

431>507>

432> CI, pre-commit 훅 또는 스크립트에서 `claude -p "prompt"`를 사용하십시오. 스트리밍 JSON 출력의 경우 `--output-format stream-json --verbose`를 추가하십시오.508> 처음 1분을 지켜보고, Claude가 엇나가는 순간 `Esc`를 누르고, 두 번의 수정이 실패하면 세 번째 수정 대신 `/clear`를 실행하고 더 나은 프롬프트를 작성하십시오.

433 509 

434`claude -p "your prompt"`를 사용하면 대화형 프롬프트 없이 비대화형으로 Claude를 실행할 수 있습니다. 실행은 `--no-session-persistence`를 전달하지 않는 한 여전히 재개 가능한 세션을 생성합니다. [비대화형 모드](https://code.claude.com/docs/ko/headless.md)는 Claude를 CI 파이프라인, pre-commit 훅 또는 자동화된 워크플로에 통합하는 방법입니다. 출력 형식을 사용하면 결과를 프로그래밍 방식으로 구문 분석할 수 있습니다: 일반 텍스트, JSON 또는 스트리밍 JSON.510어떤 구성도 처음 1분을 지켜보다가 Claude가 의도하지 않은 방향으로 갈 때 개입하는 것을 대체할 수는 없습니다. 이를 위한 수단은 몇 가지뿐이며, 숙지해 둘 가치가 있습니다.

435 511 

436```bash theme={null}512* `Esc`는 Claude를 작업 도중에 멈추고 그 시점까지의 모든 것을 유지하므로, 작업을 잃지 않고 방향을 바꿀 수 있습니다.

437# 일회성 쿼리513* `/rewind` 또는 빈 프롬프트에서 `Esc`를 두 번 누르면 [rewind 메뉴](https://code.claude.com/docs/ko/checkpointing.md#rewind-and-summarize)가 열리며, 코드나 대화 또는 둘 다를 이전 프롬프트로 되돌릴 수 있습니다. 덕분에 더 과감한 접근을 먼저 시도하고 잘 되지 않으면 되돌리는 것이 위험하지 않습니다. 같은 메뉴에서 오래된 대화의 일부를 요약할 수도 있습니다.

438claude -p "이 프로젝트가 무엇을 하는지 설명하세요"514* `/clear`는 처음부터 다시 시작합니다. 같은 것을 두 번 수정했는데도 여전히 틀리다면, 세 번째 수정은 Claude가 계속 다시 읽어야 하는 실패한 시도 두 개가 이미 담긴 대화에 내용을 더할 뿐입니다. `/clear`와 함께 알게 된 내용을 반영한 새 프롬프트 하나가 거의 항상 더 효과적입니다.

439 

440# 스크립트를 위한 구조화된 출력

441claude -p "모든 API 엔드포인트 나열" --output-format json

442 515 

443# 실시간 처리를 위한 스트리밍516> [!WARNING]

444claude -p "이 로그 파일 분석" --output-format stream-json --verbose517>

445```518> 체크포인트는 메인 대화에서 Claude가 자체 파일 도구로 편집한 파일을 대상으로 하므로, Bash 명령만 건드린 파일은 [복원되지 않습니다](https://code.claude.com/docs/ko/checkpointing.md#bash-command-changes-not-tracked). 체크포인트는 git을 대체하는 것이 아니라 git과 함께 작동합니다.

446 519 

447첫 번째 명령은 일반 텍스트를 출력합니다. `json` 형식은 `result` 필드가 있는 단일 JSON 객체를 반환합니다. `stream-json` 형식은 초기화 이벤트로 시작하여 한 줄에 하나의 JSON 객체를 출력합니다.520더 작은 수단 두 가지가 있습니다. [`/btw`](https://code.claude.com/docs/ko/interactive-mode#side-questions-with-%2Fbtw)는 기록에 아무것도 추가하지 않고 간단한 질문에 답합니다. 그리고 며칠에 걸친 작업의 경우, 세션에서 `/rename oauth-migration`으로 이름을 붙이면 나중에 셸에서 [`claude --resume oauth-migration`](https://code.claude.com/docs/ko/sessions#resume-by-session-id-or-name)으로 체크포인트를 포함하여 다시 이어서 작업할 수 있습니다. `claude --continue`는 가장 최근 세션을 재개합니다.

448 521 

449### 여러 Claude 세션 실행하기522## 사용자 없이 Claude 실행하기

450 523 

451> [!TIP]524> [!TIP]

452>525>

453> 개발 속도를 높이거나, 격리된 실험을 실행하거나, 복잡한 워크플로를 시작하기 위해 여러 Claude 세션을 병렬로 실행하십시오.526> 실행을 무인 상태로 두기 전에, 완료가 무엇인지 알고, 자신의 작업을 확인할 수 있고, 접근해야 할 것에만 접근할 수 있는지 확인하십시오. 턴 수나 지출에 상한을 두고, 마지막에는 사람이 결과를 승인하도록 하십시오.

454 

455조정하고 싶은 정도에 맞는 병렬 접근 방식을 선택하고, 세션이 서로 발견 사항을 전달해야 할 때 메시징을 추가하십시오:

456 527 

457* [Worktrees](https://code.claude.com/docs/ko/worktrees.md): 격리된 git 체크아웃에서 별도의 CLI 세션을 실행하여 편집이 충돌하지 않도록 합니다528사용자가 실수를 잡아 줄 수 없게 되면 이 페이지의 모든 내용이 조금 더 중요해집니다. 지켜보고 있을 때는 Claude가 일부 컨텍스트를 놓쳐도 큰 문제가 아닙니다. 한두 메시지 안에 알아차리고 알려 주면 됩니다. 잠자리에 들기 전에 시작한 실행에서는 아무도 알려 주지 않으며, 다음 날 아침에야 Claude가 밤새 잘못된 가정 위에 작업을 쌓아 왔다는 사실을 알게 됩니다.

458* [Cross-session messaging](https://code.claude.com/docs/ko/cross-session-messaging.md): 직접 실행하는 세션이 서로 발견 사항을 전달할 수 있도록 합니다

459* [데스크톱 앱](https://code.claude.com/docs/ko/desktop.md#work-in-parallel-with-sessions): 여러 로컬 세션을 시각적으로 관리합니다. 선택적으로 각 세션을 자체 worktree에서 실행할 수 있습니다

460* [클라우드에서 Claude Code 사용하기](https://code.claude.com/docs/ko/claude-code-on-the-web.md): 기본적으로 Anthropic이 관리하는 인프라에서 세션을 실행합니다

461* [Agent view](https://code.claude.com/docs/ko/agent-view.md): 리서치 프리뷰입니다. `claude agents`를 실행하여 백그라운드에서 계속 실행되는 세션을 디스패치하고 한 화면에서 감시합니다

462* [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md): 실험적이며 기본적으로 비활성화되어 있습니다. 공유 작업, 메시징, 팀 리더를 사용한 여러 세션의 자동 조정

463 529 

464작업을 병렬화하는 것 외에도 여러 세션은 품질 중심 워크플로를 활성화합니다. 새로운 컨텍스트는 Claude가 방금 작성한 코드에 편향되지 않으므로 코드 리뷰를 개선합니다.530작업을 스스로 실행되도록 두기 전에, 해당 작업을 염두에 두고 다음 다섯 가지 질문을 검토해 보는 것이 좋습니다.

465 531 

466예를 들어 Writer/Reviewer 패턴을 사용하십시오:5321. 완료가 무엇인지 아는가? 목표 조건, 사양 파일, 또는 통과시켜야 하는 실패하는 테스트.

5332. 자신의 작업을 확인할 수 있는가? 테스트 스위트, `Stop` 훅, 일종의 리뷰 단계.

5343. 무엇에 접근할 수 있는가? 권한 규칙, `dontAsk`, 샌드박스, 워크트리, 푸시할 수 있는 단 하나의 브랜치.

5354. 무엇이 실행을 멈추는가? `--max-turns`, `--max-budget-usd`, 지출 한도.

5365. 결과는 어디로 가고, 누가 승인하는가? PR, 댓글 또는 요약, 그리고 병합, 배포 또는 되돌릴 수 없는 그 밖의 모든 것을 승인하는 사람.

467 537 

468| 세션 A (작성자) | 세션 B (검토자) |538일단 실행되면 Claude는 긴 작업을 스스로 끝까지 수행합니다. 사용자에게 남는 일은 작업을 시작하는 것, 이번에는 "완료"가 무엇을 의미하는지 정하는 것, 그리고 마지막에 병합을 승인하는 것입니다.

469| - | - |

470| `API 엔드포인트에 대한 속도 제한기 구현` | |

471| | `@src/middleware/rateLimiter.ts의 속도 제한기 구현을 검토하세요. 엣지 케이스, 경쟁 조건, 기존 미들웨어 패턴과의 일관성을 찾으세요.` |

472| `검토 피드백은 다음과 같습니다: [세션 B 출력]. 이 문제들을 해결하세요.` | |

473 539 

474테스트로 비슷한 작업을 수행할 수 있습니다: 한 Claude가 테스트를 작성하고 다른 Claude가 테스트를 통과하는 코드를 작성합니다.540### 스크립트에서 Claude 실행하기

475 541 

476### 파일 전체에 fan out하기542[`claude -p "prompt"`](https://code.claude.com/docs/ko/headless)는 한 번 실행하고 종료합니다. 이것이 Claude Code가 CI 작업, git 훅, 셸 루프에서 사용되는 방식입니다.

477 

478> [!TIP]

479>

480> 각각에 대해 `claude -p`를 호출하는 루프를 통해 작업을 분배하십시오. 배치 작업의 경우 `--allowedTools`를 사용하여 도구를 사전 승인하십시오.

481 543 

482대규모 마이그레이션 또는 분석의 경우 많은 병렬 Claude 호출 전체에 작업을 분배할 수 있습니다. [`/batch <instruction>`](https://code.claude.com/docs/ko/commands#all-commands)을 실행하여 Claude가 5\~30개의 서브에이전트 전체에 변경을 분할하도록 합니다. 각 서브에이전트는 자신의 worktree에서 작업합니다. 대신 자신의 스크립트에서 fan-out을 구동하려면 `claude -p`를 통해 루프하십시오:544스크립트에서는 거의 항상 몇 가지 플래그를 더 사용하게 됩니다.

483 545 

484**1. 작업 목록 생성**546* [`--bare`](https://code.claude.com/docs/ko/headless#start-faster-with-bare-mode)는 저장소와 머신 모두의 훅, 스킬, 플러그인, MCP 서버, `CLAUDE.md` 파일을 건너뛰므로, 실행이 어디서 이루어지든 동일하게 동작합니다. 또한 claude.ai 로그인을 전혀 사용하지 않습니다. 인증은 `ANTHROPIC_API_KEY`, `--settings`로 전달하는 파일의 `apiKeyHelper`, 또는 클라우드 제공업체의 자격 증명에서 가져옵니다.

547* `--append-system-prompt`, `--mcp-config`, `--settings`는 실행에 *실제로* 필요한 것을 명시적으로 전달합니다.

548* `--allowedTools`는 도구를 사전 승인하며, [`--permission-mode dontAsk`](https://code.claude.com/docs/ko/permission-modes#allow-only-pre-approved-tools-with-dontask-mode)는 그 밖에 확인을 요청했을 모든 작업을 거부합니다.

549* `--output-format json`은 파싱할 단일 결과 객체를 제공하며, `--verbose`와 함께 `stream-json`을 사용하면 이벤트가 발생할 때마다 스트리밍합니다.

485 550 

486Claude가 마이그레이션이 필요한 파일 목록을 파일에 작성하도록 하십시오. 그러면 다음 단계의 루프가 이를 읽을 수 있습니다. `마이그레이션이 필요한 모든 2,000개의 Python 파일을 나열하고 목록을 files.txt에 저장`과 같은 프롬프트를 사용하십시오.551이를 모두 합치면 다음과 같습니다.

487 

488**2. 목록을 통해 루프하는 스크립트 작성**

489 552 

490```bash theme={null}553```bash theme={null}

491for file in $(cat files.txt); do554for file in $(cat files.txt); do

492 claude -p "Python 2에서 Python 3로 $file 마이그레이션. OK 또는 FAIL 반환." \555 claude --bare -p "Migrate $file to the new logger API and commit. Reply OK or FAIL." \

493 --allowedTools "Edit,Bash(git commit *)" \556 --allowedTools "Read,Edit,Bash(git add *),Bash(git commit *)" \

494 --permission-mode dontAsk557 --permission-mode dontAsk \

558 --max-turns 20

495done559done

496```560```

497 561 

498**3. 몇 개 파일에서 테스트한 다음 모든 파일에서 실행**562실행이 끝나면 Claude는 `OK` 또는 `FAIL`로 응답하며, 턴 한도에 도달한 실행은 대신 오류와 함께 종료됩니다. 먼저 파일 세 개로 시도해 보고, 무엇이 잘못되는지 확인하고, 프롬프트를 수정한 다음 나머지를 실행하십시오.

499 

500처음 2-3개 파일에서 잘못된 것을 기반으로 프롬프트를 개선한 다음 전체 집합에서 실행하십시오. `--allowedTools` 플래그는 마이그레이션에 필요한 도구를 사전 승인합니다. [`--permission-mode dontAsk`](https://code.claude.com/docs/ko/permission-modes#allow-only-pre-approved-tools-with-dontask-mode)는 승인이 필요한 그 밖의 모든 작업을 거부하며, 이는 무인 상태에서 실행할 때 중요합니다. 다만 설치한 [mod](https://code.claude.com/docs/ko/plugins/mods/overview.md)가 이러한 호출 중 일부를 여전히 승인할 수 있습니다.

501 563 

502Claude를 기존 데이터/처리 파이프라인에 통합할 수도 있습니다:564`--permission-mode auto`를 전달하면 `-p`에서도 자동 모드가 작동합니다. 비대화형 실행에서는 분류기 차단이 해당 작업 하나만 거부하고 Claude는 계속 진행하며, 반복된 차단이 터미널에서처럼 실행을 일시 중지하지 않습니다. 이에 의존하기 전에 [그 경우 임계값이 어떻게 적용되는지](https://code.claude.com/docs/ko/permission-modes.md#repeated-block-thresholds) 읽어 보십시오.

503 565 

504```bash theme={null}566### 일정이나 이벤트에 따라 실행 시작하기

505claude -p "<your prompt>" --output-format json | your_command

506```

507 567 

508### 자동 모드로 자율적으로 실행하기568일단 실행이 시작되면 Claude는 나머지를 스스로 처리할 수 있습니다. Claude가 할 수 없는 단 한 가지는 *시작*을 결정하는 것이므로, 무언가가 시작해 주어야 합니다. 사용자, 타이머, 또는 실패한 CI 검사나 새 PR 같은 이벤트입니다.

509 569 

510중단 없는 실행과 백그라운드 안전 검사를 위해 [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)를 사용하십시오. 분류기 모델이 명령을 실행하기 전에 검토하여 범위 확대, 알 수 없는 인프라, 적대적 콘텐츠 기반 작업을 차단하면서 일상적인 작업이 프롬프트 없이 진행되도록 합니다.570열려 있는 세션 안에서는 일정 간격으로 프롬프트를 반복하는 [`/loop`](https://code.claude.com/docs/ko/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop)를 사용합니다.

511 571 

512```bash theme={null}572```text theme={null}

513claude --permission-mode auto -p "fix all lint errors"573/loop 15m check CI on this branch, and if it's red pull the failing job's log, fix it and push

514```574```

515 575 

516분류기가 `-p` 플래그가 있는 비대화형 실행에서 반복적으로 작업을 차단할 때 Claude Code는 실행을 중지하지 않습니다. [자동 모드가 폴백할 때](https://code.claude.com/docs/ko/permission-modes.md#when-auto-mode-falls-back)를 참조하여 대신 어떤 일이 발생하는지 및 임계값을 확인하십시오.576각 실행은 같은 세션의 또 다른 턴이므로, 긴 대화에서 계속 실행되도록 두지 마십시오. 노트북이 닫혀 있는 동안 일어나야 하는 작업에는 [`/schedule`](https://code.claude.com/docs/ko/routines#create-from-the-cli)이 타이머로 실행되는 [클라우드 예약 작업](https://code.claude.com/docs/ko/routines.md)을 설정합니다. API 키가 아닌 claude.ai 로그인이 필요합니다. Claude에게 요청하여 GitHub 이벤트 트리거를 추가하거나, [claude.ai/code/routines](https://claude.ai/code/routines)에서 API 트리거를 추가할 수 있습니다.

517 

518### 적대적 검토 단계 추가하기

519 577 

520> [!TIP]578> [!WARNING]

521>579>

522> 작업을 완료된 것으로 취급하기 전에 서브에이전트가 새로운 컨텍스트에서 diff를 검토하고 누락된 부분을 보고하도록 하십시오.580> 클라우드 예약 작업을 실행되도록 두기 전에, [작업이 우회할 수 없는 GitHub 브랜치 규칙](https://code.claude.com/docs/ko/routines.md#repositories-and-branch-permissions)으로 `main`을 보호하십시오. 그리고 새로운 작업은 무인 상태로 신뢰하기 전에 처음 몇 번의 실행을 지켜보십시오.

523 

524Claude가 무인 상태에서 작업할수록 작업을 완료된 것으로 간주하기 전에 독립적인 검사가 더 중요합니다. 새로운 [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md) 컨텍스트에서 실행되는 검토자는 변경을 생성한 추론이 아닌 diff와 제공한 기준만 보므로 자체 조건에 따라 결과를 평가합니다.

525 581 

526정확성 검사의 경우 번들된 [`/code-review` 스킬](https://code.claude.com/docs/ko/commands)을 실행하십시오. 이는 새로운 서브에이전트에서 현재 diff를 버그에 대해 검토하고 발견 사항을 세션에 반환합니다. 대신 diff를 계획과 비교하여 검사하려면 검토 프롬프트를 직접 작성하십시오. 검사할 작업, 검사할 계획, 발견으로 간주되는 것을 명시하십시오:582### 세션 병렬로 실행하기

527 583 

528```text wrap theme={null}584여러 작업을 동시에 진행할 때는 편집이 충돌하지 않도록 각각에 별도의 체크아웃을 제공하십시오. [`claude -w feature-auth`](https://code.claude.com/docs/ko/worktrees#start-claude-in-a-worktree)는 새 워크트리에서 세션을 시작하고, [데스크톱 앱](https://code.claude.com/docs/ko/desktop.md#work-in-parallel-with-sessions)은 이러한 세션 여러 개를 나란히 실행하며, [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md)은 머신 대신 클라우드에서 실행합니다.

529서브에이전트를 사용하여 PLAN.md에 대해 속도 제한기 diff를 검토하십시오. 모든 요구 사항이 구현되었는지, 나열된 엣지 케이스에 테스트가 있는지, 작업 범위 외의 것이 변경되지 않았는지 확인하십시오. 스타일 선호도가 아닌 누락된 부분을 보고하십시오.

530```

531 585 

532검토자가 서브에이전트로 실행되므로 구현 세션은 누락된 부분을 직접 받고 창 간에 발견 사항을 복사하지 않고도 수정하고 다시 검토할 수 있습니다.586워크트리는 새 체크아웃이므로 `.env` 같은 gitignore된 파일이 없고 의존성도 설치되어 있지 않습니다. 전자의 경우, 필요한 gitignore된 파일을 저장소 루트의 [`.worktreeinclude`](https://code.claude.com/docs/ko/worktrees#copy-gitignored-files-into-worktrees)에 나열하면(`.gitignore`와 같은 구문) Claude Code가 생성하는 모든 워크트리에 이를 복사합니다.

533 587 

534누락된 부분을 찾도록 프롬프트된 검토자는 작업이 건전할 때도 일반적으로 일부를 보고합니다. 왜냐하면 그것이 요청받은 것이기 때문입니다. 모든 발견을 추적하면 과도한 엔지니어링으로 이어집니다: 추가 추상화 계층, 방어적 코드, 발생할 수 없는 경우에 대한 테스트. 검토자에게 정확성 또는 명시된 요구 사항에 영향을 미치는 누락된 부분만 플래그하도록 지시하고 나머지는 선택 사항으로 취급하십시오.588```text .worktreeinclude theme={null}

589.env

590.env.local

591config/dev-credentials.json

592```

535 593 

536***594작은 파일만 넣으십시오. 링크가 아니라 복사하므로, 여기에 `node_modules`를 넣으면 워크트리마다 전체 복사본이 생깁니다. 큰 디렉터리에는 [`worktree.symlinkDirectories`](https://code.claude.com/docs/ko/settings-reference#worktree-symlinkdirectories) 설정을 사용하거나, `CLAUDE.md`에 설치 명령을 적어 두어 Claude가 새 체크아웃에서 시작할 때마다 실행하도록 하십시오.

537 595 

538## 일반적인 실패 패턴 피하기596이를 직접 정리해야 하는 경우는 거의 없습니다.

539 597 

540이는 일반적인 실수입니다. 조기에 인식하면 시간을 절약합니다:598* 이름 없는 워크트리 세션을 종료하면, 워크트리에 아무것도 없는 경우 Claude Code가 [워크트리를 제거합니다](https://code.claude.com/docs/ko/worktrees.md#clean-up-worktrees). 이름이 있는 세션이나 변경 사항이 있는 세션의 경우 어떻게 할지 묻습니다.

599* 서브에이전트 워크트리는 서브에이전트가 변경 없이 끝나면 사라집니다.

600* 남겨진 서브에이전트 및 백그라운드 세션 워크트리는 `cleanupPeriodDays`보다 오래되고 작업 내용이 없으면 정리됩니다.

541 601 

542* **주방 싱크 세션.** 한 작업으로 시작한 다음 Claude에게 관련 없는 것을 물어본 다음 첫 번째 작업으로 돌아갑니다. Context는 관련 없는 정보로 가득 찹니다.602> [!NOTE]

543 > **수정**: 관련 없는 작업 간에 `/clear`.603>

544* **반복적으로 수정.** Claude가 뭔가 잘못하고, 당신이 수정하고, 여전히 잘못되고, 다시 수정합니다. Context는 실패한 접근 방식으로 오염됩니다.604> `claude -p --worktree` 실행은 묻지 않고 종료되므로 직접 정리해야 합니다. `git worktree remove <path>`로 제거하고, 워크트리가 잠겨 있어 git이 거부하면 먼저 `git worktree unlock <path>`를 실행하십시오.

545 > **수정**: 두 번의 실패한 수정 후 `/clear`를 하고 배운 내용을 통합하는 더 나은 초기 프롬프트를 작성하십시오.

546* **과도하게 지정된 CLAUDE.md.** CLAUDE.md가 너무 길면 Claude는 중요한 규칙이 노이즈에 손실되기 때문에 절반을 무시합니다.

547 > **수정**: 무자비하게 정리하십시오. Claude가 지시사항 없이 이미 올바르게 수행하면 삭제하거나 hook으로 변환하십시오.

548* **신뢰-검증 간격.** Claude는 그럴듯해 보이지만 엣지 케이스를 처리하지 않는 구현을 생성합니다.

549 > **수정**: 항상 검증(테스트, 스크립트, 스크린샷)을 제공하십시오. 검증할 수 없으면 배포하지 마십시오.

550* **무한 탐색.** 범위를 지정하지 않고 Claude에게 뭔가를 "조사"하도록 요청합니다. Claude는 수백 개의 파일을 읽으며 context를 채웁니다.

551 > **수정**: 조사를 좁게 범위 지정하거나 subagents를 사용하여 탐색이 주요 context를 소비하지 않도록 하십시오.

552 605 

553***606여러 파일에 걸친 하나의 큰 기계적 변경에는 [`/batch migrate every handler to the v2 response helpers`](https://code.claude.com/docs/ko/commands)가 작업을 5\~30개 단위로 나누고 계획을 보여 줍니다. 그런 다음 각 단위를 자체 워크트리에서 실행하고 각각에 대해 PR을 엽니다. 셸에서는 [`claude agents`](https://code.claude.com/docs/ko/agent-view)(아직 리서치 프리뷰)가 머신의 백그라운드에서 실행 중인 모든 것을 한 화면에서 보여 줍니다.

554 607 

555## 직관 개발하기608두 번째 세션은 가장 쉽게 얻을 수 있는 독립적인 리뷰어이기도 합니다. 한 세션이 속도 제한기를 작성하고, 다른 세션은 작성 과정을 보지 않은 채 `@src/middleware/rateLimiter.ts`를 리뷰하며, 사용자가 그 결과를 첫 번째 세션에 붙여 넣습니다. `/code-review`와 같은 아이디어이며, 메시지를 사용자가 전달하는 것입니다.

556 609 

557이 가이드의 패턴은 정해진 것이 아닙니다. 일반적으로 잘 작동하지만 모든 상황에 최적일 수는 없는 시작점입니다.610## 더 이상 하지 않아도 되는 것

558 611 

559때로는 복잡한 문제에 깊이 있고 기록이 가치 있기 때문에 context가 누적되도록 *해야* 합니다. 때로는 작업이 탐색적이기 때문에 계획을 건너뛰고 Claude가 파악하도록 *해야* 합니다. 때로는 모호한 프롬프트가 정확히 맞기 때문에 Claude가 문제를 해석하는 방식을 보고 싶을 때입니다.612다음 항목은 모두 작성 당시에는 좋은 조언이었습니다. 대부분은 모델이 아직 안정적으로 할 수 없던 일을 우회하기 위한 방법이었고, 이제 모델이 그 수준에 도달했습니다. 몇 가지가 아직 습관으로 남아 있다면, 이를 버려도 되는 이유는 다음과 같습니다.

560 613 

561작동하는 것에 주의를 기울이십시오. Claude가 훌륭한 출력을 생성할 때 당신이 한 것을 주목하십시오: 프롬프트 구조, 제공한 context, 당신이 있던 모드. Claude가 어려움을 겪을 때 왜인지 물어보십시오. Context가 너무 시끄러웠습니까? 프롬프트가 너무 모호했습니까? 작업이 한 번에 너무 컸습니까?614| 이전 조언 | 더 이상 필요 없는 이유 |

615| :- | :- |

616| 컨텍스트 윈도우가 주요 제약이므로 적극적으로 관리하라 | 대부분의 최신 모델은 1M 토큰 윈도우를 가지고 있고 압축이 자동으로 이루어지므로 컨텍스트가 부족해지는 경우는 드뭅니다. 그래도 작업 사이에 `/clear`를 실행할 가치는 있습니다. 집중된 컨텍스트가 더 나은 답을 주고 비용도 적게 들기 때문입니다. |

617| Claude가 계속 놓치는 지시에 IMPORTANT나 대문자를 추가하라 | 이전 모델은 때때로 강조가 필요했습니다. 최신 모델은 평이하게 작성된 줄을 따르며, 강조를 쌓으면 주로 Claude가 규칙을 과도하게 적용하게 됩니다. 굽힐 수 없는 규칙이라면 훅이나 거부 규칙으로 만드십시오. 긴 파일에서 그 줄이 묻히고 있다면 파일을 줄여야 합니다. |

618| 컨텍스트 윈도우를 보호하기 위해 서브에이전트를 사용하라 | 컨텍스트 부족은 이제 거의 문제가 되지 않습니다. 서브에이전트는 여전히 병렬 작업, 시끄러운 출력 격리, 독립적인 리뷰에 훌륭하지만, 각각 추가 토큰이 듭니다. |

619| 더 나은 답을 얻으려면 서브에이전트에 위임하라 | 같은 작업을 서브에이전트에 넘긴다고 답이 더 나아지지는 않습니다. 새 리뷰어는 사용자의 추론을 보지 않았기 때문에 도움이 되지만, 이는 위임과는 다른 것입니다. |

620| 프롬프트에 `think hard`, `think harder`, `be thorough` 넣기 | 그 역할은 effort가 담당합니다. 이런 문구는 effort를 높이는 키워드가 아니라, effort 설정 범위 안에서 Claude를 약간 유도하는 일반적인 프롬프트 텍스트입니다. `ultrathink`는 여전히 작동합니다. effort 설정을 건드리지 않고 해당 턴 한 번에 대해 더 깊은 추론을 요청합니다. |

621| Claude에게 계속하라고, 완료될 때까지 반복하라고, 게으름 피우지 말라고 말하라 | 최신 모델은 대개 별도 지시 없이도 합의된 작업을 끝까지 수행하며, 그런 문구는 멈춤을 해결하기보다 과잉 작업을 일으킬 가능성이 더 큽니다. Claude에게 통과해야 할 확인 수단을 제공하는 것은 다른 문제이며, 여전히 할 가치가 있습니다. 실행이 너무 일찍 멈추면 `continue`라고 말하고, 아무도 지켜보지 않는 실행에서는 `/goal`이나 `Stop` 훅이 이를 강제합니다. |

622| `CLAUDE.md`에 아키텍처와 파일 구조를 설명하라 | Claude는 저장소를 직접 읽습니다. 저장소에 없는 것만 적어 두십시오. |

562 623 

563시간이 지남에 따라 어떤 가이드도 포착할 수 없는 직관을 개발할 것입니다. 구체적일 때와 개방적일 때, 계획할 때와 탐색할 때, context를 지울 때와 누적하도록 할 때를 알게 될 것입니다.624이 페이지의 다른 조언도 언젠가 쓸데없는 일처럼 느껴지기 시작한다면, 그것 역시 이 표에 들어가야 한다는 신호일 가능성이 높습니다.

564 625 

565## 관련 리소스626## 관련 리소스

566 627 

567* [Claude Code 작동 방식](https://code.claude.com/docs/ko/how-claude-code-works.md): 에이전트 루프, 도구, context 관리628* [Claude Code 작동 방식](https://code.claude.com/docs/ko/how-claude-code-works.md): 루프, 도구, 시작 시 로드되는 항목

568* [Claude Code 확장](https://code.claude.com/docs/ko/features-overview.md): skills, hooks, MCP, subagents, plugins629* [컨텍스트 윈도우 살펴보기](https://code.claude.com/docs/ko/context-window.md): 세션에서 무엇이 공간을 차지하고 언제 로드되는지

569* [일반적인 워크플로우](https://code.claude.com/docs/ko/common-workflows.md): 디버깅, 테스트, PR 등에 대한 단계별 레시피630* [Claude Code 확장](https://code.claude.com/docs/ko/features-overview.md): 스킬, 훅, MCP, 서브에이전트, 플러그인 중에서 선택하기

570* [CLAUDE.md](https://code.claude.com/docs/ko/memory.md): 프로젝트 규칙 및 지속적인 context 저장631* [권한 모드 선택](https://code.claude.com/docs/ko/permission-modes.md) 및 [권한 구성](https://code.claude.com/docs/ko/permissions.md)

632* [비용 효과적으로 관리하기](https://code.claude.com/docs/ko/costs.md)

633* [프로그래밍 방식으로 Claude Code 실행하기](https://code.claude.com/docs/ko/headless.md) 및 [클라우드 예약 작업으로 작업 자동화하기](https://code.claude.com/docs/ko/routines.md)

634* 팀 리더 및 관리자용: [조직을 위한 Claude Code 설정](https://code.claude.com/docs/ko/admin-setup.md)

chrome.md +1 −1

Details

43 43 

44HIPAA가 활성화된 Enterprise 조직에서는 Claude in Chrome이 기본적으로 꺼져 있으며, [Owner](https://code.claude.com/docs/ko/server-managed-settings.md#access-control)가 [**Organization settings > Claude in Chrome**](https://claude.ai/admin-settings/browser-extension)에서 켤 수 있습니다. Anthropic과 체결한 비즈니스 제휴 계약(BAA)은 Claude in Chrome을 통해 타사 사이트로 전송되는 데이터를 보장하지 않습니다. 적격 서비스 목록은 [구현 가이드](https://trust.anthropic.com/resources?s=l1wrssd9hsbi4gak0tp5a6\&name=%5Banthropic%5D-hipaa-ready-offering-implementation-guide)를 참조하세요.44HIPAA가 활성화된 Enterprise 조직에서는 Claude in Chrome이 기본적으로 꺼져 있으며, [Owner](https://code.claude.com/docs/ko/server-managed-settings.md#access-control)가 [**Organization settings > Claude in Chrome**](https://claude.ai/admin-settings/browser-extension)에서 켤 수 있습니다. Anthropic과 체결한 비즈니스 제휴 계약(BAA)은 Claude in Chrome을 통해 타사 사이트로 전송되는 데이터를 보장하지 않습니다. 적격 서비스 목록은 [구현 가이드](https://trust.anthropic.com/resources?s=l1wrssd9hsbi4gak0tp5a6\&name=%5Banthropic%5D-hipaa-ready-offering-implementation-guide)를 참조하세요.

45 45 

46Chrome 통합을 사용하려면 `/login`으로 로그인해야 합니다. API 키 또는 [`claude setup-token`](https://code.claude.com/docs/ko/authentication#generate-a-long-lived-token)으로 생성한 장기 토큰으로 인증하는 경우, 브라우저 확장 프로그램이 해당 자격 증명으로 인증할 수 없으므로 `--chrome`을 전달하더라도 Claude Code는 Chrome 통합을 비활성화한 상태로 유지합니다. v2.1.216 이전에는 이러한 세션에서 Chrome 통합을 활성화할 수 있었지만, 브라우저 확장 프로그램에 연결하려는 모든 시도가 403 오류로 실패했습니다.46또한 Chrome 통합을 사용하려면 `/login`으로 로그인해야 합니다. API 키 또는 [`claude setup-token`](https://code.claude.com/docs/ko/authentication#generate-a-long-lived-token)으로 생성한 장기 토큰으로 인증하는 경우, `--chrome`을 전달하더라도 Claude Code는 Chrome 통합을 비활성화한 상태로 유지합니다. 브라우저 확장 프로그램은 해당 자격 증명으로 인증할 수 없습니다.

47 47 

48> [!NOTE]48> [!NOTE]

49>49>

Details

689 689 

690### `admin`690### `admin`

691 691 

692선택 사항입니다. Anthropic의 공개 Admin API를 그대로 따르는 `/v1/organizations/spend_limits`와 `/v1/messages`에서의 개발자별 지출 적용을 활성화합니다. 한도를 설정하고 적용하는 방법은 [지출 한도](https://code.claude.com/docs/ko/claude-apps-gateway-spend-limits.md)를 참조하십시오. 이 섹션에서는 이 기능을 켜고 조정하는 `gateway.yaml` 키를 다룹니다.692선택 사항입니다. Anthropic의 공개 Admin API를 그대로 반영하는 `/v1/organizations/spend_limits`와 `/v1/messages`에 대한 개발자별 지출 적용을 활성화합니다. 한도를 설정하고 적용하는 방법은 [지출 한도](https://code.claude.com/docs/ko/claude-apps-gateway-spend-limits.md)를 참조하십시오. 이 섹션에서는 이 기능을 켜고 조정하는 `gateway.yaml` 키를 다룹니다.

693 693 

694```yaml theme={null}694```yaml theme={null}

695admin:695admin:


709 709 

710| 필드 | 필수 | 설명 |710| 필드 | 필수 | 설명 |

711| - | - | - |711| - | - | - |

712| `write_keys` | 아니요 | `{id, key}`의 배열입니다. 이 중 하나와 일치하는 `x-api-key`는 지출 한도를 나열, 설정, 삭제할 수 있습니다. 키 값은 32자 이상이어야 하며, `id`는 `read_keys`와 `write_keys` 전체에서 고유해야 합니다. |712| `write_keys` | 아니요 | `{id, key}`의 배열입니다. 이 중 하나와 일치하는 `x-api-key`는 지출 한도를 나열, 설정, 삭제할 수 있습니다. 키 값은 최소 32자여야 하며, `id`는 `read_keys`와 `write_keys` 전체에서 고유해야 합니다. |

713| `read_keys` | 아니요 | `{id, key}`의 배열입니다. 읽기 전용이며, 한도 나열, ID로 단일 한도 조회, [`/effective`](https://code.claude.com/docs/ko/claude-apps-gateway-spend-limits#%2Feffective) 및 [`/audit`](https://code.claude.com/docs/ko/claude-apps-gateway-spend-limits#%2Faudit) 읽기를 포함한 모든 `GET` 엔드포인트에 접근할 수 있습니다. |713| `read_keys` | 아니요 | `{id, key}`의 배열입니다. 읽기 전용으로, 한도 나열, ID로 한도 하나 가져오기, [`/effective`](https://code.claude.com/docs/ko/claude-apps-gateway-spend-limits#%2Feffective) 및 [`/audit`](https://code.claude.com/docs/ko/claude-apps-gateway-spend-limits#%2Faudit) 읽기를 포함한 모든 `GET` 엔드포인트에 접근할 수 있습니다. |

714| `admin_groups` | 아니요 | IdP 그룹 이름입니다. `groups` 클레임에 이 중 하나가 포함된 게이트웨이 JWT는 읽기와 쓰기를 모두 포함한 전체 관리자 액세스 권한을 가지며, 감사 로그에는 `oidc:<sub>`로 기록됩니다. 사람 관리자에게는 이 방식을, 머신에는 API 키를 사용하십시오. 이 목록에 빈 항목이 있으면 게이트웨이가 부팅 시 중지됩니다. [부팅 시 게이트웨이를 중지시키는 matcher 값](#matcher-values-that-stop-the-gateway-at-boot)을 참조하십시오. |714| `admin_groups` | 아니요 | IdP 그룹 이름입니다. `groups` 클레임에 이 중 하나가 포함된 게이트웨이 JWT는 읽기와 쓰기를 포함한 전체 관리자 접근 권한을 가지며, `oidc:<sub>`로 감사 기록됩니다. 사람 관리자에게는 이 방식을, 머신에는 API 키를 사용하십시오. 이 목록에 빈 항목이 있으면 게이트웨이가 부팅 시 중지됩니다. [부팅 시 게이트웨이를 중지시키는 matcher 값](#matcher-values-that-stop-the-gateway-at-boot)을 참조하십시오. |

715| `blocked_message` | 아니요 | 차단된 개발자가 보게 되는 `429 billing_error`에 그대로 추가됩니다. URL이나 Slack 채널처럼 전체 안내 문구를 작성하십시오. 설정하지 않으면 게이트웨이는 기본 메시지만 보냅니다. [적용 방식](https://code.claude.com/docs/ko/claude-apps-gateway-spend-limits.md#how-enforcement-works)을 참조하십시오. |715| `blocked_message` | 아니요 | 차단된 개발자가 보는 `429 billing_error`에 그대로 덧붙여집니다. URL이나 Slack 채널 등 전체 안내 문구를 작성하십시오. 설정하지 않으면 게이트웨이는 기본 메시지만 보냅니다. [적용 방식](https://code.claude.com/docs/ko/claude-apps-gateway-spend-limits.md#how-enforcement-works)을 참조하십시오. |

716| `audit_retention_days` | 아니요 | 기본값은 `365`입니다. 이보다 오래된 `admin_audit` 행은 정리됩니다. |716| `audit_retention_days` | 아니요 | 기본값은 `365`입니다. 이보다 오래된 `admin_audit` 행은 정리됩니다. |

717| `spend_retention_months` | 아니요 | 기본값은 `13`입니다. 이보다 오래된 `spend` 카운터 행은 정리됩니다. 기본값은 전년 대비 보고를 위해 1년 전체와 현재 진행 중인 월을 유지합니다. |717| `spend_retention_months` | 아니요 | 기본값은 `13`입니다. 이보다 오래된 `spend` 카운터 행은 정리됩니다. 기본값은 전년 대비 보고를 위해 1년 전체와 진행 중인 현재 월을 보관합니다. |

718| `identity_retention_days` | 아니요 | 기본값은 `90`입니다. 각 개발자의 이메일, 표시 이름, 그룹(PII)을 저장하는 `principal_emails` 행의 마지막 확인 기준 TTL입니다. 프로비저닝이 해제된 ID는 만료되고 익명 지출 카운터는 남도록 의도적으로 지출 보존 기간보다 짧게 설정되어 있습니다. |718| `identity_retention_days` | 아니요 | 기본값은 `90`입니다. 각 개발자의 이메일, 표시 이름, 그룹(PII)을 담는 `principal_emails` 행의 마지막 확인 시점 기준 TTL입니다. 프로비저닝이 해제된 ID는 만료되고 익명 지출 카운터는 남도록 의도적으로 지출 보존 기간보다 짧게 설정되어 있습니다. |

719| `group_limit_mode` | 아니요 | `min`(기본값) 또는 `max`입니다. 개발자가 한도가 있는 여러 그룹에 속한 경우, `min`은 가장 엄격한 한도를, `max`는 가장 느슨한 한도를 적용합니다. 적용과 `/effective` 모두에서 사용됩니다. |719| `group_limit_mode` | 아니요 | `min`(기본값) 또는 `max`입니다. 개발자가 한도가 설정된 여러 그룹에 속한 경우 `min`은 가장 제한적인 한도를, `max`는 가장 덜 제한적인 한도를 적용합니다. 적용과 `/effective` 모두에서 사용됩니다. |

720 720 

721### `enforcement`721### `enforcement`

722 722 


724 724 

725| 필드 | 필수 | 설명 |725| 필드 | 필수 | 설명 |

726| - | - | - |726| - | - | - |

727| `fail_closed_on_error` | 아니요 | 기본값은 `false`입니다. Postgres 장애 시 지출 적용은 fail-open 방식으로 동작하므로 추론은 계속 유지됩니다. `true`로 설정하면 fail-closed 방식으로 동작합니다. 한도를 초과한 개발자는 차단되지만, 저장소에 연결할 수 없으면 다른 모든 사용자도 차단됩니다. [`admin:`](#admin) 블록이 필요합니다. 지출 적용은 `admin`이 구성된 경우에만 실행되며, 이 블록 없이 이 값을 `true`로 설정하면 게이트웨이가 시작을 거부합니다. |727| `fail_closed_on_error` | 아니요 | 기본값은 `false`입니다. Postgres 장애 시 지출 적용은 fail-open으로 동작하므로 추론은 계속 가능합니다. fail-closed로 동작하게 하려면 `true`로 설정하십시오. 이 경우 한도를 초과한 개발자가 차단되지만, 저장소에 연결할 수 없으면 다른 모든 사용자도 차단됩니다. [`admin:`](#admin) 블록이 필요합니다. 지출 적용은 `admin`이 구성된 경우에만 실행되며, `admin` 블록 없이 이 값을 `true`로 설정하면 게이트웨이가 시작을 거부합니다. |

728 728 

729### `pricing`729### `pricing`

730 730 

731`pricing` 블록은 지출 측정기에 USD 정가 대신 어떤 요금을 부과할지 알려 주므로, 한도와 [`/effective`](https://code.claude.com/docs/ko/claude-apps-gateway-spend-limits#%2Feffective)에 계약 요율이 반영됩니다. 금액은 USD로 유지되며 청구서가 아닌 추정치입니다. 사전 요구 사항은 두 가지입니다.731`pricing` 블록은 지출 미터가 USD 정가 대신 어떤 요금을 부과할지 지정하므로, 한도와 [`/effective`](https://code.claude.com/docs/ko/claude-apps-gateway-spend-limits#%2Feffective)가 계약 요금을 반영합니다. 금액은 USD로 유지되며 청구서가 아닌 추정치입니다. 사전 요구 사항은 두 가지입니다.

732 732 

733* 게이트웨이 서버에 Claude Code v2.1.227 이상이 필요합니다. 이전 버전은 부팅 시 알 수 없는 키를 거부합니다.733* 게이트웨이 서버에 Claude Code v2.1.227 이상이 필요합니다. 이전 버전은 부팅 시 알 수 없는 키를 거부합니다.

734* [`admin:`](#admin) 블록, 또는 v2.1.268 이상에서는 정책이 하나 이상 있는 [`managed:`](#managed) 블록이 필요합니다. `pricing`이 설정되어 있는데 두 블록이 모두 없으면 이를 읽는 곳이 없으므로 게이트웨이가 시작을 거부합니다.734* [`admin:`](#admin) 블록 또는 v2.1.268 이상에서는 하나 이상의 정책이 있는 [`managed:`](#managed) 블록이 필요합니다. `pricing`이 설정되어 있는데 두 블록이 모두 없으면, 이를 읽을 대상이 없으므로 게이트웨이가 시작을 거부합니다.

735 735 

736```yaml theme={null}736```yaml theme={null}

737pricing:737pricing:


747 747 

748| 필드 | 필수 | 설명 |748| 필드 | 필수 | 설명 |

749| - | - | - |749| - | - | - |

750| `multiplier` | 아니요 | 기본값은 `1`입니다. 측정기는 정가든 재정의된 가격이든 모든 측정 금액에 이 값을 곱하므로, `0.85`는 가격의 85%를 청구합니다. 0보다 크고 10 이하여야 하며, 1보다 큰 값은 [가산](#mark-prices-up)입니다. |750| `multiplier` | 아니요 | 기본값은 `1`입니다. 미터는 정가든 재정의된 요금이든 측정된 모든 금액에 이 값을 곱하므로, `0.85`는 가격의 85%를 청구합니다. 0보다 크고 10 이하여야 하며, 1보다 큰 값은 [마크업](#mark-prices-up)입니다. |

751| `overrides` | 아니요 | 백만 토큰당 USD 단위의 `{upstream, model, input, output, cache_read, cache_write}` 행입니다. 네 가지 요율이 모두 필요합니다. 각 요율은 0보다 크고 10000 이하여야 합니다. |751| `overrides` | 아니요 | 백만 토큰당 USD 단위의 `{upstream, model, input, output, cache_read, cache_write}` 행입니다. 네 가지 요금이 모두 필요합니다. 각 요금은 0보다 크고 10000 이하여야 합니다. |

752 752 

753측정기가 재정의 행을 일치시키는 방식:753미터가 재정의 행을 매칭하는 방식:

754 754 

755* 행은 `upstream`([`upstreams[].name`](#upstreams))이 `model`에 대해 처리하는 요청의 정가를 대체합니다. 여기에는 더 높은 [빠른 모드](https://code.claude.com/docs/ko/fast-mode.md#understand-the-cost-tradeoff) 요율도 포함되므로, 빠른 요청과 표준 요청은 동일한 네 가지 요율로 측정됩니다.755* 하나의 행은 [`upstreams[].name`](#upstreams)인 `upstream`이 `model`에 대해 처리하는 요청의 정가를 대체합니다. 여기에는 더 높은 [빠른 모드](https://code.claude.com/docs/ko/fast-mode.md#understand-the-cost-tradeoff) 요금도 포함되므로, 빠른 요청과 표준 요청은 동일한 네 가지 요금으로 측정됩니다.

756* `claude-sonnet-4-6`과 같은 기본 제공 ID는 [`models[].id`](#models)와 같은 방식으로 일치되며, 측정기가 해당 모델로 가격을 매기는 모든 날짜 형식, 리전별 Amazon Bedrock 형식, Google Cloud의 Agent Platform 형식을 포함합니다. 별칭이나 추론 프로필 ARN 같은 그 밖의 문자열은 클라이언트가 보낸 ID 또는 업스트림으로 보낸 문자열과 대소문자를 구분하지 않고 일치됩니다.756* `claude-sonnet-4-6` 같은 기본 제공 ID는 [`models[].id`](#models)와 같은 방식으로 매칭되며, 미터가 해당 모델로 가격을 매기는 모든 날짜 포함 형식, 리전별 Amazon Bedrock 형식, Google Cloud의 Agent Platform 형식을 포괄합니다. 별칭이나 추론 프로필 ARN 같은 그 밖의 문자열은 클라이언트가 보낸 ID 또는 업스트림으로 보낸 문자열과 대소문자를 구분하지 않고 매칭됩니다.

757* 행이 겹치는 경우 측정기는 첫 번째 행이 아니라 가장 구체적인 행을 선택합니다. 우선 `model`이 업스트림으로 보낸 정확한 모델 문자열인 행, 다음으로 클라이언트가 보낸 정확한 ID와 일치하는 행, 그다음으로 기본 제공 모델을 지정한 행 순입니다.757* 행이 겹치는 경우 미터는 첫 번째 행이 아니라 가장 구체적인 행을 선택합니다. 우선 `model`이 업스트림으로 보낸 정확한 모델 문자열인 행, 그다음 클라이언트가 보낸 정확한 ID와 일치하는 행, 그다음 기본 제공 모델을 지정하는 행 순입니다.

758* 알 수 없는 업스트림 이름은 부팅에 실패하며, 하나의 업스트림에 대해 같은 모델을 지정한 두 행(하나의 기본 제공 모델을 두 가지 표기로 쓴 경우 포함)도 부팅에 실패합니다. 요청 가능한 어떤 모델도 사용할 수 없는 행에 대해서는 게이트웨이가 부팅 시 경고합니다.758* 알 수 없는 업스트림 이름은 부팅에 실패하며, 하나의 업스트림에 대해 같은 모델을 지정하는 두 행(하나의 기본 제공 모델을 두 가지 표기로 지정하는 경우 포함)도 마찬가지입니다. 요청 가능한 모델이 사용할 수 없는 행에 대해서는 게이트웨이가 부팅 시 경고합니다.

759* 웹 검색 요청은 \$0.01 정가를 유지하지만, multiplier는 여전히 적용됩니다.759* 웹 검색 요청은 \$0.01 정가로 유지되지만, 배수는 여전히 적용됩니다.

760 760 

761리전별 요율을 사용하려면 리전마다 이름이 지정된 업스트림을 따로 두고 업스트림당 하나의 행을 지정하십시오.761리전별 요금을 적용하려면 각 리전에 고유한 이름의 업스트림을 지정하고 업스트림마다 행 하나를 두십시오.

762 762 

763#### 가격 가산763#### 가격 인상

764 764 

765게이트웨이 서버에 v2.1.271 이상이 있으면 `multiplier`를 1보다 크게, 최대 10까지 설정하여 내부 차지백 요율처럼 제공업체가 청구하는 금액보다 많이 측정할 수 있습니다. 다음 예시는 모든 요청을 가격의 120%로 측정합니다.765게이트웨이 서버에 v2.1.271 이상이 있으면 `multiplier`를 1보다 크게(최대 10까지) 설정하여 내부 차지백 요금처럼 공급자가 청구하는 금액보다 더 많이 측정할 수 있습니다. 이 예시는 모든 요청을 가격의 120%로 측정합니다.

766 766 

767```yaml theme={null}767```yaml theme={null}

768pricing:768pricing:

769 multiplier: 1.2769 multiplier: 1.2

770```770```

771 771 

772[`admin:`](#admin) 블록이 있으면 가산은 지출 한도에도 적용됩니다. 측정기가 가격의 120%를 집계하므로 개발자가 한도에 더 빨리 도달합니다. 게이트웨이는 부팅 시 이를 알리는 경고를 로그에 기록합니다.772[`admin:`](#admin) 블록이 있으면 마크업은 지출 한도에도 적용됩니다. 미터가 가격의 120%를 집계하므로 개발자는 한도에 더 빨리 도달합니다. 게이트웨이는 부팅 시 이 사실을 알리는 경고를 로그에 기록합니다.

773 773 

774multiplier는 업스트림 제공업체가 요청에 대해 청구하는 금액을 변경하지 않습니다.774배수는 업스트림 공급자가 해당 요청에 대해 청구하는 금액을 변경하지 않습니다.

775 775 

776게이트웨이가 [로그인한 클라이언트에 요율도 보내는](#send-the-rates-to-signed-in-clients) 경우, 개발자가 가산을 확인하려면 Claude Code v2.1.271 이상이 필요합니다. 이전 클라이언트는 1보다 큰 `multiplier`를 무시하고 가산 없이 비용을 표시합니다.776게이트웨이가 [로그인한 클라이언트에 요금도 전송](#send-the-rates-to-signed-in-clients)하는 경우, 개발자가 마크업을 보려면 Claude Code v2.1.271 이상이 필요합니다. 이전 클라이언트는 1보다 큰 `multiplier`를 무시하고 마크업 없이 비용을 표시합니다.

777 777 

778v2.1.271 이전 게이트웨이 서버는 `multiplier`를 1보다 크게 설정하면 시작을 거부합니다.778v2.1.271 이전 게이트웨이 서버는 `multiplier`를 1보다 크게 설정하면 시작을 거부합니다.

779 779 

780#### 로그인한 클라이언트에 요율 보내기780#### 로그인한 클라이언트에 요금 전송

781 781 

782게이트웨이 서버에 v2.1.268 이상이 있으면 게이트웨이는 `pricing`의 요율을 자신이 제공하는 [`managed`](#managed) 정책에 [`modelPricing`](https://code.claude.com/docs/ko/settings-reference#modelpricing) 관리형 설정으로도 넣습니다. 그러면 정책과 일치하는 개발자는 `/usage`, 상태줄, OpenTelemetry에서 각 모델 ID를 처리하는 첫 번째 업스트림의 `pricing` 요율을 보게 됩니다. 어떤 정책과도 일치하지 않는 개발자는 관리형 설정을 받지 않으므로 수치가 정가로 유지됩니다. 클라이언트는 Claude Code v2.1.242 이상에서 이 설정을 적용합니다.782게이트웨이 서버에 v2.1.268 이상이 있으면 게이트웨이는 `pricing`의 요금을 자신이 제공하는 [`managed`](#managed) 정책에 [`modelPricing`](https://code.claude.com/docs/ko/settings-reference#modelpricing) 관리형 설정으로도 넣습니다. 그러면 정책에 매칭된 개발자는 `/usage`, 상태줄, OpenTelemetry에서 각 모델 ID를 처리하는 첫 번째 업스트림의 `pricing` 요금을 보게 됩니다. 어떤 정책에도 매칭되지 않는 개발자는 관리형 설정을 받지 않으므로 수치가 정가로 유지됩니다. 클라이언트는 Claude Code v2.1.242 이상에서 이 설정을 적용합니다.

783 783 

784* 게이트웨이가 추가하는 항목: 정책의 `cli` 블록에 이미 `modelPricing`이 설정되어 있지 않으면, 게이트웨이는 `multiplier`와, 클라이언트가 요청할 수 있는 모든 모델 ID에 대해 해당 ID를 처리하는 첫 번째 업스트림의 재정의 행을 추가합니다. 장애 조치 업스트림만 부과하는 요율은 게이트웨이에만 남습니다.784* 게이트웨이가 추가하는 항목: 정책의 `cli` 블록에 이미 `modelPricing`이 설정되어 있지 않으면, 게이트웨이는 `multiplier`와 함께 클라이언트가 요청할 수 있는 모든 모델 ID에 대해 해당 ID를 처리하는 첫 번째 업스트림의 재정의 행을 추가합니다. 장애 조치 업스트림만 청구하는 요금은 게이트웨이에 남습니다.

785* 특정 정책 제외: 해당 정책의 `cli` 블록에서 `modelPricing`을 `{}`로 설정하면 그 정책의 개발자는 정가를 유지합니다.785* 특정 정책 제외: 해당 정책의 `cli` 블록에서 `modelPricing`을 `{}`로 설정하면 그 정책의 개발자는 정가로 유지됩니다.

786* 정책 자체 요율 유지: `cli` 블록에서 자체 `multiplier` 또는 `overrides`로 `modelPricing`을 설정한 정책은 그 `modelPricing`을 그대로 유지하며, 게이트웨이는 여기에 자체 요율을 추가하지 않습니다.786* 정책 자체 요금 유지: `cli` 블록에서 자체 `multiplier` 또는 `overrides`로 `modelPricing`을 설정한 정책은 해당 `modelPricing`을 그대로 유지하며, 게이트웨이는 여기에 자체 요금을 추가하지 않습니다.

787 787 

788### `models`788### `models`

789 789 

790`models` 블록은 관리자가 선별하는 선택적 모델 목록으로, `/v1/models`에서 제공되며 업스트림별로 모델 ID를 변환하는 데 사용됩니다. 미국 외 Amazon Bedrock 리전, Amazon Bedrock 프로비저닝된 처리량 ARN, Microsoft Foundry 배포 이름에는 필수입니다.790`models` 블록은 관리자가 큐레이션하는 선택적 모델 목록으로, `/v1/models`에서 제공되며 업스트림별로 모델 ID를 변환하는 데 사용됩니다. 미국 외 Amazon Bedrock 리전, Amazon Bedrock 프로비저닝된 처리량 ARN, Microsoft Foundry 배포 이름에는 필수입니다.

791 791 

792```yaml theme={null}792```yaml theme={null}

793auto_include_builtin_models: true # false: expose only the list below793auto_include_builtin_models: true # false: expose only the list below


801 foundry: your-opus-deployment-name801 foundry: your-opus-deployment-name

802```802```

803 803 

804`upstream_model` 아래의 각 키는 구성된 업스트림의 `name`과 일치해야 하며, 이 값의 기본값은 제공업체 이름입니다. 어떤 업스트림과도 일치하지 않는 키는 부팅에 실패하므로, 사용하지 않는 제공업체의 줄은 생략하십시오.804`upstream_model` 아래의 각 키는 구성된 업스트림의 `name`과 일치해야 하며, 이 값의 기본값은 공급자 이름입니다. 어떤 업스트림과도 일치하지 않는 키는 부팅에 실패하므로, 사용하지 않는 공급자의 줄은 생략하십시오.

805 805 

806### `managed`806### `managed`

807 807 

808`managed` 블록은 IdP 그룹이나 이메일 도메인을 키로 하는 역할 기반 액세스 정책을 정의합니다. 정책은 순서대로 평가되며, 처음 일치한 정책이 선택된 다음 `match: {}` 포괄 기본 정책 위에 병합됩니다. 정책은 `GET /managed/settings`에서 사용자별로 ETag/304 캐싱과 함께 제공됩니다.808`managed` 블록은 IdP 그룹 또는 이메일 도메인을 키로 하는 역할 기반 접근 정책을 정의합니다. 정책은 순서대로 평가되며, 첫 번째로 매칭된 정책이 선택된 다음 `match: {}` 캐치올 기반 위에 병합됩니다. 정책은 ETag/304 캐싱과 함께 `GET /managed/settings`에서 사용자별로 제공됩니다.

809 809 

810```yaml theme={null}810```yaml theme={null}

811managed:811managed:


824 enforceAvailableModels: true824 enforceAvailableModels: true

825```825```

826 826 

827관례적으로 마지막에 나열하는 `match: {}` 포괄 정책은 기본 레이어로 취급됩니다. 다른 모든 정책은 자신이 설정하지 않은 키를 포괄 정책에서 상속하므로, 역할별 항목에는 조직 기본값과 다른 부분만 나열하면 됩니다. 병합 규칙은 키 유형에 따라 다릅니다.827관례상 마지막에 나열하는 `match: {}` 캐치올은 기본 레이어로 취급됩니다. 다른 모든 정책은 자신이 설정하지 않은 키를 캐치올에서 상속하므로, 역할별 항목에는 조직 기본값과 다른 부분만 나열하면 됩니다. 병합 규칙은 키 유형에 따라 다릅니다.

828 828 

829* **허용 목록**: `availableModels` 및 `permissions.allow`. 구체적인 정책의 목록이 기본 정책의 목록을 완전히 대체합니다.829* **허용 목록**: `availableModels` 및 `permissions.allow`. 특정 정책의 목록이 기반의 목록을 완전히 대체합니다.

830* **거부 목록 및 훅 배열**: `permissions.deny`, `permissions.ask`, `disabledMcpjsonServers`, `deniedMcpServers`, `blockedMarketplaces`, `deniedModels` 및 모든 `hooks` 이벤트 유형 배열. 기본 정책과 해당 정책의 합집합을 사용하므로, 조직 전체의 거부 규칙이나 감사 훅이 역할별 재정의로 인해 실수로 누락되지 않습니다.830* **거부 목록 및 훅 배열**: `permissions.deny`, `permissions.ask`, `disabledMcpjsonServers`, `deniedMcpServers`, `blockedMarketplaces`, `deniedModels`, 그리고 모든 `hooks` 이벤트 유형 배열. 이들은 기반과 정책의 합집합을 취하므로, 조직 전체의 거부 규칙이나 감사 훅이 역할별 재정의로 인해 실수로 누락되지 않습니다.

831* **레코드 유형 키**: `env`, `modelOverrides`, `skillOverrides`. 얕은 병합이 적용되므로, 역할별 `env` 블록은 자신이 설정한 키만 재정의하고 나머지는 기본 정책에서 상속합니다.831* **레코드 유형 키**: `env`, `modelOverrides`, `skillOverrides`. 이들은 얕은 병합을 수행하므로, 역할별 `env` 블록은 자신이 설정한 키를 재정의하고 나머지는 기반에서 상속합니다.

832 832 

833`availableModels`는 `/v1/messages`에서 서버 측으로도 적용되므로, 클라이언트가 무엇을 보내든 거부된 모델은 `400`을 반환합니다. 빈 목록은 모든 모델을 거부합니다. 이 검사는 개발자가 모델을 선택하기 전에 세션이 시작되는 모델에도 적용되므로, [정책이 허용하는 모델로 세션을 시작](#start-sessions-on-a-model-the-policy-allows)하도록 하십시오.833`availableModels`는 `/v1/messages`에서 서버 측으로도 적용되므로, 거부된 모델은 클라이언트가 무엇을 보내든 `400`을 반환합니다. 빈 목록은 모든 모델을 거부합니다. 이 검사는 개발자가 모델을 선택하기 전에 세션이 시작되는 모델에도 적용되므로 [정책이 허용하는 모델로 세션을 시작](#start-sessions-on-a-model-the-policy-allows)하도록 설정하십시오.

834 834 

835게이트웨이는 요청을 전달하기 전에 `model` 값 자체를 검증하므로, 잘못된 형식의 값은 업스트림에 도달하지 않습니다. 다음 두 경우에 요청을 `400`으로 거부합니다.835게이트웨이는 요청을 중계하기 전에 `model` 값 자체를 검증하므로, 잘못된 형식의 값은 업스트림에 도달하지 않습니다. 다음 두 경우에 `400`으로 요청을 거부합니다.

836 836 

837* 값이 없거나 비어 있으면 게이트웨이는 `model is required` 메시지와 함께 요청을 거부합니다. 이 검사에는 Claude Code v2.1.228 이상을 실행하는 게이트웨이가 필요합니다.837* 값이 없거나 비어 있으면 게이트웨이는 `model is required` 메시지와 함께 요청을 거부합니다. 이 검사에는 Claude Code v2.1.228 이상을 실행하는 게이트웨이가 필요합니다.

838* 값이 있지만 문자열이 아니면 게이트웨이는 `model must be a string` 메시지와 함께 요청을 거부합니다. Claude Code v2.1.221 이상을 실행하는 게이트웨이가 필요합니다.838* 값이 있지만 문자열이 아니면 게이트웨이는 `model must be a string` 메시지와 함께 요청을 거부합니다. Claude Code v2.1.221 이상을 실행하는 게이트웨이가 필요합니다.

839 839 

840| Matcher | 동작 |840| Matcher | 동작 |

841| - | - |841| - | - |

842| `match: {}` | 인증된 모든 사용자와 일치합니다. 이 정책 하나로 시작한 뒤 나중에 그 위에 그룹 범위 정책을 추가하십시오. |842| `match: {}` | 인증된 모든 사용자와 매칭됩니다. 이것으로 시작하고 나중에 그 위에 그룹 범위 정책을 추가하십시오. |

843| `match: { groups: [a, b] }` | JWT의 `groups` 클레임에 나열된 그룹 중 하나라도 포함되면 일치합니다. 대소문자를 구분하므로 그룹은 IdP의 정확한 대소문자와 일치해야 합니다. |843| `match: { groups: [a, b] }` | JWT의 `groups` 클레임에 나열된 그룹 중 하나라도 포함되면 매칭됩니다. 대소문자를 구분하므로 그룹은 IdP의 정확한 대소문자와 일치해야 합니다. |

844| `match: { email_domain: example.com }` | JWT의 `email` 클레임에서 마지막 `@` 뒤 부분과 대소문자를 구분하지 않고 일치시킵니다. 정책당 하나의 도메인을 허용합니다. |844| `match: { email_domain: example.com }` | JWT의 `email` 클레임에서 마지막 `@` 뒤 부분과 대소문자를 구분하지 않고 매칭됩니다. 정책당 하나의 도메인을 허용합니다. |

845| `match: { groups: [a], email_domain: example.com }` | 두 조건이 모두 일치해야 합니다 |845| `match: { groups: [a], email_domain: example.com }` | 두 조건이 모두 일치해야 합니다 |

846 846 

847어떤 정책과도 일치하지 않는 인증된 사용자는 게이트웨이의 기본값을 받습니다. 즉, 카탈로그의 모든 모델을 사용할 수 있으며 관리형 설정은 없습니다. 기본 정책을 보장하려면 마지막에 `match: {}` 포괄 정책을 추가하십시오.847어떤 정책에도 매칭되지 않는 인증된 사용자는 게이트웨이의 기본값, 즉 카탈로그의 모든 모델과 관리형 설정 없음을 받습니다. 기본 정책을 보장하려면 마지막에 `match: {}` 캐치올을 추가하십시오.

848 848 

849> [!NOTE]849> [!NOTE]

850>850>

851> 게이트웨이는 자체 사용자 디렉터리를 유지하지 않습니다. 각 요청을 사용자의 IdP 토큰으로 인가하며, 토큰의 `groups` 클레임에서 그룹 멤버십을 읽어 정책을 평가합니다. 열거할 명단도, 미리 만들어 둘 계정도 없으므로 SCIM이 동기화할 대상이 없어 SCIM 엔드포인트도 없습니다.851> 게이트웨이는 자체 사용자 디렉터리를 보관하지 않습니다. 사용자의 IdP 토큰으로 각 요청을 인가하며, 토큰의 `groups` 클레임에서 그룹 멤버십을 읽고 이를 기준으로 정책을 평가합니다. 열거할 명단도, 미리 생성할 계정도 없으므로 SCIM 엔드포인트도 없습니다. SCIM이 동기화할 대상이 없기 때문입니다.

852>852>

853> 사용자 및 그룹 수명 주기 관리는 신뢰할 수 있는 원본, 즉 IdP의 기본 SCIM 프로비저닝이나 전용 ID 거버넌스 플랫폼에서 수행하십시오. 그곳에서 관리되는 멤버십과 프로비저닝 해제는 토큰을 통해 게이트웨이에 자동으로 반영됩니다. Claude 계정 자체의 SCIM 프로비저닝이 필요하다면 이는 [Claude for Enterprise](https://code.claude.com/docs/ko/admin-setup.md) 기능입니다.853> 사용자 및 그룹 수명 주기 관리는 신뢰할 수 있는 원천, 즉 IdP의 기본 SCIM 프로비저닝이나 전용 ID 거버넌스 플랫폼에서 수행하십시오. 그곳에서 관리되는 멤버십과 프로비저닝 해제는 토큰을 통해 게이트웨이에 자동으로 반영됩니다. Claude 계정 자체의 SCIM 프로비저닝이 필요하다면 이는 [Claude for Enterprise](https://code.claude.com/docs/ko/admin-setup.md) 기능입니다.

854>854>

855> 두 가지 전파 주기가 적용됩니다.855> 두 가지 전파 주기가 적용됩니다.

856>856>

857> * **정책 내용**: 정책을 편집하고 다시 배포하면, [다음 실행 시에만 적용되는 변경 사항](https://code.claude.com/docs/ko/server-managed-settings.md#fetch-and-caching-behavior)을 제외하고 연결된 Claude Code 클라이언트의 다음 관리형 설정 폴링 시, 즉 1시간 이내에 반영됩니다857> * **정책 내용**: 정책을 편집하고 재배포하면 연결된 Claude Code 클라이언트의 다음 관리형 설정 폴링 시, 즉 1시간 이내에 반영됩니다. 단, [다음 실행 시에만 적용되는 변경 사항](https://code.claude.com/docs/ko/server-managed-settings.md#fetch-and-caching-behavior)은 예외입니다

858> * **그룹 멤버십**: 사용자의 그룹 멤버십을 변경하면 해당 사용자와 일치하는 정책이 바뀝니다. 이는 다음 세션 재발급, 즉 `session.ttl_hours`로 제한되는 다음 자동 갱신 시 적용됩니다.858> * **그룹 멤버십**: 사용자의 그룹 멤버십을 변경하면 해당 사용자에게 매칭되는 정책이 달라집니다. 이는 다음 세션 재발급, 즉 다음 자동 갱신 시 적용되며 `session.ttl_hours`로 제한됩니다.

859>859>

860> Claude Desktop은 [자체 일정](#when-a-policy-change-reaches-claude-desktop)을 따릅니다.860> Claude Desktop은 [자체 일정](#when-a-policy-change-reaches-claude-desktop)을 따릅니다.

861 861 

862#### 정책이 허용하는 모델로 세션 시작하기862#### 정책이 허용하는 모델로 세션 시작

863 863 

864`availableModels`에 Claude Code의 기본 모델이 빠져 있으면, 개발자가 `/model` 등으로 목록에 있는 모델을 선택할 때까지 세션이 `400` 응답을 받습니다. 게이트웨이 세션에서 기본값은 `opus` 별칭이 가리키는 Opus 모델이며, `availableModels`만으로는 이 값이 바뀌지 않습니다.864`availableModels`에 Claude Code의 기본 모델이 빠져 있으면, 개발자가 `/model` 등으로 목록에 있는 모델을 선택하기 전까지 세션은 `400` 응답을 받습니다. 게이트웨이 세션에서 기본값은 `opus` 별칭이 가리키는 Opus 모델이며, `availableModels`만으로는 이를 변경하지 않습니다.

865 865 

866이를 해결하려면 같은 `cli` 블록에서 [`enforceAvailableModels: true`](https://code.claude.com/docs/ko/model-config#enforce-the-allowlist-for-the-default-model)를 설정한 다음, 목록에 어떤 종류의 항목이 있는지 확인하십시오.866이를 해결하려면 같은 `cli` 블록에 [`enforceAvailableModels: true`](https://code.claude.com/docs/ko/model-config#enforce-the-allowlist-for-the-default-model)를 설정한 다음, 목록에 어떤 종류의 항목이 있는지 확인하십시오.

867 867 

868* **`sonnet` 같은 별칭 또는 `claude-sonnet-4-6` 같은 기본 제공 ID**: 세션이 해당 모델 중 하나로 시작되며, `/model`의 Default 옵션이 그 모델로 확인됩니다868* **`sonnet` 같은 별칭 또는 `claude-sonnet-4-6` 같은 기본 제공 ID**: 세션이 해당 모델 중 하나로 시작되며, `/model`의 Default 옵션이 해당 모델로 결정됩니다

869* **목록에 별칭이나 기본 제공 ID가 없음**: 세션이 계속 기본 제공 기본값으로 시작될 수 있으므로, 해당 정책의 `cli` 블록에서 [`model`](https://code.claude.com/docs/ko/model-config#control-the-model-users-run-on)도 목록에 있는 ID 중 하나로 설정하십시오869* **목록에 별칭이나 기본 제공 ID가 없음**: 세션이 계속 기본 제공 기본값으로 시작될 수 있으므로, 해당 정책의 `cli` 블록에서 [`model`](https://code.claude.com/docs/ko/model-config#control-the-model-users-run-on)도 목록에 있는 ID 중 하나로 설정하십시오

870 870 

871다음 정책은 [`models`](#models)에 정의된 사용자 지정 ID 하나를 나열하고 해당 ID로 세션을 시작합니다.871이 정책은 [`models`](#models)가 정의하는 사용자 지정 ID 하나를 나열하고, 해당 ID로 세션을 시작합니다.

872 872 

873```yaml theme={null}873```yaml theme={null}

874managed:874managed:


887* 빈 `groups` 목록887* 빈 `groups` 목록

888* `groups` 또는 `admin_groups`의 빈 항목888* `groups` 또는 `admin_groups`의 빈 항목

889* 빈 `email_domain`889* 빈 `email_domain`

890* `@`, 공백 또는 쉼표가 포함된 `email_domain`. 게이트웨이는 이 검사 전에 값을 트리밍하고 선행 `@` 하나를 제거합니다. `example.com`처럼 도메인 하나만 작성하십시오.890* `@`, 공백 또는 쉼표가 포함된 `email_domain`. 게이트웨이는 이 검사 전에 값을 다듬고 선행 `@` 하나를 제거합니다. `example.com`처럼 도메인 하나만 작성하십시오.

891 891 

892v2.1.232 이전에는 게이트웨이가 이러한 값으로도 시작되었습니다. 각 값의 영향은 다음과 같았습니다.892v2.1.232 이전에는 게이트웨이가 이러한 값이 있어도 시작되었습니다. 각 값의 영향은 다음과 같았습니다.

893 893 

894* 빈 `email_domain`: 게이트웨이가 도메인 검사를 건너뛰었으므로, 빈 `email_domain`이 있고 `groups` 목록이 없는 정책은 인증된 모든 사용자와 일치했습니다894* 빈 `email_domain`: 게이트웨이가 도메인 검사를 건너뛰었으므로, `email_domain`이 비어 있고 `groups` 목록이 없는 정책은 인증된 모든 사용자와 매칭되었습니다

895* 빈 `groups` 목록: 정책이 아무와도 일치하지 않았습니다895* 빈 `groups` 목록: 정책이 아무와도 매칭되지 않았습니다

896* `@`, 공백 또는 쉼표가 포함된 `email_domain`: 정책이 아무와도 일치하지 않았습니다896* `@`, 공백 또는 쉼표가 포함된 `email_domain`: 정책이 아무와도 매칭되지 않았습니다

897* `groups` 또는 `admin_groups`의 빈 항목: 사용자의 IdP `groups` 클레임에도 빈 항목이 있는 경우에만 해당 항목이 사용자와 일치했습니다. `admin_groups`에서는 이 일치로 관리자 액세스 권한이 부여되었습니다. `admin_groups` 목록에 빈 항목이 없었다면 이 방식으로 관리자 액세스 권한을 얻은 사람은 없습니다.897* `groups` 또는 `admin_groups`의 빈 항목: 해당 사용자의 IdP `groups` 클레임에도 빈 항목이 있는 경우에만 사용자와 매칭되었습니다. `admin_groups`에서는 이 매칭으로 관리자 접근 권한이 부여되었습니다. `admin_groups` 목록에 빈 항목이 한 번도 없었다면 이런 방식으로 관리자 접근 권한을 얻은 사람은 없습니다.

898 898 

899#### `cli` 또는 `code` 선택899#### `cli` 또는 `code` 선택

900 900 

901> [!WARNING]901> [!WARNING]

902>902>

903> 정책에서 `code` 키를 사용할 때 다음 각 항목은 게이트웨이의 시작을 막습니다.903> 정책이 `code` 키를 사용할 때 다음 각 항목은 게이트웨이 시작을 막습니다.

904>904>

905> * **게이트웨이 버전**: `code`에는 게이트웨이 서버에 Claude Code v2.1.296 이상이 필요합니다. 이전 게이트웨이는 이 키를 발견하면 시작을 거부합니다. 키를 추가하기 전에 모든 레플리카를 업그레이드하고, 이전 버전으로 롤백하기 전에 `code`를 다시 `cli`로 변경하십시오.905> * **게이트웨이 버전**: `code`에는 게이트웨이 서버에 Claude Code v2.1.296 이상이 필요합니다. 이전 게이트웨이는 이 키를 발견하면 시작을 거부합니다. 키를 추가하기 전에 모든 레플리카를 업그레이드하고, 이전 버전으로 롤백하기 전에 `code`를 다시 `cli`로 변경하십시오.

906> * **혼합 키**: `code`와 `cli`(또는 이전 표기인 `settings`)를 모두 포함한 파일은 부팅 시 게이트웨이를 중지시킵니다. 한 번의 편집으로 모든 블록을 하나의 키 아래에 두십시오.906> * **혼합 키**: `code`와 `cli`(또는 이전 표기인 `settings`)를 모두 포함하는 파일은 부팅 시 게이트웨이를 중지시킵니다. 한 번의 편집으로 모든 블록을 하나의 키 아래에 두십시오.

907 907 

908`.env` 파일 읽기를 거부하는 규칙과 같은 정책의 Claude Code 설정은 `cli` 또는 `code` 키 아래 블록에 들어갑니다. `code`가 권장 키이며 `cli`는 레거시 키입니다. 두 키는 같은 내용을 받습니다. 키에 따라 설정이 적용되는 위치가 결정됩니다.908`.env` 파일 읽기를 거부하는 규칙 같은 정책의 Claude Code 설정은 `cli` 또는 `code` 키 아래의 블록에 들어갑니다. `code`가 권장 키이며 `cli`는 레거시 키입니다. 두 키의 내용은 동일합니다. 키는 설정이 적용되는 위치를 결정합니다.

909 909 

910* **`cli`**: 터미널, VS Code 및 JetBrains 확장 프로그램, Agent SDK. `cli`에서는 Claude Desktop의 Code 탭이 [파생 설정](#claude-desktop-overlay)을 받으므로, `Read(./.env)` 같은 범위 지정 규칙이 그곳의 사용자를 막지 않습니다.910* **`cli`**: 터미널, VS Code 및 JetBrains 확장 프로그램, Agent SDK. `cli`에서는 Claude Desktop의 Code 탭이 [파생 설정](#claude-desktop-overlay)을 받으므로, `Read(./.env)` 같은 범위 지정 규칙은 그곳에서 사용자를 막지 않습니다.

911* **`code`**: 같은 위치에 더해 Claude Desktop의 Code 탭까지 적용할 수 있습니다.911* **`code`**: 동일한 위치에 더해 Claude Desktop의 Code 탭도 적용 대상에 포함될 수 있습니다.

912 912 

913`cli`를 사용하는 파일은 기존과 같이 동작하며, [`desktop`](#claude-desktop-overlay) 키가 있는 정책에서 `cli`를 발견한 게이트웨이는 부팅 시 경고하고 그대로 시작합니다. 설정이 Code 탭에도 적용되도록 `code`로 전환하십시오.913`cli`를 사용하는 파일은 기존과 같이 작동하며, [`desktop`](#claude-desktop-overlay) 키가 있는 정책에서 `cli`를 발견한 게이트웨이는 부팅 시 경고하지만 그대로 시작합니다. 설정이 Code 탭에도 적용되도록 하려면 `code`로 전환하십시오.

914 914 

915전환하기 전에 [Code 탭에서 `code` 설정 적용하기](#apply-code-settings-in-the-code-tab)를 읽으십시오. 설정이 Code 탭에 적용되려면 정책에 `desktop` 키가 있어야 하고 사용자 머신에 설정이 필요하며, Claude Desktop에서 웹 검색이 꺼집니다.915전환하기 전에 [Code 탭에 `code` 설정 적용](#apply-code-settings-in-the-code-tab)을 읽으십시오. 그곳에 설정이 적용되려면 정책에 `desktop` 키가 있어야 하고 사용자 머신에 사전 설정이 필요하며, Claude Desktop에서는 웹 검색이 꺼집니다.

916 916 

917다음 정책은 거부 규칙을 `code` 아래에 두고 빈 `desktop` 키를 함께 지정합니다.917이 정책은 거부 규칙을 `code` 아래에 두고 빈 `desktop` 키를 포함합니다.

918 918 

919```yaml theme={null}919```yaml theme={null}

920managed:920managed:


925 desktop: {}925 desktop: {}

926```926```

927 927 

928전환할 때는 블록 이름을 바꾸는 같은 편집에서 `serve_to_desktop` 줄을 모두 삭제하십시오. 안내에서 `cli` 블록을 언급하는 곳에는 `code` 블록을 사용하십시오.928전환할 때는 블록 이름을 바꾸는 같은 편집에서 `serve_to_desktop` 줄을 모두 삭제하십시오. 안내에서 `cli` 블록을 언급하는 경우 `code` 블록을 사용하십시오.

929 929 

930`serve_to_desktop: true`는 정책의 `cli` 설정을 Code 탭에 제공하는 레거시 방식입니다. Claude Desktop이 [`bootstrapUrl`](#claude-desktop-overlay)을 통해 연결하면 효과가 없습니다. 정책이 `cli`를 사용하는 동안 이 키를 명시하는 부팅 경고가 나타나면 해당 설정이 Code 탭에 도달하지 않는다는 의미입니다.930`serve_to_desktop: true`는 정책의 `cli` 설정을 Code 탭에 제공하는 레거시 방식입니다. Claude Desktop이 [`bootstrapUrl`](#claude-desktop-overlay)을 통해 연결하는 경우에는 효과가 없습니다. 정책이 `cli`를 사용하는 동안 이 키를 언급하는 부팅 경고가 나타나면 해당 설정이 Code 탭에 도달하지 않고 있다는 뜻입니다.

931 931 

932* **Code 탭까지 적용하려면**: 사용자의 머신이 [Code 탭에서 `code` 설정 적용](#apply-code-settings-in-the-code-tab)의 조건을 충족하면 `code`로 전환하십시오932* **Code 탭에 적용하려면**: 사용자 머신이 [Code 탭에 `code` 설정 적용](#apply-code-settings-in-the-code-tab)의 조건을 충족하면 `code`로 전환하십시오

933* **`cli`를 유지하려면**: 경고를 없애기 위해 정책에서 `cli` 옆에 `serve_to_desktop: false`를 설정하십시오933* **`cli`를 유지하려면**: 경고를 표시하지 않도록 정책에서 `cli` 옆에 `serve_to_desktop: false`를 설정하십시오

934 934 

935#### `cli`에 들어가는 내용935#### `cli`에 들어가는 항목

936 936 

937각 `code` 또는 `cli` 값은 완전한 Claude Code `managed-settings.json` 문서로, MDM이나 `/etc/claude-code/managed-settings.json`을 통해 배포하는 것과 같은 스키마를 여기서는 YAML로 표현한 것입니다. CLI는 전달된 문서를 서버 관리형 설정 대신 사용자 및 프로젝트 설정보다 위인 관리형 계층에서 적용합니다. 따라서 `policyHelper` 및 `wslInheritsWindowsSettings`처럼 [OS 수준 정책 소스로 제한된](https://code.claude.com/docs/ko/server-managed-settings.md#current-limitations) 설정은 무시합니다.937각 `code` 또는 `cli` 값은 완전한 Claude Code `managed-settings.json` 문서로, MDM이나 `/etc/claude-code/managed-settings.json`을 통해 배포하는 것과 동일한 스키마를 여기서는 YAML로 표현한 것입니다. CLI는 전달된 문서를 사용자 및 프로젝트 설정보다 상위인 관리형 계층에서 서버 관리형 설정 대신 적용합니다. 따라서 `policyHelper` 및 `wslInheritsWindowsSettings`처럼 [OS 수준 정책 소스로 제한된](https://code.claude.com/docs/ko/server-managed-settings.md#current-limitations) 설정은 무시합니다.

938 938 

939게이트웨이는 부팅 시 각 문서를 CLI의 설정 스키마에 대해 검증하므로, 인식되지 않는 최상위 키가 있으면 문제가 되는 모든 키를 명시하는 오류와 함께 부팅에 실패합니다. 스키마에서 의도적으로 열려 있는 부분은 최신 클라이언트가 게이트웨이 스키마에 없는 항목을 인식할 수 있으므로 임의의 값을 계속 허용합니다. 이러한 개방형 키에는 `env`, `pluginConfigs` 및 `permissions` 아래에 중첩된 키가 포함됩니다.939게이트웨이는 부팅 시 각 문서를 CLI의 설정 스키마에 대해 검증하므로, 인식할 수 없는 최상위 키는 문제가 되는 모든 키를 명시하는 오류와 함께 부팅에 실패합니다. 스키마에서 의도적으로 열어 둔 부분은 여전히 임의의 값을 허용하는데, 이는 최신 클라이언트가 게이트웨이 스키마에 없는 항목을 인식할 수 있기 때문입니다. 이러한 열린 키에는 `env`, `pluginConfigs`, 그리고 `permissions` 아래에 중첩된 키가 포함됩니다.

940 940 

941검증은 게이트웨이에 설치된 버전에 번들된 스키마를 사용하므로, 최신 Claude Code 릴리스에서 도입된 최상위 설정 키를 관리형 구성에 넣으려면 먼저 게이트웨이를 업그레이드해야 합니다. 새 정책을 배포하기 전에 한 클라이언트에서 스모크 테스트를 하십시오.941검증에는 게이트웨이에 설치된 버전에 번들된 스키마가 사용되므로, 최신 Claude Code 릴리스에서 도입된 최상위 설정 키를 관리형 구성에 넣으려면 먼저 게이트웨이를 업그레이드해야 합니다. 새 정책을 배포하기 전에 클라이언트 하나에서 스모크 테스트하십시오.

942 942 

943전체 키 참조는 [Claude Code 설정](https://code.claude.com/docs/ko/settings-reference.md#all-settings)에 있습니다. 운영자가 가장 먼저 사용하는 키는 다음과 같습니다.943전체 키 레퍼런스는 [Claude Code 설정](https://code.claude.com/docs/ko/settings-reference.md#all-settings)에 있습니다. 운영자가 가장 먼저 찾는 키는 다음과 같습니다.

944 944 

945```yaml theme={null}945```yaml theme={null}

946managed:946managed:


978| 키 | 적용 주체 | 효과 |978| 키 | 적용 주체 | 효과 |

979| - | - | - |979| - | - | - |

980| `availableModels` | 게이트웨이 + CLI | 모델 허용 목록입니다. `/v1/messages`에서도 검사되므로 패치된 클라이언트가 우회할 수 없습니다. |980| `availableModels` | 게이트웨이 + CLI | 모델 허용 목록입니다. `/v1/messages`에서도 검사되므로 패치된 클라이언트가 우회할 수 없습니다. |

981| [`deniedModels`](https://code.claude.com/docs/ko/settings-reference#deniedmodels), [`availableModelsMatch`](https://code.claude.com/docs/ko/settings-reference#availablemodelsmatch) | 게이트웨이 + CLI | `availableModels`가 달리 허용할 [특정 모델 또는 버전을 차단](https://code.claude.com/docs/ko/model-config.md#block-specific-models-or-versions)합니다. 차단된 모델은 `/v1/messages`에서 `400`으로 거부되며 `/v1/models`에서 제외됩니다. 게이트웨이 자체 검사에는 게이트웨이 서버에 Claude Code v2.1.299 이상이 필요합니다. CLI의 검사에는 클라이언트에 v2.1.283 이상이 필요하며, 이전 클라이언트는 두 키를 모두 무시합니다. |981| [`deniedModels`](https://code.claude.com/docs/ko/settings-reference#deniedmodels), [`availableModelsMatch`](https://code.claude.com/docs/ko/settings-reference#availablemodelsmatch) | 게이트웨이 + CLI | `availableModels`가 달리 허용할 [특정 모델 또는 버전을 차단](https://code.claude.com/docs/ko/model-config.md#block-specific-models-or-versions)합니다. 차단된 모델은 `/v1/messages`에서 `400`으로 거부되고 `/v1/models`에서 제외됩니다. 게이트웨이 자체 검사에는 게이트웨이 서버에 Claude Code v2.1.299 이상이 필요합니다. CLI 검사에는 클라이언트에 v2.1.283 이상이 필요하며, 이전 클라이언트는 두 키를 모두 무시합니다. |

982| `permissions.allow` / `.deny` | CLI | 도구 및 명령 규칙입니다. [권한](https://code.claude.com/docs/ko/permissions.md)과 [Bash 규칙이 일치하지 않는 경우](https://code.claude.com/docs/ko/permissions.md#bash-rule-limits)를 참조하십시오. |982| `permissions.allow` / `.deny` | CLI | 도구 및 명령 규칙입니다. [권한](https://code.claude.com/docs/ko/permissions.md) 및 [Bash 규칙이 매칭하지 않는 항목](https://code.claude.com/docs/ko/permissions.md#bash-rule-limits)을 참조하십시오. |

983| `permissions.disableBypassPermissionsMode` | CLI | 권한 프롬프트를 건너뛰는 모드인 [`bypassPermissions`](https://code.claude.com/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)와 `--dangerously-skip-permissions` 플래그를 차단하려면 `disable`로 설정합니다 |983| `permissions.disableBypassPermissionsMode` | CLI | 권한 프롬프트를 건너뛰는 모드인 [`bypassPermissions`](https://code.claude.com/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)와 `--dangerously-skip-permissions` 플래그를 차단하려면 `disable`로 설정합니다 |

984| `allowManagedPermissionRulesOnly` | CLI | `true`이면 관리형 설정이 권한 규칙의 유일한 설정 소스가 됩니다. [`allowManagedPermissionRulesOnly`](https://code.claude.com/docs/ko/settings-reference#allowmanagedpermissionrulesonly) 항목에 이때 Claude Code가 무시하는 모든 소스가 나열되어 있습니다. |984| `allowManagedPermissionRulesOnly` | CLI | `true`이면 관리형 설정이 권한 규칙의 유일한 설정 소스가 됩니다. [`allowManagedPermissionRulesOnly`](https://code.claude.com/docs/ko/settings-reference#allowmanagedpermissionrulesonly) 항목에 이때 Claude Code가 무시하는 모든 소스가 나열되어 있습니다. |

985| `env` | CLI | CLI 프로세스에 병합되는 환경 변수입니다. 텔레메트리, 자동 업데이트, 모델 이름 재정의에 사용합니다. |985| `env` | CLI | CLI 프로세스에 병합되는 환경 변수입니다. 텔레메트리, 자동 업데이트, 모델 이름 재정의에 사용합니다. |

986| `hooks` | CLI | 조직 전체 [훅](https://code.claude.com/docs/ko/hooks.md) |986| `hooks` | CLI | 조직 전체 [훅](https://code.claude.com/docs/ko/hooks.md) |

987| `managedMcpServers` | CLI | 개발자가 직접 추가하는 서버와 함께 [일치하는 모든 개발자에게 제공되는](https://code.claude.com/docs/ko/managed-mcp.md#provide-servers-through-managed-settings) 원격 MCP 서버이며, `http` 및 `sse`만 지원합니다. [정책의 MCP 서버](#mcp-servers-in-a-policy)를 참조하십시오. 게이트웨이 서버와 클라이언트 모두에 Claude Code v2.1.259 이상이 필요합니다. 이전 클라이언트는 이 키를 무시합니다. |987| `managedMcpServers` | CLI | 개발자가 직접 추가하는 서버와 함께 [매칭되는 모든 개발자에게 제공되는](https://code.claude.com/docs/ko/managed-mcp.md#provide-servers-through-managed-settings) 원격 MCP 서버로, `http`와 `sse`만 지원합니다. [정책의 MCP 서버](#mcp-servers-in-a-policy)를 참조하십시오. 게이트웨이 서버와 클라이언트 모두에 Claude Code v2.1.259 이상이 필요합니다. 이전 클라이언트는 이 키를 무시합니다. |

988 988 

989이러한 설정은 네트워크를 통해 전달되므로, CLI는 아래 나열된 설정을 적용하기 전에 각 개발자에게 보안 승인 대화 상자를 표시합니다.989이러한 설정은 네트워크를 통해 전달되므로, CLI는 아래 나열된 설정을 적용하기 전에 각 개발자에게 보안 승인 대화 상자를 표시합니다.

990 990 

991* `hooks`991* `hooks`

992* 프록시 및 base URL 변수처럼 개발자의 승인이 필요한 `env` 변수992* 프록시 및 기본 URL 변수처럼 개발자의 승인이 필요한 `env` 변수

993* `apiKeyHelper` 및 `statusLine` 같은 셸 실행 설정993* `apiKeyHelper` 및 `statusLine` 같은 셸 실행 설정

994* 샌드박스 바이너리 설정 `sandbox.bwrapPath`, `sandbox.socatPath`, `sandbox.ripgrep`994* 샌드박스 바이너리 설정 `sandbox.bwrapPath`, `sandbox.socatPath`, `sandbox.ripgrep`

995* `sandbox.network.tlsTerminate` 및 프록시 포트 설정처럼 트래픽을 가로채거나, 자격 증명을 주입하거나, 격리를 약화시키는 샌드박스 설정. [보안 승인 대화 상자](https://code.claude.com/docs/ko/server-managed-settings.md#security-approval-dialogs)에 전체 목록이 있습니다.995* `sandbox.network.tlsTerminate` 및 프록시 포트 설정처럼 트래픽을 가로채거나, 자격 증명을 주입하거나, 격리를 약화시키는 샌드박스 설정. [보안 승인 대화 상자](https://code.claude.com/docs/ko/server-managed-settings.md#security-approval-dialogs)에 모두 나열되어 있습니다.

996 996 

997[승인 기억](https://code.claude.com/docs/ko/server-managed-settings.md#approval-memory)에서 승인이 얼마나 유지되는지와 대화 상자가 언제 다시 나타나는지 설명합니다.997승인이 얼마나 유지되고 대화 상자가 언제 다시 나타나는지는 [승인 기억](https://code.claude.com/docs/ko/server-managed-settings.md#approval-memory)에서 다룹니다.

998 998 

999Claude Code는 모델 선택 설정 및 숫자 제한처럼 전달된 일부 `env` 변수를 개발자에게 승인 대화 상자를 표시하지 않고 적용합니다. 전달된 다른 변수는 적용되기 전에 개발자의 승인이 필요할 수 있으며, 비어 있지 않은 프록시, base URL 또는 `OTEL_EXPORTER_OTLP_ENDPOINT` 값은 항상 승인이 필요합니다. 전달된 변수에 승인이 필요하면 대화 상자에 해당 변수가 표시됩니다.999Claude Code는 모델 선택 설정이나 숫자 제한처럼 일부 전달된 `env` 변수를 개발자에게 승인 대화 상자를 표시하지 않고 적용합니다. 다른 전달된 변수는 개발자의 승인이 필요할 수 있으며, 비어 있지 않은 프록시, 기본 URL 또는 `OTEL_EXPORTER_OTLP_ENDPOINT` 값은 항상 승인이 필요합니다. 전달된 변수에 승인이 필요한 경우 대화 상자에 해당 변수가 표시됩니다. 전달된 값에 따라 승인 필요 여부가 결정되는 네 가지 개인정보 보호 토글을 포함한 자세한 내용은 [환경 변수와 승인 대화 상자](https://code.claude.com/docs/ko/server-managed-settings.md#environment-variables-and-the-approval-dialog)에 있습니다.

1000 1000 

1001[환경 변수와 승인 대화 상자](https://code.claude.com/docs/ko/server-managed-settings.md#environment-variables-and-the-approval-dialog)에 세부 정보가 있으며, 전달된 값에 따라 승인 필요 여부가 결정되는 네 가지 개인 정보 보호 토글도 포함되어 있습니다. v2.1.218 이전에는 Claude Code가 개발자에게 묻지 않고 적용하는 변수가 더 적었으므로, 전달된 변수 중 더 많은 변수가 대화 상자를 표시했습니다.1001게이트웨이의 [텔레메트리](#telemetry) 구성은 `OTEL_EXPORTER_OTLP_ENDPOINT`를 푸시하므로, `telemetry.forward_to`를 설정하면 각 대화형 클라이언트에서 대화 상자가 표시됩니다. 이 대화 상자는 손상되었거나 악의적인 게이트웨이로부터 개발자의 머신을 보호하기 위한 것이지, 개발자로부터 조직을 보호하기 위한 것이 아닙니다.

1002 1002 

1003게이트웨이의 [텔레메트리](#telemetry) 구성은 `OTEL_EXPORTER_OTLP_ENDPOINT`를 푸시하므로, `telemetry.forward_to`를 설정하면 각 대화형 클라이언트에서 대화 상자가 표시됩니다. 이 대화 상자는 조직을 개발자로부터 보호하는 것이 아니라, 손상되었거나 악의적인 게이트웨이로부터 개발자의 머신을 보호합니다.1003`claude -p`, Agent SDK 세션, Claude Desktop의 Code 탭 세션 같은 [비대화형 실행](https://code.claude.com/docs/ko/server-managed-settings.md#security-approval-dialogs)은 대화 상자를 표시할 수 없습니다. 이 경우 해당 실행에 한해서만 푸시된 설정을 적용하고 승인된 것으로 기록하지 않으므로, 개발자의 다음 대화형 세션에서는 여전히 대화 상자가 표시됩니다.

1004 1004 

1005`claude -p`, Agent SDK 세션 또는 Claude Desktop의 Code 탭 세션과 같은 [비대화형 실행](https://code.claude.com/docs/ko/server-managed-settings.md#security-approval-dialogs)은 대화 상자를 표시할 수 없습니다. 이 경우 푸시된 설정을 해당 실행에만 적용하고 승인된 것으로 기록하지 않으므로, 개발자의 다음 대화형 세션에서는 여전히 대화 상자가 표시됩니다.1005개발자가 거절하면 Claude Code는 정책을 적용하는 대신 해당 세션을 종료합니다. 따라서 새 훅이나 대화 상자를 트리거하는 환경 변수를 광범위한 정책에 푸시하면, 매칭되는 모든 개발자가 대화형 세션에서 대화 상자를 보게 됩니다. 실행 중인 대화형 세션은 다음 시간별 폴링 시 이를 표시하며, 그렇지 않으면 개발자의 다음 대화형 시작 시 나타납니다.

1006 1006 

1007개발자가 거부하면 Claude Code는 정책을 적용하지 않고 해당 세션을 종료합니다. 따라서 새 훅이나 대화 상자를 표시하는 env 변수를 광범위한 정책에 푸시하면, 일치하는 모든 개발자가 대화형 세션에서 대화 상자를 보게 됩니다. 실행 중인 대화형 세션에서는 다음 시간별 폴링 시 표시되며, 그렇지 않으면 개발자가 다음에 대화형으로 시작할 때 표시됩니다.1007`cli` 키는 이전 릴리스에서 `settings`라는 이름이었으며, 게이트웨이는 여전히 이 표기를 별칭으로 허용합니다. 새 배포에는 [`code`](#choose-cli-or-code)를 사용하십시오.

1008 

1009`cli` 키는 이전 릴리스에서 `settings`라는 이름이었으며, 게이트웨이는 여전히 이 표기를 별칭으로 허용합니다. 새 배포에서는 [`code`](#choose-cli-or-code)를 사용하십시오.

1010 1008 

1011#### 배포 전 정책 테스트1009#### 배포 전 정책 테스트

1012 1010 

1013정책 변경을 테스트하려면 일회용 Postgres 데이터베이스를 대상으로 게이트웨이를 시작하십시오. 게이트웨이는 `cli`, `code`, `desktop` 블록의 내용을 검사하기 전에 Postgres에 연결하고 스키마 마이그레이션을 적용합니다. 데이터베이스에 연결할 수 없으면 시작이 `could not connect to Postgres`에서 멈추고 해당 블록의 내용에 대해서는 아무것도 보고하지 않습니다.1011정책 변경을 테스트하려면 일회용 Postgres 데이터베이스를 대상으로 게이트웨이를 시작하십시오. 게이트웨이는 `cli`, `code`, `desktop` 블록의 내용을 검사하기 전에 Postgres에 연결하고 스키마 마이그레이션을 적용합니다. 데이터베이스에 연결할 수 없으면 시작이 `could not connect to Postgres`에서 멈추고 블록 내용에 대해서는 아무것도 보고하지 않습니다.

1014 1012 

1015#### 터미널 세션의 컨텍스트 윈도우1013#### 터미널 세션의 컨텍스트 윈도우

1016 1014 

1017`/login`으로 로그인한 터미널 세션은 Opus 4.7 이상, Sonnet 5 이상 및 Fable 모델에 대해 1M 컨텍스트 윈도우를 사용합니다. 모델 ID에 `[1m]` 접미사가 필요 없으며, 세션은 약 967K 토큰에서 압축됩니다. 개발자 머신의 Claude Code v2.1.287 이전에는 모델 ID가 `[1m]`으로 끝나지 않는 한 Claude Code가 Opus 및 Fable 모델을 200K 윈도우를 가진 것으로 취급했습니다.1015`/login`으로 로그인한 터미널 세션은 Opus 4.7 이상, Sonnet 5 이상, Fable 모델에 1M 컨텍스트 윈도우를 사용합니다. 모델 ID에 `[1m]` 접미사가 필요하지 않으며, 세션은 약 967K 토큰에서 압축됩니다. 개발자 머신의 Claude Code v2.1.287 이전에는 모델 ID가 `[1m]`으로 끝나지 않는 한 Claude Code가 Opus 및 Fable 모델을 200K 윈도우로 취급했습니다.

1018 1016 

1019대신 터미널 세션이 200K 경계에서 압축되도록 하려면 정책의 `env`에서 [자동 압축 윈도우](https://code.claude.com/docs/ko/model-config.md#set-the-auto-compact-window)를 설정하십시오.1017터미널 세션이 대신 200K 경계에서 압축되도록 하려면 정책의 `env`에서 [자동 압축 윈도우](https://code.claude.com/docs/ko/model-config.md#set-the-auto-compact-window)를 설정하십시오.

1020 1018 

1021```yaml theme={null}1019```yaml theme={null}

1022managed:1020managed:


1027 CLAUDE_CODE_AUTO_COMPACT_WINDOW: "200000"1025 CLAUDE_CODE_AUTO_COMPACT_WINDOW: "200000"

1028```1026```

1029 1027 

1030Claude Code는 이 변수를 개발자에게 승인 대화 상자를 표시하지 않고 적용합니다. 이 변수는 `[1m]`으로 끝나는 모델 ID를 포함한 모든 모델에 적용됩니다.1028Claude Code는 개발자에게 승인 대화 상자를 표시하지 않고 이 변수를 적용합니다. 이 변수는 `[1m]`으로 끝나는 모델 ID를 포함한 모든 모델에 적용됩니다.

1031 1029 

1032대신 1M 컨텍스트를 끄려면 같은 `env` 블록에서 [`CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"`](https://code.claude.com/docs/ko/model-config#extended-context)을 설정하십시오. 그러면 Claude Code는 모든 모델을 200K 윈도우를 가진 것으로 취급합니다. 대화형 세션에서는 이 변수가 적용되기 전에 각 개발자가 [승인 대화 상자](#what-goes-in-cli)에서 승인합니다.1030대신 1M 컨텍스트를 끄려면 같은 `env` 블록에 [`CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"`](https://code.claude.com/docs/ko/model-config#extended-context)을 설정하십시오. 그러면 Claude Code는 모든 모델을 200K 윈도우로 취급합니다. 대화형 세션에서는 이 변수가 적용되기 전에 각 개발자가 [승인 대화 상자](#what-goes-in-cli)에서 이를 승인합니다.

1033 1031 

1034#### 1시간 프롬프트 캐시1032#### 1시간 프롬프트 캐시

1035 1033 

1036기본값인 5분 대신 1시간 [프롬프트 캐시 TTL](https://code.claude.com/docs/ko/prompt-caching.md#cache-lifetime)을 요청하려면 정책의 기존 [`code`, `cli` 또는 `settings` 블록](#choose-cli-or-code)에 다음 키를 추가하고 게이트웨이를 다시 시작하십시오. 이 키에는 게이트웨이 서버와 클라이언트 모두에 Claude Code v2.1.242 이상이 필요합니다.1034기본값인 5분 대신 1시간 [프롬프트 캐시 TTL](https://code.claude.com/docs/ko/prompt-caching.md#cache-lifetime)을 요청하려면 정책의 기존 [`code`, `cli` 또는 `settings` 블록](#choose-cli-or-code)에 다음 키를 추가하고 게이트웨이를 다시 시작하십시오. 이 키에는 게이트웨이 서버와 클라이언트 모두에 Claude Code v2.1.242 이상이 필요합니다.

1037 1035 

1038`promptCacheTtl`은 기본 대화에 적용됩니다. `subagentPromptCacheTtl`은 선택 사항이며 서브에이전트, 워크플로, 백그라운드 요청에 적용됩니다. 다음 예시는 `cli` 키를 사용하는 `match: {}` 정책에 두 키를 모두 추가합니다.1036`promptCacheTtl`은 메인 대화에 적용됩니다. `subagentPromptCacheTtl`은 선택 사항이며 서브에이전트, 워크플로, 백그라운드 요청에 적용됩니다. 이 예시는 `cli` 키를 사용하는 `match: {}` 정책에 두 키를 모두 추가합니다.

1039 1037 

1040```yaml theme={null}1038```yaml theme={null}

1041managed:1039managed:


1048 1046 

1049> [!WARNING]1047> [!WARNING]

1050>1048>

1051> 업스트림이 게이트웨이가 제공하는 모든 모델에 대해 1시간 TTL을 제공하는 경우에만 이 키를 설정하십시오. 업스트림이 TTL을 거부하면 요청이 실패하며, 게이트웨이와 Claude Code 모두 5분 TTL로 재시도하지 않습니다. Amazon Bedrock의 경우 [지원되는 모델, 리전 및 제한](https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html#prompt-caching-models)을 확인하십시오.1049> 업스트림이 게이트웨이가 제공하는 모든 모델에 대해 1시간 TTL을 제공하는 경우에만 이 키를 설정하십시오. 업스트림이 TTL을 거부하면 요청이 실패하며, 게이트웨이와 Claude Code 모두 5분 TTL로 재시도하지 않습니다. Amazon Bedrock의 경우 [지원되는 모델, 리전 및 한도](https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html#prompt-caching-models)를 확인하십시오.

1052 1050 

1053`promptCacheTtl`을 확인하려면 정책과 일치하는 사용자로 게이트웨이에 로그인하고 [캐시 쓰기에 사용된 TTL을 확인](https://code.claude.com/docs/ko/prompt-caching.md#choose-the-ttl-yourself)하십시오. 게이트웨이가 제공하는 각 모델에 대해 확인을 반복하려면 `--model`을 전달하십시오.1051`promptCacheTtl`을 확인하려면 정책에 매칭되는 사용자로 게이트웨이에 로그인하고 [캐시 쓰기에 사용된 TTL을 확인](https://code.claude.com/docs/ko/prompt-caching.md#choose-the-ttl-yourself)하십시오. 게이트웨이가 제공하는 각 모델에 대해 확인을 반복하려면 `--model`을 전달하십시오.

1054 1052 

10551시간 캐시 쓰기는 5분 쓰기보다 [비용이 더 듭니다](https://code.claude.com/docs/ko/prompt-caching.md#cache-lifetime). [지출 한도](https://code.claude.com/docs/ko/claude-apps-gateway-spend-limits.md#how-requests-are-priced)에 그 높은 요율이 집계되려면 게이트웨이 서버에 v2.1.286 이상이 필요합니다.10531시간 캐시 쓰기는 5분 쓰기보다 [비용이 더 듭니다](https://code.claude.com/docs/ko/prompt-caching.md#cache-lifetime). [지출 한도](https://code.claude.com/docs/ko/claude-apps-gateway-spend-limits.md#how-requests-are-priced)가 이 더 높은 요금을 집계하려면 게이트웨이 서버에 v2.1.286 이상이 필요합니다.

1056 1054 

1057#### 정책의 MCP 서버1055#### 정책의 MCP 서버

1058 1056 

1059정책과 일치하는 Claude Code 클라이언트에 MCP 서버를 제공하려면 해당 정책의 `cli` 블록에서 [`managedMcpServers`](https://code.claude.com/docs/ko/managed-mcp#provide-servers-through-managed-settings)를 설정하십시오. 게이트웨이 서버와 클라이언트 모두에 Claude Code v2.1.259 이상이 필요합니다.1057정책에 매칭되는 Claude Code 클라이언트에 MCP 서버를 제공하려면 해당 정책의 `cli` 블록에 [`managedMcpServers`](https://code.claude.com/docs/ko/managed-mcp#provide-servers-through-managed-settings)를 설정하십시오. 게이트웨이 서버와 클라이언트 모두에 Claude Code v2.1.259 이상이 필요합니다.

1060 1058 

1061게이트웨이는 부팅 시 [Claude Code가 클라이언트에서 적용하는 것과 같은 규칙](https://code.claude.com/docs/ko/managed-mcp.md#what-an-entry-can-contain)으로 각 항목을 검사하며, 항목이 검사에 실패하면 시작을 거부하고 해당 항목을 명시합니다.1059게이트웨이는 부팅 시 [Claude Code가 클라이언트에서 적용하는 것과 동일한 규칙](https://code.claude.com/docs/ko/managed-mcp.md#what-an-entry-can-contain)으로 각 항목을 검사하며, 항목이 검사에 실패하면 시작을 거부하고 해당 항목을 명시합니다.

1062 1060 

1063`gateway.yaml`에 `${VAR}` 참조를 작성하면, 게이트웨이는 항목 검사를 실행하기 전에 부팅 시 [비밀 확장](#secret-expansion)을 통해 자신의 환경에서 이를 확인합니다. 따라서 일치하는 모든 클라이언트가 리터럴 값을 받으며 이를 읽을 수 있습니다. [제공된 서버에 대한 헤더 지침](https://code.claude.com/docs/ko/managed-mcp.md#provide-servers-through-managed-settings)은 확장된 값에 적용됩니다.1061`gateway.yaml`에 `${VAR}` 참조를 작성하면, 게이트웨이는 항목 검사를 실행하기 전에 부팅 시 [시크릿 확장](#secret-expansion)을 통해 자신의 환경에서 이를 해석하므로, 매칭되는 모든 클라이언트가 리터럴 값을 받아 읽을 수 있습니다. [제공되는 서버의 헤더 지침](https://code.claude.com/docs/ko/managed-mcp.md#provide-servers-through-managed-settings)은 확장된 값에 적용됩니다.

1064 1062 

1065게이트웨이는 `cli` 블록에서 `.mcp.json` 표기인 `mcpServers`를 거부하며, 부팅 오류에서 사용할 키로 `managedMcpServers`를 명시합니다. v2.1.259 이전에는 게이트웨이가 `cli` 블록의 모든 MCP 서버 정의를 거부했습니다.1063게이트웨이는 `cli` 블록에서 `.mcp.json` 표기인 `mcpServers`를 거부하며, 부팅 오류에서 사용할 키로 `managedMcpServers`를 안내합니다. v2.1.259 이전에는 게이트웨이가 `cli` 블록의 모든 MCP 서버 정의를 거부했습니다.

1066 1064 

1067#### Claude Desktop 오버레이1065#### Claude Desktop 오버레이

1068 1066 

1069조직에서 [Claude Desktop](https://code.claude.com/docs/ko/desktop.md)도 배포한다면 같은 게이트웨이가 두 클라이언트를 모두 지원합니다. Claude Desktop의 [관리형 구성](https://claude.com/docs/third-party/claude-desktop/configuration)에서 `bootstrapUrl`을 `<listen.public_url>/user/bootstrap`으로 지정하십시오. Claude Desktop은 해당 URL에서 OAuth 발급자를 도출하고, 이 게이트웨이에 대해 같은 디바이스 코드 로그인을 실행하며, 응답에서 구성을 가져옵니다.1067조직에서 [Claude Desktop](https://code.claude.com/docs/ko/desktop.md)도 배포하는 경우 동일한 게이트웨이가 두 클라이언트를 모두 제공합니다. Claude Desktop의 [관리형 구성](https://claude.com/docs/third-party/claude-desktop/configuration)에서 `bootstrapUrl`을 `<listen.public_url>/user/bootstrap`으로 지정하십시오. Claude Desktop은 해당 URL에서 OAuth 발급자를 도출하고, 이 게이트웨이를 대상으로 동일한 디바이스 코드 로그인을 실행하며, 응답에서 구성을 가져옵니다.

1070 1068 

1071> [!NOTE]1069> [!NOTE]

1072>1070>

1073> 게이트웨이 서버에 Claude Code v2.1.203 이상이 필요하며 명시적인 옵트인이 필요합니다. 사용자와 일치하는 정책에 `desktop` 키가 없으면 `/user/bootstrap`은 404를 반환합니다. 빈 `desktop: {}`로도 정책이 옵트인되며, `match: {}` 기본 레이어에 있는 `desktop` 키는 이를 상속하는 모든 정책을 옵트인합니다. 감사 로그는 각 요청을 `desktop_bootstrap.serve` 또는 `desktop_bootstrap.denied`로 기록합니다.1071> 게이트웨이 서버에 Claude Code v2.1.203 이상이 필요하며, 명시적인 옵트인이 필요합니다. 사용자에게 매칭되는 정책에 `desktop` 키가 없으면 `/user/bootstrap`은 404를 반환합니다. 빈 `desktop: {}`로도 정책을 옵트인할 수 있으며, `match: {}` 기본 레이어의 `desktop` 키는 이를 상속하는 모든 정책을 옵트인합니다. 감사 로그는 각 요청을 `desktop_bootstrap.serve` 또는 `desktop_bootstrap.denied`로 기록합니다.

1074 1072 

1075Claude Desktop을 배포하지 않는다면 정책에서 `desktop`을 완전히 빼십시오. 그러면 게이트웨이는 모든 사용자에 대해 `/user/bootstrap`에서 404를 반환합니다.1073Claude Desktop을 배포하지 않는 경우 정책에서 `desktop`을 완전히 제외하십시오. 그러면 게이트웨이는 모든 사용자에 대해 `/user/bootstrap`에서 404를 반환합니다.

1076 1074 

1077##### 게이트웨이가 Claude Desktop용으로 도출하는 설정1075##### 게이트웨이가 Claude Desktop용으로 도출하는 설정

1078 1076 

1079게이트웨이는 부트스트랩 응답의 상당 부분을 일치한 정책의 `cli` 또는 `code` 블록과 최상위 게이트웨이 구성에서 도출합니다.1077게이트웨이는 부트스트랩 응답의 상당 부분을 매칭된 정책의 `cli` 또는 `code` 블록과 최상위 게이트웨이 구성에서 도출합니다.

1080 1078 

1081* 모델 목록: `availableModels`에서 도출합니다. 정책이 [`deniedModels` 또는 `availableModelsMatch: exact`](#what-goes-in-cli)로 차단한 모델은 목록에서 제외됩니다. 이 필터에는 게이트웨이 서버에 Claude Code v2.1.299 이상이 필요합니다. 각 모델의 1M 컨텍스트 옵션은 [Claude Desktop의 확장 컨텍스트](#extended-context-in-claude-desktop)에서 다룹니다1079* 모델 목록: `availableModels`에서 도출합니다. 이 목록에서는 정책이 [`deniedModels` 또는 `availableModelsMatch: exact`](#what-goes-in-cli)로 차단한 모델이 제외됩니다. 이 필터에는 게이트웨이 서버에 Claude Code v2.1.299 이상이 필요합니다. 각 모델의 1M 컨텍스트 옵션은 [Claude Desktop의 확장 컨텍스트](#extended-context-in-claude-desktop)에서 다룹니다

1082* 비활성화된 도구: 도구 이름만 있는 `permissions.deny` 항목에서 도출합니다. 정책의 `desktop` 블록에서 `disabledBuiltinTools`를 설정하면 게이트웨이는 사용자 값과 도출된 목록의 합집합을 제공하므로, 이 방법으로 도구를 추가로 비활성화할 수는 있지만 `permissions.deny`로 비활성화한 도구를 다시 활성화할 수는 없습니다1080* 비활성화된 도구: 도구 이름만 있는 `permissions.deny` 항목에서 도출합니다. 정책의 `desktop` 블록에 `disabledBuiltinTools`를 설정하면 게이트웨이는 해당 값과 도출된 목록의 합집합을 제공하므로, 이 방법으로 더 많은 도구를 비활성화할 수는 있지만 `permissions.deny`로 비활성화한 도구를 다시 활성화할 수는 없습니다

1083* 이그레스 허용 목록: `sandbox.network.allowedDomains`에서 도출합니다. 정책의 `desktop` 블록에서 `coworkEgressAllowedHosts`를 설정하면 게이트웨이는 도출된 목록 대신 그 값을 사용합니다. 게이트웨이가 제공하는 허용 목록에 `*`가 포함되어 있고 게이트웨이가 Claude Desktop의 [`allowedWorkspaceFolders`](https://claude.com/docs/third-party/claude-desktop/code#applied-as-managed-policy)도 제공하지 않으면, Claude Desktop은 Code 탭에서 [Bash 샌드박스](https://code.claude.com/docs/ko/sandboxing.md)를 켜지 않습니다1081* 이그레스 허용 목록: `sandbox.network.allowedDomains`에서 도출합니다. 정책의 `desktop` 블록에 `coworkEgressAllowedHosts`를 설정하면 게이트웨이는 도출된 목록 대신 해당 값을 사용합니다. 게이트웨이가 제공하는 허용 목록에 `*`가 포함되어 있고 게이트웨이가 Claude Desktop의 [`allowedWorkspaceFolders`](https://claude.com/docs/third-party/claude-desktop/code#applied-as-managed-policy)도 제공하지 않으면, Claude Desktop은 Code 탭에서 [Bash 샌드박스](https://code.claude.com/docs/ko/sandboxing.md)를 켜지 않습니다

1084* 게이트웨이 자체를 가리키는 OTLP 엔드포인트와 로그인한 사용자의 ID 속성. 게이트웨이는 해당 엔드포인트에서 받은 내보내기를 `forward_to` 대상에 전달합니다. [`telemetry.forward_to`](#telemetry)와 `listen.public_url`을 모두 설정하면 엔드포인트와 속성이 포함됩니다.1082* 게이트웨이 자체를 가리키는 OTLP 엔드포인트와 로그인한 사용자의 ID 속성. 게이트웨이는 해당 엔드포인트에서 받은 내보내기 데이터를 `forward_to` 대상으로 중계합니다. [`telemetry.forward_to`](#telemetry)와 `listen.public_url`을 모두 설정한 경우 엔드포인트와 속성이 포함됩니다.

1085 1083 

1086 Claude Desktop은 모든 신호를 하나의 인코딩으로 내보냅니다. `http/protobuf`를 사용하며, 정책의 `env`에서 `OTEL_EXPORTER_OTLP_PROTOCOL` 또는 신호별 변형 중 하나를 `http/json`으로 설정하면 `http/json`을 사용합니다. 게이트웨이 서버의 Claude Code v2.1.261 이전에는 응답이 항상 `http/json`을 설정했으므로, protobuf만 허용하는 수집기는 Claude Desktop의 내보내기를 거부했습니다1084 Claude Desktop은 모든 신호를 하나의 인코딩으로 내보냅니다. 기본은 `http/protobuf`이며, 정책의 `env`에서 `OTEL_EXPORTER_OTLP_PROTOCOL` 또는 신호별 변형 중 하나를 `http/json`으로 설정하면 `http/json`입니다. 게이트웨이 서버의 Claude Code v2.1.261 이전에는 응답이 항상 `http/json`으로 설정되었으므로, protobuf만 허용하는 컬렉터는 Claude Desktop의 내보내기를 거부했습니다

1087 1085 

1088정책의 `desktop` 블록에서 `disabledBuiltinTools`, `coworkEgressAllowedHosts` 또는 Claude Desktop 자체의 `managedMcpServers` 설정을 지정하려면 게이트웨이 서버에 Claude Code v2.1.232 이상이 필요합니다. Claude Desktop의 `managedMcpServers`는 객체가 아닌 배열 값을 받습니다.1086정책의 `desktop` 블록에서 `disabledBuiltinTools`, `coworkEgressAllowedHosts` 또는 Claude Desktop 자체의 `managedMcpServers` 설정을 지정하려면 게이트웨이 서버에 Claude Code v2.1.232 이상이 필요합니다. Claude Desktop의 `managedMcpServers`는 객체가 아닌 배열 값을 받습니다.

1089 1087 

1090게이트웨이는 `hooks`나 `Bash(npm *)` 같은 범위 지정 권한 규칙처럼 Claude Desktop에 대응하는 항목이 없는 키를 부트스트랩 응답에서 생략합니다.1088게이트웨이는 `hooks`나 `Bash(npm *)` 같은 범위 지정 권한 규칙처럼 Claude Desktop에 대응 항목이 없는 키를 부트스트랩 응답에서 생략합니다.

1091 1089 

1092##### Code 탭에서 `code` 설정 적용하기1090##### Code 탭에 `code` 설정 적용

1093 1091 

1094정책이 [`code`](#choose-cli-or-code) 키 아래에 보유한 Claude Code 설정은 다음 조건이 모두 충족될 때 Claude Desktop의 Code 탭에 적용됩니다.1092정책이 [`code`](#choose-cli-or-code) 키 아래에 보유한 Claude Code 설정은 다음 조건이 모두 충족될 때 Claude Desktop의 Code 탭에 적용됩니다.

1095 1093 

1096* 정책에 `desktop` 키도 있으며, 빈 `desktop: {}`도 해당됩니다1094* 정책에 `desktop` 키도 있어야 하며, 빈 `desktop: {}`도 해당됩니다

1097* Claude Desktop이 버전 2.9939.2 이상입니다1095* Claude Desktop이 버전 2.9939.2 이상이어야 합니다

1098* 머신의 Claude Code 관리형 설정이 [이 게이트웨이를 지정합니다](#client-side-managed-settings)1096* 머신의 Claude Code 관리형 설정이 [이 게이트웨이를 지정](#client-side-managed-settings)해야 합니다

1099* 해당 머신이 사설 네트워크에서 HTTPS로 게이트웨이에 연결됩니다1097* 해당 머신이 사설 네트워크에서 HTTPS로 게이트웨이에 접근해야 합니다

1100 1098 

1101마지막 두 조건은 세션에서 Claude Code를 실행하는 머신에 적용됩니다. 로컬 세션에서는 사용자 자신의 컴퓨터입니다. SSH를 통한 Code 탭 세션에서는 원격 호스트입니다.1099마지막 두 조건은 세션에서 Claude Code를 실행하는 머신에 적용됩니다. 로컬 세션의 경우 사용자 본인의 컴퓨터이고, SSH를 통한 Code 탭 세션의 경우 원격 호스트입니다.

1102 1100 

1103`cli`를 `code`로 이름을 바꾸기 전에 해당 머신에 [클라이언트 측 관리형 설정](#client-side-managed-settings)을 배포하십시오. 처음 두 조건이 충족되고 마지막 두 조건 중 하나가 충족되지 않으면, 정책과 일치하는 사용자는 다음 결과 중 하나를 겪습니다.1101`cli`를 `code`로 이름을 바꾸기 전에 해당 머신에 [클라이언트 측 관리형 설정](#client-side-managed-settings)을 배포하십시오. 처음 두 조건은 충족되지만 마지막 두 조건 중 하나가 충족되지 않으면, 정책에 매칭되는 사용자는 다음 결과 중 하나를 얻습니다.

1104 1102 

1105* **HTTPS에서 Claude Desktop이 Claude Code v2.1.296 이상을 번들하는 경우**: Code 탭이 시작되지 않으며, 사용자 프롬프트에 대한 응답에서 그 이유를 설명합니다1103* **HTTPS 사용, Claude Desktop에 Claude Code v2.1.296 이상이 번들된 경우**: Code 탭이 시작되지 않으며, 사용자의 프롬프트에 대한 응답에 그 이유가 표시됩니다

1106* **HTTPS에서 Claude Desktop이 이전 버전을 번들하는 경우**: Code 탭이 `code` 설정 없이 시작되며, 세션에서 이를 알리는 내용이 없습니다1104* **HTTPS 사용, Claude Desktop에 이전 버전이 번들된 경우**: Code 탭이 `code` 설정 없이 시작되며, 세션에서 이를 알리는 내용은 없습니다

1107* **일반 HTTP에서**: Claude Desktop이 어떤 버전을 번들하든 Code 탭이 `code` 설정 없이 시작됩니다1105* **일반 HTTP 사용**: Claude Desktop에 번들된 버전과 관계없이 Code 탭이 `code` 설정 없이 시작됩니다

1108 1106 

1109게이트웨이 앞의 프록시가 `/managed/settings`에 자체 404로 응답하는 경우에도, 네 가지 조건을 모두 충족하는 머신을 포함해 Code 탭이 `code` 설정 없이 시작됩니다.1107게이트웨이 앞의 프록시가 `/managed/settings`에 자체 404로 응답하는 경우에도, 네 가지 조건을 모두 충족하는 머신을 포함하여 Code 탭이 `code` 설정 없이 시작됩니다.

1110 1108 

1111`desktop` 키가 있는 정책에서 설정을 보유한 `code` 블록은 Cowork, Chat 및 Code 탭에서 WebSearch 도구를 끕니다. MCP 서버에 대해서는 [`managedMcpServers`가 적용되는 위치](https://code.claude.com/docs/ko/managed-mcp#where-managedmcpservers-applies)를 참조하십시오.1109`desktop` 키가 있는 정책에서 설정이 담긴 `code` 블록은 Cowork, Chat, Code 탭의 WebSearch 도구를 끕니다. MCP 서버에 대해서는 [`managedMcpServers`가 적용되는 위치](https://code.claude.com/docs/ko/managed-mcp#where-managedmcpservers-applies)를 참조하십시오.

1112 1110 

1113##### Claude Desktop 설정 직접 지정하기1111##### Claude Desktop 설정 직접 지정

1114 1112 

1115Claude Desktop 설정을 직접 지정하려면 `cli`와 함께 선택적 `desktop` 블록을 추가하십시오. Claude Desktop의 [관리형 구성 참조](https://claude.com/docs/third-party/claude-desktop/configuration)에 있는 설정을 평면 키 이름으로 작성하십시오. `bootstrapUrl`처럼 Claude Desktop이 MDM이나 로컬 파일에서만 읽는 키는 빼십시오. 게이트웨이는 부팅 시 이러한 키를 거부합니다.1113Claude Desktop 설정을 직접 지정하려면 `cli` 옆에 선택적 `desktop` 블록을 추가하십시오. Claude Desktop의 [관리형 구성 레퍼런스](https://claude.com/docs/third-party/claude-desktop/configuration)에 있는 설정을 평면 키 이름으로 작성하십시오. `bootstrapUrl`처럼 Claude Desktop이 MDM이나 로컬 파일에서만 읽는 키는 제외하십시오. 게이트웨이는 부팅 시 이를 거부합니다.

1116 1114 

1117다음 예시는 `eng-contractors` 그룹에 대해 `cli` 설정과 함께 세 가지 Claude Desktop 키를 설정합니다.1115이 예시는 `eng-contractors` 그룹에 대해 `cli` 설정과 함께 세 가지 Claude Desktop 키를 설정합니다.

1118 1116 

1119```yaml theme={null}1117```yaml theme={null}

1120managed:1118managed:


1133 1131 

1134##### 게이트웨이가 부팅 시 거부하는 항목1132##### 게이트웨이가 부팅 시 거부하는 항목

1135 1133 

1136게이트웨이는 부팅 시 Claude Desktop 자체가 사용하는 구성 스키마에 대해 각 `desktop` 블록을 검증하므로, 실수가 연결된 모든 데스크톱에 도달하는 대신 게이트웨이 시작 시 키를 명시하는 오류로 드러납니다. 블록에 다음이 포함되면 게이트웨이는 부팅에 실패합니다.1134게이트웨이는 부팅 시 각 `desktop` 블록을 Claude Desktop 자체가 사용하는 구성 스키마에 대해 검증하므로, 실수가 연결된 모든 데스크톱에 도달하는 대신 게이트웨이 시작 시 해당 키를 명시하는 오류로 드러납니다. 블록에 다음이 포함되면 게이트웨이는 부팅에 실패합니다.

1137 1135 

1138* 알 수 없는 키1136* 알 수 없는 키

1139* 빈 값이나 중첩 항목 내부의 철자가 틀린 하위 키처럼, Claude Desktop이 거부하거나 조용히 버릴 값을 가진 인식된 키. v2.1.260 이전에는 게이트웨이가 `managedMcpServers` 또는 `orgPluginSettings` 항목의 중첩 객체 안에서 철자가 틀린 필드를 부팅 시 실패시키지 않고 조용히 버렸습니다.1137* 빈 값이나 중첩 항목 내부의 철자가 틀린 하위 키처럼 Claude Desktop이 거부하거나 조용히 삭제할 값을 가진 인식된 키. v2.1.260 이전에는 게이트웨이가 `managedMcpServers` 또는 `orgPluginSettings` 항목의 중첩 객체 내부에 있는 철자가 틀린 필드를 부팅 실패 대신 조용히 삭제했습니다.

1140* 게이트웨이가 자체적으로 계산하는 키: 추론 연결, 모델 목록, OTLP 릴레이. 이들은 [`upstreams`](#upstreams), [`models`](#models) 및 [`telemetry`](#telemetry) 섹션의 `forward_to`를 통해 구성하십시오.1138* 게이트웨이가 직접 계산하는 키: 추론 연결, 모델 목록, OTLP 릴레이. 이들은 [`upstreams`](#upstreams), [`models`](#models), [`telemetry`](#telemetry) 섹션의 `forward_to`를 통해 구성하십시오.

1141* 현재 키의 레거시 별칭. 부팅 오류에서 게이트웨이는 작성해야 할 정식 키를 명시합니다.1139* 현재 키의 레거시 별칭. 부팅 오류에서 게이트웨이는 작성해야 할 정식 키를 안내합니다.

1142 1140 

1143`transport`가 없는 `managedMcpServers` 항목처럼 deprecated 값이나 항목 형태를 사용하면, 게이트웨이는 시작되고 대체 항목을 명시하는 경고를 로그에 기록합니다.1141`transport`가 없는 `managedMcpServers` 항목처럼 deprecated 값이나 항목 형태를 사용하면, 게이트웨이는 시작하되 대체 항목을 안내하는 경고를 로그에 기록합니다.

1144 1142 

1145v2.1.232 이전에는 게이트웨이가 `chatTabEnabled` 및 `disableAutoUpdates` 같은 11개의 기능 게이트 키로 이루어진 고정 목록만 허용하고 그 밖의 모든 키를 부팅 시 거부했습니다. v2.1.227 이전에는 게이트웨이가 `chatTabEnabled`와 `chatAdvancedFileAnalysisEnabled`도 부팅 시 거부했습니다.1143v2.1.232 이전에는 게이트웨이가 `chatTabEnabled` 및 `disableAutoUpdates` 같은 11개의 기능 게이트 키로 이루어진 고정 목록만 허용하고 그 밖의 모든 키를 부팅 시 거부했습니다. v2.1.227 이전에는 게이트웨이가 부팅 시 `chatTabEnabled`와 `chatAdvancedFileAnalysisEnabled`도 거부했습니다.

1146 1144 

1147##### 최신 게이트웨이 또는 Claude Desktop 버전이 필요한 키1145##### 이후 버전의 게이트웨이 또는 Claude Desktop이 필요한 키

1148 1146 

1149게이트웨이는 `cli` 블록과 마찬가지로 설치된 버전에 번들된 스키마에 대해 `desktop` 블록을 검증합니다. 최신 Claude Desktop 릴리스에서 도입된 설정을 전달하려면 먼저 게이트웨이를 업그레이드하십시오. 예를 들어 `userPluginMarketplacesEnabled`와 `userPluginUploadsEnabled`에는 게이트웨이 서버에 Claude Code v2.1.260 이상, 구성원 머신에 Claude Desktop 1.37937.0 이상이 필요합니다.1147게이트웨이는 `cli` 블록과 마찬가지로 `desktop` 블록을 설치된 버전에 번들된 스키마에 대해 검증합니다. 최신 Claude Desktop 릴리스에서 도입된 설정을 전달하려면 먼저 게이트웨이를 업그레이드하십시오. 예를 들어 `userPluginMarketplacesEnabled`와 `userPluginUploadsEnabled`에는 게이트웨이 서버에 Claude Code v2.1.260 이상, 구성원 머신에 Claude Desktop 1.37937.0 이상이 필요합니다.

1150 1148 

1151`blockReadsOutsideWorkingDirectories`, `disableBypassPermissionsMode`, `configRecheckIntervalMinutes`, `sshClientPath`에는 게이트웨이 서버에 Claude Code v2.1.281 이상이 필요합니다. `microsoftAuthBroker`의 `required` 값과 Microsoft 365 `managedMcpServers` 항목의 `continuousAccessEvaluation` 필드도 마찬가지입니다. `required` 값보다 이전의 Claude Desktop 릴리스는 이를 `disabled`로 읽으므로, 모든 구성원의 Claude Desktop이 이를 지원한 뒤에만 `required`를 설정하십시오. Claude Desktop의 [관리형 구성 참조](https://claude.com/docs/third-party/claude-desktop/configuration)에 각 키를 처음 읽는 릴리스가 나와 있습니다.1149`blockReadsOutsideWorkingDirectories`, `disableBypassPermissionsMode`, `configRecheckIntervalMinutes`, `sshClientPath`에는 게이트웨이 서버에 Claude Code v2.1.281 이상이 필요합니다. `microsoftAuthBroker`의 `required` 값과 Microsoft 365 `managedMcpServers` 항목의 `continuousAccessEvaluation` 필드도 마찬가지입니다. `required` 값보다 이전의 Claude Desktop 릴리스는 이를 `disabled`로 읽으므로, 모든 구성원의 Claude Desktop이 이를 지원한 후에만 `required`를 설정하십시오. Claude Desktop의 [관리형 구성 레퍼런스](https://claude.com/docs/third-party/claude-desktop/configuration)에 각 키를 처음 읽는 릴리스가 나열되어 있습니다.

1152 1150 

1153정책의 `desktop` 블록에서 `orgPluginSettings`를 설정하면, 게이트웨이는 Claude Desktop 1.15200.0 이상이 읽는 배열 형식으로 이를 제공합니다. 이전 데스크톱은 배열을 무시하고 플러그인 도구 정책을 적용하지 않으므로, 이에 의존하기 전에 구성원을 1.15200.0 이상으로 업데이트하십시오.1151정책의 `desktop` 블록에 `orgPluginSettings`를 설정하면, 게이트웨이는 Claude Desktop 1.15200.0 이상이 읽는 배열 형식으로 이를 제공합니다. 이전 데스크톱은 배열을 무시하고 플러그인 도구 정책을 적용하지 않으므로, 이에 의존하기 전에 구성원을 1.15200.0 이상으로 업데이트하십시오.

1154 1152 

1155##### 역할 정책이 기본 `desktop` 블록을 상속하는 방식1153##### 역할 정책이 기반 `desktop` 블록을 상속하는 방식

1156 1154 

1157게이트웨이는 정책의 `cli` 블록을 기본 정책에서 채우는 것과 같은 방식으로, 정책의 `desktop` 블록이 설정하지 않은 키를 `match: {}` 포괄 정책의 `desktop` 블록에서 채웁니다. 기본 정책과 역할 정책 모두에서 `disabledBuiltinTools` 또는 `builtinToolPolicy`를 설정하면 게이트웨이는 기본 정책의 제한을 유지합니다.1155게이트웨이는 정책의 `cli` 블록을 기반에서 채우는 것과 같은 방식으로, 정책의 `desktop` 블록이 설정하지 않은 키를 `match: {}` 캐치올의 `desktop` 블록에서 채웁니다. 기반과 역할 정책 모두에 `disabledBuiltinTools` 또는 `builtinToolPolicy`를 설정하면, 게이트웨이는 기반의 제한을 유지합니다.

1158 1156 

1159* `disabledBuiltinTools`: 게이트웨이는 기본 정책 목록과 해당 정책 목록의 합집합을 사용합니다1157* `disabledBuiltinTools`: 게이트웨이는 기반 목록과 정책 목록의 합집합을 사용합니다

1160* `builtinToolPolicy`: 기본 정책에서 도구를 `allow` 이외의 값으로 설정하면, 역할 정책에서 같은 도구에 `allow`를 설정하더라도 게이트웨이는 그 값을 유지합니다1158* `builtinToolPolicy`: 기반에서 도구를 `allow` 이외의 값으로 설정하면, 역할 정책에서 같은 도구를 `allow`로 설정하더라도 게이트웨이는 해당 값을 유지합니다

1161 1159 

1162그 밖의 모든 키는 역할 정책에서 설정하면 게이트웨이가 역할 정책의 값을 사용합니다. 게이트웨이는 배열이나 `banner` 같은 중첩 객체를 통째로 대체하므로, 역할 정책에서 `banner.text`를 설정하면 게이트웨이는 기본 정책의 `banner.backgroundColor`를 버립니다.1160그 밖의 모든 키는 역할 정책에서 설정하면 게이트웨이가 역할 정책의 값을 사용합니다. 게이트웨이는 배열이나 `banner` 같은 중첩 객체를 통째로 대체하므로, 역할 정책에서 `banner.text`를 설정하면 게이트웨이는 기반의 `banner.backgroundColor`를 삭제합니다.

1163 1161 

1164##### 정책 변경이 Claude Desktop에 반영되는 시점1162##### 정책 변경이 Claude Desktop에 도달하는 시점

1165 1163 

1166변경된 정책으로 게이트웨이를 다시 배포한 후, Claude Desktop은 대부분의 설정을 다음에 시작할 때만 적용합니다.1164변경된 정책으로 게이트웨이를 재배포한 후, Claude Desktop은 대부분의 설정을 다음 시작 시에만 적용합니다.

1167 1165 

1168* **닫혀 있는 경우**: Claude Desktop은 시작할 때 부트스트랩 응답을 가져오므로 다음 시작부터 변경 사항이 적용됩니다1166* **닫혀 있는 경우**: Claude Desktop은 시작할 때 부트스트랩 응답을 가져오므로, 변경 사항은 다음 시작부터 적용됩니다

1169* **열려 있는 경우**: Claude Desktop은 기본적으로 10분마다 응답 변경을 확인하며, 일부 설정은 다시 시작하지 않고 적용합니다. [`skillCreationEnabled`](https://claude.com/docs/third-party/claude-desktop/configuration#skillcreationenabled) 같은 나머지 설정의 경우, 사용자는 사이드바에서 **Relaunch Claude Desktop** 카드를 보게 되며 앱을 다시 시작할 때까지 이전 구성을 유지합니다. 기본적으로 24시간 후 Claude Desktop은 다시 시작 대화 상자를 표시하고, 2분 동안 사용하지 않으면 자동으로 다시 시작합니다1167* **열려 있는 경우**: Claude Desktop은 기본적으로 10분마다 변경된 응답을 확인하며, 일부 설정은 재시작 없이 적용합니다. [`skillCreationEnabled`](https://claude.com/docs/third-party/claude-desktop/configuration#skillcreationenabled) 같은 나머지 설정의 경우, 사용자는 사이드바에서 **Relaunch Claude Desktop** 카드를 보게 되며 앱을 재시작할 때까지 이전 구성을 유지합니다. 기본적으로 24시간 후 Claude Desktop은 재시작 대화 상자를 표시하고, 2분간 활동이 없으면 자동으로 재시작합니다

1170 1168 

117124시간을 줄이려면 정책의 `desktop` 블록에서 [`relaunchEnforcementHours`](https://claude.com/docs/third-party/claude-desktop/configuration#relaunchenforcementhours)를 설정하십시오. 게이트웨이 서버에 Claude Code v2.1.260 이상, 구성원 머신에 Claude Desktop 1.40609.0 이상이 필요합니다. `0`으로 설정하면 Claude Desktop이 변경을 발견하는 즉시 대화 상자가 나타납니다.116924시간을 단축하려면 정책의 `desktop` 블록에 [`relaunchEnforcementHours`](https://claude.com/docs/third-party/claude-desktop/configuration#relaunchenforcementhours)를 설정하십시오. 게이트웨이 서버에 Claude Code v2.1.260 이상, 구성원 머신에 Claude Desktop 1.40609.0 이상이 필요합니다. `0`으로 설정하면 Claude Desktop이 변경 사항을 발견하는 즉시 대화 상자가 나타납니다.

1172 1170 

1173#### Claude Desktop의 확장 컨텍스트1171#### Claude Desktop의 확장 컨텍스트

1174 1172 

1175게이트웨이에서 [Claude Desktop](#claude-desktop-overlay)을 제공하는 경우, 모델 선택기는 1M 컨텍스트 윈도우로 실행할 수 있는 각 목록 모델에 대해 1M 컨텍스트 옵션을 제공합니다. 여기에는 Claude Opus 4.6 이상, Claude Sonnet 4.6 이상 및 Fable 모델이 포함됩니다. 이 옵션은 [확장 컨텍스트](https://code.claude.com/docs/ko/model-config.md#extended-context)에서 설명하는 모델의 `[1m]` 변형입니다. 게이트웨이 서버에 Claude Code v2.1.284 이상이 필요합니다.1173게이트웨이에서 [Claude Desktop](#claude-desktop-overlay)을 제공하는 경우, 모델 선택기는 1M 컨텍스트 윈도우로 실행할 수 있는 나열된 각 모델에 대해 1M 컨텍스트 옵션을 제공합니다. 여기에는 Claude Opus 4.6 이상, Claude Sonnet 4.6 이상, Fable 모델이 포함됩니다. 이 옵션은 [확장 컨텍스트](https://code.claude.com/docs/ko/model-config.md#extended-context)에서 설명하는 모델의 `[1m]` 변형입니다. 게이트웨이 서버에 Claude Code v2.1.284 이상이 필요합니다.

1176 1174 

1177[`models`](#models) 항목은 다음 경우에 1M 옵션을 받지 않습니다.1175다음의 경우 [`models`](#models) 항목에는 1M 옵션이 제공되지 않습니다.

1178 1176 

1179* 항목을 제공할 수 있는 업스트림이 이를 1M을 지원하지 않는 모델에 매핑하는 경우. 게이트웨이가 장애 조치 시에만 연결하는 업스트림도 포함됩니다1177* 항목을 처리할 수 있는 업스트림이 이를 1M을 지원하지 않는 모델에 매핑하는 경우(게이트웨이가 장애 조치 시에만 접근하는 업스트림 포함)

1180* 애플리케이션 추론 프로필 ARN으로 라우팅되는 사용자 지정 별칭처럼, `id`와 `upstream_model` 값 중 어느 것도 Claude 모델을 지정하지 않는 경우1178* `id`와 `upstream_model` 값 중 어느 것도 Claude 모델을 지정하지 않는 경우(예: 애플리케이션 추론 프로필 ARN으로 라우팅되는 사용자 지정 별칭)

1181 1179 

1182선택기가 제공하는 항목을 변경하려면 다음 중 하나를 사용하십시오.1180선택기에 표시되는 옵션을 변경하려면 다음 중 하나를 사용하십시오.

1183 1181 

1184* **사용자가 1M 옵션으로 시작하도록 하기**: 정책의 `desktop` 블록에서 `modelPrefer1mContext: true`를 설정하십시오. 아직 모델을 선택하지 않은 사용자는 첫 번째 목록 모델에 1M 옵션이 있으면 1M 옵션으로 시작합니다. 이미 모델을 선택한 사용자는 선택을 유지합니다.1182* **사용자를 1M 옵션으로 시작**: 정책의 `desktop` 블록에 `modelPrefer1mContext: true`를 설정하십시오. 아직 모델을 선택하지 않은 사용자는 나열된 첫 번째 모델에 1M 옵션이 있으면 해당 옵션으로 시작합니다. 이미 모델을 선택한 사용자는 선택을 유지합니다.

1185* **옵션을 수동으로 제공하기**: 게이트웨이 서버가 v2.1.284보다 이전 버전을 실행하거나 항목이 Claude 모델을 지정하지 않는 경우에 사용하십시오. `models`에 모델을 두 번, 즉 일반 ID로 한 번, `[1m]`을 붙여서 한 번 나열하고, 둘 다 같은 `upstream_model` 맵을 사용하십시오. Claude Desktop은 이 쌍을 1M 옵션이 있는 하나의 모델로 표시합니다. 게이트웨이는 `[1m]` 항목을 검사하지 않고 제공하므로, 업스트림이 1M으로 제공하는 모델에만 추가하십시오.1183* **수동으로 옵션 제공**: 게이트웨이 서버가 v2.1.284보다 이전 버전을 실행하거나, 항목이 Claude 모델을 지정하지 않는 경우 이 방법을 사용하십시오. `models`에 모델을 두 번 나열하되, 한 번은 일반 ID로, 한 번은 `[1m]`을 덧붙여 나열하고 둘 다 같은 `upstream_model` 맵을 사용하십시오. Claude Desktop은 이 쌍을 1M 옵션이 있는 하나의 모델로 표시합니다. 게이트웨이는 `[1m]` 항목을 검사 없이 제공하므로, 업스트림이 1M으로 제공하는 모델에 대해서만 추가하십시오.

1186 1184 

1187다음 예시는 애플리케이션 추론 프로필로 라우팅되는 사용자 지정 별칭에 대해 옵션을 수동으로 제공하고, 새 사용자가 그 옵션으로 시작하도록 합니다.1185이 예시는 애플리케이션 추론 프로필로 라우팅되는 사용자 지정 별칭에 대해 수동으로 옵션을 제공하고, 새 사용자를 해당 옵션으로 시작합니다.

1188 1186 

1189```yaml theme={null}1187```yaml theme={null}

1190models:1188models:


1202 modelPrefer1mContext: true1200 modelPrefer1mContext: true

1203```1201```

1204 1202 

1205##### 1M 옵션 제거하기1203##### 1M 옵션 제거

1206 1204 

1207선택기에서 옵션을 제거하려면 정책의 `cli` 키 아래 `env` 블록에서 `CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"`을 설정하십시오. `id`가 `[1m]`으로 끝나는 항목도 나열했다면 게이트웨이가 여전히 이를 제공하므로 해당 항목도 삭제하십시오.1205선택기에서 옵션을 제거하려면 정책의 `cli` 키 아래 `env` 블록에 `CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"`을 설정하십시오. `id`가 `[1m]`으로 끝나는 항목도 나열했다면 게이트웨이가 여전히 이를 제공하므로, 해당 항목도 삭제하십시오.

1208 1206 

1209이 변수는 정책과 일치하는 개발자의 터미널 세션에도 적용됩니다. 그곳에서 무엇이 바뀌는지는 [확장 컨텍스트](https://code.claude.com/docs/ko/model-config.md#extended-context)를 참조하십시오.1207이 변수는 정책에 매칭되는 개발자의 터미널 세션에도 전달됩니다. 그곳에서 변경되는 내용은 [확장 컨텍스트](https://code.claude.com/docs/ko/model-config.md#extended-context)를 참조하십시오.

1210 1208 

1211#### 다른 관리형 소스와의 우선순위1209#### 다른 관리형 소스와의 우선순위

1212 1210 

1213디바이스에 MDM으로 전달된 정책이나 로컬 `managed-settings.json`도 있는 경우, 게이트웨이로 전달된 설정이 가장 먼저 적용됩니다. 관리형 설정 페이지의 [관리형 계층 내 우선순위](https://code.claude.com/docs/ko/managed-settings.md#precedence-within-the-managed-tier)에서 로컬 소스가 적용되는 시점을 설명하며, 샌드박스 잠금 키, `forceRemoteSettingsRefresh`, 변수별 `env` 병합처럼 어떤 소스를 선택했는지와 관계없이 [Claude Code가 모든 관리자 소스에서 읽는 키](https://code.claude.com/docs/ko/managed-settings.md#keys-read-from-every-admin-source)도 나와 있습니다. MDM 프로필이나 관리형 설정 파일에 구성된 [`policyHelper`](https://code.claude.com/docs/ko/settings-reference#policyhelper)는 게이트웨이가 설정을 전달하지 않을 때만 실행되며, 해당 항목에서 그 출력이 무엇을 대체하는지 설명합니다.1211디바이스에 MDM으로 전달된 정책이나 로컬 `managed-settings.json`도 있는 경우, 게이트웨이가 전달한 설정이 가장 높은 순위를 가집니다. 관리형 설정 페이지의 [관리형 계층 내 우선순위](https://code.claude.com/docs/ko/managed-settings.md#precedence-within-the-managed-tier)에서 로컬 소스가 적용되는 시점을 설명하며, 샌드박스 잠금 키, `forceRemoteSettingsRefresh`, 변수별 `env` 병합처럼 어떤 소스를 선택했는지와 관계없이 [Claude Code가 모든 관리자 소스에서 읽는 키](https://code.claude.com/docs/ko/managed-settings.md#keys-read-from-every-admin-source)도 안내합니다. MDM 프로필이나 관리형 설정 파일에 구성된 [`policyHelper`](https://code.claude.com/docs/ko/settings-reference#policyhelper)는 게이트웨이가 설정을 전달하지 않을 때만 실행되며, 해당 항목에서 그 출력이 무엇을 대체하는지 설명합니다.

1214 1212 

1215[Claude Desktop](https://code.claude.com/docs/ko/desktop.md) 같은 임베딩 호스트는 SDK `managedSettings` 옵션을 통해 정책을 제공할 수 있습니다. [임베딩 호스트의 상위 설정](https://code.claude.com/docs/ko/managed-settings.md#parent-settings-from-embedding-hosts)에서 Claude Code가 이를 적용하는 시점을 설명하며, [상위 설정 제한](https://code.claude.com/docs/ko/claude-apps-gateway#restrict-parent-settings)에는 `allowManaged*Only` 잠금 없이도 계속 적용되는 허용 방향 설정이 나열되어 있습니다.1213[Claude Desktop](https://code.claude.com/docs/ko/desktop.md) 같은 임베딩 호스트는 SDK `managedSettings` 옵션을 통해 정책을 제공할 수 있습니다. [임베딩 호스트의 상위 설정](https://code.claude.com/docs/ko/managed-settings.md#parent-settings-from-embedding-hosts)에서 Claude Code가 이를 적용하는 시점을 설명하며, [상위 설정 제한](https://code.claude.com/docs/ko/claude-apps-gateway#restrict-parent-settings)에는 `allowManaged*Only` 잠금 없이도 여전히 적용되는 허용 방향 설정이 나열되어 있습니다.

1216 1214 

1217게이트웨이 정책은 비대화형 `claude -p` 실행과 Agent SDK가 생성한 세션을 포함하여 머신의 모든 Claude Code 호출에 적용됩니다. 시작 시 게이트웨이에 연결할 수 없으면, 로그인한 세션은 정책 없이 실행되는 대신 오류와 함께 종료됩니다.1215게이트웨이 정책은 비대화형 `claude -p` 실행과 Agent SDK로 생성된 세션을 포함하여 머신의 모든 Claude Code 호출에 적용됩니다. 시작 시 게이트웨이에 연결할 수 없으면, 로그인한 세션은 정책 없이 실행되는 대신 오류와 함께 종료됩니다.

1218 1216 

1219### `telemetry`1217### `telemetry`

1220 1218 

1221CLI는 메트릭, 로그, 그리고 활성화된 경우 트레이스를 게이트웨이로 보내며, 게이트웨이는 이를 구성된 각 대상에 그대로 전달합니다. 내보내기는 HTTP를 통한 OpenTelemetry Protocol(OTLP)을 사용합니다. 릴레이를 건너뛰고 세션이 수집기로 직접 내보내도록 하려면 [정책에서 수집기를 지정](#export-directly-to-your-collector)하십시오. CLI가 내보내는 메트릭과 이벤트는 [사용량 모니터링](https://code.claude.com/docs/ko/monitoring-usage.md)을 참조하십시오.1219CLI는 메트릭, 로그, 그리고 활성화된 경우 트레이스를 게이트웨이로 보내며, 게이트웨이는 이를 구성된 각 대상으로 그대로 중계합니다. 내보내기에는 HTTP 기반 OpenTelemetry Protocol(OTLP)이 사용됩니다. 릴레이를 건너뛰고 세션이 컬렉터로 직접 내보내도록 하려면 [정책에 컬렉터를 지정](#export-directly-to-your-collector)하십시오. CLI가 내보내는 메트릭과 이벤트는 [사용량 모니터링](https://code.claude.com/docs/ko/monitoring-usage.md)을 참조하십시오.

1222 1220 

1223`/login`으로 로그인한 세션에서 CLI는 게이트웨이가 발급한 JWT에서 읽은 인증된 사용자의 ID, 즉 `user.id`, `user.email`, `user.groups` 속성을 각 내보내기에 기록합니다. 따라서 개발자 측 구성 없이도 개발자별 비용 및 사용량 귀속이 가능합니다. 개발자가 로그인하기 전에 Claude Code가 기록하는 이벤트에는 [이 ID가 포함되지 않습니다](https://code.claude.com/docs/ko/monitoring-usage.md#standard-attributes). 개발자의 그룹 변경을 어떤 속성이 따라가는지 알아보려면 [열린 세션 중 그룹 변경](#group-changes-during-an-open-session)을 참조하십시오.1221`/login`으로 로그인한 세션에서 CLI는 게이트웨이가 발급한 JWT에서 읽은 인증된 사용자의 ID, 즉 `user.id`, `user.email`, `user.groups` 속성을 각 내보내기에 기록합니다. 따라서 개발자 측 구성 없이도 개발자별 비용 및 사용량 귀속이 작동합니다. 개발자가 로그인하기 전에 Claude Code가 기록하는 이벤트에는 [이 ID가 포함되지 않습니다](https://code.claude.com/docs/ko/monitoring-usage.md#standard-attributes). 개발자의 그룹 변경을 어떤 속성이 반영하는지는 [열린 세션 중 그룹 변경](#group-changes-during-an-open-session)을 참조하십시오.

1224 1222 

1225게이트웨이를 통해 로그인한 [Claude Desktop](#claude-desktop-overlay) 및 Cowork 세션은 텔레메트리에 `enduser.id`와 함께 `user.email` 및 `user.groups`를 기록하므로, `user.email` 또는 `user.groups`에 대한 하나의 쿼리로 터미널, Desktop, Cowork 사용량을 모두 다룰 수 있습니다. `user.groups`는 쉼표로 구분된 IdP 그룹 목록입니다.1223게이트웨이를 통해 로그인한 [Claude Desktop](#claude-desktop-overlay) 및 Cowork 세션은 `enduser.id`와 함께 `user.email` 및 `user.groups`를 텔레메트리에 기록하므로, `user.email` 또는 `user.groups`에 대한 하나의 쿼리로 터미널, Desktop, Cowork 사용량을 모두 다룰 수 있습니다. `user.groups`는 쉼표로 구분된 IdP 그룹 목록입니다.

1226 1224 

1227Desktop 및 Cowork 텔레메트리에는 ID 공급자가 사용자에게 발급하는 `sub` 클레임인 `enduser.sub`도 포함되며, 이 값은 사용자의 이메일이 바뀌어도 동일하게 유지됩니다. 터미널 세션은 같은 값을 `user.id`로 기록하므로, `enduser.sub`를 터미널 `user.id`와 일치시키는 쿼리로 한 사용자의 터미널, Desktop, Cowork 사용량을 함께 다룰 수 있습니다. Desktop 및 Cowork 내보내기에서 `user.id`는 주체(subject)가 아닌 익명 식별자입니다.1225Desktop 및 Cowork 텔레메트리에는 ID 공급자가 사용자에게 발급하는 `sub` 클레임인 `enduser.sub`도 포함되며, 이 값은 사용자의 이메일이 변경되어도 동일하게 유지됩니다. 터미널 세션은 같은 값을 `user.id`에 기록하므로, `enduser.sub`를 터미널 `user.id`와 매칭하는 쿼리로 한 사용자의 터미널, Desktop, Cowork 사용량을 함께 다룰 수 있습니다. Desktop 및 Cowork 내보내기에서 `user.id`는 주체가 아닌 익명 식별자입니다.

1228 1226 

1229Claude Code의 모든 OpenTelemetry 데이터와 마찬가지로, 이러한 속성은 조직이 구성한 대상으로만 전송되며 Anthropic으로는 전송되지 않습니다.1227Claude Code의 모든 OpenTelemetry 데이터와 마찬가지로, 이러한 속성은 조직이 구성한 대상으로만 전송되며 Anthropic으로는 전송되지 않습니다.

1230 1228 

1231사용자의 그룹 목록이 퍼센트 인코딩 후 255자를 넘거나 그룹 이름에 쉼표나 등호가 포함된 경우, 게이트웨이는 목록을 잘라내는 대신 해당 사용자의 Desktop 및 Cowork 텔레메트리에서 `user.groups`를 제외합니다. 해당 사용자의 터미널 세션에는 여전히 전체 목록이 포함됩니다.1229사용자의 그룹 목록이 퍼센트 인코딩 후 255자를 초과하거나 그룹 이름에 쉼표 또는 등호가 포함된 경우, 게이트웨이는 목록을 잘라내는 대신 해당 사용자의 Desktop 및 Cowork 텔레메트리에서 `user.groups`를 제외합니다. 해당 사용자의 터미널 세션에는 여전히 전체 목록이 포함됩니다.

1232 1230 

1233게이트웨이는 주체가 퍼센트 인코딩 후 255자를 넘거나, 공백, 인쇄 가능한 ASCII 이외의 문자, 또는 `,` `;` `=` `\` `"` `%` 중 하나를 포함하면 `enduser.sub`를 제외합니다. 해당 사용자의 Desktop 및 Cowork 텔레메트리는 다른 속성을 유지합니다.1231주체가 퍼센트 인코딩 후 255자를 초과하거나, 공백, 출력 가능한 ASCII 범위 밖의 문자, 또는 `,` `;` `=` `\` `"` `%` 중 하나를 포함하는 경우 게이트웨이는 `enduser.sub`를 제외합니다. 해당 사용자의 Desktop 및 Cowork 텔레메트리는 다른 속성을 유지합니다.

1234 1232 

1235Desktop 및 Cowork 텔레메트리의 `user.email`과 `user.groups`에는 게이트웨이 서버에 Claude Code v2.1.265 이상이 필요하며, `user.groups`에는 각 개발자 머신에 Claude Desktop 1.24012 이상이 필요합니다.1233Desktop 및 Cowork 텔레메트리의 `user.email`과 `user.groups`에는 게이트웨이 서버에 Claude Code v2.1.265 이상이 필요하며, `user.groups`에는 각 개발자 머신에 Claude Desktop 1.24012 이상이 필요합니다.

1236 1234 


1253 1251 

1254> [!WARNING]1252> [!WARNING]

1255>1253>

1256> 각 대상은 `metrics`, `logs`, `traces`에 독립적으로 옵트인하며, 기본값은 메트릭만입니다. 신호마다 민감도가 다릅니다.1254> 각 대상은 `metrics`, `logs`, `traces`를 독립적으로 옵트인하며, 기본값은 메트릭만입니다. 신호마다 민감도가 다릅니다.

1257>1255>

1258> * **메트릭**: 토큰 수, 요청 수, 지연 시간 같은 집계 카운터1256> * **메트릭**: 토큰 수, 요청 수, 지연 시간 같은 집계 카운터

1259> * **로그 및 트레이스**: 전체 Bash 명령, 도구 입력, 파일 경로를 포함할 수 있으며, 개발자 머신에서 Claude Code가 수행하는 모든 작업을 다룹니다1257> * **로그 및 트레이스**: 전체 Bash 명령, 도구 입력, 파일 경로를 포함할 수 있으며, 개발자 머신에서 Claude Code가 수행하는 모든 작업을 포괄합니다

1260>1258>

1261> 해당 데이터에 걸맞은 액세스 제어와 보존 정책을 갖춘 대상에서만 로그와 트레이스를 활성화하십시오.1259> 로그와 트레이스는 해당 데이터에 걸맞은 접근 제어와 보존 정책을 갖춘 대상에서만 활성화하십시오.

1262 1260 

1263각 `forward_to` URL은 `https://`를 사용해야 하며, 게이트웨이 자체 루프백 인터페이스의 수집기에 대해서만 예외가 있습니다.1261각 `forward_to` URL은 `https://`를 사용해야 하며, 게이트웨이 자체의 루프백 인터페이스에 있는 컬렉터에 대해서만 예외가 있습니다.

1264 1262 

1265* `http://localhost:<port>`는 구성 검증을 통과하지만, 게이트웨이 환경에서 `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1`을 설정하지 않으면 [SSRF 가드](https://code.claude.com/docs/ko/claude-apps-gateway-deploy.md#threat-model-summary)가 모든 내보내기를 `ECONNREFUSED_SSRF`로 차단합니다1263* `http://localhost:<port>`는 구성 검증을 통과하지만, 게이트웨이 환경에 `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1`을 설정하지 않으면 [SSRF 가드](https://code.claude.com/docs/ko/claude-apps-gateway-deploy.md#threat-model-summary)가 `ECONNREFUSED_SSRF`로 모든 내보내기를 차단합니다

1266* `http://127.0.0.1:<port>` 또는 `http://[::1]:<port>`는 해당 변수가 설정되지 않으면 부팅에 실패합니다1264* `http://127.0.0.1:<port>` 또는 `http://[::1]:<port>`는 해당 변수가 설정되지 않으면 부팅에 실패합니다

1267 1265 

1268클러스터 내 수집기의 경우 자체 내부 주소에서 HTTPS로 노출하거나, 변수를 설정한 사이드카로 실행하십시오.1266클러스터 내 컬렉터의 경우 자체 내부 주소에서 HTTPS로 노출하거나, 변수를 설정한 사이드카로 실행하십시오.

1269 1267 

1270`HTTPS_PROXY`가 설정되면 게이트웨이는 해당 프록시를 통해 내보내기를 보냅니다.1268`HTTPS_PROXY`가 설정되어 있으면 게이트웨이는 해당 프록시를 통해 내보내기를 전송합니다.

1271 1269 

1272내부 수집기에 직접 연결하려면 호스트 이름이나 `.internal.example.com`처럼 선행 점이 있는 도메인으로 `NO_PROXY`에 추가하십시오. 이 경우 게이트웨이 서버에 Claude Code v2.1.277 이상이 필요합니다. 게이트웨이가 프록시 없이 수집기에 연결할 수 있는지 확인하십시오. 선행 점이 없는 항목은 그 정확한 이름과만 일치하며 하위 이름과는 일치하지 않습니다. CIDR 범위는 일치하지 않습니다.1270내부 컬렉터에 직접 접근하려면 호스트 이름이나 `.internal.example.com`처럼 선행 점이 있는 도메인으로 `NO_PROXY`에 추가하십시오. 이를 위해서는 게이트웨이 서버에 Claude Code v2.1.277 이상이 필요합니다. 게이트웨이가 프록시 없이 컬렉터에 접근할 수 있는지 확인하십시오. 선행 점이 없는 항목은 그 아래의 이름이 아닌 정확히 해당 이름만 매칭합니다. CIDR 범위는 매칭되지 않습니다.

1273 1271 

1274[프록시 전용 이그레스](#proxy-only-egress)가 켜져 있으면 대신 프록시에서 수집기를 허용하십시오. `NO_PROXY` 항목이 하나라도 있으면 프록시 전용 이그레스가 꺼진 상태로 유지되기 때문입니다.1272[프록시 전용 이그레스](#proxy-only-egress)를 켠 경우에는 `NO_PROXY` 항목이 하나라도 있으면 프록시 전용 이그레스가 꺼지므로, 대신 프록시에서 컬렉터를 허용하십시오.

1275 1273 

1276CLI에서 텔레메트리는 기본적으로 꺼져 있습니다. `telemetry.forward_to`와 `listen.public_url`을 모두 설정하면 게이트웨이는 `/managed/settings`를 통해 여섯 개의 환경 변수를 푸시하여 연결된 클라이언트에서 텔레메트리를 켭니다.1274CLI에서 텔레메트리는 기본적으로 꺼져 있습니다. `telemetry.forward_to`와 `listen.public_url`을 모두 설정하면, 게이트웨이는 `/managed/settings`를 통해 6개의 환경 변수를 푸시하여 연결된 클라이언트에서 이를 켭니다.

1277 1275 

1278* `CLAUDE_CODE_ENABLE_TELEMETRY=1`1276* `CLAUDE_CODE_ENABLE_TELEMETRY=1`

1279* `OTEL_METRICS_EXPORTER`, `OTEL_LOGS_EXPORTER`, `OTEL_TRACES_EXPORTER`: 각각 하나 이상의 `forward_to` 대상이 해당 신호를 활성화하면 `otlp`로, 그렇지 않으면 `none`으로 설정됩니다1277* `OTEL_METRICS_EXPORTER`, `OTEL_LOGS_EXPORTER`, `OTEL_TRACES_EXPORTER`: 하나 이상의 `forward_to` 대상이 해당 신호를 활성화하면 각각 `otlp`로, 그렇지 않으면 `none`으로 설정됩니다

1280* `OTEL_EXPORTER_OTLP_ENDPOINT=<public_url>`1278* `OTEL_EXPORTER_OTLP_ENDPOINT=<public_url>`

1281* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`1279* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`

1282 1280 

1283[자체 레이블을 추가](#add-your-own-labels)하면 게이트웨이는 `OTEL_RESOURCE_ATTRIBUTES`도 푸시합니다.1281[자체 레이블을 추가](#add-your-own-labels)하면 게이트웨이는 `OTEL_RESOURCE_ATTRIBUTES`도 푸시합니다.

1284 1282 

1285게이트웨이 서버의 Claude Code v2.1.265 이전에는 어떤 대상도 옵트인하지 않은 신호를 포함하여 세 가지 내보내기 선택기를 모두 `otlp`로 푸시했습니다.1283게이트웨이 서버의 Claude Code v2.1.265 이전에는 게이트웨이가 어떤 대상도 옵트인하지 않은 신호를 포함하여 세 가지 익스포터 선택자를 모두 `otlp`로 푸시했습니다.

1286 1284 

1287푸시된 엔드포인트는 공개 URL로부터 만들어지므로, 메트릭과 로그에는 개발자나 정책의 OTEL 구성이 필요하지 않습니다.1285푸시되는 엔드포인트는 공개 URL로 구성되므로, 메트릭과 로그에는 개발자나 정책의 OTEL 구성이 필요하지 않습니다.

1288 1286 

1289`/login`으로 로그인한 개발자는 자체 OTEL 구성으로 내보내기를 다른 곳으로 보낼 수 없습니다.1287`/login`으로 로그인한 개발자는 자체 OTEL 구성으로 내보내기를 리디렉션할 수 없습니다.

1290 1288 

1291* **로컬로 설정한 변수**: Claude Code는 푸시된 변수를 관리형 계층에서 적용하므로, 각 변수는 개발자가 로컬로 설정한 값을 재정의합니다.1289* **로컬에서 설정한 변수**: Claude Code는 푸시된 변수를 관리형 계층에서 적용하므로, 각 변수는 개발자가 로컬에서 설정한 값을 재정의합니다.

1292* **로컬로 구성한 엔드포인트**: OTLP/HTTP 내보내기가 활성화되면, 게이트웨이가 텔레메트리 변수를 푸시했는지 여부와 관계없이 CLI는 로컬로 구성된 엔드포인트를 무시합니다. 정책이 [수집기를 엔드포인트로 지정](#export-directly-to-your-collector)하지 않는 한 내보내기는 게이트웨이로 갑니다.1290* **로컬에서 구성한 엔드포인트**: OTLP/HTTP 내보내기가 활성화된 경우, 게이트웨이가 텔레메트리 변수를 푸시했는지 여부와 관계없이 CLI는 로컬에서 구성한 엔드포인트를 무시합니다. 정책이 [컬렉터를 엔드포인트로 지정](#export-directly-to-your-collector)하지 않는 한 내보내기는 게이트웨이로 전송됩니다.

1293 1291 

1294신호에 대한 `forward_to` 대상이 없으면 게이트웨이는 이를 받아서 폐기합니다. 개발자가 이미 Claude Code 텔레메트리를 수집기 중 하나로 내보내고 있다면, 로그인한 후에도 해당 수집기가 데이터를 계속 받도록 그 수집기를 `forward_to` 대상으로 추가하고, 개발자가 로그나 트레이스를 내보낸다면 해당 신호도 활성화하십시오. 대신 릴레이를 건너뛰려면 [정책에서 수집기를 지정](#export-directly-to-your-collector)하십시오.1292신호에 대한 `forward_to` 대상이 없으면 게이트웨이는 해당 신호를 받아서 폐기합니다. 개발자가 이미 Claude Code 텔레메트리를 조직의 컬렉터 중 하나로 내보내고 있다면, 해당 컬렉터를 `forward_to` 대상으로 추가하고(로그나 트레이스를 내보내고 있다면 해당 신호도 활성화) 개발자가 로그인한 후에도 데이터를 계속 받도록 하십시오. 대신 릴레이를 건너뛰려면 [정책에 컬렉터를 지정](#export-directly-to-your-collector)하십시오.

1295 1293 

1296[트레이스](https://code.claude.com/docs/ko/monitoring-usage.md#traces-beta)에는 각 클라이언트에 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`도 필요합니다. 게이트웨이가 이를 푸시하지 않으므로 관리형 정책의 `env` 블록에서 설정하십시오. 개발자는 푸시된 엔드포인트가 이미 표시하는 것과 같은 [보안 승인 대화 상자](#managed)에서 이를 승인합니다.1294[트레이스](https://code.claude.com/docs/ko/monitoring-usage.md#traces-beta)에는 각 클라이언트에 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`도 필요합니다. 게이트웨이는 이를 푸시하지 않으므로 관리형 정책의 `env` 블록에 설정하십시오. 개발자는 푸시된 엔드포인트가 이미 트리거하는 것과 동일한 [보안 승인 대화 상자](#managed)에서 이를 승인합니다.

1297 1295 

1298트레이스를 수집하려는 그룹의 정책에서만 `1`로 설정하십시오. 이를 설정하지 않은 정책은 [병합 규칙](#managed)에 따라 `match: {}` 포괄 정책이 값을 설정한 경우 그 값을 상속합니다. 개발자가 로컬에서 변수를 설정하더라도 그룹의 클라이언트가 트레이스를 보내지 않도록 하려면 해당 그룹의 정책에서 `0`으로 설정하십시오.1296트레이스를 수집하려는 그룹의 정책에서만 `1`로 설정하십시오. 이를 설정하지 않은 정책은 [병합 규칙](#managed)에 따라, `match: {}` 캐치올 정책이 값을 설정한 경우 해당 값을 상속합니다. 개발자가 로컬에서 변수를 설정하더라도 특정 그룹의 클라이언트가 트레이스를 보내지 않도록 하려면 해당 그룹의 정책에서 `0`으로 설정하십시오.

1299 1297 

1300protobuf 및 JSON OTLP 인코딩이 모두 전달되며, OpenTelemetry 호환 백엔드는 모두 대상으로 사용할 수 있습니다.1298protobuf와 JSON OTLP 인코딩 모두 중계되며, OpenTelemetry 호환 백엔드라면 어떤 것이든 대상으로 사용할 수 있습니다.

1301 1299 

1302#### 누적 메트릭 보내기1300#### 누적 메트릭 전송

1303 1301 

1304수집기가 누적 메트릭만 허용한다면 [`OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE`](https://code.claude.com/docs/ko/monitoring-usage#common-configuration-variables)를 `cumulative`로 설정하십시오. Claude Code는 기본적으로 델타 메트릭을 보내며, 게이트웨이는 이를 변환하지 않고 전달합니다. 각 세션 종류가 변수를 읽는 위치에 설정하십시오.1302컬렉터가 누적 메트릭만 허용하는 경우 [`OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE`](https://code.claude.com/docs/ko/monitoring-usage#common-configuration-variables)를 `cumulative`로 설정하십시오. Claude Code는 기본적으로 델타 메트릭을 보내며, 게이트웨이는 이를 변환하지 않고 중계합니다. 세션 유형별로 변수를 읽는 위치에 설정하십시오.

1305 1303 

1306* **터미널 세션**: 정책의 [`cli` 또는 `code` 키](#choose-cli-or-code) 아래 `env` 블록1304* **터미널 세션**: 정책의 [`cli` 또는 `code` 키](#choose-cli-or-code) 아래 `env` 블록

1307* **[사용자 머신에서 실행되는](https://code.claude.com/docs/ko/managed-settings.md#where-and-when-a-policy-applies) Cowork 세션**: 해당 머신의 [클라이언트 측 관리형 설정](#client-side-managed-settings)의 `env` 블록1305* **[사용자 머신에서 실행되는](https://code.claude.com/docs/ko/managed-settings.md#where-and-when-a-policy-applies) Cowork 세션**: 해당 머신의 [클라이언트 측 관리형 설정](#client-side-managed-settings)의 `env` 블록

1308* **`code` 정책의 Code 탭 세션**: [`code` 설정이 적용되는 조건](#apply-code-settings-in-the-code-tab)을 충족한 후 정책의 `env` 블록1306* **`code` 정책의 Code 탭 세션**: [`code` 설정이 적용되기 위한 조건](#apply-code-settings-in-the-code-tab)을 충족한 후 정책의 `env` 블록

1309* **`cli` 정책의 Code 탭 세션**: 세션을 실행하는 머신의 클라이언트 측 관리형 설정의 `env` 블록. SSH에서는 원격 호스트입니다.1307* **`cli` 정책의 Code 탭 세션**: 세션을 실행하는 머신의 클라이언트 측 관리형 설정의 `env` 블록. SSH를 통한 경우 원격 호스트입니다.

1310 1308 

1311머신의 관리형 설정에 변수를 추가하는 경우, 해당 머신의 우선순위가 가장 높은 소스에서 [`parentSettingsBehavior: "merge"`](https://code.claude.com/docs/ko/claude-apps-gateway#set-the-opt-in)도 설정하십시오. 이 설정이 없으면 Cowork 세션과 `cli` 정책의 Code 탭 세션은 Claude Desktop이 상위 설정으로 전달하는 이그레스 허용 목록 및 기타 정책 없이 실행됩니다.1309머신의 관리형 설정에 변수를 추가하는 경우, 해당 머신의 최우선 소스에 [`parentSettingsBehavior: "merge"`](https://code.claude.com/docs/ko/claude-apps-gateway#set-the-opt-in)도 설정하십시오. 이 설정이 없으면 Cowork 세션과 `cli` 정책의 Code 탭 세션은 Claude Desktop이 상위 설정으로 전달하는 이그레스 허용 목록 및 기타 정책 없이 실행됩니다.

1312 1310 

1313#### 자체 레이블 추가하기1311#### 자체 레이블 추가

1314 1312 

1315게이트웨이를 통해 로그인한 세션의 텔레메트리에 `service.namespace`나 `deployment.environment.name` 같은 고정 레이블을 붙이려면 `telemetry.resource_attributes`를 설정하십시오. 각 레이블은 OpenTelemetry 리소스 속성이며, 모든 대상이 같은 레이블을 받습니다.1313게이트웨이를 통해 로그인한 세션의 텔레메트리에 `service.namespace`나 `deployment.environment.name` 같은 고정 레이블을 붙이려면 `telemetry.resource_attributes`를 설정하십시오. 각 레이블은 OpenTelemetry 리소스 속성이며, 모든 대상이 동일한 레이블을 받습니다.

1316 1314 

1317세션은 `telemetry.forward_to`와 `listen.public_url`도 설정한 경우에만 레이블을 받습니다. 다음 예시는 두 개의 레이블을 추가합니다.1315세션은 `telemetry.forward_to`와 `listen.public_url`도 설정한 경우에만 레이블을 받습니다. 이 예시는 두 개의 레이블을 추가합니다.

1318 1316 

1319```yaml theme={null}1317```yaml theme={null}

1320telemetry:1318telemetry:


1325 deployment.environment.name: prod1323 deployment.environment.name: prod

1326```1324```

1327 1325 

1328레이블이 다음 규칙 중 하나를 위반하면 게이트웨이는 시작을 거부하며, 시작 오류에 해당 레이블이 명시됩니다.1326레이블이 다음 규칙 중 하나를 위반하면 게이트웨이는 시작을 거부하며, 시작 오류에 해당 레이블이 표시됩니다.

1329 1327 

1330* 이름에는 문자, 숫자, `.`, `_`, `-`만 사용합니다1328* 이름에는 문자, 숫자, `.`, `_`, `-`만 사용합니다

1331* 이름은 예약되어 있지 않아야 합니다. 대소문자와 관계없이 비교하며, 예약된 이름은 `user.`, `enduser.`, `identity.`로 시작하는 모든 이름과 `service.name`, `service.version`, `claude.deployment_mode`, `host.arch`, `os.type`, `os.version`, `wsl.version`입니다1329* 이름은 예약되지 않아야 합니다. 대소문자에 관계없이 비교하며, 예약된 이름은 `user.`, `enduser.` 또는 `identity.`로 시작하는 모든 이름과 `service.name`, `service.version`, `claude.deployment_mode`, `host.arch`, `os.type`, `os.version`, `wsl.version`입니다

1332* 값은 공백이 없고 `, ; = \ " %`를 포함하지 않는 비어 있지 않은 인쇄 가능한 ASCII여야 합니다1330* 값은 비어 있지 않은 출력 가능한 ASCII이며, 공백과 `, ; = \ " %`를 포함하지 않아야 합니다

1333* 값은 게이트웨이가 퍼센트 인코딩 후 계산하는 기준으로 최대 255자이므로, `/`, `:`, `@`는 각각 3자로 계산됩니다1331* 값은 게이트웨이가 퍼센트 인코딩 후 계산하는 기준으로 최대 255자이므로, `/`, `:`, `@`는 각각 3자로 계산됩니다

1334* 값은 텍스트이므로 숫자, `true`, `false`는 따옴표로 묶으십시오1332* 값은 텍스트이므로 숫자, `true`, `false`는 따옴표로 묶으십시오

1335 1333 

1336`telemetry.resource_attributes`를 설정하려면 게이트웨이 서버에 Claude Code v2.1.281 이상이 필요합니다. 이전 게이트웨이는 이 키를 발견하면 시작을 거부합니다. 키를 추가하기 전에 모든 레플리카를 업그레이드하고, 이전 버전으로 롤백하기 전에 키를 제거하십시오.1334`telemetry.resource_attributes`를 설정하려면 게이트웨이 서버에 Claude Code v2.1.281 이상이 필요합니다. 이전 게이트웨이는 이 키를 발견하면 시작을 거부합니다. 키를 추가하기 전에 모든 레플리카를 업그레이드하고, 이전 버전으로 롤백하기 전에 키를 제거하십시오.

1337 1335 

1338`/login`으로 로그인한 터미널 세션은 다른 [텔레메트리 변수](#telemetry)와 함께 푸시되는 `OTEL_RESOURCE_ATTRIBUTES`로 레이블을 받습니다. 정책의 `env` 블록에서 `OTEL_RESOURCE_ATTRIBUTES`를 설정하면, 해당 정책과 일치하는 터미널 세션은 레이블 대신 그 값을 받습니다. Claude Desktop은 `user.email` 및 기타 ID 속성과 함께 게이트웨이로부터 레이블을 받습니다.1336`/login`으로 로그인한 터미널 세션은 다른 [텔레메트리 변수](#telemetry)와 함께 푸시된 `OTEL_RESOURCE_ATTRIBUTES`로 레이블을 받습니다. 정책의 `env` 블록에 `OTEL_RESOURCE_ATTRIBUTES`를 설정하면, 해당 정책에 매칭되는 터미널 세션은 레이블 대신 그 값을 받습니다. Claude Desktop은 `user.email` 및 기타 ID 속성과 함께 게이트웨이로부터 레이블을 받습니다.

1339 1337 

1340Claude Code는 각 레이블을 모든 메트릭 데이터 포인트에도 복사하므로, 리소스 속성을 인덱싱하지 않는 백엔드에서도 레이블로 메트릭을 필터링할 수 있습니다. 이 복사를 끄려면 [메트릭 카디널리티 제어](https://code.claude.com/docs/ko/monitoring-usage.md#metrics-cardinality-control)를 참조하십시오.1338Claude Code는 각 레이블을 모든 메트릭 데이터 포인트에도 복사하므로, 리소스 속성을 인덱싱하지 않는 백엔드에서도 레이블로 메트릭을 필터링할 수 있습니다. 이 복사를 끄려면 [메트릭 카디널리티 제어](https://code.claude.com/docs/ko/monitoring-usage.md#metrics-cardinality-control)를 참조하십시오.

1341 1339 

1342#### 열린 세션 중 그룹 변경1340#### 열린 세션 중 그룹 변경

1343 1341 

1344터미널 세션은 `user.groups`를 OTLP 리소스에 넣고, 각 메트릭 데이터 포인트와 이벤트에도 다시 넣습니다. 세션이 열려 있는 동안 개발자의 그룹이 변경되면, 다음 [자동 갱신](#session) 이후 사용량에 대한 데이터 포인트와 이벤트에는 새 그룹이 포함됩니다. 리소스는 개발자가 Claude Code를 다시 시작할 때까지 이전 그룹을 유지하므로, 데이터 포인트나 이벤트의 속성을 기준으로 그룹화하십시오.1342터미널 세션은 `user.groups`를 OTLP 리소스에 넣고, 각 메트릭 데이터 포인트와 이벤트에도 다시 넣습니다. 세션이 열려 있는 동안 개발자의 그룹이 변경되면, 다음 [자동 갱신](#session) 이후 사용량에 대한 데이터 포인트와 이벤트에는 새 그룹이 포함됩니다. 리소스는 개발자가 Claude Code를 재시작할 때까지 이전 그룹을 유지하므로, 데이터 포인트나 이벤트의 속성을 기준으로 그룹화하십시오.

1345 1343 

1346OpenTelemetry Collector의 Prometheus remote write 내보내기에서 `resource_to_telemetry_conversion`을 켜면, 내보내기가 각 데이터 포인트의 `user.groups`를 리소스의 값으로 대체하므로 모든 데이터 포인트에 이전 그룹이 표시됩니다. 데이터 포인트의 값을 유지하려면 해당 내보내기 앞에서 리소스의 `user.groups`를 삭제하십시오.1344OpenTelemetry Collector의 Prometheus remote write 익스포터에서 `resource_to_telemetry_conversion`을 켜면, 익스포터가 각 데이터 포인트의 `user.groups`를 리소스의 값으로 대체하므로 모든 데이터 포인트에 이전 그룹이 표시됩니다. 데이터 포인트의 값을 유지하려면 해당 익스포터 앞에서 리소스의 `user.groups`를 삭제하십시오.

1347 1345 

1348다음 OpenTelemetry Collector `resource` 프로세서는 이를 나열한 파이프라인에서 속성을 삭제합니다.1346이 OpenTelemetry Collector `resource` 프로세서는 이를 나열하는 파이프라인에서 속성을 삭제합니다.

1349 1347 

1350```yaml theme={null}1348```yaml theme={null}

1351processors:1349processors:


1357 1355 

1358메트릭 파이프라인의 `processors`에 `resource/drop-user-groups`를 추가하면, 각 시리즈는 자체 데이터 포인트의 `user_groups` 레이블을 갖게 됩니다.1356메트릭 파이프라인의 `processors`에 `resource/drop-user-groups`를 추가하면, 각 시리즈는 자체 데이터 포인트의 `user_groups` 레이블을 갖게 됩니다.

1359 1357 

1360#### 컬렉터로 직접 내보내기1358#### 수집기로 직접 내보내기

1361 1359 

1362`/login`으로 로그인한 세션이 릴레이를 거치지 않고 컬렉터로 직접 텔레메트리를 보내도록 하려면, [관리형 정책](#managed)의 `env` 블록에서 `OTEL_EXPORTER_OTLP_ENDPOINT`를 컬렉터의 `https://` 기본 URL로 설정합니다. Claude Code는 `https://otel-collector.example.com:4318`과 같이 설정한 URL에 `/v1/metrics`, `/v1/logs` 또는 `/v1/traces`를 덧붙이고, 각 신호를 OTLP/HTTP를 통해 해당 위치로 내보냅니다. 각 개발자의 머신에 Claude Code v2.1.265 이상이 필요합니다. 이전 클라이언트는 릴레이를 통해 내보냅니다.1360`/login`을 통해 로그인한 세션이 릴레이를 거치지 않고 텔레메트리를 수집기로 직접 보내도록 하려면, [관리형 정책](#managed)의 `env` 블록에서 `OTEL_EXPORTER_OTLP_ENDPOINT`를 수집기의 `https://` 기본 URL로 설정합니다. Claude Code는 `https://otel-collector.example.com:4318`과 같이 설정한 URL에 `/v1/metrics`, `/v1/logs` 또는 `/v1/traces`를 덧붙이고, 각 신호를 OTLP/HTTP를 통해 해당 위치로 내보냅니다. 각 개발자 머신에 Claude Code v2.1.265 이상이 필요합니다. 이전 클라이언트는 릴레이를 통해 내보냅니다.

1363 1361 

1364컬렉터에 인증하려면 같은 `env` 블록에서 `OTEL_EXPORTER_OTLP_HEADERS`를 설정합니다. 세션은 이런 방식으로 지정된 컬렉터에 개발자의 게이트웨이 세션 토큰을 절대 보내지 않습니다.1362수집기에 인증하려면 같은 `env` 블록에서 `OTEL_EXPORTER_OTLP_HEADERS`를 설정합니다. 세션은 이런 방식으로 지정된 수집기에 개발자의 게이트웨이 세션 토큰을 절대 보내지 않습니다.

1365 1363 

1366정책에서 이 엔드포인트를 추가하거나 변경하면, Claude Code는 대화형 세션에 적용하기 전에 각 개발자에게 [보안 승인 대화 상자](#managed)에서 이를 승인하도록 요청합니다.1364정책에서 이 엔드포인트를 추가하거나 변경하면, Claude Code는 대화형 세션에 적용하기 전에 [보안 승인 대화 상자](#managed)에서 각 개발자에게 승인을 요청합니다.

1367 1365 

1368Claude Code는 신호를 직접 내보내기 전에 엔드포인트를 확인하며, 확인에 실패하면 해당 신호를 릴레이로 유지합니다. 확인 항목은 다음과 같습니다.1366Claude Code는 신호를 직접 내보내기 전에 엔드포인트를 확인하며, 확인에 실패하면 해당 신호를 릴레이에 유지합니다. 확인 항목은 다음과 같습니다.

1369 1367 

1370* 엔드포인트가 게이트웨이 자체에서 제공되어야 합니다. MDM 프로필이나 로컬 `managed-settings.json`에서 같은 변수를 설정하면 내보내기는 릴레이로 유지됩니다.1368* 엔드포인트가 게이트웨이 자체에서 제공됩니다. MDM 프로필이나 로컬 `managed-settings.json`에서 같은 변수를 설정하면 내보내기는 릴레이에 유지됩니다.

1371* URL이 `https://`를 사용하거나, 루프백 주소에 대해 `http://`를 사용해야 합니다.1369* URL이 `https://`를 사용하거나, 루프백 주소에 대해 `http://`를 사용합니다

1372* URL이 쿼리나 프래그먼트 없이 `/v1/<signal>`로 끝나는 경로로 확인되어야 합니다. Claude Code는 일반 변수로부터 해당 경로를 직접 구성합니다. `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`와 같은 신호별 변수는 작성된 그대로 사용하므로, 그곳에는 전체 경로를 포함해야 합니다.1370* URL이 쿼리나 프래그먼트 없이 `/v1/<signal>`로 끝나는 경로로 확인됩니다. Claude Code는 일반 변수로부터 해당 경로를 직접 만듭니다. `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`와 같은 신호별 변수는 작성된 그대로 사용하므로, 그곳에는 전체 경로를 포함해야 합니다.

1373* URL이 게이트웨이 자체 호스트가 아니어야 합니다. 게이트웨이를 가리키는 엔드포인트는 릴레이 경로와 해당 세션 토큰을 유지합니다.1371* URL이 게이트웨이 자체 호스트가 아닙니다. 게이트웨이를 대상으로 하는 엔드포인트는 릴레이 경로와 해당 세션 토큰을 유지합니다.

1374* 사용자와 개발자 모두 어떤 설정 소스에서도 [`otelHeadersHelper`](https://code.claude.com/docs/ko/settings-reference#otelheadershelper)를 구성하지 않았어야 합니다. 헬퍼가 구성되어 있으면 모든 신호가 릴레이로 유지됩니다.1372* 사용자와 개발자 모두 어떤 설정 소스에서도 [`otelHeadersHelper`](https://code.claude.com/docs/ko/settings-reference#otelheadershelper)를 구성하지 않았습니다. 헬퍼가 구성되어 있으면 모든 신호가 릴레이에 유지됩니다.

1375 1373 

1376지정한 엔드포인트는 내보내기가 향하는 위치만 변경합니다. 어떤 신호를 내보낼지는 여전히 `OTEL_*_EXPORTER` 선택자로 선택합니다.1374지정한 엔드포인트는 내보내기 대상만 변경합니다. 어떤 신호를 내보낼지는 여전히 `OTEL_*_EXPORTER` 선택자로 선택합니다.

1377 1375 

1378엔드포인트만으로는 내보내기가 켜지지 않으므로, 게이트웨이가 이미 푸시하지 않는 한 내보내기를 켜는 변수도 함께 설정합니다.1376엔드포인트만으로는 내보내기가 켜지지 않으므로, 게이트웨이가 이미 푸시하지 않는 한 내보내기를 켜는 변수도 함께 설정합니다.

1379 1377 

1380* 게이트웨이가 이미 [텔레메트리 변수를 푸시](#telemetry)하는 경우, 해당 변수가 활성화, 선택자, 프로토콜을 처리하며 명시적으로 설정한 엔드포인트가 푸시된 `<public_url>` 값을 재정의합니다. `forward_to` 대상이 활성화하지 않는 신호에 대해서만 `OTEL_*_EXPORTER` 선택자를 직접 `otlp`로 설정합니다.1378* 게이트웨이가 이미 [텔레메트리 변수를 푸시](#telemetry)하는 경우, 해당 변수가 활성화, 선택자, 프로토콜을 처리하며, 명시적으로 지정한 엔드포인트가 푸시된 `<public_url>` 값을 재정의합니다. 어떤 `forward_to` 대상도 활성화하지 않는 신호에 대해서만 `OTEL_*_EXPORTER` 선택자를 직접 `otlp`로 설정합니다.

1381* 그렇지 않은 경우, `CLAUDE_CODE_ENABLE_TELEMETRY=1`, `OTEL_*_EXPORTER` 선택자, `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`도 설정합니다.1379* 그렇지 않은 경우, `CLAUDE_CODE_ENABLE_TELEMETRY=1`, `OTEL_*_EXPORTER` 선택자, `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`도 설정합니다.

1382 1380 

1383개발자가 로그아웃하거나 다른 게이트웨이에 로그인하면 컬렉터로의 내보내기가 중지되고, Claude Code는 남은 각 배치를 보내지 않고 삭제합니다.1381개발자가 로그아웃하거나 다른 게이트웨이에 로그인하면 수집기로의 내보내기가 중지되며, Claude Code는 남은 각 배치를 전송하지 않고 삭제합니다.

1384 1382 

1385#### 대상이 실패하는 경우1383#### 대상이 실패하는 경우

1386 1384 

1387게이트웨이는 텔레메트리를 버퍼링, 재시도 또는 저장하지 않으므로, 대상에 도달하지 못한 내보내기는 나중에 전달하지 않고 삭제합니다. 각 대상은 개별적으로 성공하거나 실패하며, 내보내는 클라이언트는 어느 경우든 성공 응답을 받으므로 실패한 전달은 게이트웨이의 로그에만 나타납니다.1385게이트웨이는 텔레메트리를 버퍼링, 재시도 또는 저장하지 않으므로, 대상에 도달하지 못한 내보내기는 늦게 전달하지 않고 삭제합니다. 각 대상은 개별적으로 성공하거나 실패하며, 내보내는 클라이언트는 어느 경우든 성공 응답을 받으므로 실패한 전달은 게이트웨이의 로그에만 나타납니다.

1388 1386 

1389한 대상으로의 전달이 연속 다섯 번 실패하면, 게이트웨이는 전달이 성공할 때까지 30초 단위로 해당 대상으로의 전달을 일시 중지하고 각 일시 중지를 로그에 기록합니다. 모든 오류 응답, 타임아웃 또는 연결 오류는 실패한 전달로 간주되지만, `400`, `413`, `415`, `422`, `431`은 예외입니다. 이 상태 코드는 컬렉터가 해당 내보내기의 페이로드를 형식이 잘못되었거나 너무 크다는 이유로 거부했음을 의미합니다.1387한 대상으로의 전달이 연속 다섯 번 실패하면, 게이트웨이는 전달이 성공할 때까지 30초 단위로 해당 대상으로의 전달을 일시 중지하고 각 일시 중지를 로그에 기록합니다. 모든 오류 응답, 타임아웃 또는 연결 오류는 실패한 전달로 간주되지만, `400`, `413`, `415`, `422`, `431`은 예외입니다. 이 상태 코드들은 수집기가 해당 내보내기의 페이로드를 형식이 잘못되었거나 너무 크다는 이유로 거부했음을 의미합니다.

1390 1388 

1391거부된 페이로드는 실패 횟수를 증가시키지도 초기화하지도 않습니다. 게이트웨이는 해당 대상으로 계속 전달하며, 대상의 첫 번째 거부와 이후 매 백 번째 거부 시 대상과 상태를 명시한 경고를 로그에 기록합니다.1389거부된 페이로드는 실패 횟수를 늘리거나 초기화하지 않습니다. 게이트웨이는 해당 대상으로 계속 전달하며, 대상의 첫 번째 거부와 이후 100번째 거부마다 대상과 상태를 명시한 경고를 로그에 기록합니다.

1392 1390 

1393### HTTP 튜닝1391### HTTP 튜닝

1394 1392 

1395선택적 최상위 블록인 `access_control`, `limits`, `timeouts`, `rate_limits` 네 가지로 HTTP 사용 환경을 튜닝합니다. 기본값은 대부분의 배포에 적합합니다.1393선택 사항인 네 개의 최상위 블록 `access_control`, `limits`, `timeouts`, `rate_limits`로 HTTP 사용 환경을 튜닝합니다. 기본값은 대부분의 배포에 적합합니다.

1396 1394 

1397| 블록 | 키 | 기본값 | 설명 |1395| 블록 | 키 | 기본값 | 설명 |

1398| - | - | - | - |1396| - | - | - | - |

1399| `access_control` | `allow_cidrs` / `deny_cidrs` | 비어 있음 | `trusted_proxies` 확인 후 클라이언트 주소에 따른 인바운드 IP 허용/거부입니다. `deny_cidrs`가 먼저 확인되며, 여기에 일치하는 클라이언트는 `allow_cidrs`에도 일치하더라도 거부됩니다. `allow_cidrs`가 비어 있지 않으면 게이트웨이는 기본적으로 거부합니다. `/healthz`와 `/readyz`는 `allow_cidrs`에서 제외됩니다. 신뢰할 수 있는 프록시가 IP 주소가 아닌 `X-Forwarded-For` 항목을 보내면 실제 클라이언트를 알 수 없으며, 게이트웨이는 확인할 사항을 명시한 경고를 한 번 로그에 기록합니다. 두 목록 중 하나가 요청에 적용되는 경우 `403` 및 감사 사유 `xff_unparseable`로 요청을 거부합니다. 둘 다 적용되지 않는 경우 요청을 처리하고, IP별 속도 제한과 감사에 프록시 자체의 주소를 클라이언트 IP로 사용합니다. |1397| `access_control` | `allow_cidrs` / `deny_cidrs` | 비어 있음 | `trusted_proxies` 확인 후 클라이언트 주소를 기준으로 인바운드 IP를 허용/거부합니다. `deny_cidrs`가 먼저 확인되며, 여기에 일치하는 클라이언트는 `allow_cidrs`에도 일치하더라도 거부됩니다. `allow_cidrs`가 비어 있지 않으면 게이트웨이는 기본 거부 상태가 됩니다. `/healthz`와 `/readyz`는 `allow_cidrs`에서 제외됩니다. 신뢰할 수 있는 프록시가 IP 주소가 아닌 `X-Forwarded-For` 항목을 보내면 실제 클라이언트를 알 수 없으며, 게이트웨이는 확인할 사항을 명시한 경고를 한 번 로그에 기록합니다. 두 목록 중 하나라도 요청에 적용되는 경우, 게이트웨이는 `403`과 감사 사유 `xff_unparseable`로 요청을 거부합니다. 어느 목록도 적용되지 않는 경우, 요청을 처리하고 IP별 속도 제한과 감사에 프록시 자체의 주소를 클라이언트 IP로 사용합니다. |

1400| `limits` | `max_request_bytes` | 32 MiB | 최대 인바운드 요청 본문 크기입니다. 크기를 초과하는 요청은 본문이 버퍼링되기 전에 `413`을 받습니다. 대용량 파일 또는 이미지 요청의 경우 값을 높입니다. |1398| `limits` | `max_request_bytes` | 32 MiB | 인바운드 요청 본문의 최대 크기입니다. 크기를 초과하는 요청은 본문이 버퍼링되기 전에 `413`을 받습니다. 대용량 파일이나 이미지 요청의 경우 값을 높이십시오. |

1401| `limits` | `max_request_header_bytes` | 설정되지 않음 | 요청의 전체 헤더에 대한 게이트웨이의 256 KiB 제한을 낮춥니다. 제한을 초과하는 요청은 `431`을 반환하며, 256 KiB를 초과하는 값은 효과가 없습니다. 개발자가 로그인 후 `431`을 받는 경우 [로그인 후 요청 헤더가 너무 큰 경우](https://code.claude.com/docs/ko/claude-apps-gateway-deploy.md#request-headers-too-large-after-sign-in)를 참조하세요. |1399| `limits` | `max_request_header_bytes` | 설정 안 됨 | 요청 전체 헤더에 대한 게이트웨이의 256 KiB 제한을 낮춥니다. 제한을 초과하는 요청은 `431`을 반환하며, 256 KiB를 초과하는 값은 효과가 없습니다. 개발자가 로그인 후 `431`을 받는 경우 [Request headers too large after sign-in](https://code.claude.com/docs/ko/claude-apps-gateway-deploy.md#request-headers-too-large-after-sign-in)을 참조하십시오. |

1402| `limits` | `max_url_length` | 설정되지 않음 | 설정하면 너무 긴 URL은 `414`를 반환합니다. |1400| `limits` | `max_url_length` | 설정 안 됨 | 설정하면 지나치게 긴 URL은 `414`를 반환합니다 |

1403| `timeouts` | `upstream_ttfb_ms` | 120000 | 업스트림의 응답 헤더를 기다리는 최대 시간(첫 바이트까지의 시간)입니다. 이후 응답 본문은 실제 시간 제한 없이 스트리밍됩니다. 직접 Anthropic 업스트림 경로에 적용되며, 다른 모든 제공업체에서는 게이트웨이가 응답이 시작될 때까지 최대 1시간 동안 기다립니다. |1401| `timeouts` | `upstream_ttfb_ms` | 120000 | 업스트림의 응답 헤더를 기다리는 최대 시간(첫 바이트까지의 시간)입니다. 이후 응답 본문은 경과 시간 제한 없이 스트리밍됩니다. 직접 Anthropic 업스트림 경로에 적용되며, 다른 모든 제공자의 경우 게이트웨이는 응답이 시작될 때까지 최대 1시간 기다립니다. |

1404| `rate_limits` | `device_authorization.max` / `.window_seconds` | 30 / 600 | 인증되지 않은 디바이스 인증 엔드포인트에 대한 IP별 속도 제한입니다. 공유 이그레스 IP 또는 NAT 뒤에 있는 대규모 조직의 경우 값을 높입니다. [대규모 롤아웃](https://code.claude.com/docs/ko/claude-apps-gateway-deploy.md#large-rollouts)에서 크기를 정하는 방법을 보여 줍니다. 이 제한은 `/v1/messages` 추론이 아닌 디바이스 그랜트 로그인 흐름에만 적용됩니다. [사용자 코드 무차별 대입 저항](https://code.claude.com/docs/ko/claude-apps-gateway-deploy.md#user-code-brute-force-resistance)을 참조하세요. |1402| `rate_limits` | `device_authorization.max` / `.window_seconds` | 30 / 600 | 인증되지 않은 디바이스 인증 엔드포인트에 대한 IP별 속도 제한입니다. 공유 이그레스 IP나 NAT 뒤에 있는 대규모 조직의 경우 값을 높이십시오. [대규모 롤아웃](https://code.claude.com/docs/ko/claude-apps-gateway-deploy.md#large-rollouts)에서 크기 산정 방법을 보여줍니다. 이 제한은 `/v1/messages` 추론이 아닌 디바이스 그랜트 로그인 흐름에만 적용됩니다. [사용자 코드 무차별 대입 방지](https://code.claude.com/docs/ko/claude-apps-gateway-deploy.md#user-code-brute-force-resistance)를 참조하십시오. |

1405| `rate_limits` | `device_verify.max` / `.window_seconds` | 10 / 600 | `/device`에서의 `user_code` 제출에 대한 IP별 속도 제한입니다. 누군가가 다른 개발자의 코드를 추측하는 것을 막는 역할을 합니다. [대규모 롤아웃](https://code.claude.com/docs/ko/claude-apps-gateway-deploy.md#large-rollouts)에서 얼마나 높일지 보여 줍니다. |1403| `rate_limits` | `device_verify.max` / `.window_seconds` | 10 / 600 | `/device`에서의 `user_code` 제출에 대한 IP별 속도 제한입니다. 다른 개발자의 코드를 추측하는 것을 막는 역할을 합니다. [대규모 롤아웃](https://code.claude.com/docs/ko/claude-apps-gateway-deploy.md#large-rollouts)에서 얼마나 높일지 보여줍니다. |

1406 1404 

1407기본값처럼 두 `access_control` 목록을 모두 비워 두면 게이트웨이는 모든 클라이언트 주소에 응답하므로, 누가 게이트웨이에 접근할 수 있는지는 네트워크만으로 제한됩니다. 게이트웨이는 개발자 머신에서 명령을 실행하는 [관리형 설정](#managed)을 푸시할 수 있으므로 이 점이 중요합니다.1405두 `access_control` 목록을 기본값대로 모두 비워 두면, 게이트웨이는 모든 클라이언트 주소를 처리하므로 네트워크만이 접근할 수 있는 대상을 제한합니다. 게이트웨이는 개발자 머신에서 명령을 실행하는 [관리형 설정](#managed)을 푸시할 수 있으므로 이 점이 중요합니다.

1408 1406 

1409`allow_cidrs`가 비어 있는 동안 게이트웨이는 요청에 응답하는 방식을 변경하지 않고 두 곳에서 경고합니다.1407`allow_cidrs`가 비어 있는 동안 게이트웨이는 요청에 응답하는 방식은 변경하지 않고 두 곳에서 경고합니다.

1410 1408 

1411* **부팅 시**: 운영 로그의 경고가 사설 범위인 `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `100.64.0.0/10`, `127.0.0.0/8`, `::1/128`, `fc00::/7`과 개발자가 연결하는 기타 내부 범위만 허용하도록 권장합니다. 로컬 개발에서처럼 게이트웨이를 루프백 주소에 바인딩하고 `trusted_proxies`와 `public_url`을 모두 설정하지 않으면 경고가 나타나지 않습니다.1409* **부팅 시**: 운영 로그의 경고는 사설 범위 `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `100.64.0.0/10`, `127.0.0.0/8`, `::1/128`, `fc00::/7`과 개발자가 연결하는 기타 내부 범위만 허용하도록 권장합니다. 로컬 개발처럼 게이트웨이를 루프백 주소에 바인딩하고 `trusted_proxies`와 `public_url`을 모두 설정하지 않으면 경고가 나타나지 않습니다.

1412* **런타임 시**: 이러한 사설 범위 밖의 주소에서 요청이 처음 도착하면, 게이트웨이는 경고를 로그에 기록하고 클라이언트 IP를 포함하는 [`access.public_client` 감사 이벤트](https://code.claude.com/docs/ko/claude-apps-gateway-deploy#logs)를 내보냅니다. 둘 다 프로세스당 한 번 발생합니다. 링크 로컬 주소인 `169.254.0.0/16`과 `fe80::/10`은 공용으로 간주되지 않습니다. 게이트웨이는 이 확인이 실행되기 전에 `/healthz`와 `/readyz`에 응답하므로, 공용 범위에서 오는 상태 프로브는 이를 트리거하지 않습니다.1410* **런타임 시**: 해당 사설 범위 밖의 주소에서 요청이 처음 도착하면, 게이트웨이는 경고를 로그에 기록하고 클라이언트 IP를 포함한 [`access.public_client` 감사 이벤트](https://code.claude.com/docs/ko/claude-apps-gateway-deploy#logs)를 생성합니다. 둘 다 프로세스당 한 번 발생합니다. 링크 로컬 주소 `169.254.0.0/16`과 `fe80::/10`은 공용으로 간주되지 않습니다. 게이트웨이는 이 확인이 실행되기 전에 `/healthz`와 `/readyz`에 응답하므로, 공용 범위에서 오는 헬스 프로브는 이를 트리거하지 않습니다.

1413 1411 

1414두 신호 모두 게이트웨이가 확인한 클라이언트 주소를 사용합니다. 로드 밸런서, 포트 포워드 또는 터널이 트래픽을 중계하고 `listen.trusted_proxies`에 나열되어 있지 않으면, 게이트웨이는 대개 사설 주소인 중계자의 주소를 보게 되므로 런타임 경고나 사설 허용 목록 모두 이를 통해 중계된 트래픽을 잡아내지 못합니다.1412두 신호 모두 게이트웨이가 확인한 클라이언트 주소를 사용합니다. 로드 밸런서, 포트 포워드 또는 터널이 트래픽을 중계하면서 `listen.trusted_proxies`에 나열되어 있지 않으면, 게이트웨이는 보통 사설 주소인 중계 장치의 주소를 보게 되므로, 런타임 경고와 사설 허용 목록 모두 해당 장치를 통해 중계된 트래픽을 잡아내지 못합니다.

1415 1413 

1416이러한 프런트 엔드 뒤에서는 게이트웨이가 실제 클라이언트 주소를 볼 수 있도록 먼저 [`listen.trusted_proxies`](#listen)를 설정하고, 어떤 경우에도 게이트웨이와 그 앞의 모든 것을 공용 인터넷에서 접근할 수 없도록 유지합니다.1414이러한 프런트 엔드 뒤에서는 먼저 [`listen.trusted_proxies`](#listen)를 설정하여 게이트웨이가 실제 클라이언트 주소를 보도록 하고, 그와 관계없이 게이트웨이와 그 앞에 있는 모든 것을 공용 인터넷에서 접근할 수 없도록 유지하십시오.

1417 1415 

1418### `load_test_mode`1416### `load_test_mode`

1419 1417 

1420`load_test_mode` 블록을 사용하면 모델 제공업체를 호출하지 않고 게이트웨이를 부하 테스트할 수 있습니다. 이 모드가 켜져 있는 동안 게이트웨이는 평소처럼 각 제공업체 요청을 빌드하고 서명한 다음, 보내는 대신 폐기하고 일반 응답 경로를 통해 미리 준비된 응답을 스트리밍합니다. 응답은 미리 준비된 응답임을 알리는 문장으로 시작하는 채움 텍스트입니다.1418`load_test_mode` 블록을 사용하면 모델 제공자를 호출하지 않고 게이트웨이를 부하 테스트할 수 있습니다. 이 모드가 켜져 있는 동안 게이트웨이는 평소처럼 각 제공자 요청을 빌드하고 서명한 뒤, 전송하지 않고 폐기하며, 일반 응답 경로를 통해 미리 준비된 응답을 스트리밍합니다. 응답은 미리 준비된 응답임을 알리는 문장으로 시작하는 채움 텍스트입니다.

1421 1419 

1422게이트웨이 서버에 Claude Code v2.1.282 이상이 필요합니다. 이전 게이트웨이는 이 키를 발견하면 시작을 거부합니다. 블록을 추가하기 전에 모든 복제본을 업그레이드하고, 롤백하기 전에 블록을 제거합니다.1420게이트웨이 서버에 Claude Code v2.1.282 이상이 필요합니다. 이전 버전의 게이트웨이는 이 키를 발견하면 시작을 거부합니다. 블록을 추가하기 전에 모든 레플리카를 업그레이드하고, 롤백하기 전에 블록을 제거하십시오.

1423 1421 

1424아래 예시는 기본값으로 모드를 켜며, 약 750개 토큰 분량의 텍스트 응답을 약 10초에 걸쳐 스트리밍합니다.1422아래 예시는 기본값으로 모드를 켜며, 약 750 토큰 분량의 텍스트 응답을 약 10초에 걸쳐 스트리밍합니다.

1425 1423 

1426```yaml theme={null}1424```yaml theme={null}

1427load_test_mode:1425load_test_mode:


1432 1430 

1433| 필드 | 필수 | 설명 |1431| 필드 | 필수 | 설명 |

1434| - | - | - |1432| - | - | - |

1435| `enabled` | 예 | `true`는 모드를 켭니다. `false`는 모드를 끈 상태로 파일에 숫자를 유지합니다. 이 필드 없이 블록이 있으면 게이트웨이는 시작을 거부합니다. |1433| `enabled` | 예 | `true`는 모드를 켭니다. `false`는 모드를 끈 상태로 파일에 수치를 유지합니다. 이 필드 없이 블록이 있으면 게이트웨이는 시작을 거부합니다. |

1436| `reply_tokens` | 아니요 | 기본값 `750`. 각 미리 준비된 응답이 담는 텍스트의 대략적인 토큰 수로, 1에서 100000 사이의 정수입니다. |1434| `reply_tokens` | 아니요 | 기본값 `750`. 미리 준비된 각 응답이 담는 대략적인 텍스트 토큰 수로, 1부터 100000까지의 정수입니다. |

1437| `reply_seconds` | 아니요 | 기본값 `9.5`. 스트리밍 응답에 걸리는 시간으로, 0에서 600 사이입니다. `0`은 전체 응답을 한 번에 보냅니다. 스트리밍이 아닌 요청에 대한 응답은 항상 한 번에 반환됩니다. |1435| `reply_seconds` | 아니요 | 기본값 `9.5`. 스트리밍 응답에 걸리는 시간으로, 0부터 600까지입니다. `0`은 전체 응답을 한 번에 보냅니다. 스트리밍이 아닌 요청에 대한 응답은 항상 한 번에 반환됩니다. |

1438 1436 

1439이 모드의 부하 테스트는 게이트웨이, Postgres, 게이트웨이 앞의 모든 것을 대상으로 합니다. 제공업체의 제한, 속도 또는 네트워크 경로는 대상으로 하지 않습니다.1437이 모드의 부하 테스트는 게이트웨이, Postgres, 그리고 게이트웨이 앞에 있는 모든 것을 다룹니다. 제공자의 제한, 속도 또는 네트워크 경로는 다루지 않습니다.

1440 1438 

1441제공업체로 모델 요청이 전송되지 않으므로 요청당 복제본의 CPU는 추정치이며, 제공업체로 가는 트래픽도 암호화하는 프로덕션보다 낮게 나타납니다. 실제 제공업체를 대상으로 소규모 파일럿을 실행하여 복제본 수를 확인하세요. v2.1.283 이전에는 추정치가 훨씬 낮게 나타납니다.1439제공자에게 모델 요청이 전송되지 않으므로, 레플리카의 요청당 CPU는 추정치이며 제공자로 가는 트래픽도 암호화하는 프로덕션 환경보다 낮게 나타납니다. 실제 제공자를 대상으로 한 소규모 파일럿으로 레플리카 수를 확인하십시오. v2.1.283 이전에는 추정치가 훨씬 낮게 나타납니다.

1442 1440 

1443모드가 켜져 있는 동안 요청은 최대 일곱 자리 정수를 담은 `x-load-test-user` 헤더를 포함할 수 있습니다. 게이트웨이는 각 숫자를 별도의 개발자로 집계하며, 요청과 함께 온 토큰의 개발자 이메일과 그룹을 사용합니다.1441모드가 켜져 있는 동안 요청은 최대 일곱 자리 정수를 담은 `x-load-test-user` 헤더를 포함할 수 있습니다. 게이트웨이는 각 숫자를 별도의 개발자로 계산하며, 요청과 함께 온 토큰의 개발자 이메일과 그룹을 사용합니다.

1444 1442 

1445부하 테스트 배포에는 별도의 빈 데이터베이스를 제공하세요. 모드가 켜진 상태에서 어떤 개발자라도 이미 사용량이 있는 데이터베이스를 대상으로 하면 게이트웨이가 시작을 거부하기 때문입니다.1443부하 테스트 배포에는 별도의 빈 데이터베이스를 제공하십시오. 게이트웨이는 이미 어떤 개발자라도 사용량이 발생한 데이터베이스에서는 모드가 켜진 상태로 시작하기를 거부하기 때문입니다.

1446 1444 

1447> [!WARNING]1445> [!WARNING]

1448>1446>

1449> 개발자가 사용하는 게이트웨이에서는 절대 이 모드를 켜지 마세요. 모든 요청이 미리 준비된 응답을 받으며 모델이 호출되지 않습니다. 모드가 켜져 있는 동안 게이트웨이는 부팅 시 `load_test_mode is on` 경고를 로그에 기록하고 각 `inference` [감사 이벤트](https://code.claude.com/docs/ko/claude-apps-gateway-deploy.md#logs)에 `load_test: true`를 표시합니다.1447> 개발자가 사용하는 게이트웨이에서는 절대 이 모드를 켜지 마십시오. 모든 요청이 미리 준비된 응답을 받으며 어떤 모델도 호출되지 않습니다. 게이트웨이는 모드가 켜져 있는 동안 부팅 시 `load_test_mode is on` 경고를 로그에 기록하고 각 `inference` [감사 이벤트](https://code.claude.com/docs/ko/claude-apps-gateway-deploy.md#logs)에 `load_test: true`를 표시합니다.

1450 1448 

1451## 완전한 예제1449## 완전한 예제

1452 1450 

Details

264* **PR 생성을 포함한 전체 안내**: [검토 및 반복](https://code.claude.com/docs/ko/web-quickstart.md#review-and-iterate)을 참조하세요264* **PR 생성을 포함한 전체 안내**: [검토 및 반복](https://code.claude.com/docs/ko/web-quickstart.md#review-and-iterate)을 참조하세요

265* **Claude가 PR을 모니터링하여 CI 실패 및 검토 주석에 자동으로 대응하도록 하기**: [풀 리퀘스트 자동 수정](#auto-fix-pull-requests)을 참조하세요265* **Claude가 PR을 모니터링하여 CI 실패 및 검토 주석에 자동으로 대응하도록 하기**: [풀 리퀘스트 자동 수정](#auto-fix-pull-requests)을 참조하세요

266 266 

267#### diff 보기에서 누락된 파일 문제 해결

268 

269diff 보기가 기본 브랜치와 비교할 때, 세션이 변경 사항을 푸시했는지 여부와 관계없이 예상한 파일이 diff 보기의 파일 목록에서 누락될 수 있습니다:

270 

271* **아직 푸시된 변경 사항이 없는 경우**: 목록에는 Claude가 직접 수행한 편집은 포함되지만, 포매터와 같이 Claude가 실행한 명령으로 인한 변경 사항은 포함되지 않습니다

272* **변경 사항이 푸시된 경우**: 목록에는 푸시된 커밋은 포함되지만, 마지막 푸시 이후에 이루어진 변경 사항은 포함되지 않습니다

273 

274누락된 변경 사항을 목록에 추가하려면 Claude에게 커밋하고 푸시하도록 요청하세요.

275 

267### 컨텍스트 관리276### 컨텍스트 관리

268 277 

269클라우드 세션은 텍스트 출력을 생성하는 [기본 제공 명령](https://code.claude.com/docs/ko/commands.md)을 지원합니다. `/plugin` 또는 `/resume`과 같이 터미널 인터페이스에서만 실행되는 명령은 사용할 수 없습니다. 터미널에서 선택기 또는 패널을 열어야 하는 명령은 클라우드 세션에서 다르게 작동합니다:278클라우드 세션은 텍스트 출력을 생성하는 [기본 제공 명령](https://code.claude.com/docs/ko/commands.md)을 지원합니다. `/plugin` 또는 `/resume`과 같이 터미널 인터페이스에서만 실행되는 명령은 사용할 수 없습니다. 터미널에서 선택기 또는 패널을 열어야 하는 명령은 클라우드 세션에서 다르게 작동합니다:

270 279 

271* **`/model`, `/effort`, `/color`, 및 `/rename`**: 터미널 선택기 또는 슬라이더를 열지 않고 대신 인수로 값을 전달합니다(예: `/model sonnet`). 인수 형식은 각 명령의 [가용성 참고 사항](https://code.claude.com/docs/ko/commands.md#all-commands)을 따릅니다.280* **`/model`, `/effort`, `/color`, 및 `/rename`**: 터미널 선택기 또는 슬라이더를 열지 않고 대신 인수로 값을 전달합니다(예: `/model sonnet`). 인수 형식은 각 명령의 [가용성 참고 사항](https://code.claude.com/docs/ko/commands.md#all-commands)을 따릅니다.

272* **`/fast`**: 빠른 모드가 [계정에서 사용 가능](https://code.claude.com/docs/ko/fast-mode.md#requirements)할 때 세션에 대해 [빠른 모드](https://code.claude.com/docs/ko/fast-mode.md#use-fast-mode-in-cloud-sessions)를 전환합니다. 세션의 환경에서 Claude Code v2.1.271 이상이 필요합니다.281* **`/fast`**: 빠른 모드가 [계정에서 사용 가능](https://code.claude.com/docs/ko/fast-mode.md#requirements)할 때 세션에 대해 [빠른 모드](https://code.claude.com/docs/ko/fast-mode.md#use-fast-mode-in-cloud-sessions)를 전환합니다. 세션의 환경에서 Claude Code v2.1.271 이상이 필요합니다.

273* **`/config`**: 브라우저의 claude.ai/code에서는 값을 설정하는 대신 설정의 Claude Code 섹션을 엽니다. 클라우드 세션의 설정을 변경하려면 환경에 [환경 변수](https://code.claude.com/docs/ko/cloud-environments.md#set-environment-variables)를 설정하세요. [프로젝트](https://code.claude.com/docs/ko/claude-projects.md)의 스레드 외부에서 하나의 저장소가 있는 세션에서는 대신 해당 저장소의 `.claude/settings.json`에 키를 커밋하세요. [클라우드 세션의 설정](https://code.claude.com/docs/ko/settings.md#settings-in-cloud-sessions)에서 각 세션이 읽는 내용을 나열합니다.282* **`/config`**: 브라우저의 claude.ai/code에서는 값을 설정하는 대신 **Settings > Code** 또는 **Settings > Claude Code**를 엽니다. 클라우드 세션의 설정을 변경하려면 환경에 [환경 변수](https://code.claude.com/docs/ko/cloud-environments.md#set-environment-variables)를 설정하세요. [프로젝트](https://code.claude.com/docs/ko/claude-projects.md)의 스레드 외부에서 하나의 저장소가 있는 세션에서는 대신 해당 저장소의 `.claude/settings.json`에 키를 커밋하세요. [클라우드 세션의 설정](https://code.claude.com/docs/ko/settings.md#settings-in-cloud-sessions)에서 각 세션이 읽는 내용을 나열합니다.

274 283 

275[프로젝트의 스레드](https://code.claude.com/docs/ko/claude-projects.md#choose-models-and-let-claude-manage-context) 외부의 클라우드 세션에서 컨텍스트를 관리하는 방법은 다음과 같습니다:284[프로젝트의 스레드](https://code.claude.com/docs/ko/claude-projects.md#choose-models-and-let-claude-manage-context) 외부의 클라우드 세션에서 컨텍스트를 관리하는 방법은 다음과 같습니다:

276 285 


337* **저장소 액세스**: 확인은 기본적으로 활성화되지 않습니다346* **저장소 액세스**: 확인은 기본적으로 활성화되지 않습니다

338* **민감한 내용**: 공유하기 전에 세션을 확인하세요. 세션에는 개인 GitHub 저장소의 코드 및 자격 증명이 포함될 수 있습니다347* **민감한 내용**: 공유하기 전에 세션을 확인하세요. 세션에는 개인 GitHub 저장소의 코드 및 자격 증명이 포함될 수 있습니다

339 348 

340저장소 액세스를 요구하거나 공유 세션에서 이름을 숨기려면 [**Settings > Claude Code > Sharing settings**](https://claude.ai/settings/claude-code)로 이동하세요.349수신자에게 저장소 액세스를 요구하거나 공유 세션에서 이름을 숨기려면 claude.ai에서 Settings를 연 다음 다음과 같이 진행하세요:

350 

351* **Settings 메뉴에 Claude Code 대신 Code가 표시되는 경우**: 이러한 설정이 있는 [**Privacy**](https://claude.ai/settings/data-privacy-controls)로 이동하세요

352* **그 외의 경우**: [**Claude Code > Sharing settings**](https://claude.ai/settings/claude-code)로 이동하세요

341 353 

342### 세션 보관354### 세션 보관

343 355 

Details

29 29 

30### AWS 자격 증명 구성30### AWS 자격 증명 구성

31 31 

32Claude Code는 Claude Platform on AWS에 대해 두 가지 인증 방법을 지원합니다. 팀이 액세스를 관리하는 방식에 맞는 방법을 선택하십시오.32Claude Code는 Claude Platform on AWS에 대해 두 가지 인증 방법을 지원합니다. 팀의 액세스 관리 방식에 맞는 방법을 선택합니다.

33 33 

34* [SigV4를 사용한 AWS 자격 증명](#use-aws-credentials-with-sigv4): 표준 AWS 자격 증명 체인의 자격 증명을 사용하여 IAM 주체로 인증합니다34* [SigV4를 사용하는 AWS 자격 증명](#use-aws-credentials-with-sigv4): 표준 AWS 자격 증명 체인의 자격 증명을 사용하여 IAM 주체로 인증합니다

35* [워크스페이스 API 키](#use-a-workspace-api-key): AWS Console에서 생성한 장기 키로 인증합니다35* [워크스페이스 API 키](#use-a-workspace-api-key): AWS Console에서 생성한 장기 키로 인증합니다

36 36 

37#### SigV4를 사용한 AWS 자격 증명 사용37#### SigV4를 사용하는 AWS 자격 증명 사용

38 38 

39Claude Code는 표준 AWS 자격 증명 체인을 사용하여 SigV4로 요청에 서명합니다. 환경 변수, `~/.aws/credentials`의 공유 자격 증명, IAM 역할, AWS SSO 세션 및 AWS SDK가 지원하는 기타 소스입니다.39Claude Code는 표준 AWS 자격 증명 체인을 사용하여 SigV4로 요청에 서명합니다. 이 체인에는 환경 변수, `~/.aws/credentials`의 공유 자격 증명, IAM 역할, AWS SSO 세션 및 AWS SDK가 지원하는 기타 모든 소스가 포함됩니다.

40 40 

41로컬 사용의 경우 Claude Code를 시작하기 전에 AWS CLI로 로그인하십시오. 아래 예제는 SSO 프로필을 사용하지만 표준 위치에 자격 증명을 생성하는 모든 방법이 작동합니다.41로컬에서 사용하는 경우 Claude Code를 시작하기 전에 AWS CLI로 로그인합니다. 아래 예시는 SSO 프로필을 사용하지만, 표준 위치에 자격 증명을 생성하는 방법이라면 어떤 방법이든 사용할 수 있습니다.

42 42 

43```bash theme={null}43```bash theme={null}

44aws sso login --profile my-profile44aws sso login --profile my-profile

45export AWS_PROFILE=my-profile45export AWS_PROFILE=my-profile

46```46```

47 47 

48CI 및 자동화의 경우 Anthropic 서비스를 호출할 수 있는 권한이 있는 IAM 역할을 실행기에 제공하고 `AWS_REGION`을 설정하십시오. 자격 증명 체인이 역할을 자동으로 선택합니다.48CI 및 자동화 환경에서는 러너에 Anthropic 서비스를 호출할 권한이 있는 IAM 역할을 부여하고 `AWS_REGION`을 설정합니다. 자격 증명 체인이 해당 역할을 자동으로 인식합니다.

49 49 

50SSO 자격 증명이 세션 중에 만료되면 [`awsAuthRefresh`](https://code.claude.com/docs/ko/amazon-bedrock#advanced-credential-configuration)를 구성하여 Claude Code가 로그인 명령을 다시 실행하고 실패하는 대신 재시도하도록 합니다. [설정 파일](https://code.claude.com/docs/ko/settings.md)에 명령을 추가하십시오(예: `~/.claude/settings.json`):50세션 도중 SSO 자격 증명이 만료되는 경우, 실패하는 대신 Claude Code가 로그인 명령을 다시 실행하고 재시도하도록 [`awsAuthRefresh`](https://code.claude.com/docs/ko/amazon-bedrock#advanced-credential-configuration)를 구성합니다. `~/.claude/settings.json`과 같은 [설정 파일](https://code.claude.com/docs/ko/settings.md)에 명령을 추가합니다.

51 51 

52```json theme={null}52```json theme={null}

53{53{


55}55}

56```56```

57 57 

58Claude Code는 또한 기존 AWS 자격 증명을 검증할 수 없을 때 시작 시 이 명령을 실행하고 로그인이 완료될 때까지 `Authentication` 패널에 명령의 출력을 표시합니다.58Claude Code는 기존 AWS 자격 증명을 검증할 수 없는 경우 시작 시에도 이 명령을 실행하며, 로그인이 완료될 때까지 `Authentication` 패널에 명령의 출력을 표시합니다.

59 59 

60`awsAuthRefresh`가 구성되면 `/login`을 실행하고 **3rd-party platform**을 선택한 다음 **Using 3rd-party platforms** 아래에서 **Claude Platform on AWS · refresh credentials**를 선택하십시오. Claude Code는 구성된 명령을 실행하고 재시작 없이 AWS 자격 증명을 다시 읽습니다.60`awsAuthRefresh`가 구성된 상태에서 `/login`을 실행하고 **3rd-party platform**을 선택한 다음, **Using 3rd-party platforms** 아래에서 **Claude Platform on AWS · refresh credentials**를 선택합니다. Claude Code는 구성된 명령을 실행하고 재시작 없이 AWS 자격 증명을 다시 읽어 들입니다.

61 61 

62#### 워크스페이스 API 키 사용62#### 워크스페이스 API 키 사용

63 63 

64워크스페이스 API 키는 장기 보안 비밀이며, 페더레이션된 AWS 자격 증명을 관리하지 않으려는 경우에 유용합니다. AWS Console의 **Claude Platform on AWS → API keys** 아래에서 생성하고 `ANTHROPIC_AWS_API_KEY`로 설정하십시오.64워크스페이스 API 키는 장기 보안 비밀로, 페더레이션된 AWS 자격 증명을 관리하고 싶지 않을 때 유용합니다. AWS Console의 **Claude Platform on AWS → API keys**에서 키를 생성하고 `ANTHROPIC_AWS_API_KEY`로 설정합니다.

65 65 

66```bash theme={null}66```bash theme={null}

67export ANTHROPIC_AWS_API_KEY=sk-ant-xxxxx67export ANTHROPIC_AWS_API_KEY=sk-ant-xxxxx

68```68```

69 69 

70키는 `x-api-key`로 전송되며 SigV4보다 우선하므로 환경의 모든 AWS 자격 증명이 무시됩니다. 별도의 Claude Console 조직의 API 키는 여기서 작동하지 않습니다.70키는 `x-api-key`로 전송되며 SigV4보다 우선하므로, 환경에 있는 모든 AWS 자격 증명은 무시됩니다. 별도의 Claude Console 조직에서 발급된 API 키는 여기서 작동하지 않습니다.

71 71 

72워크스페이스 API 키를 다른 프로덕션 자격 증명처럼 취급하십시오. [사용자 설정 파일](https://code.claude.com/docs/ko/settings.md) `env` 블록은 전역으로 내보내지 않고 키를 컴퓨터로 범위를 지정하는 편리한 방법입니다.72워크스페이스 API 키는 다른 프로덕션 자격 증명과 동일하게 취급해야 합니다. [사용자 설정 파일](https://code.claude.com/docs/ko/settings.md)의 `env` 블록을 사용하면 키를 전역으로 내보내지 않고도 사용자의 머신 범위로 편리하게 지정할 수 있습니다.

73 73 

74> [!NOTE]74> [!NOTE]

75>75>

76> `/login` 및 `/logout` 명령은 Claude Platform on AWS에 대해 Claude.ai 구독에 로그인하지 않습니다. 인증은 AWS 자격 증명 또는 워크스페이스 API 키를 통해 실행됩니다.76> `/login` 및 `/logout` 명령은 Claude Platform on AWS에서 claude.ai 구독으로 로그인하지 않습니다. 인증은 AWS 자격 증명 또는 워크스페이스 API 키를 통해 이루어집니다.

77 77 

78### Claude Code 구성78### Claude Code 구성

79 79 

80Claude Code를 기본 Anthropic API 대신 Claude Platform on AWS를 통해 라우팅하는 환경 변수를 설정하십시오.80기본 Anthropic API 대신 Claude Platform on AWS를 통해 Claude Code를 라우팅하는 환경 변수를 설정합니다.

81 81 

82```bash theme={null}82```bash theme={null}

83export CLAUDE_CODE_USE_ANTHROPIC_AWS=183export CLAUDE_CODE_USE_ANTHROPIC_AWS=1


85export AWS_REGION=us-east-185export AWS_REGION=us-east-1

86```86```

87 87 

88`ANTHROPIC_AWS_WORKSPACE_ID`는 필수입니다. Claude Code는 모든 요청에서 `anthropic-workspace-id` 헤더로 전송합니다. 예제 `wrkspc_01ABCDEFGHIJKLMN` 값을 Claude Platform on AWS 설정의 자신의 워크스페이스 ID로 바꾸십시오.88`ANTHROPIC_AWS_WORKSPACE_ID`는 필수입니다. Claude Code는 모든 요청에서 이 값을 `anthropic-workspace-id` 헤더로 전송합니다. 예시 값 `wrkspc_01ABCDEFGHIJKLMN`을 Claude Platform on AWS 설정에서 확인한 자신의 워크스페이스 ID로 바꿉니다.

89 89 

90Claude Code는 AWS 리전에서 기본 URL을 `https://aws-external-anthropic.{region}.api.aws`로 계산하며, 이는 [Amazon Bedrock과 동일한 우선순위](https://code.claude.com/docs/ko/amazon-bedrock.md#3-configure-claude-code)로 확인됩니다. URL을 직접 재정의하려면 `ANTHROPIC_AWS_BASE_URL`을 설정하십시오.90Claude Code는 AWS 리전으로부터 기본 URL을 `https://aws-external-anthropic.{region}.api.aws`로 계산하며, 리전은 [Amazon Bedrock과 동일한 우선순위](https://code.claude.com/docs/ko/amazon-bedrock.md#3-configure-claude-code)로 결정됩니다. URL을 직접 재정의하려면 `ANTHROPIC_AWS_BASE_URL`을 설정합니다.

91 91 

92Claude Platform on AWS는 환경에 AWS 자격 증명이 있어도 선택 사항입니다. Amazon Bedrock 및 Microsoft Foundry는 공급자 라우팅에서 우선하므로 설정된 경우 `CLAUDE_CODE_USE_BEDROCK` 및 `CLAUDE_CODE_USE_FOUNDRY`를 해제하십시오.92Claude Platform on AWS는 환경에 AWS 자격 증명이 있더라도 자동으로 활성화되지 않으며, 명시적으로 옵트인해야 합니다. 공급자 라우팅에서는 Amazon Bedrock과 Microsoft Foundry가 우선하므로, `CLAUDE_CODE_USE_BEDROCK` 및 `CLAUDE_CODE_USE_FOUNDRY`가 설정되어 있다면 설정을 해제합니다.

93 93 

94### 모델 버전 고정94### 모델 버전 고정

95 95 

96Claude Platform on AWS는 직접 Claude API와 동일한 모델 ID를 사용합니다.96Claude Platform on AWS는 Claude API와 직접 사용할 때와 동일한 모델 ID를 사용합니다.

97 97 

98기본 별칭 `fable`, `opus`, `sonnet` 및 `haiku`는 Claude Platform on AWS에 대한 Claude Code의 기본 제공 기본값으로 확인되며, 이는 최신 릴리스보다 뒤떨어질 수 있습니다. `ANTHROPIC_DEFAULT_OPUS_MODEL` 없이 `opus` 별칭은 Opus 5.5로 확인됩니다. v2.1.280 이전에는 v2.1.219부터 Opus 5로 확인되었으며, v2.1.207부터 Opus 4.8로 확인되었습니다.98기본 별칭 `fable`, `opus`, `sonnet`, `haiku`는 Claude Platform on AWS용 Claude Code 내장 기본값으로 확인되며, 이 기본값은 최신 릴리스보다 늦게 반영될 수 있습니다. `ANTHROPIC_DEFAULT_OPUS_MODEL`이 없으면 `opus` 별칭은 Opus 5.5로 확인됩니다. v2.1.280 이전에는 v2.1.219부터 Opus 5로 확인되었습니다.

99 99 

100Claude Code를 팀에 배포하는 경우 모델 ID를 명시적으로 고정하여 새 릴리스가 모든 사람을 한 번에 이동하지 않도록 하십시오.100팀에 Claude Code를 배포하는 경우, 새 릴리스로 인해 모든 사용자가 한꺼번에 변경되지 않도록 모델 ID를 명시적으로 고정합니다.

101 101 

102```bash theme={null}102```bash theme={null}

103export ANTHROPIC_DEFAULT_FABLE_MODEL=claude-fable-5103export ANTHROPIC_DEFAULT_FABLE_MODEL=claude-fable-5


106export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5106export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5

107```107```

108 108 

109모델 ID 및 별칭의 전체 목록은 [모델 개요](https://platform.claude.com/docs/en/about-claude/models/overview)를 참조하십시오. 기타 모델 관련 변수는 [모델 구성](https://code.claude.com/docs/ko/model-config.md)을 참조하십시오.109전체 모델 ID 및 별칭 목록은 [모델 개요](https://platform.claude.com/docs/en/about-claude/models/overview)를 참조하세요. 기타 모델 관련 변수는 [모델 구성](https://code.claude.com/docs/ko/model-config.md)을 참조하세요.

110 110 

111[프롬프트 캐싱](https://code.claude.com/docs/ko/prompt-caching.md)은 자동으로 활성화됩니다. 1시간 캐시 TTL을 5분 기본값 대신 요청하려면 `ENABLE_PROMPT_CACHING_1H=1`을 설정하십시오. API는 1시간 캐시 쓰기를 더 높은 요금으로 청구합니다. 요금은 [프롬프트 캐싱 가격 책정](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing)을 참조하십시오.111[프롬프트 캐싱](https://code.claude.com/docs/ko/prompt-caching.md)은 자동으로 활성화됩니다. 기본값인 5분 대신 1시간 캐시 TTL을 요청하려면 `ENABLE_PROMPT_CACHING_1H=1`을 설정합니다. API는 1시간 캐시 쓰기에 더 높은 요금을 청구합니다. 요금은 [프롬프트 캐싱 가격](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing)을 참조하세요.

112 112 

113주 대화와 Claude Code가 외부에서 수행하는 요청에 대해 다른 TTL을 설정하려면 [TTL을 직접 선택하십시오](https://code.claude.com/docs/ko/prompt-caching.md#choose-the-ttl-yourself).113메인 대화와 Claude Code가 그 외부에서 보내는 요청에 서로 다른 TTL을 설정하려면 [TTL을 직접 선택](https://code.claude.com/docs/ko/prompt-caching.md#choose-the-ttl-yourself)합니다.

114 114 

115### 시작 및 확인115### 실행 및 확인

116 116 

117Claude Code를 시작하고 라우팅을 확인하십시오:117Claude Code를 시작하고 라우팅을 확인합니다.

118 118 

119```bash theme={null}119```bash theme={null}

120claude120claude

121```121```

122 122 

123시작 배너는 공급자가 활성화되면 `Claude Platform on AWS`를 표시합니다. `/status`를 실행하여 세부 정보를 확인하십시오. `API provider` 줄은 `Claude Platform on AWS`를 읽고, 출력에는 `Workspace ID`, `AWS region` 및 재정의를 설정한 경우 `Claude Platform on AWS base URL`이 포함됩니다.123공급자가 활성화되어 있으면 시작 배너에 `Claude Platform on AWS`가 표시됩니다. `/status`를 실행하여 세부 정보를 확인합니다. `API provider` 줄에 `Claude Platform on AWS`가 표시되며, 출력에는 `Workspace ID`, `AWS region`, 그리고 재정의를 설정한 경우 `Claude Platform on AWS base URL`이 포함됩니다.

124 124 

125## Agent SDK 사용125## Agent SDK 사용

126 126 

claude-projects.md +46 −40

Details

70[claude.ai/code](https://claude.ai/code)에서 또는 데스크톱 앱의 Code 탭에서, 그리고 [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) 및 [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude)용 Claude 모바일 앱에서 프로젝트를 만들고 사용합니다. 브라우저와 데스크톱 앱에서 프로젝트를 시작하는 방법은 두 가지입니다:70[claude.ai/code](https://claude.ai/code)에서 또는 데스크톱 앱의 Code 탭에서, 그리고 [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) 및 [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude)용 Claude 모바일 앱에서 프로젝트를 만들고 사용합니다. 브라우저와 데스크톱 앱에서 프로젝트를 시작하는 방법은 두 가지입니다:

71 71 

72* **처음부터 시작**: Claude가 실행할 작업 흐름을 알고 있을 때 **새 프로젝트** 대화상자를 열고 이름을 지정합니다. [처음부터 새 프로젝트 시작하기](#start-a-new-project-from-scratch)에서 대화상자를 안내합니다.72* **처음부터 시작**: Claude가 실행할 작업 흐름을 알고 있을 때 **새 프로젝트** 대화상자를 열고 이름을 지정합니다. [처음부터 새 프로젝트 시작하기](#start-a-new-project-from-scratch)에서 대화상자를 안내합니다.

73* **이미 작업 중인 클라우드 세션에서**: 해당 세션의 사이드바 메뉴에서 **프로젝트로 이동**을 선택한 다음 **새 프로젝트로 계속하기**를 선택합니다. Claude가 세션이 수행 중이던 작업을 바탕으로 프로젝트 설정을 제안합니다. [기존 클라우드 세션에서 시작하기](#start-from-an-existing-cloud-session)를 참조하세요.73* **이미 작업을 진행 중인 클라우드 세션에서 시작하는 경우**: 해당 세션의 사이드바 메뉴에서 **Continue in project**를 선택한 다음 **Continue as new project**를 선택합니다. Claude가 세션에서 진행하던 작업을 바탕으로 프로젝트 설정을 제안합니다. [기존 클라우드 세션에서 시작하기](#start-from-an-existing-cloud-session)를 참조하세요.

74 74 

75어느 쪽이든 먼저 [필수 조건 확인하기](#check-the-prerequisites)를 확인하세요.75어느 쪽이든 먼저 [필수 조건 확인하기](#check-the-prerequisites)를 확인하세요.

76 76 


113 113 

114### 기존 세션에서 시작하기114### 기존 세션에서 시작하기

115 115 

116직접 시작한 클라우드 세션이 프로젝트에 속해야 하는 작업을 수행 중인 경우, 해당 세션의 사이드바 메뉴를 열고 **프로젝트로 이동**을 선택한 다음 하위 메뉴에서 선택합니다:116직접 시작한 클라우드 세션에서 프로젝트에 속해야 할 작업을 하고 있다면, 사이드바 메뉴를 열고 **Continue in project**를 선택한 다음 하위 메뉴에서 선택합니다:

117 117 

118* 세션에서 새 프로젝트를 만들려면 **새 프로젝트로 계속하기**를 선택합니다. 프로젝트가 열리고, Claude는 세션을 읽고 프로젝트 대화에 **설정 권장 사항**을 게시하여 확인하도록 합니다. 원본 세션은 세션 목록에 남아 있습니다. 턴 중간에 있었다면 계속 실행되므로 둘 다 동시에 작동하지 않으려면 직접 중지하세요.118* 세션에서 새 프로젝트를 만들려면 **새 프로젝트로 계속하기**를 선택합니다. 프로젝트가 열리고, Claude는 세션을 읽고 프로젝트 대화에 **설정 권장 사항**을 게시하여 확인하도록 합니다. 원본 세션은 세션 목록에 남아 있습니다. 턴 중간에 있었다면 계속 실행되므로 둘 다 동시에 작동하지 않으려면 직접 중지하세요.

119* 세션의 작업을 기존 프로젝트로 가져오려면 기존 프로젝트 중 하나를 선택합니다. 해당 프로젝트가 열리고, 사용자를 대신하여 보내진 메시지가 Claude에게 세션을 읽고 중단한 부분부터 계속하도록 요청합니다. 원본 세션은 세션 목록에 남아 있으며 변경되지 않습니다.119* 세션의 작업을 기존 프로젝트로 가져오려면 기존 프로젝트 중 하나를 선택합니다. 해당 프로젝트가 열리고, 사용자를 대신하여 보내진 메시지가 Claude에게 세션을 읽고 중단한 부분부터 계속하도록 요청합니다. 원본 세션은 세션 목록에 남아 있으며 변경되지 않습니다.


262 262 

263작업에 필요한 폴더가 있는 컴퓨터에서, 다음 두 가지 방법 중 하나로 원격 제어를 통해 사용 가능하게 합니다. 둘 다 해당 컴퓨터에 Claude Code v2.1.280 이상이 필요합니다.263작업에 필요한 폴더가 있는 컴퓨터에서, 다음 두 가지 방법 중 하나로 원격 제어를 통해 사용 가능하게 합니다. 둘 다 해당 컴퓨터에 Claude Code v2.1.280 이상이 필요합니다.

264 264 

265* **Claude 데스크톱 앱에서**: **설정 > Claude Code**를 열고, **휴대폰과 claude.ai에서 이 컴퓨터 사용**을 켜고, 해당 스위치 아래의 목록에 폴더를 추가합니다. 앱이 열려 있는 동안 스레드가 이 컴퓨터에서 실행될 수 있습니다.265* **Claude 데스크톱 앱에서**: **설정 > Code** 또는 **설정 > Claude Code**를 열고 **휴대폰과 claude.ai에서 이 컴퓨터 사용**을 켭니다. 해당 스위치 아래의 목록에 폴더를 추가합니다. 앱이 열려 있는 동안 스레드가 이 컴퓨터에서 실행될 수 있습니다.

266* **터미널에서**: 폴더에서 `claude remote-control`을 실행하고 실행 상태로 둡니다. git 저장소에서, 각 스레드에 폴더 자체 대신 자체 [worktree](https://code.claude.com/docs/ko/worktrees.md)를 제공하려면 `--spawn worktree`를 추가합니다.266* **터미널에서**: 폴더에서 `claude remote-control`을 실행하고 실행 상태로 둡니다. git 저장소에서, 각 스레드에 폴더 자체 대신 자체 [worktree](https://code.claude.com/docs/ko/worktrees.md)를 제공하려면 `--spawn worktree`를 추가합니다.

267 267 

268**2. 작업을 로컬로 작업 요청**268**2. 로컬로 작업으로 작업 요청**

269 269 

270프로젝트 대화에서, 메시지 상자 옆의 **+** 메뉴에서 **로컬로 작업**을 선택합니다. 이는 메시지에 **로컬** 태그를 지정하고, 수행할 작업을 작성합니다. 메시지에서 작업이 컴퓨터에서 실행되어야 한다고 말하는 것도 작동합니다.270프로젝트 대화에서, 메시지 상자 옆의 **+** 메뉴에서 **로컬로 작업**을 선택합니다. 이는 메시지에 **로컬** 태그를 지정하고, 수행할 작업을 작성합니다. 메시지에서 작업이 컴퓨터에서 실행되어야 한다고 말하는 것도 작동합니다.

271 271 


275 275 

276스레드는 [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)에서 실행되므로, Claude는 매번 묻지 않고 해당 폴더의 명령을 실행하고 파일을 편집합니다. 자동 모드를 사용할 수 없거나 해당 컴퓨터의 Claude Code에서 꺼져 있으면, 스레드는 자동 모드 없이 실행되고, 발생하는 모든 권한 프롬프트는 [승인을 기다리는 스레드 차단 해제](#unblock-a-thread-waiting-on-approval)에서 설명하는 대로 스레드에서 답변을 기다립니다.276스레드는 [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)에서 실행되므로, Claude는 매번 묻지 않고 해당 폴더의 명령을 실행하고 파일을 편집합니다. 자동 모드를 사용할 수 없거나 해당 컴퓨터의 Claude Code에서 꺼져 있으면, 스레드는 자동 모드 없이 실행되고, 발생하는 모든 권한 프롬프트는 [승인을 기다리는 스레드 차단 해제](#unblock-a-thread-waiting-on-approval)에서 설명하는 대로 스레드에서 답변을 기다립니다.

277 277 

278스레드가 실행되는 동안, 헤더의 노트북 아이콘은 컴퓨터가 연결되어 있는지 표시합니다. 클릭하여 스레드가 사용 중인 폴더를 확인하거나 연결을 끕니다. 해당 컴퓨터가 잠자기 상태일 때 스레드는 일시 중지되고, 데스크톱 앱 또는 `claude remote-control`이 종료되면 중지됩니다. [폴더와의 연결 끊김](#lost-contact-with-your-folder)은 다시 시작하는 것을 다룹니다. 데스크톱 앱에서, **설정 > Claude Code** 아래 **원격 제어를 위해 이 컴퓨터를 깨어 있게 유지**를 켜서 컴퓨터가 자체적으로 잠자기 상태로 가는 것을 방지합니다.278스레드가 실행되는 동안, 헤더의 노트북 아이콘은 컴퓨터가 연결되어 있는지 표시합니다. 클릭하여 스레드가 사용 중인 폴더를 확인하거나 연결을 끕니다. 해당 컴퓨터가 잠자기 상태일 때 스레드는 일시 중지되고, 데스크톱 앱 또는 `claude remote-control`이 종료되면 중지됩니다.

279 

280* **스레드를 다시 시작하려면**: [폴더와의 연결 끊김](#lost-contact-with-your-folder)을 참조합니다

281* **컴퓨터가 자체적으로 잠자기 상태로 가는 것을 방지하려면**: 데스크톱 앱의 **설정 > Code** 또는 **설정 > Claude Code**에서 **Remote Control을 위해 이 컴퓨터를 깨어 있게 유지**를 켭니다

279 282 

280계정에 대해 [**신뢰할 수 있는 장치 필요**](https://code.claude.com/docs/ko/remote-control.md#trusted-devices)가 켜져 있는 동안 프로젝트는 컴퓨터에서 스레드를 실행할 수 없습니다.283계정에 대해 [**신뢰할 수 있는 장치 필요**](https://code.claude.com/docs/ko/remote-control.md#trusted-devices)가 켜져 있는 동안 프로젝트는 컴퓨터에서 스레드를 실행할 수 없습니다.

281 284 


427여러 Claude Code 기능을 통해 한 번에 둘 이상의 세션이 작동할 수 있으므로, 병렬로 작업을 실행하는 것 자체가 프로젝트의 목적은 아닙니다. 프로젝트에서는 Claude가 세션을 시작하고 추적하며, 각 세션은 동일한 지시사항에서 시작합니다. 각 인접 기능이 프로젝트와 어떻게 연결되는지는 다음과 같습니다:430여러 Claude Code 기능을 통해 한 번에 둘 이상의 세션이 작동할 수 있으므로, 병렬로 작업을 실행하는 것 자체가 프로젝트의 목적은 아닙니다. 프로젝트에서는 Claude가 세션을 시작하고 추적하며, 각 세션은 동일한 지시사항에서 시작합니다. 각 인접 기능이 프로젝트와 어떻게 연결되는지는 다음과 같습니다:

428 431 

429* **Claude Tag**: [Claude Tag](https://claude.com/docs/claude-tag/overview)는 Team 및 Enterprise 플랜의 팀 Slack 채널에 있는 Claude입니다. 채널의 누구나 작업을 할당할 수 있고, 채널의 모든 사람이 이를 보고 조정할 수 있으며, 관리자가 해당 채널을 위해 설정한 연결을 사용합니다. 프로젝트는 개인 전용입니다: 사용자만 작업을 할당하거나 스레드를 볼 수 있으며, 자신의 GitHub 액세스 및 커넥터를 사용하고, Pro 및 Max에서 사용 가능합니다. [Claude Tag가 Cowork 및 Claude Code와 어떻게 다른지](https://claude.com/docs/claude-tag/concepts/how-it-works#how-claude-tag-differs-from-cowork-and-claude-code)에서 나란히 비교한 내용을 확인할 수 있습니다.432* **Claude Tag**: [Claude Tag](https://claude.com/docs/claude-tag/overview)는 Team 및 Enterprise 플랜의 팀 Slack 채널에 있는 Claude입니다. 채널의 누구나 작업을 할당할 수 있고, 채널의 모든 사람이 이를 보고 조정할 수 있으며, 관리자가 해당 채널을 위해 설정한 연결을 사용합니다. 프로젝트는 개인 전용입니다: 사용자만 작업을 할당하거나 스레드를 볼 수 있으며, 자신의 GitHub 액세스 및 커넥터를 사용하고, Pro 및 Max에서 사용 가능합니다. [Claude Tag가 Cowork 및 Claude Code와 어떻게 다른지](https://claude.com/docs/claude-tag/concepts/how-it-works#how-claude-tag-differs-from-cowork-and-claude-code)에서 나란히 비교한 내용을 확인할 수 있습니다.

430* **클라우드 세션**: 모든 스레드는 Claude에게 머신에서 실행하도록 요청하지 않는 한 [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md)입니다. 어느 쪽이든 Claude가 세션을 시작하고 추적합니다. 직접 시작한 클라우드 세션의 작업을 프로젝트로 가져올 수도 있습니다: 해당 세션의 사이드바 메뉴에서 [**프로젝트로 이동**](#start-from-an-existing-cloud-session)을 선택합니다.433* **클라우드 세션**: 모든 스레드는 Claude에게 머신에서 실행하도록 요청하지 않는 한 [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md)입니다. 어느 쪽이든 사용자 대신 Claude가 세션을 시작하고 추적합니다. 직접 시작한 클라우드 세션의 작업을 프로젝트로 가져올 수도 있습니다: 해당 세션의 사이드바 메뉴에서 [**프로젝트로 이동**](#start-from-an-existing-cloud-session)을 선택합니다.

431* **예약 작업**: 프로젝트에서 예약된 작업을 요청하면 Claude는 해당 프로젝트의 스레드로 실행되고 해당 프로젝트의 **예약 작업** 탭에 표시되는 [클라우드 예약 작업](https://code.claude.com/docs/ko/routines.md)을 생성합니다. 프로젝트 외부에서 생성한 예약 작업은 계속 독립적으로 작동합니다.434* **예약 작업**: 프로젝트에서 예약된 작업을 요청하면 Claude는 해당 프로젝트의 스레드로 실행되고 해당 프로젝트의 **예약 작업** 탭에 표시되는 [클라우드 예약 작업](https://code.claude.com/docs/ko/routines.md)을 생성합니다. 프로젝트 외부에서 생성한 예약 작업은 계속 독립적으로 작동합니다.

432* **원격 제어**: [원격 제어](https://code.claude.com/docs/ko/remote-control.md)는 claude.ai를 머신에서 실행 중인 Claude Code 세션에 연결합니다. 프로젝트에서 Claude에게 컴퓨터에서 스레드를 실행하도록 요청하면, 프로젝트는 [원격 제어를 사용하여 이를 수행합니다](#run-a-thread-on-your-own-computer).435* **원격 제어**: [원격 제어](https://code.claude.com/docs/ko/remote-control.md)는 claude.ai를 머신에서 실행 중인 Claude Code 세션에 연결합니다. 프로젝트에서 Claude에게 컴퓨터에서 스레드를 실행하도록 요청하면, 프로젝트는 [원격 제어를 사용하여 이를 수행합니다](#run-a-thread-on-your-own-computer).

433* **로컬 세션 및 에이전트 뷰**: 터미널, IDE 또는 데스크톱 앱의 로컬 환경에서 직접 시작한 세션은 프로젝트 외부에 남아 있지만, [해당 세션의 작업을 프로젝트로 가져올](#start-from-an-existing-cloud-session) 수 있습니다. [에이전트 뷰](https://code.claude.com/docs/ko/agent-view.md)는 여러 로컬 세션을 나란히 추적하기 위한 화면이며, 이 경우에도 사용자가 각 세션을 직접 시작하고 작업을 할당합니다.436* **로컬 세션 및 에이전트 뷰**: 터미널, IDE 또는 데스크톱 앱의 로컬 환경에서 직접 시작한 세션은 프로젝트 외부에 남아 있지만, [해당 세션의 작업을 프로젝트로 가져올](#start-from-an-existing-cloud-session) 수 있습니다. [에이전트 뷰](https://code.claude.com/docs/ko/agent-view.md)는 여러 로컬 세션을 나란히 추적하기 위한 화면이며, 이 경우에도 사용자가 각 세션을 직접 시작하고 작업을 할당합니다.


445* 자신의 머신에서 직접 시작한 세션을 프로젝트에 추가할 수는 없지만, [해당 세션의 작업을 프로젝트로 가져올 수는](#start-from-an-existing-cloud-session) 있습니다. 프로젝트는 [Remote Control을 통해 머신에서 스레드를 실행](#run-a-thread-on-your-own-computer)하는 방식으로 머신에 도달하며, 해당 섹션에서 필요한 사항을 나열합니다.448* 자신의 머신에서 직접 시작한 세션을 프로젝트에 추가할 수는 없지만, [해당 세션의 작업을 프로젝트로 가져올 수는](#start-from-an-existing-cloud-session) 있습니다. 프로젝트는 [Remote Control을 통해 머신에서 스레드를 실행](#run-a-thread-on-your-own-computer)하는 방식으로 머신에 도달하며, 해당 섹션에서 필요한 사항을 나열합니다.

446* 클라우드 스레드의 샌드박스는 차례 사이에 일시 중지되고 스레드가 계속될 때 다시 시작됩니다. 샌드박스를 다시 시작할 수 없으면 스레드는 새 복제에서 계속되므로 커밋되지 않은 변경 사항이 손실될 수 있습니다. 긴 작업에서 Claude에게 진행 중인 작업을 커밋하고 푸시하도록 요청합니다.449* 클라우드 스레드의 샌드박스는 차례 사이에 일시 중지되고 스레드가 계속될 때 다시 시작됩니다. 샌드박스를 다시 시작할 수 없으면 스레드는 새 복제에서 계속되므로 커밋되지 않은 변경 사항이 손실될 수 있습니다. 긴 작업에서 Claude에게 진행 중인 작업을 커밋하고 푸시하도록 요청합니다.

447* 프로젝트는 한 사용자에게 속합니다. 프로젝트 또는 스레드를 다른 사용자와 공유할 수 없으며, 스레드 기록에는 다른 클라우드 세션이 가진 공유 옵션이 없습니다. 베타 중에는 프로젝트에 대한 조직 수준 제어가 없습니다.450* 프로젝트는 한 사용자에게 속합니다. 프로젝트 또는 스레드를 다른 사용자와 공유할 수 없으며, 스레드 기록에는 다른 클라우드 세션이 가진 공유 옵션이 없습니다. 베타 중에는 프로젝트에 대한 조직 수준 제어가 없습니다.

448* 스레드는 시작한 하나의 프로젝트에 속합니다. 스레드를 다른 프로젝트로 이동하거나 복사할 수 없으며, 독립적으로 이동할 수 없습니다. [**프로젝트로 이동**](#start-from-an-existing-cloud-session)은 다른 방향으로만 이동합니다: 클라우드 세션의 작업을 프로젝트로 가져옵니다. 두 프로젝트를 하나로 병합할 수 없습니다.451* 스레드는 해당 스레드를 시작한 하나의 프로젝트에 속합니다. 스레드를 다른 프로젝트로 이동하거나 복사할 수 없으며, 프로젝트 밖으로 옮겨 독립적으로 두는 것도 불가능합니다. [**프로젝트에서 계속하기**](#start-from-an-existing-cloud-session)는 반대 방향으로만 작동하며, 클라우드 세션의 작업을 프로젝트로 가져옵니다. 두 프로젝트를 하나로 병합할 수는 없습니다.

449 452 

450## 문제 해결453## 문제 해결

451 454 

452**새 프로젝트** 대화상자의 GitHub 설정 프롬프트에 대해서는 [GitHub 액세스 설정](#set-up-github-access)을 참조하십시오.455**New project** 대화 상자의 GitHub 설정 프롬프트에 대해서는 [GitHub 액세스 설정](#set-up-github-access)을 참조하세요.

453 456 

454### 스레드가 멈춘 것처럼 보임457### 스레드가 멈춘 것처럼 보이는 경우

455 458 

456Claude는 스레드가 수행하는 각 단계를 게시하지 않으므로, 프로젝트 대화에서 실행 중이지만 새 메시지가 없는 것으로 표시되는 스레드는 일반적으로 여전히 작동 중입니다. 새 클라우드 스레드는 Claude가 시작하기 전에 [클라우드 환경](https://code.claude.com/docs/ko/cloud-environments.md)을 프로비저닝하므로, 첫 번째 업데이트에는 시간이 걸립니다. 스레드를 열어 트랜스크립트를 읽으십시오. 스레드가 권한 프롬프트를 기다리고 있으면 거기서 답변하십시오.459Claude는 스레드가 수행하는 각 단계를 게시하지 않으므로, 실행 중으로 표시되지만 프로젝트 대화에 새 메시지가 없는 스레드는 대개 아직 작업 중입니다. 새 클라우드 스레드는 Claude가 시작하기 전에 [클라우드 환경](https://code.claude.com/docs/ko/cloud-environments.md)도 프로비저닝하므로 첫 업데이트까지 잠시 시간이 걸립니다. 스레드를 열어 트랜스크립트를 확인합니다. 스레드가 권한 프롬프트를 기다리고 있다면 그곳에서 응답합니다.

457 460 

458### 스레드가 묻지 않고 추측하거나 정체됨461### 스레드가 질문하는 대신 추측하거나 멈춘 경우

459 462 

460여러 스레드가 잘못된 것을 가정하거나, 누락된 액세스를 해결하거나, "차단됨"으로 중지된 경우, 원인은 일반적으로 각 작업의 문제가 아니라 프로젝트 설정의 동일한 간격입니다. 무엇을 수정하기 전에 어떤 스레드가 건전한지 정렬하십시오:463여러 스레드가 잘못된 가정을 하거나, 누락된 액세스를 우회하거나, "blocked" 상태로 멈춘 채 돌아온다면, 원인은 대개 각 작업의 문제라기보다 프로젝트 설정에 있는 동일한 공백입니다. 무엇이든 수정하기 전에 어떤 스레드가 정상인지 먼저 가려냅니다.

461 464 

4621. 대화에서 Claude에게 묻기: "모든 열린 스레드에 대해, 당신에게 무엇을 하도록 요청했는지, 무엇을 가정했거나 도달할 수 없었는지, 무엇을 기다리고 있는지 나열하십시오." Claude는 각 스레드를 읽고 대화에서 답변합니다.4651. 대화에서 Claude에게 다음과 같이 요청합니다. "열려 있는 모든 스레드에 대해, 각 스레드에 무엇을 하라고 요청했는지, 스레드가 무엇을 가정했거나 무엇에 접근하지 못했는지, 그리고 무엇을 기다리고 있는지 나열해 줘." Claude는 각 스레드를 읽고 대화에서 답변합니다.

4632. 잘못된 가정에서 시작된 스레드의 경우, **개요**에서 스레드를 열고 메뉴에서 해결됨으로 표시하거나, 메시지 상자에서 대신 수행할 작업을 알려주십시오. 해당 분기와 모든 풀 요청은 삭제할 때까지 GitHub에 남아 있습니다.4662. 잘못된 가정에서 시작한 스레드는 **Overview**에서 해당 스레드를 열고 메뉴에서 해결됨으로 표시하거나, 메시지 상자에서 대신 무엇을 해야 하는지 알려 줍니다. 해당 스레드의 브랜치와 풀 리퀘스트는 삭제하기 전까지 GitHub에 남아 있습니다.

4643. [프로젝트 지침](#give-a-project-standing-context) 또는 [환경](#choose-an-environment-for-threads)에서 간격을 한 번 수정한 후, 나머지 작업을 새 스레드로 다시 보내기 전에 한 스레드를 보내십시오.4673. [프로젝트 지침](#give-a-project-standing-context) 또는 [환경](#choose-an-environment-for-threads)에서 공백을 한 번에 수정한 다음, 나머지 작업을 새 스레드로 다시 보내기 전에 스레드 하나를 먼저 보내 봅니다.

465 468 

466### Claude가 응답하지 않음469### Claude hasn't responded

467 470 

468프로젝트 대화는 Claude가 실행 중이지만 해당 응답이 프로젝트에 도달하지 않을 때 "Claude가 응답하지 않음" 배너를 표시합니다. 배너에서 **Claude 다시 시작**을 클릭하거나, **프로젝트 설정 > 일반**으로 이동하여 **Claude 다시 시작** 행에서 **다시 시작**을 클릭하십시오. Claude는 대화에 다시 연결됩니다. 작성 중이던 모든 응답은 손실되며, 스레드는 영향을 받지 않습니다.471Claude가 실행 중이지만 응답이 프로젝트에 전달되지 않으면 프로젝트 대화에 "Claude hasn't responded" 배너가 표시됩니다. 배너에서 **Restart Claude**를 클릭하거나, **Project settings > General**로 이동하여 **Restart Claude** 행에서 **Restart**를 클릭합니다. Claude가 대화에 다시 연결됩니다. 작성 중이던 응답은 손실되며, 스레드는 영향을 받지 않습니다.

469 472 

470### 저장소 액세스 오류473### 저장소 액세스 오류

471 474 

472세 가지 메시지는 스레드 또는 프로젝트가 해당 저장소 중 하나에 도달할 수 없음을 의미합니다. 프로젝트의 클라우드 스레드는 다른 클라우드 세션이 동일한 저장소를 문제 없이 복제하는 경우에도 [GitHub 필수 조건](#check-the-prerequisites)이 필요합니다.475다음 세 가지 메시지는 스레드나 프로젝트가 저장소 중 하나에 접근할 수 없다는 의미입니다. 다른 클라우드 세션에서 같은 저장소를 문제없이 클론하더라도, 프로젝트의 클라우드 스레드에는 [GitHub 사전 요구 사항](#check-the-prerequisites)이 필요합니다.

476 

477* **"Couldn't start the session — Claude doesn't have GitHub access to this project's repository"**: 스레드가 시작되기 전에 보고되며, Claude GitHub App이 해당 저장소에 설치되어 있지 않거나, 일시 중지되었거나, 연결한 GitHub 계정과 연동되어 있지 않을 때 발생합니다.

478* **"Unable to access your repository"**: 스레드의 클론이 실패할 때 스레드가 보고합니다. GitHub가 클론을 거부했거나, 프로젝트에 지정된 이름으로 저장소를 찾을 수 없거나, 스레드가 시작하도록 요청받은 브랜치가 존재하지 않는 경우입니다.

479* **"Claude can't access" 저장소**: **New project** 대화 상자 또는 **Project settings**에서 저장소를 저장할 때 표시됩니다. 메시지 뒤에는 설치 링크와 재연결 링크가 이어집니다. Claude GitHub App이 해당 저장소에 없으면 설치 링크를 사용하고, 있다면 재연결 링크를 사용합니다. GitHub App은 Claude에 연결한 계정과 연동되지 않은 상태로 GitHub에 설치될 수 있기 때문입니다. 메시지에 GitHub App이 일시 중지되었거나 이 저장소를 포함하지 않는다고 표시되면, 링크를 따라 GitHub로 이동하여 수정합니다.

473 480 

474* **"세션을 시작할 수 없음 — Claude가 이 프로젝트의 저장소에 대한 GitHub 액세스 권한이 없음"**, 스레드가 시작되기 전에 보고됨. Claude GitHub 앱이 해당 저장소에 설치되지 않았거나, 일시 중단되었거나, 연결한 GitHub 계정에 연결되지 않았을 때입니다.481이러한 오류를 수정하려면 메시지에 표시된 버튼(예: **Install GitHub App** 또는 **Select repositories on GitHub**)을 클릭한 다음 **Check again**을 클릭합니다. 앱을 승인하지 않은 소유자나 Claude를 제외하는 IP 허용 목록처럼 GitHub 조직 측에서 차단된 경우에는 메시지에 대신 **See how to fix** 링크가 표시됩니다. 버튼이 없다면 [GitHub 액세스 설정](#set-up-github-access)을 따른 다음 메시지를 다시 보내 재시도합니다.

475* **"저장소에 액세스할 수 없음"**, 스레드가 복제에 실패할 때 보고됨: GitHub가 복제를 거부했거나, 저장소를 프로젝트가 가진 이름으로 찾을 수 없거나, 스레드가 시작하도록 요청받은 분기가 존재하지 않습니다.

476* **"Claude가 저장소에 액세스할 수 없음"**, **새 프로젝트** 대화상자 또는 **프로젝트 설정**에서 저장소를 저장할 때 표시됩니다. 메시지는 설치 링크와 다시 연결 링크로 계속됩니다. Claude GitHub 앱이 해당 저장소에 없으면 설치 링크를 사용하고, 있으면 다시 연결 링크를 사용하십시오. GitHub 앱은 GitHub에 설치될 수 있지만 Claude에 연결한 계정에 연결되지 않을 수 있기 때문입니다. 메시지에서 GitHub 앱이 일시 중단되었거나 이 저장소를 포함하지 않는다고 하면, 해당 링크를 따라 GitHub에서 수정하십시오.

477 482 

478이들을 수정하려면 메시지가 제공하는 버튼(예: **GitHub 앱 설치** 또는 **GitHub에서 저장소 선택**)을 클릭한 후 **다시 확인**을 클릭하십시오. 블록이 GitHub 조직 측에 있는 경우(예: 앱을 승인하지 않은 소유자 또는 Claude를 제외하는 IP 허용 목록), 메시지는 대신 **수정 방법 보기** 링크를 표시합니다. 버튼이 없으면 [GitHub 액세스 설정](#set-up-github-access)을 따르고 다시 시도하려면 다른 메시지를 보내십시오.483### 스레드가 사용 한도에 도달한 경우

479 484 

480### 스레드가 사용 한도에 도달함485스레드나 프로젝트 대화가 플랜의 5시간 한도 또는 주간 한도에 도달하면, 자동으로 계속 재시도하다가 한도가 재설정되면 작업을 이어 갑니다. 예약 작업으로 시작된 스레드는 기다리지 않습니다. 해당 턴은 한도 오류와 함께 중지되며, 한도가 재설정된 후 메시지를 보내야 합니다.

481 486 

482스레드 또는 프로젝트 대화가 플랜의 5시간 한도 또는 주간 한도에 도달하면, 자동으로 재시도를 계속하고 한도가 재설정될 때 계속됩니다. 예약 작업이 시작한 스레드는 기다리지 않습니다. 해당 턴은 한도 오류로 중지되며, 한도가 재설정된 후 해당 스레드에 메시지를 보내야 합니다.487스레드가 대기하는 동안 "Claude is still retrying and will continue automatically."라는 문구와 함께 **Service is busy**가 표시됩니다. 작업을 계속하기 위해 별도로 조치할 필요는 없습니다. 다음 사용 기간을 소비하지 않으려면 스레드에서 **Stop**을 클릭하거나, [프로젝트를 일시 중지](#pause-archive-or-delete-a-project)하여 모든 스레드를 보류합니다. [사용 한도 오류](https://code.claude.com/docs/ko/errors.md#youve-hit-your-session-limit)에서 한도와 재설정 시점을 설명합니다.

483 488 

484기다리는 동안 스레드는 **서비스가 바쁨**을 표시하며 "Claude가 여전히 재시도 중이며 자동으로 계속됩니다."라고 표시됩니다. 작업이 계속되려면 아무것도 할 필요가 없습니다. 다음 사용 기간을 사용하지 않으려면 스레드에서 **중지**를 클릭하거나, [프로젝트를 일시 중지](#pause-archive-or-delete-a-project)하여 모든 스레드를 보류하십시오. [사용 한도 오류](https://code.claude.com/docs/ko/errors.md#youve-hit-your-session-limit)는 한도와 재설정 시기를 설명합니다.489### Additional usage credits are required

485 490 

486### 추가 사용 크레딧이 필요함491스레드나 프로젝트 대화가 플랜에 포함되지 않은 모델이나 컨텍스트 크기에 대한 요청처럼 사용량 크레딧이 있어야만 플랜에서 지원되는 요청을 보냈지만, 계정에 사용량 크레딧이 켜져 있지 않은 경우입니다. [구독에 사용량 크레딧 추가](https://code.claude.com/docs/ko/costs.md#add-usage-credits-to-your-subscription)에서 각 플랜별로 누가 크레딧을 켜거나 구매할 수 있는지 설명합니다. 크레딧을 사용할 수 있게 되면 메시지를 다시 보내 재시도합니다.

487 492 

488스레드 또는 프로젝트 대화가 계획이 사용 크레딧으로만 포함하는 요청(예: 계획이 포함하지 않는 모델 또는 컨텍스트 크기에 대한 요청)을 했으며, 사용 크레딧이 계정에 대해 켜져 있지 않습니다. [구독에 사용 크레딧 추가](https://code.claude.com/docs/ko/costs.md#add-usage-credits-to-your-subscription)는 각 계획에서 누가 켜거나 구매할 수 있는지를 다룹니다. 크레딧을 사용할 수 있게 되면 다시 시도하려면 다른 메시지를 보내십시오.493### Lost contact with your folder

489 494 

490### 폴더와의 연결 손실495컴퓨터에서 실행 중인 스레드는 해당 컴퓨터의 Claude Code 세션이 응답을 멈추면 이 메시지를 표시합니다. 대개 컴퓨터가 절전 모드로 전환되었거나 데스크톱 앱 또는 `claude remote-control`이 종료된 경우입니다. 컴퓨터를 깨웁니다. 데스크톱 앱이나 `claude remote-control`이 더 이상 실행 중이 아니라면 다시 시작합니다.

491 496 

492컴퓨터에서 실행 중인 스레드는 Claude Code 세션이 응답을 중지할 때 이를 표시합니다. 일반적으로 컴퓨터가 절전 모드로 전환되었거나 데스크톱 앱 또는 `claude remote-control`이 종료되었기 때문입니다. 컴퓨터를 깨우고, 데스크톱 앱 또는 `claude remote-control`이 더 이상 실행 중이 아니면 다시 시작하십시오: 앱을 다시 열고 **설정 > Claude Code** 아래에서 **휴대폰 및 claude.ai에서 이 컴퓨터 사용**이 여전히 켜져 있는지 확인하거나, 같은 폴더에서 `claude remote-control`을 다시 실행하십시오.497* **데스크톱 앱**: 앱을 다시 열고 **Settings > Code** 또는 **Settings > Claude Code**에서 **Use this computer from your phone and claude.ai**가 여전히 켜져 있는지 확인합니다

498* **터미널**: 같은 폴더에서 `claude remote-control`을 다시 실행합니다

493 499 

494### 기타 메시지500### 기타 메시지

495 501 

496이 메시지들은 자신의 원인을 명시합니다. 표는 각각에 대한 다음 단계를 제공합니다.502다음 메시지들은 그 자체로 원인을 알려 줍니다. 표에는 각 메시지에 대한 다음 단계가 나와 있습니다.

497 503 

498| 메시지 | 수행할 작업 |504| 메시지 | 조치 방법 |

499| :- | :- |505| :- | :- |

500| "저장소에 연결할 수 없음"과 함께 "Claude가 저장소를 가져오기 위해 GitHub에 도달할 수 없음" | 잠시 기다린 후 다시 시도하려면 다른 메시지를 보내십시오 |506| "Unable to connect to repository"와 "Claude couldn't reach GitHub to fetch your repository" | 잠시 기다린 다음 메시지를 다시 보내 재시도합니다 |

501| "저장소에 연결할 수 없음"과 함께 "Claude가 저장소 또는 환경에 액세스할 수 없음" | GitHub 계정은 저장소에 대한 푸시 액세스가 필요하며, 환경은 여전히 존재해야 합니다. **프로젝트 설정 > 환경**에서 둘 다 확인한 후 다시 시도하십시오 |507| "Unable to connect to repository"와 "Claude couldn't access your repository or environment" | GitHub 계정에 저장소에 대한 푸시 권한이 있어야 하며, 환경이 여전히 존재해야 합니다. **Project settings > Environment**에서 두 가지를 모두 확인한 다음 재시도합니다 |

502| "설정 제안을 표시할 수 없음" | 열려 있는 앱이 Claude가 보낸 **설정 권장 사항**보다 오래되었습니다. 페이지를 새로 고치거나 데스크톱 앱을 다시 시작하거나, Claude에게 설정을 다시 제안하도록 요청하십시오 |508| "Couldn't show the setup proposal" | 열려 있는 앱이 Claude가 보낸 **Setup recommendations**보다 오래된 버전입니다. 페이지를 새로 고치거나 데스크톱 앱을 다시 시작하거나, Claude에게 설정을 다시 제안하도록 요청합니다 |

503| "프로젝트의 환경이 제거됨" | **프로젝트 설정 > 환경**에서 다른 환경을 선택하십시오. 변경 사항은 새 스레드에 적용됩니다 |509| "The project's environment was removed" | **Project settings > Environment**에서 다른 환경을 선택합니다. 변경 사항은 새 스레드에 적용됩니다 |

504| "설정 스크립트 실패" | 오류에서 **설정 스크립트 편집**을 클릭하고, 환경에서 스크립트를 수정한 후, 다른 메시지를 보내십시오. [설정 스크립트 실패](https://code.claude.com/docs/ko/web-quickstart.md#setup-script-failed)는 일반적인 원인을 나열합니다 |510| "Setup script failed" | 오류에서 **Edit setup script**를 클릭하고 환경의 스크립트를 수정한 다음 메시지를 다시 보냅니다. [Setup script failed](https://code.claude.com/docs/ko/web-quickstart.md#setup-script-failed)에 일반적인 원인이 나와 있습니다 |

505| "Claude가 이 차례에 컨텍스트를 모두 사용함" | 스레드가 컨텍스트 윈도우를 채웠습니다. 메시지에서 스레드가 새 세션에서 계속된다고 하면, 자동으로 계속됩니다. 그렇지 않으면 프로젝트 대화에서 Claude에게 남은 작업에 대해 새 스레드를 시작하도록 요청하십시오 |511| "Claude ran out of context on this turn" | 스레드가 컨텍스트 윈도우를 가득 채웠습니다. 메시지에 스레드가 새 세션에서 계속된다고 표시되면 자동으로 이어 갑니다. 그렇지 않으면 프로젝트 대화에서 Claude에게 남은 작업을 위한 새 스레드를 시작하도록 요청합니다 |

506| "폴더에서 시작할 수 없음" 뒤에 폴더 이름이 옴 | 스레드가 컴퓨터에서 실행되도록 허용했지만, 세션을 거기서 시작할 수 없었습니다. 메시지 아래의 줄이 이유를 제시할 때, 그것을 수정한 후 Claude에게 작업을 다시 실행하도록 요청하십시오 |512| "Couldn't start in" 뒤에 폴더 이름 | 스레드가 컴퓨터에서 실행되도록 허용했지만 그곳에서 세션을 시작할 수 없었습니다. 메시지 아래 줄에 이유가 표시되면 해당 문제를 수정한 다음 Claude에게 작업을 다시 실행하도록 요청합니다 |

507| "Claude가 기기에서 만료됨" | 스레드를 실행하도록 선택한 컴퓨터에 v2.1.280보다 오래된 Claude Code 버전이 있습니다. 거기서 Claude Code를 업데이트하거나, 폴더를 연결하는 것이 데스크톱 앱이면 데스크톱 앱을 업데이트한 후, Claude에게 작업을 다시 실행하도록 요청하십시오 |513| "Claude is out of date on your device" | 스레드를 실행하도록 선택한 컴퓨터의 Claude Code 버전이 v2.1.280보다 오래되었습니다. 해당 컴퓨터에서 Claude Code를 업데이트하거나, 데스크톱 앱이 폴더를 연결하는 경우 데스크톱 앱을 업데이트한 다음 Claude에게 작업을 다시 실행하도록 요청합니다 |

508| "차례 한도에 도달" | 스레드가 [`CLAUDE_CODE_MAX_TURNS`](https://code.claude.com/docs/ko/env-vars)가 설정한 에이전트 차례의 상한에 도달했습니다. 다시 시도하려면 다른 메시지를 보내거나, 설정된 위치에서 해당 변수를 높이거나 제거하십시오 |514| "Reached the turn limit" | 스레드가 [`CLAUDE_CODE_MAX_TURNS`](https://code.claude.com/docs/ko/env-vars)로 설정된 에이전트 턴 상한에 도달했습니다. 계속하려면 메시지를 다시 보내거나, 해당 변수가 설정된 곳에서 값을 높이거나 제거합니다 |

509 515 

510## 관련 리소스516## 관련 리소스

511 517 

Details

71* `/code-review`가 리뷰를 [분기된 서브에이전트](https://code.claude.com/docs/ko/skills.md#run-skills-in-a-subagent)로 실행하는 터미널 세션71* `/code-review`가 리뷰를 [분기된 서브에이전트](https://code.claude.com/docs/ko/skills.md#run-skills-in-a-subagent)로 실행하는 터미널 세션

72* 텍스트 또는 JSON 출력을 사용하는 `-p` 실행72* 텍스트 또는 JSON 출력을 사용하는 `-p` 실행

73 73 

74[데스크톱 앱](https://code.claude.com/docs/ko/desktop.md#review-your-code)처럼 발견 사항 목록을 요청하는 호스트 애플리케이션에서는 Claude가 대신 [`ReportFindings` 도구](https://code.claude.com/docs/ko/tools-reference)를 통해 리뷰의 발견 사항을 보고합니다. 보고서는 발견 사항 목록으로 표시되며, 각 항목에는 파일 위치, 한 문장 요약, 그리고 발견 사항에 카테고리 태그가 있는 경우 `correctness` 같은 카테고리 태그가 표시됩니다. 호스트 요청은 모든 effort 수준에 적용되며 Claude Code v2.1.218 이상이 필요합니다.74[데스크톱 앱](https://code.claude.com/docs/ko/desktop.md#review-your-code)처럼 발견 사항 목록을 요청하는 호스트 애플리케이션에서는 Claude가 대신 [`ReportFindings` 도구](https://code.claude.com/docs/ko/tools-reference)를 통해 리뷰의 발견 사항을 보고합니다. 보고서는 발견 사항 목록으로 표시되며, 각 항목에는 파일 위치, 한 문장 요약, 그리고 발견 사항에 카테고리 태그가 있는 경우 `correctness` 같은 카테고리 태그가 표시됩니다. 호스트 요청은 모든 effort 수준에 적용됩니다.

75 75 

76세션 후반에 Claude가 보고된 발견 사항을 수정하면 이를 다시 보고합니다. 그러면 Claude Code는 업데이트된 발견 사항 목록에서 각 발견 사항을 수정됨, 건너뜀 또는 변경 불필요로 표시합니다.76세션 후반에 Claude가 보고된 발견 사항을 수정하면 이를 다시 보고합니다. 그러면 Claude Code는 업데이트된 발견 사항 목록에서 각 발견 사항을 수정됨, 건너뜀 또는 변경 불필요로 표시합니다.

77 77 


104effort 수준과 플래그 뒤에서 Claude Code는 줄의 나머지 부분을 리뷰 대상으로 읽습니다. `ultra` 인수는 이 해석 방식을 변경합니다.104effort 수준과 플래그 뒤에서 Claude Code는 줄의 나머지 부분을 리뷰 대상으로 읽습니다. `ultra` 인수는 이 해석 방식을 변경합니다.

105 105 

106* **`ultra` 사용 시**: Claude Code는 단일 단어를 기본 브랜치 또는 PR 번호로 읽습니다. 브랜치나 PR을 지정하지 않는 더 긴 텍스트는 [리뷰에 첨부되는 메모](https://code.claude.com/docs/ko/ultrareview.md#pass-a-request-in-plain-words)가 됩니다. `/code-review ultra check my auth changes`는 현재 브랜치를 리뷰하며, Claude는 발견 사항을 메모와 연관 지어 설명합니다.106* **`ultra` 사용 시**: Claude Code는 단일 단어를 기본 브랜치 또는 PR 번호로 읽습니다. 브랜치나 PR을 지정하지 않는 더 긴 텍스트는 [리뷰에 첨부되는 메모](https://code.claude.com/docs/ko/ultrareview.md#pass-a-request-in-plain-words)가 됩니다. `/code-review ultra check my auth changes`는 현재 브랜치를 리뷰하며, Claude는 발견 사항을 메모와 연관 지어 설명합니다.

107* **`ultra` 미사용 시**: 남은 모든 내용은 다른 명령 이름으로 시작하더라도 리뷰 대상이 됩니다. `/code-review /fix-issue 123`은 `/fix-issue`를 두 번째 [스택 스킬](https://code.claude.com/docs/ko/skills.md#stack-several-skills-in-one-message)로 로드하는 대신 `/fix-issue 123`을 대상 텍스트로 하여 리뷰합니다. v2.1.218 이전에는 `/code-review` 뒤에 스택된 명령이 자체 스킬로 확장되었습니다.107* **`ultra` 미사용 시**: 남은 모든 내용은 다른 명령 이름으로 시작하더라도 리뷰 대상이 됩니다. `/code-review /fix-issue 123`은 `/fix-issue`를 두 번째 [스택 스킬](https://code.claude.com/docs/ko/skills.md#stack-several-skills-in-one-message)로 로드하는 대신 `/fix-issue 123`을 대상 텍스트로 하여 리뷰합니다.

108 108 

109## 포그라운드에서 실행109## 포그라운드에서 실행

110 110 


114* [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](https://code.claude.com/docs/ko/env-vars)를 `1`로 설정합니다. 이 설정은 다른 백그라운드 작업 기능도 끕니다114* [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](https://code.claude.com/docs/ko/env-vars)를 `1`로 설정합니다. 이 설정은 다른 백그라운드 작업 기능도 끕니다

115* 이전 리뷰가 아직 진행 중일 때 `/code-review`를 다시 실행합니다115* 이전 리뷰가 아직 진행 중일 때 `/code-review`를 다시 실행합니다

116 116 

117v2.1.218 이전에는 리뷰가 대화 내부에서 실행되었습니다.

118 

119## Claude가 리뷰를 시작하도록 하기117## Claude가 리뷰를 시작하도록 하기

120 118 

121Claude는 사용자가 명령을 입력하지 않아도 스스로 `/code-review`를 시작할 수 있습니다.119Claude는 사용자가 명령을 입력하지 않아도 스스로 `/code-review`를 시작할 수 있습니다.

commands.md +3 −3

Details

37* **[스킬](https://code.claude.com/docs/ko/skills.md#bundled-skills)**: 번들 스킬입니다. 사용자가 직접 작성하는 스킬과 같은 방식으로 작동하며, Claude에게 전달되는 프롬프트입니다.37* **[스킬](https://code.claude.com/docs/ko/skills.md#bundled-skills)**: 번들 스킬입니다. 사용자가 직접 작성하는 스킬과 같은 방식으로 작동하며, Claude에게 전달되는 프롬프트입니다.

38 * `/verify`는 사용자가 호출할 때만 실행됩니다. v2.1.215 이전에는 Claude가 스스로 `/verify`를 실행할 수도 있었습니다.38 * `/verify`는 사용자가 호출할 때만 실행됩니다. v2.1.215 이전에는 Claude가 스스로 `/verify`를 실행할 수도 있었습니다.

39* **[워크플로](https://code.claude.com/docs/ko/workflows.md#bundled-workflows)**: 작업을 여러 서브에이전트에 분산하여 백그라운드에서 실행하는 번들 [동적 워크플로](https://code.claude.com/docs/ko/workflows.md)입니다.39* **[워크플로](https://code.claude.com/docs/ko/workflows.md#bundled-workflows)**: 작업을 여러 서브에이전트에 분산하여 백그라운드에서 실행하는 번들 [동적 워크플로](https://code.claude.com/docs/ko/workflows.md)입니다.

40 * `/deep-research`는 사용자가 호출할 때만 실행됩니다. v2.1.218 이전에는 Claude가 스스로 시작할 수도 있었습니다.40 * `/deep-research`는 사용자가 호출할 때만 실행됩니다.

41 41 

42직접 명령을 추가하려면 [스킬](https://code.claude.com/docs/ko/skills.md)을 참조하세요.42직접 명령을 추가하려면 [스킬](https://code.claude.com/docs/ko/skills.md)을 참조하세요.

43 43 


54| `/agents` | Claude에게 [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md)를 생성하거나 관리하도록 요청하거나, `.claude/agents/` 또는 `~/.claude/agents/`를 직접 편집하라는 안내를 출력합니다. v2.1.197 이하에서는 서브에이전트 구성을 생성하고 관리하는 대화형 인터페이스가 열립니다 |54| `/agents` | Claude에게 [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md)를 생성하거나 관리하도록 요청하거나, `.claude/agents/` 또는 `~/.claude/agents/`를 직접 편집하라는 안내를 출력합니다. v2.1.197 이하에서는 서브에이전트 구성을 생성하고 관리하는 대화형 인터페이스가 열립니다 |

55| `/artifact-capabilities` | **[스킬](https://code.claude.com/docs/ko/skills.md#bundled-skills).** 게시된 [아티팩트](https://code.claude.com/docs/ko/artifacts.md)가 사용할 수 있는 런타임 기능(예: [커넥터 호출](https://code.claude.com/docs/ko/artifacts.md#pull-live-data-with-mcp-connectors), [파일 다운로드 제공](https://code.claude.com/docs/ko/artifacts.md#offer-a-file-download))에 대한 참조 자료를 로드하며, 여기에는 사용자 계정에서 사용 가능한 기능도 포함됩니다. Claude는 일반적으로 이러한 기능을 사용하는 페이지를 만들기 전에 스스로 이 자료를 로드합니다. [아티팩트](https://code.claude.com/docs/ko/artifacts.md#availability)를 사용할 수 있는 곳에서 사용 가능합니다 |55| `/artifact-capabilities` | **[스킬](https://code.claude.com/docs/ko/skills.md#bundled-skills).** 게시된 [아티팩트](https://code.claude.com/docs/ko/artifacts.md)가 사용할 수 있는 런타임 기능(예: [커넥터 호출](https://code.claude.com/docs/ko/artifacts.md#pull-live-data-with-mcp-connectors), [파일 다운로드 제공](https://code.claude.com/docs/ko/artifacts.md#offer-a-file-download))에 대한 참조 자료를 로드하며, 여기에는 사용자 계정에서 사용 가능한 기능도 포함됩니다. Claude는 일반적으로 이러한 기능을 사용하는 페이지를 만들기 전에 스스로 이 자료를 로드합니다. [아티팩트](https://code.claude.com/docs/ko/artifacts.md#availability)를 사용할 수 있는 곳에서 사용 가능합니다 |

56| `/artifact-diagramming` | **[스킬](https://code.claude.com/docs/ko/skills.md#bundled-skills).** Claude가 [아티팩트](https://code.claude.com/docs/ko/artifacts.md)에서 따를 다이어그램 작성 지침을 로드합니다. 다이어그램이 도움이 되는 경우, 무엇을 그려야 하는지, 밝은 테마와 어두운 테마 모두에서 읽기 쉬운 인라인 SVG를 작성하는 방법을 다룹니다. Claude Code v2.1.221 이상이 필요합니다 |56| `/artifact-diagramming` | **[스킬](https://code.claude.com/docs/ko/skills.md#bundled-skills).** Claude가 [아티팩트](https://code.claude.com/docs/ko/artifacts.md)에서 따를 다이어그램 작성 지침을 로드합니다. 다이어그램이 도움이 되는 경우, 무엇을 그려야 하는지, 밝은 테마와 어두운 테마 모두에서 읽기 쉬운 인라인 SVG를 작성하는 방법을 다룹니다. Claude Code v2.1.221 이상이 필요합니다 |

57| `/artifacts` | 사용자가 소유하거나 사용자와 공유된 [아티팩트](https://code.claude.com/docs/ko/artifacts.md#find-an-artifact-again)를 나열한 다음, 하나를 세션에 첨부하거나 브라우저에서 열거나 링크를 복사합니다. [아티팩트](https://code.claude.com/docs/ko/artifacts.md#availability)를 사용할 수 있는 곳에서 사용 가능합니다. Claude Code v2.1.208 이상이 필요하며, `Enter`로 첨부하려면 v2.1.216이 필요합니다 |57| `/artifacts` | 사용자가 소유하거나 사용자와 공유된 [아티팩트](https://code.claude.com/docs/ko/artifacts.md#find-an-artifact-again)를 나열한 다음, 하나를 세션에 첨부하거나 브라우저에서 열거나 링크를 복사합니다. [아티팩트](https://code.claude.com/docs/ko/artifacts.md#availability)를 사용할 수 있는 곳에서 사용 가능합니다 |

58| `/auto-mode-setup` | 프로젝트와 최근 세션을 바탕으로 [`autoMode.environment` 항목 초안을 작성](https://code.claude.com/docs/ko/auto-mode-config#generate-environment-entries)한 다음, 초안을 검토하여 사용자 설정에 저장합니다. Pro, Max 또는 Team 플랜에서는 Claude Code v2.1.228 이상이 필요하며, 네이티브 Windows에서는 v2.1.233 이상이 필요합니다. Enterprise 플랜이나 Claude Console API 키를 사용하는 경우 v2.1.283 이상이 필요합니다. 명령이 표시되지 않으면 [`/auto-mode-setup`이 "Unknown command"를 반환하는 경우](https://code.claude.com/docs/ko/auto-mode-config#auto-mode-setup-returns-unknown-command)를 참조하세요 |58| `/auto-mode-setup` | 프로젝트와 최근 세션을 바탕으로 [`autoMode.environment` 항목 초안을 작성](https://code.claude.com/docs/ko/auto-mode-config#generate-environment-entries)한 다음, 초안을 검토하여 사용자 설정에 저장합니다. Pro, Max 또는 Team 플랜에서는 Claude Code v2.1.228 이상이 필요하며, 네이티브 Windows에서는 v2.1.233 이상이 필요합니다. Enterprise 플랜이나 Claude Console API 키를 사용하는 경우 v2.1.283 이상이 필요합니다. 명령이 표시되지 않으면 [`/auto-mode-setup`이 "Unknown command"를 반환하는 경우](https://code.claude.com/docs/ko/auto-mode-config#auto-mode-setup-returns-unknown-command)를 참조하세요 |

59| `/autocompact [auto\|<tokens>]` | 자동 압축 윈도우, 즉 Claude Code가 자동으로 압축하기 전까지 컨텍스트 윈도우가 얼마나 채워지는지를 설정합니다. `500k`와 같은 크기를 전달하거나, `auto`를 전달하여 모델에 맞게 조정된 윈도우로 되돌립니다. Claude Code는 값을 사용자 설정에 저장하고 현재 세션에 적용합니다. 허용되는 값과 이를 재정의하는 항목은 [자동 압축 윈도우 설정](https://code.claude.com/docs/ko/model-config.md#set-the-auto-compact-window)을 참조하세요. 인수 없이 실행하면 현재 윈도우를 보여주는 대화 상자가 열립니다. Claude Code v2.1.221 이상이 필요합니다 |59| `/autocompact [auto\|<tokens>]` | 자동 압축 윈도우, 즉 Claude Code가 자동으로 압축하기 전까지 컨텍스트 윈도우가 얼마나 채워지는지를 설정합니다. `500k`와 같은 크기를 전달하거나, `auto`를 전달하여 모델에 맞게 조정된 윈도우로 되돌립니다. Claude Code는 값을 사용자 설정에 저장하고 현재 세션에 적용합니다. 허용되는 값과 이를 재정의하는 항목은 [자동 압축 윈도우 설정](https://code.claude.com/docs/ko/model-config.md#set-the-auto-compact-window)을 참조하세요. 인수 없이 실행하면 현재 윈도우를 보여주는 대화 상자가 열립니다. Claude Code v2.1.221 이상이 필요합니다 |

60| `/autofix-pr [prompt]` | 현재 브랜치의 PR을 감시하다가 CI가 실패하거나 리뷰어가 코멘트를 남기면 수정 사항을 푸시하는 [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md#auto-fix-pull-requests)을 생성합니다. `gh pr view`를 사용해 체크아웃된 브랜치에서 열린 PR을 감지하며, 다른 PR을 감시하려면 먼저 해당 브랜치를 체크아웃합니다. 기본적으로 클라우드 세션은 모든 CI 실패와 리뷰 코멘트를 수정하도록 지시받으며, 다른 지침을 주려면 프롬프트를 전달합니다(예: `/autofix-pr only fix lint and type errors`). `gh` CLI와 [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md)에 대한 액세스 권한이 필요합니다 |60| `/autofix-pr [prompt]` | 현재 브랜치의 PR을 감시하다가 CI가 실패하거나 리뷰어가 코멘트를 남기면 수정 사항을 푸시하는 [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md#auto-fix-pull-requests)을 생성합니다. `gh pr view`를 사용해 체크아웃된 브랜치에서 열린 PR을 감지하며, 다른 PR을 감시하려면 먼저 해당 브랜치를 체크아웃합니다. 기본적으로 클라우드 세션은 모든 CI 실패와 리뷰 코멘트를 수정하도록 지시받으며, 다른 지침을 주려면 프롬프트를 전달합니다(예: `/autofix-pr only fix lint and type errors`). `gh` CLI와 [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md)에 대한 액세스 권한이 필요합니다 |


85| `/desktop` | 현재 세션을 Claude Code Desktop 앱에서 계속합니다. macOS 또는 x64 Windows와 Claude 구독이 필요합니다. 별칭: `/app` |85| `/desktop` | 현재 세션을 Claude Code Desktop 앱에서 계속합니다. macOS 또는 x64 Windows와 Claude 구독이 필요합니다. 별칭: `/app` |

86| `/diff` | 지금까지 Claude가 수행한 편집을 포함하여 작업 트리의 변경 사항을 리뷰합니다. [/diff로 변경 사항 리뷰하기](https://code.claude.com/docs/ko/interactive-mode.md#review-changes-with-%2Fdiff)를 참조하세요 |86| `/diff` | 지금까지 Claude가 수행한 편집을 포함하여 작업 트리의 변경 사항을 리뷰합니다. [/diff로 변경 사항 리뷰하기](https://code.claude.com/docs/ko/interactive-mode.md#review-changes-with-%2Fdiff)를 참조하세요 |

87| `/doctor [prompt-audit [path]]` | **[스킬](https://code.claude.com/docs/ko/skills.md#bundled-skills).** 설치, 설정, 확장 기능, `CLAUDE.md` 문제를 진단하는 설정 점검을 실행하고, 사용자가 확인하면 Claude가 적용할 수정 사항을 제안합니다. 점검 범위를 확인하거나 대신 `prompt-audit`로 지침을 감사하려면 [`/doctor`로 설정 점검하기](https://code.claude.com/docs/ko/skills#check-your-setup-with-/doctor)를 참조하세요. `prompt-audit` 하위 명령은 Claude Code v2.1.283 이상이 필요합니다. 별칭: `/checkup` |87| `/doctor [prompt-audit [path]]` | **[스킬](https://code.claude.com/docs/ko/skills.md#bundled-skills).** 설치, 설정, 확장 기능, `CLAUDE.md` 문제를 진단하는 설정 점검을 실행하고, 사용자가 확인하면 Claude가 적용할 수정 사항을 제안합니다. 점검 범위를 확인하거나 대신 `prompt-audit`로 지침을 감사하려면 [`/doctor`로 설정 점검하기](https://code.claude.com/docs/ko/skills#check-your-setup-with-/doctor)를 참조하세요. `prompt-audit` 하위 명령은 Claude Code v2.1.283 이상이 필요합니다. 별칭: `/checkup` |

88| `/effort [level\|auto\|status\|ultracode [on\|off]]` | [effort 수준](https://code.claude.com/docs/ko/model-config.md#adjust-effort-level)을 `low`부터 `xhigh`, `max` 또는 `auto`로 설정합니다. `status`는 현재 수준을 출력합니다. `ultracode` 또는 `ultracode on`은 현재 수준에서 세션의 [ultracode](https://code.claude.com/docs/ko/workflows.md#let-claude-decide-with-ultracode)를 켜고, `ultracode off`는 끕니다. [`ultracode`](https://code.claude.com/docs/ko/settings-reference#ultracode) 키는 유지됩니다. `max`는 세션에만 적용됩니다. `on` 및 `off` 인수와 현재 수준 유지 기능은 Claude Code v2.1.284 이상이 필요합니다. v2.1.284 이전에는 `/effort ultracode`가 세션을 `xhigh`로 설정했고, `/effort ultracode off`는 `Invalid argument`로 실패했습니다. Claude가 응답하는 중에 실행하면, Claude Code가 [캐시 경고](https://code.claude.com/docs/ko/prompt-caching.md#changing-effort-level)를 표시하는 경우 이를 확인한 후 해당 턴의 다음 요청에 새 수준을 적용합니다. v2.1.242 이전에는 Claude Code가 Anthropic에서 가져온 기능 플래그에 따라 명령을 턴 도중에 실행할지 턴이 끝날 때까지 대기열에 둘지 결정했으며, [서드 파티 제공업체](https://code.claude.com/docs/ko/third-party-integrations.md) 사용 시처럼 [기능 플래그를 가져오지](https://code.claude.com/docs/ko/env-vars.md#features-that-need-feature-flag-fetching) 않는 세션에서는 항상 대기열에 두었습니다. `-p`에서 작동합니다 |88| `/effort [level\|auto\|status\|ultracode [on\|off]]` | [effort 수준](https://code.claude.com/docs/ko/model-config.md#adjust-effort-level)을 `low`부터 `xhigh`, `max` 또는 `auto`로 설정합니다. `status`는 현재 수준을 출력합니다. `ultracode` 또는 `ultracode on`은 세션의 [ultracode](https://code.claude.com/docs/ko/workflows.md#let-claude-decide-with-ultracode)를 켜고, `ultracode off`는 끕니다. [`ultracode`](https://code.claude.com/docs/ko/settings-reference#ultracode) 키는 유지됩니다. `max`는 세션에만 적용됩니다. `on` 및 `off` 인수는 Claude Code v2.1.284 이상이 필요합니다. Claude가 작업하는 중에 `/effort`를 실행하는 경우 [새 수준이 적용되는 시점](https://code.claude.com/docs/ko/model-config.md#when-a-new-effort-level-starts)을 참조하세요. v2.1.205 이상에서는 `-p`에서 작동합니다 |

89| `/exit` | CLI를 종료합니다. 연결된 [백그라운드 세션](https://code.claude.com/docs/ko/agent-view.md#attach-to-a-session)에서는 분리되며 세션은 계속 실행됩니다. 별칭: `/quit` |89| `/exit` | CLI를 종료합니다. 연결된 [백그라운드 세션](https://code.claude.com/docs/ko/agent-view.md#attach-to-a-session)에서는 분리되며 세션은 계속 실행됩니다. 별칭: `/quit` |

90| `/export [filename]` | 현재 대화를 일반 텍스트로 내보냅니다. 파일 이름을 지정하면 해당 파일에 직접 기록합니다. 지정하지 않으면 클립보드에 복사하거나 파일로 저장하는 대화 상자가 열립니다 |90| `/export [filename]` | 현재 대화를 일반 텍스트로 내보냅니다. 파일 이름을 지정하면 해당 파일에 직접 기록합니다. 지정하지 않으면 클립보드에 복사하거나 파일로 저장하는 대화 상자가 열립니다 |

91| `/fast [on\|off]` | [빠른 모드](https://code.claude.com/docs/ko/fast-mode.md)를 켜거나 끕니다. Claude가 응답하는 중에 실행하면 Claude Code가 턴이 끝날 때까지 기다리지 않고 빠른 모드를 전환하지만, 진행 중인 턴은 원래 속도로 완료됩니다. v2.1.242 이전에는 Claude Code가 Anthropic에서 가져온 기능 플래그에 따라 명령을 턴 도중에 실행할지 턴이 끝날 때까지 대기열에 둘지 결정했으며, [기능 플래그를 가져오지](https://code.claude.com/docs/ko/env-vars.md#features-that-need-feature-flag-fetching) 않는 세션에서는 항상 대기열에 두었습니다. `-p`를 사용한 비대화형 모드에서는 사용이 제한됩니다. [빠른 모드 전환](https://code.claude.com/docs/ko/fast-mode.md#toggle-fast-mode)을 참조하세요 |91| `/fast [on\|off]` | [빠른 모드](https://code.claude.com/docs/ko/fast-mode.md)를 켜거나 끕니다. Claude가 응답하는 중에 실행하면 Claude Code가 턴이 끝날 때까지 기다리지 않고 빠른 모드를 전환하지만, 진행 중인 턴은 원래 속도로 완료됩니다. v2.1.242 이전에는 Claude Code가 Anthropic에서 가져온 기능 플래그에 따라 명령을 턴 도중에 실행할지 턴이 끝날 때까지 대기열에 둘지 결정했으며, [기능 플래그를 가져오지](https://code.claude.com/docs/ko/env-vars.md#features-that-need-feature-flag-fetching) 않는 세션에서는 항상 대기열에 두었습니다. `-p`를 사용한 비대화형 모드에서는 사용이 제한됩니다. [빠른 모드 전환](https://code.claude.com/docs/ko/fast-mode.md#toggle-fast-mode)을 참조하세요 |

computer-use.md +1 −1

Details

178| 기능 | Desktop | CLI |178| 기능 | Desktop | CLI |

179| :- | :- | :- |179| :- | :- | :- |

180| 플랫폼 | macOS 및 Windows | macOS만 해당 |180| 플랫폼 | macOS 및 Windows | macOS만 해당 |

181| 활성화 | **설정 > 이 컴퓨터 > 시스템**의 토글 | `/mcp`에서 `computer-use` 활성화 |181| 활성화 | [설정](https://code.claude.com/docs/ko/desktop.md#enable-computer-use)의 토글 | `/mcp`에서 `computer-use` 활성화 |

182| 거부된 앱 목록 | 설정에서 구성 가능 | 아직 사용할 수 없음 |182| 거부된 앱 목록 | 설정에서 구성 가능 | 아직 사용할 수 없음 |

183| 자동 표시 토글 | 선택 사항 | 항상 켜짐 |183| 자동 표시 토글 | 선택 사항 | 항상 켜짐 |

184| Dispatch 통합 | Dispatch에서 생성된 세션이 컴퓨터 사용을 사용할 수 있음 | 해당 없음 |184| Dispatch 통합 | Dispatch에서 생성된 세션이 컴퓨터 사용을 사용할 수 있음 | 해당 없음 |

Details

70* [Claude Code 확장](https://code.claude.com/docs/ko/features-overview.md): CLAUDE.md vs 스킬 vs 규칙 vs 훅 vs MCP를 언제 사용할지70* [Claude Code 확장](https://code.claude.com/docs/ko/features-overview.md): CLAUDE.md vs 스킬 vs 규칙 vs 훅 vs MCP를 언제 사용할지

71* [지시사항 및 메모리 저장](https://code.claude.com/docs/ko/memory.md): CLAUDE.md 계층 구조 및 자동 메모리71* [지시사항 및 메모리 저장](https://code.claude.com/docs/ko/memory.md): CLAUDE.md 계층 구조 및 자동 메모리

72* [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md): 연구를 별도 컨텍스트 윈도우에 위임72* [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md): 연구를 별도 컨텍스트 윈도우에 위임

73* [모범 사례](https://code.claude.com/docs/ko/best-practices.md): 컨텍스트를 주요 제약으로 관리73* [모범 사례](https://code.claude.com/docs/ko/best-practices.md#keep-cost-and-context-down): 세션을 집중적으로 유지하고 비용 절감

74* [프롬프트 캐싱](https://code.claude.com/docs/ko/prompt-caching.md): 캐시된 접두사를 무효화하는 작업74* [프롬프트 캐싱](https://code.claude.com/docs/ko/prompt-caching.md): 캐시된 접두사를 무효화하는 작업

75* [토큰 사용량 감소](https://code.claude.com/docs/ko/costs.md#reduce-token-usage): 컨텍스트 사용량을 낮게 유지하기 위한 전략75* [토큰 사용량 감소](https://code.claude.com/docs/ko/costs.md#reduce-token-usage): 컨텍스트 사용량을 낮게 유지하기 위한 전략

Details

174다음 중 하나가 전체 텍스트를 표시합니다:174다음 중 하나가 전체 텍스트를 표시합니다:

175 175 

176* `Ctrl+O`를 눌러 [대화 기록 뷰어](https://code.claude.com/docs/ko/interactive-mode.md#transcript-viewer)를 열고 발신자의 세션 이름 아래에서 전체 텍스트를 읽습니다.176* `Ctrl+O`를 눌러 [대화 기록 뷰어](https://code.claude.com/docs/ko/interactive-mode.md#transcript-viewer)를 열고 발신자의 세션 이름 아래에서 전체 텍스트를 읽습니다.

177 

178 Claude가 작업 중이어서 아직 메시지를 받지 않았다면, 트랜스크립트 끝으로 스크롤하십시오. 메시지는 그곳의 `Waiting to be delivered` 아래에 나열됩니다. Claude Code v2.1.309 이상이 필요합니다.

179 

177* [전체 화면 렌더링](https://code.claude.com/docs/ko/fullscreen.md#use-the-mouse)에서 메시지 일부가 생략된 미리보기 줄을 클릭하면 해당 위치에서 확장됩니다.180* [전체 화면 렌더링](https://code.claude.com/docs/ko/fullscreen.md#use-the-mouse)에서 메시지 일부가 생략된 미리보기 줄을 클릭하면 해당 위치에서 확장됩니다.

181 

178* [`--verbose`](https://code.claude.com/docs/ko/cli-reference#cli-flags)로 시작한 세션에서, Claude Code는 미리보기 대신 전체 텍스트를 표시합니다.182* [`--verbose`](https://code.claude.com/docs/ko/cli-reference#cli-flags)로 시작한 세션에서, Claude Code는 미리보기 대신 전체 텍스트를 표시합니다.

179 183 

180미리보기는 표시되는 것만 단축합니다. 확장하든 안 하든, Claude는 전체 메시지를 읽습니다.184미리보기는 표시되는 것만 단축합니다. 확장하든 안 하든, Claude는 전체 메시지를 읽습니다.

desktop.md +31 −22

Details

69* **제안 사용하기**: **Tab** 또는 **Right arrow**를 눌러 제안을 프롬프트 상자에 넣고, 필요하면 편집한 다음 **Enter**를 눌러 보냅니다. 제안을 수락하기 전에 **Enter**를 누르면 제안이 전송되지 않습니다.69* **제안 사용하기**: **Tab** 또는 **Right arrow**를 눌러 제안을 프롬프트 상자에 넣고, 필요하면 편집한 다음 **Enter**를 눌러 보냅니다. 제안을 수락하기 전에 **Enter**를 누르면 제안이 전송되지 않습니다.

70* **직접 프롬프트 작성하기**: 입력을 시작합니다. 제안은 프롬프트 상자가 비어 있고 첨부된 파일이 없을 때만 표시됩니다.70* **직접 프롬프트 작성하기**: 입력을 시작합니다. 제안은 프롬프트 상자가 비어 있고 첨부된 파일이 없을 때만 표시됩니다.

71 71 

72**Settings > Claude Code**로 이동하여 **Sessions** 아래의 **Prompt suggestions**를 끄면, 각 세션이 다음에 시작되거나 재개될 때부터 제안이 표시되지 않습니다.72제안을 중지하려면 **Settings > Code** 또는 **Settings > Claude Code**에서 **Prompt suggestions**를 끕니다. 각 세션은 다음에 시작되거나 재개될 때부터 제안을 표시하지 않습니다.

73 73 

74### 프롬프트에 파일 및 컨텍스트 추가하기74### 프롬프트에 파일 및 컨텍스트 추가하기

75 75 


92| **Accept edits** | `acceptEdits` | Claude는 파일 편집을 자동으로 수락하고 `mkdir`, `touch`, `mv`와 같은 일반적인 파일시스템 명령을 자동으로 수락하지만 다른 터미널 명령 실행 전에는 여전히 요청합니다. 파일 변경을 신뢰하고 더 빠른 반복을 원할 때 사용합니다. |92| **Accept edits** | `acceptEdits` | Claude는 파일 편집을 자동으로 수락하고 `mkdir`, `touch`, `mv`와 같은 일반적인 파일시스템 명령을 자동으로 수락하지만 다른 터미널 명령 실행 전에는 여전히 요청합니다. 파일 변경을 신뢰하고 더 빠른 반복을 원할 때 사용합니다. |

93| **Plan** | `plan` | Claude는 파일을 읽고 명령을 실행하여 탐색한 다음 소스 코드를 편집하지 않고 계획을 제안합니다. 먼저 접근 방식을 검토하려는 복잡한 작업에 좋습니다. |93| **Plan** | `plan` | Claude는 파일을 읽고 명령을 실행하여 탐색한 다음 소스 코드를 편집하지 않고 계획을 제안합니다. 먼저 접근 방식을 검토하려는 복잡한 작업에 좋습니다. |

94| **Auto** | `auto` | Claude는 일상적인 프롬프트 없이 실행됩니다. 셸 명령 및 네트워크 요청과 같은 작업이 실행되기 전에 백그라운드 분류기가 요청과의 정렬을 확인합니다. [자동 모드가 사용 가능](#auto-mode-availability)할 때 나타나며, 별도의 Settings 토글이 없습니다. |94| **Auto** | `auto` | Claude는 일상적인 프롬프트 없이 실행됩니다. 셸 명령 및 네트워크 요청과 같은 작업이 실행되기 전에 백그라운드 분류기가 요청과의 정렬을 확인합니다. [자동 모드가 사용 가능](#auto-mode-availability)할 때 나타나며, 별도의 Settings 토글이 없습니다. |

95| **Bypass permissions** | `bypassPermissions` | Claude는 [어떤 모드도 자동으로 승인하지 않는 작업](https://code.claude.com/docs/ko/permission-modes.md#actions-no-mode-auto-approves), Claude가 [외부 사이트에서 작동](#browse-external-sites)할 때의 안전 분류기, 또는 세션 삭제와 같은 데스크톱 작업(단, [세션 아카이브](#work-across-sessions)는 해당되지 않음)을 제외하고 권한 프롬프트 없이 실행됩니다. CLI의 `--dangerously-skip-permissions`와 동일합니다. Pro 및 Max 플랜에서는 Settings → Claude Code의 "Allow bypass permissions mode"에서 활성화합니다. Team 및 Enterprise 플랜에서는 Settings 토글이 없으며 조직 정책이 대신 제어합니다. 샌드박스 컨테이너 또는 VM에서만 사용합니다. |95| **Bypass permissions** | `bypassPermissions` | Claude는 [어떤 모드도 자동으로 승인하지 않는 작업](https://code.claude.com/docs/ko/permission-modes.md#actions-no-mode-auto-approves), Claude가 [외부 사이트에서 작동](#browse-external-sites)할 때의 안전 분류기, 또는 세션 삭제와 같은 데스크톱 작업(단, [세션 아카이브](#work-across-sessions)는 해당되지 않음)을 제외하고 권한 프롬프트 없이 실행됩니다. CLI의 `--dangerously-skip-permissions`와 동일합니다. Pro 및 Max 플랜에서는 **Settings > Code** 또는 **Settings > Claude Code**에서 "Allow bypass permissions mode"를 활성화합니다. Team 및 Enterprise 플랜에서는 Settings 토글이 없으며 조직 정책이 대신 제어합니다. 샌드박스 컨테이너 또는 VM에서만 사용합니다. |

96 96 

97이전 버전의 Code 탭은 이러한 모드를 Ask permissions, Auto accept edits, Plan mode로 표시했습니다.97이전 버전의 Code 탭은 이러한 모드를 Ask permissions, Auto accept edits, Plan mode로 표시했습니다.

98 98 


100 100 

101> [!TIP]101> [!TIP]

102>102>

103> 복잡한 작업을 Plan에서 시작하여 Claude가 변경하기 전에 접근 방식을 매핑하도록 합니다. 계획을 승인한 후 Accept edits 또는 Manual로 전환하여 실행합니다. 이 워크플로에 대한 자세한 내용은 [먼저 탐색, 그 다음 계획, 그 다음 코드](https://code.claude.com/docs/ko/best-practices.md#explore-first-then-plan-then-code)를 참조하세요.103> 복잡한 작업을 Plan에서 시작하여 Claude가 변경하기 전에 접근 방식을 매핑하도록 합니다. 계획을 승인한 후 Accept edits 또는 Manual로 전환하여 실행합니다. 이 워크플로에 대한 자세한 내용은 [플랜 모드](https://code.claude.com/docs/ko/permission-modes.md#analyze-before-you-edit-with-plan-mode)를 참조하세요.

104 104 

105클라우드 세션은 Accept edits, Plan, Auto를 지원합니다. Accept edits는 `default` 모드에 해당합니다: 클라우드 세션은 파일 편집을 미리 승인하므로 선택기는 Manual 대신 Accept edits를 표시합니다. Bypass permissions는 클라우드 세션에서 사용할 수 없으며, [자체 호스팅 환경](https://code.claude.com/docs/ko/self-hosted-environments)의 세션을 포함합니다.105클라우드 세션은 Accept edits, Plan, Auto를 지원합니다. Accept edits는 `default` 모드에 해당합니다: 클라우드 세션은 파일 편집을 미리 승인하므로 선택기는 Manual 대신 Accept edits를 표시합니다. Bypass permissions는 클라우드 세션에서 사용할 수 없으며, [자체 호스팅 환경](https://code.claude.com/docs/ko/self-hosted-environments)의 세션을 포함합니다.

106 106 


133 133 

134Claude는 프로젝트를 기반으로 초기 서버 구성을 만듭니다. 앱이 사용자 정의 개발 명령을 사용하는 경우 `.claude/launch.json`을 편집하여 설정과 일치시킵니다. 전체 참조는 [미리보기 서버 구성](#configure-preview-servers)을 참조하세요.134Claude는 프로젝트를 기반으로 초기 서버 구성을 만듭니다. 앱이 사용자 정의 개발 명령을 사용하는 경우 `.claude/launch.json`을 편집하여 설정과 일치시킵니다. 전체 참조는 [미리보기 서버 구성](#configure-preview-servers)을 참조하세요.

135 135 

136Browser에 저장된 데이터를 지우려면 Browser 패널의 **⋮** 메뉴에서 **Clear browsing data**를 선택합니다. Browser를 완전히 끄려면 **Settings > Claude Code**에서 **Browser tools**를 끕니다.136Browser에 저장된 데이터를 지우려면 Browser 패널의 **⋮** 메뉴에서 **Clear browsing data**를 선택합니다. Browser를 완전히 끄려면 **Settings > Code** 또는 **Settings > Claude Code**에서 **Browser tools**를 끕니다.

137 137 

138### 외부 사이트 탐색하기138### 외부 사이트 탐색하기

139 139 


164 164 

165### diff 보기로 변경 사항 검토하기165### diff 보기로 변경 사항 검토하기

166 166 

167Claude가 코드를 변경한 후 diff 보기를 사용하면 풀 리퀘스트를 만들기 전에 파일별로 수정 사항을 검토할 수 있습니다. diff 보기를 열려면 [세션 세부 정보 패널](#see-session-details)의 **Changes** 카드에서 `+12 -1`과 같은 줄 수를 클릭합니다. 세션 제목 표시줄에서 **Changes**를 클릭할 수도 있습니다.167Claude가 코드를 변경한 후 diff 보기를 사용하면 풀 리퀘스트를 만들기 전에 파일별로 수정 사항을 검토할 수 있습니다. diff 보기를 열려면 [세션 세부 정보 패널](#see-session-details)의 **Changes** 카드에서 `+12 -1`과 같은 줄 수를 클릭합니다. 세션 제목 표시줄에서 **Changes**를 클릭할 수도 있습니다. 클라우드 세션의 기본 브랜치 대비 diff에는 [아직 푸시되지 않은 변경 사항이 빠져 있을 수 있습니다](https://code.claude.com/docs/ko/claude-code-on-the-web.md#troubleshoot-a-missing-file-in-the-diff-view).

168 168 

169특정 줄에 댓글을 달려면 diff의 모든 줄을 클릭하여 댓글 상자를 엽니다. 피드백을 입력하고 **Enter**를 눌러 댓글을 추가합니다. 여러 줄에 댓글을 추가한 후 모든 댓글을 한 번에 제출합니다:169특정 줄에 댓글을 달려면 줄 위에 마우스를 올리고 줄 번호 옆에 나타나는 \*\*+\*\*를 클릭하여 댓글 상자를 엽니다. 피드백을 입력하고 **Enter**를 눌러 댓글을 추가합니다. 여러 줄에 댓글을 추가한 후 모든 댓글을 한 번에 제출합니다:

170 170 

171* **macOS**: **Cmd+Enter** 누르기171* **macOS**: **Cmd+Enter** 누르기

172* **Windows**: **Ctrl+Enter** 누르기172* **Windows**: **Ctrl+Enter** 누르기


194 * **저장소가 auto-merge를 허용하지 않는 경우**: **Merge when ready**가 켜지지 않으므로 먼저 [GitHub 저장소 설정](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-auto-merge-for-pull-requests-in-your-repository)에서 auto-merge를 활성화합니다194 * **저장소가 auto-merge를 허용하지 않는 경우**: **Merge when ready**가 켜지지 않으므로 먼저 [GitHub 저장소 설정](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-auto-merge-for-pull-requests-in-your-repository)에서 auto-merge를 활성화합니다

195* **[이전 레이아웃](#check-which-layout-you-have)**: 세션에 풀 리퀘스트가 생기면 상태 표시줄에서 **CI**를 클릭합니다.195* **[이전 레이아웃](#check-which-layout-you-have)**: 세션에 풀 리퀘스트가 생기면 상태 표시줄에서 **CI**를 클릭합니다.

196 196 

197PR이 병합되거나 닫히면 세션을 자동으로 아카이브하려면 **Settings > Claude Code**에서 [auto-archive](#archive-a-session)를 켭니다.197PR이 병합되거나 닫히면 세션을 자동으로 아카이브하려면 **Settings > Code** 또는 **Settings > Claude Code**에서 [auto-archive](#archive-a-session)를 켭니다.

198 198 

199> [!NOTE]199> [!NOTE]

200>200>


275* **Cmd+Ctrl**: **Ctrl+Alt**를 누릅니다275* **Cmd+Ctrl**: **Ctrl+Alt**를 누릅니다

276* **Cmd**: **Ctrl**을 누릅니다276* **Cmd**: **Ctrl**을 누릅니다

277 277 

278세션 순환, 터미널 토글, 보기 모드 토글은 모든 플랫폼에서 **Ctrl**을 사용합니다.278`Ctrl`로 시작하는 단축키는 모든 플랫폼에서 동일합니다.

279 279 

280| 단축키 | 작업 |280| 단축키 | 작업 |

281| - | - |281| - | - |


284| `Cmd` `Option` `1`–`9` | [현재 레이아웃](#check-which-layout-you-have)의 새 세션 화면에서 환경 선택 |284| `Cmd` `Option` `1`–`9` | [현재 레이아웃](#check-which-layout-you-have)의 새 세션 화면에서 환경 선택 |

285| `Cmd` `Option` `0` | 현재 레이아웃의 새 세션 화면에서 [**New environment** 대화 상자](#create-a-saved-environment) 열기 |285| `Cmd` `Option` `0` | 현재 레이아웃의 새 세션 화면에서 [**New environment** 대화 상자](#create-a-saved-environment) 열기 |

286| `Cmd` `W` | 세션 닫기 |286| `Cmd` `W` | 세션 닫기 |

287| `Ctrl` `Tab` / `Ctrl` `Shift` `Tab` | 다음 또는 이전 세션 |287| `Ctrl` `Tab` / `Ctrl` `Shift` `Tab` | 세션 간 전환 |

288| `Cmd` `Shift` `]` / `Cmd` `Shift` `[` | 다음 또는 이전 세션 |288| `Cmd` `Shift` `]` / `Cmd` `Shift` `[` | 다음 또는 이전 세션 |

289| `Esc` | Claude의 응답 중지 |289| `Esc` | Claude의 응답 중지 |

290| `Tab` / `Right arrow` | 빈 프롬프트 상자에서 [제안된 프롬프트 수락](#accept-a-suggested-prompt) |290| `Tab` / `Right arrow` | 빈 프롬프트 상자에서 [제안된 프롬프트 수락](#accept-a-suggested-prompt) |


352 352 

353**2. 토글 켜기**353**2. 토글 켜기**

354 354 

355데스크톱 앱에서 **Settings > This computer > System**으로 이동합니다. **Computer use** 아래에서 **Enable computer use**를 켭니다. Windows에서는 토글이 즉시 적용되고 설정이 완료됩니다. macOS에서는 다음 단계로 계속합니다.355데스크톱 앱에서 **Settings**를 연 다음:

356 

357* **Settings 메뉴에 This computer가 표시되는 경우**: **This computer > System**으로 이동합니다

358* **그렇지 않은 경우**: **Capabilities**로 이동합니다

359 

360**Computer use** 아래에서 **Enable computer use**를 켭니다:

361 

362* **Windows**: 토글이 즉시 적용되고 설정이 완료됩니다

363* **macOS**: 다음 단계로 계속합니다

356 364 

357토글이 보이지 않으면 macOS 또는 Windows에서 Pro 또는 Max 계획을 사용하고 있는지 확인한 다음 업데이트하고 앱을 다시 시작합니다.365토글이 보이지 않으면 macOS 또는 Windows에서 Pro 또는 Max 계획을 사용하고 있는지 확인한 다음 업데이트하고 앱을 다시 시작합니다.

358 366 


379 387 

380Terminal, Finder 또는 File Explorer, System Settings 또는 Settings와 같이 광범위한 영향을 미치는 앱은 승인이 부여하는 것을 알 수 있도록 프롬프트에 추가 경고를 표시합니다.388Terminal, Finder 또는 File Explorer, System Settings 또는 Settings와 같이 광범위한 영향을 미치는 앱은 승인이 부여하는 것을 알 수 있도록 프롬프트에 추가 경고를 표시합니다.

381 389 

382**Settings > This computer > System**의 **Computer use** 섹션에는 다음 옵션이 포함되어 있습니다:390Settings에서 [컴퓨터 사용을 켠](#enable-computer-use) **Computer use** 섹션에는 다음 옵션이 포함되어 있습니다:

383 391 

384* **Denied apps**: 프롬프트 없이 거부하려면 여기에 앱을 추가합니다. Claude는 허용된 앱의 작업을 통해 거부된 앱에 간접적으로 영향을 미칠 수 있지만 거부된 앱과 직접 상호작용할 수 없습니다.392* **Denied apps**: 프롬프트 없이 거부하려면 여기에 앱을 추가합니다. Claude는 허용된 앱의 작업을 통해 거부된 앱에 간접적으로 영향을 미칠 수 있지만 거부된 앱과 직접 상호작용할 수 없습니다.

385* **Unhide apps when Claude finishes**: 컴퓨터 사용이 백그라운드에서 실행되지 않을 때 Claude가 작업하는 동안 다른 창이 숨겨져 승인된 앱하고만 상호작용합니다. Claude가 완료되면 이 설정을 끄지 않는 한 숨겨진 창이 복원됩니다.393* **Unhide apps when Claude finishes**: 컴퓨터 사용이 백그라운드에서 실행되지 않을 때 Claude가 작업하는 동안 다른 창이 숨겨져 승인된 앱하고만 상호작용합니다. Claude가 완료되면 이 설정을 끄지 않는 한 숨겨진 창이 복원됩니다.


390 398 

391### 세션으로 병렬 작업하기399### 세션으로 병렬 작업하기

392 400 

393사이드바에서 **+ New**를 클릭하거나 macOS에서는 **Cmd+N**, Windows에서는 **Ctrl+N**을 눌러 여러 작업을 병렬로 진행할 수 있습니다. **Ctrl+Tab**과 **Ctrl+Shift+Tab**을 누르면 사이드바의 세션을 순환할 수 있습니다.401사이드바에서 **+ New**를 클릭하거나 macOS에서는 **Cmd+N**, Windows에서는 **Ctrl+N**을 눌러 여러 작업을 병렬로 진행할 수 있습니다. **Ctrl+Tab**과 **Ctrl+Shift+Tab**을 누르면 세션 간에 전환할 수 있습니다.

394 402 

395두 번째 세션을 현재 세션 옆이나 별도 창에서 열 수도 있습니다.403두 번째 세션을 현재 세션 옆이나 별도 창에서 열 수도 있습니다.

396 404 


401 409 

402#### 별도 worktree에서 세션 실행하기410#### 별도 worktree에서 세션 실행하기

403 411 

404Git 저장소인 프로젝트에서는 세션을 시작하기 전에 **Worktree**를 켜서 프로젝트의 격리된 사본인 별도의 [Git worktree](https://code.claude.com/docs/ko/worktrees.md)에서 세션을 실행할 수 있습니다. 기본적으로 **Worktree**는 꺼져 있으며 Claude는 프로젝트 폴더 자체에서 작업합니다. [프롬프트 상자 아래 행](#start-a-session)의 프로젝트 폴더 컨트롤을 클릭하고 **Worktree**를 켭니다.412Git 저장소인 프로젝트에서는 세션을 시작하기 전에 **Worktree**를 켜서 프로젝트의 격리된 사본인 별도의 [Git worktree](https://code.claude.com/docs/ko/worktrees.md)에서 세션을 실행할 수 있습니다. 기본적으로 **Worktree**는 꺼져 있으며 Claude는 프로젝트 폴더 자체에서 작업합니다. [현재 레이아웃](#check-which-layout-you-have)에서는 [프롬프트 상자 아래 행](#start-a-session)의 **Worktree** 버튼을 켭니다.

405 413 

406* **[저장된 환경](#create-a-saved-environment) 사용 시**: 환경을 만들거나 편집할 때 **Worktree**를 설정합니다414* **[서드 파티 공급자](https://code.claude.com/docs/ko/third-party-integrations.md) 사용 시**: 프롬프트 상자 아래 행에 프로젝트 폴더 컨트롤은 표시되지만 **Worktree** 버튼이 없으면 해당 컨트롤을 클릭하고 **Worktree**를 켭니다

415* **[저장된 로컬 또는 SSH 환경](#create-a-saved-environment)의 기본값으로 설정 시**: 환경을 만들거나 편집할 때 **Worktree**를 설정합니다

407* **[이전 레이아웃](#check-which-layout-you-have)**: 프롬프트 상자 위의 브랜치 이름 옆에 있는 **worktree** 체크박스를 선택합니다416* **[이전 레이아웃](#check-which-layout-you-have)**: 프롬프트 상자 위의 브랜치 이름 옆에 있는 **worktree** 체크박스를 선택합니다

408 417 

409워크트리는 기본적으로 `<project-root>/.claude/worktrees/`에 저장됩니다. 대신 사용자 지정 디렉터리에 저장하려면 다음과 같이 합니다.418워크트리는 기본적으로 `<project-root>/.claude/worktrees/`에 저장됩니다. 대신 사용자 지정 디렉터리에 저장하려면 다음과 같이 합니다.

410 419 

411* **로컬 세션**: **Settings > Claude Code**에서 **Worktree location**을 설정합니다420* **로컬 세션**: **Settings > Code** 또는 **Settings > Claude Code**에서 **Worktree location**을 설정합니다

412* **SSH 세션**: [SSH 연결](#choose-where-ssh-session-worktrees-go)에서 **Worktree folder**를 설정합니다421* **SSH 세션**: [SSH 연결](#choose-where-ssh-session-worktrees-go)에서 **Worktree folder**를 설정합니다

413 422 

414**Settings > Claude Code**에서 **Branch prefix**를 설정할 수도 있습니다. Desktop은 모든 워크트리 브랜치 이름 앞에 이 접두사를 붙이며, 이는 Claude가 만든 브랜치를 정리하는 데 유용합니다.423**Settings > Code** 또는 **Settings > Claude Code**에서 **Branch prefix**를 설정할 수도 있습니다. Desktop은 모든 워크트리 브랜치 이름 앞에 이 접두사를 붙이며, 이는 Claude가 만든 브랜치를 정리하는 데 유용합니다.

415 424 

416`.env`처럼 gitignore된 파일을 새 워크트리에 포함하려면 프로젝트 루트에 [`.worktreeinclude` 파일](https://code.claude.com/docs/ko/worktrees#copy-gitignored-files-into-worktrees)을 만듭니다. 워크트리 세션이 프로젝트 설정, 훅, 스킬을 어디서 읽는지는 [워크트리가 메인 체크아웃과 공유하는 항목](https://code.claude.com/docs/ko/worktrees.md#what-worktrees-share-with-the-main-checkout)을 참조하세요.425`.env`처럼 gitignore된 파일을 새 워크트리에 포함하려면 프로젝트 루트에 [`.worktreeinclude` 파일](https://code.claude.com/docs/ko/worktrees#copy-gitignored-files-into-worktrees)을 만듭니다. 워크트리 세션이 프로젝트 설정, 훅, 스킬을 어디서 읽는지는 [워크트리가 메인 체크아웃과 공유하는 항목](https://code.claude.com/docs/ko/worktrees.md#what-worktrees-share-with-the-main-checkout)을 참조하세요.

417 426 


430 439 

431워크트리에 커밋되지 않은 변경 사항이 있는 세션을 보관하기 전에 [세션 보관 시 커밋되지 않은 변경 사항 유지하기](#keep-uncommitted-changes-when-a-session-is-archived)를 참조하세요. 세션을 보관하려면 사이드바에서 세션 위에 마우스를 올리고 메뉴를 열어 **Archive**를 선택합니다. 세션은 [보관된 세션](#organize-and-find-sessions)으로 이동합니다.440워크트리에 커밋되지 않은 변경 사항이 있는 세션을 보관하기 전에 [세션 보관 시 커밋되지 않은 변경 사항 유지하기](#keep-uncommitted-changes-when-a-session-is-archived)를 참조하세요. 세션을 보관하려면 사이드바에서 세션 위에 마우스를 올리고 메뉴를 열어 **Archive**를 선택합니다. 세션은 [보관된 세션](#organize-and-find-sessions)으로 이동합니다.

432 441 

433풀 리퀘스트가 병합되거나 닫힐 때 세션이 자동으로 보관되도록 하려면 **Settings > Claude Code**에서 **Auto-archive after PR merge or close**를 켭니다. 클라우드 세션과 아직 실행 중인 세션은 자동으로 보관되지 않습니다.442풀 리퀘스트가 병합되거나 닫힐 때 세션이 자동으로 보관되도록 하려면 **Settings > Code** 또는 **Settings > Claude Code**에서 **Auto-archive after PR merge or close**를 켭니다. 클라우드 세션과 아직 실행 중인 세션은 자동으로 보관되지 않습니다.

434 443 

435#### 세션 보관 시 커밋되지 않은 변경 사항 유지하기444#### 세션 보관 시 커밋되지 않은 변경 사항 유지하기

436 445 


527로컬 세션은 사용자가 해당 세션에 Remote Control을 켜거나, 세션이 시작될 때 자동으로 연결됩니다.536로컬 세션은 사용자가 해당 세션에 Remote Control을 켜거나, 세션이 시작될 때 자동으로 연결됩니다.

528 537 

529* **해당 세션에 직접 켜기**: 세션의 **Remote Control** 스위치를 사용하거나 프롬프트 상자에 `/remote-control`을 입력합니다.538* **해당 세션에 직접 켜기**: 세션의 **Remote Control** 스위치를 사용하거나 프롬프트 상자에 `/remote-control`을 입력합니다.

530* **시작 시 연결**: **Settings > Claude Code**에서 **Connect new sessions to Remote Control**이 켜져 있으면 새 세션이 자동으로 연결됩니다. 이 설정을 변경한 적이 없다면 Desktop은 사용자 설정 또는 관리형 설정의 [`remoteControlAtStartup`](https://code.claude.com/docs/ko/settings-reference#remotecontrolatstartup)을 따르고, 그다음 조직의 기본값을 따릅니다.539* **시작 시 연결**: **Settings > Code** 또는 **Settings > Claude Code**에서 **Connect new sessions to Remote Control**이 켜져 있으면 새 세션이 자동으로 연결됩니다. 이 설정을 변경한 적이 없다면 Desktop은 사용자 설정 또는 관리형 설정의 [`remoteControlAtStartup`](https://code.claude.com/docs/ko/settings-reference#remotecontrolatstartup)을 따르고, 그다음 조직의 기본값을 따릅니다.

531 540 

532세션이 연결되어 있는지 확인하려면 [세션 세부 정보 패널](#see-session-details)의 **Environment** 카드에서 **Remote Control** 스위치를 확인합니다.541세션이 연결되어 있는지 확인하려면 [세션 세부 정보 패널](#see-session-details)의 **Environment** 카드에서 **Remote Control** 스위치를 확인합니다.

533 542 

534세션이 다른 기기에 표시되지 않도록 하려면 필요한 수준에서 Remote Control을 끕니다.543세션이 다른 기기에 표시되지 않도록 하려면 필요한 수준에서 Remote Control을 끕니다.

535 544 

536* **세션 하나**: 해당 세션의 **Remote Control** 스위치를 끕니다. 시작 시 연결된 세션에서 `/remote-control`을 입력하면 Remote Control이 켜진 상태로 유지되며 `Remote Control is already on. This session connected automatically when it started.`가 표시됩니다. 연결을 끊으려면 해당 줄에서 **Turn off**를 클릭합니다.545* **세션 하나**: 해당 세션의 **Remote Control** 스위치를 끕니다. 시작 시 연결된 세션에서 `/remote-control`을 입력하면 Remote Control이 켜진 상태로 유지되며 `Remote Control is already on. This session connected automatically when it started.`가 표시됩니다. 연결을 끊으려면 해당 줄에서 **Turn off**를 클릭합니다.

537* **이 컴퓨터의 새 Desktop 세션**: **Settings > Claude Code**에서 **Connect new sessions to Remote Control**을 끕니다. 이미 꺼져 있는 것으로 표시되면 켰다가 다시 꺼서 Desktop이 선택을 저장하도록 합니다. 저장된 설정은 `remoteControlAtStartup`과 기본값보다 우선합니다.546* **이 컴퓨터의 새 Desktop 세션**: **Settings > Code** 또는 **Settings > Claude Code**에서 **Connect new sessions to Remote Control**을 끕니다. 이미 꺼져 있는 것으로 표시되면 켰다가 다시 꺼서 Desktop이 선택을 저장하도록 합니다. 저장된 설정은 `remoteControlAtStartup`과 기본값보다 우선합니다.

538* **CLI를 포함한 이 컴퓨터의 모든 세션**: `~/.claude/settings.json`에서 [`disableRemoteControl`](https://code.claude.com/docs/ko/settings-reference#disableremotecontrol)을 `true`로 설정하여 세션이 연결되지 않도록 합니다. 파일을 저장할 때 이미 연결되어 있던 세션은 해당 세션의 Remote Control을 끌 때까지 연결된 상태로 유지됩니다.547* **CLI를 포함한 이 컴퓨터의 모든 세션**: `~/.claude/settings.json`에서 [`disableRemoteControl`](https://code.claude.com/docs/ko/settings-reference#disableremotecontrol)을 `true`로 설정하여 세션이 연결되지 않도록 합니다. 파일을 저장할 때 이미 연결되어 있던 세션은 해당 세션의 Remote Control을 끌 때까지 연결된 상태로 유지됩니다.

539 548 

540이미 다른 기기에 표시된 세션을 숨기려면 Desktop에서 해당 세션을 보관합니다. Desktop은 세션의 Remote Control 사본도 보관하므로 해당 기기의 기본 세션 목록에서 사라집니다. 해당 기기에서 세션을 보거나 삭제하려면 [세션 보관하기](https://code.claude.com/docs/ko/claude-code-on-the-web.md#archive-sessions)를 참조하세요.549이미 다른 기기에 표시된 세션을 숨기려면 Desktop에서 해당 세션을 보관합니다. Desktop은 세션의 Remote Control 사본도 보관하므로 해당 기기의 기본 세션 목록에서 사라집니다. 해당 기기에서 세션을 보거나 삭제하려면 [세션 보관하기](https://code.claude.com/docs/ko/claude-code-on-the-web.md#archive-sessions)를 참조하세요.


576> * **WSL 세션에서 Connectors가 회색으로 비활성화된 경우**: [터미널 또는 커넥터를 사용할 수 없는 경우](https://code.claude.com/docs/ko/desktop-wsl.md#check-for-the-terminal-and-connectors)를 참조하세요585> * **WSL 세션에서 Connectors가 회색으로 비활성화된 경우**: [터미널 또는 커넥터를 사용할 수 없는 경우](https://code.claude.com/docs/ko/desktop-wsl.md#check-for-the-terminal-and-connectors)를 참조하세요

577> * **클라우드 세션**: [커넥터가 Claude Code에 연결되는 방식](https://code.claude.com/docs/ko/mcp.md#how-connectors-reach-claude-code)을 참조하세요586> * **클라우드 세션**: [커넥터가 Claude Code에 연결되는 방식](https://code.claude.com/docs/ko/mcp.md#how-connectors-reach-claude-code)을 참조하세요

578 587 

579연결되면 Claude는 캘린더를 읽고, 메시지를 보내고, 이슈를 만들고, 도구와 직접 상호작용할 수 있습니다. Claude에게 세션에 구성된 커넥터가 무엇인지 물어볼 수 있습니다. 커넥터를 관리하거나 연결을 해제하려면 데스크톱 앱의 **Settings > Connectors**로 이동합니다.588연결되면 Claude는 캘린더를 읽고, 메시지를 보내고, 이슈를 만들고, 도구와 직접 상호작용할 수 있습니다. Claude에게 세션에 구성된 커넥터가 무엇인지 물어볼 수 있습니다. 커넥터를 관리하거나 연결을 해제하려면 사이드바에서 **Customize**를 클릭하고 **Connectors**를 엽니다.

580 589 

581Connectors에 나열되지 않은 통합의 경우 [설정 파일](https://code.claude.com/docs/ko/mcp.md#installing-mcp-servers)을 통해 MCP 서버를 수동으로 추가합니다. [사용자 정의 커넥터를 만들](https://support.claude.com/en/articles/11175166-getting-started-with-custom-connectors-using-remote-mcp) 수도 있습니다.590Connectors에 나열되지 않은 통합의 경우 [설정 파일](https://code.claude.com/docs/ko/mcp.md#installing-mcp-servers)을 통해 MCP 서버를 수동으로 추가합니다. [사용자 정의 커넥터를 만들](https://support.claude.com/en/articles/11175166-getting-started-with-custom-connectors-using-remote-mcp) 수도 있습니다.

582 591 


2028| `--model sonnet` | 프롬프트 상자 아래 행의 모델 선택기 |2037| `--model sonnet` | 프롬프트 상자 아래 행의 모델 선택기 |

2029| `--resume`, `--continue` | 사이드바에서 세션을 클릭하거나, 프롬프트 상자에서 `/resume`을 입력하여 CLI에서 시작한 세션을 선택합니다 |2038| `--resume`, `--continue` | 사이드바에서 세션을 클릭하거나, 프롬프트 상자에서 `/resume`을 입력하여 CLI에서 시작한 세션을 선택합니다 |

2030| `--permission-mode` | 프롬프트 상자 아래 행의 모드 선택기 |2039| `--permission-mode` | 프롬프트 상자 아래 행의 모드 선택기 |

2031| `--dangerously-skip-permissions` | 권한 모드 무시. Pro 및 Max 플랜에서는 설정 → Claude Code → "권한 모드 무시 허용"에서 활성화합니다. Team 및 Enterprise 플랜에서는 조직 정책이 제어합니다 |2040| `--dangerously-skip-permissions` | 권한 모드 무시. Pro 및 Max 플랜에서는 **설정 > Code** 또는 **설정 > Claude Code**에서 "권한 모드 무시 허용"을 활성화합니다. Team 및 Enterprise 플랜에서는 조직 정책이 제어합니다 |

2032| `--add-dir` | 로컬 및 SSH 세션에서는 [세션에 폴더 추가](#add-folders-to-a-session), 클라우드 세션에서는 [여러 저장소](#run-long-running-tasks-in-the-cloud) 선택 |2041| `--add-dir` | 로컬 및 SSH 세션에서는 [세션에 폴더 추가](#add-folders-to-a-session), 클라우드 세션에서는 [여러 저장소](#run-long-running-tasks-in-the-cloud) 선택 |

2033| `--allowedTools`, `--disallowedTools` | 세션별 동등물 없음. [설정 파일](https://code.claude.com/docs/ko/settings.md)의 권한 규칙이 여전히 적용됩니다. |2042| `--allowedTools`, `--disallowedTools` | 세션별 동등물 없음. [설정 파일](https://code.claude.com/docs/ko/settings.md)의 권한 규칙이 여전히 적용됩니다. |

2034| `--verbose` | [상세 보기 모드](#switch-view-modes) |2043| `--verbose` | [상세 보기 모드](#switch-view-modes) |


2088* **에이전트 팀**: 공유 작업 목록에서 팀 리더로서의 Claude가 팀원에게 작업을 할당하는 조정된 팀은 [CLI](https://code.claude.com/docs/ko/agent-teams.md)에서 사용 가능하며, Desktop에서는 사용할 수 없습니다. 한 세션 내에서 다중 에이전트 작업의 경우 Desktop에서 실행되는 [동적 워크플로](https://code.claude.com/docs/ko/workflows.md)를 사용하세요. Claude는 또한 [다른 세션에 직접 메시지를 보내고 관리](#work-across-sessions)할 수 있습니다.2097* **에이전트 팀**: 공유 작업 목록에서 팀 리더로서의 Claude가 팀원에게 작업을 할당하는 조정된 팀은 [CLI](https://code.claude.com/docs/ko/agent-teams.md)에서 사용 가능하며, Desktop에서는 사용할 수 없습니다. 한 세션 내에서 다중 에이전트 작업의 경우 Desktop에서 실행되는 [동적 워크플로](https://code.claude.com/docs/ko/workflows.md)를 사용하세요. Claude는 또한 [다른 세션에 직접 메시지를 보내고 관리](#work-across-sessions)할 수 있습니다.

2089* **터미널 대화 명령**: 터미널에서 대화형 패널을 여는 기본 제공 명령은 Code 탭에서 다르게 작동합니다. [설정 파일](https://code.claude.com/docs/ko/settings.md)을 직접 편집하여 권한 규칙 및 구성을 관리하거나, 독립 실행형 CLI에서 명령을 실행합니다.2098* **터미널 대화 명령**: 터미널에서 대화형 패널을 여는 기본 제공 명령은 Code 탭에서 다르게 작동합니다. [설정 파일](https://code.claude.com/docs/ko/settings.md)을 직접 편집하여 권한 규칙 및 구성을 관리하거나, 독립 실행형 CLI에서 명령을 실행합니다.

2090 * 인수 형식이 없는 명령(예: `/permissions`)은 `isn't available in this environment`로 응답합니다.2099 * 인수 형식이 없는 명령(예: `/permissions`)은 `isn't available in this environment`로 응답합니다.

2091 * `/config`는 **설정 > Claude Code**를 엽니다.2100 * `/config`는 **설정 > Code** 또는 **설정 > Claude Code**를 엽니다.

2092 2101 

2093## 문제 해결2102## 문제 해결

2094 2103 

Details

135 135 

136로컬 예약 작업은 사용자의 머신에서 실행됩니다. Desktop은 앱이 열려 있는 동안 매분 일정을 확인하고, 열려 있는 수동 세션과 관계없이 작업을 실행할 시간이 되면 새 세션을 시작합니다. 각 작업은 API 트래픽을 분산하기 위해 예약된 시간 이후 몇 분의 작은 지연을 받습니다. 지연은 결정론적입니다. 동일한 작업은 항상 동일한 오프셋에서 시작됩니다.136로컬 예약 작업은 사용자의 머신에서 실행됩니다. Desktop은 앱이 열려 있는 동안 매분 일정을 확인하고, 열려 있는 수동 세션과 관계없이 작업을 실행할 시간이 되면 새 세션을 시작합니다. 각 작업은 API 트래픽을 분산하기 위해 예약된 시간 이후 몇 분의 작은 지연을 받습니다. 지연은 결정론적입니다. 동일한 작업은 항상 동일한 오프셋에서 시작됩니다.

137 137 

138작업은 desktop 앱이 실행 중이고 컴퓨터가 깨어 있을 때만 실행됩니다. 예약된 시간에 컴퓨터가 절전 모드 상태이면 해당 실행은 건너뜁니다. 유휴 절전을 방지하려면 **Settings > This computer > System**에서 **Keep computer awake**를 켭니다. 노트북 뚜껑을 닫으면 여전히 절전 모드로 전환됩니다.138작업은 desktop 앱이 실행 중이고 컴퓨터가 깨어 있을 때만 실행됩니다. 예약된 시간에 컴퓨터가 절전 모드 상태이면 해당 실행은 건너뜁니다. 유휴 절전을 방지하려면 **Settings > Desktop app** 또는 **Settings > This computer > System**에서 **Keep computer awake**를 켭니다. 노트북 뚜껑을 닫으면 여전히 절전 모드로 전환됩니다.

139 139 

140> [!NOTE]140> [!NOTE]

141>141>

env-vars.md +2 −0

Details

291| `CLAUDE_CODE_ENABLE_TASKS` | [작업 추적 도구가 있는 세션](https://code.claude.com/docs/ko/tools-reference.md#task-tool-availability)에서 Claude Code가 제공하는 작업 추적 도구를 선택합니다. 기본적으로 Claude Code는 Task 도구인 `TaskCreate`, `TaskUpdate`, `TaskGet`, `TaskList`를 제공합니다. 대신 레거시 `TodoWrite` 도구를 사용하려면 `0`으로 설정합니다. [작업 목록](https://code.claude.com/docs/ko/interactive-mode.md#task-list)을 참조하세요 |291| `CLAUDE_CODE_ENABLE_TASKS` | [작업 추적 도구가 있는 세션](https://code.claude.com/docs/ko/tools-reference.md#task-tool-availability)에서 Claude Code가 제공하는 작업 추적 도구를 선택합니다. 기본적으로 Claude Code는 Task 도구인 `TaskCreate`, `TaskUpdate`, `TaskGet`, `TaskList`를 제공합니다. 대신 레거시 `TodoWrite` 도구를 사용하려면 `0`으로 설정합니다. [작업 목록](https://code.claude.com/docs/ko/interactive-mode.md#task-list)을 참조하세요 |

292| `CLAUDE_CODE_ENABLE_TELEMETRY` | 메트릭과 로깅을 위한 OpenTelemetry 데이터 수집을 활성화하려면 `1`로 설정합니다. OTel 익스포터를 구성하기 전에 필요합니다. 셸, 사용자 설정 또는 관리형 설정에서 설정합니다. [프로젝트 및 로컬 설정](https://code.claude.com/docs/ko/settings-reference.md#variables-claude-code-ignores-in-env)에서는 무시됩니다. [모니터링](https://code.claude.com/docs/ko/monitoring-usage.md)을 참조하세요 |292| `CLAUDE_CODE_ENABLE_TELEMETRY` | 메트릭과 로깅을 위한 OpenTelemetry 데이터 수집을 활성화하려면 `1`로 설정합니다. OTel 익스포터를 구성하기 전에 필요합니다. 셸, 사용자 설정 또는 관리형 설정에서 설정합니다. [프로젝트 및 로컬 설정](https://code.claude.com/docs/ko/settings-reference.md#variables-claude-code-ignores-in-env)에서는 무시됩니다. [모니터링](https://code.claude.com/docs/ko/monitoring-usage.md)을 참조하세요 |

293| `CLAUDE_CODE_ENABLE_TODO_TOOLS` | 모든 모델에서 작업 추적 도구를 사용하려면 `1`로 설정합니다. 이 변수가 없으면 Claude Code는 [Task 도구 사용 가능 여부](https://code.claude.com/docs/ko/tools-reference.md#task-tool-availability)에 나열된 모델에서만 기본적으로 해당 도구를 제공합니다. `CLAUDE_CODE_ENABLE_TASKS`는 여전히 Task 도구 또는 `TodoWrite`를 선택합니다. Claude Code v2.1.233 이상이 필요합니다 |293| `CLAUDE_CODE_ENABLE_TODO_TOOLS` | 모든 모델에서 작업 추적 도구를 사용하려면 `1`로 설정합니다. 이 변수가 없으면 Claude Code는 [Task 도구 사용 가능 여부](https://code.claude.com/docs/ko/tools-reference.md#task-tool-availability)에 나열된 모델에서만 기본적으로 해당 도구를 제공합니다. `CLAUDE_CODE_ENABLE_TASKS`는 여전히 Task 도구 또는 `TodoWrite`를 선택합니다. Claude Code v2.1.233 이상이 필요합니다 |

294| `CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS` | `1`로 설정하면 `bypassPermissions` 모드에서 [위험한 `rm` 명령을 프롬프트 없이 실행](https://code.claude.com/docs/ko/permission-modes#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode)하며, 이는 파괴적인 삭제에 대한 안전 프롬프트를 제거합니다. 연결된 섹션에 이 변수가 효과가 없는 경우가 나열되어 있습니다. Claude Code는 [설정의 `env` 블록에서 이 변수를 무시하므로](https://code.claude.com/docs/ko/settings-reference#variables-claude-code-ignores-in-env) [Claude Code를 실행하는 환경에서 설정하세요](#set-variables-in-your-shell). Claude Code v2.1.311 이상이 필요합니다 |

294| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | 쿼리 루프가 유휴 상태가 된 후 자동으로 종료하기 전까지 기다리는 시간(밀리초)입니다. SDK 모드를 사용하는 자동화된 워크플로와 스크립트에 유용합니다 |295| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | 쿼리 루프가 유휴 상태가 된 후 자동으로 종료하기 전까지 기다리는 시간(밀리초)입니다. SDK 모드를 사용하는 자동화된 워크플로와 스크립트에 유용합니다 |

295| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md)을 활성화하려면 `1`로 설정합니다. 에이전트 팀은 실험적 기능이며 기본적으로 비활성화되어 있습니다 |296| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md)을 활성화하려면 `1`로 설정합니다. 에이전트 팀은 실험적 기능이며 기본적으로 비활성화되어 있습니다 |

296| `CLAUDE_CODE_EXTRA_BODY` | 모든 API 요청 본문의 최상위 수준에 병합할 JSON 객체입니다. Claude Code가 직접 노출하지 않는 제공업체별 매개변수를 전달할 때 유용합니다. 셸에서 export한 값은 `claude agents` 또는 `--bg`로 실행하는 [백그라운드 세션](https://code.claude.com/docs/ko/agent-view.md)에도 적용됩니다. v2.1.206 이전에는 백그라운드 세션이 셸에서 export한 값을 무시하고 백그라운드 수퍼바이저 프로세스가 상속한 값을 사용했습니다 |297| `CLAUDE_CODE_EXTRA_BODY` | 모든 API 요청 본문의 최상위 수준에 병합할 JSON 객체입니다. Claude Code가 직접 노출하지 않는 제공업체별 매개변수를 전달할 때 유용합니다. 셸에서 export한 값은 `claude agents` 또는 `--bg`로 실행하는 [백그라운드 세션](https://code.claude.com/docs/ko/agent-view.md)에도 적용됩니다. v2.1.206 이전에는 백그라운드 세션이 셸에서 export한 값을 무시하고 백그라운드 수퍼바이저 프로세스가 상속한 값을 사용했습니다 |


368| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | 이전 세션이 턴 도중에 종료된 경우 자동으로 재개하려면 `1`로 설정합니다. SDK 모드에서 SDK가 프롬프트를 다시 보내지 않아도 모델이 계속 진행하도록 사용됩니다. 끄려면 변수 설정을 해제하거나 `0`으로 설정합니다. VS Code 채팅 패널의 경우 [다시 로드 후 대화 계속하기](https://code.claude.com/docs/ko/vs-code.md#continue-conversations-after-a-reload)를 참조하세요 |369| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | 이전 세션이 턴 도중에 종료된 경우 자동으로 재개하려면 `1`로 설정합니다. SDK 모드에서 SDK가 프롬프트를 다시 보내지 않아도 모델이 계속 진행하도록 사용됩니다. 끄려면 변수 설정을 해제하거나 `0`으로 설정합니다. VS Code 채팅 패널의 경우 [다시 로드 후 대화 계속하기](https://code.claude.com/docs/ko/vs-code.md#continue-conversations-after-a-reload)를 참조하세요 |

369| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | 턴 중간에 종료된 세션이 재개 시 자동으로 계속되기 위한 마지막 트랜스크립트 메시지의 최대 경과 시간(밀리초)입니다. 마지막 메시지가 이 기준보다 오래되면 Claude Code는 `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` 자동 재개와 그 `CLAUDE_CODE_RESUME_PROMPT` 계속 메시지를 건너뛰고, 세션은 유휴 상태로 시작하여 사용자가 명시적으로 계속하게 됩니다. 설정하지 않거나 `0`이면 기준이 없지만, API 오류로 종료된 턴처럼 일부 턴은 마지막 메시지로부터 6시간 이내에만 재개됩니다. 양수 값은 그런 턴을 포함한 모든 턴에 기준을 적용하며, 음수 또는 숫자가 아닌 값은 1시간 기준을 적용합니다. 장기 실행 에이전트의 생성 스크립트는 이 값을 설정하여 오래된 트랜스크립트로 재시작할 때 오래된 프롬프트가 다시 실행되지 않도록 할 수 있습니다. Claude Code는 대화형 세션에서 대화를 상속한 [에이전트 뷰](https://code.claude.com/docs/ko/agent-view.md) 세션이 충돌한 후 재시작할 때 자체적으로 1시간 기준을 설정합니다. Claude Code v2.1.211 이상이 필요합니다 |370| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | 턴 중간에 종료된 세션이 재개 시 자동으로 계속되기 위한 마지막 트랜스크립트 메시지의 최대 경과 시간(밀리초)입니다. 마지막 메시지가 이 기준보다 오래되면 Claude Code는 `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` 자동 재개와 그 `CLAUDE_CODE_RESUME_PROMPT` 계속 메시지를 건너뛰고, 세션은 유휴 상태로 시작하여 사용자가 명시적으로 계속하게 됩니다. 설정하지 않거나 `0`이면 기준이 없지만, API 오류로 종료된 턴처럼 일부 턴은 마지막 메시지로부터 6시간 이내에만 재개됩니다. 양수 값은 그런 턴을 포함한 모든 턴에 기준을 적용하며, 음수 또는 숫자가 아닌 값은 1시간 기준을 적용합니다. 장기 실행 에이전트의 생성 스크립트는 이 값을 설정하여 오래된 트랜스크립트로 재시작할 때 오래된 프롬프트가 다시 실행되지 않도록 할 수 있습니다. Claude Code는 대화형 세션에서 대화를 상속한 [에이전트 뷰](https://code.claude.com/docs/ko/agent-view.md) 세션이 충돌한 후 재시작할 때 자체적으로 1시간 기준을 설정합니다. Claude Code v2.1.211 이상이 필요합니다 |

370| `CLAUDE_CODE_RESUME_PROMPT` | `CLAUDE_CODE_RESUME_INTERRUPTED_TURN`이 중단된 턴을 프롬프트를 다시 보내는 대신 계속할 때, 또는 `-p`로 [지연된 도구 호출](https://code.claude.com/docs/ko/hooks.md#defer-a-tool-call-for-later)을 재개할 때 Claude Code가 Claude에게 보내는 계속 메시지를 재정의합니다. 기본값은 `Continue from where you left off.`입니다. 빈 문자열은 기본값을 사용합니다 |371| `CLAUDE_CODE_RESUME_PROMPT` | `CLAUDE_CODE_RESUME_INTERRUPTED_TURN`이 중단된 턴을 프롬프트를 다시 보내는 대신 계속할 때, 또는 `-p`로 [지연된 도구 호출](https://code.claude.com/docs/ko/hooks.md#defer-a-tool-call-for-later)을 재개할 때 Claude Code가 Claude에게 보내는 계속 메시지를 재정의합니다. 기본값은 `Continue from where you left off.`입니다. 빈 문자열은 기본값을 사용합니다 |

372| `CLAUDE_CODE_RESUME_SHOWS_CUT_OFF_CALLS` | `1`로 설정하면 `CLAUDE_CODE_RESUME_INTERRUPTED_TURN`이 계속하는 턴에서 [중단된 도구 호출](https://code.claude.com/docs/ko/sessions.md#what-a-resumed-session-restores)을 잘린 것으로 표시한 채 유지합니다. 설정하지 않으면 턴이 계속되기 전에 해당 호출이 삭제됩니다. 서브에이전트, 스킬, 워크플로, 사람을 기다리는 도구에 대한 호출처럼 일부 호출은 계속 삭제됩니다. VS Code 채팅 패널의 경우 [다시 로드 후 대화 계속하기](https://code.claude.com/docs/ko/vs-code.md#continue-conversations-after-a-reload)를 참조하세요. Claude Code v2.1.309 이상이 필요합니다 |

371| `CLAUDE_CODE_RETRY_WATCHDOG` | eval 하네스, CI 작업, 원격 워커 등 무인 세션에서는 `1`로 설정합니다. `CLAUDE_CODE_MAX_RETRIES`회 시도 후 실패하는 대신 `429` 및 `529` 용량 오류를 무기한 재시도합니다. 표준 속도 요청이 지출 한도나 소진된 사용량 크레딧을 알리는 `429`를 받으면, 일정에 따라 재설정되는 [게이트웨이 지출 상한](https://code.claude.com/docs/ko/errors.md#spend-limit-reached)에서 온 경우라도 Claude Code는 즉시 실패합니다. v2.1.239 이전에는 watchdog이 이러한 오류를 무기한 재시도했습니다. 빠른 모드 요청의 경우 [속도 제한 처리](https://code.claude.com/docs/ko/fast-mode.md#handle-rate-limits)를 참조하세요. watchdog은 시도 사이에 최대 5분까지 백오프하거나, 응답에 속도 제한 재설정 시간이 포함된 경우 한도가 재설정될 때까지 대기하므로, 사용 한도에 도달한 세션은 남은 기간 동안 기다립니다. v2.1.199 이상에서는 서버 오류, 타임아웃, 끊긴 연결 등 다른 일시적 오류의 기본 재시도 횟수도 약 3시간의 백오프에 해당하는 300으로 늘리며, `CLAUDE_CODE_MAX_RETRIES`를 명시적으로 설정한 경우 15라는 상한을 제거합니다. Claude Code v2.1.186 이상이 필요합니다 |373| `CLAUDE_CODE_RETRY_WATCHDOG` | eval 하네스, CI 작업, 원격 워커 등 무인 세션에서는 `1`로 설정합니다. `CLAUDE_CODE_MAX_RETRIES`회 시도 후 실패하는 대신 `429` 및 `529` 용량 오류를 무기한 재시도합니다. 표준 속도 요청이 지출 한도나 소진된 사용량 크레딧을 알리는 `429`를 받으면, 일정에 따라 재설정되는 [게이트웨이 지출 상한](https://code.claude.com/docs/ko/errors.md#spend-limit-reached)에서 온 경우라도 Claude Code는 즉시 실패합니다. v2.1.239 이전에는 watchdog이 이러한 오류를 무기한 재시도했습니다. 빠른 모드 요청의 경우 [속도 제한 처리](https://code.claude.com/docs/ko/fast-mode.md#handle-rate-limits)를 참조하세요. watchdog은 시도 사이에 최대 5분까지 백오프하거나, 응답에 속도 제한 재설정 시간이 포함된 경우 한도가 재설정될 때까지 대기하므로, 사용 한도에 도달한 세션은 남은 기간 동안 기다립니다. v2.1.199 이상에서는 서버 오류, 타임아웃, 끊긴 연결 등 다른 일시적 오류의 기본 재시도 횟수도 약 3시간의 백오프에 해당하는 300으로 늘리며, `CLAUDE_CODE_MAX_RETRIES`를 명시적으로 설정한 경우 15라는 상한을 제거합니다. Claude Code v2.1.186 이상이 필요합니다 |

372| `CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS` | `CLAUDE_CODE_RETRY_WATCHDOG`가 설정된 경우 각 API 요청이 `429` 및 `529` 오류를 기다리며 보내는 최대 시간(밀리초)입니다. 이 시간이 지나면 다음 해당 오류에서 요청이 종료됩니다. 30분에 해당하는 `1800000`처럼 숫자로만 된 양의 정수를 지정합니다. 설정하지 않으면 대기 시간에 제한이 없습니다. Claude Code v2.1.295 이상이 필요합니다 |374| `CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS` | `CLAUDE_CODE_RETRY_WATCHDOG`가 설정된 경우 각 API 요청이 `429` 및 `529` 오류를 기다리며 보내는 최대 시간(밀리초)입니다. 이 시간이 지나면 다음 해당 오류에서 요청이 종료됩니다. 30분에 해당하는 `1800000`처럼 숫자로만 된 양의 정수를 지정합니다. 설정하지 않으면 대기 시간에 제한이 없습니다. Claude Code v2.1.295 이상이 필요합니다 |

373| `CLAUDE_CODE_RETRY_WATCHDOG_USAGE_LIMIT_RECHECK_MS` | `CLAUDE_CODE_RETRY_WATCHDOG`이 설정된 상태에서 요청이 [사용 한도](https://code.claude.com/docs/ko/errors.md#youve-hit-your-session-limit) 재설정을 기다리는 동안, 한도가 이미 해제되었는지 확인하는 최소 간격(밀리초)입니다. 확인 결과 한도가 해제되었으면 요청이 즉시 전송됩니다. 1분인 `60000`부터 3시간인 `10800000`까지의 정수를 숫자로만 입력합니다. 확인은 사용량 크레딧을 사용하지 않는 동안 claude.ai 구독의 세션 한도 또는 주간 한도에 대해서만 수행되며, `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`이 설정된 동안에는 수행되지 않습니다. 이 변수가 설정되지 않았거나 값이 해당 범위를 벗어나면 확인을 수행하지 않습니다. Claude Code v2.1.305 이상이 필요합니다 |375| `CLAUDE_CODE_RETRY_WATCHDOG_USAGE_LIMIT_RECHECK_MS` | `CLAUDE_CODE_RETRY_WATCHDOG`이 설정된 상태에서 요청이 [사용 한도](https://code.claude.com/docs/ko/errors.md#youve-hit-your-session-limit) 재설정을 기다리는 동안, 한도가 이미 해제되었는지 확인하는 최소 간격(밀리초)입니다. 확인 결과 한도가 해제되었으면 요청이 즉시 전송됩니다. 1분인 `60000`부터 3시간인 `10800000`까지의 정수를 숫자로만 입력합니다. 확인은 사용량 크레딧을 사용하지 않는 동안 claude.ai 구독의 세션 한도 또는 주간 한도에 대해서만 수행되며, `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`이 설정된 동안에는 수행되지 않습니다. 이 변수가 설정되지 않았거나 값이 해당 범위를 벗어나면 확인을 수행하지 않습니다. Claude Code v2.1.305 이상이 필요합니다 |

errors.md +200 −173

Details

146| `N sessions ended while this machine was offline — the environment was cleaned up on the server and can't be resumed.` | [네트워크](#sessions-ended-while-this-machine-was-offline) |146| `N sessions ended while this machine was offline — the environment was cleaned up on the server and can't be resumed.` | [네트워크](#sessions-ended-while-this-machine-was-offline) |

147| `Couldn't share the transcript.` | [네트워크](#couldnt-share-the-transcript) |147| `Couldn't share the transcript.` | [네트워크](#couldnt-share-the-transcript) |

148| `Couldn't send feedback` | [네트워크](#couldnt-send-feedback) |148| `Couldn't send feedback` | [네트워크](#couldnt-send-feedback) |

149| `Feedback payload too large. Try again without the transcript, or shorten the details.` | [네트워크](#feedback-payload-too-large) |

149| `MCP server "<name>" connection timed out. Your computer went to sleep or its clock changed while connecting.` | [네트워크](#mcp-server-connection-timed-out-during-a-sleep-or-clock-change) |150| `MCP server "<name>" connection timed out. Your computer went to sleep or its clock changed while connecting.` | [네트워크](#mcp-server-connection-timed-out-during-a-sleep-or-clock-change) |

150| `Prompt is too long` / `Input is too long for requested model` | [요청 오류](#prompt-is-too-long) |151| `Prompt is too long` / `Input is too long for requested model` | [요청 오류](#prompt-is-too-long) |

151| `Prompt is too long · automatic compaction failed:` | [요청 오류](#prompt-is-too-long) |152| `Prompt is too long · automatic compaction failed:` | [요청 오류](#prompt-is-too-long) |


335| `Failed to write the plan approval request to the lead's inbox — plan not submitted` | [도구 오류](#failed-to-write-to-a-teammate-inbox) |336| `Failed to write the plan approval request to the lead's inbox — plan not submitted` | [도구 오류](#failed-to-write-to-a-teammate-inbox) |

336| `Its agent definition was not restored: the folder its definition file came from is not trusted` | [도구 오류](#teammate-agent-definition-not-restored) |337| `Its agent definition was not restored: the folder its definition file came from is not trusted` | [도구 오류](#teammate-agent-definition-not-restored) |

337| `Only a teammate can approve a shutdown request` | [도구 오류](#only-a-teammate-can-approve-a-shutdown-request) |338| `Only a teammate can approve a shutdown request` | [도구 오류](#only-a-teammate-can-approve-a-shutdown-request) |

339| `A command-line deny rule cannot be handed to a teammate intact` | [도구 오류](#command-line-deny-rule-cannot-be-handed-to-a-teammate) |

338| `Message too large for cross-session delivery` | [도구 오류](#message-too-large-for-cross-session-delivery) |340| `Message too large for cross-session delivery` | [도구 오류](#message-too-large-for-cross-session-delivery) |

339| `Too many messages to this session just now` | [도구 오류](#too-many-messages-to-this-session-just-now) |341| `Too many messages to this session just now` | [도구 오류](#too-many-messages-to-this-session-just-now) |

340| `Cross-session message was dropped at the recipient session's inbox` | [도구 오류](#cross-session-message-dropped-at-the-inbox) |342| `Cross-session message was dropped at the recipient session's inbox` | [도구 오류](#cross-session-message-dropped-at-the-inbox) |


375| `This conversation is already open in another running Claude session` | [백그라운드 세션 오류](#this-session-is-running-in-another-terminal) |377| `This conversation is already open in another running Claude session` | [백그라운드 세션 오류](#this-session-is-running-in-another-terminal) |

376| `This session's saved conversation is no longer on disk` | [백그라운드 세션 오류](#this-sessions-saved-conversation-is-no-longer-on-disk) |378| `This session's saved conversation is no longer on disk` | [백그라운드 세션 오류](#this-sessions-saved-conversation-is-no-longer-on-disk) |

377| `Bypass permissions was requested at launch and ignored` | [백그라운드 세션에서 권한 우회가 무시됨](https://code.claude.com/docs/ko/permission-modes.md#bypass-permissions-ignored-in-a-background-session) |379| `Bypass permissions was requested at launch and ignored` | [백그라운드 세션에서 권한 우회가 무시됨](https://code.claude.com/docs/ko/permission-modes.md#bypass-permissions-ignored-in-a-background-session) |

378| `kept <id> — its worktree is still at <path>` | [백그라운드 세션 오류](#worktree-has-commits-that-are-not-pushed-anywhere) |380| `kept <id> — its worktree is still at <path>` | 메시지의 다음 줄에 푸시되지 않은 커밋이 언급된 경우 [백그라운드 세션 오류](#worktree-has-commits-that-are-not-pushed-anywhere), 그렇지 않으면 [세션 삭제 시 제거되는 항목](https://code.claude.com/docs/ko/agent-view.md#what-deleting-a-session-removes) |

379| `kept <id> — <n> unpushed commits on <branch>` | [백그라운드 세션 오류](#worktree-has-commits-that-are-not-pushed-anywhere) |381| `kept <id> — <n> unpushed commits on <branch>` | [백그라운드 세션 오류](#worktree-has-commits-that-are-not-pushed-anywhere) |

380| `kept <id> — worktree has commits that are not pushed anywhere` | [백그라운드 세션 오류](#worktree-has-commits-that-are-not-pushed-anywhere) |382| `kept <id> — worktree has commits that are not pushed anywhere` | [백그라운드 세션 오류](#worktree-has-commits-that-are-not-pushed-anywhere) |

381| `terminal host process died — press Enter to restart` / `This session's terminal host process died` | [백그라운드 세션 오류](#terminal-host-process-died) |383| `terminal host process died — press Enter to restart` / `This session's terminal host process died` | [백그라운드 세션 오류](#terminal-host-process-died) |


2188 2190 

2189### Couldn't send feedback2191### Couldn't send feedback

2190 2192 

2191`Couldn't send feedback`으로 시작하는 메시지는 [`/feedback`, `/bug` 또는 `/share` 대화 상자](https://code.claude.com/docs/ko/commands#all-commands)에서 제출한 보고서나 큐에 있는 [피드백 초안](https://code.claude.com/docs/ko/tools-reference.md#sendfeedback-tool-behavior)이 전송되지 않았음을 의미합니다. 콜론 뒤에 조직에 관한 문장이 이어지면 조직이 피드백을 거부하는 것이며, 같은 보고서는 같은 응답을 받습니다.2193`Couldn't send feedback`으로 시작하는 메시지는 [`/feedback`, `/bug` 또는 `/share` 대화 상자](https://code.claude.com/docs/ko/commands#all-commands)에서 제출한 보고서나 큐에 있는 [피드백 초안](https://code.claude.com/docs/ko/tools-reference.md#sendfeedback-tool-behavior)을 피드백 서비스가 확인하지 않았음을 의미합니다. 수신되지 않은 것으로 간주합니다. 콜론 뒤에 조직에 관한 문장이 이어지면 조직이 피드백을 거부하는 것이며, 같은 보고서는 같은 응답을 받습니다.

2192 2194 

2193다음 두 예시 중 첫 번째는 네트워크 실패이고 두 번째는 조직의 거부입니다:2195다음 두 예시 중 두 번째는 조직의 거부입니다:

2194 2196 

2195```text wrap theme={null}2197```text wrap theme={null}

2196Couldn't send feedback (couldn't reach the service). If it keeps failing, you can file at https://github.com/anthropics/claude-code/issues instead.2198Couldn't send feedback (couldn't reach the service). If it keeps failing, you can file at https://github.com/anthropics/claude-code/issues instead.


2203* **로그인되지 않음**: 메시지가 `: not signed in. Run /login, then retry.`로 이어집니다. `/login`을 실행한 다음 다시 보냅니다.2205* **로그인되지 않음**: 메시지가 `: not signed in. Run /login, then retry.`로 이어집니다. `/login`을 실행한 다음 다시 보냅니다.

2204* **조직의 거부**: 예를 들어 `: Feedback has not been enabled for your organization.` 또는 `: Feedback collection is not available for organizations with custom data retention policies.`입니다. 메시지에 `To report a bug, open an issue`가 추가되어 있으면 [github.com/anthropics/claude-code/issues](https://github.com/anthropics/claude-code/issues)에서 이슈를 엽니다. 큐에 있는 초안은 큐에 남아 있으며, [초안을 삭제](https://code.claude.com/docs/ko/tools-reference.md#discard-or-keep-a-draft)할 수 있습니다.2206* **조직의 거부**: 예를 들어 `: Feedback has not been enabled for your organization.` 또는 `: Feedback collection is not available for organizations with custom data retention policies.`입니다. 메시지에 `To report a bug, open an issue`가 추가되어 있으면 [github.com/anthropics/claude-code/issues](https://github.com/anthropics/claude-code/issues)에서 이슈를 엽니다. 큐에 있는 초안은 큐에 남아 있으며, [초안을 삭제](https://code.claude.com/docs/ko/tools-reference.md#discard-or-keep-a-draft)할 수 있습니다.

2205* **거부된 자격 증명**: 메시지가 `: the sign-in this session uses is not allowed to send feedback` 또는 `: the server did not accept the credentials this session uses`로 이어집니다. Claude Code 프롬프트에서 `/status`를 실행하여 이 세션이 보내는 로그인, 토큰 또는 API 키를 확인합니다.2207* **거부된 자격 증명**: 메시지가 `: the sign-in this session uses is not allowed to send feedback` 또는 `: the server did not accept the credentials this session uses`로 이어집니다. Claude Code 프롬프트에서 `/status`를 실행하여 이 세션이 보내는 로그인, 토큰 또는 API 키를 확인합니다.

2206* **`Couldn't send feedback` 바로 뒤의 `(request timed out)` 또는 `(couldn't reach the service)`**: 네트워크 실패입니다. 보고서 또는 큐에 있는 초안을 다시 보냅니다. 대화 상자는 텍스트를 유지하며, 큐에 있는 초안의 메시지에는 `The draft is still queued.`라고 표시됩니다. 다른 요청도 실패하는 경우, 네트워크 연결을 확인하고 [Unable to connect to API](#unable-to-connect-to-api)를 참조합니다. 계속 실패하면 [github.com/anthropics/claude-code/issues](https://github.com/anthropics/claude-code/issues)에서 보고서를 제출합니다.2208* **`Couldn't send feedback` 바로 뒤의 `(request timed out)` 또는 `(couldn't reach the service)`**: 보고서 또는 큐에 있는 초안을 다시 보냅니다. 대화 상자는 텍스트를 유지하며, 큐에 있는 초안의 메시지에는 `The draft is still queued.`라고 표시됩니다. 다른 요청도 실패하는 경우, 네트워크 연결을 확인하고 [Unable to connect to API](#unable-to-connect-to-api)를 참조합니다. 계속 실패하면 [github.com/anthropics/claude-code/issues](https://github.com/anthropics/claude-code/issues)에서 보고서를 제출합니다.

2207* **`Couldn't send feedback` 바로 뒤의 `(server returned <status>)` 또는 이유 없음**: 상태는 서비스의 응답 코드입니다. 서비스가 자체 메시지를 보낸 경우 `(server returned 403: Access Forbidden)`처럼 상태 뒤에 이어집니다. 계속 실패하면 [github.com/anthropics/claude-code/issues](https://github.com/anthropics/claude-code/issues)에서 보고서를 제출합니다.2209* **`Couldn't send feedback` 바로 뒤의 `(server returned <status>)` 또는 이유 없음**: 상태는 서비스의 응답 코드입니다. 서비스가 자체 메시지를 보낸 경우 `(server returned 403: Access Forbidden)`처럼 상태 뒤에 이어집니다. 계속 실패하면 [github.com/anthropics/claude-code/issues](https://github.com/anthropics/claude-code/issues)에서 보고서를 제출합니다.

2208 2210 

2209github.com/anthropics/claude-code의 이슈는 공개되므로, 이슈를 열 때 코드, 트랜스크립트 및 기타 기밀 정보는 제외합니다.2211github.com/anthropics/claude-code의 이슈는 공개되므로, 이슈를 열 때 코드, 트랜스크립트 및 기타 기밀 정보는 제외합니다.

2210 2212 

2211v2.1.281 이전에는 Remote Control **중지** 또는 긴급 교차 세션 메시지가 대화가 열려 있는 동안 도착했을 때 모든 전송이 이 메시지로 실패했습니다. 이러한 버전에서는 대화를 닫고, 다시 열고, 다시 보냅니다.2213v2.1.281 이전에는 Remote Control **중지** 또는 긴급 교차 세션 메시지가 대화가 열려 있는 동안 도착했을 때 모든 전송이 이 메시지로 실패했습니다. 이러한 버전에서는 대화를 닫고, 다시 열고, 다시 보냅니다.

2212 2214 

2215### Feedback payload too large

2216 

2217[피드백 초안](https://code.claude.com/docs/ko/tools-reference.md#sendfeedback-tool-behavior)의 [검토 화면](https://code.claude.com/docs/ko/tools-reference.md#review-and-edit-a-draft)에 표시되는 이 메시지는 서비스가 초안을 수락했다는 확인을 Claude Code가 받지 못했음을 의미합니다. 수신되지 않은 것으로 간주합니다. 초안은 `/feedback` 큐에 남아 있으므로 다시 보낼 수 있습니다.

2218 

2219```text wrap theme={null}

2220Feedback payload too large. Try again without the transcript, or shorten the details.

2221```

2222 

2223**수행할 작업:**

2224 

2225* 검토 화면에서 **Send transcript**를 `no`로 설정한 다음 초안을 다시 보냅니다. 세부 정보를 줄여도 최대 10 KB의 텍스트만 줄어들며, 이는 초안의 세부 정보에 담을 수 있는 전체 용량입니다.

2226 

2213### 절전 또는 시계 변경 중 MCP 서버 연결 시간 초과2227### 절전 또는 시계 변경 중 MCP 서버 연결 시간 초과

2214 2228 

2215이 메시지는 [MCP 서버](https://code.claude.com/docs/ko/mcp.md)에 대한 연결이 시간 초과되었으며, 연결 시도 중에 시스템 시계가 앞으로 건너뛴 것을 Claude Code가 발견했음을 의미합니다:2229이 메시지는 [MCP 서버](https://code.claude.com/docs/ko/mcp.md)에 대한 연결이 시간 초과되었으며, 연결 시도 중에 시스템 시계가 앞으로 건너뛴 것을 Claude Code가 발견했음을 의미합니다:


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

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

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

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

3285 3299 

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

3287 3301 


3476 3490 

3477### MCP server rejected the elicitation capability3491### MCP server rejected the elicitation capability

3478 3492 

3479Java MCP SDK 0.11.0부터 0.17.0까지의 버전으로 빌드된 MCP 서버가 연결을 거부한 경우입니다. 이러한 SDK 버전은 Claude Code가 핸드셰이크에서 선언하는 `form` 및 `url` [elicitation 모드](https://code.claude.com/docs/ko/mcp.md#elicitation-modes-claude-code-declares)를 파싱할 수 없습니다. `claude mcp list`는 서버 자체의 오류 대신 이 메시지와 함께 서버를 실패로 표시합니다:3493Java MCP SDK 0.11.0부터 0.17.0까지로 빌드된 MCP 서버가 연결을 거부했습니다. 이 SDK 버전은 Claude Code가 핸드셰이크에서 선언하는 `form` 및 `url` [elicitation 모드](https://code.claude.com/docs/ko/mcp.md#elicitation-modes-claude-code-declares)를 파싱할 수 없습니다. 메시지는 다음과 같습니다:

3480 3494 

3481```text theme={null}3495```text theme={null}

3482This server (Java MCP SDK 0.17.0 or older) rejected Claude Code's elicitation capability. Set "bareElicitationCapability": true for it, or upgrade to Java MCP SDK 0.17.1+ (Spring AI 1.0.7+ or 1.1.6+).3496This server (Java MCP SDK 0.17.0 or older) rejected Claude Code's elicitation capability. Set "bareElicitationCapability": true for it, or upgrade to Java MCP SDK 0.17.1+ (Spring AI 1.0.7+ or 1.1.6+).


3573 3587 

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

3575 3589 

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

3577* ``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)을 참조하세요3591* ``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)을 참조하세요

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

3579 3593 


3725 3739 

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

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

3728* **클론에 없던 기본 브랜치를 전달한 경우**: 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`와 함께 실패했습니다.3742* **클론에 없던 기본 브랜치를 전달한 경우**: 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` 오류와 함께 실패했습니다.

3729 3743 

3730**해결 방법:**3744**해결 방법:**

3731 3745 


4429 4443 

4430## 도구 오류4444## 도구 오류

4431 4445 

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

4433 4447 

4434### No such tool available4448### No such tool available

4435 4449 

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

4437 4451 

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

4439Error: No such tool available: <tool name>4453Error: No such tool available: <tool name>

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

4441```4455```

4442 4456 

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

4444 4458 

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

4446 4460 

4447**조치 방법:**4461**조치 방법:**

4448 4462 

4449* 한 번만 발생했다면 아무것도 할 필요가 없습니다. Claude가 오류를 읽고 턴이 계속됩니다.4463* 한 번만 발생했다면 별도로 조치할 필요가 없습니다. Claude가 오류를 읽고 턴이 계속 진행됩니다.

4450* 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)를 참조하세요.4464* 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)를 참조하세요.

4451 4465 

4452### MCP server connection closed before the tool call was answered4466### MCP server connection closed before the tool call was answered

4453 4467 

4454HTTP [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는 도구가 실행되었는지 알 수 없습니다.4468HTTP [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는 도구가 실행되었는지 알 수 없습니다.

4455 4469 

4456```text theme={null}4470```text theme={null}

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

4458```4472```

4459 4473 

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

4461 4475 

4462**조치 방법:**4476**조치 방법:**

4463 4477 

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

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

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

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

4468 4482 

4469### MCP server is disabled4483### MCP server is disabled

4470 4484 

4471도구 결과에 이 메시지가 표시되면 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는 결과 대신 이 텍스트를 받았습니다.4485도구 결과에 이 메시지가 표시되면 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는 결과 대신 다음 텍스트를 받았습니다.

4472 4486 

4473```text wrap theme={null}4487```text wrap theme={null}

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


4476 4490 

4477**조치 방법:**4491**조치 방법:**

4478 4492 

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

4480* Claude에게 서버의 도구가 필요하다면 Claude Code 프롬프트에서 `/mcp`로 서버를 다시 켭니다4494* Claude가 서버의 도구를 사용해야 한다면 Claude Code 프롬프트에서 `/mcp`로 서버를 다시 켭니다

4481* [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)를 호출하여 서버를 다시 켭니다4495* [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)를 호출하여 서버를 다시 켭니다

4482 4496 

4483### MCP tool call timed out with the server's question unanswered4497### 서버의 질문에 답변이 없어 MCP 도구 호출이 시간 초과됨

4484 4498 

4485[비대화형 모드](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)을 통해 입력을 요청했으며, 응답이 오기 전에 호출의 시간 제한이 만료되었습니다.4499[비대화형 모드](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)을 통해 입력을 요청했으나, 답변이 오기 전에 호출의 시간 제한이 끝났습니다.

4486 4500 

4487```text theme={null}4501```text theme={null}

4488MCP 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.4502MCP 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.


4492 4506 

4493**조치 방법:**4507**조치 방법:**

4494 4508 

4495* 서버의 요청에 응답하는 [`Elicitation` 훅](https://code.claude.com/docs/ko/hooks#elicitation)을 설정합니다4509* 서버의 요청에 답변하는 [`Elicitation` 훅](https://code.claude.com/docs/ko/hooks#elicitation)을 설정합니다

4496* TypeScript Agent SDK 애플리케이션에서는 [`onElicitation`](https://code.claude.com/docs/ko/agent-sdk/typescript#options) 콜백이 제한 시간이 만료되기 전에 응답을 반환하도록 합니다4510* TypeScript Agent SDK 애플리케이션에서는 [`onElicitation`](https://code.claude.com/docs/ko/agent-sdk/typescript#options) 콜백이 제한 시간이 끝나기 전에 답변을 반환하도록 합니다

4497* 응답할 시간을 더 확보하려면 서버의 구성 항목에서 더 긴 [`timeout`](https://code.claude.com/docs/ko/mcp#time-limits-on-mcp-tool-calls)을 밀리초 단위로 설정합니다. 예를 들어 10분이면 `"timeout": 600000`입니다4511* 답변할 시간을 더 주려면 서버의 구성 항목에서 더 긴 [`timeout`](https://code.claude.com/docs/ko/mcp#time-limits-on-mcp-tool-calls)을 밀리초 단위로 설정합니다. 예를 들어 10분이라면 `"timeout": 600000`으로 설정합니다

4498* 대신 대화형 세션에서 작업을 실행하고 서버의 [대화 상자](https://code.claude.com/docs/ko/mcp.md#respond-to-mcp-elicitation-requests)에 직접 응답합니다4512* 대신 대화형 세션에서 작업을 실행하고 서버의 [대화 상자](https://code.claude.com/docs/ko/mcp.md#respond-to-mcp-elicitation-requests)에 직접 답변합니다

4499 4513 

4500### Agent would be spawned with zero tools4514### Agent would be spawned with zero tools

4501 4515 

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

4503 4517 

4504* **Unrecognized**: 항목이 어떤 도구 이름과도 일치하지 않습니다. 보통 `Grep`을 `Grpe`로 쓰는 것과 같은 오타입니다.4518* **Unrecognized**: 항목이 어떤 도구 이름과도 일치하지 않습니다. 보통 `Grep`을 `Grpe`로 쓴 것과 같은 오타입니다.

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

4506* **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`가 이에 해당합니다.4520* **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`가 여기에 해당합니다.

4507 4521 

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

4509 4523 

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

4511 4525 


4515 4529 

4516**조치 방법:**4530**조치 방법:**

4517 4531 

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

4519* 연결되지 않은 서버의 MCP 도구처럼 세션에 없는 도구의 항목을 제거합니다4533* 연결되지 않은 서버의 MCP 도구처럼 세션에 없는 도구의 항목은 제거합니다

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

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

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

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

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

4525 4539 

4526### File is covered by a Read deny rule4540### File is covered by a Read deny rule

4527 4541 

4528[`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` 거부 규칙만 편집을 차단했습니다.4542[`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` 거부 규칙만 편집을 차단했습니다.

4529 4543 

4530```text theme={null}4544```text theme={null}

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

4532```4546```

4533 4547 

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

4535 4549 

4536**조치 방법:**4550**조치 방법:**

4537 4551 

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

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

4540 4554 

4541### Path cannot contain null bytes4555### Path cannot contain null bytes

4542 4556 

4543파일 도구 호출의 경로 또는 패턴 인수에 null 바이트가 포함되어 있었습니다. 파일 시스템과 검색 도구는 null 바이트를 허용하지 않습니다. Read, Write, Edit, NotebookEdit, Glob, Grep이 이를 검사하며, 메시지에는 도구와 인수의 이름이 표시됩니다.4557파일 도구 호출의 경로 또는 패턴 인수에 파일 시스템과 검색 도구가 허용하지 않는 null 바이트가 포함되어 있었습니다. Read, Write, Edit, NotebookEdit, Glob, Grep이 이를 검사하며, 메시지에는 도구와 인수가 표시됩니다.

4544 4558 

4545```text theme={null}4559```text theme={null}

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

4547```4561```

4548 4562 

4549도구 호출은 실패하고, Claude가 오류를 확인하며, 턴은 계속됩니다.4563도구 호출은 실패하고, Claude는 오류를 확인하며, 턴은 계속 진행됩니다.

4550 4564 

4551**조치 방법:**4565**조치 방법:**

4552 4566 

4553* 사용자가 할 일은 없습니다. 오류가 도구의 결과로 Claude에게 반환되며, 메시지 자체가 Claude에게 null 바이트를 제거하고 다시 시도하라고 안내합니다4567* 사용자 측에서 할 일은 없습니다. 오류는 도구의 결과로 Claude에 반환되며, 메시지 자체가 Claude에게 null 바이트를 제거하고 다시 시도하라고 안내합니다

4554 4568 

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

4556 4570 

4557### File is too large to read as an image4571### File is too large to read as an image

4558 4572 

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

4560 4574 

4561```text wrap theme={null}4575```text wrap theme={null}

4562File 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.4576File 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.

4563```4577```

4564 4578 

4565경로가 일반 파일이 아니라 파이프나 장치인 경우, Read는 128MB를 초과하는 데이터가 도착하면 중단하고 대신 다음 오류를 반환합니다.4579경로가 일반 파일이 아니라 파이프나 디바이스인 경우, Read는 128MB를 초과하는 데이터가 도착하면 읽기를 중단하고 대신 다음 오류를 반환합니다.

4566 4580 

4567```text wrap theme={null}4581```text wrap theme={null}

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


4570 4584 

4571**조치 방법:**4585**조치 방법:**

4572 4586 

4573* Claude가 `File is too large` 메시지에 따라 이미지 크기를 조정하거나 더 작은 사본을 읽었다면 아무것도 하지 않아도 됩니다4587* Claude가 `File is too large` 메시지에 따라 이미지 크기를 조정하거나 더 작은 사본을 읽었다면 별도로 조치할 필요가 없습니다

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

4575* 경로가 파이프나 장치였다면 대신 일반 이미지 파일을 Claude에게 지정합니다4589* 경로가 파이프나 디바이스였다면 대신 일반 이미지 파일을 Claude에게 지정합니다

4576 4590 

4577### subagent\_type is required4591### subagent\_type is required

4578 4592 


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

4581```4595```

4582 4596 

4583Claude가 `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)가 없습니다. 다음 두 가지 설정에서 이런 상황이 발생합니다.4597Claude가 `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)가 없습니다. 이는 다음 두 가지 설정에서 발생합니다.

4584 4598 

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

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

4587 4601 

4588**조치 방법:**4602**조치 방법:**

4589 4603 

4590* 대개는 아무것도 하지 않아도 됩니다. 메시지에 세션에 있는 서브에이전트가 나열되므로 Claude가 그중 하나로 재시도할 수 있습니다4604* 보통은 조치할 필요가 없습니다. 메시지에 세션에서 사용할 수 있는 서브에이전트가 나열되므로 Claude가 그중 하나로 재시도할 수 있습니다

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

4592 4606 

4593v2.1.235 이전에는 같은 호출이 `Agent type 'general-purpose' not found`로 실패했습니다.4607v2.1.235 이전에는 같은 호출이 `Agent type 'general-purpose' not found`로 실패했습니다.

4594 4608 

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

4596 4610 

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

4598 4612 

4599```text theme={null}4613```text theme={null}

4600Error: 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.4614Error: 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.

4601```4615```

4602 4616 

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

4604 4618 

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

4606 4620 

4607Claude의 쓰기로 파일이 제한을 넘지는 않았지만 제한에 가까워지면, Claude Code는 이 오류 대신 인덱스를 압축하라는 더 가벼운 알림을 반환합니다.4621Claude의 쓰기로 파일이 제한에 가까워졌지만 넘지 않은 경우에는, Claude Code가 이 오류 대신 인덱스를 압축하라는 더 완곡한 알림을 반환합니다.

4608 4622 

4609**조치 방법:**4623**조치 방법:**

4610 4624 

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

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

4613 4627 

4614### pkill pattern matches the Claude Code process4628### pkill 패턴이 Claude Code 프로세스와 일치함

4615 4629 

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

4617 4631 

4618```text theme={null}4632```text theme={null}

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

4620```4634```

4621 4635 

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

4623 4637 

4624**조치 방법:**4638**조치 방법:**

4625 4639 

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

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

4628 4642 

4629### Failed to write to a teammate's inbox4643### Failed to write to a teammate's inbox

4630 4644 

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

4632 4646 

4633오류는 터미널의 배너가 아니라 보내는 에이전트의 도구 결과에 표시되며, 오류 텍스트는 Claude에게 다시 시도하라고 안내합니다.4647오류는 터미널의 배너가 아니라 보낸 에이전트의 도구 결과에 표시되며, 오류 텍스트가 Claude에게 다시 시도하라고 안내합니다.

4634 4648 

4635```text theme={null}4649```text theme={null}

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

4637```4651```

4638 4652 

4639구조화된 [에이전트 팀](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` 메시지입니다. 이 메시지와 다른 두 프로토콜 메시지는 각각 고유한 메시지 텍스트와 결과를 가집니다.4653구조화된 [에이전트 팀](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` 메시지입니다. 이 메시지와 다른 두 프로토콜 메시지는 각각 고유한 메시지 텍스트와 결과를 가집니다.

4640 4654 

4641* `Failed to write the plan approval request to the lead's inbox — plan not submitted; try again`: 팀원의 플랜이 리더에게 전달되지 않았으며, 재제출이 성공할 때까지 팀원은 플랜 모드에 머뭅니다4655* `Failed to write the plan approval request to the lead's inbox — plan not submitted; try again`: 팀원의 플랜이 리드에게 전달되지 않았으며, 재제출이 성공할 때까지 팀원은 플랜 모드에 머뭅니다

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

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

4644 4658 

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

4646 4660 

4647**조치 방법:**4661**조치 방법:**

4648 4662 

4649* 보낸 쪽에 메시지를 다시 보내도록 요청합니다. 받은편지함 잠금 경합은 일시적이며 재시도하면 해소됩니다4663* 보낸 쪽에 메시지를 다시 보내도록 요청합니다. 받은 편지함 잠금 경합은 일시적이며 재시도하면 해결됩니다

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

4651 4665 

4652### Teammate's agent definition was not restored4666### Teammate's agent definition was not restored

4653 4667 

4654Claude가 중지된 [에이전트 팀](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)를 다시 적용하지 않고 팀원을 복원했습니다. 이 알림은 보내는 에이전트의 도구 결과에서 재개 보고 뒤에 나타나며 이유를 알려 줍니다. 정의 파일이 신뢰가 저장되지 않은 폴더에서 온 경우에는 다음과 같이 표시됩니다.4668Claude가 중지된 [에이전트 팀](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)를 다시 적용하지 않고 팀원을 복귀시켰습니다. 이 알림은 보낸 에이전트의 도구 결과에서 재개 보고 뒤에 표시되며 이유를 알려 줍니다. 정의 파일이 신뢰가 저장되지 않은 폴더에서 온 경우 다음과 같이 표시됩니다.

4655 4669 

4656```text wrap theme={null}4670```text wrap theme={null}

4657Its 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.4671Its 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.

4658```4672```

4659 4673 

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

4661 4675 

4662**조치 방법:**4676**조치 방법:**

4663 4677 

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

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

4666 4680 

4667### Only a teammate can approve a shutdown request4681### Only a teammate can approve a shutdown request

4668 4682 

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

4670 4684 

4671```text wrap theme={null}4685```text wrap theme={null}

4672Only 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.4686Only 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.


4674 4688 

4675**조치 방법:**4689**조치 방법:**

4676 4690 

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

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

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

4694 

4695### A command-line deny rule cannot be handed to a teammate intact

4696 

4697이 메시지는 Claude Code가 [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md)에서 [분할 창](https://code.claude.com/docs/ko/agent-teams.md#choose-a-display-mode) 팀원을 시작하지 않았다는 뜻입니다. Claude Code는 리드의 명령줄 거부 규칙을 분할 창 팀원 자체의 명령줄로 전달하며, 팀원이 그중 하나를 다르게 해석하게 될 경우 중단합니다.

4698 

4699```text wrap theme={null}

4700A command-line deny rule cannot be handed to a teammate intact, so the teammate would not enforce it — spawn aborted

4701```

4702 

4703**조치 방법:**

4704 

4705* 리드 세션에서 `/config`를 실행하고 **Teammate mode**를 `in-process`로 설정한 다음, Claude에게 팀원을 다시 시작하도록 요청합니다. 규칙을 찾거나 리드를 다시 시작할 필요는 없습니다. 인프로세스 팀원은 [리드의 실시간 거부 규칙에 따라 실행됩니다](https://code.claude.com/docs/ko/agent-teams.md#permissions).

4706* `/config`는 선택 사항을 사용자 설정에 저장하므로, 사용자 설정에서 [`teammateMode`](https://code.claude.com/docs/ko/settings-reference#teammatemode)를 가져오는 이후 세션도 팀원을 인프로세스로 시작합니다. 이후 세션에서 분할 창으로 돌아가려면 **Teammate mode**를 이전에 사용하던 `auto`, `tmux` 또는 `iterm2` 중 하나로 설정합니다.

4680 4707 

4681### Message too large for cross-session delivery4708### Message too large for cross-session delivery

4682 4709 

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

4684 4711 

4685```text wrap theme={null}4712```text wrap theme={null}

4686Failed 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.4713Failed 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.


4690 4717 

4691**조치 방법:**4718**조치 방법:**

4692 4719 

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

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

4695 4722 

4696v2.1.235 이전에는 Claude Code가 크기 초과 메시지를 보낸 것으로 보고했습니다. 받는 세션은 이를 읽지 않고 버렸습니다.4723v2.1.235 이전에는 Claude Code가 너무 큰 메시지를 전송된 것으로 보고했습니다. 수신 세션은 이를 읽지 않고 폐기했습니다.

4697 4724 

4698### Too many messages to this session just now4725### Too many messages to this session just now

4699 4726 

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

4701 4728 

4702```text wrap theme={null}4729```text wrap theme={null}

4703Failed 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.4730Failed 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.


4705 4732 

4706**조치 방법:**4733**조치 방법:**

4707 4734 

4708* 대개는 아무것도 하지 않아도 됩니다. Claude가 남은 내용을 하나의 메시지로 묶거나, 더 보내기 전에 기다립니다4735* 보통은 조치할 필요가 없습니다. Claude가 남은 콘텐츠를 하나의 메시지로 묶거나, 잠시 기다린 후 더 보냅니다

4709* 사용자가 직접 연속 전송을 유도했다면 Claude에게 남은 내용을 하나의 메시지로 합치도록 요청합니다4736* 연속 전송을 직접 요청했다면 Claude에게 남은 내용을 하나의 메시지로 합치도록 요청합니다

4710 4737 

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

4712 4739 

4713### Cross-session message was dropped at the recipient session's inbox4740### Cross-session message was dropped at the recipient session's inbox

4714 4741 

4715Claude가 이 머신의 다른 세션에 [세션 간 메시지](https://code.claude.com/docs/ko/cross-session-messaging.md)를 보냈고, 해당 세션의 Claude가 읽기 전에 그 세션의 받은편지함이 메시지를 버렸습니다. 이 줄에는 수신자가 표시되며, 수신자가 이유를 제공한 경우 대시 뒤에 이유가 추가됩니다.4742Claude가 이 머신의 다른 세션에 [세션 간 메시지](https://code.claude.com/docs/ko/cross-session-messaging.md)를 보냈지만, 해당 세션의 Claude가 읽기 전에 그 세션의 받은 편지함이 메시지를 폐기했습니다. 이 줄에는 수신자가 표시되며, 수신자가 이유를 제공한 경우 대시 뒤에 이유가 추가됩니다.

4716 4743 

4717```text wrap theme={null}4744```text wrap theme={null}

4718Cross-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.4745Cross-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.

4719```4746```

4720 4747 

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

4722 4749 

4723대시 뒤에는 다음 이유 중 하나 이상이 표시됩니다.4750대시 뒤에는 다음 이유 중 하나 이상이 표시됩니다.

4724 4751 

4725* `its queue of undelivered peer messages was full`: 수신자가 다른 세션에서 온 미전달 메시지를 이미 대기열이 허용하는 최대 개수만큼 보유하고 있었습니다4752* `its queue of undelivered peer messages was full`: 수신자가 이미 큐가 허용하는 만큼의 다른 세션 미전달 메시지를 보유하고 있었습니다

4726* `you sent faster than that session accepts`: 보낸 세션의 메시지가 수신자가 한 발신자로부터 수용하는 것보다 빠르게 도착했습니다4753* `you sent faster than that session accepts`: 전송한 세션의 메시지가 수신자가 한 발신자로부터 받아들이는 속도보다 빠르게 도착했습니다

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

4728* `a relay loop between sessions was cut`: 세션들이 서로 메시지를 주고받는 체인을 이어 가는 메시지였으며, 체인이 수신자를 너무 많이 거쳤거나 너무 길어졌습니다4755* `a relay loop between sessions was cut`: 메시지가 세션끼리 서로 메시지를 주고받는 연쇄를 이어 갔고, 그 연쇄가 수신자를 너무 여러 번 거쳤거나 너무 길어졌습니다

4729 4756 

4730**조치 방법:**4757**조치 방법:**

4731 4758 

4732* 수신자가 버려진 메시지를 전혀 보지 못했다고 가정합니다. Claude Code도 Claude에게 같은 내용을 알리며, 즉시 다시 보내는 대신 여전히 중요한 내용을 나중에 하나의 메시지에 포함하도록 안내합니다4759* 수신자가 폐기된 메시지를 보지 못했다고 가정합니다. Claude Code도 Claude에게 같은 내용을 알리며, 즉시 다시 보내는 대신 여전히 중요한 내용을 이후 메시지 하나에 포함하라고 안내합니다

4733* 세션들이 서로 자주 업데이트를 보낸다면, Claude에게 세션이 작업을 마쳤을 때 보고서 하나를 보내는 식으로 더 적고 더 큰 메시지를 보내도록 요청합니다4760* 세션들이 서로 업데이트를 자주 보낸다면 Claude에게 세션이 작업을 마쳤을 때 보고서 하나를 보내는 식으로 더 적고 큰 메시지를 보내도록 요청합니다

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

4735 4762 

4736v2.1.238 이전에는 수신자의 받은편지함이 메시지를 버려도 보낸 세션에 아무런 보고가 없었습니다.4763v2.1.238 이전에는 수신자의 받은 편지함이 메시지를 폐기해도 전송한 세션이 아무런 보고를 받지 못했습니다.

4737 4764 

4738### Refusing to send a cross-session message4765### 세션 간 메시지 전송 거부

4739 4766 

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

4741 4768 

4742```text theme={null}4769```text theme={null}

4743Failed to send to api-worker: Refusing to send: reply target is a symlink4770Failed to send to api-worker: Refusing to send: reply target is a symlink


4745 4772 

4746`Refusing to send:` 뒤의 텍스트는 실패한 검사를 나타냅니다.4773`Refusing to send:` 뒤의 텍스트는 실패한 검사를 나타냅니다.

4747 4774 

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

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

4750 4777 

4751**조치 방법:**4778**조치 방법:**

4752 4779 

4753* 대개는 아무것도 하지 않아도 됩니다. 이 검사는 메시지가 지정된 세션 이외의 엔드포인트에 도달하지 않도록 막아 주며, 아무것도 전송되지 않았습니다4780* 보통은 조치할 필요가 없습니다. 이 검사는 메시지가 지정된 세션 이외의 엔드포인트에 도달하지 않도록 하며, 아무것도 전송되지 않았습니다

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

4755 4782 

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

4757 4784 

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

4759 4786 

4760```text wrap theme={null}4787```text wrap theme={null}

4761Refusing 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.4788Refusing 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.

4762```4789```

4763 4790 

4764각 거부 메시지에는 이유가 표시됩니다.4791각 거부에는 이유가 표시됩니다.

4765 4792 

4766* `its symlink resolution changed after permission was checked`: 권한 검사와 작업 사이에 경로상의 심볼릭 링크 또는 Grep이나 Glob 검색 루트의 심볼릭 링크가 교체되었습니다. 읽기 거부의 경우 괄호 안의 문구가 어떤 비교가 실패했는지 나타냅니다.4793* `its symlink resolution changed after permission was checked`: 권한 검사와 작업 사이에 경로상의 심볼릭 링크 또는 Grep이나 Glob 검색 루트의 심볼릭 링크가 교체되었습니다. 읽기 거부에서는 괄호 안의 문구가 어떤 비교가 실패했는지 알려 줍니다.

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

4768* `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가 경로를 디스크상의 최종 위치까지 따라갈 수 없었습니다4795* `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가 경로를 디스크상의 최종 위치까지 따라갈 수 없었습니다

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

4770* `Refusing to write through symlink: <path>. Resolve the symlink and pass the real target path explicitly.`: 심볼릭 링크된 `.mcp.json`에 대한 쓰기처럼, 다른 쓰기 주체가 파일을 열 때 같은 조건이 감지된 경우입니다4797* `Refusing to write through symlink: <path>. Resolve the symlink and pass the real target path explicitly.`: 심볼릭 링크된 `.mcp.json`에 쓰는 경우처럼 다른 쓰기 주체가 파일을 열 때 감지된 같은 상황입니다

4771* `Refusing to write into symlinked directory: <path>`: 파일을 담고 있는 디렉터리 자체가 심볼릭 링크입니다. 예를 들어 프로젝트의 `.claude/` 디렉터리가 다른 위치로 링크된 경우입니다4798* `Refusing to write into symlinked directory: <path>`: 다른 위치에 링크된 프로젝트의 `.claude/` 디렉터리처럼 파일을 담고 있는 디렉터리 자체가 심볼릭 링크입니다

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

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

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

4775* `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` 바이너리를 절대 경로로 해석할 수 없어서, 거부 규칙이 적용되지 않는 검색을 실행하는 대신 작업 디렉터리 외부의 검색을 거부합니다4802* `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` 바이너리를 절대 경로로 해석할 수 없었기 때문에, 거부 규칙이 적용되지 않는 검색을 실행하는 대신 작업 디렉터리 외부의 검색을 거부합니다

4776 4803 

4777**조치 방법:**4804**조치 방법:**

4778 4805 

4779* 대개는 아무것도 하지 않아도 됩니다. 거부 메시지는 도구 결과로 Claude에게 전달되며, 거부된 작업은 실행되지 않습니다4806* 보통은 조치할 필요가 없습니다. 거부는 도구 결과로 Claude에 전달되며, 거부된 작업은 실행되지 않습니다

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

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

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

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

4784 4811 

4785v2.1.251 이전에는 Claude Code가 파일 쓰기에 대해서만 경로 해석을 다시 확인했기 때문에, 권한 검사 후 교체된 링크가 아무런 메시지 없이 읽기나 검색을 다른 위치로 리디렉션할 수 있었습니다. 이 중 상위 디렉터리, 심볼릭 링크 경유, 심볼릭 링크된 디렉터리에 대한 쓰기 거부만 이전 버전에서도 나타납니다.4812v2.1.251 이전에는 Claude Code가 파일 쓰기에 대해서만 경로 해석을 다시 확인했기 때문에, 권한 검사 후 교체된 링크가 메시지 없이 읽기나 검색을 다른 위치로 리디렉션할 수 있었습니다. 이 중 이전 버전에서도 표시되는 것은 상위 디렉터리, 심볼릭 링크 경유, 심볼릭 링크된 디렉터리에 대한 쓰기 거부뿐입니다.

4786 4813 

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

4788 4815 

4789### Task output swap refused4816### Task output swap refused

4790 4817 

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

4792 4819 

4793```text wrap theme={null}4820```text wrap theme={null}

4794task 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.4821task 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.

4795```4822```

4796 4823 

4797괄호 안의 텍스트는 실패한 검사를 나타냅니다. `output symlink was re-pointed`, `output file identity changed`, `not a regular file` 같은 이유는 모두 같은 상태를 보고합니다. 즉, 출력 경로 또는 그 경로상의 무언가가 더 이상 Claude Code가 만든 파일이 아닙니다. 일부 이유에만 `To recover:` 문장이 포함됩니다.4824괄호 안의 텍스트는 실패한 검사를 나타냅니다. `output symlink was re-pointed`, `output file identity changed`, `not a regular file` 같은 이유는 모두 같은 상황을 보고합니다. 즉, 출력 경로 자체 또는 그 경로상의 무언가가 더 이상 Claude Code가 만든 파일이 아닙니다. 일부 이유에만 `To recover:` 문장이 포함됩니다.

4798 4825 

4799명령이 아직 실행 중일 때 검사가 실패하면 Claude Code는 명령을 중지하며, 결과에 다음과 같이 보고됩니다.4826명령이 아직 실행 중일 때 검사가 실패하면 Claude Code는 명령을 중지하며, 결과에 다음과 같이 보고됩니다.

4800 4827 


4804 4831 

4805**조치 방법:**4832**조치 방법:**

4806 4833 

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

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

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

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

4811 4838 

4812### Disk full or disk quota used up4839### Disk full or disk quota used up

4813 4840 

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

4815 4842 

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

4817 4844 

4818```text wrap theme={null}4845```text wrap theme={null}

4819The 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.4846The 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.

4820```4847```

4821 4848 

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

4823 4850 

4824```text wrap theme={null}4851```text wrap theme={null}

4825Disk 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.4852Disk 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.


4827 4854 

4828**조치 방법:**4855**조치 방법:**

4829 4856 

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

4831* **`Disk full: this computer's volume` 또는 `disk is full (ENOSPC)`**: 해당 볼륨의 어디에서든 필요 없는 파일을 삭제합니다4858* **`Disk full: this computer's volume` 또는 `disk is full (ENOSPC)`**: 해당 볼륨의 아무 위치에서나 필요 없는 파일을 삭제합니다

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

4833* **`Nearly out of inodes:`**: 해당 볼륨에서 많은 파일을 삭제합니다. 각 파일은 크기와 관계없이 inode를 하나씩 차지하므로, 크기가 아니라 개수가 중요합니다4860* **`Nearly out of inodes:`**: 해당 볼륨에서 많은 파일을 삭제합니다. 파일은 크기와 관계없이 각각 inode 하나를 차지하므로, 크기가 아니라 파일 개수가 중요합니다

4834* 또는 [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/ko/env-vars)를 여유 공간이 있는 볼륨의 디렉터리로 설정하여 Claude Code를 다시 시작합니다4861* 또는 [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/ko/env-vars)를 여유 공간이 있는 볼륨의 디렉터리로 설정하여 Claude Code를 다시 시작합니다

4835* 그런 다음 Claude에게 명령을 다시 실행하도록 합니다4862* 그런 다음 Claude에게 명령을 다시 실행하도록 합니다

4836 4863 


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

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

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

4842* `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`에 설정된 디렉터리를 확인합니다4869* `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`에 설정된 디렉터리가 있는 볼륨을 확인합니다

4843 4870 

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

4845 4872 

4846### git is not installed on this Mac4873### git is not installed on this Mac

4847 4874 

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

4849 4876 

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

4851 4878 

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

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


4855 4882 

4856**조치 방법:**4883**조치 방법:**

4857 4884 

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

4859 4886 

4860### File is not valid UTF-84887### File is not valid UTF-8

4861 4888 

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

4863 4890 

4864```text wrap theme={null}4891```text wrap theme={null}

4865File 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.4892File 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.

4866```4893```

4867 4894 

4868검사는 파일의 바이트 전체를 대상으로 하므로, UTF-8이어야 하는 파일도 잘못된 바이트 시퀀스가 하나라도 포함되어 있으면 이 메시지가 표시됩니다.4895검사는 파일의 바이트 전체를 대상으로 하므로, UTF-8로 의도된 파일도 잘못된 바이트 시퀀스가 하나라도 포함되어 있으면 이 메시지를 받습니다.

4869 4896 

4870**조치 방법:**4897**조치 방법:**

4871 4898 

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

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

4874 4901 

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

4876 4903 

4877### The source file is not valid UTF-8 text4904### The source file is not valid UTF-8 text

4878 4905 

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

4880 4907 

4881```text wrap theme={null}4908```text wrap theme={null}

4882file_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.4909file_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.


4884file_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.4911file_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.

4885```4912```

4886 4913 

4887Claude Code는 파일을 UTF-8로 디코딩하며, 파일이 리틀 엔디언 UTF-16 바이트 순서 표시로 시작하면 UTF-16으로 디코딩합니다. 이러한 UTF-16 파일이 디코딩되지 않으면 첫 번째 메시지에 `UTF-16`이 표시되지만, 여전히 파일을 UTF-8로 다시 작성하라고 안내합니다. 표시된 위치 뒤에 다른 위치가 더 있으면, 메시지는 위치 뒤에 `(+2 more)` 같은 개수를 덧붙입니다.4914Claude Code는 파일을 UTF-8로 디코딩하며, 파일이 리틀 엔디언 UTF-16 바이트 순서 표시로 시작하는 경우에는 UTF-16으로 디코딩합니다. 이러한 UTF-16 파일을 디코딩할 수 없으면 첫 번째 메시지에 `UTF-16`이 표시되며, 여전히 파일을 UTF-8로 다시 작성하라고 안내합니다. 표시된 위치 뒤에 더 많은 위치가 있으면 메시지는 위치 뒤에 `(+2 more)` 같은 개수를 추가합니다.

4888 4915 

4889**조치 방법:**4916**조치 방법:**

4890 4917 

4891* 대개는 아무것도 하지 않아도 됩니다. Claude가 파일을 다시 작성하고 다시 게시합니다4918* 보통은 조치할 필요가 없습니다. Claude가 파일을 다시 작성하고 다시 게시합니다

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

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

4894 4921 

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

4896 4923 

4897### Not published: that file is on a network share4924### Not published: that file is on a network share

4898 4925 

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

4900 4927 

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

4902* macOS 또는 Linux에서는 `/net/<host>/page.html` 같은 자동 마운트 경로4929* macOS 또는 Linux의 경우, `/net/<host>/page.html` 같은 자동 마운트 경로

4903 4930 

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

4905 4932 

4906```text theme={null}4933```text theme={null}

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


4909 4936 

4910**조치 방법:**4937**조치 방법:**

4911 4938 

4912* 정확히 그 파일이 필요하지 않다면 아무것도 하지 않아도 됩니다. 메시지가 Claude에게 대신 세션의 폴더에 있는 파일을 게시하도록 안내합니다4939* 그 파일이 꼭 필요한 것이 아니라면 조치할 필요가 없습니다. 메시지가 Claude에게 대신 세션의 폴더에 있는 파일을 게시하라고 안내합니다

4913* 정확히 그 파일을 게시하려면 로컬 디스크의 폴더로 복사한 다음 다시 요청합니다4940* 그 파일을 그대로 게시하려면 로컬 디스크의 폴더로 복사한 다음 다시 요청합니다

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

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

4916 4943 

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

4918 4945 

4919Artifact 호출 아래에 표시되는 이 빨간 줄은 Claude Code가 반복된 게시를 중지했다는 의미입니다. [아티팩트](https://code.claude.com/docs/ko/artifacts.md)는 업데이트되지 않았으며, Claude가 게시에 사용하는 파일에도 아무것도 쓰지 않았습니다. Claude가 게시하지 않고 멈추지 않는 한 아무것도 할 필요가 없습니다.4946Artifact 호출 아래의 이 빨간 줄은 Claude Code가 반복된 게시를 중단했다는 뜻입니다. [아티팩트](https://code.claude.com/docs/ko/artifacts.md)는 업데이트되지 않았으며, Claude가 게시하는 원본 파일에도 아무것도 쓰이지 않았습니다. Claude가 게시하지 않고 멈춘 경우에만 조치가 필요하며, 그렇지 않다면 별도로 조치할 필요가 없습니다.

4920 4947 

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

4922 4949 

4923```text wrap theme={null}4950```text wrap theme={null}

4924Not 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.4951Not 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.


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

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

4934 4961 

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

4936 4963 

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

4938 4965 

4939거부 메시지는 Artifact 도구 결과에 표시되며, 파일을 전혀 검사할 수 없었던 경우에는 대신 그 실패를 알려 줍니다.4966거부는 Artifact 도구 결과에 표시되며, 파일을 전혀 검사할 수 없었던 경우에는 대신 그 실패를 알려 줍니다.

4940 4967 

4941```text wrap theme={null}4968```text wrap theme={null}

4942Reading 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.4969Reading 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.


4946 4973 

4947**조치 방법:**4974**조치 방법:**

4948 4975 

4949* 대개는 아무것도 하지 않아도 됩니다. 메시지가 Claude에게 대신 연결된 폴더 안의 일반 파일을 사용하도록 안내합니다4976* 보통은 조치할 필요가 없습니다. 메시지가 Claude에게 대신 연결된 폴더 안의 일반 파일을 사용하라고 안내합니다

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

4951 4978 

4952### WebFetch cannot fetch localhost4979### WebFetch cannot fetch localhost

4953 4980 

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

4955 4982 

4956```text wrap theme={null}4983```text wrap theme={null}

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


4959 4986 

4960**조치 방법:**4987**조치 방법:**

4961 4988 

4962* 대개는 아무것도 하지 않아도 됩니다. 메시지가 Claude에게 로컬 및 인트라넷 서버에 접근할 수 있는 Bash 도구의 `curl`을 사용하도록 안내합니다4989* 보통은 조치할 필요가 없습니다. 메시지가 Claude에게 로컬 및 인트라넷 서버에 접근할 수 있는 Bash 도구를 통한 `curl`을 안내합니다

4963 4990 

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

4965 4992 

4966### WebFetch domain safety check failed4993### WebFetch 도메인 안전 검사 실패

4967 4994 

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

4969 4996 

4970```text wrap theme={null}4997```text wrap theme={null}

4971The 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.4998The 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.


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

4974```5001```

4975 5002 

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

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

4978 5005 

4979v2.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.`로 표시되었습니다.5006v2.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.`로 표시되었습니다.

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


5115**할 일:**5142**할 일:**

5116 5143 

5117* 커밋을 유지하려면 worktree의 브랜치를 푸시하거나 주 체크아웃에서 체크아웃된 기본 브랜치로 병합한 다음 세션을 다시 삭제합니다.5144* 커밋을 유지하려면 worktree의 브랜치를 푸시하거나 주 체크아웃에서 체크아웃된 기본 브랜치로 병합한 다음 세션을 다시 삭제합니다.

5118* 커밋을 버리려면 메시지가 인쇄한 `claude rm <id> --discard-unpushed` 명령을 실행하거나 에이전트 뷰의 세션 행에서 `Ctrl+X`를 다시 두 번 누릅니다. 이는 세션과 worktree를 브랜치, 푸시되지 않은 커밋 및 커밋되지 않은 변경 사항과 함께 제거합니다. worktree가 거부 이후 커밋을 얻으면 Claude Code는 다시 유지하고 업데이트된 상태를 표시합니다.5145* 커밋을 버리려면 메시지가 인쇄한 `claude rm <id> --discard-unpushed` 명령을 실행하거나 에이전트 뷰의 세션 행에서 `Ctrl+X`를 다시 두 번 누릅니다. 이는 세션과 worktree를 브랜치, 푸시되지 않은 커밋 및 커밋되지 않은 변경 사항과 함께 제거합니다. 삭제가 다시 거부되면 새 메시지를 따릅니다.

5119* 메시지가 worktree가 다른 완료된 세션에 의해서도 기록되었다고 말하면 다시 삭제해도 버리지 않습니다: 커밋을 푸시한 다음 세션을 다시 삭제합니다.5146* 메시지가 worktree가 다른 완료된 세션에 의해서도 기록되었다고 말하면 다시 삭제해도 버리지 않습니다: 커밋을 푸시한 다음 세션을 다시 삭제합니다.

5120 5147 

5121v2.1.268 이전에는 `claude rm`이 커밋 요약을 `kept` 줄 자체에 배치했습니다. `claude rm`이 커밋을 요약할 수 없으면 `kept` 줄은 요약 대신 `worktree has commits that are not pushed anywhere`를 표시했습니다.5148v2.1.268 이전에는 `claude rm`이 커밋 요약을 `kept` 줄 자체에 배치했습니다. `claude rm`이 커밋을 요약할 수 없으면 `kept` 줄은 요약 대신 `worktree has commits that are not pushed anywhere`를 표시했습니다.

5122 5149 

5123v2.1.260 이전에는 메시지가 브랜치 또는 커밋을 명시하지 않았으며, 다시 삭제하는 것은 같은 방식으로 거부되었습니다: 푸시하지 않고 세션을 삭제하는 것은 `git worktree remove --force <path>`로 worktree를 직접 제거한 다음 `claude rm <id>`를 다시 실행하는 것을 의미했습니다.5150v2.1.260 이전에는 메시지가 브랜치 또는 커밋을 명시하지 않았으며, 버리는 방법도 없었습니다. 그래도 커밋되지 않은 변경 사항은 잃지만 브랜치와 커밋은 유지한 채 세션을 삭제할 수 있습니다. 거부 메시지가 인쇄한 경로로 `git worktree remove --force --force <path>`를 실행한 다음 `claude rm <id>`를 실행합니다. 잠긴 worktree의 경우 Git에는 `--force`가 두 번 필요합니다.

5124 5151 

5125v2.1.248 이전에는 주 체크아웃에서 체크아웃된 기본 브랜치가 계산되지 않았습니다: 이미 병합한 브랜치는 커밋이 원격에 도달할 때까지 이 거부를 트리거했습니다.5152v2.1.248 이전에는 주 체크아웃에서 체크아웃된 기본 브랜치가 계산되지 않았습니다: 이미 병합한 브랜치는 커밋이 원격에 도달할 때까지 이 거부를 트리거했습니다.

5126 5153 

fast-mode.md +2 −2

Details

45* 빠른 모드가 활성화되어 있는 동안 프롬프트 옆에 작은 `↯` 아이콘이 나타납니다45* 빠른 모드가 활성화되어 있는 동안 프롬프트 옆에 작은 `↯` 아이콘이 나타납니다

46* 언제든지 `/fast`를 다시 실행하여 빠른 모드가 켜져 있는지 꺼져 있는지 확인합니다46* 언제든지 `/fast`를 다시 실행하여 빠른 모드가 켜져 있는지 꺼져 있는지 확인합니다

47 47 

48Opus 5.5는 Claude Code v2.1.280 이상에서 빠른 모드 기본값입니다. v2.1.280 이전에는 v2.1.219부터 Opus 5로 기본 설정되었고, v2.1.154부터 v2.1.218까지는 Opus 4.8로 기본 설정되었습니다.48Opus 5.5는 Claude Code v2.1.280 이상에서 빠른 모드 기본값입니다. v2.1.280 이전에는 v2.1.219부터 Opus 5로 기본 설정되었습니다.

49 49 

50`/fast`를 다시 실행하여 빠른 모드를 비활성화하면 Opus에 유지됩니다. 다른 모델로 전환하려면 `/model`을 사용합니다.50`/fast`를 다시 실행하여 빠른 모드를 비활성화하면 Opus에 유지됩니다. 다른 모델로 전환하려면 `/model`을 사용합니다.

51 51 


58 58 

59모델 전환이 빠른 모드를 켜거나 끌 때마다 Claude Code는 `Fast mode ON` 또는 `Fast mode OFF` 확인을 표시하며, 빠른 모드가 켜져 있는 동안 `↯` 아이콘이 나타납니다. 이는 `/model`로 전환하든, [`/config model=<model>`](https://code.claude.com/docs/ko/settings)로 전환하든, [원격 제어](https://code.claude.com/docs/ko/remote-control.md)를 통해 연결된 기기에서 전환하든 적용됩니다.59모델 전환이 빠른 모드를 켜거나 끌 때마다 Claude Code는 `Fast mode ON` 또는 `Fast mode OFF` 확인을 표시하며, 빠른 모드가 켜져 있는 동안 `↯` 아이콘이 나타납니다. 이는 `/model`로 전환하든, [`/config model=<model>`](https://code.claude.com/docs/ko/settings)로 전환하든, [원격 제어](https://code.claude.com/docs/ko/remote-control.md)를 통해 연결된 기기에서 전환하든 적용됩니다.

60 60 

61Claude Code는 모델 전환, 재연결 또는 실패한 [가용성 확인](#use-fast-mode-behind-proxies-and-llm-gateways) 후 원격 제어를 통해 연결된 기기에 세션의 빠른 모드 상태를 다시 전송합니다.61Claude Code는 모델 전환, 재연결 또는 실패한 [가용성 확인](#use-fast-mode-behind-proxies-and-llm-gateways) 후 Remote Control을 통해 연결된 기기에 세션의 빠른 모드 상태를 다시 전송합니다.

62 62 

63### 클라우드 세션에서 빠른 모드 사용63### 클라우드 세션에서 빠른 모드 사용

64 64 

glossary.md +1 −1

Details

373 373 

374그럴듯해 보이는 결과를 그대로 받아들이는 대신 세션이 작업이 실제로 완료되었는지 확인하는 방법입니다. 테스트 스위트, 빌드 또는 스크린샷 비교와 같이 Claude가 실행할 수 있는 검사를 제공하면, Claude는 한 번의 시도 후 중단하는 대신 검사가 통과할 때까지 반복합니다. 검증 루프는 [`/goal`](https://code.claude.com/docs/ko/goal), 무인 실행 및 [동적 워크플로](https://code.claude.com/docs/ko/workflows.md)의 사전 요구 사항입니다. 검증 루프가 없으면 에이전트가 완료되었는지 판단하는 주체는 에이전트 자신뿐입니다.374그럴듯해 보이는 결과를 그대로 받아들이는 대신 세션이 작업이 실제로 완료되었는지 확인하는 방법입니다. 테스트 스위트, 빌드 또는 스크린샷 비교와 같이 Claude가 실행할 수 있는 검사를 제공하면, Claude는 한 번의 시도 후 중단하는 대신 검사가 통과할 때까지 반복합니다. 검증 루프는 [`/goal`](https://code.claude.com/docs/ko/goal), 무인 실행 및 [동적 워크플로](https://code.claude.com/docs/ko/workflows.md)의 사전 요구 사항입니다. 검증 루프가 없으면 에이전트가 완료되었는지 판단하는 주체는 에이전트 자신뿐입니다.

375 375 

376자세히 알아보기: [Claude에 작업 확인 방법 제공](https://code.claude.com/docs/ko/best-practices.md#give-claude-a-way-to-verify-its-work)376자세히 알아보기: [Claude에 실행할 검사 제공](https://code.claude.com/docs/ko/best-practices.md#give-claude-a-check-to-run)

377 377 

378## W378## W

379 379 

Details

166| 주 모델 | `claude-opus-5-5` |166| 주 모델 | `claude-opus-5-5` |

167| 소형/빠른 모델 | `claude-sonnet-4-5@20250929` |167| 소형/빠른 모델 | `claude-sonnet-4-5@20250929` |

168 168 

169v2.1.280 이전에는 Google Cloud의 Agent Platform의 주 모델이 기본적으로 Opus 5였고 v2.1.219부터 `opus` 별칭이 Opus 5로 확인되었습니다.

170 

169세션 제목 생성과 같은 백그라운드 작업은 소형/빠른 모델(일반적으로 Haiku 클래스 모델)을 사용합니다. Google Cloud의 Agent Platform에서 Claude Code는 모든 프로젝트 또는 지역에서 Haiku를 활성화하지 않을 수 있으므로 백그라운드 작업에 기본 Sonnet 모델을 사용합니다. 두 가지 선택이 어떤 모델이 이를 수행하는지 변경합니다:171세션 제목 생성과 같은 백그라운드 작업은 소형/빠른 모델(일반적으로 Haiku 클래스 모델)을 사용합니다. Google Cloud의 Agent Platform에서 Claude Code는 모든 프로젝트 또는 지역에서 Haiku를 활성화하지 않을 수 있으므로 백그라운드 작업에 기본 Sonnet 모델을 사용합니다. 두 가지 선택이 어떤 모델이 이를 수행하는지 변경합니다:

170 172 

171* `--model`, `ANTHROPIC_MODEL` 또는 `model` 설정으로 주 모델을 선택하면 백그라운드 작업이 해당 모델을 사용합니다. Claude Code가 [`ANTHROPIC_DEFAULT_MODEL`](https://code.claude.com/docs/ko/model-config#set-a-default-model-for-new-sessions)로 설정한 모델에서 세션을 시작하면 백그라운드 작업도 해당 모델을 사용합니다. `ANTHROPIC_DEFAULT_SONNET_MODEL` 없이 `ANTHROPIC_DEFAULT_OPUS_MODEL`을 설정하는 것도 선택으로 계산됩니다. 자체 Opus를 조종하는 프로젝트에서는 기본 제공 Sonnet 모델을 활성화하지 않을 수 있기 때문입니다.173* `--model`, `ANTHROPIC_MODEL` 또는 `model` 설정으로 주 모델을 선택하면 백그라운드 작업이 해당 모델을 사용합니다. Claude Code가 [`ANTHROPIC_DEFAULT_MODEL`](https://code.claude.com/docs/ko/model-config#set-a-default-model-for-new-sessions)로 설정한 모델에서 세션을 시작하면 백그라운드 작업도 해당 모델을 사용합니다. `ANTHROPIC_DEFAULT_SONNET_MODEL` 없이 `ANTHROPIC_DEFAULT_OPUS_MODEL`을 설정하는 것도 선택으로 계산됩니다. 자체 Opus를 조종하는 프로젝트에서는 기본 제공 Sonnet 모델을 활성화하지 않을 수 있기 때문입니다.


175>177>

176> Opus 모델은 Sonnet 모델보다 토큰당 가격이 높으므로 주 모델을 고정하지 않으면 Opus 요금으로 청구됩니다. Sonnet 4.5를 주 모델로 사용하려면 `ANTHROPIC_MODEL`을 전체 모델 ID로 설정합니다. `ANTHROPIC_DEFAULT_SONNET_MODEL`로 기본값을 조종하고 `ANTHROPIC_DEFAULT_OPUS_MODEL`을 설정하지 않는 배포는 조종된 Sonnet 모델을 기본값으로 유지합니다.178> Opus 모델은 Sonnet 모델보다 토큰당 가격이 높으므로 주 모델을 고정하지 않으면 Opus 요금으로 청구됩니다. Sonnet 4.5를 주 모델로 사용하려면 `ANTHROPIC_MODEL`을 전체 모델 ID로 설정합니다. `ANTHROPIC_DEFAULT_SONNET_MODEL`로 기본값을 조종하고 `ANTHROPIC_DEFAULT_OPUS_MODEL`을 설정하지 않는 배포는 조종된 Sonnet 모델을 기본값으로 유지합니다.

177 179 

178v2.1.280 이전에는 Google Cloud의 Agent Platform의 주 모델이 기본적으로 Opus 5였고 v2.1.219부터 `opus` 별칭이 Opus 5로 확인되었습니다. v2.1.207부터 v2.1.218에서 Google Cloud의 Agent Platform의 주 모델은 기본적으로 Opus 4.8이었고 `opus` 별칭은 Opus 4.8로 확인되었습니다.

179 

180모델을 추가로 사용자 지정하려면:180모델을 추가로 사용자 지정하려면:

181 181 

182```bash theme={null}182```bash theme={null}

headless.md +4 −3

Details

236 236 

237이러한 메시지 중 일부가 스트림에서 누락된 경우 Claude Code 버전이 다음 최소 버전을 충족하는지 확인하십시오:237이러한 메시지 중 일부가 스트림에서 누락된 경우 Claude Code 버전이 다음 최소 버전을 충족하는지 확인하십시오:

238 238 

239* **모든 중첩 깊이에서의 전달**: v2.1.219 이상

240* **Claude가 주 대화에서 Skill 도구로 시작하는 포크된 스킬**: `tool_use` 및 `tool_result` 블록은 v2.1.86 이상, 첫 번째 `user` 메시지와 텍스트 및 사고 블록은 v2.1.265 이상239* **Claude가 주 대화에서 Skill 도구로 시작하는 포크된 스킬**: `tool_use` 및 `tool_result` 블록은 v2.1.86 이상, 첫 번째 `user` 메시지와 텍스트 및 사고 블록은 v2.1.265 이상

241* **포크된 스킬이 생성하는 서브에이전트의 메시지, 그리고 서브에이전트 또는 다른 포크된 스킬 내에서 시작된 포크된 스킬의 메시지**: v2.1.275 이상240* **포크된 스킬이 생성하는 서브에이전트의 메시지, 그리고 서브에이전트 또는 다른 포크된 스킬 내에서 시작된 포크된 스킬의 메시지**: v2.1.275 이상

242* **`/<skill-name>`을 프롬프트로 전달하여 시작하는 포크된 스킬의 메시지**: v2.1.287 이상241* **`/<skill-name>`을 프롬프트로 전달하여 시작하는 포크된 스킬의 메시지**: v2.1.287 이상


285| 필드 | 유형 | 설명 |284| 필드 | 유형 | 설명 |

286| - | - | - |285| - | - | - |

287| `mcp_servers` | 배열 | 세션의 MCP 서버, 각각 `name` 및 `status` 포함 |286| `mcp_servers` | 배열 | 세션의 MCP 서버, 각각 `name` 및 `status` 포함 |

288| `mcp_server_errors` | 배열 | 구성 검증으로 건너뛴 `--mcp-config` 항목, 각각 `name`, `type` 및 `message` 포함. `type`은 `unknown_type`, `url_missing_type`, `invalid_config` 또는 `reserved_name`과 같은 건너뛰기 범주입니다; 인식하지 못하는 값은 일반 건너뛰기로 취급합니다. 영향을 받은 서버는 `mcp_servers`에서 없습니다. 오류가 없으면 키가 생략되므로 CI 게이트는 비어 있지 않은 배열에서 실패할 수 있습니다. Claude Code v2.1.219 이상이 필요합니다 |287| `mcp_server_errors` | 배열 | 구성 검증으로 건너뛴 `--mcp-config` 항목, 각각 `name`, `type` 및 `message` 포함. `type`은 `unknown_type`, `url_missing_type`, `invalid_config` 또는 `reserved_name`과 같은 건너뛰기 범주입니다; 인식하지 못하는 값은 일반 건너뛰기로 취급합니다. 영향을 받은 서버는 `mcp_servers`에 없습니다. 오류가 없으면 키가 생략되므로 CI 게이트는 비어 있지 않은 배열에서 실패할 수 있습니다 |

289 288 

290명령을 터미널에서 직접 실행하면 Claude Code는 또한 `Warning: 1 MCP server skipped due to invalid config:`와 같은 시작 경고를 stderr에 인쇄하고 각 건너뛴 항목의 이유가 따릅니다. stderr를 리디렉션하거나 CI 러너 또는 SDK 호스트와 같은 프로그램이 이를 캡처하면 Claude Code는 경고를 인쇄하지 않고 건너뛴 항목만 `mcp_server_errors` 필드에 보고합니다. 경고는 Claude Code v2.1.219 이상이 필요합니다.289명령을 터미널에서 직접 실행하면 Claude Code는 또한 `Warning: 1 MCP server skipped due to invalid config:`와 같은 시작 경고를 stderr에 인쇄하고 그 뒤에 각 건너뛴 항목의 이유가 따릅니다.

290 

291stderr를 리디렉션하거나 CI 러너 또는 SDK 호스트와 같은 프로그램이 이를 캡처하면 Claude Code는 경고를 인쇄하지 않습니다. 건너뛴 항목은 `mcp_server_errors` 필드에만 보고합니다.

291 292 

292#### 플러그인 설치 추적293#### 플러그인 설치 추적

293 294 

hooks.md +5 −9

Details

679 679 

680프로젝트 스킬의 Frontmatter hook은 [설정 파일의 hook과 동일한 워크스페이스 신뢰 규칙](#workspace-trust)을 따릅니다. Claude Code는 사용자 또는 Claude가 스킬을 호출할 때 등록합니다. 폴더를 신뢰하지 않은 `-p` 실행 포함.680프로젝트 스킬의 Frontmatter hook은 [설정 파일의 hook과 동일한 워크스페이스 신뢰 규칙](#workspace-trust)을 따릅니다. Claude Code는 사용자 또는 Claude가 스킬을 호출할 때 등록합니다. 폴더를 신뢰하지 않은 `-p` 실행 포함.

681 681 

682프로젝트 서브에이전트의 Frontmatter hook은 에이전트 파일이 나온 폴더에 대해 [워크스페이스 신뢰 대화](https://code.claude.com/docs/ko/permissions.md#project-allow-rules-and-workspace-trust)를 수락한 후에만 실행됩니다. `-p` 세션은 수락으로 계산되지 않습니다. [폴더를 신뢰하기 전에 실행되는 항목](https://code.claude.com/docs/ko/permissions.md#what-runs-before-you-trust-a-folder)은 설정 파일 규칙과 비교하고 서브에이전트 페이지는 [어떤 범위가 제외되는지](https://code.claude.com/docs/ko/sub-agents.md#hooks-in-subagent-frontmatter) 나열합니다. v2.1.218 이전에는 이러한 hook이 신뢰하지 않은 폴더에서 실행될 수 있었습니다.682프로젝트 서브에이전트의 Frontmatter hook은 에이전트 파일이 나온 폴더에 대해 [워크스페이스 신뢰 대화](https://code.claude.com/docs/ko/permissions.md#project-allow-rules-and-workspace-trust)를 수락한 후에만 실행됩니다. `-p` 세션은 수락으로 계산되지 않습니다. [폴더를 신뢰하기 전에 실행되는 항목](https://code.claude.com/docs/ko/permissions.md#what-runs-before-you-trust-a-folder)은 이를 설정 파일 규칙과 비교하고, 서브에이전트 페이지는 [어떤 범위가 제외되는지](https://code.claude.com/docs/ko/sub-agents.md#hooks-in-subagent-frontmatter) 나열합니다.

683 683 

684#### 스킬 훅의 제한684#### 스킬 훅의 제한

685 685 


3196* **명령 훅** (`type: "command"`): stdout의 비어 있지 않은 마지막 줄로 경로를 출력합니다. Claude Code는 해당 줄을 읽기 전에 ANSI 이스케이프 코드를 제거하므로, `echo` 이전에 출력된 셸 시작 배너는 무시됩니다. 다른 모든 훅 출력은 stderr로 리디렉션하세요.3196* **명령 훅** (`type: "command"`): stdout의 비어 있지 않은 마지막 줄로 경로를 출력합니다. Claude Code는 해당 줄을 읽기 전에 ANSI 이스케이프 코드를 제거하므로, `echo` 이전에 출력된 셸 시작 배너는 무시됩니다. 다른 모든 훅 출력은 stderr로 리디렉션하세요.

3197* **HTTP 훅** (`type: "http"`): 응답 본문에 `{ "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } }`를 반환합니다.3197* **HTTP 훅** (`type: "http"`): 응답 본문에 `{ "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } }`를 반환합니다.

3198 3198 

3199훅이 실패하거나 경로를 생성하지 않으면 worktree 생성이 오류와 함께 실패합니다.3199훅이 실패하거나 경로를 생성하지 않으면 워크트리 생성이 오류와 함께 실패합니다. Claude Code는 상대 경로를 훅이 실행된 디렉터리를 기준으로 해석하며, 경로 안의 `.` 또는 `..` 세그먼트를 정리합니다. 결과 경로가 Claude Code가 진입할 수 있는 디렉터리가 아니면 세션은 해당 경로를 명시하는 오류를 출력하고 코드 1로 종료됩니다.

3200 3200 

3201Claude Code는 상대 경로를 훅이 실행된 디렉터리를 기준으로 해석하며, 경로 안의 `.` 또는 `..` 세그먼트를 정리합니다. 결과 경로가 Claude Code가 진입할 수 있는 디렉터리가 아니면, 세션은 해당 경로를 명시한 오류를 출력하고 코드 1로 종료됩니다.3201Claude Code는 `.` 또는 `..` 세그먼트를 포함하는 절대 경로와, 저장소 루트 아래에서 심볼릭 링크를 거치는 모든 경로를 거부합니다. 오류에는 거부된 구성 요소가 명시됩니다. 저장소에 커밋된 심볼릭 링크는 워크트리를 저장소 외부로 리디렉션할 수 있습니다. 저장소 내부의 심볼릭 링크를 거치지 않는 정규화된 경로를 반환하십시오.

3202 

3203Claude Code는 `.` 또는 `..` 세그먼트를 포함하는 절대 경로와, 저장소 루트 아래의 심볼릭 링크를 거치는 모든 경로를 거부합니다. 저장소에 커밋된 심볼릭 링크가 워크트리를 저장소 외부로 리디렉션할 수 있기 때문입니다. 오류에는 거부된 구성 요소가 명시됩니다. 저장소 내부의 심볼릭 링크를 거치지 않는 정규화된 경로를 반환하세요. v2.1.216 이전에는 worktree 생성이 이러한 검사 없이 훅의 경로를 따랐습니다.

3204 3202 

3205### WorktreeRemove3203### WorktreeRemove

3206 3204 


3228* **훅이 0으로 종료하는 경우**: 워크트리가 제거된 것으로 간주됩니다. Claude Code는 훅에서 다른 것을 읽지 않으므로, 훅이 디렉터리를 삭제했는지 확인하세요.3226* **훅이 0으로 종료하는 경우**: 워크트리가 제거된 것으로 간주됩니다. Claude Code는 훅에서 다른 것을 읽지 않으므로, 훅이 디렉터리를 삭제했는지 확인하세요.

3229* **훅이 0이 아닌 값으로 종료하는 경우**: 이후에도 `worktree_path`의 디렉터리가 여전히 존재하면 제거가 실패하며, 워크트리는 git 폴백 없이 디스크에 남습니다. 0이 아닌 값으로 종료하기 전에 디렉터리를 삭제한 훅은 제거된 것으로 간주됩니다. 실패가 보고되는 방식은 [WorktreeRemove 입력](#worktreeremove-input)을 참조하세요.3227* **훅이 0이 아닌 값으로 종료하는 경우**: 이후에도 `worktree_path`의 디렉터리가 여전히 존재하면 제거가 실패하며, 워크트리는 git 폴백 없이 디스크에 남습니다. 0이 아닌 값으로 종료하기 전에 디렉터리를 삭제한 훅은 제거된 것으로 간주됩니다. 실패가 보고되는 방식은 [WorktreeRemove 입력](#worktreeremove-input)을 참조하세요.

3230 3228 

3231Claude Code는 WorktreeCreate 훅이 반환한 경로만 알기 때문에, 훅이 생성한 워크트리에 속한 브랜치를 삭제하지 않습니다. WorktreeCreate 훅이 브랜치를 생성한다면 WorktreeRemove 훅에서 삭제하세요.3229Claude Code는 WorktreeCreate 훅이 반환한 경로만 알기 때문에 훅이 생성한 워크트리에 속한 브랜치를 절대 삭제하지 않습니다. WorktreeCreate 훅이 브랜치를 생성한다면 WorktreeRemove 훅에서 삭제하십시오. Claude Code는 WorktreeRemove 훅의 `systemMessage`, `continue` 같은 [JSON 출력 필드](#json-output)를 무시합니다.

3232 

3233Claude Code는 `systemMessage`, `continue` 같은 WorktreeRemove 훅의 [JSON 출력 필드](#json-output)를 무시합니다.

3234 3230 

3235백그라운드 세션 삭제의 경우, Claude Code는 훅을 실행하기 전에 저장된 워크트리 경로를 검증하고, 심볼릭 링크이거나 저장소 루트 아래에서 심볼릭 링크를 거치는 경로를 거부합니다. 이 경로에서 아직 파일을 포함하고 있는 워크트리에 대해서는 [에이전트 뷰](https://code.claude.com/docs/ko/agent-view.md#what-deleting-a-session-removes)에서 삭제를 확인한 경우에만 훅이 실행됩니다. 이러한 워크트리에 대해 [`claude rm`](https://code.claude.com/docs/ko/agent-view#manage-sessions-from-the-shell)은 대신 세션과 워크트리를 유지합니다. v2.1.216 이전에는 이러한 검사 없이 저장된 경로에서 훅이 실행되었습니다.3231백그라운드 세션 삭제의 경우 Claude Code는 훅을 실행하기 전에 저장된 워크트리 경로를 검증하며, 심볼릭 링크이거나 저장소 루트 아래에서 심볼릭 링크를 거치는 경로를 거부합니다. 이 경로에서는 [에이전트 뷰](https://code.claude.com/docs/ko/agent-view.md#what-deleting-a-session-removes)에서 삭제를 확인한 경우에만 여전히 파일이 들어 있는 워크트리에 대해 훅이 실행됩니다. 이러한 워크트리의 경우 [`claude rm`](https://code.claude.com/docs/ko/agent-view#manage-sessions-from-the-shell)은 대신 세션과 워크트리를 유지합니다.

3236 3232 

3237Claude Code는 WorktreeCreate가 반환한 경로를 훅 입력의 `worktree_path`로 전달합니다. 이 예시는 해당 경로를 읽고 디렉터리를 제거합니다.3233Claude Code는 WorktreeCreate가 반환한 경로를 훅 입력의 `worktree_path`로 전달합니다. 이 예시는 해당 경로를 읽고 디렉터리를 제거합니다.

3238 3234 

Details

174 174 

175## Claude Code를 효과적으로 사용하기175## Claude Code를 효과적으로 사용하기

176 176 

177이 팁들은 Claude Code에서 더 나은 결과를 얻는 데 도움이 됩니다. 특정 프롬프트, 검증 및 계획에 대한 자세한 내용은 [모범 사례](https://code.claude.com/docs/ko/best-practices.md)를 참조하세요.177이 팁들은 Claude Code에서 더 나은 결과를 얻는 데 도움이 됩니다. 특정 프롬프트, 검증, 그리고 프롬프트로 요청하기보다 강제할 가치가 있는 규칙에 대한 자세한 내용은 [모범 사례](https://code.claude.com/docs/ko/best-practices.md)를 참조하세요.

178 178 

179### Claude Code에 도움을 요청하기179### Claude Code에 도움을 요청하기

180 180 

Details

92| `/` 시작 | 명령 또는 스킬 | [명령](#commands) 및 [스킬](https://code.claude.com/docs/ko/skills.md)을 참조하세요 |92| `/` 시작 | 명령 또는 스킬 | [명령](#commands) 및 [스킬](https://code.claude.com/docs/ko/skills.md)을 참조하세요 |

93| `!` 시작 | 셸 모드 | 명령을 직접 실행하고 출력을 세션에 추가하며 Claude가 이에 응답하도록 합니다 |93| `!` 시작 | 셸 모드 | 명령을 직접 실행하고 출력을 세션에 추가하며 Claude가 이에 응답하도록 합니다 |

94| `@` | 파일 경로 언급 | 파일 경로 자동 완성을 트리거합니다. [교차 세션 메시징](https://code.claude.com/docs/ko/cross-session-messaging.md#message-another-session)이 있는 세션에서 `@` 뒤에 최소 한 글자를 입력하면 Claude Code는 이 머신의 다른 라이브 세션도 제안하므로 Claude에게 선택한 세션에 메시지를 보내도록 할 수 있습니다. Claude Code v2.1.232 이상 필요 |94| `@` | 파일 경로 언급 | 파일 경로 자동 완성을 트리거합니다. [교차 세션 메시징](https://code.claude.com/docs/ko/cross-session-messaging.md#message-another-session)이 있는 세션에서 `@` 뒤에 최소 한 글자를 입력하면 Claude Code는 이 머신의 다른 라이브 세션도 제안하므로 Claude에게 선택한 세션에 메시지를 보내도록 할 수 있습니다. Claude Code v2.1.232 이상 필요 |

95| `:` | 이모지 단축코드 | 전체 `:name:`을 입력하여 이모지를 삽입하거나 두 글자 이상을 입력하여 제안을 봅니다. [이모지 단축코드](#emoji-shortcodes)를 참조하세요. Claude Code v2.1.217 이상 필요 |95| `:` | 이모지 단축코드 | 전체 `:name:`을 입력하여 이모지를 삽입하거나 두 글자 이상을 입력하여 제안을 봅니다. [이모지 단축코드](#emoji-shortcodes)를 참조하세요 |

96| `?` 빈 입력 | 단축키 도움말 패널 전환 | 입력에 이미 텍스트가 있을 때 `?`를 입력하면 문자를 삽입합니다 |96| `?` 빈 입력 | 단축키 도움말 패널 전환 | 입력에 이미 텍스트가 있을 때 `?`를 입력하면 문자를 삽입합니다 |

97 97 

98### 트랜스크립트 뷰어98### 트랜스크립트 뷰어


197 197 

198> [!NOTE]198> [!NOTE]

199>199>

200> vim NORMAL 모드에서 커서가 입력의 시작 또는 끝에 있고 더 이상 이동할 수 없으면, `j`/`k` 및 `↑`/`↓`는 명령어 히스토리를 네비게이션합니다. 빈 프롬프트에서 `←`는 NORMAL 모드뿐만 아니라 INSERT에서도 [에이전트 뷰](https://code.claude.com/docs/ko/agent-view.md)를 열기; v2.1.219 이전에는 빈 프롬프트에서 `←`는 NORMAL 모드에서 아무것도 하지 않았습니다.200> vim NORMAL 모드에서 커서가 입력의 시작 또는 끝에 있고 더 이상 이동할 수 없으면, `j`/`k` 및 `↑`/`↓`는 명령 히스토리를 네비게이션합니다. 빈 프롬프트에서 `←`를 누르면 INSERT 모드뿐만 아니라 NORMAL 모드에서도 [에이전트 뷰](https://code.claude.com/docs/ko/agent-view.md)가 열립니다.

201 201 

202### 편집 (NORMAL 모드)202### 편집 (NORMAL 모드)

203 203 


396Claude Code는 일부 명령을 큐에 추가하지 않고 전송 시 즉시 실행합니다. 그 중에는 `/model`, `/effort`, `/fast`가 있습니다. 이 세 명령은 각각 설정을 변경합니다. 모델, effort 수준, 또는 빠른 모드입니다. Claude Code가 새 설정을 Claude가 이미 작업 중인 턴에 적용할지, 아니면 다음 턴부터만 적용할지는 명령에 따라 다릅니다.396Claude Code는 일부 명령을 큐에 추가하지 않고 전송 시 즉시 실행합니다. 그 중에는 `/model`, `/effort`, `/fast`가 있습니다. 이 세 명령은 각각 설정을 변경합니다. 모델, effort 수준, 또는 빠른 모드입니다. Claude Code가 새 설정을 Claude가 이미 작업 중인 턴에 적용할지, 아니면 다음 턴부터만 적용할지는 명령에 따라 다릅니다.

397 397 

398* [`/model`](https://code.claude.com/docs/ko/model-config#setting-your-model): [캐시 경고](https://code.claude.com/docs/ko/prompt-caching.md#switching-models)를 확인하면(Claude Code가 표시하는 경우), Claude Code는 해당 턴에서 다음 요청을 할 때 변경 사항을 적용합니다.398* [`/model`](https://code.claude.com/docs/ko/model-config#setting-your-model): [캐시 경고](https://code.claude.com/docs/ko/prompt-caching.md#switching-models)를 확인하면(Claude Code가 표시하는 경우), Claude Code는 해당 턴에서 다음 요청을 할 때 변경 사항을 적용합니다.

399* [`/effort`](https://code.claude.com/docs/ko/model-config#adjust-effort-level): [캐시 경고](https://code.claude.com/docs/ko/prompt-caching.md#changing-effort-level)를 확인하면(Claude Code가 표시하는 경우), Claude Code는 해당 턴에서 다음 요청을 할 때 변경 사항을 적용합니다.399* `/effort`: 다음에 전송하는 메시지가 새 수준으로 실행됩니다. [Claude가 이미 작업 중인 턴에서 새 수준을 시작하려면](https://code.claude.com/docs/ko/model-config.md#when-a-new-effort-level-starts) Claude가 도구 호출을 실행하는 동안 메시지를 큐에 추가하세요.

400* [`/fast`](https://code.claude.com/docs/ko/fast-mode#toggle-fast-mode): Claude Code는 턴이 시작될 때 활성화되어 있던 빠른 모드 설정을 유지하므로, 속도 변경은 다음 턴부터 적용됩니다. 현재 모델이 빠른 모드를 지원하지 않으면, 빠른 모드를 켜면 [모델도 전환](https://code.claude.com/docs/ko/prompt-caching.md#turning-on-fast-mode)되며, Claude Code는 해당 턴에서 다음 요청부터 새 모델을 사용합니다.400* [`/fast`](https://code.claude.com/docs/ko/fast-mode#toggle-fast-mode): Claude Code는 턴이 시작될 때 활성화되어 있던 빠른 모드 설정을 유지하므로, 속도 변경은 다음 턴부터 적용됩니다. 현재 모델이 빠른 모드를 지원하지 않으면, 빠른 모드를 켜면 [모델도 전환](https://code.claude.com/docs/ko/prompt-caching.md#turning-on-fast-mode)되며, Claude Code는 해당 턴에서 다음 요청부터 새 모델을 사용합니다.

401 401 

402### 메시지가 큐에 있는 상태에서 세션을 백그라운드로 전환402### 메시지가 큐에 있는 상태에서 세션을 백그라운드로 전환


513 513 

514## 이모지 단축코드514## 이모지 단축코드

515 515 

516프롬프트 입력에서 `:`를 입력한 후 이모지 단축코드를 입력하여 이모지를 삽입합니다. Claude Code v2.1.217 이상이 필요합니다.516프롬프트 입력에서 `:`를 입력한 후 이모지 단축코드를 입력하여 이모지를 삽입합니다.

517 517 

518* `:heart:`와 같은 완전한 단축코드를 입력하면 Claude Code가 닫는 `:`를 입력하는 즉시 ❤️로 바꿉니다518* `:heart:`와 같은 완전한 단축코드를 입력하면 Claude Code가 닫는 `:`를 입력하는 즉시 ❤️로 바꿉니다

519* `:hea`와 같이 `:`에 이름의 최소 2자 이상을 입력하여 제안 팝업을 열고, `Tab` 또는 `Enter`를 눌러 강조된 이모지를 삽입합니다519* `:hea`와 같이 `:`에 이름의 최소 2자 이상을 입력하여 제안 팝업을 열고, `Tab` 또는 `Enter`를 눌러 강조된 이모지를 삽입합니다

large-codebases.md +15 −13

Details

31 31 

32> [!TIP]32> [!TIP]

33>33>

34> [서브에이전트에서 탐색 실행](https://code.claude.com/docs/ko/best-practices.md#use-subagents-for-investigation)과 같이 모든 저장소에서 컨텍스트를 작게 유지하는 워크플로우 기법은 [Claude Code 모범 사례](https://code.claude.com/docs/ko/best-practices.md)를 참조하십시오. 조직의 모든 개발자에게 기본 구성을 배포하려면 [조직을 위해 Claude Code 설정](https://code.claude.com/docs/ko/admin-setup.md)을 참조하십시오.34> 모든 저장소에서 컨텍스트를 작게 유지하는 워크플로 기법은 [Claude Code 모범 사례](https://code.claude.com/docs/ko/best-practices.md)를 참조하십시오. 한 가지 예로 파일 읽기가 기본 대화에 포함되지 않도록 [서브에이전트에서 탐색을 실행](https://code.claude.com/docs/ko/best-practices.md#know-what-subagents-cost)하는 방법이 있습니다. 조직의 모든 개발자에게 기본 구성을 배포하려면 [조직을 위해 Claude Code 설정](https://code.claude.com/docs/ko/admin-setup.md)을 참조하십시오.

35 35 

36### 예제 모노레포36### 예제 모노레포

37 37 


158거부 규칙은 저장소에서 작업하는 모든 사람, 본인만, 또는 머신의 모든 세션에 적용될 수 있으며, 이는 규칙을 배치하는 설정 파일에 따라 결정됩니다:158거부 규칙은 저장소에서 작업하는 모든 사람, 본인만, 또는 머신의 모든 세션에 적용될 수 있으며, 이는 규칙을 배치하는 설정 파일에 따라 결정됩니다:

159 159 

160* **저장소에서 작업하는 모든 사람**: 규칙을 `.claude/settings.json`에 커밋합니다. Claude를 시작하는 저장소 루트에 배치하거나, 하위 디렉터리에서 시작하는 경우 각 패키지의 `.claude/`에 배치합니다. 이 페이지의 다른 프로젝트 설정처럼, 이 파일은 상위 디렉터리에서 상속되지 않습니다.160* **저장소에서 작업하는 모든 사람**: 규칙을 `.claude/settings.json`에 커밋합니다. Claude를 시작하는 저장소 루트에 배치하거나, 하위 디렉터리에서 시작하는 경우 각 패키지의 `.claude/`에 배치합니다. 이 페이지의 다른 프로젝트 설정처럼, 이 파일은 상위 디렉터리에서 상속되지 않습니다.

161* **본인만**: 저장소 루트의 `.claude/settings.local.json`을 사용합니다. 이 파일은 Claude Code가 [저장소 루트를 사용하지 않는 경우](https://code.claude.com/docs/ko/settings.md#where-claude-code-looks-for-each-file)(예: Windows)를 제외하고, 저장소 내의 모든 CLI 세션에서 시작 디렉터리와 관계없이 로드됩니다. 예제의 `Read(./**/vendor/**/*)` 같은 상대 패턴은 저장소 루트가 아닌 [세션의 현재 작업 디렉터리에 고정됩니다](https://code.claude.com/docs/ko/permissions.md#read-and-edit). 따라서 하위 디렉터리에서 세션을 시작하는 경우, 이 파일의 규칙을 `Read(//absolute/path/to/repo/**/vendor/**/*)` 같은 `//` 절대 경로로 작성합니다. v2.1.211 이전에는 `.claude/settings.local.json`도 시작 디렉터리에서만 로드되었습니다.161* **본인만**: 저장소 루트의 `.claude/settings.local.json`을 사용합니다. 이 파일은 Claude Code가 [저장소 루트를 사용하지 않는 경우](https://code.claude.com/docs/ko/settings.md#where-claude-code-looks-for-each-file)(예: Windows)를 제외하고, 저장소 내의 모든 CLI 세션에서 시작 디렉터리와 관계없이 로드됩니다.

162 

163 예제의 `Read(./**/vendor/**/*)` 같은 상대 패턴은 여전히 저장소 루트가 아닌 [세션의 현재 작업 디렉터리에 고정됩니다](https://code.claude.com/docs/ko/permissions.md#read-and-edit). 하위 디렉터리에서 세션을 시작하는 경우, 이 파일의 규칙을 `Read(//absolute/path/to/repo/**/vendor/**/*)` 같은 `//` 절대 경로로 작성합니다.

162* **모든 사람, 모든 세션에서 강제 적용**: [관리 설정](https://code.claude.com/docs/ko/managed-settings.md)에서 규칙을 설정합니다. 사용자 및 프로젝트 설정은 이를 재정의할 수 없습니다.164* **모든 사람, 모든 세션에서 강제 적용**: [관리 설정](https://code.claude.com/docs/ko/managed-settings.md)에서 규칙을 설정합니다. 사용자 및 프로젝트 설정은 이를 재정의할 수 없습니다.

163 165 

164아래 예제는 빌드 아티팩트와 벤더 SDK를 차단합니다. 디렉터리 패턴은 `/**` 대신 `/**/*`로 끝나므로 각 규칙은 디렉터리 내의 모든 것을 포함하지만 디렉터리 자체는 포함하지 않습니다. Claude는 여전히 `ls dist` 또는 `cd build` 같은 명령으로 해당 디렉터리를 나열하거나 변경할 수 있습니다.166아래 예제는 빌드 아티팩트와 벤더 SDK를 차단합니다. 디렉터리 패턴은 `/**` 대신 `/**/*`로 끝나므로 각 규칙은 디렉터리 내의 모든 것을 포함하지만 디렉터리 자체는 포함하지 않습니다. Claude는 여전히 `ls dist` 또는 `cd build` 같은 명령으로 해당 디렉터리를 나열하거나 변경할 수 있습니다.


369 371 

370사용되지 않는 스킬을 찾으려면 OpenTelemetry [로그 내보내기](https://code.claude.com/docs/ko/monitoring-usage.md)를 활성화하고 `OTEL_LOG_TOOL_DETAILS=1`을 설정하여 스킬 이름이 가려지지 않고 그대로 기록되도록 합니다. [`skill_activated` 이벤트](https://code.claude.com/docs/ko/monitoring-usage#skill-activated-event)는 모든 호출을 `skill.name` 속성에 기록하고, `invocation_trigger`는 명령, Claude, 중첩된 스킬 중 무엇이 호출했는지를 기록하므로 어떤 스킬을 통합하거나 폐기할지 파악할 수 있습니다.372사용되지 않는 스킬을 찾으려면 OpenTelemetry [로그 내보내기](https://code.claude.com/docs/ko/monitoring-usage.md)를 활성화하고 `OTEL_LOG_TOOL_DETAILS=1`을 설정하여 스킬 이름이 가려지지 않고 그대로 기록되도록 합니다. [`skill_activated` 이벤트](https://code.claude.com/docs/ko/monitoring-usage#skill-activated-event)는 모든 호출을 `skill.name` 속성에 기록하고, `invocation_trigger`는 명령, Claude, 중첩된 스킬 중 무엇이 호출했는지를 기록하므로 어떤 스킬을 통합하거나 폐기할지 파악할 수 있습니다.

371 373 

372## 계층화가 확장을 멈출 때 규칙 중앙화374## 계층화가 더 이상 확장되지 않을 때 규칙 중앙화하기

373 375 

374디렉토리별 CLAUDE.md 파일은 코드베이스가 커질수록 관리하기 어려워질 수 있습니다. 규칙이 표류하고, 파일이 오래되고, 아무도 루트를 소유하지 않습니다. 이를 해결하는 것은 일반적으로 저장소의 Claude Code 설정을 유지하는 팀이 자신의 영역에서 작업하는 각 개발자가 아닙니다.376코드베이스가 커지면 디렉터리별 CLAUDE.md 파일을 관리하기 어려워질 수 있습니다. 규칙이 점차 어긋나고, 파일은 오래된 상태로 방치되며, 루트를 책임지는 사람이 없어집니다. 이 문제를 해결하는 일은 일반적으로 각자의 영역에서 작업하는 개별 개발자가 아니라 저장소의 Claude Code 설정을 유지 관리하는 팀이 맡습니다.

375 377 

376항상 로드되는 CLAUDE.md에서 규칙 및 참조 콘텐츠를 작업과 관련이 있을 때만 로드되는 메커니즘으로 이동하십시오:378규칙과 참고 콘텐츠를 항상 로드되는 CLAUDE.md에서 꺼내 필요할 때 로드되는 메커니즘으로 옮기십시오.

377 379 

378* [Skills](https://code.claude.com/docs/ko/skills.md): Claude가 작업과 관련이 있을 때만 로드하는 참조 자료380* [스킬](https://code.claude.com/docs/ko/skills.md): 작업과 관련이 있을 때만 Claude가 로드하는 참고 자료

379* [Plugins](https://code.claude.com/docs/ko/plugins/overview.md): 플랫폼 팀이 중앙에서 소유하는 스킬, 훅, 명령의 버전 관리 번들381* [플러그인](https://code.claude.com/docs/ko/plugins/overview.md): 플랫폼 팀이 중앙에서 소유하고 [관리형 설정을 통해 모든 사용자에게 설치](https://code.claude.com/docs/ko/plugins/org.md#pre-install-and-require-plugins)할 수 있는, 스킬, 훅, 명령의 버전 관리 번들

380* [MCP servers](https://code.claude.com/docs/ko/mcp.md): 조직이 이미 저장소에 대한 코드 검색 또는 RAG 인덱스를 실행하면 MCP 도구로 노출하여 Claude가 파일을 직접 읽는 대신 쿼리하도록 합니다.382* [MCP 서버](https://code.claude.com/docs/ko/mcp.md): 조직에서 이미 저장소에 대한 코드 검색 또는 RAG 인덱스를 운영하고 있다면, 이를 MCP 도구로 노출하여 Claude가 파일을 직접 읽는 대신 해당 도구에 쿼리하도록 합니다

381 383 

382플랫폼 팀이 이를 중앙에서 적용하는 방법은 [server-managed or endpoint-managed settings](https://code.claude.com/docs/ko/server-managed-settings.md#choose-between-server-managed-and-endpoint-managed-settings)을 참조하십시오.384플랫폼 팀이 이러한 항목을 중앙에서 적용하는 방법은 [서버 관리형 또는 엔드포인트 관리형 설정](https://code.claude.com/docs/ko/server-managed-settings.md#choose-between-server-managed-and-endpoint-managed-settings)을 참조하십시오.

383 385 

384### 세션 시작 시 올바른 플러그인 권장386### 세션 시작 시 적절한 플러그인 추천하기

385 387 

386규칙이 플러그인에 있으면 팀원이 트리의 낯선 부분에서 Claude를 시작할 때 해당 영역의 소유자가 유지하는 플러그인에 대한 신호가 없습니다. [`SessionStart` hook](https://code.claude.com/docs/ko/hooks#sessionstart)은 훅이 stdout에 인쇄하는 모든 것이 첫 번째 프롬프트 전에 Claude의 컨텍스트에 추가되므로 이 간격을 닫을 수 있습니다.388규칙이 플러그인에 들어가고 나면, 트리에서 익숙하지 않은 부분에서 Claude를 시작하는 팀원은 해당 영역의 소유자가 어떤 플러그인을 유지 관리하는지 알 수 있는 단서가 없습니다. [`SessionStart` 훅](https://code.claude.com/docs/ko/hooks#sessionstart)으로 이 공백을 메울 수 있습니다. Claude Code는 훅이 stdout으로 출력하는 일반 텍스트를 첫 번째 프롬프트 전에 Claude의 컨텍스트에 추가하기 때문입니다.

387 389 

388예를 들어 [hook input](https://code.claude.com/docs/ko/hooks.md#common-input-fields)에서 시작 디렉토리를 읽고, 저장소에 커밋된 경로-플러그인 맵에서 조회하고, Claude가 첫 번째 응답에서 전달할 권장 사항을 인쇄하는 스크립트를 작성할 수 있습니다. 훅을 작성하고 등록하려면 [Automate actions with hooks](https://code.claude.com/docs/ko/hooks-guide.md)를 참조하십시오.390예를 들어, [훅 입력](https://code.claude.com/docs/ko/hooks.md#common-input-fields)에서 실행 디렉터리를 읽고, 저장소에 커밋된 경로-플러그인 매핑에서 이를 조회한 다음, Claude가 첫 번째 응답에서 전달할 추천 내용을 출력하는 스크립트를 작성할 수 있습니다. 훅을 작성하고 등록하는 방법은 [훅으로 작업 자동화하기](https://code.claude.com/docs/ko/hooks-guide.md)를 참조하십시오.

389 391 

390## 모두 함께 사용392## 모두 함께 사용

391 393 


465두 가지 기법은 패키지 간 변경을 일관되게 유지하는 데 도움이 됩니다:467두 가지 기법은 패키지 간 변경을 일관되게 유지하는 데 도움이 됩니다:

466 468 

467* **전체 변경을 한 세션에서 Claude에 제공**: 공유 편집과 호출 사이트를 함께 전달하면 각 편집 뒤의 결정이 일관되게 유지되어 패키지별로 다시 도출하지 않습니다469* **전체 변경을 한 세션에서 Claude에 제공**: 공유 편집과 호출 사이트를 함께 전달하면 각 편집 뒤의 결정이 일관되게 유지되어 패키지별로 다시 도출하지 않습니다

468* **편집 전에 계획**: [먼저 계획](https://code.claude.com/docs/ko/best-practices.md#explore-first-then-plan-then-code)하고 [Plan Mode](https://code.claude.com/docs/ko/permission-modes.md#analyze-before-you-edit-with-plan-mode)에서 Claude가 계획을 파일에 작성합니다. 긴 패키지 간 세션은 진행 중에 [컨텍스트를 압축](https://code.claude.com/docs/ko/context-window.md#what-survives-compaction)합니다. Claude Code는 각 압축 후 계획 파일을 다시 주입하므로, 대화 기록이 없을 수 있는 곳에서도 계획이 유지됩니다470* **편집 전에 계획**: [플랜 모드](https://code.claude.com/docs/ko/permission-modes.md#analyze-before-you-edit-with-plan-mode)에서 먼저 계획하면 Claude가 계획을 파일에 작성합니다. 긴 패키지 간 세션은 진행 중에 [컨텍스트를 압축](https://code.claude.com/docs/ko/context-window.md#what-survives-compaction)합니다. Claude Code는 각 압축 후 계획 파일을 다시 주입하므로, 대화 기록이 없을 수 있는 곳에서도 계획이 유지됩니다

469 471 

470## 다음 단계472## 다음 단계

471 473 

Details

361 361 

362게이트웨이는 모델 요청을 전달하지만, Claude Code는 또한 게이트웨이 경로 외부로 Anthropic 및 GitHub와 같은 타사 서비스로 불필수 백그라운드 트래픽을 전송합니다: 버전 확인, 원격 분석, 릴리스 노트 및 유사한 요청입니다. 게이트웨이로의 송신만 허용하는 네트워크에서 이러한 요청은 실패하고 송신 모니터링에서 차단된 연결로 나타날 수 있습니다.362게이트웨이는 모델 요청을 전달하지만, Claude Code는 또한 게이트웨이 경로 외부로 Anthropic 및 GitHub와 같은 타사 서비스로 불필수 백그라운드 트래픽을 전송합니다: 버전 확인, 원격 분석, 릴리스 노트 및 유사한 요청입니다. 게이트웨이로의 송신만 허용하는 네트워크에서 이러한 요청은 실패하고 송신 모니터링에서 차단된 연결로 나타날 수 있습니다.

363 363 

364Claude Code는 자격 증명이 속한 호스트로 요청이 갈 때만 원격 분석 또는 사용량 메트릭 요청에 자격 증명을 첨부합니다. `ANTHROPIC_BASE_URL`이 게이트웨이를 가리키는 동안, Claude Code는 게이트웨이 자격 증명 없이 원격 분석 이벤트를 Anthropic으로 전송합니다. [자격 증명 변수](#set-the-credential-variable) 또는 `apiKeyHelper`도 활성화되면, Claude Code는 Console [분석 대시보드](https://code.claude.com/docs/ko/analytics.md#access-analytics-for-api-customers)에 사용량 메트릭을 보고하지 않습니다. v2.1.246 이전에는 Claude Code가 게이트웨이 자격 증명을 Anthropic 호스트로 향하는 원격 분석 및 사용량 메트릭 요청에 첨부할 수 있었습니다. 모델 요청은 항상 게이트웨이가 예상하는 자격 증명과 함께 게이트웨이로 갔습니다.

365 

366해당 트래픽을 끄려면 게이트웨이 변수와 함께 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1`을 설정합니다. 동일한 셸 내보내기 또는 설정 파일 `env` 블록에서:364해당 트래픽을 끄려면 게이트웨이 변수와 함께 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1`을 설정합니다. 동일한 셸 내보내기 또는 설정 파일 `env` 블록에서:

367 365 

368**Bash 또는 Zsh**366**Bash 또는 Zsh**

mcp.md +8 −2

Details

84 84 

85SDK 호스트 애플리케이션 (예: [Agent SDK](https://code.claude.com/docs/ko/agent-sdk/mcp.md) 애플리케이션 또는 [데스크톱 앱](https://code.claude.com/docs/ko/desktop.md))만 인프로세스 `"type": "sdk"` 서버를 등록할 수 있습니다. Claude Code는 `.mcp.json`, `~/.claude.json` 또는 설정의 `"type": "sdk"` 항목을 건너뛰고 `Skipped — MCP server "<name>" declares type "sdk", which only an SDK host application can register`를 보고합니다.85SDK 호스트 애플리케이션 (예: [Agent SDK](https://code.claude.com/docs/ko/agent-sdk/mcp.md) 애플리케이션 또는 [데스크톱 앱](https://code.claude.com/docs/ko/desktop.md))만 인프로세스 `"type": "sdk"` 서버를 등록할 수 있습니다. Claude Code는 `.mcp.json`, `~/.claude.json` 또는 설정의 `"type": "sdk"` 항목을 건너뛰고 `Skipped — MCP server "<name>" declares type "sdk", which only an SDK host application can register`를 보고합니다.

86 86 

87`--output-format stream-json` 실행에서 Claude Code는 또한 `system/init` 이벤트의 [`mcp_server_errors` 필드](https://code.claude.com/docs/ko/headless#stream-responses)에서 건너뛴 `--mcp-config` 항목을 보고하므로 스크립트가 서버가 로드되지 않았음을 감지할 수 있습니다. 이는 Claude Code v2.1.219 이상이 필요합니다.87> [!NOTE]

88>

89> `--output-format stream-json` 실행에서는 Claude Code가 건너뛴 `--mcp-config` 항목을 `system/init` 이벤트의 [`mcp_server_errors` 필드](https://code.claude.com/docs/ko/headless#stream-responses)에도 보고하므로, 스크립트에서 서버가 로드되지 않았음을 감지할 수 있습니다.

88 90 

89### 옵션 2: 원격 SSE 서버 추가91### 옵션 2: 원격 SSE 서버 추가

90 92 


276 278 

277`/mcp`의 서버 메뉴에서 **Disable** 또는 **Clear authentication**을 선택하면 Claude Code는 해당 서버의 캐시 항목도 삭제합니다. **Reconnect**는 연결되거나 실패한 서버에서도 삭제합니다. `cached` 서버에서 **Reconnect**는 지금 서버에 연결하고 항목을 유지합니다. 항목을 삭제한 후 Claude Code가 서버에 다시 연결할 때, 캐시 대신 서버에서 서버의 도구 목록을 가져옵니다.279`/mcp`의 서버 메뉴에서 **Disable** 또는 **Clear authentication**을 선택하면 Claude Code는 해당 서버의 캐시 항목도 삭제합니다. **Reconnect**는 연결되거나 실패한 서버에서도 삭제합니다. `cached` 서버에서 **Reconnect**는 지금 서버에 연결하고 항목을 유지합니다. 항목을 삭제한 후 Claude Code가 서버에 다시 연결할 때, 캐시 대신 서버에서 서버의 도구 목록을 가져옵니다.

278 280 

279서버의 상태가 `✘ Failed to connect`일 때, `claude mcp list`는 해당 상태 줄에 실패 세부 정보를 추가하고, `claude mcp get <name>`은 `Issue:` 줄에 표시합니다: HTTP 상태 또는 오류 코드, 그리고 서버가 반환한 오류 텍스트입니다. `/mcp`의 서버 세부 정보 보기는 `Issue:` 행에 동일한 서버 보고 텍스트를 포함합니다. Claude Code는 이 세부 정보에서 자격 증명처럼 보이는 텍스트를 가리고, 비밀을 포함할 수 있는 확장된 서버 URL은 절대 포함하지 않습니다. Claude Code는 `✘ Connection error` 상태에 세부 정보를 추가하지 않습니다. 인쇄할 예외 텍스트가 해당 URL을 포함할 수 있기 때문입니다. v2.1.219 이전에는 두 명령 모두 상태 코드 또는 서버의 오류 텍스트 없이 기본 실패 상태만 표시했습니다.281##### 연결 실패와 구성되지 않은 서버

282 

283서버 상태가 `✘ Failed to connect`이면 `claude mcp list`는 해당 상태줄에 실패 세부 정보를 덧붙이고, `claude mcp get <name>`은 이를 `Issue:` 줄에 표시합니다. 세부 정보는 HTTP 상태 또는 오류 코드와 서버가 반환한 오류 텍스트입니다. `/mcp`의 서버 세부 보기도 `Issue:` 행에 동일한 서버 보고 텍스트를 포함합니다.

284 

285Claude Code는 이 세부 정보에서 자격 증명처럼 보이는 텍스트를 가리며, 비밀 정보를 포함할 수 있는 확장된 서버 URL은 절대 포함하지 않습니다. `✘ Connection error` 상태에는 세부 정보를 덧붙이지 않는데, 그곳에 출력될 예외 텍스트에 해당 URL이 포함될 수 있기 때문입니다.

280 286 

281`/mcp`에서 인증을 완료하고 연결이 여전히 HTTP 상태 또는 전송 오류 코드로 실패하면 Claude Code는 시도한 후 인쇄하는 메시지에 해당 코드와 서버 URL의 원점을 추가합니다. 원점은 스킴 및 호스트, 그리고 URL이 포트를 지정할 때 포트입니다. 예: `https://mcp.example.com`.287`/mcp`에서 인증을 완료하고 연결이 여전히 HTTP 상태 또는 전송 오류 코드로 실패하면 Claude Code는 시도한 후 인쇄하는 메시지에 해당 코드와 서버 URL의 원점을 추가합니다. 원점은 스킴 및 호스트, 그리고 URL이 포트를 지정할 때 포트입니다. 예: `https://mcp.example.com`.

282 288 

memory.md +2 −2

Details

237 237 

238각 중괄호 그룹은 확장된 패턴의 수를 곱합니다: `src/*.{ts,tsx}`는 두 패턴으로 확장되고, `{a,b}/{c,d}/*.{ts,tsx}`는 8개로 확장됩니다. 확장을 제한하기 위해 규칙의 전체 `paths` 목록은 1,000개 확장된 패턴과 4 MiB의 하나의 예산을 공유하며, 중괄호가 없는 패턴은 이에 대해 계산되지 않습니다.238각 중괄호 그룹은 확장된 패턴의 수를 곱합니다: `src/*.{ts,tsx}`는 두 패턴으로 확장되고, `{a,b}/{c,d}/*.{ts,tsx}`는 8개로 확장됩니다. 확장을 제한하기 위해 규칙의 전체 `paths` 목록은 1,000개 확장된 패턴과 4 MiB의 하나의 예산을 공유하며, 중괄호가 없는 패턴은 이에 대해 계산되지 않습니다.

239 239 

240Claude Code는 예산을 초과할 패턴을 확장되지 않은 상태로 사용하며, 리터럴 중괄호는 파일과 일치하지 않습니다. v2.1.217 이전에는 많은 중괄호 그룹이 있는 `paths` 값이 시작 시 CLI를 정지시키거나 충돌시켰습니다.240Claude Code는 예산을 초과할 패턴을 확장되지 않은 상태로 사용하며, 리터럴 중괄호는 파일과 일치하지 않습니다.

241 241 

242Glob 구문은 `[`를 `[abc]`와 같은 괄호 표현식의 시작으로 취급합니다. `photos [2024/**`와 같이 괄호 표현식으로 읽을 수 없는 `[`가 있는 패턴은 유효하지 않습니다: 아무것도 일치하지 않으며 규칙의 다른 패턴은 계속 작동합니다. 파일 이름의 리터럴 `[`를 일치시키려면 `photos \[2024/**`로 이스케이프하십시오.242Glob 구문은 `[`를 `[abc]`와 같은 괄호 표현식의 시작으로 취급합니다. `photos [2024/**`와 같이 괄호 표현식으로 읽을 수 없는 `[`가 있는 패턴은 유효하지 않습니다: 아무것도 일치하지 않으며 규칙의 다른 패턴은 계속 작동합니다. 파일 이름의 리터럴 `[`를 일치시키려면 `photos \[2024/**`로 이스케이프하십시오.

243 243 


568 568 

569`/memory` 명령은 사용자 및 프로젝트 범위에 걸쳐 CLAUDE.md, CLAUDE.local.md 및 기타 메모리 파일 위치를 나열하며, 아직 존재하지 않는 파일에 대한 사용자 및 프로젝트 CLAUDE.md 항목도 포함합니다. 또한 자동 메모리를 켜거나 끌 수 있으며 자동 메모리 폴더를 열 수 있는 옵션을 제공합니다. 파일을 선택하여 편집기에서 엽니다. 아직 존재하지 않는 파일을 선택하면 먼저 생성합니다. 시작 시 로드된 `CLAUDE.md` 및 규칙 파일을 확인하려면 `/context`를 실행합니다.569`/memory` 명령은 사용자 및 프로젝트 범위에 걸쳐 CLAUDE.md, CLAUDE.local.md 및 기타 메모리 파일 위치를 나열하며, 아직 존재하지 않는 파일에 대한 사용자 및 프로젝트 CLAUDE.md 항목도 포함합니다. 또한 자동 메모리를 켜거나 끌 수 있으며 자동 메모리 폴더를 열 수 있는 옵션을 제공합니다. 파일을 선택하여 편집기에서 엽니다. 아직 존재하지 않는 파일을 선택하면 먼저 생성합니다. 시작 시 로드된 `CLAUDE.md` 및 규칙 파일을 확인하려면 `/context`를 실행합니다.

570 570 

571VS Code와 같은 GUI 편집기는 파일을 별도 창에서 열며, 파일이 열려 있는 동안 세션을 계속 사용할 수 있습니다. v2.1.216 이전에는 `/memory`가 파일을 닫을 때까지 응답을 기다렸습니다. Vim과 같은 터미널 편집기는 종료할 때까지 터미널을 차지합니다.571VS Code와 같은 GUI 편집기는 파일을 별도 창에서 열며, 파일이 열려 있는 동안 세션을 계속 사용할 수 있습니다. Vim과 같은 터미널 편집기는 종료할 때까지 터미널을 차지합니다.

572 572 

573Claude에게 "항상 npm이 아닌 pnpm을 사용합니다" 또는 "API 테스트에 로컬 Redis 인스턴스가 필요하다는 것을 기억합니다"와 같이 뭔가를 기억하도록 요청하면 Claude는 자동 메모리에 저장합니다. 대신 CLAUDE.md에 지침을 추가하려면 Claude에게 직접 "이것을 CLAUDE.md에 추가합니다"라고 요청하거나 `/memory`를 통해 파일을 직접 편집합니다.573Claude에게 "항상 npm이 아닌 pnpm을 사용합니다" 또는 "API 테스트에 로컬 Redis 인스턴스가 필요하다는 것을 기억합니다"와 같이 뭔가를 기억하도록 요청하면 Claude는 자동 메모리에 저장합니다. 대신 CLAUDE.md에 지침을 추가하려면 Claude에게 직접 "이것을 CLAUDE.md에 추가합니다"라고 요청하거나 `/memory`를 통해 파일을 직접 편집합니다.

574 574 

model-config.md +21 −4

Details

542다음과 같은 경우에는 다른 수준이 적용됩니다:542다음과 같은 경우에는 다른 수준이 적용됩니다:

543 543 

544* **사용자의 직접 변경**: effort 수준을 선택하거나, `/model`에서 모델을 고르거나, 나중에 세션을 재개하면 플래그된 요청의 수준은 더 이상 이어지지 않습니다.544* **사용자의 직접 변경**: effort 수준을 선택하거나, `/model`에서 모델을 고르거나, 나중에 세션을 재개하면 플래그된 요청의 수준은 더 이상 이어지지 않습니다.

545* **스킬 effort**: 스킬의 `effort` frontmatter가 플래그된 요청에 설정한 수준은 해당 턴에 적용되며, 이후 턴은 [effort 확인 순서](#adjust-effort-level)가 폴백 모델에 부여하는 수준으로 실행됩니다.545* **한 턴에 대해 설정된 effort**: 플래그된 턴을 `ultrathink`로 높였거나 스킬의 `effort` frontmatter가 수준을 설정한 경우, 해당 수준은 그 턴에 적용됩니다. 이후 턴은 [effort 확인 순서](#adjust-effort-level)가 폴백 모델에 부여하는 수준으로 실행됩니다.

546 546 

547세션에서 `/effort status`를 실행하여 적용 중인 수준을 확인하거나, `/effort`를 실행하여 변경하세요.547세션에서 `/effort status`를 실행하여 적용 중인 수준을 확인하거나, `/effort`를 실행하여 변경하세요.

548 548 


674 674 

675#### 일회성 깊은 추론을 위해 ultrathink 사용675#### 일회성 깊은 추론을 위해 ultrathink 사용

676 676 

677프롬프트의 어디든 `ultrathink`를 포함하여 세션 effort 설정을 변경하지 않고 해당 턴에서 더 깊은 추론을 요청합니다. Claude Code는 키워드를 인식하고 컨텍스트 내 지시를 추가합니다. API로 전송된 effort 수준은 변경되지 않습니다. Claude Code는 "think", "think hard" 및 "think more"와 같은 다른 구문을 일반 프롬프트 텍스트로 전달하고 키워드로 인식하지 않습니다.677프롬프트의 어디든 `ultrathink`를 포함하여 세션 effort 설정을 변경하지 않고 해당 턴에서 더 깊은 추론을 요청합니다. Claude Code는 키워드를 인식하고 컨텍스트 내 지시를 추가합니다. Claude Code는 "think", "think hard" 및 "think more"와 같은 다른 구문을 일반 프롬프트 텍스트로 전달하고 키워드로 인식하지 않습니다.

678 

679터미널 프롬프트에 입력하면, 이 단어는 해당 턴을 `xhigh` effort로 높일 수도 있습니다. 높일 수 있는 경우 단어가 무지개 색으로 표시됩니다. Claude Code v2.1.311 이상이 필요합니다. 새 턴을 시작할 때 단어가 무지개 색으로 표시되지 않으면 다음 중 하나를 시도하세요:

680 

681* 따옴표, 괄호, 경로 또는 명령과 같은 것의 바깥에서, `/`로 시작하지 않는 프롬프트에 다시 입력합니다

682* `CLAUDE_CODE_EFFORT_LEVEL`이 `xhigh` 미만으로 설정되어 있으면 설정을 해제하거나, 자신의 [`maxEffortLevel`](https://code.claude.com/docs/ko/settings-reference#maxeffortlevel)을 `xhigh` 이상으로 높이거나, 조직 관리자에게 [조직의 제한](#organization-effort-limits)을 높여 달라고 요청합니다

683* 세션에서 `/model`을 실행하여 Opus 5.5, Sonnet 5.5, Haiku 5.5 또는 Fable 5.1 모델로 전환합니다. Amazon Bedrock처럼 이 단어가 턴을 높일 수 없는 경우에는 대신 [effort 수준을 설정](#set-the-effort-level)합니다

678 684 

679#### effort 수준 설정685#### effort 수준 설정

680 686 

681다음 중 하나를 통해 effort를 변경할 수 있습니다:687다음 중 하나를 통해 effort를 변경할 수 있습니다:

682 688 

683* **`/effort`**: 대화형 슬라이더를 열려면 인수 없이 `/effort`를 실행하고, 직접 설정하려면 `/effort` 뒤에 수준 이름을 붙여 실행하거나, 활성 모델에 대해 저장된 수준을 지우려면 `/effort auto`를 실행합니다. Claude가 작업 중일 때 실행할 수 있으며, Claude Code가 [캐시 경고](https://code.claude.com/docs/ko/prompt-caching.md#changing-effort-level)를 표시하는 경우 이를 확인하면, Claude Code는 새 수준을 턴의 다음 요청에 적용합니다689* **`/effort`**: 대화형 슬라이더를 열려면 인수 없이 `/effort`를 실행하고, 직접 설정하려면 `/effort` 뒤에 수준 이름을 붙여 실행하거나, 활성 모델에 대해 저장된 수준을 지우려면 `/effort auto`를 실행합니다

684* **`/model`에서**: 모델을 선택할 때 왼쪽/오른쪽 화살표 키를 사용하여 effort 슬라이더를 조정합니다690* **`/model`에서**: 모델을 선택할 때 왼쪽/오른쪽 화살표 키를 사용하여 effort 슬라이더를 조정합니다

685* **`--effort` 플래그**: Claude Code를 시작할 때 단일 세션에 대해 설정하려면 수준 이름을 전달합니다691* **`--effort` 플래그**: Claude Code를 시작할 때 단일 세션에 대해 설정하려면 수준 이름을 전달합니다

686* **환경 변수**: `CLAUDE_CODE_EFFORT_LEVEL`을 수준 이름 또는 `auto`로 설정합니다692* **환경 변수**: `CLAUDE_CODE_EFFORT_LEVEL`을 수준 이름 또는 `auto`로 설정합니다


692 698 

693[관리형 설정](https://code.claude.com/docs/ko/managed-settings.md)에서 `effortLevel`을 설정하면, Claude Code는 [effort 확인 순서](#adjust-effort-level)의 설정 단계에서 적용하고, 사용자는 여전히 `/effort` 또는 `--effort`로 수준을 변경할 수 있습니다. 사용자를 특정 수준 이하로 유지하려면, [`maxEffortLevel`](https://code.claude.com/docs/ko/settings-reference#maxeffortlevel)을 설정하세요.699[관리형 설정](https://code.claude.com/docs/ko/managed-settings.md)에서 `effortLevel`을 설정하면, Claude Code는 [effort 확인 순서](#adjust-effort-level)의 설정 단계에서 적용하고, 사용자는 여전히 `/effort` 또는 `--effort`로 수준을 변경할 수 있습니다. 사용자를 특정 수준 이하로 유지하려면, [`maxEffortLevel`](https://code.claude.com/docs/ko/settings-reference#maxeffortlevel)을 설정하세요.

694 700 

695effort 슬라이더는 지원되는 모델이 선택되었을 때 `/model`에 나타납니다. 현재 effort 수준은 모델 이름 옆의 세션 헤더에도 표시됩니다(예: "with low effort"). 따라서 `/model`을 열지 않고도 어느 설정이 활성화되었는지 확인할 수 있습니다. 바닥글도 시작 시 및 변경 시 effort 수준을 잠시 표시합니다.701#### 설정한 effort 수준 확인

702 

703effort 슬라이더는 지원되는 모델이 선택되었을 때 `/model`에 나타납니다. 세션 헤더에 표시되는 수준(예: "with low effort")은 effort 설정에서 온 것이며, Claude가 [아직 이전 수준으로 작업 중](#when-a-new-effort-level-starts)이더라도 마찬가지입니다. 바닥글도 시작 시 및 변경 시 effort 수준을 잠시 표시합니다.

704 

705#### 새 effort 수준이 시작되는 시점

706 

707터미널 세션에서 `/effort`가 새 수준을 확인하면, 다음에 보내는 메시지가 해당 수준으로 실행됩니다. 진행 중인 턴이 끝난 후 또는 [Claude가 아직 작업 중일 때](https://code.claude.com/docs/ko/interactive-mode.md#queue-messages-while-claude-works) 메시지를 보낼 수 있습니다:

708 

709* **턴이 끝난 후**: 그때까지 아무것도 할 필요가 없으며, 턴이 이전 수준으로 끝나는 것은 예상된 동작입니다

710* **Claude가 아직 작업 중일 때**: `keep going`과 같은 메시지를 입력하고 `Enter`를 눌러 턴을 중단하지 않고 대기열에 추가합니다. Claude는 현재 도구 호출이 끝날 때, 늦어도 턴이 끝날 때 이를 받으며, 그때부터 새 수준으로 작업합니다.

711 

712v2.1.242 이전에는 Claude Code가 턴이 끝날 때까지 `/effort` 자체를 대기열에 넣을 수 있었으며, [서드파티 제공자](https://code.claude.com/docs/ko/third-party-integrations.md)에서처럼 [기능 플래그를 가져오지](https://code.claude.com/docs/ko/env-vars.md#features-that-need-feature-flag-fetching) 않는 세션에서는 항상 그렇게 했습니다.

696 713 

697#### 적응형 추론 및 고정 사고 예산714#### 적응형 추론 및 고정 사고 예산

698 715 

Details

648| `claude_code.code_edit_tool.decision` | 코드 편집 도구 권한 결정 수 | 없음 |648| `claude_code.code_edit_tool.decision` | 코드 편집 도구 권한 결정 수 | 없음 |

649| `claude_code.active_time.total` | 총 활성 시간 | s |649| `claude_code.active_time.total` | 총 활성 시간 | s |

650 650 

651`OTEL_METRICS_EXPORTER`에 `prometheus`만 익스포터로 지정된 경우, 스크레이프가 유효한 Prometheus 텍스트 형식을 유지하도록 Claude Code는 내보내는 메트릭에서 `USD`, `tokens`, `s` 단위를 생략합니다. 메트릭 이름은 변경되지 않으며, `otlp,prometheus`처럼 익스포터를 조합한 구성에서는 단위가 유지됩니다. v2.1.216 이전에는 Prometheus 스크레이프에 일부 스크레이퍼가 거부하는 OpenMetrics 전용 `# UNIT` 줄이 포함되었습니다.651`OTEL_METRICS_EXPORTER`에 나열된 유일한 내보내기 도구가 `prometheus`인 경우, Claude Code는 스크레이프가 유효한 Prometheus 텍스트 형식을 유지하도록 내보내는 메트릭에서 `USD`, `tokens`, `s` 단위를 생략합니다. 메트릭 이름은 변경되지 않으며, `otlp,prometheus`처럼 내보내기 도구를 결합한 구성에서는 단위가 유지됩니다.

652 652 

653### 메트릭 세부 정보653### 메트릭 세부 정보

654 654 


995 995 

996 `source` 값은 이러한 출처 중 어느 것이 일치했는지 나타내지 않습니다. 어떤 출처가 호출을 거부했는지 확인하려면 동일한 `tool_use_id`를 가진 [안전 이벤트](#safety-event)를 찾아 `category` 및 `rule_source` 속성을 읽으세요. 일부 거부된 호출은 [안전 이벤트가 없습니다](#calls-without-a-safety-event).996 `source` 값은 이러한 출처 중 어느 것이 일치했는지 나타내지 않습니다. 어떤 출처가 호출을 거부했는지 확인하려면 동일한 `tool_use_id`를 가진 [안전 이벤트](#safety-event)를 찾아 `category` 및 `rule_source` 속성을 읽으세요. 일부 거부된 호출은 [안전 이벤트가 없습니다](#calls-without-a-safety-event).

997 997 

998 Claude Code는 권한 프롬프트 요청 자체가 실패한 경우에도 `"config"`를 보고합니다. 예를 들어 Agent SDK의 [`canUseTool`](https://code.claude.com/docs/ko/agent-sdk/typescript#canusetool) 콜백이나 [`--permission-prompt-tool`](https://code.claude.com/docs/ko/cli-reference#cli-flags) 도구가 잘못된 결과를 반환하거나, 요청이 대기 중인 동안 입력 스트림이 닫히면 해당 요청이 실패합니다. v2.1.216 이전에는 Claude Code가 이러한 실패를 `"user_reject"`로 보고했습니다.998 Claude Code는 권한 프롬프트 요청 자체가 실패한 경우에도 `"config"`를 보고합니다. 예를 들어 Agent SDK의 [`canUseTool`](https://code.claude.com/docs/ko/agent-sdk/typescript#canusetool) 콜백이나 [`--permission-prompt-tool`](https://code.claude.com/docs/ko/cli-reference#cli-flags) 도구가 잘못된 결과를 반환하거나, 요청이 대기 중인 동안 입력 스트림이 닫히면 해당 요청이 실패합니다.

999 * `"hook"`: `PreToolUse` 또는 `PermissionRequest` 훅이 결정을 반환했습니다.999 * `"hook"`: `PreToolUse` 또는 `PermissionRequest` 훅이 결정을 반환했습니다.

1000 * `"user_permanent"`: 사용자가 권한 프롬프트에서 "Yes, and don't ask again for ..."를 선택하여 개인 설정에 허용 규칙이 저장된 경우 내보내집니다. 대화형 CLI에서는 해당 선택 자체에 대해서만 내보내지며, 저장된 규칙과 일치하는 이후 호출은 대신 `"config"`를 내보냅니다. Agent SDK 또는 비대화형 `-p` 세션에서는 최초 선택과 이후 규칙 일치 모두 `"user_permanent"`를 내보냅니다. 수락으로 처리됩니다.1000 * `"user_permanent"`: 사용자가 권한 프롬프트에서 "Yes, and don't ask again for ..."를 선택한 경우 내보내지며, 이 선택은 개인 설정에 허용 규칙을 저장합니다. 대화형 CLI에서는 해당 선택 자체에 대해서만 내보내지며, 저장된 규칙과 일치하는 이후 호출은 대신 `"config"`를 내보냅니다. Agent SDK 또는 비대화형 `-p` 세션에서는 최초 선택과 이후 규칙 일치 모두 `"user_permanent"`를 내보냅니다. 수락으로 처리됩니다.

1001 * `"user_temporary"`: 사용자가 권한 프롬프트에서 일회성 승인으로 "Yes"를 선택했거나, 파일 편집 또는 읽기 프롬프트에서 세션 나머지 기간 동안 액세스를 부여하는 옵션을 선택한 경우 내보내집니다. 대화형 CLI에서는 선택 자체에 대해서만 내보내지며, 해당 세션 범위 권한 부여로 허용된 이후 호출은 대신 `"config"`를 내보냅니다. Agent SDK 또는 비대화형 `-p` 세션에서는 선택과 이후 일치 모두 `"user_temporary"`를 내보냅니다. 수락으로 처리됩니다.1001 * `"user_temporary"`: 사용자가 권한 프롬프트에서 일회성 승인으로 "Yes"를 선택했거나, 파일 편집 또는 읽기 프롬프트에서 세션 나머지 기간 동안 액세스를 허용하는 옵션을 선택한 경우 내보내집니다. 대화형 CLI에서는 선택 자체에 대해서만 내보내지며, 해당 세션 범위 허용으로 허용된 이후 호출은 대신 `"config"`를 내보냅니다. Agent SDK 또는 비대화형 `-p` 세션에서는 선택과 이후 일치 모두 `"user_temporary"`를 내보냅니다. 수락으로 처리됩니다.

1002 * `"user_abort"`: 사용자가 응답하지 않고 권한 프롬프트를 닫은 경우 내보내집니다. Agent SDK 및 비대화형 `-p` 세션에서는 `canUseTool` 또는 `--permission-prompt-tool` 권한 요청이 대기 중인 동안 턴을 중단하는 경우도 포함됩니다. v2.1.216 이전에는 Claude Code가 이러한 중단을 `"user_reject"`로 보고했습니다. 거부로 처리됩니다.1002 * `"user_abort"`: 사용자가 응답하지 않고 권한 프롬프트를 닫은 경우 내보내집니다. Agent SDK 및 비대화형 `-p` 세션에서는 `canUseTool` 또는 `--permission-prompt-tool` 권한 요청이 대기 중인 동안 턴을 중단한 경우도 포함됩니다. 거부로 처리됩니다.

1003 * `"user_reject"`: 사용자가 확인 요청에서 "No"를 선택한 경우 내보내집니다. 대화형 CLI에서는 해당 선택 자체에 대해서만 내보내지며, 사용자 개인 설정의 거부 규칙과 일치하는 호출은 대신 `"config"`를 내보냅니다. Agent SDK 또는 비대화형 `-p` 세션에서는 개인 설정의 거부 규칙과 일치하는 호출이 `"user_reject"`를 내보냅니다. 거부로 처리됩니다.1003 * `"user_reject"`: 사용자가 확인 요청 시 "No"를 선택한 경우 내보내집니다. 대화형 CLI에서는 해당 선택 자체에 대해서만 내보내지며, 사용자 개인 설정의 거부 규칙과 일치하는 호출은 대신 `"config"`를 내보냅니다. Agent SDK 또는 비대화형 `-p` 세션에서는 개인 설정의 거부 규칙과 일치하는 호출이 `"user_reject"`를 내보냅니다. 거부로 처리됩니다.

1004* `classifier_verdict`: 호출에 대한 자동 모드 [분류기](https://code.claude.com/docs/ko/permission-modes.md#how-the-classifier-evaluates-actions) 판정이거나, 판정이 없었을 때 Claude Code가 호출을 거부한 이유입니다. Claude Code v2.1.301 이상이 필요합니다1004* `classifier_verdict`: 호출에 대한 자동 모드 [분류기](https://code.claude.com/docs/ko/permission-modes.md#how-the-classifier-evaluates-actions) 판정이거나, 판정이 없었을 때 Claude Code가 호출을 거부한 이유입니다. Claude Code v2.1.301 이상이 필요합니다

1005 1005 

1006 * `"allow"`: 분류기가 호출을 승인했습니다1006 * `"allow"`: 분류기가 호출을 승인했습니다

Details

97 이 명령은 [비대화형 모드](https://code.claude.com/docs/ko/headless.md) 및 Agent SDK 세션에서도 작동하며, 모바일 앱 또는 웹에서 [원격 제어](https://code.claude.com/docs/ko/remote-control.md#limitations)를 통해 사용할 수 있습니다. 여기서는 [기본 제공 스타일](#built-in-output-styles)만 나열하고 선택할 수 있습니다. Claude Code v2.1.269 이상이 필요합니다.97 이 명령은 [비대화형 모드](https://code.claude.com/docs/ko/headless.md) 및 Agent SDK 세션에서도 작동하며, 모바일 앱 또는 웹에서 [원격 제어](https://code.claude.com/docs/ko/remote-control.md#limitations)를 통해 사용할 수 있습니다. 여기서는 [기본 제공 스타일](#built-in-output-styles)만 나열하고 선택할 수 있습니다. Claude Code v2.1.269 이상이 필요합니다.

98* **Terminal 메뉴**: `/config`를 실행하고 **Output style**을 선택하여 메뉴에서 스타일을 선택합니다.98* **Terminal 메뉴**: `/config`를 실행하고 **Output style**을 선택하여 메뉴에서 스타일을 선택합니다.

99* **VS Code extension**: `/`로 [명령 메뉴](https://code.claude.com/docs/ko/vs-code.md#use-the-prompt-box)를 열고 **Output styles**을 선택하여 사용자 정의 스타일을 포함한 스타일을 선택합니다. Claude Code v2.1.257 이상이 필요합니다.99* **VS Code extension**: `/`로 [명령 메뉴](https://code.claude.com/docs/ko/vs-code.md#use-the-prompt-box)를 열고 **Output styles**을 선택하여 사용자 정의 스타일을 포함한 스타일을 선택합니다. Claude Code v2.1.257 이상이 필요합니다.

100* **Desktop app**: 설정 파일(예: `.claude/settings.local.json`, 터미널 메뉴가 작성하는 파일)에서 `outputStyle` 필드를 설정합니다. `/config`를 실행하면 Claude Code는 메뉴 대신 [**Settings > Claude Code**](https://code.claude.com/docs/ko/desktop.md#what%E2%80%99s-not-available-in-desktop)를 엽니다.100* **Desktop app**: 설정 파일(예: `.claude/settings.local.json`, 터미널 메뉴가 작성하는 파일)에서 `outputStyle` 필드를 설정합니다. 여기서 `/config`를 실행하면 Claude Code는 메뉴 대신 [**Settings > Code** 또는 **Settings > Claude Code**를 엽니다](https://code.claude.com/docs/ko/desktop.md#what’s-not-available-in-desktop).

101 101 

102메뉴 없이 스타일을 설정하려면 설정 파일에서 `outputStyle` 필드를 직접 편집합니다:102메뉴 없이 스타일을 설정하려면 설정 파일에서 `outputStyle` 필드를 직접 편집합니다:

103 103 

Details

31 31 

32### 어떤 모드도 자동 승인하지 않는 작업32### 어떤 모드도 자동 승인하지 않는 작업

33 33 

34Claude Code는 `bypassPermissions`를 포함한 어떤 모드에서도 다음을 자동 승인하지 않습니다. 각 항목은 각 모드에서 대신 어떤 일이 발생하는지를 설명하는 섹션으로 연결됩니다:34Claude Code는 `bypassPermissions`를 포함한 어떤 모드에서도 다음을 자동 승인하지 않습니다. 단, `bypassPermissions` 모드에서는 [위험한 `rm` 명령에 대한 프롬프트를 끌 수 있습니다](#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode). 각 항목은 각 모드에서 대신 어떤 일이 발생하는지를 설명하는 섹션으로 연결됩니다:

35 35 

36* 명시적 [요청 규칙](https://code.claude.com/docs/ko/permissions.md#manage-permissions)과 일치하는 도구36* 명시적 [요청 규칙](https://code.claude.com/docs/ko/permissions.md#manage-permissions)과 일치하는 도구

37* 조직이 [`ask`로 설정한](https://code.claude.com/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구, 해당 설정이 Claude Code에 도달하는 세션에서37* 조직이 [`ask`로 설정한](https://code.claude.com/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구, 해당 설정이 Claude Code에 도달하는 세션에서


504* 읽기 전용 HTTP 요청504* 읽기 전용 HTTP 요청

505* 기본 브랜치를 포함하여 작업 중인 저장소의 모든 브랜치로 푸시. 이름이 배포 또는 게시 대상임을 나타내는 비기본 브랜치(예: `production` 또는 `gh-pages`)는 포함되지 않습니다: 분류기는 거기로의 푸시를 자체 조건에 따라 판단합니다.505* 기본 브랜치를 포함하여 작업 중인 저장소의 모든 브랜치로 푸시. 이름이 배포 또는 게시 대상임을 나타내는 비기본 브랜치(예: `production` 또는 `gh-pages`)는 포함되지 않습니다: 분류기는 거기로의 푸시를 자체 조건에 따라 판단합니다.

506 506 

507 푸시의 콘텐츠는 여전히 분류기의 다른 규칙에 대해 검사되고, [`permissions.deny` 규칙](https://code.claude.com/docs/ko/permissions#manage-permissions)은 여전히 모든 모드에서 [작성된 대로](https://code.claude.com/docs/ko/permissions.md#bash-rule-limits) 푸시 명령을 차단할 수 있습니다. 원격의 자체 브랜치 보호는 여전히 적용됩니다. v2.1.203부터 v2.1.211 이전까지는 일상적인 기본 브랜치 푸시와 시작한 브랜치 또는 Claude가 생성한 브랜치로의 푸시만 기본적으로 허용되었습니다.507 푸시의 콘텐츠는 여전히 분류기의 다른 규칙에 대해 검사되고, [`permissions.deny` 규칙](https://code.claude.com/docs/ko/permissions#manage-permissions)은 여전히 모든 모드에서 [작성된 대로](https://code.claude.com/docs/ko/permissions.md#bash-rule-limits) 푸시 명령을 차단할 수 있습니다. 원격의 자체 브랜치 보호는 여전히 적용됩니다.

508* 같은 세션에서 Claude가 생성한 정확한 작업 삭제508* 같은 세션에서 Claude가 생성한 정확한 작업 삭제

509* 작업의 일부로 보안 관련 코드, 구성 및 위협 모델 읽기, 검토 또는 작성509* 작업의 일부로 보안 관련 코드, 구성 및 위협 모델 읽기, 검토 또는 작성

510* 같은 다중 에이전트 세션에서 함께 작업하는 에이전트 간의 메시지510* 같은 다중 에이전트 세션에서 함께 작업하는 에이전트 간의 메시지


649 649 

650`bypassPermissions` 모드는 권한 프롬프트와 안전 확인을 비활성화하여 [보호된 경로](#protected-paths)에 대한 쓰기를 포함한 도구 호출이 즉시 실행되도록 합니다.650`bypassPermissions` 모드는 권한 프롬프트와 안전 확인을 비활성화하여 [보호된 경로](#protected-paths)에 대한 쓰기를 포함한 도구 호출이 즉시 실행되도록 합니다.

651 651 

652`bypassPermissions` 모드에서도 [어떤 모드도 자동 승인하지 않는 작업](#actions-no-mode-auto-approves)은 각각 자체적으로 실행되지 않고 프롬프트를 표시하거나 거부됩니다. [다른 조직의 공개 아티팩트](https://code.claude.com/docs/ko/artifacts.md#read-an-artifact-shared-with-you)를 읽으려면 사용자의 승인이 필요한데, 이 모드는 승인을 요청하지 않으므로 Claude는 이를 읽을 수 없습니다. [PowerShell의 Remove-Item](#remove-item-in-powershell) 거부도 이 모드에서 적용됩니다.652`bypassPermissions` 모드에서도 [어떤 모드도 자동 승인하지 않는 작업](#actions-no-mode-auto-approves)은 각각 프롬프트를 표시하거나 거부되지만, [위험한 `rm` 명령에 대한 프롬프트는 끌 수 있습니다](#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode). [다른 조직의 공개 아티팩트](https://code.claude.com/docs/ko/artifacts.md#read-an-artifact-shared-with-you)를 읽으려면 사용자의 승인이 필요한데, 이 모드는 승인을 요청하지 않으므로 Claude는 이를 읽을 수 없습니다. [PowerShell의 Remove-Item](#remove-item-in-powershell) 거부도 이 모드에서 적용됩니다.

653 653 

654두 가지 [세션 간 메시징](https://code.claude.com/docs/ko/cross-session-messaging.md) 보안 조치는 이 모드에서, 그리고 권한 우회가 가능한 대화형 터미널 계획 모드 세션에서도 계속 적용됩니다:654두 가지 [세션 간 메시징](https://code.claude.com/docs/ko/cross-session-messaging.md) 보안 조치는 이 모드에서, 그리고 권한 우회가 가능한 대화형 터미널 계획 모드 세션에서도 계속 적용됩니다:

655 655 


861This command could not be checked for dangerous rm operations: the shell may read it differently than it was parsed.861This command could not be checked for dangerous rm operations: the shell may read it differently than it was parsed.

862```862```

863 863 

864[권한 모드에서](#critical-path-removals-in-each-permission-mode) critical-path 제거에 표시되는 것과 같은 프롬프트 또는 거부가 표시되며, `bypassPermissions`도 마찬가지입니다. `Bash` 또는 `Bash(*)` allow 규칙, 샌드박스 [auto-allow mode](https://code.claude.com/docs/ko/sandboxing.md#auto-allow-mode), `"allow"`를 반환하는 `PreToolUse` 훅으로는 이 명령을 승인할 수 없습니다. 명령을 읽은 다음 프롬프트를 승인하거나, 거부된 후에는 셸에서 직접 실행합니다.864[권한 모드에서](#critical-path-removals-in-each-permission-mode) critical-path 제거에 표시되는 것과 같은 프롬프트 또는 거부가 표시되며, `bypassPermissions`도 마찬가지입니다. 단, `bypassPermissions` 모드에서는 [이 프롬프트를 끌 수 있습니다](#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode). `Bash` 또는 `Bash(*)` allow 규칙, 샌드박스 [auto-allow mode](https://code.claude.com/docs/ko/sandboxing.md#auto-allow-mode), `"allow"`를 반환하는 `PreToolUse` 훅으로는 이 명령을 승인할 수 없습니다. 명령을 읽은 다음 프롬프트를 승인하거나, 거부된 후에는 셸에서 직접 실행합니다.

865 865 

866### 마운트된 드라이브 프롬프트866### 마운트된 드라이브 프롬프트

867 867 


923 923 

924명시적 [ask 규칙](https://code.claude.com/docs/ko/permissions.md#manage-permissions)이 명령과 일치하면 Claude Code는 `auto` mode에서도 승인을 요청합니다. 시간 제한 없이 요청합니다. 승인을 요청하는 모드에서 [`PermissionRequest` hook](https://code.claude.com/docs/ko/hooks#permissionrequest)은 프롬프트에 답할 수 있습니다.924명시적 [ask 규칙](https://code.claude.com/docs/ko/permissions.md#manage-permissions)이 명령과 일치하면 Claude Code는 `auto` mode에서도 승인을 요청합니다. 시간 제한 없이 요청합니다. 승인을 요청하는 모드에서 [`PermissionRequest` hook](https://code.claude.com/docs/ko/hooks#permissionrequest)은 프롬프트에 답할 수 있습니다.

925 925 

926`bypassPermissions` 모드에서 이러한 제거를 프롬프트 없이 실행하려면 [중요 경로 제거 프롬프트 끄기](#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode)를 참조하십시오.

927 

926### 자동 모드 및 bypassPermissions 모드의 시간 제한과 거부928### 자동 모드 및 bypassPermissions 모드의 시간 제한과 거부

927 929 

928`auto` 및 `bypassPermissions` mode에서 critical-path 제거에 대한 터미널 프롬프트는 2분 카운트다운을 표시합니다:930`auto` 및 `bypassPermissions` mode에서 critical-path 제거에 대한 터미널 프롬프트는 2분 카운트다운을 표시합니다:


939| :- | :- | :- |941| :- | :- | :- |

940| [VS Code 확장](https://code.claude.com/docs/ko/vs-code.md)의 채팅 패널 | 거부합니다 | [`PermissionRequest` 훅](https://code.claude.com/docs/ko/hooks#permissionrequest)이 허용하지 않는 한 거부합니다 |942| [VS Code 확장](https://code.claude.com/docs/ko/vs-code.md)의 채팅 패널 | 거부합니다 | [`PermissionRequest` 훅](https://code.claude.com/docs/ko/hooks#permissionrequest)이 허용하지 않는 한 거부합니다 |

941| [Desktop 앱](https://code.claude.com/docs/ko/desktop.md) | 거부합니다 | `PermissionRequest` 훅이 허용하지 않는 한 거부합니다 |943| [Desktop 앱](https://code.claude.com/docs/ko/desktop.md) | 거부합니다 | `PermissionRequest` 훅이 허용하지 않는 한 거부합니다 |

942| [`-p` 실행](https://code.claude.com/docs/ko/headless) 또는 [Agent SDK 세션](https://code.claude.com/docs/ko/agent-sdk/permissions.md) | 거부합니다 | [`--permission-prompt-tool`](https://code.claude.com/docs/ko/cli-reference#cli-flags) 또는 [`canUseTool` 콜백](https://code.claude.com/docs/ko/agent-sdk/user-input#handle-tool-approval-requests)이 결정합니다. 둘 다 없거나 [`--permission-prompts none`](https://code.claude.com/docs/ko/headless#turn-off-permission-prompts-in-unattended-runs)을 사용하는 경우에는 `PermissionRequest` 훅이 허용하지 않는 한 거부합니다 |944| [`-p` 실행](https://code.claude.com/docs/ko/headless) 또는 [Agent SDK 세션](https://code.claude.com/docs/ko/agent-sdk/permissions.md) | 거부합니다 | [`--permission-prompt-tool`](https://code.claude.com/docs/ko/cli-reference#cli-flags) 또는 [`canUseTool` 콜백](https://code.claude.com/docs/ko/agent-sdk/user-input#handle-tool-approval-requests)이 결정합니다. 둘 다 없거나 [`--permission-prompts none`](https://code.claude.com/docs/ko/headless#turn-off-permission-prompts-in-unattended-runs)을 사용하는 경우에는 `PermissionRequest` 훅이 허용하지 않는 한 거부합니다. 대신 이러한 제거를 프롬프트 없이 실행하려면 [중요 경로 제거 프롬프트 끄기](#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode)를 참조하십시오 |

943 945 

944제거가 거부된 곳 어디에서든 전체 명령을 읽고 셸에서 직접 실행할 수 있습니다.946제거가 거부된 곳 어디에서든 전체 명령을 읽고 셸에서 직접 실행할 수 있습니다.

945 947 


958}960}

959```961```

960 962 

963### bypassPermissions 모드에서 중요 경로 제거 프롬프트 끄기

964 

965`bypassPermissions` 모드에서 [중요 경로](#critical-paths)를 대상으로 하는 Bash `rm` 및 `rmdir` 명령을 프롬프트 없이 실행하려면, 환경에 [`CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS=1`](https://code.claude.com/docs/ko/env-vars#variables)을 설정한 상태로 Claude Code를 시작합니다. 이를 위해서는 Claude Code v2.1.311 이상이 필요합니다. Claude Code는 시작 환경에서만 이 변수를 읽으며 [설정 파일의 `env` 블록에 있는 이 변수는 무시합니다](https://code.claude.com/docs/ko/settings-reference#variables-claude-code-ignores-in-env). 예를 들어 [셸](https://code.claude.com/docs/ko/env-vars.md#set-variables-in-your-shell)에서 변수를 설정하고 그 셸에서 `claude`를 시작합니다:

966 

967**macOS, Linux, WSL**

968 

969```bash theme={null}

970export CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS=1

971claude --permission-mode bypassPermissions

972```

973 

974**Windows PowerShell**

975 

976```powershell theme={null}

977$env:CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS = "1"

978claude --permission-mode bypassPermissions

979```

980 

981**Windows CMD**

982 

983```batch theme={null}

984set CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS=1

985claude --permission-mode bypassPermissions

986```

987 

988> [!WARNING]

989>

990> 이 변수를 설정하면 파괴적인 삭제에 대한 안전 프롬프트가 사라집니다. `rm -rf ~`와 같은 명령이 확인 없이 실행될 수 있습니다. 내용을 잃어도 괜찮은 [격리된 환경](#skip-all-checks-with-bypasspermissions-mode)에서만 설정하십시오.

991 

992제거가 프롬프트 없이 실행되는 것은 플랜 모드가 아닌 `bypassPermissions` 모드 자체에서만이며, Bash 및 [Monitor](https://code.claude.com/docs/ko/tools-reference.md#monitor-tool) 도구에서 critical-path 확인이 플래그한 항목에만 해당합니다. 여기에는 Claude Code가 완전히 파싱할 수 없는 명령도 포함되며, 이러한 명령도 프롬프트 없이 실행됩니다.

993 

994#### 중요 경로 제거 프롬프트에 대한 시작 알림

995 

996`CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS`가 작동하는지 확인하려면 Claude Code가 시작 시 출력하는 줄을 읽습니다. `-p` 실행에서는 stderr에 출력됩니다. Agent SDK 앱에서는 [`stderr` 옵션](https://code.claude.com/docs/ko/agent-sdk/typescript#options)을 전달하여 읽습니다. 이 줄은 다음 중 하나를 나타냅니다:

997 

998* **`is set, so dangerous rm commands can run without a prompt`**: 관리형 설정과 플러그인 훅이 로드되면 제거가 프롬프트 없이 실행될 수 있습니다. 제거에 계속 프롬프트가 표시되거나 거부된다면 [중요 경로 제거 프롬프트가 꺼지지 않는 이유](#why-the-critical-path-removal-prompt-stays-on)를 참조하십시오

999* **`has no effect in this session`**: 세션 전체에서 제거에 평소의 프롬프트 또는 거부가 유지됩니다. 이를 변경하려면 [중요 경로 제거 프롬프트가 꺼지지 않는 이유](#why-the-critical-path-removal-prompt-stays-on)에서 해당하는 경우를 찾으십시오

1000* **`has no effect while the Windows registry cannot be read for managed settings`**: 제거에 평소의 프롬프트 또는 거부가 유지되며, 이후 레지스트리 읽기에 성공하면 재시작 없이 변수가 적용됩니다. 제거에 계속 프롬프트가 표시되거나 거부된다면 [중요 경로 제거 프롬프트가 꺼지지 않는 이유](#why-the-critical-path-removal-prompt-stays-on)를 참조하십시오

1001 

1002줄이 없다고 해서 프롬프트가 켜져 있다는 뜻은 아닙니다. `stderr` 옵션이 없는 Agent SDK 앱에서는 줄이 표시되지 않지만, 제거는 여전히 프롬프트 없이 실행될 수 있습니다. 그 외의 경우에는 시작 환경에서 변수를 설정했는지, 세션이 [`bypassPermissions` 모드로 전환할 수 있는지](#skip-all-checks-with-bypasspermissions-mode), `claude`가 다른 세션 내부에서 실행되고 있지 않은지 확인합니다. 일부 세션은 [변수 없이 시작됩니다](#why-the-critical-path-removal-prompt-stays-on).

1003 

1004변수를 설정하지 않았는데 이러한 줄 중 하나가 표시된다면 셸 프로필 등 변수가 설정된 곳을 찾아 제거합니다.

1005 

1006#### 중요 경로 제거 프롬프트가 꺼지지 않는 이유

1007 

1008`CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS`가 효과가 없고 제거에 [평소의 프롬프트 또는 거부](#critical-path-removals-in-each-permission-mode)가 유지된다면, 다음과 같은 원인을 확인합니다:

1009 

1010* **다른 무언가가 권한 프롬프트를 처리하는 경우**: [`--permission-prompts none`](https://code.claude.com/docs/ko/headless#turn-off-permission-prompts-in-unattended-runs) 없이 사용하는 [`--permission-prompt-tool`](https://code.claude.com/docs/ko/cli-reference#cli-flags) 또는 Agent SDK [`canUseTool` 콜백](https://code.claude.com/docs/ko/agent-sdk/user-input), matcher와 관계없는 [`PermissionRequest` 훅](https://code.claude.com/docs/ko/hooks#permissionrequest), 또는 해당 이벤트를 처리하는 [mod](https://code.claude.com/docs/ko/plugins/mods/events.md#hook-the-settings-hook-events)가 원인입니다. 훅, mod, 도구 또는 콜백을 제거하고 `claude`를 다시 시작합니다

1011* **[VS Code 확장](https://code.claude.com/docs/ko/vs-code.md)의 채팅 패널 또는 [Desktop 앱](https://code.claude.com/docs/ko/desktop.md)이 세션을 실행하는 경우**: 대신 IDE의 통합 터미널과 같은 터미널에서 `claude`를 시작합니다

1012* **Bash, Edit 또는 Read를 대상으로 하는 규칙이 있는 경우**: 시작 시 또는 세션 중에 Claude Code가 읽은, 이러한 도구 중 하나를 대상으로 하는 [deny 또는 ask 규칙](https://code.claude.com/docs/ko/permissions.md#manage-permissions)이 원인이며, 나중에 제거하더라도 마찬가지입니다. 규칙을 제거하고 `claude`를 다시 시작합니다. 도구를 제외하려면 deny 규칙 대신 [`--tools`](https://code.claude.com/docs/ko/cli-reference#cli-flags)를 사용합니다

1013* **[`permissions.blockReadsOutsideWorkingDirectories`](https://code.claude.com/docs/ko/settings-reference#permissions-blockreadsoutsideworkingdirectories)가 켜져 있는 경우**: 이를 `true`로 설정하는 모든 설정 파일에서 해당 설정을 제거한 다음 `claude`를 다시 시작합니다

1014* **`claude`가 다른 세션 내부에서 실행되는 경우**: 세션의 Bash 도구나 훅에서 시작된 `claude`가 해당하며, 명령줄에 변수가 있더라도 마찬가지입니다. 자신의 셸에서 `claude`를 시작합니다. 이 중첩 세션 제한을 보안 경계로 의존하지 마십시오

1015* **`PreToolUse` 훅이 제거에 대해 `ask`로 응답하는 경우**: 훅이 반환하는 값을 변경합니다

1016* **Claude Code가 대신 세션을 시작하는 경우**: [백그라운드 세션](https://code.claude.com/docs/ko/agent-view.md), 분할 창의 [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md) 팀원, [Remote Control](https://code.claude.com/docs/ko/remote-control.md) 서버가 생성하는 세션은 변수 없이 시작됩니다. 자신의 셸에서 `claude`를 시작합니다

1017* **관리형 설정을 읽을 수 없는 경우**: Claude Code가 [관리형 설정](https://code.claude.com/docs/ko/managed-settings.md) 소스를 성공적으로 읽지 못했습니다. 서버 관리형 설정이 계속 로드되지 않는다면 [Remote managed settings failed to load](https://code.claude.com/docs/ko/errors.md#remote-managed-settings-failed-to-load)를 참조하십시오. 레지스트리 쿼리가 아닌 다른 실패의 경우 해당 소스를 관리하는 담당자에게 수정을 요청합니다

1018* **Windows 레지스트리를 쿼리할 수 없는 경우**: Windows 및 WSL에서는 [WSL이 설정에 레지스트리를 사용하지 않는 경우](https://code.claude.com/docs/ko/settings-reference.md#wslinheritswindowssettings)에도 이 변수에 레지스트리의 응답이 필요합니다. 영어가 아닌 Windows, interop이 꺼진 WSL, 또는 WSL2 커널의 컨테이너에서는 세션 내내 쿼리가 실패할 수 있습니다. interop이 꺼져 있다면 켭니다. 그렇지 않다면 해당 제거를 직접 실행합니다

1019 

961### PowerShell의 Remove-Item1020### PowerShell의 Remove-Item

962 1021 

963[PowerShell tool](https://code.claude.com/docs/ko/tools-reference.md#powershell-tool)을 활성화하면 Claude Code는 `Remove-Item`과 `cmd` 내장 명령 `rd`, `rmdir`, `del`, `erase`에 `rm` critical-path 목록과 별개의 자체 확인을 제공합니다. `Remove-Item`의 경우 결과는 대상에 따라 달라지며 첫 번째 일치하는 경우가 적용됩니다:1022[PowerShell tool](https://code.claude.com/docs/ko/tools-reference.md#powershell-tool)을 활성화하면 Claude Code는 `Remove-Item`과 `cmd` 내장 명령 `rd`, `rmdir`, `del`, `erase`에 `rm` critical-path 목록과 별개의 자체 확인을 제공합니다. `Remove-Item`의 경우 결과는 대상에 따라 달라지며 첫 번째 일치하는 경우가 적용됩니다:

permissions.md +19 −17

Details

28 28 

29"예, 다시 묻지 않기"를 선택하고 Bash 명령 또는 WebFetch 도메인과 같이 승인이 영구적으로 저장되는 경우, Claude Code는 규칙을 git 저장소의 루트에 있는 `.claude/settings.local.json`에 저장하며, [worktrees](https://code.claude.com/docs/ko/worktrees.md)를 통해 주 체크아웃으로 해결됩니다. 규칙은 해당 저장소의 모든 향후 세션에 적용되며, 하위 디렉토리 및 worktrees에서 시작된 세션도 포함됩니다. 파일 수정 승인은 파일에 저장되지 않습니다. 표에서 보듯이 세션 종료까지만 지속됩니다. git 저장소 외부 또는 Windows의 경우와 같은 일부 경우에는 Claude Code가 저장소 루트를 사용하지 않습니다. [Claude Code가 각 파일을 찾는 위치](https://code.claude.com/docs/ko/settings.md#where-claude-code-looks-for-each-file)는 이러한 경우와 규칙을 저장하는 위치를 나열합니다.29"예, 다시 묻지 않기"를 선택하고 Bash 명령 또는 WebFetch 도메인과 같이 승인이 영구적으로 저장되는 경우, Claude Code는 규칙을 git 저장소의 루트에 있는 `.claude/settings.local.json`에 저장하며, [worktrees](https://code.claude.com/docs/ko/worktrees.md)를 통해 주 체크아웃으로 해결됩니다. 규칙은 해당 저장소의 모든 향후 세션에 적용되며, 하위 디렉토리 및 worktrees에서 시작된 세션도 포함됩니다. 파일 수정 승인은 파일에 저장되지 않습니다. 표에서 보듯이 세션 종료까지만 지속됩니다. git 저장소 외부 또는 Windows의 경우와 같은 일부 경우에는 Claude Code가 저장소 루트를 사용하지 않습니다. [Claude Code가 각 파일을 찾는 위치](https://code.claude.com/docs/ko/settings.md#where-claude-code-looks-for-each-file)는 이러한 경우와 규칙을 저장하는 위치를 나열합니다.

30 30 

31v2.1.211 이전에는 Claude Code가 항상 시작 디렉토리에 규칙을 저장했으므로 worktree 또는 하위 디렉토리에서 부여된 승인이 저장소의 나머지 부분에 적용되지 않았습니다. 이전 버전이 하위 디렉토리 또는 worktree에 저장한 규칙은 여전히 거기서 시작된 세션에 적용됩니다.

32 

33때때로 권한 프롬프트는 "다시 묻지 않기" 옵션이 없고 세션의 나머지 부분에 대해 작업을 허용하는 옵션도 없는 일회성 승인만 제공합니다. Claude Code는 프롬프트가 허용할 모든 것을 보여줄 수 있을 때만 이러한 옵션을 제공하므로 프롬프트에서 저장하는 규칙은 이름이 지정된 옵션만 포함합니다. 프롬프트가 일회성 승인만 제공하는 경우, 작업을 한 번 승인하거나 [`/permissions`](#manage-permissions)에서 규칙을 직접 추가합니다. `watch`와 같은 exec 래퍼로 시작하는 명령이나 `-delete`와 같은 작업이 포함된 `find` 명령에 대한 프롬프트를 중지하려면 [Exec 래퍼 및 `find` 작업](#exec-wrappers-and-find-actions)을 참조하세요.31때때로 권한 프롬프트는 "다시 묻지 않기" 옵션이 없고 세션의 나머지 부분에 대해 작업을 허용하는 옵션도 없는 일회성 승인만 제공합니다. Claude Code는 프롬프트가 허용할 모든 것을 보여줄 수 있을 때만 이러한 옵션을 제공하므로 프롬프트에서 저장하는 규칙은 이름이 지정된 옵션만 포함합니다. 프롬프트가 일회성 승인만 제공하는 경우, 작업을 한 번 승인하거나 [`/permissions`](#manage-permissions)에서 규칙을 직접 추가합니다. `watch`와 같은 exec 래퍼로 시작하는 명령이나 `-delete`와 같은 작업이 포함된 `find` 명령에 대한 프롬프트를 중지하려면 [Exec 래퍼 및 `find` 작업](#exec-wrappers-and-find-actions)을 참조하세요.

34 32 

35### 권한 프롬프트에 답할 때 주석 추가33### 권한 프롬프트에 답할 때 주석 추가


79| `acceptEdits` | 작업 디렉토리 또는 `additionalDirectories`의 경로에 대해 파일 편집 및 `mkdir`, `touch`, `mv`, `cp` 등의 일반적인 파일 시스템 명령을 자동으로 수락합니다 |77| `acceptEdits` | 작업 디렉토리 또는 `additionalDirectories`의 경로에 대해 파일 편집 및 `mkdir`, `touch`, `mv`, `cp` 등의 일반적인 파일 시스템 명령을 자동으로 수락합니다 |

80| `plan` | Claude는 파일을 읽고 읽기 전용 셸 명령을 실행하여 탐색하지만 소스 파일을 편집하지 않습니다. [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)를 사용할 수 있는 경우 분류기 승인 명령도 실행됩니다. CLI 및 VS Code 확장에서 Plan으로 표시됩니다 |78| `plan` | Claude는 파일을 읽고 읽기 전용 셸 명령을 실행하여 탐색하지만 소스 파일을 편집하지 않습니다. [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)를 사용할 수 있는 경우 분류기 승인 명령도 실행됩니다. CLI 및 VS Code 확장에서 Plan으로 표시됩니다 |

81| `auto` | 루틴 프롬프트 없이 실행됩니다. 셸 명령 및 네트워크 요청과 같은 작업이 실행되기 전에 백그라운드 [분류기](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)가 요청과 일치하는지 확인합니다 |79| `auto` | 루틴 프롬프트 없이 실행됩니다. 셸 명령 및 네트워크 요청과 같은 작업이 실행되기 전에 백그라운드 [분류기](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)가 요청과 일치하는지 확인합니다 |

82| `dontAsk` | 그 외에 확인을 요청할 모든 호출을 자동으로 거부합니다. 다만 설치한 [mod](https://code.claude.com/docs/ko/plugins/mods/overview.md)는 이러한 호출 중 일부를 여전히 승인할 수 있습니다. 작업 디렉터리의 파일 읽기 및 승인이 필요 없는 기타 작업은 계속 실행되며, `/permissions` 또는 `permissions.allow` 규칙을 통해 사전 승인된 도구도 실행됩니다. `AskUserQuestion`, [`requiresUserInteraction`](https://code.claude.com/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구, [네트워크 경로에서의 읽기](#network-paths), 그리고 해당 설정이 Claude Code에 적용되는 세션에서 [조직이 `ask`로 설정한](https://code.claude.com/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구는 허용했더라도 거부됩니다 |80| `dontAsk` | 그 외에 확인을 요청할 모든 호출을 자동으로 거부합니다. 다만 설치한 [mod](https://code.claude.com/docs/ko/plugins/mods/overview.md)는 이러한 호출 중 일부를 여전히 승인할 수 있습니다. 작업 디렉터리의 파일 읽기 및 승인이 필요 없는 기타 작업은 계속 실행되며, `/permissions` 또는 `permissions.allow` 규칙을 통해 사전 승인된 도구도 실행됩니다. `AskUserQuestion`, [`requiresUserInteraction`](https://code.claude.com/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구, [네트워크 경로에서의 읽기](#network-paths), 그리고 해당 설정이 Claude Code에 도달하는 세션에서 [조직이 `ask`로 설정한](https://code.claude.com/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구는 허용했더라도 거부됩니다 |

83| `bypassPermissions` | 권한 프롬프트를 건너뜁니다. 단, [어떤 모드도 자동 승인하지 않는 작업](https://code.claude.com/docs/ko/permission-modes.md#actions-no-mode-auto-approves)은 제외됩니다 |81| `bypassPermissions` | 권한 프롬프트를 건너뜁니다. 단, [어떤 모드도 자동 승인하지 않는 작업](https://code.claude.com/docs/ko/permission-modes.md#actions-no-mode-auto-approves)은 제외됩니다 |

84 82 

85> [!WARNING]83> [!WARNING]


218 216 

219> [!TIP]217> [!TIP]

220>218>

221> Claude Code는 셸 연산자를 인식하므로, `Bash(safe-cmd *)` 같은 규칙이 `safe-cmd && other-cmd` 명령을 실행할 권한을 부여하지는 않습니다. 인식되는 명령 구분자는 `&&`, `||`, `;`, `|`, `|&`, `&`, 그리고 줄바꿈입니다. 규칙은 각 하위 명령과 독립적으로 매칭되어야 합니다.219> Claude Code는 셸 연산자를 인식하므로, `Bash(safe-cmd *)` 같은 규칙이 `safe-cmd && other-cmd` 명령을 실행할 권한을 부여하지는 않습니다. 인식되는 명령 구분자는 `&&`, `||`, `;`, `|`, `|&`, `&`, 그리고 줄바꿈입니다. 복합 명령이 프롬프트 없이 실행되려면 모든 하위 명령이 허용되어야 합니다. 예를 들어 하위 명령이 허용 규칙과 매칭되거나 [읽기 전용 명령](#read-only-commands)이면 허용됩니다.

222 220 

223거부 및 확인 규칙은 하위 명령 중 하나라도 매칭되면 적용되며, 서브셸, 명령 치환, 또는 `for` 루프와 같은 제어 흐름 본문 안에 중첩된 명령도 포함됩니다. `Bash(git clean *)` 같은 확인 규칙은 [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)에서도 `cd /tmp && git clean -f`나 `echo "$(git clean -f)"`에 대해 여전히 확인을 요청합니다.221거부 및 확인 규칙은 하위 명령 중 하나라도 매칭되면 적용되며, 서브셸, 명령 치환, 또는 `for` 루프와 같은 제어 흐름 본문 안에 중첩된 명령도 포함됩니다. `Bash(git clean *)` 같은 확인 규칙은 [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode)에서도 `cd /tmp && git clean -f`나 `echo "$(git clean -f)"`에 대해 여전히 확인을 요청합니다.

224 222 


314 312 

315### PowerShell313### PowerShell

316 314 

317PowerShell 권한 규칙은 Bash 규칙과 같은 형태를 사용합니다. `*` 와일드카드는 어느 위치에서든 매칭되고, `:*` 접미사는 끝의 ` *`와 동등하며, 단독 `PowerShell` 또는 `PowerShell(*)`은 모든 명령과 매칭됩니다. 다음 구성은 `Get-ChildItem`과 `git commit` 명령을 허용하고 `Remove-Item`은 차단합니다.315PowerShell 권한 규칙은 [Bash 규칙](#wildcard-patterns)과 같은 형태를 사용하며, 단독 `PowerShell` 또는 `PowerShell(*)`은 모든 명령과 매칭됩니다. 다음 구성은 `Get-ChildItem`과 `git commit` 명령을 허용하고 `Remove-Item`은 차단합니다.

318 316 

319```json theme={null}317```json theme={null}

320{318{


330}328}

331```329```

332 330 

333일반적인 별칭은 매칭 전에 정규화됩니다. cmdlet 이름으로 작성된 규칙은 해당 별칭과도 매칭되므로, `PowerShell(Get-ChildItem *)`은 `gci`, `ls`, `dir`과도 매칭됩니다. 매칭은 대소문자를 구분하지 않습니다.331일반적인 별칭은 매칭 전에 정규화됩니다. cmdlet 이름으로 작성된 규칙은 해당 별칭에도 매칭되므로, `PowerShell(Get-ChildItem *)`은 `gci`, `ls`, `dir`에도 매칭됩니다. 매칭은 대소문자를 구분하지 않습니다.

334 332 

335Claude Code는 PowerShell AST를 파싱하여 복합 명령의 각 명령을 독립적으로 검사합니다. 파이프라인 연산자 `|`, 문 구분자 `;`, 그리고 PowerShell 7 이상에서는 체인 연산자 `&&`와 `||`가 복합 명령을 하위 명령으로 분할합니다. 복합 명령이 허용되려면 규칙이 모든 하위 명령과 매칭되어야 합니다.333Claude Code는 PowerShell AST를 파싱하여 복합 명령의 각 명령을 독립적으로 검사합니다. 파이프라인 연산자 `|`, 문 구분자 `;`, 그리고 PowerShell 7 이상에서는 체인 연산자 `&&`와 `||`가 복합 명령을 하위 명령으로 분할합니다. 복합 명령이 프롬프트 없이 실행되려면 모든 하위 명령이 허용되어야 합니다. 예를 들어 허용 규칙과 매칭되면 허용됩니다.

336 334 

337### Read 및 Edit335### Read 및 Edit

338 336 


390 388 

391`/permissions`를 통해 추가한 규칙은 저장한 설정 파일에 해당하는 행을 따릅니다.389`/permissions`를 통해 추가한 규칙은 저장한 설정 파일에 해당하는 행을 따릅니다.

392 390 

393v2.1.211 이상에서 로컬 설정 규칙은 Claude Code가 [파일을 저장하는](#permission-system) 저장소 루트가 아니라 세션의 [기본 작업 디렉터리](#working-directories)를 기준으로 고정됩니다. 저장소 루트에서 시작한 세션에서는 두 디렉터리가 같습니다. [worktree](https://code.claude.com/docs/ko/worktrees.md) 세션에서는 `Edit(/src/**)` 같은 공유 규칙이 해당 워크트리 자체의 `src/` 디렉터리와 매칭됩니다.391로컬 설정 규칙은 Claude Code가 [파일을 저장하는](#permission-system) 저장소 루트가 아니라 세션의 [기본 작업 디렉터리](#working-directories)를 기준으로 고정됩니다. 저장소 루트에서 시작한 세션에서는 두 디렉터리가 같습니다. [worktree](https://code.claude.com/docs/ko/worktrees.md) 세션에서는 `Edit(/src/**)` 같은 공유 규칙이 해당 워크트리 자체의 `src/` 디렉터리와 매칭됩니다.

394 392 

395사용자 설정의 `Read(/secrets/**)` 같은 거부 규칙은 프로젝트의 `secrets` 디렉터리가 아니라 `~/.claude/secrets/**`를 차단합니다. 모든 프로젝트 내부에 적용되는 규칙을 사용자 설정에 작성하려면 대신 `//` 절대 경로나 `~/` 홈 상대 경로를 사용하십시오.393사용자 설정의 `Read(/secrets/**)` 같은 거부 규칙은 프로젝트의 `secrets` 디렉터리가 아니라 `~/.claude/secrets/**`를 차단합니다. 모든 프로젝트 내부에 적용되는 규칙을 사용자 설정에 작성하려면 대신 `//` 절대 경로나 `~/` 홈 상대 경로를 사용하십시오.

396 394 


524 522 

525이 프롬프트 없이 네트워크 공유의 파일을 읽으려면 먼저 공유에 로컬 경로를 부여하십시오.523이 프롬프트 없이 네트워크 공유의 파일을 읽으려면 먼저 공유에 로컬 경로를 부여하십시오.

526 524 

527* **Windows**: [작업 디렉터리](#working-directories)에서 설명하는 대로 공유를 드라이브 문자에 매핑하고, Claude Code를 시작할 때 `--add-dir`로 해당 드라이브를 전달합니다. 나중에 `/add-dir`로 추가하거나 설정 파일의 `additionalDirectories`에 나열한 드라이브 아래의 읽기는 여전히 확인을 요청합니다. `Z:`에 매핑된 공유에 대한 프롬프트를 없애려면 PowerShell에서 `claude --add-dir Z:\`로 새 세션을 시작하십시오.525* **Windows**: [작업 디렉터리](#working-directories)에서 설명하는 대로 공유를 드라이브 문자에 매핑하고, Claude Code를 시작할 때 `--add-dir`로 해당 드라이브를 전달합니다. `Z:`에 매핑된 공유의 경우 PowerShell에서 `claude --add-dir Z:\`를 실행합니다.

528* **macOS 및 Linux**: [Working directory is a network path](https://code.claude.com/docs/ko/errors.md#working-directory-is-a-network-path)에서 설명하는 대로 `/mnt`나 `/Volumes` 아래의 디렉터리 같은 로컬 경로에 공유를 마운트하고 그곳에서 파일을 읽습니다526* **macOS 및 Linux**: [작업 디렉터리가 네트워크 경로임](https://code.claude.com/docs/ko/errors.md#working-directory-is-a-network-path)에서 설명하는 대로 `/mnt`나 `/Volumes` 아래의 디렉터리 같은 로컬 경로에 공유를 마운트하고 그곳에서 파일을 읽습니다

529 527 

530### WebFetch528### WebFetch

531 529 


711 709 

712[기본 작업 디렉토리](#working-directories)의 하위 디렉토리에서 skills, 명령 및 subagents를 세션 중에 로드하려면 해당 하위 디렉토리의 경로로 `/add-dir`을 실행합니다. Claude Code는 하위 디렉토리가 이미 읽을 수 있으므로 프롬프트 없이 또는 작업 디렉토리를 추가하지 않고 세션의 나머지 부분에 대해 로드합니다. 이는 Claude Code v2.1.257 이상이 필요합니다.710[기본 작업 디렉토리](#working-directories)의 하위 디렉토리에서 skills, 명령 및 subagents를 세션 중에 로드하려면 해당 하위 디렉토리의 경로로 `/add-dir`을 실행합니다. Claude Code는 하위 디렉토리가 이미 읽을 수 있으므로 프롬프트 없이 또는 작업 디렉토리를 추가하지 않고 세션의 나머지 부분에 대해 로드합니다. 이는 Claude Code v2.1.257 이상이 필요합니다.

713 711 

714Claude Code는 현재 작업 디렉토리 및 해당 부모, `~/.claude/`의 사용자 디렉토리 및 관리형 설정에서 출력 스타일을 발견합니다. Hooks 및 기타 `.claude/settings.json` 키는 현재 작업 디렉토리의 `.claude/` 폴더에서 로드되며 부모 디렉토리 폴백이 없고, 사용자 `~/.claude/settings.json` 및 관리형 설정과 함께 로드됩니다. `.claude/settings.local.json`은 Claude Code가 하위 디렉토리에서 시작되더라도 git 저장소 루트에서 로드되며, Windows와 같이 Claude Code가 [저장소 루트를 사용하지 않는](https://code.claude.com/docs/ko/settings.md#where-claude-code-looks-for-each-file) 경우는 제외됩니다. v2.1.211 이전에는 현재 작업 디렉토리에서만 로드되었습니다. [Agent SDK](https://code.claude.com/docs/ko/agent-sdk/claude-code-features.md#control-filesystem-settings-with-settingsources) 세션은 모든 버전에서 작업 디렉토리에서 로드합니다.712#### 출력 스타일, 훅 및 로컬 설정을 로드하는 위치

713 

714Claude Code는 현재 작업 디렉터리 및 해당 부모, `~/.claude/`의 사용자 디렉터리 및 관리형 설정에서 출력 스타일을 발견합니다. 훅 및 기타 `.claude/settings.json` 키는 현재 작업 디렉터리의 `.claude/` 폴더에서 로드되며 부모 디렉터리 폴백이 없고, 사용자 `~/.claude/settings.json` 및 관리형 설정과 함께 로드됩니다.

715 

716`.claude/settings.local.json`은 대신 git 저장소 루트에서 로드되며, Claude Code가 하위 디렉터리에서 시작되더라도 마찬가지입니다. 단, Windows와 같이 Claude Code가 [저장소 루트를 사용하지 않는](https://code.claude.com/docs/ko/settings.md#where-claude-code-looks-for-each-file) 경우는 제외됩니다.

715 717 

716프로젝트 전체에서 해당 구성을 공유하려면 다음 방법 중 하나를 사용합니다:718프로젝트 전체에서 해당 구성을 공유하려면 다음 방법 중 하나를 사용합니다:

717 719 


792 794 

793| 저장소가 제공하는 것 | 상위 폴더만 신뢰한 경우 | `claude -p` 또는 SDK, 폴더를 신뢰하지 않은 경우 |795| 저장소가 제공하는 것 | 상위 폴더만 신뢰한 경우 | `claude -p` 또는 SDK, 폴더를 신뢰하지 않은 경우 |

794| :- | :- | :- |796| :- | :- | :- |

795| 설정 파일의 [Hooks](https://code.claude.com/docs/ko/hooks.md), [`env`](https://code.claude.com/docs/ko/settings-reference#env) 블록 및 [`apiKeyHelper`](https://code.claude.com/docs/ko/settings-reference#apikeyhelper)와 같은 도우미 명령, 그리고 프로젝트 스킬의 [hooks](https://code.claude.com/docs/ko/hooks.md#hooks-in-skills-and-agents) 및 [`allowed-tools`](https://code.claude.com/docs/ko/skills#pre-approve-tools-for-a-skill) | 사용됨 | 사용됨. 워크스페이스 신뢰는 어떤 세션에서도 스킬의 `allowed-tools`를 제한하지 않습니다 |797| 설정 파일의 [훅](https://code.claude.com/docs/ko/hooks.md), [`env`](https://code.claude.com/docs/ko/settings-reference#env) 블록 및 [`apiKeyHelper`](https://code.claude.com/docs/ko/settings-reference#apikeyhelper)와 같은 도우미 명령, 그리고 프로젝트 스킬의 [훅](https://code.claude.com/docs/ko/hooks.md#hooks-in-skills-and-agents) 및 [`allowed-tools`](https://code.claude.com/docs/ko/skills#pre-approve-tools-for-a-skill) | 사용됨 | 사용됨. 워크스페이스 신뢰는 어떤 세션에서도 스킬의 `allowed-tools`를 제한하지 않습니다 |

796| `.claude/settings.json`의 `permissions.allow` 규칙 및 `additionalDirectories` | 신뢰 대화상자를 수락할 때까지 사용되지 않으며, 대화상자는 다시 나타나 이를 나열합니다 | 사용되지 않습니다. Claude Code는 [`this workspace has not been trusted`](https://code.claude.com/docs/ko/errors#workspace-has-not-been-trusted) 경고를 stderr에 출력합니다 |798| `.claude/settings.json`의 `permissions.allow` 규칙 및 `additionalDirectories` | 신뢰 대화상자를 수락할 때까지 사용되지 않으며, 대화상자는 다시 나타나 이를 나열합니다 | 사용되지 않습니다. Claude Code는 [`this workspace has not been trusted`](https://code.claude.com/docs/ko/errors#workspace-has-not-been-trusted) 경고를 stderr에 출력합니다 |

797| 프로젝트 [subagent](https://code.claude.com/docs/ko/sub-agents.md#hooks-in-subagent-frontmatter)의 Frontmatter hooks, 프로젝트 [`@skills-dir` plugin](https://code.claude.com/docs/ko/plugins/loading#plugins-shared-through-a-repository), 그리고 저장소 또는 `--add-dir` 디렉터리의 [`extraKnownMarketplaces`](https://code.claude.com/docs/ko/settings-reference#extraknownmarketplaces) 항목 | 사용되지 않으며, 대화상자가 제공되지 않습니다 | 사용되지 않습니다 |799| 프로젝트 [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md#hooks-in-subagent-frontmatter)의 frontmatter 훅, 프로젝트 [`@skills-dir` 플러그인](https://code.claude.com/docs/ko/plugins/loading#plugins-shared-through-a-repository), 그리고 저장소 또는 `--add-dir` 디렉터리의 [`extraKnownMarketplaces`](https://code.claude.com/docs/ko/settings-reference#extraknownmarketplaces) 항목 | 사용되지 않으며, 대화상자가 제공되지 않습니다 | 사용되지 않습니다 |

798| 저장소 또는 `--add-dir` 디렉터리의 subagent frontmatter에 있는 인라인 [`mcpServers`](https://code.claude.com/docs/ko/sub-agents#scope-mcp-servers-to-a-subagent) | 사용되지 않으며, 대화상자가 제공되지 않습니다 | 사용되지 않습니다 |800| 저장소 또는 `--add-dir` 디렉터리의 서브에이전트 frontmatter에 있는 인라인 [`mcpServers`](https://code.claude.com/docs/ko/sub-agents#scope-mcp-servers-to-a-subagent) | 사용되지 않으며, 대화상자가 제공되지 않습니다 | 사용되지 않습니다 |

799| `.mcp.json`의 서버, 저장소가 [자체 설정에서 승인](https://code.claude.com/docs/ko/mcp.md#project-server-approvals-and-workspace-trust)하는 서버 포함 | Claude Code는 연결하기 전에 묻습니다. 저장소의 자체 승인은 계산되지 않습니다 | 승인 여부와 관계없이 묻지 않고 연결됩니다. SDK는 `settingSources`에 프로젝트 설정이 포함될 때만 로드합니다. 같은 폴더의 `claude mcp list`는 여전히 그러한 서버를 보류 중으로 보고합니다 |801| `.mcp.json`의 서버, 저장소가 [자체 설정에서 승인](https://code.claude.com/docs/ko/mcp.md#project-server-approvals-and-workspace-trust)하는 서버 포함 | Claude Code는 연결하기 전에 묻습니다. 저장소의 자체 승인은 계산되지 않습니다 | 승인 여부와 관계없이 묻지 않고 연결됩니다. SDK는 `settingSources`에 프로젝트 설정이 포함될 때만 로드합니다. 같은 폴더의 `claude mcp list`는 여전히 그러한 서버를 보류 중으로 보고합니다 |

800| `.mcp.json`의 서버에 있는 [`headersHelper`](https://code.claude.com/docs/ko/mcp#trust-a-folder-before-its-headershelper-runs) | 신뢰 대화상자를 수락할 때까지 실행되지 않으며, 대화상자는 도우미가 선언된 위치를 다시 이름으로 지정합니다. Claude Code는 그때까지 정적 `headers`만으로 서버를 연결합니다 | 실행되지 않습니다. Claude Code는 정적 `headers`만으로 서버를 연결하고 서버당 [`headersHelper not run`](https://code.claude.com/docs/ko/errors#headershelper-not-run) 줄을 stderr에 출력합니다 |802| `.mcp.json`의 서버에 있는 [`headersHelper`](https://code.claude.com/docs/ko/mcp#trust-a-folder-before-its-headershelper-runs) | 신뢰 대화상자를 수락할 때까지 실행되지 않으며, 대화상자는 도우미가 선언된 위치를 다시 이름으로 지정합니다. Claude Code는 그때까지 정적 `headers`만으로 서버를 연결합니다 | 실행되지 않습니다. Claude Code는 정적 `headers`만으로 서버를 연결하고 서버당 [`headersHelper not run`](https://code.claude.com/docs/ko/errors#headershelper-not-run) 줄을 stderr에 출력합니다 |

801 803 

802이 정확한 폴더를 신뢰해야 하는 행의 경우, 수동으로 신뢰하세요: `~/.claude.json`에서 `projects["<path>"].hasTrustDialogAccepted`를 `true`로 설정하세요. 여기서 `<path>`는 저장소 루트이거나 저장소 외부의 폴더입니다. Claude Code는 건너뛴 subagent hook 또는 인라인 MCP 서버의 디버그 로그 줄에, 건너뛴 허용 규칙의 stderr 경고에, 그리고 건너뛴 도우미의 `headersHelper not run` 줄에 정확한 키를 출력합니다.804이 정확한 폴더를 신뢰해야 하는 행의 경우, 수동으로 신뢰하세요: `~/.claude.json`에서 `projects["<path>"].hasTrustDialogAccepted`를 `true`로 설정하세요. 여기서 `<path>`는 저장소 루트이거나 저장소 외부의 폴더입니다. Claude Code는 건너뛴 서브에이전트 훅 또는 인라인 MCP 서버의 디버그 로그 줄에, 건너뛴 허용 규칙의 stderr 경고에, 그리고 건너뛴 도우미의 `headersHelper not run` 줄에 정확한 키를 출력합니다.

803 805 

804작성하지 않은 저장소에서 `claude -p`를 실행하기 전에, 머신에서 실행할 수 있는 것을 결정하세요:806작성하지 않은 저장소에서 `claude -p`를 실행하기 전에, 머신에서 실행할 수 있는 것을 결정하세요:

805 807 

806* `--setting-sources user`를 전달하거나, 프로젝트 설정 없이 SDK의 `settingSources`를 설정하여 Claude Code가 프로젝트의 설정 파일이나 `.mcp.json`을 읽지 않도록 합니다808* `--setting-sources user`를 전달하거나, 프로젝트 설정 없이 SDK의 `settingSources`를 설정하여 Claude Code가 프로젝트의 설정 파일이나 `.mcp.json`을 읽지 않도록 합니다

807* [`--bare`](https://code.claude.com/docs/ko/headless#start-faster-with-bare-mode)로 시작하여 Claude Code가 프로젝트에서 hooks, skills, 사용자 정의 명령, subagents, plugins, 또는 `.mcp.json` 서버를 읽지 않도록 합니다. 프로젝트의 `env` 블록 및 설정 파일의 `awsAuthRefresh`와 같은 도우미는 여전히 적용되며, Claude Code는 `apiKeyHelper`를 `--settings`에서만 읽습니다809* [`--bare`](https://code.claude.com/docs/ko/headless#start-faster-with-bare-mode)로 시작하여 Claude Code가 프로젝트에서 훅, 스킬, 사용자 정의 명령, 서브에이전트, 플러그인, 또는 `.mcp.json` 서버를 읽지 않도록 합니다. 프로젝트의 `env` 블록 및 설정 파일의 `awsAuthRefresh`와 같은 도우미는 여전히 적용되며, Claude Code는 `apiKeyHelper`를 `--settings`에서만 읽습니다

808* `--settings '{"disableAllHooks": true}'`를 전달하여 [해당 실행에 대해 hooks를 끕니다](https://code.claude.com/docs/ko/hooks.md#disable-or-remove-hooks). 사용자 설정에만 설정하는 것으로는 충분하지 않습니다. 저장소의 프로젝트 설정이 사용자 설정보다 우선하며 이를 `false`로 다시 설정할 수 있기 때문입니다810* `--settings '{"disableAllHooks": true}'`를 전달하여 [해당 실행에 대해 훅을 끕니다](https://code.claude.com/docs/ko/hooks.md#disable-or-remove-hooks). 사용자 설정에만 설정하는 것으로는 충분하지 않습니다. 저장소의 프로젝트 설정이 사용자 설정보다 우선하며 이를 `false`로 다시 설정할 수 있기 때문입니다

809* [`disabledMcpjsonServers`](https://code.claude.com/docs/ko/settings-reference#disabledmcpjsonservers) 항목을 추가하여 모든 세션 유형에서 이름으로 `.mcp.json` 서버를 거부합니다811* [`disabledMcpjsonServers`](https://code.claude.com/docs/ko/settings-reference#disabledmcpjsonservers) 항목을 추가하여 모든 세션 유형에서 이름으로 `.mcp.json` 서버를 거부합니다

810 812 

811## 예시 구성813## 예시 구성

Details

313 313 

314[advisor 도구](https://code.claude.com/docs/ko/advisor.md) 호출처럼 요청 중에 API가 직접 실행한 도구 호출을 확인하려면 `result.serverToolUses`를 읽습니다. Claude Code는 이러한 호출을 실행하지 않으므로 `tool.call`이나 `tool.check` 훅이 발생하지 않습니다. 응답에 이러한 호출이 없으면 이 필드는 존재하지 않으며, Claude Code v2.1.290 이상이 필요합니다.314[advisor 도구](https://code.claude.com/docs/ko/advisor.md) 호출처럼 요청 중에 API가 직접 실행한 도구 호출을 확인하려면 `result.serverToolUses`를 읽습니다. Claude Code는 이러한 호출을 실행하지 않으므로 `tool.call`이나 `tool.check` 훅이 발생하지 않습니다. 응답에 이러한 호출이 없으면 이 필드는 존재하지 않으며, Claude Code v2.1.290 이상이 필요합니다.

315 315 

316#### 다른 모델에 요청 보내기

317 

318`model`이 `haiku` 같은 별칭일 때 `turn.step` 요청이 모델 오류로 실패하면 Claude Code v2.1.309 이상으로 업데이트하거나 전체 모델 ID를 사용하세요. v2.1.309 이전에는 별칭이 작성된 그대로 전송되었습니다.

319 

320요청을 다른 모델에 보내려면 `yield* next({ ...e, model: 'haiku' })`처럼 `model`을 변경한 이벤트를 `next`에 전달합니다.

321 

316### 설정 읽기 변경 또는 거부하기322### 설정 읽기 변경 또는 거부하기

317 323 

318`settings.read` 훅은 mod의 읽기와 Claude Code 자체의 읽기에서 실행됩니다.324`settings.read` 훅을 사용하면 mod의 읽기든 Claude Code 자체의 읽기든 설정 읽기를 변경하거나 거부할 수 있습니다.

319 325 

320* **mod의 읽기**: mod가 [`$.settings.read`](https://code.claude.com/docs/ko/plugins/mods/api#read-one-source-or-one-key)를 호출합니다.326* **mod의 읽기**: mod가 [`$.settings.read`](https://code.claude.com/docs/ko/plugins/mods/api#read-one-source-or-one-key)를 호출합니다.

321* **Claude Code 자체의 읽기**: Claude Code가 세션의 병합된 설정을 구성합니다. 이 읽기는 설정이나 로드된 플러그인이 변경될 때 반복됩니다.327* **Claude Code 자체의 읽기**: 훅은 세션의 mod가 로드된 후 Claude Code가 세션의 설정을 병합할 때 처음 실행됩니다. 설정이나 로드된 플러그인이 변경되면 훅이 다시 실행됩니다.

322 328 

323두 읽기 중 어느 쪽에 의존하기 전에 가드와 버전을 확인하세요.329어떤 mod가 이 이벤트를 받는지와 Claude Code 버전을 확인하세요.

324 330 

325* **기본 제공 가드**: 관리형 설정이 있거나 Team 또는 Enterprise [`/login`](https://code.claude.com/docs/ko/authentication#authentication-precedence)이 세션의 자격 증명인 경우, [기본 제공 가드](https://code.claude.com/docs/ko/plugins/mods/admin.md#know-what-happens-by-default)는 설치했거나 `--plugin-dir`로 로드한 mod에서 이 훅을 건너뛸 수 있습니다. 확인하려면 [디버그 로그](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#read-the-debug-log)에서 `settings.read bypassed by cc-plugin-sec-default`를 검색하세요. 해당 텍스트가 포함된 줄에 해당 mod의 이름이 있으면 조직의 관리자에게 [해당 mod를 조직의 mod 중 하나로 설치](https://code.claude.com/docs/ko/plugins/mods/admin.md#install-your-organizations-mods)해 달라고 요청하세요.331* **기본 제공 가드**: 관리형 설정이 있거나 Team 또는 Enterprise [`/login`](https://code.claude.com/docs/ko/authentication#authentication-precedence)이 세션의 자격 증명인 경우, [기본 제공 가드](https://code.claude.com/docs/ko/plugins/mods/admin.md#know-what-happens-by-default)는 설치했거나 `--plugin-dir`로 로드한 mod에서 이 훅을 건너뛸 수 있습니다. 확인하려면 [디버그 로그](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#read-the-debug-log)에서 `settings.read bypassed by cc-plugin-sec-default`를 검색하세요. 해당 텍스트가 포함된 줄에 해당 mod의 이름이 있으면 조직의 관리자에게 [해당 mod를 조직의 mod 중 하나로 설치](https://code.claude.com/docs/ko/plugins/mods/admin.md#install-your-organizations-mods)해 달라고 요청하세요.

326* **버전**: Claude Code 자체의 읽기에서 이 이벤트가 발생하는 것과 `e.layers` 필드에는 Claude Code v2.1.304 이상이 필요합니다.332* **버전**: Claude Code 자체의 읽기에서 이 이벤트가 발생하는 것과 `e.layers` 필드에는 Claude Code v2.1.304 이상이 필요합니다.


336 342 

337#### Claude Code 자체의 읽기와 mod의 읽기 구분하기343#### Claude Code 자체의 읽기와 mod의 읽기 구분하기

338 344 

339[Claude Code 자체의 읽기](#settings-read-hook)에서 [`next.origin`](https://code.claude.com/docs/ko/plugins/mods/reference#the-hook-function)은 `{ plugin: 'engine', tier: 'core' }`이고, mod의 읽기에서 `next.origin.plugin`은 호출한 mod의 이름입니다.345[`next.origin`](https://code.claude.com/docs/ko/plugins/mods/reference#the-hook-function)을 확인하세요.

346 

347* **Claude Code 자체의 읽기**: `{ plugin: 'engine', tier: 'core' }`

348* **mod의 읽기**: `plugin`은 호출한 mod의 이름입니다

340 349 

341#### `settings.read` 훅이 반환할 수 있는 값350#### `settings.read` 훅이 반환할 수 있는 값

342 351 

343훅은 [`next(e)`](https://code.claude.com/docs/ko/plugins/mods/reference#the-hook-function)의 결과를 그대로 반환하거나, 자체 `{ value }`를 반환하거나, `{ deny: reason }`을 반환할 수 있습니다. [Claude Code 자체의 읽기](#settings-read-hook)와 mod의 읽기 모두에서 `{ value }`는 읽기가 제공하는 값을 대체하고 `{ deny: reason }`은 읽기를 거부합니다.352읽기를 그대로 두려면 [`next(e)`](#settings-read-next)의 결과를 변경 없이 반환하고, 그렇지 않으면 다음 중 하나를 반환합니다.

344 353 

345| 반환 값 | Claude Code 자체의 읽기에서 | mod의 읽기에서 |354| 반환 값 | [Claude Code 자체의 읽기](#settings-read-hook)에서 | mod의 읽기에서 |

346| :- | :- | :- |355| :- | :- | :- |

347| `{ value }` | 변경하는 각 키에 대해, 반환한 값이 [키의 스키마에 맞으면](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#settings-read-key-refused) 세션의 병합된 설정에서 해당 키의 전체 값을 대체합니다 | 해당 mod의 호출은 반환한 `value`로, 또는 반환한 `value`에서 가져온 요청된 `key`로 resolve되므로, 배열이 아닌 전체 객체를 반환하세요 |356| `{ value }` | 변경된 각 키에 대해, 제공한 값이 [키의 스키마에 맞는 경우](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#settings-read-key-refused) 세션의 병합된 설정에서 해당 키의 값 전체를 교체합니다 | 해당 mod의 호출은 제공한 `value` 또는 제공한 `value`에서 가져온, 요청한 `key`로 확인되므로 배열이 아닌 전체 객체를 반환해야 합니다 |

348| `{ deny: reason }` | 세션은 어떤 훅이 응답하기 전에 병합된 설정을 그대로 유지하며, [디버그 로그에 `reason`이 기록됩니다](https://code.claude.com/docs/ko/plugins/mods/troubleshoot#settings-read-refused) | 해당 mod의 호출이 `<calling mod>: $.settings.read: <reason>`으로 reject됩니다 |357| `{ deny: reason }` | 세션은 어떤 훅이 응답하기 전에 병합된 설정을 그대로 유지하며, [디버그 로그에 `reason`이 기록됩니다](https://code.claude.com/docs/ko/plugins/mods/troubleshoot#settings-read-refused) | 해당 mod의 호출이 `<calling mod>: $.settings.read: <reason>`으로 reject됩니다 |

349 358 

350Claude Code 자체의 읽기에서는 생략한 키가 설정 해제되므로 [`next(e)`의 `value`](#settings-read-next)를 바탕으로 `{ value }`를 구성하세요. Claude Code가 `env` 같은 키를 각 소스에서 따로 읽는 경우, `value`에서 그 키를 변경해도 [효과가 없습니다](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#settings-read-key-no-effect).359Claude Code 자체의 읽기에서는 생략한 키가 설정 해제되므로 [`next(e)`의 `value`](#settings-read-next)를 바탕으로 `{ value }`를 구성하세요. Claude Code가 `env` 같은 키를 각 소스에서 따로 읽는 경우, `value`에서 그 키를 변경해도 [효과가 없습니다](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#settings-read-key-no-effect).


373})382})

374```383```

375 384 

376Claude Code 자체의 읽기에서 훅이 문자열처럼 키의 스키마를 벗어나는 값을 반환하면, 해당 키만 어떤 훅이 응답하기 전에 병합된 값을 유지합니다. 이때 디버그 로그에는 [`the answer for <key> is no value the key can hold`](https://code.claude.com/docs/ko/plugins/mods/troubleshoot#settings-read-key-refused)가 표시됩니다. 값이 스키마에 맞는데도 키가 변경되지 않으면 [반환한 키가 효과가 없는 이유](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#settings-read-key-no-effect)를 참조하세요.385Claude Code 자체의 읽기에서 훅이 문자열처럼 키의 스키마를 벗어나는 값을 반환하면, 해당 키만 어떤 훅이 응답하기 전에 병합된 값을 유지합니다. 이때 디버그 로그에는 [`the answer for <key> is no value the key can hold`](https://code.claude.com/docs/ko/plugins/mods/troubleshoot#settings-read-key-refused)가 표시됩니다. 값이 스키마에 맞는데도 키가 변경되지 않으면 [키가 효과가 없는 이유](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#settings-read-key-no-effect)를 참조하세요.

377 386 

378### 설정 훅 이벤트 처리하기387### 설정 훅 이벤트 처리하기

379 388 

Details

421Note: Type a note and press Enter421Note: Type a note and press Enter

422```422```

423 423 

424`rows`를 추가하면 필드에 여러 줄을 담을 수 있습니다. Enter는 여전히 제출 동작을 하며, Enter 앞에 백슬래시를 입력하면 새 줄이 시작됩니다. [터미널이 지원하는 경우](https://code.claude.com/docs/ko/terminal-config.md#enter-multiline-prompts) Shift+Enter로도 새 줄을 시작할 수 있습니다. 갤러리에서 [`rows`가 있는 필드](https://code.claude.com/docs/ko/plugins/mods/gallery#input)를 확인할 수 있습니다.424`rows`를 2 이상으로 설정하면 [여러 줄을 담는 필드](https://code.claude.com/docs/ko/plugins/mods/gallery.md#input)를 만들 수 있습니다.

425 425 

426[인터페이스 갤러리](https://code.claude.com/docs/ko/plugins/mods/gallery.md)에서 대부분의 요소에 대한 샘플과 스크린샷을 확인할 수 있습니다. 다음 표는 모든 요소를 나열합니다.426[인터페이스 갤러리](https://code.claude.com/docs/ko/plugins/mods/gallery.md)에서 대부분의 요소에 대한 샘플과 스크린샷을 확인할 수 있습니다. 다음 표는 모든 요소를 나열합니다.

427 427 


546| 키 | 동작 |546| 키 | 동작 |

547| :- | :- |547| :- | :- |

548| Tab | 다음 컨트롤로 이동합니다 |548| Tab | 다음 컨트롤로 이동합니다 |

549| Up 및 Down | 그린 내용이 들어맞는 동안에는 컨트롤 사이를 이동합니다. 창이나 밴드에 표시할 수 있는 것보다 많은 행이 있으면 스크롤합니다. `Input`에서는 먼저 [필드의 행 사이를 이동](https://code.claude.com/docs/ko/plugins/mods/gallery.md#input)합니다. |549| Up 및 Down | 그린 내용이 들어맞는 동안에는 컨트롤 사이를 이동합니다. 창이나 밴드에 표시할 수 있는 것보다 많은 행이 있으면 스크롤합니다. 터미널의 `Input`에서는 [필드의 행 사이를 이동](https://code.claude.com/docs/ko/plugins/mods/gallery.md#input)하며, 첫 행이나 마지막 행에서는 그 앞이나 뒤의 컨트롤로 이동합니다. |

550| Enter | 포커스된 `Button`을 누르거나, 포커스된 `Input`을 제출하거나, `Select`에서 항목을 고릅니다 |550| Enter | 포커스된 `Button`을 누르거나, 포커스된 `Input`을 제출하거나, `Select`에서 항목을 고릅니다 |

551| 버튼의 단축키 | 해당 버튼을 누릅니다. `Input`에 포커스가 있는 동안에는 출력 가능한 모든 키가 필드로 전달됩니다. |551| 버튼의 단축키 | 해당 버튼을 누릅니다. `Input`에 포커스가 있는 동안에는 출력 가능한 모든 키가 필드로 전달됩니다. |

552| Page Up, Page Down, Home 및 End | 창이나 밴드에 표시할 수 있는 것보다 많은 행이 있으면 창이나 밴드를 스크롤합니다 |552| Page Up, Page Down, Home 및 End | 창이나 밴드에 표시할 수 있는 것보다 많은 행이 있으면 창이나 밴드를 스크롤합니다 |

Details

64`tool.check` 훅에서 다음 필드를 읽어 서브에이전트의 호출과 메인 대화의 호출을 구분하고, 조직이 커넥터 도구에 대해 승인을 요구하는지 확인할 수 있습니다.64`tool.check` 훅에서 다음 필드를 읽어 서브에이전트의 호출과 메인 대화의 호출을 구분하고, 조직이 커넥터 도구에 대해 승인을 요구하는지 확인할 수 있습니다.

65 65 

66* **`e.agentId`**: [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md) 또는 [인프로세스 팀원](https://code.claude.com/docs/ko/agent-teams.md#choose-a-display-mode)이 호출할 때 설정되며, 메인 대화가 호출할 때는 없습니다66* **`e.agentId`**: [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md) 또는 [인프로세스 팀원](https://code.claude.com/docs/ko/agent-teams.md#choose-a-display-mode)이 호출할 때 설정되며, 메인 대화가 호출할 때는 없습니다

67* **`e.ceiling`**: [해당 설정이 Claude Code에 적용되는 세션](https://code.claude.com/docs/ko/mcp.md#organization-controls-on-connector-tools)에서, 조직이 `ask`로 설정한 커넥터 도구의 경우 `ask`입니다67* **`e.ceiling`**: [해당 설정이 Claude Code에 도달하는 세션](https://code.claude.com/docs/ko/mcp.md#organization-controls-on-connector-tools)에서, 조직이 `ask`로 설정한 커넥터 도구의 경우 `ask`입니다

68 68 

69`tool.check`에서 `e.agentId`와 `e.ceiling`을 사용하려면 Claude Code v2.1.290 이상이 필요합니다.69`tool.check`에서 `e.agentId`와 `e.ceiling`을 사용하려면 Claude Code v2.1.290 이상이 필요합니다.

70 70 


110 110 

111### 명령과 구성111### 명령과 구성

112 112 

113명령 및 구성 이벤트는 명령이 실행되거나 목록에 표시될 때, `/config` 행이 표시되거나 변경될 때, 그리고 설정을 읽을 때 발생합니다.

114 

115| 이벤트 | 발생 시점 | 훅이 반환할 수 있는 값 |113| 이벤트 | 발생 시점 | 훅이 반환할 수 있는 값 |

116| :- | :- | :- |114| :- | :- | :- |

117| [`command.run`](https://code.claude.com/docs/ko/plugins/mods/api#add-a-command) | 명령이 실행되기 직전 | `{ text }`, `{}` 또는 `next(e)` |115| [`command.run`](https://code.claude.com/docs/ko/plugins/mods/api#add-a-command) | 명령이 실행되기 직전 | `{ text }`, `{}` 또는 `next(e)` |

118| `command.describe` | 명령 목록을 위해 명령마다 한 번 | `{ description, argumentHint, isHidden }` |116| `command.describe` | 명령 목록을 위해 명령마다 한 번 | `{ description, argumentHint, isHidden }` |

119| `config.set` | `/config` 행이 변경되기 직전 | `next({ ...e, value })` 또는 `{ deny: reason }` |117| `config.set` | `/config` 행이 변경되기 직전 | `next({ ...e, value })` 또는 `{ deny: reason }` |

120| `config.describe` | `/config` 행마다 한 번 | `{ label, description, isHidden }` |118| `config.describe` | `/config` 행마다 한 번 | `{ label, description, isHidden }` |

121| [`settings.read`](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-hook) | mod가 [`$.settings.read`](https://code.claude.com/docs/ko/plugins/mods/api#reach-files-processes-and-the-network)를 호출하거나, Claude Code가 세션의 병합된 설정을 만들 때 | `next(e)`, `{ value }` 또는 `{ deny: reason }` |119| [`settings.read`](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-hook) | mod가 [`$.settings.read`](https://code.claude.com/docs/ko/plugins/mods/api#reach-files-processes-and-the-network)를 호출하거나, Claude Code가 세션의 병합된 설정을 만들 때. Claude Code 자체의 읽기 시 발생과 `e.layers`에는 Claude Code v2.1.304 이상이 필요합니다 | `next(e)`, `{ value }` 또는 `{ deny: reason }` |

122 120 

123#### `settings.read`의 `e.layers` 및 `e.source`121#### `settings.read`의 `e.layers` 및 `e.source`

124 122 

125* **`e.layers`**: 설정을 담고 있는 사용 중인 소스마다 하나씩 있는 `{ source, settings }` 객체로, [우선순위](https://code.claude.com/docs/ko/settings.md#settings-precedence)가 가장 낮은 것부터 나열됩니다. [`settings.read` 훅이 받는 값](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-receives)을 참조하세요.123* **`e.layers`**: 설정을 담고 있는 사용 중인 소스마다 하나씩 있는 `{ source, settings }` 객체로, [우선순위](https://code.claude.com/docs/ko/settings.md#settings-precedence)가 가장 낮은 것부터 나열됩니다. [`settings.read` 훅이 받는 값](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-receives)을 참조하세요.

126* **`e.source`**: `$.settings.read({ source: 'policy' })`처럼 mod가 요청한 하나의 소스입니다. Claude Code 자체의 읽기와 병합된 설정에 대한 그 밖의 읽기에서는 없습니다124* **`e.source`**: `$.settings.read({ source: 'policy' })`처럼 mod가 요청한 하나의 소스입니다. Claude Code 자체의 읽기와 병합된 설정에 대한 읽기에서는 없습니다

127 

128`settings.read`에서 Claude Code 자체의 읽기 시 이벤트가 발생하는 동작과 `e.layers` 필드를 사용하려면 Claude Code v2.1.304 이상이 필요합니다. 훅이 실행되는 시점과 훅이 반환할 수 있는 값은 예제와 함께 [설정 읽기 변경 또는 거부](https://code.claude.com/docs/ko/plugins/mods/events.md#settings-read-hook)에서 확인할 수 있습니다.

129 125 

130### 턴126### 턴

131 127 


271| :- | :- | :-: | :-: | :-: |267| :- | :- | :-: | :-: | :-: |

272| [`Box`](https://code.claude.com/docs/ko/plugins/mods/interface#build-a-tree-from-elements) | `key`, flex 레이아웃, [`gap`, `padding`, `margin`](#box-spacing-steps), `width`, `height`, `minWidth`, `minHeight`, [`borderStyle`](#box-border-styles), `borderColor`, `borderDimColor`, `backgroundColor`, `position`, `top`, `left`, `right`, `bottom`, `overflow`, `display`, `hover` | ✓ | ✓ | ✓ |268| [`Box`](https://code.claude.com/docs/ko/plugins/mods/interface#build-a-tree-from-elements) | `key`, flex 레이아웃, [`gap`, `padding`, `margin`](#box-spacing-steps), `width`, `height`, `minWidth`, `minHeight`, [`borderStyle`](#box-border-styles), `borderColor`, `borderDimColor`, `backgroundColor`, `position`, `top`, `left`, `right`, `bottom`, `overflow`, `display`, `hover` | ✓ | ✓ | ✓ |

273| [`Text`](https://code.claude.com/docs/ko/plugins/mods/interface#build-a-tree-from-elements) | `color`, `backgroundColor`, [`bold`](#text-bold), `italic`, `underline`, `strikethrough`, `dimColor`, `inverse`, `wrap`, [`size`, `weight`, `mono`, `tabular`](#text-typography), `hover` | ✓ | ✓ | ✓ |269| [`Text`](https://code.claude.com/docs/ko/plugins/mods/interface#build-a-tree-from-elements) | `color`, `backgroundColor`, [`bold`](#text-bold), `italic`, `underline`, `strikethrough`, `dimColor`, `inverse`, `wrap`, [`size`, `weight`, `mono`, `tabular`](#text-typography), `hover` | ✓ | ✓ | ✓ |

274| [`Button`](https://code.claude.com/docs/ko/plugins/mods/interface#respond-to-presses-and-typing) | `key`, `label`, `onPress`, `hotkey`, `plain`, `dimColor`, `autoFocus`, `action`, `hover` | ✓ | ✓ | ✓ |270| [`Button`](https://code.claude.com/docs/ko/plugins/mods/interface#respond-to-presses-and-typing) | `key`, `label`, `children`, `onPress`, `hotkey`, `plain`, `dimColor`, `autoFocus`, `action`, `variant`, `role`, `hover` | ✓ | ✓ | ✓ |

275| [`Link`](https://code.claude.com/docs/ko/plugins/mods/interface#link-in-the-desktop-app) | `href`, `label`. [제한 사항](#limits)을 참조하십시오. | ✓ | ✓ | ✓ |271| [`Link`](https://code.claude.com/docs/ko/plugins/mods/interface#link-in-the-desktop-app) | `href`, `label`. [제한 사항](#limits)을 참조하십시오. | ✓ | ✓ | ✓ |

276| [`Code`](https://code.claude.com/docs/ko/plugins/mods/gallery#show-code-and-changes) | `source`, `language`, `path`, `startLine`, `format`, `wrap` | ✓ | ✓ | ✓ |272| [`Code`](https://code.claude.com/docs/ko/plugins/mods/gallery#show-code-and-changes) | `source`, `language`, `path`, `startLine`, `format`, `wrap` | ✓ | ✓ | ✓ |

277| `Markdown` | `text`, `key`, `dimColor`, `onLinkPress`, `pressableLinks` | ✓ | ✓ | ✓ |273| `Markdown` | `text`, `key`, `dimColor`, `onLinkPress`, `pressableLinks` | ✓ | ✓ | ✓ |


288* **밴드의 숫자 단축키**: 밴드에 있는 버튼의 숫자 `hotkey`는 사용자가 빈 프롬프트에 해당 숫자만 입력하고 잠시 멈출 때도 실행됩니다284* **밴드의 숫자 단축키**: 밴드에 있는 버튼의 숫자 `hotkey`는 사용자가 빈 프롬프트에 해당 숫자만 입력하고 잠시 멈출 때도 실행됩니다

289* **접힌 밴드**: 밴드가 [접혀 있는](https://code.claude.com/docs/ko/plugins/mods/interface.md#when-the-user-collapses-the-band) 동안에는 `action` 바인딩과 단축키 모두 밴드 안의 버튼을 누르지 않습니다285* **접힌 밴드**: 밴드가 [접혀 있는](https://code.claude.com/docs/ko/plugins/mods/interface.md#when-the-user-collapses-the-band) 동안에는 `action` 바인딩과 단축키 모두 밴드 안의 버튼을 누르지 않습니다

290* **하나의 단축키를 지정한 두 버튼**: 하나의 그리기에서 두 버튼이 동일한 `hotkey`를 지정하면 나중의 버튼이 이를 가져갑니다286* **하나의 단축키를 지정한 두 버튼**: 하나의 그리기에서 두 버튼이 동일한 `hotkey`를 지정하면 나중의 버튼이 이를 가져갑니다

287* **`variant`**: `primary` 또는 `secondary`이며, 그 밖의 값은 오류를 발생시킵니다. 터미널에서 `primary` 버튼은 `plain`이 아닌 한 강조 색상으로 그려집니다.

288* **`role`**: `dismiss`는 닫기 버튼임을 표시하며, 그 밖의 값은 오류를 발생시킵니다. 닫기 동작은 `onPress`에서 직접 처리하십시오. 텍스트와 버튼 행을 포함하는 밴드에서 데스크톱 앱은 해당 행의 첫 번째 `dismiss` 버튼을 자체 닫기 컨트롤로 그릴 수 있습니다. 터미널은 `role`이 없을 때와 동일하게 버튼을 그립니다.

289 

290`Button`은 `label` 대신 `children`을 가질 수 있습니다.

291 

292* **children으로 사용할 수 있는 것**: 이름 뒤에 흐린 세부 정보가 오거나 색상 칩이 붙는 경우처럼 문자열과 `Text` 요소를 사용할 수 있습니다. Claude Code는 `Button` 안의 그 밖의 요소를 거부합니다.

293* **버튼 이름 지정**: `label`이 버튼의 이름을 지정하며, 기본값은 children의 텍스트입니다. 단일 문자열이 아닌 children을 가진 버튼에는 `key` 또는 `label`을 지정하십시오.

294* **터미널에서**: children은 레이블이 표시될 자리에 그려지며, children의 어느 곳을 눌러도 한 번의 누름으로 처리되므로 목록의 각 행을 하나의 버튼으로 만들 수 있습니다

295* **데스크톱 앱과 VS Code 확장에서**: 버튼은 `label`을 그립니다

296 

297> [!NOTE]

298>

299> 단일 문자열이 아닌 children을 가진 `Button`을 사용하려면 Claude Code v2.1.295 이상이 필요합니다.

291 300 

292`autoFocus`는 모든 컨트롤에서 `true`만 허용하므로, 이를 끄려면 해당 prop을 생략하십시오.301`autoFocus`는 모든 컨트롤에서 `true`만 허용하므로, 이를 끄려면 해당 prop을 생략하십시오.

293 302 


295 304 

296* **`Box`**: `position`과 그에 따른 `top`, `left`, `right`, `bottom`, 그리고 `alignSelf`, `borderDimColor`, `hover`305* **`Box`**: `position`과 그에 따른 `top`, `left`, `right`, `bottom`, 그리고 `alignSelf`, `borderDimColor`, `hover`

297* **`Text`**: `size`, `mono`, `tabular`, `hover`306* **`Text`**: `size`, `mono`, `tabular`, `hover`

298* **`Button`**: `hotkey`, `plain`, `autoFocus`, `action`, `hover`. 따라서 VS Code에서는 버튼을 클릭하거나, 버튼에 포커스가 있을 때 Enter를 눌러 버튼을 누릅니다307* **`Button`**: `hotkey`, `plain`, `autoFocus`, `action`, `hover`. 따라서 VS Code에서는 버튼을 클릭하거나, 버튼에 포커스가 있을 때 Enter를 눌러 버튼을 누릅니다. 확장은 `variant`와 `role`도 무시합니다.

299* **`Code`**: `language`, `path`, `startLine`, `format`, `wrap`. 따라서 코드는 색상이나 줄 번호 없이 그려지며, `format: 'diff'` 블록은 diff의 원시 텍스트를 표시합니다308* **`Code`**: `language`, `path`, `startLine`, `format`, `wrap`. 따라서 코드는 색상이나 줄 번호 없이 그려지며, `format: 'diff'` 블록은 diff의 원시 텍스트를 표시합니다

300* **`Input` 및 `Select`**: `autoFocus`309* **`Input` 및 `Select`**: `autoFocus`, 그리고 `Input`의 `rows`

301* **`Svg`**: `isInteractive`310* **`Svg`**: `isInteractive`

302 311 

303### `Box` 테두리 스타일312### `Box` 테두리 스타일


364| `.catch` 핸들러의 실행 시간 | 1초 |373| `.catch` 핸들러의 실행 시간 | 1초 |

365| 모든 `session.end` 훅의 합계 | [SessionEnd 훅 예산](https://code.claude.com/docs/ko/hooks.md#sessionend-input)만큼(변경하지 않으면 1.5초), 설정의 `SessionEnd` 훅이 완료된 시점부터 계산 |374| 모든 `session.end` 훅의 합계 | [SessionEnd 훅 예산](https://code.claude.com/docs/ko/hooks.md#sessionend-input)만큼(변경하지 않으면 1.5초), 설정의 `SessionEnd` 훅이 완료된 시점부터 계산 |

366| `$.process.run` 타임아웃 | 기본값 30초, 최대 10분 |375| `$.process.run` 타임아웃 | 기본값 30초, 최대 10분 |

376| `$.process.run` `stdout` 및 `stderr` | 각각 4 MiB. 잘린 경우 `isStdoutTruncated` 또는 `isStderrTruncated`가 `true`입니다. |

367| `$.model.complete` `maxTokens` | 기본값 1024, 최대 64,000 또는 모델의 출력 제한 |377| `$.model.complete` `maxTokens` | 기본값 1024, 최대 64,000 또는 모델의 출력 제한 |

368| `$.fs.read` 및 `$.fs.write` | 파일 하나당 4 MiB |378| `$.fs.read` 및 `$.fs.write` | 파일 하나당 4 MiB |

369| `$.http.fetch` 요청 본문 | 4 MiB(문자 수 기준). 본문이 이보다 큰 호출은 거부됩니다. |379| `$.http.fetch` 요청 본문 | 4 MiB(문자 수 기준). 본문이 이보다 큰 호출은 거부됩니다. |


381| `$.store` | JSON 총 4 MiB |391| `$.store` | JSON 총 4 MiB |

382| `$.session.messages()` | 최신 4,096개 항목 |392| `$.session.messages()` | 최신 4,096개 항목 |

383| `$.ui.invalidate('ui.render')` 다시 그리기 | 초당 10회로 제한되며, 터미널에서는 표시 중인 창, 확장된 밴드, 프롬프트 아래의 힌트 줄에 대해 초당 30회로 제한됩니다. 그보다 빨리 들어오는 호출은 하나로 병합됩니다. |393| `$.ui.invalidate('ui.render')` 다시 그리기 | 초당 10회로 제한되며, 터미널에서는 표시 중인 창, 확장된 밴드, 프롬프트 아래의 힌트 줄에 대해 초당 30회로 제한됩니다. 그보다 빨리 들어오는 호출은 하나로 병합됩니다. |

384| `$.ui.toast` | `{ timeoutMs }`를 전달하지 않으면 4초 동안 표시됩니다 |394| `$.ui.toast` | `{ timeoutMs }`를 전달하지 않으면 4초 동안 표시됩니다. [클래식 렌더러](https://code.claude.com/docs/ko/fullscreen.md#enable-fullscreen-rendering)에서는 mod의 새 토스트가 표시 중이거나 표시 대기 중인 [이전 토스트를 대체할 수 있습니다](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#a-toast-doesn’t-appear). |

385| 사용자가 요청하지 않았는데 열린 창 | 터미널 너비가 144열 이상일 때 배치되며, 사용자가 한 번 연 이후에는 110열 이상일 때 배치됩니다 |395| 사용자가 요청하지 않았는데 열린 창 | 터미널 너비가 144열 이상일 때 배치되며, 사용자가 한 번 연 이후에는 110열 이상일 때 배치됩니다 |

396| mod API 호출 인수의 중첩 깊이 | 28,000단계. 이를 넘으면 호출이 `nesting deeper than 28000 levels is not supported`로 끝나는 메시지와 함께 거부됩니다. Claude Code v2.1.299 이상이 필요합니다. |

397| `turn.step`의 훅과 같은 [비동기 제너레이터 훅](#events) 외부에서 `next`에 전달되는 변경된 이벤트의 중첩 깊이 | 28,000단계. 이를 넘으면 `next`가 `nesting deeper than 28000 levels is not supported`로 끝나는 메시지와 함께 거부됩니다. Claude Code v2.1.299 이상이 필요합니다. |

398| `ui.render`, `ui.resolve`, 비동기 제너레이터 훅 외부에서 훅 반환 값의 중첩 깊이 | 28,000단계. 이를 넘으면 훅의 결과가 거부되며, [이를 보고하는 알림](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing)에 `nesting deeper than 28000 levels is not supported`가 포함됩니다. Claude Code v2.1.299 이상이 필요합니다. |

386| 훅 모듈의 한 파일 안에서 서로 중첩된 함수, 블록, 루프 등의 범위 | 2,000 |399| 훅 모듈의 한 파일 안에서 서로 중첩된 함수, 블록, 루프 등의 범위 | 2,000 |

387| 명령, 도구, 서브에이전트 유형 및 창 이름 | 문자, 숫자, `_`, `-`로 구성되며 최대 64자 |400| 명령, 도구, 서브에이전트 유형 및 창 이름 | 문자, 숫자, `_`, `-`로 구성되며 최대 64자 |

388| 하나의 `claude plugin test` 테스트 | 테스트에서 `timeoutMs`를 설정하지 않으면 5초 |401| 하나의 `claude plugin test` 테스트 | 테스트에서 `timeoutMs`를 설정하지 않으면 5초 |

Details

341 341 

342### `settings.read` 훅이 반환하는 키가 적용되지 않음342### `settings.read` 훅이 반환하는 키가 적용되지 않음

343 343 

344반환된 `env` 항목은 환경 변수가 되지 않습니다. 반환된 `allow`, `ask`, `deny` 규칙은 도구 호출 시 검사되지 않습니다. 이러한 항목은 [설정 파일](https://code.claude.com/docs/ko/settings.md)에서 설정하거나, 환경 변수의 경우 [`$.env.set`](https://code.claude.com/docs/ko/plugins/mods/api#reach-files-processes-and-the-network)을 호출합니다.344[Claude Code 자체의 읽기](https://code.claude.com/docs/ko/plugins/mods/events.md#settings-read-hook)에서 권한 규칙이나 `env`를 반환하면, 해당 규칙은 도구 호출 시 검사되지 않으며 `env` 항목은 환경 변수가 되지 않습니다. 둘 다 [설정 파일](https://code.claude.com/docs/ko/settings.md)을 사용하거나, `env`의 경우 [`$.env.set`](https://code.claude.com/docs/ko/plugins/mods/api#reach-files-processes-and-the-network)을 사용합니다.

345 345 

346다른 키의 경우 [어떤 mod가 어느 버전부터 `settings.read`를 받는지](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-hook) 확인한 다음, [디버그 로그](#read-the-debug-log)에서 `settings.read`를 검색하여 다음 줄 중 하나를 찾습니다.346다른 키의 경우 [어떤 mod가 어느 버전부터 `settings.read`를 받는지](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-hook) 확인한 다음, [디버그 로그](#read-the-debug-log)에서 `settings.read`를 검색하여 다음 줄 중 하나를 찾습니다.

347 347 


349| :- | :- |349| :- | :- |

350| mod 이름 뒤에 오는 `settings.read hook skipped` | 훅이 실패했습니다. [해당 줄이 보고하는 오류를 수정합니다](#hook-skipped). |350| mod 이름 뒤에 오는 `settings.read hook skipped` | 훅이 실패했습니다. [해당 줄이 보고하는 오류를 수정합니다](#hook-skipped). |

351| mod 이름이 앞에 나오는 줄의 `settings.read bypassed by cc-plugin-sec-default` | [기본 제공 가드](https://code.claude.com/docs/ko/plugins/mods/admin.md#know-what-happens-by-default)가 훅을 건너뛰었습니다. 조직의 관리자에게 [해당 mod를 조직의 mod 중 하나로 설치](https://code.claude.com/docs/ko/plugins/mods/admin.md#install-your-organizations-mods)해 달라고 요청합니다. |351| mod 이름이 앞에 나오는 줄의 `settings.read bypassed by cc-plugin-sec-default` | [기본 제공 가드](https://code.claude.com/docs/ko/plugins/mods/admin.md#know-what-happens-by-default)가 훅을 건너뛰었습니다. 조직의 관리자에게 [해당 mod를 조직의 mod 중 하나로 설치](https://code.claude.com/docs/ko/plugins/mods/admin.md#install-your-organizations-mods)해 달라고 요청합니다. |

352| `settings.read: the answer for <key> is no value the key can hold` | 반환된 값이 키의 스키마에 맞지 않습니다. [스키마가 허용하는 값을 반환합니다](#settings-read-key-refused). |352| `settings.read: the answer for <key> is no value the key can hold` | 훅이 해당 키에 대해 반환한 값을 Claude Code가 거부했습니다. 해당 훅은 사용자의 훅일 수도 있고 다른 mod의 훅일 수도 있습니다. [상황에 맞는 조치](#settings-read-key-refused)를 따릅니다. |

353| `settings.read: the merge never settles for <key>` | 해당 줄에 명시된 키는 설정 소스의 값을 유지합니다. 설정 파일에서 해당 키를 설정합니다. |353| `settings.read: the merge never settles for <key>` | 해당 줄에 명시된 키는 설정 소스의 값을 유지합니다. 설정 파일에서 해당 키를 설정합니다. |

354| mod 이름 뒤에 오는 `answered settings.read without next()` | 해당 mod가 [사용자의 mod보다 먼저 실행되는](https://code.claude.com/docs/ko/plugins/mods/events.md#the-order-mods-run-in) 경우에만 관련이 있습니다. 이 경우 해당 읽기에서 사용자의 훅은 실행되지 않았습니다. [해당 mod를 끄거나](https://code.claude.com/docs/ko/plugins/mods/overview.md#turn-mods-on-or-off), 조직에서 배포한 mod라면 관리자에게 꺼 달라고 요청합니다. |354| mod 이름 뒤에 오는 `answered settings.read without next()` | 명시된 mod가 [사용자의 mod보다 먼저 실행되는](https://code.claude.com/docs/ko/plugins/mods/events.md#the-order-mods-run-in) 경우 사용자의 훅이 영향을 받습니다. 이 경우 해당 읽기에서 사용자의 훅은 실행되지 않았습니다. [해당 mod를 끄거나](https://code.claude.com/docs/ko/plugins/mods/overview.md#turn-mods-on-or-off), 조직에서 배포한 mod라면 관리자에게 꺼 달라고 요청합니다. |

355| `settings.read: refused to the engine` | 읽기가 거부되어 어떤 훅의 `{ value }`도 적용되지 않았습니다. [무엇이 거부했는지 찾습니다](#settings-read-refused). |355| `settings.read: refused to the engine` | Claude Code 자체의 읽기가 거부되어 사용자의 값이 적용되지 않았습니다. [무엇이 거부했는지 찾습니다](#settings-read-refused). |

356 356 

357어떤 줄로도 키를 설명할 수 없다면, 사용자의 mod보다 먼저 실행되는 mod 중 [키를 변경하는](https://code.claude.com/docs/ko/plugins/mods/events.md#settings-read-example) `settings.read` 훅이 있는지 확인합니다. 해당 mod를 끄거나, 조직의 관리자에게 꺼 달라고 요청합니다. 그러한 훅이 없다면 설정 파일에서 키를 설정합니다.357어떤 줄로도 키를 설명할 수 없다면, 사용자의 mod보다 먼저 실행되는 mod 중 [키를 변경하는](https://code.claude.com/docs/ko/plugins/mods/events.md#settings-read-example) `settings.read` 훅이 있는지 확인합니다. 해당 mod를 끄거나, 조직의 관리자에게 꺼 달라고 요청합니다. 그러한 훅이 없다면 설정 파일에서 키를 설정합니다.

358 358 

359### `the answer for <key> is no value the key can hold`359### `the answer for <key> is no value the key can hold`

360 360 

361이 [디버그 로그](#read-the-debug-log) 줄은 [`settings.read`](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-hook) 훅이 명시된 키에 대해 반환한 값을 Claude Code가 거부했으며, 해당 키에만 해당한다는 의미입니다.361이 [디버그 로그](#read-the-debug-log) 줄은 Claude Code가 [`settings.read`](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-hook) 훅이 해당 키에 대해 반환한 값을 거부했으며, 거부된 것은 그 키 하나뿐이라는 의미입니다:

362 362 

363```text theme={null}363```text theme={null}

364settings.read: the answer for <key> is no value the key can hold; the settings' own value stands364settings.read: the answer for <key> is no value the key can hold; the settings' own value stands

365```365```

366 366 

367명시된 키에 대해 반환한 값이 유형이나 범위 등에서 해당 키의 스키마에 맞지 않았습니다. 해당 키의 [설정 참조](https://code.claude.com/docs/ko/settings-reference.md) 항목이 허용하는 값을 반환합니다. 값이 맞지 않는 동안 해당 키는 훅이 응답하기 전에 설정 소스에서 병합된 값을 유지합니다. 로그 줄에서는 이를 설정 자체의 값(the settings' own value)이라고 부릅니다.367명시된 키에 대해 반환된 값이 유형이나 범위 등에서 해당 키의 스키마에 맞지 않았습니다.

368 

369* **사용자의 값이 키의 스키마에 맞지 않는 경우**: 해당 키의 [설정 참조](https://code.claude.com/docs/ko/settings-reference.md) 항목이 허용하는 값을 반환합니다.

370* **사용자의 값이 맞는 경우**: 맞지 않는 값은 다른 mod의 `settings.read` 훅에서 온 것입니다. 해당 mod를 찾으려면 [mod를 하나씩 끄는 단계](#settings-read-refused)를 따릅니다. 새 로그마다 `refused to the engine` 대신 이 줄을 검색합니다.

371 

372값이 맞지 않는 동안 해당 키는 훅이 응답하기 전에 설정 소스에서 병합된 값을 유지합니다. 로그 줄에서는 이를 설정 자체의 값(the settings' own value)이라고 부릅니다.

368 373 

369### `settings.read: refused to the engine`374### `settings.read: refused to the engine`

370 375 

371이 [디버그 로그](#read-the-debug-log) 줄은 [Claude Code 자체의 읽기](https://code.claude.com/docs/ko/plugins/mods/events.md#settings-read-hook)가 거부되어 사용자의 훅을 포함한 어떤 훅의 `{ value }`도 적용되지 않았다는 의미입니다. `settings.read` 훅이 [`{ deny: reason }`](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-returns)으로 해당 읽기를 거부하면, 로그 줄에 그 훅의 사유가 포함됩니다.376[Claude Code 자체의 읽기](https://code.claude.com/docs/ko/plugins/mods/events.md#settings-read-hook)가 거부되면 [디버그 로그](#read-the-debug-log)에 이 줄이 나타나며, Claude Code는 모든 훅의 값을 버립니다. `settings.read` 훅이 [`{ deny: reason }`](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-returns)으로 해당 읽기를 거부하면, 로그 줄에 그 훅의 사유가 포함됩니다.

372 377 

373```text theme={null}378```text theme={null}

374settings.read: refused to the engine (engine: $.settings.read: <reason>); the settings' own values stand379settings.read: refused to the engine (engine: $.settings.read: <reason>); the settings' own values stand

375```380```

376 381 

377사용자 훅의 코드에서 `<reason>` 텍스트를 검색합니다.382사용자의 코드에서 괄호 안의 사유를 검색합니다.

378 383 

379* **코드에 해당 텍스트가 있는 경우**: 사용자의 훅이 읽기를 거부했습니다. [`next.origin`](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-origin)이 Claude Code 자체의 읽기를 나타낼 때 `{ value }`를 반환하도록 수정합니다.384* **코드에 해당 텍스트가 있는 경우**: 사용자의 훅이 읽기를 거부했습니다. [`next.origin`](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-origin)이 Claude Code 자체의 읽기를 나타낼 때 `{ value }`를 반환하도록 수정합니다.

380* **코드에 해당 텍스트가 없는 경우**: 다른 mod를 하나씩 [끕니다](https://code.claude.com/docs/ko/plugins/mods/overview.md#turn-mods-on-or-off). 하나를 끌 때마다 셸에서 이 세션의 명령을 새 경로를 지정한 `--debug-file` 하나와 함께 다시 실행하고, 해당 파일에서 `refused to the engine`을 검색합니다. 해당 줄이 있으면 다음 mod를 끕니다. 없으면 마지막으로 끈 mod가 읽기를 거부한 것이므로 그 mod를 끈 상태로 유지합니다.385* **코드에 해당 사유가 없는 경우**: 다른 mod를 하나씩 [끕니다](https://code.claude.com/docs/ko/plugins/mods/overview.md#turn-mods-on-or-off). 조직에서 배포한 mod라면 관리자에게 꺼 달라고 요청합니다. 하나를 끌 때마다 다음을 수행합니다.

386 1. 셸에서 `claude --debug-file ./settings-read-2.log` 뒤에 세션을 시작할 때 사용한 플래그를 붙여 세션을 시작합니다. 매번 새 경로를 사용합니다.

387 2. 해당 파일에서 `refused to the engine`을 검색합니다. 해당 줄이 있으면 다음 mod를 끕니다. 없으면 마지막으로 끈 mod가 읽기를 거부한 것이므로 그 mod를 끈 상태로 유지합니다.

381 388 

382남은 다른 mod가 없다면 훅이 반환하는 키에 대해 [설정 파일](https://code.claude.com/docs/ko/settings.md)을 사용합니다. 읽기가 거부되는 동안에도 설정 파일의 값은 유지됩니다.389남은 다른 mod가 없는데도 해당 줄이 계속 나타나면, 훅이 반환하는 키를 [설정 파일](https://code.claude.com/docs/ko/settings.md)에서 설정합니다. 읽기가 거부되는 동안에도 설정 파일의 값은 유지됩니다.

383 390 

384## 디버그 로그 읽기391## 디버그 로그 읽기

385 392 

Details

192VS Code 확장 프로그램과 Desktop 앱에도 자동 연결 토글이 있습니다.192VS Code 확장 프로그램과 Desktop 앱에도 자동 연결 토글이 있습니다.

193 193 

194* **VS Code 확장 프로그램**: [명령 메뉴](https://code.claude.com/docs/ko/vs-code.md#use-the-prompt-box)의 Settings 섹션에 있는 **Enable Remote Control for all sessions**.194* **VS Code 확장 프로그램**: [명령 메뉴](https://code.claude.com/docs/ko/vs-code.md#use-the-prompt-box)의 Settings 섹션에 있는 **Enable Remote Control for all sessions**.

195* **Desktop 앱**: **Settings > Claude Code > Connect new sessions to Remote Control**. [다른 기기에 표시되는 세션 제어하기](https://code.claude.com/docs/ko/desktop.md#control-which-sessions-appear-on-your-other-devices)를 참조하세요.195* **Desktop 앱**: **Settings > Code** 또는 **Settings > Claude Code**에 있는 **Connect new sessions to Remote Control**. [다른 기기에 표시되는 세션 제어하기](https://code.claude.com/docs/ko/desktop.md#control-which-sessions-appear-on-your-other-devices)를 참조하세요.

196 196 

197대신 설정 파일에서 자동 연결을 켜려면 사용자 `~/.claude/settings.json` 또는 [관리형 설정](https://code.claude.com/docs/ko/managed-settings.md)에서 [`remoteControlAtStartup`](https://code.claude.com/docs/ko/settings-reference#remotecontrolatstartup)을 `true`로 설정합니다. 프로젝트 또는 로컬 설정(`.claude/settings.json`, `.claude/settings.local.json`)에서는 Claude Code가 `false`를 적용하여 해당 저장소의 자동 연결을 끄지만 `true`는 무시하므로, 체크인된 파일로 저장소를 여는 모든 사람에게 Remote Control을 켤 수는 없습니다.197대신 설정 파일에서 자동 연결을 켜려면 사용자 `~/.claude/settings.json` 또는 [관리형 설정](https://code.claude.com/docs/ko/managed-settings.md)에서 [`remoteControlAtStartup`](https://code.claude.com/docs/ko/settings-reference#remotecontrolatstartup)을 `true`로 설정합니다. 프로젝트 또는 로컬 설정(`.claude/settings.json`, `.claude/settings.local.json`)에서는 Claude Code가 `false`를 적용하여 해당 저장소의 자동 연결을 끄지만 `true`는 무시하므로, 체크인된 파일로 저장소를 여는 모든 사람에게 Remote Control을 켤 수는 없습니다.

198 198 


363 * 텍스트 출력 명령: `/compact`, `/clear`, `/context`, `/usage`, `/exit`, `/usage-credits`, `/recap`, `/reload-plugins`. `/usage-credits`는 브라우저를 여는 대신 청구 URL을 출력합니다. `/reload-plugins`는 세션이 대화형 터미널에서 실행될 때만 작동하며, 대화형 터미널이 없는 세션은 이를 거부합니다.363 * 텍스트 출력 명령: `/compact`, `/clear`, `/context`, `/usage`, `/exit`, `/usage-credits`, `/recap`, `/reload-plugins`. `/usage-credits`는 브라우저를 여는 대신 청구 URL을 출력합니다. `/reload-plugins`는 세션이 대화형 터미널에서 실행될 때만 작동하며, 대화형 터미널이 없는 세션은 이를 거부합니다.

364 * `/model`, `/effort`, `/fast`, `/color`, `/rename`: 값을 인수로 전달합니다. 예를 들어 `/model sonnet` 또는 `/effort high`와 같습니다. 모바일과 웹에서 `/model`과 `/effort`는 터미널의 선택기나 슬라이더 대신 인수를 받습니다.364 * `/model`, `/effort`, `/fast`, `/color`, `/rename`: 값을 인수로 전달합니다. 예를 들어 `/model sonnet` 또는 `/effort high`와 같습니다. 모바일과 웹에서 `/model`과 `/effort`는 터미널의 선택기나 슬라이더 대신 인수를 받습니다.

365 * `/mcp`: 모바일 앱에서는 선택기를 여는 대신 서버 상태의 텍스트 요약을 반환합니다. 웹에서는 `/mcp`만 입력하면 요약을 반환하는 대신 [claude.ai 커넥터](https://code.claude.com/docs/ko/mcp.md#use-mcp-servers-from-claude-ai) 디렉터리가 열립니다. `reconnect`, `enable`, `disable` [하위 명령](https://code.claude.com/docs/ko/commands.md#all-commands)은 세션이 대화형 터미널에서 실행될 때 양쪽 모두에서 작동합니다. 서버 이름 없이 `/mcp reconnect`를 실행하면 실패했거나 인증이 필요한 모든 서버를 재시도합니다. 선택기 없이 claude.ai 커넥터를 인가하려면 [Authorize a connector again from your shell](#authorize-a-connector-again-from-your-shell)을 참조하세요.365 * `/mcp`: 모바일 앱에서는 선택기를 여는 대신 서버 상태의 텍스트 요약을 반환합니다. 웹에서는 `/mcp`만 입력하면 요약을 반환하는 대신 [claude.ai 커넥터](https://code.claude.com/docs/ko/mcp.md#use-mcp-servers-from-claude-ai) 디렉터리가 열립니다. `reconnect`, `enable`, `disable` [하위 명령](https://code.claude.com/docs/ko/commands.md#all-commands)은 세션이 대화형 터미널에서 실행될 때 양쪽 모두에서 작동합니다. 서버 이름 없이 `/mcp reconnect`를 실행하면 실패했거나 인증이 필요한 모든 서버를 재시도합니다. 선택기 없이 claude.ai 커넥터를 인가하려면 [Authorize a connector again from your shell](#authorize-a-connector-again-from-your-shell)을 참조하세요.

366 * `/config`: 모바일 앱에서는 `key=value`를 전달하여 설정을 지정하거나, 인수 없이 실행하여 설정할 수 있는 키 목록을 확인합니다. 웹에서는 `/config`가 대신 설정의 Claude Code 섹션을 엽니다.366 * `/config`: 모바일 앱에서는 `key=value`를 전달하여 설정을 지정하거나, 인수 없이 실행하여 설정할 수 있는 키 목록을 확인합니다. 웹에서는 `/config`가 대신 **Settings > Code** 또는 **Settings > Claude Code**를 엽니다.

367 * Team 및 Enterprise에서는 모바일이나 웹에서 `/usage-credits`를 실행해도 [관리자에게 사용량 크레딧 요청](https://code.claude.com/docs/ko/costs.md#add-usage-credits-to-your-subscription)이 전송되지 않습니다. 전송하려면 대화형 CLI에서만 표시되는 확인이 필요하므로, 명령은 대신 그곳에서 실행하라고 안내합니다.367 * Team 및 Enterprise에서는 모바일이나 웹에서 `/usage-credits`를 실행해도 [관리자에게 사용량 크레딧 요청](https://code.claude.com/docs/ko/costs.md#add-usage-credits-to-your-subscription)이 전송되지 않습니다. 전송하려면 대화형 CLI에서만 표시되는 확인이 필요하므로, 명령은 대신 그곳에서 실행하라고 안내합니다.

368 * `/autocompact`, v2.1.221부터: 윈도우 크기를 인수로 전달합니다. 예를 들어 `/autocompact 500k`와 같습니다. 인수 없이 실행하면 터미널 세션에서 이 명령이 표시하는 대화 상자를 여는 대신 현재 윈도우 크기를 텍스트로 출력합니다.368 * `/autocompact`, v2.1.221부터: 윈도우 크기를 인수로 전달합니다. 예를 들어 `/autocompact 500k`와 같습니다. 인수 없이 실행하면 터미널 세션에서 이 명령이 표시하는 대화 상자를 여는 대신 현재 윈도우 크기를 텍스트로 출력합니다.

369 * `/advisor`, v2.1.260부터: 모델을 인수로 전달하거나(예: `/advisor opus`), `off`를 전달하여 advisor를 끕니다. 두 형식 모두 현재 세션에만 적용되며 저장된 기본값은 변경되지 않습니다. 인수 없이 실행하면 선택기를 여는 대신 현재 advisor를 텍스트로 출력합니다.369 * `/advisor`, v2.1.260부터: 모델을 인수로 전달하거나(예: `/advisor opus`), `off`를 전달하여 advisor를 끕니다. 두 형식 모두 현재 세션에만 적용되며 저장된 기본값은 변경되지 않습니다. 인수 없이 실행하면 선택기를 여는 대신 현재 advisor를 텍스트로 출력합니다.

routines.md +9 −5

Details

77 77 

78**2. 작업 이름 지정 및 프롬프트 작성**78**2. 작업 이름 지정 및 프롬프트 작성**

79 79 

80예약 작업에 설명적인 이름을 지정하고 Claude가 매번 실행할 프롬프트를 작성합니다. 프롬프트가 가장 중요한 부분입니다. 작업이 자율적으로 실행되므로 프롬프트는 그 자체로 완결되어야 하며, 무엇을 해야 하는지와 성공이 어떤 모습인지를 명시적으로 밝혀야 합니다. 프롬프트 입력란의 모델 선택기에서 모델을 선택합니다. Claude는 모든 실행에서 이 모델을 사용합니다.80예약 작업에 설명적인 이름을 지정하고 Claude가 매번 실행할 프롬프트를 작성합니다. 프롬프트가 가장 중요한 부분입니다. 작업이 자율적으로 실행되므로 프롬프트는 그 자체로 완결되어야 하며, 무엇을 해야 하는지와 성공이 어떤 모습인지를 명시적으로 밝혀야 합니다.

81 81 

82트리거가 발동되면 세션은 저장된 프롬프트를 할당된 작업으로 받아 수행하며, 대화 중간에 도착한 신뢰할 수 없는 콘텐츠로 취급하지 않습니다. 트리거는 프롬프트가 계정의 승인된 세션에 의해 미리 저장되었다는 사실만 증명합니다. 따라서 발동된 프롬프트는 실시간 사용자 입력이 아니며 실행 중 작업에 대한 승인이나 동의로 작용할 수 없습니다. 세션이 실행 중에 가져오는 콘텐츠는 평소와 같이 처리됩니다.82트리거가 발동되면 세션은 저장된 프롬프트를 할당된 작업으로 받아 수행하며, 대화 중간에 도착한 신뢰할 수 없는 콘텐츠로 취급하지 않습니다. 트리거는 프롬프트가 계정의 승인된 세션에 의해 미리 저장되었다는 사실만 증명합니다. 따라서 발동된 프롬프트는 실시간 사용자 입력이 아니며 실행 중 작업에 대한 승인이나 동의로 작용할 수 없습니다. 세션이 실행 중에 가져오는 콘텐츠는 평소와 같이 처리됩니다.

83 83 


115 115 

116작업이 자체 서비스나 해당 목록 외부의 도메인에 직접 도달해야 하는 경우, 실행하기 전에 환경의 [네트워크 액세스](https://code.claude.com/docs/ko/cloud-environments.md#network-access)를 편집합니다. 별도의 환경을 사용하려면 먼저 [환경을 만듭니다](https://code.claude.com/docs/ko/cloud-environments.md#configure-your-environment).116작업이 자체 서비스나 해당 목록 외부의 도메인에 직접 도달해야 하는 경우, 실행하기 전에 환경의 [네트워크 액세스](https://code.claude.com/docs/ko/cloud-environments.md#network-access)를 편집합니다. 별도의 환경을 사용하려면 먼저 [환경을 만듭니다](https://code.claude.com/docs/ko/cloud-environments.md#configure-your-environment).

117 117 

118**6. 커넥터 검토**118**6. 모델 및 effort 수준 선택**

119 

120프롬프트 입력란의 모델 선택기에서 Claude가 모든 실행에서 사용할 모델을 선택합니다. Claude Code 작업의 경우 모델이 [effort 수준](https://code.claude.com/docs/ko/model-config.md#adjust-effort-level)을 제공하면 같은 선택기의 **Effort**에 현재 수준이 표시됩니다. 변경하려면 다른 수준을 선택합니다. 선택기의 **Default** 옵션은 수준을 제공하지 않습니다.

121 

122**7. 커넥터 검토**

119 123 

120**Advanced settings**의 **Connectors** 탭으로 전환합니다. 연결된 모든 [MCP 커넥터](https://code.claude.com/docs/ko/mcp.md)가 기본적으로 포함됩니다. 작업에 필요하지 않은 커넥터는 제거하십시오. Claude는 실행 중에 포함된 커넥터를 쓰기 작업을 포함하여 사용할 수 있습니다. 실행이 멈추고 먼저 사용자에게 확인을 요청하는 경우에 대해서는 [실행 중 권한 프롬프트](#permission-prompts-during-a-run)를 참조하십시오.124**Advanced settings**의 **Connectors** 탭으로 전환합니다. 연결된 모든 [MCP 커넥터](https://code.claude.com/docs/ko/mcp.md)가 기본적으로 포함됩니다. 작업에 필요하지 않은 커넥터는 제거하십시오. Claude는 실행 중에 포함된 커넥터를 쓰기 작업을 포함하여 사용할 수 있습니다. 실행이 멈추고 먼저 사용자에게 확인을 요청하는 경우에 대해서는 [실행 중 권한 프롬프트](#permission-prompts-during-a-run)를 참조하십시오.

121 125 

122**7. 작업 만들기**126**8. 작업 만들기**

123 127 

124**Create**를 클릭합니다. 대화 상자가 닫히고 새 작업의 세부 정보 페이지가 열립니다. 작업은 다음에 트리거 중 하나가 일치할 때 실행됩니다. 즉시 실행을 시작하려면 세부 정보 페이지에서 **Run now**를 클릭합니다.128**Create**를 클릭합니다. 대화 상자가 닫히고 새 작업의 세부 정보 페이지가 열립니다. 작업은 다음에 트리거 중 하나가 일치할 때 실행됩니다. 즉시 실행을 시작하려면 세부 정보 페이지에서 **Run now**를 클릭합니다.

125 129 


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

137 141 

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

139* **Instructions**: 프롬프트를 입력합니다. 같은 입력란에서 모델, 저장소 및 환경을 선택합니다. 각 항목이 제어하는 내용은 [웹에서 만들기](#create-from-the-web)의 단계를 참조하십시오.143* **Instructions**: 프롬프트를 입력합니다. 같은 입력란에서 모델, 모델이 제공하는 경우 effort 수준, 저장소 및 환경을 선택합니다. 각 항목이 제어하는 내용은 [웹에서 만들기](#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**를 클릭합니다.144* **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**: 연결된 모든 커넥터가 기본적으로 포함되므로 작업에 필요하지 않은 커넥터는 제거하십시오.145* **Connectors**: 연결된 모든 커넥터가 기본적으로 포함되므로 작업에 필요하지 않은 커넥터는 제거하십시오.

142 146 


153* **API 트리거**: [claude.ai/code/routines](https://claude.ai/code/routines)의 웹에서 작업을 편집합니다157* **API 트리거**: [claude.ai/code/routines](https://claude.ai/code/routines)의 웹에서 작업을 편집합니다

154* **[GitHub 트리거](#add-a-github-trigger)**: 웹에서 작업을 편집하거나 CLI에서 Claude에게 요청합니다. CLI에서 추가하려면 Claude Code v2.1.225 이상이 필요합니다158* **[GitHub 트리거](#add-a-github-trigger)**: 웹에서 작업을 편집하거나 CLI에서 Claude에게 요청합니다. CLI에서 추가하려면 Claude Code v2.1.225 이상이 필요합니다

155 159 

156API 호출이나 GitHub 이벤트로만 시작되는 작업처럼 일정 트리거가 없는 예약 작업에는 다음 실행 시간이 없습니다. Claude가 이러한 작업을 저장하거나 업데이트할 때 CLI는 다음 실행 시간을 표시하지 않습니다. v2.1.211 이전에는 CLI가 이러한 작업에 대해 서기 1년의 다음 실행 시간을 보고했습니다.160API 호출이나 GitHub 이벤트로만 시작되는 작업처럼 일정 트리거가 없는 예약 작업에는 다음 실행 시간이 없습니다. Claude가 이러한 작업을 저장하거나 업데이트할 때 CLI는 다음 실행 시간을 표시하지 않습니다.

157 161 

158## 트리거 구성162## 트리거 구성

159 163 

sandboxing.md +2 −1

Details

320* **호출의 모든 명령이 일치해야 함**: `npm ci && docker compose build`는 다른 항목이 `npm ci`를 포함하지 않는 한 샌드박스 안에 유지됩니다320* **호출의 모든 명령이 일치해야 함**: `npm ci && docker compose build`는 다른 항목이 `npm ci`를 포함하지 않는 한 샌드박스 안에 유지됩니다

321* **Claude Code는 호출의 텍스트를 대조함**: 내부적으로 `docker`를 호출하는 스크립트나 `make` 타깃은 일치하지 않으며, `/usr/local/bin/docker`도 일치하지 않습니다321* **Claude Code는 호출의 텍스트를 대조함**: 내부적으로 `docker`를 호출하는 스크립트나 `make` 타깃은 일치하지 않으며, `/usr/local/bin/docker`도 일치하지 않습니다

322* **일부 호출은 샌드박스 안에 유지됨**: 파일로의 리디렉션, `cd`, 또는 `$(...)` 같은 명령 치환이 있으면 전체 호출이 샌드박스 안에 유지됩니다. [참조 항목](https://code.claude.com/docs/ko/settings-reference.md#sandbox-excludedcommands)에 샌드박스 안에 유지되는 더 많은 호출이 나열되어 있습니다322* **일부 호출은 샌드박스 안에 유지됨**: 파일로의 리디렉션, `cd`, 또는 `$(...)` 같은 명령 치환이 있으면 전체 호출이 샌드박스 안에 유지됩니다. [참조 항목](https://code.claude.com/docs/ko/settings-reference.md#sandbox-excludedcommands)에 샌드박스 안에 유지되는 더 많은 호출이 나열되어 있습니다

323* **`git clone`에는 상대 경로가 필요함**: 절대 경로, `~`로 시작하는 경로, 또는 `..` 세그먼트가 있는 경로를 지정하는 clone은 항목에 포함되지 않습니다. clone을 작업 디렉터리 안에 둘 수 있다면 Claude에게 `vendor/lib`처럼 `..` 세그먼트가 없는 상대 경로를 사용하도록 요청합니다

323* **항목을 저장하는 위치가 중요할 수 있음**: 샌드박스가 [관리자 필수](#repository-settings-under-an-admin-required-sandbox)인 동안 Claude Code는 `.claude/settings.json` 및 `.claude/settings.local.json`의 항목을 무시합니다324* **항목을 저장하는 위치가 중요할 수 있음**: 샌드박스가 [관리자 필수](#repository-settings-under-an-admin-required-sandbox)인 동안 Claude Code는 `.claude/settings.json` 및 `.claude/settings.local.json`의 항목을 무시합니다

324 325 

325제외된 명령은 일반 권한 흐름을 거칩니다:326제외된 명령은 일반 권한 흐름을 거칩니다:


354 355 

355샌드박스에는 두 개의 독립적인 계층이 있습니다. [파일 시스템 격리](#filesystem-isolation)는 샌드박스 처리된 명령이 읽고 쓸 수 있는 경로를 제어하고, [네트워크 격리](#network-isolation)는 접근할 수 있는 도메인을 제어합니다. 파일 시스템 계층을 끄면 샌드박스 처리된 명령은 호스트 파일 시스템에 대한 무제한 읽기 및 쓰기 접근 권한을 얻지만, 네트워크 송신은 허용된 도메인으로 계속 제한됩니다. 명령이 무엇을 쓰는지보다 어디에 연결하는지를 제어하기 위해 샌드박스를 사용하는 경우 이 계층을 끕니다.356샌드박스에는 두 개의 독립적인 계층이 있습니다. [파일 시스템 격리](#filesystem-isolation)는 샌드박스 처리된 명령이 읽고 쓸 수 있는 경로를 제어하고, [네트워크 격리](#network-isolation)는 접근할 수 있는 도메인을 제어합니다. 파일 시스템 계층을 끄면 샌드박스 처리된 명령은 호스트 파일 시스템에 대한 무제한 읽기 및 쓰기 접근 권한을 얻지만, 네트워크 송신은 허용된 도메인으로 계속 제한됩니다. 명령이 무엇을 쓰는지보다 어디에 연결하는지를 제어하기 위해 샌드박스를 사용하는 경우 이 계층을 끕니다.

356 357 

357`sandbox.filesystem.disabled`의 기본값은 `false`입니다. Claude Code v2.1.216 이상이 필요합니다.358`sandbox.filesystem.disabled`의 기본값은 `false`입니다.

358 359 

359> [!WARNING]360> [!WARNING]

360>361>

Details

381 381 

382| 플래그(예시 값 포함) | 전달 대상 | 동작 |382| 플래그(예시 값 포함) | 전달 대상 | 동작 |

383| :- | :- | :- |383| :- | :- | :- |

384| `--release-idle-session-min 30` | 훅이 시작하는 모든 러너 | 러너는 지정한 시간(분) 동안 유휴 상태가 지속되면 세션을 해제한 후 0으로 종료합니다. 세션은 사용자가 다음 메시지를 보내면 재개되지만, [푸시하지 않은 작업은 사라집니다](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#additional-limitations). |384| `--release-idle-session-min 30` | 훅이 시작하는 모든 러너 | 러너는 지정한 시간(분) 동안 유휴 상태가 지속되면 세션을 해제한 후 0으로 종료합니다. 세션은 사용자가 다음 메시지를 보내면 재개되지만, [푸시하지 않은 작업은 사라집니다](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#additional-limitations). 세션이 실행 중으로 남겨 둔 프로세스가 있다면 [세션을 유지하십시오](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#keep-an-idle-session-while-its-processes-run). |

385| `--kill-session-after-min 480` | 훅이 시작하는 모든 러너 | 각 세션을 지정한 시간(분)으로 제한하며, [유휴 상태로 간주되지 않는 세션](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#some-sessions-don’t-count-as-idle)에 대한 안전장치 역할을 하므로 예상되는 가장 긴 세션보다 높게 설정하십시오 |385| `--kill-session-after-min 480` | 훅이 시작하는 모든 러너 | 각 세션을 지정한 시간(분)으로 제한하며, [유휴 상태로 간주되지 않는 세션](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#some-sessions-don’t-count-as-idle)에 대한 안전장치 역할을 하므로 예상되는 가장 긴 세션보다 높게 설정하십시오 |

386| `--exit-if-unused-min 60` | 훅이 사전 워밍 요청에 대해 시작하는 대기 러너 | 세션을 한 번도 받지 않은 대기 러너는 지정한 시간(분) 후에 종료됩니다. [`--min-idle`](https://code.claude.com/docs/ko/self-hosted-environments-reference#orchestrator-cli-flags)을 설정한 경우 해당 대기 러너가 잉여분이 아니었다면 대체 러너가 생성되므로, 부팅 시간보다 충분히 큰 값을 사용하십시오. |386| `--exit-if-unused-min 60` | 훅이 사전 워밍 요청에 대해 시작하는 대기 러너 | 세션을 한 번도 받지 않은 대기 러너는 지정한 시간(분) 후에 종료됩니다. [`--min-idle`](https://code.claude.com/docs/ko/self-hosted-environments-reference#orchestrator-cli-flags)을 설정한 경우 해당 대기 러너가 잉여분이 아니었다면 대체 러너가 생성되므로, 부팅 시간보다 충분히 큰 값을 사용하십시오. |

387 387 

Details

68| `code.claude.com` 및 `claude.com` | 443 | 내장 claude-code-guide 에이전트의 문서 조회 및 세션 중 사전 승인된 WebFetch 요청에 사용됩니다. 이 호스트를 차단하면 문서 조회에만 영향을 미칩니다. |68| `code.claude.com` 및 `claude.com` | 443 | 내장 claude-code-guide 에이전트의 문서 조회 및 세션 중 사전 승인된 WebFetch 요청에 사용됩니다. 이 호스트를 차단하면 문서 조회에만 영향을 미칩니다. |

69| `*.frame.claudeusercontent.com` | 443 | 조직의 세션에서 [Artifact 도구](https://code.claude.com/docs/ko/artifacts.md#availability)를 사용할 수 있는 경우에만 필요합니다. 기본값은 해당 페이지의 가용성 표에 따라 플랜별로 다릅니다. 조직 설정과 관계없이 도구를 비활성화 상태로 유지하려면 runner에 `CLAUDE_CODE_DISABLE_ARTIFACT=1`을 설정하십시오. |69| `*.frame.claudeusercontent.com` | 443 | 조직의 세션에서 [Artifact 도구](https://code.claude.com/docs/ko/artifacts.md#availability)를 사용할 수 있는 경우에만 필요합니다. 기본값은 해당 페이지의 가용성 표에 따라 플랜별로 다릅니다. 조직 설정과 관계없이 도구를 비활성화 상태로 유지하려면 runner에 `CLAUDE_CODE_DISABLE_ARTIFACT=1`을 설정하십시오. |

70| `registry.npmjs.org` | 443 | 세션이 플러그인을 설치할 때(npm 소스 플러그인 패키지를 가져오거나 플러그인의 Node.js 의존성을 설치하는 경우 모두) 또는 `npx`로 실행되는 MCP 서버가 동작할 때 필요합니다 |70| `registry.npmjs.org` | 443 | 세션이 플러그인을 설치할 때(npm 소스 플러그인 패키지를 가져오거나 플러그인의 Node.js 의존성을 설치하는 경우 모두) 또는 `npx`로 실행되는 MCP 서버가 동작할 때 필요합니다 |

71| 빌드에서 사용하는 패키지 레지스트리의 내부 미러 또는 레지스트리 자체 | 443 또는 미러의 포트 | 세션이 저장소를 빌드하거나 테스트하기 위해 의존성을 설치할 때 필요합니다 |

71| `http-intake.logs.us5.datadoghq.com` | 443 | Anthropic 운영 메트릭. `CLAUDE_CODE_BYOC_ENABLE_DATADOG=1`이 설정된 경우에만 필요하며, 셀프 호스팅 환경에서는 기본적으로 꺼져 있습니다. |72| `http-intake.logs.us5.datadoghq.com` | 443 | Anthropic 운영 메트릭. `CLAUDE_CODE_BYOC_ENABLE_DATADOG=1`이 설정된 경우에만 필요하며, 셀프 호스팅 환경에서는 기본적으로 꺼져 있습니다. |

72| `browser-intake-us5-datadoghq.com` | 443 | Anthropic 오류 보고서 업로드. 세션 계정에 대해 [오류 보고](https://code.claude.com/docs/ko/data-usage.md#telemetry-services)가 활성화된 경우에만 전송됩니다. `DISABLE_ERROR_REPORTING=1` 또는 `DISABLE_TELEMETRY=1`로 억제됩니다. |73| `browser-intake-us5-datadoghq.com` | 443 | Anthropic 오류 보고서 업로드. 세션 계정에 대해 [오류 보고](https://code.claude.com/docs/ko/data-usage.md#telemetry-services)가 활성화된 경우에만 전송됩니다. `DISABLE_ERROR_REPORTING=1` 또는 `DISABLE_TELEMETRY=1`로 억제됩니다. |

73| `bedrock-runtime.us-east-1.amazonaws.com` 또는 `aiplatform.googleapis.com` 등 모델 요청, 모델 조회, 자격 증명 갱신을 위한 클라우드 공급자의 엔드포인트 | 443 | runner가 [Amazon Bedrock 또는 Google Cloud의 Agent Platform으로 모델 요청을 보내는](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#send-model-requests-to-bedrock-or-agent-platform) 경우에만 필요합니다 |74| `bedrock-runtime.us-east-1.amazonaws.com` 또는 `aiplatform.googleapis.com` 등 모델 요청, 모델 조회, 자격 증명 갱신을 위한 클라우드 공급자의 엔드포인트 | 443 | runner가 [Amazon Bedrock 또는 Google Cloud의 Agent Platform으로 모델 요청을 보내는](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#send-model-requests-to-bedrock-or-agent-platform) 경우에만 필요합니다 |


631 632 

632첫 신호를 따르는 처음 두 단계에서 러너는 세션을 릴리스하고, 릴리스된 세션은 사용자가 다음 메시지를 보낼 때 새로운 러너에서 재개됩니다. 첫 신호부터 세어서 러너는 세 단계를 거칩니다:633첫 신호를 따르는 처음 두 단계에서 러너는 세션을 릴리스하고, 릴리스된 세션은 사용자가 다음 메시지를 보낼 때 새로운 러너에서 재개됩니다. 첫 신호부터 세어서 러너는 세 단계를 거칩니다:

633 634 

634* **처음 `n`분 동안**: 러너는 세션을 정상적으로 제공하고 `--startup-timeout-min` 및 `--kill-session-after-min`을 계속 적용합니다. [`--release-idle-session-min`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)도 설정하면 러너는 사용자가 그 오래 유휴 상태인 모든 세션을 릴리스합니다. 없으면 유휴 세션은 러너에 남아 있습니다.635* **처음 `n`분 동안**: 러너는 세션을 정상적으로 제공하고 `--startup-timeout-min` 및 `--kill-session-after-min`을 계속 적용합니다. [`--release-idle-session-min`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)도 설정하면 러너는 사용자가 그 시간만큼 유휴 상태인 모든 세션을 릴리스합니다. 단, [해당 세션을 유지](#keep-an-idle-session-while-its-processes-run)하는 경우는 예외입니다. 이 플래그가 없으면 유휴 세션은 러너에 남아 있습니다.

635* **`n`분이 끝나면**: 러너는 여전히 보유한 모든 세션을 릴리스합니다. 유휴 상태이거나 아닙니다. 러너는 중간 턴 세션의 턴이 끝날 때까지 대기하고 턴의 배경 작업을 위해 최대 60초를 더 대기한 후 해당 세션을 릴리스합니다.636* **`n`분이 끝나면**: 러너는 여전히 보유한 모든 세션을 릴리스합니다. 유휴 상태이거나 아닙니다. 러너는 중간 턴 세션의 턴이 끝날 때까지 대기하고 턴의 배경 작업을 위해 최대 60초를 더 대기한 후 해당 세션을 릴리스합니다.

636* **사후 릴리스 유예가 끝나면**: 러너는 여전히 보유한 모든 세션을 드레인하고 제어 평면은 각 드레인된 세션을 즉시 다른 러너로 재큐합니다. 사후 릴리스 유예는 `n`분이 끝날 때 시작되며 기본값에서 75초입니다. `--drain-wait-sec`을 60초 이상으로 설정하면 사후 릴리스 유예는 `--drain-wait-sec` + 15초입니다.637* **사후 릴리스 유예가 끝나면**: 러너는 여전히 보유한 모든 세션을 드레인하고 제어 평면은 각 드레인된 세션을 즉시 다른 러너로 재큐합니다. 사후 릴리스 유예는 `n`분이 끝날 때 시작되며 기본값에서 75초입니다. `--drain-wait-sec`을 60초 이상으로 설정하면 사후 릴리스 유예는 `--drain-wait-sec` + 15초입니다.

637 638 


671 672 

672클론은 이미지 또는 영구 볼륨에 제공합니다:673클론은 이미지 또는 영구 볼륨에 제공합니다:

673 674 

674* **이미지에 클론**: 러너 이미지를 해당 경로에 빌드합니다. 모든 새로운 컨테이너는 디스크를 재사용하지 않고 준비된 클론으로 시작합니다.675* **이미지에 클론**: 해당 경로에 클론이 포함되도록 러너 이미지를 빌드합니다. 모든 새로운 컨테이너는 디스크를 재사용하지 않고 준비된 클론으로 시작합니다.

675* **지속적인 볼륨에 클론**: [`--lock-to-account`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)로 한 사용자의 계정에 사전 잠긴 러너에서 `--base-dir`을 지속적인 볼륨으로 가리키므로 디스크는 해당 계정만 제공합니다. 사전 잠긴 러너는 Claude Tag 채널 세션을 절대 선택하지 않으므로 이 옵션은 이들을 제공하는 러너에 적용되지 않습니다.676* **지속적인 볼륨에 클론**: [`--lock-to-account`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)로 한 사용자의 계정에 사전 잠긴 러너에서 `--base-dir`을 지속적인 볼륨으로 가리키므로 디스크는 해당 계정만 제공합니다. 사전 잠긴 러너는 Claude Tag 채널 세션을 절대 선택하지 않으므로 이 옵션은 이들을 제공하는 러너에 적용되지 않습니다.

676 677 

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


716 717 

717### 고정 플릿에서 유휴 세션 해제718### 고정 플릿에서 유휴 세션 해제

718 719 

719모든 러너가 온라인 상태인데도 고정 플릿에서 세션이 계속 대기 중이라면 유휴 세션이 원인일 수 있습니다. 기본적으로 세션은 턴이 끝난 후에도 슬롯을 유지하며, 해당 러너는 그 세션의 [소유자](https://code.claude.com/docs/ko/self-hosted-environments#key-concepts)에게 잠긴 상태로 남습니다. 팀의 [클라우드 예약 작업](https://code.claude.com/docs/ko/routines.md)이 실행할 때마다 새 세션을 시작한다면, 그 유휴 세션들이 모든 슬롯을 채울 수 있습니다.720모든 러너가 온라인 상태인데도 고정 플릿에서 세션이 계속 대기 중이라면 유휴 세션이 원인일 수 있습니다. 기본적으로 세션은 턴이 끝난 후에도 슬롯을 유지하며, 해당 러너는 그 세션의 [소유자](https://code.claude.com/docs/ko/self-hosted-environments#key-concepts)에게 잠긴 상태로 남습니다. 다른 소유자의 세션은 해당 러너의 빈 슬롯을 사용할 수 없습니다. 팀의 [클라우드 예약 작업](https://code.claude.com/docs/ko/routines.md)이 실행할 때마다 새 세션을 시작한다면, 그 유휴 세션들이 모든 슬롯을 채울 수 있습니다.

720 721 

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확인하려면 각 러너의 [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 


725* **시리즈가 없는 러너**: 해당 러너를 점유한 세션이 없습니다. [문제 해결](#troubleshooting)의 **세션이 계속 대기 중인 경우**를 참조하세요.726* **시리즈가 없는 러너**: 해당 러너를 점유한 세션이 없습니다. [문제 해결](#troubleshooting)의 **세션이 계속 대기 중인 경우**를 참조하세요.

726* **메트릭이 응답하지 않는 러너**: 프로세스가 종료되었을 수 있습니다. [러너가 종료될 때](#when-the-runner-exits)의 **정상으로 보이는 환경**을 참조하세요.727* **메트릭이 응답하지 않는 러너**: 프로세스가 종료되었을 수 있습니다. [러너가 종료될 때](#when-the-runner-exits)의 **정상으로 보이는 환경**을 참조하세요.

727 728 

728유휴 세션을 해제하려면 모든 러너를 [`--release-idle-session-min`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)과 해당 시간(분 단위)으로 시작하세요(예: `--release-idle-session-min 30`). 그러면 러너는 예약 작업이 시작했든 사람이 시작했든 관계없이 그만큼 오래 유휴 상태로 남은 세션을 모두 해제합니다.729유휴 세션을 해제하려면 모든 러너를 [`--release-idle-session-min`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)과 해당 시간(분 단위)으로 시작하세요(예: `--release-idle-session-min 30`). 그러면 러너는 예약 작업이 시작했든 사람이 시작했든 관계없이 그만큼 오래 유휴 상태로 남은 세션을 모두 해제합니다. 단, [세션이 남겨 둔 프로세스를 위해 세션을 유지](#keep-an-idle-session-while-its-processes-run)하는 경우는 예외입니다.

729 730 

730* **푸시되지 않은 작업**: 해제된 세션은 다음 메시지에서 재개되지만, 푸시하지 않은 작업은 포함되지 않습니다. 커밋을 유지하려면 [재개된 세션에서 푸시되지 않은 작업 손실](#additional-limitations)을 참조하세요.731* **푸시되지 않은 작업**: 해제된 세션은 다음 메시지에서 재개되지만, 푸시하지 않은 작업은 포함되지 않습니다. 커밋을 유지하려면 [재개된 세션에서 푸시되지 않은 작업 손실](#additional-limitations)을 참조하세요.

731* **러너 종료**: 마지막 세션을 해제한 러너는 [정상 종료](#when-the-runner-exits)를 시작합니다. [배포 강화](#harden-your-deployment)에 설명된 대로 수퍼바이저가 새 파일 시스템에서 러너를 다시 시작하도록 하세요.732* **러너 종료**: 마지막 세션을 해제한 러너는 [정상 종료](#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* **유휴 상태가 되지 않는 세션**: [일부 세션은 유휴 상태로 간주되지 않으므로](#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 734 

735### 프로세스가 실행되는 동안 유휴 세션 유지

736 

737세션이 호스트에 남겨 둔 프로세스(예: `nohup` 작업)가 끝날 때까지 유휴 세션을 유지하려면 [`--hold-idle-file`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)로 러너를 시작하고 호스트에서 해당 파일을 계속 touch하세요. Claude Code v2.1.311 이상이 필요합니다.

738 

739이 단계는 호스트에서 root가 아닌 사용자로 실행되는 러너를 전제로 합니다. 러너가 `root`로 실행되면 세션이 직접 파일을 touch할 수 있으므로, 먼저 전용 사용자로 실행하세요.

740 

741**1. 파일 경로 선택**

742 

743세션이 파일에 쓸 수 없도록, 상위 디렉터리를 포함해 세션이 쓸 수 없는 디렉터리에 있는 로컬 일반 파일(예: `/var/lib/claude-hold/hold-idle`)을 선택하세요. 러너와 세션은 하나의 OS 사용자를 공유하므로, 먼저 `root` 같은 다른 사용자가 소유하고 모드가 `755`인 디렉터리를 생성하세요.

744 

745**2. 러너 시작**

746 

747셸에서 `--hold-idle-file`, `--release-idle-session-min`, 그리고 세션이 유휴 상태가 된 시점부터 계산되는 유지 상한인 [`--max-hold-min`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)을 사용하여 러너를 시작하세요. 이 플래그가 없으면 상한은 하루입니다. `--release-idle-session-min`보다 큰 값으로 설정해야 하며, 그렇지 않으면 아무것도 유지되지 않습니다. 다음 예시는 30분 후 유휴 세션을 해제하고, 유지된 세션은 유휴 상태가 된 후 최대 4시간 뒤에 해제합니다:

748 

749```bash theme={null}

750claude self-hosted-runner \

751 --environment-secret-file /etc/claude/environment-secret \

752 --release-idle-session-min 30 \

753 --hold-idle-file /var/lib/claude-hold/hold-idle \

754 --max-hold-min 240

755```

756 

757**3. 프로세스가 실행되는 동안 파일 touch**

758 

759프로세스가 실행되는 동안 디렉터리 소유자로 호스트에서 3분보다 짧은 간격으로 파일을 `touch`하세요. 첫 번째 `touch`가 파일을 생성합니다. 예를 들어 `root`의 crontab에 다음 줄을 추가하세요:

760 

761```text theme={null}

762* * * * * pgrep -x nightly-build > /dev/null && touch /var/lib/claude-hold/hold-idle

763```

764 

765이 줄은 1분마다 실행되며 `nightly-build`라는 이름의 프로세스가 실행 중일 때 파일을 touch하므로, 해당 프로세스를 시작한 세션은 상한까지 유지됩니다. `pgrep` 검사는 호스트에서 세션이 남겨 둔 프로세스를 찾는 방식으로 바꾸세요.

766 

767검사는 해당 프로세스가 끝나면 더 이상 일치하지 않아야 합니다. 그렇지 않으면 해당 러너의 모든 유휴 세션이 상한까지 유지됩니다.

768 

769**4. 유지 확인**

770 

771프로세스가 실행되는 동안 파일의 수정 시간이 3분 이내로 유지되는지 확인하세요. 세션의 유휴 시간이 만료되면 러너 로그에서 `idle release held`를 찾으세요. 해당 줄이 나타나지 않으면 러너가 시작 시 로그에 기록하는 `watchdog config` 줄의 `leftover-hold=`를 확인하세요. 여기에는 파일과 상한, 또는 아무것도 유지되지 않는 이유가 표시됩니다.

772 

773마지막 `touch` 후 3분이 지나면 유지가 종료됩니다. 그 후 약 1분 이내에 로그에 `idle release no longer held`가 표시되고 러너가 세션을 해제합니다.

774 

775파일이 계속 변경되더라도 다음과 같은 경우에는 유지가 종료될 수 있습니다:

776 

777* **상한 초과**: `--max-hold-min`이 만료된 경우입니다. 더 오래 유지하려면 값을 늘리세요.

778* **강제 해제**: [`--retire-at`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags), [`--defer-shutdown-max-min`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags) 또는 [`--kill-session-after-min`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags)을 설정했고 해당 한도에 도달한 경우입니다. 더 오래 유지하려면 더 늦은 한도를 설정하세요.

779 

734## 알려진 문제 및 제한 사항780## 알려진 문제 및 제한 사항

735 781 

736다음은 이 릴리스의 제한 사항이며, 해결 방법이 있는 경우 제시합니다.782다음은 이 릴리스의 제한 사항이며, 해결 방법이 있는 경우 제시합니다.


828* **Claude Tag가 Slack에 응답을 게시하지 않는 경우가 있음**: 응답 알림은 [컨트롤 플레인이 제공하는 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#how-each-session’s-config-is-assembled)입니다. 이전 러너는 제공된 훅을 무시하므로 `claude --version`으로 러너가 Claude Code v2.1.229 이상인지 확인합니다. 훅은 `python3`을 실행하므로 러너 이미지 안에서 `python3 --version`이 성공하는지 확인합니다. 그리고 어떤 설정 파일도 훅을 끄지 않는지 확인합니다. 여기에는 `managed-settings.json`, 러너 사용자의 `~/.claude/settings.json`, 저장소의 `.claude/settings.json` 또는 `.claude/settings.local.json`에 있는 `disableAllHooks`, 그리고 관리형 설정에서 훅을 포함하는 `allowManagedHooksOnly` 또는 [`strictPluginOnlyCustomization`](https://code.claude.com/docs/ko/settings-reference#strictpluginonlycustomization)이 해당됩니다.874* **Claude Tag가 Slack에 응답을 게시하지 않는 경우가 있음**: 응답 알림은 [컨트롤 플레인이 제공하는 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#how-each-session’s-config-is-assembled)입니다. 이전 러너는 제공된 훅을 무시하므로 `claude --version`으로 러너가 Claude Code v2.1.229 이상인지 확인합니다. 훅은 `python3`을 실행하므로 러너 이미지 안에서 `python3 --version`이 성공하는지 확인합니다. 그리고 어떤 설정 파일도 훅을 끄지 않는지 확인합니다. 여기에는 `managed-settings.json`, 러너 사용자의 `~/.claude/settings.json`, 저장소의 `.claude/settings.json` 또는 `.claude/settings.local.json`에 있는 `disableAllHooks`, 그리고 관리형 설정에서 훅을 포함하는 `allowManagedHooksOnly` 또는 [`strictPluginOnlyCustomization`](https://code.claude.com/docs/ko/settings-reference#strictpluginonlycustomization)이 해당됩니다.

829* **세션이 저장소 중 하나 없이 시작됨**: [`checkout` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#checkout)이 없는 러너에서는 세션이 읽기만 하는 저장소에 대해 git 호스트가 러너의 액세스 확인을 거부할 수 있습니다. 그러면 러너는 해당 저장소를 건너뛰고, 거부 내용을 명시하는 `[runner:warn] could not access context source` 줄을 로그에 기록한 후 나머지 저장소로 세션을 시작합니다.875* **세션이 저장소 중 하나 없이 시작됨**: [`checkout` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#checkout)이 없는 러너에서는 세션이 읽기만 하는 저장소에 대해 git 호스트가 러너의 액세스 확인을 거부할 수 있습니다. 그러면 러너는 해당 저장소를 건너뛰고, 거부 내용을 명시하는 `[runner:warn] could not access context source` 줄을 로그에 기록한 후 나머지 저장소로 세션을 시작합니다.

830 876 

831 러너는 명확한 거부인 경우에만 건너뜁니다. 즉, 호스트가 저장소를 찾을 수 없다고 응답하거나, git이 해당 호스트의 자격 증명을 찾지 못하거나, 인증이 실패한 경우입니다. 네트워크 장애, 시간 초과 또는 HTTP `403`은 여전히 세션 시작을 실패시키며, 세션이 결과를 푸시하는 저장소에 대한 거부도 마찬가지입니다. 건너뛰면 저장소가 하나도 남지 않는 세션은 여전히 러너가 실패시킵니다. [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)를 사용하는 경우 러너는 git 프록시 자체가 거부한 저장소만 건너뜁니다.877 러너 자체의 git 자격 증명을 사용하는 경우, 호스트가 저장소를 찾을 수 없다고 응답하거나, git이 해당 호스트의 자격 증명을 찾지 못하거나, 인증이 실패하면 러너는 저장소를 건너뛸 수 있습니다.

878 

879 [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)를 사용하는 경우, git 프록시가 `access denied by the git proxy`로 저장소를 거부하면 러너는 해당 저장소를 건너뜁니다. 이때 로그 줄에는 `blocked by the git proxy`가 표시됩니다. 확인할 원인은 [git 프록시를 사용하는 러너에서 세션이 시작되지 않는 경우](#when-anthropic-doesnt-serve-a-session)의 `remote: access denied by the git proxy` 사례를 참조하십시오.

880 

881 네트워크 장애, 시간 초과 또는 그 밖의 HTTP `403`은 여전히 세션 시작을 실패시키며, 세션이 결과를 푸시하는 저장소에 대한 거부도 마찬가지입니다. 건너뛰면 저장소가 하나도 남지 않는 세션은 여전히 러너가 실패시킵니다.

832 882 

833 액세스 확인은 세션이 러너에서 시작될 때마다 다시 실행되므로, 러너의 git ID에 읽기 액세스 권한이 생기면 다음 시작 시 저장소를 클론합니다. v2.1.274 이전에는 이러한 거부가 각각 세션 시작을 실패시켰습니다.883 액세스 확인은 세션이 러너에서 시작될 때마다 다시 실행되므로, 러너의 git ID에 읽기 액세스 권한이 생기면 다음 시작 시 저장소를 클론합니다. v2.1.274 이전에는 이러한 거부가 각각 세션 시작을 실패시켰습니다.

884* **로그에 `could not read context source`가 표시됨**: 이 줄은 `could not access context source`와 달리, git 호스트가 계속 HTTP `429`로 응답했거나 `git`으로 설치한 래퍼가 계속 `75`로 종료되었음을 의미합니다. 러너는 해당 저장소를 건너뛰었습니다. 재시도하려면 새 세션을 시작합니다. 러너는 이 세션이 러너에서 시작될 때마다 해당 저장소를 다시 시도하기도 합니다.

885 

886 `checkout` 훅이 없는 경우, 러너는 세션이 읽기만 하는 저장소를 건너뛸 수 있지만, 해당 저장소가 세션의 저장소 중 첫 번째인 경우는 예외입니다. v2.1.311 이전에는 세션 시작이 실패했습니다.

834* **세션이 `This runner couldn't read`와 함께 시작되지 않음**: 러너가 [git 자격 증명](#configure-git)으로 git 호스트에 저장소를 요청했으나 찾을 수 없다는 응답을 받았습니다. 저장소가 존재하지 않거나 해당 자격 증명으로는 저장소에 접근할 수 없습니다.887* **세션이 `This runner couldn't read`와 함께 시작되지 않음**: 러너가 [git 자격 증명](#configure-git)으로 git 호스트에 저장소를 요청했으나 찾을 수 없다는 응답을 받았습니다. 저장소가 존재하지 않거나 해당 자격 증명으로는 저장소에 접근할 수 없습니다.

835 * **러너를 관리하는 경우**: 러너의 git 자격 증명에 저장소에 대한 읽기 액세스 권한을 부여한 후 새 세션을 시작합니다.888 * **러너를 관리하는 경우**: 러너의 git 자격 증명에 저장소에 대한 읽기 액세스 권한을 부여한 후 새 세션을 시작합니다.

836 * **세션을 시작한 경우**: 저장소가 존재하지 않는다면 올바른 저장소로 새 세션을 시작합니다. 러너가 저장소에 접근할 수 없다면 러너 관리자에게 액세스 권한을 부여해 달라고 요청한 후 새 세션을 시작합니다.889 * **세션을 시작한 경우**: 저장소가 존재하지 않는다면 올바른 저장소로 새 세션을 시작합니다. 러너가 저장소에 접근할 수 없다면 러너 관리자에게 액세스 권한을 부여해 달라고 요청한 후 새 세션을 시작합니다.

Details

37| `--git-host-rewrite <from>=<to>` | 없음 | 설정 안 됨 | 분할 수평 DNS를 위해 클론하기 전에 `https://<from>/...` 소스 URL을 `https://<to>/...`로 다시 씁니다. 반복 지정할 수 있으며 플래그 전용입니다. |37| `--git-host-rewrite <from>=<to>` | 없음 | 설정 안 됨 | 분할 수평 DNS를 위해 클론하기 전에 `https://<from>/...` 소스 URL을 `https://<to>/...`로 다시 씁니다. 반복 지정할 수 있으며 플래그 전용입니다. |

38| `--git-ssh-rewrite <host>` | 없음 | 설정 안 됨 | SSH 전용 git 호스트를 위해 클론하기 전에 `https://<host>/...` 소스 URL을 `git@<host>:...`로 다시 씁니다. 반복 지정할 수 있으며 플래그 전용입니다. |38| `--git-ssh-rewrite <host>` | 없음 | 설정 안 됨 | SSH 전용 git 호스트를 위해 클론하기 전에 `https://<host>/...` 소스 URL을 `git@<host>:...`로 다시 씁니다. 반복 지정할 수 있으며 플래그 전용입니다. |

39| `--health-port <port>` | `SELF_HOSTED_RUNNER_HEALTH_PORT` | `8080` | `/healthz` 및 `/metrics` 리스너용 포트입니다. 비활성화하려면 `0`으로 설정합니다. |39| `--health-port <port>` | `SELF_HOSTED_RUNNER_HEALTH_PORT` | `8080` | `/healthz` 및 `/metrics` 리스너용 포트입니다. 비활성화하려면 `0`으로 설정합니다. |

40| `--hold-idle-file <path>` | `SELF_HOSTED_RUNNER_HOLD_IDLE_FILE` | 설정 안 됨 | 러너에서 유휴 세션을 유지하기 위해 호스트가 계속 변경하는 파일입니다. [프로세스가 실행되는 동안 유휴 세션 유지하기](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#keep-an-idle-session-while-its-processes-run)를 참조하십시오. Claude Code v2.1.311 이상이 필요합니다. |

40| `--hooks-dir <path>` | `SELF_HOSTED_RUNNER_HOOKS_DIR` | 설정 안 됨 | 라이프사이클 훅 스크립트가 있는 디렉터리입니다. [라이프사이클 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#lifecycle-hooks)을 참조하십시오. |41| `--hooks-dir <path>` | `SELF_HOSTED_RUNNER_HOOKS_DIR` | 설정 안 됨 | 라이프사이클 훅 스크립트가 있는 디렉터리입니다. [라이프사이클 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#lifecycle-hooks)을 참조하십시오. |

41| `--host-config-snapshot <mode>` | `SELF_HOSTED_RUNNER_HOST_CONFIG_SNAPSHOT` | `disk` | 러너가 각 세션의 초기값으로 사용하는 [호스트 구성 디렉터리](#environment-variable-only-settings)의 시작 시점 스냅샷을 보관하는 위치입니다. `disk`는 스냅샷을 `--base-dir` 아래의 러너 소유 디렉터리에 복사하고, 각 세션 시작 시 모든 파일을 인메모리 다이제스트와 대조해 검증합니다. 복사본의 파일이 수정된 경우 세션이 실패하며, 러너를 다시 시작할 때까지 러너는 세션을 거부합니다. `memory`는 전체 스냅샷을 최대 64 MiB까지 힙에 보관합니다. 한도를 초과하면 세션이 호스트 구성 없이 시작되며 그 사실을 알리는 안내가 표시됩니다. 러너가 디스크 스냅샷을 쓸 수 없으면 실패를 로그에 기록하고 해당 실행에서는 `memory`를 사용합니다. Claude Code v2.1.271 이상이 필요합니다. |42| `--host-config-snapshot <mode>` | `SELF_HOSTED_RUNNER_HOST_CONFIG_SNAPSHOT` | `disk` | 러너가 각 세션의 초기값으로 사용하는 [호스트 구성 디렉터리](#environment-variable-only-settings)의 시작 시점 스냅샷을 보관하는 위치입니다. `disk`는 스냅샷을 `--base-dir` 아래의 러너 소유 디렉터리에 복사하고, 각 세션 시작 시 모든 파일을 인메모리 다이제스트와 대조해 검증합니다. 복사본의 파일이 수정된 경우 세션이 실패하며, 러너를 다시 시작할 때까지 러너는 세션을 거부합니다. `memory`는 전체 스냅샷을 최대 64 MiB까지 힙에 보관합니다. 한도를 초과하면 세션이 호스트 구성 없이 시작되며 그 사실을 알리는 안내가 표시됩니다. 러너가 디스크 스냅샷을 쓸 수 없으면 실패를 로그에 기록하고 해당 실행에서는 `memory`를 사용합니다. Claude Code v2.1.271 이상이 필요합니다. |

42| `--kill-session-after-min <n>` | `SELF_HOSTED_RUNNER_MAX_LIFETIME_MS` | `0` | 멈춘 세션에 대한 안전 한도로, 세션을 실제 경과 시간 기준 N분으로 제한합니다. v2.1.260 이상에서는 러너가 한도에 도달한 세션을 해제하여 사용자의 다음 메시지에서 재개할 수 있게 하며, [`SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS`](#environment-variable-only-settings) 유예 기간이 끝날 때 여전히 러너에 있는 경우에만 종료합니다. v2.1.260 이전에는 러너가 한도에서 세션을 종료했습니다. 자세한 내용과 값 선택 방법은 [일부 세션은 유휴 상태로 간주되지 않음](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#some-sessions-don’t-count-as-idle)을 참조하십시오. `0`은 비활성화합니다. |43| `--kill-session-after-min <n>` | `SELF_HOSTED_RUNNER_MAX_LIFETIME_MS` | `0` | 멈춘 세션에 대한 안전 한도로, 세션을 실제 경과 시간 기준 N분으로 제한합니다. v2.1.260 이상에서는 러너가 한도에 도달한 세션을 해제하여 사용자의 다음 메시지에서 재개할 수 있게 하며, [`SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS`](#environment-variable-only-settings) 유예 기간이 끝날 때 여전히 러너에 있는 경우에만 종료합니다. v2.1.260 이전에는 러너가 한도에서 세션을 종료했습니다. 자세한 내용과 값 선택 방법은 [일부 세션은 유휴 상태로 간주되지 않음](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#some-sessions-don’t-count-as-idle)을 참조하십시오. `0`은 비활성화합니다. |

43| `--lock-to-account <id>` | `SELF_HOSTED_RUNNER_LOCK_TO_ACCOUNT` | 설정 안 됨 | 첫 번째 세션에서 잠그는 대신 시작 시 러너를 특정 계정에 미리 잠급니다. 환경의 조직에 속한 이메일 주소 또는 `user_...` ID를 받습니다. 미리 잠긴 러너는 계정이 없는 Claude Tag 채널 세션을 절대 가져가지 않습니다. |44| `--lock-to-account <id>` | `SELF_HOSTED_RUNNER_LOCK_TO_ACCOUNT` | 설정 안 됨 | 첫 번째 세션에서 잠그는 대신 시작 시 러너를 특정 계정에 미리 잠급니다. 환경의 조직에 속한 이메일 주소 또는 `user_...` ID를 받습니다. 미리 잠긴 러너는 계정이 없는 Claude Tag 채널 세션을 절대 가져가지 않습니다. |

44| `--log-file <path>` | `SELF_HOSTED_RUNNER_LOG_FILE` | 설정 안 됨 | stdout 및 stderr 외에 러너 로그를 `0600` 권한으로 생성된 파일에도 미러링합니다. `self-hosted-runner doctor`가 로컬에서 로그를 tail하는 데 필요합니다. |45| `--log-file <path>` | `SELF_HOSTED_RUNNER_LOG_FILE` | 설정 안 됨 | stdout 및 stderr 외에 러너 로그를 `0600` 권한으로 생성된 파일에도 미러링합니다. `self-hosted-runner doctor`가 로컬에서 로그를 tail하는 데 필요합니다. |

45| `--log-level <level>` | 없음 | `info` | `info` 또는 `debug` |46| `--log-level <level>` | 없음 | `info` | `info` 또는 `debug` |

47| `--max-hold-min <n>` | `SELF_HOSTED_RUNNER_MAX_HOLD_MS` | `1440` | `--hold-idle-file`과 함께 사용할 때, 보류된 세션이 유휴 상태가 된 지 N분이 지나면 그래도 해제합니다. `--release-idle-session-min` 이하의 값은 아무것도 보류하지 않습니다. `0`은 보류를 끕니다. Claude Code v2.1.311 이상이 필요합니다. |

46| `--post-session-hook-timeout-sec <n>` | `SELF_HOSTED_RUNNER_POST_SESSION_HOOK_TIMEOUT_MS` | `60` | 러너 종료를 포함한 모든 세션 종료 시 [`post-session` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#post-session)에 주어지는 시간입니다 |48| `--post-session-hook-timeout-sec <n>` | `SELF_HOSTED_RUNNER_POST_SESSION_HOOK_TIMEOUT_MS` | `60` | 러너 종료를 포함한 모든 세션 종료 시 [`post-session` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#post-session)에 주어지는 시간입니다 |

47| `--proxy-authorization-command <command>` | `SELF_HOSTED_RUNNER_PROXY_AUTHORIZATION_COMMAND` | 설정 안 됨 | 러너가 이그레스 프록시에 연결할 때마다 실행하는 셸 명령으로, 앞뒤 공백을 제거한 stdout을 `Proxy-Authorization` 헤더 값으로 사용합니다. `HTTPS_PROXY` 또는 `HTTP_PROXY`가 필요하며, `--proxy-authorization-file`과 함께 사용할 수 없습니다. [이그레스 프록시에 인증하기](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy)를 참조하십시오. Claude Code v2.1.238 이상이 필요합니다. |49| `--proxy-authorization-command <command>` | `SELF_HOSTED_RUNNER_PROXY_AUTHORIZATION_COMMAND` | 설정 안 됨 | 러너가 이그레스 프록시에 연결할 때마다 실행하는 셸 명령으로, 앞뒤 공백을 제거한 stdout을 `Proxy-Authorization` 헤더 값으로 사용합니다. `HTTPS_PROXY` 또는 `HTTP_PROXY`가 필요하며, `--proxy-authorization-file`과 함께 사용할 수 없습니다. [이그레스 프록시에 인증하기](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy)를 참조하십시오. Claude Code v2.1.238 이상이 필요합니다. |

48| `--proxy-authorization-file <path>` | `SELF_HOSTED_RUNNER_PROXY_AUTHORIZATION_FILE` | 설정 안 됨 | 러너가 이그레스 프록시에 연결할 때마다 읽는 파일로, 앞뒤 공백을 제거한 내용을 `Proxy-Authorization` 헤더 값으로 사용합니다. 다른 프로세스가 제자리에서 교체하는 토큰에 이 플래그를 사용하십시오. `--proxy-authorization-command`와 동일한 요구 사항이 적용되며, 함께 사용할 수 없습니다. [이그레스 프록시에 인증하기](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy)를 참조하십시오. Claude Code v2.1.238 이상이 필요합니다. |50| `--proxy-authorization-file <path>` | `SELF_HOSTED_RUNNER_PROXY_AUTHORIZATION_FILE` | 설정 안 됨 | 러너가 이그레스 프록시에 연결할 때마다 읽는 파일로, 앞뒤 공백을 제거한 내용을 `Proxy-Authorization` 헤더 값으로 사용합니다. 다른 프로세스가 제자리에서 교체하는 토큰에 이 플래그를 사용하십시오. `--proxy-authorization-command`와 동일한 요구 사항이 적용되며, 함께 사용할 수 없습니다. [이그레스 프록시에 인증하기](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy)를 참조하십시오. Claude Code v2.1.238 이상이 필요합니다. |

49| `--push-outcome-on-release` | `SELF_HOSTED_RUNNER_PUSH_OUTCOME_ON_RELEASE` | 꺼짐 | 드레인이나 유휴 해제와 같이 러너가 시작한 세션 종료 시, 워크스페이스를 삭제하기 전에 추적 중인 결과 브랜치를 `origin`에 push하여 진행 중인 커밋이 재시작 후에도 유지되도록 합니다. 최선의 노력으로 수행되며, 종료 시간에 30초가 추가되고, push된 브랜치에서 재개하려면 git 2.29 이상이 필요합니다. 활성화하기 전에 push 접근을 `claude/*` 참조로 제한하십시오. [재개된 세션은 push되지 않은 작업을 잃음](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#additional-limitations)을 참조하십시오. `checkout` 라이프사이클 훅으로 체크아웃한 저장소는 push되지 않으므로, 대신 [`post-session` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#post-session)에서 스냅샷을 만드십시오. |51| `--push-outcome-on-release` | `SELF_HOSTED_RUNNER_PUSH_OUTCOME_ON_RELEASE` | 꺼짐 | 드레인이나 유휴 해제와 같이 러너가 시작한 세션 종료 시, 워크스페이스를 삭제하기 전에 추적 중인 결과 브랜치를 `origin`에 push하여 진행 중인 커밋이 재시작 후에도 유지되도록 합니다. 최선의 노력으로 수행되며, 종료 시간에 30초가 추가되고, push된 브랜치에서 재개하려면 git 2.29 이상이 필요합니다. 활성화하기 전에 push 접근을 `claude/*` 참조로 제한하십시오. [재개된 세션은 push되지 않은 작업을 잃음](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#additional-limitations)을 참조하십시오. `checkout` 라이프사이클 훅으로 체크아웃한 저장소는 push되지 않으므로, 대신 [`post-session` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#post-session)에서 스냅샷을 만드십시오. |

50| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | 턴이 끝나거나 세션이 사용자의 조치를 기다리는 상태에서 N분 동안 활동이 없으면 세션 슬롯을 해제합니다. 끝나지 않는 백그라운드 작업을 보유하거나 실행 중인 도구 호출 내부에서 승인을 요청한 세션을 포함하여 아직 턴 진행 중인 세션은 유휴 상태로 간주되지 않으므로, 강제 안전장치로 `--kill-session-after-min`과 함께 사용하십시오. 세션의 백그라운드 작업이 끝난 후, 러너는 그 결과를 읽는 후속 턴이 시작될 때까지 최대 [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings) 기간 동안 세션을 사용 중인 것으로 간주합니다. 러너가 종료 신호를 받거나 은퇴 시간에 도달하기 전까지, 해제로 인해 러너에 활성 세션이 하나도 남지 않으면 일반 드레인과 동일한 종료 경로가 시작되며 `--drain-grace-sec`의 적용을 받습니다. [`--defer-shutdown-max-min`](https://code.claude.com/docs/ko/self-hosted-environments-deploy#defer-the-drain-past-the-first-signal)으로 연기한 첫 번째 신호 이후에는 해제로 인해 보유한 세션이 없어지는 즉시 러너가 종료합니다. `0`은 비활성화합니다. |52| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | 턴이 끝나거나 세션이 사용자의 조치를 기다리는 상태에서 N분 동안 활동이 없으면 세션 슬롯을 해제합니다. [일부 세션은 유휴 상태로 간주되지 않으므로](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#some-sessions-don’t-count-as-idle) `--kill-session-after-min`과 함께 사용하십시오. 끝난 백그라운드 작업은 최대 [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings) 기간 동안 세션을 사용 중 상태로 유지합니다. 해제를 지연하려면 [`--hold-idle-file`](https://code.claude.com/docs/ko/self-hosted-environments-deploy#keep-an-idle-session-while-its-processes-run)을 설정하십시오. `0`은 비활성화합니다. |

51| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | 꺼짐 | 세션이 이 러너에서 종료되면 결과와 관계없이 `<base-dir>/_sessions/` 아래의 세션별 디렉터리를 제거합니다. 이러한 디렉터리에 무엇이 담기며 남아 있을 때 누가 읽을 수 있는지는 [미리 준비된 체크아웃 재사용하기](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout)에 설명되어 있습니다. 제거는 최선의 노력으로 수행됩니다. 정리가 실행되기 전에 러너가 강제 종료되거나 드레인 기한에 도달하면 세션별 디렉터리가 그대로 남습니다. 플래그를 켜면 실패하거나 중단된 세션의 디버그 로그가 디스크에 보관되지 않습니다. Claude Code v2.1.268 이상이 필요합니다. |53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | 꺼짐 | 세션이 이 러너에서 종료되면 결과와 관계없이 `<base-dir>/_sessions/` 아래의 세션별 디렉터리를 제거합니다. 이러한 디렉터리에 무엇이 담기며 남아 있을 때 누가 읽을 수 있는지는 [미리 준비된 체크아웃 재사용하기](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout)에 설명되어 있습니다. 제거는 최선의 노력으로 수행됩니다. 정리가 실행되기 전에 러너가 강제 종료되거나 드레인 기한에 도달하면 세션별 디렉터리가 그대로 남습니다. 플래그를 켜면 실패하거나 중단된 세션의 디버그 로그가 디스크에 보관되지 않습니다. Claude Code v2.1.268 이상이 필요합니다. |

52| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | 설정 안 됨 | 알려진 시간에 러너를 종료하는 인프라를 위해, 초 단위의 절대 Unix 타임스탬프에 러너를 은퇴시킵니다. 해제 순서와 여유 시간 설정 방법은 [러너 라이프사이클](https://code.claude.com/docs/ko/self-hosted-environments#runner-lifecycle)에 설명되어 있습니다. 2001년 이전 또는 5138년 이후의 값은 플래그에서는 거부되고 환경 변수에서는 무시됩니다. |54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | 설정 안 됨 | 알려진 시간에 러너를 종료하는 인프라를 위해, 초 단위의 절대 Unix 타임스탬프에 러너를 은퇴시킵니다. 해제 순서와 여유 시간 설정 방법은 [러너 라이프사이클](https://code.claude.com/docs/ko/self-hosted-environments#runner-lifecycle)에 설명되어 있습니다. 2001년 이전 또는 5138년 이후의 값은 플래그에서는 거부되고 환경 변수에서는 무시됩니다. |

53| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | 컨트롤 플레인이 세션과 함께 보내는 [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode) 분류기 규칙 목록 중 어떤 목록이 해당 세션에 도달할 수 있는지를 지정합니다: `all`, `no-allow`, 또는 `none`. 각 값이 무엇을 적용하는지는 [자동 모드 규칙 목록](#auto-mode-rule-lists)을 참조하십시오. 잘못된 값을 지정하면 시작 시 러너가 중지됩니다. Claude Code v2.1.295 이상이 필요합니다. |55| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | 컨트롤 플레인이 세션과 함께 보내는 [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode) 분류기 규칙 목록 중 어떤 목록이 해당 세션에 도달할 수 있는지를 지정합니다: `all`, `no-allow`, 또는 `none`. 각 값이 무엇을 적용하는지는 [자동 모드 규칙 목록](#auto-mode-rule-lists)을 참조하십시오. 잘못된 값을 지정하면 시작 시 러너가 중지됩니다. Claude Code v2.1.295 이상이 필요합니다. |


314 316 

315### 손실된 러너와 대기 중인 세션에 대한 알림317### 손실된 러너와 대기 중인 세션에 대한 알림

316 318 

317[고정 플릿](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`를 로드하십시오.319러너가 손실되거나, 세션이 대기하거나, 오케스트레이터가 중단되었을 때 알림을 받으려면 [샘플 알림 규칙](#sample-alert-rules)과 함께 다음 Prometheus 알림 규칙을 로드하십시오.

320 

321* **[고정 플릿](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#scale-the-fleet)**: `ClaudeRunnersBelowFloor`

322* **[온디맨드 러너](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#on-demand-runners)**: `ClaudeOrchestratorSessionsWaiting`, `ClaudeOrchestratorQueueWaitHigh`, `ClaudeOrchestratorAbsent`

318 323 

319#### 고정 플릿에서 러너가 줄어들 때 알림324#### 고정 플릿에서 러너가 줄어들 때 알림

320 325 


372* **임계값**: 항상 대기 중인 세션이 있다면 `ClaudeOrchestratorSessionsWaiting`의 `> 0`을 평소에 보이는 수보다 높게 올리십시오377* **임계값**: 항상 대기 중인 세션이 있다면 `ClaudeOrchestratorSessionsWaiting`의 `> 0`을 평소에 보이는 수보다 높게 올리십시오

373* **`ClaudeOrchestratorDisconnected`**: [샘플 알림 규칙](#sample-alert-rules)에서 로드한 상태로 유지하십시오. `ClaudeOrchestratorSessionsWaiting`은 네임스페이스의 마지막 오케스트레이터 연결이 끊긴 후 약 2분이 지나면 발생을 멈추기 때문입니다378* **`ClaudeOrchestratorDisconnected`**: [샘플 알림 규칙](#sample-alert-rules)에서 로드한 상태로 유지하십시오. `ClaudeOrchestratorSessionsWaiting`은 네임스페이스의 마지막 오케스트레이터 연결이 끊긴 후 약 2분이 지나면 발생을 멈추기 때문입니다

374 379 

380#### 오케스트레이터가 중단되었을 때 알림

381 

382[오케스트레이터](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#on-demand-runners) 자체가 중단되었는지 알려면 `ClaudeOrchestratorAbsent`를 로드하십시오. 이 알림은 네임스페이스의 어떤 오케스트레이터도 5분 동안 스크레이프되지 않았을 때 발생합니다.

383 

384```yaml theme={null}

385groups:

386 # On-demand runners only. Replace claude-runners with the orchestrator's namespace.

387 - name: claude-code-self-hosted-on-demand-orchestrator

388 rules:

389 - alert: ClaudeOrchestratorAbsent

390 expr: absent(claude_code_self_hosted_orchestrator_connected{namespace="claude-runners"})

391 for: 5m

392 labels: {severity: critical}

393 annotations:

394 summary: "No orchestrator has been scraped for 5 minutes. If it's down, no on-demand runner starts, and sessions wait. Check the orchestrator workload first, then its scrape target if it's running."

395```

396 

397* **네임스페이스**: `claude-runners`를 오케스트레이터의 네임스페이스로 바꾸고, 오케스트레이터를 실행하는 추가 네임스페이스마다 알림을 복사하십시오. 대상에 `namespace` 레이블이 없다면 matcher를 제거하십시오. 그렇지 않으면 알림이 5분 후에 발생하여 계속 켜진 상태로 유지됩니다.

398* **오케스트레이터를 스크레이프하지 않는 Prometheus 서버**: 해당 서버의 규칙 파일에서는 이 알림을 제외하십시오. 그런 서버에서는 5분 후에 알림이 발생하여 계속 켜진 상태로 유지되기 때문입니다

399* **오케스트레이터의 다른 알림에 의존하지 마십시오**: 이 알림들은 오케스트레이터 자체가 제공하는 메트릭을 읽습니다. `ClaudeOrchestratorSessionsWaiting`, `ClaudeOrchestratorQueueWaitHigh`, 그리고 오케스트레이터의 [샘플 알림 규칙](#sample-alert-rules)은 모두 오케스트레이터가 중단된 후 약 10분 이내에 발생을 멈춥니다.

400 

375### 세션 자식 메트릭 전달401### 세션 자식 메트릭 전달

376 402 

377각 세션은 자체 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` 레이블을 붙이며, 세션이 종료되면 해당 세션의 시리즈를 제거합니다. 히스토그램은 전달되지 않으며, 이름이 러너 자체의 접두사와 충돌하는 자식 메트릭은 삭제됩니다.403각 세션은 자체 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

288 288 

289 입력을 파이프하거나 리디렉션하고, macOS 및 Linux에서는 `/dev/tty`도 열 수 없는 경우 명령은 키보드에서 입력을 읽을 수 없습니다. 출력도 파이프하거나 리디렉션하면 해당 실행은 대신 비대화형이 되며, 전달된 설정은 해당 실행에만 적용됩니다.289 입력을 파이프하거나 리디렉션하고, macOS 및 Linux에서는 `/dev/tty`도 열 수 없는 경우 명령은 키보드에서 입력을 읽을 수 없습니다. 출력도 파이프하거나 리디렉션하면 해당 실행은 대신 비대화형이 되며, 전달된 설정은 해당 실행에만 적용됩니다.

290* **오류가 응답 전에 대화를 닫음**: Claude Code는 전달된 설정을 적용하지 않고 마지막으로 승인된 설정을 유지합니다. 대화를 표시할 수 있는 다음 세션에 다시 표시합니다.290* **오류가 응답 전에 대화를 닫음**: Claude Code는 전달된 설정을 적용하지 않고 마지막으로 승인된 설정을 유지합니다. 대화를 표시할 수 있는 다음 세션에 다시 표시합니다.

291* **`claude -p` 또는 Agent SDK 세션과 같은 비대화형 실행**: Claude Code는 대화를 표시할 수 없으므로, 전달된 설정이 승인을 요구할 때, 해당 실행에만 이를 적용합니다. 이를 승인된 것으로 기록하거나 [로컬 캐시](#fetch-and-caching-behavior)에 쓰지 않으며, 다음 대화형 세션은 대화를 표시합니다. 사용자가 대화형 세션에서 승인할 때까지, 각 비대화형 실행은 시작 시 설정을 다시 가져옵니다. v2.1.207 이전에는 비대화형 실행이 설정을 승인된 것으로 저장했으므로, 나중의 대화형 세션은 이들에 대해 대화를 표시하지 않았습니다.291* **`claude -p`, Agent SDK 세션, 또는 VS Code 확장 프로그램의 채팅 패널이나 데스크톱 앱의 Code 탭에서의 세션과 같은 비대화형 실행**: Claude Code는 대화를 표시할 수 없습니다. 전달된 설정이 승인을 요구하는 경우, 해당 실행에만 적용됩니다.

292 

293 Claude Code는 설정을 승인된 것으로 기록하거나 [로컬 캐시](#fetch-and-caching-behavior)에 쓰지 않으며, 다음 대화형 세션은 대화를 표시합니다. 사용자가 대화형 세션에서 승인할 때까지, 각 비대화형 실행은 시작 시 설정을 다시 가져옵니다.

292 294 

293#### 환경 변수 및 승인 대화295#### 환경 변수 및 승인 대화

294 296 


306* `OTEL_EXPORTER_OTLP_ENDPOINT`308* `OTEL_EXPORTER_OTLP_ENDPOINT`

307* `CLAUDE_CODE_DISABLE_1M_CONTEXT`309* `CLAUDE_CODE_DISABLE_1M_CONTEXT`

308 310 

309전달된 변수가 승인을 필요로 할 때, 대화는 이를 이름으로 지정하므로, 사용자는 정책이 설정하도록 요청하는 것을 정확히 봅니다. v2.1.218 이전에는 Claude Code가 더 적은 변수를 사용자에게 묻지 않고 적용했으므로, `DISABLE_AUTO_COMPACT`와 같은 설정이 비어 있지 않은 값에서 대화를 트리거했습니다.311전달된 변수가 승인을 필요로 할 때, 대화는 이를 이름으로 지정하므로, 사용자는 정책이 설정하도록 요청하는 것을 정확히 봅니다.

310 312 

311Claude Code는 변수 이름이 아니라 전달된 값에 따라 네 가지 개인정보 보호 토글이 승인을 필요로 하는지 결정합니다: `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, `DISABLE_ERROR_REPORTING`, `DISABLE_TELEMETRY`, `DO_NOT_TRACK`. `1` 또는 `true`와 같은 참 값은 추적, 보고 또는 기타 비필수 트래픽만 끄므로, Claude Code는 사용자에게 묻지 않고 이를 적용합니다. 다른 비어 있지 않은 값의 경우, Claude Code는 대화를 표시합니다. v2.1.218 이전에는 `DO_NOT_TRACK`을 제외한 모든 것이 비어 있지 않은 값에서 승인 없이 적용되었으며, `DO_NOT_TRACK`은 비어 있지 않은 값에서 대화를 트리거했습니다.313Claude Code는 변수 이름이 아니라 전달된 값에 따라 네 가지 개인정보 보호 토글이 승인을 필요로 하는지 결정합니다: `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, `DISABLE_ERROR_REPORTING`, `DISABLE_TELEMETRY`, `DO_NOT_TRACK`. `1` 또는 `true`와 같은 참 값은 추적, 보고 또는 기타 비필수 트래픽만 끄므로, Claude Code는 사용자에게 묻지 않고 이를 적용합니다. 다른 비어 있지 않은 값의 경우, Claude Code는 대화를 표시합니다.

312 314 

313Claude Code는 또한 전달된 값에 따라 [`API_FORCE_IDLE_TIMEOUT`](https://code.claude.com/docs/ko/env-vars)이 승인을 필요로 하는지 결정합니다. 참 값은 [본문 유휴 시간 초과](https://code.claude.com/docs/ko/network-config.md#streaming-idle-watchdogs)만 켜므로, Claude Code는 사용자에게 묻지 않고 이를 적용합니다. 다른 비어 있지 않은 값의 경우, Claude Code는 대화를 표시합니다. v2.1.248 이전에는 비어 있지 않은 값이 대화를 트리거했습니다.315Claude Code는 또한 전달된 값에 따라 [`API_FORCE_IDLE_TIMEOUT`](https://code.claude.com/docs/ko/env-vars)이 승인을 필요로 하는지 결정합니다. 참 값은 [본문 유휴 시간 초과](https://code.claude.com/docs/ko/network-config.md#streaming-idle-watchdogs)만 켜므로, Claude Code는 사용자에게 묻지 않고 이를 적용합니다. 다른 비어 있지 않은 값의 경우, Claude Code는 대화를 표시합니다. v2.1.248 이전에는 비어 있지 않은 값이 대화를 트리거했습니다.

314 316 

sessions.md +2 −2

Details

46Claude Code가 트랜스크립트에서 대화를 로드할 때 재개된 세션은 대화와 함께 저장된 상태를 복원합니다:46Claude Code가 트랜스크립트에서 대화를 로드할 때 재개된 세션은 대화와 함께 저장된 상태를 복원합니다:

47 47 

48* 대화 기록: 메시지, 도구 호출 및 결과입니다. 세션이 [압축](https://code.claude.com/docs/ko/context-window.md#what-survives-compaction)된 경우 대화는 `Conversation compacted` 행에서 열립니다. Claude는 마지막 압축의 요약, 해당 압축이 요약하지 않고 남긴 메시지, 그리고 그 이후의 모든 메시지로 계속합니다. 마지막 압축이 요약한 메시지는 다시 로드되지 않습니다.48* 대화 기록: 메시지, 도구 호출 및 결과입니다. 세션이 [압축](https://code.claude.com/docs/ko/context-window.md#what-survives-compaction)된 경우 대화는 `Conversation compacted` 행에서 열립니다. Claude는 마지막 압축의 요약, 해당 압축이 요약하지 않고 남긴 메시지, 그리고 그 이후의 모든 메시지로 계속합니다. 마지막 압축이 요약한 메시지는 다시 로드되지 않습니다.

49* 중단된 도구 호출: 이전 프로세스가 종료될 때(예: 충돌) 여전히 실행 중이던 도구는 재개할 때 완료되거나 다시 실행되지 않습니다. [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](https://code.claude.com/docs/ko/env-vars#variables)이 설정되지 않은 경우, Claude는 결과가 기록되기 전에 중단된 것으로 표시된 호출을 보게 되며 다시 실행하기 전에 효과가 있었는지 확인하도록 지시받습니다.49* 중단된 도구 호출: 이전 프로세스가 종료될 때(예: 충돌) 여전히 실행 중이던 도구는 재개할 때 다시 실행되지 않습니다.

50* 모델: 세션은 사용 중이던 모델에서 계속됩니다. 단, [모델 설정](https://code.claude.com/docs/ko/model-config.md#setting-your-model)에 설명된 경우는 제외됩니다.50* 모델: 세션은 사용 중이던 모델에서 계속됩니다. 단, [모델 설정](https://code.claude.com/docs/ko/model-config.md#setting-your-model)에 설명된 경우는 제외됩니다.

51* 에이전트: [`--agent`](https://code.claude.com/docs/ko/sub-agents#invoke-subagents-explicitly) 또는 `agent` 설정으로 시작된 세션은 해당 에이전트로 계속되며 도구 제한 및 모델을 유지합니다. 재개할 때 `--agent`를 전달하여 다른 에이전트를 선택합니다. 두 경우 모두 시스템 프롬프트는 [재개된 대화의 시스템 프롬프트 플래그](https://code.claude.com/docs/ko/cli-reference.md#system-prompt-flags-in-resumed-conversations)를 참조하세요. Claude Code는 두 위치에서 에이전트를 찾습니다: 세션의 원본 디렉토리(해당 워크스페이스를 [신뢰](https://code.claude.com/docs/ko/permissions.md#project-allow-rules-and-workspace-trust)한 경우) 및 재개하는 디렉토리이므로 프로젝트 범위 에이전트는 다른 디렉토리에서 재개할 때도 로드됩니다. Claude Code가 두 위치 모두에서 에이전트를 찾지 못하면 세션은 기본 도구로 재개되고 [에이전트 이름을 지정하는 경고](https://code.claude.com/docs/ko/errors.md#session-agent-no-longer-available)를 표시합니다.51* 에이전트: [`--agent`](https://code.claude.com/docs/ko/sub-agents#invoke-subagents-explicitly) 또는 `agent` 설정으로 시작된 세션은 해당 에이전트로 계속되며 도구 제한 및 모델을 유지합니다. 재개할 때 `--agent`를 전달하여 다른 에이전트를 선택합니다. 두 경우 모두 시스템 프롬프트는 [재개된 대화의 시스템 프롬프트 플래그](https://code.claude.com/docs/ko/cli-reference.md#system-prompt-flags-in-resumed-conversations)를 참조하세요. Claude Code는 두 위치에서 에이전트를 찾습니다: 세션의 원본 디렉토리(해당 워크스페이스를 [신뢰](https://code.claude.com/docs/ko/permissions.md#project-allow-rules-and-workspace-trust)한 경우) 및 재개하는 디렉토리이므로 프로젝트 범위 에이전트는 다른 디렉토리에서 재개할 때도 로드됩니다. Claude Code가 두 위치 모두에서 에이전트를 찾지 못하면 세션은 기본 도구로 재개되고 [에이전트 이름을 지정하는 경고](https://code.claude.com/docs/ko/errors.md#session-agent-no-longer-available)를 표시합니다.

52* 권한 모드: 터미널에서 `claude --continue`, `claude --resume <session-id>` 또는 이름이 한 세션과 일치할 때 `-p` 없이 `claude --resume <name>`으로 재개하면 Claude Code는 세션이 있던 권한 모드를 복원합니다. 단, [재개 시 권한 모드](#permission-mode-on-resume)의 경우는 제외되며, 이는 세션 선택기, `/resume` 및 `claude -p`로 재개하는 경우도 포함합니다. `--permission-mode` 또는 `--dangerously-skip-permissions`를 전달하여 복원된 모드를 재정의합니다.52* 권한 모드: 터미널에서 `claude --continue`, `claude --resume <session-id>` 또는 이름이 한 세션과 일치할 때 `-p` 없이 `claude --resume <name>`으로 재개하면 Claude Code는 세션이 있던 권한 모드를 복원합니다. 단, [재개 시 권한 모드](#permission-mode-on-resume)의 경우는 제외되며, 이는 세션 선택기, `/resume` 및 `claude -p`로 재개하는 경우도 포함합니다. `--permission-mode` 또는 `--dangerously-skip-permissions`를 전달하여 복원된 모드를 재정의합니다.


224* **`/compact [instructions]`**: 기록을 요약으로 바꾸고, 선택적으로 지정한 내용에 초점을 맞춥니다224* **`/compact [instructions]`**: 기록을 요약으로 바꾸고, 선택적으로 지정한 내용에 초점을 맞춥니다

225* **`/context`**: 현재 컨텍스트를 소비하는 것을 표시합니다225* **`/context`**: 현재 컨텍스트를 소비하는 것을 표시합니다

226 226 

227압축이 CLAUDE.md, 기술, 규칙과 상호 작용하는 방식은 [컨텍스트 윈도우 가이드](https://code.claude.com/docs/ko/context-window.md)를 참조합니다. 언제 지우기 대 압축을 사용할지에 대한 전략은 [모범 사례](https://code.claude.com/docs/ko/best-practices.md#manage-your-session)를 참조합니다.227압축이 CLAUDE.md, 스킬, 규칙과 상호 작용하는 방식은 [컨텍스트 윈도우 가이드](https://code.claude.com/docs/ko/context-window.md)를 참조합니다. 언제 지우기 대 압축을 사용할지에 대한 전략은 [모범 사례](https://code.claude.com/docs/ko/best-practices.md#keep-cost-and-context-down)를 참조합니다.

228 228 

229## 세션 데이터 내보내기 및 찾기229## 세션 데이터 내보내기 및 찾기

230 230 

settings.md +1 −1

Details

326* **여러 저장소가 있는 공유 프로젝트 설정**: Anthropic 호스팅 환경에서 여러 저장소가 있는 세션은 복제본 상위 디렉터리에서 시작되며, 각 저장소의 `.claude/settings.json`에서 `enabledPlugins` 및 `extraKnownMarketplaces` 키만 읽고 권한 규칙, 훅, `env` 또는 기타 키는 읽지 않습니다. 이 두 키가 선언하는 마켓플레이스와 플러그인도 [클라우드 세션에서는 로드되지 않습니다](https://code.claude.com/docs/ko/cloud-environments.md#what-carries-over-from-your-setup). 자체 호스팅 환경의 경우 [어느 저장소의 설정이 적용되는지](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#repository-settings-in-sessions-with-several-repositories)를 참조하세요.326* **여러 저장소가 있는 공유 프로젝트 설정**: Anthropic 호스팅 환경에서 여러 저장소가 있는 세션은 복제본 상위 디렉터리에서 시작되며, 각 저장소의 `.claude/settings.json`에서 `enabledPlugins` 및 `extraKnownMarketplaces` 키만 읽고 권한 규칙, 훅, `env` 또는 기타 키는 읽지 않습니다. 이 두 키가 선언하는 마켓플레이스와 플러그인도 [클라우드 세션에서는 로드되지 않습니다](https://code.claude.com/docs/ko/cloud-environments.md#what-carries-over-from-your-setup). 자체 호스팅 환경의 경우 [어느 저장소의 설정이 적용되는지](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#repository-settings-in-sessions-with-several-repositories)를 참조하세요.

327* **사용자 및 프로젝트 로컬 설정** (`~/.claude/settings.json` 및 `.claude/settings.local.json`): 읽지 않습니다. 둘 다 머신에 유지되고 로컬 파일은 복제본에 없습니다.327* **사용자 및 프로젝트 로컬 설정** (`~/.claude/settings.json` 및 `.claude/settings.local.json`): 읽지 않습니다. 둘 다 머신에 유지되고 로컬 파일은 복제본에 없습니다.

328* **관리되는 설정**: 장치의 `managed-settings.json` 파일이나 MDM 프로필은 클라우드 세션에 도달하지 않습니다. 조직의 [서버 관리 설정](https://code.claude.com/docs/ko/server-managed-settings.md)은 도달합니다. [표면 범위](https://code.claude.com/docs/ko/model-config.md#surface-coverage)는 어느 클라우드 세션이 이를 수신하는지 나열합니다. [자체 호스팅 환경](https://code.claude.com/docs/ko/self-hosted-environments)도 실행기 이미지의 관리되는 설정 파일을 읽습니다. [Claude Code가 관리되는 소스를 결합하는 방식](https://code.claude.com/docs/ko/managed-settings.md#how-claude-code-combines-managed-sources)은 해당 파일이 적용되는 시기를 설명합니다.328* **관리되는 설정**: 장치의 `managed-settings.json` 파일이나 MDM 프로필은 클라우드 세션에 도달하지 않습니다. 조직의 [서버 관리 설정](https://code.claude.com/docs/ko/server-managed-settings.md)은 도달합니다. [표면 범위](https://code.claude.com/docs/ko/model-config.md#surface-coverage)는 어느 클라우드 세션이 이를 수신하는지 나열합니다. [자체 호스팅 환경](https://code.claude.com/docs/ko/self-hosted-environments)도 실행기 이미지의 관리되는 설정 파일을 읽습니다. [Claude Code가 관리되는 소스를 결합하는 방식](https://code.claude.com/docs/ko/managed-settings.md#how-claude-code-combines-managed-sources)은 해당 파일이 적용되는 시기를 설명합니다.

329* **`/config`**: 브라우저의 claude.ai/code에서는 값을 변경하는 대신 claude.ai 설정의 Claude Code 섹션을 엽니다. 클라우드 세션의 설정을 변경하려면 환경에서 [환경 변수](https://code.claude.com/docs/ko/cloud-environments.md#set-environment-variables)를 설정합니다. 프로젝트 스레드 외부에서 저장소가 하나인 세션에서는 대신 해당 저장소의 `.claude/settings.json`에 키를 커밋할 수도 있습니다.329* **`/config`**: 브라우저의 claude.ai/code에서는 값을 변경하는 대신 claude.ai의 **Code** 또는 **Claude Code** 설정 페이지를 엽니다. 클라우드 세션의 설정을 변경하려면 환경에서 [환경 변수](https://code.claude.com/docs/ko/cloud-environments.md#set-environment-variables)를 설정합니다. 프로젝트 스레드 외부에서 저장소가 하나인 세션에서는 대신 해당 저장소의 `.claude/settings.json`에 키를 커밋할 수도 있습니다.

330 330 

331[설정에서 수행되는 것](https://code.claude.com/docs/ko/cloud-environments.md#what-carries-over-from-your-setup)은 나머지를 나열합니다: `CLAUDE.md`, skills, MCP servers, plugins, 및 credentials.331[설정에서 수행되는 것](https://code.claude.com/docs/ko/cloud-environments.md#what-carries-over-from-your-setup)은 나머지를 나열합니다: `CLAUDE.md`, skills, MCP servers, plugins, 및 credentials.

332 332 

Details

1293* `sudo`, `eval`, 또는 `xargs`로 시작하는 명령1293* `sudo`, `eval`, 또는 `xargs`로 시작하는 명령

1294* 호출의 어디든 나타나는 `cd`, `pushd`, 또는 `popd`1294* 호출의 어디든 나타나는 `cd`, `pushd`, 또는 `popd`

1295* 명령 대체, 하위 셸, 또는 `if` 또는 `for`와 같은 제어 흐름 블록1295* 명령 대체, 하위 셸, 또는 `if` 또는 `for`와 같은 제어 흐름 블록

1296* `docker build . > build.log`와 같은 리다이렉션(`2>&1`처럼 파일 디스크립터를 복제만 하는 것은 제외)1296* `docker build . > build.log`나 `<<EOF` heredoc 같은 리디렉션. 단, `2>&1`처럼 파일 디스크립터를 복제하기만 하는 것은 제외

1297* 변수에서 오는 명령 이름1297* 변수에서 오는 명령 이름

1298* 경로 인수가 절대 경로이거나, `~`로 시작하거나, `..` 세그먼트를 포함하는 `git clone`, `git init`, `git worktree add`, `git worktree move`, 또는 `git bundle create`1298* 경로 인수가 절대 경로이거나, `~`로 시작하거나, `..` 세그먼트를 포함하는 `git clone`, `git init`, `git worktree add`, `git worktree move`, 또는 `git bundle create`

1299 1299 


1521 1521 

1522### `sandbox.filesystem.disabled`1522### `sandbox.filesystem.disabled`

1523 1523 

1524네트워크 격리를 유지하면서 파일시스템 격리를 건너뜁니다. 샌드박스된 명령은 호스트 파일시스템에 대한 무제한 읽기 및 쓰기 액세스를 얻으며, 해당 네트워크 송신은 [`network.allowedDomains`](#sandbox-network-alloweddomains)로 제한됩니다. 명령이 쓰는 것이 아니라 연결하는 위치를 제어하기 위해 샌드박스할 때 사용하십시오. Claude Code v2.1.216 이상이 필요합니다.1524네트워크 격리는 유지하면서 파일 시스템 격리를 건너뜁니다. 샌드박스 처리된 명령은 호스트 파일 시스템에 대한 무제한 읽기 및 쓰기 접근 권한을 얻으며, 네트워크 송신은 [`network.allowedDomains`](#sandbox-network-alloweddomains)로 제한된 상태로 유지됩니다. 명령이 무엇을 쓰는지보다 어디에 연결하는지를 제어하기 위해 샌드박스를 사용할 때 활용하세요.

1525 1525 

1526* **범위**: [`User or managed`](#scopes). 관리형 설정이 `sandbox.filesystem`을 조금이라도 구성하거나 `"mode": "deny"`인 `sandbox.credentials.files` 항목을 나열하는 경우, 관리형 설정만 이 키를 설정할 수 있습니다.1526* **범위**: [`User or managed`](#scopes). 관리형 설정이 `sandbox.filesystem`을 조금이라도 구성하거나 `"mode": "deny"`인 `sandbox.credentials.files` 항목을 나열하는 경우, 관리형 설정만 이 키를 설정할 수 있습니다.

1527* **유형**: Boolean1527* **유형**: Boolean


1545}1545}

1546```1546```

1547 1547 

1548계층이 꺼지면, Claude Code는 `denyRead` 또는 `credentials.files` `deny` 항목을 적용하지 않으며, `credentials.envVars` 항목 및 적용된 `mask` 항목은 계속 작동합니다. [`autoAllowBashIfSandboxed`](#sandbox-autoallowbashifsandboxed)는 여전히 기본값이 `true`이므로, 계속 확인을 요청하게 하려면 `false`로 설정하십시오. [파일시스템 격리 비활성화](https://code.claude.com/docs/ko/sandboxing.md#disable-filesystem-isolation)에서 이를 설정할 수 있는 전체 소스 목록과 격리가 꺼졌을 때 변경되는 사항을 참조하십시오. Claude Code v2.1.216 이상이 필요합니다.1548이 계층이 꺼지면 Claude Code는 `denyRead`나 `credentials.files`의 `deny` 항목을 적용하지 않지만, `credentials.envVars` 항목과 적용된 `mask` 항목은 계속 작동합니다. [`autoAllowBashIfSandboxed`](#sandbox-autoallowbashifsandboxed)는 여전히 기본값이 `true`이므로, 계속 확인을 요청하게 하려면 `false`로 설정하세요. 이 키를 설정할 수 있는 소스의 전체 목록과 격리가 꺼졌을 때 달라지는 점은 [파일 시스템 격리 비활성화하기](https://code.claude.com/docs/ko/sandboxing.md#disable-filesystem-isolation)를 참조하세요.

1549 1549 

1550### `sandbox.ignoreViolations`1550### `sandbox.ignoreViolations`

1551 1551 


2392* [`CLAUDE_CODE_RESTRICTED`](https://code.claude.com/docs/ko/env-vars#variables)는 Claude Code가 시작 환경에서만 읽으므로 모든 파일에서 무시됩니다.2392* [`CLAUDE_CODE_RESTRICTED`](https://code.claude.com/docs/ko/env-vars#variables)는 Claude Code가 시작 환경에서만 읽으므로 모든 파일에서 무시됩니다.

2393* [`CLAUDE_CODE_DISABLE_POWERSHELL_CMD_RM_DENY`](https://code.claude.com/docs/ko/env-vars#variables)는 Claude Code가 시작 환경에서만 읽으므로 모든 파일에서 무시됩니다. 변수는 Claude Code v2.1.283 이상이 필요합니다.2393* [`CLAUDE_CODE_DISABLE_POWERSHELL_CMD_RM_DENY`](https://code.claude.com/docs/ko/env-vars#variables)는 Claude Code가 시작 환경에서만 읽으므로 모든 파일에서 무시됩니다. 변수는 Claude Code v2.1.283 이상이 필요합니다.

2394* [`CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT`, `CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT`, `CLAUDE_CODE_DISABLE_INLINE_SHELL_RM_PROMPT` 및 `CLAUDE_CODE_DISABLE_MOUNTED_DRIVE_RM_PROMPT`](https://code.claude.com/docs/ko/env-vars#variables)는 Claude Code가 시작 환경에서만 읽으므로 모든 파일에서 무시됩니다.2394* [`CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT`, `CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT`, `CLAUDE_CODE_DISABLE_INLINE_SHELL_RM_PROMPT` 및 `CLAUDE_CODE_DISABLE_MOUNTED_DRIVE_RM_PROMPT`](https://code.claude.com/docs/ko/env-vars#variables)는 Claude Code가 시작 환경에서만 읽으므로 모든 파일에서 무시됩니다.

2395* [`CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS`](https://code.claude.com/docs/ko/env-vars#variables)는 Claude Code가 시작 환경에서만 읽으므로 모든 파일에서 무시됩니다.

2395* [`CLAUDE_CODE_WARN_DISK_FREE_GIB` 및 `CLAUDE_CODE_WARN_MEMORY_FREE_GIB`](https://code.claude.com/docs/ko/env-vars#variables)는 Claude Code가 시작 환경에서만 읽으므로 모든 파일에서 무시됩니다. 이 변수는 Claude Code v2.1.304 이상이 필요합니다.2396* [`CLAUDE_CODE_WARN_DISK_FREE_GIB` 및 `CLAUDE_CODE_WARN_MEMORY_FREE_GIB`](https://code.claude.com/docs/ko/env-vars#variables)는 Claude Code가 시작 환경에서만 읽으므로 모든 파일에서 무시됩니다. 이 변수는 Claude Code v2.1.304 이상이 필요합니다.

2396 2397 

2397### `fileCheckpointingEnabled`2398### `fileCheckpointingEnabled`


2716}2717}

2717```2718```

2718 2719 

2719[이모지 단축 코드](https://code.claude.com/docs/ko/interactive-mode.md#emoji-shortcodes)를 참조하십시오. Claude Code v2.1.217 이상이 필요합니다.2720[이모지 단축 코드](https://code.claude.com/docs/ko/interactive-mode.md#emoji-shortcodes)를 참조하십시오.

2720 2721 

2721### `fileSuggestion`2722### `fileSuggestion`

2722 2723 


3691 3692 

3692### `workflowSizeGuideline`3693### `workflowSizeGuideline`

3693 3694 

3694작성하는 동적 워크플로에서 Claude가 목표로 하는 [에이전트 수](https://code.claude.com/docs/ko/workflows.md#set-a-size-guideline)를 설정합니다. Claude Code는 값을 Claude에 조언으로 보냅니다. 강제 상한이 아닙니다: `"small"`은 5개 미만의 에이전트를 요청하고, `"medium"`은 10개 미만, `"large"`는 50개 미만입니다. 워크플로가 소비하는 것을 제한하려면 `"small"`을 선택합니다. Claude Code v2.1.219 이상이 필요합니다.3695작성하는 동적 워크플로에서 Claude가 목표로 하는 [에이전트 수](https://code.claude.com/docs/ko/workflows.md#set-a-size-guideline)를 설정합니다. Claude Code는 값을 Claude에 조언으로 보냅니다. 강제 상한이 아닙니다: `"small"`은 5개 미만의 에이전트를 요청하고, `"medium"`은 10개 미만, `"large"`는 50개 미만입니다. 워크플로가 소비하는 것을 제한하려면 `"small"`을 선택합니다.

3695 3696 

3696* **범위**: [`모든 파일`](#scopes). 여기의 값은 `/config`의 **동적 워크플로 크기** 선택보다 우선순위를 가집니다. Claude Code는 이를 `~/.claude.json`에 저장하고, 설정 파일이 키를 설정하는 동안 해당 행을 숨깁니다.3697* **범위**: [`모든 파일`](#scopes). 여기의 값은 `/config`의 **동적 워크플로 크기** 선택보다 우선순위를 가집니다. Claude Code는 이를 `~/.claude.json`에 저장하고, 설정 파일이 키를 설정하는 동안 해당 행을 숨깁니다.

3697* **유형**: 문자열, 다음 중 하나:3698* **유형**: 문자열, 다음 중 하나:


3707}3708}

3708```3709```

3709 3710 

3710Claude Code v2.1.219 이상이 필요합니다. v2.1.202부터 v2.1.218까지는 대신 `/config`에서 지침을 설정합니다.

3711 

3712## 플러그인과 스킬3711## 플러그인과 스킬

3713 3712 

3714플러그인을 활성화하고, 마켓플레이스를 등록하고, 조직에서 허용하는 플러그인 소스를 제한하고, 로드할 스킬을 제어합니다. 플러그인 설치 및 빌드에 대해서는 [플러그인](https://code.claude.com/docs/ko/plugins/overview.md)을 참조하세요.3713플러그인을 활성화하고, 마켓플레이스를 등록하고, 조직에서 허용하는 플러그인 소스를 제한하고, 로드할 스킬을 제어합니다. 플러그인 설치 및 빌드에 대해서는 [플러그인](https://code.claude.com/docs/ko/plugins/overview.md)을 참조하세요.

skills.md +5 −7

Details

83| 하위 명령 | 기능 | 최소 버전 |83| 하위 명령 | 기능 | 최소 버전 |

84| :- | :- | :- |84| :- | :- | :- |

85| `migrate` | 기존 Claude API 코드를 최신 모델에 맞게 업데이트 | v2.1.221 이전 |85| `migrate` | 기존 Claude API 코드를 최신 모델에 맞게 업데이트 | v2.1.221 이전 |

86| `upgrade` | 프로젝트의 Anthropic SDK 의존성을 메이저 버전 간에 이전(현재는 Python `anthropic` 패키지를 0.x에서 1.x로) | v2.1.236 이상 |86| `upgrade` | 프로젝트의 Anthropic SDK를 새 메이저 버전으로 업그레이드하고 호환성이 깨지는 변경 사항에 맞게 코드를 업데이트 | v2.1.236 이상 |

87| `api-version` | Claude API 코드를 최신 [API 버전](https://platform.claude.com/docs/en/api/versioning)에 맞게 업데이트한 다음 요청을 해당 버전으로 전환 | v2.1.307 이상 |87| `api-version` | Claude API 코드를 최신 [API 버전](https://platform.claude.com/docs/en/api/versioning)에 맞게 업데이트한 다음 요청을 해당 버전으로 전환 | v2.1.307 이상 |

88| `managed-agents-onboard` | 새 Managed Agent 생성 과정을 단계별로 안내 | v2.1.221 이전 |88| `managed-agents-onboard` | 새 Managed Agent 생성 과정을 단계별로 안내 | v2.1.221 이전 |

89| `managed-agents-onboard <url>` | [Managed Agents 문서](https://platform.claude.com/docs/en/managed-agents/overview)의 페이지 등 해당 URL의 페이지에 설명된 Managed Agent를 구축 | v2.1.290 이상 |89| `managed-agents-onboard <url>` | [Managed Agents 문서](https://platform.claude.com/docs/en/managed-agents/overview)의 페이지 등 해당 URL의 페이지에 설명된 Managed Agent를 구축 | v2.1.290 이상 |


3713. Push to the deployment target3713. Push to the deployment target

372```372```

373 373 

374본문 자체는 간결하게 유지합니다. 스킬이 로드되면 해당 콘텐츠는 [여러 턴에 걸쳐 컨텍스트에 유지](#skill-content-lifecycle)되므로 모든 줄이 반복되는 토큰 비용입니다. 어떻게 또는 왜인지 설명하기보다는 무엇을 해야 하는지 명시하고, [CLAUDE.md 콘텐츠](https://code.claude.com/docs/ko/best-practices.md#write-an-effective-claude-md)에 적용할 동일한 간결성 테스트를 적용합니다.374본문 자체는 간결하게 유지합니다. 스킬이 로드되면 해당 콘텐츠는 [여러 턴에 걸쳐 컨텍스트에 유지](#skill-content-lifecycle)되므로 모든 줄이 반복되는 토큰 비용입니다. 어떻게 또는 왜인지 설명하기보다는 무엇을 해야 하는지 명시하고, [CLAUDE.md 콘텐츠](https://code.claude.com/docs/ko/best-practices.md#keep-claude-md-short)에 적용할 동일한 간결성 테스트를 적용합니다.

375 375 

376### frontmatter 참고376### frontmatter 참고

377 377 


388Your skill instructions here...388Your skill instructions here...

389```389```

390 390 

391모든 필드는 선택 사항입니다. Claude가 스킬을 언제 사용할지 알 수 있도록 `description`만 권장됩니다. 필드 이름은 하이픈을 포함하여 표와 정확히 일치해야 합니다. Claude Code는 인식하지 못하는 필드를 오류를 보고하지 않고 무시합니다.391모든 필드는 선택 사항입니다. Claude가 스킬을 언제 사용할지 알 수 있도록 `description`만 권장됩니다. 필드 이름은 하이픈을 포함하여 표와 정확히 일치해야 합니다. Claude Code는 인식하지 못하는 필드를 오류를 보고하지 않고 무시합니다. 부울 필드는 `true` 및 `false` 외에도 모든 문자 케이스에서 `yes`, `no`, `on`, `off`, `1`, `0`을 허용합니다.

392 392 

393Claude Code는 파일의 첫 번째 줄이 `---`일 때만 frontmatter를 읽습니다. 그렇지 않으면 `---` 마커를 포함한 전체 파일을 스킬 콘텐츠로 취급합니다. 마커 사이의 YAML을 파싱할 수 없는 경우에도 스킬은 필드가 설정되지 않은 상태로 로드됩니다. 오류를 찾아 수정하려면 [스킬이 트리거되지 않음](#skill-not-triggering)을 참조하세요.393Claude Code는 파일의 첫 번째 줄이 `---`일 때만 frontmatter를 읽습니다. 그렇지 않으면 `---` 마커를 포함한 전체 파일을 스킬 콘텐츠로 취급합니다. 마커 사이의 YAML을 파싱할 수 없는 경우에도 스킬은 필드가 설정되지 않은 상태로 로드됩니다. 오류를 찾아 수정하려면 [스킬이 트리거되지 않음](#skill-not-triggering)을 참조하세요.

394 394 

395부울 필드는 `true` 및 `false` 외에도 모든 문자 케이스에서 `yes`, `no`, `on`, `off`, `1`, `0`을 허용합니다. v2.1.218 이전에는 Claude Code가 `true` 및 `false`만 인식했습니다.

396 

397| 필드 | 필수 | 설명 |395| 필드 | 필수 | 설명 |

398| :- | :- | :- |396| :- | :- | :- |

399| `name` | 아니요 | `/` 메뉴에 표시되는 명령 이름입니다. 기본값은 디렉터리 이름입니다. [스킬이 명령 이름을 얻는 방법](#how-a-skill-gets-its-command-name)을 참조하여 필드가 스킬을 호출하기 위해 입력하는 이름과 어떻게 상호 작용하는지 확인하세요. |397| `name` | 아니요 | `/` 메뉴에 표시되는 명령 이름입니다. 기본값은 디렉터리 이름입니다. [스킬이 명령 이름을 얻는 방법](#how-a-skill-gets-its-command-name)을 참조하여 필드가 스킬을 호출하기 위해 입력하는 이름과 어떻게 상호 작용하는지 확인하세요. |


409| `effort` | 아니요 | 이 스킬이 활성화될 때의 [effort 수준](https://code.claude.com/docs/ko/model-config.md#adjust-effort-level)입니다. 세션 effort 수준을 재정의합니다. 생략하면 [effort 결정 순서](https://code.claude.com/docs/ko/model-config.md#adjust-effort-level)에 따라 수준이 정해집니다. 옵션: `low`, `medium`, `high`, `xhigh`, `max`. 사용 가능한 수준은 모델에 따라 다릅니다. |407| `effort` | 아니요 | 이 스킬이 활성화될 때의 [effort 수준](https://code.claude.com/docs/ko/model-config.md#adjust-effort-level)입니다. 세션 effort 수준을 재정의합니다. 생략하면 [effort 결정 순서](https://code.claude.com/docs/ko/model-config.md#adjust-effort-level)에 따라 수준이 정해집니다. 옵션: `low`, `medium`, `high`, `xhigh`, `max`. 사용 가능한 수준은 모델에 따라 다릅니다. |

410| `context` | 아니요 | 포크된 서브에이전트 컨텍스트에서 실행하려면 `fork`로 설정합니다. [서브에이전트에서 스킬 실행](#run-skills-in-a-subagent)을 참조하세요. |408| `context` | 아니요 | 포크된 서브에이전트 컨텍스트에서 실행하려면 `fork`로 설정합니다. [서브에이전트에서 스킬 실행](#run-skills-in-a-subagent)을 참조하세요. |

411| `agent` | 아니요 | `context: fork`가 설정되었을 때 사용할 서브에이전트 유형입니다. |409| `agent` | 아니요 | `context: fork`가 설정되었을 때 사용할 서브에이전트 유형입니다. |

412| `background` | 아니요 | `context: fork`에만 적용됩니다. [백그라운드에서 실행](#run-skills-in-a-subagent)하는 대신 스킬을 호출한 턴에서 포크된 서브에이전트의 결과를 기다리려면 `false`로 설정합니다. 기본값: `true`. Claude Code v2.1.218 이상이 필요합니다. |410| `background` | 아니요 | `context: fork`에만 적용됩니다. [백그라운드에서 실행](#run-skills-in-a-subagent)하는 대신 스킬을 호출한 턴에서 포크된 서브에이전트의 결과를 기다리려면 `false`로 설정합니다. 기본값: `true`. |

413| `hooks` | 아니요 | Claude Code가 스킬을 호출할 때 등록하고 세션의 나머지 부분 동안 계속 실행되는 훅입니다. 구성 형식, `once` 옵션 및 [스킬 훅의 제한 사항](https://code.claude.com/docs/ko/hooks.md#limits-on-skill-hooks)은 [스킬 및 에이전트의 훅](https://code.claude.com/docs/ko/hooks.md#hooks-in-skills-and-agents)을 참조하세요. |411| `hooks` | 아니요 | Claude Code가 스킬을 호출할 때 등록하고 세션의 나머지 부분 동안 계속 실행되는 훅입니다. 구성 형식, `once` 옵션 및 [스킬 훅의 제한 사항](https://code.claude.com/docs/ko/hooks.md#limits-on-skill-hooks)은 [스킬 및 에이전트의 훅](https://code.claude.com/docs/ko/hooks.md#hooks-in-skills-and-agents)을 참조하세요. |

414| `paths` | 아니요 | 이 스킬이 활성화되는 시기를 제한하는 Glob 패턴입니다. 쉼표로 구분된 문자열 또는 YAML 목록을 허용합니다. 설정되면 Claude는 패턴과 일치하는 파일로 작업할 때만 스킬을 자동으로 로드합니다. 패턴은 Claude의 현재 작업 디렉터리를 기준으로 하며, 해당 디렉터리 외부의 파일은 일치하지 않습니다. [경로별 규칙](https://code.claude.com/docs/ko/memory.md#path-specific-rules)과 동일한 glob 형식을 사용합니다. |412| `paths` | 아니요 | 이 스킬이 활성화되는 시기를 제한하는 Glob 패턴입니다. 쉼표로 구분된 문자열 또는 YAML 목록을 허용합니다. 설정되면 Claude는 패턴과 일치하는 파일로 작업할 때만 스킬을 자동으로 로드합니다. 패턴은 Claude의 현재 작업 디렉터리를 기준으로 하며, 해당 디렉터리 외부의 파일은 일치하지 않습니다. [경로별 규칙](https://code.claude.com/docs/ko/memory.md#path-specific-rules)과 동일한 glob 형식을 사용합니다. |

415| `shell` | 아니요 | 이 스킬에서 `` !`command` `` 및 ` ```! ` 블록에 사용할 셸입니다. `bash`(기본값) 또는 `powershell`을 허용합니다. `powershell`을 설정하면 [PowerShell 도구](https://code.claude.com/docs/ko/tools-reference.md#powershell-tool)가 활성화되었을 때 PowerShell을 통해 인라인 셸 명령을 실행합니다. Git Bash가 없는 Windows에서는 기본적으로 켜져 있고, Git Bash가 있는 claude.ai 및 Console 계정에서는 기본적으로 켜져 있으며, Amazon Bedrock, Google Cloud의 Agent Platform, Microsoft Foundry 세션 및 macOS, Linux, WSL에서는 `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`이 필요합니다. 도구를 끄려면 `0`으로 설정합니다. |413| `shell` | 아니요 | 이 스킬에서 `` !`command` `` 및 ` ```! ` 블록에 사용할 셸입니다. `bash`(기본값) 또는 `powershell`을 허용합니다. `powershell`을 설정하면 [PowerShell 도구](https://code.claude.com/docs/ko/tools-reference.md#powershell-tool)가 활성화되었을 때 PowerShell을 통해 인라인 셸 명령을 실행합니다. Git Bash가 없는 Windows에서는 기본적으로 켜져 있고, Git Bash가 있는 claude.ai 및 Console 계정에서는 기본적으로 켜져 있으며, Amazon Bedrock, Google Cloud의 Agent Platform, Microsoft Foundry 세션 및 macOS, Linux, WSL에서는 `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`이 필요합니다. 도구를 끄려면 `0`으로 설정합니다. |


800>798>

801> 이름에도 불구하고 `context: fork`가 있는 스킬은 [현재 대화의 포크](https://code.claude.com/docs/ko/sub-agents.md#fork-the-current-conversation)에서 실행되지 않으며, 이는 지금까지 논의한 모든 것을 서브에이전트에 전달할 것입니다. 작업이 해당 기록에 따라 다를 때 `context: fork` 대신 대화를 포크합니다.799> 이름에도 불구하고 `context: fork`가 있는 스킬은 [현재 대화의 포크](https://code.claude.com/docs/ko/sub-agents.md#fork-the-current-conversation)에서 실행되지 않으며, 이는 지금까지 논의한 모든 것을 서브에이전트에 전달할 것입니다. 작업이 해당 기록에 따라 다를 때 `context: fork` 대신 대화를 포크합니다.

802 800 

803포크된 서브에이전트는 [백그라운드](https://code.claude.com/docs/ko/sub-agents.md#run-subagents-in-foreground-or-background)에서 실행됩니다: 실행되는 동안 계속 작업하고 완료되면 결과가 대화에 도착합니다. frontmatter에서 `background: false`를 설정하여 대신 스킬을 호출한 턴에서 결과를 기다립니다. v2.1.218 이전에는 포크된 스킬이 항상 완료될 때까지 턴을 차단했습니다.801포크된 서브에이전트는 [백그라운드](https://code.claude.com/docs/ko/sub-agents.md#run-subagents-in-foreground-or-background)에서 실행됩니다: 실행되는 동안 계속 작업하고 완료되면 결과가 대화에 도착합니다. frontmatter에서 `background: false`를 설정하여 대신 스킬을 호출한 턴에서 결과를 기다립니다.

804 802 

805Claude Code는 다음과 같은 경우에도 스킬이 `background: false`를 설정하지 않더라도 결과를 기다립니다:803Claude Code는 다음과 같은 경우에도 스킬이 `background: false`를 설정하지 않더라도 결과를 기다립니다:

806 804 

sub-agents.md +3 −10

Details

352* **전체 모델 ID**: `claude-opus-5-5` 또는 `claude-sonnet-5`와 같은 전체 모델 ID를 사용합니다. `--model` 플래그와 동일한 값을 허용합니다352* **전체 모델 ID**: `claude-opus-5-5` 또는 `claude-sonnet-5`와 같은 전체 모델 ID를 사용합니다. `--model` 플래그와 동일한 값을 허용합니다

353* **inherit**: 메인 대화와 동일한 모델을 사용합니다353* **inherit**: 메인 대화와 동일한 모델을 사용합니다

354 354 

355Claude가 서브에이전트를 호출할 때 해당 호출에 대해 `model` 매개변수를 전달할 수도 있습니다. Claude Code는 다음 순서로 서브에이전트의 모델을 결정합니다.355Claude가 서브에이전트를 호출할 때 해당 호출에 대해 `model` 매개변수를 전달할 수도 있습니다. Agent 도구 호출에서 이 매개변수는 모델 별칭 `sonnet`, `opus`, `haiku` 또는 `fable`을 받습니다. Claude는 해당 호출에서 전체 모델 ID나 `inherit`를 전달할 수 없습니다. Claude Code는 다음 순서로 서브에이전트의 모델을 결정합니다.

356 356 

3571. 호출별 `model` 매개변수3571. 호출별 `model` 매개변수

3582. 서브에이전트 정의의 `model` frontmatter. 여기서 `inherit`는 메인 대화의 모델을 선택합니다3582. 서브에이전트 정의의 `model` frontmatter. 여기서 `inherit`는 메인 대화의 모델을 선택합니다


600| `default` | Manual 모드: 권한을 요청합니다 |600| `default` | Manual 모드: 권한을 요청합니다 |

601| `acceptEdits` | 작업 디렉터리 또는 `additionalDirectories`의 경로에 대한 파일 편집과 일반적인 파일 시스템 명령을 자동으로 수락합니다 |601| `acceptEdits` | 작업 디렉터리 또는 `additionalDirectories`의 경로에 대한 파일 편집과 일반적인 파일 시스템 명령을 자동으로 수락합니다 |

602| `auto` | [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode): 백그라운드 분류기가 명령과 보호된 디렉터리 쓰기를 검토합니다 |602| `auto` | [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode): 백그라운드 분류기가 명령과 보호된 디렉터리 쓰기를 검토합니다 |

603| `dontAsk` | 확인을 요청하게 될 호출을 자동으로 거부합니다. 단, 설치한 [mod](https://code.claude.com/docs/ko/plugins/mods/overview.md)가 [그러한 호출 중 일부](https://code.claude.com/docs/ko/permissions.md#precedence-among-rules-hooks-and-mods)를 여전히 승인할 수 있습니다. 명시적으로 허용된 도구는 계속 작동합니다. `AskUserQuestion`, [`requiresUserInteraction`](https://code.claude.com/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구, [네트워크 경로에서의 읽기](https://code.claude.com/docs/ko/permissions.md#network-paths), 그리고 해당 설정이 Claude Code에 적용되는 세션에서 [조직이 `ask`로 설정한](https://code.claude.com/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구는 허용했더라도 거부됩니다 |603| `dontAsk` | 확인을 요청하게 될 호출을 자동으로 거부합니다. 단, 설치한 [mod](https://code.claude.com/docs/ko/plugins/mods/overview.md)가 [그러한 호출 중 일부](https://code.claude.com/docs/ko/permissions.md#precedence-among-rules-hooks-and-mods)를 여전히 승인할 수 있습니다. 명시적으로 허용된 도구는 계속 작동합니다. `AskUserQuestion`, [`requiresUserInteraction`](https://code.claude.com/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구, [네트워크 경로에서의 읽기](https://code.claude.com/docs/ko/permissions.md#network-paths), 그리고 해당 설정이 Claude Code에 도달하는 세션에서 [조직이 `ask`로 설정한](https://code.claude.com/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구는 허용했더라도 거부됩니다 |

604| `bypassPermissions` | [권한 프롬프트를 건너뜁니다](https://code.claude.com/docs/ko/permission-modes.md#skip-all-checks-with-bypasspermissions-mode). 서브에이전트는 메인 대화가 이 모드일 때만 이 모드로 실행됩니다 |604| `bypassPermissions` | [권한 프롬프트를 건너뜁니다](https://code.claude.com/docs/ko/permission-modes.md#skip-all-checks-with-bypasspermissions-mode). 서브에이전트는 메인 대화가 이 모드일 때만 이 모드로 실행됩니다 |

605| `plan` | 플랜 모드(읽기 전용 탐색) |605| `plan` | 플랜 모드(읽기 전용 탐색) |

606 606 


762 762 

763프로젝트 수준 서브에이전트의 frontmatter 훅을 실행하려면 에이전트 파일이 있는 폴더에 대해 [워크스페이스 신뢰 대화 상자](https://code.claude.com/docs/ko/permissions.md#project-allow-rules-and-workspace-trust)를 수락하세요. `~/.claude/agents/`의 사용자 수준 서브에이전트와 `--agents`로 전달한 정의의 훅은 이 단계 없이 실행됩니다. 신뢰된 워크스페이스의 저장소 외부에서 `--add-dir`로 폴더를 추가한 경우 해당 폴더를 별도로 신뢰하세요. 해당 폴더의 `.claude/agents/` 훅은 워크스페이스의 승인을 상속하지 않습니다.763프로젝트 수준 서브에이전트의 frontmatter 훅을 실행하려면 에이전트 파일이 있는 폴더에 대해 [워크스페이스 신뢰 대화 상자](https://code.claude.com/docs/ko/permissions.md#project-allow-rules-and-workspace-trust)를 수락하세요. `~/.claude/agents/`의 사용자 수준 서브에이전트와 `--agents`로 전달한 정의의 훅은 이 단계 없이 실행됩니다. 신뢰된 워크스페이스의 저장소 외부에서 `--add-dir`로 폴더를 추가한 경우 해당 폴더를 별도로 신뢰하세요. 해당 폴더의 `.claude/agents/` 훅은 워크스페이스의 승인을 상속하지 않습니다.

764 764 

765폴더를 신뢰하기 전까지 서브에이전트는 계속 실행되지만, Claude Code는 frontmatter 훅을 건너뛰고 폴더를 신뢰하는 방법을 설명하는 오류를 디버그 로그에 기록합니다. 이는 설정 파일의 훅에 대한 규칙보다 엄격한 규칙입니다. 부모 폴더를 신뢰하는 것만으로는 충분하지 않으며, `-p` 세션은 신뢰된 것으로 간주되지 않습니다. [폴더를 신뢰하기 전에 실행되는 항목](https://code.claude.com/docs/ko/permissions.md#what-runs-before-you-trust-a-folder)에서 두 규칙을 비교합니다. v2.1.218 이전에는 비대화형 세션을 포함하여 신뢰하지 않은 폴더에서도 frontmatter 훅이 실행될 수 있었습니다.765폴더를 신뢰하기 전까지 서브에이전트는 계속 실행되지만, Claude Code는 frontmatter 훅을 건너뛰고 폴더를 신뢰하는 방법을 설명하는 오류를 디버그 로그에 기록합니다. 이는 설정 파일의 훅에 대한 규칙보다 엄격한 규칙입니다. 부모 폴더를 신뢰하는 것만으로는 충분하지 않으며, `-p` 세션은 신뢰된 것으로 간주되지 않습니다. [폴더를 신뢰하기 전에 실행되는 항목](https://code.claude.com/docs/ko/permissions.md#what-runs-before-you-trust-a-folder)에서 두 규칙을 비교합니다.

766 766 

767모든 [훅 이벤트](https://code.claude.com/docs/ko/hooks.md#hook-events)가 지원됩니다. 서브에이전트에서 가장 일반적인 이벤트는 다음과 같습니다.767모든 [훅 이벤트](https://code.claude.com/docs/ko/hooks.md#hook-events)가 지원됩니다. 서브에이전트에서 가장 일반적인 이벤트는 다음과 같습니다.

768 768 


1075 1075 

1076터미널에서 Claude Code는 프롬프트 입력 아래 서브에이전트 패널에 중첩된 서브에이전트를 트리로 표시하며, 패널에 아직 하위 항목이 있는 각 행에는 그 수를 나타내는 `(+N)`을 표시합니다. 행을 열면 해당 서브에이전트의 형제 항목과 직속 하위 항목이 `main`으로 돌아가는 경로와 함께 표시됩니다.1076터미널에서 Claude Code는 프롬프트 입력 아래 서브에이전트 패널에 중첩된 서브에이전트를 트리로 표시하며, 패널에 아직 하위 항목이 있는 각 행에는 그 수를 나타내는 `(+N)`을 표시합니다. 행을 열면 해당 서브에이전트의 형제 항목과 직속 하위 항목이 `main`으로 돌아가는 경로와 함께 표시됩니다.

1077 1077 

1078> [!NOTE]

1079>

1080> 이전 버전은 다른 기본값을 사용했습니다.

1081>

1082> * **v2.1.172부터 v2.1.216까지**: 서브에이전트는 기본적으로 최대 다섯 계층까지 중첩할 수 있었으며, 한도를 변경할 수 없었습니다.

1083> * **v2.1.217부터 v2.1.218까지**: 한도의 기본값이 1이었으므로 한도를 높이지 않으면 서브에이전트가 자체 서브에이전트를 생성할 수 없었습니다. v2.1.219에서 기본값이 3으로 높아졌습니다.

1084 

1085### 동시 서브에이전트 한도1078### 동시 서브에이전트 한도

1086 1079 

1087두 가지 한도가 서브에이전트 사용을 제어하며, 각각 자체 변수를 가집니다. 이 한도는 너무 많은 서브에이전트가 실행 중일 때 Claude가 더 생성하지 못하게 하고, [깊이 한도](#let-subagents-spawn-their-own-subagents)는 서브에이전트가 중첩될 수 있는 깊이를 제한합니다. 세션 동안 Claude가 생성할 수 있는 서브에이전트의 총수에는 한도가 없습니다.1080두 가지 한도가 서브에이전트 사용을 제어하며, 각각 자체 변수를 가집니다. 이 한도는 너무 많은 서브에이전트가 실행 중일 때 Claude가 더 생성하지 못하게 하고, [깊이 한도](#let-subagents-spawn-their-own-subagents)는 서브에이전트가 중첩될 수 있는 깊이를 제한합니다. 세션 동안 Claude가 생성할 수 있는 서브에이전트의 총수에는 한도가 없습니다.

Details

290>290>

291> 각 [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md) 및 병렬 작업은 8개의 명명된 색상 중 하나로 표시되므로 트랜스크립트에서 구별할 수 있습니다. 토큰 이름은 `<color>_FOR_SUBAGENTS_ONLY` 패턴을 따릅니다. 여기서 `<color>`는 `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink` 또는 `cyan`입니다. 이를 재정의하여 각 명명된 색상의 모양을 변경합니다. 예를 들어, 정의에서 `color: blue`를 가진 서브에이전트는 `blue_FOR_SUBAGENTS_ONLY` 값을 사용하여 그려집니다.291> 각 [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md) 및 병렬 작업은 8개의 명명된 색상 중 하나로 표시되므로 트랜스크립트에서 구별할 수 있습니다. 토큰 이름은 `<color>_FOR_SUBAGENTS_ONLY` 패턴을 따릅니다. 여기서 `<color>`는 `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink` 또는 `cyan`입니다. 이를 재정의하여 각 명명된 색상의 모양을 변경합니다. 예를 들어, 정의에서 `color: blue`를 가진 서브에이전트는 `blue_FOR_SUBAGENTS_ONLY` 값을 사용하여 그려집니다.

292>292>

293> Claude Code는 프롬프트 입력에서 [`ultrathink`](https://code.claude.com/docs/ko/model-config#use-ultrathink-for-one-off-deep-reasoning) 키워드를 7색 무지개 그래디언트로 렌더링합니다. 토큰 이름은 `rainbow_<color>` 및 `rainbow_<color>_shimmer` 패턴을 따릅니다. 여기서 `<color>`는 `red`, `orange`, `yellow`, `green`, `blue`, `indigo` 또는 `violet`입니다.293> [`ultrathink`](https://code.claude.com/docs/ko/model-config#use-ultrathink-for-one-off-deep-reasoning)가 턴의 노력 수준을 높일 수 있는 경우, Claude Code는 프롬프트 입력에서 해당 단어를 7색 무지개 그래디언트로 렌더링합니다. 토큰 이름은 `rainbow_<color>` 및 `rainbow_<color>_shimmer` 패턴을 따릅니다. 여기서 `<color>`는 `red`, `orange`, `yellow`, `green`, `blue`, `indigo` 또는 `violet`입니다.

294 294 

295## 전체 화면 렌더링으로 전환295## 전체 화면 렌더링으로 전환

296 296 

ultrareview.md +43 −41

Details

20 20 

21Ultrareview는 Anthropic의 인프라에서 클라우드 세션으로 실행되기 때문에 claude.ai 계정으로 인증이 필요합니다. API 키만으로 로그인한 경우 `/login`을 실행하고 먼저 claude.ai로 인증하세요. Ultrareview는 Amazon Bedrock, Google Cloud의 Agent Platform 또는 Microsoft Foundry와 함께 Claude Code를 사용할 때 사용할 수 없으며, Zero Data Retention을 활성화했거나 [HIPAA 구성](https://code.claude.com/docs/ko/hipaa-setup.md)이 적용된 조직에서도 사용할 수 없습니다. 이러한 경우 `/code-review ultra`는 대신 세션에서 로컬 리뷰를 실행합니다. [고객 관리형 암호화 키](https://platform.claude.com/docs/en/manage-claude/cmek)(CMEK)를 사용하는 조직은 ultrareview를 실행할 수 없습니다. 변경 사항을 로컬에서 리뷰하려면 `/code-review`를 실행하세요.21Ultrareview는 Anthropic의 인프라에서 클라우드 세션으로 실행되기 때문에 claude.ai 계정으로 인증이 필요합니다. API 키만으로 로그인한 경우 `/login`을 실행하고 먼저 claude.ai로 인증하세요. Ultrareview는 Amazon Bedrock, Google Cloud의 Agent Platform 또는 Microsoft Foundry와 함께 Claude Code를 사용할 때 사용할 수 없으며, Zero Data Retention을 활성화했거나 [HIPAA 구성](https://code.claude.com/docs/ko/hipaa-setup.md)이 적용된 조직에서도 사용할 수 없습니다. 이러한 경우 `/code-review ultra`는 대신 세션에서 로컬 리뷰를 실행합니다. [고객 관리형 암호화 키](https://platform.claude.com/docs/en/manage-claude/cmek)(CMEK)를 사용하는 조직은 ultrareview를 실행할 수 없습니다. 변경 사항을 로컬에서 리뷰하려면 `/code-review`를 실행하세요.

22 22 

23## CLI에서 ultrareview 실행23## CLI에서 ultrareview 실행하기

24 24 

25모든 git 저장소에서 리뷰를 시작합니다:25모든 git 저장소에서 리뷰를 시작할 수 있습니다.

26 26 

27```text theme={null}27```text theme={null}

28/code-review ultra28/code-review ultra

29```29```

30 30 

31인수 없이 ultrareview는 현재 브랜치와 기본 브랜치 간의 diff를 검토하며, 커밋되지 않은 변경 사항과 스테이징된 변경 사항을 포함합니다.31인수 없이 실행하면 ultrareview는 커밋되지 않은 변경 사항과 스테이징된 변경 사항을 포함하여 현재 브랜치와 기본 브랜치 사이의 diff를 리뷰합니다.

32 32 

33브랜치 리뷰의 경우 Claude Code는 [로컬 저장소를 클라우드 세션에 업로드하기](https://code.claude.com/docs/ko/claude-code-on-the-web.md#send-local-repositories-without-github)에 대한 규칙에 따라 저장소 상태를 번들로 묶어 클라우드 샌드박스에 업로드합니다. 이 규칙은 크기 제한, 체크아웃 요구 사항, 그리고 `.env` 및 `*.tfvars` 파일과 같이 자격 증명 또는 키처럼 명명된 파일의 커밋되지 않은 변경 사항이 어떻게 처리되는지를 다룹니다. [풀 리퀘스트를 검토](#review-a-pull-request)할 때 Claude Code는 머신에서 아무것도 업로드하지 않습니다.33브랜치 리뷰의 경우 Claude Code는 저장소 상태를 번들로 묶어 [로컬 저장소를 클라우드 세션에 업로드](https://code.claude.com/docs/ko/claude-code-on-the-web.md#send-local-repositories-without-github)하는 규칙에 따라 클라우드 샌드박스에 업로드합니다. 이 규칙은 크기 제한, 체크아웃 요구 사항, 그리고 `.env` 및 `*.tfvars` 파일처럼 자격 증명이나 키와 같은 이름을 가진 파일의 커밋되지 않은 변경 사항이 어떻게 처리되는지를 다룹니다. [풀 리퀘스트를 리뷰](#review-a-pull-request)하는 경우 Claude Code는 사용자의 머신에서 아무것도 업로드하지 않습니다.

34 34 

35시작하기 전에 Claude Code는 리뷰 범위, 남은 무료 실행 횟수 및 예상 비용이 포함된 확인 대화를 표시합니다. 브랜치 리뷰의 경우 범위에는 파일 및 라인 수가 포함됩니다. 확인한 후 리뷰는 백그라운드에서 계속되며 세션을 계속 사용할 수 있습니다.35실행하기 전에 Claude Code는 리뷰 범위, 남은 무료 실행 횟수, 예상 비용을 보여 주는 확인 대화 상자를 표시합니다. 브랜치 리뷰의 경우 범위에는 파일 수와 줄 수가 포함됩니다. 확인하면 사용자가 세션을 계속 사용하는 동안 리뷰가 백그라운드에서 진행됩니다.

36 36 

37명령은 `/code-review ultra`로 호출할 때만 실행됩니다. Claude는 자동으로 ultrareview를 시작하지 않습니다.37이 명령은 `/code-review ultra`로 호출할 때만 실행되며, Claude가 스스로 ultrareview를 시작하지는 않습니다.

38 38 

39### 다른 기본에 대해 검토39### 다른 기준과 비교하여 리뷰하기

40 40 

41기본 브랜치 이외의 기본에 대해 비교하려면 브랜치 이름을 전달합니다. 이 예제는 현재 브랜치를 `develop` 대신에 검토합니다:41기본 브랜치가 아닌 다른 기준과 비교하려면 브랜치 이름을 전달합니다. 다음 예시는 기본 브랜치 대신 `develop`을 기준으로 현재 브랜치를 리뷰합니다.

42 42 

43```text theme={null}43```text theme={null}

44/code-review ultra develop44/code-review ultra develop

45```45```

46 46 

47기본 브랜치는 로컬 클론에 존재할 필요가 없습니다. Claude Code는 `origin`에서 가져옵니다. 이름에 오타가 있으면 Claude Code는 오류에서 가장 가까운 브랜치 이름을 제안합니다.47기준 브랜치가 로컬 클론에 존재할 필요는 없으며, Claude Code가 `origin`에서 가져옵니다. 이름에 오타가 있으면 Claude Code는 오류 메시지에서 가장 가까운 브랜치 이름을 제안합니다.

48 48 

49커밋 ID 또는 태그도 기본으로 작동하며, 리뷰는 해당 커밋 이후 브랜치의 변경 사항을 다룹니다.49커밋 ID나 태그도 기준으로 사용할 수 있으며, 이 경우 리뷰는 해당 커밋 이후 브랜치에 적용된 변경 사항을 다룹니다.

50 50 

51### 풀 요청 검토51### 풀 리퀘스트 리뷰하기

52 52 

53로컬 브랜치 대신 `github.com`의 풀 리퀘스트를 검토하려면 PR 번호를 전달합니다:53로컬 브랜치 대신 `github.com`의 풀 리퀘스트를 리뷰하려면 PR 번호를 전달합니다.

54 54 

55```text theme={null}55```text theme={null}

56/code-review ultra 123456/code-review ultra 1234

57```57```

58 58 

59명령은 또한 `#1234`, `PR 1234` 및 붙여넣은 PR URL을 허용합니다. 붙여넣은 URL은 현재 디렉토리의 저장소를 가리켜야 합니다.59이 명령은 `#1234`, `PR 1234`, 붙여 넣은 PR URL도 허용합니다. 붙여 넣은 URL은 현재 디렉터리의 저장소를 가리켜야 합니다.

60 60 

61PR 모드에는 `github.com`의 저장소가 필요합니다. [GitHub Enterprise Server](https://code.claude.com/docs/ko/github-enterprise-server.md) 인스턴스의 저장소인 경우 PR 번호 없이 `/code-review ultra`를 실행하여 대신 로컬 브랜치를 검토합니다.61PR 모드에는 `github.com`의 저장소가 필요합니다. [GitHub Enterprise Server](https://code.claude.com/docs/ko/github-enterprise-server.md) 인스턴스의 저장소라면 PR 번호 없이 `/code-review ultra`를 실행하여 대신 로컬 브랜치를 리뷰합니다.

62 62 

63PR 모드에서 클라우드 샌드박스는 작업 트리를 업로드하는 대신 `github.com`에서 풀 리퀘스트를 복제합니다. Claude 계정에 연결된 GitHub 계정을 사용하므로 해당 계정에 저장소에 대한 읽기 권한이 있어야 합니다.63PR 모드에서는 클라우드 샌드박스가 작업 트리를 업로드하는 대신 `github.com`에서 풀 리퀘스트를 클론합니다. 이때 Claude 계정에 연결된 GitHub 계정을 사용하므로, 해당 계정에 저장소 읽기 권한이 있어야 합니다.

64 64 

65GitHub CLI 로그인을 Claude 계정에 연결하려면 [`/web-setup`](https://code.claude.com/docs/ko/web-quickstart#connect-from-your-terminal)을 실행합니다.65[`/web-setup`](https://code.claude.com/docs/ko/web-quickstart#connect-from-your-terminal)을 실행하여 GitHub CLI 로그인을 Claude 계정에 연결합니다.

66 66 

67### 풀 요청에 결과 게시67### 풀 리퀘스트에 결과 게시하기

68 68 

69Claude Code v2.1.227 이상에서 `github.com`의 풀 리퀘스트를 검토할 때 Claude가 완료된 결과를 PR에 자신의 GitHub 계정에서 단일 일반 댓글로 게시하도록 할 수 있습니다. 댓글은 리뷰나 승인이 아니며 "Generated by Claude Code" 메모로 끝납니다. 브랜치를 검토할 때 Claude Code는 세션에만 결과를 표시합니다.69Claude Code v2.1.227 이상에서는 `github.com`의 풀 리퀘스트를 리뷰할 때, 완료된 결과를 Claude가 사용자 본인의 GitHub 계정으로 PR에 단일 일반 댓글로 게시하도록 할 수 있습니다. 이 댓글은 리뷰나 승인이 아니며, 끝에 "Generated by Claude Code" 문구가 붙습니다. 브랜치를 리뷰하는 경우 Claude Code는 결과를 세션에만 표시합니다.

70 70 

71Claude Code는 해당 실행에서 선택하지 않는 한 게시하지 않으며 `--no-post`가 기본값입니다. 게시는 각 실행에 대해 선택하는 사항입니다:71Claude Code는 사용자가 해당 실행에서 게시를 선택하지 않는 한 절대 게시하지 않으며, 기본값은 `--no-post`입니다. 게시 여부는 실행할 때마다 선택합니다.

72 72 

73* **대화형**: 시작 대화에서 **PR에 결과를 나로 게시하고 실행**을 선택합니다. `/code-review ultra 1234 --post`와 같이 명령에 `--post`를 추가하면 Claude Code는 해당 선택을 미리 선택하고 시작하기 전에 여전히 묻습니다.73* **대화형**: 실행 대화 상자에서 **Run and post the findings to the PR as me**를 선택합니다. `/code-review ultra 1234 --post`처럼 명령에 `--post`를 추가하면 Claude Code가 해당 옵션을 미리 선택해 두지만, 실행 전에 여전히 확인을 요청합니다.

74* **비대화형**: `--post`를 사용하여 [`claude ultrareview` 하위 명령](#run-ultrareview-non-interactively)을 실행합니다. 플래그를 사용하여 하위 명령을 실행하면 게시에 동의하므로 Claude Code는 묻지 않고 게시합니다. `claude -p '/code-review ultra'` 실행에서 Claude Code는 결과가 도착하기 전에 종료되므로 아무것도 게시하지 않습니다. 대신 하위 명령을 사용합니다.74* **비대화형**: [`claude ultrareview` 하위 명령](#run-ultrareview-non-interactively)을 `--post`와 함께 실행합니다. 플래그와 함께 하위 명령을 실행하는 것이 게시에 대한 동의이므로 Claude Code는 묻지 않고 게시합니다. `claude -p '/code-review ultra'` 실행에서는 결과가 도착하기 전에 Claude Code가 종료되므로 아무것도 게시하지 않습니다. 대신 하위 명령을 사용합니다.

75 75 

76Claude Code는 머신에서 게시하지 않습니다. 리뷰의 세션 ID를 Anthropic API로 보내며, 이는 Claude에 연결한 GitHub 계정을 통해 리뷰의 저장된 결과를 댓글로 게시합니다. 게시하려면 리뷰 자체와 동일한 claude.ai 로그인이 필요하며, 타사 제공자에서 또는 [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/ko/env-vars)을 설정할 때 사용할 수 없습니다.76Claude Code는 사용자의 머신에서 게시하지 않습니다. 리뷰의 세션 ID를 Anthropic API로 보내면, API가 Claude에 연결된 GitHub 계정을 통해 저장된 리뷰 결과를 댓글로 게시합니다. 게시에는 리뷰 자체와 동일한 claude.ai 로그인이 필요하며, 서드파티 제공업체를 사용하거나 [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/ko/env-vars)를 설정한 경우에는 사용할 수 없습니다.

77 77 

78대화형 세션에서 Claude Code는 결과가 도착할 때 게시를 시작하므로 리뷰가 완료될 때까지 세션을 열어 두십시오. Claude Code는 해당 세션에서만 게시 선택을 유지합니다. 리뷰가 완료되기 전에 세션이 종료되면 나중에 대화를 재개하더라도 Claude Code는 아무것도 게시하지 않습니다.78대화형 세션에서는 결과가 도착하면 Claude Code가 게시를 시작하므로, 리뷰가 끝날 때까지 세션을 열어 두어야 합니다. Claude Code는 게시 선택을 해당 세션에서만 유지합니다. 리뷰가 끝나기 전에 세션이 종료되면, 나중에 대화를 재개하더라도 Claude Code는 아무것도 게시하지 않습니다.

79 79 

80게시가 완료되면 Claude는 결과를 알려줍니다:80게시가 완료되면 Claude가 결과를 알려 줍니다.

81 81 

82* **게시됨**: Claude는 댓글에 대한 링크를 제공합니다.82* **Posted**: Claude가 댓글 링크를 제공합니다.

83* **이미 게시됨**: 동일한 리뷰의 이전 게시가 이미 PR에 댓글을 올렸으므로 Claude는 다시 게시하는 대신 풀 요청에 링크합니다.83* **Already posted**: 같은 리뷰의 이전 게시로 이미 PR에 댓글이 달려 있으므로, Claude는 다시 게시하는 대신 풀 리퀘스트 링크를 제공합니다.

84* **실패**: Claude는 이유를 알려주며, 결과는 터미널에 남아 있어 수동으로 게시할 수 있습니다.84* **Failed**: Claude가 그 이유를 알려 주며, 결과는 터미널에 남아 있으므로 직접 게시할 수 있습니다.

85 85 

86### 일반 단어로 요청 전달86### 일반 문장으로 요청 전달하기

87 87 

88Claude Code v2.1.218 이상에서는 일반 단어로 작업 중인 내용을 설명할 수도 있습니다:88작업 중인 내용을 일반 문장으로 설명할 수도 있습니다.

89 89 

90```text theme={null}90```text theme={null}

91/code-review ultra check my auth changes91/code-review ultra check my auth changes

92```92```

93 93 

94리뷰는 여전히 현재 브랜치를 다루며 인수 없이 실행하는 것과 동일한 범위입니다. Claude는 텍스트를 메모로 유지하며 시작 대화에 표시되고 결과가 도착할 때 이와 관련됩니다.94이 경우에도 리뷰는 인수 없이 실행할 때와 같은 범위인 현재 브랜치를 다룹니다. Claude는 입력한 텍스트를 메모로 보관하여 실행 대화 상자에 표시하고, 결과가 도착하면 결과를 해당 메모와 연관 지어 설명합니다.

95 95 

96Claude Code는 텍스트에 두 개 이상의 단어가 있고 브랜치 이름이나 PR 참조가 아닐 때만 메모로 취급합니다. 단일 단어를 브랜치 이름이나 PR 참조로 읽으므로 오타가 있는 브랜치 이름은 [다른 기본에 대해 검토](#review-against-a-different-base)의 가장 가까운 브랜치 오류를 받습니다. 텍스트가 `check PR 123 again`과 같은 다른 단어와 PR 참조를 결합하면 Claude Code도 시작하지 않습니다. 대신 PR 번호만으로 다시 실행하여 해당 PR을 검토하거나 참조 없이 현재 브랜치를 검토하도록 요청합니다.96Claude Code는 텍스트가 두 단어 이상이고 브랜치 이름이나 PR 참조가 아닌 경우에만 메모로 취급합니다. 한 단어는 브랜치 이름이나 PR 참조로 읽으므로, 브랜치 이름을 잘못 입력하면 메모와 함께 실행되는 대신 [다른 기준과 비교하여 리뷰하기](#review-against-a-different-base)에서 설명한 가장 가까운 브랜치 오류가 표시됩니다. `check PR 123 again`처럼 텍스트에 PR 참조와 다른 단어가 섞여 있는 경우에도 Claude Code는 실행하지 않습니다. 대신 해당 PR을 리뷰하려면 PR 번호만으로, 현재 브랜치를 리뷰하려면 참조 없이 다시 실행하도록 요청합니다.

97 97 

98> [!TIP]98> [!TIP]

99>99>

100> 저장소가 너무 커서 번들로 묶을 수 없는 경우 Claude Code는 대신 PR 모드를 사용하도록 요청합니다. `github.com`의 저장소인 경우 브랜치를 푸시하고 초안 PR을 연 다음 `/code-review ultra <PR-number>`를 실행합니다.100> 저장소가 너무 커서 번들로 묶을 수 없으면 Claude Code가 대신 PR 모드를 사용하라고 안내합니다. `github.com`의 저장소라면 브랜치를 푸시하고 초안 PR을 연 다음 `/code-review ultra <PR-number>`를 실행합니다.

101 101 

102### 차이 제한 및 폴백102### diff 제한 및 폴백

103 103 

104Ultrareview는 리뷰 작업이 실행되기 전에 차이를 확인하고 그대로 검토할 수 없을 때 알려줍니다:104Ultrareview는 리뷰 작업을 실행하기 전에 diff를 확인하고, 있는 그대로 리뷰할 수 없는 경우 이를 알려 줍니다.

105 105 

106* **차이가 너무 큼**: 브랜치 리뷰는 기본적으로 최대 500개의 변경된 파일과 8,000개의 변경된 라인을 포함할 수 있습니다. 정확한 값은 변경될 수 있으며 [거부](https://code.claude.com/docs/ko/errors.md#diff-is-too-large-for-ultrareview)는 적용 중인 값, 차이의 크기 및 가장 많이 변경된 라인이 있는 파일을 명시합니다. Claude Code는 너무 큰 풀 요청을 동일한 방식으로 거부하며 파일 및 라인 수를 명시하지만 파일별 분석은 명시하지 않습니다.106* **diff가 너무 큰 경우**: 브랜치 리뷰에는 기본적으로 최대 500개의 변경된 파일과 8,000개의 변경된 줄을 포함할 수 있습니다. 정확한 값은 달라질 수 있으며, [거부 메시지](https://code.claude.com/docs/ko/errors.md#diff-is-too-large-for-ultrareview)에 현재 적용 중인 값, diff의 크기, 변경된 줄이 가장 많은 파일이 표시됩니다. Claude Code는 너무 큰 풀 리퀘스트도 같은 방식으로 거부하며, 파일 수와 줄 수는 표시하지만 파일별 내역은 표시하지 않습니다

107* **검토할 항목 없음**: 기본에 대한 차이가 비어 있으면 ultrareview는 거부하고 비교한 브랜치 또는 커밋을 명시하며 기본 브랜치 자체에 있고 커밋되지 않은 항목이 없거나 커밋이 모두 기본의 일부인 브랜치와 같은 경우를 명시합니다. 또한 해당 경우에 대한 해결 방법을 제안합니다. 예를 들어 작업이 있는 브랜치로 전환하거나, 로컬 편집을 스테이징하거나 커밋하거나, 다른 기본을 전달합니다.107* **리뷰할 내용이 없는 경우**: 기준과의 diff가 비어 있으면 ultrareview는 거부하면서 비교 대상이 된 브랜치나 커밋, 그리고 현재 상황을 알려 줍니다. 예를 들어 커밋되지 않은 변경 사항 없이 기준 브랜치 자체에 있는 경우나, 브랜치의 모든 커밋이 이미 기준에 포함된 경우입니다. 또한 작업 중인 브랜치로 전환하기, 로컬 편집 사항을 스테이징하거나 커밋하기, 다른 기준 전달하기 등 해당 상황의 해결 방법도 제안합니다

108* **첫 번째 커밋**: 저장소의 첫 번째 커밋은 비교할 이전 항목이 없으므로 시작 대화에서 확인한 후 ultrareview는 그 이후의 모든 파일을 검토합니다. 추적되지 않은 파일이 있으면 대신 거부하고 검토하려는 파일을 `git add`하도록 알려줍니다. 동일한 크기 제한이 적용됩니다.108* **첫 번째 커밋**: 저장소의 첫 번째 커밋에는 비교할 이전 내용이 없으므로, 실행 대화 상자에서 확인하면 ultrareview가 그 안의 모든 파일을 리뷰합니다. 추적되지 않는 파일이 있으면 대신 거부하고, 리뷰하려는 파일을 `git add`하라고 안내합니다. 동일한 크기 제한이 적용됩니다.

109 109 

110 첫 번째 커밋은 해당 확인 후에만 전체적으로 검토되므로 `claude ultrareview` 하위 명령 및 `claude -p`는 이를 거부하고 대화형 세션을 대신 사용하도록 지시합니다. Claude Code v2.1.277 이상 필요110 첫 번째 커밋은 이 확인을 거친 후에만 전체 리뷰되므로, `claude ultrareview` 하위 명령과 `claude -p`는 이를 거부하고 대신 대화형 세션을 사용하도록 안내합니다. Claude Code v2.1.277 이상이 필요합니다

111* **병합 기본 없음**: 브랜치가 기본 브랜치와 기록을 공유하지 않으면 또는 저장소에 비교할 기본 브랜치가 없으면 ultrareview는 저장소의 모든 추적된 파일을 대신 검토합니다. 폴백에는 전체 클론이 필요하며 동일한 크기 제한을 적용합니다. 시작 대화에서 확인하거나 `claude ultrareview` 하위 명령을 직접 실행할 때만 시작됩니다. `claude -p` 및 둘 다 발생하지 않는 다른 곳에서는 ultrareview가 거부하고 리뷰가 모든 파일을 다룰 것이라고 말하며 대화형 세션을 지시합니다.111* **병합 기준이 없는 경우**: 브랜치가 기준 브랜치와 공유하는 히스토리가 없거나 저장소에 비교할 기준 브랜치가 없으면, ultrareview는 대신 저장소의 추적되는 모든 파일을 리뷰합니다. 이 폴백에는 전체 클론이 필요하며 동일한 크기 제한이 적용됩니다. 실행 대화 상자에서 확인하거나 사용자가 직접 `claude ultrareview` 하위 명령을 실행한 경우에만 실행됩니다. `claude -p`를 비롯하여 둘 다 해당하지 않는 경우에는 ultrareview가 거부하면서 리뷰가 모든 파일을 다루게 된다고 알리고, 대화형 세션을 사용하도록 안내합니다.

112 112 

113 분기나 다른 참조가 없는 체크아웃에서(예: URL을 가져온 후 `FETCH_HEAD`를 체크아웃하여 생성된 분리된 HEAD), Claude Code는 [리뷰를 거부](https://code.claude.com/docs/ko/errors.md#your-checkout-has-no-branches)하고 먼저 브랜치를 생성할 것을 제안합니다.113 URL을 가져온 후 `FETCH_HEAD`를 체크아웃하여 생성된 detached HEAD처럼 브랜치나 다른 ref가 없는 체크아웃에서는 Claude Code가 [리뷰를 거부](https://code.claude.com/docs/ko/errors.md#your-checkout-has-no-branches)하고 먼저 브랜치를 만들도록 제안합니다

114 114 

115## 가격 책정 및 무료 실행115## 가격 책정 및 무료 실행

116 116 


159 159 

160서브커맨드를 직접 실행하면 전체 리포지토리 폴백과 청구 및 약관 프롬프트에 동의한 것으로 간주되므로, 실행이 중간에 멈춰 확인을 요청하지 않습니다. 사용자가 직접 실행하는 것 자체가 동의로 간주됩니다. 반면 Claude가 사용자를 대신해 서브커맨드를 실행하는 경우(예: Bash 도구를 통해 실행하는 경우) Claude Code는 전체 리포지토리 리뷰를 거부합니다.160서브커맨드를 직접 실행하면 전체 리포지토리 폴백과 청구 및 약관 프롬프트에 동의한 것으로 간주되므로, 실행이 중간에 멈춰 확인을 요청하지 않습니다. 사용자가 직접 실행하는 것 자체가 동의로 간주됩니다. 반면 Claude가 사용자를 대신해 서브커맨드를 실행하는 경우(예: Bash 도구를 통해 실행하는 경우) Claude Code는 전체 리포지토리 리뷰를 거부합니다.

161 161 

162`claude -p '/code-review ultra'`로는 발견 사항을 받을 수 없으므로 스크립트에서는 `claude ultrareview`를 사용합니다. `-p` 실행은 클라우드 리뷰를 시작한 후 기다리지 않고 종료됩니다. 리뷰가 사용량 크레딧을 청구하는 경우 `-p` 실행은 리뷰를 시작하지 않고 중지됩니다. v2.1.218 이전에는 비대화형 세션에서 `/code-review ultra`가 로컬 리뷰를 실행했습니다.162> [!NOTE]

163>

164> `claude -p '/code-review ultra'`로는 발견 사항을 받을 수 없으므로 스크립트에서는 `claude ultrareview`를 사용합니다. `-p` 실행은 클라우드 리뷰를 시작한 후 기다리지 않고 종료됩니다. 리뷰가 사용량 크레딧을 청구하는 경우 `-p` 실행은 리뷰를 시작하지 않고 중지됩니다.

163 165 

164| 플래그 | 설명 |166| 플래그 | 설명 |

165| - | - |167| - | - |

Details

182* 세션 제목 표시줄 또는 표시줄의 **⋮** 메뉴에서 **Changes**를 클릭할 수도 있습니다.182* 세션 제목 표시줄 또는 표시줄의 **⋮** 메뉴에서 **Changes**를 클릭할 수도 있습니다.

183* 패널이 숨겨져 있을 때 표시하려면, 세션 제목 표시줄 또는 표시줄의 **⋮** 메뉴에서 **Show session rail** 아이콘을 클릭합니다.183* 패널이 숨겨져 있을 때 표시하려면, 세션 제목 표시줄 또는 표시줄의 **⋮** 메뉴에서 **Show session rail** 아이콘을 클릭합니다.

184 184 

185diff는 기본적으로 세션의 변경 사항을 기본 브랜치와 비교합니다. 다른 브랜치와 비교하려면 **Compare against**를 선택하고 하나를 선택합니다.185diff는 기본적으로 세션의 변경 사항을 기본 브랜치와 비교합니다. 다른 브랜치와 비교하려면 **Compare against**를 선택하고 하나를 선택합니다. 기본 브랜치와 비교할 때는 diff에서 [아직 푸시되지 않은 변경 사항이 누락될 수 있습니다](https://code.claude.com/docs/ko/claude-code-on-the-web.md#troubleshoot-a-missing-file-in-the-diff-view).

186 186 

187**2. 인라인 댓글 남기기**187**2. 인라인 댓글 남기기**

188 188 

189diff의 모든 줄을 선택하고, 피드백을 입력하고, Enter를 누릅니다. 댓글은 다음 메시지를 보낼 때까지 대기열에 있다가 함께 번들로 제공됩니다. Claude는 주요 지침과 함께 "`src/auth.ts:47`에서 여기서 오류를 포착하지 마십시오"를 보므로, 문제가 있는 위치를 설명할 필요가 없습니다.189diff의 줄 위에 마우스를 올리고 줄 번호 옆에 나타나는 \*\*+\*\*를 클릭하여 댓글 상자를 연 다음, 피드백을 입력하고 Enter를 누릅니다. 댓글은 다음 메시지를 보낼 때까지 대기열에 있다가 함께 번들로 제공됩니다. Claude는 주요 지침과 함께 "`src/auth.ts:47`에서 여기서 오류를 포착하지 마십시오"를 보므로, 문제가 있는 위치를 설명할 필요가 없습니다.

190 190 

191**3. 풀 리퀘스트 생성**191**3. 풀 리퀘스트 생성**

192 192 

workflows.md +5 −9

Details

155* 세션의 [동시 서브에이전트 한도](https://code.claude.com/docs/ko/sub-agents.md#concurrent-subagent-limit)는 Claude가 Agent 도구로 생성하는 서브에이전트에 대해 적용되지 않습니다155* 세션의 [동시 서브에이전트 한도](https://code.claude.com/docs/ko/sub-agents.md#concurrent-subagent-limit)는 Claude가 Agent 도구로 생성하는 서브에이전트에 대해 적용되지 않습니다

156* 자동 권한 모드에서는 [첫 번째 워크플로우 실행을 승인](#approve-the-plan-before-it-runs)하도록 요청받지 않습니다156* 자동 권한 모드에서는 [첫 번째 워크플로우 실행을 승인](#approve-the-plan-before-it-runs)하도록 요청받지 않습니다

157 157 

158`/effort ultracode`는 현재 세션 동안 지속됩니다; 모든 세션이 이것으로 시작하도록 하려면 [`ultracode`](https://code.claude.com/docs/ko/settings-reference#ultracode) 설정을 지정하십시오. 일상적인 작업으로 돌아갈 때 `/effort ultracode off`로 끄십시오. `/effort` 슬라이더는 [ultracode를 사용할 수 있을 때](https://code.claude.com/docs/ko/model-config.md#when-ultracode-is-available)만 토글을 제공합니다.158`/effort ultracode`는 현재 세션 동안 지속됩니다; 모든 세션이 이것으로 시작하도록 하려면 [`ultracode`](https://code.claude.com/docs/ko/settings-reference#ultracode) 설정을 지정하십시오. 일상적인 작업으로 돌아갈 때 `/effort ultracode off`로 끄십시오. `/effort` 슬라이더는 [ultracode를 사용할 수 있을 때](https://code.claude.com/docs/ko/model-config.md#when-ultracode-is-available)만 토글을 제공합니다. v2.1.284 이전에는 `/effort ultracode`가 세션을 `xhigh`로 설정했으며, `/effort ultracode off`는 `Invalid argument`와 함께 실패했습니다.

159 159 

160### 실행 전 계획 승인하기160### 실행 전 계획 승인하기

161 161 


198* `.claude/workflows/` 프로젝트에서: 저장소를 복제하는 모든 사람과 공유198* `.claude/workflows/` 프로젝트에서: 저장소를 복제하는 모든 사람과 공유

199* `~/.claude/workflows/` 홈 디렉토리에서: 모든 프로젝트에서 사용 가능, 자신에게만 표시됩니다. [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/ko/env-vars)을 설정한 경우 이 위치는 해당 경로 아래의 `workflows/` 디렉토리입니다.199* `~/.claude/workflows/` 홈 디렉토리에서: 모든 프로젝트에서 사용 가능, 자신에게만 표시됩니다. [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/ko/env-vars)을 설정한 경우 이 위치는 해당 경로 아래의 `workflows/` 디렉토리입니다.

200 200 

201저장 대화는 개인 위치에 대해 확인된 경로를 표시합니다.201저장 대화 상자는 개인 위치에 대해 확인된 경로를 표시합니다. Enter를 눌러 저장합니다. 워크플로는 이후 세션에서 두 위치 중 하나에서 `/<name>`으로 실행됩니다.

202 202 

203Enter를 눌러 저장합니다. 워크플로우는 이후 세션에서 두 위치 중 하나에서 `/<name>`으로 실행됩니다.203Claude Code는 쓰기 전에 저장 위치에서 심볼릭 링크를 확인하고, 심볼릭 링크를 통해 쓰는 대신 오류를 표시합니다:

204 

205Claude Code는 쓰기 전에 저장 위치에서 심볼릭 링크를 확인하고 대신 오류를 표시합니다. 확인하는 내용은 저장 위치에 따라 다릅니다:

206 204 

207* 프로젝트 위치: Claude Code는 `.claude`, `.claude/workflows`, 또는 대상 파일이 심볼릭 링크인 경우 거부합니다.205* 프로젝트 위치: Claude Code는 `.claude`, `.claude/workflows`, 또는 대상 파일이 심볼릭 링크인 경우 거부합니다.

208* 개인 위치: Claude Code는 대상 파일 자체가 심볼릭 링크인 경우에만 거부하므로 dotfiles 도구로 관리되는 `~/.claude` 디렉토리는 여전히 작동합니다.206* 개인 위치: Claude Code는 대상 파일 자체가 심볼릭 링크인 경우에만 거부하므로 dotfiles 도구로 관리되는 `~/.claude` 디렉토리는 여전히 작동합니다.

209 207 

210v2.1.216 이전에는 Claude Code가 링크를 따라갔으며, 이는 파일을 선택한 위치 외부에 배치할 수 있었습니다.

211 

212여러 `.claude/` 디렉토리가 있는 모노레포에서 워크플로우를 적용되는 패키지 옆에 유지할 수 있습니다. 프로젝트 위치에 저장하면 작업 디렉토리와 저장소 루트 사이에 이미 존재하는 가장 가까운 `.claude/workflows/` 디렉토리에 쓰거나, 아직 존재하지 않으면 저장소 루트에 씁니다. 프로젝트 워크플로우는 또한 해당 경로를 따라 모든 `.claude/workflows/`에서 로드되며, 둘 이상이 같은 이름을 정의할 때 Claude Code는 작업 디렉토리에 가장 가까운 것을 실행합니다.208여러 `.claude/` 디렉토리가 있는 모노레포에서 워크플로우를 적용되는 패키지 옆에 유지할 수 있습니다. 프로젝트 위치에 저장하면 작업 디렉토리와 저장소 루트 사이에 이미 존재하는 가장 가까운 `.claude/workflows/` 디렉토리에 쓰거나, 아직 존재하지 않으면 저장소 루트에 씁니다. 프로젝트 워크플로우는 또한 해당 경로를 따라 모든 `.claude/workflows/`에서 로드되며, 둘 이상이 같은 이름을 정의할 때 Claude Code는 작업 디렉토리에 가장 가까운 것을 실행합니다.

213 209 

214프로젝트 워크플로우와 개인 워크플로우가 이름을 공유하면 프로젝트 워크플로우가 실행됩니다.210프로젝트 워크플로우와 개인 워크플로우가 이름을 공유하면 프로젝트 워크플로우가 실행됩니다.


469| `medium` | 10개 미만의 에이전트 |465| `medium` | 10개 미만의 에이전트 |

470| `large` | 50개 미만의 에이전트 |466| `large` | 50개 미만의 에이전트 |

471 467 

472기본값은 `medium`이며, Claude Code v2.1.271 이상에서 Pro 플랜으로 로그인한 경우에는 `small`입니다. 값을 선택하기 전까지는 `/config` 행에 해당 값이 기본값으로 표시되며, 워크플로의 `Running in background` 줄에 현재 적용 중인 규모가 표시됩니다. Claude Code v2.1.219 이상이 필요하며, 이전 버전의 기본값은 `unrestricted`입니다.468기본값은 `medium`이며, Claude Code v2.1.271 이상에서 Pro 플랜으로 로그인한 경우에는 `small`입니다. 값을 선택하기 전까지는 `/config` 행에 해당 값이 기본값으로 표시되며, 워크플로의 `Running in background` 줄에 현재 적용 중인 규모가 표시됩니다.

473 469 

474가이드라인을 변경하려면 `/config`에서 Dynamic workflow size 설정의 값을 선택하거나 `/config workflowSizeGuideline=small`을 실행합니다. v2.1.219 이상에서는 모든 설정 파일에서 [`workflowSizeGuideline` 키](https://code.claude.com/docs/ko/settings-reference#workflowsizeguideline)를 설정할 수도 있습니다. 이 값은 `/config`보다 우선하며, 설정 파일에서 값을 제공하는 동안 Claude Code는 `/config` 행을 숨깁니다.470가이드라인을 변경하려면 `/config`에서 Dynamic workflow size 설정의 값을 선택하거나 `/config workflowSizeGuideline=small`을 실행합니다. 모든 설정 파일에서 [`workflowSizeGuideline` 키](https://code.claude.com/docs/ko/settings-reference#workflowsizeguideline)를 설정할 수도 있습니다. 이 값은 `/config`보다 우선하며, 설정 파일에서 값을 제공하는 동안 Claude Code는 `/config` 행을 숨깁니다.

475 471 

476변경 사항은 다음 프롬프트부터 적용됩니다. 설정과 관계없이 [런타임 에이전트 상한](#behavior-and-limits)은 계속 적용됩니다.472변경 사항은 다음 프롬프트부터 적용됩니다. 설정과 관계없이 [런타임 에이전트 상한](#behavior-and-limits)은 계속 적용됩니다.

477 473 

worktrees.md +66 −54

Details

43 43 

44세션 중에 Claude에게 "worktree에서 작업하기"를 요청할 수도 있으며, [`EnterWorktree`](https://code.claude.com/docs/ko/tools-reference) 도구로 하나를 생성합니다. Worktree에 들어가면 Claude는 `.claude/worktrees/` 아래의 다른 worktree로 `EnterWorktree`를 호출하여 직접 전환할 수 있습니다. 이전 worktree는 디스크에 그대로 남아 있습니다.44세션 중에 Claude에게 "worktree에서 작업하기"를 요청할 수도 있으며, [`EnterWorktree`](https://code.claude.com/docs/ko/tools-reference) 도구로 하나를 생성합니다. Worktree에 들어가면 Claude는 `.claude/worktrees/` 아래의 다른 worktree로 `EnterWorktree`를 호출하여 직접 전환할 수 있습니다. 이전 worktree는 디스크에 그대로 남아 있습니다.

45 45 

46Claude가 저장소의 `.claude/worktrees/` 디렉토리 외부의 경로에 들어가면 Claude Code는 먼저 승인을 요청합니다. 왜냐하면 이동은 세션의 작업 디렉토리, 쓰기 액세스 및 `CLAUDE.md` 및 설정과 같은 프로젝트 구성을 해당 위치로 이동하기 때문입니다. `EnterWorktree` [권한 규칙](https://code.claude.com/docs/ko/permissions.md) 또는 "다시 묻지 않기"를 선택해도 이 프롬프트를 억제하지 않습니다. `bypassPermissions` 모드만 이를 건너뜁니다. v2.1.206 이전에는 Claude가 승인을 요청하지 않고 기존 worktree 경로에 들어갈 수 있었습니다.46Claude가 저장소의 `.claude/worktrees/` 디렉터리 외부의 경로에 들어가면 Claude Code는 먼저 승인을 요청합니다. 이 이동은 세션의 작업 디렉터리, 쓰기 액세스 및 `CLAUDE.md` 및 설정과 같은 프로젝트 구성을 해당 위치로 옮깁니다. `EnterWorktree` [권한 규칙](https://code.claude.com/docs/ko/permissions.md) 또는 "다시 묻지 않기"를 선택해도 이 프롬프트를 억제하지 않습니다. `bypassPermissions` 모드만 이를 건너뜁니다.

47 47 

48> [!NOTE]48> [!NOTE]

49>49>


63 63 

64`-p`를 사용한 비대화형 실행에는 종료 프롬프트가 없으므로 Claude는 해당 worktree를 정리하지 않으며, Claude Code는 생성 시 각 worktree에 대해 가져온 잠금을 유지합니다. 나중 세션의 [stale-lock sweep](#clean-up-subagent-and-background-session-worktrees)이 이를 해제할 때까지 유지됩니다. 하나를 제거하려면 `git worktree remove`를 실행합니다. git이 worktree가 잠겨 있다고 거부하면 먼저 `git worktree unlock`을 실행합니다.64`-p`를 사용한 비대화형 실행에는 종료 프롬프트가 없으므로 Claude는 해당 worktree를 정리하지 않으며, Claude Code는 생성 시 각 worktree에 대해 가져온 잠금을 유지합니다. 나중 세션의 [stale-lock sweep](#clean-up-subagent-and-background-session-worktrees)이 이를 해제할 때까지 유지됩니다. 하나를 제거하려면 `git worktree remove`를 실행합니다. git이 worktree가 잠겨 있다고 거부하면 먼저 `git worktree unlock`을 실행합니다.

65 65 

66Windows에서 worktree를 제거해도 worktree 외부의 파일은 삭제되지 않습니다. Worktree 내부의 폴더가 다른 곳으로의 링크(예: NTFS 접합점 또는 디렉토리 심볼릭 링크)인 경우 Claude Code는 링크만 삭제하고 가리키는 폴더는 유지합니다. v2.1.205 이전에는 서브디렉토리에 중첩된 링크가 있는 worktree를 제거하면 가리키는 폴더를 삭제할 수 있었습니다.66Windows에서 worktree를 제거해도 worktree 외부의 파일은 삭제되지 않습니다. Worktree 내부의 폴더가 다른 곳으로의 링크(예: NTFS 접합점 또는 디렉토리 심볼릭 링크)인 경우 Claude Code는 링크만 삭제합니다.

67 67 

68## worktree 세션 재개68## worktree 세션 재개

69 69 


81>81>

82> v2.1.212 이전에는 비대화형 재개가 시작 디렉토리에 머물렀고 `ExitWorktree`는 활성 worktree 세션이 없다고 보고했습니다.82> v2.1.212 이전에는 비대화형 재개가 시작 디렉토리에 머물렀고 `ExitWorktree`는 활성 worktree 세션이 없다고 보고했습니다.

83 83 

84Claude가 Claude Code가 git으로 생성한 worktree에 들어가거나 나갈 때 트랜스크립트가 따릅니다: Claude Code는 [`/cd`](https://code.claude.com/docs/ko/commands)와 동일한 방식으로 세션의 새로운 작업 디렉토리 아래에 세션을 기록하므로 `/desktop`과 `--resume`이 거기서 이를 찾습니다. 나가면 같은 방식으로 다시 이동합니다. [`WorktreeCreate` 훅](#non-git-version-control)으로 생성된 worktree는 시작 디렉토리에 트랜스크립트를 유지합니다. Claude Code v2.1.198 이상이 필요합니다.84Claude가 Claude Code가 git으로 생성한 worktree에 들어가거나 나갈 때 트랜스크립트도 함께 따라갑니다. Claude Code는 [`/cd`](https://code.claude.com/docs/ko/commands)와 동일한 방식으로 세션의 새로운 작업 디렉터리 아래에 세션을 기록하므로 `/desktop`과 `--resume`이 거기서 이를 찾습니다. 나가면 같은 방식으로 다시 이동합니다. [`WorktreeCreate` 훅](#non-git-version-control)으로 생성된 worktree는 시작 디렉터리에 트랜스크립트를 유지합니다.

85 85 

86## Claude Code가 격리를 강제하는 방식86## Claude Code가 격리를 강제하는 방식

87 87 


139 139 

140Claude Code는 생성하는 모든 git worktree에 git 메타데이터에 마커를 작성하며, 스윕은 마커가 없는 worktree를 유지합니다. [`WorktreeCreate` 훅](#non-git-version-control)이 생성한 worktree를 포함합니다.140Claude Code는 생성하는 모든 git worktree에 git 메타데이터에 마커를 작성하며, 스윕은 마커가 없는 worktree를 유지합니다. [`WorktreeCreate` 훅](#non-git-version-control)이 생성한 worktree를 포함합니다.

141 141 

142#### Worktree 잠금 및 수동 제거

143 

142에이전트가 실행 중인 동안 Claude Code는 해당 worktree에서 `git worktree lock`을 유지하여 동시 정리가 이를 제거할 수 없도록 하며, 에이전트가 완료되면 잠금을 해제합니다. Claude Code는 백그라운드된 세션을 위해 생성한 worktree에서 세션이 실행되는 동안 동일한 잠금을 유지하므로 스윕은 worktree를 제자리에 두고 `git worktree remove`는 이를 제거하기를 거부합니다.144에이전트가 실행 중인 동안 Claude Code는 해당 worktree에서 `git worktree lock`을 유지하여 동시 정리가 이를 제거할 수 없도록 하며, 에이전트가 완료되면 잠금을 해제합니다. Claude Code는 백그라운드된 세션을 위해 생성한 worktree에서 세션이 실행되는 동안 동일한 잠금을 유지하므로 스윕은 worktree를 제자리에 두고 `git worktree remove`는 이를 제거하기를 거부합니다.

143 145 

144스윕은 또한 프로세스가 종료된 세션을 위해 Claude Code가 설정한 잠금을 해제하므로 종료된 백그라운드 세션은 worktree를 영구적으로 잠긴 상태로 두지 않습니다. 스윕은 `git worktree lock`으로 직접 설정한 잠금을 절대 해제하지 않습니다. v2.1.210 이전에는 종료된 세션으로 인한 잠금이 `git worktree unlock`을 실행할 때까지 제자리에 남아 있었습니다.146스윕은 또한 프로세스가 종료된 세션을 위해 Claude Code가 설정한 잠금을 해제하므로 종료된 백그라운드 세션은 worktree를 영구적으로 잠긴 상태로 두지 않습니다. 스윕은 `git worktree lock`으로 직접 설정한 잠금을 절대 해제하지 않습니다.

145 147 

146스윕이 유지하는 worktree를 정리하려면 `git worktree remove`를 실행하고, worktree에 커밋되지 않은 변경 사항이나 추적되지 않은 파일이 있으면 `--force`를 추가합니다. Git이 worktree가 잠겨 있다고 거부하면 먼저 `git worktree unlock`을 실행합니다.148스윕이 유지하는 worktree를 정리하려면 `git worktree remove`를 실행하고, worktree에 커밋되지 않은 변경 사항이나 추적되지 않은 파일이 있으면 `--force`를 추가합니다. Git이 worktree가 잠겨 있다고 거부하면 먼저 `git worktree unlock`을 실행합니다.

147 149 


158 160 

159`worktree.baseRef`를 브랜치 이름으로 설정할 수 없습니다. 특정 기존 브랜치에서 worktree를 시작하려면 [git으로 직접 생성](#manage-worktrees-manually)합니다.161`worktree.baseRef`를 브랜치 이름으로 설정할 수 없습니다. 특정 기존 브랜치에서 worktree를 시작하려면 [git으로 직접 생성](#manage-worktrees-manually)합니다.

160 162 

161`"fresh"` 기본의 경우 Claude Code는 `origin/HEAD`를 최신으로 유지합니다: 저장소를 지난 24시간 동안 페치하지 않았으면 기본 브랜치를 페치하며, 5초로 제한되고 페치가 실패하면 로컬로 캐시된 ref를 사용합니다. 페치는 터미널에서 입력을 기다리지 않으므로 git 또는 ssh가 비밀번호, 키 암호 또는 새 SSH 호스트 확인을 요청하는 경우에도 실패한 것으로 간주됩니다. 원격이 구성되지 않았거나 `origin/HEAD`가 로컬로 캐시되지 않았고 페치할 수 없으면 worktree는 현재 로컬 `HEAD`로 폴백합니다. v2.1.208 이전에는 새로운 worktree가 이미 로컬로 캐시된 `origin/HEAD`를 사용했습니다.163`"fresh"` 기본의 경우 Claude Code는 `origin/HEAD`를 최신으로 유지합니다:

164 

165* 저장소를 지난 24시간 동안 페치하지 않았으면 기본 브랜치를 페치하며, 5초로 제한되고 페치가 실패하면 로컬로 캐시된 ref를 사용합니다.

166* 페치는 터미널에서 입력을 기다리지 않습니다. git 또는 ssh가 비밀번호, 키 암호 또는 새 SSH 호스트 확인을 요청하는 경우에도 실패한 것으로 간주됩니다.

167* 원격이 구성되지 않았거나 `origin/HEAD`가 로컬로 캐시되지 않았고 페치할 수 없으면 worktree는 현재 로컬 `HEAD`로 폴백합니다.

162 168 

163이 예제는 모든 새 worktree가 현재 작업에서 분기하도록 만듭니다:169이 예제는 모든 새 worktree가 현재 작업에서 분기하도록 만듭니다:

164 170 


225* `worktree.baseRef`가 `"head"`입니다.231* `worktree.baseRef`가 `"head"`입니다.

226* 이름이 풀 요청 또는 병합 요청 참조입니다.232* 이름이 풀 요청 또는 병합 요청 참조입니다.

227 233 

228v2.1.208 이전에는 이름을 재사용할 때 Claude Code는 항상 이전 worktree를 이전 팁에서 재개했습니다.

229 

230### worktree 생성을 훅으로 대체234### worktree 생성을 훅으로 대체

231 235 

232[`WorktreeCreate` 훅](https://code.claude.com/docs/ko/hooks#worktreecreate)을 구성하여 기본 `git worktree` 로직을 완전히 대체합니다. 여기에는 worktree를 `.claude/worktrees/` 이외의 다른 곳에 배치하는 것도 포함됩니다. 완전한 예제는 [비git 버전 관리](#non-git-version-control)를 참조합니다.236[`WorktreeCreate` 훅](https://code.claude.com/docs/ko/hooks#worktreecreate)을 구성하여 기본 `git worktree` 로직을 완전히 대체합니다. 여기에는 worktree를 `.claude/worktrees/` 이외의 다른 곳에 배치하는 것도 포함됩니다. 완전한 예제는 [비git 버전 관리](#non-git-version-control)를 참조합니다.


236Worktree는 자체 파일과 브랜치를 가지지만 메인 체크아웃과 다음을 공유합니다:240Worktree는 자체 파일과 브랜치를 가지지만 메인 체크아웃과 다음을 공유합니다:

237 241 

238* **저장소의 `.git` 디렉토리**: worktree의 git 명령은 메인 저장소의 공유 `.git` 디렉토리에 쓰며, [샌드박싱](https://code.claude.com/docs/ko/sandboxing.md#filesystem-isolation)은 이러한 쓰기를 허용하므로 `git commit`과 같은 명령이 샌드박스가 활성화된 worktree 내부에서 작동합니다.242* **저장소의 `.git` 디렉토리**: worktree의 git 명령은 메인 저장소의 공유 `.git` 디렉토리에 쓰며, [샌드박싱](https://code.claude.com/docs/ko/sandboxing.md#filesystem-isolation)은 이러한 쓰기를 허용하므로 `git commit`과 같은 명령이 샌드박스가 활성화된 worktree 내부에서 작동합니다.

239* **플러그인**: [프로젝트 범위](https://code.claude.com/docs/ko/plugins/loading.md#find-where-a-plugin-is-enabled)에서 메인 체크아웃에서 설치된 플러그인도 동일한 저장소의 worktree에 로드되므로 worktree마다 다시 설치할 필요가 없습니다. Claude Code v2.1.200 이상이 필요합니다.243* **플러그인**: [프로젝트 범위](https://code.claude.com/docs/ko/plugins/loading.md#find-where-a-plugin-is-enabled)에서 메인 체크아웃에서 설치된 플러그인도 동일한 저장소의 worktree에 로드되므로 worktree마다 다시 설치할 필요가 없습니다.

240* **권한 승인**: worktree 세션에서 Bash 명령에 대해 "예, 다시 묻지 않기"를 선택하면 규칙이 메인 체크아웃의 `.claude/settings.local.json`에 저장되므로 메인 체크아웃과 저장소의 다른 모든 worktree에 적용되며, worktree 제거 후에도 유지됩니다. Windows 및 Claude Code가 [저장소 루트를 사용하지 않는 다른 경우](https://code.claude.com/docs/ko/settings.md#where-claude-code-looks-for-each-file)에는 규칙이 해당 worktree와 함께 유지됩니다. v2.1.211 이전에는 worktree에서 부여된 승인이 해당 worktree 내부에 저장되었으며, 다른 곳에 적용되지 않았고, worktree 제거 시 손실되었습니다. [승인이 저장되는 위치](https://code.claude.com/docs/ko/permissions.md#permission-system)를 참조합니다.244* **권한 승인**: worktree 세션에서 Bash 명령에 대해 "예, 다시 묻지 않기"를 선택하면 규칙이 메인 체크아웃의 `.claude/settings.local.json`에 저장됩니다. 이 규칙은 메인 체크아웃과 저장소의 다른 모든 worktree에 적용되며, worktree 제거 후에도 유지됩니다.

245 

246 Windows 및 Claude Code가 [저장소 루트를 사용하지 않는 다른 경우](https://code.claude.com/docs/ko/settings.md#where-claude-code-looks-for-each-file)에는 규칙이 해당 worktree와 함께 유지됩니다. [승인이 저장되는 위치](https://code.claude.com/docs/ko/permissions.md#permission-system)를 참조합니다.

241* **추적되지 않은 skills, agents, 및 commands**: worktree 체크아웃에 루트에 `.claude/skills` 디렉토리가 없을 때(예: `.claude/skills`가 gitignored인 경우), Claude Code는 메인 체크아웃의 [프로젝트 skills](https://code.claude.com/docs/ko/skills.md#where-skills-live)를 worktree 세션에 로드합니다. 자체 `.claude/skills` 디렉토리가 있는 worktree에서는 해당 복사본만 로드됩니다.247* **추적되지 않은 skills, agents, 및 commands**: worktree 체크아웃에 루트에 `.claude/skills` 디렉토리가 없을 때(예: `.claude/skills`가 gitignored인 경우), Claude Code는 메인 체크아웃의 [프로젝트 skills](https://code.claude.com/docs/ko/skills.md#where-skills-live)를 worktree 세션에 로드합니다. 자체 `.claude/skills` 디렉토리가 있는 worktree에서는 해당 복사본만 로드됩니다.

242 248 

243 동일한 읽기 통과는 `.claude/agents` 및 `.claude/commands`를 포함합니다. Skills의 경우 읽기 통과에는 Claude Code v2.1.277 이상이 필요합니다.249 동일한 읽기 통과는 `.claude/agents` 및 `.claude/commands`를 포함합니다. Skills의 경우 읽기 통과에는 Claude Code v2.1.277 이상이 필요합니다.


312 318 

313## 문제 해결319## 문제 해결

314 320 

315Claude Code는 worktree를 생성하거나, 시작 시 worktree에 진입하거나, 재개된 세션을 worktree로 반환할 때 아래의 오류를 보고합니다.321Claude Code는 워크트리를 생성할 때, 시작 시 워크트리에 진입할 때, 또는 재개된 세션을 워크트리로 되돌릴 때 아래 오류를 보고합니다.

322 

323### Claude Code가 시작 시 워크트리에 진입할 수 없음

324 

325Claude Code가 시작 시 워크트리 디렉터리에 진입할 수 없으면 해당 경로를 명시한 오류를 출력하고 코드 1로 종료합니다. 이는 [`WorktreeCreate` 훅](https://code.claude.com/docs/ko/hooks#worktreecreate)이 생성한 디렉터리가 아닌 다른 내용을 출력하거나, 디렉터리가 설정된 후 삭제된 경우에 발생할 수 있습니다.

326 

327### 심볼릭 링크 경로에서 워크트리 생성 실패

316 328 

317### Claude Code가 시작 시 worktree에 진입할 수 없음329Claude Code는 `.claude`, `.claude/worktrees` 또는 워크트리 디렉터리 자체가 심볼릭 링크인 경우 워크트리 생성을 거부하며, 오류에는 심볼릭 링크 경로가 명시됩니다. 심볼릭 링크를 제거하고 재시도하십시오. v2.1.212 이전에는 저장소에 해당 경로 중 하나에 커밋된 심볼릭 링크가 이미 있으면 워크트리 생성 시 이를 따라가 저장소 외부에 파일을 생성할 수 있었습니다.

318 330 

319Claude Code가 시작 시 worktree 디렉토리에 진입할 수 없으면, 경로를 명시하는 오류를 출력하고 종료 코드 1로 종료합니다. 이는 [`WorktreeCreate` hook](https://code.claude.com/docs/ko/hooks#worktreecreate)이 생성한 디렉토리 이외의 다른 것을 출력하거나, 설정 후 디렉토리가 삭제되었을 때 발생할 수 있습니다.331### Claude Code가 생성한 워크트리에 대체된 객체의 원본 내용이 있음

320 332 

321### Symlink 경로에서 Worktree 생성 실패333저장소에서 [`git replace`](https://git-scm.com/docs/git-replace)를 사용하는 경우, Claude Code가 생성한 워크트리의 파일에는 `refs/replace/` 항목이 지정하는 대체 내용이 아닌 원본 객체의 내용이 들어 있습니다. Claude Code는 워크트리의 파일을 체크아웃하는 git 명령을 `GIT_NO_REPLACE_OBJECTS=1`로 실행하며, 사용자가 해당 변수에 export한 값은 무시합니다.

322 334 

323Claude Code는 `.claude`, `.claude/worktrees` 또는 worktree 디렉토리 자체가 symlink일 때 worktree 생성을 거부하며, 오류는 symlink된 경로를 명시합니다. symlink를 제거하고 다시 시도하십시오. v2.1.212 이전에는 저장소에 이미 이러한 경로 중 하나에 커밋된 symlink가 포함되어 있으면 worktree 생성이 이를 따라가서 저장소 외부에 파일을 생성할 수 있었습니다.335대체된 내용을 얻으려면 `git worktree add`로 [워크트리를 직접 생성](#manage-worktrees-manually)하고 그 안에서 Claude Code를 시작하십시오.

324 336 

325### Git LFS 파일이 Claude Code가 생성한 worktree의 포인터 파일임337### Claude Code가 생성한 워크트리에서 Git LFS 파일이 포인터 파일임

326 338 

327`git lfs install --local`로 [Git LFS](https://git-lfs.com)를 설정한 경우, Claude Code가 생성한 worktree는 실제 파일 대신 LFS 포인터 파일을 포함합니다. `--local` 플래그는 LFS 필터를 전역 git 설정이 아닌 저장소 자체의 `.git/config`에 작성합니다. 일반적인 `git lfs install`은 전역 설정에 작성되며 영향을 받지 않습니다. 저장소 자체 설정에 정의된 다른 [filter driver](https://git-scm.com/docs/gitattributes)도 동일하게 적용됩니다.339`git lfs install --local`로 [Git LFS](https://git-lfs.com)를 설정한 경우, Claude Code가 생성한 워크트리에는 실제 파일 대신 LFS 포인터 파일이 들어 있습니다. `--local` 플래그는 LFS 필터를 전역 git 구성이 아닌 저장소 자체의 `.git/config`에 기록합니다. 일반 `git lfs install`은 전역 구성에 기록하므로 영향을 받지 않습니다. 저장소 자체 구성에 정의된 다른 [필터 드라이버](https://git-scm.com/docs/gitattributes)에도 동일하게 적용됩니다.

328 340 

329Claude Code는 worktree를 생성할 때 저장소 자체의 필터 드라이버를 건너뜁니다. 필터 드라이버는 셸 명령이며, Claude를 포함하여 저장소에 쓸 수 있는 모든 것이 거기에 하나를 넣었을 수 있기 때문입니다. v2.1.247 이전에는 Claude Code가 worktree 생성 중에 이러한 드라이버를 실행했습니다.341필터 드라이버는 셸 명령이며, Claude를 포함해 저장소에 쓸 수 있는 모든 주체가 이를 넣었을 수 있으므로 Claude Code는 워크트리를 생성할 때 저장소 자체의 필터 드라이버를 건너뜁니다. v2.1.247 이전에는 Claude Code가 워크트리 생성 중에 해당 드라이버를 실행했습니다.

330 342 

331실제 파일을 얻으려면 worktree 내에서 `git lfs pull`을 실행하십시오.343실제 파일을 얻으려면 워크트리 안에서 `git lfs pull`을 실행하십시오.

332 344 

333네 가지 드문 경우에 Claude Code는 worktree를 전혀 생성하지 않습니다. 저장소의 설정이 정의하는 필터 드라이버를 알 수 없거나, 끌 수 없는 설정을 찾을 수 있습니다. 오류를 해당 해결책과 일치시키십시오:345드물게 네 가지 경우에는 Claude Code가 워크트리를 전혀 생성하지 않습니다. 저장소 구성이 어떤 필터 드라이버를 정의하는지 판단할 수 없거나, 구성에서 끌 수 없는 설정을 발견한 경우입니다. 오류에 맞는 해결 방법을 찾으십시오.

334 346 

335* **`Could not read the repository git config to neutralize filter drivers`**: Claude Code가 저장소의 `.git/config`를 읽을 수 없습니다. 예를 들어 권한 때문일 수 있습니다. 이를 수정하고 다시 시도하십시오.347* **`Could not read the repository git config to neutralize filter drivers`**: 권한 문제 등으로 Claude Code가 저장소의 `.git/config`를 읽을 수 없었습니다. 이를 해결하고 재시도하십시오.

336* **`The repository git config defines a filter driver whose name cannot be neutralized (contains "=" or a newline)`**: `.git/config`에서 해당 필터 드라이버의 이름을 바꾸거나 제거하고 다시 시도하십시오.348* **`The repository git config defines a filter driver whose name cannot be neutralized (contains "=" or a newline)`**: `.git/config`에서 해당 필터 드라이버의 이름을 변경하거나 제거한 후 재시도하십시오.

337* **`The repository git config has a conditional include (includeIf)`**: `.git/config`의 `includeIf`가 가져오는 설정을 해당 파일로 직접 이동하고, `includeIf`를 제거한 후 다시 시도하십시오. 전역 git 설정의 `includeIf`는 이를 트리거하지 않습니다.349* **`The repository git config has a conditional include (includeIf)`**: `.git/config`의 `includeIf`가 불러오는 설정을 해당 파일로 직접 옮기고, `includeIf`를 제거한 후 재시도하십시오. 전역 git 구성의 `includeIf`는 이 오류를 발생시키지 않습니다.

338* **`Git was not run: the repository's own git config sets <key>`**: 메시지는 Git LFS를 실행할 프로그램으로 가리키는 키를 명시합니다. 예를 들어 `lfs.customtransfer.<name>.path` 또는 `lfs.standalonetransferagent`입니다. 해당 설정이 귀하의 것이면 전역 git 설정으로 이동하십시오. 인식하지 못하면 저장소의 git 설정에서 제거하십시오. 신뢰하지 않는 도구나 체크아웃이 작성했을 수 있기 때문입니다. 저장소의 설정에서 키가 없어지면 다시 시도하십시오.350* **`Git was not run: the repository's own git config sets <key>`**: 메시지에는 `lfs.customtransfer.<name>.path` 또는 `lfs.standalonetransferagent`처럼 Git LFS가 실행할 프로그램을 가리키는 키가 명시됩니다. 해당 설정이 사용자가 지정한 것이라면 전역 git 구성으로 옮기십시오. 알지 못하는 설정이라면 신뢰할 수 없는 도구나 체크아웃이 기록했을 수 있으므로 저장소의 git 구성에서 제거하십시오. 저장소 구성에서 키가 제거되면 재시도하십시오.

339 351 

340### 부분 클론에서 worktree 생성 실패352### 부분 클론에서 워크트리 생성 실패

341 353 

342`This repository is a partial clone`을 포함하는 오류는 Claude Code가 worktree의 시작 커밋에 필요한 모든 git 객체를 가져올 수 없었다는 의미입니다. 메시지에서 `try again`으로 끝나는 문장에 안내된 단계를 수행하십시오. 그런 다음 해당 단계를 수행한 셸에서 다시 시도하십시오. `claude --worktree`를 실행하거나, 그곳에서 `claude`를 시작하고 다시 요청하십시오.354`This repository is a partial clone`이 포함된 오류는 Claude Code가 워크트리의 시작 커밋에 필요한 모든 git 객체를 가져올 수 없었음을 의미합니다. 메시지에서 `try again`으로 끝나는 문장에 안내된 단계를 수행하십시오. 그런 다음 해당 단계를 수행한 셸에서 재시도하십시오. `claude --worktree`를 실행하거나, 그곳에서 `claude`를 시작하고 다시 요청하면 됩니다.

343 355 

344### Claude Code가 worktree 사용을 거부함356### Claude Code가 워크트리 사용을 거부함

345 357 

346`Refusing to use <path> as an isolation worktree`로 시작하는 오류는 Claude Code가 디렉토리의 git 정체성을 확인한 후 세션 또는 하위 에이전트의 격리된 체크아웃으로 채택하기를 거부했다는 의미입니다. 확인은 Claude Code가 worktree를 생성하든, 기존 worktree에 진입하든, 이전 실행의 worktree를 재사용하든 실행됩니다.358`Refusing to use <path> as an isolation worktree`로 시작하는 오류는 Claude Code가 해당 디렉터리를 세션 또는 서브에이전트의 격리된 체크아웃으로 채택하기 전에 디렉터리의 git ID를 확인하고 이를 거부했음을 의미합니다. 이 확인은 Claude Code가 워크트리를 생성하든, 기존 워크트리에 진입하든, 이전 실행의 워크트리를 재사용하든 항상 실행됩니다.

347 359 

348대부분의 경우 메시지의 나머지 부분은 디렉토리의 git 메타데이터가 주 체크아웃으로 해석된다고 말합니다. 예를 들어, 해당 `.git` 파일이 주 저장소 자체의 `.git` 디렉토리를 가리키거나, git이 `core.worktree` 리다이렉트를 통해 작업 트리를 주 체크아웃으로 해석합니다. 이러한 디렉토리에서 `git reset --hard`와 같은 일반적인 git 명령은 worktree 대신 주 체크아웃에 작용합니다. Claude Code는 또한 디렉토리에 읽을 수 없는 `.git` 항목이 있을 때 거부합니다. worktree가 안전하다고 가정하기보다는 말입니다.360대부분의 경우 메시지의 나머지 부분은 디렉터리의 git 메타데이터가 메인 체크아웃으로 확인된다고 알려줍니다. 예를 들어 `.git` 파일이 메인 저장소 자체의 `.git` 디렉터리를 가리키거나, git이 `core.worktree` 리디렉션을 통해 작업 트리를 메인 체크아웃으로 확인하는 경우입니다. 이러한 디렉터리에서는 `git reset --hard` 같은 일반적인 git 명령이 워크트리가 아닌 메인 체크아웃에 작용합니다. 또한 Claude Code는 디렉터리에 읽을 수 없는 `.git` 항목이 있는 경우, 워크트리가 안전하다고 가정하지 않고 거부합니다.

349 361 

350git 메타데이터가 전혀 없는 디렉토리(예: [`WorktreeCreate` hook](#non-git-version-control)이 생성하는 디렉토리)는 git 저장소가 포함하지 않을 때만 확인을 통과합니다. hook이 저장소 내부에 디렉토리를 생성하면, git이 해당 저장소의 체크아웃으로 해석하고 Claude Code는 `git resolves its working tree to` 메시지로 거부합니다. hook이 저장소 외부에 디렉토리를 생성하도록 하십시오.362[`WorktreeCreate` 훅](#non-git-version-control)이 생성하는 디렉터리처럼 git 메타데이터가 전혀 없는 디렉터리는 어떤 git 저장소에도 포함되지 않은 경우에만 확인을 통과합니다. 훅이 저장소 안에 디렉터리를 생성하면 git은 이를 해당 저장소의 체크아웃으로 확인하고 Claude Code는 `git resolves its working tree to` 메시지와 함께 이를 거부하므로, 훅이 모든 저장소 외부에 디렉터리를 생성하도록 하십시오.

351 363 

352Claude Code는 거부된 디렉토리를 제자리에 두었습니다. 작업을 보유할 수 있기 때문입니다. 메시지를 해당 복구와 일치시키십시오. `Refusing to use <path>` 다음에 나타나든 [재개 메시지](#the-session-resumes-outside-its-worktree)에 나타나든 말입니다. 일부 끝은 재개 메시지에만 나타납니다:364거부된 디렉터리에는 작업 내용이 있을 수 있으므로 Claude Code는 이를 그대로 둡니다. 메시지가 `Refusing to use <path>` 뒤에 오든 [재개 메시지](#the-session-resumes-outside-its-worktree)에 나타나든, 메시지에 맞는 복구 방법을 찾으십시오. 일부 끝맺음은 재개 메시지에서만 나타납니다.

353 365 

354* **`launch from the parent checkout` 또는 `Run the resume from the project checkout`이라고 말함**: worktree 내부에서 Claude Code를 시작했습니다. 대신 주 체크아웃에서 시작하십시오. worktree는 재생성할 필요가 없습니다.366* **`launch from the parent checkout` 또는 `Run the resume from the project checkout`이 포함된 경우**: 워크트리 내부에서 Claude Code를 실행했습니다. 대신 메인 체크아웃에서 실행하십시오. 워크트리를 다시 생성할 필요는 없습니다.

355* **`it cannot be resumed or re-entered`라고 말함**: 시작한 위치에서 이 세션의 worktree를 보증하는 것이 없습니다. 재생성하십시오. 디렉토리와 해당 작업은 수동 복구를 위해 디스크에 남아 있으며, worktree에 부모 체크아웃이 있을 때 거기에서 재개하는 것도 작동합니다.367* **`it cannot be resumed or re-entered`가 포함된 경우**: 실행한 위치에서 이 세션의 어떤 것도 워크트리를 보증하지 않습니다. 워크트리를 다시 생성하십시오. 디렉터리와 작업 내용은 수동 복구를 위해 디스크에 남아 있으며, 워크트리에 상위 체크아웃이 있는 경우 그곳에서 재개하는 것도 가능합니다.

356* **`it contains the protected checkout`이라고 말함**: 거부된 디렉토리는 홈 디렉토리와 같은 주 체크아웃의 부모입니다. 삭제하지 마십시오. worktree 경로를 변경하십시오. 예를 들어 `WorktreeCreate` hook이 반환하는 경로 또는 `EnterWorktree` 대상이므로 worktree가 체크아웃을 포함하지 않습니다.368* **`it contains the protected checkout`이 포함된 경우**: 거부된 디렉터리는 홈 디렉터리처럼 메인 체크아웃의 상위 디렉터리입니다. 이를 삭제하지 마십시오. `WorktreeCreate` 훅이 반환하는 경로나 `EnterWorktree` 대상 같은 워크트리 경로를 변경하여 워크트리가 체크아웃을 포함하지 않도록 하십시오.

357* **`the protected checkout <path> has a .git entry that could not be examined` 또는 `has git metadata that could not be resolved`라고 말함**: 문제는 worktree의 git 메타데이터가 아닌 주 체크아웃의 git 메타데이터입니다. worktree를 삭제하지 마십시오. 메시지의 후행 조언을 무시하십시오. 이 두 끝에는 적용되지 않는 재생성입니다. 주 체크아웃을 복구하십시오. 예를 들어 권한 문제 또는 해당 `.git`의 git `dubious ownership` 거부입니다. 그리고 다시 시도하십시오.369* **`the protected checkout <path> has a .git entry that could not be examined` 또는 `has git metadata that could not be resolved`가 포함된 경우**: 문제는 워크트리가 아닌 메인 체크아웃의 git 메타데이터에 있습니다. 워크트리를 삭제하지 말고, 메시지 끝의 워크트리 재생성 안내는 이 두 가지 끝맺음에는 해당하지 않으므로 무시하십시오. 권한 문제나 `.git`에 대한 git `dubious ownership` 거부 등 메인 체크아웃을 복구한 후 재시도하십시오.

358 370 

359 v2.1.302 이전에는 git 2.56 이상을 사용할 때 `the protected checkout` 뒤의 `<path>`에 불필요하게 남은 `.git` 파일이 있는 경우에도 `could not be resolved` 끝이 나타났습니다. 여기서 불필요하게 남았다는 것은 해당 파일의 `gitdir:` 줄에 있는 경로가 유효한 git 저장소로 이어지지 않는다는 의미입니다. 복구하려면 [Claude Code를 업데이트](https://code.claude.com/docs/ko/setup.md#update-claude-code)하고 다시 시도하십시오. 해당 `gitdir:` 경로가 더 이상 존재하지 않으면 `.git` 파일을 삭제하고 다시 시도할 수도 있습니다.371 v2.1.302 이전에는 git 2.56 이상에서 `the protected checkout` 뒤의 `<path>`에 불필요한 `.git` 파일이 있을 때도 `could not be resolved` 끝맺음이 나타났습니다. 여기서 불필요하다는 것은 해당 파일의 `gitdir:` 줄에 있는 경로가 유효한 git 저장소로 이어지지 않는다는 의미입니다. 복구하려면 [Claude Code를 업데이트](https://code.claude.com/docs/ko/setup.md#update-claude-code)하고 재시도하십시오. 해당 `gitdir:` 경로가 더 이상 존재하지 않으면 `.git` 파일을 삭제하고 재시도할 수도 있습니다.

360* **`its recorded path has a network spelling`이라고 말함**: Claude Code는 네트워크 경로의 worktree로 재개하지 않습니다. 로컬 경로에서 worktree를 재생성하십시오.372* **`its recorded path has a network spelling`이 포함된 경우**: Claude Code는 네트워크 경로에 있는 워크트리로는 절대 재개하지 않습니다. 로컬 경로에 워크트리를 다시 생성하십시오.

361* **다른 끝**: 메시지는 문제와 해결책을 명시합니다. 예를 들어 `core.worktree` 리다이렉트를 제거하거나 worktree를 재생성합니다. 이를 따르십시오. git 정체성을 확인할 수 없다고 말하는 메시지의 디렉토리를 삭제하기 전에 명시된 원인을 먼저 해결하십시오. 예를 들어 worktree 경로의 기호 링크 또는 git 자체 실행 실패입니다. 디렉토리가 정상일 수 있기 때문입니다. 재생성할 때 이전 디렉토리에서 필요한 변경 사항을 먼저 구출하십시오. 디스크에 남아 있습니다.373* **그 밖의 끝맺음**: 메시지에 `core.worktree` 리디렉션 제거나 워크트리 재생성 등 문제와 해결 방법이 명시되어 있으므로 이를 따르십시오. 메시지에 git ID를 확인할 수 없다고 표시된 디렉터리를 삭제하기 전에, 워크트리 경로의 심볼릭 링크나 git 자체의 실행 실패 등 명시된 원인을 먼저 해결하십시오. 디렉터리가 정상일 수 있기 때문입니다. 다시 생성하는 경우, 이전 디렉터리는 디스크에 남아 있으므로 필요한 변경 사항을 먼저 복구하십시오.

362 374 

363### 세션이 worktree 외부에서 재개됨375### 세션이 워크트리 외부에서 재개됨

364 376 

365대화형으로 세션을 재개할 때 Claude Code가 worktree로 반환할 수 없으면, Claude Code는 아래의 메시지 중 하나로 이를 말합니다. Claude Code가 worktree 바인딩을 지우면, 세션 기록에 지우기를 기록합니다. [기록 쓰기를 억제](https://code.claude.com/docs/ko/sessions.md#where-transcripts-are-stored)하면, 메시지는 대신 바인딩을 지울 수 없으며 Claude Code가 나중에 재개할 때 worktree를 다시 확인할 것이라고 말합니다.377세션을 대화형으로 재개할 때 Claude Code가 세션을 워크트리로 되돌릴 수 없으면 아래 메시지 중 하나로 이를 알립니다. Claude Code가 워크트리 바인딩을 해제하면 해제 사실을 세션 트랜스크립트에 기록합니다. [트랜스크립트 쓰기를 억제](https://code.claude.com/docs/ko/sessions.md#where-transcripts-are-stored)한 경우에는 대신 바인딩을 해제할 수 없었으며 이후 재개 시 Claude Code가 워크트리를 다시 확인한다는 메시지가 표시됩니다.

366 378 

367| 메시지 시작 | 발생한 일과 수행할 작업 |379| 메시지 시작 부분 | 발생한 상황 및 조치 방법 |

368| :- | :- |380| :- | :- |

369| `Your worktree <path> no longer exists` | worktree 디렉토리가 제거되었습니다. 세션은 격리 없이 현재 디렉토리에서 계속되며, Claude Code는 worktree 바인딩을 지웁니다. 조치가 필요하지 않습니다. |381| `Your worktree <path> no longer exists` | 워크트리 디렉터리가 제거되었습니다. 세션은 격리 없이 현재 디렉터리에서 계속되며, Claude Code는 워크트리 바인딩을 해제합니다. 조치가 필요하지 않습니다. |

370| `Could not verify your worktree <path> this time` | Claude Code가 worktree를 확인할 수 없습니다. 일반적으로 일시적인 이유 때문입니다. 바인딩은 유지되며, 세션은 격리 없이 현재 디렉토리에서 계속됩니다. 다시 재개하여 다시 시도하십시오. 계속 발생하면 새 세션에서 worktree에 진입하고 [Claude Code가 worktree 사용을 거부함](#claude-code-refuses-to-use-a-worktree) 아래의 거부 메시지와 일치시키십시오. 이는 worktree의 메타데이터가 아닌 주 체크아웃의 메타데이터를 명시할 수 있습니다. |382| `Could not verify your worktree <path> this time` | 일반적으로 일시적인 이유로 Claude Code가 워크트리를 확인할 수 없었습니다. 바인딩은 유지되며, 세션은 격리 없이 현재 디렉터리에서 계속됩니다. 재시도하려면 다시 재개하십시오. 문제가 계속되면 새 세션에서 워크트리에 진입하고 [Claude Code가 워크트리 사용을 거부함](#claude-code-refuses-to-use-a-worktree)에서 거부 메시지에 맞는 항목을 찾으십시오. 이 메시지는 워크트리가 아닌 메인 체크아웃의 메타데이터를 지목할 수 있습니다. |

371| `Did not re-enter your worktree <path>` | Claude Code가 worktree 바인딩을 안전하지 않은 것으로 거부했습니다. 바인딩을 지우고 세션은 격리 없이 계속됩니다. 메시지는 특정 거부를 포함합니다. [Claude Code가 worktree 사용을 거부함](#claude-code-refuses-to-use-a-worktree) 아래와 일치시키십시오. 일부 거부는 재생성이 필요하고 다른 거부는 경로 변경이 필요하기 때문입니다. |383| `Did not re-enter your worktree <path>` | Claude Code가 워크트리 바인딩을 안전하지 않다고 판단하여 거부했습니다. 바인딩을 해제하며 세션은 격리 없이 계속됩니다. 메시지에는 구체적인 거부 사유가 포함됩니다. 일부 거부는 재생성으로, 다른 거부는 경로 변경으로 해결되므로 [Claude Code가 워크트리 사용을 거부함](#claude-code-refuses-to-use-a-worktree)에서 해당 항목을 찾으십시오. |

372| `Could not re-enter your worktree <path>` | Claude Code가 시작한 위치에서 worktree를 보증할 수 없습니다. 가장 일반적으로 내부에서 시작했기 때문입니다. 바인딩은 유지됩니다. 메시지의 나머지 부분은 해결책을 명시합니다. [Claude Code가 worktree 사용을 거부함](#claude-code-refuses-to-use-a-worktree) 아래와 일치시키십시오. |384| `Could not re-enter your worktree <path>` | 가장 흔하게는 워크트리 내부에서 실행했기 때문에, Claude Code가 실행 위치에서 워크트리를 보증할 수 없었습니다. 바인딩은 유지됩니다. 메시지의 나머지 부분에 해결 방법이 명시되어 있으므로 [Claude Code가 워크트리 사용을 거부함](#claude-code-refuses-to-use-a-worktree)에서 해당 항목을 찾으십시오. |

373 385 

374[비대화형 모드](https://code.claude.com/docs/ko/headless.md)에서 `-p`를 사용하고, [Agent SDK](https://code.claude.com/docs/ko/agent-sdk/sessions.md)가 실행하는 재개에서, Claude Code는 사라진 worktree를 제외한 모든 거부에 대해 stderr 오류로 재개를 중지합니다. 격리 없이 계속하는 대신입니다.386`-p`를 사용하는 [비대화형 모드](https://code.claude.com/docs/ko/headless.md)와 [Agent SDK](https://code.claude.com/docs/ko/agent-sdk/sessions.md)가 실행하는 재개에서는, Claude Code가 격리 없이 계속하는 대신 사라진 워크트리를 제외한 모든 거부에 대해 stderr 오류와 함께 재개를 중단합니다.

375 387 

376`--output-format stream-json`을 사용하면, 거부도 stdout에 `result` 메시지로 도착합니다. subtype `error_during_execution`이며 `errors` 배열은 동일한 텍스트를 전달합니다. Agent SDK 애플리케이션은 0이 아닌 종료만이 아닌 이유를 받습니다. v2.1.260 이전에는 worktree 재개 거부가 `result` 메시지를 생성하지 않았습니다.388`--output-format stream-json`을 사용하면 거부 내용이 stdout에도 `errors` 배열에 동일한 텍스트를 담은 하위 유형 `error_during_execution`의 `result` 메시지로 전달되므로, Agent SDK 애플리케이션은 0이 아닌 종료 코드만이 아니라 그 이유도 받을 수 있습니다. v2.1.260 이전에는 워크트리 재개 거부 시 `result` 메시지가 생성되지 않았습니다.

377 389 

378메시지는 표의 대화형 메시지와 다른 형태를 취합니다:390이 메시지들은 표의 대화형 메시지와 형태가 다릅니다.

379 391 

380* `Error: cannot resume into worktree <path>: ...This session was not started.` 표가 `Did not re-enter`로 표시하는 거부의 경우입니다. Claude Code는 종료 전에 worktree 바인딩을 지우며, 오류는 이를 말합니다. 다음에 대화를 재개할 때, 세션은 worktree 격리 없이 현재 디렉토리에서 계속됩니다. v2.1.260 이전에는 Claude Code가 지워진 바인딩을 작성하지 않았으므로 동일한 재개의 모든 재시도가 동일한 오류로 실패했습니다.392* 표에서 `Did not re-enter`로 표시된 거부의 경우 `Error: cannot resume into worktree <path>: ...This session was not started.`가 표시됩니다. Claude Code는 종료하기 전에 워크트리 바인딩을 해제하며 오류에 그 사실이 표시됩니다. 다음에 대화를 재개하면 세션은 워크트리 격리 없이 현재 디렉터리에서 계속됩니다. v2.1.260 이전에는 Claude Code가 해제된 바인딩을 기록하지 않았기 때문에 같은 재개를 재시도할 때마다 동일한 오류로 실패했습니다.

381 393 

382 [기록 쓰기를 억제](https://code.claude.com/docs/ko/sessions.md#where-transcripts-are-stored)하면, 지우기를 저장할 수 없습니다. 오류는 동일한 명령이 다시 거부될 것이라고 말합니다. `--fork-session`과 worktree 없이 계속하는 방법으로 새 대화를 시작하는 것을 명시합니다.394 [트랜스크립트 쓰기를 억제](https://code.claude.com/docs/ko/sessions.md#where-transcripts-are-stored)한 경우에는 해제 내용을 저장할 수 없습니다. 이 경우 오류에는 같은 명령이 다시 거부될 것이라는 내용과 함께, 워크트리 없이 계속하는 방법으로 `--fork-session`과 새 대화 시작이 안내됩니다.

383* `Error: could not verify worktree <path> for this resume, so the resume was aborted...` `Could not verify`의 경우입니다.395* `Could not verify`의 경우 `Error: could not verify worktree <path> for this resume, so the resume was aborted...`가 표시됩니다.

384* `Error: ...The worktree binding is kept.` `Could not re-enter`의 경우입니다.396* `Could not re-enter`의 경우 `Error: ...The worktree binding is kept.`가 표시됩니다.

385* `Notice: the worktree <path> for this session no longer exists...` 사라진 worktree의 경우입니다. Claude Code는 이를 출력하고 대화형 재개처럼 세션을 계속합니다.397* 사라진 워크트리의 경우 `Notice: the worktree <path> for this session no longer exists...`가 표시됩니다. Claude Code는 이를 출력하고 대화형 재개와 마찬가지로 세션을 계속합니다.

386 398 

387각 오류에 포함된 거부 끝은 대화형 공지와 공유되므로, [Claude Code가 worktree 사용을 거부함](#claude-code-refuses-to-use-a-worktree) 아래의 항목과 여전히 일치합니다.399각 오류에 포함된 거부 끝맺음은 대화형 알림과 동일하므로, 여전히 [Claude Code가 워크트리 사용을 거부함](#claude-code-refuses-to-use-a-worktree)의 해당 항목과 일치합니다.

388 400 

389stream-json 결과에서, [`startup_failure_reason`](https://code.claude.com/docs/ko/agent-sdk/typescript#startup_failure_reason)은 `could not verify worktree` 오류의 경우 `worktree_unverified`이고 `cannot resume into worktree` 및 `The worktree binding is kept` 오류의 경우 `worktree_resume_refused`입니다. 애플리케이션은 오류 텍스트를 일치시키는 대신 이를 기반으로 분기할 수 있습니다. v2.1.274 이전에는 결과가 `startup_failure_reason` 필드를 전달하지 않았습니다.401stream-json 결과에서 [`startup_failure_reason`](https://code.claude.com/docs/ko/agent-sdk/typescript#startup_failure_reason)은 `could not verify worktree` 오류의 경우 `worktree_unverified`이고, `cannot resume into worktree` 및 `The worktree binding is kept` 오류의 경우 `worktree_resume_refused`입니다. 애플리케이션은 오류 텍스트를 매칭하는 대신 이 값을 기준으로 분기할 수 있습니다. v2.1.274 이전에는 결과에 `startup_failure_reason` 필드가 없었습니다.

390 402 

391## 참고 항목403## 참고 항목

392 404