SpyBara
Go Premium

Documentation 2026-10-09 23:02 UTC to 2026-10-10 21:01 UTC

69 files changed +1,156 −337. View all changes and history on the product overview
2026
Sat 10 22: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

187 187 

188Claude는 작업에 따라 호출할 도구를 결정하지만, 해당 호출이 실행되도록 허용할지 여부를 제어합니다. 특정 도구를 자동 승인하거나, 다른 도구를 완전히 차단하거나, 모든 것에 대해 승인을 요구할 수 있습니다. 3가지 옵션이 함께 작동하여 실행되는 것을 결정합니다:188Claude는 작업에 따라 호출할 도구를 결정하지만, 해당 호출이 실행되도록 허용할지 여부를 제어합니다. 특정 도구를 자동 승인하거나, 다른 도구를 완전히 차단하거나, 모든 것에 대해 승인을 요구할 수 있습니다. 3가지 옵션이 함께 작동하여 실행되는 것을 결정합니다:

189 189 

190* **`allowed_tools` / `allowedTools`** 나열된 도구를 자동 승인합니다. `["Read", "Glob", "Grep"]`이 허용된 도구 목록에 있는 읽기 전용 에이전트는 프롬프트 없이 해당 도구를 실행합니다. 나열되지 않은 도구는 여전히 사용 가능하며, 승인이 필요한 해당 도구에 대한 호출은 권한 모드 및 `canUseTool`로 넘어갑니다.190* **`allowed_tools` / `allowedTools`** 나열된 도구를 자동 승인합니다. `["Read", "Glob", "Grep"]`이 허용된 도구 목록에 있는 읽기 전용 에이전트는 [네트워크 경로](/docs/ko/permissions#network-paths)에서 읽는 경우를 제외하고 프롬프트 없이 해당 도구를 실행합니다. 나열되지 않은 도구는 여전히 사용 가능하며, 승인이 필요한 해당 도구에 대한 호출은 권한 모드 및 `canUseTool`로 넘어갑니다.

191* **`disallowed_tools` / `disallowedTools`** 다른 설정에 관계없이 나열된 도구를 차단합니다. 도구가 실행되기 전에 규칙이 확인되는 순서는 [권한](/docs/ko/agent-sdk/permissions)을 참조하세요.191* **`disallowed_tools` / `disallowedTools`** 다른 설정에 관계없이 나열된 도구를 차단합니다. 도구가 실행되기 전에 규칙이 확인되는 순서는 [권한](/docs/ko/agent-sdk/permissions)을 참조하세요.

192* **`permission_mode` / `permissionMode`** 원하는 인적 감시의 정도를 제어합니다. SDK는 활성 모드를 허용 및 거부 규칙과 함께 고정된 순서로 평가하며, 이는 [권한이 평가되는 방식](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated)에 설명되어 있습니다. 사용 가능한 모드는 [권한 모드](#permission-mode)를 참조하세요.192* **`permission_mode` / `permissionMode`** 원하는 인적 감시의 정도를 제어합니다. SDK는 활성 모드를 허용 및 거부 규칙과 함께 고정된 순서로 평가하며, 이는 [권한이 평가되는 방식](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated)에 설명되어 있습니다. 사용 가능한 모드는 [권한 모드](#permission-mode)를 참조하세요.

193 193 


263| `"default"` | 승인이 필요하고 허용 규칙으로 다루지 않는 도구 호출은 `canUseTool` 콜백을 트리거합니다; 콜백이 없으면 거부 | 사용자 정의 승인 콜백이 있는 대화형 애플리케이션 |263| `"default"` | 승인이 필요하고 허용 규칙으로 다루지 않는 도구 호출은 `canUseTool` 콜백을 트리거합니다; 콜백이 없으면 거부 | 사용자 정의 승인 콜백이 있는 대화형 애플리케이션 |

264| `"acceptEdits"` | 파일 편집 및 일반적인 파일시스템 명령(`mkdir`, `touch`, `mv`, `cp` 등)을 자동 승인합니다; 다른 Bash 명령은 기본 규칙을 따릅니다 | Claude의 편집을 신뢰하고 더 빠른 반복을 원하는 경우(예: 프로토타이핑 중이거나 격리된 디렉토리에서 작업할 때) |264| `"acceptEdits"` | 파일 편집 및 일반적인 파일시스템 명령(`mkdir`, `touch`, `mv`, `cp` 등)을 자동 승인합니다; 다른 Bash 명령은 기본 규칙을 따릅니다 | Claude의 편집을 신뢰하고 더 빠른 반복을 원하는 경우(예: 프로토타이핑 중이거나 격리된 디렉토리에서 작업할 때) |

265| `"plan"` | Claude는 소스 파일을 편집하지 않고 탐색하고 계획을 생성합니다; 파일 편집은 절대 자동 승인되지 않으며 `canUseTool` 콜백을 통해 프롬프트됩니다 | Claude가 변경 사항을 제안하되 실행하지 않기를 원하는 경우(예: 코드 검토 중이거나 변경 사항이 적용되기 전에 승인해야 할 때) |265| `"plan"` | Claude는 소스 파일을 편집하지 않고 탐색하고 계획을 생성합니다; 파일 편집은 절대 자동 승인되지 않으며 `canUseTool` 콜백을 통해 프롬프트됩니다 | Claude가 변경 사항을 제안하되 실행하지 않기를 원하는 경우(예: 코드 검토 중이거나 변경 사항이 적용되기 전에 승인해야 할 때) |

266| `"dontAsk"` | 절대 프롬프트하지 않습니다. [권한 규칙](/docs/ko/settings-reference#permission-settings)으로 사전 승인된 도구가 실행되고, `default` 모드에서 승인이 필요 없는 호출(예: 작업 디렉토리 내의 파일 읽기)도 실행됩니다; 그 외에 프롬프트되는 모든 호출은 거부됩니다. `AskUserQuestion`, 조직이 [`ask`로 설정](/docs/ko/mcp#organization-controls-on-connector-tools)한 커넥터 도구, 그리고 [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구는 허용했더라도 거부됩니다 | 헤드리스 에이전트를 위한 고정적이고 명시적인 도구 표면을 원하고 `canUseTool`이 없을 때의 자동 거부보다 명시적 거부를 선호하는 경우 |266| `"dontAsk"` | 절대 확인을 요청하지 않습니다. [권한 규칙](/docs/ko/settings-reference#permission-settings)으로 사전 승인된 도구가 실행되고, `default` 모드에서 승인이 필요 없는 호출(예: 작업 디렉터리 내의 파일 읽기)도 실행됩니다; 그 외에 확인을 요청하게 되는 모든 호출은 거부됩니다. `AskUserQuestion`, 조직이 [`ask`로 설정](/docs/ko/mcp#organization-controls-on-connector-tools)한 커넥터 도구, [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구, 그리고 [네트워크 경로에서의 읽기](/docs/ko/permissions#network-paths)는 허용했더라도 거부됩니다 | 헤드리스 에이전트를 위한 고정적이고 명시적인 도구 집합을 원하고 `canUseTool`이 없을 때의 암묵적 동작에 의존하기보다 명시적 거부를 선호하는 경우 |

267| `"auto"` | 모델 분류기를 사용하여 권한 프롬프트를 승인하거나 거부합니다. 가용성 및 동작은 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)를 참조하세요 | 도구 사용에 대한 안전 가드레일을 원하는 자율 에이전트 |267| `"auto"` | 모델 분류기를 사용하여 권한 프롬프트를 승인하거나 거부합니다. 가용성 및 동작은 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)를 참조하세요 | 도구 사용에 대한 안전 가드레일을 원하는 자율 에이전트 |

268| `"bypassPermissions"` | 명시적 [`ask` 규칙](/docs/ko/settings-reference#permission-settings)이 일치하는 도구, 조직이 [`ask`로 설정](/docs/ko/mcp#organization-controls-on-connector-tools)한 커넥터 도구, 그리고 사용자 상호작용이 필요한 도구를 제외하고 요청하지 않고 모든 허용된 도구를 실행합니다. [교차 세션 메시징 보안 조치](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)는 여전히 적용됩니다. 우선순위 순서는 [권한이 평가되는 방식](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated)을 참조하세요. TypeScript SDK에서는 `options`에서 `allowDangerouslySkipPermissions: true`도 필요합니다. Unix에서 루트로 실행할 때는 사용할 수 없습니다. 에이전트의 조치가 관심 있는 시스템에 영향을 미칠 수 없는 격리된 환경에서만 사용합니다 | CI, 컨테이너 또는 기타 격리된 환경 |268| `"bypassPermissions"` | 명시적 [`ask` 규칙](/docs/ko/settings-reference#permission-settings)이 일치하는 도구, 조직이 [`ask`로 설정](/docs/ko/mcp#organization-controls-on-connector-tools)한 커넥터 도구, 그리고 사용자 상호작용이 필요한 도구를 제외하고 요청하지 않고 모든 허용된 도구를 실행합니다. [교차 세션 메시징 보안 조치](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)는 여전히 적용됩니다. 우선순위 순서는 [권한이 평가되는 방식](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated)을 참조하세요. TypeScript SDK에서는 `options`에서 `allowDangerouslySkipPermissions: true`도 필요합니다. Unix에서 루트로 실행할 때는 사용할 수 없습니다. 에이전트의 조치가 관심 있는 시스템에 영향을 미칠 수 없는 격리된 환경에서만 사용합니다 | CI, 컨테이너 또는 기타 격리된 환경 |

269 269 

Details

424 특정 도구 자동 승인424 특정 도구 자동 승인

425</h3>425</h3>

426 426 

427기본적으로 에이전트는 특정 도구를 사용하기 전에 권한을 요청할 수 있습니다. 이 예제는 `permissionDecision: 'allow'`를 반환하여 읽기 전용 파일 시스템 도구(Read, Glob, Grep)를 자동 승인하여 사용자 확인 없이 실행되도록 하면서 다른 모든 도구는 일반 권한 확인을 받습니다:427기본적으로 에이전트는 특정 도구를 사용하기 전에 권한을 요청할 수 있습니다. 이 예제는 `permissionDecision: 'allow'`를 반환하여 읽기 전용 파일 시스템 도구(Read, Glob, Grep)를 자동 승인하여 [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기를 제외하고 사용자 확인 없이 실행되도록 하면서 다른 모든 도구는 일반 권한 확인을 받습니다:

428 428 

429<CodeGroup>429<CodeGroup>

430 ```python Python theme={null}430 ```python Python theme={null}

Details

44 `allow` 규칙(`allowed_tools` 및 settings.json에서)을 확인합니다. 규칙이 일치하면 도구가 승인됩니다. 도구가 자체적으로 승인하는 호출도 이 단계에서 규칙 없이 해결됩니다. 예를 들어 작업 디렉토리 내의 파일 읽기 또는 [읽기 전용 Bash 명령](/docs/ko/permissions#read-only-commands)입니다.44 `allow` 규칙(`allowed_tools` 및 settings.json에서)을 확인합니다. 규칙이 일치하면 도구가 승인됩니다. 도구가 자체적으로 승인하는 호출도 이 단계에서 규칙 없이 해결됩니다. 예를 들어 작업 디렉토리 내의 파일 읽기 또는 [읽기 전용 Bash 명령](/docs/ko/permissions#read-only-commands)입니다.

45 45 

46 [중요 경로](/docs/ko/permission-modes#critical-paths)를 대상으로 하는 `rm` 및 `rmdir` 제거는 allow 규칙으로 절대 승인되지 않습니다. 그 후 콜백에 도달하는지 여부는 권한 모드에 따라 달라집니다. 예를 들어 `auto` 모드의 Agent SDK 세션에서 Claude Code는 기본적으로 호출하지 않고 거부합니다. [중요 경로](/docs/ko/permission-modes#critical-paths) 모드 테이블은 각 모드가 이들을 어떻게 처리하는지 나열합니다.46 [중요 경로](/docs/ko/permission-modes#critical-paths)를 대상으로 하는 `rm` 및 `rmdir` 제거는 allow 규칙으로 절대 승인되지 않습니다. 그 후 콜백에 도달하는지 여부는 권한 모드에 따라 달라집니다. 예를 들어 `auto` 모드의 Agent SDK 세션에서 Claude Code는 기본적으로 호출하지 않고 거부합니다. [중요 경로](/docs/ko/permission-modes#critical-paths) 모드 테이블은 각 모드가 이들을 어떻게 처리하는지 나열합니다.

47 

48 allow 규칙은 [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기를 승인하지 않습니다.

47 </Step>49 </Step>

48 50 

49 <Step title="canUseTool 콜백">51 <Step title="canUseTool 콜백">


60TypeScript SDK가 평가 순서를 자동 승인하도록 예상하는 구성에서 `canUseTool` 콜백을 전달하면 쿼리가 구성될 때 SDK는 Node.js 프로세스 경고를 한 번 내보냅니다. 경고의 코드는 `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`입니다. 두 가지 구성이 이를 트리거합니다.62TypeScript SDK가 평가 순서를 자동 승인하도록 예상하는 구성에서 `canUseTool` 콜백을 전달하면 쿼리가 구성될 때 SDK는 Node.js 프로세스 경고를 한 번 내보냅니다. 경고의 코드는 `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`입니다. 두 가지 구성이 이를 트리거합니다.

61 63 

62* `permissionMode: 'bypassPermissions'`는 [모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)을 제외하고 권한 모드 단계에 도달하는 모든 호출을 자동 승인합니다.64* `permissionMode: 'bypassPermissions'`는 [모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)을 제외하고 권한 모드 단계에 도달하는 모든 호출을 자동 승인합니다.

63* `"Read"`와 같은 각 단순 `allowedTools` 항목은 [모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)을 제외하고 콜백이 참조되기 전에 전체 도구를 자동 승인합니다.65* `"Read"`와 같은 각 단순 `allowedTools` 항목은 [모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves) 및 [네트워크 경로에서의 읽기](/docs/ko/permissions#network-paths)를 제외하고 콜백이 참조되기 전에 전체 도구를 자동 승인합니다.

64 66 

65`Bash(ls *)`와 같은 지정자가 있는 항목과 `acceptEdits` 모드는 이를 트리거하지 않으며, 설정 파일에서 오는 허용 규칙은 확인에 표시되지 않습니다.67`Bash(ls *)`와 같은 지정자가 있는 항목과 `acceptEdits` 모드는 이를 트리거하지 않으며, 설정 파일에서 오는 허용 규칙은 확인에 표시되지 않습니다.

66 68 


79 81 

80| 옵션 | 효과 |82| 옵션 | 효과 |

81| :- | :- |83| :- | :- |

82| `allowed_tools=["Read", "Grep"]` | `Read` 및 `Grep`은 자동 승인됩니다. 여기에 나열되지 않은 다른 도구는 여전히 존재하며, 승인이 필요한 호출은 권한 모드 및 `canUseTool`로 넘어갑니다. |84| `allowed_tools=["Read", "Grep"]` | `Read` 및 `Grep`은 [네트워크 경로에서의 읽기](/docs/ko/permissions#network-paths)를 제외하고 자동 승인됩니다. 여기에 나열되지 않은 다른 도구는 여전히 존재하며, 승인이 필요한 호출은 권한 모드 및 `canUseTool`로 넘어갑니다. |

83| `disallowed_tools=["Bash"]` | `Bash` 도구 정의가 요청에서 제거됩니다. Claude는 도구를 보지 못하며 시도할 수 없습니다. |85| `disallowed_tools=["Bash"]` | `Bash` 도구 정의가 요청에서 제거됩니다. Claude는 도구를 보지 못하며 시도할 수 없습니다. |

84| `disallowed_tools=["Bash(rm *)"]` | `Bash`는 사용 가능한 상태로 유지됩니다. `rm *` [작성된 대로](/docs/ko/permissions#bash-rule-limits) 일치하는 호출은 `bypassPermissions`를 포함한 모든 권한 모드에서 거부됩니다. `/bin/rm`을 포함한 다른 `Bash` 호출은 권한 모드로 넘어갑니다. |86| `disallowed_tools=["Bash(rm *)"]` | `Bash`는 사용 가능한 상태로 유지됩니다. `rm *` [작성된 대로](/docs/ko/permissions#bash-rule-limits) 일치하는 호출은 `bypassPermissions`를 포함한 모든 권한 모드에서 거부됩니다. `/bin/rm`을 포함한 다른 `Bash` 호출은 권한 모드로 넘어갑니다. |

85| `disallowed_tools=["*"]` | 모든 도구 정의가 요청에서 제거됩니다. 도구 이름 글롭은 거부 규칙에서 지원됩니다: `"*"`는 모든 도구와 일치하고 `"mcp__*"`는 모든 서버의 모든 MCP 도구와 일치합니다. |87| `disallowed_tools=["*"]` | 모든 도구 정의가 요청에서 제거됩니다. 도구 이름 글롭은 거부 규칙에서 지원됩니다: `"*"`는 모든 도구와 일치하고 `"mcp__*"`는 모든 서버의 모든 MCP 도구와 일치합니다. |


95 97 

96 허용 규칙은 `AskUserQuestion`, [`_meta["anthropic/requiresUserInteraction"]`](/docs/ko/mcp#require-approval-for-a-specific-tool)로 표시된 MCP 도구, 커넥터 도구 [조직이 `ask`로 설정](/docs/ko/mcp#organization-controls-on-connector-tools), 그리고 [중요 경로](/docs/ko/permission-modes#critical-paths)를 대상으로 하는 `rm` 및 `rmdir` 제거를 자동 승인하지 않습니다. `dontAsk` 모드에서 Claude Code는 콜백을 호출하지 않고 이러한 호출을 거부합니다. 다른 모드에서는 처음 세 가지가 콜백에 도달합니다. [권한 모드](/docs/ko/permission-modes#critical-paths)에 따라, 중요 경로 제거는 콜백에 도달하거나 Claude Code는 기본적으로 `auto` 모드의 Agent SDK 세션에 대해 수행하는 것처럼 콜백을 호출하지 않고 거부합니다.98 허용 규칙은 `AskUserQuestion`, [`_meta["anthropic/requiresUserInteraction"]`](/docs/ko/mcp#require-approval-for-a-specific-tool)로 표시된 MCP 도구, 커넥터 도구 [조직이 `ask`로 설정](/docs/ko/mcp#organization-controls-on-connector-tools), 그리고 [중요 경로](/docs/ko/permission-modes#critical-paths)를 대상으로 하는 `rm` 및 `rmdir` 제거를 자동 승인하지 않습니다. `dontAsk` 모드에서 Claude Code는 콜백을 호출하지 않고 이러한 호출을 거부합니다. 다른 모드에서는 처음 세 가지가 콜백에 도달합니다. [권한 모드](/docs/ko/permission-modes#critical-paths)에 따라, 중요 경로 제거는 콜백에 도달하거나 Claude Code는 기본적으로 `auto` 모드의 Agent SDK 세션에 대해 수행하는 것처럼 콜백을 호출하지 않고 거부합니다.

97 99 

98 적용 범위는 항목의 형식에 따라 다릅니다: `Read` 또는 `mcp__github__get_issue`와 같은 단순 이름은 위의 예외를 제외하고 해당 도구에 대한 모든 호출을 자동 승인하고, `Bash(npm test *)`와 같은 범위 지정 규칙은 일치하는 호출만 자동 승인하며, 승인이 필요한 다른 `Bash` 호출은 여전히 콜백으로 넘어갑니다. 모든 도구 호출에서 실행되어야 하는 검사의 경우 [`PreToolUse` 훅](/docs/ko/agent-sdk/hooks)을 사용합니다: 훅은 다른 모든 단계 전에 실행되고, 훅 거부는 `bypassPermissions` 모드에서도 적용됩니다.100 적용 범위는 항목의 형식에 따라 다릅니다: `Read` 또는 `mcp__github__get_issue`와 같은 단순 이름은 위의 예외와 [네트워크 경로에서의 읽기](/docs/ko/permissions#network-paths)를 제외하고 해당 도구에 대한 모든 호출을 자동 승인하고, `Bash(npm test *)`와 같은 범위 지정 규칙은 일치하는 호출만 자동 승인하며, 승인이 필요한 다른 `Bash` 호출은 여전히 콜백으로 넘어갑니다. 모든 도구 호출에서 실행되어야 하는 검사의 경우 [`PreToolUse` 훅](/docs/ko/agent-sdk/hooks)을 사용합니다: 훅은 다른 모든 단계 전에 실행되고, 훅 거부는 `bypassPermissions` 모드에서도 적용됩니다.

99</Warning>101</Warning>

100 102 

101잠금된 에이전트의 경우 `allowedTools`를 `permissionMode: "dontAsk"`와 쌍으로 지정합니다:103잠금된 에이전트의 경우 `allowedTools`를 `permissionMode: "dontAsk"`와 쌍으로 지정합니다:


107};109};

108```110```

109 111 

110나열된 도구는 [모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)을 제외하고 승인되며, 프롬프트를 표시할 다른 모든 호출은 대신 거부됩니다. `default` 모드에서 승인이 필요 없는 호출은 나열 여부와 관계없이 실행됩니다. 예를 들어 [읽기 전용 Bash 명령](/docs/ko/permissions#read-only-commands), 실행 전에 묻지 않는 `Agent`와 같은 도구, 작업 디렉토리 내의 파일 읽기 등입니다. 도구를 Claude의 범위에서 완전히 제거하려면 `disallowedTools`에 단순 이름을 추가합니다.112나열된 도구는 [모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)과 [네트워크 경로에서의 읽기](/docs/ko/permissions#network-paths)를 제외하고 승인되며, 프롬프트를 표시할 다른 모든 호출은 대신 거부됩니다. `default` 모드에서 승인이 필요 없는 호출은 나열 여부와 관계없이 실행됩니다. 예를 들어 [읽기 전용 Bash 명령](/docs/ko/permissions#read-only-commands), 실행 전에 묻지 않는 `Agent`와 같은 도구, 작업 디렉터리 내의 파일 읽기 등입니다. 도구를 요청에서 완전히 제거하려면 `disallowedTools`에 단순 이름을 추가합니다.

111 113 

112<Warning>114<Warning>

113 **`allowed_tools`는 `bypassPermissions`를 제한하지 않습니다.** `allowed_tools`는 나열한 도구를 사전 승인합니다. 나열되지 않은 다른 도구는 허용 규칙과 일치하지 않으며 권한 모드로 넘어가고, 여기서 `bypassPermissions`는 이들을 승인합니다. `allowed_tools=["Read"]`를 `permission_mode="bypassPermissions"`와 함께 설정하면 `Bash`, `Write`, `Edit`을 포함한 모든 도구를 여전히 승인합니다. `bypassPermissions`가 필요하지만 특정 도구를 차단하려면 `disallowed_tools`를 사용합니다.115 **`allowed_tools`는 `bypassPermissions`를 제한하지 않습니다.** `allowed_tools`는 나열한 도구를 사전 승인합니다. 나열되지 않은 다른 도구는 허용 규칙과 일치하지 않으며 권한 모드로 넘어가고, 여기서 `bypassPermissions`는 이들을 승인합니다. `allowed_tools=["Read"]`를 `permission_mode="bypassPermissions"`와 함께 설정하면 `Bash`, `Write`, `Edit`을 포함한 모든 도구를 여전히 승인합니다. `bypassPermissions`가 필요하지만 특정 도구를 차단하려면 `disallowed_tools`를 사용합니다.


139| 모드 | 설명 | 도구 동작 |141| 모드 | 설명 | 도구 동작 |

140| :- | :- | :- |142| :- | :- | :- |

141| `default` | 표준 권한 동작 | 모드 기반 자동 승인 없음. 승인이 필요하고 허용 규칙과 일치하지 않는 호출은 `canUseTool` 콜백을 트리거합니다 |143| `default` | 표준 권한 동작 | 모드 기반 자동 승인 없음. 승인이 필요하고 허용 규칙과 일치하지 않는 호출은 `canUseTool` 콜백을 트리거합니다 |

142| `dontAsk` | 프롬프트 대신 거부 | 그렇지 않으면 프롬프트를 표시할 모든 호출이 거부됩니다. `allowed_tools` 또는 규칙으로 승인된 호출과 `default` 모드에서 승인이 필요 없는 호출은 실행되며, 조직에서 [`ask`](/docs/ko/mcp#organization-controls-on-connector-tools)로 설정한 커넥터 도구와 사용자 상호작용이 필요한 도구, 그리고 [중요 경로](/docs/ko/permission-modes#critical-paths)를 대상으로 하는 `rm` 및 `rmdir` 제거는 사전 승인했더라도 거부됩니다. `canUseTool`은 호출되지 않습니다 |144| `dontAsk` | 프롬프트 대신 거부 | 그렇지 않으면 프롬프트를 표시할 모든 호출이 거부됩니다. `allowed_tools` 또는 규칙으로 승인된 호출과 `default` 모드에서 승인이 필요 없는 호출은 실행되며, 조직에서 [`ask`](/docs/ko/mcp#organization-controls-on-connector-tools)로 설정한 커넥터 도구와 사용자 상호작용이 필요한 도구는 사전 승인했더라도 거부되고, [네트워크 경로에서의 읽기](/docs/ko/permissions#network-paths)와 [중요 경로](/docs/ko/permission-modes#critical-paths)를 대상으로 하는 `rm` 및 `rmdir` 제거도 마찬가지로 거부됩니다. `canUseTool`은 호출되지 않습니다 |

143| `acceptEdits` | 파일 편집 자동 수락 | 파일 편집 및 [파일시스템 작업](#accept-edits-mode-acceptedits)(`mkdir`, `rm`, `mv` 등)이 자동으로 승인됩니다 |145| `acceptEdits` | 파일 편집 자동 수락 | 파일 편집 및 [파일시스템 작업](#accept-edits-mode-acceptedits)(`mkdir`, `rm`, `mv` 등)이 자동으로 승인됩니다 |

144| `bypassPermissions` | 권한 확인 무시 | [모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)을 제외하고 도구가 권한 프롬프트 없이 실행됩니다. 주의해서 사용하세요 |146| `bypassPermissions` | 권한 확인 무시 | [모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)을 제외하고 도구가 권한 프롬프트 없이 실행됩니다. 주의해서 사용하세요 |

145| `plan` | 계획 모드 | Claude는 소스 파일을 편집하지 않고 탐색 및 계획을 수행합니다. 파일 편집은 자동 승인되지 않으며 `canUseTool` 콜백을 통해 프롬프트됩니다 |147| `plan` | 계획 모드 | Claude는 소스 파일을 편집하지 않고 탐색 및 계획을 수행합니다. 파일 편집은 자동 승인되지 않으며 `canUseTool` 콜백을 통해 프롬프트됩니다 |


286 묻지 않기 모드(`dontAsk`)288 묻지 않기 모드(`dontAsk`)

287</h4>289</h4>

288 290 

289`canUseTool`을 호출하지 않고 모든 권한 프롬프트를 거부로 변환합니다. `allowed_tools`, `settings.json` 허용 규칙 또는 훅으로 사전 승인된 도구와 파일 읽기(작업 디렉토리 내) 및 `Agent` 호출과 같이 `default` 모드에서 승인이 필요 없는 호출은 정상적으로 실행됩니다. 조직에서 [`ask`](/docs/ko/mcp#organization-controls-on-connector-tools)로 설정한 커넥터 도구, 사용자 상호작용이 필요한 도구, 그리고 [중요 경로](/docs/ko/permission-modes#critical-paths)를 대상으로 하는 `rm` 및 `rmdir` 제거는 허용 규칙이 일치하더라도 거부됩니다. `PreToolUse` 훅 허용도 중요 경로 제거를 해제하지 않습니다.291`canUseTool`을 호출하지 않고 모든 권한 프롬프트를 거부로 변환합니다. `allowed_tools`, `settings.json` 허용 규칙 또는 훅으로 사전 승인된 도구와 파일 읽기(작업 디렉터리 내) 및 `Agent` 호출과 같이 `default` 모드에서 승인이 필요 없는 호출은 정상적으로 실행됩니다. 조직에서 [`ask`](/docs/ko/mcp#organization-controls-on-connector-tools)로 설정한 커넥터 도구, 사용자 상호작용이 필요한 도구, [네트워크 경로에서의 읽기](/docs/ko/permissions#network-paths), 그리고 [중요 경로](/docs/ko/permission-modes#critical-paths)를 대상으로 하는 `rm` 및 `rmdir` 제거는 허용 규칙이 일치하더라도 거부됩니다. `PreToolUse` 훅 허용도 중요 경로 제거나 네트워크 경로에서의 읽기를 해제하지 않습니다.

290 292 

291**사용 시기:** 헤드리스 에이전트에 대해 고정된 명시적 도구 표면을 원하고 `canUseTool`이 없는 것에 대한 자동 의존보다 명확한 거부를 선호할 때.293**사용 시기:** 헤드리스 에이전트에 대해 고정된 명시적 도구 표면을 원하고 `canUseTool`이 없는 것에 대한 자동 의존보다 명확한 거부를 선호할 때.

292 294 

Details

518 print(session.summary)518 print(session.summary)

519```519```

520 520 

521<h3 id="fork_session">

522 `fork_session()`

523</h3>

524 

525세션의 트랜스크립트를 새 세션으로 복사하여, 원본은 그대로 유지하면서 대화를 다른 방향으로 이어갈 수 있습니다. 대화의 이전 지점에서 분기하려면 `up_to_message_id`를 전달합니다. 동기식입니다.

526 

527```python theme={null}

528def fork_session(

529 session_id: str,

530 directory: str | None = None,

531 up_to_message_id: str | None = None,

532 title: str | None = None,

533) -> ForkSessionResult

534```

535 

536<h4 id="parameters-9">

537 매개변수

538</h4>

539 

540| 매개변수 | 타입 | 기본값 | 설명 |

541| :- | :- | :- | :- |

542| `session_id` | `str` | 필수 | 분기할 세션의 UUID |

543| `directory` | `str \| None` | `None` | 프로젝트 디렉터리 경로. 생략하면 모든 프로젝트 디렉터리를 검색합니다 |

544| `up_to_message_id` | `str \| None` | `None` | 이 UUID를 가진 메시지까지(해당 메시지 포함) 트랜스크립트를 복사합니다. 예를 들어 [`get_session_messages()`](#get_session_messages)의 `uuid`를 사용할 수 있습니다. 생략하면 전체 트랜스크립트를 복사합니다 |

545| `title` | `str \| None` | `None` | 분기된 세션의 제목. 생략하면 SDK가 원본 세션에서 제목을 도출하고 뒤에 `(fork)`를 붙입니다 |

546 

547`session_id`가 새 세션의 UUID인 `ForkSessionResult`를 반환합니다. 분기된 세션을 계속하려면 이 값을 [`resume`](#claudeagentoptions)으로 전달합니다. 분기된 세션에는 원본 세션의 [파일 체크포인트](/docs/ko/agent-sdk/file-checkpointing)가 포함되지 않으므로, 분기 이전에 캡처된 체크포인트로 되돌릴 수 없습니다.

548 

549`fork_session()`은 다음 경우에 예외를 발생시킵니다:

550 

551* `ValueError`: `session_id` 또는 `up_to_message_id`가 유효한 UUID가 아닌 경우

552* `ValueError`: 세션에 메시지가 없거나, `up_to_message_id`가 트랜스크립트의 어떤 메시지와도 일치하지 않는 경우

553* `FileNotFoundError`: 세션을 찾을 수 없는 경우

554 

555<h4 id="example-8">

556 예제

557</h4>

558 

559가장 최신 세션을 새 제목으로 분기한 다음, 분기된 세션을 재개합니다. 원본 세션은 자체 기록을 유지합니다.

560 

561```python theme={null}

562from claude_agent_sdk import fork_session, list_sessions

563 

564sessions = list_sessions(directory="/path/to/project", limit=1)

565if sessions:

566 forked = fork_session(sessions[0].session_id, title="Try the OAuth approach")

567 print(forked.session_id) # pass as ClaudeAgentOptions(resume=...) to continue the fork

568```

569 

521<h2 id="classes">570<h2 id="classes">

522 클래스571 클래스

523</h2>572</h2>


919| 속성 | 타입 | 기본값 | 설명 |968| 속성 | 타입 | 기본값 | 설명 |

920| :- | :- | :- | :- |969| :- | :- | :- | :- |

921| `tools` | `list[str] \| ToolsPreset \| None` | `None` | 도구 구성. Claude Code의 기본 도구를 위해 `{"type": "preset", "preset": "claude_code"}` 사용 |970| `tools` | `list[str] \| ToolsPreset \| None` | `None` | 도구 구성. Claude Code의 기본 도구를 위해 `{"type": "preset", "preset": "claude_code"}` 사용 |

922| `allowed_tools` | `list[str]` | `[]` | 프롬프트 없이 자동 승인할 도구. 이것은 Claude를 이 도구로만 제한하지 않습니다. [작업 추적 도구](/docs/ko/agent-sdk/todo-tracking#model-availability) 중 하나를 여기에 명명하면 Claude Code도 세션을 옵트인합니다. 나열되지 않은 도구는 `permission_mode` 및 `can_use_tool`로 넘어갑니다. `disallowed_tools`를 사용하여 도구를 차단합니다. [권한](/docs/ko/agent-sdk/permissions#allow-and-deny-rules) 참조 |971| `allowed_tools` | `list[str]` | `[]` | 프롬프트 없이 자동 승인할 도구. 단, [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기는 제외됩니다. 이것은 Claude를 이 도구로만 제한하지 않습니다. [작업 추적 도구](/docs/ko/agent-sdk/todo-tracking#model-availability) 중 하나를 여기에 명명하면 Claude Code도 세션을 옵트인합니다. 나열되지 않은 도구는 `permission_mode` 및 `can_use_tool`로 넘어갑니다. `disallowed_tools`를 사용하여 도구를 차단합니다. [권한](/docs/ko/agent-sdk/permissions#allow-and-deny-rules) 참조 |

923| `system_prompt` | `str \| SystemPromptPreset \| SystemPromptCustom \| SystemPromptFile \| None` | `None` | 시스템 프롬프트 구성. 사용자 정의 프롬프트의 경우 문자열을 전달하거나, Claude Code의 시스템 프롬프트를 위해 선택적 `"append"`와 함께 `{"type": "preset", "preset": "claude_code"}`를 사용하거나, 사용자 정의 프롬프트를 위해 `{"type": "custom", "prompt": "..."}` 형식으로 `"snapshot"`도 설정할 수 있거나, 디스크에서 큰 프롬프트를 로드하기 위해 `{"type": "file", "path": "..."}` 형식을 사용합니다. [`SystemPromptPreset`](#systempromptpreset), [`SystemPromptCustom`](#systempromptcustom) 및 [`SystemPromptFile`](#systempromptfile) 참조 |972| `system_prompt` | `str \| SystemPromptPreset \| SystemPromptCustom \| SystemPromptFile \| None` | `None` | 시스템 프롬프트 구성. 사용자 정의 프롬프트의 경우 문자열을 전달하거나, Claude Code의 시스템 프롬프트를 위해 선택적 `"append"`와 함께 `{"type": "preset", "preset": "claude_code"}`를 사용하거나, 사용자 정의 프롬프트를 위해 `{"type": "custom", "prompt": "..."}` 형식으로 `"snapshot"`도 설정할 수 있거나, 디스크에서 큰 프롬프트를 로드하기 위해 `{"type": "file", "path": "..."}` 형식을 사용합니다. [`SystemPromptPreset`](#systempromptpreset), [`SystemPromptCustom`](#systempromptcustom) 및 [`SystemPromptFile`](#systempromptfile) 참조 |

924| `mcp_servers` | `dict[str, McpServerConfig] \| str \| Path` | `{}` | MCP 서버 구성 또는 설정 파일 경로 |973| `mcp_servers` | `dict[str, McpServerConfig] \| str \| Path` | `{}` | MCP 서버 구성 또는 설정 파일 경로 |

925| `strict_mcp_config` | `bool` | `False` | `True`일 때, `mcp_servers`에 전달된 서버만 사용하고 프로젝트 `.mcp.json`, 사용자 설정, 플러그인 제공 MCP 서버 및 [claude.ai 커넥터](/docs/ko/mcp#use-mcp-servers-from-claude-ai)를 무시합니다. CLI `--strict-mcp-config` 플래그에 매핑됩니다 |974| `strict_mcp_config` | `bool` | `False` | `True`일 때, `mcp_servers`에 전달된 서버만 사용하고 프로젝트 `.mcp.json`, 사용자 설정, 플러그인 제공 MCP 서버 및 [claude.ai 커넥터](/docs/ko/mcp#use-mcp-servers-from-claude-ai)를 무시합니다. CLI `--strict-mcp-config` 플래그에 매핑됩니다 |


1846* `api_error_status`: 종료 API 오류의 HTTP 상태 코드입니다. 턴이 오류 없이 끝났을 때 `None`입니다. `subtype="success"`에서만 채워집니다.1895* `api_error_status`: 종료 API 오류의 HTTP 상태 코드입니다. 턴이 오류 없이 끝났을 때 `None`입니다. `subtype="success"`에서만 채워집니다.

1847* `result`: `subtype="success"`에서 최종 어시스턴트 메시지의 텍스트이거나, `error_*` 서브타입에서 `None`입니다. `subtype="success"`이고 `is_error=True`일 때, 이는 사용 가능한 경우 API 오류 문자열을 보유하지만 비어 있을 수 있으므로 `api_error_status`와 이전 `AssistantMessage` 콘텐츠를 확인하십시오.1896* `result`: `subtype="success"`에서 최종 어시스턴트 메시지의 텍스트이거나, `error_*` 서브타입에서 `None`입니다. `subtype="success"`이고 `is_error=True`일 때, 이는 사용 가능한 경우 API 오류 문자열을 보유하지만 비어 있을 수 있으므로 `api_error_status`와 이전 `AssistantMessage` 콘텐츠를 확인하십시오.

1848* `errors`: 최대 턴 메시지와 같은 루프 수준 오류 문자열입니다. `error_*` 서브타입에서만 채워집니다.1897* `errors`: 최대 턴 메시지와 같은 루프 수준 오류 문자열입니다. `error_*` 서브타입에서만 채워집니다.

1849* `terminal_reason`: 쿼리 루프가 끝난 이유입니다 (예: `"completed"`, `"max_turns"`, `"api_error"`, `"aborted_streaming"` 또는 `"aborted_tools"`). `"aborted_streaming"` 또는 `"aborted_tools"` 값은 턴이 완료되기 전에 중단되었음을 의미합니다. 일반적인 원인은 [`interrupt()`](#claudesdkclient)와 `interrupt=True`를 사용하여 [`PermissionResultDeny`](#permissionresultdeny)를 반환하는 권한 콜백입니다. CLI 버전이 필드보다 앞서거나, `/voice` 또는 `/usage`와 같은 로컬 명령의 결과에서 `None`입니다. 이는 쿼리 루프를 우회하거나 세션이 치명적으로 실패할 때 발생하는 합성 오류 결과에서 `None`입니다. TypeScript SDK의 [`SDKResultMessage.terminal_reason`](/docs/ko/agent-sdk/typescript#sdkresultmessage)을 미러링하며, 이는 전체 값 집합을 나열합니다.1898* `terminal_reason`: 쿼리 루프가 끝난 이유입니다 (예: `"completed"`, `"max_turns"`, `"api_error"`, `"aborted_streaming"` 또는 `"aborted_tools"`). `"aborted_streaming"` 또는 `"aborted_tools"` 값은 턴이 완료되기 전에 중단되었음을 의미합니다. 일반적인 원인은 [`interrupt()`](#claudesdkclient)와 `interrupt=True`를 사용하여 [`PermissionResultDeny`](#permissionresultdeny)를 반환하는 권한 콜백입니다. 이 필드가 도입되기 이전의 CLI 버전, 쿼리 루프를 우회하는 `/voice` 또는 `/usage`와 같은 로컬 명령의 결과, 또는 세션이 치명적으로 실패할 때 발생하는 합성 오류 결과에서는 `None`입니다. TypeScript SDK의 [`SDKResultMessage.terminal_reason`](/docs/ko/agent-sdk/typescript#sdkresultmessage)을 미러링하며, 이는 전체 값 집합을 나열합니다.

1850* `origin`: 이 턴을 트리거한 사용자 메시지의 출처입니다. [스트리밍 입력 모드](/docs/ko/agent-sdk/streaming-vs-single-mode)에서 이를 확인하여 `origin`이 `None` 또는 `{"kind": "human"}`인 자신의 프롬프트 결과를 배경 작업 알림과 같은 주입된 턴의 결과와 구별하십시오. Python Agent SDK 0.2.137 이상이 필요합니다.1899* `origin`: 이 턴을 트리거한 사용자 메시지의 출처입니다. [스트리밍 입력 모드](/docs/ko/agent-sdk/streaming-vs-single-mode)에서 이를 확인하여 `origin`이 `None` 또는 `{"kind": "human"}`인 자신의 프롬프트 결과를 배경 작업 알림과 같은 주입된 턴의 결과와 구별하십시오. Python Agent SDK 0.2.137 이상이 필요합니다.

1851 1900 

1901여러 백그라운드 작업이 비슷한 시점에 완료되면 Claude Code는 각 알림에 하나씩 턴을 사용하는 대신 하나의 턴에서 모든 알림에 응답할 수 있습니다. 이 경우에도 알림마다 하나의 `ResultMessage`를 순서대로 수신하며, 각각 `kind`가 `"task-notification"`인 `origin`을 가집니다. 마지막 것을 제외한 모든 결과는 `num_turns`가 `0`으로 설정되고 `result`가 비어 있으며, 마지막 결과가 모든 알림에 응답하는 턴을 전달합니다.

1902 

1852`usage` dict는 주 에이전트 루프만 포함하고 서브에이전트 및 기타 중첩되거나 보조적인 모델 호출을 제외합니다. [스트리밍 입력 모드](/docs/ko/agent-sdk/streaming-vs-single-mode)에서 값은 턴별입니다. 토큰 및 비용 회계의 경우 `model_usage`를 선호하십시오. `usage` dict는 존재할 때 다음 키를 포함합니다:1903`usage` dict는 주 에이전트 루프만 포함하고 서브에이전트 및 기타 중첩되거나 보조적인 모델 호출을 제외합니다. [스트리밍 입력 모드](/docs/ko/agent-sdk/streaming-vs-single-mode)에서 값은 턴별입니다. 토큰 및 비용 회계의 경우 `model_usage`를 선호하십시오. `usage` dict는 존재할 때 다음 키를 포함합니다:

1853 1904 

1854| 키 | 타입 | 설명 |1905| 키 | 타입 | 설명 |

Details

360* [`renameSession()`](/docs/ko/agent-sdk/typescript#renamesession)360* [`renameSession()`](/docs/ko/agent-sdk/typescript#renamesession)

361* [`tagSession()`](/docs/ko/agent-sdk/typescript#tagsession)361* [`tagSession()`](/docs/ko/agent-sdk/typescript#tagsession)

362* [`deleteSession()`](/docs/ko/agent-sdk/typescript)362* [`deleteSession()`](/docs/ko/agent-sdk/typescript)

363* [`forkSession()`](/docs/ko/agent-sdk/typescript)363* [`forkSession()`](/docs/ko/agent-sdk/typescript#forksession)

364* [`listSubagents()`](/docs/ko/agent-sdk/typescript)364* [`listSubagents()`](/docs/ko/agent-sdk/typescript)

365* [`getSubagentMessages()`](/docs/ko/agent-sdk/typescript)365* [`getSubagentMessages()`](/docs/ko/agent-sdk/typescript)

366 366 

Details

293 293 

294 모든 작업 디렉토리에서 재개할 수 있습니다:294 모든 작업 디렉토리에서 재개할 수 있습니다:

295 295 

296 * **크로스 디렉토리 조회**: Claude Code는 현재 프로젝트 디렉토리를 넘어 ID를 찾기 위해 검색합니다. 정확한 조회 순서와 중복 복사본 처리 방법은 [세션 재개](/docs/ko/sessions#resume-a-session)를 참조합니다.296 * **크로스 디렉터리 조회**: Claude Code는 현재 프로젝트 디렉터리를 넘어 ID를 찾기 위해 검색합니다. 정확한 조회 순서와 중복 복사본 처리 방법은 [세션 재개](/docs/ko/sessions#where-the-session-picker-looks)를 참조합니다.

297 * **같은 머신만**: 세션 파일은 여전히 현재 머신에 존재해야 합니다.297 * **같은 머신만**: 세션 파일은 여전히 현재 머신에 존재해야 합니다.

298 298 

299 v2.1.223 이전에는 조회가 현재 프로젝트 디렉토리 및 git worktrees로 범위가 지정되었습니다. 더 오래된 CLI를 번들로 제공하는 SDK 버전은 여전히 이렇게 동작합니다.299 v2.1.223 이전에는 조회가 현재 프로젝트 디렉토리 및 git worktrees로 범위가 지정되었습니다. 더 오래된 CLI를 번들로 제공하는 SDK 버전은 여전히 이렇게 동작합니다.


423 423 

424* **세션 파일을 이동합니다.** 첫 번째 실행에서 `~/.claude/projects/<encoded-cwd>/<session-id>.jsonl`을 유지하고 `resume`을 호출하기 전에 새 호스트의 `~/.claude/projects/` 아래의 모든 디렉터리 내에 복원합니다.424* **세션 파일을 이동합니다.** 첫 번째 실행에서 `~/.claude/projects/<encoded-cwd>/<session-id>.jsonl`을 유지하고 `resume`을 호출하기 전에 새 호스트의 `~/.claude/projects/` 아래의 모든 디렉터리 내에 복원합니다.

425 425 

426 Claude Code는 현재 프로젝트 디렉터리를 넘어 ID를 찾기 위해 검색합니다. 정확한 조회 순서와 중복 복사본이 처리되는 방식은 [세션 재개](/docs/ko/sessions#resume-a-session)를 참조하십시오. v2.1.223 이전에는 조회가 현재 프로젝트 디렉터리와 해당 git worktrees로 범위가 지정되었습니다. 더 오래된 CLI를 번들로 제공하는 SDK 버전은 여전히 이런 방식으로 동작합니다.426 Claude Code는 현재 프로젝트 디렉터리를 넘어 ID를 찾기 위해 검색합니다. 정확한 조회 순서와 중복 복사본이 처리되는 방식은 [세션 재개](/docs/ko/sessions#where-the-session-picker-looks)를 참조하십시오. v2.1.223 이전에는 조회가 현재 프로젝트 디렉터리와 해당 git worktrees로 범위가 지정되었습니다. 더 오래된 CLI를 번들로 제공하는 SDK 버전은 여전히 이런 방식으로 동작합니다.

427 427 

428* **세션 재개에 의존하지 않기.** 필요한 결과 (분석 출력, 결정, 파일 diff)를 애플리케이션 상태로 캡처하고 새 세션의 프롬프트에 전달합니다. 이는 종종 트랜스크립트 파일을 주변에 배송하는 것보다 더 견고합니다.428* **세션 재개에 의존하지 않기.** 필요한 결과 (분석 출력, 결정, 파일 diff)를 애플리케이션 상태로 캡처하고 새 세션의 프롬프트에 전달합니다. 이는 종종 트랜스크립트 파일을 주변에 배송하는 것보다 더 견고합니다.

429 429 

Details

124 124 

125부분 메시지가 활성화되지 않은 경우, `StreamEvent`를 제외한 모든 메시지 유형을 수신합니다. 일반적인 유형으로는 `SystemMessage` (세션 초기화), `AssistantMessage` (완전한 콘텐츠 블록), `ResultMessage` (최종 결과), 그리고 대화 기록이 압축되었을 때를 나타내는 컴팩트 경계 메시지 (TypeScript의 `SDKCompactBoundaryMessage`; Python의 `SystemMessage`와 서브타입 `"compact_boundary"`)가 있습니다.125부분 메시지가 활성화되지 않은 경우, `StreamEvent`를 제외한 모든 메시지 유형을 수신합니다. 일반적인 유형으로는 `SystemMessage` (세션 초기화), `AssistantMessage` (완전한 콘텐츠 블록), `ResultMessage` (최종 결과), 그리고 대화 기록이 압축되었을 때를 나타내는 컴팩트 경계 메시지 (TypeScript의 `SDKCompactBoundaryMessage`; Python의 `SystemMessage`와 서브타입 `"compact_boundary"`)가 있습니다.

126 126 

127<h3 id="handle-a-stream-that’s-cut-off">

128 중단된 스트림 처리하기

129</h3>

130 

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

132 

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

134 

127<h2 id="stream-tool-calls">135<h2 id="stream-tool-calls">

128 도구 호출 스트리밍136 도구 호출 스트리밍

129</h2>137</h2>

Details

464| `tag` | `string \| null` | 필수 | 태그 문자열 또는 지우려면 `null` |464| `tag` | `string \| null` | 필수 | 태그 문자열 또는 지우려면 `null` |

465| `options.dir` | `string` | `undefined` | 프로젝트 디렉터리 경로입니다. 생략하면 모든 프로젝트 디렉터리를 검색합니다 |465| `options.dir` | `string` | `undefined` | 프로젝트 디렉터리 경로입니다. 생략하면 모든 프로젝트 디렉터리를 검색합니다 |

466 466 

467<h3 id="forksession">

468 `forkSession()`

469</h3>

470 

471세션의 트랜스크립트를 새 세션으로 복사하여 원본은 그대로 유지하면서 대화를 다른 방향으로 이어갈 수 있습니다. 대화의 이전 지점에서 분기하려면 `upToMessageId`를 전달합니다.

472 

473```typescript theme={null}

474function forkSession(

475 sessionId: string,

476 options?: ForkSessionOptions

477): Promise<ForkSessionResult>;

478```

479 

480<h4 id="parameters-10">

481 매개변수

482</h4>

483 

484| 매개변수 | 유형 | 기본값 | 설명 |

485| :- | :- | :- | :- |

486| `sessionId` | `string` | 필수 | 분기할 세션의 UUID |

487| `options.dir` | `string` | `undefined` | 프로젝트 디렉터리 경로입니다. 생략하면 모든 프로젝트 디렉터리를 검색합니다 |

488| `options.upToMessageId` | `string` | `undefined` | 이 `uuid`를 가진 메시지까지(해당 메시지 포함) 트랜스크립트를 복사합니다. 값은 [`getSessionMessages()`](#getsessionmessages)에서 얻은 값이거나 스트리밍된 [`SDKUserMessage`](#sdkusermessage)에 직접 설정한 `uuid`입니다. 생략하면 전체 트랜스크립트를 복사합니다 |

489| `options.title` | `string` | `undefined` | 분기된 세션의 제목입니다. 생략하면 SDK가 원본 세션에서 제목을 파생하고 뒤에 `(fork)`를 붙입니다 |

490 

491새 세션의 UUID인 `{ sessionId }`를 반환합니다. 분기된 세션을 계속하려면 이를 [`resume`](#options)으로 전달합니다. 분기된 세션에는 원본 세션의 [파일 체크포인트](/docs/ko/agent-sdk/file-checkpointing)가 포함되지 않으므로 분기 이전에 캡처된 체크포인트로 되감을 수 없습니다.

492 

493`forkSession()`은 다음 경우에 throw합니다:

494 

495* `sessionId`가 UUID가 아닌 경우

496* 세션을 찾을 수 없거나 세션에 메시지가 없는 경우

497* `upToMessageId`가 트랜스크립트의 어떤 메시지와도 일치하지 않는 경우

498 

467<h3 id="resolvesettings">499<h3 id="resolvesettings">

468 `resolveSettings()`500 `resolveSettings()`

469</h3>501</h3>


486): Promise<ResolvedSettings>;518): Promise<ResolvedSettings>;

487```519```

488 520 

489<h4 id="parameters-10">521<h4 id="parameters-11">

490 매개변수522 매개변수

491</h4>523</h4>

492 524 


547| `agents` | `Record<string, [`AgentDefinition`](#agentdefinition)>` | `undefined` | 서브에이전트를 프로그래밍 방식으로 정의합니다 |579| `agents` | `Record<string, [`AgentDefinition`](#agentdefinition)>` | `undefined` | 서브에이전트를 프로그래밍 방식으로 정의합니다 |

548| `agentProgressSummaries` | `boolean` | `false` | `true`이면 서브에이전트에 대한 한 줄 진행 요약을 생성하고 `summary` 필드를 통해 [`task_progress`](#sdktaskprogressmessage) 이벤트로 전달합니다. 포그라운드 및 백그라운드 서브에이전트 모두에 적용됩니다 |580| `agentProgressSummaries` | `boolean` | `false` | `true`이면 서브에이전트에 대한 한 줄 진행 요약을 생성하고 `summary` 필드를 통해 [`task_progress`](#sdktaskprogressmessage) 이벤트로 전달합니다. 포그라운드 및 백그라운드 서브에이전트 모두에 적용됩니다 |

549| `allowDangerouslySkipPermissions` | `boolean` | `false` | 권한 우회를 활성화합니다. 시작 시 또는 이후 `setPermissionMode()`를 통해 `permissionMode: 'bypassPermissions'`를 사용할 때 필요합니다. `permissionMode: 'plan'`과의 상호 작용 방식은 [플랜 모드](/docs/ko/agent-sdk/permissions#plan-mode-plan)를 참조하세요 |581| `allowDangerouslySkipPermissions` | `boolean` | `false` | 권한 우회를 활성화합니다. 시작 시 또는 이후 `setPermissionMode()`를 통해 `permissionMode: 'bypassPermissions'`를 사용할 때 필요합니다. `permissionMode: 'plan'`과의 상호 작용 방식은 [플랜 모드](/docs/ko/agent-sdk/permissions#plan-mode-plan)를 참조하세요 |

550| `allowedTools` | `string[]` | `[]` | 확인을 요청하지 않고 자동 승인할 도구입니다. Claude가 이 도구만 사용하도록 제한하지는 않습니다. 여기에 [작업 추적 도구](/docs/ko/agent-sdk/todo-tracking#model-availability) 중 하나를 지정하면 Claude Code는 세션에서도 해당 기능을 활성화합니다. 목록에 없는 다른 도구는 `permissionMode`와 `canUseTool`로 넘어갑니다. 도구를 차단하려면 `disallowedTools`를 사용하세요. [권한](/docs/ko/agent-sdk/permissions#allow-and-deny-rules)을 참조하세요 |582| `allowedTools` | `string[]` | `[]` | [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기를 제외하고, 확인을 요청하지 않고 자동 승인할 도구입니다. Claude가 이 도구만 사용하도록 제한하지는 않습니다. 여기에 [작업 추적 도구](/docs/ko/agent-sdk/todo-tracking#model-availability) 중 하나를 지정하면 Claude Code는 세션에서도 해당 기능을 사용하도록 설정합니다. 목록에 없는 다른 도구는 `permissionMode`와 `canUseTool`로 넘어갑니다. 도구를 차단하려면 `disallowedTools`를 사용하세요. [권한](/docs/ko/agent-sdk/permissions#allow-and-deny-rules)을 참조하세요 |

551| `betas` | [`SdkBeta`](#sdkbeta)`[]` | `[]` | 베타 기능을 활성화합니다 |583| `betas` | [`SdkBeta`](#sdkbeta)`[]` | `[]` | 베타 기능을 활성화합니다 |

552| `canUseTool` | [`CanUseTool`](#canusetool) | `undefined` | 사용자 지정 권한 함수로, [권한 흐름](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated)이 프롬프트로 넘어갈 때만 호출됩니다. `allowedTools`, 허용 규칙 또는 `permissionMode`에 의해 자동 승인된 호출에는 호출되지 않습니다. 허용 규칙은 [어떤 모드도 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)을 미리 승인하지 않습니다. 자세한 내용은 [`CanUseTool`](#canusetool)을 참조하세요 |584| `canUseTool` | [`CanUseTool`](#canusetool) | `undefined` | 사용자 지정 권한 함수로, [권한 흐름](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated)이 프롬프트로 넘어갈 때만 호출됩니다. `allowedTools`, 허용 규칙 또는 `permissionMode`에 의해 자동 승인된 호출에는 호출되지 않습니다. 허용 규칙은 [어떤 모드도 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)을 미리 승인하지 않습니다. 자세한 내용은 [`CanUseTool`](#canusetool)을 참조하세요 |

553| `continue` | `boolean` | `false` | 가장 최근 대화를 이어갑니다 |585| `continue` | `boolean` | `false` | 가장 최근 대화를 이어갑니다 |


1588 1620 

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

1590 1622 

1591Claude Code는 [`user_message_uuid`](#user_message_uuid)에 설명된 조건에 따라 턴의 첫 번째 어시스턴트 메시지에 `user_message_uuid`와 `user_message_uuids`를 설정합니다. 재시작으로 중단된 턴을 Claude Code가 다시 실행할 때, 해당 필드를 가진 재실행의 어시스턴트 메시지에는 [`resume_reason`](#resume_reason)도 포함됩니다.1623Claude Code는 [`user_message_uuid`](#user_message_uuid)에 설명된 조건에 따라 턴의 첫 번째 어시스턴트 메시지에 `user_message_uuid`와 `user_message_uuids`를 설정합니다. 재시작으로 중단된 턴을 이어가는 턴인 경우, 해당 필드를 포함하는 어시스턴트 메시지에는 [`resume_reason`](#resume_reason)도 포함됩니다.

1592 1624 

1593`timestamp`는 메시지를 생성한 프로세스에서 메시지 콘텐츠 생성이 완료된 ISO 8601 시각입니다. 이 값은 해당 머신의 시계에서 가져오므로 표시 용도로만 사용하고 메시지 정렬에는 사용하지 마세요. 하나의 API 턴이 같은 `message.id`를 공유하는 여러 어시스턴트 메시지를 생성할 수 있으며, 각 메시지는 고유한 `timestamp`를 가집니다. 이 필드가 없으면 메시지를 수신한 시각을 대신 사용하세요.1625`timestamp`는 메시지를 생성한 프로세스에서 메시지 콘텐츠 생성이 완료된 ISO 8601 시각입니다. 이 값은 해당 머신의 시계에서 가져오므로 표시 용도로만 사용하고 메시지 정렬에는 사용하지 마세요. 하나의 API 턴이 같은 `message.id`를 공유하는 여러 어시스턴트 메시지를 생성할 수 있으며, 각 메시지는 고유한 `timestamp`를 가집니다. 이 필드가 없으면 메시지를 수신한 시각을 대신 사용하세요.

1594 1626 


1631 1663 

1632`message.content` 중 사용자가 입력하지 않고 붙여 넣은 부분을 Claude Code에 알리려면 `inline_pastes`를 설정합니다. 붙여 넣기 한 번당 하나의 문자열입니다. 프롬프트 텍스트는 사용자가 넣은 위치에 그대로 유지됩니다. Claude Code는 나열된 각 붙여 넣기를 해당 위치에서 `<pasted_content>` 태그로 감쌀 수 있으므로, Claude는 붙여 넣은 자료와 사용자가 직접 쓴 말을 구별할 수 있습니다. 프롬프트의 마지막 텍스트 블록에 있는 붙여 넣기만 감싸집니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다.1664`message.content` 중 사용자가 입력하지 않고 붙여 넣은 부분을 Claude Code에 알리려면 `inline_pastes`를 설정합니다. 붙여 넣기 한 번당 하나의 문자열입니다. 프롬프트 텍스트는 사용자가 넣은 위치에 그대로 유지됩니다. Claude Code는 나열된 각 붙여 넣기를 해당 위치에서 `<pasted_content>` 태그로 감쌀 수 있으므로, Claude는 붙여 넣은 자료와 사용자가 직접 쓴 말을 구별할 수 있습니다. 프롬프트의 마지막 텍스트 블록에 있는 붙여 넣기만 감싸집니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다.

1633 1665 

1666각 붙여넣기 필드에는 크기 제한이 있습니다.

1667 

1668* `pasted_content`: 항목과 그 안의 콘텐츠 블록을 합한 수가 1,000개를 넘으면 Claude Code는 필드 전체를 무시합니다.

1669* `inline_pastes`: Claude Code는 비어 있지 않은 처음 100개 항목을 사용하고 나머지는 무시합니다.

1670 

1634보내는 메시지를 Claude Code가 처리하는 방식을 바꾸려면 `shouldQuery`, `client_composed`, 또는 `priority`를 설정합니다.1671보내는 메시지를 Claude Code가 처리하는 방식을 바꾸려면 `shouldQuery`, `client_composed`, 또는 `priority`를 설정합니다.

1635 1672 

1636* `shouldQuery`: `false`로 설정하면 어시스턴트 턴을 트리거하지 않고 메시지를 트랜스크립트에 추가합니다. 메시지는 보류되었다가 턴을 트리거하는 다음 사용자 메시지에 병합됩니다. 별도로 실행한 명령의 출력처럼 모델 호출을 소비하지 않고 컨텍스트를 주입할 때 사용합니다.1673* `shouldQuery`: `false`로 설정하면 어시스턴트 턴을 트리거하지 않고 메시지를 트랜스크립트에 추가합니다. 메시지는 보류되었다가 턴을 트리거하는 다음 사용자 메시지에 병합됩니다. 별도로 실행한 명령의 출력처럼 모델 호출을 소비하지 않고 컨텍스트를 주입할 때 사용합니다.


1661* `'now'` 메시지를 전달하기 위해 Claude Code가 백그라운드로 이동한 WebFetch 또는 WebSearch 호출: 해당 호출의 `tool_result`를 담은 사용자 메시지에서 `tool_use_result`는 `{ detachedToolCall: true }`로 설정됩니다. 호출은 계속 실행 중이며, Claude는 호출이 끝나면 결과를 받습니다. 해당 `tool_use_id`에 대한 두 번째 `tool_result`는 뒤따르지 않으므로, 애플리케이션에서 도구 호출마다 행을 그린다면 이 메시지가 도착할 때 해당 행을 백그라운드로 이동됨으로 표시하세요. Claude Code v2.1.287 이상이 필요합니다.1698* `'now'` 메시지를 전달하기 위해 Claude Code가 백그라운드로 이동한 WebFetch 또는 WebSearch 호출: 해당 호출의 `tool_result`를 담은 사용자 메시지에서 `tool_use_result`는 `{ detachedToolCall: true }`로 설정됩니다. 호출은 계속 실행 중이며, Claude는 호출이 끝나면 결과를 받습니다. 해당 `tool_use_id`에 대한 두 번째 `tool_result`는 뒤따르지 않으므로, 애플리케이션에서 도구 호출마다 행을 그린다면 이 메시지가 도착할 때 해당 행을 백그라운드로 이동됨으로 표시하세요. Claude Code v2.1.287 이상이 필요합니다.

1662* 결과에 `resource_link` 블록이 포함된 MCP 도구: `tool_use_result`는 [`SDKMcpResourceLink`](#sdkmcpresourcelink) 항목의 `resourceLinks` 배열을 가진 객체입니다. Claude는 각 링크를 `tool_result` 블록의 텍스트 한 줄로 받으므로, 해당 텍스트를 파싱하는 대신 `resourceLinks`를 읽어 서버가 반환한 파일을 렌더링하세요. Claude Code는 결과에 링크가 없을 때와 서브에이전트의 결과에서는 `resourceLinks`를 생략하고, 결과당 최대 50개의 링크를 유지하며, 배열이 직렬화된 JSON 기준 64KiB에 도달하면 링크 추가를 중단합니다. `resourceLinks`에는 Agent SDK v0.3.257 이상이 필요합니다.1699* 결과에 `resource_link` 블록이 포함된 MCP 도구: `tool_use_result`는 [`SDKMcpResourceLink`](#sdkmcpresourcelink) 항목의 `resourceLinks` 배열을 가진 객체입니다. Claude는 각 링크를 `tool_result` 블록의 텍스트 한 줄로 받으므로, 해당 텍스트를 파싱하는 대신 `resourceLinks`를 읽어 서버가 반환한 파일을 렌더링하세요. Claude Code는 결과에 링크가 없을 때와 서브에이전트의 결과에서는 `resourceLinks`를 생략하고, 결과당 최대 50개의 링크를 유지하며, 배열이 직렬화된 JSON 기준 64KiB에 도달하면 링크 추가를 중단합니다. `resourceLinks`에는 Agent SDK v0.3.257 이상이 필요합니다.

1663* [`structuredContent`](#calltoolresult)를 반환하는 MCP 도구: `tool_use_result`는 `structuredContent` 멤버에 서버가 보낸 내용을, `content` 멤버에 [`McpOutput`](#mcpoutput) 값을 담은 객체입니다. 서브에이전트의 결과에는 `structuredContent`가 포함되지 않습니다.1700* [`structuredContent`](#calltoolresult)를 반환하는 MCP 도구: `tool_use_result`는 `structuredContent` 멤버에 서버가 보낸 내용을, `content` 멤버에 [`McpOutput`](#mcpoutput) 값을 담은 객체입니다. 서브에이전트의 결과에는 `structuredContent`가 포함되지 않습니다.

1664* `structuredContent`가 1,048,576자를 초과하는 JSON으로 직렬화되는 MCP 도구: Claude Code는 `tool_use_result`에서 `structuredContent`를 제외하고 그 자리에 `structuredContentOmitted: true`를 설정하므로, 애플리케이션은 누락된 객체와 아무것도 보내지 않은 도구를 구별할 수 있습니다. `content`와 `resourceLinks` 같은 다른 멤버는 유지되며, Claude가 받는 내용은 변하지 않습니다. [프로세스 내 SDK 서버](/docs/ko/agent-sdk/custom-tools)의 도구와 `tools/list` 항목에서 [MCP Apps `_meta.ui` 리소스](#mcpserverstatus)를 선언한 도구는 예외이며 객체 전체를 전달합니다. Claude Code v2.1.287 이상에서 이 상한이 적용됩니다.1701* `structuredContent`가 JSON으로 직렬화했을 때 1,048,576자를 넘는 MCP 도구: Claude Code는 `tool_use_result`에서 `structuredContent`를 제외하고 그 자리에 `structuredContentOmitted: true`를 설정하므로, 애플리케이션은 삭제된 객체와 아무것도 보내지 않은 도구를 구분할 수 있습니다. `content`와 `resourceLinks` 같은 다른 멤버는 유지되며, Claude가 받는 내용은 바뀌지 않습니다. Claude Code v2.1.287 이상에서 이 상한을 적용합니다. 두 종류의 도구는 다르게 동작합니다.

1702 * [인프로세스 SDK 서버](/docs/ko/agent-sdk/custom-tools)의 도구는 예외이며 객체 전체를 전달합니다.

1703 * `tools/list` 항목에 [MCP Apps `ui://` 리소스](#mcpserverstatus)를 선언한 도구는 Claude Code v2.1.295 이상에서 8,388,608자로 제한되며, v2.1.295 이전 버전에서는 예외로 처리됩니다.

1665 1704 

1666<h3 id="sdkusermessagereplay">1705<h3 id="sdkusermessagereplay">

1667 `SDKUserMessageReplay`1706 `SDKUserMessageReplay`


1775* `ttft_stream_ms`: 응답 스트림이 열리는 첫 번째 `message_start` 스트림 이벤트까지의 시간(밀리초)입니다. `ttft_ms`보다 작으며, 둘 사이의 차이는 첫 번째 메시지를 스트리밍하는 데 걸린 시간입니다. success 분기에만 있습니다.1814* `ttft_stream_ms`: 응답 스트림이 열리는 첫 번째 `message_start` 스트림 이벤트까지의 시간(밀리초)입니다. `ttft_ms`보다 작으며, 둘 사이의 차이는 첫 번째 메시지를 스트리밍하는 데 걸린 시간입니다. success 분기에만 있습니다.

1776* `user_message_uuid`: 이 턴이 응답한, 사용자가 보낸 메시지의 `uuid`입니다. 어떤 결과에 포함되는지는 [`user_message_uuid`](#user_message_uuid)를 참조하세요.1815* `user_message_uuid`: 이 턴이 응답한, 사용자가 보낸 메시지의 `uuid`입니다. 어떤 결과에 포함되는지는 [`user_message_uuid`](#user_message_uuid)를 참조하세요.

1777* `user_message_uuids`: 이 턴에서 Claude Code가 응답한, 사용자가 보낸 모든 메시지의 `uuid`입니다. [`user_message_uuids`](#user_message_uuids)를 참조하세요.1816* `user_message_uuids`: 이 턴에서 Claude Code가 응답한, 사용자가 보낸 모든 메시지의 `uuid`입니다. [`user_message_uuids`](#user_message_uuids)를 참조하세요.

1778* `resume_reason`: 재시작으로 중단된 이 턴을 Claude Code가 다시 실행한 이유입니다. 두 분기 모두에 있습니다. [`resume_reason`](#resume_reason)을 참조하십시오.1817* `resume_reason`: 이 턴이 재시작으로 중단된 턴을 이어가는 이유입니다. 두 분기 모두에 있습니다. [`resume_reason`](#resume_reason)을 참조하세요.

1779* `local_command`: 턴이 디스패치한 명령의 이름으로, `/compact`처럼 에이전트 루프에 진입하지 않고 명령이 완료한 턴의 success 결과에 있습니다. 이름은 소문자와 밑줄로 변환되므로 `/reload-plugins`는 `reload_plugins`로 보고됩니다. MCP 서버가 제공하는 명령과 기본 제공 `/mcp`는 `mcp`로 보고됩니다. 사용자가 직접 정의한 명령은 `custom`으로 보고됩니다. 인수는 절대 포함되지 않습니다. 에이전트 루프에 진입한 모든 턴과 명령을 실행하지 않은 전송에는 없습니다. Agent SDK v0.3.268 이상이 필요합니다.1818* `local_command`: 턴이 디스패치한 명령의 이름으로, `/compact`처럼 에이전트 루프에 진입하지 않고 명령이 완료한 턴의 success 결과에 있습니다. 이름은 소문자와 밑줄로 변환되므로 `/reload-plugins`는 `reload_plugins`로 보고됩니다. MCP 서버가 제공하는 명령과 기본 제공 `/mcp`는 `mcp`로 보고됩니다. 사용자가 직접 정의한 명령은 `custom`으로 보고됩니다. 인수는 절대 포함되지 않습니다. 에이전트 루프에 진입한 모든 턴과 명령을 실행하지 않은 전송에는 없습니다. Agent SDK v0.3.268 이상이 필요합니다.

1780* `request_sent_wall_ms`: 서버 측 타임스탬프와 조인하기 위한, Claude Code가 API 요청을 디스패치한 시점의 epoch 밀리초입니다. API 요청을 보낸 턴의 `is_error`가 false인 success 결과에서 [`user_message_uuid`](#user_message_uuid)와 함께일 때만 있습니다.1819* `request_sent_wall_ms`: 서버 측 타임스탬프와 조인하기 위한, Claude Code가 API 요청을 디스패치한 시점의 epoch 밀리초입니다. API 요청을 보낸 턴의 `is_error`가 false인 success 결과에서 [`user_message_uuid`](#user_message_uuid)와 함께일 때만 있습니다.

1781* `first_content_frame_ms`: 첫 번째 `content_block_start` 또는 `content_block_delta` 스트림 이벤트까지의 시간(밀리초)이며, thinking 블록도 콘텐츠로 계산합니다. success 분기에서 `is_error`가 false일 때만 있습니다. Agent SDK v0.3.260 이상이 필요합니다.1820* `first_content_frame_ms`: 첫 번째 `content_block_start` 또는 `content_block_delta` 스트림 이벤트까지의 시간(밀리초)이며, thinking 블록도 콘텐츠로 계산합니다. success 분기에서 `is_error`가 false일 때만 있습니다. Agent SDK v0.3.260 이상이 필요합니다.


1825 1864 

1826* **사용자가 보낸 일반 메시지**, 즉 `isSynthetic: true`가 없는 메시지: 턴은 실행 내내 해당 메시지에 응답합니다. 여러 메시지를 짧은 간격으로 보내면 Claude Code가 이를 하나의 턴으로 병합할 수 있으며, 이때 이 필드에는 마지막 메시지의 `uuid`만 담깁니다. 병합된 메시지 중 어느 것과든 응답을 매칭하려면 [`user_message_uuids`](#user_message_uuids)를 사용하세요.1865* **사용자가 보낸 일반 메시지**, 즉 `isSynthetic: true`가 없는 메시지: 턴은 실행 내내 해당 메시지에 응답합니다. 여러 메시지를 짧은 간격으로 보내면 Claude Code가 이를 하나의 턴으로 병합할 수 있으며, 이때 이 필드에는 마지막 메시지의 `uuid`만 담깁니다. 병합된 메시지 중 어느 것과든 응답을 매칭하려면 [`user_message_uuids`](#user_message_uuids)를 사용하세요.

1827* **사용자가 `isSynthetic: true`로 보낸 메시지**: 턴은 처음에 해당 메시지에 응답합니다. Claude Code가 도구 호출 사이에 사용자의 일반 메시지를 받아들이면, 그때부터 턴은 받아들인 메시지에 응답합니다. 합성 메시지의 `uuid`를 반환하려면 Agent SDK v0.3.265 이상이 필요하며, 이전 버전은 합성 턴에서 아무것도 반환하지 않습니다.1866* **사용자가 `isSynthetic: true`로 보낸 메시지**: 턴은 처음에 해당 메시지에 응답합니다. Claude Code가 도구 호출 사이에 사용자의 일반 메시지를 받아들이면, 그때부터 턴은 받아들인 메시지에 응답합니다. 합성 메시지의 `uuid`를 반환하려면 Agent SDK v0.3.265 이상이 필요하며, 이전 버전은 합성 턴에서 아무것도 반환하지 않습니다.

1828* **[`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/ko/env-vars)에 따라 중단된 턴을 다시 실행하기 위해 Claude Code가 생성한 프롬프트**: 중단된 턴의 마지막 프롬프트가 사용자가 보낸 일반 메시지인 경우, 그것이 턴을 시작했든 Claude Code가 턴 중에 받아들였든 재실행은 처음에 해당 메시지에 응답합니다. [`resume_reason`](#resume_reason)으로 재실행의 프레임과 중단된 시도의 프레임을 구별할 수 있습니다. 마지막 프롬프트가 사용자의 일반 메시지가 아니면, 재실행은 처음에 사용자의 어떤 메시지에도 응답하지 않습니다. Claude Code가 도구 호출 사이에 사용자의 일반 메시지를 받아들이면, 그때부터 턴은 받아들인 메시지에 응답합니다. 중단된 턴의 프롬프트를 반환하려면 Agent SDK v0.3.268 이상이 필요합니다.1867* **[`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/ko/env-vars)에 따라 중단된 턴을 이어가기 위해 Claude Code가 생성하는 프롬프트**: 중단된 턴의 마지막 프롬프트가 사용자가 보낸 일반 메시지인 경우(턴을 시작한 메시지이든 턴 중에 Claude Code가 가져온 메시지이든), 이어가는 턴은 처음에 해당 메시지에 응답합니다. [`resume_reason`](#resume_reason)으로 이어가는 턴의 프레임과 중단된 시도의 프레임을 구분할 수 있습니다. 마지막 프롬프트가 사용자의 일반 메시지가 아니면, 이어가는 턴은 처음에 사용자의 어떤 메시지에도 응답하지 않습니다. Claude Code가 도구 호출 사이에 사용자의 일반 메시지를 가져오면, 그때부터 턴은 가져온 메시지에 응답합니다. 중단된 턴의 프롬프트를 되돌려 보내려면 Agent SDK v0.3.268 이상이 필요합니다.

1829* **Claude Code가 자체적으로 생성한 기타 프롬프트**: 턴은 처음에 사용자의 어떤 메시지에도 응답하지 않으며 프레임에 반환 값이 없습니다. Claude Code가 도구 호출 사이에 사용자의 일반 메시지를 받아들이면, 그때부터 턴은 해당 메시지에 응답합니다. 받아들인 메시지의 반환에는 Agent SDK v0.3.265 이상이 필요하며, 이전 버전은 이러한 턴에서 아무것도 반환하지 않습니다.1868* **Claude Code가 자체적으로 생성한 기타 프롬프트**: 턴은 처음에 사용자의 어떤 메시지에도 응답하지 않으며 프레임에 반환 값이 없습니다. Claude Code가 도구 호출 사이에 사용자의 일반 메시지를 받아들이면, 그때부터 턴은 해당 메시지에 응답합니다. 받아들인 메시지의 반환에는 Agent SDK v0.3.265 이상이 필요하며, 이전 버전은 이러한 턴에서 아무것도 반환하지 않습니다.

1830 1869 

1831Claude Code는 응답한 메시지의 `uuid`를 세 종류의 프레임에 반환합니다.1870Claude Code는 응답한 메시지의 `uuid`를 세 종류의 프레임에 반환합니다.


1857 `resume_reason`1896 `resume_reason`

1858</h4>1897</h4>

1859 1898 

1860재시작 후 Claude Code가 이 턴을 다시 실행한 이유입니다. Claude Code는 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/ko/env-vars)에 따라 다시 실행한 턴에 이 필드를 설정하므로, 재실행의 응답과 결과를 중단된 시도의 것과 구별할 수 있습니다. Agent SDK v0.3.268 이상이 필요합니다.1899이 턴이 재시작으로 중단된 턴을 이어가는 이유입니다. Claude Code는 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/ko/env-vars)에 따라 중단된 턴을 이어가는 턴에 이 필드를 설정하므로, 이어가는 턴의 응답 및 결과를 중단된 시도의 것과 구분할 수 있습니다. Agent SDK v0.3.268 이상이 필요합니다.

1861 1900 

1862Claude Code는 두 종류의 프레임에 이 필드를 설정합니다.1901Claude Code는 두 종류의 프레임에 이 필드를 설정합니다.

1863 1902 

1864* **재실행의 결과**: 결과에 `user_message_uuid`가 있든 없든 success와 error 분기 모두에 설정합니다.1903* **이어가는 턴의 결과**: 성공 분기와 오류 분기 모두에, 결과에 `user_message_uuid`가 포함되는지 여부와 관계없이 설정합니다.

1865* **재실행의 응답 프레임**: [`user_message_uuid`](#user_message_uuid)를 가진 프레임입니다.1904* **이어가는 턴의 응답 프레임**: [`user_message_uuid`](#user_message_uuid)를 포함하는 프레임입니다.

1866 1905 

1867값은 `interrupted_turn`처럼 턴이 다시 실행된 이유를 나타내는 짧은 소문자 토큰입니다.1906값은 `interrupted_turn` 같은 짧은 소문자 토큰입니다.

1868 1907 

1869<h4 id="queued_turn_count">1908<h4 id="queued_turn_count">

1870 `queued_turn_count`1909 `queued_turn_count`


2029};2068};

2030```2069```

2031 2070 

2032Claude Code는 [`user_message_uuid`](#user_message_uuid)에 설명된 조건에 따라 턴의 ping이 아닌 첫 번째 스트림 이벤트에, 그리고 턴이 응답하는 메시지가 바뀔 때 다시 `user_message_uuid`와 `user_message_uuids`를 설정합니다. 재시작으로 중단된 턴을 Claude Code가 다시 실행할 때, 해당 필드를 가진 재실행의 스트림 이벤트에는 [`resume_reason`](#resume_reason)도 포함됩니다.2071Claude Code는 [`user_message_uuid`](#user_message_uuid)에 설명된 조건에 따라 턴의 ping이 아닌 첫 번째 스트림 이벤트에 `user_message_uuid`와 `user_message_uuids`를 설정하고, 턴이 응답하는 메시지가 바뀔 때 다시 설정합니다. 재시작으로 중단된 턴을 이어가는 턴인 경우, 해당 필드를 포함하는 스트림 이벤트에는 [`resume_reason`](#resume_reason)도 포함됩니다.

2033 2072 

2034<h3 id="sdkcompactboundarymessage">2073<h3 id="sdkcompactboundarymessage">

2035 `SDKCompactBoundaryMessage`2074 `SDKCompactBoundaryMessage`


3556| - | - | - |3595| - | - | - |

3557| `script` | `string` | 인라인 워크플로 스크립트입니다. `export const meta = { name, description }`을 리터럴로 시작해야 하며, 그 뒤에 `agent()`, `parallel()`, `pipeline()` 및 `phase()`를 사용하는 스크립트 본문이 따릅니다. `meta`의 선택적 `phases` 배열은 진행 상황 보기에서 에이전트를 명명된 단계 아래에 그룹화합니다 |3596| `script` | `string` | 인라인 워크플로 스크립트입니다. `export const meta = { name, description }`을 리터럴로 시작해야 하며, 그 뒤에 `agent()`, `parallel()`, `pipeline()` 및 `phase()`를 사용하는 스크립트 본문이 따릅니다. `meta`의 선택적 `phases` 배열은 진행 상황 보기에서 에이전트를 명명된 단계 아래에 그룹화합니다 |

3558| `name` | `string` | 기본 제공 워크플로의 이름 또는 `.claude/workflows/`에 저장된 워크플로입니다. 스크립트로 확인됩니다 |3597| `name` | `string` | 기본 제공 워크플로의 이름 또는 `.claude/workflows/`에 저장된 워크플로입니다. 스크립트로 확인됩니다 |

3559| `scriptPath` | `string` | 디스크의 워크플로 스크립트 파일 경로입니다. `script` 및 `name`보다 우선합니다. Claude Code는 모든 호출의 스크립트를 유지하고 결과에서 경로를 반환하므로, 해당 파일을 편집하고 동일한 `scriptPath`로 다시 호출하여 반복할 수 있습니다 |3598| `scriptPath` | `string` | 디스크의 워크플로 스크립트 파일 경로입니다(예: 이전 실행이 반환한 `scriptPath`). `script` 및 `name`보다 우선합니다. 세션의 도구에 `Read`가 포함되어 있지 않으면 Claude Code는 오류와 함께 `scriptPath`를 거부합니다 |

3560| `args` | `unknown` | 스크립트에 전역 `args`로 노출되는 입력 값으로, 연구 질문이나 파일 경로 목록과 같은 매개변수화된 명명된 워크플로용입니다. 배열과 객체를 JSON 인코딩된 문자열이 아닌 실제 JSON 값으로 전달합니다 |3599| `args` | `unknown` | 스크립트에 전역 `args`로 노출되는 입력 값으로, 연구 질문이나 파일 경로 목록과 같은 매개변수화된 명명된 워크플로용입니다. 배열과 객체를 JSON 인코딩된 문자열이 아닌 실제 JSON 값으로 전달합니다 |

3561| `resumeFromRunId` | `string` | 재개할 이전 `Workflow` 호출의 실행 ID입니다. 입력이 변경되지 않은 완료된 `agent()` 호출은 일반적으로 캐시된 결과를 반환합니다. 나머지는 실시간으로 실행됩니다. [일시 중지 후 재개](/docs/ko/workflows#resume-after-a-pause)는 어느 완료된 호출이 다시 실행되는지 다룹니다. 동일한 세션만 해당됩니다 |3600| `resumeFromRunId` | `string` | 재개할 이전 `Workflow` 호출의 실행 ID입니다. 입력이 변경되지 않은 완료된 `agent()` 호출은 일반적으로 캐시된 결과를 반환합니다. 나머지는 실시간으로 실행됩니다. [일시 중지 후 재개](/docs/ko/workflows#resume-after-a-pause)는 어느 완료된 호출이 다시 실행되는지 다룹니다. 동일한 세션만 해당됩니다 |

3562| `title` | `string` | 무시됨; 스크립트의 `meta` 블록이 제목을 설정합니다 |3601| `title` | `string` | 무시됨; 스크립트의 `meta` 블록이 제목을 설정합니다 |

agent-view.md +18 −14

Details

152| 모양 | 의미 |152| 모양 | 의미 |

153| :- | :- |153| :- | :- |

154| `✻` 또는 애니메이션 `✽` | 세션 프로세스가 실행 중이거나, 세션이 사용자의 입력을 필요로 함 |154| `✻` 또는 애니메이션 `✽` | 세션 프로세스가 실행 중이거나, 세션이 사용자의 입력을 필요로 함 |

155| `∙` | 프로세스가 종료됨. 여전히 행을 엿볼 수 있으며, 답변하거나 연결하면 Claude가 중단된 위치에서 다시 시작 |155| `∙` | 프로세스가 종료됨. 여전히 행을 엿볼 수 있으며, 답변하거나 연결하면 Claude가 저장된 대화에서 프로세스를 다시 시작 |

156| `✢` | [`/loop`](/docs/ko/scheduled-tasks) 세션이 반복 사이에 절전 중. 행은 실행 횟수와 카운트다운을 표시 |156| `✢` | [`/loop`](/docs/ko/scheduled-tasks) 세션이 반복 사이에 절전 중. 행은 실행 횟수와 카운트다운을 표시 |

157 157 

158행의 오른쪽 가장자리에 나타날 수 있는 `#N` 또는 `!N` 레이블은 세션의 [풀 리퀘스트 또는 병합 요청](#pull-request-status)에 대한 링크이며, 상태 아이콘의 일부가 아닙니다.158행의 오른쪽 가장자리에 나타날 수 있는 `#N` 또는 `!N` 레이블은 세션의 [풀 리퀘스트 또는 병합 요청](#pull-request-status)에 대한 링크이며, 상태 아이콘의 일부가 아닙니다.


256 256 

257연결된 세션은 `tui` 설정과 관계없이 항상 [전체 화면 모드](/docs/ko/fullscreen)로 렌더링됩니다. 백그라운드 세션에는 추가할 터미널 스크롤백이 없기 때문입니다. `PgUp`, `PgDn` 또는 마우스 휠로 스크롤하고, `Ctrl+O`를 눌러 트랜스크립트 모드로 전환합니다. 터미널의 기본 스크롤 및 tmux 복사 모드는 현재 뷰포트만 표시하며, 이는 전체 화면 애플리케이션을 실행할 때와 동일합니다.257연결된 세션은 `tui` 설정과 관계없이 항상 [전체 화면 모드](/docs/ko/fullscreen)로 렌더링됩니다. 백그라운드 세션에는 추가할 터미널 스크롤백이 없기 때문입니다. `PgUp`, `PgDn` 또는 마우스 휠로 스크롤하고, `Ctrl+O`를 눌러 트랜스크립트 모드로 전환합니다. 터미널의 기본 스크롤 및 tmux 복사 모드는 현재 뷰포트만 표시하며, 이는 전체 화면 애플리케이션을 실행할 때와 동일합니다.

258 258 

259연결된 세션은 [터미널에 상태를 보고](/docs/ko/terminal-config#see-session-status-in-your-terminal)하지 않습니다.

260 

259빈 프롬프트에서 `←`를 누르거나 `/exit`를 실행하여 분리하고 에이전트 뷰로 돌아갑니다. 에이전트 뷰에서 세션을 열었는지 또는 셸에서 `claude attach <id>`로 실행했는지 여부와 관계없이 동일하게 작동합니다.261빈 프롬프트에서 `←`를 누르거나 `/exit`를 실행하여 분리하고 에이전트 뷰로 돌아갑니다. 에이전트 뷰에서 세션을 열었는지 또는 셸에서 `claude attach <id>`로 실행했는지 여부와 관계없이 동일하게 작동합니다.

260 262 

261`←`는 [`/btw` 오버레이](/docs/ko/interactive-mode#side-questions-with-%2Fbtw)가 열려 있을 때도 분리됩니다. Claude Code v2.1.257 이상이 필요합니다. 여전히 답변 중인 부가 질문은 떠나 있는 동안 계속 실행됩니다. 다음에 연결할 때 오버레이는 해당 질문 또는 그 답변과 함께 다시 열립니다.263`←`는 [`/btw` 오버레이](/docs/ko/interactive-mode#side-questions-with-%2Fbtw)가 열려 있을 때도 분리됩니다. Claude Code v2.1.257 이상이 필요합니다. 여전히 답변 중인 부가 질문은 떠나 있는 동안 계속 실행됩니다. 다음에 연결할 때 오버레이는 해당 질문 또는 그 답변과 함께 다시 열립니다.


264 266 

265`Ctrl+Z`도 분리하지만 시작한 위치로 돌아갑니다: 에이전트 뷰에서 연결한 경우 에이전트 뷰, 또는 `claude attach`를 실행한 경우 셸입니다. 대화 상자가 포커스를 가지고 있고 `←`에 응답하지 않을 때 `Ctrl+Z`를 사용합니다.267`Ctrl+Z`도 분리하지만 시작한 위치로 돌아갑니다: 에이전트 뷰에서 연결한 경우 에이전트 뷰, 또는 `claude attach`를 실행한 경우 셸입니다. 대화 상자가 포커스를 가지고 있고 `←`에 응답하지 않을 때 `Ctrl+Z`를 사용합니다.

266 268 

267`Ctrl+C`는 연결된 동안 표준 인터럽트 동작을 유지합니다: 분리하는 대신 실행 중인 응답 또는 `!` 셸 명령을 취소합니다. 빈 프롬프트에서 `Ctrl+C`를 두 번 누르면 분리되며, 다른 세션에서와 동일합니다.269`Ctrl+C`는 연결된 동안 표준 인터럽트 동작을 유지합니다: 분리하는 대신 실행 중인 응답 또는 `!` 셸 명령을 취소합니다. 빈 프롬프트에서 `Ctrl+C`를 두 번 누르면 분리됩니다.

268 270 

269분리는 백그라운드 세션을 중지하지 않습니다: `←`, `Ctrl+Z`, `/exit`, 그리고 이중 `Ctrl+C` 또는 이중 `Ctrl+D`는 모두 실행 상태로 둡니다. 세션 내에서 세션을 종료하려면 `/stop`을 실행합니다.271분리는 백그라운드 세션을 중지하지 않습니다: `←`, `Ctrl+Z`, `/exit`, 그리고 이중 `Ctrl+C` 또는 이중 `Ctrl+D`는 모두 실행 상태로 둡니다. `/loop`가 다음 반복을 기다리는 동안 분리하면 루프는 계속 실행되며 해당 반복은 사용자 없이 일정대로 시작됩니다. 분리하기 전에 루프를 중지하려면 [루프 중지](/docs/ko/scheduled-tasks#stop-a-loop)를 참조하세요. 세션 내에서 세션을 종료하려면 `/stop`을 실행합니다.

270 272 

271<h4 id="switch-sessions-without-leaving-the-terminal">273<h4 id="switch-sessions-without-leaving-the-terminal">

272 터미널을 떠나지 않고 세션 전환274 터미널을 떠나지 않고 세션 전환


293약 10초가 지나면 Claude Code는 더 이상 기다리지 않고 세션을 백그라운드로 보냅니다. 단, 다음과 같은 경우는 예외입니다:295약 10초가 지나면 Claude Code는 더 이상 기다리지 않고 세션을 백그라운드로 보냅니다. 단, 다음과 같은 경우는 예외입니다:

294 296 

295* **포그라운드 서브에이전트가 여전히 실행 중인 경우**: Claude Code는 Claude가 시작한 [포그라운드 서브에이전트](/docs/ko/sub-agents#run-subagents-in-foreground-or-background)의 작업이 이월되도록 계속 기다리며, `Still backgrounding after the current tool`을 표시합니다. 기다리지 않고 백그라운드로 보내려면 `←`를 다시 누릅니다. 이 경우 해당 서브에이전트가 처음부터 다시 시작됩니다.297* **포그라운드 서브에이전트가 여전히 실행 중인 경우**: Claude Code는 Claude가 시작한 [포그라운드 서브에이전트](/docs/ko/sub-agents#run-subagents-in-foreground-or-background)의 작업이 이월되도록 계속 기다리며, `Still backgrounding after the current tool`을 표시합니다. 기다리지 않고 백그라운드로 보내려면 `←`를 다시 누릅니다. 이 경우 해당 서브에이전트가 처음부터 다시 시작됩니다.

296* **권한 프롬프트 또는 질문이 답변을 기다리는 경우**: 권한 프롬프트나 Claude가 한 질문이 대기하는 동안 Claude Code는 계속 기다리며 `Still backgrounding after the current tool — a question is waiting for your answer.`를 표시합니다.298* **권한 프롬프트 또는 질문이 답변을 기다리는 경우**: 권한 프롬프트나 Claude가 한 질문이 대기하는 동안 Claude Code는 계속 기다리며 `Still backgrounding after the current tool — a question is waiting for your answer.`를 표시합니다. 권한 프롬프트에서 **Yes**를 선택하는 것처럼 답변으로 턴이 계속되면 Claude Code는 현재 도구가 완료될 때 세션을 백그라운드로 보냅니다.

297* **프롬프트 입력에 텍스트를 입력하는 경우**: 미전송 텍스트는 터미널의 입력 상자에 남아 있고 백그라운드 세션으로 이동하지 않으므로 Claude Code는 전환을 취소합니다. 이때 `Backgrounding cancelled — you have unsent text in the input. Send it or clear it, then press ← again.`를 표시합니다.299* **프롬프트 입력에 텍스트를 입력하는 경우**: 미전송 텍스트는 터미널의 입력 상자에 남아 있고 백그라운드 세션으로 이동하지 않으므로 Claude Code는 전환을 취소합니다. 이때 `Backgrounding cancelled — you have unsent text in the input. Send it or clear it, then press ← again.`를 표시합니다.

300* **턴을 중지하는 경우**: Claude Code는 전환을 취소하고 `Backgrounding cancelled — the turn was stopped.`를 표시합니다. 예를 들어 [`Esc`로 Claude를 중단](/docs/ko/interactive-mode#general-controls)하거나, 메인 대화의 권한 프롬프트에서 [코멘트 없이](/docs/ko/permissions#add-a-comment-when-you-answer-a-permission-prompt) **No**를 선택하거나, 메인 대화에서 Claude가 한 질문에 `Esc`를 누르면 턴이 중지됩니다. 세션을 백그라운드로 보내려면 `←`를 다시 누릅니다.

298* **대기열의 메시지를 이동할 수 없는 경우**: [Claude가 작업하는 동안 대기열에 추가한](/docs/ko/interactive-mode#queue-messages-while-claude-works) 메시지는 대화와 함께 백그라운드 세션으로 이동합니다. 그중 하나라도 이동할 수 없으면 세션은 포그라운드에 남고 Claude Code는 `Cannot open agents — 1 queued message can't move to the background. Press ← again once Claude has read it.`와 같은 알림을 표시합니다.301* **대기열의 메시지를 이동할 수 없는 경우**: [Claude가 작업하는 동안 대기열에 추가한](/docs/ko/interactive-mode#queue-messages-while-claude-works) 메시지는 대화와 함께 백그라운드 세션으로 이동합니다. 그중 하나라도 이동할 수 없으면 세션은 포그라운드에 남고 Claude Code는 `Cannot open agents — 1 queued message can't move to the background. Press ← again once Claude has read it.`와 같은 알림을 표시합니다.

299 302 

300`←`를 누르면 대화에 메시지가 아직 없을 때도 세션의 행이 생성되므로 `→`로 여전히 해당 세션으로 돌아갈 수 있습니다.303`←`를 누르면 대화에 메시지가 아직 없을 때도 세션의 행이 생성되므로 `→`로 여전히 해당 세션으로 돌아갈 수 있습니다.


513* `--fallback-model`516* `--fallback-model`

514* `--allow-dangerously-skip-permissions`517* `--allow-dangerously-skip-permissions`

515 518 

516세션 중에 [`/add-dir`](/docs/ko/permissions#additional-directories-grant-file-access-not-configuration)로 추가한 디렉터리도 이어집니다. `--allow-dangerously-skip-permissions`가 이어지면 백그라운드 세션에서 `bypassPermissions`에 도달할 수 있지만, 새로운 권한을 부여하지는 않습니다. 이 모드는 여전히 [권한 모드, 모델, effort](#permission-mode-model-and-effort)에 설명된 일회성 대화형 수락이 필요합니다.519세션 중에 [`/add-dir`](/docs/ko/permissions#additional-directories-grant-file-access-not-configuration)로 추가한 디렉터리도 이어집니다. `--allow-dangerously-skip-permissions`가 이어지면 백그라운드 세션에서 `bypassPermissions`에 도달할 수 있지만, 새로운 권한을 부여하지는 않습니다. 이 모드는 여전히 [우회 면책 조항에 대한 사용자의 수락](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode) 기록이 필요합니다.

517 520 

518<span id="from-your-shell" />521<span id="from-your-shell" />

519 522 


767 770 

768활성 기본값은 디스패치 입력 아래의 바닥글에 표시됩니다.771활성 기본값은 디스패치 입력 아래의 바닥글에 표시됩니다.

769 772 

770Claude Code는 `claude --dangerously-skip-permissions`를 대화형으로 한 번 실행하여 우회 면책 조항을 수락하기 전까지 `claude --bg --permission-mode bypassPermissions`를 거부합니다. 이 모드에서는 사용자가 지켜보지 않는 세션이 승인 없이 작업하기 때문입니다. 이전에 수락하지 않았다면 `claude agents`에 `--dangerously-skip-permissions` 또는 `--permission-mode bypassPermissions`를 전달할 때도 같은 면책 조항이 표시되며, 수락하면 뷰에서 시작하는 세션에 `bypassPermissions`가 적용됩니다. `--allow-dangerously-skip-permissions`를 전달해도 같은 면책 조항이 표시되며, 수락하면 해당 세션을 그 모드로 시작하지 않으면서 `Shift+Tab` 순환에서 `bypassPermissions`를 사용할 수 있게 됩니다.773`bypassPermissions` 모드로 시작한 백그라운드 세션에는 [우회 면책 조항에 대한 사용자의 수락](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode) 기록이 필요합니다. 이 모드에서는 사용자가 지켜보지 않는 세션이 승인 없이 작업하기 때문입니다. 이전에 수락하지 않았다면 `claude agents`에 `--dangerously-skip-permissions` 또는 `--permission-mode bypassPermissions`를 전달할 때도 같은 면책 조항이 표시되며, 수락하면 뷰에서 시작하는 세션에 `bypassPermissions`가 적용됩니다. `--allow-dangerously-skip-permissions`를 전달해도 같은 면책 조항이 표시되며, 수락하면 해당 세션을 그 모드로 시작하지 않으면서 `Shift+Tab` 순환에서 `bypassPermissions`를 사용할 수 있게 됩니다.

771 774 

772<h4 id="what-persists-across-restarts">775<h4 id="what-persists-across-restarts">

773 재시작 후에도 유지되는 것776 재시작 후에도 유지되는 것

774</h4>777</h4>

775 778 

776백그라운드 세션에 대해 선택한 권한 모드, 모델, effort는 [세션이 이어받은 구성 플래그](#what-carries-over-when-you-background)와 함께, 감독자가 나중에 프로세스를 [중지하고 재시작](#the-supervisor-process)해도 모두 유지됩니다. `claude --bg --dangerously-skip-permissions` 또는 `claude --bg --permission-mode bypassPermissions`로 시작한 세션은 재시작 후에도 `bypassPermissions`를 유지합니다. 세션 도중 `/model` 또는 `/effort`로 변경한 모델이나 effort도 유지됩니다.779백그라운드 세션에 대해 선택한 권한 모드, 모델, effort는 [세션이 이어받은 구성 플래그](#what-carries-over-when-you-background)와 함께, 감독자가 나중에 프로세스를 [중지하고 재시작](#the-supervisor-process)해도 모두 유지됩니다. 세션 도중 `/model` 또는 `/effort`로 변경한 모델이나 effort도 유지됩니다.

777 780 

778세션이 `--effort`나 `/effort`가 아닌 설정에서 effort를 가져왔다면, Claude Code는 세션의 프로세스를 시작할 때마다 설정을 다시 읽습니다. `settings.json`에 저장된 effort를 편집하면, 그 변경은 `←` 또는 `/bg`로 백그라운드로 보내는 세션과 그 이후의 재시작에 반영됩니다. 저장된 effort는 [`effortLevel`](/docs/ko/settings-reference#effortlevel) 키 또는 [`modelSettings`](/docs/ko/settings-reference#modelsettings) 항목입니다.781세션이 `--effort`나 `/effort`가 아닌 설정에서 effort를 가져왔다면, Claude Code는 세션의 프로세스를 시작할 때마다 설정을 다시 읽습니다. `settings.json`에 저장된 effort를 편집하면, 그 변경은 `←` 또는 `/bg`로 백그라운드로 보내는 세션과 그 이후의 재시작에 반영됩니다. 저장된 effort는 [`effortLevel`](/docs/ko/settings-reference#effortlevel) 키 또는 [`modelSettings`](/docs/ko/settings-reference#modelsettings) 항목입니다.

779 782 


822| `claude attach <id\|name>` | 이 터미널에서 세션에 연결 |825| `claude attach <id\|name>` | 이 터미널에서 세션에 연결 |

823| `claude logs <id\|name>` | 세션의 최근 출력 인쇄 |826| `claude logs <id\|name>` | 세션의 최근 출력 인쇄 |

824| `claude stop <id>` | 세션 중지. `claude kill`도 허용 |827| `claude stop <id>` | 세션 중지. `claude kill`도 허용 |

825| `claude respawn <id>` | 세션을 다시 시작하고, 실행 중이거나 중지된 상태에서 저장된 대화를 재개합니다. 예를 들어 업데이트된 Claude Code 바이너리를 선택하기 위해. 다시 시작된 세션은 저장된 대화를 재개하며, 디스크에 없으면 원래 프롬프트를 새 대화로 다시 실행합니다 |828| `claude respawn <id>` | 실행 중이거나 중지된 세션을 다시 시작합니다. 예를 들어 업데이트된 Claude Code 바이너리를 적용하기 위해 사용합니다. 저장된 대화가 있는 세션은 해당 대화를 재개합니다 |

826| `claude respawn --all` | 모든 실행 중인 세션을 다시 시작합니다. 예를 들어 모든 세션을 한 번에 업데이트된 Claude Code 바이너리로 이동하기 위해 |829| `claude respawn --all` | 모든 실행 중인 세션을 다시 시작합니다. 예를 들어 모든 세션을 한 번에 업데이트된 Claude Code 바이너리로 이동하기 위해 |

827| `claude rm <id>` | 세션을 목록에서 제거하고, 안전하게 삭제할 수 있을 때 Claude가 생성한 worktree를 함께 제거합니다. [세션 삭제 시 제거되는 항목](#what-deleting-a-session-removes) 참조. 대화 트랜스크립트는 로컬 머신에 남아 있으며 `claude --resume`을 통해 계속 사용할 수 있습니다 |830| `claude rm <id>` | 세션을 목록에서 제거하고, 안전하게 삭제할 수 있을 때 Claude가 생성한 worktree를 함께 제거합니다. [세션 삭제 시 제거되는 항목](#what-deleting-a-session-removes) 참조. 대화 트랜스크립트는 로컬 머신에 남아 있으며 `claude --resume`을 통해 계속 사용할 수 있습니다 |

828| `claude rm <id> --discard-unpushed <commit>@<worktree-id>` | 푸시되지 않은 커밋으로 인해 삭제가 거부된 세션을 삭제하고, worktree와 해당 브랜치 및 커밋을 함께 삭제합니다. 거부 시 출력된 정확한 값을 전달합니다. [세션 삭제 시 제거되는 항목](#what-deleting-a-session-removes) 참조. v2.1.260 이상 필요 |831| `claude rm <id> --discard-unpushed <commit>@<worktree-id>` | 푸시되지 않은 커밋으로 인해 삭제가 거부된 세션을 삭제하고, worktree와 해당 브랜치 및 커밋을 함께 삭제합니다. 거부 시 출력된 정확한 값을 전달합니다. [세션 삭제 시 제거되는 항목](#what-deleting-a-session-removes) 참조. v2.1.260 이상 필요 |

829| `claude rm <id> --force-remove-worktree <worktree-id>` | git 또는 `WorktreeRemove` 훅이 worktree를 제거할 수 없어 삭제가 거부된 세션을 삭제하고, worktree 디렉터리를 어쨌든 삭제하며 해당 브랜치는 저장소에 남겨둡니다. 거부 시 출력된 정확한 값을 전달합니다. [세션 삭제 시 제거되는 항목](#what-deleting-a-session-removes) 참조. v2.1.268 이상 필요 |832| `claude rm <id> --force-remove-worktree <worktree-id>` | git 또는 `WorktreeRemove` 훅이 worktree를 제거할 수 없어 삭제가 거부된 세션을 삭제하고, worktree 디렉터리를 어쨌든 삭제하며 해당 브랜치는 저장소에 남겨둡니다. 거부 시 출력된 정확한 값을 전달합니다. [세션 삭제 시 제거되는 항목](#what-deleting-a-session-removes) 참조. v2.1.268 이상 필요 |

830| `claude daemon status` | [감독자](#the-supervisor-process)의 상태, 버전, 소켓 디렉터리 및 워커 수 인쇄 |833| `claude daemon status` | [감독자](#the-supervisor-process)의 상태, 버전, 소켓 디렉터리 및 워커 수 인쇄 |

831| `claude daemon logs` | 감독자의 로그 파일 [`~/.claude/daemon.log`](#where-state-is-stored)를 팔로우하며, `Ctrl+C`를 누를 때까지 새 줄이 도착하는 대로 인쇄 |834| `claude daemon logs` | 감독자의 로그 파일 [`~/.claude/daemon.log`](#where-state-is-stored)를 팔로우하며, `Ctrl+C`를 누를 때까지 새 줄이 도착하는 대로 인쇄 |

832| `claude daemon stop --any` | 감독자 프로세스와 이를 호스팅하는 백그라운드 세션을 중지합니다. `--keep-workers`를 전달하여 백그라운드 세션을 실행 상태로 유지하면 다음 감독자가 이들에 다시 연결됩니다. 다음 `claude agents` 또는 `claude --bg`는 새로운 감독자를 시작합니다 |835| `claude daemon stop --any` | 감독자 프로세스와 감독자가 호스팅하는 백그라운드 세션을 중지합니다. 백그라운드 세션을 실행 상태로 유지하여 [다음 감독자](#the-supervisor-process)가 다시 연결하도록 하려면 `--keep-workers`를 전달합니다. 다음 `claude agents` 또는 `claude --bg`는 새로운 감독자를 시작합니다 |

833 836 

834`claude attach`와 `claude logs`는 ID 대신 세션 이름의 일부를 받을 수 있습니다(예: `claude logs "auth refactor"`). 이름을 전달하려면 Claude Code v2.1.290 이상이 필요합니다.837`claude attach`와 `claude logs`는 ID 대신 세션 이름의 일부를 받을 수 있습니다(예: `claude logs "auth refactor"`). `claude attach`는 프로세스가 실행 중인 동안에만 이름으로 세션을 열 수 있으므로, 중지된 세션을 다시 시작하려면 대신 ID를 전달합니다. 이름을 전달하려면 Claude Code v2.1.290 이상이 필요합니다.

835 838 

836<h3 id="list-sessions-as-json">839<h3 id="list-sessions-as-json">

837 세션을 JSON으로 나열840 세션을 JSON으로 나열


889* **완료되었거나 다음 메시지를 기다리는 중이며, 약 1시간 동안 연결되지 않음**: 감독자가 리소스를 확보하기 위해 프로세스를 중지합니다. 질문을 하여 턴을 끝낸 세션은 다음 메시지를 기다리는 중으로 간주됩니다. 대화는 디스크에 저장되며, 다음에 연결하거나 답변할 때 세션은 중단된 위치에서 재개됩니다. `Ctrl+T`로 세션을 고정하여 프로세스를 계속 실행 상태로 유지합니다.892* **완료되었거나 다음 메시지를 기다리는 중이며, 약 1시간 동안 연결되지 않음**: 감독자가 리소스를 확보하기 위해 프로세스를 중지합니다. 질문을 하여 턴을 끝낸 세션은 다음 메시지를 기다리는 중으로 간주됩니다. 대화는 디스크에 저장되며, 다음에 연결하거나 답변할 때 세션은 중단된 위치에서 재개됩니다. `Ctrl+T`로 세션을 고정하여 프로세스를 계속 실행 상태로 유지합니다.

890* **감독자가 실행 중인 동안 예기치 않게 종료됨**: 감독자가 프로세스를 다시 시작합니다. `←` 또는 `/background`로 직접 백그라운드로 보낸 세션을 종료하면(예: `kill` 사용) 다시 시작하는 대신 중지된 것으로 표시됩니다. 종료로 인해 끝난 세션의 경우 [세션이 종료 후 실패 또는 중지로 표시됨](#sessions-show-as-failed-after-shutdown)을 참조하세요.893* **감독자가 실행 중인 동안 예기치 않게 종료됨**: 감독자가 프로세스를 다시 시작합니다. `←` 또는 `/background`로 직접 백그라운드로 보낸 세션을 종료하면(예: `kill` 사용) 다시 시작하는 대신 중지된 것으로 표시됩니다. 종료로 인해 끝난 세션의 경우 [세션이 종료 후 실패 또는 중지로 표시됨](#sessions-show-as-failed-after-shutdown)을 참조하세요.

891* **자동 업데이트 후**: 감독자가 자신을 새 버전으로 다시 시작하고 유휴 세션을 백그라운드에서 이동합니다. 작업 중이거나, 입력을 기다리거나, 연결된 세션은 중단되지 않습니다.894* **자동 업데이트 후**: 감독자가 자신을 새 버전으로 다시 시작하고 유휴 세션을 백그라운드에서 이동합니다. 작업 중이거나, 입력을 기다리거나, 연결된 세션은 중단되지 않습니다.

895* **감독자 자체가 중지됨**(예: 프로세스가 Claude Code 외부에서 종료된 경우): macOS 및 Linux에서 각 세션의 프로세스는 새 감독자가 다시 연결되기를 약 1분 동안 기다리며, 연결되지 않으면 중지됩니다. 세션을 계속 실행하려면 그 1분 이내에 셸에서 `claude agents`를 실행하여 새 감독자를 시작합니다. 1분이 먼저 지나면 세션은 중지되지만 저장된 대화는 디스크에 유지됩니다. [세션이 종료 후 실패 또는 중지로 표시됨](#sessions-show-as-failed-after-shutdown)에 설명된 대로 세션에 연결하거나 답변하면 저장된 대화에서 다시 시작됩니다.

892 896 

893세션의 프로세스가 중지되거나 다시 시작될 때, Claude가 그 세션에서 시작한 백그라운드 셸 명령, 동적 워크플로, 백그라운드 서브에이전트는 다음 프로세스로 이월됩니다. 실행 중인 모니터와 서브에이전트가 시작한 셸 명령은 프로세스와 함께 중지됩니다. 세션을 삭제하면 이월된 모든 것이 중지됩니다. 대신 프로세스와 함께 모든 것을 중지하려면 [`CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF`](/docs/ko/env-vars#variables)를 `1`로 설정합니다.897세션의 프로세스가 중지되거나 다시 시작될 때, Claude가 그 세션에서 시작한 백그라운드 셸 명령, 동적 워크플로, 백그라운드 서브에이전트는 다음 프로세스로 이월됩니다. 실행 중인 모니터와 서브에이전트가 시작한 셸 명령은 프로세스와 함께 중지됩니다. 세션을 삭제하면 이월된 모든 것이 중지됩니다. 대신 프로세스와 함께 모든 것을 중지하려면 [`CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF`](/docs/ko/env-vars#variables)를 `1`로 설정합니다.

894 898 


911 915 

912파일을 직접 읽지 않고 이 상태를 검사하려면 `claude daemon status`를 실행합니다. 감독자에 도달할 수 있는지 여부, 프로세스 ID 및 버전, 소켓 디렉토리, 그리고 활성 백그라운드 세션의 수를 보고합니다.916파일을 직접 읽지 않고 이 상태를 검사하려면 `claude daemon status`를 실행합니다. 감독자에 도달할 수 있는지 여부, 프로세스 ID 및 버전, 소켓 디렉토리, 그리고 활성 백그라운드 세션의 수를 보고합니다.

913 917 

914명령은 또한 실행 중인 감독자가 호출한 `claude`와 다른 버전에 있을 때 경고하며, 이는 감독자가 아직 다시 시작하지 않은 업데이트 후에 발생합니다. 경고는 두 버전을 모두 표시하고 새 버전을 적용하려면 `claude daemon stop --any`를 실행하도록 안내합니다. Claude Code가 OS 서비스로 설치된 경우 제안된 명령은 플래그 없이 `claude daemon stop`입니다.918명령은 또한 실행 중인 감독자가 호출한 `claude`와 다른 버전에 있을 때 경고하며, 이는 감독자가 아직 다시 시작하지 않은 업데이트 후에 발생합니다. 경고는 두 버전을 모두 표시하고 새 버전을 적용하려면 `claude daemon stop --any`를 실행하도록 안내합니다.

915 919 

916세션은 이러한 버전 불일치에도 그대로 유지됩니다. 이전 Claude Code 버전이 세션의 `state.json`을 업데이트할 때 인식하지 못하는 필드를 보존하고 세션을 나열된 상태로 유지합니다. `roster.json`의 세션 목록도 동일한 규칙을 따르므로 최신 버전으로 시작한 세션은 도달 가능한 상태로 유지되고 감독자가 다시 시작한 후에도 입력을 계속 받습니다.920세션은 이러한 버전 불일치에도 그대로 유지됩니다. 이전 Claude Code 버전이 세션의 `state.json`을 업데이트할 때 인식하지 못하는 필드를 보존하고 세션을 나열된 상태로 유지합니다. `roster.json`의 세션 목록도 동일한 규칙을 따르므로 최신 버전으로 시작한 세션은 도달 가능한 상태로 유지되고 감독자가 다시 시작한 후에도 입력을 계속 받습니다.

917 921 


963 967 

964머신을 종료하거나 재시작하면 실행 중인 백그라운드 세션이 중지됩니다. 입력을 기다리던 세션은 돌아올 때 `Needs input` 아래에 남아 있습니다. 다른 실행 중인 세션의 경우, 에이전트 뷰가 표시하는 내용은 마지막으로 진행한 이후 경과 시간에 따라 달라집니다:968머신을 종료하거나 재시작하면 실행 중인 백그라운드 세션이 중지됩니다. 입력을 기다리던 세션은 돌아올 때 `Needs input` 아래에 남아 있습니다. 다른 실행 중인 세션의 경우, 에이전트 뷰가 표시하는 내용은 마지막으로 진행한 이후 경과 시간에 따라 달라집니다:

965 969 

966* 48시간 이내에는 세션이 실패로 표시됩니다. 연결하거나 답변하면 중단된 위치에서 다시 시작됩니다.970* 48시간 이내에는 세션이 실패로 표시됩니다. 연결하거나 답변하면 저장된 대화에서 다시 시작됩니다. 중단된 작업을 이어서 진행하려면 계속하라고 요청하는 답변을 보냅니다.

967* 48시간 이후, 예를 들어 머신이 며칠 동안 꺼져 있었던 경우, 세션은 `ended while the background service was off`와 함께 중지로 표시됩니다. 행에서 `Enter`를 누르면 바닥글에 `Press enter again to resume this session (it ended while the background service was off), or ctrl+x to delete it.`이 표시됩니다. 같은 행에서 `Enter`를 다시 누르면 저장된 대화를 다시 시작합니다. 답변 또는 `claude attach <id>`는 바닥글 프롬프트 없이 다시 시작합니다.971* 48시간 이후, 예를 들어 머신이 며칠 동안 꺼져 있었던 경우, 세션은 `ended while the background service was off`와 함께 중지로 표시됩니다. 행에서 `Enter`를 누르면 바닥글에 `Press enter again to resume this session (it ended while the background service was off), or ctrl+x to delete it.`이 표시됩니다. 같은 행에서 `Enter`를 다시 누르면 저장된 대화를 다시 시작합니다. 답변 또는 `claude attach <id>`는 바닥글 프롬프트 없이 다시 시작합니다.

968 972 

969[트랜스크립트 정리](/docs/ko/settings-reference#cleanupperioddays)가 중지된 세션의 저장된 대화를 제거한 경우, Claude Code는 행을 열기를 거부합니다: 메시지는 다시 시작할 것이 없음을 나타냅니다. `claude rm <id>`는 행을 삭제합니다. 단, [유지되는 경우](#what-deleting-a-session-removes)에서 설명한 경우는 제외되며, `claude respawn <id>`는 원래 프롬프트를 다시 실행합니다. [이 세션의 저장된 대화는 더 이상 디스크에 없습니다](/docs/ko/errors#this-sessions-saved-conversation-is-no-longer-on-disk)를 참조합니다.973[트랜스크립트 정리](/docs/ko/settings-reference#cleanupperioddays)가 중지된 세션의 저장된 대화를 제거한 경우, Claude Code는 행을 열기를 거부합니다: 메시지는 다시 시작할 것이 없음을 나타냅니다. `claude rm <id>`는 행을 삭제합니다. 단, [유지되는 경우](#what-deleting-a-session-removes)에서 설명한 경우는 제외되며, `claude respawn <id>`는 원래 프롬프트를 다시 실행합니다. [이 세션의 저장된 대화는 더 이상 디스크에 없습니다](/docs/ko/errors#this-sessions-saved-conversation-is-no-longer-on-disk)를 참조합니다.


1022claude daemon stop --any --keep-workers1026claude daemon stop --any --keep-workers

1023```1027```

1024 1028 

1025새로운 감독자는 실행 중인 세션에 다시 연결됩니다. `--keep-workers` 없이는 명령이 백그라운드 세션도 종료합니다. `--any` 플래그는 기본값인 설치된 서비스가 아닌 요청 시 시작된 감독자를 중지하려는 의도를 확인합니다.1029그런 다음 셸에서 `claude agents`를 실행하여 새로운 감독자를 시작합니다. 중지 후 [약 1분](#the-supervisor-process) 이내에 실행하면 새로운 감독자가 아직 실행 중인 세션에 다시 연결되며, 해당 세션의 작업은 중단 없이 계속됩니다. 그보다 오래 걸리면 macOS와 Linux에서는 그때까지 세션이 자체적으로 중지되며, 세션에 연결하거나 답변하면 저장된 대화에서 다시 시작됩니다. `--keep-workers` 없이는 명령이 백그라운드 세션도 종료합니다. `--any` 플래그를 사용하면 명령이 Claude Code가 요청 시 시작한 감독자를 중지합니다.

1026 1030 

1027감독자가 시작되지만 연결을 수락할 수 없으면 자체적으로 종료되고 잠금을 해제하므로, 다음 `claude agents`는 이 수동 중지 없이 새로운 프로세스를 시작합니다. 위의 단계는 실행 중인 감독자가 중단되었을 때 적용됩니다.1031감독자가 시작되지만 연결을 수락할 수 없으면 자체적으로 종료되고 잠금을 해제하므로, 다음 `claude agents`는 이 수동 중지 없이 새로운 프로세스를 시작합니다. 위의 단계는 실행 중인 감독자가 중단되었을 때 적용됩니다.

1028 1032 


1040claude daemon stop --any --keep-workers1044claude daemon stop --any --keep-workers

1041```1045```

1042 1046 

1043다음 `claude agents` 또는 `claude --bg`는 저장된 자격 증명을 읽는 새로운 감독자를 시작합니다. `/login` 대신 `ANTHROPIC_API_KEY`와 같은 환경 변수로 인증하는 경우, 변수가 설정된 셸에서 다음 명령을 실행합니다.1047[약 1분](#the-supervisor-process) 이내에 셸에서 `claude agents` 또는 `claude --bg`를 실행하여 저장된 자격 증명을 읽는 새로운 감독자를 시작합니다. `/login` 대신 `ANTHROPIC_API_KEY`와 같은 환경 변수로 인증하는 경우, 변수가 설정된 셸에서 이 다음 명령을 실행합니다.

1044 1048 

1045원인 및 해결 방법의 전체 목록은 [오류 참조](/docs/ko/errors#could-not-resolve-authentication-method)를 참조합니다.1049원인 및 해결 방법의 전체 목록은 [오류 참조](/docs/ko/errors#could-not-resolve-authentication-method)를 참조합니다.

1046 1050 

analytics.md +1 −1

Details

67* **"GitHub 앱 필수"**: 기여도 지표를 보려면 GitHub 앱을 설치하세요67* **"GitHub 앱 필수"**: 기여도 지표를 보려면 GitHub 앱을 설치하세요

68* **"데이터 처리 진행 중"**: 며칠 후 다시 확인하고 데이터가 나타나지 않으면 GitHub 앱이 설치되었는지 확인하세요68* **"데이터 처리 진행 중"**: 며칠 후 다시 확인하고 데이터가 나타나지 않으면 GitHub 앱이 설치되었는지 확인하세요

69 69 

70기여도 지표는 GitHub Cloud 및 GitHub Enterprise Server를 지원합니다.70기여도 지표는 github.com에 호스팅된 저장소를 대상으로 합니다. [GitHub Enterprise Server](/docs/ko/github-enterprise-server)의 저장소에 대해서는 분석 대시보드에 사용량 지표만 표시됩니다.

71 71 

72<h3 id="review-summary-metrics">72<h3 id="review-summary-metrics">

73 요약 지표 검토73 요약 지표 검토

Details

96 <Step title="사용자 추가">96 <Step title="사용자 추가">

97 다음 두 가지 방법 중 하나로 사용자를 추가할 수 있습니다.97 다음 두 가지 방법 중 하나로 사용자를 추가할 수 있습니다.

98 98 

99 * Console 내에서 사용자를 일괄 초대: Settings -> Members -> Invite99 * [platform.claude.com/settings/members](https://platform.claude.com/settings/members)의 Console Members 페이지에서 사용자를 일괄 초대: **Invite** 클릭

100 * [SSO 설정](https://support.claude.com/en/articles/13132885-setting-up-single-sign-on-sso)100 * [SSO 설정](https://support.claude.com/en/articles/13132885-setting-up-single-sign-on-sso)

101 </Step>101 </Step>

102 102 

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 자동 모드 분류기 요청 요금

6 

7> Claude Code 공지에서 이 세션이 자동 모드의 무료 분류기 요청에 적합하지 않다고 표시되는 문제를 해결합니다: 의미, 나타나는 이유, 해야 할 일.

8 

9[자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)에서 분류기는 셸 명령 및 네트워크 요청과 같은 작업을 실행하기 전에 검사합니다. [서버 측 검사가 켜져 있는](/docs/ko/permission-modes#server-side-classifier-review) 경우, 서버는 세션의 자체 모델 요청의 일부로 이러한 검사를 수행하며, 무료로 수행합니다. 이 공지는 서버의 검사가 세션에 도달하지 않고 있다는 의미이므로, Claude Code는 대신 자체 분류기 요청을 만들고 있으며, 계정에서 이러한 요청은 토큰 사용량에 포함됩니다:

10 

11```text theme={null}

12We're changing auto mode to no longer charge for classifier requests in Claude Code. However, this session isn't eligible.

13```

14 

15프롬프트에서 Claude Code는 이러한 방식으로 검사할 첫 번째 작업을 답변할 때까지 보류합니다. 아무것도 손상되지 않습니다: 자동 모드는 계속 작동하며, 분류기 요청은 이전과 같이 청구됩니다. 가장 일반적인 원인은 Claude Code와 API 사이의 LLM 게이트웨이 또는 프록시이며, Claude Code가 하나를 식별할 수 있을 때 공지는 이를 명시합니다. **Enter**를 눌러 계속하거나, [세션을 적합하게 만들기](#make-the-session-eligible)를 참조하여 새 세션에서 나타나지 않도록 합니다.

16 

17<h2 id="respond-to-the-notice">

18 공지에 응답하기

19</h2>

20 

21공지는 사용자가 답변할 때까지 작업을 보류합니다:

22 

23* **Enter** 계속: 보류된 작업과 나머지 세션은 Claude Code의 자체 분류기 요청을 사용하며, 이전과 같이 토큰 사용량으로 청구되고, 해당 세션에서 공지가 다시 나타나지 않습니다. 공지가 게이트웨이를 지정한 경우, 이를 승인하면 이 머신에서 24시간 동안 다시 나타나지 않습니다. 지정하지 않은 경우, 세션이 폴백될 때마다 공지가 반환됩니다.

24* **Esc** 또는 **Ctrl+C** 취소: 보류된 작업이 실행되지 않고 현재 턴이 중지되며, 세션은 여전히 자동 모드에 있습니다. 아무것도 기억되지 않으므로 다음 확인된 작업 전에 공지가 다시 나타납니다.

25 

26대신 자동 모드 사용을 중지하려면 답변 후 `Shift+Tab`으로 권한 모드를 전환하세요.

27 

28공지가 답변을 기다릴 수 없는 경우, Claude Code는 동일한 텍스트를 보고하고 세션은 자동 모드로 계속됩니다. 단, 이 머신에서 지난 24시간 내에 게이트웨이 승인이 공지를 해제한 경우는 제외됩니다. `-p`를 사용한 [비대화형 모드](/docs/ko/headless)에서는 텍스트를 stderr에 인쇄하고, `stream-json` 출력에서는 `system` 경고 메시지를 내보내며, Agent SDK 애플리케이션은 메시지 스트림에서 읽을 수 있습니다.

29 

30<h2 id="make-the-session-eligible">

31 세션을 적격으로 만들기

32</h2>

33 

34게이트웨이가 원인인 경우, 회사의 관리자 또는 게이트웨이 제공자에게 요청과 응답을 변경하지 않고 통과시켜 달라고 요청하십시오. 이는 게이트웨이가 인식하지 못하는 `safeguards` 요청 필드와 같은 요청 헤더와 본문 필드를 그대로 전달하고, `safeguard_results` 필드와 같은 키를 삭제하지 않고 도구 사용 ID를 다시 작성하지 않고 응답과 스트리밍 이벤트를 반환하는 것을 의미합니다. [게이트웨이 호환성 가이드](/docs/ko/llm-gateway-protocol#feature-pass-through)에서 설명하는 대로입니다. 이러한 방식으로 트래픽을 통과시키는 게이트웨이는 이 기능 및 향후 기능과 계속 작동합니다. 새 세션은 서버의 검사를 다시 사용합니다.

35 

36게이트웨이가 서버의 검사를 제공할 수 없다는 것을 이미 알고 있다면, 세션을 시작하기 전에 셸 또는 [`env` 설정 키](/docs/ko/settings-reference#env)에서 `CLAUDE_CODE_AUTO_MODE_SERVER`를 `0`으로 설정하여 Claude Code에 그곳에서 검사를 요청하지 않도록 지시하십시오:

37 

38```bash theme={null}

39export CLAUDE_CODE_AUTO_MODE_SERVER=0

40```

41 

42분류기 요청은 항상 Claude Code 자체이며, 같은 방식으로 청구되고, 알림이 나타나지 않습니다. Anthropic API에 직접 연결할 때, 변수는 Claude Code v2.1.281 이상이 필요합니다. `CLAUDE_CODE_AUTO_MODE_SERVER`가 설정되지 않은 상태에서 `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`을 설정하면 [사전 릴리스 기능 비활성화](/docs/ko/llm-gateway-protocol#disable-pre-release-capabilities)에서 설명하는 경우를 제외하고 서버의 검사도 꺼집니다.

43 

44`CLAUDE_CODE_AUTO_MODE_SERVER`는 임시 설정이며 나중 릴리스에서 제거될 수 있습니다.

45 

46<h2 id="why-the-notice-appears">

47 알림이 나타나는 이유

48</h2>

49 

50[서버 측 분류기 검토](/docs/ko/permission-modes#server-side-classifier-review)는 어떤 세션이 분류기 검사를 위해 서버에 요청하는지 나열합니다. Pro, Max, Team 플랜은 절대 알림을 표시하지 않습니다. 알림이 나타날 때 일반적인 원인은 다음과 같습니다:

51 

52* **경로에 LLM 게이트웨이 또는 프록시가 있습니다**: 요청 헤더를 제거하거나 다시 작성하고, 인식하지 못하는 요청 필드를 삭제하거나, 응답을 편집하는 게이트웨이입니다. 그러면 서버가 검사 요청을 받지 못하거나 Claude Code가 결과를 받지 못합니다. 구성이나 응답이 게이트웨이를 식별할 때 알림이 이를 명시합니다.

53* **서버 측 검사가 아직 플랫폼, 지역 또는 자격 증명에 도달하지 않았습니다**: 플랫폼이나 지역이 검사를 수행하는지 여부는 해당 플랫폼의 출시에 따라 달라집니다. 경로에 게이트웨이나 프록시가 없는데 알림이 계속 나타나면 이것이 가능성 있는 원인입니다. 확인하려면 지원팀이나 회사 관리자에게 문의하거나 `/feedback`으로 보고하세요.

54 

55자동 모드에 있는 세션을 확인하려면 Claude Code 프롬프트에서 `/status`를 실행하세요: **자동 모드 서버** 행은 서버의 검사가 세션의 작업을 결정하는 동안 `활성화됨`을 읽고 세션이 폴백된 후 `비활성화됨`을 읽습니다.

56 

57게이트웨이가 응답을 짧게 자르거나 결과를 Claude Code가 읽을 수 없는 형태로 다시 작성할 때, 이 알림 대신 판정이 없는 거부가 발생합니다. [서버 측 분류기 검토](/docs/ko/permission-modes#server-side-classifier-review)를 참조하세요.

58 

59<h2 id="related-resources">

60 관련 리소스

61</h2>

62 

63* [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode): 자동 모드가 무엇이고 기본적으로 무엇을 차단하는지

64* [서버 측 분류자 검토](/docs/ko/permission-modes#server-side-classifier-review): 어떤 세션이 서버에 작업을 확인하도록 요청하는지, 그리고 각각에 필요한 Claude Code 버전

65* [게이트웨이 호환성 가이드](/docs/ko/llm-gateway-protocol#feature-pass-through): 게이트웨이가 헤더 또는 본문 필드를 제거할 때 무엇이 손상되는지

66* [서버가 안전 판정을 반환하지 않음](/docs/ko/errors#the-server-returned-no-safety-verdict): 서버가 작업에 대한 판정을 제공하지 않을 때 표시되는 거부

67* [비용을 효과적으로 관리](/docs/ko/costs): 토큰 사용량을 추적하고 Claude Code 비용 절감

Details

383 383 

384화면의 거부를 보고하는 다른 두 위치는 명령 또는 URL을 생략합니다. 입력 상자 근처의 알림(예: `bash denied by auto mode · [Data Exfiltration] · /permissions`)은 도구와 이유를 제공하고, **최근 거부됨** 탭은 Claude가 작성한 설명으로 셸 명령을 나열합니다. 이러한 거부의 정확한 입력을 프로그래밍 방식으로 캡처하려면 [`PermissionDenied` 훅](/docs/ko/hooks#permissiondenied)을 추가합니다. 이 훅은 `tool_input`으로 입력을 받습니다.384화면의 거부를 보고하는 다른 두 위치는 명령 또는 URL을 생략합니다. 입력 상자 근처의 알림(예: `bash denied by auto mode · [Data Exfiltration] · /permissions`)은 도구와 이유를 제공하고, **최근 거부됨** 탭은 Claude가 작성한 설명으로 셸 명령을 나열합니다. 이러한 거부의 정확한 입력을 프로그래밍 방식으로 캡처하려면 [`PermissionDenied` 훅](/docs/ko/hooks#permissiondenied)을 추가합니다. 이 훅은 `tool_input`으로 입력을 받습니다.

385 385 

386호출 아래의 텍스트는 수정할 사항이 있는지 알려줍니다. 분류기 자체의 문제를 보고하는 텍스트(예: `is temporarily unavailable`인 모델 또는 분류기 오류)는 Claude Code가 분류기로부터 최종 판단 없이 호출을 차단했음을 의미합니다. [자동 모드가 작업의 안전성을 판단할 수 없음](/docs/ko/errors#auto-mode-cannot-determine-the-safety-of-an-action)을 참조하여 수행할 작업을 확인합니다. 그렇지 않으면 `Denied by auto mode classifier`로 읽히는 줄과 `[Production Deploy]` 또는 `Blocked by classifier`와 같은 이유는 분류기가 호출을 안전하지 않다고 판단했음을 의미하므로, 호출이 도달하거나 수행하려던 내용에서 수정 사항을 선택합니다.386호출 아래의 텍스트는 수정할 사항이 있는지 알려줍니다. 흐리게 표시된 `Not run · auto mode's check had no usable answer` 행이나 분류기 자체의 문제를 보고하는 텍스트(예: `Auto mode could not evaluate this action`)는 Claude Code가 분류기의 판단 없이 호출을 차단했음을 의미합니다. `Not run` 행의 경우 `Ctrl+O`를 눌러 전체 메시지를 읽은 다음, [자동 모드가 작업의 안전성을 판단할 수 없음](/docs/ko/errors#auto-mode-cannot-determine-the-safety-of-an-action) 또는 [서버가 안전성 판단을 반환하지 않음](/docs/ko/errors#the-server-returned-no-safety-verdict)을 참조하여 수행할 작업을 확인합니다.

387 

388그렇지 않으면 `Denied by auto mode classifier`로 읽히는 줄과 `[Production Deploy]` 또는 `Blocked by classifier`와 같은 이유는 분류기가 호출을 안전하지 않다고 판단했음을 의미하므로, 호출이 도달하거나 수행하려던 내용에서 수정 사항을 선택합니다.

387 389 

388* Claude가 작업 전체에서 필요로 하는 대상(예: 패키지 레지스트리, 내부 도메인 또는 저장소 호스트): `autoMode.environment`에 추가합니다.390* Claude가 작업 전체에서 필요로 하는 대상(예: 패키지 레지스트리, 내부 도메인 또는 저장소 호스트): `autoMode.environment`에 추가합니다.

389* 앞으로 검토 없이 실행하려는 명령: `allow` 규칙을 추가합니다.391* 앞으로 검토 없이 실행하려는 명령: `allow` 규칙을 추가합니다.


397 반복된 거부 해결399 반복된 거부 해결

398</h3>400</h3>

399 401 

400동일한 대상에 대한 반복된 거부는 일반적으로 분류기가 컨텍스트를 누락했음을 의미합니다. 해당 대상을 `autoMode.environment`에 추가하거나 [/auto-mode-setup 실행](#generate-environment-entries)하여 Claude Code가 항목을 작성하도록 한 다음 `claude auto-mode config`를 실행하여 변경 사항이 적용되었는지 확인합니다.402동일한 대상에 대한 반복된 거부는 일반적으로 분류기가 컨텍스트를 누락했음을 의미합니다. 해당 대상을 `autoMode.environment`에 추가하거나 [`/auto-mode-setup` 실행](#generate-environment-entries)하여 Claude Code가 항목을 작성하도록 한 다음 `claude auto-mode config`를 실행하여 변경 사항이 적용되었는지 확인합니다.

401 403 

402<h2 id="see-also">404<h2 id="see-also">

403 참고 항목405 참고 항목

Details

114 차례 중간에 전송된 메시지가 checkpoint되지 않음114 차례 중간에 전송된 메시지가 checkpoint되지 않음

115</h3>115</h3>

116 116 

117[Claude가 작업하는 동안 대기열에 추가한](/docs/ko/interactive-mode#queue-messages-while-claude-works) 메시지가 실행 중인 턴 내에서 Claude에 도달하면, 새로운 턴을 시작하는 대신 해당 턴에 합류합니다. 메시지는 대화에 나타나지만, Claude Code는 이에 대한 체크포인트를 생성하지 않습니다. Claude Code가 새로운 턴의 일부로 전송하는 대기열 메시지는 평소대로 체크포인트를 받으며, 여러 대기열 메시지가 [해당 턴을 공유](/docs/ko/interactive-mode#when-claude-code-sends-what-you-queued)하는 경우도 포함됩니다.117rewind 메뉴에서 [Claude가 아직 작업하는 동안 입력한](/docs/ko/interactive-mode#queue-messages-while-claude-works) 메시지에 **No code restore** 표시가 붙을 수 있습니다. Claude는 턴이 끝나기 전에 해당 메시지를 읽었습니다. [체크포인트는 턴을 시작하는 프롬프트에 대해 생성되므로](#how-checkpoints-work), 이 메시지에는 자체 체크포인트가 없습니다. Claude가 이 메시지를 읽은 후 수행한 편집은 해당 턴을 시작한 프롬프트에 포함됩니다.

118 118 

119이러한 메시지 이후 Claude가 수행한 편집을 실행 취소하려면, 턴을 시작한 프롬프트로 rewind합니다. 이렇게 하면 메시지가 도착하기 전에 Claude가 수행한 작업을 포함하여 전체 턴이 rewind됩니다.119메시지 자체에 대해서는 별도로 조치할 필요가 없습니다. 세션의 해당 부분에서 발생한 파일 변경 사항을 실행 취소하려면, 턴을 시작한 프롬프트를 선택하고 **Restore code** 또는 **Restore code and conversation**을 선택합니다. 이렇게 하면 메시지가 도착하기 전의 편집을 포함하여 전체 턴에서 Claude가 수행한 파일 편집이 되돌려집니다. 표시가 붙은 메시지를 선택해도 **Restore conversation**은 여전히 제공되며, 이 옵션은 대화를 해당 메시지 시점으로 rewind하고 파일은 그대로 유지합니다.

120 120 

121<h3 id="symlinked-and-hard-linked-paths-not-restored">121<h3 id="symlinked-and-hard-linked-paths-not-restored">

122 Symlink 및 hard link 경로가 복원되지 않음122 Symlink 및 hard link 경로가 복원되지 않음

chrome.md +3 −4

Details

129 VS Code 세션의 권한 프롬프트129 VS Code 세션의 권한 프롬프트

130</h3>130</h3>

131 131 

132VS Code 세션에서 Claude Code가 브라우저 작업 전에 확인을 요청하는지는 세션이 브라우저에 연결된 방식에 따라 달라집니다:132VS Code 세션에서 Claude Code가 브라우저 작업 전에 확인을 요청하면 프롬프트가 채팅 패널에 카드로 표시됩니다. 작업 대상이 허용하지 않은 사이트인 경우 카드에서 해당 사이트를 허용하는 옵션도 제공합니다.

133 133 

134* **`@browser`를 입력한 경우**: Claude Code가 원래 확인을 요청했을 각 브라우저 작업을 확장 프로그램이 승인합니다.134[기본적으로 활성화](#enable-chrome-by-default)가 켜져 있어 시작 시 브라우저에 연결된 세션에서는 Claude Code가 Manual, Edit automatically, Auto, Bypass permissions 모드에서 허용하지 않은 사이트에 대한 브라우저 작업 전에 확인을 요청합니다. Auto 및 Bypass permissions 모드에서는 해당 세션에서 `@browser`를 입력하기 전까지 이 동작이 적용됩니다.

135* **[기본적으로 활성화](#enable-chrome-by-default) 설정으로 시작 시 연결된 경우**: 해당 세션에서 `@browser`를 입력하기 전까지 Claude Code는 Manual, Edit automatically, Auto, Bypass permissions 모드에서 허용하지 않은 사이트에 대한 브라우저 작업 전에 확인을 요청합니다.

136 135 

137<h3 id="browser-tools-in-plan-mode">136<h3 id="browser-tools-in-plan-mode">

138 플랜 모드의 브라우저 도구137 플랜 모드의 브라우저 도구

139</h3>138</h3>

140 139 

141[플랜 모드](/docs/ko/permission-modes#analyze-before-you-edit-with-plan-mode)에서는 Claude가 GIF를 녹화하거나, 새 탭을 열거나, 단축키를 실행하기 전에 권한 프롬프트가 표시됩니다. 단, [`@browser`](#permission-prompts-in-vs-code-sessions)를 입력한 VS Code 세션은 예외입니다. 대화형 CLI 세션에서 [권한 우회 모드를 사용할 수 있고](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode) [기능 플래그 가져오기](/docs/ko/env-vars#features-that-need-feature-flag-fetching)가 꺼져 있으면 이러한 호출은 프롬프트 없이 실행됩니다.140[플랜 모드](/docs/ko/permission-modes#analyze-before-you-edit-with-plan-mode)에서는 Claude가 GIF를 녹화하거나, 새 탭을 열거나, 단축키를 실행하기 전에 권한 프롬프트가 표시됩니다. 대화형 CLI 세션에서 [권한 우회 모드를 사용할 수 있고](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode) [기능 플래그 가져오기](/docs/ko/env-vars#features-that-need-feature-flag-fetching)가 꺼져 있으면 이러한 호출은 프롬프트 없이 실행됩니다.

142 141 

143`createIfEmpty`를 설정하는 `tabs_context_mcp` 호출도 확인을 요청하며, 이러한 작업 중 하나라도 포함하는 `browser_batch` 호출도 마찬가지입니다.142`createIfEmpty`를 설정하는 `tabs_context_mcp` 호출도 확인을 요청하며, 이러한 작업 중 하나라도 포함하는 `browser_batch` 호출도 마찬가지입니다.

144 143 

Details

263 개발자 연결263 개발자 연결

264</h2>264</h2>

265 265 

266개발자는 자신의 노트북에서 한 번의 브라우저 로그인으로 회사 업무 계정을 사용하여 연결합니다. 모델에 대한 요청이 조직의 업스트림 자격 증명을 사용하여 게이트웨이를 거치기 때문에 claude.ai 계정, API 키 또는 구독이 필요하지 않습니다. 연결은 MDM을 통해 푸시하는 [클라이언트 측 관리형 설정](/docs/ko/claude-apps-gateway-config#client-side-managed-settings)에 의해 구동되므로 개발자 측에서 수동으로 설정할 것이 없습니다. 이 섹션에서는 관리자가 구성하는 내용을 다룹니다.266개발자는 자신의 노트북에서 한 번의 브라우저 로그인으로 회사 업무 계정을 사용하여 연결합니다. 모델에 대한 요청이 조직의 업스트림 자격 증명을 사용하여 게이트웨이를 거치기 때문에 claude.ai 계정, API 키 또는 구독이 필요하지 않습니다. 연결은 MDM을 통해 푸시하는 [클라이언트 측 관리형 설정](/docs/ko/claude-apps-gateway-config#client-side-managed-settings)에 의해 구동되며, 이 섹션에서는 관리자가 구성하는 내용을 다룹니다.

267 267 

268CLI는 첫 연결 시 게이트웨이의 TLS 리프 인증서 지문을 생성하고 호스트명별로 고정합니다. 로그인 중, 자동 세션 새로 고침 중, 관리형 설정 가져오기 중에 해당 핀을 다시 확인하며, 추론 요청은 핀 없이 표준 TLS 검증을 사용합니다. HTTPS 프록시를 통해 라우팅된 요청은 핀 검사를 건너뛰므로, 게이트웨이 호스트를 `NO_PROXY`에 추가하여 직접 연결을 유지하세요.268CLI는 첫 연결 시 게이트웨이의 TLS 리프 인증서 지문을 생성하고 호스트명별로 고정합니다. 로그인 중, 자동 세션 새로 고침 중, 관리형 설정 가져오기 중에 해당 핀을 다시 확인하며, 추론 요청은 핀 없이 표준 TLS 검증을 사용합니다. HTTPS 프록시를 통해 라우팅된 요청은 핀 검사를 건너뛰므로, 게이트웨이 호스트를 `NO_PROXY`에 추가하여 직접 연결을 유지하세요.

269 269 


287 게이트웨이 URL 설정287 게이트웨이 URL 설정

288</h3>288</h3>

289 289 

290MDM을 통해 또는 디스크에 직접 배포하는 OS별 [관리형 설정 파일](/docs/ko/managed-settings#delivery-mechanisms)에 세 개의 키가 들어갑니다. `forceLoginMethod`와 `forceLoginGatewayUrl`은 URL이 채워진 **Cloud gateway** 화면에서 `/login`을 바로 열고, `parentSettingsBehavior: "merge"`는 Claude Desktop이 게이트웨이의 송신 허용 목록을 자신이 시작하는 Claude Code 세션에 전달할 수 있게 합니다. 이는 [Claude Desktop 세션에 정책 전달](#deliver-policy-to-claude-desktop-sessions)에서 설명합니다.290MDM을 통해 또는 디스크에 직접 배포하는 OS별 [관리형 설정 파일](/docs/ko/managed-settings#delivery-mechanisms)에 세 개의 키가 들어갑니다. 관리형 설정이 없는 머신의 경우에는 [사용자 설정에서 게이트웨이 URL 설정](#set-the-gateway-url-in-user-settings)을 참조하세요. `forceLoginMethod`와 `forceLoginGatewayUrl`은 URL이 채워진 **Cloud gateway** 화면에서 `/login`을 바로 열고, `parentSettingsBehavior: "merge"`는 Claude Desktop이 게이트웨이의 송신 허용 목록을 자신이 시작하는 Claude Code 세션에 전달할 수 있게 합니다. 이는 [Claude Desktop 세션에 정책 전달](#deliver-policy-to-claude-desktop-sessions)에서 설명합니다.

291 291 

292```json theme={null}292```json theme={null}

293{293{


299 299 

300개발자는 Enter를 눌러 연결합니다. [첫 연결 TLS 지문 프롬프트](#connect-developers)는 여전히 나타납니다. 파일이 머신에 배포되면, 게이트웨이 로그인을 완료하지 않은 개발자는 [Administrator policy requires a Cloud gateway sign-in](/docs/ko/errors#administrator-policy-requires-a-cloud-gateway-sign-in)에 설명된 메시지 중 하나를 보게 됩니다. `CLAUDE_CODE_USE_BEDROCK` 같은 환경 변수를 통해 클라우드 제공자를 선택하는 개발자는 게이트웨이 로그인이 필요하지 않습니다.300개발자는 Enter를 눌러 연결합니다. [첫 연결 TLS 지문 프롬프트](#connect-developers)는 여전히 나타납니다. 파일이 머신에 배포되면, 게이트웨이 로그인을 완료하지 않은 개발자는 [Administrator policy requires a Cloud gateway sign-in](/docs/ko/errors#administrator-policy-requires-a-cloud-gateway-sign-in)에 설명된 메시지 중 하나를 보게 됩니다. `CLAUDE_CODE_USE_BEDROCK` 같은 환경 변수를 통해 클라우드 제공자를 선택하는 개발자는 게이트웨이 로그인이 필요하지 않습니다.

301 301 

302개발자는 이를 수동으로 설정할 수 없습니다. 로그인 선택기에는 게이트웨이 옵션이 없으며, `forceLoginGatewayUrl`은 개발자 자신의 설정 파일에서는 무시됩니다. URL 없이 `forceLoginMethod`만 설정하면 개발자에게 "IT 관리자에게 문의하세요" 메시지만 표시됩니다. 로그인 키는 머신에 푸시하는 파일에 넣어야 하며, 이미 연결된 클라이언트에만 도달하는 게이트웨이의 `managed.policies[].cli` 블록에 넣으면 안 됩니다.302로그인 선택기에는 게이트웨이 옵션이 없으며, 관리형 설정에서 URL 없이 `forceLoginMethod`만 설정하면 개발자에게 "IT 관리자에게 문의하세요" 메시지만 표시됩니다. 로그인 키는 머신에 푸시하는 파일에 넣어야 하며, 이미 연결된 클라이언트에만 도달하는 게이트웨이의 `managed.policies[].cli` 블록에 넣으면 안 됩니다.

303 

304<h4 id="set-the-gateway-url-in-user-settings">

305 사용자 설정에서 게이트웨이 URL 설정

306</h4>

307 

308관리형 설정이 없는 머신에서는 각 개발자가 자신의 사용자 설정 파일인 `~/.claude/settings.json`에 `forceLoginMethod`와 `forceLoginGatewayUrl`을 추가하도록 하세요. 이를 위해서는 개발자 머신에 Claude Code v2.1.295 이상이 필요합니다. 이 예제는 `claude-gateway.internal.example.com`의 게이트웨이를 지정합니다.

309 

310```json theme={null}

311{

312 "forceLoginMethod": "gateway",

313 "forceLoginGatewayUrl": "https://claude-gateway.internal.example.com"

314}

315```

316 

317개발자가 Claude Code 프롬프트에서 `/login`을 실행하면 해당 주소로 **Cloud gateway** 화면이 열리고, 개발자는 Enter를 눌러 연결합니다. [첫 연결 TLS 지문 프롬프트](#connect-developers)는 여전히 나타납니다. 이 방식으로 설정한 키에는 다음 제한이 적용됩니다.

318 

319* **사용자 설정에서만 유효**: Claude Code는 프로젝트의 `.claude/settings.json` 또는 `.claude/settings.local.json`이 아니라 `~/.claude/settings.json`에서 두 키를 읽습니다.

320* **관리형 설정이 있으면 무시됨**: 관리형 설정 파일, macOS plist 또는 Windows HKLM 정책, 또는 [정책 헬퍼](/docs/ko/settings-reference#policyhelper)를 통해 관리자의 설정이 머신에 도달하면, Claude Code는 사용자 설정에 지정된 게이트웨이를 무시합니다.

303 321 

304<h3 id="allow-a-gateway-on-public-address-space-you-own">322<h3 id="allow-a-gateway-on-public-address-space-you-own">

305 소유한 공인 주소 공간의 게이트웨이 허용323 소유한 공인 주소 공간의 게이트웨이 허용

Details

981 * **혼합된 키**: `code`와 `cli`(또는 이전 표기인 `settings`)가 모두 있는 파일은 부팅 시 게이트웨이를 중지시킵니다. 모든 블록을 한 번의 편집으로 하나의 키 아래에 두십시오.981 * **혼합된 키**: `code`와 `cli`(또는 이전 표기인 `settings`)가 모두 있는 파일은 부팅 시 게이트웨이를 중지시킵니다. 모든 블록을 한 번의 편집으로 하나의 키 아래에 두십시오.

982</Warning>982</Warning>

983 983 

984`.env` 파일 읽기를 거부하는 규칙 같은 정책의 Claude Code 설정은 `cli` 또는 `code` 키 아래 블록에 들어갑니다. 두 키는 같은 내용을 받습니다. 키에 따라 설정이 적용되는 위치가 결정됩니다.984`.env` 파일 읽기를 거부하는 규칙과 같은 정책의 Claude Code 설정은 `cli` 또는 `code` 키 아래의 블록에 들어갑니다. `code`가 권장 키이며, `cli`는 레거시 키입니다. 두 키 모두 동일한 내용을 받습니다. 키는 설정이 적용되는 위치를 결정합니다.

985 985 

986* **`cli`**: 터미널, VS Code 및 JetBrains 확장 프로그램, Agent SDK. `cli` 아래에서 Claude Desktop의 Code 탭은 [파생 설정](#claude-desktop-overlay)을 받으므로, `Read(./.env)` 같은 범위 지정 규칙은 그곳의 사용자를 막지 않습니다.986* **`cli`**: 터미널, VS Code 및 JetBrains 확장 프로그램, Agent SDK. `cli` 아래에서 Claude Desktop의 Code 탭은 [파생 설정](#claude-desktop-overlay)을 받으므로, `Read(./.env)` 같은 범위 지정 규칙은 그곳의 사용자를 막지 않습니다.

987* **`code`**: 같은 위치이며, Claude Desktop의 Code 탭도 포함할 수 있습니다.987* **`code`**: 같은 위치이며, Claude Desktop의 Code 탭도 포함할 수 있습니다.

988 988 

989선택의 기준은 이 설정이 Code 탭에도 적용되어야 하는지 여부입니다. 그렇지 않다면 아무것도 바꾸지 마십시오. `cli`를 사용하는 파일은 기존대로 동작하며, [`desktop`](#claude-desktop-overlay) 키가 있는 정책에서 `cli`를 발견한 게이트웨이는 부팅 시 경고를 표시하지만 그대로 시작됩니다. Code 탭도 포함하려면 권장 키인 `code`로 전환하십시오.989`cli`를 사용하는 파일은 이전과 같이 동작하며, [`desktop`](#claude-desktop-overlay) 키가 있는 정책에서 `cli`를 발견한 게이트웨이는 부팅 시 경고하지만 시작은 합니다. 설정이 Code 탭에도 적용될 수 있도록 `code`로 전환하십시오.

990 990 

991전환하기 전에 [Code 탭에서 `code` 설정 적용하기](#apply-code-settings-in-the-code-tab)를 읽으십시오. 설정이 Code 탭에 적용되려면 정책에 `desktop` 키가 있어야 하고 사용자 머신에 설정 작업이 필요하며, Claude Desktop에서 웹 검색이 꺼집니다.991전환하기 전에 [Code 탭에서 `code` 설정 적용하기](#apply-code-settings-in-the-code-tab)를 읽으십시오. 설정이 Code 탭에 적용되려면 정책에 `desktop` 키가 있어야 하고 사용자 머신에 설정 작업이 필요하며, Claude Desktop에서 웹 검색이 꺼집니다.

992 992 


1713 1713 

1714Claude Desktop의 경우 Claude Desktop의 자체 [관리형 구성](https://claude.com/docs/third-party/claude-desktop/configuration)에서 `bootstrapUrl` 키를 `<listen.public_url>/user/bootstrap`으로 설정합니다. 로그인 흐름 및 그룹별 정책은 정책이 `desktop` 키로 서버 측에서 옵트인되면 CLI의 정책과 일치합니다. 옵트인이 없으면 `/user/bootstrap`은 404를 반환합니다. 서버 측 절반은 [Claude Desktop 오버레이](#claude-desktop-overlay)를 참조하십시오.1714Claude Desktop의 경우 Claude Desktop의 자체 [관리형 구성](https://claude.com/docs/third-party/claude-desktop/configuration)에서 `bootstrapUrl` 키를 `<listen.public_url>/user/bootstrap`으로 설정합니다. 로그인 흐름 및 그룹별 정책은 정책이 `desktop` 키로 서버 측에서 옵트인되면 CLI의 정책과 일치합니다. 옵트인이 없으면 `/user/bootstrap`은 404를 반환합니다. 서버 측 절반은 [Claude Desktop 오버레이](#claude-desktop-overlay)를 참조하십시오.

1715 1715 

1716Claude Code는 [`forceLoginGatewayUrl`](/docs/ko/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/ko/settings-reference#gatewayinternalnetworks), 및 [`forceLoginMethod`](/docs/ko/settings-reference#forceloginmethod)의 `"gateway"` 값을 머신의 관리형 소스에서만 인정합니다: `managed-settings.json`, macOS plist 또는 Windows HKLM 레지스트리, 또는 정책 헬퍼. 개발자가 자신의 `~/.claude/settings.json`에서 이들을 설정하는 것은 게이트웨이 로그인을 구성하지 않으며, 게이트웨이 페이로드에서 설정하는 것도 마찬가지입니다.1716Claude Code는 [`forceLoginGatewayUrl`](/docs/ko/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/ko/settings-reference#gatewayinternalnetworks), 및 [`forceLoginMethod`](/docs/ko/settings-reference#forceloginmethod)의 `"gateway"` 값을 머신의 관리형 소스에서 인정합니다: `managed-settings.json`, macOS plist 또는 Windows HKLM 레지스트리, 또는 정책 헬퍼. 게이트웨이 페이로드에서 이들을 설정해도 게이트웨이 로그인은 구성되지 않습니다. 개발자 자신의 `~/.claude/settings.json`에 대해서는 [사용자 설정에서 게이트웨이 URL 설정](/docs/ko/claude-apps-gateway#set-the-gateway-url-in-user-settings)을 참조하십시오.

1717 1717 

1718페이로드에서 `forceLoginMethod` 및 `forceLoginOrgUUID`를 제외합니다. Claude Code는 여전히 시작 자격 증명 확인을 위해 페이로드에서 두 키를 모두 읽으므로, 머신에 Anthropic 발급 자격 증명을 유지하는 개발자는 로그인 후에도 [관리자 정책이 Cloud 게이트웨이 로그인을 요구합니다](/docs/ko/errors#administrator-policy-requires-a-cloud-gateway-sign-in)에서 설명한 시작 종료를 받게 됩니다.1718페이로드에서 `forceLoginMethod` 및 `forceLoginOrgUUID`를 제외합니다. Claude Code는 여전히 시작 자격 증명 확인을 위해 페이로드에서 두 키를 모두 읽으므로, 머신에 Anthropic 발급 자격 증명을 유지하는 개발자는 로그인 후에도 [관리자 정책이 Cloud 게이트웨이 로그인을 요구합니다](/docs/ko/errors#administrator-policy-requires-a-cloud-gateway-sign-in)에서 설명한 시작 종료를 받게 됩니다.

1719 1719 

Details

135 게이트웨이 URL을 개발자 머신으로 푸시135 게이트웨이 URL을 개발자 머신으로 푸시

136</h3>136</h3>

137 137 

138게이트웨이가 제공되면, MDM을 통해 또는 OS별 `managed-settings.json`을 직접 작성하여 관리형 설정을 통해 각 개발자의 머신으로 `forceLoginMethod`, `forceLoginGatewayUrl` 및 `parentSettingsBehavior: "merge"`를 푸시하세요. 이 없이는 `/login`이 게이트웨이 옵션이 없는 표준 계정 선택기를 표시합니다.138게이트웨이가 제공되면, MDM을 통해 또는 OS별 `managed-settings.json`을 직접 작성하여 관리형 설정을 통해 각 개발자의 머신으로 `forceLoginMethod`, `forceLoginGatewayUrl` 및 `parentSettingsBehavior: "merge"`를 푸시하세요.

139 139 

140키를 배포하면 Claude Code는 머신의 남은 API 키 또는 claude.ai 로그인을 사용하지 않으므로, 로그인 지침과 함께 푸시를 계획하세요. [관리자 정책에서 Cloud 게이트웨이 로그인 필요](/docs/ko/errors#administrator-policy-requires-a-cloud-gateway-sign-in)는 개발자가 보는 메시지를 설명합니다.140키를 배포하면 Claude Code는 머신의 남은 API 키 또는 claude.ai 로그인을 사용하지 않으므로, 로그인 지침과 함께 푸시를 계획하세요. [관리자 정책에서 Cloud 게이트웨이 로그인 필요](/docs/ko/errors#administrator-policy-requires-a-cloud-gateway-sign-in)는 개발자가 보는 메시지를 설명합니다.

141 141 

Details

277 277 

278스레드는 스레드의 모델이 지원할 때 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)에서 실행되므로, 대부분의 도구 호출은 사용자에게 묻지 않고 실행됩니다. 스레드가 사용자의 승인이 필요할 때, 프롬프트는 해당 스레드 내부에 있고 스레드는 거기서 답변할 때까지 기다립니다. 프로젝트 대화에서 Claude에 진행하라고 말하는 것은 도달하지 않습니다.278스레드는 스레드의 모델이 지원할 때 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)에서 실행되므로, 대부분의 도구 호출은 사용자에게 묻지 않고 실행됩니다. 스레드가 사용자의 승인이 필요할 때, 프롬프트는 해당 스레드 내부에 있고 스레드는 거기서 답변할 때까지 기다립니다. 프로젝트 대화에서 Claude에 진행하라고 말하는 것은 도달하지 않습니다.

279 279 

280각 승인은 해당 프롬프트 또는 더 광범위한 옵션을 선택하면 해당 스레드의 나머지를 포함합니다. 모든 스레드가 특정 명령을 묻지 않고 실행하도록 하거나 일부를 차단하려면, 저장소의 `.claude/settings.json`에 [권한 규칙](/docs/ko/permissions)을 추가합니다. 클라우드 스레드는 한 저장소가 있는 프로젝트에서만 적용합니다. [스레드가 저장소에서 선택하는 것](#what-threads-pick-up-from-your-repositories)을 참조합니다. 여러 저장소가 있는 프로젝트에서는 저장소의 권한 규칙이 클라우드 스레드에 도달하지 않으므로, 자동 모드와 각 스레드 내에서 주는 승인에 의존합니다.280각 승인은 해당 프롬프트에 적용되며, 더 광범위한 옵션을 선택하면 해당 스레드의 나머지에 적용됩니다.

281 

282모든 스레드가 특정 명령을 묻지 않고 실행하도록 하거나 일부를 차단하려면, 저장소의 `.claude/settings.json`에 [권한 규칙](/docs/ko/permissions)을 추가합니다. 프로젝트의 클라우드 스레드가 이 규칙을 적용하는지 확인합니다.

283 

284* **저장소 하나**: 클라우드 스레드가 규칙을 적용합니다. [스레드가 저장소에서 선택하는 것](#what-threads-pick-up-from-your-repositories)을 참조합니다.

285* **여러 저장소, Anthropic 호스팅 환경**: 어떤 저장소의 권한 규칙도 클라우드 스레드에 도달하지 않으므로, 자동 모드와 각 스레드 내에서 주는 승인에 의존합니다.

286* **여러 저장소, 자체 호스팅 환경**: [어떤 저장소의 설정이 적용되는지](/docs/ko/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories)를 참조합니다.

281 287 

282<h3 id="run-a-thread-on-your-own-computer">288<h3 id="run-a-thread-on-your-own-computer">

283 자신의 컴퓨터에서 스레드 실행289 자신의 컴퓨터에서 스레드 실행


381 저장소에서 스레드가 가져오는 것387 저장소에서 스레드가 가져오는 것

382</h3>388</h3>

383 389 

384각 클라우드 스레드는 프로젝트의 모든 저장소를 복제하고 모든 저장소에서 `CLAUDE.md`와 스킬을 로드합니다. 권한 규칙, 훅, `env`는 스레드가 시작하는 디렉토리의 `.claude/settings.json`에서만 옵니다: 프로젝트에 저장소가 하나일 때는 저장소 내부이고, 여러 개일 때는 복제본 위이며, 이 경우 이들 항목을 위해 어떤 저장소의 파일도 읽히지 않습니다.390각 클라우드 스레드는 프로젝트의 모든 저장소를 복제하고 모든 저장소에서 `CLAUDE.md`와 스킬을 로드합니다. 권한 규칙, 훅, `env`는 스레드가 시작하는 디렉토리의 `.claude/settings.json`에서만 옵니다.

385 391 

386| 각 저장소에서 | 한 저장소 | 여러 저장소 |392| 각 저장소에서 | 한 저장소 | 여러 저장소 |

387| :- | :- | :- |393| :- | :- | :- |

388| `CLAUDE.md` | 스레드가 시작할 때 로드됨 | 스레드가 시작할 때 모든 저장소에서 로드됨 |394| `CLAUDE.md` | 스레드가 시작할 때 로드됨 | 스레드가 시작할 때 모든 저장소에서 로드됨 |

389| `.claude/` 아래의 스킬, 에이전트, 명령 | 로드됨 | 모든 저장소에서 로드됨 |395| `.claude/` 아래의 스킬, 에이전트, 명령 | 로드됨 | 모든 저장소에서 로드됨 |

390| `.claude/settings.json`에서 활성화된 플러그인 | 로드되지 않음. 대신 **프로젝트 설정 > 플러그인**에서 플러그인을 추가하세요 | 로드되지 않음. 대신 **프로젝트 설정 > 플러그인**에서 플러그인을 추가하세요 |396| `.claude/settings.json`에서 활성화된 플러그인 | 로드되지 않음. 대신 **프로젝트 설정 > 플러그인**에서 플러그인을 추가하세요 | 로드되지 않음. 대신 **프로젝트 설정 > 플러그인**에서 플러그인을 추가하세요 |

391| `.claude/settings.json`에서 정의된 권한 규칙, 훅, `env` | 스레드에 적용됩니다. 단, [클라우드 세션이 인정하지 않는](/docs/ko/cloud-environments#what-carries-over-from-your-setup) `env` 키는 제외됩니다 | 적용되지 않음 |397| `.claude/settings.json`에서 정의된 권한 규칙, 훅, `env` | 스레드에 적용됩니다. 단, [클라우드 세션이 인정하지 않는](/docs/ko/cloud-environments#what-carries-over-from-your-setup) `env` 키는 제외됩니다 | Anthropic 호스팅 환경에서는 적용되지 않습니다. 자체 호스팅 환경의 경우 [어떤 저장소의 설정이 적용되는지](/docs/ko/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories)를 참조하세요 |

392 398 

393여러 저장소가 있는 프로젝트에서, 각 복제본은 스레드에 [추가 디렉토리](/docs/ko/memory#load-from-additional-directories)로 첨부되며 `CLAUDE.md` 로드가 켜져 있습니다. 이것이 스레드가 위에서 시작하더라도 모든 저장소의 `CLAUDE.md`와 스킬이 시작할 때 로드되는 이유입니다. 이러한 프로젝트에서는 프로젝트 지침에 상시 규칙을 넣고 [클라우드 환경](#choose-an-environment-for-threads)을 통해 스레드에 환경 변수를 제공하세요.399여러 저장소가 있는 프로젝트에서는 프로젝트 지침에 상시 규칙을 넣고 [클라우드 환경](#choose-an-environment-for-threads)을 통해 스레드에 환경 변수를 제공하세요.

394 400 

395<h3 id="choose-an-environment-for-threads">401<h3 id="choose-an-environment-for-threads">

396 스레드의 환경 선택하기402 스레드의 환경 선택하기


406 412 

407클라우드 스레드는 머신에만 설치된 스킬, MCP 서버, 플러그인, 도구가 없습니다. [Remote Control](/docs/ko/remote-control)을 통해 Claude가 머신에서 실행하는 스레드는 거기에 설치된 것을 사용합니다. 이들 각각을 클라우드 스레드에서 사용 가능하게 하려면:413클라우드 스레드는 머신에만 설치된 스킬, MCP 서버, 플러그인, 도구가 없습니다. [Remote Control](/docs/ko/remote-control)을 통해 Claude가 머신에서 실행하는 스레드는 거기에 설치된 것을 사용합니다. 이들 각각을 클라우드 스레드에서 사용 가능하게 하려면:

408 414 

409* 스킬, 서브에이전트, 명령: 프로젝트에 추가한 저장소에 커밋합니다. 예를 들어 `.claude/skills/<skill-name>/SKILL.md`의 스킬입니다. 각 클라우드 스레드는 프로젝트의 모든 저장소를 복제하고 각 저장소에서 `.claude/skills/`, `.claude/agents/`, `.claude/commands/`를 로드하므로, 한 저장소에 커밋된 스킬은 모든 클라우드 스레드에서 사용 가능합니다. 클라우드 스레드는 또한 claude.ai 계정에 대해 활성화한 스킬을 로드합니다.415* 스킬, 서브에이전트, 명령: 프로젝트에 추가한 저장소에 커밋합니다. 예를 들어 `.claude/skills/<skill-name>/SKILL.md`의 스킬입니다. 각 클라우드 스레드는 프로젝트의 모든 저장소를 복제하고 각 저장소에서 `.claude/skills/`, `.claude/agents/`, `.claude/commands/`를 로드하므로, 한 저장소에 커밋된 스킬은 모든 클라우드 스레드에서 사용 가능합니다. 클라우드 스레드는 또한 [claude.ai 계정에 대해 활성화한 스킬](/docs/ko/skills#skills-in-cowork-and-cloud-sessions)을 로드합니다.

410* 플러그인: **프로젝트 설정 > 플러그인**에서 추가합니다; 각 새로운 클라우드 스레드에 로드됩니다. 저장소가 `.claude/settings.json`에서 선언하는 플러그인은 [클라우드 스레드에 로드되지 않습니다](/docs/ko/cloud-environments#what-carries-over-from-your-setup).416* 플러그인: **프로젝트 설정 > 플러그인**에서 추가합니다; 각 새로운 클라우드 스레드에 로드됩니다. 저장소가 `.claude/settings.json`에서 선언하는 플러그인은 [클라우드 스레드에 로드되지 않습니다](/docs/ko/cloud-environments#what-carries-over-from-your-setup).

411* MCP 서버: 클라우드 스레드는 claude.ai 계정의 커넥터에서 MCP 도구를 가져옵니다. 커넥터는 [claude.ai/customize/connectors](https://claude.ai/customize/connectors)에서 한 번 연결하거나 **프로젝트 설정 > 환경**의 **커넥터 관리** 링크를 통해 연결하는 MCP 서버입니다. 모든 클라우드 스레드는 프로젝트별 설정 없이 모두 사용할 수 있습니다. 프로젝트 대화 자체는 커넥터가 없으므로 커넥터가 필요한 작업을 클라우드 스레드의 작업으로 보냅니다. 한 저장소가 있는 프로젝트에서, 클라우드 스레드는 또한 해당 저장소의 [`.mcp.json`](/docs/ko/cloud-environments#what-carries-over-from-your-setup)에서 MCP 서버를 로드합니다. [커넥터가 Claude Code에 도달하는 방법](/docs/ko/mcp#how-connectors-reach-claude-code)은 클라우드 세션의 규칙과 커넥터를 끄는 설정을 나열합니다.417* MCP 서버: 클라우드 스레드는 claude.ai 계정의 커넥터에서 MCP 도구를 가져옵니다. 커넥터는 [claude.ai/customize/connectors](https://claude.ai/customize/connectors)에서 한 번 연결하거나 **프로젝트 설정 > 환경**의 **커넥터 관리** 링크를 통해 연결하는 MCP 서버입니다. 모든 클라우드 스레드는 프로젝트별 설정 없이 모두 사용할 수 있습니다. 프로젝트 대화 자체는 커넥터가 없으므로 커넥터가 필요한 작업을 클라우드 스레드의 작업으로 보냅니다. 한 저장소가 있는 프로젝트에서, 클라우드 스레드는 또한 해당 저장소의 [`.mcp.json`](/docs/ko/cloud-environments#what-carries-over-from-your-setup)에서 MCP 서버를 로드합니다. [커넥터가 Claude Code에 도달하는 방법](/docs/ko/mcp#how-connectors-reach-claude-code)은 클라우드 세션의 규칙과 커넥터를 끄는 설정을 나열합니다.

412* 명령줄 도구 및 패키지: 환경의 [설정 스크립트](/docs/ko/cloud-environments#setup-scripts)에 설치합니다.418* 명령줄 도구 및 패키지: 환경의 [설정 스크립트](/docs/ko/cloud-environments#setup-scripts)에 설치합니다.

Details

28| `claude auth logout` | Anthropic 계정에서 로그아웃합니다 | `claude auth logout` |28| `claude auth logout` | Anthropic 계정에서 로그아웃합니다 | `claude auth logout` |

29| `claude auth status` | 인증 상태를 JSON으로 표시합니다. 사람이 읽을 수 있는 출력을 위해 `--text`를 사용합니다. 로그인된 경우 코드 0으로 종료되고, 로그인되지 않은 경우 1로 종료됩니다. JSON에는 CLI가 사용하는 [구성 디렉토리](/docs/ko/claude-directory)의 이름을 지정하는 `configDirectory` 필드가 포함됩니다. 이 필드는 Claude Code v2.1.268 이상이 필요합니다. JSON의 `authMethod` 필드는 `none`, `claude.ai`, `oauth_token`, `api_key`, `api_key_helper` 또는 `third_party` 중 하나입니다 | `claude auth status` |29| `claude auth status` | 인증 상태를 JSON으로 표시합니다. 사람이 읽을 수 있는 출력을 위해 `--text`를 사용합니다. 로그인된 경우 코드 0으로 종료되고, 로그인되지 않은 경우 1로 종료됩니다. JSON에는 CLI가 사용하는 [구성 디렉토리](/docs/ko/claude-directory)의 이름을 지정하는 `configDirectory` 필드가 포함됩니다. 이 필드는 Claude Code v2.1.268 이상이 필요합니다. JSON의 `authMethod` 필드는 `none`, `claude.ai`, `oauth_token`, `api_key`, `api_key_helper` 또는 `third_party` 중 하나입니다 | `claude auth status` |

30| `claude agents` | [에이전트 보기](/docs/ko/agent-view)를 열어 병렬 백그라운드 세션을 모니터링하고 디스패치합니다. `--cwd <path>`를 사용하여 해당 디렉토리 아래에서 시작된 세션만 표시하거나, `--json`을 사용하여 스크립팅을 위해 활성 세션을 JSON 배열로 인쇄합니다(`--json --all`은 완료된 백그라운드 세션도 포함합니다). `--permission-mode`, `--model`, `--effort` 또는 `--agent`를 전달하여 [디스패치된 세션의 기본값](/docs/ko/agent-view#permission-mode-model-and-effort)을 설정합니다. 최상위 `claude` 명령처럼 `--settings`, `--add-dir`, `--plugin-dir` 및 `--mcp-config`를 허용합니다. 에이전트 보기를 열려면 대화형 터미널이 필요합니다 | `claude agents --json` |30| `claude agents` | [에이전트 보기](/docs/ko/agent-view)를 열어 병렬 백그라운드 세션을 모니터링하고 디스패치합니다. `--cwd <path>`를 사용하여 해당 디렉토리 아래에서 시작된 세션만 표시하거나, `--json`을 사용하여 스크립팅을 위해 활성 세션을 JSON 배열로 인쇄합니다(`--json --all`은 완료된 백그라운드 세션도 포함합니다). `--permission-mode`, `--model`, `--effort` 또는 `--agent`를 전달하여 [디스패치된 세션의 기본값](/docs/ko/agent-view#permission-mode-model-and-effort)을 설정합니다. 최상위 `claude` 명령처럼 `--settings`, `--add-dir`, `--plugin-dir` 및 `--mcp-config`를 허용합니다. 에이전트 보기를 열려면 대화형 터미널이 필요합니다 | `claude agents --json` |

31| `claude attach <id\|name>` | 이 터미널에서 [백그라운드 세션](/docs/ko/agent-view#manage-sessions-from-the-shell)에 연결합니다. ID 대신 세션 이름의 일부를 전달하려면 Claude Code v2.1.290 이상이 필요합니다 | `claude attach 7c5dcf5d` |31| `claude attach <id\|name>` | 이 터미널에서 [백그라운드 세션](/docs/ko/agent-view#manage-sessions-from-the-shell)에 연결합니다. ID 대신 실행 중인 세션 이름의 일부를 전달하려면 Claude Code v2.1.290 이상이 필요합니다 | `claude attach 7c5dcf5d` |

32| `claude auto-mode defaults` | 기본 제공 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode) 분류기 규칙을 JSON으로 인쇄합니다. `claude auto-mode config`를 사용하여 설정이 적용된 유효한 구성을 확인합니다. `--label <prefix>`는 해당 접두사로 시작하는 레이블이 있는 규칙만 인쇄합니다(대소문자 구분 안 함). Claude Code v2.1.208 이상이 필요합니다 | `claude auto-mode defaults --label 'Git Destructive'` |32| `claude auto-mode defaults` | 기본 제공 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode) 분류기 규칙을 JSON으로 인쇄합니다. `claude auto-mode config`를 사용하여 설정이 적용된 유효한 구성을 확인합니다. `--label <prefix>`는 해당 접두사로 시작하는 레이블이 있는 규칙만 인쇄합니다(대소문자 구분 안 함). Claude Code v2.1.208 이상이 필요합니다 | `claude auto-mode defaults --label 'Git Destructive'` |

33| `claude auto-mode reset` | 사용자 설정 파일에서 `autoMode` 섹션을 제거하여 기본 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode) 구성을 복원합니다. 작성하기 전에 확인을 요청합니다. `-y`/`--yes`를 전달하여 프롬프트를 건너뜁니다. [관리형 설정](/docs/ko/server-managed-settings) 또는 `--settings` 플래그의 규칙은 여전히 적용됩니다. Claude Code v2.1.212 이상이 필요합니다. [기본값 및 유효한 구성 검사](/docs/ko/auto-mode-config#inspect-the-defaults-and-your-effective-config) 참조 | `claude auto-mode reset --yes` |33| `claude auto-mode reset` | 사용자 설정 파일에서 `autoMode` 섹션을 제거하여 기본 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode) 구성을 복원합니다. 작성하기 전에 확인을 요청합니다. `-y`/`--yes`를 전달하여 프롬프트를 건너뜁니다. [관리형 설정](/docs/ko/server-managed-settings) 또는 `--settings` 플래그의 규칙은 여전히 적용됩니다. Claude Code v2.1.212 이상이 필요합니다. [기본값 및 유효한 구성 검사](/docs/ko/auto-mode-config#inspect-the-defaults-and-your-effective-config) 참조 | `claude auto-mode reset --yes` |

34| `claude daemon logs` | 백그라운드 세션 [감독자](/docs/ko/agent-view#the-supervisor-process)의 로그 파일 `~/.claude/daemon.log`를 팔로우하며, `Ctrl+C`를 누를 때까지 새 줄이 들어오는 대로 인쇄합니다 | `claude daemon logs` |34| `claude daemon logs` | 백그라운드 세션 [감독자](/docs/ko/agent-view#the-supervisor-process)의 로그 파일 `~/.claude/daemon.log`를 팔로우하며, `Ctrl+C`를 누를 때까지 새 줄이 들어오는 대로 인쇄합니다 | `claude daemon logs` |


68| `--agent` | 현재 세션에 대한 에이전트를 지정합니다(`agent` 설정 재정의) | `claude --agent my-custom-agent` |68| `--agent` | 현재 세션에 대한 에이전트를 지정합니다(`agent` 설정 재정의) | `claude --agent my-custom-agent` |

69| `--agents` | JSON을 통해 사용자 정의 서브에이전트를 동적으로 정의합니다. [CLI 정의 서브에이전트에 대해 나열된 필드](/docs/ko/sub-agents#choose-the-subagent-scope)를 허용합니다. `--print`를 사용하면 값이 대신 JSON 객체를 보유하는 JSON 파일의 경로일 수 있습니다. 파일 형식에는 Claude Code v2.1.281 이상이 필요합니다. Claude Code는 시작 시 값을 검증하고 잘못된 값에서 종료합니다. 메시지 및 검증을 건너뛰는 플래그와 환경 변수는 [`Invalid --agents configuration`](/docs/ko/errors#invalid-agents-configuration)을 참조하세요. 검증에는 Claude Code v2.1.242 이상이 필요합니다 | `claude --agents '{"reviewer":{"description":"Reviews code","prompt":"You are a code reviewer"}}'` |69| `--agents` | JSON을 통해 사용자 정의 서브에이전트를 동적으로 정의합니다. [CLI 정의 서브에이전트에 대해 나열된 필드](/docs/ko/sub-agents#choose-the-subagent-scope)를 허용합니다. `--print`를 사용하면 값이 대신 JSON 객체를 보유하는 JSON 파일의 경로일 수 있습니다. 파일 형식에는 Claude Code v2.1.281 이상이 필요합니다. Claude Code는 시작 시 값을 검증하고 잘못된 값에서 종료합니다. 메시지 및 검증을 건너뛰는 플래그와 환경 변수는 [`Invalid --agents configuration`](/docs/ko/errors#invalid-agents-configuration)을 참조하세요. 검증에는 Claude Code v2.1.242 이상이 필요합니다 | `claude --agents '{"reviewer":{"description":"Reviews code","prompt":"You are a code reviewer"}}'` |

70| `--allow-dangerously-skip-permissions` | `Shift+Tab` 모드 사이클에 `bypassPermissions`를 추가하되 시작하지 않습니다. `plan`과 같은 다른 모드에서 시작하고 나중에 `bypassPermissions`로 전환할 수 있습니다. [권한 모드](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)를 참조하세요 | `claude --permission-mode plan --allow-dangerously-skip-permissions` |70| `--allow-dangerously-skip-permissions` | `Shift+Tab` 모드 사이클에 `bypassPermissions`를 추가하되 시작하지 않습니다. `plan`과 같은 다른 모드에서 시작하고 나중에 `bypassPermissions`로 전환할 수 있습니다. [권한 모드](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)를 참조하세요 | `claude --permission-mode plan --allow-dangerously-skip-permissions` |

71| `--allowedTools`, `--allowed-tools` | 권한을 묻지 않고 실행되는 도구입니다. 패턴 매칭에 대해 [권한 규칙 구문](/docs/ko/settings-reference#permission-rule-syntax)을 참조하세요. 사용 가능한 도구를 제한하려면 대신 `--tools`를 사용하세요. [작업 추적 도구](/docs/ko/tools-reference#task-tool-availability) 중 하나를 여기에 이름 지으면 Claude Code도 세션을 옵트인합니다 | `"Bash(git log *)" "Bash(git diff *)" "Read"` |71| `--allowedTools`, `--allowed-tools` | [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기를 제외하고, 권한을 묻지 않고 실행되는 도구입니다. 패턴 매칭에 대해 [권한 규칙 구문](/docs/ko/settings-reference#permission-rule-syntax)을 참조하세요. 사용 가능한 도구를 제한하려면 대신 `--tools`를 사용하세요. [작업 추적 도구](/docs/ko/tools-reference#task-tool-availability) 중 하나를 여기에 이름 지으면 Claude Code도 세션을 옵트인합니다 | `"Bash(git log *)" "Bash(git diff *)" "Read"` |

72| `--append-subagent-system-prompt` | [포크된 서브에이전트](/docs/ko/sub-agents#fork-the-current-conversation)를 제외한 모든 [서브에이전트](/docs/ko/sub-agents)의 시스템 프롬프트 끝에 사용자 정의 텍스트를 추가합니다. 포크된 서브에이전트는 대화 자체의 프롬프트를 재사용합니다. 중첩된 서브에이전트를 포함합니다. `-p`를 사용한 비대화형 모드에서만 적용됩니다. Claude Code v2.1.205 이상이 필요합니다 | `claude -p --append-subagent-system-prompt "Cite file paths in every answer" "query"` |72| `--append-subagent-system-prompt` | [포크된 서브에이전트](/docs/ko/sub-agents#fork-the-current-conversation)를 제외한 모든 [서브에이전트](/docs/ko/sub-agents)의 시스템 프롬프트 끝에 사용자 정의 텍스트를 추가합니다. 포크된 서브에이전트는 대화 자체의 프롬프트를 재사용합니다. 중첩된 서브에이전트를 포함합니다. `-p`를 사용한 비대화형 모드에서만 적용됩니다. Claude Code v2.1.205 이상이 필요합니다 | `claude -p --append-subagent-system-prompt "Cite file paths in every answer" "query"` |

73| `--append-subagent-system-prompt-file` | 파일에서 텍스트를 로드하고 [서브에이전트](/docs/ko/sub-agents) 시스템 프롬프트에 추가합니다. 명령줄에 전달하기에 너무 긴 텍스트의 경우 `--append-subagent-system-prompt`의 대안입니다. 두 플래그를 결합할 수 없습니다. `-p`를 사용한 비대화형 모드에서만 적용됩니다. Claude Code v2.1.261 이상이 필요합니다 | `claude -p --append-subagent-system-prompt-file ./subagent-rules.txt "query"` |73| `--append-subagent-system-prompt-file` | 파일에서 텍스트를 로드하고 [서브에이전트](/docs/ko/sub-agents) 시스템 프롬프트에 추가합니다. 명령줄에 전달하기에 너무 긴 텍스트의 경우 `--append-subagent-system-prompt`의 대안입니다. 두 플래그를 결합할 수 없습니다. `-p`를 사용한 비대화형 모드에서만 적용됩니다. Claude Code v2.1.261 이상이 필요합니다 | `claude -p --append-subagent-system-prompt-file ./subagent-rules.txt "query"` |

74| `--append-system-prompt` | 기본 시스템 프롬프트 끝에 사용자 정의 텍스트를 추가합니다 | `claude --append-system-prompt "Always use TypeScript"` |74| `--append-system-prompt` | 기본 시스템 프롬프트 끝에 사용자 정의 텍스트를 추가합니다 | `claude --append-system-prompt "Always use TypeScript"` |


81| `--channels` | (연구 미리보기) Claude가 이 세션에서 수신해야 하는 [채널](/docs/ko/channels) 알림이 있는 MCP 서버입니다. `plugin:<name>@<marketplace>` 항목의 공백으로 구분된 목록입니다. claude.ai 또는 Console API 키를 통한 Anthropic 인증이 필요합니다 | `claude --channels plugin:my-notifier@my-marketplace` |81| `--channels` | (연구 미리보기) Claude가 이 세션에서 수신해야 하는 [채널](/docs/ko/channels) 알림이 있는 MCP 서버입니다. `plugin:<name>@<marketplace>` 항목의 공백으로 구분된 목록입니다. claude.ai 또는 Console API 키를 통한 Anthropic 인증이 필요합니다 | `claude --channels plugin:my-notifier@my-marketplace` |

82| `--chrome` | 웹 자동화 및 테스트를 위해 [Chrome 브라우저 통합](/docs/ko/chrome)을 활성화합니다 | `claude --chrome` |82| `--chrome` | 웹 자동화 및 테스트를 위해 [Chrome 브라우저 통합](/docs/ko/chrome)을 활성화합니다 | `claude --chrome` |

83| `--cloud` | 작업 설명을 사용하여 새 [클라우드 세션](/docs/ko/claude-code-on-the-web)을 만듭니다. 세션 ID(`session_...` 또는 `cse_...`) 또는 claude.ai/code URL을 사용하여 `-p`로 기존 세션에 메시지를 대기열에 넣습니다. [후속 메시지 전송](/docs/ko/claude-code-on-the-web#send-follow-ups-from-the-cli)을 참조하세요. | `claude --cloud "Fix the login bug"` |83| `--cloud` | 작업 설명을 사용하여 새 [클라우드 세션](/docs/ko/claude-code-on-the-web)을 만듭니다. 세션 ID(`session_...` 또는 `cse_...`) 또는 claude.ai/code URL을 사용하여 `-p`로 기존 세션에 메시지를 대기열에 넣습니다. [후속 메시지 전송](/docs/ko/claude-code-on-the-web#send-follow-ups-from-the-cli)을 참조하세요. | `claude --cloud "Fix the login bug"` |

84| `--continue`, `-c` | 현재 디렉터리에서 가장 최근 대화를 로드합니다. [완료된 백그라운드 세션](/docs/ko/sessions#resume-a-session)을 포함합니다. 완료된 백그라운드 세션을 열려면 Claude Code v2.1.257 이상이 필요합니다. `claude -p` 또는 Agent SDK로 생성된 세션과 첫 번째 프롬프트가 `/loop`인 세션을 건너뜁니다. `claude -p --continue`는 `-p`, SDK 및 `/loop` 세션을 포함합니다. 이 디렉터리를 `/add-dir`로 추가한 세션을 포함합니다 | `claude --continue` |84| `--continue`, `-c` | 현재 디렉터리에서 가장 최근 대화를 로드합니다. [완료된 백그라운드 세션](/docs/ko/sessions#where-the-session-picker-looks)을 포함합니다. 완료된 백그라운드 세션을 열려면 Claude Code v2.1.257 이상이 필요합니다. `claude -p` 또는 Agent SDK로 생성된 세션과 첫 번째 프롬프트가 `/loop`인 세션을 건너뜁니다. `claude -p --continue`는 `-p`, SDK 및 `/loop` 세션을 포함합니다. 이 디렉터리를 `/add-dir`로 추가한 세션을 포함합니다 | `claude --continue` |

85| `--dangerously-load-development-channels` | 로컬 개발을 위해 승인된 허용 목록에 없는 [채널](/docs/ko/channels-reference#test-during-the-research-preview)을 활성화합니다. `plugin:<name>@<marketplace>` 및 `server:<name>` 항목을 허용합니다. 확인을 요청하므로 대화형 세션에서 적용됩니다. `-p`를 사용하면 Claude Code는 이 플래그를 무시합니다 | `claude --dangerously-load-development-channels server:webhook` |85| `--dangerously-load-development-channels` | 로컬 개발을 위해 승인된 허용 목록에 없는 [채널](/docs/ko/channels-reference#test-during-the-research-preview)을 활성화합니다. `plugin:<name>@<marketplace>` 및 `server:<name>` 항목을 허용합니다. 확인을 요청하므로 대화형 세션에서 적용됩니다. `-p`를 사용하면 Claude Code는 이 플래그를 무시합니다 | `claude --dangerously-load-development-channels server:webhook` |

86| `--dangerously-skip-permissions` | 권한 프롬프트를 건너뜁니다. `--permission-mode bypassPermissions`과 동등합니다. 이것이 건너뛰는 것과 건너뛰지 않는 것에 대해 [권한 모드](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)를 참조하세요. `--bg`로 시작된 세션의 경우, 모드는 [감독자가 세션을 다시 시작할 때 유지됩니다](/docs/ko/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |86| `--dangerously-skip-permissions` | 권한 프롬프트를 건너뜁니다. `--permission-mode bypassPermissions`과 동등합니다. 이것이 건너뛰는 것과 건너뛰지 않는 것에 대해 [권한 모드](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)를 참조하세요. `--bg`로 시작된 세션의 경우, 모드는 [감독자가 세션을 다시 시작할 때 유지됩니다](/docs/ko/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |

87| `--debug` | `--debug='mcp,startup'` 또는 `--debug='!1p'`와 같은 선택적 카테고리 필터링으로 디버그 모드를 활성화합니다. 필터는 `=` 형식에서만 바인딩됩니다. 공백으로 구분된 필터는 필터링 없이 디버그 모드를 활성화합니다 | `claude --debug='mcp,startup'` |87| `--debug` | `--debug='mcp,startup'` 또는 `--debug='!1p'`와 같은 선택적 카테고리 필터링으로 디버그 모드를 활성화합니다. 필터는 `=` 형식에서만 바인딩됩니다. 공백으로 구분된 필터는 필터링 없이 디버그 모드를 활성화합니다 | `claude --debug='mcp,startup'` |


108| `--maintenance` | `maintenance` 매처를 사용하여 세션 전에 [Setup 훅](/docs/ko/hooks#setup)을 실행합니다(인쇄 모드만 해당) | `claude -p --maintenance "query"` |108| `--maintenance` | `maintenance` 매처를 사용하여 세션 전에 [Setup 훅](/docs/ko/hooks#setup)을 실행합니다(인쇄 모드만 해당) | `claude -p --maintenance "query"` |

109| `--max-budget-usd` | API 호출에 대한 예상 지출이 이 금액에 도달하면 실행을 중지합니다(인쇄 모드만 해당). Claude Code는 [클라이언트 측 비용 추정치](/docs/ko/agent-sdk/cost-tracking#estimates-not-billing)를 기준으로 한도를 확인하며, 이는 실제 청구 금액과 다를 수 있습니다. [서브에이전트](/docs/ko/sub-agents)의 지출이 한도에 포함됩니다. 지출이 한도를 초과할 수 있으므로 [여유를 두세요](/docs/ko/agent-sdk/agent-loop#budget-headroom). `--continue` 또는 `--resume`으로 대화로 돌아올 때 [이전 실행에서 복원된](/docs/ko/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) 합계는 이에 포함되지 않습니다. 지출이 한도에 도달하면 다른 서브에이전트를 생성하면 `Budget limit reached`로 실패하고 Claude Code는 여전히 실행 중인 백그라운드 서브에이전트를 중지합니다. 한도 적용 동작에는 Claude Code v2.1.217 이상이 필요합니다 | `claude -p --max-budget-usd 5.00 "query"` |109| `--max-budget-usd` | API 호출에 대한 예상 지출이 이 금액에 도달하면 실행을 중지합니다(인쇄 모드만 해당). Claude Code는 [클라이언트 측 비용 추정치](/docs/ko/agent-sdk/cost-tracking#estimates-not-billing)를 기준으로 한도를 확인하며, 이는 실제 청구 금액과 다를 수 있습니다. [서브에이전트](/docs/ko/sub-agents)의 지출이 한도에 포함됩니다. 지출이 한도를 초과할 수 있으므로 [여유를 두세요](/docs/ko/agent-sdk/agent-loop#budget-headroom). `--continue` 또는 `--resume`으로 대화로 돌아올 때 [이전 실행에서 복원된](/docs/ko/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) 합계는 이에 포함되지 않습니다. 지출이 한도에 도달하면 다른 서브에이전트를 생성하면 `Budget limit reached`로 실패하고 Claude Code는 여전히 실행 중인 백그라운드 서브에이전트를 중지합니다. 한도 적용 동작에는 Claude Code v2.1.217 이상이 필요합니다 | `claude -p --max-budget-usd 5.00 "query"` |

110| `--max-turns` | 에이전트 턴의 수를 제한합니다(인쇄 모드만 해당). 한도에 도달하면 오류로 종료됩니다. 기본적으로 제한이 없습니다. `--input-format stream-json`을 사용하면 한도가 턴을 끝낼 때 여전히 대기열에 있는 메시지는 대기열에 남아 있고 자체 한도로 새 턴을 시작합니다 | `claude -p --max-turns 3 "query"` |110| `--max-turns` | 에이전트 턴의 수를 제한합니다(인쇄 모드만 해당). 한도에 도달하면 오류로 종료됩니다. 기본적으로 제한이 없습니다. `--input-format stream-json`을 사용하면 한도가 턴을 끝낼 때 여전히 대기열에 있는 메시지는 대기열에 남아 있고 자체 한도로 새 턴을 시작합니다 | `claude -p --max-turns 3 "query"` |

111| `--mcp-config` | JSON 파일 또는 문자열에서 MCP 서버를 로드합니다(공백으로 구분). 이 플래그를 `-p`와 함께 전달하면 Claude Code는 첫 번째 턴을 실행하기 전에 여전히 보류 중인 서버가 연결될 때까지 기다립니다. [`MCP_TIMEOUT`](/docs/ko/env-vars) 시작 시간 초과(기본값 30초)까지입니다. [캐시된 도구 목록](/docs/ko/mcp#managing-your-servers)이 있는 서버는 대기를 건너뛰고 처음 사용할 때 연결됩니다. 대기에는 Claude Code v2.1.221 이상이 필요합니다 | `claude --mcp-config ./mcp.json` |111| `--mcp-config` | JSON 파일 또는 문자열에서 MCP 서버를 로드합니다(공백으로 구분). 이 플래그를 `-p`와 함께 전달하면 Claude Code는 첫 번째 턴을 실행하기 전에 여전히 보류 중인 서버가 연결될 때까지 기다립니다. [`MCP_TIMEOUT`](/docs/ko/env-vars) 시작 타임아웃(기본값 30초)까지입니다. [캐시된 도구 목록](/docs/ko/mcp#managing-your-servers)이 있는 서버는 대기를 건너뛰고 처음 사용할 때 연결됩니다. [자체 호스팅 환경](/docs/ko/self-hosted-environments-configuration#connection-timing)에서는 대신 더 짧은 대기가 적용됩니다. 대기에는 Claude Code v2.1.221 이상이 필요합니다 | `claude --mcp-config ./mcp.json` |

112| `--model` | `sonnet`, `opus`, `haiku` 또는 `fable`과 같은 [모델 별칭](/docs/ko/model-config#model-aliases) 또는 모델의 전체 이름으로 현재 세션에 대한 모델을 설정합니다. [`model`](/docs/ko/settings-reference#model) 설정 및 [`ANTHROPIC_MODEL`](/docs/ko/model-config#environment-variables)을 재정의합니다 | `claude --model claude-sonnet-5` |112| `--model` | `sonnet`, `opus`, `haiku` 또는 `fable`과 같은 [모델 별칭](/docs/ko/model-config#model-aliases) 또는 모델의 전체 이름으로 현재 세션에 대한 모델을 설정합니다. [`model`](/docs/ko/settings-reference#model) 설정 및 [`ANTHROPIC_MODEL`](/docs/ko/model-config#environment-variables)을 재정의합니다 | `claude --model claude-sonnet-5` |

113| `--name`, `-n` | 세션의 표시 이름을 설정합니다. `/resume` 및 터미널 제목에 표시됩니다. `claude --resume <name>`으로 명명된 세션을 재개할 수 있습니다. 대화형 세션에서 이 머신의 다른 라이브 세션이 이미 이름을 사용하는 경우 Claude Code는 [그 변형을 적용합니다](/docs/ko/sessions#name-your-sessions). <br /><br />[`/rename`](/docs/ko/commands)은 세션 중에 이름을 변경하고 프롬프트 표시줄에도 표시합니다 | `claude -n "my-feature-work"` |113| `--name`, `-n` | 세션의 표시 이름을 설정합니다. `/resume` 및 터미널 제목에 표시됩니다. `claude --resume <name>`으로 명명된 세션을 재개할 수 있습니다. <br /><br />[`/rename`](/docs/ko/commands)은 세션 중에 이름을 변경하고 프롬프트 표시줄에도 표시합니다 | `claude -n "my-feature-work"` |

114| `--no-chrome` | 이 세션에 대해 [Chrome 브라우저 통합](/docs/ko/chrome)을 비활성화합니다 | `claude --no-chrome` |114| `--no-chrome` | 이 세션에 대해 [Chrome 브라우저 통합](/docs/ko/chrome)을 비활성화합니다 | `claude --no-chrome` |

115| `--no-session-persistence` | 세션 지속성을 비활성화하므로 세션이 디스크에 저장되지 않고 재개할 수 없습니다. 인쇄 모드만 해당입니다. [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/docs/ko/env-vars) 환경 변수는 모든 모드에서 동일한 작업을 수행합니다 | `claude -p --no-session-persistence "query"` |115| `--no-session-persistence` | 세션 지속성을 비활성화하므로 세션이 디스크에 저장되지 않고 재개할 수 없습니다. 인쇄 모드만 해당입니다. [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/docs/ko/env-vars) 환경 변수는 모든 모드에서 동일한 작업을 수행합니다 | `claude -p --no-session-persistence "query"` |

116| `--output-format` | 인쇄 모드에 대한 출력 형식을 지정합니다(옵션: `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |116| `--output-format` | 인쇄 모드에 대한 출력 형식을 지정합니다(옵션: `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |

117| `--permission-mode` | 지정된 [권한 모드](/docs/ko/permission-modes)에서 시작합니다. `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions` 또는 `manual`을 `default`의 별칭으로 허용합니다. `manual` 별칭은 UI가 Manual로 레이블 지정하는 권한 모드를 선택하며 Claude Code v2.1.200 이상이 필요합니다. `claude --help`는 `default` 대신 이를 나열하고 두 값 모두 작동합니다. 설정 파일의 `defaultMode`를 재정의합니다. 이 플래그 또는 `--dangerously-skip-permissions` 없이 새 세션은 [세션이 시작되는 권한 모드](/docs/ko/permission-modes#which-mode-a-session-starts-in)에 설명된 권한 모드에서 시작됩니다. `-p`의 경우 아무것도 구성되지 않으면 `default`입니다 | `claude --permission-mode plan` |117| `--permission-mode` | 지정된 [권한 모드](/docs/ko/permission-modes)에서 시작합니다. `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions` 또는 `manual`을 `default`의 별칭으로 허용합니다. `manual` 별칭은 UI가 Manual로 레이블 지정하는 권한 모드를 선택하며 Claude Code v2.1.200 이상이 필요합니다. `claude --help`는 `default` 대신 이를 나열하고 두 값 모두 작동합니다. 설정 파일의 `defaultMode`를 재정의합니다. 이 플래그 또는 `--dangerously-skip-permissions` 없이 새 세션은 [세션이 시작되는 권한 모드](/docs/ko/permission-modes#which-mode-a-session-starts-in)에 설명된 권한 모드에서 시작됩니다. 해당 섹션에서는 `-p` 실행이 어떤 모드에서 시작되는지도 다룹니다 | `claude --permission-mode plan` |

118| `--permission-prompt-tool` | 비대화형 모드에서 권한 프롬프트를 처리할 MCP 도구를 지정합니다. Claude Code는 첫 번째 턴을 실행하기 전에 해당 도구의 MCP 서버가 연결될 때까지 기다립니다. [`MCP_TIMEOUT`](/docs/ko/env-vars) 시작 시간 초과(기본값 30초)까지입니다. <br /><br />프롬프트 도구는 [사용자 상호 작용이 필요한 것으로 표시된](/docs/ko/mcp#require-approval-for-a-specific-tool) MCP 도구를 승인할 수 없습니다. Claude Code는 하나에 대한 `allow` 결과를 거부로 변환합니다. 이 제한에는 Claude Code v2.1.199 이상이 필요합니다 | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |118| `--permission-prompt-tool` | 비대화형 모드에서 권한 프롬프트를 처리할 MCP 도구를 지정합니다. Claude Code는 첫 번째 턴을 실행하기 전에 해당 도구의 MCP 서버가 연결될 때까지 기다립니다. [`MCP_TIMEOUT`](/docs/ko/env-vars) 시작 시간 초과(기본값 30초)까지입니다. <br /><br />프롬프트 도구는 [사용자 상호 작용이 필요한 것으로 표시된](/docs/ko/mcp#require-approval-for-a-specific-tool) MCP 도구를 승인할 수 없습니다. Claude Code는 하나에 대한 `allow` 결과를 거부로 변환합니다. 이 제한에는 Claude Code v2.1.199 이상이 필요합니다 | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |

119| `--permission-prompts` | 인쇄 모드에서 권한 프롬프트에 응답하는 사람을 설정합니다. 기본 `host`를 사용하면 Claude Code는 Agent SDK 호스트 또는 `--permission-prompt-tool` 도구로 보냅니다. 아무도 응답할 수 없을 때 `none`을 전달하면 Claude Code는 대신 거부합니다. [무인 실행에서 권한 프롬프트 끄기](/docs/ko/headless#turn-off-permission-prompts-in-unattended-runs)를 참조하세요. Claude Code v2.1.259 이상이 필요합니다 | `claude -p --permission-prompts none "query"` |119| `--permission-prompts` | 인쇄 모드에서 권한 프롬프트에 응답하는 사람을 설정합니다. 기본 `host`를 사용하면 Claude Code는 Agent SDK 호스트 또는 `--permission-prompt-tool` 도구로 보냅니다. 아무도 응답할 수 없을 때 `none`을 전달하면 Claude Code는 대신 거부합니다. [무인 실행에서 권한 프롬프트 끄기](/docs/ko/headless#turn-off-permission-prompts-in-unattended-runs)를 참조하세요. Claude Code v2.1.259 이상이 필요합니다 | `claude -p --permission-prompts none "query"` |

120| `--plugin-dir` | 이 세션에만 디렉터리 또는 `.zip` 아카이브에서 플러그인을 로드하거나 [플러그인 폴더](/docs/ko/plugins/create#load-a-directory-or-archive-for-one-session)에서 여러 개를 로드합니다. 각 플래그는 하나의 경로를 사용합니다. 더 많은 경로에 대해 플래그를 반복합니다: `--plugin-dir A --plugin-dir B.zip`. 플러그인 폴더를 전달하려면 Claude Code v2.1.265 이상이 필요합니다 | `claude --plugin-dir ./my-plugin` |120| `--plugin-dir` | 이 세션에만 디렉터리 또는 `.zip` 아카이브에서 플러그인을 로드하거나 [플러그인 폴더](/docs/ko/plugins/create#load-a-directory-or-archive-for-one-session)에서 여러 개를 로드합니다. 각 플래그는 하나의 경로를 사용합니다. 더 많은 경로에 대해 플래그를 반복합니다: `--plugin-dir A --plugin-dir B.zip`. 플러그인 폴더를 전달하려면 Claude Code v2.1.265 이상이 필요합니다 | `claude --plugin-dir ./my-plugin` |

Details

314| 저장소의 `.claude/settings.json`에 선언된 플러그인 및 마켓플레이스 | 아니오 | 클라우드 세션은 저장소가 [`enabledPlugins`](/docs/ko/settings-reference#enabledplugins) 아래에서 켜는 플러그인을 설치하지 않으며, [`extraKnownMarketplaces`](/docs/ko/settings-reference#extraknownmarketplaces) 아래에 나열하는 마켓플레이스의 플러그인도 포함됩니다 |314| 저장소의 `.claude/settings.json`에 선언된 플러그인 및 마켓플레이스 | 아니오 | 클라우드 세션은 저장소가 [`enabledPlugins`](/docs/ko/settings-reference#enabledplugins) 아래에서 켜는 플러그인을 설치하지 않으며, [`extraKnownMarketplaces`](/docs/ko/settings-reference#extraknownmarketplaces) 아래에 나열하는 마켓플레이스의 플러그인도 포함됩니다 |

315| 조직의 [서버 관리형 설정](/docs/ko/server-managed-settings) | 예, [Claude Tag](https://claude.com/docs/claude-tag/overview) 세션 제외 | 세션이 시작될 때 Anthropic의 서버에서 가져옵니다. 클라우드 세션에서 `availableModels`이 적용되는 방식은 [사용 환경 범위](/docs/ko/model-config#surface-coverage)를 참조하세요. MDM 또는 관리형 설정 파일을 통해 장치에 배포된 설정은 세션이 Anthropic 관리 VM에서 실행되기 때문에 적용되지 않습니다. [자체 호스팅 환경](/docs/ko/self-hosted-environments)에서 세션은 [Claude Code가 관리형 소스를 결합하는 방식](/docs/ko/managed-settings#how-claude-code-combines-managed-sources)에 따라 러너 이미지의 관리형 설정 파일도 읽습니다 |315| 조직의 [서버 관리형 설정](/docs/ko/server-managed-settings) | 예, [Claude Tag](https://claude.com/docs/claude-tag/overview) 세션 제외 | 세션이 시작될 때 Anthropic의 서버에서 가져옵니다. 클라우드 세션에서 `availableModels`이 적용되는 방식은 [사용 환경 범위](/docs/ko/model-config#surface-coverage)를 참조하세요. MDM 또는 관리형 설정 파일을 통해 장치에 배포된 설정은 세션이 Anthropic 관리 VM에서 실행되기 때문에 적용되지 않습니다. [자체 호스팅 환경](/docs/ko/self-hosted-environments)에서 세션은 [Claude Code가 관리형 소스를 결합하는 방식](/docs/ko/managed-settings#how-claude-code-combines-managed-sources)에 따라 러너 이미지의 관리형 설정 파일도 읽습니다 |

316| 사용자 `~/.claude/CLAUDE.md` | 아니오 | 저장소가 아닌 머신에 있습니다. [저장소에 커밋하지 않고 개인 기본 설정 추가](#add-personal-preferences-without-committing-to-the-repo)를 참조하세요 |316| 사용자 `~/.claude/CLAUDE.md` | 아니오 | 저장소가 아닌 머신에 있습니다. [저장소에 커밋하지 않고 개인 기본 설정 추가](#add-personal-preferences-without-committing-to-the-repo)를 참조하세요 |

317| 사용자 `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` | 아니오 | 저장소가 아닌 머신에 있습니다. 대신 저장소의 `.claude/` 디렉터리에 커밋합니다. 클라우드 세션은 claude.ai에서 활성화한 스킬을 자동으로 로드합니다 |317| 사용자 `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` | 아니오 | 저장소가 아닌 머신에 있습니다. 대신 저장소의 `.claude/` 디렉터리에 커밋합니다. 클라우드 세션은 [claude.ai에서 활성화한 스킬](/docs/ko/skills#skills-in-cowork-and-cloud-sessions)을 자동으로 로드합니다 |

318| 사용자 설정에서만 활성화된 플러그인 | 아니오 | 사용자 범위 `enabledPlugins`은 머신의 `~/.claude/settings.json`에 있습니다 |318| 사용자 설정에서만 활성화된 플러그인 | 아니오 | 사용자 범위 `enabledPlugins`은 머신의 `~/.claude/settings.json`에 있습니다 |

319| `claude mcp add`로 기본 로컬 범위 또는 사용자 범위에서 추가한 MCP 서버 | 아니오 | 이는 저장소가 아닌 머신의 `~/.claude.json`에 씁니다. 저장소의 [`.mcp.json`](/docs/ko/mcp#project-scope)에 쓰는 `claude mcp add --scope project`로 서버를 추가하고 해당 파일을 커밋합니다. 하나의 저장소가 있는 세션이 이를 로드합니다 |319| `claude mcp add`로 기본 로컬 범위 또는 사용자 범위에서 추가한 MCP 서버 | 아니오 | 이는 저장소가 아닌 머신의 `~/.claude.json`에 씁니다. 저장소의 [`.mcp.json`](/docs/ko/mcp#project-scope)에 쓰는 `claude mcp add --scope project`로 서버를 추가하고 해당 파일을 커밋합니다. 하나의 저장소가 있는 세션이 이를 로드합니다 |

320| 저장소의 `.claude/settings.json` `env` 블록의 전송 변수(예: `NODE_EXTRA_CA_CERTS` 및 [mTLS 클라이언트 인증서 변수](/docs/ko/network-config#mtls-authentication)) | 아니오 | 호스팅 환경이 세션의 API 연결을 관리하므로 Claude Code는 이러한 키를 무시하고 각 무시된 키를 세션의 디버그 로그에 기록합니다 |320| 저장소의 `.claude/settings.json` `env` 블록의 전송 변수(예: `NODE_EXTRA_CA_CERTS` 및 [mTLS 클라이언트 인증서 변수](/docs/ko/network-config#mtls-authentication)) | 아니오 | 호스팅 환경이 세션의 API 연결을 관리하므로 Claude Code는 이러한 키를 무시하고 각 무시된 키를 세션의 디버그 로그에 기록합니다 |

code-review.md +4 −4

Details

264| 섹션 | 표시 내용 |264| 섹션 | 표시 내용 |

265| :- | :- |265| :- | :- |

266| PRs reviewed | 선택한 시간 범위 동안 검토된 풀 요청의 일일 개수 |266| PRs reviewed | 선택한 시간 범위 동안 검토된 풀 요청의 일일 개수 |

267| Cost weekly | Code Review의 주간 지출 |267| Code Review cost | 이번 달 현재까지의 Code Review 지출 |

268| Feedback | 개발자가 문제를 해결하여 자동으로 해결된 검토 댓글의 개수 |268| Feedback | 개발자가 문제를 해결하여 자동으로 해결된 검토 댓글의 개수 |

269| Repository breakdown | 리포지토리별 검토된 PR 개수 및 해결된 댓글 |269| Repository breakdown | 저장소별로 검토된 PR 개수, 해결된 댓글 개수, 리뷰 실행 횟수와 함께 추정 비용 및 PR별 보기 |

270 270 

271대시보드 비용 수치는 활동 모니터링을 위한 추정치입니다. 청구서 정확한 지출의 경우 Anthropic 청구서를 참조하십시오.271Code Review cost 카드는 현재 월이 선택된 경우에만 금액을 표시합니다. 분석의 비용 수치는 청구서와 다를 수 있습니다. Repository breakdown 비용은 할인이나 크레딧이 적용되기 전의 정가 기준으로 추정되며, Claude가 풀 리퀘스트에 게시한 리뷰만 포함합니다. 청구서와 정확히 일치하는 지출은 Anthropic 청구서를 참조하십시오.

272 272 

273<h2 id="pricing">273<h2 id="pricing">

274 가격274 가격


286 286 

287비용은 조직이 다른 Claude Code 기능에 Amazon Bedrock 또는 Google Cloud의 Agent Platform을 사용하는지 여부와 관계없이 Anthropic 청구서에 나타납니다. Code Review의 월간 지출 한도를 설정하려면 [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage)로 이동하여 Claude Code Review 서비스의 한도를 구성합니다.287비용은 조직이 다른 Claude Code 기능에 Amazon Bedrock 또는 Google Cloud의 Agent Platform을 사용하는지 여부와 관계없이 Anthropic 청구서에 나타납니다. Code Review의 월간 지출 한도를 설정하려면 [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage)로 이동하여 Claude Code Review 서비스의 한도를 구성합니다.

288 288 

289[분석](#view-usage)의 주간 비용 차트 또는 관리자 설정의 리포지토리별 평균 비용 열을 통해 지출을 모니터링합니다.289지출을 모니터링하려면 [분석 대시보드](#view-usage)를 사용합니다.

290 290 

291<h2 id="troubleshooting">291<h2 id="troubleshooting">

292 문제 해결292 문제 해결

commands.md +2 −2

Details

77| `/compact [instructions]` | 지금까지의 대화를 요약하여 컨텍스트를 확보합니다. 선택적으로 요약의 초점에 대한 지침을 전달할 수 있습니다. [압축이 규칙, 스킬, 메모리 파일을 처리하는 방식](/docs/ko/context-window#what-survives-compaction)을 참조하세요 |77| `/compact [instructions]` | 지금까지의 대화를 요약하여 컨텍스트를 확보합니다. 선택적으로 요약의 초점에 대한 지침을 전달할 수 있습니다. [압축이 규칙, 스킬, 메모리 파일을 처리하는 방식](/docs/ko/context-window#what-survives-compaction)을 참조하세요 |

78| `/config [key=value ...]` | 테마, 모델, [출력 스타일](/docs/ko/output-styles) 및 기타 환경설정을 조정하는 [설정](/docs/ko/settings) 인터페이스를 엽니다. 하나 이상의 `key=value` 쌍을 전달하면 인터페이스를 열지 않고 설정을 직접 지정할 수 있습니다(예: `/config thinking=false`, `/config theme=dark`, `/config model=sonnet`). `key=value` 형식은 비대화형 모드(`-p`)와 [Remote Control](/docs/ko/remote-control)을 통한 Claude 모바일 앱에서도 작동합니다. `key=value` 형식으로는 [`autoContinueAtUsageLimit`](/docs/ko/interactive-mode#turn-automatic-continue-off)처럼 패널에서 확인이 필요한 설정을 켤 수 없지만, 끌 수는 있습니다. 허용되는 키 목록을 보려면 `/config --help`를 실행합니다. 별칭: `/settings` |78| `/config [key=value ...]` | 테마, 모델, [출력 스타일](/docs/ko/output-styles) 및 기타 환경설정을 조정하는 [설정](/docs/ko/settings) 인터페이스를 엽니다. 하나 이상의 `key=value` 쌍을 전달하면 인터페이스를 열지 않고 설정을 직접 지정할 수 있습니다(예: `/config thinking=false`, `/config theme=dark`, `/config model=sonnet`). `key=value` 형식은 비대화형 모드(`-p`)와 [Remote Control](/docs/ko/remote-control)을 통한 Claude 모바일 앱에서도 작동합니다. `key=value` 형식으로는 [`autoContinueAtUsageLimit`](/docs/ko/interactive-mode#turn-automatic-continue-off)처럼 패널에서 확인이 필요한 설정을 켤 수 없지만, 끌 수는 있습니다. 허용되는 키 목록을 보려면 `/config --help`를 실행합니다. 별칭: `/settings` |

79| `/context [all]` | 현재 컨텍스트 사용량을 색상 그리드로 시각화합니다. 컨텍스트를 많이 사용하는 도구, 메모리 비대화, 용량 경고에 대한 최적화 제안을 표시합니다. 대화가 컨텍스트 윈도우를 초과하면 출력에 한도를 얼마나 초과했는지와 공간을 확보하는 명령을 알려주는 [경고](/docs/ko/errors#context-exceeds-the-token-limit)가 포함됩니다. [전체 화면 모드](/docs/ko/fullscreen)에서는 그리드가 보이도록 `/context`가 항목별 세부 내역을 접습니다. 펼치려면 `all`을 전달합니다 |79| `/context [all]` | 현재 컨텍스트 사용량을 색상 그리드로 시각화합니다. 컨텍스트를 많이 사용하는 도구, 메모리 비대화, 용량 경고에 대한 최적화 제안을 표시합니다. 대화가 컨텍스트 윈도우를 초과하면 출력에 한도를 얼마나 초과했는지와 공간을 확보하는 명령을 알려주는 [경고](/docs/ko/errors#context-exceeds-the-token-limit)가 포함됩니다. [전체 화면 모드](/docs/ko/fullscreen)에서는 그리드가 보이도록 `/context`가 항목별 세부 내역을 접습니다. 펼치려면 `all`을 전달합니다 |

80| `/copy [N]` | 마지막 어시스턴트 응답을 클립보드에 복사합니다. 숫자 `N`을 전달하면 N번째 최근 응답을 복사합니다. `/copy 2`는 마지막에서 두 번째 응답을 복사합니다. 코드 블록이 있으면 개별 블록 또는 전체 응답을 선택할 수 있는 대화형 선택기가 표시됩니다. 선택기에서 `w`를 누르면 선택 항목을 클립보드 대신 파일에 기록하며, SSH를 통해 작업할 때 유용합니다 |80| `/copy [N]` | 마지막 어시스턴트 응답을 클립보드에 복사합니다. 숫자 `N`을 전달하면 N번째 최근 응답을 복사합니다. `/copy 2`는 마지막에서 두 번째 응답을 복사합니다. 코드 블록이나 인용 블록이 있으면 개별 블록 또는 전체 응답을 선택할 수 있는 대화형 선택기가 표시됩니다. 선택기에서 `w`를 누르면 선택 항목을 클립보드 대신 파일에 기록하며, SSH를 통해 작업할 때 유용합니다 |

81| `/cost` | `/usage`의 별칭입니다 |81| `/cost` | `/usage`의 별칭입니다 |

82| `/dataviz [request]` | **[스킬](/docs/ko/skills#bundled-skills).** 차트, 그래프, 대시보드를 위한 디자인 지침입니다. Claude는 데이터에 맞는 차트 형식을 선택하고, 역할별로 색상을 지정하고, 번들 스크립트로 팔레트의 색맹 안전성과 대비를 검증하며, 마크, 상호작용, 접근성 규칙을 적용합니다. 사용자가 자체 팔레트로 교체할 수 있는 브랜드 중립적인 플레이스홀더 팔레트를 사용합니다 |82| `/dataviz [request]` | **[스킬](/docs/ko/skills#bundled-skills).** 차트, 그래프, 대시보드를 위한 디자인 지침입니다. Claude는 데이터에 맞는 차트 형식을 선택하고, 역할별로 색상을 지정하고, 번들 스크립트로 팔레트의 색맹 안전성과 대비를 검증하며, 마크, 상호작용, 접근성 규칙을 적용합니다. 사용자가 자체 팔레트로 교체할 수 있는 브랜드 중립적인 플레이스홀더 팔레트를 사용합니다 |

83| `/debug [description]` | **[스킬](/docs/ko/skills#bundled-skills).** 현재 세션의 디버그 로깅을 활성화하고 세션 디버그 로그를 읽어 문제를 해결합니다. `claude --debug`로 시작하지 않은 경우 디버그 로깅은 기본적으로 꺼져 있으므로, 세션 도중 `/debug`를 실행하면 그 시점부터 로그 캡처가 시작됩니다. 선택적으로 문제를 설명하여 분석의 초점을 맞출 수 있습니다 |83| `/debug [description]` | **[스킬](/docs/ko/skills#bundled-skills).** 현재 세션의 디버그 로깅을 활성화하고 세션 디버그 로그를 읽어 문제를 해결합니다. `claude --debug`로 시작하지 않은 경우 디버그 로깅은 기본적으로 꺼져 있으므로, 세션 도중 `/debug`를 실행하면 그 시점부터 로그 캡처가 시작됩니다. 선택적으로 문제를 설명하여 분석의 초점을 맞출 수 있습니다 |


132| `/reload-skills` | [스킬](/docs/ko/skills) 및 명령 디렉터리를 다시 검색하여 세션 중 디스크에서 추가되거나 변경된 스킬을 다시 시작하지 않고 사용할 수 있도록 합니다. 사용 가능한 스킬 수와 추가 또는 제거된 스킬 수를 보고합니다 |132| `/reload-skills` | [스킬](/docs/ko/skills) 및 명령 디렉터리를 다시 검색하여 세션 중 디스크에서 추가되거나 변경된 스킬을 다시 시작하지 않고 사용할 수 있도록 합니다. 사용 가능한 스킬 수와 추가 또는 제거된 스킬 수를 보고합니다 |

133| `/remote-control` | claude.ai에서 [Remote Control](/docs/ko/remote-control)로 이 세션을 사용할 수 있도록 합니다. 로그아웃 상태에서 실행하면 Remote Control에 claude.ai 구독이 필요하다는 내용과 로그인 방법이 출력됩니다. v2.1.206 이전에는 `Unknown command: /remote-control`이 표시되었습니다. 별칭: `/rc` |133| `/remote-control` | claude.ai에서 [Remote Control](/docs/ko/remote-control)로 이 세션을 사용할 수 있도록 합니다. 로그아웃 상태에서 실행하면 Remote Control에 claude.ai 구독이 필요하다는 내용과 로그인 방법이 출력됩니다. v2.1.206 이전에는 `Unknown command: /remote-control`이 표시되었습니다. 별칭: `/rc` |

134| `/remote-env` | CLI에서 시작하는 클라우드 세션의 기본 [클라우드 환경](/docs/ko/cloud-environments#select-an-environment-from-the-cli)을 선택합니다 |134| `/remote-env` | CLI에서 시작하는 클라우드 세션의 기본 [클라우드 환경](/docs/ko/cloud-environments#select-an-environment-from-the-cli)을 선택합니다 |

135| `/rename [name]` | 현재 세션의 이름을 바꾸고 프롬프트 바에 이름을 표시합니다. 이름을 지정하지 않으면 대화 기록에서 자동으로 생성합니다. 비대화형 모드(`-p`)에서도 사용할 수 있으며, Claude Code v2.1.205 이상이 필요합니다. claude.ai와 데스크톱 앱을 포함한 모든 이름 변경 사용 환경에서, Claude Code는 새 이름의 제어 문자와 보이지 않는 문자를 공백으로 바꾸고 이름을 200자로 제한합니다. 보이지 않는 문자를 제거한 후 이름이 비어 있으면 Claude Code는 이를 거부하고 `That name is empty once invisible characters are removed. Usage: /rename <name>`을 표시합니다. 문자 대체와 길이 제한은 Claude Code v2.1.221 이상이 필요합니다. 이 컴퓨터에서 실행 중인 다른 세션이 전달한 이름을 이미 사용하고 있으면, Claude Code는 대신 [해당 이름의 변형](/docs/ko/sessions#name-your-sessions)을 적용합니다 |135| `/rename [name]` | 현재 세션의 이름을 바꾸고 프롬프트 바에 이름을 표시합니다. 이름을 지정하지 않으면 대화 기록에서 자동으로 생성합니다. 비대화형 모드(`-p`)에서도 사용할 수 있으며, Claude Code v2.1.205 이상이 필요합니다. claude.ai와 데스크톱 앱을 포함한 모든 이름 변경 사용 환경에서, Claude Code는 새 이름의 제어 문자와 보이지 않는 문자를 공백으로 바꾸고 이름을 200자로 제한합니다. 보이지 않는 문자를 제거한 후 이름이 비어 있으면 Claude Code는 이를 거부하고 `That name is empty once invisible characters are removed. Usage: /rename <name>`을 표시합니다. 문자 대체와 길이 제한은 Claude Code v2.1.221 이상이 필요합니다 |

136| `/resume [session]` | ID나 이름으로 대화를 재개하거나 세션 선택기를 엽니다. [백그라운드 세션](/docs/ko/agent-view)은 선택기에 `bg` 표시와 함께 나타납니다. 선택기에서 또는 ID나 이름으로 아직 실행 중인 세션을 재개하면 [해당 세션이 열립니다](/docs/ko/sessions#resume-a-running-background-session). 현재 대화는 백그라운드로 이동하고 이 터미널은 실행 중인 세션에 연결됩니다. 빈 프롬프트에서 `←`를 누르면 에이전트 보기로 돌아가며, 여기에는 떠나온 대화도 나열됩니다. v2.1.285 이전에는 Claude Code가 이를 거부하고 `claude attach`로 세션을 열거나 먼저 중지하라고 안내했습니다. 별칭: `/continue` |136| `/resume [session]` | ID나 이름으로 대화를 재개하거나 세션 선택기를 엽니다. [백그라운드 세션](/docs/ko/agent-view)은 선택기에 `bg` 표시와 함께 나타납니다. 선택기에서 또는 ID나 이름으로 아직 실행 중인 세션을 재개하면 [해당 세션이 열립니다](/docs/ko/sessions#resume-a-running-background-session). 현재 대화는 백그라운드로 이동하고 이 터미널은 실행 중인 세션에 연결됩니다. 빈 프롬프트에서 `←`를 누르면 에이전트 보기로 돌아가며, 여기에는 떠나온 대화도 나열됩니다. v2.1.285 이전에는 Claude Code가 이를 거부하고 `claude attach`로 세션을 열거나 먼저 중지하라고 안내했습니다. 별칭: `/continue` |

137| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [--max-findings n\|all\|default] [pr#\|branch\|path]` | [`/code-review`](/docs/ko/code-review#review-a-diff-locally)의 별칭입니다. 현재 diff 또는 전달한 PR 번호, 브랜치, 경로(예: `/review 1234`)를 리뷰하며, 동일한 effort 수준과 플래그를 받습니다. 수준을 지정하지 않으면 마지막으로 입력한 `low`부터 `max`까지의 수준을 재사용합니다. 정확한 규칙은 [로컬에서 diff 리뷰하기](/docs/ko/code-review#review-a-diff-locally)를 참조하세요. 심층 클라우드 리뷰에는 [`/code-review ultra`](/docs/ko/ultrareview)를 사용합니다. v2.1.223 이전에는 `/review`가 번호로 지정한 GitHub 풀 리퀘스트에 대해 단일 패스의 읽기 전용 리뷰를 실행하는 별도의 명령이었으며, 인수 없이 실행하면 선택할 수 있도록 열린 PR을 나열했습니다. v2.1.186부터 v2.1.201까지는 `/code-review medium`과 동일한 멀티 에이전트 엔진을 실행했습니다 |137| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [--max-findings n\|all\|default] [pr#\|branch\|path]` | [`/code-review`](/docs/ko/code-review#review-a-diff-locally)의 별칭입니다. 현재 diff 또는 전달한 PR 번호, 브랜치, 경로(예: `/review 1234`)를 리뷰하며, 동일한 effort 수준과 플래그를 받습니다. 수준을 지정하지 않으면 마지막으로 입력한 `low`부터 `max`까지의 수준을 재사용합니다. 정확한 규칙은 [로컬에서 diff 리뷰하기](/docs/ko/code-review#review-a-diff-locally)를 참조하세요. 심층 클라우드 리뷰에는 [`/code-review ultra`](/docs/ko/ultrareview)를 사용합니다. v2.1.223 이전에는 `/review`가 번호로 지정한 GitHub 풀 리퀘스트에 대해 단일 패스의 읽기 전용 리뷰를 실행하는 별도의 명령이었으며, 인수 없이 실행하면 선택할 수 있도록 열린 PR을 나열했습니다. v2.1.186부터 v2.1.201까지는 `/code-review medium`과 동일한 멀티 에이전트 엔진을 실행했습니다 |

138| `/rewind` | 대화 및/또는 코드를 이전 시점으로 되감거나, 선택한 메시지부터 요약합니다. [체크포인트](/docs/ko/checkpointing)를 참조하세요. 별칭: `/checkpoint`, `/undo` |138| `/rewind` | 대화 및/또는 코드를 이전 시점으로 되감거나, 선택한 메시지부터 요약합니다. [체크포인트](/docs/ko/checkpointing)를 참조하세요. 별칭: `/checkpoint`, `/undo` |

Details

8 8 

9일부 조직에서는 워크스테이션의 모든 프로세스가 필수 런처를 통해 시작되도록 요구합니다. 런처는 회사의 보안 태세가 의존하는 샌드박스, 네트워크 제어 또는 자격 증명 주입을 적용하며, 이를 거치지 않고 시작되는 바이너리는 정책 위반입니다.9일부 조직에서는 워크스테이션의 모든 프로세스가 필수 런처를 통해 시작되도록 요구합니다. 런처는 회사의 보안 태세가 의존하는 샌드박스, 네트워크 제어 또는 자격 증명 주입을 적용하며, 이를 거치지 않고 시작되는 바이너리는 정책 위반입니다.

10 10 

11`CLAUDE_CODE_PROCESS_WRAPPER`는 Claude Code가 자체 바이너리에서 시작하는 모든 프로세스를 런처를 통해 실행합니다: 백그라운드 서비스, [에이전트 뷰](/docs/ko/agent-view)에서 호스팅하는 모든 세션, 그리고 업데이트 후 Claude Code의 재시작입니다. 런처의 절대 경로로 설정하면 Claude Code는 런처를 Claude Code 명령을 인수로 하여 실행합니다.11`CLAUDE_CODE_PROCESS_WRAPPER`는 Claude Code가 자체 바이너리에서 시작하는 모든 프로세스를 런처를 통해 실행합니다: [백그라운드 서비스](/docs/ko/agent-view#the-supervisor-process), [에이전트 뷰](/docs/ko/agent-view)에서 호스팅하는 모든 세션, 그리고 업데이트 후 Claude Code의 재시작입니다. 런처의 절대 경로로 설정하면 Claude Code는 런처를 Claude Code 명령을 인수로 하여 실행합니다.

12 12 

13`PATH`에서 `claude` 명령을 래핑하는 런처는 이러한 프로세스에 도달할 수 없습니다. 왜냐하면 이들은 `PATH` 조회 없이 바이너리의 직접 경로에서 시작되기 때문입니다.13`PATH`에서 `claude` 명령을 래핑하는 런처는 백그라운드 서비스나 해당 서비스가 호스팅하는 세션에 도달할 수 없습니다. 이들은 `claude`를 조회하지 않고 바이너리의 직접 경로에서 시작되기 때문입니다.

14 14 

15<Note>15<Note>

16 `CLAUDE_CODE_PROCESS_WRAPPER`는 Claude Code v2.1.208 이상이 필요합니다. 이전 버전은 변수를 무시하고 모든 프로세스를 래핑 없이 시작합니다. 동등한 [`processWrapper` 설정](/docs/ko/settings-reference#processwrapper)은 v2.1.210 이상이 필요합니다. 이전 버전은 이를 알 수 없는 키로 무시하고 런처를 적용하지 않으며 오류를 보고하지 않습니다.16 `CLAUDE_CODE_PROCESS_WRAPPER`는 Claude Code v2.1.208 이상이 필요합니다. 이전 버전은 변수를 무시하고 모든 프로세스를 래핑 없이 시작합니다. 동등한 [`processWrapper` 설정](/docs/ko/settings-reference#processwrapper)은 v2.1.210 이상이 필요합니다. 이전 버전은 이를 알 수 없는 키로 무시하고 런처를 적용하지 않으며 오류를 보고하지 않습니다.


39 39 

40다음 프로세스는 런처를 통해 시작하지 않습니다:40다음 프로세스는 런처를 통해 시작하지 않습니다:

41 41 

42* 런처가 구성되기 전에 작성된 단위를 가진 [설치된 백그라운드 서비스](/docs/ko/agent-view#the-supervisor-process): `launchd` 또는 `systemd`가 해당 단위 파일에서 해당 프로세스를 시작합니다. `/status`와 `claude daemon status`는 실행 중인 서비스와 구성된 런처가 일치하지 않을 때 경고하며, 서비스가 설정에서 변수를 사용하여 다시 시작하면 서비스가 생성하는 세션은 여전히 런처를 통해 시작합니다.

43* 터미널에서 직접 시작하는 세션으로, 호출한 방식대로 실행됩니다. 이러한 세션을 포함하려면 `PATH`의 이전 디렉터리에 `claude`라는 이름의 스크립트를 배치하여 실제 바이너리로 런처를 실행하십시오. 관리되는 심볼릭 링크를 교체하지 마십시오. 백그라운드 서비스와 해당 세션은 `PATH` 조회 없이 시작되므로 두 런처는 거기서 스택되지 않습니다.42* 터미널에서 직접 시작하는 세션으로, 호출한 방식대로 실행됩니다. 이러한 세션을 포함하려면 `PATH`의 이전 디렉터리에 `claude`라는 이름의 스크립트를 배치하여 실제 바이너리로 런처를 실행하십시오. 관리되는 심볼릭 링크를 교체하지 마십시오. 백그라운드 서비스와 해당 세션은 `PATH` 조회 없이 시작되므로 두 런처는 거기서 스택되지 않습니다.

44* `claude-cli://` 딥 링크의 첫 번째 프로세스로, 운영 체제의 프로토콜 핸들러가 직접 시작합니다. 해당 세션이 백그라운드에서 시작하는 모든 것은 런처를 통해 실행됩니다. 이 경로를 완전히 닫으려면 `disableDeepLinkRegistration` 설정으로 [핸들러 등록을 방지](/docs/ko/deep-links#registration-and-supported-platforms)하십시오.43* `claude-cli://` 딥 링크의 첫 번째 프로세스로, 운영 체제의 프로토콜 핸들러가 직접 시작합니다. 해당 세션이 백그라운드에서 시작하는 모든 것은 런처를 통해 실행됩니다. 이 경로를 완전히 닫으려면 `disableDeepLinkRegistration` 설정으로 [핸들러 등록을 방지](/docs/ko/deep-links#registration-and-supported-platforms)하십시오.

45* `--worktree`와 `--tmux`를 함께 수행하는 재시작으로, 터미널 멀티플렉서가 해당 창을 시작하며, Claude Code의 바이너리가 아닙니다.44* `--worktree`와 `--tmux`를 함께 수행하는 재시작으로, 터미널 멀티플렉서가 해당 창을 시작하며, Claude Code의 바이너리가 아닙니다.


104 </Step>103 </Step>

105 104 

106 <Step title="백그라운드 서비스 및 세션 재시작">105 <Step title="백그라운드 서비스 및 세션 재시작">

107 실행 중인 백그라운드 서비스와 열려 있는 `claude` 세션은 시작 시 변수를 한 번 읽으므로 재시작될 때까지 래핑되지 않은 프로세스를 계속 시작합니다. `claude daemon stop --any`를 실행하여 필요에 따라 서비스를 중지합니다. `claude agents`와 같이 이를 필요로 하는 다음 명령은 래핑된 서비스를 시작합니다. [설치된 서비스](/docs/ko/agent-view#the-supervisor-process)는 `--any` 없이 `claude daemon stop`을 사용합니다. 그런 다음 열려 있는 `claude` 세션을 재시작합니다.106 실행 중인 백그라운드 서비스와 열려 있는 `claude` 세션은 시작 시 변수를 한 번 읽으므로 재시작될 때까지 래핑되지 않은 프로세스를 계속 시작합니다. `claude daemon stop --any`를 실행하여 온디맨드 서비스를 중지합니다. `claude agents`와 같이 이를 필요로 하는 다음 명령은 래핑된 서비스를 시작합니다. 그런 다음 열려 있는 `claude` 세션을 재시작합니다.

108 107 

109 손으로 재시작할 수 없는 머신에서는 설정 푸시 후 시작된 첫 번째 세션이 남은 래핑되지 않은 필요에 따른 서비스를 자동으로 폐기합니다. 새 세션이 시작되지 않는 머신은 하나가 시작될 때까지 래핑되지 않은 서비스를 유지하며, 설치된 서비스는 항상 이 단계에서 재시작이 필요합니다.108 직접 재시작할 수 없는 머신에서는 설정 푸시 후 시작된 첫 번째 세션이 남아 있는 래핑되지 않은 온디맨드 서비스를 자동으로 폐기합니다. 새 세션이 시작되지 않는 머신은 세션이 시작될 때까지 래핑되지 않은 백그라운드 서비스를 유지합니다.

110 </Step>109 </Step>

111 110 

112 <Step title="확인">111 <Step title="확인">

Details

142 142 

143세션은 [`/rename`](/docs/ko/commands) 명령 또는 [`--name`](/docs/ko/cli-reference#cli-flags) 플래그로 설정한 이름에 응답합니다. 설정하지 않으면, Claude Code가 세션의 이름을 지정합니다. 대화형 세션의 경우, 이는 [실행 중인 세션 목록](/docs/ko/sessions#name-your-sessions)에 표시되는 이름입니다.143세션은 [`/rename`](/docs/ko/commands) 명령 또는 [`--name`](/docs/ko/cli-reference#cli-flags) 플래그로 설정한 이름에 응답합니다. 설정하지 않으면, Claude Code가 세션의 이름을 지정합니다. 대화형 세션의 경우, 이는 [실행 중인 세션 목록](/docs/ko/sessions#name-your-sessions)에 표시되는 이름입니다.

144 144 

145세션의 이름을 바꾸거나, 이 컴퓨터의 다른 활성 세션이 이미 사용 중인 이름으로 대화형 세션을 시작하거나 재개하면, Claude Code는 이미 해당 이름을 가진 세션에 이름을 남기고 [사용자의 이름을 변형으로 바꿉니다](/docs/ko/sessions#name-your-sessions). 예를 들어 이전 버전의 Claude Code를 실행하거나 공유 이름이 Claude Code가 생성한 이름일 때 세션이 이름을 공유할 수 있습니다. 이 세션이 Remote Control에 연결되지 않으면, Claude Code는 `/list-agents` 출력에 각 로컬 세션의 작업 디렉토리를 표시하므로, 다른 디렉토리에서 실행할 때 같은 이름의 세션을 구분할 수 있습니다. Claude는 이름에 응답하는 활성 세션의 수에 따라 두 가지 방식 중 하나로 메시지를 주소 지정합니다:145이 세션이 Remote Control에 연결되지 않으면, Claude Code는 `/list-agents` 출력에 각 로컬 세션의 작업 디렉터리를 표시하므로, 다른 디렉터리에서 실행할 때 같은 이름의 세션을 구분할 수 있습니다. Claude는 이름에 응답하는 활성 세션의 수에 따라 두 가지 방식 중 하나로 메시지를 주소 지정합니다:

146 146 

147* **한 세션이 이름에 응답**: Claude Code는 이름만으로 메시지를 전달합니다.147* **한 세션이 이름에 응답**: Claude Code는 이름만으로 메시지를 전달합니다.

148* **여러 세션이 이름을 공유하거나, Claude Code가 세션이 실행되는 모든 곳을 확인할 수 없음**: Claude는 나열의 각 행에 짧은 식별자를 추가하고 주소에서 식별자를 사용합니다.148* **여러 세션이 이름을 공유하거나, Claude Code가 세션이 실행되는 모든 곳을 확인할 수 없음**: Claude는 나열의 각 행에 짧은 식별자를 추가하고 주소에서 식별자를 사용합니다.

desktop.md +30 −4

Details

400 400 

401두 세션을 동시에 보려면 macOS에서 **Cmd**를 누르거나 Windows에서 **Ctrl**을 누르고 사이드바의 세션을 클릭합니다. 세션이 이미 열려 있는 창 옆에 두 번째 창에서 열립니다. 분할이 활성화되어 있는 동안 다른 사이드바 세션을 클릭하면 포커스가 있는 창을 바꿉니다. macOS에서 \*\*Cmd+\\\*\*를 누르거나 Windows에서 \*\*Ctrl+\\\*\*를 눌러 포커스된 창을 닫고 단일 세션으로 돌아갑니다.401두 세션을 동시에 보려면 macOS에서 **Cmd**를 누르거나 Windows에서 **Ctrl**을 누르고 사이드바의 세션을 클릭합니다. 세션이 이미 열려 있는 창 옆에 두 번째 창에서 열립니다. 분할이 활성화되어 있는 동안 다른 사이드바 세션을 클릭하면 포커스가 있는 창을 바꿉니다. macOS에서 \*\*Cmd+\\\*\*를 누르거나 Windows에서 \*\*Ctrl+\\\*\*를 눌러 포커스된 창을 닫고 단일 세션으로 돌아갑니다.

402 402 

403Worktrees는 기본적으로 `<project-root>/.claude/worktrees/`에 저장됩니다. Settings → Claude Code의 "Worktree location"에서 사용자 정의 디렉토리로 변경할 수 있습니다. 또한 모든 worktree 브랜치 이름 앞에 추가되는 브랜치 접두사를 설정할 수 있으며, 이는 Claude가 만든 브랜치를 정리하는 데 유용합니다. 완료되면 사이드바의 세션 위에 마우스를 올리고 아카이브 아이콘을 클릭하여 worktree를 제거합니다. 풀 리퀘스트가 병합되거나 닫힌 후 세션이 자동으로 아카이브되도록 하려면 Settings → Claude Code에서 **Auto-archive after PR merge or close**를 켭니다. 자동 아카이브는 실행을 완료한 로컬 세션에만 적용됩니다.403Worktrees는 기본적으로 `<project-root>/.claude/worktrees/`에 저장됩니다. 이를 사용자 정의 디렉토리로 변경할 수 있습니다:

404 404 

405gitignored 파일 (예: `.env`)을 새 worktrees에 포함하려면 프로젝트 루트에 [`.worktreeinclude` 파일](/docs/ko/worktrees#copy-gitignored-files-into-worktrees)을 만듭니다.405* **로컬 세션**: **Settings > Claude Code**에서 **Worktree location**을 설정합니다

406* **SSH 세션**: [SSH 연결](#choose-where-ssh-session-worktrees-go)에서 **Worktree folder**를 설정합니다

407 

408**Settings > Claude Code**에서 **Branch prefix**를 설정할 수도 있습니다. Desktop은 이 접두사를 모든 worktree 브랜치 이름 앞에 추가하며, 이는 Claude가 만든 브랜치를 정리하는 데 유용합니다.

409 

410완료되면 사이드바의 세션 위에 마우스를 올리고 아카이브 아이콘을 클릭하여 worktree를 제거합니다. 풀 리퀘스트가 병합되거나 닫힐 때 세션이 자동으로 아카이브되도록 하려면 **Settings > Claude Code**에서 **Auto-archive after PR merge or close**를 켭니다. 자동 아카이브는 실행을 완료한 로컬 세션에만 적용됩니다.

411 

412gitignored 파일 (예: `.env`)을 새 worktrees에 포함하려면 프로젝트 루트에 [`.worktreeinclude` 파일](/docs/ko/worktrees#copy-gitignored-files-into-worktrees)을 만듭니다. worktree 세션이 프로젝트 설정, 훅, 스킬을 어디에서 읽는지는 [worktree가 메인 체크아웃과 공유하는 항목](/docs/ko/worktrees#what-worktrees-share-with-the-main-checkout)을 참조하세요.

406 413 

407<Note>414<Note>

408 세션 격리에는 [Git](https://git-scm.com/downloads)이 필요합니다. 대부분의 Mac에는 기본적으로 Git이 포함되어 있습니다. Terminal에서 `git --version`을 실행하여 확인합니다. 버전 번호가 출력되면 Git이 설치된 것입니다. Git 오류가 발생하면 [Cowork 탭](https://claude.com/product/cowork)에서 Claude에게 설정을 문제 해결하도록 요청하세요.415 세션 격리에는 [Git](https://git-scm.com/downloads)이 필요합니다. 대부분의 Mac에는 기본적으로 Git이 포함되어 있습니다. Terminal에서 `git --version`을 실행하여 확인합니다. 버전 번호가 출력되면 Git이 설치된 것입니다. Git 오류가 발생하면 [Cowork 탭](https://claude.com/product/cowork)에서 Claude에게 설정을 문제 해결하도록 요청하세요.


811* **SSH host**: `user@hostname` 또는 `~/.ssh/config`에 정의된 호스트818* **SSH host**: `user@hostname` 또는 `~/.ssh/config`에 정의된 호스트

812* **SSH port**: 비워두면 기본값은 22이거나 SSH 구성의 포트를 사용합니다819* **SSH port**: 비워두면 기본값은 22이거나 SSH 구성의 포트를 사용합니다

813* **SSH key (optional)**: `~/.ssh/id_ed25519`와 같은 개인 키의 경로. SSH 구성 또는 SSH 에이전트를 사용하려면 비워둡니다.820* **SSH key (optional)**: `~/.ssh/id_ed25519`와 같은 개인 키의 경로. SSH 구성 또는 SSH 에이전트를 사용하려면 비워둡니다.

821* **Worktree folder**: 새 세션이 워크트리를 생성하는 원격 머신의 폴더(예: `~/worktrees`). [원격 머신의 기본값](#choose-where-ssh-session-worktrees-go)을 사용하려면 비워둡니다.

814 822 

815추가되면 연결이 환경 드롭다운의 **SSH** 아래에 나타납니다. 이를 선택하여 해당 머신에서 세션을 시작합니다. Claude는 원격 머신에서 파일 및 도구에 액세스하여 실행됩니다.823추가되면 연결이 환경 드롭다운의 **SSH** 아래에 나타납니다. 이를 선택하여 해당 머신에서 세션을 시작합니다. Claude는 원격 머신에서 파일 및 도구에 액세스하여 실행됩니다.

816 824 

817원격 머신은 Linux 또는 macOS를 실행해야 합니다. 데스크톱은 처음 연결할 때 원격 머신에 Claude Code를 자동으로 설치합니다. 연결되면 SSH 세션은 권한 모드, 커넥터, 플러그인 및 MCP 서버를 지원합니다.825원격 머신은 Linux 또는 macOS를 실행해야 합니다. 데스크톱은 처음 연결할 때 원격 머신에 Claude Code를 자동으로 설치합니다. 연결되면 SSH 세션은 권한 모드, 커넥터, 플러그인 및 MCP 서버를 지원합니다.

818 826 

827<h4 id="choose-where-ssh-session-worktrees-go">

828 SSH 세션 워크트리 위치 선택

829</h4>

830 

831조직에서 세션이 사용할 수 있는 폴더를 제한하지 않는 한, 새 SSH 세션은 다음 중 처음으로 설정된 위치에 [워크트리](#work-in-parallel-with-sessions)를 생성합니다:

832 

8331. SSH 연결의 **Worktree folder**

8342. 원격 머신의 `~/.claude/settings.json`에 있는 [`worktree.location`](/docs/ko/settings-reference#worktree-location)

8353. 기본값인 `<project-root>/.claude/worktrees/`

836 

837각 프로젝트는 설정한 폴더 안에 자체 하위 폴더를 가지므로, `~/worktrees`를 사용하면 워크트리 경로는 `~/worktrees/<project>-<id>/<worktree-name>`이 됩니다. 설정한 폴더가 프로젝트 내부에 있으면 Desktop은 해당 프로젝트에 대해 이를 무시하고 기본값을 사용합니다.

838 

839이전에 추가한 연결이나 조직에서 관리하는 연결에 **Worktree folder**를 설정하려면 환경 드롭다운에서 해당 연결 위에 마우스를 올린 다음 기어 아이콘을 클릭합니다.

840 

841이 필드를 사용하려면 Claude Desktop v1.44121.0 이상이 필요합니다. 조직에서 세션이 사용할 수 있는 폴더를 제한하는 경우 Desktop은 이 필드를 숨기고 워크트리를 프로젝트 내부에 유지합니다.

842 

819<h4 id="open-an-ssh-session-from-a-link">843<h4 id="open-an-ssh-session-from-a-link">

820 링크에서 SSH 세션 열기844 링크에서 SSH 세션 열기

821</h4>845</h4>


869 팀을 위해 SSH 연결을 미리 구성합니다893 팀을 위해 SSH 연결을 미리 구성합니다

870</h4>894</h4>

871 895 

872관리자는 [관리형 설정](/docs/ko/managed-settings)에서 `sshConfigs`를 설정하여 팀 멤버에게 SSH 연결을 배포할 수 있습니다. 이러한 방식으로 정의된 연결은 각 사용자의 환경 드롭다운에 자동으로 나타나며 관리되는 것으로 표시되므로 사용자는 이를 선택할 수 있지만 앱에서 편집하거나 삭제할 수 없습니다.896관리자는 [관리형 설정](/docs/ko/managed-settings)에서 `sshConfigs`를 설정하여 팀 멤버에게 SSH 연결을 배포할 수 있습니다. 이러한 방식으로 정의된 연결은 각 사용자의 환경 드롭다운에 자동으로 나타나며 관리되는 것으로 표시됩니다. 사용자는 이를 선택하고 [자체 **Worktree folder**를 설정](#choose-where-ssh-session-worktrees-go)할 수 있지만, 앱에서 그 밖의 항목을 편집하거나 삭제할 수는 없습니다.

873 897 

874다음 예제는 단일 연결을 미리 구성합니다:898다음 예제는 단일 연결을 미리 구성합니다:

875 899 


935 **Monitoring** 아래 관리자 콘솔의 [Data and privacy settings](https://claude.ai/admin-settings/data-privacy-controls)에 있는 Cowork의 OpenTelemetry 양식은 Cowork 세션에만 적용됩니다. 이 머신의 Cowork 세션에서 데스크톱 앱은 해당 수집기를 Claude Code에 `OTEL_*` 환경 변수로 전달하므로, Claude Code가 해당 세션에서 [관리자 콘솔 설정을 가져오지 않음](#managed-settings)에도 불구하고 양식이 적용됩니다.959 **Monitoring** 아래 관리자 콘솔의 [Data and privacy settings](https://claude.ai/admin-settings/data-privacy-controls)에 있는 Cowork의 OpenTelemetry 양식은 Cowork 세션에만 적용됩니다. 이 머신의 Cowork 세션에서 데스크톱 앱은 해당 수집기를 Claude Code에 `OTEL_*` 환경 변수로 전달하므로, Claude Code가 해당 세션에서 [관리자 콘솔 설정을 가져오지 않음](#managed-settings)에도 불구하고 양식이 적용됩니다.

936 960 

937 Code 탭 세션에서 텔레메트리를 내보내려면 [모니터링을 위한 관리자 구성](/docs/ko/monitoring-usage#administrator-configuration)에 표시된 대로 Claude Code 관리형 설정의 `env` 블록에서 `CLAUDE_CODE_ENABLE_TELEMETRY` 및 `OTEL_*` 변수를 설정합니다. 로컬, 클라우드, SSH 세션은 각각 [다른 소스에서 관리형 설정](#managed-settings)을 읽습니다. 클라우드 세션이 도달할 수 있는 호스트에 대해서는 [네트워크 액세스](/docs/ko/cloud-environments#network-access)를 참조하세요. Code 탭 세션이 보고하는 `service.name`에 대해서는 [서비스 정보](/docs/ko/monitoring-usage#service-information)를 참조하세요.961 Code 탭 세션에서 텔레메트리를 내보내려면 [모니터링을 위한 관리자 구성](/docs/ko/monitoring-usage#administrator-configuration)에 표시된 대로 Claude Code 관리형 설정의 `env` 블록에서 `CLAUDE_CODE_ENABLE_TELEMETRY` 및 `OTEL_*` 변수를 설정합니다. 로컬, 클라우드, SSH 세션은 각각 [다른 소스에서 관리형 설정](#managed-settings)을 읽습니다. 클라우드 세션이 도달할 수 있는 호스트에 대해서는 [네트워크 액세스](/docs/ko/cloud-environments#network-access)를 참조하세요. Code 탭 세션이 보고하는 `service.name`에 대해서는 [서비스 정보](/docs/ko/monitoring-usage#service-information)를 참조하세요.

962 

963 SSH 세션이 어느 원격 머신에서 실행되었는지 확인하려면 [Desktop SSH 세션에 텔레메트리 귀속](/docs/ko/monitoring-usage#attribute-telemetry-to-desktop-ssh-sessions)을 참조하세요.

938</Note>964</Note>

939 965 

940<h3 id="managed-settings">966<h3 id="managed-settings">


951| `browserExternalPageTools` | Claude가 [Browser 창](#browse-external-sites)에서 외부 페이지를 읽거나 작동하기 위해 도구를 사용하지 못하도록 하려면 `"disabled"`로 설정합니다. 사용자는 여전히 외부 사이트로 직접 이동할 수 있으며, 로컬 개발 서버 미리보기는 영향을 받지 않습니다. |977| `browserExternalPageTools` | Claude가 [Browser 창](#browse-external-sites)에서 외부 페이지를 읽거나 작동하기 위해 도구를 사용하지 못하도록 하려면 `"disabled"`로 설정합니다. 사용자는 여전히 외부 사이트로 직접 이동할 수 있으며, 로컬 개발 서버 미리보기는 영향을 받지 않습니다. |

952| `disableMobileSimulatorTools` | Claude의 [iOS Simulator 창](/docs/ko/desktop-ios-simulator#turn-off-simulator-access)에서 장치를 제어하고 캡처하는 도구를 차단하려면 `true`로 설정합니다. 창은 사용자의 자신의 탭에 대해 사용 가능하게 유지됩니다. Claude의 액세스만 제거됩니다. 값은 JSON 부울 `true`여야 합니다. 문자열 `"true"`는 무시됩니다. |978| `disableMobileSimulatorTools` | Claude의 [iOS Simulator 창](/docs/ko/desktop-ios-simulator#turn-off-simulator-access)에서 장치를 제어하고 캡처하는 도구를 차단하려면 `true`로 설정합니다. 창은 사용자의 자신의 탭에 대해 사용 가능하게 유지됩니다. Claude의 액세스만 제거됩니다. 값은 JSON 부울 `true`여야 합니다. 문자열 `"true"`는 무시됩니다. |

953| `disableBrowserExternalNavigation` | [Browser 창](#browse-external-sites)에서 외부 브라우징을 완전히 끄려면 `true`로 설정합니다. 사용자와 Claude 모두 외부 사이트로 이동할 수 없으며, localhost 개발 서버 미리보기는 영향을 받지 않습니다. 값은 JSON 부울 `true`여야 합니다. 문자열 `"true"`는 무시됩니다. |979| `disableBrowserExternalNavigation` | [Browser 창](#browse-external-sites)에서 외부 브라우징을 완전히 끄려면 `true`로 설정합니다. 사용자와 Claude 모두 외부 사이트로 이동할 수 없으며, localhost 개발 서버 미리보기는 영향을 받지 않습니다. 값은 JSON 부울 `true`여야 합니다. 문자열 `"true"`는 무시됩니다. |

954| `sshConfigs` | 환경 드롭다운에 나타나는 [SSH 연결](#pre-configure-ssh-connections-for-your-team)을 사전 구성합니다. 사용자는 관리형 연결을 편집하거나 삭제할 수 없습니다. |980| `sshConfigs` | 환경 드롭다운에 나타나는 [SSH 연결](#pre-configure-ssh-connections-for-your-team)을 사전 구성합니다. 사용자는 관리형 연결을 삭제할 수 없으며, 자신의 **Worktree folder** 외에는 아무것도 편집할 수 없습니다. |

955| `sshHostAllowlist` | [SSH 세션](#restrict-which-ssh-hosts-users-can-connect-to)을 확인된 호스트명이 이러한 패턴 중 하나와 일치하는 호스트로 제한합니다. 관리형 설정에서만 읽습니다. |981| `sshHostAllowlist` | [SSH 세션](#restrict-which-ssh-hosts-users-can-connect-to)을 확인된 호스트명이 이러한 패턴 중 하나와 일치하는 호스트로 제한합니다. 관리형 설정에서만 읽습니다. |

956| `disableDesktopLocalSessions` | [장치에서 실행되는 Code 세션](#local-sessions-on-managed-devices)을 끄려면 `true`로 설정하여 다른 호스트로의 SSH 세션과 클라우드 세션을 사용 가능하게 유지합니다. 값은 JSON 부울 `true`여야 합니다. 관리형 설정에서만 읽습니다. Claude Desktop v1.37937.0 이상이 필요합니다. |982| `disableDesktopLocalSessions` | [장치에서 실행되는 Code 세션](#local-sessions-on-managed-devices)을 끄려면 `true`로 설정하여 다른 호스트로의 SSH 세션과 클라우드 세션을 사용 가능하게 유지합니다. 값은 JSON 부울 `true`여야 합니다. 관리형 설정에서만 읽습니다. Claude Desktop v1.37937.0 이상이 필요합니다. |

957| `disableSshSavedPasswords` | Desktop이 SSH 비밀번호 저장을 제안하지 않고 이전에 저장한 비밀번호를 사용하거나 표시하지 않도록 하려면 `true`로 설정합니다. 이 설정을 켜도 저장된 비밀번호는 삭제되지 않습니다. 관리형 설정에서만 읽습니다. Claude Desktop v1.49585.0 이상이 필요합니다. |983| `disableSshSavedPasswords` | Desktop이 SSH 비밀번호 저장을 제안하지 않고 이전에 저장한 비밀번호를 사용하거나 표시하지 않도록 하려면 `true`로 설정합니다. 이 설정을 켜도 저장된 비밀번호는 삭제되지 않습니다. 관리형 설정에서만 읽습니다. Claude Desktop v1.49585.0 이상이 필요합니다. |

env-vars.md +6 −6

Details

210| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | `1`로 설정하면 SDK에서 생성한 MCP 서버의 도구 이름에 `mcp__<server>__` 접두사를 붙이지 않습니다. 도구는 원래 이름을 사용합니다. SDK 사용 시에만 해당됩니다 |210| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | `1`로 설정하면 SDK에서 생성한 MCP 서버의 도구 이름에 `mcp__<server>__` 접두사를 붙이지 않습니다. 도구는 원래 이름을 사용합니다. SDK 사용 시에만 해당됩니다 |

211| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | 서브에이전트의 정체 타임아웃(밀리초)입니다. Claude Code v2.1.286 이상에서는 [워크플로 에이전트](/docs/ko/workflows#when-an-agent-stalls-and-restarts)에도 적용됩니다. 기본값은 `600000`(10분)이며, 스트림 워치독이 켜진 상태에서 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`를 높이면 [느리거나 정체된 API 응답 처리](/docs/ko/agent-sdk/typescript#handle-slow-or-stalled-api-responses)에 설명된 대로 기본값도 함께 높아집니다 |211| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | 서브에이전트의 정체 타임아웃(밀리초)입니다. Claude Code v2.1.286 이상에서는 [워크플로 에이전트](/docs/ko/workflows#when-an-agent-stalls-and-restarts)에도 적용됩니다. 기본값은 `600000`(10분)이며, 스트림 워치독이 켜진 상태에서 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`를 높이면 [느리거나 정체된 API 응답 처리](/docs/ko/agent-sdk/typescript#handle-slow-or-stalled-api-responses)에 설명된 대로 기본값도 함께 높아집니다 |

212| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | 자동 압축이 트리거되는 자동 압축 윈도우의 백분율(1-100)을 설정합니다. 더 일찍 압축하려면 `50` 같은 낮은 값을 사용합니다. 이 변수로 임계값을 높일 수는 없으므로 기본 백분율보다 큰 값은 무시됩니다. [모델의 컨텍스트 한도 전에 압축하는](/docs/ko/model-config#context-window-and-auto-compaction) 세션에만 적용됩니다. 메인 대화와 서브에이전트 모두에 적용됩니다 |212| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | 자동 압축이 트리거되는 자동 압축 윈도우의 백분율(1-100)을 설정합니다. 더 일찍 압축하려면 `50` 같은 낮은 값을 사용합니다. 이 변수로 임계값을 높일 수는 없으므로 기본 백분율보다 큰 값은 무시됩니다. [모델의 컨텍스트 한도 전에 압축하는](/docs/ko/model-config#context-window-and-auto-compaction) 세션에만 적용됩니다. 메인 대화와 서브에이전트 모두에 적용됩니다 |

213| `CLAUDE_AUTO_BACKGROUND_TASKS` | `1`로 설정하면 장기 실행 에이전트 작업의 자동 백그라운드 전환을 강제로 활성화합니다. 활성화하면 서브에이전트가 약 2분간 실행된 후 백그라운드로 이동합니다. Claude Code v2.1.212 이상에서는 비대화형 모드에서 [긴 MCP 도구 호출의 자동 백그라운드 전환](/docs/ko/mcp#automatic-backgrounding-of-long-tool-calls)도 활성화합니다 |213| `CLAUDE_AUTO_BACKGROUND_TASKS` | `1`로 설정하면 오래 실행되는 에이전트 작업의 자동 백그라운드 전환을 강제로 활성화합니다. 활성화하면 [서브에이전트](/docs/ko/sub-agents#run-subagents-in-foreground-or-background)가 약 2분간 실행된 후 백그라운드로 이동합니다. Claude가 파일 편집 같은 도구 호출을 서브에이전트 뒤에 대기시킨 경우, 해당 호출이 시작되기 전에 서브에이전트가 포그라운드에서 완료됩니다. Claude Code v2.1.212 이상에서는 비대화형 모드에서 [오래 걸리는 MCP 도구 호출의 자동 백그라운드 전환](/docs/ko/mcp#automatic-backgrounding-of-long-tool-calls)도 활성화합니다 |

214| `CLAUDE_AX_PREPARK_MS` | [스크린 리더 모드](/docs/ko/accessibility)에서 Claude Code가 새 줄이나 변경된 줄을 쓰기 전에 기다리는 시간(밀리초)입니다. 기본값은 `0`이므로 Claude Code는 기다리지 않습니다. v2.1.287 이전에는 기본값이 `50`이었습니다. Claude Code는 대기 시간을 최대 `5000`으로 제한합니다. Claude Code v2.1.233 이상이 필요합니다 |214| `CLAUDE_AX_PREPARK_MS` | [스크린 리더 모드](/docs/ko/accessibility)에서 Claude Code가 새 줄이나 변경된 줄을 쓰기 전에 기다리는 시간(밀리초)입니다. 기본값은 `0`이므로 Claude Code는 기다리지 않습니다. v2.1.287 이전에는 기본값이 `50`이었습니다. Claude Code는 대기 시간을 최대 `5000`으로 제한합니다. Claude Code v2.1.233 이상이 필요합니다 |

215| `CLAUDE_AX_SCREEN_READER` | `1`로 설정하면 장식용 테두리나 애니메이션이 없는 평면 텍스트로 스크린 리더 친화적인 출력을 렌더링합니다. `0`으로 설정하면 [`axScreenReader`](/docs/ko/settings-reference#axscreenreader)가 `true`인 경우에도 스크린 리더 모드를 강제로 끕니다. [`--ax-screen-reader`](/docs/ko/cli-reference#cli-flags) 플래그가 우선합니다. Claude Code v2.1.181 이상이 필요합니다 |215| `CLAUDE_AX_SCREEN_READER` | `1`로 설정하면 장식용 테두리나 애니메이션이 없는 평면 텍스트로 스크린 리더 친화적인 출력을 렌더링합니다. `0`으로 설정하면 [`axScreenReader`](/docs/ko/settings-reference#axscreenreader)가 `true`인 경우에도 스크린 리더 모드를 강제로 끕니다. [`--ax-screen-reader`](/docs/ko/cli-reference#cli-flags) 플래그가 우선합니다. Claude Code v2.1.181 이상이 필요합니다 |

216| `CLAUDE_AX_STARTUP_QUIET_MS` | [스크린 리더 모드](/docs/ko/accessibility)에서 시작 확인 줄 이후 Claude Code가 첫 인터페이스 렌더링을 보류하는 시간(밀리초)으로, 새 출력이 끼어들기 전에 스크린 리더가 해당 줄을 끝까지 읽을 수 있게 합니다. 기본값은 `3000`입니다. 즉시 렌더링하려면 `0`으로 설정합니다. Claude Code는 보류 시간을 최대 `600000`(10분)으로 제한합니다. 첫 키 입력 시 보류가 조기에 종료됩니다. Claude Code v2.1.217 이상이 필요합니다 |216| `CLAUDE_AX_STARTUP_QUIET_MS` | [스크린 리더 모드](/docs/ko/accessibility)에서 시작 확인 줄 이후 Claude Code가 첫 인터페이스 렌더링을 보류하는 시간(밀리초)으로, 새 출력이 끼어들기 전에 스크린 리더가 해당 줄을 끝까지 읽을 수 있게 합니다. 기본값은 `3000`입니다. 즉시 렌더링하려면 `0`으로 설정합니다. Claude Code는 보류 시간을 최대 `600000`(10분)으로 제한합니다. 첫 키 입력 시 보류가 조기에 종료됩니다. Claude Code v2.1.217 이상이 필요합니다 |


285| `CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK` | `1`로 설정하면 [안전 분류기가 요청을 플래그 지정할 때의 자동 모델 전환](/docs/ko/model-config#automatic-model-fallback)을 끕니다. 이는 [`switchModelsOnFlag`](/docs/ko/settings-reference#switchmodelsonflag) 설정이 제어하는 동작입니다 |285| `CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK` | `1`로 설정하면 [안전 분류기가 요청을 플래그 지정할 때의 자동 모델 전환](/docs/ko/model-config#automatic-model-fallback)을 끕니다. 이는 [`switchModelsOnFlag`](/docs/ko/settings-reference#switchmodelsonflag) 설정이 제어하는 동작입니다 |

286| `CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS` | `1`로 설정하면 업스트림이 구조화된 출력 `output_config.format` 필드와 이와 짝을 이루는 `anthropic-beta` 값을 거부하는 [LLM 게이트웨이](/docs/ko/llm-gateway-protocol#feature-pass-through)를 위해 Claude Code가 이를 전송하지 않습니다. [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/ko/llm-gateway-protocol#disable-pre-release-capabilities)가 끄는 다른 프리릴리스 기능은 켜진 상태로 유지됩니다. Claude Code v2.1.288 이상이 필요합니다 |286| `CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS` | `1`로 설정하면 업스트림이 구조화된 출력 `output_config.format` 필드와 이와 짝을 이루는 `anthropic-beta` 값을 거부하는 [LLM 게이트웨이](/docs/ko/llm-gateway-protocol#feature-pass-through)를 위해 Claude Code가 이를 전송하지 않습니다. [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/ko/llm-gateway-protocol#disable-pre-release-capabilities)가 끄는 다른 프리릴리스 기능은 켜진 상태로 유지됩니다. Claude Code v2.1.288 이상이 필요합니다 |

287| `CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT` | `1`로 설정하면 `rm -rf "$(pwd)"`처럼 대상이 전적으로 명령 치환의 출력인 재귀적 `rm`에 대한 [중요 경로](/docs/ko/permission-modes#critical-paths) 검사를 끕니다. 다른 중요 경로 검사는 계속 실행됩니다. Claude Code는 설정 `env` 블록을 통해 전달된 값을 무시하므로 Claude Code를 실행하는 환경에서 설정합니다. Claude Code v2.1.281 이상이 필요합니다 |287| `CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT` | `1`로 설정하면 `rm -rf "$(pwd)"`처럼 대상이 전적으로 명령 치환의 출력인 재귀적 `rm`에 대한 [중요 경로](/docs/ko/permission-modes#critical-paths) 검사를 끕니다. 다른 중요 경로 검사는 계속 실행됩니다. Claude Code는 설정 `env` 블록을 통해 전달된 값을 무시하므로 Claude Code를 실행하는 환경에서 설정합니다. Claude Code v2.1.281 이상이 필요합니다 |

288| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | `1`로 설정하면 대화 컨텍스트에 기반한 자동 터미널 제목 업데이트를 비활성화합니다. 또한 [세션 제목을 생성하는](/docs/ko/sessions#name-your-sessions) 백그라운드 small/fast 모델 요청도 건너뜁니다 |288| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | `1`로 설정하면 대화 컨텍스트에 기반한 자동 터미널 제목 업데이트를 비활성화합니다. 또한 [세션 제목을 생성하는](/docs/ko/sessions#name-your-sessions) 백그라운드 small/fast 모델 요청을 건너뛰고, [터미널에 대한 상태 보고](/docs/ko/terminal-config#see-session-status-in-your-terminal)를 끕니다 |

289| `CLAUDE_CODE_DISABLE_THINKING` | `1`로 설정하면 API 요청에서 `thinking` 매개변수를 완전히 생략합니다. 이는 해당 매개변수를 거부하는 프록시와 게이트웨이를 위한 호환성 옵션입니다. 기본적으로 사고하는 모델에서는 매개변수를 생략해도 모델이 여전히 사고할 수 있습니다. Anthropic API에서 [확장 사고](https://platform.claude.com/docs/en/build-with-claude/extended-thinking)를 명시적으로 비활성화하려면 대신 `MAX_THINKING_TOKENS=0`을 사용합니다. 두 변수 모두 사고를 끌 수 없는 Opus 5.5, Sonnet 5.5, Haiku 5.5 또는 Fable 모델에서는 사고를 끄지 않습니다. [서드파티 제공자](/docs/ko/third-party-integrations)에서는 `MAX_THINKING_TOKENS=0`도 마찬가지로 매개변수를 생략하므로 두 변수가 동일하게 동작합니다 |289| `CLAUDE_CODE_DISABLE_THINKING` | `1`로 설정하면 API 요청에서 `thinking` 매개변수를 완전히 생략합니다. 이는 해당 매개변수를 거부하는 프록시와 게이트웨이를 위한 호환성 옵션입니다. 기본적으로 사고하는 모델에서는 매개변수를 생략해도 모델이 여전히 사고할 수 있습니다. Anthropic API에서 [확장 사고](https://platform.claude.com/docs/en/build-with-claude/extended-thinking)를 명시적으로 비활성화하려면 대신 `MAX_THINKING_TOKENS=0`을 사용합니다. 두 변수 모두 사고를 끌 수 없는 Opus 5.5, Sonnet 5.5, Haiku 5.5 또는 Fable 모델에서는 사고를 끄지 않습니다. [서드파티 제공자](/docs/ko/third-party-integrations)에서는 `MAX_THINKING_TOKENS=0`도 마찬가지로 매개변수를 생략하므로 두 변수가 동일하게 동작합니다 |

290| `CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT` | `1`로 설정하면 Claude Code가 [LLM 게이트웨이](/docs/ko/llm-gateway) 별칭처럼 모델 ID를 인식하지 못할 때 사전 [자동 압축](/docs/ko/costs#reduce-token-usage)을 건너뜁니다. 이 변수가 없으면 Claude Code는 해당 ID에 대해 가정한 컨텍스트 윈도우에서 압축합니다. 대신 `CLAUDE_CODE_MAX_CONTEXT_TOKENS`로 가정된 윈도우를 보정할 수 있으며, 각 변수가 적용되는 경우는 [게이트웨이 또는 사용자 지정 모델 ID의 윈도우 보정](/docs/ko/model-config#correct-the-window-for-a-gateway-or-custom-model-id)을 참조하세요. Claude Code v2.1.223 이상이 필요합니다 |290| `CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT` | `1`로 설정하면 Claude Code가 [LLM 게이트웨이](/docs/ko/llm-gateway) 별칭처럼 모델 ID를 인식하지 못할 때 사전 [자동 압축](/docs/ko/costs#reduce-token-usage)을 건너뜁니다. 이 변수가 없으면 Claude Code는 해당 ID에 대해 가정한 컨텍스트 윈도우에서 압축합니다. 대신 `CLAUDE_CODE_MAX_CONTEXT_TOKENS`로 가정된 윈도우를 보정할 수 있으며, 각 변수가 적용되는 경우는 [게이트웨이 또는 사용자 지정 모델 ID의 윈도우 보정](/docs/ko/model-config#correct-the-window-for-a-gateway-or-custom-model-id)을 참조하세요. Claude Code v2.1.223 이상이 필요합니다 |

291| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | `1`로 설정하면 [전체 화면 렌더링](/docs/ko/fullscreen)에서 가상 스크롤을 비활성화하고 트랜스크립트의 모든 메시지를 렌더링합니다. 전체 화면 모드에서 스크롤할 때 메시지가 나타나야 할 곳에 빈 영역이 표시되면 이 변수를 사용합니다 |291| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | `1`로 설정하면 [전체 화면 렌더링](/docs/ko/fullscreen)에서 가상 스크롤을 비활성화하고 트랜스크립트의 모든 메시지를 렌더링합니다. 전체 화면 모드에서 스크롤할 때 메시지가 나타나야 할 곳에 빈 영역이 표시되면 이 변수를 사용합니다 |


309| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | 쿼리 루프가 유휴 상태가 된 후 자동으로 종료하기 전까지 기다리는 시간(밀리초)입니다. SDK 모드를 사용하는 자동화된 워크플로와 스크립트에 유용합니다 |309| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | 쿼리 루프가 유휴 상태가 된 후 자동으로 종료하기 전까지 기다리는 시간(밀리초)입니다. SDK 모드를 사용하는 자동화된 워크플로와 스크립트에 유용합니다 |

310| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | [에이전트 팀](/docs/ko/agent-teams)을 활성화하려면 `1`로 설정합니다. 에이전트 팀은 실험적 기능이며 기본적으로 비활성화되어 있습니다 |310| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | [에이전트 팀](/docs/ko/agent-teams)을 활성화하려면 `1`로 설정합니다. 에이전트 팀은 실험적 기능이며 기본적으로 비활성화되어 있습니다 |

311| `CLAUDE_CODE_EXTRA_BODY` | 모든 API 요청 본문의 최상위 수준에 병합할 JSON 객체입니다. Claude Code가 직접 노출하지 않는 제공업체별 매개변수를 전달할 때 유용합니다. 셸에서 export한 값은 `claude agents` 또는 `--bg`로 실행하는 [백그라운드 세션](/docs/ko/agent-view)에도 적용됩니다. v2.1.206 이전에는 백그라운드 세션이 셸에서 export한 값을 무시하고 백그라운드 수퍼바이저 프로세스가 상속한 값을 사용했습니다 |311| `CLAUDE_CODE_EXTRA_BODY` | 모든 API 요청 본문의 최상위 수준에 병합할 JSON 객체입니다. Claude Code가 직접 노출하지 않는 제공업체별 매개변수를 전달할 때 유용합니다. 셸에서 export한 값은 `claude agents` 또는 `--bg`로 실행하는 [백그라운드 세션](/docs/ko/agent-view)에도 적용됩니다. v2.1.206 이전에는 백그라운드 세션이 셸에서 export한 값을 무시하고 백그라운드 수퍼바이저 프로세스가 상속한 값을 사용했습니다 |

312| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | 파일 읽기의 기본 토큰 제한을 재정의합니다. 더 큰 파일을 전체로 읽어야 할 때 유용합니다 |312| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | [파일 읽기](/docs/ko/tools-reference#large-files)의 기본 토큰 제한(25,000 토큰)을 재정의합니다. 더 큰 파일을 전체로 읽어야 할 때 유용합니다. Claude가 `allow_large` 매개변수를 사용해 수행하는 읽기는 컨텍스트 윈도우에 여유가 있을 때 이 제한을 넘을 수 있습니다 |

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

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

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


336| `CLAUDE_CODE_MAX_SUBAGENTS_PER_SESSION` | v2.1.224에서 제거되었으며 이제 아무 작업도 하지 않습니다. 이전에는 한 세션에서 Claude가 Agent 도구로 생성할 수 있는 [서브에이전트](/docs/ko/sub-agents)의 총수를 제한했으며(기본값: 200), 상한을 넘어 생성하면 `Subagent spawn limit reached`와 함께 실패했습니다. [동시 서브에이전트 제한](/docs/ko/sub-agents#concurrent-subagent-limit)과 [깊이 제한](/docs/ko/sub-agents#let-subagents-spawn-their-own-subagents)은 여전히 적용됩니다 |336| `CLAUDE_CODE_MAX_SUBAGENTS_PER_SESSION` | v2.1.224에서 제거되었으며 이제 아무 작업도 하지 않습니다. 이전에는 한 세션에서 Claude가 Agent 도구로 생성할 수 있는 [서브에이전트](/docs/ko/sub-agents)의 총수를 제한했으며(기본값: 200), 상한을 넘어 생성하면 `Subagent spawn limit reached`와 함께 실패했습니다. [동시 서브에이전트 제한](/docs/ko/sub-agents#concurrent-subagent-limit)과 [깊이 제한](/docs/ko/sub-agents#let-subagents-spawn-their-own-subagents)은 여전히 적용됩니다 |

337| `CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH` | 메인 대화 아래에 허용되는 [서브에이전트 계층](/docs/ko/sub-agents#let-subagents-spawn-their-own-subagents) 수입니다 (기본값: 3). 기본값에서는 서브에이전트가 자체 서브에이전트를 생성할 수 있으며, 세 번째 계층의 서브에이전트는 더 이상 생성할 수 없습니다. 중첩을 끄려면 `1`로 설정합니다. v2.1.217부터 v2.1.218까지는 기본값이 1이었으므로 제한을 올리지 않으면 서브에이전트가 자체 서브에이전트를 생성할 수 없었으며, v2.1.219에서 기본값이 3으로 올라갔습니다. 숫자로만 된 양의 정수를 허용하며 그 밖의 값은 무시되므로, 제한을 조정할 수는 있지만 제거할 수는 없습니다. Claude Code v2.1.217 이상이 필요합니다 |337| `CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH` | 메인 대화 아래에 허용되는 [서브에이전트 계층](/docs/ko/sub-agents#let-subagents-spawn-their-own-subagents) 수입니다 (기본값: 3). 기본값에서는 서브에이전트가 자체 서브에이전트를 생성할 수 있으며, 세 번째 계층의 서브에이전트는 더 이상 생성할 수 없습니다. 중첩을 끄려면 `1`로 설정합니다. v2.1.217부터 v2.1.218까지는 기본값이 1이었으므로 제한을 올리지 않으면 서브에이전트가 자체 서브에이전트를 생성할 수 없었으며, v2.1.219에서 기본값이 3으로 올라갔습니다. 숫자로만 된 양의 정수를 허용하며 그 밖의 값은 무시되므로, 제한을 조정할 수는 있지만 제거할 수는 없습니다. Claude Code v2.1.217 이상이 필요합니다 |

338| `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` | 병렬로 실행할 수 있는 읽기 전용 도구와 서브에이전트의 최대 수입니다(기본값: 10). 값이 높을수록 병렬성은 증가하지만 더 많은 리소스를 소비합니다 |338| `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` | 병렬로 실행할 수 있는 읽기 전용 도구와 서브에이전트의 최대 수입니다(기본값: 10). 값이 높을수록 병렬성은 증가하지만 더 많은 리소스를 소비합니다 |

339| `CLAUDE_CODE_MAX_TURNS` | 명시적 제한이 전달되지 않은 경우 에이전트 턴 수를 제한합니다. [`--max-turns`](/docs/ko/cli-reference#cli-flags)를 전달하는 것과 같으며, 둘 다 설정된 경우 `--max-turns`가 우선합니다. 양의 정수가 아닌 값은 제한 없음으로 처리되지 않고 시작 시 오류와 함께 거부됩니다 |339| `CLAUDE_CODE_MAX_TURNS` | 명시적인 제한이 전달되지 않았을 때 에이전트 턴 수를 제한합니다. [`--max-turns`](/docs/ko/cli-reference#cli-flags)를 전달하는 것과 같으며, 둘 다 설정된 경우 플래그가 우선합니다. 양의 정수가 아닌 값은 제한 없음으로 취급되지 않고 시작 시 오류와 함께 거부됩니다 |

340| `CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION` | [WebSearch](/docs/ko/tools-reference#session-search-limit) 호출의 상한입니다(기본값: 200). Claude가 상한에 도달하면 이후의 WebSearch 호출은 이미 수집한 정보로 계속 진행하라는 알림을 반환합니다. 상한이 없는 양의 정수를 허용합니다. 그 밖의 값은 무시되고 기본값이 적용되므로 상한을 올릴 수는 있지만 끌 수는 없습니다. Claude Code v2.1.212 이상이 필요합니다 |340| `CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION` | [WebSearch](/docs/ko/tools-reference#session-search-limit) 호출의 상한입니다(기본값: 200). Claude가 상한에 도달하면 이후의 WebSearch 호출은 이미 수집한 정보로 계속 진행하라는 알림을 반환합니다. 상한이 없는 양의 정수를 허용합니다. 그 밖의 값은 무시되고 기본값이 적용되므로 상한을 올릴 수는 있지만 끌 수는 없습니다. Claude Code v2.1.212 이상이 필요합니다 |

341| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | 셸 환경을 상속하는 대신, 안전한 기본 환경과 서버에 구성된 `env`만으로 stdio MCP 서버를 생성하려면 `1`로 설정합니다 |341| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | 셸 환경을 상속하는 대신, 안전한 기본 환경과 서버에 구성된 `env`만으로 stdio MCP 서버를 생성하려면 `1`로 설정합니다 |

342| `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` | 아직 실행 중인 MCP 도구 호출이 [백그라운드 작업으로 이동](/docs/ko/mcp#automatic-backgrounding-of-long-tool-calls)하기까지의 경과 시간(밀리초)입니다(기본값: 120000, 즉 2분). 자동 백그라운드 전환을 끄려면 `0`으로 설정합니다. Claude Code v2.1.212 이상이 필요합니다 |342| `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` | 아직 실행 중인 MCP 도구 호출이 [백그라운드 작업으로 이동](/docs/ko/mcp#automatic-backgrounding-of-long-tool-calls)하기까지의 경과 시간(밀리초)입니다(기본값: 120000, 즉 2분). 자동 백그라운드 전환을 끄려면 `0`으로 설정합니다. Claude Code v2.1.212 이상이 필요합니다 |

343| `CLAUDE_CODE_MCP_STARTUP_WAIT_MS` | [비대화형](/docs/ko/headless) 세션의 첫 번째 턴이 아직 연결 중인 MCP 서버를 기다리는 시간(밀리초)으로, 기본 [첫 번째 턴 대기](/docs/ko/agent-sdk/mcp#connection-timing)를 대체합니다. 설정하면 대기가 보류 중인 모든 서버에 적용됩니다. 대기를 건너뛰려면 `0`으로 설정합니다. [`--permission-prompt-tool`](/docs/ko/cli-reference#cli-flags) 서버는 값과 관계없이 자체 `MCP_TIMEOUT` 대기를 유지합니다. Claude Code v2.1.274 이상이 필요합니다 |343| `CLAUDE_CODE_MCP_STARTUP_WAIT_MS` | [비대화형](/docs/ko/headless) 세션의 첫 번째 턴이 아직 연결 중인 MCP 서버를 기다리는 시간(밀리초)으로, 기본 [첫 번째 턴 대기](/docs/ko/agent-sdk/mcp#connection-timing)를 대체합니다. 설정하면 대기는 보류 중인 모든 서버를 대상으로 하며, [자체 호스팅 환경](/docs/ko/self-hosted-environments-configuration#connection-timing)에서는 대기 시간만 변경합니다. `0`으로 설정하면 대기를 건너뜁니다. [`--permission-prompt-tool`](/docs/ko/cli-reference#cli-flags) 서버는 값과 관계없이 자체 `MCP_TIMEOUT` 대기를 유지합니다. Claude Code v2.1.274 이상이 필요합니다 |

344| `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` | MCP 도구 호출의 유휴 타임아웃(밀리초)입니다. stdio, HTTP, SSE, WebSocket 또는 [claude.ai 커넥터](/docs/ko/mcp#use-mcp-servers-from-claude-ai) MCP 서버가 이 시간 동안 응답이나 진행 알림을 보내지 않으면, 전체 `MCP_TOOL_TIMEOUT`을 기다리는 대신 도구 호출이 오류와 함께 중단됩니다. 네트워크 서버의 300000(5분), stdio 서버의 1800000(30분)이라는 전송 방식별 기본값을 재정의합니다. 유휴 검사를 비활성화하려면 `0`으로 설정합니다. 1000 미만의 값은 1초로 올라가며, 값은 유효 `MCP_TOOL_TIMEOUT`으로 제한됩니다. `.mcp.json`에서 서버별 `timeout`이 1000 이상이면 해당 서버의 유휴 시간이 최소 `timeout` 값으로 올라갑니다. IDE 서버나 SDK 인프로세스 서버에는 적용되지 않습니다. Claude Code v2.1.187 이상이 필요합니다. v2.1.203 이전에는 stdio 서버가 유휴 타임아웃에서 제외되었습니다 |344| `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` | MCP 도구 호출의 유휴 타임아웃(밀리초)입니다. stdio, HTTP, SSE, WebSocket 또는 [claude.ai 커넥터](/docs/ko/mcp#use-mcp-servers-from-claude-ai) MCP 서버가 이 시간 동안 응답이나 진행 알림을 보내지 않으면, 전체 `MCP_TOOL_TIMEOUT`을 기다리는 대신 도구 호출이 오류와 함께 중단됩니다. 네트워크 서버의 300000(5분), stdio 서버의 1800000(30분)이라는 전송 방식별 기본값을 재정의합니다. 유휴 검사를 비활성화하려면 `0`으로 설정합니다. 1000 미만의 값은 1초로 올라가며, 값은 유효 `MCP_TOOL_TIMEOUT`으로 제한됩니다. `.mcp.json`에서 서버별 `timeout`이 1000 이상이면 해당 서버의 유휴 시간이 최소 `timeout` 값으로 올라갑니다. IDE 서버나 SDK 인프로세스 서버에는 적용되지 않습니다. Claude Code v2.1.187 이상이 필요합니다. v2.1.203 이전에는 stdio 서버가 유휴 타임아웃에서 제외되었습니다 |

345| `CLAUDE_CODE_MESSAGING_SOCKET` | 사용자가 아닌 Claude Code가 설정합니다. [inbox 소켓](/docs/ko/cross-session-messaging#the-sessions-inbox-socket)을 바인딩하는 세션에서 Claude Code는 소켓을 바인딩할 때 해당 소켓의 경로를 훅과 Bash 명령에 export합니다. 메시징이 켜진 상태로 시작하는 세션에서는 Claude Code가 훅이 실행되기 전에 소켓을 바인딩합니다. 머신의 다른 세션은 이 경로로 메시지를 전달합니다. 각 세션은 부모로부터 상속된 소켓이 아닌 자체 소켓을 export하며, 이 소켓으로 도착하는 메시지는 세션의 [인바운드 제어](/docs/ko/cross-session-messaging#control-inbound-messages)를 거칩니다. 설정의 `env` 블록으로는 설정할 수 없습니다. Claude Code v2.1.224 이상이 필요합니다 |345| `CLAUDE_CODE_MESSAGING_SOCKET` | 사용자가 아닌 Claude Code가 설정합니다. [inbox 소켓](/docs/ko/cross-session-messaging#the-sessions-inbox-socket)을 바인딩하는 세션에서 Claude Code는 소켓을 바인딩할 때 해당 소켓의 경로를 훅과 Bash 명령에 export합니다. 메시징이 켜진 상태로 시작하는 세션에서는 Claude Code가 훅이 실행되기 전에 소켓을 바인딩합니다. 머신의 다른 세션은 이 경로로 메시지를 전달합니다. 각 세션은 부모로부터 상속된 소켓이 아닌 자체 소켓을 export하며, 이 소켓으로 도착하는 메시지는 세션의 [인바운드 제어](/docs/ko/cross-session-messaging#control-inbound-messages)를 거칩니다. 설정의 `env` 블록으로는 설정할 수 없습니다. Claude Code v2.1.224 이상이 필요합니다 |

346| `CLAUDE_CODE_MESSAGING_TOKEN` | 사용자가 아닌 Claude Code가 설정합니다. [inbox 소켓](/docs/ko/cross-session-messaging#the-sessions-inbox-socket)을 바인딩하는 세션에서 Claude Code는 `CLAUDE_CODE_MESSAGING_SOCKET`과 함께 이 세션별 토큰을 훅과 Bash 명령에 export합니다. 소켓에 게시하는 스크립트는 첫 줄로 `{"type":"auth","token":"<token>"}`를 보내 해당 세션에 속함을 증명할 수 있습니다. 네이티브 Windows에서는 Claude Code가 이 줄을 요구하며, 유효한 줄로 시작하지 않는 연결은 모두 닫습니다. Claude Code가 토큰을 확인하는 시점은 [자체 자식 규칙](/docs/ko/cross-session-messaging#the-sessions-inbox-socket)에 설명되어 있습니다. 각 세션은 부모 세션에서 상속된 토큰이 아닌 자체 토큰을 export합니다. 설정의 `env` 블록으로는 설정할 수 없습니다. Claude Code v2.1.228 이상이 필요합니다 |346| `CLAUDE_CODE_MESSAGING_TOKEN` | 사용자가 아닌 Claude Code가 설정합니다. [inbox 소켓](/docs/ko/cross-session-messaging#the-sessions-inbox-socket)을 바인딩하는 세션에서 Claude Code는 `CLAUDE_CODE_MESSAGING_SOCKET`과 함께 이 세션별 토큰을 훅과 Bash 명령에 export합니다. 소켓에 게시하는 스크립트는 첫 줄로 `{"type":"auth","token":"<token>"}`를 보내 해당 세션에 속함을 증명할 수 있습니다. 네이티브 Windows에서는 Claude Code가 이 줄을 요구하며, 유효한 줄로 시작하지 않는 연결은 모두 닫습니다. Claude Code가 토큰을 확인하는 시점은 [자체 자식 규칙](/docs/ko/cross-session-messaging#the-sessions-inbox-socket)에 설명되어 있습니다. 각 세션은 부모 세션에서 상속된 토큰이 아닌 자체 토큰을 export합니다. 설정의 `env` 블록으로는 설정할 수 없습니다. Claude Code v2.1.228 이상이 필요합니다 |


443| `CLAUDE_ENABLE_BYTE_WATCHDOG` | 바이트 수준 스트리밍 유휴 워치독을 강제로 활성화하려면 `1`로, 강제로 비활성화하려면 `0`으로 설정합니다. `0`은 해당 기한이 실행되는 연결에서 [첫 바이트 기한](/docs/ko/network-config#streaming-idle-watchdogs)도 끕니다. 설정하지 않으면 직접 Anthropic API 및 [Claude Platform on AWS](/docs/ko/claude-platform-on-aws) 연결과, `ANTHROPIC_BASE_URL` 또는 `ANTHROPIC_AWS_BASE_URL`을 통해 연결되는 [게이트웨이](/docs/ko/gateways) 연결의 스트리밍 응답에 대해 워치독이 기본적으로 활성화됩니다. v2.1.222 이전에는 해당 게이트웨이 연결에서 실행되지 않았기 때문에, keep-alive 핑이 도착하는 중에도 이벤트 수준 워치독이 정체를 보고할 수 있었습니다. 타임아웃과 타이머 간 상호작용에 대해서는 [스트리밍 유휴 워치독](/docs/ko/network-config#streaming-idle-watchdogs)을 참조하세요 |443| `CLAUDE_ENABLE_BYTE_WATCHDOG` | 바이트 수준 스트리밍 유휴 워치독을 강제로 활성화하려면 `1`로, 강제로 비활성화하려면 `0`으로 설정합니다. `0`은 해당 기한이 실행되는 연결에서 [첫 바이트 기한](/docs/ko/network-config#streaming-idle-watchdogs)도 끕니다. 설정하지 않으면 직접 Anthropic API 및 [Claude Platform on AWS](/docs/ko/claude-platform-on-aws) 연결과, `ANTHROPIC_BASE_URL` 또는 `ANTHROPIC_AWS_BASE_URL`을 통해 연결되는 [게이트웨이](/docs/ko/gateways) 연결의 스트리밍 응답에 대해 워치독이 기본적으로 활성화됩니다. v2.1.222 이전에는 해당 게이트웨이 연결에서 실행되지 않았기 때문에, keep-alive 핑이 도착하는 중에도 이벤트 수준 워치독이 정체를 보고할 수 있었습니다. 타임아웃과 타이머 간 상호작용에 대해서는 [스트리밍 유휴 워치독](/docs/ko/network-config#streaming-idle-watchdogs)을 참조하세요 |

444| `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK` | Amazon Bedrock `vnd.amazon.eventstream` 응답에서 바이트 수준 스트리밍 유휴 워치독을 활성화하려면 `1`로 설정합니다. 이렇게 하면 Bedrock 스트리밍 요청에서 [첫 바이트 기한](/docs/ko/network-config#streaming-idle-watchdogs)도 활성화됩니다. 기본적으로 꺼져 있습니다. 타임아웃은 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`로 구성합니다 |444| `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK` | Amazon Bedrock `vnd.amazon.eventstream` 응답에서 바이트 수준 스트리밍 유휴 워치독을 활성화하려면 `1`로 설정합니다. 이렇게 하면 Bedrock 스트리밍 요청에서 [첫 바이트 기한](/docs/ko/network-config#streaming-idle-watchdogs)도 활성화됩니다. 기본적으로 꺼져 있습니다. 타임아웃은 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`로 구성합니다 |

445| `CLAUDE_ENABLE_STREAM_WATCHDOG` | 이벤트 수준 스트리밍 유휴 워치독을 강제로 비활성화하려면 `0`으로, 강제로 활성화하려면 `1`로 설정합니다. 설정하지 않으면 모든 공급자에서 워치독이 기본적으로 켜져 있습니다. v2.1.196 이전에는 설정하지 않았을 때의 기본값이 직접 Anthropic API에서는 서버에서 제어되었고 다른 공급자에서는 꺼져 있었습니다. 타임아웃은 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`로 구성합니다. 이 워치독과 함께 실행되는 다른 정체 타이머에 대해서는 [스트리밍 유휴 워치독](/docs/ko/network-config#streaming-idle-watchdogs)을 참조하세요 |445| `CLAUDE_ENABLE_STREAM_WATCHDOG` | 이벤트 수준 스트리밍 유휴 워치독을 강제로 비활성화하려면 `0`으로, 강제로 활성화하려면 `1`로 설정합니다. 설정하지 않으면 모든 공급자에서 워치독이 기본적으로 켜져 있습니다. v2.1.196 이전에는 설정하지 않았을 때의 기본값이 직접 Anthropic API에서는 서버에서 제어되었고 다른 공급자에서는 꺼져 있었습니다. 타임아웃은 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`로 구성합니다. 이 워치독과 함께 실행되는 다른 정체 타이머에 대해서는 [스트리밍 유휴 워치독](/docs/ko/network-config#streaming-idle-watchdogs)을 참조하세요 |

446| `CLAUDE_ENV_FILE` | Claude Code가 각 Bash 명령 전에 동일한 셸 프로세스에서 내용을 실행하는 셸 스크립트의 경로로, 파일의 export가 명령에 표시됩니다. virtualenv 또는 conda 활성화를 명령 간에 유지하는 데 사용합니다. [SessionStart](/docs/ko/hooks#persist-environment-variables), [Setup](/docs/ko/hooks#setup), [CwdChanged](/docs/ko/hooks#cwdchanged), [FileChanged](/docs/ko/hooks#filechanged) 훅에 의해 동적으로 채워지기도 합니다 |446| `CLAUDE_ENV_FILE` | Claude Code가 각 Bash 명령 전에 같은 셸 프로세스에서 내용을 실행하는 셸 스크립트의 경로로, 파일의 export가 명령에 표시됩니다. 명령 간에 virtualenv 또는 conda 활성화를 유지하는 데 사용합니다. v2.1.296 이상에서는 [PowerShell 명령의 유지된 변수](/docs/ko/hooks#persisted-variables-in-powershell-commands)에 설명된 조건에 따라 PowerShell 명령도 해당 변수를 받습니다. [SessionStart](/docs/ko/hooks#persist-environment-variables), [Setup](/docs/ko/hooks#setup), [CwdChanged](/docs/ko/hooks#cwdchanged), [FileChanged](/docs/ko/hooks#filechanged) 훅에 의해서도 동적으로 채워집니다 |

447| `CLAUDE_JOB_DIR` | 각 [백그라운드 세션](/docs/ko/agent-view)에서 Claude Code가 해당 세션의 `~/.claude/jobs/<id>` 디렉터리로 설정합니다. 세션이 실행하는 셸 명령이 이를 상속합니다. 임시 파일은 [`$CLAUDE_JOB_DIR/tmp`](/docs/ko/agent-view#where-state-is-stored)에 작성합니다. 그곳에 대한 Claude의 `Write` 및 `Edit` 호출은 권한을 묻지 않으며, 세션이 삭제되면 디렉터리가 제거됩니다 |447| `CLAUDE_JOB_DIR` | 각 [백그라운드 세션](/docs/ko/agent-view)에서 Claude Code가 해당 세션의 `~/.claude/jobs/<id>` 디렉터리로 설정합니다. 세션이 실행하는 셸 명령이 이를 상속합니다. 임시 파일은 [`$CLAUDE_JOB_DIR/tmp`](/docs/ko/agent-view#where-state-is-stored)에 작성합니다. 그곳에 대한 Claude의 `Write` 및 `Edit` 호출은 권한을 묻지 않으며, 세션이 삭제되면 디렉터리가 제거됩니다 |

448| `CLAUDE_PID` | Claude Code가 생성하는 하위 프로세스(Bash 및 PowerShell 도구 명령과 훅 명령)에서 자신의 프로세스 ID로 설정합니다. Linux에서 Bash 도구의 셸 통합은 이를 사용하여 Claude Code 프로세스 자체와 일치하는 `pkill` 패턴을 거부합니다. [오류 참조](/docs/ko/errors#pkill-pattern-matches-the-claude-code-process)를 참조하세요. 자체 스크립트에서 이 값을 읽어 상위 Claude Code 프로세스를 의도적으로 식별하거나 신호를 보낼 수 있습니다. Claude Code v2.1.214 이상이 필요합니다 |448| `CLAUDE_PID` | Claude Code가 생성하는 하위 프로세스(Bash 및 PowerShell 도구 명령과 훅 명령)에서 자신의 프로세스 ID로 설정합니다. Linux에서 Bash 도구의 셸 통합은 이를 사용하여 Claude Code 프로세스 자체와 일치하는 `pkill` 패턴을 거부합니다. [오류 참조](/docs/ko/errors#pkill-pattern-matches-the-claude-code-process)를 참조하세요. 자체 스크립트에서 이 값을 읽어 상위 Claude Code 프로세스를 의도적으로 식별하거나 신호를 보낼 수 있습니다. Claude Code v2.1.214 이상이 필요합니다 |

449| `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` | 명시적인 이름이 제공되지 않을 때 자동 생성되는 [Remote Control](/docs/ko/remote-control) 세션 이름의 접두사입니다. 기본값은 머신의 호스트 이름이며, `myhost-graceful-unicorn` 같은 이름이 생성됩니다. `--remote-control-session-name-prefix` CLI 플래그는 단일 호출에 대해 동일한 값을 설정합니다 |449| `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` | 명시적인 이름이 제공되지 않을 때 자동 생성되는 [Remote Control](/docs/ko/remote-control) 세션 이름의 접두사입니다. 기본값은 머신의 호스트 이름이며, `myhost-graceful-unicorn` 같은 이름이 생성됩니다. `--remote-control-session-name-prefix` CLI 플래그는 단일 호출에 대해 동일한 값을 설정합니다 |

errors.md +75 −12

Details

37| `Connection lost while your computer was asleep` | [자동 재시도](#automatic-retries) |37| `Connection lost while your computer was asleep` | [자동 재시도](#automatic-retries) |

38| `<model> is temporarily unavailable, so auto mode cannot determine the safety of...` | [서버 오류](#auto-mode-cannot-determine-the-safety-of-an-action) |38| `<model> is temporarily unavailable, so auto mode cannot determine the safety of...` | [서버 오류](#auto-mode-cannot-determine-the-safety-of-an-action) |

39| `Auto mode could not evaluate this action and is blocking it for safety` | [서버 오류](#auto-mode-cannot-determine-the-safety-of-an-action) |39| `Auto mode could not evaluate this action and is blocking it for safety` | [서버 오류](#auto-mode-cannot-determine-the-safety-of-an-action) |

40| `Not run · auto mode's check had no usable answer` | [서버 오류](#auto-mode-cannot-determine-the-safety-of-an-action) |

40| `Auto mode classifier transcript exceeded context window` | [서버 오류](#auto-mode-cannot-determine-the-safety-of-an-action) |41| `Auto mode classifier transcript exceeded context window` | [서버 오류](#auto-mode-cannot-determine-the-safety-of-an-action) |

41| `Agent aborted: auto mode classifier request refused by the safety safeguard` | [서버 오류](#auto-mode-cannot-determine-the-safety-of-an-action) |42| `Agent aborted: auto mode classifier request refused by the safety safeguard` | [서버 오류](#auto-mode-cannot-determine-the-safety-of-an-action) |

42| `The server-side auto mode classifier gave no verdict` | [서버 오류](#the-server-returned-no-safety-verdict) |43| `The server-side auto mode classifier gave no verdict` | [서버 오류](#the-server-returned-no-safety-verdict) |


247| `Windows reported an error (EBADF) when Claude Code read this session's transcript file` | [명령줄 오류](#windows-reported-an-error-ebadf) |248| `Windows reported an error (EBADF) when Claude Code read this session's transcript file` | [명령줄 오류](#windows-reported-an-error-ebadf) |

248| `Cannot switch renderers in this session` | [명령줄 오류](#cannot-switch-renderers-in-this-session) |249| `Cannot switch renderers in this session` | [명령줄 오류](#cannot-switch-renderers-in-this-session) |

249| `Cannot switch renderers while work is running in the background` | [명령줄 오류](#cannot-switch-renderers-in-this-session) |250| `Cannot switch renderers while work is running in the background` | [명령줄 오류](#cannot-switch-renderers-in-this-session) |

251| `Claude Code couldn't restart` | [명령줄 오류](#claude-code-couldnt-restart) |

250| `Couldn't open Claude Desktop` | [명령줄 오류](#couldnt-open-claude-desktop) |252| `Couldn't open Claude Desktop` | [명령줄 오류](#couldnt-open-claude-desktop) |

251| `Failed to open Claude Desktop. Please try opening it manually.` | [명령줄 오류](#couldnt-open-claude-desktop) |253| `Failed to open Claude Desktop. Please try opening it manually.` | [명령줄 오류](#couldnt-open-claude-desktop) |

252| `Couldn't read your Zed keymap` / `Couldn't back up your Zed keymap` / `Couldn't update your Zed keymap` | [명령줄 오류](#terminal-setup-left-your-zed-keymap-unchanged) |254| `Couldn't read your Zed keymap` / `Couldn't back up your Zed keymap` / `Couldn't update your Zed keymap` | [명령줄 오류](#terminal-setup-left-your-zed-keymap-unchanged) |


262| `Marketplace "<name>" is already added from a different source` | [플러그인 오류](#marketplace-is-already-added-from-a-different-source) |264| `Marketplace "<name>" is already added from a different source` | [플러그인 오류](#marketplace-is-already-added-from-a-different-source) |

263| `"<name>" is another spelling of "<reserved>", a reserved marketplace name` | [플러그인 오류](#marketplace-name-is-another-spelling-of-a-reserved-name) |265| `"<name>" is another spelling of "<reserved>", a reserved marketplace name` | [플러그인 오류](#marketplace-name-is-another-spelling-of-a-reserved-name) |

264| `Cannot add marketplace "<name>": Claude Code cannot install plugins from a marketplace with this name` | [플러그인 문제 해결](/docs/ko/plugins/troubleshooting#cannot-install-plugins-from-a-marketplace-with-this-name) |266| `Cannot add marketplace "<name>": Claude Code cannot install plugins from a marketplace with this name` | [플러그인 문제 해결](/docs/ko/plugins/troubleshooting#cannot-install-plugins-from-a-marketplace-with-this-name) |

267| `Cannot add marketplace "<name>": Claude Code reserves this name and cannot register a marketplace under it` | [플러그인 문제 해결](/docs/ko/plugins/troubleshooting#claude-code-reserves-this-name) |

265| `Marketplace "<name>" is added but ignored` | [플러그인 문제 해결](/docs/ko/plugins/troubleshooting#marketplace-is-added-but-ignored) |268| `Marketplace "<name>" is added but ignored` | [플러그인 문제 해결](/docs/ko/plugins/troubleshooting#marketplace-is-added-but-ignored) |

266| `Marketplace "<name>" is registered but was refused (see the debug log)` | [플러그인 문제 해결](/docs/ko/plugins/troubleshooting#marketplace-is-added-but-ignored) |269| `Marketplace "<name>" is registered but was refused (see the debug log)` | [플러그인 문제 해결](/docs/ko/plugins/troubleshooting#marketplace-is-added-but-ignored) |

267| `references ${user_config.*} in a shell-form command` | [플러그인 오류](#plugin-command-references-user-config) |270| `references ${user_config.*} in a shell-form command` | [플러그인 오류](#plugin-command-references-user-config) |


308| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` | [도구 오류](#disk-quota-or-temp-filesystem-is-full) |311| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` | [도구 오류](#disk-quota-or-temp-filesystem-is-full) |

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

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

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

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

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

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


334| `Session isn't responding` / `Press enter again to restart this session — it isn't responding` | [백그라운드 세션 오류](#session-isnt-responding) |338| `Session isn't responding` / `Press enter again to restart this session — it isn't responding` | [백그라운드 세션 오류](#session-isnt-responding) |

335| `Session <id> was stopped while the respawn was in flight` | [백그라운드 세션 오류](#session-was-stopped-while-the-respawn-was-in-flight) |339| `Session <id> was stopped while the respawn was in flight` | [백그라운드 세션 오류](#session-was-stopped-while-the-respawn-was-in-flight) |

336| `This session was running agent '<name>', which is no longer available` | [백그라운드 세션 오류](#session-agent-no-longer-available) |340| `This session was running agent '<name>', which is no longer available` | [백그라운드 세션 오류](#session-agent-no-longer-available) |

341| `This session restarted <time> after its next /loop wakeup was due, so that wakeup will not fire` | [백그라운드 세션 오류](#restarted-after-its-next-loop-wakeup-was-due) |

337| `CLAUDE_CODE_PROCESS_WRAPPER: launcher ...` | [백그라운드 세션 오류](#claude_code_process_wrapper-launcher-errors) |342| `CLAUDE_CODE_PROCESS_WRAPPER: launcher ...` | [백그라운드 세션 오류](#claude_code_process_wrapper-launcher-errors) |

338| `EUNKNOWN: unknown error, uv_spawn` | [백그라운드 세션 오류](#eunknown-when-starting-a-background-session) |343| `EUNKNOWN: unknown error, uv_spawn` | [백그라운드 세션 오류](#eunknown-when-starting-a-background-session) |

339| `EACCES: permission denied, posix_spawn` | [백그라운드 세션 오류](#eacces-when-starting-a-background-session) |344| `EACCES: permission denied, posix_spawn` | [백그라운드 세션 오류](#eacces-when-starting-a-background-session) |


439| :- | :- | :- |444| :- | :- | :- |

440| [`CLAUDE_CODE_MAX_RETRIES`](/docs/ko/env-vars) | 10 | 재시도 횟수입니다. v2.1.186부터 최대 15로 제한됩니다. v2.1.199부터는 `CLAUDE_CODE_RETRY_WATCHDOG`이 기본값을 높이고 상한을 제거합니다. 스크립트에서 실패를 더 빨리 확인하려면 값을 낮추세요. |445| [`CLAUDE_CODE_MAX_RETRIES`](/docs/ko/env-vars) | 10 | 재시도 횟수입니다. v2.1.186부터 최대 15로 제한됩니다. v2.1.199부터는 `CLAUDE_CODE_RETRY_WATCHDOG`이 기본값을 높이고 상한을 제거합니다. 스크립트에서 실패를 더 빨리 확인하려면 값을 낮추세요. |

441| [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/ko/env-vars) | 설정 안 됨 | CI 작업과 같은 무인 세션에서 `1`로 설정하면 `CLAUDE_CODE_MAX_RETRIES`회 시도 후 실패하는 대신 `429` 및 `529` 용량 오류를 무기한 재시도합니다. 표준 속도 요청이 지출 한도나 소진된 사용량 크레딧을 보고하는 `429`를 받으면, 일정에 따라 재설정되는 [게이트웨이 지출 한도](#spend-limit-reached)에서 온 것이라도 Claude Code는 즉시 실패합니다. v2.1.239 이전에는 워치독이 이를 무기한 재시도했습니다. 빠른 모드 요청에 대해서는 [속도 제한 처리](/docs/ko/fast-mode#handle-rate-limits)를 참조하세요. v2.1.199 이상에서는 서버 오류, 시간 초과, 끊어진 연결 등 다른 일시적인 오류의 기본 재시도 횟수도 약 3시간의 백오프에 해당하는 300으로 높이고, `CLAUDE_CODE_MAX_RETRIES`를 명시적으로 설정한 경우 15의 상한을 제거합니다. |446| [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/ko/env-vars) | 설정 안 됨 | CI 작업과 같은 무인 세션에서 `1`로 설정하면 `CLAUDE_CODE_MAX_RETRIES`회 시도 후 실패하는 대신 `429` 및 `529` 용량 오류를 무기한 재시도합니다. 표준 속도 요청이 지출 한도나 소진된 사용량 크레딧을 보고하는 `429`를 받으면, 일정에 따라 재설정되는 [게이트웨이 지출 한도](#spend-limit-reached)에서 온 것이라도 Claude Code는 즉시 실패합니다. v2.1.239 이전에는 워치독이 이를 무기한 재시도했습니다. 빠른 모드 요청에 대해서는 [속도 제한 처리](/docs/ko/fast-mode#handle-rate-limits)를 참조하세요. v2.1.199 이상에서는 서버 오류, 시간 초과, 끊어진 연결 등 다른 일시적인 오류의 기본 재시도 횟수도 약 3시간의 백오프에 해당하는 300으로 높이고, `CLAUDE_CODE_MAX_RETRIES`를 명시적으로 설정한 경우 15의 상한을 제거합니다. |

447| [`CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS`](/docs/ko/env-vars) | 설정 안 됨 | `CLAUDE_CODE_RETRY_WATCHDOG`이 설정된 경우 각 API 요청이 `429` 및 `529` 오류가 해소되기를 기다리는 최대 시간(밀리초)입니다. 설정하지 않으면 대기 시간에 제한이 없습니다. Claude Code v2.1.295 이상이 필요합니다. |

442| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](/docs/ko/env-vars) | 500 | API가 `529` 과부하 오류로 거부한 요청의 재시도 간 백오프 시작 지연 시간(밀리초)입니다. API가 용량 한계에 도달했을 때 재시도를 더 긴 기간에 걸쳐 분산하려면 최대 32000까지 값을 높이세요. `CLAUDE_CODE_RETRY_WATCHDOG`이 `1`로 설정되어 있거나 거부된 요청이 [빠른 모드](/docs/ko/fast-mode#handle-rate-limits)로 전송된 경우에는 효과가 없습니다. Claude Code v2.1.292 이상이 필요합니다. |448| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](/docs/ko/env-vars) | 500 | API가 `529` 과부하 오류로 거부한 요청의 재시도 간 백오프 시작 지연 시간(밀리초)입니다. API가 용량 한계에 도달했을 때 재시도를 더 긴 기간에 걸쳐 분산하려면 최대 32000까지 값을 높이세요. `CLAUDE_CODE_RETRY_WATCHDOG`이 `1`로 설정되어 있거나 거부된 요청이 [빠른 모드](/docs/ko/fast-mode#handle-rate-limits)로 전송된 경우에는 효과가 없습니다. Claude Code v2.1.292 이상이 필요합니다. |

443| [`API_TIMEOUT_MS`](/docs/ko/env-vars) | 600000 | 요청당 타임아웃(밀리초)입니다. 느린 네트워크나 프록시의 경우 값을 높이세요. [No response from API](#no-response-from-api)에 설명된 대로, Claude Code가 응답 헤더를 기다리는 시간의 상한으로도 사용됩니다. |449| [`API_TIMEOUT_MS`](/docs/ko/env-vars) | 600000 | 요청당 타임아웃(밀리초)입니다. 느린 네트워크나 프록시의 경우 값을 높이세요. [No response from API](#no-response-from-api)에 설명된 대로, Claude Code가 응답 헤더를 기다리는 시간의 상한으로도 사용됩니다. |

444| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/ko/env-vars) | 설정 안 됨 | 시간 초과된 [비스트리밍 요청](#streaming-response-ended-before-any-complete-data-was-received)을 다시 보내는 횟수의 한도입니다. 한도에 도달하면 요청이 실패합니다. 생성하는 데 타임아웃보다 오래 걸리는 Claude의 응답은 다시 보낼 때마다 다시 시간 초과되므로, 더 빨리 실패하려면 `0`과 같은 낮은 값으로 설정하세요. 각 비스트리밍 시도는 로컬 세션에서 300초 후, 또는 `API_TIMEOUT_MS`를 양수 값으로 설정한 경우 해당 시간 후에 시간 초과됩니다. Claude Code v2.1.285 이상이 필요합니다. |450| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/ko/env-vars) | 설정 안 됨 | 시간 초과된 [비스트리밍 요청](#streaming-response-ended-before-any-complete-data-was-received)을 다시 보내는 횟수의 한도입니다. 한도에 도달하면 요청이 실패합니다. 생성하는 데 타임아웃보다 오래 걸리는 Claude의 응답은 다시 보낼 때마다 다시 시간 초과되므로, 더 빨리 실패하려면 `0`과 같은 낮은 값으로 설정하세요. 각 비스트리밍 시도는 로컬 세션에서 300초 후, 또는 `API_TIMEOUT_MS`를 양수 값으로 설정한 경우 해당 시간 후에 시간 초과됩니다. Claude Code v2.1.285 이상이 필요합니다. |


596<model> is temporarily unavailable, so auto mode cannot determine the safety of <tool> right now. Wait a moment and then try this action again.602<model> is temporarily unavailable, so auto mode cannot determine the safety of <tool> right now. Wait a moment and then try this action again.

597```603```

598 604 

605대화형 세션에서는 이 메시지 대신 도구 호출 아래에 흐린 `Not run · auto mode's check had no usable answer` 행이 나타납니다. `Ctrl+O`를 눌러 [트랜스크립트 뷰어](/docs/ko/interactive-mode#transcript-viewer)에서 메시지를 확인합니다. [서버가 안전 판정을 반환하지 않음](#the-server-returned-no-safety-verdict) 아래의 거부도 동일한 행을 표시합니다. v2.1.296 이전에는 메시지가 호출 아래에 빨간색 오류로 나타났습니다.

606 

599Claude Code가 실패 범주를 결정할 수 있을 때 `temporarily unavailable` 뒤의 괄호에 범주를 명시합니다. 예를 들어 `<model> is temporarily unavailable (rate-limited), so auto mode cannot determine the safety of <tool> right now`입니다. 범주는 `(rate-limited)`, `(overloaded)`, `(server error)`, `(timed out)` 및 `(connection failed)`입니다. `(timed out)` 또는 `(connection failed)`가 반복되면 연결을 확인하세요. [API에 연결할 수 없음](#unable-to-connect-to-api)을 참조하세요. v2.1.229 이전에는 메시지가 범주를 명시하지 않았고 `Wait briefly and then try this action again`으로 읽혔습니다.607Claude Code가 실패 범주를 결정할 수 있을 때 `temporarily unavailable` 뒤의 괄호에 범주를 명시합니다. 예를 들어 `<model> is temporarily unavailable (rate-limited), so auto mode cannot determine the safety of <tool> right now`입니다. 범주는 `(rate-limited)`, `(overloaded)`, `(server error)`, `(timed out)` 및 `(connection failed)`입니다. `(timed out)` 또는 `(connection failed)`가 반복되면 연결을 확인하세요. [API에 연결할 수 없음](#unable-to-connect-to-api)을 참조하세요. v2.1.229 이전에는 메시지가 범주를 명시하지 않았고 `Wait briefly and then try this action again`으로 읽혔습니다.

600 608 

601맞는 범주가 없으면 메시지는 괄호에 범주 없이 나타납니다. 둘 이상의 실패가 해당 형식을 생성합니다. [Amazon Bedrock](/docs/ko/amazon-bedrock)에서, [Mantle 엔드포인트](/docs/ko/amazon-bedrock#use-the-mantle-endpoint) 포함, AWS 계정이 메시지에 명시된 모델을 호출할 수 없을 때도 나타나며, 계정에 모델에 대한 액세스 권한이 부여될 때까지 모든 재시도에서 해당 실패가 반복됩니다.609맞는 범주가 없으면 메시지는 괄호에 범주 없이 나타납니다. 둘 이상의 실패가 해당 형식을 생성합니다. [Amazon Bedrock](/docs/ko/amazon-bedrock)에서, [Mantle 엔드포인트](/docs/ko/amazon-bedrock#use-the-mantle-endpoint) 포함, AWS 계정이 메시지에 명시된 모델을 호출할 수 없을 때도 나타나며, 계정에 모델에 대한 액세스 권한이 부여될 때까지 모든 재시도에서 해당 실패가 반복됩니다.


1900 1908 

1901Claude Code는 [관리형 설정 파일, MDM 정책 또는 정책 도우미](/docs/ko/managed-settings)가 [`forceLoginMethod`](/docs/ko/settings-reference#forceloginmethod)를 `"gateway"`로 설정하거나 `forceLoginMethod` 없이 [`forceLoginGatewayUrl`](/docs/ko/settings-reference#forcelogingatewayurl)을 설정할 때 이 확인을 건너뜁니다. 두 구성 중 하나를 사용하면 Claude Code는 Anthropic 로그인 방법이 아닌 **클라우드 게이트웨이** 화면에서 로그인 단계를 엽니다. Claude Code는 또한 머신에 관리형 설정 소스가 존재하지만 읽을 수 없을 때 확인을 건너뜁니다. 해당 소스가 게이트웨이 구성을 보유할 수 있기 때문입니다. v2.1.247 이전에는 Claude Code가 이 구성에서도 확인을 실행했고, Anthropic의 엔드포인트에 도달할 수 없을 때 이 오류로 종료했습니다.1909Claude Code는 [관리형 설정 파일, MDM 정책 또는 정책 도우미](/docs/ko/managed-settings)가 [`forceLoginMethod`](/docs/ko/settings-reference#forceloginmethod)를 `"gateway"`로 설정하거나 `forceLoginMethod` 없이 [`forceLoginGatewayUrl`](/docs/ko/settings-reference#forcelogingatewayurl)을 설정할 때 이 확인을 건너뜁니다. 두 구성 중 하나를 사용하면 Claude Code는 Anthropic 로그인 방법이 아닌 **클라우드 게이트웨이** 화면에서 로그인 단계를 엽니다. Claude Code는 또한 머신에 관리형 설정 소스가 존재하지만 읽을 수 없을 때 확인을 건너뜁니다. 해당 소스가 게이트웨이 구성을 보유할 수 있기 때문입니다. v2.1.247 이전에는 Claude Code가 이 구성에서도 확인을 실행했고, Anthropic의 엔드포인트에 도달할 수 없을 때 이 오류로 종료했습니다.

1902 1910 

1911Claude Code는 관리형 설정이 없는 머신에서 사용자 자신의 `~/.claude/settings.json`이 `forceLoginMethod` 및 `forceLoginGatewayUrl`로 [게이트웨이를 지정](/docs/ko/claude-apps-gateway#set-the-gateway-url-in-user-settings)하는 경우에도 확인을 건너뜁니다. v2.1.295 이전에는 Claude Code가 이 경우에도 확인을 실행했습니다.

1912 

1903**수행할 작업:**1913**수행할 작업:**

1904 1914 

1905* 메시지가 프록시 변수의 이름을 지정하는 경우, 해당 값이 올바른 프록시를 가리키는지 확인하고 네트워크 팀에 메시지의 호스트에 대한 HTTPS 연결을 허용하도록 요청합니다. [네트워크 구성](/docs/ko/network-config)을 참조합니다.1915* 메시지가 프록시 변수의 이름을 지정하는 경우, 해당 값이 올바른 프록시를 가리키는지 확인하고 네트워크 팀에 메시지의 호스트에 대한 HTTPS 연결을 허용하도록 요청합니다. [네트워크 구성](/docs/ko/network-config)을 참조합니다.


3395 origin/HEAD가 없으면 /security-review가 실패함3405 origin/HEAD가 없으면 /security-review가 실패함

3396</h3>3406</h3>

3397 3407 

3398[`/security-review`](/docs/ko/commands#all-commands)는 브랜치를 `origin/HEAD`와 비교한 diff로 리뷰 컨텍스트를 구성합니다. `origin/HEAD`는 `origin` 원격의 기본 브랜치가 무엇인지 기록하는 로컬 ref입니다. 이 ref가 없으면 diff를 수집하는 git 명령이 실패하고 리뷰가 시작되기 전에 중단됩니다.3408[`/security-review`](/docs/ko/commands#all-commands)는 `origin` 원격의 기본 브랜치를 기록하는 로컬 ref인 `origin/HEAD`와 현재 브랜치를 비교한 diff로 리뷰 컨텍스트를 구성합니다. 해당 ref가 없으면 diff를 수집하는 git 명령이 실패하고 리뷰가 시작되기 전에 중단됩니다.

3399 3409 

3400```text theme={null}3410```text theme={null}

3401Error: Shell command failed for pattern "!`git diff --name-only origin/HEAD...`": [stderr]3411Error: Shell command failed for pattern "!`git diff --name-only origin/HEAD...`": [stderr]


3412 3422 

3413Claude Code는 [동적 컨텍스트를 주입하는](/docs/ko/skills#when-an-injected-command-fails) 모든 스킬에 대해 같은 오류를 표시하며, 주입된 명령이 실패하면 해당 스킬 호출이 중단됩니다. 명령이 실행되기도 전에 발생하는 두 가지 유사한 문자열이 있습니다:3423Claude Code는 [동적 컨텍스트를 주입하는](/docs/ko/skills#when-an-injected-command-fails) 모든 스킬에 대해 같은 오류를 표시하며, 주입된 명령이 실패하면 해당 스킬 호출이 중단됩니다. 명령이 실행되기도 전에 발생하는 두 가지 유사한 문자열이 있습니다:

3414 3424 

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

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

3417 3427 

3418**해결 방법:**3428**해결 방법:**

3419 3429 


3562 3572 

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

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

3565* **클론에 없는 기본 브랜치를 전달한 경우**: Claude Code는 비교하기 전에 origin에서 해당 브랜치를 fetch했습니다. 힌트는 ``<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 이전에는 fetch한 모든 기본 브랜치에 대해 힌트가 `git fetch --unshallow origin`을 제안했으며, 완전한 클론에서 이 명령은 `fatal: --unshallow on a complete repository does not make sense`로 실패합니다.3575* **클론에 없던 기본 브랜치를 전달한 경우**: Claude Code는 비교하기 전에 origin에서 해당 브랜치를 fetch했습니다. 힌트는 ``<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 이전에는 fetch한 모든 기본 브랜치에 대해 `git fetch --unshallow origin`을 제안했는데, 완전한 클론에서는 이 명령이 `fatal: --unshallow on a complete repository does not make sense`로 실패합니다.

3566 3576 

3567**해결 방법:**3577**해결 방법:**

3568 3578 


3756No conversation found with session ID: <session-id>3766No conversation found with session ID: <session-id>

3757```3767```

3758 3768 

3759Claude Code는 메시지를 표시한 후 코드 1로 종료됩니다. Claude Code는 ID를 찾기 위해 [현재 프로젝트를 먼저 검색한 다음 이 머신의 다른 모든 프로젝트를 검색](/docs/ko/sessions#resume-a-session)합니다. v2.1.223 이전에는 조회가 현재 프로젝트 디렉터리와 해당 git worktree에서 멈췄으므로, 세션이 마지막으로 작업한 디렉터리에서 재개해야 했습니다.3769Claude Code는 메시지를 표시한 후 코드 1로 종료합니다. Claude Code는 [현재 프로젝트를 먼저 검색한 다음 이 머신의 다른 모든 프로젝트](/docs/ko/sessions#where-the-session-picker-looks)에서 ID를 찾습니다. v2.1.223 이전에는 조회가 현재 프로젝트 디렉터리와 해당 git worktree에서 멈췄으므로, 세션이 마지막으로 작업한 디렉터리에서 재개해야 합니다.

3760 3770 

3761일반적인 원인:3771일반적인 원인:

3762 3772 


3816 3826 

3817* 해당 제한 없이 시작된 세션에서 `/tui fullscreen`을 실행하거나, 다시 전환하려면 `/tui default`를 실행합니다. Claude Code는 그곳에서 [`tui` 설정](/docs/ko/settings-reference#tui)을 저장합니다3827* 해당 제한 없이 시작된 세션에서 `/tui fullscreen`을 실행하거나, 다시 전환하려면 `/tui default`를 실행합니다. Claude Code는 그곳에서 [`tui` 설정](/docs/ko/settings-reference#tui)을 저장합니다

3818 3828 

3829<h3 id="claude-code-couldnt-restart">

3830 Claude Code couldn't restart

3831</h3>

3832 

3833Claude Code가 다시 시작하는 중이었습니다. 예를 들어 [`/tui`](/docs/ko/fullscreen#enable-fullscreen-rendering)를 실행한 후 전체 화면 렌더링으로 전환하거나 전체 화면 렌더링에서 전환하는 경우입니다. 세션은 닫았지만 새 프로세스를 시작할 수 없었으므로 이 메시지를 출력하고 상태 1로 종료했습니다.

3834 

3835```text theme={null}

3836Claude Code couldn't restart. Your conversation is saved. Start Claude Code again and run /resume to pick it up.

3837```

3838 

3839다시 시작할 때 다시 열 대화가 없었던 경우(예: 새 세션에서 `/tui`가 첫 입력이었던 경우) 메시지는 `Claude Code couldn't restart. Start Claude Code again.`입니다.

3840 

3841**해결 방법:**

3842 

3843* 같은 디렉터리에서 셸로 `claude`를 다시 실행합니다. 메시지에 대화가 저장되었다고 표시되었다면 새 세션에서 [`/resume`](/docs/ko/sessions#resume-a-session)을 실행하고 해당 대화를 선택합니다

3844* 다시 시작이 계속 실패하면 셸에서 [`claude --debug-file claude-debug.log`](/docs/ko/cli-reference#cli-flags)로 Claude Code를 시작합니다. 해당 세션에서 다시 시작이 실패하면, 시작한 디렉터리의 `claude-debug.log`에 운영 체제의 오류와 함께 `Failed to relaunch:` 줄이 기록됩니다. [문제를 보고](#report-an-error)할 때 해당 줄을 포함하십시오

3845 

3819<h3 id="couldnt-open-claude-desktop">3846<h3 id="couldnt-open-claude-desktop">

3820 Claude Desktop을 열 수 없음3847 Claude Desktop을 열 수 없음

3821</h3>3848</h3>


4593* 또는 [`CLAUDE_CODE_TMPDIR`](/docs/ko/env-vars)을 여유 공간이 있는 파일 시스템의 디렉터리로 설정하여 Claude Code를 다시 시작합니다.4620* 또는 [`CLAUDE_CODE_TMPDIR`](/docs/ko/env-vars)을 여유 공간이 있는 파일 시스템의 디렉터리로 설정하여 Claude Code를 다시 시작합니다.

4594* 그런 다음 Claude에 명령을 다시 실행하도록 합니다. 인쇄한 출력은 손실되었으며 잘리지 않았습니다.4621* 그런 다음 Claude에 명령을 다시 실행하도록 합니다. 인쇄한 출력은 손실되었으며 잘리지 않았습니다.

4595 4622 

4623<h3 id="file-is-not-valid-utf-8">

4624 File is not valid UTF-8

4625</h3>

4626 

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

4628 

4629```text wrap theme={null}

4630File 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.

4631```

4632 

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

4634 

4635**할 일:**

4636 

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

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

4639 

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

4641 

4596<h3 id="the-source-file-is-not-valid-utf-8-text">4642<h3 id="the-source-file-is-not-valid-utf-8-text">

4597 The source file is not valid UTF-8 text4643 The source file is not valid UTF-8 text

4598</h3>4644</h3>


4752 Worktree 격리 확인으로 인해 명령이 차단됨4798 Worktree 격리 확인으로 인해 명령이 차단됨

4753</h3>4799</h3>

4754 4800 

4755Claude가 [worktree에 격리된 세션](/docs/ko/worktrees#how-claude-code-enforces-isolation)에서 Bash 또는 Monitor 명령을 실행했으며, Claude Code가 다음 두 가지 이유 중 하나로 거부했습니다:4801Claude가 [worktree에 격리된 세션](/docs/ko/worktrees#how-claude-code-enforces-isolation)에서 Bash, [PowerShell](/docs/ko/tools-reference#powershell-tool) 또는 [Monitor](/docs/ko/tools-reference#monitor-tool) 명령을 실행했으며, Claude Code가 다음 이유 중 하나로 거부했습니다:

4756 4802 

4757* 명령이 git을 주 체크아웃으로 지정합니다.4803* 명령이 주 체크아웃 또는 다른 worktree에서 실행됩니다. 메시지는 작업 디렉터리가 `resolved to the shared checkout` 또는 `is in a different worktree`라고 표시합니다.

4758* Claude Code는 명령 텍스트에서 명령이 실행하는 모든 git이 worktree 내에 머물러 있는지 확인할 수 없습니다. git을 명시하지 않는 명령도 이 이유로 거부될 수 있습니다. `${!name}`과 같은 변수 간접 참조를 확장하거나 `${ command; }`와 같은 Bash 함수 치환을 실행하면 자체가 명령일 수 있는 런타임 값이 생성되기 때문입니다.4804* Bash 또는 Monitor 명령이 git을 주 체크아웃으로 지정합니다.

4805* Claude Code는 Bash 또는 Monitor 명령의 텍스트에서 명령이 실행하는 모든 git이 worktree 내에 머물러 있는지 확인할 수 없습니다. git을 명시하지 않는 명령도 이 이유로 거부될 수 있습니다. `${!name}`과 같은 변수 간접 참조를 확장하거나 `${ command; }`와 같은 Bash 함수 치환을 실행하면 자체가 명령일 수 있는 런타임 값이 생성되기 때문입니다.

4759 4806 

4760메시지의 중간은 확인할 수 없는 것을 명시합니다:4807메시지는 `is isolated in the worktree <path>, but this command` 뒤에 이유를 표시합니다. 예를 들어 Claude Code가 텍스트를 확인할 수 없는 명령의 경우 다음과 같습니다:

4761 4808 

4762```text wrap theme={null}4809```text wrap theme={null}

4763This session is isolated in the worktree /path/to/worktree, but this command evaluates ${!x@P} arithmetically inside a construct too complex to verify, which can run a command hidden in a variable's value. Refusing to run it — a worktree-isolated session's git operations must target its own worktree. Split it into plain, separate commands and run them from /path/to/worktree.4810This session is isolated in the worktree /path/to/worktree, but this command evaluates ${!x@P} arithmetically inside a construct too complex to verify, which can run a command hidden in a variable's value. Refusing to run it — a worktree-isolated session's git operations must target its own worktree. Split it into plain, separate commands and run them from /path/to/worktree.


4765 4812 

4766**할 일:**4813**할 일:**

4767 4814 

4768* 일반적으로 아무것도 하지 않습니다: Claude는 메시지를 읽고 최종 문장이 요청하는 방식으로 명령을 다시 작성합니다.4815* **git이 주 체크아웃을 가리키거나 명령 텍스트를 확인할 수 없는 경우**: 아무것도 하지 않습니다. Claude는 메시지를 읽고 최종 문장이 요청하는 방식으로 명령을 다시 작성합니다. 요청한 명령이 텍스트의 확장 때문에 계속 거부되면 플래그된 값을 문자 그대로 작성하고 worktree 내에서 git을 자체 일반 명령으로 실행합니다.

4769* 요청한 명령이 계속 거부되면 플래그된 값을 문자 그대로 철자합니다: 간접 참조 또는 치환을 해당 값으로 바꾸고 worktree 내에서 git을 자체 일반 명령으로 실행합니다.

4770* 의도적으로 주 체크아웃에 작용하려면 세션 외부의 터미널에서 명령을 직접 실행합니다.4816* 의도적으로 주 체크아웃에 작용하려면 세션 외부의 터미널에서 명령을 직접 실행합니다.

4771 4817 

4772<h3 id="this-session-has-no-saved-transcript">4818<h3 id="this-session-has-no-saved-transcript">


4946* 또는 존재하는 에이전트를 명시하는 `--agent <name>`으로 재개하여 대신 해당 에이전트로 세션을 실행합니다.4992* 또는 존재하는 에이전트를 명시하는 `--agent <name>`으로 재개하여 대신 해당 에이전트로 세션을 실행합니다.

4947* 에이전트가 프로젝트 범위이고 세션의 원래 디렉터리를 신뢰하지 않았으면 거기서 Claude Code를 한 번 실행하고 신뢰 대화 상자를 수락한 다음 다시 재개합니다.4993* 에이전트가 프로젝트 범위이고 세션의 원래 디렉터리를 신뢰하지 않았으면 거기서 Claude Code를 한 번 실행하고 신뢰 대화 상자를 수락한 다음 다시 재개합니다.

4948 4994 

4995<h3 id="restarted-after-its-next-loop-wakeup-was-due">

4996 다음 /loop 깨우기 예정 시간이 지난 후 이 세션이 다시 시작됨

4997</h3>

4998 

4999[백그라운드 세션](/docs/ko/agent-view)의 [자체 페이스 `/loop`](/docs/ko/scheduled-tasks#let-claude-choose-the-interval)가 중지되었습니다. 루프가 다음 깨우기를 기다리는 동안 세션의 프로세스가 종료되었고, 세션의 [다음 프로세스](/docs/ko/agent-view#the-supervisor-process)가 시작되기 전에 해당 깨우기 예정 시간이 지났습니다. 놓친 깨우기는 늦게 실행되지 않습니다. 알림은 세션이 다시 시작되었을 때 깨우기가 얼마나 지연되었는지 표시합니다:

5000 

5001```text theme={null}

5002This session restarted 12m after its next /loop wakeup was due, so that wakeup will not fire. The loop stays stopped until Claude schedules it again: reply to continue it.

5003```

5004 

5005v2.1.295 이전에는 이 상황에서 알림 없이 루프가 중지되었습니다.

5006 

5007**할 일:**

5008 

5009* 루프를 계속하려면 [세션에 답장](/docs/ko/agent-view#peek-and-reply)하여 `keep the loop running`과 같이 그렇게 말합니다. Claude는 답장과 함께 알림을 읽고 다음 깨우기를 예약할 수 있습니다.

5010* 루프를 더 이상 사용하지 않으려면 아무것도 하지 않습니다. 루프는 이미 중지되었습니다.

5011 

4949<h3 id="claude_code_process_wrapper-launcher-errors">5012<h3 id="claude_code_process_wrapper-launcher-errors">

4950 CLAUDE\_CODE\_PROCESS\_WRAPPER 런처 오류5013 CLAUDE\_CODE\_PROCESS\_WRAPPER 런처 오류

4951</h3>5014</h3>


5343Claude Code가 이 방식으로 거부하는 경로는 다음과 같습니다:5406Claude Code가 이 방식으로 거부하는 경로는 다음과 같습니다:

5344 5407 

5345* `\\server\share` 같은 UNC 공유5408* `\\server\share` 같은 UNC 공유

5346* `/net/<host>` 같은 자동 마운트 경로(해당 호스트의 자동 마운트 아래 디렉터리에서 Claude Code를 실행한 경우 제외)5409* `/net/<host>` 같은 자동 마운트 경로(해당 호스트의 자동 마운트 아래 디렉터리에서 Claude Code를 실행한 경우 제외). 해당 자동 마운트 아래의 읽기는 여전히 [네트워크 경로 검사](/docs/ko/permissions#network-paths)를 거칩니다.

5347* 심볼릭 링크 또는 정션을 통해 네트워크 위치에 도달하는 로컬 경로5410* 심볼릭 링크 또는 정션을 통해 네트워크 위치에 도달하는 로컬 경로

5348 5411 

5349매핑된 드라이브 문자 및 `\\wsl$` 경로는 네트워크 경로로 간주되지 않습니다.5412매핑된 드라이브 문자 및 `\\wsl$` 경로는 네트워크 경로로 간주되지 않습니다.

Details

27| Claude Security | ✅ 지원됨 | Enterprise 플랜의 공개 베타에서 [claude.ai/security](https://claude.ai/security)에서 사용 가능 |27| Claude Security | ✅ 지원됨 | Enterprise 플랜의 공개 베타에서 [claude.ai/security](https://claude.ai/security)에서 사용 가능 |

28| Teleport 세션 | ✅ 지원됨 | `--teleport`를 사용하여 클라우드와 터미널 간에 세션 이동 |28| Teleport 세션 | ✅ 지원됨 | `--teleport`를 사용하여 클라우드와 터미널 간에 세션 이동 |

29| 플러그인 마켓플레이스 | ✅ 지원됨 | 표면별로 자격증명 요구사항이 다릅니다. [GHES의 플러그인 마켓플레이스](#plugin-marketplaces-on-ghes)를 참조하세요 |29| 플러그인 마켓플레이스 | ✅ 지원됨 | 표면별로 자격증명 요구사항이 다릅니다. [GHES의 플러그인 마켓플레이스](#plugin-marketplaces-on-ghes)를 참조하세요 |

30| 기여도 메트릭 | ✅ 지원됨 | [분석 대시보드](/docs/ko/analytics)로 웹훅을 통해 전달됨 |30| 기여도 메트릭 | ❌ 지원되지 않음 | github.com에서 호스팅되는 저장소가 필요합니다. [분석 대시보드](/docs/ko/analytics)에는 GHES 저장소 작업에 대한 사용량 메트릭이 계속 표시됩니다 |

31| GitHub Actions | ✅ 지원됨 | 수동 워크플로우 설정 필요; `/install-github-app`은 github.com 전용 |31| GitHub Actions | ✅ 지원됨 | 수동 워크플로우 설정 필요; `/install-github-app`은 github.com 전용 |

32| GitHub MCP 서버 | ❌ 지원되지 않음 | GitHub MCP 서버는 GHES 인스턴스와 작동하지 않습니다 |32| GitHub MCP 서버 | ❌ 지원되지 않음 | GitHub MCP 서버는 GHES 인스턴스와 작동하지 않습니다 |

33 33 


56 GHES 인스턴스의 GitHub App 페이지에서 Claude가 액세스하기를 원하는 저장소 또는 조직에 앱을 설치합니다. 부분 집합으로 시작하여 나중에 더 추가할 수 있습니다.56 GHES 인스턴스의 GitHub App 페이지에서 Claude가 액세스하기를 원하는 저장소 또는 조직에 앱을 설치합니다. 부분 집합으로 시작하여 나중에 더 추가할 수 있습니다.

57 </Step>57 </Step>

58 58 

59 <Step title="기능 활성화">59 <Step title="Code Review 활성화">

60 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code)로 이동하여 github.com과 동일한 구성을 사용하여 GHES 저장소에 대해 [Code Review](/docs/ko/code-review#set-up-code-review) 및 [기여도 메트릭](/docs/ko/analytics#enable-contribution-metrics)을 활성화합니다.60 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code)로 이동하여 github.com과 동일한 구성을 사용하여 GHES 저장소에 대해 [Code Review](/docs/ko/code-review#set-up-code-review)를 활성화합니다.

61 </Step>61 </Step>

62</Steps>62</Steps>

63 63 


65 GitHub App 권한65 GitHub App 권한

66</h3>66</h3>

67 67 

68매니페스트는 GitHub App을 다음 권한 및 웹훅 이벤트로 구성하며, 이들은 함께 클라우드 세션, Code Review, Claude Security, 플러그인 마켓플레이스 및 기여도 메트릭을 포함합니다:68매니페스트는 GitHub App을 다음 권한 및 웹훅 이벤트로 구성하며, 이들은 함께 클라우드 세션, Code Review, Claude Security 및 플러그인 마켓플레이스를 포함합니다:

69 69 

70| 권한 | 액세스 | 사용 목적 |70| 권한 | 액세스 | 사용 목적 |

71| :- | :- | :- |71| :- | :- | :- |


270* [웹에서 Claude Code](/docs/ko/claude-code-on-the-web): 클라우드 인프라에서 Claude Code 세션 실행270* [웹에서 Claude Code](/docs/ko/claude-code-on-the-web): 클라우드 인프라에서 Claude Code 세션 실행

271* [코드 리뷰](/docs/ko/code-review): 자동화된 PR 리뷰271* [코드 리뷰](/docs/ko/code-review): 자동화된 PR 리뷰

272* [플러그인 마켓플레이스](/docs/ko/plugins/host-marketplace): 플러그인 카탈로그 구축 및 배포272* [플러그인 마켓플레이스](/docs/ko/plugins/host-marketplace): 플러그인 카탈로그 구축 및 배포

273* [분석](/docs/ko/analytics): 사용량 및 기여도 메트릭 추적273* [분석](/docs/ko/analytics): 조직 전체의 Claude Code 사용량 추적

274* [관리되는 설정](/docs/ko/settings): 조직 전체 정책 구성274* [관리되는 설정](/docs/ko/settings): 조직 전체 정책 구성

275* [네트워크 구성](/docs/ko/network-config): 방화벽 및 IP 허용 목록 요구 사항275* [네트워크 구성](/docs/ko/network-config): 방화벽 및 IP 허용 목록 요구 사항

headless.md +8 −6

Details

89* **[Monitor](/docs/ko/tools-reference#monitor-tool) 감시**: 실행은 감시가 시간 초과되거나 10분 상한이 대기를 종료할 때까지, 둘 중 먼저 발생하는 시점까지 기다립니다. 대기하는 동안 Claude는 감시가 보고하는 항목에 계속 응답합니다. 기본적으로 감시는 Claude가 시작한 후 5분 후에 시간 초과됩니다.89* **[Monitor](/docs/ko/tools-reference#monitor-tool) 감시**: 실행은 감시가 시간 초과되거나 10분 상한이 대기를 종료할 때까지, 둘 중 먼저 발생하는 시점까지 기다립니다. 대기하는 동안 Claude는 감시가 보고하는 항목에 계속 응답합니다. 기본적으로 감시는 Claude가 시작한 후 5분 후에 시간 초과됩니다.

90* **대기 중인 웨이크업**: 프롬프트를 `--input-format stream-json`이 아닌 텍스트로 전달한 실행에서 Claude가 [자체 속도 조절 `/loop` 웨이크업](/docs/ko/scheduled-tasks#let-claude-choose-the-interval)을 예약한 경우, 실행은 10분 상한을 넘더라도 각 웨이크업이 실행되기를 기다리고 [루프가 끝날](/docs/ko/scheduled-tasks#stop-a-loop) 때까지 해당 반복을 실행합니다.90* **대기 중인 웨이크업**: 프롬프트를 `--input-format stream-json`이 아닌 텍스트로 전달한 실행에서 Claude가 [자체 속도 조절 `/loop` 웨이크업](/docs/ko/scheduled-tasks#let-claude-choose-the-interval)을 예약한 경우, 실행은 10분 상한을 넘더라도 각 웨이크업이 실행되기를 기다리고 [루프가 끝날](/docs/ko/scheduled-tasks#stop-a-loop) 때까지 해당 반복을 실행합니다.

91 91 

92stderr가 터미널이고 실행이 5초 동안 대기한 경우, Claude Code는 `Waiting for background work to finish`로 시작하고 해당 작업을 명시하는 줄을 stderr에 출력합니다. [`json` 또는 `stream-json` 출력](#get-structured-output)에서는 stdout이 터미널이 아닐 때만 이 줄이 출력되므로, 스크립트가 읽는 JSON에는 이 줄이 포함되지 않습니다.

93 

92실행이 [`--max-budget-usd`](/docs/ko/cli-reference#cli-flags) 상한에 도달하면 Claude Code는 기다리는 대신 남은 백그라운드 작업을 중지합니다.94실행이 [`--max-budget-usd`](/docs/ko/cli-reference#cli-flags) 상한에 도달하면 Claude Code는 기다리는 대신 남은 백그라운드 작업을 중지합니다.

93 95 

94백그라운드 작업이 다른 턴을 시작하면, 실행은 기본 `text` 출력에서는 각 턴의 결과를 출력하고 `json` 출력에서는 마지막 턴의 결과를 출력합니다. v2.1.295 이전에는 `text` 출력에서도 마지막 턴의 결과만 출력했습니다.96백그라운드 작업이 다른 턴을 시작하면, 실행은 기본 `text` 출력에서는 각 턴의 결과를 출력하고 `json` 출력에서는 마지막 턴의 결과를 출력합니다. v2.1.295 이전에는 `text` 출력에서도 마지막 턴의 결과만 출력했습니다.


296 298 

297`--plugin-dir` 디렉터리 또는 아카이브 자체가 로드되지 않으면 해당 `plugin_errors` 항목은 해결된 절대 경로를 `path`로 포함합니다. 이를 사용하여 여러 `--plugin-dir` 값 중 어느 것이 실패했는지 확인할 수 있습니다. `path` 필드는 Claude Code v2.1.283 이상이 필요합니다.299`--plugin-dir` 디렉터리 또는 아카이브 자체가 로드되지 않으면 해당 `plugin_errors` 항목은 해결된 절대 경로를 `path`로 포함합니다. 이를 사용하여 여러 `--plugin-dir` 값 중 어느 것이 실패했는지 확인할 수 있습니다. `path` 필드는 Claude Code v2.1.283 이상이 필요합니다.

298 300 

299MCP 서버 필드도 동일한 방식으로 사용합니다. `-p`와 함께 [`--mcp-config`](/docs/ko/cli-reference#cli-flags)를 전달하면 Claude Code는 첫 번째 턴을 실행하기 전에 여전히 대기 중인 서버를 기다리며, [`MCP_TIMEOUT`](/docs/ko/env-vars) 시작 타임아웃(기본값 30초)까지 기다립니다. [캐시된 도구 목록](/docs/ko/agent-sdk/mcp#connection-timing)이 있는 원격 서버는 대기를 건너뛰고 `system/init`에서 `pending`을 표시하며 첫 번째 도구 호출에서 연결합니다. 대기는 Claude Code v2.1.221 이상이 필요합니다.301MCP 서버 필드도 동일한 방식으로 사용합니다. `-p`와 함께 [`--mcp-config`](/docs/ko/cli-reference#cli-flags)를 전달하면 Claude Code는 첫 번째 턴을 실행하기 전에 여전히 대기 중인 서버를 기다리며, [`MCP_TIMEOUT`](/docs/ko/env-vars) 시작 타임아웃(기본값 30초)까지 기다립니다. [캐시된 도구 목록](/docs/ko/agent-sdk/mcp#connection-timing)이 있는 원격 서버는 대기를 건너뛰고 `system/init`에서 `pending`을 표시하며 첫 번째 도구 호출에서 연결합니다. [자체 호스팅 환경](/docs/ko/self-hosted-environments-configuration#connection-timing)에서는 대신 더 짧은 대기가 적용됩니다. 대기는 Claude Code v2.1.221 이상이 필요합니다.

300 302 

301Claude Code는 시작 시 각 `--mcp-config` 항목을 검증하고 검증에 실패한 항목을 건너뜁니다(예: `type`이 없는 `url` 항목). 실행이 계속되고 깔끔하게 종료되므로 이러한 필드를 확인하여 로드되지 않은 서버를 포착합니다:303Claude Code는 시작 시 각 `--mcp-config` 항목을 검증하고 검증에 실패한 항목을 건너뜁니다(예: `type`이 없는 `url` 항목). 실행이 계속되고 깔끔하게 종료되므로 이러한 필드를 확인하여 로드되지 않은 서버를 포착합니다:

302 304 


327 도구 자동 승인329 도구 자동 승인

328</h3>330</h3>

329 331 

330`--allowedTools`를 사용하여 Claude가 특정 도구를 프롬프트 없이 사용하도록 허용합니다. `Read` 및 `Edit`를 나열하면 Claude가 권한을 요청하지 않고 파일을 읽고 편집하도록 허용합니다. `Bash`를 나열하면 셸 명령에 대해서도 동일하게 작동합니다. 단, [자동 모드](/docs/ko/permission-modes#how-auto-mode-evaluates-actions)에서 시작하는 실행은 예외입니다. 이 경우 Claude Code는 광범위한 허용 규칙으로 bare `Bash` 항목을 삭제하고 자동 모드가 각 명령을 대신 평가합니다. 이 예제는 테스트 스위트를 실행하고 이 세 도구를 나열하여 실패를 수정합니다:332`--allowedTools`를 사용하여 Claude가 특정 도구를 프롬프트 없이 사용하도록 허용합니다. `Read` 및 `Edit`를 나열하면 [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기를 제외하고 Claude가 권한을 요청하지 않고 파일을 읽고 편집하도록 허용합니다. `Bash`를 나열하면 셸 명령에 대해서도 동일하게 작동합니다. 단, [자동 모드](/docs/ko/permission-modes#how-auto-mode-evaluates-actions)에서 시작하는 실행은 예외입니다. 이 경우 Claude Code는 광범위한 허용 규칙으로 bare `Bash` 항목을 삭제하고 자동 모드가 각 명령을 대신 평가합니다. 이 예제는 테스트 스위트를 실행하고 이 세 도구를 나열하여 실패를 수정합니다:

331 333 

332```bash theme={null}334```bash theme={null}

333claude -p "Run the test suite and fix any failures" \335claude -p "Run the test suite and fix any failures" \


336 338 

337전체 세션에 대한 기준선을 설정하려면 개별 도구를 나열하는 대신 [권한 모드](/docs/ko/permission-modes)를 전달합니다. 권한 모드를 설정하지 않는 실행은 [기본 제공 시작 권한 모드](/docs/ko/permission-modes#which-mode-a-session-starts-in)를 사용하며, 이는 `auto`일 수 있으므로 원하는 권한 모드를 전달합니다:339전체 세션에 대한 기준선을 설정하려면 개별 도구를 나열하는 대신 [권한 모드](/docs/ko/permission-modes)를 전달합니다. 권한 모드를 설정하지 않는 실행은 [기본 제공 시작 권한 모드](/docs/ko/permission-modes#which-mode-a-session-starts-in)를 사용하며, 이는 `auto`일 수 있으므로 원하는 권한 모드를 전달합니다:

338 340 

339* **`auto`**: `--permission-mode auto`를 전달하여 분류기가 대부분의 작업을 검토하도록 합니다341* **`auto`**: `--permission-mode auto`를 전달하여 사용자 대신 분류기가 대부분의 작업을 검토하도록 합니다

340* **`dontAsk`**: Claude Code는 그렇지 않으면 프롬프트할 모든 호출을 거부하며, 이는 잠긴 CI 실행에 유용합니다. Manual 모드에서 승인이 필요하지 않은 작업(예: 작업 디렉터리의 파일 읽기 및 [읽기 전용 명령 집합](/docs/ko/permissions#read-only-commands))과 `--allowedTools` 항목 또는 `permissions.allow` 규칙이 적용되는 작업은 여전히 실행됩니다. `AskUserQuestion`, [조직이 `ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구 및 [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구는 허용 규칙이 일치해도 거부됩니다342* **`dontAsk`**: Claude Code는 그렇지 않으면 프롬프트할 모든 호출을 거부하며, 이는 잠긴 CI 실행에 유용합니다. Manual 모드에서 승인이 필요하지 않은 작업(예: 작업 디렉터리의 파일 읽기 및 [읽기 전용 명령 집합](/docs/ko/permissions#read-only-commands))과 `--allowedTools` 항목 또는 `permissions.allow` 규칙이 적용되는 작업은 여전히 실행됩니다. `AskUserQuestion`, [조직이 `ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구, [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구 및 [네트워크 경로에서의 읽기](/docs/ko/permissions#network-paths)는 허용 규칙이 일치해도 거부됩니다

341* **`acceptEdits`**: Claude는 프롬프트 없이 파일을 작성하고 Claude Code는 `mkdir`, `touch`, `mv` 및 `cp`와 같은 일반적인 파일 시스템 명령을 자동 승인합니다. [모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)은 여전히 적용됩니다. 읽기 전용 명령 집합을 제외하고 다른 셸 명령 및 네트워크 요청은 여전히 `--allowedTools` 항목 또는 `permissions.allow` 규칙이 필요합니다. [`acceptEdits`가 자동 승인하는 것](/docs/ko/permission-modes#auto-approve-file-edits-with-acceptedits-mode)의 전체 목록을 참조하십시오343* **`acceptEdits`**: Claude는 프롬프트 없이 파일을 작성하고 Claude Code는 `mkdir`, `touch`, `mv` 및 `cp`와 같은 일반적인 파일 시스템 명령을 자동 승인합니다. [모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)은 여전히 적용됩니다. 읽기 전용 명령 집합을 제외하고 다른 셸 명령 및 네트워크 요청은 여전히 `--allowedTools` 항목 또는 `permissions.allow` 규칙이 필요합니다. [`acceptEdits`가 자동 승인하는 것](/docs/ko/permission-modes#auto-approve-file-edits-with-acceptedits-mode)의 전체 목록을 참조하십시오

342 344 

343이 예제는 `acceptEdits`를 기준선으로 하여 린트 수정을 적용합니다:345이 예제는 `acceptEdits`를 기준선으로 하여 린트 수정을 적용합니다:


411 대화 계속413 대화 계속

412</h3>414</h3>

413 415 

414`--continue`를 사용하여 가장 최근 대화를 계속하거나 `--resume`을 세션 ID와 함께 사용하여 특정 대화를 계속합니다. Claude Code v2.1.257 이상에서 `--continue`를 전달하면 Claude Code는 완료된 [백그라운드 세션](/docs/ko/sessions#resume-a-session)은 열지만 아직 실행 중인 세션은 열지 않습니다. 이 예제는 검토를 실행한 다음 후속 프롬프트를 보냅니다:416`--continue`를 사용하여 가장 최근 대화를 계속하거나 `--resume`을 세션 ID와 함께 사용하여 특정 대화를 계속합니다. Claude Code v2.1.257 이상에서 `--continue`를 전달하면 Claude Code는 완료된 [백그라운드 세션](/docs/ko/sessions#where-the-session-picker-looks)은 열지만 아직 실행 중인 세션은 열지 않습니다. 이 예제는 검토를 실행한 다음 후속 프롬프트를 보냅니다:

415 417 

416```bash theme={null}418```bash theme={null}

417# 첫 번째 요청419# 첫 번째 요청


429claude -p "Continue that review" --resume "$session_id"431claude -p "Continue that review" --resume "$session_id"

430```432```

431 433 

432두 명령을 서로 다른 디렉터리에서 실행할 수 있습니다: Claude Code는 이 머신의 모든 프로젝트에서 [세션 ID로 세션을 찾습니다](/docs/ko/sessions#resume-a-session). v2.1.223 이전에는 Claude Code가 현재 프로젝트 디렉터리 및 git worktree에서만 ID를 찾았으므로 두 명령을 같은 디렉터리에서 실행해야 했습니다.434두 명령을 서로 다른 디렉터리에서 실행할 수 있습니다: Claude Code는 이 머신의 모든 프로젝트에서 [세션 ID로 세션을 찾습니다](/docs/ko/sessions#where-the-session-picker-looks).

433 435 

434세션 ID 대신 `--resume`에 세션의 `.jsonl` [트랜스크립트 파일](/docs/ko/sessions#where-transcripts-are-stored)의 절대 경로를 전달할 수 있으며 Claude Code는 해당 파일에 저장된 대화를 계속합니다.436세션 ID 대신 `--resume`에 세션의 `.jsonl` [트랜스크립트 파일](/docs/ko/sessions#where-transcripts-are-stored)의 절대 경로를 전달할 수 있으며 Claude Code는 해당 파일에 저장된 대화를 계속합니다.

435 437 

hooks.md +39 −12

Details

425 425 

426일치하는 모든 hook은 병렬로 실행됩니다. 동일한 핸들러를 둘 이상의 설정 파일에서 정의하면 한 번 실행됩니다. 플러그인 또는 스킬의 동일한 핸들러 복사본은 별도로 유지됩니다.426일치하는 모든 hook은 병렬로 실행됩니다. 동일한 핸들러를 둘 이상의 설정 파일에서 정의하면 한 번 실행됩니다. 플러그인 또는 스킬의 동일한 핸들러 복사본은 별도로 유지됩니다.

427 427 

428핸들러는 Claude Code의 환경이 있는 현재 디렉터리에서 실행됩니다. 예를 들어 다른 셸이 세션 중간에 삭제한 worktree 또는 임시 디렉터리와 같이 현재 디렉터리가 더 이상 존재하지 않으면 Claude Code는 다음 중 여전히 존재하는 첫 번째 디렉터리에서 명령 hook을 실행합니다: 세션이 시작된 디렉터리, 프로젝트 루트, 홈 디렉터리 또는 시스템 임시 디렉터리. Claude Code는 [디버그 로그](#debug-hooks)에서 폴백 디렉터리의 이름을 지정하는 경고를 기록합니다.428핸들러는 Claude Code의 환경이 있는 현재 디렉터리에서 실행됩니다. 예를 들어 다른 셸이 세션 중간에 삭제한 worktree 또는 임시 디렉터리와 같이 현재 디렉터리가 더 이상 존재하지 않으면 Claude Code는 다음 중 여전히 존재하는 첫 번째 디렉터리에서 명령 hook을 실행합니다: 세션이 시작된 디렉터리, 프로젝트 루트, 홈 디렉터리 또는 시스템 임시 디렉터리. Claude Code는 [디버그 로그](#debug-hooks)에서 폴백 디렉터리의 이름을 지정하는 경고를 기록합니다. 데스크톱 앱에서 시작하는 worktree 세션의 경우 [worktree가 주 체크아웃과 공유하는 항목](/docs/ko/worktrees#what-worktrees-share-with-the-main-checkout)을 참조하십시오.

429 429 

430`$CLAUDE_CODE_REMOTE` 환경 변수는 원격 웹 환경에서 `"true"`이고 로컬 CLI에서 설정되지 않습니다. Claude Code v2.1.199 이상은 로컬 세션이 활성 Remote Control 연결을 가지는 동안 [`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/docs/ko/env-vars)를 [Remote Control](/docs/ko/remote-control) 세션 ID로 설정합니다.430`$CLAUDE_CODE_REMOTE` 환경 변수는 원격 웹 환경에서 `"true"`이고 로컬 CLI에서 설정되지 않습니다. Claude Code v2.1.199 이상은 로컬 세션이 활성 Remote Control 연결을 가지는 동안 [`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/docs/ko/env-vars)를 [Remote Control](/docs/ko/remote-control) 세션 ID로 설정합니다.

431 431 


645 645 

646 * **`${CLAUDE_PROJECT_DIR}`은 제자리에 유지됩니다**: 여전히 세션이 시작된 프로젝트 루트를 가리키므로 `${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.sh`와 같은 명령은 여전히 주 체크아웃에서 스크립트를 실행합니다.646 * **`${CLAUDE_PROJECT_DIR}`은 제자리에 유지됩니다**: 여전히 세션이 시작된 프로젝트 루트를 가리키므로 `${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.sh`와 같은 명령은 여전히 주 체크아웃에서 스크립트를 실행합니다.

647 * **`cwd`는 Claude를 따릅니다**: Claude가 worktree에 들어간 후 hook의 [입력 JSON](#common-input-fields)의 `cwd` 필드는 worktree 루트이고, Claude가 `cd`를 실행한 후 새 디렉터리입니다. hook이 Claude가 작업 중인 디렉터리를 알아야 할 때 읽습니다.647 * **`cwd`는 Claude를 따릅니다**: Claude가 worktree에 들어간 후 hook의 [입력 JSON](#common-input-fields)의 `cwd` 필드는 worktree 루트이고, Claude가 `cd`를 실행한 후 새 디렉터리입니다. hook이 Claude가 작업 중인 디렉터리를 알아야 할 때 읽습니다.

648 

649 데스크톱 앱에서 시작하는 worktree 세션에서 `${CLAUDE_PROJECT_DIR}`이 가리키는 위치는 [worktree가 주 체크아웃과 공유하는 항목](/docs/ko/worktrees#what-worktrees-share-with-the-main-checkout)을 참조하십시오.

648</Note>650</Note>

649 651 

650경로 자리 표시자를 참조하는 모든 hook에 대해 [exec 형식](#exec-form-and-shell-form)을 선호합니다. 셸 형식에서 각 자리 표시자를 큰따옴표로 래핑합니다.652경로 자리 표시자를 참조하는 모든 hook에 대해 [exec 형식](#exec-form-and-shell-form)을 선호합니다. 셸 형식에서 각 자리 표시자를 큰따옴표로 래핑합니다.


782| `effort` | hook이 실행될 때 적용 중인 [effort 수준](/docs/ko/model-config#adjust-effort-level)을 담은 `level` 필드가 있는 객체: `"low"`, `"medium"`, `"high"`, `"xhigh"` 또는 `"max"`. 활성 모델이 지원하지 않는 수준을 설정하면 `level`은 Claude Code가 대신 실행한 수준을 보고합니다. [effort 수준 조정](/docs/ko/model-config#adjust-effort-level)에서 해당 수준을 선택하는 방법을 설명합니다. 이 객체는 [상태줄](/docs/ko/statusline#available-data) `effort` 필드와 일치합니다. `PreToolUse`, `PostToolUse`, `Stop`, `SubagentStop`과 같이 도구 사용 컨텍스트 내에서 발생하는 이벤트에 대해 현재 모델이 effort 매개변수를 지원할 때 존재합니다. 이 수준은 `$CLAUDE_EFFORT` 환경 변수로 hook 명령 및 Bash 도구에서도 사용할 수 있습니다. |784| `effort` | hook이 실행될 때 적용 중인 [effort 수준](/docs/ko/model-config#adjust-effort-level)을 담은 `level` 필드가 있는 객체: `"low"`, `"medium"`, `"high"`, `"xhigh"` 또는 `"max"`. 활성 모델이 지원하지 않는 수준을 설정하면 `level`은 Claude Code가 대신 실행한 수준을 보고합니다. [effort 수준 조정](/docs/ko/model-config#adjust-effort-level)에서 해당 수준을 선택하는 방법을 설명합니다. 이 객체는 [상태줄](/docs/ko/statusline#available-data) `effort` 필드와 일치합니다. `PreToolUse`, `PostToolUse`, `Stop`, `SubagentStop`과 같이 도구 사용 컨텍스트 내에서 발생하는 이벤트에 대해 현재 모델이 effort 매개변수를 지원할 때 존재합니다. 이 수준은 `$CLAUDE_EFFORT` 환경 변수로 hook 명령 및 Bash 도구에서도 사용할 수 있습니다. |

783| `hook_event_name` | 발생한 이벤트의 이름 |785| `hook_event_name` | 발생한 이벤트의 이름 |

784 786 

785`--agent`로 실행하거나 서브에이전트 내부에서 실행할 때 두 개의 추가 필드가 포함됩니다:787`agent_id`와 `agent_type`은 서브에이전트, [in-process 팀원](/docs/ko/agent-teams#choose-a-display-mode), `--agent`로 선택한 에이전트 등 hook이 어느 에이전트에서 발생했는지를 스크립트에 알려줍니다:

786 788 

787| 필드 | 설명 |789| 필드 | 설명 |

788| :- | :- |790| :- | :- |

789| `agent_id` | 서브에이전트의 고유 식별자. hook이 서브에이전트 호출 내부에서 발생할 때만 존재합니다. 이를 사용하여 서브에이전트 hook 호출을 메인 스레드 호출과 구별합니다. |791| `agent_id` | hook이 발생한 서브에이전트 또는 in-process 팀원의 고유 식별자. |

790| `agent_type` | 에이전트 이름 (예: `"Explore"` 또는 `"security-reviewer"`). 세션이 `--agent`를 사용하거나 hook이 서브에이전트 내부에서 발생할 때 존재합니다. 서브에이전트의 경우 서브에이전트의 유형이 세션의 `--agent` 값보다 우선합니다. 사용자 정의 및 플러그인 서브에이전트가 보고하는 값과 플러그인 범위 이름에 대해 matcher를 작성하는 방법은 [SubagentStart](#subagentstart)를 참조하세요. |792| `agent_type` | 에이전트 이름 (예: `"Explore"` 또는 `"security-reviewer"`). 세션이 `--agent`를 사용하거나 hook이 서브에이전트 내부에서 발생할 때 존재합니다. 서브에이전트의 경우 서브에이전트의 유형이 세션의 `--agent` 값보다 우선합니다. 사용자 정의 및 플러그인 서브에이전트가 보고하는 값과 플러그인 범위 이름에 대해 matcher를 작성하는 방법은 [SubagentStart](#subagentstart)를 참조하세요. |

791 793 

792[`SessionStart`](#sessionstart) hook만 `model` 필드를 받을 수 있으며, Claude Code가 항상 포함하지는 않습니다. [`PreModelSwitch`](#premodelswitch) 및 [`PostModelSwitch`](#postmodelswitch) hook은 대신 `from_model` 및 `to_model`을 받으므로, 세션 중에 모델이 변경되는 것을 추적하려면 PostModelSwitch hook을 사용합니다.794[`SessionStart`](#sessionstart) hook만 `model` 필드를 받을 수 있으며, Claude Code가 항상 포함하지는 않습니다. [`PreModelSwitch`](#premodelswitch) 및 [`PostModelSwitch`](#postmodelswitch) hook은 대신 `from_model` 및 `to_model`을 받으므로, 세션 중에 모델이 변경되는 것을 추적하려면 PostModelSwitch hook을 사용합니다.


855 857 

856대부분의 이벤트에서 Claude Code는 stdout을 디버그 로그에 기록하고 트랜스크립트에는 표시하지 않습니다. 예외는 `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart`, `PostModelSwitch`이며, 여기서 Claude Code는 일반 텍스트 stdout을 Claude가 보고 활용할 수 있는 컨텍스트로 추가합니다.858대부분의 이벤트에서 Claude Code는 stdout을 디버그 로그에 기록하고 트랜스크립트에는 표시하지 않습니다. 예외는 `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart`, `PostModelSwitch`이며, 여기서 Claude Code는 일반 텍스트 stdout을 Claude가 보고 활용할 수 있는 컨텍스트로 추가합니다.

857 859 

858Claude Code가 stdout을 [JSON 출력](#json-output)으로 읽는지 일반 텍스트로 읽는지는 주변 공백을 무시하고 시작 및 끝 문자에 따라 달라집니다:860[async](#how-async-hooks-execute)가 아닌 hook의 경우, Claude Code는 전체 출력이 주변에 공백 외에는 아무것도 없는 하나의 JSON 객체일 때 stdout을 [JSON 출력](#json-output)으로 구문 분석하고, 그렇지 않으면 일반 텍스트 또는 구문 분석 실패로 처리합니다:

859 861 

860* **`{`로 시작하고 `}`로 끝남**: Claude Code는 이를 JSON으로 구문 분석합니다. 출력이 각각 자체적으로 JSON으로 구문 분석되는 두 줄 이상이고 필드를 설정하는 [JSON 출력](#json-output) 객체인 줄이 없는 경우 Claude Code는 전체 출력을 일반 텍스트로 취급합니다. 이러한 줄 중 하나가 필드를 설정하면 전체 출력은 구문 분석 실패가 됩니다.862* **한 줄 또는 여러 줄에 걸친 하나의 JSON 객체**: JSON 출력으로 구문 분석됩니다.

861* **`{`로 시작하지만 `}`로 끝나지 않음**: Claude Code는 이를 일반 텍스트로 취급합니다.863* **`{`로 시작하지 않거나, `{`로 시작하지만 `}`로 끝나지 않는 출력**: 일반 텍스트입니다. 이 규칙에 따라 JSON 배열과 따옴표로 묶인 JSON 문자열은 일반 텍스트입니다.

862* **다른 것으로 시작**: Claude Code는 JSON 배열이나 따옴표로 묶인 JSON 문자열을 포함하여 이를 일반 텍스트로 취급합니다.864* **각각 자체적으로 JSON으로 구문 분석되는 두 줄 이상이며, 첫 줄이 `{`로 시작하고 마지막 줄이 `}`로 끝나는 출력**: 필드를 설정하는 JSON 출력 객체인 줄이 없으면 일반 텍스트이고, 그러한 줄이 있으면 구문 분석 실패입니다.

865* **`{`로 시작하고 `}`로 끝나지만 유효한 JSON이 아닌 그 밖의 출력**: 구문 분석 실패입니다.

863 866 

864Claude Code가 stdout을 JSON으로 구문 분석하려고 시도했지만 실패하거나, 구문 분석된 객체가 [스키마 검증](#json-output)에 실패하면 실행은 [차단하지 않는 오류](#exit-code-output)가 됩니다. `<hook name> hook error` 알림에 구문 분석 또는 검증 메시지가 표시됩니다. 일반 텍스트 stdout을 컨텍스트로 추가하는 이벤트에서 Claude Code는 구문 분석에 실패한 stdout을 추가하지 않습니다.867Claude Code가 stdout을 JSON으로 구문 분석하려고 시도했지만 실패하거나, 구문 분석된 객체가 [스키마 검증](#json-output)에 실패하면 실행은 [차단하지 않는 오류](#exit-code-output)가 됩니다. `<hook name> hook error` 알림에 구문 분석 또는 검증 메시지가 표시됩니다. 일반 텍스트 stdout을 컨텍스트로 추가하는 이벤트에서 Claude Code는 구문 분석에 실패한 stdout을 추가하지 않습니다.

865 868 


1050 hook당 하나의 접근 방식을 선택합니다: 종료 코드만 사용하여 신호하거나, 종료 0으로 나가면서 JSON을 출력하여 구조화된 제어를 합니다. 둘을 섞으면 종료 2는 [차단 효과](#exit-code-2-behavior-per-event)를 유지하고 Claude Code는 여전히 JSON 필드를 읽습니다. 단, [종료 코드 2](#exit-code-2)에 설명된 elicitation 예외가 하나 있습니다.1053 hook당 하나의 접근 방식을 선택합니다: 종료 코드만 사용하여 신호하거나, 종료 0으로 나가면서 JSON을 출력하여 구조화된 제어를 합니다. 둘을 섞으면 종료 2는 [차단 효과](#exit-code-2-behavior-per-event)를 유지하고 Claude Code는 여전히 JSON 필드를 읽습니다. 단, [종료 코드 2](#exit-code-2)에 설명된 elicitation 예외가 하나 있습니다.

1051</Note>1054</Note>

1052 1055 

1053hook의 stdout은 JSON 객체만 포함해야 합니다. 셸 프로필이 시작 시 텍스트를 출력하면 JSON 구문 분석을 방해할 수 있습니다. 문제 해결 가이드의 [Hook JSON이 효과가 없음](/docs/ko/hooks-guide#hook-json-has-no-effect)을 참조하세요.1056stdout에는 JSON 객체 외에 아무것도 출력하지 않습니다. [async](#how-async-hooks-execute)가 아닌 hook의 경우, 셸 프로필이 시작 시 출력하는 줄과 같은 다른 텍스트가 stdout에 있으면 Claude Code가 객체를 JSON으로 읽지 못합니다. 해당 텍스트를 찾아 출력되지 않게 하는 방법은 [Hook JSON이 효과가 없음](/docs/ko/hooks-guide#hook-json-has-no-effect)을 참조하세요.

1054 1057 

1055hook의 `additionalContext`, `systemMessage`, `initialUserMessage` 문자열 및 일반 stdout은 10,000자로 제한됩니다:1058hook의 `additionalContext`, `systemMessage`, `initialUserMessage` 문자열 및 일반 stdout은 10,000자로 제한됩니다:

1056 1059 


1142 1145 

1143여러 hook이 동일한 이벤트에 대해 `additionalContext`를 반환하면 Claude는 모든 값을 받습니다.1146여러 hook이 동일한 이벤트에 대해 `additionalContext`를 반환하면 Claude는 모든 값을 받습니다.

1144 1147 

1148문자열에 `<system-reminder>` 또는 `</system-reminder>` 태그가 포함되어 있으면 Claude는 해당 태그의 `<`가 `&lt;`로 바뀐 문자열을 받습니다.

1149 

1145값이 10,000자를 초과하면 Claude Code는 텍스트를 세션 디렉터리의 파일에 쓰고, 대신 최대 처음 2,000자의 미리보기와 함께 파일 경로를 Claude에 전달합니다. Claude는 파일을 읽을 수 있지만 Claude Code가 읽도록 요청하지는 않습니다.1150값이 10,000자를 초과하면 Claude Code는 텍스트를 세션 디렉터리의 파일에 쓰고, 대신 최대 처음 2,000자의 미리보기와 함께 파일 경로를 Claude에 전달합니다. Claude는 파일을 읽을 수 있지만 Claude Code가 읽도록 요청하지는 않습니다.

1146 1151 

1147Claude가 현재 환경 상태 또는 방금 실행된 작업에 대해 알아야 할 정보에 `additionalContext`를 사용합니다:1152Claude가 현재 환경 상태 또는 방금 실행된 작업에 대해 알아야 할 정보에 `additionalContext`를 사용합니다:


1364 환경 변수 유지1369 환경 변수 유지

1365</h4>1370</h4>

1366 1371 

1367SessionStart 훅은 `CLAUDE_ENV_FILE` 환경 변수에 액세스할 수 있으며, 이 변수는 이후 Bash 명령을 위해 환경 변수를 유지할 수 있는 파일 경로를 제공합니다.1372SessionStart 훅은 `CLAUDE_ENV_FILE` 환경 변수에 접근할 수 있습니다. 이 변수는 세션 후반에 Claude가 실행하는 셸 명령을 위해 환경 변수를 유지할 수 있는 파일 경로를 제공합니다.

1368 1373 

1369개별 환경 변수를 설정하려면 `CLAUDE_ENV_FILE`에 `export` 문을 작성하세요. 다른 훅이 설정한 변수를 보존하려면 추가(`>>`)를 사용하세요:1374개별 환경 변수를 설정하려면 `CLAUDE_ENV_FILE`에 `export` 문을 작성하세요. 다른 훅이 설정한 변수를 보존하려면 추가(`>>`)를 사용하세요:

1370 1375 


1399exit 01404exit 0

1400```1405```

1401 1406 

1407각 Bash 명령은 명령 자체보다 먼저 파일 내용을 셸 코드로 실행하므로, 파일의 각 줄에는 `export PATH="$PATH:./node_modules/.bin"`의 `$PATH` 참조처럼 Bash가 평가하는 모든 것을 사용할 수 있습니다.

1408 

1409<a id="persisted-variables-in-powershell-commands" />

1410 

1411<h5 id="persisted-variables-in-powershell-commands">

1412 PowerShell 명령에서 유지되는 변수

1413</h5>

1414 

1415Claude Code v2.1.296 이상에서는 [PowerShell](/docs/ko/tools-reference#powershell-tool) 명령도 `CLAUDE_ENV_FILE`의 변수를 받지만, PowerShell은 파일을 실행하지 않습니다. 대신 Claude Code가 파일에서 할당문을 읽어 PowerShell 명령의 환경에 복사합니다. 이 세션의 모든 훅이 쓴 내용과 실행 전에 [`CLAUDE_ENV_FILE`을 설정](/docs/ko/env-vars)한 스크립트 전체에서 모든 줄이 다음 중 하나일 때만 이렇게 합니다:

1416 

1417* 빈 줄 또는 `#` 주석

1418* 줄 시작 부분의 할당문 하나. `export NAME=value`, `declare -x NAME=value` 또는 `NAME=value` 형식으로 작성되며, 값은 Bash가 작성된 그대로 사용하는 값이어야 하고 다음 요소를 자유롭게 조합해 구성됩니다: 문자, 숫자, `_ @ % + = : , . / -` 문자만 사용하는 따옴표 없는 텍스트, 작은따옴표로 묶인 텍스트, 내부의 모든 `$`, 백틱, `"`가 백슬래시로 이스케이프된 큰따옴표 텍스트

1419 

1420이스케이프되지 않은 `$PATH`가 있는 `export PATH="$PATH:./node_modules/.bin"`, `source` 명령, `direnv export bash`가 출력하는 `$'...'` 문자열처럼 다른 종류의 줄이 하나라도 있으면 PowerShell 명령은 어떤 변수도 받지 못하며, `claude --debug`는 `Session environment is not all plain assignments`를 로그에 기록합니다. Bash 명령은 여전히 모든 변수를 받습니다. Windows에서는 Git Bash와 Windows가 경로를 다르게 표기하기 때문에 PowerShell 명령은 값에 `/` 또는 `\`가 포함된 변수도 받지 않습니다. [샌드박스](/docs/ko/sandboxing)가 적용된 PowerShell 명령은 어떤 변수도 받지 않습니다.

1421 

1402<Note>1422<Note>

1403 `CLAUDE_ENV_FILE`은 SessionStart, [Setup](#setup), [CwdChanged](#cwdchanged), [FileChanged](#filechanged) 훅에서 사용할 수 있습니다. 다른 훅 유형은 이 변수에 액세스할 수 없습니다.1423 `CLAUDE_ENV_FILE`은 SessionStart, [Setup](#setup), [CwdChanged](#cwdchanged), [FileChanged](#filechanged) 훅에서 사용할 수 있습니다. 다른 훅 이벤트는 이 변수에 접근할 수 없으며, [`"shell": "powershell"`](#command-hook-fields)을 통해서든 Git Bash가 없는 Windows의 기본값으로든 PowerShell에서 실행되는 훅도 접근할 수 없습니다.

1404</Note>1424</Note>

1405 1425 

1406<h3 id="setup">1426<h3 id="setup">


2030 2050 

2031| 필드 | 설명 |2051| 필드 | 설명 |

2032| :- | :- |2052| :- | :- |

2033| `permissionDecision` | `"allow"`는 권한 프롬프트를 건너뜁니다. 단, [어떤 모드도 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)과, [`updatedInput`을 함께 사용해야 하는](#allow-with-updatedinput) `AskUserQuestion` 및 `ExitPlanMode`는 예외입니다. `"deny"`는 도구 호출을 막습니다. `"ask"`는 사용자에게 확인을 요청합니다. `"defer"`는 나중에 도구를 재개할 수 있도록 정상적으로 종료합니다. 훅이 무엇을 반환하든 [거부 및 확인 규칙](/docs/ko/permissions#manage-permissions)은 여전히 평가됩니다 |2053| `permissionDecision` | `"allow"`는 권한 프롬프트를 건너뜁니다. 단, [어떤 모드도 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves), [네트워크 경로에서의 읽기](/docs/ko/permissions#network-paths), 그리고 [`updatedInput`과 함께 사용해야 하는](#allow-with-updatedinput) `AskUserQuestion` 및 `ExitPlanMode`는 예외입니다. `"deny"`는 도구 호출을 막습니다. `"ask"`는 사용자에게 확인을 요청합니다. `"defer"`는 나중에 도구를 재개할 수 있도록 정상적으로 종료합니다. 훅이 무엇을 반환하든 [거부 및 확인 규칙](/docs/ko/permissions#manage-permissions)은 여전히 평가됩니다 |

2034| `permissionDecisionReason` | `"ask"`의 경우 권한 프롬프트에서 사용자에게 표시됩니다. 아무도 그 프롬프트에 응답할 수 없는 `-p` 실행에서 Claude Code가 [호출을 거부](/docs/ko/headless#turn-off-permission-prompts-in-unattended-runs)하면, Claude는 대신 도구 결과에서 이유를 읽습니다. `"deny"`의 경우 Claude에게 표시됩니다. `"allow"` 및 `"defer"`의 경우 [디버그 로그](#debug-hooks)에만 기록됩니다 |2054| `permissionDecisionReason` | `"ask"`의 경우 권한 프롬프트에서 사용자에게 표시됩니다. 아무도 그 프롬프트에 응답할 수 없는 `-p` 실행에서 Claude Code가 [호출을 거부](/docs/ko/headless#turn-off-permission-prompts-in-unattended-runs)하면, Claude는 대신 도구 결과에서 이유를 읽습니다. `"deny"`의 경우 Claude에게 표시됩니다. `"allow"` 및 `"defer"`의 경우 [디버그 로그](#debug-hooks)에만 기록됩니다 |

2035| `updatedInput` | 실행 전에 도구의 입력 매개변수를 수정합니다. 전체 입력 객체를 대체하므로 수정된 필드와 함께 변경되지 않은 필드도 포함하세요. Claude Code는 권한 규칙과 Bash 명령의 [자동 백그라운드 적격성](/docs/ko/tools-reference#foreground-commands-that-move-to-the-background)을 Claude가 보낸 입력이 아니라 훅이 반환한 입력을 기준으로 평가합니다. 자동 승인하려면 `"allow"`와, 수정된 입력을 사용자에게 보여 주려면 `"ask"`와 함께 사용하세요. `"defer"`의 경우 무시됩니다 |2055| `updatedInput` | 실행 전에 도구의 입력 매개변수를 수정합니다. 전체 입력 객체를 대체하므로 수정된 필드와 함께 변경되지 않은 필드도 포함하세요. Claude Code는 권한 규칙과 Bash 명령의 [자동 백그라운드 적격성](/docs/ko/tools-reference#foreground-commands-that-move-to-the-background)을 Claude가 보낸 입력이 아니라 훅이 반환한 입력을 기준으로 평가합니다. 자동 승인하려면 `"allow"`와, 수정된 입력을 사용자에게 보여 주려면 `"ask"`와 함께 사용하세요. `"defer"`의 경우 무시됩니다 |

2036| `additionalContext` | 도구 결과와 함께 Claude의 컨텍스트에 추가되는 문자열. `permissionDecision`이 `"defer"`이면 무시됩니다. [Claude를 위한 컨텍스트 추가](#add-context-for-claude)를 참조하세요 |2056| `additionalContext` | 도구 결과와 함께 Claude의 컨텍스트에 추가되는 문자열. `permissionDecision`이 `"defer"`이면 무시됩니다. [Claude를 위한 컨텍스트 추가](#add-context-for-claude)를 참조하세요 |


2136재개할 때 지연된 도구를 더 이상 사용할 수 없으면, 프로세스는 훅이 발생하기 전에 `stop_reason: "tool_deferred_unavailable"` 및 `is_error: true`와 함께 종료됩니다. 이는 도구를 제공한 MCP 서버가 재개된 세션에 연결되어 있지 않을 때 발생합니다. 어떤 도구가 누락되었는지 식별할 수 있도록 `deferred_tool_use` 페이로드는 여전히 포함됩니다.2156재개할 때 지연된 도구를 더 이상 사용할 수 없으면, 프로세스는 훅이 발생하기 전에 `stop_reason: "tool_deferred_unavailable"` 및 `is_error: true`와 함께 종료됩니다. 이는 도구를 제공한 MCP 서버가 재개된 세션에 연결되어 있지 않을 때 발생합니다. 어떤 도구가 누락되었는지 식별할 수 있도록 `deferred_tool_use` 페이로드는 여전히 포함됩니다.

2137 2157 

2138<Note>2158<Note>

2139 플랜 모드에서 지연된 세션을 재개하려면 Claude Code가 승인을 위해 플랜을 제시할 수 있도록 `--resume`과 함께 [`--permission-prompt-tool`](/docs/ko/cli-reference#cli-flags)을 전달하세요. 특정 다른 실행 플래그를 전달하면 재개된 실행이 플랜 모드로 돌아가지 않습니다. [`-p`로 플랜 모드에서 재개](/docs/ko/sessions#resume-in-plan-mode-with-p)를 참조하세요. Claude Code v2.1.246 이상이 필요합니다.2159 지연된 세션을 플랜 모드에서 재개하려면 Claude Code가 승인을 위해 계획을 제시할 수 있도록 `--resume`과 함께 [`--permission-prompt-tool`](/docs/ko/cli-reference#cli-flags)을 전달하세요. 다른 조건은 [`-p`로 플랜 모드에서 재개](/docs/ko/sessions#resume-in-plan-mode-with-p)를 참조하세요. Claude Code v2.1.246 이상이 필요합니다.

2140 2160 

2141 `-p`로 재개하면 Claude Code는 저장된 다른 권한 모드를 복원하지 않습니다. 새 `claude -p` 실행이 시작되는 권한 모드로 실행을 시작하므로, 지연된 세션에서 `--permission-mode` 또는 `--dangerously-skip-permissions`를 사용했다면 다시 전달하세요. `-p` 없이 `claude --resume <session-id>`로 재개하면 Claude Code는 [재개 시 권한 모드](/docs/ko/sessions#permission-mode-on-resume)에 나열된 예외를 제외하고 저장된 권한 모드를 복원합니다.2161 `-p`로 재개하면 Claude Code는 저장된 다른 권한 모드를 복원하지 않습니다. 새 `claude -p` 실행이 시작되는 권한 모드로 실행을 시작하므로, 지연된 세션에서 `--permission-mode` 또는 `--dangerously-skip-permissions`를 사용했다면 다시 전달하세요. `-p` 없이 `claude --resume <session-id>`로 재개하면 Claude Code는 [재개 시 권한 모드](/docs/ko/sessions#permission-mode-on-resume)에 나열된 예외를 제외하고 저장된 권한 모드를 복원합니다.

2142</Note>2162</Note>


4304 4324 

4305백그라운드 프로세스가 종료된 후 Claude Code는 hook의 JSON 응답에서 `additionalContext` 및 `systemMessage` 필드를 다음 대화 턴에서 Claude에 전달합니다. 동기 hook의 `systemMessage`와 달리 두 필드 모두 사용자에게 표시되지 않습니다.4325백그라운드 프로세스가 종료된 후 Claude Code는 hook의 JSON 응답에서 `additionalContext` 및 `systemMessage` 필드를 다음 대화 턴에서 Claude에 전달합니다. 동기 hook의 `systemMessage`와 달리 두 필드 모두 사용자에게 표시되지 않습니다.

4306 4326 

4327JSON 응답은 stdout에 단독으로 출력하거나 별도의 한 줄에 출력합니다:

4328 

4329* **stdout에 단독으로 출력**: 응답이 stdout의 유일한 텍스트인 경우, pretty-print된 `jq` 출력처럼 여러 줄에 걸칠 수 있습니다. 여러 줄에 걸치려면 Claude Code v2.1.295 이상이 필요합니다.

4330* **별도의 한 줄에 출력**: 예를 들어 `jq -c`를 사용하여 응답이 한 줄에 단독으로 들어가는 경우, 비동기 hook은 stdout에 다른 텍스트를 출력할 수 있습니다.

4331 

4307Claude Code는 JSON 응답을 동기 hook과 동일한 [출력 스키마](#json-output)에 대해 검증하고, `systemMessage`가 문자열이 아닌 경우와 같이 값의 유형이 잘못된 필드를 전달하지 않고 삭제합니다. `--debug`로 실행하여 삭제된 각 필드의 이름을 지정하는 경고를 확인합니다. v2.1.202 이전에는 비동기 hook의 잘못된 형식의 JSON 출력이 세션을 충돌시킬 수 있었고, 세션이 재개될 때마다 충돌이 반복되었습니다.4332Claude Code는 JSON 응답을 동기 hook과 동일한 [출력 스키마](#json-output)에 대해 검증하고, `systemMessage`가 문자열이 아닌 경우와 같이 값의 유형이 잘못된 필드를 전달하지 않고 삭제합니다. `--debug`로 실행하여 삭제된 각 필드의 이름을 지정하는 경고를 확인합니다. v2.1.202 이전에는 비동기 hook의 잘못된 형식의 JSON 출력이 세션을 충돌시킬 수 있었고, 세션이 재개될 때마다 충돌이 반복되었습니다.

4308 4333 

4309비동기 hook 완료 알림은 기본적으로 억제됩니다. 보려면 `Ctrl+O`로 자세한 모드를 활성화하거나 `--verbose`로 Claude Code를 시작합니다.4334비동기 hook 완료 알림은 기본적으로 억제됩니다. 보려면 `Ctrl+O`로 자세한 모드를 활성화하거나 `--verbose`로 Claude Code를 시작합니다.


44572026-07-19T02:03:24.382Z [DEBUG] "Hook PostToolUse:Write (PostToolUse) success:\nhook-ran"44822026-07-19T02:03:24.382Z [DEBUG] "Hook PostToolUse:Write (PostToolUse) success:\nhook-ran"

4458```4483```

4459 4484 

4485느린 hook을 찾으려면 로그에서 소요 시간으로 끝나는 `Hooks:` 줄을 검색합니다. Claude Code v2.1.296 이상에서는 도구 이벤트, `UserPromptSubmit`, `SessionStart`, `Stop` 및 기타 여러 이벤트의 각 명령 hook이 무엇을 출력했는지와 관계없이 완료될 때 이 줄을 하나씩 남깁니다. 이 줄에는 이벤트 이름과 콜론으로 연결된 도구 이름 또는 hook이 일치시킨 기타 값, 이어서 대괄호 안의 hook 명령, 출처 플러그인(있는 경우), 실행 종료 방식, 소요 시간이 `Hooks: PostToolUse:Write [.claude/hooks/log-write.sh] finished with status 0 (31ms)`와 같이 표시됩니다. 실행은 `timed out after <N>ms`, `cancelled`, `moved to the background` 또는 `failed to start`로 끝날 수도 있습니다. `Notification`, `SessionEnd`, `PreCompact`와 같은 일부 이벤트에서는 명령 hook이 소요 시간 대신 `completed with status` 줄을 남깁니다.

4486 

4460더 세밀한 hook 일치 세부 정보를 보려면 `CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose`를 설정하여 hook matcher 수 및 쿼리 일치와 같은 추가 로그 줄을 확인합니다.4487더 세밀한 hook 일치 세부 정보를 보려면 `CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose`를 설정하여 hook matcher 수 및 쿼리 일치와 같은 추가 로그 줄을 확인합니다.

4461 4488 

4462hook이 발생하지 않음, 무한 Stop hook 루프 또는 구성 오류와 같은 일반적인 문제 해결은 가이드의 [제한 사항 및 문제 해결](/docs/ko/hooks-guide#limitations-and-troubleshooting)을 참조하세요. `/context`, `/doctor` 및 설정 우선순위를 다루는 더 광범위한 진단 안내는 [구성 디버그](/docs/ko/debug-your-config)를 참조하세요.4489hook이 발생하지 않음, 무한 Stop hook 루프 또는 구성 오류와 같은 일반적인 문제 해결은 가이드의 [제한 사항 및 문제 해결](/docs/ko/hooks-guide#limitations-and-troubleshooting)을 참조하세요. `/context`, `/doctor` 및 설정 우선순위를 다루는 더 광범위한 진단 안내는 [구성 디버그](/docs/ko/debug-your-config)를 참조하세요.

hooks-guide.md +19 −11

Details

664 664 

665`PreToolUse`에서 Claude Code는 각 `permissionDecision` 값을 다음과 같이 처리합니다:665`PreToolUse`에서 Claude Code는 각 `permissionDecision` 값을 다음과 같이 처리합니다:

666 666 

667* `"allow"`: 대화형 권한 프롬프트를 건너뜁니다. 엔터프라이즈 관리형 거부 목록을 포함한 거부 및 요청 규칙은 여전히 적용되며, [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구 및 조직이 `ask`로 설정한 [커넥터 도구](/docs/ko/mcp#organization-controls-on-connector-tools)에 대한 프롬프트도 마찬가지입니다(해당 설정이 Claude Code에 도달하는 세션에서).667* `"allow"`: 대화형 권한 프롬프트를 건너뜁니다. 엔터프라이즈 관리형 거부 목록을 포함한 거부 및 확인 규칙은 여전히 적용되며, [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기, [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구, 그리고 해당 설정이 Claude Code에 도달하는 세션에서 [조직이 `ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구에 대한 프롬프트도 마찬가지로 적용됩니다

668* `"deny"`: 도구 호출을 취소하고 이유를 Claude에 전송합니다668* `"deny"`: 도구 호출을 취소하고 이유를 Claude에 전송합니다

669* `"ask"`: 일반적으로 사용자에게 권한 프롬프트를 표시합니다669* `"ask"`: 일반적으로 사용자에게 권한 프롬프트를 표시합니다

670 670 


789 </Tab>789 </Tab>

790 790 

791 <Tab title="세션 종료 시 정리">791 <Tab title="세션 종료 시 정리">

792 `SessionEnd` 이벤트는 세션이 종료된 이유에 대한 matchers를 지원합니다. 이 hook은 일반 종료가 아닌 `/clear`를 실행할 때만 발생합니다:792 `SessionEnd` 이벤트는 세션이 종료된 이유에 대한 matchers를 지원합니다. 이 hook은 `/clear`를 실행할 때 설정되는 `clear` 이유에서만 발생하며 일반 종료에서는 발생하지 않습니다:

793 793 

794 ```json theme={null}794 ```json theme={null}

795 {795 {


1015 1015 

1016`PreToolUse` hooks는 모든 [권한 모드](/docs/ko/permission-modes)에서 권한 모드 확인 전에 발생하며, `dontAsk`를 포함합니다. `permissionDecision: "deny"`를 반환하는 hook은 `bypassPermissions` 모드 또는 `--dangerously-skip-permissions`에서도 도구를 차단합니다. 이를 통해 사용자가 권한 모드를 변경하여 우회할 수 없는 정책을 적용할 수 있습니다.1016`PreToolUse` hooks는 모든 [권한 모드](/docs/ko/permission-modes)에서 권한 모드 확인 전에 발생하며, `dontAsk`를 포함합니다. `permissionDecision: "deny"`를 반환하는 hook은 `bypassPermissions` 모드 또는 `--dangerously-skip-permissions`에서도 도구를 차단합니다. 이를 통해 사용자가 권한 모드를 변경하여 우회할 수 없는 정책을 적용할 수 있습니다.

1017 1017 

1018반대는 사실이 아닙니다: `"allow"`를 반환하는 hook은 설정의 거부 규칙을 우회하지 않으며, [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구의 프롬프트를 억제할 수 없거나 조직이 [커넥터 도구](/docs/ko/mcp#organization-controls-on-connector-tools)를 `ask`로 설정한 세션에서 해당 설정이 Claude Code에 도달하는 경우입니다. Hooks는 제한을 강화할 수 있지만 권한 규칙이 허용하는 것을 초과하여 완화할 수 없습니다.1018반대는 성립하지 않습니다. `"allow"`를 반환하는 훅은 설정의 거부 규칙을 우회하지 않으며, [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기, [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구, 또는 해당 설정이 Claude Code에 도달하는 세션에서 [조직이 `ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구에 대한 프롬프트를 억제할 수 없습니다. 설정 파일 및 플러그인의 `hooks/hooks.json`에 있는 훅은 제한을 강화할 수 있지만 권한 규칙이 허용하는 범위를 넘어 완화할 수는 없습니다.

1019 1019 

1020설치한 [mod](/docs/ko/plugins/mods/overview)가 `tool.check`를 처리하는 경우, 훅이 관리형 설정에 있지 않는 한 `PreToolUse` 훅이 차단한 호출을 승인할 수 있습니다. [훅으로 권한 확장](/docs/ko/permissions#extend-permissions-with-hooks)에서 어떤 규칙이 mod보다 우선하는지 나열합니다.1020설치한 [mod](/docs/ko/plugins/mods/overview)가 `tool.check`를 처리하는 경우, 훅이 관리형 설정에 있지 않는 한 `PreToolUse` 훅이 차단한 호출을 승인할 수 있습니다. [훅으로 권한 확장](/docs/ko/permissions#extend-permissions-with-hooks)에서 어떤 규칙이 mod보다 우선하는지 나열합니다.

1021 1021 


1038* 스크립트가 예기치 않게 0이 아닌 코드로 종료되었습니다. 샘플 JSON을 파이프하여 수동으로 테스트합니다:1038* 스크립트가 예기치 않게 0이 아닌 코드로 종료되었습니다. 샘플 JSON을 파이프하여 수동으로 테스트합니다:

1039 ```bash theme={null}1039 ```bash theme={null}

1040 echo '{"tool_name":"Bash","tool_input":{"command":"ls"}}' | ./my-hook.sh1040 echo '{"tool_name":"Bash","tool_input":{"command":"ls"}}' | ./my-hook.sh

1041 echo $? # 종료 코드 확인1041 echo $? # Check the exit code

1042 ```1042 ```

1043* "command not found"가 표시되면 절대 경로를 사용하거나 `${CLAUDE_PROJECT_DIR}`을 사용하여 스크립트를 참조합니다. 셸 인용을 완전히 피하려면 `"args": []`를 추가하여 [exec form](/docs/ko/hooks#exec-form-and-shell-form)으로 전환하면 셸 없이 스크립트를 직접 생성합니다1043* "command not found"가 표시되면 절대 경로를 사용하거나 `${CLAUDE_PROJECT_DIR}`을 사용하여 스크립트를 참조합니다. 셸 인용을 완전히 피하려면 `"args": []`를 추가하여 [exec form](/docs/ko/hooks#exec-form-and-shell-form)으로 전환하면 셸 없이 스크립트를 직접 생성합니다

1044* "jq: command not found"가 표시되면 `jq`를 설치하거나 JSON 구문 분석을 위해 Python/Node.js를 사용합니다1044* "jq: command not found"가 표시되면 `jq`를 설치하거나 JSON 구문 분석을 위해 Python/Node.js를 사용합니다


1070#!/bin/bash1070#!/bin/bash

1071INPUT=$(cat)1071INPUT=$(cat)

1072if [ "$(echo "$INPUT" | jq -r '.stop_hook_active')" = "true" ]; then1072if [ "$(echo "$INPUT" | jq -r '.stop_hook_active')" = "true" ]; then

1073 exit 0 # Claude가 중지되도록 허용1073 exit 0 # Allow Claude to stop

1074fi1074fi

1075# ... hook 로직의 나머지1075# ... rest of your hook logic

1076```1076```

1077 1077 

1078Hook이 수렴하기 위해 8번 이상의 반복이 필요한 경우 [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](/docs/ko/env-vars)으로 상한을 올립니다.1078Hook이 수렴하기 위해 8번 이상의 반복이 필요한 경우 [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](/docs/ko/env-vars)으로 상한을 올립니다.


1083 1083 

1084Hook이 유효한 JSON을 출력하지만 결정이 적용되지 않고 트랜스크립트에 오류가 나타나지 않습니다. 어느 원인이 적용되는지 확인합니다:1084Hook이 유효한 JSON을 출력하지만 결정이 적용되지 않고 트랜스크립트에 오류가 나타나지 않습니다. 어느 원인이 적용되는지 확인합니다:

1085 1085 

1086* **JSON 앞의 추가 출력**: 일반적으로 셸 프로필의 무조건적인 `echo`로 인해 다른 것이 먼저 stdout에 쓰므로 출력이 더 이상 `{`로 시작하지 않으며 Claude Code가 JSON으로 구문 분석하지 않습니다. 원인과 수정은 이 목록을 따릅니다.1086* **JSON 앞의 추가 출력**: 다른 무언가가 먼저 stdout에 쓰기 때문에(일반적으로 셸 프로필의 무조건적인 `echo`) 출력이 더 이상 `{`로 시작하지 않습니다. [JSON 앞의 셸 프로필 출력](#shell-profile-output-before-the-json)을 참조하십시오.

1087* **잘못된 수준의 필드**: 각 필드의 배치를 [JSON output](/docs/ko/hooks#json-output) 형식과 비교합니다. 예를 들어 `permissionDecision`은 최상위 수준이 아니라 `hookSpecificOutput` 내부에 속합니다.1087* **잘못된 수준의 필드**: 각 필드의 배치를 [JSON output](/docs/ko/hooks#json-output) 형식과 비교합니다. 예를 들어 `permissionDecision`은 최상위 수준이 아니라 `hookSpecificOutput` 내부에 속합니다. [잘못된 수준의 필드](#fields-at-the-wrong-level)를 참조하십시오.

1088 1088 

1089Claude Code가 셸 형식 명령 hook(`args` 없는 hook)을 실행할 때 macOS 및 Linux에서는 `sh -c`를 생성하고, Windows에서는 Git Bash를 생성하거나 Git Bash가 기본적으로 설치되지 않은 경우 PowerShell을 생성합니다. 이 셸은 비대화형이지만 Git Bash 및 일부 구성(예: `BASH_ENV`가 `~/.bashrc`를 가리킴)은 여전히 프로필을 소싱합니다. 해당 프로필에 무조건적인 `echo` 문이 포함되어 있으면 출력이 hook의 JSON에 앞에 붙습니다:1089<h4 id="shell-profile-output-before-the-json">

1090 JSON 앞의 셸 프로필 출력

1091</h4>

1092 

1093훅은 비대화형 셸에서 실행되지만, Git Bash 및 일부 구성(예: `BASH_ENV`가 `~/.bashrc`를 가리키는 경우)은 여전히 프로필을 소싱하며, 프로필이 출력하는 모든 내용이 훅의 JSON보다 먼저 stdout에 도달합니다:

1090 1094 

1091```text theme={null}1095```text theme={null}

1092Shell ready on arm641096Shell ready on arm64

1093{"decision": "block", "reason": "Not allowed"}1097{"decision": "block", "reason": "Not allowed"}

1094```1098```

1095 1099 

1096결합된 출력은 더 이상 `{`로 시작하지 않으므로 Claude Code는 stdout의 모든 것을 일반 텍스트로 취급하고 JSON을 무시합니다. 종료 0에서 트랜스크립트에 아무것도 보고되지 않습니다. 구문 분석 시도는 [디버그 로그](/docs/ko/hooks#debug-hooks)에만 기록됩니다. 이를 수정하려면 셸 프로필의 echo 문을 래핑하여 대화형 셸에서만 실행되도록 합니다:1100훅이 [비동기](/docs/ko/hooks#how-async-hooks-execute)가 아닌 한, Claude Code는 `{`로 시작하지 않는 출력을 일반 텍스트로 읽으므로 JSON이 무시됩니다. 훅이 0으로 종료되었기 때문에 트랜스크립트에도 오류가 표시되지 않습니다. 이 원인인지 확인하려면 `claude --debug`로 Claude Code를 시작하고 훅을 트리거한 다음 [디버그 로그](/docs/ko/hooks#debug-hooks)에서 `Hook output does not start with {`를 검색합니다. 이를 수정하려면 프로필의 `echo` 문을 래핑하여 대화형 셸에서만 실행되도록 합니다:

1097 1101 

1098```bash theme={null}1102```bash theme={null}

1099# ~/.zshrc 또는 ~/.bashrc에서1103# ~/.zshrc 또는 ~/.bashrc에서


1104 1108 

1105`$-` 변수는 셸 플래그를 포함하고 `i`는 대화형을 의미합니다. Hooks는 비대화형 셸에서 실행되므로 echo는 건너뜁니다.1109`$-` 변수는 셸 플래그를 포함하고 `i`는 대화형을 의미합니다. Hooks는 비대화형 셸에서 실행되므로 echo는 건너뜁니다.

1106 1110 

1111<h4 id="fields-at-the-wrong-level">

1112 잘못된 수준의 필드

1113</h4>

1114 

1107Hook이 `permissionDecision` 또는 `additionalContext`를 `hookSpecificOutput` 내부가 아닌 최상위 수준에서 반환할 때 JSON은 여전히 구문 분석되고 Claude Code는 잘못된 위치의 필드를 무시하고 오류를 보고하지 않습니다. 무시된 필드를 확인하려면 `claude --debug`로 Claude Code를 시작하고 [디버그 로그](/docs/ko/hooks#debug-hooks)에서 `Hook JSON output had unrecognized keys`를 검색합니다.1115Hook이 `permissionDecision` 또는 `additionalContext`를 `hookSpecificOutput` 내부가 아닌 최상위 수준에서 반환할 때 JSON은 여전히 구문 분석되고 Claude Code는 잘못된 위치의 필드를 무시하고 오류를 보고하지 않습니다. 무시된 필드를 확인하려면 `claude --debug`로 Claude Code를 시작하고 [디버그 로그](/docs/ko/hooks#debug-hooks)에서 `Hook JSON output had unrecognized keys`를 검색합니다.

1108 1116 

1109<h3 id="check-what-a-hook-did">1117<h3 id="check-what-a-hook-did">


1119 1127 

1120이벤트별 예외를 포함하여 특정 종료 코드와 stdout에 대한 결과를 확인하려면 참조의 [Exit code output](/docs/ko/hooks#exit-code-output)을 참조하십시오.1128이벤트별 예외를 포함하여 특정 종료 코드와 stdout에 대한 결과를 확인하려면 참조의 [Exit code output](/docs/ko/hooks#exit-code-output)을 참조하십시오.

1121 1129 

1122훅 종료 코드, stdout 및 stderr를 포함한 전체 실행 세부 정보는 디버그 로그에서 확인합니다. `claude --debug-file /tmp/claude.log`로 Claude Code를 시작하여 알려진 경로에 로그를 쓴 다음, 다른 터미널에서 `tail -f /tmp/claude.log`를 실행합니다. 해당 플래그 없이 시작한 경우 세션 중에 `/debug`를 실행하여 로깅을 활성화하고 로그 경로를 찾습니다.1130훅 종료 코드, stdout 및 stderr를 포함한 전체 실행 세부 정보는 [디버그 로그](/docs/ko/hooks#debug-hooks)에서 확인합니다. `claude --debug-file /tmp/claude.log`로 Claude Code를 시작하여 알려진 경로에 로그를 쓴 다음, 다른 터미널에서 `tail -f /tmp/claude.log`를 실행합니다. 해당 플래그 없이 시작한 경우 세션 중에 `/debug`를 실행하여 로깅을 활성화하고 로그 경로를 찾습니다.

1123 1131 

1124<h2 id="learn-more">1132<h2 id="learn-more">

1125 자세히 알아보기1133 자세히 알아보기

Details

22 22 

23| 단축키 | 설명 | 컨텍스트 |23| 단축키 | 설명 | 컨텍스트 |

24| :- | :- | :- |24| :- | :- | :- |

25| `Ctrl+C` | 중단 또는 입력 지우기 | 실행 중인 작업을 중단합니다. 실행 중인 작업이 없으면 첫 번째 누름은 프롬프트 입력을 지우고 두 번째 누름은 Claude Code를 종료합니다 |25| `Ctrl+C` | 중단 또는 입력 지우기 | 실행 중인 작업을 중단합니다. 실행 중인 작업이 없으면 첫 번째 누름은 프롬프트 입력을 지우고 두 번째 누름은 Claude Code를 종료합니다. 프롬프트가 아직 비어 있는 동안 `Up`을 누르면 지운 초안을 다시 불러올 수 있으며, 이를 위해서는 Claude Code v2.1.288 이상이 필요합니다 |

26| `Ctrl+X Ctrl+K` | 이 세션의 모든 실행 중인 [백그라운드 서브에이전트](/docs/ko/sub-agents#run-subagents-in-foreground-or-background)를 중지하고 나머지 세션에 대해 [아티팩트 자동 회신](/docs/ko/artifacts#let-claude-reply-to-comments-on-its-own)을 끕니다. 3초 이내에 두 번 누르면 확인됩니다. 백그라운드 서브에이전트의 권한 프롬프트가 열려 있는 동안에도 누를 수 있습니다 | 서브에이전트 제어 |26| `Ctrl+X Ctrl+K` | 이 세션의 모든 실행 중인 [백그라운드 서브에이전트](/docs/ko/sub-agents#run-subagents-in-foreground-or-background)를 중지하고 나머지 세션에 대해 [아티팩트 자동 회신](/docs/ko/artifacts#let-claude-reply-to-comments-on-its-own)을 끕니다. 3초 이내에 두 번 누르면 확인됩니다. 백그라운드 서브에이전트의 권한 프롬프트가 열려 있는 동안에도 누를 수 있습니다 | 서브에이전트 제어 |

27| `Ctrl+D` | Claude Code 세션 종료 | 첫 번째 누름은 확인 힌트를 표시하고 800ms 이내에 두 번째 누름은 종료합니다. 프롬프트에 텍스트가 있을 때 `Ctrl+D`는 커서 뒤의 문자를 삭제합니다 |27| `Ctrl+D` | Claude Code 세션 종료 | 첫 번째 누름은 확인 힌트를 표시하고 800ms 이내에 두 번째 누름은 종료합니다. 프롬프트에 텍스트가 있을 때 `Ctrl+D`는 커서 뒤의 문자를 삭제합니다 |

28| `Ctrl+G` 또는 `Ctrl+X Ctrl+E` | 기본 텍스트 편집기에서 열기 | 기본 텍스트 편집기에서 프롬프트 또는 사용자 정의 응답을 편집합니다. `Ctrl+X Ctrl+E`는 readline 기본 바인딩입니다. `/config`에서 **Show last response in external editor**를 켜면 Claude의 이전 회신을 `#`-주석 처리된 컨텍스트로 프롬프트 위에 추가합니다. Claude Code는 저장할 때 주석 블록을 제거합니다 |28| `Ctrl+G` 또는 `Ctrl+X Ctrl+E` | 기본 텍스트 편집기에서 열기 | 기본 텍스트 편집기에서 프롬프트 또는 사용자 정의 응답을 편집합니다. `Ctrl+X Ctrl+E`는 readline 기본 바인딩입니다. `/config`에서 **Show last response in external editor**를 켜면 Claude의 이전 회신을 `#`-주석 처리된 컨텍스트로 프롬프트 위에 추가합니다. Claude Code는 저장할 때 주석 블록을 제거합니다 |


442 442 

443Claude Code는 입력 상자가 비어 있고 큐에 추가된 다른 항목이 없을 때만 큐에 추가된 셸 명령을 취소하며, 이때 입력 상자를 셸 모드로 전환합니다. 그 외의 경우에는 이들을 큐에 남겨 두고 `!` 접두사와 함께 나열하며, 턴이 끝난 후 실행합니다.443Claude Code는 입력 상자가 비어 있고 큐에 추가된 다른 항목이 없을 때만 큐에 추가된 셸 명령을 취소하며, 이때 입력 상자를 셸 모드로 전환합니다. 그 외의 경우에는 이들을 큐에 남겨 두고 `!` 접두사와 함께 나열하며, 턴이 끝난 후 실행합니다.

444 444 

445`←`가 [세션을 백그라운드로 전환하기 위해 대기하는](/docs/ko/agent-view#switch-sessions-without-leaving-the-terminal) 동안 큐에 추가한 텍스트를 취소하면, 텍스트는 입력 상자에 남고 Claude Code는 전환을 취소합니다. 세션이 이동하는 순간에 취소하면 텍스트는 포그라운드 화면과 함께 사라지며, 전송되지 않습니다. 취소한 각 메시지는 [명령 기록](#command-history)에 개별 항목으로 저장됩니다. 메시지를 복구하려면 세션을 다시 열고 큐에 아무것도 없는 빈 프롬프트에서 `Up`을 누르세요.

446 

445<h2 id="prompt-suggestions">447<h2 id="prompt-suggestions">

446 프롬프트 제안448 프롬프트 제안

447</h2>449</h2>

Details

299 299 

300[Slack의 Claude Code](/docs/ko/slack) 및 [클라우드 세션](/docs/ko/claude-code-on-the-web)은 게이트웨이 배포의 일부가 아닙니다. 클라우드 세션의 환경 구성에서 설정된 게이트웨이 변수는 적용되지 않습니다. 트래픽이 게이트웨이에 남아 있어야 한다면, 해당 사용자에 대해 이러한 사용 환경을 활성화하지 마세요.300[Slack의 Claude Code](/docs/ko/slack) 및 [클라우드 세션](/docs/ko/claude-code-on-the-web)은 게이트웨이 배포의 일부가 아닙니다. 클라우드 세션의 환경 구성에서 설정된 게이트웨이 변수는 적용되지 않습니다. 트래픽이 게이트웨이에 남아 있어야 한다면, 해당 사용자에 대해 이러한 사용 환경을 활성화하지 마세요.

301 301 

302[Remote Control](/docs/ko/remote-control) 및 [음성 받아쓰기](/docs/ko/voice-dictation)는 모두 claude.ai 신원에 의존합니다: Remote Control은 라이브 세션을 계정과 쌍으로 만들고, 음성 받아쓰기는 claude.ai 전사 엔드포인트에 도달합니다. `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` 또는 `apiKeyHelper`가 활성화되어 있는 동안은 사용할 수 없습니다. v2.1.196부터 Remote Control은 `ANTHROPIC_BASE_URL`이 Anthropic이 아닌 호스트를 가리킬 때도 비활성화되므로, claude.ai로 로그인하는 것만으로는 충분하지 않습니다. v2.1.196 이전에는 Anthropic이 아닌 기본 URL이 Remote Control을 차단하지 않았습니다.302[Remote Control](/docs/ko/remote-control) 및 [음성 받아쓰기](/docs/ko/voice-dictation)는 모두 claude.ai 신원에 의존합니다: Remote Control은 라이브 세션을 계정과 쌍으로 만들고, 음성 받아쓰기는 claude.ai 전사 엔드포인트에 도달합니다. `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` 또는 `apiKeyHelper`가 활성화되어 있는 동안은 사용할 수 없습니다. Remote Control은 `ANTHROPIC_BASE_URL`이 Anthropic이 아닌 호스트를 가리킬 때도 비활성화되므로, claude.ai로 로그인하는 것만으로는 충분하지 않습니다.

303 303 

304기능을 복원하려면 claude.ai로 로그인하고 확인하는 게이트웨이 변수를 설정 해제합니다. Remote Control 섹션의 `claude doctor`는 현재 Remote Control을 차단하는 것을 명시합니다.304기능을 복원하려면 claude.ai로 로그인하고 확인하는 게이트웨이 변수를 설정 해제합니다. Remote Control 섹션의 `claude doctor`는 현재 Remote Control을 차단하는 것을 명시합니다.

305 305 

mcp.md +3 −3

Details

283 프로젝트 서버 승인 및 워크스페이스 신뢰283 프로젝트 서버 승인 및 워크스페이스 신뢰

284</h4>284</h4>

285 285 

286v2.1.196부터 `claude mcp list` 및 `claude mcp get`은 `.mcp.json` 승인을 `claude`를 실행하고 워크스페이스 신뢰 대화 상자를 수락하여 워크스페이스를 신뢰할 때까지 저장소에 체크인되지 않은 설정 파일에서만 읽습니다. 복제된 저장소는 자신의 서버를 승인할 수 없습니다: 프로젝트의 `.claude/settings.json`에 커밋된 [`enableAllProjectMcpServers`](/docs/ko/settings-reference#enableallprojectmcpservers) 또는 [`enabledMcpjsonServers`](/docs/ko/settings-reference#enabledmcpjsonservers)는 신뢰할 수 없는 폴더에서 무시되며, 서버는 연결되고 상태 확인되는 대신 `⏸ Pending approval`으로 유지됩니다.286`claude mcp list` 및 `claude mcp get`은 `claude`를 실행하고 워크스페이스 신뢰 대화 상자를 수락하여 워크스페이스를 신뢰할 때까지 `.mcp.json` 승인을 저장소에 체크인되지 않은 설정 파일에서만 읽습니다. 복제된 저장소는 자신의 서버를 승인할 수 없습니다: 프로젝트의 `.claude/settings.json`에 커밋된 [`enableAllProjectMcpServers`](/docs/ko/settings-reference#enableallprojectmcpservers) 또는 [`enabledMcpjsonServers`](/docs/ko/settings-reference#enabledmcpjsonservers)는 신뢰할 수 없는 폴더에서 무시되며, 서버는 연결되고 상태 확인되는 대신 `⏸ Pending approval`으로 유지됩니다.

287 287 

288이러한 소스의 승인은 신뢰할 수 없는 폴더에서도 적용됩니다:288이러한 소스의 승인은 신뢰할 수 없는 폴더에서도 적용됩니다:

289 289 


859 859 

860알림은 각 서버를 한 번 발표하고 해당 서버가 연결되어 다시 로그인이 필요할 때까지 이후 시작 시 계산에서 제외합니다. `/mcp`는 여전히 로그인이 필요한 모든 서버를 나열합니다.860알림은 각 서버를 한 번 발표하고 해당 서버가 연결되어 다시 로그인이 필요할 때까지 이후 시작 시 계산에서 제외합니다. `/mcp`는 여전히 로그인이 필요한 모든 서버를 나열합니다.

861 861 

862비대화형 모드에는 `/mcp` 패널이 없으므로 Claude Code는 OAuth 흐름을 실행할 수 없습니다. v2.1.196부터, 구성된 서버가 [도구 검색](#scale-with-mcp-tool-search)이 활성화된 `claude -p` 또는 Agent SDK 실행 중에 인증이 필요할 때(기본값), Claude Code는 Claude에 서버의 도구가 인증될 때까지 사용 불가능함을 알립니다. Claude는 서버가 구성되지 않은 것처럼 응답하는 대신 로그인이 필요한 서버의 이름을 지정할 수 있습니다. `/mcp` 또는 `claude mcp login <name>`을 사용하여 대화형 세션에서 로그인을 완료하세요.862비대화형 모드에는 `/mcp` 패널이 없으므로 Claude Code는 OAuth 흐름을 실행할 수 없습니다. 구성된 서버가 [도구 검색](#scale-with-mcp-tool-search)이 활성화된(기본값) `claude -p` 또는 Agent SDK 실행 중에 인증이 필요할 때, Claude Code는 Claude에 서버의 도구가 인증될 때까지 사용 불가능함을 알립니다. 그러면 Claude는 로그인이 필요한 서버의 이름을 지정할 수 있습니다. `/mcp` 또는 `claude mcp login <name>`을 사용하여 대화형 세션에서 로그인을 완료하세요.

863 863 

864서버에 대해 `headers.Authorization`을 구성했고 서버가 해당 헤더를 거부하면, Claude Code는 OAuth로 폴백하는 대신 연결이 실패했다고 보고합니다. 토큰이 MCP 엔드포인트에 유효한지 확인하거나 헤더를 제거하여 OAuth 흐름을 사용하세요.864서버에 대해 `headers.Authorization`을 구성했고 서버가 해당 헤더를 거부하면, Claude Code는 OAuth로 폴백하는 대신 연결이 실패했다고 보고합니다. 토큰이 MCP 엔드포인트에 유효한지 확인하거나 헤더를 제거하여 OAuth 흐름을 사용하세요.

865 865 


1048 1048 

1049`oauth.scopes`는 `authServerMetadataUrl`과 서버가 `/.well-known`에서 검색하는 범위 모두보다 우선합니다. MCP 서버가 요청된 범위 집합을 결정하도록 하려면 설정하지 않은 상태로 두세요.1049`oauth.scopes`는 `authServerMetadataUrl`과 서버가 `/.well-known`에서 검색하는 범위 모두보다 우선합니다. MCP 서버가 요청된 범위 집합을 결정하도록 하려면 설정하지 않은 상태로 두세요.

1050 1050 

1051v2.1.196부터, `oauth.scopes`가 설정되지 않으면 Claude Code는 서버의 `WWW-Authenticate` 헤더 또는 보호된 리소스 메타데이터에서 제공하는 범위를 요청하고, 둘 다 제공하지 않을 때 `scope` 매개변수를 보내지 않습니다. 더 이상 자동으로 검색된 인증 서버 메타데이터에서 전체 `scopes_supported` 카탈로그를 요청하지 않습니다. 해당 카탈로그를 요청하면 관리자 전용 또는 템플릿 범위를 광고하는 ID 공급자가 `invalid_scope` 오류로 인증 요청을 거부했습니다. 구성된 `authServerMetadataUrl`에서 가져온 메타데이터는 여전히 `scopes_supported`를 요청된 범위로 제공합니다.1051`oauth.scopes`가 설정되지 않으면 Claude Code는 자동으로 검색된 인증 서버 메타데이터에서 전체 `scopes_supported` 카탈로그를 요청하지 않습니다. 구성된 `authServerMetadataUrl`에서 가져온 메타데이터는 여전히 `scopes_supported`를 요청된 범위로 제공합니다.

1052 1052 

1053인증 서버가 `scopes_supported`에서 `offline_access`를 광고하면, Claude Code는 새로운 브라우저 로그인 없이 액세스 토큰을 새로 고칠 수 있도록 고정된 범위에 추가합니다.1053인증 서버가 `scopes_supported`에서 `offline_access`를 광고하면, Claude Code는 새로운 브라우저 로그인 없이 액세스 토큰을 새로 고칠 수 있도록 고정된 범위에 추가합니다.

1054 1054 

Details

232| - | - | - |232| - | - | - |

233| `user_prompt` | 프롬프트 텍스트. 게이트가 설정되지 않으면 값은 `<REDACTED>`입니다 | `OTEL_LOG_USER_PROMPTS` |233| `user_prompt` | 프롬프트 텍스트. 게이트가 설정되지 않으면 값은 `<REDACTED>`입니다 | `OTEL_LOG_USER_PROMPTS` |

234| `user_prompt_length` | 프롬프트 길이(문자) | |234| `user_prompt_length` | 프롬프트 길이(문자) | |

235| `interaction.sequence` | 상호작용의 1 기반 카운터, [이벤트 시퀀스](#event-correlation-attributes)에 설명된 대로 Claude Code 프로세스당 계산되며 세션당이 아님 | |235| `interaction.sequence` | 상호작용의 1 기반 카운터, [`event.sequence`](#event-correlation-attributes)에 설명된 대로 Claude Code 프로세스당 계산되며 세션당이 아님 | |

236| `parent.source` | 범위가 추적 부모를 얻은 방법: 인바운드 `TRACEPARENT`에서 부모가 될 때 `env`, 자신의 추적을 시작할 때 `none`. Claude Code v2.1.268 이상 필요 | |236| `parent.source` | 범위가 추적 부모를 얻은 방법: 인바운드 `TRACEPARENT`에서 부모가 될 때 `env`, 자신의 추적을 시작할 때 `none`. Claude Code v2.1.268 이상 필요 | |

237| `interaction.duration_ms` | 턴의 벽시계 지속 시간 | |237| `interaction.duration_ms` | 턴의 벽시계 지속 시간 | |

238 238 


278| 속성 | 설명 | 게이트 |278| 속성 | 설명 | 게이트 |

279| - | - | - |279| - | - | - |

280| `tool_name` | 도구 이름 | |280| `tool_name` | 도구 이름 | |

281| `tool_name_safe` | 사용자 선택 이름을 포함하지 않는 `tool_name` 형식. 기본 제공 도구 이름은 그대로 전달됩니다. MCP 도구 이름은 `mcp_other`로 나타나며, `browser_*`라는 playwright 도구와 같이 고정된 모양과 일치하는 도구 이름은 그대로 전달됩니다. Claude Code v2.1.268 이상 필요 | |281| `tool_name_safe` | 사용자 선택 이름을 포함하지 않는 `tool_name` 형식. 기본 제공 도구 이름은 그대로 전달됩니다. MCP 도구 이름은 `mcp_other`로 나타나며, `browser_*`라는 `playwright` 도구와 같이 몇 가지 고정된 모양과 일치하는 도구 이름은 그대로 전달됩니다. Claude Code v2.1.268 이상 필요 | |

282| `bash_command_class` | Bash 도구의 경우: 고정 목록의 명령 첫 번째 프로그램 범주, `vcs` 또는 `package_manager`와 같음. 목록 외부의 프로그램의 경우 `other`, 줄을 구문 분석할 수 없을 때 `unparsed`. Claude Code v2.1.268 이상 필요 | |282| `bash_command_class` | Bash 도구의 경우: 고정 목록의 명령 첫 번째 프로그램 범주, `vcs` 또는 `package_manager`와 같음. 목록 외부의 프로그램의 경우 `other`, 줄을 구문 분석할 수 없을 때 `unparsed`. Claude Code v2.1.268 이상 필요 | |

283| `bash_argv0` | Bash 도구의 경우: 동일한 고정 목록에 있을 때 명령의 첫 번째 프로그램, `git` 또는 `npm`과 같음. 목록 외부의 모든 프로그램의 경우 `other`. Claude Code v2.1.268 이상 필요 | |283| `bash_argv0` | Bash 도구의 경우: 동일한 고정 목록에 있을 때 명령의 첫 번째 프로그램, `git` 또는 `npm`과 같음. 목록 외부의 모든 프로그램의 경우 `other`. Claude Code v2.1.268 이상 필요 | |

284| `duration_ms` | 권한 대기 및 실행을 포함한 벽시계 지속 시간 | |284| `duration_ms` | 권한 대기 및 실행을 포함한 벽시계 지속 시간 | |


470 값을 따옴표로 감싸면 공백이 이스케이프되지 않습니다. 예를 들어 `org.name="My Company"`는 `My Company`가 아닌 따옴표를 포함한 리터럴 값 `"My Company"`를 생성합니다.470 값을 따옴표로 감싸면 공백이 이스케이프되지 않습니다. 예를 들어 `org.name="My Company"`는 `My Company`가 아닌 따옴표를 포함한 리터럴 값 `"My Company"`를 생성합니다.

471</Warning>471</Warning>

472 472 

473<h3 id="attribute-telemetry-to-desktop-ssh-sessions">

474 Desktop SSH 세션에 텔레메트리 귀속

475</h3>

476 

477[Desktop SSH 세션](/docs/ko/desktop#ssh-sessions)이 어느 원격 머신에서 실행되었는지 확인하려면 사용자 정의 속성에 각 머신의 이름을 지정하세요. 메트릭과 이벤트에는 세션이 실행된 머신의 이름이 포함되지 않습니다.

478 

479각 원격 머신에서 [세션이 읽는 관리형 설정 파일](/docs/ko/desktop#managed-settings)의, 텔레메트리를 켜는 `env` 블록에 [`OTEL_RESOURCE_ATTRIBUTES`](#multi-team-organization-support)를 추가하세요. 각 머신의 파일에 이름을 직접 작성합니다. Claude Code는 값을 확장하지 않으므로 `host.name=$(hostname)`은 해당 문자 그대로 전달됩니다.

480 

481다음 예제는 머신 이름을 `build-7`로 지정합니다:

482 

483```json theme={null}

484{

485 "env": {

486 "CLAUDE_CODE_ENABLE_TELEMETRY": "1",

487 "OTEL_METRICS_EXPORTER": "otlp",

488 "OTEL_LOGS_EXPORTER": "otlp",

489 "OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",

490 "OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.example.com:4317",

491 "OTEL_RESOURCE_ATTRIBUTES": "host.name=build-7"

492 }

493}

494```

495 

496다른 곳에서 이 변수를 설정하지 않으면 `host.name`은 Desktop SSH 세션과 해당 머신의 CLI에서 리소스 블록에 도착합니다. 사용자 정의 속성이 나타나는 다른 위치는 [다중 팀 조직 지원](#multi-team-organization-support)을 참조하세요.

497 

498이름이 도착하지 않으면 다음 원인 중 하나에 해당하는지 확인하세요:

499 

500* **Desktop을 실행하는 컴퓨터에 설정한 경우**: Desktop은 해당 컴퓨터에서 설정한 값을 SSH 세션에 전달하지 않습니다

501* **로그인 파일에서 export한 경우**: `/etc/profile`과 같은 파일은 로그인 셸만 읽습니다. 해당 파일에서 `export`한 값은 로그인 셸에서 시작한 Claude Code에는 전달됩니다. Desktop은 로그인 셸을 통해 Claude Code를 시작하지 않으므로 Desktop SSH 세션에는 전달되지 않습니다.

502* **값 안에 공백이 있는 경우**: 이 경우 Claude Code는 어떤 키도 이벤트나 데이터포인트에 복사하지 않으며 오류도 보고하지 않습니다. [값에서 공백을 제거하세요](#multi-team-organization-support).

503* **다른 곳에서 이미 변수를 설정한 경우**: 데스크톱 앱이 시작하는 세션에서는 실행 환경에 이미 설정된 변수가 [설정 파일보다 우선합니다](/docs/ko/settings-reference#how-env-values-interact-with-your-shell). [디버그 로그](/docs/ko/debug-your-config)에는 무시된 각 변수의 이름이 표시됩니다. 타사 Desktop 배포가 제공하는 환경에서 [OTLP 엔드포인트를 지정하는](#how-managed-settings-lock-the-otlp-destination) 경우, 해당 환경에는 Desktop 자체의 `OTEL_RESOURCE_ATTRIBUTES`가 포함됩니다.

504 

473<h3 id="example-configurations">505<h3 id="example-configurations">

474 예제 구성506 예제 구성

475</h3>507</h3>


1746 1778 

1747모든 메트릭 및 이벤트는 다음 리소스 속성과 함께 내보내집니다:1779모든 메트릭 및 이벤트는 다음 리소스 속성과 함께 내보내집니다:

1748 1780 

1749* `service.name`: 터미널 세션의 경우 `claude-code`, [Claude Desktop 앱](/docs/ko/desktop)의 Code 탭에서 시작된 세션의 경우 `claude-code-desktop`1781* `service.name`: 터미널 세션의 경우 `claude-code`, [Claude Desktop 앱](/docs/ko/desktop)의 Code 탭에서 시작된 로컬 세션의 경우 `claude-code-desktop`

1750* `service.version`: 현재 Claude Code 버전, 또는 Code 탭 세션의 경우 Desktop 앱 버전1782* `service.version`: 현재 Claude Code 버전, 또는 로컬 Code 탭 세션의 경우 Desktop 앱 버전

1751* `os.type`: 운영 체제 유형 (예: `linux`, `darwin`, `windows`)1783* `os.type`: 운영 체제 유형 (예: `linux`, `darwin`, `windows`)

1752* `os.version`: 운영 체제 버전 문자열1784* `os.version`: 운영 체제 버전 문자열

1753* `host.arch`: 호스트 아키텍처 (예: `amd64`, `arm64`)1785* `host.arch`: 호스트 아키텍처 (예: `amd64`, `arm64`)

1754* `wsl.version`: WSL 버전 번호 (Windows Subsystem for Linux에서 실행할 때만 표시)1786* `wsl.version`: WSL 버전 번호 (Windows Subsystem for Linux에서 실행할 때만 표시)

1755* 미터 이름: `com.anthropic.claude_code`1787* 미터 이름: `com.anthropic.claude_code`

1756 1788 

1757수집기 파이프라인 또는 대시보드에서 `service.name = claude-code`로 필터링하는 경우, Code 탭 세션의 원격 분석도 캡처하기 위해 필터에 `claude-code-desktop`을 추가하십시오.1789수집기 파이프라인 또는 대시보드에서 `service.name = claude-code`로 필터링하는 경우, 로컬 Code 탭 세션의 텔레메트리도 캡처하기 위해 필터에 `claude-code-desktop`을 추가하십시오.

1758 1790 

1759<h2 id="roi-measurement-resources">1791<h2 id="roi-measurement-resources">

1760 ROI 측정 리소스1792 ROI 측정 리소스

Details

183 셸이 아닌 설정에서 네트워크 변수 설정183 셸이 아닌 설정에서 네트워크 변수 설정

184</h3>184</h3>

185 185 

186감시자는 모든 터미널에서 공유하는 하나의 프로세스입니다. 이는 먼저 시작하는 셸의 환경을 상속하며, OS에 설치된 감시자는 셸 환경을 전혀 받지 않습니다. 프록시, CA 경로 또는 mTLS 변수를 셸에서만 내보내면 해당 셸이 감시자를 콜드 스타트했을 때는 백그라운드 에이전트에 도달하지만, 다른 셸이 시작했을 때는 조용히 도달하지 않습니다.186감시자는 모든 터미널에서 공유하는 하나의 프로세스입니다. 이는 먼저 시작하는 셸의 환경을 상속합니다. 프록시, CA 경로 또는 mTLS 변수를 셸에서만 내보내면 해당 셸이 감시자를 콜드 스타트했을 때는 백그라운드 에이전트에 도달하지만, 다른 셸이 시작했을 때는 조용히 도달하지 않습니다.

187 187 

188대신 `~/.claude/settings.json`의 `env` 블록 또는 [관리되는 설정](/docs/ko/settings)에 동일한 변수를 입력하십시오. 이 페이지의 모든 변수를 여기에 설정할 수 있으며, 설정은 모든 머신의 모든 백그라운드 세션에 도달하는 유일한 구성입니다.188대신 `~/.claude/settings.json`의 `env` 블록 또는 [관리되는 설정](/docs/ko/settings)에 동일한 변수를 입력하십시오. 이 페이지의 모든 변수를 여기에 설정할 수 있으며, 설정은 모든 머신의 모든 백그라운드 세션에 도달하는 유일한 구성입니다.

189 189 


196[`processWrapper`](/docs/ko/settings-reference#processwrapper) 설정을 감시자, 그 워커 및 [런처가 포함하는 항목](/docs/ko/corporate-launcher#what-the-launcher-covers)에 나열된 다른 백그라운드 프로세스 앞에 런처를 붙이도록 설정하십시오. 동등한 [`CLAUDE_CODE_PROCESS_WRAPPER`](/docs/ko/env-vars) 환경 변수는 둘 다 설정되었을 때 우선하며, 동일한 규칙이 적용됩니다. 셸 내보내기가 아닌 관리되는 설정 또는 `~/.claude/settings.json`을 통해 전달하십시오. [기업 런처 뒤에서 Claude Code 실행](/docs/ko/corporate-launcher)은 런처가 만족해야 하는 계약, 도달하는 항목과 도달하지 않는 항목, 그리고 배포 방법을 다룹니다.196[`processWrapper`](/docs/ko/settings-reference#processwrapper) 설정을 감시자, 그 워커 및 [런처가 포함하는 항목](/docs/ko/corporate-launcher#what-the-launcher-covers)에 나열된 다른 백그라운드 프로세스 앞에 런처를 붙이도록 설정하십시오. 동등한 [`CLAUDE_CODE_PROCESS_WRAPPER`](/docs/ko/env-vars) 환경 변수는 둘 다 설정되었을 때 우선하며, 동일한 규칙이 적용됩니다. 셸 내보내기가 아닌 관리되는 설정 또는 `~/.claude/settings.json`을 통해 전달하십시오. [기업 런처 뒤에서 Claude Code 실행](/docs/ko/corporate-launcher)은 런처가 만족해야 하는 계약, 도달하는 항목과 도달하지 않는 항목, 그리고 배포 방법을 다룹니다.

197 197 

198<Note>198<Note>

199 이미 실행 중인 감시자는 시작할 때 사용한 시작 구성을 유지합니다. 런처 설정을 배포한 후 [`claude daemon stop --any`](/docs/ko/agent-view#the-supervisor-process)를 실행하여 다음 `claude agents` 또는 `--bg`가 이를 준수하는 감시자를 시작하도록 하십시오. 설치된 서비스는 `--any` 없이 `claude daemon stop`을 사용합니다.199 이미 실행 중인 감시자는 시작할 때 사용한 시작 구성을 유지합니다. 런처 설정을 배포한 후 [`claude daemon stop --any`](/docs/ko/agent-view#the-supervisor-process)를 실행하여 다음 `claude agents` 또는 `--bg`가 이를 준수하는 감시자를 시작하도록 하십시오.

200</Note>200</Note>

201 201 

202<h2 id="streaming-idle-watchdogs">202<h2 id="streaming-idle-watchdogs">

Details

22| [`acceptEdits`](#auto-approve-file-edits-with-acceptedits-mode) | 읽기, 파일 편집, 일반적인 파일시스템 명령어 (`mkdir`, `touch`, `mv`, `cp` 등) | 검토 중인 코드 반복 작업 |22| [`acceptEdits`](#auto-approve-file-edits-with-acceptedits-mode) | 읽기, 파일 편집, 일반적인 파일시스템 명령어 (`mkdir`, `touch`, `mv`, `cp` 등) | 검토 중인 코드 반복 작업 |

23| [`plan`](#analyze-before-you-edit-with-plan-mode) | 읽기, 그리고 [자동 모드](#eliminate-prompts-with-auto-mode)를 사용할 수 있을 때 분류기 승인 명령어 | 변경 전 코드베이스 탐색 |23| [`plan`](#analyze-before-you-edit-with-plan-mode) | 읽기, 그리고 [자동 모드](#eliminate-prompts-with-auto-mode)를 사용할 수 있을 때 분류기 승인 명령어 | 변경 전 코드베이스 탐색 |

24| [`auto`](#eliminate-prompts-with-auto-mode) | 백그라운드 안전 검사를 포함한 모든 작업 | 장시간 작업, 프롬프트 피로 감소 |24| [`auto`](#eliminate-prompts-with-auto-mode) | 백그라운드 안전 검사를 포함한 모든 작업 | 장시간 작업, 프롬프트 피로 감소 |

25| [`dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode) | 읽기 및 사전 승인된 도구; 프롬프트를 표시할 모든 작업은 거부됨 | 잠금된 CI 및 스크립트 |25| [`dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode) | 작업 디렉터리 내부의 파일 읽기 및 사전 승인된 도구; 프롬프트를 표시할 모든 작업은 거부됨 | 잠금된 CI 및 스크립트 |

26| [`bypassPermissions`](#skip-all-checks-with-bypasspermissions-mode) | 모든 작업 | 격리된 컨테이너 및 VM만 해당 |26| [`bypassPermissions`](#skip-all-checks-with-bypasspermissions-mode) | 모든 작업 | 격리된 컨테이너 및 VM만 해당 |

27 27 

28모든 작업을 검토하는 모드는 CLI에서 **Manual**이라고 명명되며, `claude --help`에서, VS Code 및 JetBrains 확장 프로그램에서, 그리고 데스크톱 앱에서도 **Manual**이라고 명명됩니다. 구성 값은 `default`이며, 이는 훅 및 SDK 통합이 사용하는 값입니다. CLI는 값을 입력하는 모든 곳에서 `manual`을 별칭으로 허용합니다. 예를 들어 `claude --permission-mode manual` 또는 `"defaultMode": "manual"`입니다.28모든 작업을 검토하는 모드는 CLI에서 **Manual**이라고 명명되며, `claude --help`에서, VS Code 및 JetBrains 확장 프로그램에서, 그리고 데스크톱 앱에서도 **Manual**이라고 명명됩니다. 구성 값은 `default`이며, 이는 훅 및 SDK 통합이 사용하는 값입니다. CLI는 값을 입력하는 모든 곳에서 `manual`을 별칭으로 허용합니다. 예를 들어 `claude --permission-mode manual` 또는 `"defaultMode": "manual"`입니다.


38Claude Code는 `bypassPermissions`를 포함한 어떤 모드에서도 다음을 자동 승인하지 않습니다. 각 항목은 각 모드에서 대신 어떤 일이 발생하는지를 설명하는 섹션으로 연결됩니다:38Claude Code는 `bypassPermissions`를 포함한 어떤 모드에서도 다음을 자동 승인하지 않습니다. 각 항목은 각 모드에서 대신 어떤 일이 발생하는지를 설명하는 섹션으로 연결됩니다:

39 39 

40* 명시적 [요청 규칙](/docs/ko/permissions#manage-permissions)과 일치하는 도구40* 명시적 [요청 규칙](/docs/ko/permissions#manage-permissions)과 일치하는 도구

41* 조직이 [요청으로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구, 해당 설정이 Claude Code에 도달하는 세션에서41* 조직이 [`ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구, 해당 설정이 Claude Code에 도달하는 세션에서

42* 사용자 상호작용이 필요한 도구: 기본 제공 `AskUserQuestion` 도구 및 [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구42* 사용자 상호작용이 필요한 도구: 기본 제공 `AskUserQuestion` 도구 및 [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구

43* [중요 경로](#critical-paths)를 대상으로 하는 `rm` 및 `rmdir` 제거, 어떤 허용 규칙이나 `PreToolUse` hook `"allow"`도 승인하지 않음43* [중요 경로](#critical-paths)를 대상으로 하는 `rm` 및 `rmdir` 제거, 어떤 허용 규칙이나 `PreToolUse` hook `"allow"`도 승인하지 않음

44* [세션 간 메시징 보안 조치](#skip-all-checks-with-bypasspermissions-mode)44* [세션 간 메시징 보안 조치](#skip-all-checks-with-bypasspermissions-mode)


466 작업 디렉터리 외부의 첫 번째 읽기466 작업 디렉터리 외부의 첫 번째 읽기

467</h3>467</h3>

468 468 

469[`permissions.blockReadsOutsideWorkingDirectories`](/docs/ko/settings-reference#permissions-blockreadsoutsideworkingdirectories)가 꺼져 있는 동안 파일 읽기는 자동 모드에서 프롬프트 없이 실행되며, [작업 디렉터리](/docs/ko/permissions#working-directories) 외부의 읽기를 포함합니다. Claude가 처음으로 Read, Grep 또는 Glob 도구를 이들 외부의 경로에 사용할 때 Claude Code는 해당 읽기를 허용할지 묻습니다.469[`permissions.blockReadsOutsideWorkingDirectories`](/docs/ko/settings-reference#permissions-blockreadsoutsideworkingdirectories)가 꺼져 있는 동안 [네트워크 경로에서의 읽기](/docs/ko/permissions#network-paths)를 제외한 파일 읽기는 자동 모드에서 프롬프트 없이 실행되며, [작업 디렉터리](/docs/ko/permissions#working-directories) 외부의 읽기를 포함합니다. Claude가 처음으로 Read, Grep 또는 Glob 도구를 이들 외부의 경로에 사용할 때 Claude Code는 해당 읽기를 허용할지 묻습니다.

470 470 

471프롬프트는 비대화형 `-p` 실행이나 백그라운드 세션에 나타나지 않습니다. 거기서의 읽기는 이전과 같이 실행됩니다.471프롬프트는 비대화형 `-p` 실행이나 백그라운드 세션에 나타나지 않습니다. 거기서의 읽기는 이전과 같이 실행됩니다.

472 472 


530 각 작업은 고정된 결정 순서를 거칩니다. 첫 번째 일치하는 단계가 승리합니다:530 각 작업은 고정된 결정 순서를 거칩니다. 첫 번째 일치하는 단계가 승리합니다:

531 531 

532 1. [allow, ask 또는 deny 규칙](/docs/ko/permissions#manage-permissions)과 일치하는 작업은 즉시 처리되며, 다음은 예외입니다:532 1. [allow, ask 또는 deny 규칙](/docs/ko/permissions#manage-permissions)과 일치하는 작업은 즉시 처리되며, 다음은 예외입니다:

533 * [보호된 경로](#protected-paths)에 대한 쓰기는 allow 규칙이 일치하더라도 분류기로 전달됩니다533 * [보호된 경로](#protected-paths)에 대한 쓰기는 allow 규칙이 일치하더라도 분류기로 전달됩니다. 보호된 경로가 심볼릭 링크된 설정 파일이 가리키는 파일인 경우, [보호된 경로](#protected-paths) 목록에서 설명하는 대로 쓰기가 대신 확인을 요청할 수 있습니다

534 * 어떤 allow 규칙도 [중요 경로](#critical-paths)를 대상으로 하는 `rm` 및 `rmdir` 제거를 승인하지 않습니다534 * 어떤 allow 규칙도 [중요 경로](#critical-paths)를 대상으로 하는 `rm` 및 `rmdir` 제거를 승인하지 않습니다

535 * [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구는 allow 규칙이 일치하더라도 직접 확인을 요청하며, 해당 설정이 Claude Code에 도달하는 세션에서는 [조직이 `ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구도 마찬가지입니다535 * [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구는 allow 규칙이 일치하더라도 직접 확인을 요청하며, 해당 설정이 Claude Code에 도달하는 세션에서는 [조직이 `ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구도 마찬가지입니다

536 * [명령별 허용 도메인](/docs/ko/sandboxing#per-command-allowed-domains-in-auto-mode)을 포함하는 셸 명령도 allow 규칙이 일치하더라도 분류기로 전달됩니다. 규칙은 명령을 승인할 뿐 호스트를 승인하지 않기 때문입니다536 * [명령별 허용 도메인](/docs/ko/sandboxing#per-command-allowed-domains-in-auto-mode)을 포함하는 셸 명령도 allow 규칙이 일치하더라도 분류기로 전달됩니다. 규칙은 명령을 승인할 뿐 호스트를 승인하지 않기 때문입니다

537 * `Bash(git push *)`처럼 명령 내용과 일치하는 ask 규칙은 권한 프롬프트로 폴백합니다537 * `Bash(git push *)`처럼 명령 내용과 일치하는 ask 규칙은 권한 프롬프트로 폴백합니다

538 * [심볼릭 링크 검사](/docs/ko/permissions#symlinks)로 보호된 경로로 확인되는 쓰기는, Claude가 요청한 경로 자체가 보호되지 않은 경우 확인을 요청합니다538 * [심볼릭 링크 검사](/docs/ko/permissions#symlinks)로 보호된 경로로 확인되는 쓰기는, Claude가 요청한 경로 자체가 보호되지 않은 경우 확인을 요청합니다

539 * [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기는 allow 규칙이 일치하더라도 확인을 요청합니다

539 2. 읽기 전용 작업과 작업 디렉터리의 파일 편집은 자동 승인됩니다. 단, [보호된 경로](#protected-paths)에 대한 쓰기와 확인을 요청하는 [작업 디렉터리 외부의 첫 번째 읽기](#first-read-outside-the-working-directories)는 예외입니다540 2. 읽기 전용 작업과 작업 디렉터리의 파일 편집은 자동 승인됩니다. 단, [보호된 경로](#protected-paths)에 대한 쓰기와 확인을 요청하는 [작업 디렉터리 외부의 첫 번째 읽기](#first-read-outside-the-working-directories)는 예외입니다

540 * [서버 측 분류기 검토](#server-side-classifier-review)가 적용되는 세션에서는 읽기 전용 및 [샌드박스된](/docs/ko/sandboxing#sandbox-modes) 셸 명령이 해당 검토를 기다리며, 검토에서 문제가 지적되면 차단됩니다541 * [서버 측 분류기 검토](#server-side-classifier-review)가 적용되는 세션에서는 읽기 전용 및 [샌드박스된](/docs/ko/sandboxing#sandbox-modes) 셸 명령이 해당 검토를 기다리며, 검토에서 문제가 지적되면 차단됩니다

541 * 작업 디렉터리 내부의 쓰기가 [심볼릭 링크 검사](/docs/ko/permissions#symlinks)로 외부 위치로 확인되면 확인을 요청합니다542 * 작업 디렉터리 내부의 쓰기가 [심볼릭 링크 검사](/docs/ko/permissions#symlinks)로 외부 위치로 확인되면 확인을 요청합니다

542 * Claude가 [다른 사람이 만든 아티팩트](/docs/ko/artifacts#read-an-artifact-shared-with-you)를 읽을 때는 해당 섹션에 나열된 승인 사례가 적용됩니다543 * Claude가 [다른 사람이 만든 아티팩트](/docs/ko/artifacts#read-an-artifact-shared-with-you)를 읽을 때는 해당 섹션에 나열된 승인 사례가 적용됩니다

544 * [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기는 확인을 요청합니다

543 3. 기본 처리 방식이 적용되는 [중요 경로 제거](#critical-paths)를 제외한 그 밖의 모든 것은 분류기로 전달됩니다. 1단계에서 직접 확인을 요청하는 커넥터 도구와 `requiresUserInteraction` MCP 도구도 분류기에 도달하지 않으므로, 조직이 요구하는 승인이나 동의 단계는 자동 승인되지 않습니다545 3. 기본 처리 방식이 적용되는 [중요 경로 제거](#critical-paths)를 제외한 그 밖의 모든 것은 분류기로 전달됩니다. 1단계에서 직접 확인을 요청하는 커넥터 도구와 `requiresUserInteraction` MCP 도구도 분류기에 도달하지 않으므로, 조직이 요구하는 승인이나 동의 단계는 자동 승인되지 않습니다

544 4. 분류기가 차단하면 Claude는 그 이유를 받습니다. 대부분의 세션에서 이유는 서술형 설명이 아니라 `[Data Exfiltration]`처럼 분류기가 일치시킨 규칙의 이름으로 제공됩니다. [거부 검토](/docs/ko/auto-mode-config#review-denials)를 참조하세요546 4. 분류기가 차단하면 Claude는 그 이유를 받습니다. 대부분의 세션에서 이유는 서술형 설명이 아니라 `[Data Exfiltration]`처럼 분류기가 일치시킨 규칙의 이름으로 제공됩니다. [거부 검토](/docs/ko/auto-mode-config#review-denials)를 참조하세요

545 547 


593 595 

594Claude Code는 프롬프트를 표시하는 대신 명시적인 [`ask` 규칙](/docs/ko/permissions#manage-permissions)과 일치하는 호출을 거부합니다. 또한 `allow` 규칙이 일치하더라도 기본 제공 `AskUserQuestion` 도구를 거부하며, 해당 설정이 Claude Code에 도달하는 세션에서 조직이 [`ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구도 동일하게 거부합니다. [`_meta["anthropic/requiresUserInteraction"]`](/docs/ko/mcp#require-approval-for-a-specific-tool)로 표시된 MCP 도구도 동일한 방식으로 거부합니다. 이는 승인 카드가 이 모드에서 수집하지 않는 답변이 필요하기 때문입니다.596Claude Code는 프롬프트를 표시하는 대신 명시적인 [`ask` 규칙](/docs/ko/permissions#manage-permissions)과 일치하는 호출을 거부합니다. 또한 `allow` 규칙이 일치하더라도 기본 제공 `AskUserQuestion` 도구를 거부하며, 해당 설정이 Claude Code에 도달하는 세션에서 조직이 [`ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구도 동일하게 거부합니다. [`_meta["anthropic/requiresUserInteraction"]`](/docs/ko/mcp#require-approval-for-a-specific-tool)로 표시된 MCP 도구도 동일한 방식으로 거부합니다. 이는 승인 카드가 이 모드에서 수집하지 않는 답변이 필요하기 때문입니다.

595 597 

596`rm` 및 `rmdir` 제거가 [중요 경로](#critical-paths)를 대상으로 하는 경우(예: `rm -rf /` 및 `rm -rf ~`), `allow` 규칙이 일치하거나 `PreToolUse` 훅이 허용하더라도 거부됩니다.598`rm` 및 `rmdir` 제거가 [중요 경로](#critical-paths)를 대상으로 하는 경우(예: `rm -rf /` 및 `rm -rf ~`), `allow` 규칙이 일치하거나 `PreToolUse` 훅이 허용하더라도 거부됩니다. [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기도 동일한 방식으로 거부됩니다.

597 599 

598[클라우드 세션](/docs/ko/claude-code-on-the-web)은 `defaultMode: "dontAsk"`를 무시합니다. 자세한 내용은 [bypassPermissions](#skip-all-checks-with-bypasspermissions-mode)를 참조하세요.600[클라우드 세션](/docs/ko/claude-code-on-the-web)은 `defaultMode: "dontAsk"`를 무시합니다. 자세한 내용은 [bypassPermissions](#skip-all-checks-with-bypasspermissions-mode)를 참조하세요.

599 601 


639* **수락하는 경우**: Claude Code는 `skipDangerousModePermissionPrompt`를 `~/.claude/settings.json`에서 `true`로 설정하므로 이후 세션은 대화상자를 건너뜁니다. 대화상자를 다시 보려면 해당 파일에서 키를 제거하거나 `false`로 설정하십시오. [`skipDangerousModePermissionPrompt` 참조](/docs/ko/settings-reference#skipdangerousmodepermissionprompt)는 사용자 또는 조직이 설정할 수 있는 다른 설정 파일을 나열합니다.641* **수락하는 경우**: Claude Code는 `skipDangerousModePermissionPrompt`를 `~/.claude/settings.json`에서 `true`로 설정하므로 이후 세션은 대화상자를 건너뜁니다. 대화상자를 다시 보려면 해당 파일에서 키를 제거하거나 `false`로 설정하십시오. [`skipDangerousModePermissionPrompt` 참조](/docs/ko/settings-reference#skipdangerousmodepermissionprompt)는 사용자 또는 조직이 설정할 수 있는 다른 설정 파일을 나열합니다.

640* **거부하는 경우**: Claude Code가 종료됩니다.642* **거부하는 경우**: Claude Code가 종료됩니다.

641 643 

642[비대화형 모드](/docs/ko/headless)에서는 대화상자가 표시되지 않으며, `--bg`로 시작한 [백그라운드 세션](/docs/ko/agent-view)은 대화형 세션에서 대화상자를 수락할 때까지 거부됩니다.644[비대화형 모드](/docs/ko/headless)에서는 대화상자가 표시되지 않습니다. [백그라운드 세션](/docs/ko/agent-view)은 수락 기록이 사용자 설정 또는 관리형 설정에 있을 때 이를 적용합니다:

645 

646* 수락 기록이 없으면, 대화형 세션에서 대화상자를 수락할 때까지 `claude --bg --permission-mode bypassPermissions`가 거부됩니다.

647* `skipDangerousModePermissionPrompt`가 `.claude/settings.local.json`에만 설정되어 있으면, 백그라운드 세션은 우회 요청을 무시한 채 시작되며 `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true` 알림을 고정 표시합니다. 우회가 적용되도록 하려면 해당 키를 `~/.claude/settings.json`에 추가한 다음 새 백그라운드 세션을 시작하십시오.

643 648 

644Linux 및 macOS에서, Claude Code는 root 또는 `sudo` 권한으로 실행할 때 이 모드에서 시작하기를 거부합니다:649Linux 및 macOS에서, Claude Code는 root 또는 `sudo` 권한으로 실행할 때 이 모드에서 시작하기를 거부합니다:

645 650 


708* `.devcontainer.json`713* `.devcontainer.json`

709* `.ripgreprc`, `pyrightconfig.json`714* `.ripgreprc`, `pyrightconfig.json`

710* `.mcp.json`, `.claude.json`715* `.mcp.json`, `.claude.json`

716* 사용자, 프로젝트 또는 로컬 [설정 파일](/docs/ko/settings#settings-files-and-who-they-affect) 자체가 심볼릭 링크일 때(예: dotfiles 저장소로 연결되는 경우) 해당 설정 파일이 가리키는 파일. 보호된 경로 쓰기를 분류기로 라우팅하는 모드에서는 allow 규칙이 일치하더라도 이 파일에 대한 쓰기는 대신 확인을 요청합니다. 파일 자체의 경로가 다른 폴더의 `.claude/settings.json`처럼 설정 파일의 경로이기도 한 경우, 해당 쓰기는 다른 보호된 경로 쓰기와 마찬가지로 분류기로 전달됩니다

711 717 

712<h2 id="critical-paths">718<h2 id="critical-paths">

713 Critical paths719 Critical paths


727 733 

728* 파일시스템 루트734* 파일시스템 루트

729* 최상위 디렉토리, 즉 루트의 직접 자식(예: `/usr`, `/etc`, `/data`)735* 최상위 디렉토리, 즉 루트의 직접 자식(예: `/usr`, `/etc`, `/data`)

730* 홈 디렉토리736* 홈 디렉터리. Windows에서는 8.3 짧은 이름도 해당합니다(예: `C:\Users\LONGNA~1`)

731* Windows 드라이브 루트 및 최상위 디렉토리(예: `C:\` 및 `C:\Windows`)737* Windows 드라이브 루트 및 최상위 디렉터리(예: `C:\` 및 `C:\Windows`). `\\?\C:\` 및 `\\localhost\C$`와 같은 표기는 `C:\`로 간주됩니다

732* 작업 디렉토리 및 부모738* 작업 디렉토리 및 부모

733* 추가 작업 디렉토리 및 부모, 단 제거가 하나 아래의 glob일 때만(예: `rm -rf <dir>/*`). `rm -rf <dir>`은 디렉토리 자체에서 이 확인을 트리거하지 않습니다739* 추가 작업 디렉토리 및 부모, 단 제거가 하나 아래의 glob일 때만(예: `rm -rf <dir>/*`). `rm -rf <dir>`은 디렉토리 자체에서 이 확인을 트리거하지 않습니다

734 740 

741홈 디렉터리의 8.3 짧은 이름과 `\\?\C:\` 및 `\\localhost\C$` 표기에 대한 확인에는 Claude Code v2.1.292 이상이 필요합니다.

742 

735<h3 id="other-targets-that-count-as-critical-paths">743<h3 id="other-targets-that-count-as-critical-paths">

736 Other targets that count as critical paths744 Other targets that count as critical paths

737</h3>745</h3>


747| 명령 치환의 출력만인 대상, `rm`이 recursive일 때 | `rm -rf "$(pwd)"` | Claude Code는 명령이 실행되기 전에 대상을 확인할 수 없습니다 |755| 명령 치환의 출력만인 대상, `rm`이 recursive일 때 | `rm -rf "$(pwd)"` | Claude Code는 명령이 실행되기 전에 대상을 확인할 수 없습니다 |

748| critical path 다음의 후행 명령 치환 | `rm -rf ~/$(cmd)` | Claude Code는 치환이 비어 있으면 남아 있을 경로(여기서는 홈 디렉토리)를 확인합니다 |756| critical path 다음의 후행 명령 치환 | `rm -rf ~/$(cmd)` | Claude Code는 치환이 비어 있으면 남아 있을 경로(여기서는 홈 디렉토리)를 확인합니다 |

749| 백슬래시만 있는 대상 | `rm -rf "\\"` | Windows의 Git Bash는 단일 백슬래시를 현재 드라이브의 루트로 읽으므로 확인이 모든 플랫폼에 적용됩니다 |757| 백슬래시만 있는 대상 | `rm -rf "\\"` | Windows의 Git Bash는 단일 백슬래시를 현재 드라이브의 루트로 읽으므로 확인이 모든 플랫폼에 적용됩니다 |

758| 드라이브 문자 대신 GUID로 볼륨을 지정하는 Windows 경로 | `rm -rf '\\?\Volume{GUID}\work\build'` | 경로가 어느 드라이브에 있는지 나타내지 않으므로 critical path일 수 있습니다. Claude Code v2.1.292 이상이 필요합니다 |

750| `/*` 또는 `/*/`로 끝나는 일부 대상 | `rm -rf logs/*/*`, `rm -rf logs/*/`, `cd logs && rm -rf a/*` | Claude Code는 명령이 실행되기 전에 이러한 대상이 어떤 디렉터리에 도달하는지 알 수 없습니다 |759| `/*` 또는 `/*/`로 끝나는 일부 대상 | `rm -rf logs/*/*`, `rm -rf logs/*/`, `cd logs && rm -rf a/*` | Claude Code는 명령이 실행되기 전에 이러한 대상이 어떤 디렉터리에 도달하는지 알 수 없습니다 |

751 760 

752명령 치환 출력만인 대상에 대한 확인을 끄려면 Claude Code를 시작하는 환경에서 [`CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT=1`](/docs/ko/env-vars#variables)을 설정합니다.761명령 치환 출력만인 대상에 대한 확인을 끄려면 Claude Code를 시작하는 환경에서 [`CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT=1`](/docs/ko/env-vars#variables)을 설정합니다.

permissions.md +39 −8

Details

36 36 

37v2.1.211 이전에는 Claude Code가 항상 시작 디렉토리에 규칙을 저장했으므로 worktree 또는 하위 디렉토리에서 부여된 승인이 저장소의 나머지 부분에 적용되지 않았습니다. 이전 버전이 하위 디렉토리 또는 worktree에 저장한 규칙은 여전히 거기서 시작된 세션에 적용됩니다.37v2.1.211 이전에는 Claude Code가 항상 시작 디렉토리에 규칙을 저장했으므로 worktree 또는 하위 디렉토리에서 부여된 승인이 저장소의 나머지 부분에 적용되지 않았습니다. 이전 버전이 하위 디렉토리 또는 worktree에 저장한 규칙은 여전히 거기서 시작된 세션에 적용됩니다.

38 38 

39때때로 권한 프롬프트는 "다시 묻지 않기" 옵션이 없고 세션의 나머지 부분에 대해 작업을 허용하는 옵션도 없는 일회성 승인만 제공합니다. Claude Code는 프롬프트가 허용할 모든 것을 보여줄 수 있을 때만 이러한 옵션을 제공하므로 프롬프트에서 저장하는 규칙은 이름이 지정된 옵션만 포함합니다. 프롬프트가 일회성 승인만 제공하는 경우, 작업을 한 번 승인하거나 [`/permissions`](#manage-permissions)에서 규칙을 직접 추가합니다.39때때로 권한 프롬프트는 "다시 묻지 않기" 옵션이 없고 세션의 나머지 부분에 대해 작업을 허용하는 옵션도 없는 일회성 승인만 제공합니다. Claude Code는 프롬프트가 허용할 모든 것을 보여줄 수 있을 때만 이러한 옵션을 제공하므로 프롬프트에서 저장하는 규칙은 이름이 지정된 옵션만 포함합니다. 프롬프트가 일회성 승인만 제공하는 경우, 작업을 한 번 승인하거나 [`/permissions`](#manage-permissions)에서 규칙을 직접 추가합니다. `watch`와 같은 exec 래퍼로 시작하는 명령이나 `-delete`와 같은 작업이 포함된 `find` 명령에 대한 프롬프트를 중지하려면 [Exec 래퍼 및 `find` 작업](#exec-wrappers-and-find-actions)을 참조하세요.

40 40 

41<h3 id="add-a-comment-when-you-answer-a-permission-prompt">41<h3 id="add-a-comment-when-you-answer-a-permission-prompt">

42 권한 프롬프트에 답할 때 주석 추가42 권한 프롬프트에 답할 때 주석 추가


91| `acceptEdits` | 작업 디렉토리 또는 `additionalDirectories`의 경로에 대해 파일 편집 및 `mkdir`, `touch`, `mv`, `cp` 등의 일반적인 파일 시스템 명령을 자동으로 수락합니다 |91| `acceptEdits` | 작업 디렉토리 또는 `additionalDirectories`의 경로에 대해 파일 편집 및 `mkdir`, `touch`, `mv`, `cp` 등의 일반적인 파일 시스템 명령을 자동으로 수락합니다 |

92| `plan` | Claude는 파일을 읽고 읽기 전용 셸 명령을 실행하여 탐색하지만 소스 파일을 편집하지 않습니다. [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)를 사용할 수 있으며, 분류기 승인 명령도 실행됩니다. CLI 및 VS Code 확장에서 Plan으로 표시됩니다 |92| `plan` | Claude는 파일을 읽고 읽기 전용 셸 명령을 실행하여 탐색하지만 소스 파일을 편집하지 않습니다. [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)를 사용할 수 있으며, 분류기 승인 명령도 실행됩니다. CLI 및 VS Code 확장에서 Plan으로 표시됩니다 |

93| `auto` | 루틴 프롬프트 없이 실행됩니다. 셸 명령 및 네트워크 요청과 같은 작업이 실행되기 전에 백그라운드 [분류기](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)가 요청과 일치하는지 확인합니다 |93| `auto` | 루틴 프롬프트 없이 실행됩니다. 셸 명령 및 네트워크 요청과 같은 작업이 실행되기 전에 백그라운드 [분류기](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)가 요청과 일치하는지 확인합니다 |

94| `dontAsk` | 그 외에 프롬프트를 표시할 도구 호출을 자동으로 거부합니다. 작업 디렉토리의 파일 읽기 및 승인이 필요 없는 기타 작업은 계속 실행되며, `/permissions` 또는 `permissions.allow` 규칙을 통해 사전 승인된 도구도 실행됩니다. `AskUserQuestion`, [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구, 그리고 Claude Code에 도달하는 설정에서 [조직에서 `ask`로 설정](/docs/ko/mcp#organization-controls-on-connector-tools)한 커넥터 도구는 허용했더라도 거부됩니다 |94| `dontAsk` | 그 외에 확인을 요청할 모든 호출을 자동으로 거부합니다. 작업 디렉터리의 파일 읽기 및 승인이 필요 없는 기타 작업은 계속 실행되며, `/permissions` 또는 `permissions.allow` 규칙을 통해 사전 승인된 도구도 실행됩니다. `AskUserQuestion`, [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구, [네트워크 경로에서의 읽기](#network-paths), 그리고 해당 설정이 Claude Code에 적용되는 세션에서 [조직이 `ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구는 허용했더라도 거부됩니다 |

95| `bypassPermissions` | 권한 프롬프트를 건너뜁니다. 단, [모든 모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)은 제외됩니다 |95| `bypassPermissions` | 권한 프롬프트를 건너뜁니다. 단, [모든 모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)은 제외됩니다 |

96 96 

97<Warning>97<Warning>


240 Bash240 Bash

241</h3>241</h3>

242 242 

243Bash 규칙은 전체 명령 텍스트와 일치하며, `*`는 모든 텍스트를 나타냅니다. [와일드카드 패턴](#wildcard-patterns)은 각 규칙 형태가 일치하는 명령과 `*`를 어디에 배치할지 보여줍니다. 이 섹션의 나머지 부분은 Claude Code가 복합 명령과 래퍼를 어떻게 일치시키는지, 규칙이 일치하지 않는 것, 읽기 전용 명령 및 리다이렉션을 다룹니다.243Bash 규칙은 전체 명령 텍스트와 일치하며, `*`는 모든 텍스트를 나타냅니다. [와일드카드 패턴](#wildcard-patterns)은 각 규칙 형태가 일치하는 명령과 `*`를 어디에 배치할지 보여줍니다. 이 섹션의 나머지 부분은 Claude Code가 복합 명령과 래퍼를 어떻게 일치시키는지, 접두사 규칙이 승인할 수 없는 래퍼와 `find` 액션, 규칙이 일치하지 않는 것, 읽기 전용 명령 및 리다이렉션을 다룹니다.

244 244 

245<h4 id="compound-commands">245<h4 id="compound-commands">

246 복합 명령246 복합 명령


268 268 

269이 래퍼 목록은 기본 제공되며 구성할 수 없습니다. `direnv exec`, `devbox run`, `mise exec`, `npx` 및 `docker exec`과 같은 개발 환경 러너는 목록에 없습니다. 이러한 도구는 인수를 명령으로 실행하므로 `Bash(devbox run *)`와 같은 규칙은 `devbox run rm -rf .`를 포함하여 `run` 뒤에 오는 모든 것과 일치합니다. 환경 러너 내에서 작업을 승인하려면 `Bash(devbox run npm test)`와 같이 러너와 내부 명령을 모두 포함하는 특정 규칙을 작성합니다. 허용하려는 각 내부 명령에 대해 하나의 규칙을 추가합니다.269이 래퍼 목록은 기본 제공되며 구성할 수 없습니다. `direnv exec`, `devbox run`, `mise exec`, `npx` 및 `docker exec`과 같은 개발 환경 러너는 목록에 없습니다. 이러한 도구는 인수를 명령으로 실행하므로 `Bash(devbox run *)`와 같은 규칙은 `devbox run rm -rf .`를 포함하여 `run` 뒤에 오는 모든 것과 일치합니다. 환경 러너 내에서 작업을 승인하려면 `Bash(devbox run npm test)`와 같이 러너와 내부 명령을 모두 포함하는 특정 규칙을 작성합니다. 허용하려는 각 내부 명령에 대해 하나의 규칙을 추가합니다.

270 270 

271`watch`, `setsid`, `ionice` 및 `flock`과 같은 Exec 래퍼는 접두사 규칙 `Bash(watch *)`로 자동 승인될 수 없으므로 Manual 모드에서 항상 프롬프트합니다. 동일한 사항이 `-exec` 또는 `-delete`를 사용하는 `find`에 적용됩니다: `Bash(find *)` 규칙은 이러한 형식을 포함하지 않습니다. 특정 호출을 승인하려면 전체 명령 문자열에 대한 정확한 일치 규칙을 작성합니다.271<h4 id="exec-wrappers-and-find-actions">

272 Exec 래퍼와 `find` 액션

273</h4>

274 

275`Bash(watch *)` 또는 `Bash(find *)`와 같은 접두사 규칙은 다음 명령을 자동 승인할 수 없으므로 Manual 모드에서 이러한 명령은 프롬프트합니다:

276 

277* **Exec 래퍼**: `watch`, `setsid`, `ionice` 및 `flock` 등

278* **`find`**: `-exec`, `-delete` 또는 `-fprint`와 같이 명령을 실행하거나, 파일을 삭제하거나, 파일을 쓰는 액션이 있는 경우, 또는 검색할 경로를 파일에서 가져오는 `-files0-from`이 있는 경우

279 

280`*`가 없는 특정 호출을 승인하려면 `Bash(find build -type f -delete)`와 같이 전체 명령 문자열에 대한 정확한 일치 규칙을 작성합니다.

281 

282`find . -name '*.tmp' -delete`처럼 명령에 `*`가 있으면 Claude Code는 규칙을 정확한 일치가 아닌 [와일드카드 패턴](#wildcard-patterns)으로 읽으므로 명령은 여전히 프롬프트합니다. 프롬프트할 때마다 승인하거나, 해당 명령에 대해 `"allow"`를 반환하는 [PreToolUse 훅](/docs/ko/hooks#pretooluse-decision-control)을 사용합니다.

272 283 

273<h4 id="bash-rule-limits">284<h4 id="bash-rule-limits">

274 Bash 규칙이 일치하지 않는 것285 Bash 규칙이 일치하지 않는 것


301* **쓰기 가능한 플래그가 있는 명령의 따옴표 없는 glob**: `find`, `sort`, `sed` 및 `git`과 같이 쓰기 가능하거나 실행 가능한 플래그가 있는 명령은 glob이 `-delete`와 같은 플래그로 확장될 수 있으므로 따옴표 없는 glob이 있을 때 프롬프트합니다.312* **쓰기 가능한 플래그가 있는 명령의 따옴표 없는 glob**: `find`, `sort`, `sed` 및 `git`과 같이 쓰기 가능하거나 실행 가능한 플래그가 있는 명령은 glob이 `-delete`와 같은 플래그로 확장될 수 있으므로 따옴표 없는 glob이 있을 때 프롬프트합니다.

302* **다른 데몬을 가리키는 `docker`**: `docker`의 읽기 전용 형식은 `-H`, `--context` 또는 Podman의 `--url` 및 `--connection`과 같이 다른 데몬을 선택하는 플래그를 전달할 때 프롬프트합니다.313* **다른 데몬을 가리키는 `docker`**: `docker`의 읽기 전용 형식은 `-H`, `--context` 또는 Podman의 `--url` 및 `--connection`과 같이 다른 데몬을 선택하는 플래그를 전달할 때 프롬프트합니다.

303* **경로 열기 플래그가 있는 `file`**: `file`은 `-m`/`--magic-file` 또는 `-f`/`--files-from`을 전달할 때 프롬프트합니다. 이러한 플래그는 `file`이 플래그 값에 명명된 경로를 열도록 합니다.314* **경로 열기 플래그가 있는 `file`**: `file`은 `-m`/`--magic-file` 또는 `-f`/`--files-from`을 전달할 때 프롬프트합니다. 이러한 플래그는 `file`이 플래그 값에 명명된 경로를 열도록 합니다.

315* **환경 변수를 출력할 수 있는 `ps`**: `ps auxe` 또는 `ps aux -e`와 같이 인수 중 하나가 `e` 옵션으로 작동할 수 있을 때 `ps`는 프롬프트합니다. 해당 옵션은 프로세스 환경 변수를 출력하기 때문입니다. `ps aux` 및 `ps -ef`는 프롬프트 없이 실행됩니다. `ps aux -e`와 같은 대시 형식에 대한 확인은 Claude Code v2.1.290 이상이 필요합니다.

304* **Windows의 네트워크 경로**: `\\server\share\file`과 같은 네트워크(UNC) 경로를 포함하는 인수가 있는 명령은 네트워크 경로에 액세스하면 Windows 자격 증명을 이름이 지정된 호스트로 보낼 수 있으므로 프롬프트합니다. 동일한 확인이 [PowerShell 도구](/docs/ko/tools-reference#powershell-tool) 명령에도 적용됩니다.316* **Windows의 네트워크 경로**: `\\server\share\file`과 같은 네트워크(UNC) 경로를 포함하는 인수가 있는 명령은 네트워크 경로에 액세스하면 Windows 자격 증명을 이름이 지정된 호스트로 보낼 수 있으므로 프롬프트합니다. 동일한 확인이 [PowerShell 도구](/docs/ko/tools-reference#powershell-tool) 명령에도 적용됩니다.

305* **특수 셸 변수에 대한 쓰기**: `PATH` 또는 `IFS`와 같은 특정 특수 셸 변수를 설정하거나, 해제하거나, 이를 대상으로 루프를 도는 명령은 명령의 나머지 부분이 읽기 전용이어도 프롬프트합니다.317* **특수 셸 변수에 대한 쓰기**: `PATH` 또는 `IFS`와 같은 특정 특수 셸 변수를 설정하거나, 해제하거나, 이를 대상으로 루프를 도는 명령은 명령의 나머지 부분이 읽기 전용이어도 프롬프트합니다.

306* **분석이 구문 분석할 수 없는 명령**: Claude Code가 명령을 완전히 구문 분석할 수 없을 때 명령을 읽기 전용으로 취급하지 않고 승인을 요청합니다. 10,000자를 초과하는 명령은 분석이 구문 분석하는 범위를 초과하므로 항상 프롬프트합니다.318* **분석이 구문 분석할 수 없는 명령**: Claude Code가 명령을 완전히 구문 분석할 수 없을 때 명령을 읽기 전용으로 취급하지 않고 승인을 요청합니다. 10,000자를 초과하는 명령은 분석이 구문 분석하는 범위를 초과하므로 항상 프롬프트합니다.


508 520 

509도구가 승인된 파일을 열 때 [경로가 여전히 권한 확인이 승인한 위치로 해결되는지 확인합니다](/docs/ko/errors#refusing-after-a-symlink-changed).521도구가 승인된 파일을 열 때 [경로가 여전히 권한 확인이 승인한 위치로 해결되는지 확인합니다](/docs/ko/errors#refusing-after-a-symlink-changed).

510 522 

523<h4 id="network-paths">

524 네트워크 경로

525</h4>

526 

527Read, Grep, Glob과 같은 Claude의 파일 읽기 도구가 네트워크 경로에서 읽을 때 해당 읽기는 별도의 권한 확인을 거칩니다. 네트워크 경로는 다른 컴퓨터에 도달할 수 있는 경로로, Windows에서는 `\\server\share\file`과 같은 UNC 경로이고 macOS 및 Linux에서는 `/net/fileserver/notes.txt`와 같은 `/net` 자동 마운트 경로입니다. 이러한 경로를 조회하면 이름이 지정된 호스트에 접속할 수 있으며, Windows에서는 이 접속으로 자격 증명이 호스트에 전송될 수 있습니다. 셸 명령에는 별도의 확인이 있습니다: Manual 모드에서 인수에 UNC 경로가 포함된 읽기 전용 Bash 또는 PowerShell 명령은 [Windows에서 여전히 프롬프트합니다](#read-only-commands).

528 

529Claude Code v2.1.292 이상에서는 다음 각 항목이 프롬프트를 그대로 유지합니다:

530 

531* **Allow 규칙**: `Read`처럼 도구 전체에 대한 규칙을 포함하여 규칙이 읽기를 사전 승인하지 않습니다

532* **PreToolUse 훅**: `"allow"`를 반환하는 [훅](#extend-permissions-with-hooks)도 프롬프트를 건너뛰지 않습니다

533* **자동 모드**: 프롬프트가 사용자에게 표시되며, [분류기](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)가 읽기를 결정하지 않습니다

534 

535`dontAsk` 모드에서는 Claude Code가 프롬프트하는 대신 읽기를 거부합니다. `bypassPermissions` 모드에서, 그리고 [권한 우회](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)를 사용할 수 있는 플랜 모드의 대화형 터미널 세션에서는 이 프롬프트 없이 읽기가 실행됩니다.

536 

537이 프롬프트 없이 네트워크 공유의 파일을 읽으려면 먼저 공유에 로컬 경로를 부여합니다:

538 

539* **Windows**: [작업 디렉터리](#working-directories)에서 설명한 대로 공유를 드라이브 문자에 매핑하고 Claude Code를 시작할 때 `--add-dir`로 해당 드라이브를 전달합니다

540* **macOS 및 Linux**: [Working directory is a network path](/docs/ko/errors#working-directory-is-a-network-path)에서 설명한 대로 `/mnt` 또는 `/Volumes` 아래의 디렉터리와 같은 로컬 경로에 공유를 마운트하고 그곳에서 파일을 읽습니다

541 

511<h3 id="webfetch">542<h3 id="webfetch">

512 WebFetch543 WebFetch

513</h3>544</h3>

514 545 

515WebFetch 규칙은 `domain:` 접두사를 사용하고 요청된 URL의 호스트명과 일치합니다. 일치는 대소문자를 구분하지 않으며, `*` 와일드카드를 지원하고, 규칙과 호스트명 모두에서 후행 `.`을 제거하므로 `example.com.`과 `example.com`은 동일하게 취급됩니다.546WebFetch 규칙은 `domain:` 접두사를 사용하고 요청된 URL의 호스트명과 일치합니다. 일치는 대소문자를 구분하지 않으며, `*` 와일드카드를 지원하고, 규칙과 호스트명 모두에서 후행 `.`을 제거하므로 `example.com.`과 `example.com`은 동일하게 취급됩니다.

516 547 

517* `WebFetch(domain:example.com)`은 `example.com`으로의 요청과 일치합니다548* `WebFetch(domain:example.com)`은 `example.com`으로의 요청과만 일치합니다. `api.example.com`과 같은 서브도메인도 포함하려면 `WebFetch(domain:*.example.com)` 규칙을 추가합니다

518* `WebFetch(domain:*.example.com)`은 `api.example.com` 또는 `a.b.example.com`과 같은 모든 깊이의 모든 서브도메인과 일치하지만 `example.com` 자체는 일치하지 않습니다549* `WebFetch(domain:*.example.com)`은 `api.example.com` 또는 `a.b.example.com`과 같은 모든 깊이의 모든 서브도메인과 일치하지만 `example.com` 자체는 일치하지 않습니다

519* `WebFetch(domain:*)`는 모든 도메인과 일치합니다. 베어 `WebFetch` 규칙과는 다릅니다. [모든 fetch 허용 또는 거부](#allow-or-deny-every-fetch)를 참조합니다550* `WebFetch(domain:*)`는 모든 도메인과 일치합니다. 베어 `WebFetch` 규칙과는 다릅니다. [모든 fetch 허용 또는 거부](#allow-or-deny-every-fetch)를 참조합니다

520 551 


622 653 

623[mod를 신뢰할지 결정](/docs/ko/plugins/mods/overview#decide-whether-to-trust-a-mod)을 참조하거나, 관리형 설정을 배포하는 경우 [조직을 위한 mod 관리](/docs/ko/plugins/mods/admin#know-what-happens-by-default)를 참조하세요.654[mod를 신뢰할지 결정](/docs/ko/plugins/mods/overview#decide-whether-to-trust-a-mod)을 참조하거나, 관리형 설정을 배포하는 경우 [조직을 위한 mod 관리](/docs/ko/plugins/mods/admin#know-what-happens-by-default)를 참조하세요.

624 655 

625[`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구와 조직에서 [세션에서 해당 설정이 Claude Code에 도달하는 경우 `ask`로 설정](/docs/ko/mcp#organization-controls-on-connector-tools)한 커넥터 도구도 훅이 `"allow"`를 반환할 때 여전히 프롬프트합니다.656`AskUserQuestion` 또는 `requiresUserInteraction`으로 표시된 MCP 도구와 같은 [사용자 상호작용이 필요한 도구](/docs/ko/permission-modes#actions-no-mode-auto-approves)의 경우, mod의 `tool.check` 승인은 프롬프트를 건너뛰지 않습니다. Claude Code v2.1.292 이상이 필요합니다. [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구는 훅이 `"allow"`를 반환할 때도 여전히 프롬프트하며, [네트워크 경로](#network-paths)에서의 읽기와 해당 설정이 Claude Code에 도달하는 세션에서 [조직이 `ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구도 마찬가지입니다.

626 657 

627차단 훅은 또한 allow 규칙보다 우선합니다. 종료 코드 2로 종료되는 훅은 권한 규칙이 평가되기 전에 도구 호출을 중지하므로, allow 규칙이 호출을 허용할 수 있는 경우에도 차단이 적용됩니다. 모든 Bash 명령을 프롬프트 없이 실행하되 차단하려는 몇 가지를 제외하려면, allow 목록에 `"Bash"`를 추가하고 해당 특정 명령을 거부하는 PreToolUse 훅을 등록합니다. 적응할 수 있는 훅 스크립트는 [보호된 파일에 대한 편집 차단](/docs/ko/hooks-guide#block-edits-to-protected-files)을 참조하세요.658차단 훅은 또한 allow 규칙보다 우선합니다. 종료 코드 2로 종료되는 훅은 권한 규칙이 평가되기 전에 도구 호출을 중지하므로, allow 규칙이 호출을 허용할 수 있는 경우에도 차단이 적용됩니다. 모든 Bash 명령을 프롬프트 없이 실행하되 차단하려는 몇 가지를 제외하려면, allow 목록에 `"Bash"`를 추가하고 해당 특정 명령을 거부하는 PreToolUse 훅을 등록합니다. 적응할 수 있는 훅 스크립트는 [보호된 파일에 대한 편집 차단](/docs/ko/hooks-guide#block-edits-to-protected-files)을 참조하세요.

628 659 


636* **세션 중**: `/add-dir` 명령 사용667* **세션 중**: `/add-dir` 명령 사용

637* **영구 구성**: [설정 파일](/docs/ko/settings#where-settings-live)의 `additionalDirectories`에 추가668* **영구 구성**: [설정 파일](/docs/ko/settings#where-settings-live)의 `additionalDirectories`에 추가

638 669 

639추가 디렉토리의 파일은 원래 작업 디렉토리와 동일한 권한 규칙을 따릅니다: 프롬프트 없이 읽을 수 있게 되며, 파일 편집 권한은 현재 권한 모드를 따릅니다.670추가 디렉터리의 파일은 원래 작업 디렉터리와 동일한 권한 규칙을 따릅니다: [네트워크 경로](#network-paths) 검사를 제외하면 확인 요청 없이 읽을 수 있게 되며, 파일 편집 권한은 현재 권한 모드를 따릅니다.

640 671 

641대부분의 [네트워크 경로](/docs/ko/errors#working-directory-is-a-network-path)(예: UNC 공유 `\\server\share`)는 작업 디렉토리로 추가할 수 없습니다. 이는 조회 시 이름이 지정하는 호스트에 연결할 수 있기 때문입니다. Windows에서는 대신 공유를 드라이브 문자로 매핑하고 시작 시 `--add-dir`으로 드라이브를 전달합니다.672대부분의 [네트워크 경로](/docs/ko/errors#working-directory-is-a-network-path)(예: UNC 공유 `\\server\share`)는 작업 디렉토리로 추가할 수 없습니다. 이는 조회 시 이름이 지정하는 호스트에 연결할 수 있기 때문입니다. Windows에서는 대신 공유를 드라이브 문자로 매핑하고 시작 시 `--add-dir`으로 드라이브를 전달합니다.

642 673 


648 세션을 다른 디렉토리로 이동679 세션을 다른 디렉토리로 이동

649</h3>680</h3>

650 681 

651세션을 다른 기본 작업 디렉토리로 이동하려면, 현재 디렉토리 옆에 [디렉토리를 추가](#working-directories)하는 대신 `/cd <path>`를 실행합니다. Claude Code는 대화를 유지하고, 새 디렉토리의 `CLAUDE.md`를 로드하며, 이전에 작업하지 않은 경우 [작업 공간을 신뢰](#project-allow-rules-and-workspace-trust)하도록 요청합니다. 그 후 Claude Code는 새 디렉토리에서 `--resume`을 실행할 때 [이동된 세션을 찾습니다](/docs/ko/sessions#resume-a-session).682세션을 다른 기본 작업 디렉터리로 이동하려면, 현재 디렉터리 옆에 [디렉터리를 추가](#working-directories)하는 대신 `/cd <path>`를 실행합니다. Claude Code는 대화를 유지하고, 새 디렉터리의 `CLAUDE.md`를 로드하며, 이전에 작업하지 않은 경우 [워크스페이스를 신뢰](#project-allow-rules-and-workspace-trust)하도록 요청합니다. 그 후 Claude Code는 새 디렉터리에서 `--resume`을 실행할 때 [이동된 세션을 찾습니다](/docs/ko/sessions#where-the-session-picker-looks).

652 683 

653이동하는 즉시 Claude Code는 새 디렉토리의 프로젝트 구성을 적용합니다:684이동하는 즉시 Claude Code는 새 디렉토리의 프로젝트 구성을 적용합니다:

654 685 

Details

790 790 

791`hooks/hooks.json`의 훅과 `hooks` 매니페스트 키의 훅은 모두 로드됩니다. 모든 이벤트와 해당 페이로드는 [Hook events](/docs/ko/hooks#hook-events)를 참조하십시오.791`hooks/hooks.json`의 훅과 `hooks` 매니페스트 키의 훅은 모두 로드됩니다. 모든 이벤트와 해당 페이로드는 [Hook events](/docs/ko/hooks#hook-events)를 참조하십시오.

792 792 

793활성화된 다른 플러그인과 이름이 같으면, 둘 중 하나만 `hooks/hooks.json`의 훅을 등록하고 다른 플러그인의 훅은 제외됩니다. 어느 쪽이 등록되는지와 이를 알려 주는 `/plugin`의 안내 문구는 [활성화된 두 플러그인의 이름이 같을 때의 훅](/docs/ko/plugins/loading#hooks-when-two-enabled-plugins-share-a-name)을 참조하십시오.

794 

793Claude Code 내부에서 실행되고 인터페이스에 그릴 수 있는 JavaScript 함수로 훅을 작성하려면, 같은 `hooks/hooks.json`의 `modules` 키 아래에 모듈 파일을 나열합니다. 이러한 모듈이 있는 플러그인이 mod입니다. [mod 만들기](/docs/ko/plugins/mods/create)를 참조하십시오.795Claude Code 내부에서 실행되고 인터페이스에 그릴 수 있는 JavaScript 함수로 훅을 작성하려면, 같은 `hooks/hooks.json`의 `modules` 키 아래에 모듈 파일을 나열합니다. 이러한 모듈이 있는 플러그인이 mod입니다. [mod 만들기](/docs/ko/plugins/mods/create)를 참조하십시오.

794 796 

795<h4 id="when-plugin-hooks-fire">797<h4 id="when-plugin-hooks-fire">

Details

209* **자체 저장소가 있는 플러그인**: 설치는 `Dependency "secrets-vault@your-marketplace" has no git tag satisfying`을 포함하는 메시지로 실패합니다.209* **자체 저장소가 있는 플러그인**: 설치는 `Dependency "secrets-vault@your-marketplace" has no git tag satisfying`을 포함하는 메시지로 실패합니다.

210* **상대 경로로 참조되는 플러그인**: 설치는 대신 마켓플레이스의 현재 복사본을 사용하고 플러그인이 로드될 때 제약이 확인됩니다. 해당 복사본이 범위를 벗어나면 종속 플러그인은 비활성화된 상태로 유지되고 `claude plugin list`는 `Requires "secrets-vault@your-marketplace" ~2.1.0, installed 3.0.0`을 표시합니다.210* **상대 경로로 참조되는 플러그인**: 설치는 대신 마켓플레이스의 현재 복사본을 사용하고 플러그인이 로드될 때 제약이 확인됩니다. 해당 복사본이 범위를 벗어나면 종속 플러그인은 비활성화된 상태로 유지되고 `claude plugin list`는 `Requires "secrets-vault@your-marketplace" ~2.1.0, installed 3.0.0`을 표시합니다.

211 211 

212마켓플레이스가 상대 경로로 참조하는 플러그인의 경우 로컬 폴더 경로로 추가한 마켓플레이스도 폴더가 git 저장소일 때 해당 폴더의 git 태그에 대해 제약을 해결합니다. Claude Code v2.1.196 이상이 필요합니다. git 저장소가 아닌 로컬 폴더에는 태그가 없으므로 Claude Code는 대신 폴더의 현재 내용에서 의존성을 설치합니다.212마켓플레이스가 상대 경로로 참조하는 플러그인의 경우 로컬 폴더 경로로 추가한 마켓플레이스도 폴더가 git 저장소일 때 해당 폴더의 git 태그에 대해 제약을 해결합니다. git 저장소가 아닌 로컬 폴더에는 태그가 없으므로 Claude Code는 대신 폴더의 현재 내용에서 의존성을 설치합니다.

213 213 

214<h3 id="confirm-the-resolved-version">214<h3 id="confirm-the-resolved-version">

215 해결된 버전 확인215 해결된 버전 확인


217 217 

218제약이 해결된 버전을 확인하려면 셸에서 `claude plugin list`를 실행합니다. 태그 해결 의존성은 `2.1.0-8713c5b11005`와 같은 12자 커밋 접미사로 버전을 표시합니다.218제약이 해결된 버전을 확인하려면 셸에서 `claude plugin list`를 실행합니다. 태그 해결 의존성은 `2.1.0-8713c5b11005`와 같은 12자 커밋 접미사로 버전을 표시합니다.

219 219 

220제약 확인은 `plugin.json`의 `version`이 뒤처져 있더라도 태그의 버전을 사용합니다.220제약 확인은 해당 커밋의 `plugin.json`이 뒤처져 있더라도 `plugin.json`의 `version` 대신 태그의 버전을 사용합니다.

221 221 

222태그를 다른 커밋으로 강제 이동하면 다음 설치는 오래된 캐시된 복사본을 재사용하는 대신 해당 커밋의 내용을 가져옵니다. 플러그인의 버전이 캐시 키가 되는 방법은 [버전 및 업데이트](/docs/ko/plugins/loading#versions-and-updates)를 참조하세요.222태그를 다른 커밋으로 강제 이동하면 다음 설치는 오래된 캐시된 복사본을 재사용하는 대신 해당 커밋의 내용을 가져옵니다. 플러그인의 버전이 캐시 키가 되는 방법은 [버전 및 업데이트](/docs/ko/plugins/loading#versions-and-updates)를 참조하세요.

223 223 

Details

146* **`archive`**: HTTPS를 통해 다운로드된 zip. 사용자는 `git`이나 계정이 필요하지 않으며 URL에 대한 네트워크 액세스만 필요합니다. Claude Code v2.1.224 이상이 필요합니다. 각 아카이브를 `sha256`으로 고정하여 Claude Code가 변경된 다운로드를 거부하도록 합니다. 다운로드와 함께 자격 증명을 보내려면 [아카이브 다운로드 인증](#authenticate-archive-downloads)을 참조하세요.146* **`archive`**: HTTPS를 통해 다운로드된 zip. 사용자는 `git`이나 계정이 필요하지 않으며 URL에 대한 네트워크 액세스만 필요합니다. Claude Code v2.1.224 이상이 필요합니다. 각 아카이브를 `sha256`으로 고정하여 Claude Code가 변경된 다운로드를 거부하도록 합니다. 다운로드와 함께 자격 증명을 보내려면 [아카이브 다운로드 인증](#authenticate-archive-downloads)을 참조하세요.

147* **공개 git 저장소**: Claude Code는 항목이 `https://` URL을 제공할 때 자격 증명 없이 HTTPS를 통해 공개 `url` 또는 `git-subdir` 소스를 복제합니다. `github` 소스 또는 `owner/repo`로 작성된 `git-subdir` 소스의 경우 GitHub SSH 키가 없는 사용자는 `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`을 설정합니다.147* **공개 git 저장소**: Claude Code는 항목이 `https://` URL을 제공할 때 자격 증명 없이 HTTPS를 통해 공개 `url` 또는 `git-subdir` 소스를 복제합니다. `github` 소스 또는 `owner/repo`로 작성된 `git-subdir` 소스의 경우 GitHub SSH 키가 없는 사용자는 `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`을 설정합니다.

148 148 

149SSH 키가 없는 머신의 셸에서 `claude plugin install`이 이 변수 없이 성공하더라도 안내에 `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`을 유지하세요. `github` 소스의 경우 해당 명령은 자체적으로 HTTPS로 대체하며 `SSH not configured, cloning via HTTPS`를 출력할 수 있습니다. 세션 내 `/plugin`에서 실행한 설치와 플러그인 업데이트는 HTTPS로 대체하지 않으므로, 이 변수가 없으면 GitHub SSH 키가 없는 사용자에게는 실패합니다.

150 

149한 네트워크의 팀의 경우 공유 파일 시스템의 `directory` 마켓플레이스도 git 계정 없이 작동합니다. 사용자는 경로에 대한 읽기 액세스만 필요합니다.151한 네트워크의 팀의 경우 공유 파일 시스템의 `directory` 마켓플레이스도 git 계정 없이 작동합니다. 사용자는 경로에 대한 읽기 액세스만 필요합니다.

150 152 

151<h3 id="what-background-auto-update-does-with-credentials">153<h3 id="what-background-auto-update-does-with-credentials">

Details

80 80 

81클라우드 세션은 저장소가 [`extraKnownMarketplaces`](/docs/ko/settings-reference#extraknownmarketplaces) 아래에 나열하는 마켓플레이스를 추가하지 않습니다. 이는 작업 영역 신뢰 대화 상자가 필요하기 때문이며, 클라우드 세션은 절대 표시하지 않습니다.81클라우드 세션은 저장소가 [`extraKnownMarketplaces`](/docs/ko/settings-reference#extraknownmarketplaces) 아래에 나열하는 마켓플레이스를 추가하지 않습니다. 이는 작업 영역 신뢰 대화 상자가 필요하기 때문이며, 클라우드 세션은 절대 표시하지 않습니다.

82 82 

83프로젝트 범위 기술 디렉토리 플러그인은 세션의 [기본 작업 디렉토리](/docs/ko/permissions#working-directories)의 `.claude/skills/`에서만 로드되며, 해당 폴더에 대한 [작업 영역 신뢰 대화 상자](/docs/ko/permissions#what-runs-before-you-trust-a-folder)를 수락한 후에만 로드됩니다. 일반 기술 및 명령이 하는 방식으로 [저장소 루트까지 부모 디렉토리를 검색](/docs/ko/skills#discovery-from-parent-and-nested-directories)하지 않습니다. 하위 디렉토리에서 시작하면 저장소 루트의 플러그인이 로드되지 않습니다. 대신 저장소 루트에서 시작하거나, [v2.1.246 이상에서 `/cd`로 세션을 이동](/docs/ko/permissions#move-the-session-to-another-directory)합니다.83저장소의 `.claude/skills/`에 있는 플러그인이 로드되지 않으면 세션을 어디에서 시작했는지, 그리고 폴더를 신뢰했는지 확인합니다:

84 

85* **하위 디렉터리에서 시작한 경우**: 저장소 루트의 플러그인이 로드되지 않습니다. Claude Code는 세션의 [기본 작업 디렉터리](/docs/ko/permissions#working-directories)의 `.claude/skills/`를 읽으며, 일반 스킬 및 명령과 달리 플러그인을 찾기 위해 [부모 디렉터리를 검색](/docs/ko/skills#discovery-from-parent-and-nested-directories)하지 않습니다. 대신 저장소 루트에서 시작하거나, [v2.1.246 이상에서 `/cd`로 세션을 그곳으로 이동](/docs/ko/permissions#move-the-session-to-another-directory)합니다

86* **데스크톱 앱에서 worktree로 시작한 경우**: 플러그인은 워크트리의 `.claude/skills/`가 아닌 기본 체크아웃의 `.claude/skills/`에서 로드됩니다. [워크트리가 기본 체크아웃과 공유하는 항목](/docs/ko/worktrees#what-worktrees-share-with-the-main-checkout)을 참조합니다

87* **신뢰하지 않은 폴더에서 시작한 경우**: 플러그인은 해당 폴더에 대한 [워크스페이스 신뢰 대화 상자](/docs/ko/permissions#what-runs-before-you-trust-a-folder)를 수락한 후에만 로드됩니다

84 88 

85프로젝트 범위 플러그인은 저장소에 체크인되고 이를 복제하는 모든 협력자에게 도달합니다. 해당 콘텐츠는 사용자가 아닌 저장소에서 오기 때문에 `.claude/settings.json`의 프로젝트 허용 규칙에 적용되는 것과 동일한 신뢰 확인 후에만 로드됩니다. 부모 폴더를 신뢰하거나 `-p`로 실행하는 것으로는 충분하지 않습니다. 코드를 실행하는 구성 요소는 추가로 제한됩니다:89프로젝트 범위 플러그인은 저장소에 체크인되고 이를 복제하는 모든 협력자에게 도달합니다. 해당 콘텐츠는 사용자가 아닌 저장소에서 오기 때문에 `.claude/settings.json`의 프로젝트 허용 규칙에 적용되는 것과 동일한 신뢰 확인 후에만 로드됩니다. 부모 폴더를 신뢰하거나 `-p`로 실행하는 것으로는 충분하지 않습니다. 코드를 실행하는 구성 요소는 추가로 제한됩니다:

86 90 


421 425 

422순서가 매니페스트 이름을 비교하기 때문에 `hello-plugin`이라는 `--plugin-dir` 플러그인은 해당 플러그인의 매니페스트도 `"name": "hello-plugin"`을 말할 때 `hello@example-marketplace`를 대체합니다.426순서가 매니페스트 이름을 비교하기 때문에 `hello-plugin`이라는 `--plugin-dir` 플러그인은 해당 플러그인의 매니페스트도 `"name": "hello-plugin"`을 말할 때 `hello@example-marketplace`를 대체합니다.

423 427 

428<h3 id="hooks-when-two-enabled-plugins-share-a-name">

429 활성화된 두 플러그인이 이름을 공유할 때의 훅

430</h3>

431 

432서로 다른 마켓플레이스에서 매니페스트 이름이 같은 두 플러그인을 설치하고 활성화하면 둘 다 `/plugin`에 활성화된 것으로 표시되지만, 그중 하나의 훅은 제외됩니다. 이름당 하나의 플러그인만 `hooks/hooks.json`의 훅을 등록하고, 이름당 하나의 플러그인만 [훅 모듈](/docs/ko/plugins/mods/overview)을 로드합니다. 조직의 관리형 설정이 복사본 중 하나를 켜면 해당 복사본이 이름을 보유합니다. 그렇지 않으면 Claude Code가 먼저 로드하는 복사본이 이름을 보유합니다.

433 

434어떤 복사본이 이름을 보유하는지 확인하려면 세션에서 `/plugin`을 실행하고 **Errors** 탭을 엽니다. 훅이 제외된 복사본에 대한 메모가 그곳에 표시되어 이름을 보유한 복사본을 알려 주며, 제외된 복사본의 세부 정보에도 같은 메모가 표시됩니다. `hooks/hooks.json` 훅의 경우 메모는 `Its hooks.json hooks do not run`으로 시작하고, 훅 모듈의 경우 `Its hooks module does not load`로 시작합니다. 이 메모를 보려면 Claude Code v2.1.296 이상이 필요합니다.

435 

436제외된 복사본의 훅을 대신 실행하려면 이름을 보유한 복사본을 비활성화하거나 제거한 다음 세션에서 `/reload-plugins`를 실행합니다. 다시 로드하면 남은 복사본의 훅이 등록되고 메모가 지워집니다. 이름을 보유한 복사본이 관리형 설정에서 켜는 복사본이면 비활성화할 수 없으며, 두 복사본이 모두 설치되어 있는 동안 다른 복사본의 훅은 꺼진 상태로 유지됩니다.

437 

424<h3 id="keep-a-session-only-plugin-from-loading">438<h3 id="keep-a-session-only-plugin-from-loading">

425 세션 전용 플러그인이 로드되지 않도록 유지439 세션 전용 플러그인이 로드되지 않도록 유지

426</h3>440</h3>

Details

51* <span id="reserved-name-spellings" />**예약된 이름의 다른 철자**: 예약된 이름과 후행 점으로만 다르거나 하이픈 대신 다른 기호(언더스코어 제외)를 사용하는 이름이므로 `claude.code.plugins`는 `claude-code-plugins`로 계산됩니다. 마켓플레이스 추가는 [`is another spelling of "<reserved>", a reserved marketplace name`](/docs/ko/errors#marketplace-name-is-another-spelling-of-a-reserved-name)으로 실패하고, 하나 아래에 등록된 마켓플레이스는 로드를 중지합니다. 이 확인에는 Claude Code v2.1.280 이상이 필요합니다.51* <span id="reserved-name-spellings" />**예약된 이름의 다른 철자**: 예약된 이름과 후행 점으로만 다르거나 하이픈 대신 다른 기호(언더스코어 제외)를 사용하는 이름이므로 `claude.code.plugins`는 `claude-code-plugins`로 계산됩니다. 마켓플레이스 추가는 [`is another spelling of "<reserved>", a reserved marketplace name`](/docs/ko/errors#marketplace-name-is-another-spelling-of-a-reserved-name)으로 실패하고, 하나 아래에 등록된 마켓플레이스는 로드를 중지합니다. 이 확인에는 Claude Code v2.1.280 이상이 필요합니다.

52* **Claude Code가 마켓플레이스에서 오지 않는 플러그인에 사용하는 이름**: [`--plugin-dir`](/docs/ko/cli-reference)로 로드된 플러그인의 경우 `inline`, 기본 제공 플러그인의 경우 `builtin`, [`.claude/skills/`](/docs/ko/skills)에서 자동 로드되는 플러그인의 경우 `skills-dir`, claude.ai 계정에서 동기화된 플러그인의 경우 `synced`. `claude-plugin-test`도 예약됩니다. `skills-dir`은 `{"source": "skills-dir"}`로도 `strictKnownMarketplaces` 및 `blockedMarketplaces`에 나타나며, [소스 값이 정책 목록에서만 유효함](#source-values-valid-only-in-policy-lists)에서 설명합니다.52* **Claude Code가 마켓플레이스에서 오지 않는 플러그인에 사용하는 이름**: [`--plugin-dir`](/docs/ko/cli-reference)로 로드된 플러그인의 경우 `inline`, 기본 제공 플러그인의 경우 `builtin`, [`.claude/skills/`](/docs/ko/skills)에서 자동 로드되는 플러그인의 경우 `skills-dir`, claude.ai 계정에서 동기화된 플러그인의 경우 `synced`. `claude-plugin-test`도 예약됩니다. `skills-dir`은 `{"source": "skills-dir"}`로도 `strictKnownMarketplaces` 및 `blockedMarketplaces`에 나타나며, [소스 값이 정책 목록에서만 유효함](#source-values-valid-only-in-policy-lists)에서 설명합니다.

53* **`npm`, `pip`, `uv`, `cargo`, `github`, `gh`**: 모든 대소문자로 예약됨. 이 확인에는 Claude Code v2.1.275 이상이 필요합니다.53* **`npm`, `pip`, `uv`, `cargo`, `github`, `gh`**: 모든 대소문자로 예약됨. 이 확인에는 Claude Code v2.1.275 이상이 필요합니다.

54* **모든 JavaScript 객체가 가지는 멤버 이름**: `constructor`, `hasOwnProperty`, `isPrototypeOf`, `propertyIsEnumerable`, `toLocaleString`, `toString`, `valueOf`. `claude plugin marketplace add`는 이 중 하나를 사용하는 마켓플레이스를 [`Claude Code reserves this name and cannot register a marketplace under it`](/docs/ko/plugins/troubleshooting#claude-code-reserves-this-name)으로 거부합니다. 이 확인에는 Claude Code v2.1.296 이상이 필요합니다.

54* **`claudeai-`로 시작하는 이름**: claude.ai에서 호스팅되는 마켓플레이스를 위해 예약됨. `claude plugin marketplace add`는 `Cannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.ai`로 이를 사용하는 다른 마켓플레이스를 거부합니다.55* **`claudeai-`로 시작하는 이름**: claude.ai에서 호스팅되는 마켓플레이스를 위해 예약됨. `claude plugin marketplace add`는 `Cannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.ai`로 이를 사용하는 다른 마켓플레이스를 거부합니다.

55* **등록된 GitHub 마켓플레이스의 다운로드 폴더, `<owner>-<repo>`**: Claude Code는 `acme/x-tools`와 같은 `github` 소스에서 추가된 마켓플레이스를 해당 마켓플레이스 자체의 `name`과 관계없이 `acme-x-tools`라는 폴더를 통해 다운로드합니다. 해당 마켓플레이스가 `acme-x-tools` 이외의 이름으로 등록되어 있는 동안, `claude plugin marketplace add`는 `acme-x-tools`라는 이름의 다른 마켓플레이스를 다운로드한 후 거부하고 `Can't use the marketplace name "acme-x-tools"`를 보고합니다. 이 확인에는 Claude Code v2.1.290 이상이 필요합니다.56* **등록된 GitHub 마켓플레이스의 다운로드 폴더, `<owner>-<repo>`**: Claude Code는 `acme/x-tools`와 같은 `github` 소스에서 추가된 마켓플레이스를 해당 마켓플레이스 자체의 `name`과 관계없이 `acme-x-tools`라는 폴더를 통해 다운로드합니다. 해당 마켓플레이스가 `acme-x-tools` 이외의 이름으로 등록되어 있는 동안, `claude plugin marketplace add`는 `acme-x-tools`라는 이름의 다른 마켓플레이스를 다운로드한 후 거부하고 `Can't use the marketplace name "acme-x-tools"`를 보고합니다. 이 확인에는 Claude Code v2.1.290 이상이 필요합니다.

56 57 

Details

68* **가드는 관리 대상을 보호합니다.** 사용자의 mod는 관리형 훅이 받는 내용이나 결정하는 내용, 시스템 프롬프트, 관리형 `CLAUDE.md` 및 기타 관리형 지침, 모든 mod가 설정으로 읽는 내용, 관리형 MCP 서버의 도구와 설명을 변경할 수 없습니다.68* **가드는 관리 대상을 보호합니다.** 사용자의 mod는 관리형 훅이 받는 내용이나 결정하는 내용, 시스템 프롬프트, 관리형 `CLAUDE.md` 및 기타 관리형 지침, 모든 mod가 설정으로 읽는 내용, 관리형 MCP 서버의 도구와 설명을 변경할 수 없습니다.

69* **그 밖의 모든 것은 허용됩니다.** 가드는 다른 제한을 추가하지 않습니다. 사용자의 mod는 여전히 해당 사용자의 권한으로 파일을 읽고 쓰고, 프로세스를 시작하고, 네트워크 요청을 보내고, 도구 호출과 프롬프트를 다시 작성하고, 도구 호출을 거부하고, 원래라면 확인을 요청했을 호출을 승인하고, 인터페이스에 그릴 수 있습니다.69* **그 밖의 모든 것은 허용됩니다.** 가드는 다른 제한을 추가하지 않습니다. 사용자의 mod는 여전히 해당 사용자의 권한으로 파일을 읽고 쓰고, 프로세스를 시작하고, 네트워크 요청을 보내고, 도구 호출과 프롬프트를 다시 작성하고, 도구 호출을 거부하고, 원래라면 확인을 요청했을 호출을 승인하고, 인터페이스에 그릴 수 있습니다.

70* **deny 규칙과 관리형 훅이 우선합니다.** 가드가 로드된 환경에서는 규칙이 어느 설정 파일에 있든 사용자의 mod가 `deny` 규칙이 거부하는 호출을 승인할 수 없습니다. 관리형 설정의 `PreToolUse` 훅에 의한 차단도 최종적입니다. 두 가지 모두 Claude의 도구 호출에 적용됩니다. 어느 것도 mod 자체의 [`$.fs` 및 `$.process` 호출](/docs/ko/plugins/mods/api#reach-files-processes-and-the-network)에는 적용되지 않습니다. `Read(.env)`가 거부되어 있어도 mod는 여전히 `$.fs.read`로 해당 파일을 읽거나 파일을 읽는 프로그램을 시작할 수 있습니다. 이러한 호출을 제한하려면 mod가 로드되지 않도록 하거나 [정책 mod](#enforce-a-policy-with-a-mod-of-your-own)에서 호출을 처리하십시오.70* **deny 규칙과 관리형 훅이 우선합니다.** 가드가 로드된 환경에서는 규칙이 어느 설정 파일에 있든 사용자의 mod가 `deny` 규칙이 거부하는 호출을 승인할 수 없습니다. 관리형 설정의 `PreToolUse` 훅에 의한 차단도 최종적입니다. 두 가지 모두 Claude의 도구 호출에 적용됩니다. 어느 것도 mod 자체의 [`$.fs` 및 `$.process` 호출](/docs/ko/plugins/mods/api#reach-files-processes-and-the-network)에는 적용되지 않습니다. `Read(.env)`가 거부되어 있어도 mod는 여전히 `$.fs.read`로 해당 파일을 읽거나 파일을 읽는 프로그램을 시작할 수 있습니다. 이러한 호출을 제한하려면 mod가 로드되지 않도록 하거나 [정책 mod](#enforce-a-policy-with-a-mod-of-your-own)에서 호출을 처리하십시오.

71* **다른 권한 검사는 재정의될 수 있습니다.** 도구 호출을 승인하는 사용자의 mod는 `ask` 규칙이 확인을 요청할 호출이나 관리형 설정 외부의 `PreToolUse` 훅이 차단한 호출을 승인할 수 있습니다. 자동 모드에서는 mod가 승인한 호출이 분류기 검사 없이 실행됩니다.71* **다른 권한 검사는 재정의될 수 있습니다.** 도구 호출을 승인하는 사용자의 mod는 `ask` 규칙이 확인을 요청할 호출이나 관리형 설정 외부의 `PreToolUse` 훅이 차단한 호출을 승인할 수 있습니다. 자동 모드에서는 mod가 승인한 호출이 분류기 검사 없이 실행됩니다. mod의 `tool.check` 승인으로 건너뛸 수 없는 프롬프트는 [훅으로 권한 확장하기](/docs/ko/permissions#extend-permissions-with-hooks)를 참조하십시오.

72 72 

73가드의 소스는 [Claude Code 저장소의 `mods/sec-default` 디렉터리](https://github.com/anthropics/claude-code/tree/main/mods/sec-default)에 공개되어 있습니다.73가드의 소스는 [Claude Code 저장소의 `mods/sec-default` 디렉터리](https://github.com/anthropics/claude-code/tree/main/mods/sec-default)에 공개되어 있습니다.

74 74 


81* **설정 훅은 계속 작동합니다.** 설정 파일과 플러그인의 `hooks/hooks.json`에 있는 command, HTTP, prompt, agent 훅은 mod와 함께 이전과 같이 실행됩니다. 이들 중 deprecated된 것은 없습니다.81* **설정 훅은 계속 작동합니다.** 설정 파일과 플러그인의 `hooks/hooks.json`에 있는 command, HTTP, prompt, agent 훅은 mod와 함께 이전과 같이 실행됩니다. 이들 중 deprecated된 것은 없습니다.

82* **가드가 로드된 환경에서는 deny 규칙이 우선합니다.** [`allowModsToOverrideDenyRules`](#set-options-on-the-built-in-guard)를 설정하지 않는 한, 사용자의 mod는 `deny` 규칙이 거부하는 호출을 승인할 수 없습니다.82* **가드가 로드된 환경에서는 deny 규칙이 우선합니다.** [`allowModsToOverrideDenyRules`](#set-options-on-the-built-in-guard)를 설정하지 않는 한, 사용자의 mod는 `deny` 규칙이 거부하는 호출을 승인할 수 없습니다.

83* **관리형 훅이 먼저 실행됩니다.** 관리형 설정의 `PreToolUse` 훅은 어떤 mod보다도 먼저 도구 호출을 확인하며, 그 차단은 최종적입니다. 이후 mod가 호출을 다시 작성하면 관리형 훅이 다시 작성된 호출에 대해 다시 실행되므로 차단은 여전히 적용됩니다. 다른 설정 파일과 플러그인의 `PreToolUse` 훅은 마지막 mod 이후에 실행되므로, 도구를 실행하는 대신 자체 결과를 반환하는 mod는 해당 훅이 실행되지 않도록 합니다. [mod 실행 순서](/docs/ko/plugins/mods/events#the-order-mods-run-in)를 참조하십시오.83* **관리형 훅이 먼저 실행됩니다.** 관리형 설정의 `PreToolUse` 훅은 어떤 mod보다도 먼저 도구 호출을 확인하며, 그 차단은 최종적입니다. 이후 mod가 호출을 다시 작성하면 관리형 훅이 다시 작성된 호출에 대해 다시 실행되므로 차단은 여전히 적용됩니다. 다른 설정 파일과 플러그인의 `PreToolUse` 훅은 마지막 mod 이후에 실행되므로, 도구를 실행하는 대신 자체 결과를 반환하는 mod는 해당 훅이 실행되지 않도록 합니다. [mod 실행 순서](/docs/ko/plugins/mods/events#the-order-mods-run-in)를 참조하십시오.

84* **네트워크 정책은 `$.http.fetch`에 적용됩니다.** 조직에서 웹 가져오기를 끄거나 세션에서 필수적이지 않은 네트워크 트래픽이 꺼져 있으면, Claude Code는 mod가 `$.http.fetch`로 보내는 네트워크 요청을 거부합니다. 이 정책은 mod가 `$.process.run`으로 시작하는 프로그램에는 적용되지 않습니다. 해당 프로그램은 사용자 자신의 액세스 권한으로 네트워크에 접근합니다.84* **네트워크 정책은 `$.http.fetch`에 적용됩니다.**

85 

86 * **조직 정책에서 WebFetch를 허용하지 않는 경우**: Claude Code는 모든 mod의 `$.http.fetch` 요청도 거부합니다. [WebFetch 사용 가능 여부](/docs/ko/tools-reference#webfetch-availability)를 참조하십시오.

87 * **[`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/ko/env-vars)를 설정한 경우**: 관리자나 사용자가 설치한 mod는 여전히 이러한 요청을 보낼 수 있습니다. 이 변수는 [Claude Code에 기본 제공되는 mod](/docs/ko/plugins/mods/overview#mods-built-into-claude-code)와, 세션의 Anthropic 자격 증명을 포함하는 `$.http.fetch` 요청만 중지합니다. v2.1.288 이전에는 이 변수가 모든 mod의 `$.http.fetch` 요청을 중지했습니다.

88 

89 두 가지 모두 mod가 `$.process.run`으로 시작하는 프로그램에는 적용되지 않습니다. 해당 프로그램은 사용자 자신의 액세스 권한으로 네트워크에 접근합니다.

85* **플러그인 제어는 mod에도 적용됩니다.** mod는 플러그인이므로 `strictKnownMarketplaces`와 같은 [사용자가 설치할 수 있는 항목을 제한하는 설정](/docs/ko/plugins/org#restrict-what-users-can-install)에 따라 설치 가능 여부가 결정됩니다.90* **플러그인 제어는 mod에도 적용됩니다.** mod는 플러그인이므로 `strictKnownMarketplaces`와 같은 [사용자가 설치할 수 있는 항목을 제한하는 설정](/docs/ko/plugins/org#restrict-what-users-can-install)에 따라 설치 가능 여부가 결정됩니다.

86* **mod는 권한 프롬프트를 변경할 수 없습니다.** mod는 Claude Code 인터페이스의 상당 부분의 스타일을 바꿀 수 있지만 권한 프롬프트는 바꿀 수 없으므로, 프롬프트에 표시되는 내용을 변경할 수 없습니다. 다만 [기본 동작 알아보기](#know-what-happens-by-default)에서 설명한 것처럼, mod는 프롬프트가 나타나기 전에 도구 호출을 승인하거나 거부할 수 있습니다.91* **mod는 권한 프롬프트를 변경할 수 없습니다.** mod는 Claude Code 인터페이스의 상당 부분의 스타일을 바꿀 수 있지만 권한 프롬프트는 바꿀 수 없으므로, 프롬프트에 표시되는 내용을 변경할 수 없습니다. 다만 [기본 동작 알아보기](#know-what-happens-by-default)에서 설명한 것처럼, mod는 프롬프트가 나타나기 전에 도구 호출을 승인하거나 거부할 수 있습니다.

87* **신뢰 프롬프트가 먼저 나타납니다.** 사용자가 아직 신뢰하지 않은 디렉터리의 대화형 세션에서는 사용자가 신뢰 프롬프트에 응답할 때까지 어떤 mod도 로드되지 않습니다.92* **신뢰 프롬프트가 먼저 나타납니다.** 사용자가 아직 신뢰하지 않은 디렉터리의 대화형 세션에서는 사용자가 신뢰 프롬프트에 응답할 때까지 어떤 mod도 로드되지 않습니다.

Details

303| `$.session` | `messages()`는 트랜스크립트를 `{ role, text, toolUses }`의 목록으로 반환합니다. 작업 디렉터리, 모델 등도 제공합니다. [`usage()`](/docs/ko/plugins/mods/reference#mods-api-methods)는 컨텍스트 윈도우 사용량과 플랜 한도를 반환합니다. |303| `$.session` | `messages()`는 트랜스크립트를 `{ role, text, toolUses }`의 목록으로 반환합니다. 작업 디렉터리, 모델 등도 제공합니다. [`usage()`](/docs/ko/plugins/mods/reference#mods-api-methods)는 컨텍스트 윈도우 사용량과 플랜 한도를 반환합니다. |

304| `$.mcp` | 연결된 MCP 서버의 도구를 `call`합니다 |304| `$.mcp` | 연결된 MCP 서버의 도구를 `call`합니다 |

305 305 

306파일과 프로세스에는 몇 가지 고유한 규칙이 있습니다.306파일, 프로세스, 요청에는 몇 가지 고유한 규칙이 있습니다.

307 307 

308* **경로**: 상대 경로는 세션의 작업 디렉터리를 기준으로 해석됩니다308* **경로**: 상대 경로는 세션의 작업 디렉터리, 또는 훅이 처리 중인 이벤트를 발생시킨 서브에이전트의 작업 디렉터리를 기준으로 해석됩니다

309* **`$.fs.list`**: 한 디렉터리의 항목을 `{ name, kind, size, isLink }` 형태로 반환하며, 재귀적으로 동작하지 않습니다309* **`$.fs.list`**: 한 디렉터리의 항목을 `{ name, kind, size, isLink }` 형태로 반환하며, 재귀적으로 동작하지 않습니다

310* **`$.process.run`**: 인수 목록을 받으며 셸을 사용하지 않습니다. 종료 코드와 관계없이 `{ exitCode, stdout, stderr }`로 resolve됩니다. 프로그램을 시작할 수 없거나 타임아웃(기본값 30초) 시점에 여전히 실행 중이면 reject되므로 `try`와 `catch`로 감싸야 합니다.310* **`$.process.run`**: 인수 목록을 받으며 셸을 사용하지 않습니다. 종료 코드와 관계없이 `{ exitCode, stdout, stderr }`로 resolve됩니다. 프로그램을 시작할 수 없거나 타임아웃(기본값 30초) 시점에 여전히 실행 중이면 reject되므로 `try`와 `catch`로 감싸야 합니다.

311* **`$.http.fetch`**: 최대 5번까지 리디렉션을 따릅니다. 다른 origin으로 리디렉션되면 설정한 요청 헤더 중 `accept`, `accept-language`, `content-type`, `user-agent`만 유지하고 나머지는 제거하므로, `Authorization` 같은 다른 헤더에 의존하는 요청은 해당 리디렉션 후 실패할 수 있습니다. 타임아웃과 본문 크기는 [제한 사항](/docs/ko/plugins/mods/reference#limits)에 나와 있습니다.

311 312 

312이러한 호출 각각은 그 자체로 하나의 이벤트이며, `$.`를 제외한 네임스페이스와 메서드 이름으로 명명됩니다. 예를 들어 `$.fs.read`의 이벤트는 `fs.read`입니다. [체인의 앞쪽](/docs/ko/plugins/mods/events#the-order-mods-run-in)에 있는 mod는 사용자의 호출을 관찰하거나, 재작성하거나, 거부할 수 있으며, 조직은 이 방식으로 mod가 접근할 수 있는 범위를 제한합니다.313이러한 호출 각각은 그 자체로 하나의 이벤트이며, `$.`를 제외한 네임스페이스와 메서드 이름으로 명명됩니다. 예를 들어 `$.fs.read`의 이벤트는 `fs.read`입니다. [체인의 앞쪽](/docs/ko/plugins/mods/events#the-order-mods-run-in)에 있는 mod는 사용자의 호출을 관찰하거나, 재작성하거나, 거부할 수 있으며, 조직은 이 방식으로 mod가 접근할 수 있는 범위를 제한합니다.

313 314 

Details

148| `agent.offer` | 서브에이전트 유형이 Claude에 제공될 때 | 제공하지 않으려면 `{ isOffered: false }` |148| `agent.offer` | 서브에이전트 유형이 Claude에 제공될 때 | 제공하지 않으려면 `{ isOffered: false }` |

149| `agent.spawn` | 서브에이전트 또는 [에이전트 팀](/docs/ko/agent-teams) 팀원이 시작되기 직전. 팀원의 경우 `e.isTeammate`는 `true`입니다. | 모델을 선택하려면 `next({ ...e, model })`, 또는 `{ deny: reason }` |149| `agent.spawn` | 서브에이전트 또는 [에이전트 팀](/docs/ko/agent-teams) 팀원이 시작되기 직전. 팀원의 경우 `e.isTeammate`는 `true`입니다. | 모델을 선택하려면 `next({ ...e, model })`, 또는 `{ deny: reason }` |

150 150 

151Claude가 [`SendMessage`](/docs/ko/sub-agents#resume-subagents) 도구로 서브에이전트를 재개할 때는 `agent.spawn` 훅이 다시 실행되지 않습니다. 서브에이전트를 재개하는 `SendMessage` 호출을 거부하려면 [`tool.call`](/docs/ko/plugins/mods/events#guard-or-change-a-tool-call) 훅에서 해당 도구를 매칭하세요.

152 

151<h3 id="interface">153<h3 id="interface">

152 인터페이스154 인터페이스

153</h3>155</h3>


175| [`plugin.register`](/docs/ko/plugins/mods/admin#enforce-a-policy-with-a-mod-of-your-own) | 훅 모듈이 로드되기 직전. `e.uses`는 해당 모듈의 이벤트, mods API 호출, 환경 변수, 상태를 `claude plugin validate`가 출력하는 형식으로 나열합니다. 각 호출은 `fs.read`처럼 `$.` 접두사 없이 작성됩니다. | `{ refuse: reason }` |177| [`plugin.register`](/docs/ko/plugins/mods/admin#enforce-a-policy-with-a-mod-of-your-own) | 훅 모듈이 로드되기 직전. `e.uses`는 해당 모듈의 이벤트, mods API 호출, 환경 변수, 상태를 `claude plugin validate`가 출력하는 형식으로 나열합니다. 각 호출은 `fs.read`처럼 `$.` 접두사 없이 작성됩니다. | `{ refuse: reason }` |

176| `engine.create` | 이 mod를 위한 mods API가 구성될 때 | 네임스페이스를 추가하도록 변경한 mods API. `user` [계층](#the-hook-function) 외부의 mod는 네임스페이스를 제외할 수도 있습니다. |178| `engine.create` | 이 mod를 위한 mods API가 구성될 때 | 네임스페이스를 추가하도록 변경한 mods API. `user` [계층](#the-hook-function) 외부의 mod는 네임스페이스를 제외할 수도 있습니다. |

177 179 

180`engine.create`에서 추가한 네임스페이스의 메서드를 다른 mod의 훅이 호출하면, 해당 이벤트의 모든 훅이 반환될 때까지 메서드의 `$` 호출은 그 훅의 컨텍스트에서 실행됩니다. 예를 들어 상대 경로는 해당 훅의 작업 디렉터리를 기준으로 확인되며, `$.prompt.submit`은 턴이 해당 훅을 기다리는 동안 거부됩니다. 그 이후에 메서드가 수행하는 호출은 mod 자체의 컨텍스트에서 실행됩니다.

181 

178<h3 id="telemetry">182<h3 id="telemetry">

179 텔레메트리183 텔레메트리

180</h3>184</h3>


317| `$.process.run` 타임아웃 | 기본값 30초, 최대 10분 |321| `$.process.run` 타임아웃 | 기본값 30초, 최대 10분 |

318| `$.model.complete` `maxTokens` | 기본값 1024, 최대 64,000 또는 모델의 출력 제한 |322| `$.model.complete` `maxTokens` | 기본값 1024, 최대 64,000 또는 모델의 출력 제한 |

319| `$.fs.read` 및 `$.fs.write` | 파일 하나당 4 MiB |323| `$.fs.read` 및 `$.fs.write` | 파일 하나당 4 MiB |

324| `$.http.fetch` 요청 본문 | 4 MiB(문자 수 기준). 본문이 이보다 큰 호출은 거부됩니다. |

325| `$.http.fetch` 응답 본문 | 4 MiB. `text`에는 처음 4 MiB가 담기며 나머지는 읽지 않습니다. `Content-Length` 헤더에 이보다 큰 값이 선언된 경우에는 대신 호출이 거부되며, 그 사유는 `is over the 4194304-byte limit`로 끝납니다. 단, 리디렉션 이후의 마지막 요청이 `HEAD` 메서드를 사용하는 경우는 예외입니다. `HEAD` 예외에는 Claude Code v2.1.296 이상이 필요합니다. |

326| 리디렉션과 본문을 포함한 `$.http.fetch` 호출 하나 | 30초 |

327| `$.http.fetch` 호출 하나가 따르는 리디렉션 수 | 5 |

320| 훅의 `drop` 사유 또는 `config.set` `deny` 사유 | 4,096자. 이보다 긴 사유는 끝부분이 잘리며, drop 또는 deny는 그대로 적용됩니다. 잘라내기에는 Claude Code v2.1.292 이상이 필요하며, 이전 버전에서는 대신 훅이 [실패합니다](/docs/ko/plugins/mods/events#handle-a-hook-that-fails). |328| 훅의 `drop` 사유 또는 `config.set` `deny` 사유 | 4,096자. 이보다 긴 사유는 끝부분이 잘리며, drop 또는 deny는 그대로 적용됩니다. 잘라내기에는 Claude Code v2.1.292 이상이 필요하며, 이전 버전에서는 대신 훅이 [실패합니다](/docs/ko/plugins/mods/events#handle-a-hook-that-fails). |

321| 하나의 트리에 포함된 텍스트 | 처음 100,000자까지 그려집니다 |329| 하나의 트리에 포함된 텍스트 | 처음 100,000자까지 그려집니다 |

322| `Code`의 `language` 또는 `path`, `Select` 옵션의 `value`, `Client`의 `module` | 10,000자. 이보다 길면 Claude Code가 [해당 위치를 자체 버전으로 그립니다](/docs/ko/plugins/mods/interface#build-a-tree-from-elements). |330| `Code`의 `language` 또는 `path`, `Select` 옵션의 `value`, `Client`의 `module` | 10,000자. 이보다 길면 Claude Code가 [해당 위치를 자체 버전으로 그립니다](/docs/ko/plugins/mods/interface#build-a-tree-from-elements). |

Details

78| `disableAllHooks in managed settings` | 조직에서 설치된 플러그인의 훅을 껐습니다 |78| `disableAllHooks in managed settings` | 조직에서 설치된 플러그인의 훅을 껐습니다 |

79| `only managed plugins and built-in plugins run` | `allowManagedHooksOnly`가 설정되어 있거나, 관리형 설정이 아닌 설정 파일에 `disableAllHooks`가 설정되어 있습니다 |79| `only managed plugins and built-in plugins run` | `allowManagedHooksOnly`가 설정되어 있거나, 관리형 설정이 아닌 설정 파일에 `disableAllHooks`가 설정되어 있습니다 |

80| `installed plugins that are not managed load no hooks module in this mode (--bare)` | Claude Code를 `--bare`로 시작했습니다 |80| `installed plugins that are not managed load no hooks module in this mode (--bare)` | Claude Code를 `--bare`로 시작했습니다 |

81| `another plugin of that name loads first` | 두 플러그인의 이름이 같습니다. 관리되는 플러그인 또는 먼저 로드된 플러그인이 사용됩니다. |81| `another plugin of that name loads first` | 활성화된 다른 플러그인이 사용자의 mod와 같은 이름을 사용하며 [해당 이름을 차지하므로](/docs/ko/plugins/loading#hooks-when-two-enabled-plugins-share-a-name) 사용자의 훅 모듈이 로드되지 않습니다 |

82 82 

83<h3 id="messages-from-the-built-in-guard">83<h3 id="messages-from-the-built-in-guard">

84 기본 제공 가드의 메시지84 기본 제공 가드의 메시지


191 191 

192v2.1.292 이전에는 해당 호출이 두 번째로 실행되었기 때문에 프롬프트가 두 번 제출되거나, 명령이 두 번 실행되거나, 서브에이전트가 두 번 시작되었습니다.192v2.1.292 이전에는 해당 호출이 두 번째로 실행되었기 때문에 프롬프트가 두 번 제출되거나, 명령이 두 번 실행되거나, 서브에이전트가 두 번 시작되었습니다.

193 193 

194<h3 id="$-agent-register-refused-the-hooks-module-that-made-the-call-is-no-longer-loaded">

195 `$.agent.register refused: the hooks module that made the call is no longer loaded`

196</h3>

197 

198이 줄은 mod의 이름으로 시작하며(예: `first-mod: $.agent.register refused: the hooks module that made the call is no longer loaded (it was reloaded or removed)`), 에이전트는 등록되지 않습니다. 호출이 이루어지기 전에 mod가 다시 로드되었거나 언로드된 것입니다. 다시 로드하면 훅 모듈의 새 사본이 로드되는데, 이 호출은 아직 반환되지 않은 훅처럼 이전 사본에서 여전히 실행 중이던 코드에서 온 것입니다.

199 

200해당 훅이 이 거부를 처리하지 않으면 훅이 실패하고 Claude Code가 [해당 훅을 건너뜁니다](#hook-skipped). 계속 로드되어 있는 사본에서 에이전트를 등록하려면 [`session.start`](/docs/ko/plugins/mods/reference#session) 훅에서 호출하십시오. 이 훅은 다시 로드된 후 각각의 새 사본에서 다시 실행됩니다.

201 

194<h3 id="mods-that-run-in-the-hooks-worker-are-off-for-this-session">202<h3 id="mods-that-run-in-the-hooks-worker-are-off-for-this-session">

195 `mods that run in the hooks worker are off for this session`203 `mods that run in the hooks worker are off for this session`

196</h3>204</h3>

Details

256 256 

257v2.1.295 이전에는 Claude Code가 이 예의 추가를 성공한 것으로 보고했습니다.257v2.1.295 이전에는 Claude Code가 이 예의 추가를 성공한 것으로 보고했습니다.

258 258 

259<h3 id="claude-code-reserves-this-name">

260 `Cannot add marketplace "<name>": Claude Code reserves this name and cannot register a marketplace under it`

261</h3>

262 

263마켓플레이스를 추가했는데, 해당 `marketplace.json`의 [`name`](/docs/ko/plugins/marketplace-reference#top-level-fields)이 `constructor`, `toString`, `valueOf`와 같이 모든 JavaScript 객체가 가진 멤버 이름 중 하나입니다. Claude Code는 이러한 이름을 예약해 두므로 추가를 거부하고 아무것도 등록하지 않습니다. [예약된 이름](/docs/ko/plugins/marketplace-reference#reserved-names)에 해당 이름이 나열되어 있습니다.

264 

265이 예에서 마켓플레이스의 이름은 `constructor`입니다:

266 

267```text theme={null}

268Cannot add marketplace "constructor": Claude Code reserves this name and cannot register a marketplace under it. The name is set by "name" in the marketplace's marketplace.json; ask its maintainer to change it.

269```

270 

271설정 파일이 [`extraKnownMarketplaces`](/docs/ko/settings-reference#extraknownmarketplaces) 아래에 마켓플레이스를 선언한 경우, Claude Code가 시작 시 실행하는 추가도 동일한 방식으로 실패하며 `/plugin`의 **Errors** 탭에 해당 메시지가 표시됩니다.

272 

273마켓플레이스에 다른 이름을 지정한 다음 다시 추가합니다:

274 

275* **마켓플레이스를 소유한 경우**: `marketplace.json`의 `name`을 변경합니다.

276* **다른 사람이 호스팅하는 경우**: 소유자에게 이름 변경을 요청합니다.

277 

278v2.1.296 이전에는 이러한 마켓플레이스를 추가하면 이 메시지 대신 내부 오류로 실패했습니다.

279 

259<h3 id="ssh-authentication-failed-or-https-authentication-failed">280<h3 id="ssh-authentication-failed-or-https-authentication-failed">

260 `SSH authentication failed` 또는 `HTTPS authentication failed`281 `SSH authentication failed` 또는 `HTTPS authentication failed`

261</h3>282</h3>


907 훅이 로드되지만 절대 발화하지 않음928 훅이 로드되지만 절대 발화하지 않음

908</h4>929</h4>

909 930 

910훅이 오류 없이 로드되지만 절대 발화하지 않으면 정의와 실행을 확인합니다:931훅이 오류 없이 로드되지만 절대 발화하지 않으면 먼저 세션에서 `/plugin`을 실행하고 플러그인의 세부 정보를 엽니다. 그곳에 `Its hooks.json hooks do not run`으로 시작하는 메모가 있으면 같은 이름을 가진 다른 활성화된 플러그인이 대신 훅을 등록했다는 의미이며, [두 개의 활성화된 플러그인이 이름을 공유할 때의 훅](/docs/ko/plugins/loading#hooks-when-two-enabled-plugins-share-a-name)에서 어느 사본인지와 전환 방법을 설명합니다. 그렇지 않으면 훅의 정의를 확인한 다음 실행되는 모습을 지켜봅니다:

911 932 

912<Steps>933<Steps>

913 <Step title="이벤트 이름 확인">934 <Step title="이벤트 이름 확인">

routines.md +3 −3

Details

86 </Step>86 </Step>

87 87 

88 <Step title="저장소 선택">88 <Step title="저장소 선택">

89 Claude가 작업할 하나 이상의 GitHub 저장소를 추가합니다. 각 저장소는 실행 시작 시 기본 분기에서 시작하여 복제됩니다. Claude는 변경 사항에 대해 `claude/` 접두사가 붙은 분기를 만듭니다.89 Claude가 작업할 하나 이상의 GitHub 저장소를 추가합니다. 각 저장소는 실행 시작 시 복제됩니다. Claude는 변경 사항에 대해 `claude/` 접두사가 붙은 브랜치를 만듭니다.

90 </Step>90 </Step>

91 91 

92 <Step title="환경 선택">92 <Step title="환경 선택">


359 저장소 및 브랜치 권한359 저장소 및 브랜치 권한

360</h3>360</h3>

361 361 

362루틴은 저장소를 복제하기 위해 GitHub 액세스가 필요합니다. CLI에서 `/schedule`로 루틴을 생성할 때 Claude는 계정에 실행한 저장소에 대한 GitHub 액세스 권한이 있는지 확인하고, 없으면 액세스 권한을 부여하는 방법을 명시하는 설정 메모를 추가합니다. [GitHub 인증 옵션](/docs/ko/claude-code-on-the-web#github-authentication-options)을 참조하여 액세스 권한을 부여하는 두 가지 방법을 확인하세요.362루틴은 저장소를 복제하기 위해 GitHub 액세스가 필요합니다. CLI에서 `/schedule`로 루틴을 생성할 때 Claude는 계정에 실행한 저장소에 대한 GitHub 액세스 권한이 있는지 확인하고, 없으면 액세스 권한을 부여하는 방법을 명시하는 설정 메모를 추가합니다. [GitHub 인증 옵션](/docs/ko/claude-code-on-the-web#github-authentication-options)을 참조하여 액세스 권한을 부여하는 두 가지 방법을 확인하세요. Team 및 Enterprise 플랜에서는 각 방법을 사용하기 전에 Claude 조직의 [Owner](/docs/ko/server-managed-settings#access-control)가 해당 방법을 켜야 합니다. [GitHub 연결](/docs/ko/web-quickstart#connect-github)을 참조하세요.

363 363 

364GitHub 연결이 실행 예정 시간에 누락되거나 만료된 경우 루틴은 최대 72시간 동안 재연결할 때까지 실행을 건너뜁니다. 해당 기간 내에 GitHub를 다시 연결하면 루틴이 자동으로 재개됩니다. 72시간 동안 연결이 없으면 루틴이 꺼지고, GitHub를 다시 연결한 후 다시 켜야 합니다.364GitHub 연결이 실행 예정 시간에 누락되거나 만료된 경우 루틴은 최대 72시간 동안 재연결할 때까지 실행을 건너뜁니다. 해당 기간 내에 GitHub를 다시 연결하면 루틴이 자동으로 재개됩니다. 72시간 동안 연결이 없으면 루틴이 꺼지고, GitHub를 다시 연결한 후 다시 켜야 합니다.

365 365 

366추가하는 각 저장소는 모든 실행에서 복제됩니다. Claude는 프롬프트에서 달리 지정하지 않는 한 저장소의 기본 브랜치에서 시작합니다.366추가하는 각 저장소는 모든 실행에서 복제됩니다. Claude는 프롬프트에서 달리 지정하지 않는 한 저장소의 기본 브랜치에서 시작합니다. [GitHub 풀 리퀘스트 이벤트](#add-a-github-trigger)가 실행을 트리거하고 풀 리퀘스트의 저장소가 루틴의 첫 번째 저장소인 경우, 해당 저장소는 대신 풀 리퀘스트의 head 커밋에서 시작합니다.

367 367 

368Claude는 프롬프트에서 다른 브랜치로 푸시하도록 지시하지 않는 한 `claude/` 접두사가 붙은 브랜치로 작업을 푸시합니다. 실행이 푸시할 수 있는 브랜치를 제어하려면 GitHub에서 브랜치 보호 규칙 또는 규칙 세트를 사용하세요. Anthropic 관리형 인프라에서의 실행과 [Anthropic의 git 프록시](/docs/ko/self-hosted-environments-deploy#use-the-anthropic-git-proxy)를 통해 푸시하는 자체 호스팅 실행의 경우, GitHub는 연결한 GitHub 액세스에 이러한 규칙을 적용하므로 해당 액세스가 우회할 수 있는 규칙은 실행의 푸시를 차단하지 않습니다. 배포에서 제공하는 git 자격 증명으로 푸시하는 자체 호스팅 실행은 대신 해당 자격 증명을 기준으로 검사됩니다. [git 구성](/docs/ko/self-hosted-environments-deploy#configure-git)을 참조하세요.368Claude는 프롬프트에서 다른 브랜치로 푸시하도록 지시하지 않는 한 `claude/` 접두사가 붙은 브랜치로 작업을 푸시합니다. 실행이 푸시할 수 있는 브랜치를 제어하려면 GitHub에서 브랜치 보호 규칙 또는 규칙 세트를 사용하세요. Anthropic 관리형 인프라에서의 실행과 [Anthropic의 git 프록시](/docs/ko/self-hosted-environments-deploy#use-the-anthropic-git-proxy)를 통해 푸시하는 자체 호스팅 실행의 경우, GitHub는 연결한 GitHub 액세스에 이러한 규칙을 적용하므로 해당 액세스가 우회할 수 있는 규칙은 실행의 푸시를 차단하지 않습니다. 배포에서 제공하는 git 자격 증명으로 푸시하는 자체 호스팅 실행은 대신 해당 자격 증명을 기준으로 검사됩니다. [git 구성](/docs/ko/self-hosted-environments-deploy#configure-git)을 참조하세요.

369 369 

sandboxing.md +1 −0

Details

203* [중요 경로](/docs/ko/permission-modes#critical-paths)를 대상으로 하는 `rm` 또는 `rmdir` 명령은 여전히 일반 권한 흐름을 거칩니다203* [중요 경로](/docs/ko/permission-modes#critical-paths)를 대상으로 하는 `rm` 또는 `rmdir` 명령은 여전히 일반 권한 흐름을 거칩니다

204* `Bash(git push *)` 같은 내용 범위 [ask 규칙](/docs/ko/permissions)은 샌드박스 처리된 명령에도 여전히 확인을 요청합니다204* `Bash(git push *)` 같은 내용 범위 [ask 규칙](/docs/ko/permissions)은 샌드박스 처리된 명령에도 여전히 확인을 요청합니다

205* 단순 `Bash` ask 규칙 또는 이와 동일한 `Bash(*)` 형식은 샌드박스에서 실행되는 명령에는 건너뛰지만, 일반 권한 흐름으로 대체되는 명령에는 여전히 적용됩니다. [플랜 모드](/docs/ko/permission-modes#analyze-before-you-edit-with-plan-mode)에서는 이 규칙을 건너뛰지 않으며, 읽기 전용 명령을 포함해 샌드박스 처리된 명령에도 확인을 요청합니다205* 단순 `Bash` ask 규칙 또는 이와 동일한 `Bash(*)` 형식은 샌드박스에서 실행되는 명령에는 건너뛰지만, 일반 권한 흐름으로 대체되는 명령에는 여전히 적용됩니다. [플랜 모드](/docs/ko/permission-modes#analyze-before-you-edit-with-plan-mode)에서는 이 규칙을 건너뛰지 않으며, 읽기 전용 명령을 포함해 샌드박스 처리된 명령에도 확인을 요청합니다

206* [Monitor 도구](/docs/ko/tools-reference#monitor-tool) 명령은 샌드박스에서 실행되기는 하지만 자동으로 승인되지 않습니다. 확인 요청을 건너뛰려면 `Bash(npm run *)`처럼 명령과 일치하는 [allow 규칙](/docs/ko/permissions#bash)을 추가합니다

206 207 

207<Info>208<Info>

208 auto-allow 모드는 권한 모드 설정과 독립적으로 작동하지만, 세 가지 예외가 있습니다. [플랜 모드](/docs/ko/permission-modes#analyze-before-you-edit-with-plan-mode), [명령별 허용 도메인](#per-command-allowed-domains-in-auto-mode)을 포함한 자동 모드 명령, 그리고 자동 모드에서 샌드박스 처리된 명령에 대한 [서버 측 분류기 검토](/docs/ko/permission-modes#how-the-classifier-evaluates-actions)입니다. "accept edits" 모드가 아니더라도 auto-allow가 활성화되어 있으면 샌드박스 처리된 Bash 명령은 자동으로 실행됩니다. 즉, 파일 편집 도구가 확인을 요청하는 Manual 모드에서도 샌드박스 경계 내에서 파일을 수정하는 Bash 명령은 확인 요청 없이 실행됩니다.209 auto-allow 모드는 권한 모드 설정과 독립적으로 작동하지만, 세 가지 예외가 있습니다. [플랜 모드](/docs/ko/permission-modes#analyze-before-you-edit-with-plan-mode), [명령별 허용 도메인](#per-command-allowed-domains-in-auto-mode)을 포함한 자동 모드 명령, 그리고 자동 모드에서 샌드박스 처리된 명령에 대한 [서버 측 분류기 검토](/docs/ko/permission-modes#how-the-classifier-evaluates-actions)입니다. "accept edits" 모드가 아니더라도 auto-allow가 활성화되어 있으면 샌드박스 처리된 Bash 명령은 자동으로 실행됩니다. 즉, 파일 편집 도구가 확인을 요청하는 Manual 모드에서도 샌드박스 경계 내에서 파일을 수정하는 Bash 명령은 확인 요청 없이 실행됩니다.

Details

132러너와 세션은 여러 종류의 아웃바운드 연결을 만들며, Anthropic의 인바운드 연결은 필요하지 않습니다:132러너와 세션은 여러 종류의 아웃바운드 연결을 만들며, Anthropic의 인바운드 연결은 필요하지 않습니다:

133 133 

134* **제어 평면**: 러너는 `api.anthropic.com`을 폴링하여 작업을 수행하고 설정 진행 상황 및 실패 이벤트를 게시하며, 모두 아웃바운드 HTTPS입니다. 폴링은 러너의 하트비트로도 작동합니다.134* **제어 평면**: 러너는 `api.anthropic.com`을 폴링하여 작업을 수행하고 설정 진행 상황 및 실패 이벤트를 게시하며, 모두 아웃바운드 HTTPS입니다. 폴링은 러너의 하트비트로도 작동합니다.

135* **SCM 커넥터**: 선택적 오케스트레이터 [SCM 커넥터](/docs/ko/self-hosted-environments-reference#scm-connector-flags) 터널은 유일한 WebSocket 연결입니다.135* **Git**: 러너는 배포가 제공하는 자격 증명으로 인증하여 HTTPS 또는 SSH를 통해 git 호스트에서 복제하고 푸시합니다. 세션별 발급 자격 증명을 포함한 옵션은 [git 구성](/docs/ko/self-hosted-environments-deploy#configure-git)을 참조하세요. [Anthropic git 프록시](/docs/ko/self-hosted-environments-deploy#use-the-anthropic-git-proxy)를 사용하면 github.com에 있는 저장소의 git 트래픽이 대신 `api.anthropic.com`을 거칩니다.

136* **Git**: 러너는 배포가 제공하는 자격 증명으로 인증하여 HTTPS 또는 SSH를 통해 git 호스트에서 복제하고 푸시합니다. [git 구성](/docs/ko/self-hosted-environments-deploy#configure-git)에서 옵션을 다루며, 세션별 발급 자격 증명 및 [Anthropic git 프록시](/docs/ko/self-hosted-environments-deploy#use-the-anthropic-git-proxy)를 포함하며, 이는 git을 `api.anthropic.com` 대신을 통해 라우팅합니다.136* **세션 자식**: 자식 Claude Code 프로세스는 `api.anthropic.com`에 대한 세션의 이벤트 스트림을 유지하며, 모델 추론 및 세션 중에 실행되는 git 명령에 대한 자신의 아웃바운드 호출을 만듭니다. [Anthropic 관리 git](/docs/ko/self-hosted-environments-deploy#use-the-anthropic-git-proxy)을 사용하는 세션에서는 자식이 github.com에 대한 `git` 및 `gh` 트래픽을 `api.anthropic.com`으로 여는 WebSocket 연결을 통해 보냅니다.

137* **세션 자식**: 자식 Claude Code 프로세스는 `api.anthropic.com`에 대한 세션의 이벤트 스트림을 유지하며, 모델 추론 및 세션 중에 실행되는 git 명령에 대한 자신의 아웃바운드 호출을 만듭니다. 전체 이그레스 목록은 [네트워크 요구 사항](/docs/ko/self-hosted-environments-deploy#network-requirements)을 참조하세요. [위의 다이어그램](#how-self-hosted-environments-work)은 선택적 SCM 커넥터를 제외한 이러한 경로를 보여줍니다.137* **SCM 커넥터**: 선택적 오케스트레이터 [SCM 커넥터](/docs/ko/self-hosted-environments-reference#scm-connector-flags)는 사용할 수 없으므로 해당 터널이 열리지 않습니다. 이 터널은 `api.anthropic.com`에 대한 WebSocket 연결입니다.

138 

139전체 이그레스 목록은 [네트워크 요구 사항](/docs/ko/self-hosted-environments-deploy#network-requirements)을 참조하세요. [위의 다이어그램](#how-self-hosted-environments-work)은 선택적 SCM 커넥터와 Anthropic 관리 git 연결을 제외한 이러한 경로를 보여줍니다.

138 140 

139기본적으로 모델 추론은 Anthropic API를 사용합니다. 제어 평면은 각 세션에 API 엔드포인트를 전달하고, 세션은 Anthropic 발급 세션 범위 OAuth 토큰으로 인증합니다. 대신 자체 클라우드 계정으로 모델 요청을 보내려면 [Bedrock 또는 Agent Platform으로 모델 요청 보내기](/docs/ko/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform)를 참조하세요.141기본적으로 모델 추론은 Anthropic API를 사용합니다. 제어 평면은 각 세션에 API 엔드포인트를 전달하고, 세션은 Anthropic 발급 세션 범위 OAuth 토큰으로 인증합니다. 대신 자체 클라우드 계정으로 모델 요청을 보내려면 [Bedrock 또는 Agent Platform으로 모델 요청 보내기](/docs/ko/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform)를 참조하세요.

140 142 

Details

31| 변수 | 설명 |31| 변수 | 설명 |

32| :- | :- |32| :- | :- |

33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 세션 JWT이며, `sk-ant-cc-` 접두사가 붙습니다. `act` 클레임은 세션 작성자를 식별하며, 작성 사용 환경이 기록한 경우 작성자의 이메일을 포함합니다. 값은 생성 시점의 토큰입니다. 새로고침은 자식의 stdin을 통해 도착하므로 래퍼는 초기 값만 봅니다. [세션 ID 확인](/docs/ko/self-hosted-environments-identity)을 참조하세요. |33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 세션 JWT이며, `sk-ant-cc-` 접두사가 붙습니다. `act` 클레임은 세션 작성자를 식별하며, 작성 사용 환경이 기록한 경우 작성자의 이메일을 포함합니다. 값은 생성 시점의 토큰입니다. 새로고침은 자식의 stdin을 통해 도착하므로 래퍼는 초기 값만 봅니다. [세션 ID 확인](/docs/ko/self-hosted-environments-identity)을 참조하세요. |

34| `CCR_SESSION_ACCOUNT_EMAIL` | 세션 작성자의 이메일이며, 서명 검증 없이 러너에 의해 토큰의 `act.email` 클레임에서 미리 추출됩니다. 커밋 트레일러와 같은 레이블 지정에 적합합니다. 이메일이 자격 증명 발급을 제어할 때는 토큰을 확인하고 [세션 작성자로 범위가 지정된 자격 증명 프로비저닝](#provision-credentials-scoped-to-the-session-creator)에 설명된 대로 클레임을 읽으세요. 토큰이 작성자 이메일을 전달하지 않으면 설정되지 않습니다. 개인 식별 정보로 취급하세요. |34| `CCR_SESSION_ACCOUNT_EMAIL` | 세션 작성자의 이메일이며, 서명 검증 없이 러너에 의해 토큰의 `act.email` 클레임에서 미리 추출됩니다. 커밋 트레일러와 같은 레이블 지정에 적합합니다. 이메일이 자격 증명 발급을 제어할 때는 대신 토큰을 확인하고 토큰에서 클레임을 읽으세요. [세션 작성자로 범위가 지정된 자격 증명 프로비저닝](#provision-credentials-scoped-to-the-session-creator)을 참조하세요. 토큰이 작성자 이메일을 전달하지 않으면(예: 조직의 서비스 ID가 생성한 세션) 설정되지 않습니다. 개인 식별 정보로 취급하세요. |

35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 세션을 생성한 클라이언트 사용 환경(예: `web_claude_ai`, `desktop_app`, `ios`, `claude_code_cli`, `scheduled_trigger`)입니다. Anthropic은 세션 생성 시 값을 한 번 기록하므로 래퍼와 모든 라이프사이클 훅이 동일한 값을 봅니다. 채택 분석 및 레이블 지정에만 사용하고 인증 신호로는 사용하지 마세요. 세션에 기록되거나 인식된 사용 환경이 없으면 설정되지 않으므로 `set -u` 아래에서 `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}`로 참조하세요. Claude Code v2.1.229 이상이 필요합니다. |35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 세션을 생성한 클라이언트 사용 환경(예: `web_claude_ai`, `desktop_app`, `ios`, `claude_code_cli`, `scheduled_trigger`)입니다. Anthropic은 세션 생성 시 값을 한 번 기록하므로 래퍼와 모든 라이프사이클 훅이 동일한 값을 봅니다. 채택 분석 및 레이블 지정에만 사용하고 인증 신호로는 사용하지 마세요. 세션에 기록되거나 인식된 사용 환경이 없으면 설정되지 않습니다. Claude Code v2.1.229 이상이 필요합니다. |

36| `CLAUDE_RUNNER_CLAUDE_BIN` | 러너 자체의 Claude Code 바이너리에 대한 절대 경로입니다. 설치 경로를 하드코딩하지 않고 고정된 바이너리로 제어를 전달하려면 `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`로 래퍼를 종료하세요. |36| `CLAUDE_RUNNER_CLAUDE_BIN` | 러너 자체의 Claude Code 바이너리에 대한 절대 경로입니다. 설치 경로를 하드코딩하지 않고 고정된 바이너리로 제어를 전달하려면 `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`로 래퍼를 종료하세요. |

37| `CLAUDE_CODE_REMOTE_SESSION_ID` | 태그가 지정된 `cse_...` 형식의 세션 ID입니다. 이는 [라이프사이클 훅](#lifecycle-hooks)이 `session_...` 형식의 `CLAUDE_RUNNER_SESSION_ID`로 보는 동일한 세션입니다. UUID 변수는 두 형식 모두에서 일치하며, `cse_` 접두사를 `session_`으로 대체하면 세션 URL에 표시되는 ID가 됩니다. |37| `CLAUDE_CODE_REMOTE_SESSION_ID` | 태그가 지정된 `cse_...` 형식의 세션 ID입니다. 이는 [라이프사이클 훅](#lifecycle-hooks)이 `session_...` 형식의 `CLAUDE_RUNNER_SESSION_ID`로 보는 동일한 세션입니다. UUID 변수는 두 형식 모두에서 일치하며, `cse_` 접두사를 `session_`으로 대체하면 세션 URL에 표시되는 ID가 됩니다. |

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

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

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

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

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

41| `ANTHROPIC_BASE_URL` | 자식이 사용할 API 기본 URL이며, 제어 평면에서 세션별로 전달되고 일반적으로 `https://api.anthropic.com`입니다. 이를 재정의하지 마세요. 세션의 추론 자격 증명은 Anthropic에서 발급한 OAuth 토큰이며 다른 공급자는 이를 수락하지 않습니다. |43| `ANTHROPIC_BASE_URL` | 자식이 사용할 API 기본 URL이며, 제어 평면에서 세션별로 전달되고 일반적으로 `https://api.anthropic.com`입니다. 이를 재정의하지 마세요. 세션의 추론 자격 증명은 Anthropic에서 발급한 OAuth 토큰이며 다른 공급자는 이를 수락하지 않습니다. |


43 45 

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

45 47 

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

49 

50<h3 id="give-a-default-to-variables-that-can-be-unset">

51 설정되지 않을 수 있는 변수에 기본값 지정

52</h3>

53 

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

55 

56셸이 Slack 스레드 링크를 확장하는 모든 곳에서 다음 사항에 주의하세요:

57 

58* **따옴표로 묶기**: 링크에는 `?` 및 `&`와 같이 셸이 해석하는 문자가 포함될 수 있으므로 `"${CLAUDE_CODE_REMOTE_SLACK_THREAD_URL:-}"`와 같이 변수를 따옴표로 묶으세요.

59* **값을 `eval` 및 `sh -c` 문자열에 넣지 않기**: 따옴표 안이라도 `eval` 또는 `sh -c`가 실행하는 문자열에 값을 치환하지 마세요. 대신 해당 문자열이 변수를 참조하도록 하세요.

60 

46<h3 id="keep-stdin-and-file-descriptor-3-attached">61<h3 id="keep-stdin-and-file-descriptor-3-attached">

47 stdin 및 파일 디스크립터 3을 연결된 상태로 유지62 stdin 및 파일 디스크립터 3을 연결된 상태로 유지

48</h3>63</h3>

49 64 

50자식의 stdin은 러너의 제어 채널입니다. 토큰 회전 및 세션 종료 신호가 이를 통해 도착합니다. 러너는 또한 파일 디스크립터 3에서 파이프를 열고 자식의 활동 신호를 읽어 유휴 및 시작 타임아웃을 구동합니다. 일반 `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`는 둘 다 자동으로 보존합니다.65자식의 stdin은 러너의 제어 채널입니다. 토큰 회전 및 세션 종료 신호가 이를 통해 도착합니다. 러너는 또한 파일 디스크립터 3에서 파이프를 열고 자식의 활동 신호를 읽어 유휴 및 시작 타임아웃을 구동합니다. 일반 `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`는 둘 다 자동으로 보존합니다.

51 66 

52래퍼가 맨 `&`로 자식을 백그라운드에 두면 자식의 stdin이 끊깁니다. 세션은 초기 OAuth 토큰의 약 30분 수명이 만료될 때까지 정상으로 보이다가 모든 API 호출이 `401 authentication_error`로 실패합니다. 래퍼가 자식을 백그라운드에 두어야 하는 경우(예: 정리 트랩을 살리기 위해) stdin을 파일 디스크립터 4 이상에 저장하고 명시적으로 다시 연결하세요:67래퍼가 맨 `&`로 자식을 백그라운드에 두면 자식의 stdin이 끊깁니다. 세션은 초기 OAuth 토큰의 약 30분 수명이 만료될 때까지 정상으로 보이다가 해당 토큰을 사용하는 모든 API 호출이 `401 authentication_error`로 실패합니다. 래퍼가 자식을 백그라운드에 두어야 하는 경우(예: 정리 트랩을 살리기 위해) stdin을 파일 디스크립터 4 이상에 저장하고 명시적으로 다시 연결하세요:

53 68 

54```bash theme={null}69```bash theme={null}

55exec 4<&070exec 4<&0


59wait "$CHILD"74wait "$CHILD"

60```75```

61 76 

62래퍼에서 파일 디스크립터 3을 닫거나 재사용하지 마세요. 자식의 stdout 및 stderr 리디렉션은 괜찮습니다.77자식의 stdout은 리디렉션해도 됩니다. 파일 디스크립터 3과 stderr는 러너에 연결된 상태로 유지하세요:

78 

79* **파일 디스크립터 3**: 자식의 활동 신호를 러너에 전달합니다. 래퍼에서 이를 닫거나 재사용하지 마세요.

80* **stderr**: 래퍼 또는 자식이 0이 아닌 값으로 종료되면 러너는 stderr의 마지막 줄을 세션에 게시하고 자체 로그에 출력합니다. 세션 사용자가 해당 줄을 보게 되므로 stderr에 비밀을 출력하지 말고, 래퍼를 배포하기 전에 `set -x`를 제거하세요. stderr를 리디렉션해도 세션은 계속 실행되지만, 러너는 종료 코드만으로 실패를 보고합니다.

63 81 

64<h3 id="pass-the-system-prompt-flags-through">82<h3 id="pass-the-system-prompt-flags-through">

65 시스템 프롬프트 플래그 전달83 시스템 프롬프트 플래그 전달


108 checkout126 checkout

109</h3>127</h3>

110 128 

111저장소당 한 번 실행되며, 러너의 기본 제공 복제 및 페치 대신 실행됩니다. 훅을 사용하여 리드스루 미러에서 복제하거나, 아카이브에서 작업 트리를 시드하거나, 세션별 git 인증을 적용하세요. 러너는 다음 변수를 설정하며, 표에 나열되지 않은 다른 `CLAUDE_RUNNER_` 변수를 설정할 수도 있습니다:129저장소당 한 번 실행되며, 러너의 기본 제공 복제 및 페치 대신 실행됩니다. 훅을 사용하여 HTTPS 또는 SSH로 접근하는 리드스루 미러에서 복제하거나, 아카이브에서 작업 트리를 시드하거나, 세션별 git 인증을 적용하세요. 러너는 다음 변수를 설정하며, 표에 나열되지 않은 다른 `CLAUDE_RUNNER_` 변수를 설정할 수도 있습니다:

112 130 

113| 변수 | 설명 |131| 변수 | 설명 |

114| :- | :- |132| :- | :- |

115| `CLAUDE_RUNNER_REPO_URL` | 복제할 저장소 URL이며, `--git-host-rewrite` 및 `--git-ssh-rewrite`가 적용된 후입니다. |133| `CLAUDE_RUNNER_REPO_URL` | 복제할 저장소 URL이며, `--git-host-rewrite` 및 `--git-ssh-rewrite`가 적용된 후입니다. |

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

117| `CLAUDE_RUNNER_CHECKOUT_PATH` | 작업 트리를 남겨야 할 절대 경로 |135| `CLAUDE_RUNNER_CHECKOUT_PATH` | 작업 트리를 남겨야 할 절대 경로 |

118| `CLAUDE_RUNNER_SESSION_ID` | 태그가 지정된 `session_...` 형식의 세션 ID이며, 로깅 및 상관관계 지정용입니다. |136| `CLAUDE_RUNNER_SESSION_ID` | 태그가 지정된 `session_...` 형식의 세션 ID이며, 로깅 및 상관관계 지정용입니다. |

119| `CLAUDE_RUNNER_SESSION_UUID` | 정규 UUID 형식의 동일한 세션 ID |137| `CLAUDE_RUNNER_SESSION_UUID` | 정규 UUID 형식의 동일한 세션 ID |

120| `CLAUDE_RUNNER_API_BASE_URL` | 세션 범위 호출용 Anthropic API 기본 URL |138| `CLAUDE_RUNNER_API_BASE_URL` | 세션 범위 호출용 Anthropic API 기본 URL |

121| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 세션을 생성한 클라이언트 표면(예: `web_claude_ai`, `desktop_app`, `ios`)입니다. 세션에 기록되거나 인식된 표면이 없으면 설정되지 않습니다. |139| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 세션을 생성한 클라이언트 사용 환경(예: `web_claude_ai`, `desktop_app`, `ios`)입니다. 세션에 기록되거나 인식된 사용 환경이 없으면 설정되지 않으므로 `set -u` 아래에서는 `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}`로 참조하세요. Claude Code v2.1.229 이상이 필요합니다. |

122| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 세션 범위 API 호출용 세션 액세스 토큰 |140| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 세션 범위 API 호출용 세션 액세스 토큰 |

123| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | 러너가 훅이 실행하는 git에 대해 고정하는 Git 설정입니다. [라이프사이클 훅 내부의 Git 구성](#git-configuration-inside-lifecycle-hooks)에서 설명합니다. Claude Code v2.1.280 이상이 필요합니다. |141| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | 러너가 훅이 실행하는 git에 대해 고정하는 Git 설정입니다. [라이프사이클 훅 내부의 Git 구성](#git-configuration-inside-lifecycle-hooks)에서 설명합니다. Claude Code v2.1.280 이상이 필요합니다. |

124 142 

125스크립트는 요청된 리비전에서 체크아웃된 `CLAUDE_RUNNER_CHECKOUT_PATH`에 작업 트리를 남겨야 합니다. 분리된 HEAD는 괜찮습니다. 러너는 그 위에 세션의 작업 분기를 생성합니다. 러너는 이후 경로에 `.git`이 포함되어 있는지 확인합니다. 훅이 Perforce 또는 압축 해제된 tarball과 같은 비git 소스를 구체화하면 러너의 환경에서 `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1`을 설정하여 해당 확인을 건너뛰세요. 작업 분기 생성 및 결과 푸시와 같은 git 기반 흐름에는 git 체크아웃이 필요하므로 [`post-session` 훅](#post-session)으로 비git 트리에서 결과를 내보내세요.143스크립트는 요청된 리비전에서 체크아웃된 `CLAUDE_RUNNER_CHECKOUT_PATH`에 작업 트리를 남겨야 합니다. 분리된 HEAD는 괜찮습니다. 러너는 그 위에 세션의 작업 브랜치를 생성합니다.

126 144 

127러너는 훅에 git 자격증명을 전달하지 않습니다. 대신 세션의 ID에서 세션별 복제 자격증명을 발급합니다. [세션 서비스에서 토큰 확인](/docs/ko/self-hosted-environments-identity#verify-the-token-from-your-service)에 설명된 대로 `CLAUDE_RUNNER_API_BASE_URL` 아래의 JWKS 엔드포인트에 대해 표준 JWT 라이브러리로 `CLAUDE_CODE_SESSION_ACCESS_TOKEN`을 확인한 다음 자격증명 서비스가 토큰의 `act` 클레임의 ID에 대한 단기 복제 자격증명을 발급하도록 합니다. `CLAUDE_RUNNER_CLAUDE_BIN`은 체크아웃 훅 환경에서 설정되지 않으므로 `decode-token` 서브명령을 사용할 수 없습니다. SSH 에이전트, 자격증명 도우미 또는 `.netrc`와 같이 호스트가 이미 가지고 있는 git 인증으로 폴백하는 것도 옵션입니다.145훅이 반환된 후 러너는 `CLAUDE_RUNNER_CHECKOUT_PATH`에 `.git`이 포함되어 있는지 확인합니다. 훅이 Perforce 또는 압축 해제된 tarball과 같은 비git 소스를 구체화하면 러너의 환경에서 `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1`을 설정하여 해당 확인을 건너뛰세요. 작업 브랜치 생성 및 결과 푸시와 같은 git 기반 흐름에는 git 체크아웃이 필요하므로 [`post-session` 훅](#post-session)으로 비git 트리에서 결과를 내보내세요.

128 146 

129훅이 0이 아닌 값으로 종료되거나 0으로 종료되지만 사용 가능한 체크아웃을 남기지 않으면 러너가 수행하는 작업은 저장소에 따라 다릅니다:147<h4 id="get-git-credentials-in-the-hook">

148 훅에서 git 자격 증명 얻기

149</h4>

130 150 

131* **세션이 결과를 푸시하는 저장소**: 러너가 세션을 실패하고 0이 아닌 종료 시 스크립트의 stderr 끝을 사용자에게 표시합니다.151러너는 훅에 git 자격 증명을 전달하지 않습니다. `CLAUDE_RUNNER_CLAUDE_BIN`은 체크아웃 훅 환경에서 설정되지 않으므로 `decode-token` 서브명령도 여기서는 사용할 수 없습니다. 대신 세션의 ID에서 세션별 복제 자격 증명을 발급하거나, 호스트 자체의 git 인증으로 폴백하세요:

132* **세션이 읽기만 하는 저장소**(예: 실행 중인 세션에 추가된 저장소): 러너는 `[runner:warn]` 줄을 실패 세부 정보와 함께 로깅하고, `Skipped` 단계를 세션에 게시하고, 훅이 체크아웃 경로에 남긴 것을 제거하고, 나머지 저장소로 계속합니다. 러너가 경로를 즉시 제거할 수 없으면 세션 종료 시 제거를 다시 시도합니다. 건너뛰기로 인해 세션에 저장소가 전혀 없으면 러너는 어쨌든 세션을 실패합니다.

133 152 

134v2.1.228 이전에는 러너가 모든 저장소에 대해 훅 실패 시 세션을 실패했으므로 훅이 제공할 수 없는 읽기 전용 저장소는 세션이 새 러너에서 다시 시작될 때마다 다시 세션을 실패했습니다.153* **세션별 복제 자격 증명**: [세션 서비스에서 토큰 확인](/docs/ko/self-hosted-environments-identity#verify-the-token-from-your-service)에 설명된 대로 `CLAUDE_RUNNER_API_BASE_URL` 아래의 JWKS 엔드포인트에 대해 표준 JWT 라이브러리로 `CLAUDE_CODE_SESSION_ACCESS_TOKEN`을 확인합니다. 그런 다음 자격 증명 서비스가 토큰의 `act` 클레임에 있는 ID에 대한 단기 복제 자격 증명을 발급하도록 합니다. 해당 자격 증명의 키는 `act.sub`로 지정하고, `act.email`을 요구하지 마세요.

154* **호스트 git 인증**: SSH 에이전트, 자격 증명 도우미 또는 `.netrc`와 같이 호스트가 이미 가지고 있는 git 인증을 사용합니다.

135 155 

136러너는 세션이 끝난 후 체크아웃 경로를 제거합니다.156<h4 id="when-the-hook-fails">

157 훅이 실패할 때

158</h4>

159 

160훅이 0이 아닌 값으로 종료되거나, 0으로 종료되지만 사용 가능한 체크아웃을 남기지 않으면 훅이 실패한 것입니다:

161 

162* **세션이 결과를 푸시하는 저장소**: 러너가 세션을 실패하고 0이 아닌 종료 시 스크립트의 stderr 끝을 사용자에게 표시합니다.

163* **세션이 읽기만 하는 저장소**(예: 실행 중인 세션에 추가된 저장소): 러너는 `[runner:warn]` 줄을 실패 세부 정보와 함께 로그에 기록하고, `Skipped` 단계를 세션에 게시하고, 훅이 체크아웃 경로에 남긴 것을 제거하고, 나머지 저장소로 계속합니다. 건너뛰기로 인해 세션에 저장소가 전혀 없으면 러너는 어쨌든 세션을 실패합니다.

164 

165훅이 성공하면 러너는 세션이 끝난 후 체크아웃 경로를 제거합니다.

137 166 

138<h3 id="post-session">167<h3 id="post-session">

139 post-session168 post-session


151| `CLAUDE_RUNNER_WORKSPACE_PATHS` | 세션의 작업 트리의 콜론 구분 절대 경로입니다. 0개 저장소 세션의 경우 비어 있습니다. |180| `CLAUDE_RUNNER_WORKSPACE_PATHS` | 세션의 작업 트리의 콜론 구분 절대 경로입니다. 0개 저장소 세션의 경우 비어 있습니다. |

152| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | 세션의 디버그 로그 경로이며, 훅이 실행되는 동안 여전히 디스크에 있습니다. |181| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | 세션의 디버그 로그 경로이며, 훅이 실행되는 동안 여전히 디스크에 있습니다. |

153| `CLAUDE_RUNNER_API_BASE_URL` | 세션 범위 호출용 Anthropic API 기본 URL |182| `CLAUDE_RUNNER_API_BASE_URL` | 세션 범위 호출용 Anthropic API 기본 URL |

154| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 세션을 생성한 클라이언트 표면(예: `web_claude_ai`, `desktop_app`, `ios`)입니다. 세션에 기록되거나 인식된 표면이 없으면 설정되지 않습니다. Claude Code v2.1.229 이상이 필요합니다. |183| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 세션을 생성한 클라이언트 사용 환경(예: `web_claude_ai`, `desktop_app`, `ios`)입니다. 세션에 기록되거나 인식된 사용 환경이 없으면 설정되지 않으므로 `set -u` 아래에서는 `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}`로 참조하세요. Claude Code v2.1.229 이상이 필요합니다. |

155| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 세션 범위 API 호출용 세션 액세스 토큰 |184| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | 세션 범위 API 호출용 세션 액세스 토큰 |

156| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | 러너가 훅이 실행하는 git에 대해 고정하는 Git 설정입니다. [라이프사이클 훅 내부의 Git 구성](#git-configuration-inside-lifecycle-hooks)에서 설명합니다. Claude Code v2.1.280 이상이 필요합니다. |185| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | 러너가 훅이 실행하는 git에 대해 고정하는 Git 설정입니다. [라이프사이클 훅 내부의 Git 구성](#git-configuration-inside-lifecycle-hooks)에서 설명합니다. Claude Code v2.1.280 이상이 필요합니다. |

157 186 

158`CLAUDE_RUNNER_EXIT_REASON`은 네 가지 값 중 하나를 취합니다:187`CLAUDE_RUNNER_EXIT_REASON`은 네 가지 값 중 하나를 취합니다:

159 188 

160* `completed`: 세션이 깔끔하게 종료되었습니다. Claude Code 프로세스가 정상적으로 종료되었거나, 세션이 여전히 실행 중인 동안 아카이브되거나 삭제되었습니다.189* `completed`: 세션이 깔끔하게 종료되었습니다. Claude Code 프로세스가 정상적으로 종료되었거나, 세션이 아카이브되거나 삭제된 후 스스로 종료되었습니다.

161* `failed`: Claude Code 프로세스가 충돌했거나, 시작 후 설정이 실패했습니다.190* `failed`: Claude Code 프로세스가 충돌했거나, 시작 후 설정이 실패했습니다.

162* `interrupted`: 러너가 세션을 중지했습니다. 슬롯을 해제하기 위해 세션을 해제했거나, 시작 시 타임아웃되었거나, 서버가 이 러너에서 세션을 이동했거나, 러너가 드레인 중이었거나, 세션이 [`--kill-session-after-min`](/docs/ko/self-hosted-environments-reference#runner-cli-flags) 제한을 초과했습니다.191* `interrupted`: 러너가 세션을 중지했으며, 다음 경우 중 하나입니다:

192 * 러너가 슬롯을 확보하기 위해 세션을 해제했습니다.

193 * 세션이 시작 시 시간 초과되었습니다.

194 * 서버가 이 러너에서 세션을 이동했습니다.

195 * 프로세스가 종료되기 전에 러너의 폴링이 아카이브 또는 삭제를 감지했습니다.

196 * 러너가 드레인 중이었습니다.

197 * 세션이 [`--kill-session-after-min`](/docs/ko/self-hosted-environments-reference#runner-cli-flags) 제한을 초과했습니다.

163* `abandoned`: 다른 러너가 요청한 세션용으로 예약되어 있습니다. 훅은 현재 이 경우에 실행되지 않습니다.198* `abandoned`: 다른 러너가 요청한 세션용으로 예약되어 있습니다. 훅은 현재 이 경우에 실행되지 않습니다.

164 199 

165[세션 라이프사이클 카운터 의미론](/docs/ko/self-hosted-environments-reference#session-lifecycle-counter-semantics)은 해제, 시작 타임아웃 및 서버 이동을 `interrupted` 대신 `completed`로 계산합니다. 러너가 슬롯을 깔끔하게 반환했기 때문입니다. 훅 수신과 카운터를 비교할 때 이 차이를 예상하세요.200훅 수신을 [세션 라이프사이클 카운터](/docs/ko/self-hosted-environments-reference#session-lifecycle-counter-semantics)와 비교하면 일부 `interrupted` 수신이 카운터에서는 `completed`로 계산된다는 점을 예상하세요. 카운터는 해제, 시작 타임아웃, 서버 이동, 그리고 러너의 폴링이 먼저 감지한 아카이브 또는 삭제를 `completed`로 계산합니다. 러너가 슬롯을 깔끔하게 반환했기 때문입니다.

166 201 

167훅의 종료 상태는 세션 결과에 영향을 주지 않습니다. 실패는 로깅되고 무시됩니다. 러너는 `--post-session-hook-timeout-sec`(기본값 60초)까지 모든 세션 종료(러너 종료 포함)에서 대기합니다. 이 예제는 커밋되지 않은 작업을 구조 분기에 저장합니다:202훅의 종료 상태는 세션 결과에 영향을 주지 않습니다. 실패는 로깅되고 무시됩니다. 러너는 `--post-session-hook-timeout-sec`(기본값 60초)까지 모든 세션 종료(러너 종료 포함)에서 대기합니다. 이 예제는 커밋되지 않은 작업을 구조 분기에 저장합니다:

168 203 

169```bash theme={null}204```bash theme={null}

170#!/usr/bin/env bash205#!/usr/bin/env bash

171set -u206set -u

207export GIT_ALLOW_PROTOCOL=${GIT_ALLOW_PROTOCOL:-https:http:ssh}

172IFS=':'208IFS=':'

173# -c 재정의는 저장소 로컬 설정보다 우선하므로 세션이 작성한 fsmonitor,209# -c 재정의는 저장소 로컬 설정보다 우선하므로 세션이 작성한 fsmonitor,

174# 훅 경로 및 gpg-program 구성이 훅의 권한으로 코드를 실행하는 것을210# 훅 경로 및 gpg-program 구성이 훅의 권한으로 코드를 실행하는 것을

175# 차단합니다. -c commit.gpgsign=false는 --configure-git 사용 시에도211# 차단합니다. -c commit.gpgsign=false는 --configure-git 사용 시에도

176# 이 구조 커밋을 서명하지 않은 상태로 둡니다.212# 이 구조 커밋을 서명하지 않은 상태로 둡니다.

177# 저장소 로컬 credential.helper와 pushurl은 여전히 적용되며, v2.1.280 이전213# 저장소 로컬 credential.helper와 pushurl은 여전히 적용되며, v2.1.280 이전

178# 러너에서는 core.sshCommand도 적용됩니다. 훅이 세션에 없는 자격 증명을214# 러너에서는 core.sshCommand도 적용됩니다. 이 푸시에 자격 증명을 제공하기

179# 보유하면 스크립트 아래의 참고 사항을 참조하세요.215# 전에 스크립트 아래의 참고 사항을 참조하세요.

180g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \216g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \

181 -c commit.gpgsign=false "$@"; }217 -c commit.gpgsign=false "$@"; }

182for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do218for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do


188done224done

189```225```

190 226 

191훅은 러너 호스트의 자체 환경에서 사용 가능한 git 자격 증명으로 푸시합니다. [이미지에 자격 증명 없음 자세](/docs/ko/self-hosted-environments-deploy#configure-git) 아래에서(기본 제공 복제가 Anthropic git 프록시를 통과할 때 포함) 없으므로 푸시하기 전에 훅 내에서 단기 푸시 자격 증명을 발급합니다. 훅이 `CLAUDE_CODE_SESSION_ACCESS_TOKEN`에서 받는 세션 토큰을 자신의 토큰 서비스와 교환하고 [세션 ID 확인](/docs/ko/self-hosted-environments-identity)에서 설명하는 대로 확인합니다. 훅이 세션이 가지지 않은 자격 증명을 보유하면 `origin`을 운영자 제공 URL로 바꾸고 `-c credential.helper=` 및 자신의 도우미를 전달합니다. 세션이 작성한 구성이 여전히 영향을 줄 수 있는 항목은 [라이프사이클 훅 내부의 Git 구성](#git-configuration-inside-lifecycle-hooks)에서 설명합니다.227스크립트의 `GIT_ALLOW_PROTOCOL` 줄은 git을 HTTPS, HTTP 및 SSH 원격으로 제한합니다. 러너의 환경에서 이미 비어 있지 않은 자체 `GIT_ALLOW_PROTOCOL` 목록을 설정한 경우 스크립트는 해당 목록을 유지합니다.

228 

229훅은 러너 호스트의 자체 환경에서 사용 가능한 git 자격 증명으로 푸시합니다. [이미지에 자격 증명 없음 자세](/docs/ko/self-hosted-environments-deploy#configure-git) 아래에서(기본 제공 복제가 Anthropic git 프록시를 통과할 때 포함) 없으므로 푸시하기 전에 훅 내에서 단기 푸시 자격 증명을 발급합니다. 훅이 `CLAUDE_CODE_SESSION_ACCESS_TOKEN`에서 받는 세션 토큰을 자신의 토큰 서비스와 교환하고 [세션 ID 확인](/docs/ko/self-hosted-environments-identity)에서 설명하는 대로 확인합니다.

230 

231훅이 git에 제공하는 모든 자격 증명은 세션이 얻을 수 있는 것으로 간주하고, 이 푸시 이상의 작업은 할 수 없도록 발급하세요. 훅의 git은 세션이 작성할 수 있는 설정 파일을 읽으며, 그중 하나에 지정된 자격 증명 도우미나 필터 드라이버는 훅의 권한으로 실행됩니다. 또한 이러한 파일의 설정은 어떤 원격을 지정하든 푸시의 대상을 변경할 수 있습니다. 러너가 훅에서 고정하는 git 설정과 이러한 파일에 맡기는 설정은 [라이프사이클 훅 내부의 Git 구성](#git-configuration-inside-lifecycle-hooks)을 참조하세요.

192 232 

193<h4 id="hook-timing-when-the-runner-releases-a-session">233<h4 id="hook-timing-when-the-runner-releases-a-session">

194 러너가 세션을 해제할 때 훅 타이밍234 러너가 세션을 해제할 때 훅 타이밍


264| `CLAUDE_RUNNER_ORDER_ID` | 스폰 요청당 고유하고 Kubernetes 리소스 이름에 안전한 불투명 멱등성 키입니다. 프로비저너의 중복 제거 키로 주문 ID만 사용합니다. |304| `CLAUDE_RUNNER_ORDER_ID` | 스폰 요청당 고유하고 Kubernetes 리소스 이름에 안전한 불투명 멱등성 키입니다. 프로비저너의 중복 제거 키로 주문 ID만 사용합니다. |

265| `CLAUDE_RUNNER_SESSION_ID` | 이 요청이 대상으로 하는 세션입니다. 세션의 모든 재요청에서 반복되므로 로깅 및 라우팅에 사용하고 중복 제거 키로는 사용하지 마십시오. [`--min-idle`](/docs/ko/self-hosted-environments-reference#orchestrator-cli-flags)이 설정된 경우 특정 세션 전에 대기 중인 러너를 부팅하는 사전 워밍 요청의 경우 비어 있으므로 변수가 설정되어 있다고 가정하지 마십시오. |305| `CLAUDE_RUNNER_SESSION_ID` | 이 요청이 대상으로 하는 세션입니다. 세션의 모든 재요청에서 반복되므로 로깅 및 라우팅에 사용하고 중복 제거 키로는 사용하지 마십시오. [`--min-idle`](/docs/ko/self-hosted-environments-reference#orchestrator-cli-flags)이 설정된 경우 특정 세션 전에 대기 중인 러너를 부팅하는 사전 워밍 요청의 경우 비어 있으므로 변수가 설정되어 있다고 가정하지 마십시오. |

266| `CLAUDE_RUNNER_SESSION_UUID` | 정규 UUID 형식의 동일한 세션 ID입니다. 사전 워밍 요청의 경우 비어 있습니다. |306| `CLAUDE_RUNNER_SESSION_UUID` | 정규 UUID 형식의 동일한 세션 ID입니다. 사전 워밍 요청의 경우 비어 있습니다. |

267| `CLAUDE_RUNNER_ATTEMPT` | 이 세션이 가진 스폰 요청의 수입니다. 사전 워밍 요청의 경우 `0`입니다. |307| `CLAUDE_RUNNER_ATTEMPT` | 로깅에 사용하는 세션별 카운터입니다. 재시도 횟수나 요청 수가 아닙니다. 사전 워밍 요청의 경우 `0`이지만, 세션에 대한 요청도 `0`을 가질 수 있습니다. |

268| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | 폴 응답의 HTTP `Date` 헤더에서 서버 시간입니다. 훅이 작업 지시서 JWT의 `exp`를 확인할 때 로컬 클록 대신 이 값과 비교하여 시간 차이를 허용합니다. 게이트웨이가 헤더를 생략한 경우 비어 있습니다. |308| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | 폴 응답의 HTTP `Date` 헤더에서 서버 시간입니다. 훅이 작업 지시서 JWT의 `exp`를 확인할 때 로컬 클록 대신 이 값과 비교하여 시간 차이를 허용합니다. 게이트웨이가 헤더를 생략한 경우 비어 있습니다. |

269| `CLAUDE_RUNNER_POOL_ID` | 새 러너가 조인해야 하는 환경의 ID이며, `ccpool_...` 형식입니다. |309| `CLAUDE_RUNNER_POOL_ID` | 새 러너가 조인해야 하는 환경의 ID이며, `ccpool_...` 형식입니다. |

270| `CLAUDE_RUNNER_ACCOUNT_ID` | 세션을 대기열에 넣은 계정의 태그된 ID이며, 계정별 라우팅, 할당량 또는 차지백용입니다. 사용할 수 없을 때 비어 있으며, Claude Tag 채널 세션의 경우 항상 비어 있습니다. 이러한 세션은 계정이 대기열에 넣지 않습니다. |310| `CLAUDE_RUNNER_ACCOUNT_ID` | 세션을 대기열에 넣은 계정의 태그된 ID이며, 계정별 라우팅, 할당량 또는 차지백용입니다. 사용할 수 없을 때 비어 있으며, Claude Tag 채널 세션의 경우 항상 비어 있습니다. 이러한 세션은 계정이 대기열에 넣지 않습니다. |

271| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | 세션을 대기열에 넣은 계정의 이메일입니다. 사용할 수 없을 때 비어 있습니다. 이메일을 개인 식별 정보로 취급하고 로깅하지 마십시오. |311| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | 세션을 대기열에 넣은 계정의 이메일입니다. 사용할 수 없을 때 비어 있습니다. 이메일을 개인 식별 정보로 취급하고 로깅하지 마십시오. |

272| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | 세션의 첫 번째 git 소스의 URL이며, 해당 리포지토리가 사전 워밍된 러너로 라우팅하기 위한 것입니다. 세션에 git 소스가 없을 때 비어 있습니다. |312| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | 세션의 첫 번째 git 소스의 URL이며, 해당 리포지토리가 사전 워밍된 러너로 라우팅하기 위한 것입니다. 세션에 git 소스가 없을 때 비어 있습니다. |

273| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | 세션의 첫 번째 git 소스의 리비전입니다: 브랜치, SHA 또는 태그입니다. 지정되지 않은 경우 비어 있습니다. |313| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | 세션의 첫 번째 git 소스의 리비전입니다: 브랜치, SHA, 태그 또는 전체 참조 이름입니다. 지정되지 않은 경우 비어 있습니다. |

274| `CLAUDE_RUNNER_REPO_SOURCES` | 세션의 모든 git 소스에 대한 `{url, revision}`의 JSON 배열이며, 보조 리포지토리에서 라우팅하는 훅용입니다. 소스가 없을 때 비어 있습니다. |314| `CLAUDE_RUNNER_REPO_SOURCES` | 세션의 모든 git 소스에 대한 `{url, revision}`의 JSON 배열이며, 보조 리포지토리에서 라우팅하는 훅용입니다. 소스가 없을 때 비어 있습니다. |

275| `CLAUDE_RUNNER_CORRELATION_ID` | 세션 생성 시 제공된 상관 ID이며, 훅이 이 작업 지시서를 세션을 생성한 요청에 매핑할 수 있도록 에코백됩니다. 세션에 없을 때 비어 있습니다. |315| `CLAUDE_RUNNER_CORRELATION_ID` | 세션 생성 시 제공된 상관 ID이며, 훅이 이 작업 지시서를 세션을 생성한 요청에 매핑할 수 있도록 에코백됩니다. 세션에 없을 때 비어 있습니다. |

276| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 세션을 생성한 클라이언트 표면입니다. 예: `web_claude_ai`, `desktop_app`, `ios` 또는 `scheduled_trigger`이며, 채택 분석용입니다. 세션에 기록되거나 인식된 표면이 없을 때 설정되지 않으며, 사전 워밍 요청의 경우도 마찬가지입니다. `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]`로 확인하면 `set -u` 하에서 안전하게 유지됩니다. |316| `CLAUDE_RUNNER_CLIENT_PLATFORM` | 세션을 생성한 클라이언트 표면입니다. 예: `web_claude_ai`, `desktop_app`, `ios` 또는 `scheduled_trigger`이며, 채택 분석용입니다. 세션에 기록되거나 인식된 표면이 없을 때 설정되지 않으며, 사전 워밍 요청의 경우도 마찬가지입니다. `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]`로 확인하면 `set -u` 하에서 안전하게 유지됩니다. |


286 326 

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

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

2893. **종료 코드 계약을 사용합니다.** 종료 0은 제출됨을 의미합니다. 종료 1은 재시도 가능한 실패를 의미합니다. 세션은 백오프되고 다시 제공됩니다. 종료 2 이상은 재시도 불가능을 의미합니다. 세션은 [Owner](/docs/ko/cloud-environments#organization-shared-environments)가 환경의 **Activity** 탭에서 **Retry**를 선택할 때까지 다시 스폰되지 않습니다. 0이 아닌 종료 시 훅의 stderr 끝이 실패 이유로 표시되므로 실행 가능한 오류를 stderr에 작성하고 시크릿은 절대 작성하지 마십시오. 사전 워밍 요청의 경우 실패할 세션이 없습니다: 오케스트레이터는 0이 아닌 종료를 로컬에만 로깅하고, 서버는 리스 후 스폰을 재요청합니다.3293. **종료 코드 계약을 사용합니다.** 결과에 맞는 상태로 종료합니다:

2904. **`--expected-spawn-seconds`를 최소한 p99 부팅 시간으로 설정합니다.** 이는 서버 측 리스입니다. 모든 오케스트레이터 복제본은 동일한 값을 사용해야 합니다.330 

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

332 * **종료 1**: 재시도 가능한 실패. 세션은 백오프되고 다시 제공됩니다.

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

334 

335 0이 아닌 종료 시 훅의 stderr 끝이 **Activity** 탭에 실패 이유로 표시되므로 실행 가능한 오류를 stderr에 작성하고 시크릿은 절대 작성하지 마십시오. 셸 훅에서는 [일시적인 실패를 재시도 가능한 상태로 유지하십시오](#keep-transient-failures-retryable-in-a-shell-hook).

336 

337 사전 워밍 요청의 경우 실패할 세션이 없습니다: 오케스트레이터는 0이 아닌 종료를 로컬에만 로깅하고, 서버는 `--expected-spawn-seconds` 리스가 만료된 후 스폰을 재요청합니다.

3384. **`--expected-spawn-seconds`를 최소한 스폰 요청부터 러너 등록까지의 p99 시간으로 설정합니다.** 오케스트레이터가 스폰 요청을 받은 시점부터 측정하고, 부팅 시간뿐 아니라 플랫폼에서 용량을 기다리는 시간도 포함하십시오. 이 값은 서버 측 리스이며 작업 지시서도 함께 만료되므로, 워크로드가 이보다 오래 걸리는 러너는 등록할 수 없습니다. 모든 오케스트레이터 복제본은 동일한 값을 사용해야 합니다.

291 339 

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

293 341 

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

295 343 

344<h4 id="keep-transient-failures-retryable-in-a-shell-hook">

345 셸 훅에서 일시적인 실패를 재시도 가능한 상태로 유지하기

346</h4>

347 

348`set -e`를 사용하는 셸 훅에서는 재시도로 해결될 수 있었던 실패가 세션을 차단할 수 있습니다. 훅은 실패한 명령에서 멈추고 해당 명령 자체의 상태로 종료하며, 오케스트레이터는 그 상태에 종료 코드 계약을 적용합니다. 명령이 설치되지 않았을 때의 `127`이나 HTTP 오류 시 `curl --fail`이 반환하는 `22`처럼 많은 실패가 2 이상의 상태를 반환하므로, 첫 번째 실패에서 세션이 차단됩니다.

349 

350훅이 이미 차단한 세션은 사용자가 새 메시지를 보내거나 [Owner](/docs/ko/cloud-environments#organization-shared-environments)가 환경의 **Activity** 탭에서 해당 세션의 **Retry**를 선택할 때까지 차단된 상태로 유지됩니다.

351 

352이러한 실패를 대신 종료 1로 바꾸려면 훅의 `#!` 줄 바로 아래, 실패할 수 있는 어떤 코드보다도 위에 다음 줄을 넣으십시오:

353 

354```bash theme={null}

355set -e

356PERMANENT=; permanent() { printf '%s\n' "$*" >&2; PERMANENT=1; exit 2; }

357trap 'rc=$?; [ "$rc" -eq 0 ] || [ -n "${PERMANENT:-}" ] || exit 1' EXIT

358```

359 

360이 줄들은 훅의 나머지 부분이 동작하는 방식을 바꾸므로, 추가한 후 다음 각 패턴이 있는지 훅을 확인하십시오:

361 

362* **단독 `exit 2` 이상**: trap이 설정되면 종료 1이 됩니다. 어떤 재시도로도 해결할 수 없는 오류의 경우 대신 `permanent "namespace claude-runners does not exist"`처럼 이유와 함께 `permanent`를 호출하십시오. `$( )`, `( )` 또는 파이프 내부가 아닌 메인 셸에서 호출하십시오.

363* **`exec`**: `exec`는 셸을 대체하여 trap이 실행되지 않으므로, 훅의 마지막 명령을 `exec`로 시작하지 마십시오.

364* **두 번째 `EXIT` trap**: 두 번째 `trap ... EXIT`는 첫 번째를 대체하므로 두 trap을 하나로 병합하십시오. 정리 명령을 `rc=$?;` 바로 뒤에 넣고 각각을 `|| true;`로 끝내십시오. 그러면 정리 작업이 성공 시뿐 아니라 실패 시에도 실행되며, 정리 명령이 실패해도 훅의 종료 상태가 설정되지 않습니다. 다음 병합된 trap은 그 형태를 보여 주며, `your-cleanup-command`는 사용자 자신의 명령을 나타냅니다:

365 

366 ```bash theme={null}

367 trap 'rc=$?; your-cleanup-command || true; [ "$rc" -eq 0 ] || [ -n "${PERMANENT:-}" ] || exit 1' EXIT

368 ```

369* **실패해도 되는 명령**: 훅이 이전에 `set -e`를 사용하지 않았다면, 이제 아무것도 찾지 못한 조회나 플랫폼이 거부하는 중복 제출처럼 0이 아닌 값을 반환하는 첫 번째 명령에서 멈춥니다. 훅이 결과에 따라 동작한다면 해당 명령을 `if`의 조건으로 만드십시오. 결과를 무시한다면 명령 뒤에 `|| true`를 붙이십시오.

370 

371trap이 작동하는지 확인하려면 `trap` 줄 바로 아래에 `no-such-command`처럼 존재하지 않는 명령을 호출하는 줄을 추가하십시오. 셸에서 훅 파일을 실행하고 `echo $?`가 `1`을 출력하는지 확인한 다음 해당 줄을 제거하십시오.

372 

296<h2 id="send-model-requests-to-bedrock-or-agent-platform">373<h2 id="send-model-requests-to-bedrock-or-agent-platform">

297 Bedrock 또는 Agent Platform으로 모델 요청 보내기374 Bedrock 또는 Agent Platform으로 모델 요청 보내기

298</h2>375</h2>


381Amazon Bedrock 또는 Google Cloud의 Agent Platform으로 모델 요청을 보내는 세션은 Anthropic API의 세션과 다음과 같은 점에서 다릅니다.458Amazon Bedrock 또는 Google Cloud의 Agent Platform으로 모델 요청을 보내는 세션은 Anthropic API의 세션과 다음과 같은 점에서 다릅니다.

382 459 

383* **claude.ai의 정책**: [서버 관리형 설정](/docs/ko/server-managed-settings)은 이러한 세션에 도달하지 않습니다. Owner가 Claude Code 관리자 설정에서 지정하는 조직 정책도 도달하지 않으므로, Claude Code는 세션 내에서 이를 적용하지 않습니다. 의존하는 규칙은 러너 이미지의 [관리형 설정 파일](/docs/ko/managed-settings#delivery-mechanisms)에 넣으십시오.460* **claude.ai의 정책**: [서버 관리형 설정](/docs/ko/server-managed-settings)은 이러한 세션에 도달하지 않습니다. Owner가 Claude Code 관리자 설정에서 지정하는 조직 정책도 도달하지 않으므로, Claude Code는 세션 내에서 이를 적용하지 않습니다. 의존하는 규칙은 러너 이미지의 [관리형 설정 파일](/docs/ko/managed-settings#delivery-mechanisms)에 넣으십시오.

461* **계정 스킬**: 이러한 세션은 개인의 claude.ai 계정에서 활성화된 스킬을 다운로드하지 않습니다. [각 세션의 구성이 조합되는 방식](#how-each-session’s-config-is-assembled)을 참조하십시오.

384* **파일**: claude.ai나 모바일 또는 데스크톱 앱에서 세션에 첨부한 파일은 세션에 도달하지 않으며, Claude는 [`SendUserFile` 도구](/docs/ko/tools-reference)로 파일을 다시 보낼 수 없습니다. 대신 입력 파일을 저장소나 러너에 두십시오.462* **파일**: claude.ai나 모바일 또는 데스크톱 앱에서 세션에 첨부한 파일은 세션에 도달하지 않으며, Claude는 [`SendUserFile` 도구](/docs/ko/tools-reference)로 파일을 다시 보낼 수 없습니다. 대신 입력 파일을 저장소나 러너에 두십시오.

385* **모델 선택**: Anthropic의 컨트롤 플레인이 각 세션의 모델을 전송하며, 모델 없이 세션이 시작되면 Claude Code는 해당 제공업체의 기본값을 사용합니다. 러너는 세션에 전달하는 환경에서 `ANTHROPIC_MODEL`과 `ANTHROPIC_DEFAULT_MODEL`을 제거합니다. 제공업체 페이지의 예시에서는 `ANTHROPIC_MODEL`을 설정하지만, 러너 환경에서는 두 변수 모두 아무런 효과가 없습니다. [Amazon Bedrock](/docs/ko/amazon-bedrock#4-pin-model-versions) 및 [Agent Platform](/docs/ko/google-vertex-ai#5-pin-model-versions)의 모델 버전 고정에 나오는 모델 계열별 변수는 세션에 도달합니다. 이 변수는 `opus` 같은 별칭이 무엇으로 해석되는지를 결정하며, 전체 모델 ID가 무엇으로 해석되는지는 결정하지 않습니다.463* **모델 선택**: Anthropic의 컨트롤 플레인이 각 세션의 모델을 전송하며, 모델 없이 세션이 시작되면 Claude Code는 해당 제공업체의 기본값을 사용합니다. 러너 환경의 `ANTHROPIC_MODEL`이나 `ANTHROPIC_DEFAULT_MODEL`로는 모델을 선택할 수 없지만, 별칭이 무엇으로 해석되는지는 고정할 수 있습니다.

464 * **`ANTHROPIC_MODEL` 및 `ANTHROPIC_DEFAULT_MODEL`**: 제공업체 페이지의 예시에서는 `ANTHROPIC_MODEL`을 설정하지만, 러너는 세션에 전달하는 환경에서 이 두 변수를 제거합니다.

465 * **모델 계열별 고정 변수**: [Amazon Bedrock](/docs/ko/amazon-bedrock#4-pin-model-versions) 및 [Agent Platform](/docs/ko/google-vertex-ai#5-pin-model-versions)의 모델 버전 고정에 나오는 변수는 세션에 도달합니다. 이 변수는 `opus` 같은 별칭이 무엇으로 해석되는지를 결정하며, 전체 모델 ID가 무엇으로 해석되는지는 결정하지 않습니다.

386* **계정에서 제공하지 않는 모델**: 세션이 모델 이름이 포함된 오류와 함께 메시지에서 실패할 수 있습니다. 개발자가 선택할 수 있는 모델, 모델 버전 고정에 설명된 백그라운드 모델, [자동 모드](/docs/ko/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry)가 사용하는 분류기 모델을 활성화하십시오. Amazon Bedrock에서는 정책에서 각 모델을 허용하십시오.466* **계정에서 제공하지 않는 모델**: 세션이 모델 이름이 포함된 오류와 함께 메시지에서 실패할 수 있습니다. 개발자가 선택할 수 있는 모델, 모델 버전 고정에 설명된 백그라운드 모델, [자동 모드](/docs/ko/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry)가 사용하는 분류기 모델을 활성화하십시오. Amazon Bedrock에서는 정책에서 각 모델을 허용하십시오.

387* **웹 검색 및 빠른 모드**: [웹 검색](/docs/ko/tools-reference#websearch-tool-behavior)은 Amazon Bedrock에서 사용할 수 없으며, [빠른 모드](/docs/ko/fast-mode)는 두 제공업체 모두에서 사용할 수 없습니다. 제공업체에 따라 달라지는 기타 기능은 [제공업체별로 달라지는 CLI 기능](/docs/ko/feature-availability#cli-capabilities-that-vary-by-provider)을 참조하십시오.467* **웹 검색 및 빠른 모드**: [웹 검색](/docs/ko/tools-reference#websearch-tool-behavior)은 Amazon Bedrock에서 사용할 수 없으며, [빠른 모드](/docs/ko/fast-mode)는 두 제공업체 모두에서 사용할 수 없습니다. 제공업체에 따라 달라지는 기타 기능은 [제공업체별로 달라지는 CLI 기능](/docs/ko/feature-availability#cli-capabilities-that-vary-by-provider)을 참조하십시오.

388 468 


411 491 

412세션은 러너의 환경을 상속하므로, 러너에서 [`ENABLE_TOOL_SEARCH`](/docs/ko/mcp#scale-with-mcp-tool-search)를 설정하면 러너가 생성하는 모든 세션의 MCP 도구 검색을 제어할 수 있습니다. 값에 대해서는 MCP 페이지에서 다룹니다.492세션은 러너의 환경을 상속하므로, 러너에서 [`ENABLE_TOOL_SEARCH`](/docs/ko/mcp#scale-with-mcp-tool-search)를 설정하면 러너가 생성하는 모든 세션의 MCP 도구 검색을 제어할 수 있습니다. 값에 대해서는 MCP 페이지에서 다룹니다.

413 493 

494<a id="connection-timing" />

495 

496<h3 id="wait-for-mcp-servers-before-the-first-turn">

497 첫 턴 전에 MCP 서버 대기하기

498</h3>

499 

500자체 호스팅 세션은 아직 연결 중인 MCP 서버를 두 개의 별도 시점에서 잠시 기다립니다. 대기 시간 내에 연결되지 못한 서버는 첫 턴이 시작될 때 해당 도구가 누락되며, 이후 별도의 조치 없이 사용할 수 있게 됩니다. 두 가지 대기는 다음과 같습니다:

501 

502* **세션 시작**: 도구 목록을 처음 가져오기 전에, 세션은 항목에 [`alwaysLoad: true`](/docs/ko/mcp#exempt-a-server-from-deferral)를 설정한 HTTP 또는 SSE 서버를 기본적으로 최대 5초 동안 기다리며, 러너 환경에서 [`MCP_CONNECTION_NONBLOCKING=0`](/docs/ko/env-vars)을 설정한 경우에는 모든 서버를 기다립니다. 그 외의 경우 HTTP 및 SSE 서버는 백그라운드에서 연결됩니다. 세션이 여기서 대기하는 동안에는 초기화가 느려집니다. [`MCP_CONNECT_TIMEOUT_MS`](/docs/ko/env-vars)로 5초 기본값을 변경할 수 있습니다.

503* **첫 턴**: 메시지가 도착한 후, 첫 턴은 아직 연결 중인 stdio 서버를 최대 2초 동안 기다립니다. 세션이 여기서 대기하는 동안에는 첫 응답이 느려집니다. 이 대기 시간을 변경하려면 러너 환경에서 [`CLAUDE_CODE_MCP_STARTUP_WAIT_MS`](/docs/ko/env-vars)를 설정합니다. 이 설정은 대기 대상 서버를 변경하지 않습니다. Claude Code v2.1.274 이상이 필요합니다.

504 

505`claude mcp add`에는 `alwaysLoad` 플래그가 없습니다. 이 키를 설정하려면 대신 `claude mcp add-json`으로 서버를 추가합니다. 이 명령은 서버의 JSON에서 해당 키를 받아 `.claude.json`에 기록합니다. Dockerfile에서는 다음과 같습니다:

506 

507```dockerfile theme={null}

508RUN claude mcp add-json core '{"type":"http","url":"https://mcp.example.com/mcp","alwaysLoad":true}' --scope user

509```

510 

511이후 턴에서도 서버의 도구가 나타나지 않으면, [MCP 서버](#mcp-servers)에서 설명한 대로 서버가 세션에 전달되었는지 확인합니다.

512 

414<h3 id="turn-off-built-in-session-tools">513<h3 id="turn-off-built-in-session-tools">

415 기본 제공 세션 도구 끄기514 기본 제공 세션 도구 끄기

416</h3>515</h3>


569 668 

570`SELF_HOSTED_RUNNER_HOST_CONFIG_DIR`을 설정하여 다른 경로에서 시드하거나 빈 디렉토리를 가리켜 시딩을 비활성화하십시오.669`SELF_HOSTED_RUNNER_HOST_CONFIG_DIR`을 설정하여 다른 경로에서 시드하거나 빈 디렉토리를 가리켜 시딩을 비활성화하십시오.

571 670 

572저장소 커밋된 `.claude/settings.json`은 프로젝트 설정으로 위에 계층화됩니다. 여러 저장소가 있는 세션에서는 [최대 하나의 저장소 파일만 적용됩니다](#repository-settings-in-sessions-with-several-repositories). 세션은 또한 러너 이미지의 표준 시스템 경로에서 [`managed-settings.json`](/docs/ko/settings#where-settings-live)을 읽습니다. 해당 키가 [서버 관리 설정](/docs/ko/server-managed-settings)과 함께 적용되는지 여부는 [Claude Code가 관리형 소스를 결합하는 방식](/docs/ko/managed-settings#how-claude-code-combines-managed-sources)을 따릅니다. 기본적으로 조직이 서버 관리 키를 제공할 때 세션은 [Claude Code가 모든 관리자 소스에서 읽는 키](/docs/ko/managed-settings#keys-read-from-every-admin-source)(예: `env` 블록, 샌드박스 잠금, 샌드박스 바이너리 경로 및 `forceRemoteSettingsRefresh`)를 제외하고 러너 이미지의 파일을 무시합니다. [설정 우선순위](/docs/ko/settings#settings-precedence)를 참조하십시오.671세션은 다음 설정 파일도 읽습니다:

672 

673* **프로젝트 설정**: 저장소에 커밋된 `.claude/settings.json`은 사용자 수준 기준선 위에 계층화됩니다. 여러 저장소가 있는 세션에서는 [최대 하나의 저장소 파일만 적용됩니다](#repository-settings-in-sessions-with-several-repositories).

674* **관리형 설정**: 세션은 러너 이미지의 표준 시스템 경로에서 [`managed-settings.json`](/docs/ko/settings#where-settings-live)을 읽습니다. 해당 키가 [서버 관리 설정](/docs/ko/server-managed-settings)과 함께 적용되는지 여부는 [Claude Code가 관리형 소스를 결합하는 방식](/docs/ko/managed-settings#how-claude-code-combines-managed-sources)을 참조하십시오.

675 

676이러한 소스가 적용되는 순서는 [설정 우선순위](/docs/ko/settings#settings-precedence)를 참조하십시오.

573 677 

574Anthropic의 제어 평면이 세션에 [Claude Code 훅](/docs/ko/hooks)을 제공할 때 러너는 자신의 구성 위에 설치하지 않고 자신의 구성과 함께 설치합니다. Claude Code v2.1.229 이상이 필요합니다.678Anthropic의 제어 평면이 세션에 [Claude Code 훅](/docs/ko/hooks)을 제공할 때 러너는 자신의 구성 위에 설치하지 않고 자신의 구성과 함께 설치합니다. Claude Code v2.1.229 이상이 필요합니다.

575 679 


577* **작성자**: 제어 평면은 세션별 또는 타사 입력이 아닌 자신의 배포의 고정 상수에서 스크립트를 채웁니다.681* **작성자**: 제어 평면은 세션별 또는 타사 입력이 아닌 자신의 배포의 고정 상수에서 스크립트를 채웁니다.

578* **여전히 이를 관리하는 것**: `--settings`를 통해 제공된 훅은 관리되는 계층이 아닌 일반 병합 훅 구성에 들어가므로 관리되는 설정이 여전히 적용됩니다. `disableAllHooks`는 이를 비활성화하며, [`allowManagedHooksOnly`](/docs/ko/settings-reference#allowmanagedhooksonly)가 로드된 상태로 유지하는 범주에 포함되지 않습니다.682* **여전히 이를 관리하는 것**: `--settings`를 통해 제공된 훅은 관리되는 계층이 아닌 일반 병합 훅 구성에 들어가므로 관리되는 설정이 여전히 적용됩니다. `disableAllHooks`는 이를 비활성화하며, [`allowManagedHooksOnly`](/docs/ko/settings-reference#allowmanagedhooksonly)가 로드된 상태로 유지하는 범주에 포함되지 않습니다.

579 683 

684사용자가 직접 세션을 시작하면 Claude Code는 해당 사용자의 [claude.ai 계정에서 활성화된 스킬](/docs/ko/skills#skills-in-cowork-and-cloud-sessions)도 해당 세션의 구성 디렉토리로 다운로드합니다. [루틴](/docs/ko/routines) 실행은 소유자의 스킬을 받지 않으며, [Bedrock 또는 Agent Platform으로 모델 요청을 보내는](#send-model-requests-to-bedrock-or-agent-platform) 세션은 스킬을 전혀 다운로드하지 않습니다. 이러한 세션에 필요한 스킬은 저장소의 `.claude/skills/`에 커밋하거나 러너 이미지에 추가하십시오.

685 

580[Claude Tag](https://claude.com/docs/claude-tag/overview) 세션을 제외하면, 자체 호스팅 환경의 세션은 기본적으로 [자동 메모리](/docs/ko/memory#auto-memory)가 꺼진 상태로 실행됩니다. 여러 세션에 걸쳐 유지되어야 하는 지침에는 러너 이미지 또는 저장소의 `CLAUDE.md`를 사용하십시오.686[Claude Tag](https://claude.com/docs/claude-tag/overview) 세션을 제외하면, 자체 호스팅 환경의 세션은 기본적으로 [자동 메모리](/docs/ko/memory#auto-memory)가 꺼진 상태로 실행됩니다. 여러 세션에 걸쳐 유지되어야 하는 지침에는 러너 이미지 또는 저장소의 `CLAUDE.md`를 사용하십시오.

581 687 

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

Details

20 20 

21* **임시 세션별 컨테이너**: `--capacity 1`과 기본값 `--drain-grace-sec 0`을 사용하여 각 러너 프로세스를 프로세스가 종료될 때 삭제되는 새로운 컨테이너 또는 VM에서 실행하므로 각 컨테이너는 정확히 하나의 세션을 제공합니다. 더 높은 용량이거나 양수 드레인 유예가 있으면 하나의 컨테이너가 동일한 [잠긴 소유자](/docs/ko/self-hosted-environments#key-concepts)의 여러 세션을 제공합니다. [러너 수명 주기](/docs/ko/self-hosted-environments#runner-lifecycle)를 참조하세요. 러너 재시작 간에 파일 시스템을 재사용하지 마세요. 의도적인 [사전 준비된 체크아웃](#reuse-a-pre-warmed-checkout) 설정을 제외하고, 소유자 간에는 절대 재사용하지 마세요.21* **임시 세션별 컨테이너**: `--capacity 1`과 기본값 `--drain-grace-sec 0`을 사용하여 각 러너 프로세스를 프로세스가 종료될 때 삭제되는 새로운 컨테이너 또는 VM에서 실행하므로 각 컨테이너는 정확히 하나의 세션을 제공합니다. 더 높은 용량이거나 양수 드레인 유예가 있으면 하나의 컨테이너가 동일한 [잠긴 소유자](/docs/ko/self-hosted-environments#key-concepts)의 여러 세션을 제공합니다. [러너 수명 주기](/docs/ko/self-hosted-environments#runner-lifecycle)를 참조하세요. 러너 재시작 간에 파일 시스템을 재사용하지 마세요. 의도적인 [사전 준비된 체크아웃](#reuse-a-pre-warmed-checkout) 설정을 제외하고, 소유자 간에는 절대 재사용하지 마세요.

22 * <span id="processes-a-stopped-session-leaves" />러너가 세션을 중지할 때, 셸 명령이 종료된 후에도 계속 실행 중인 프로세스(예: 데몬화된 서비스)에는 신호를 보내지 않습니다. 컨테이너 또는 VM을 삭제하면 해당 프로세스가 종료됩니다.22 * <span id="processes-a-stopped-session-leaves" />러너가 세션을 중지할 때, 셸 명령이 종료된 후에도 계속 실행 중인 프로세스(예: 데몬화된 서비스)에는 신호를 보내지 않습니다. 컨테이너 또는 VM을 삭제하면 해당 프로세스가 종료됩니다.

23* **이미지에 광범위한 자격증명 없음**: 장기 SSH 키, 클라우드 공급자 자격증명, 또는 세션이 필요한 것보다 더 많은 권한을 부여하는 개인 액세스 토큰을 포함하지 마세요. 세션 중에 사용되는 자격증명(예: 푸시 또는 API 토큰)을 [래퍼 스크립트](/docs/ko/self-hosted-environments-configuration#wrapper-scripts)에서 세션별로 발급하세요. 래퍼가 실행되기 전에 발생하는 초기 클론의 경우 [`checkout` 수명 주기 훅](/docs/ko/self-hosted-environments-configuration#checkout) 또는 [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)를 사용하세요. [git 구성](#configure-git)을 참조하세요.23* **이미지에 광범위한 자격 증명 없음**: 장기 SSH 키, 클라우드 공급자 자격 증명, 또는 세션이 필요한 것보다 더 많은 권한을 부여하는 개인 액세스 토큰을 포함하지 마세요. 세션 중에 사용되는 자격 증명(예: 푸시 또는 API 토큰)을 [래퍼 스크립트](/docs/ko/self-hosted-environments-configuration#wrapper-scripts)에서 세션별로 발급하세요. 초기 클론은 래퍼가 실행되기 전에 발생하므로 [`checkout` 수명 주기 훅](/docs/ko/self-hosted-environments-configuration#checkout)으로 처리하거나, 세션의 모든 저장소가 github.com에 있는 경우 [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)로 처리하세요. 두 가지 모두 [git 구성](#configure-git)을 참조하세요.

24* **호스트의 GitHub 자격 증명을 세션에서 분리**: Claude는 세션이 읽을 수 있는 모든 GitHub 자격 증명을 해당 자격 증명이 부여하는 모든 액세스 권한으로 사용할 수 있습니다. 러너 호스트 자체의 광범위한 범위를 가진 GitHub 자격 증명을 세션이 읽을 수 있는 곳에 두지 마세요. 이러한 자격 증명은 개인 액세스 토큰, `gh auth login`이 계정에 대해 저장하는 토큰, 또는 러너 환경의 `GH_TOKEN`일 수 있습니다.

25 * **[Anthropic 관리형 git](#use-the-anthropic-git-proxy) 사용 시**: 이러한 자격 증명이 있으면 Claude는 Anthropic 관리형 git을 거치지 않고 GitHub에 직접 접근합니다.

26 * **Anthropic 관리형 git 미사용 시**: [이미지에 git 구성 포함](#ship-git-config-in-your-image)에서 설명하는 만큼 범위를 엄격하게 제한하면 클론 자격 증명을 이미지에 유지할 수 있습니다.

24* **세션 실행 호스트에서 환경 시크릿 유지**: 환경 시크릿은 러너를 등록하고 환경에 대기 중인 모든 세션을 선택할 수 있습니다. 고정 플릿에서는 모든 러너 호스트에 있으며, 모든 세션의 코드가 시크릿 파일을 읽을 수 있습니다. [온디맨드 러너](/docs/ko/self-hosted-environments-configuration#on-demand-runners)를 선호하세요. 여기서 시크릿은 사용자 코드를 실행하지 않는 오케스트레이터 호스트에 유지되며, 각 러너는 정확히 하나의 러너를 등록하는 단일 사용 작업 주문을 받습니다. 고정 플릿에서는 환경 시크릿 파일을 모든 세션이 읽을 수 있는 것으로 취급하고 의심되는 세션 손상 후 시크릿을 회전하세요.27* **세션 실행 호스트에서 환경 시크릿 유지**: 환경 시크릿은 러너를 등록하고 환경에 대기 중인 모든 세션을 선택할 수 있습니다. 고정 플릿에서는 모든 러너 호스트에 있으며, 모든 세션의 코드가 시크릿 파일을 읽을 수 있습니다. [온디맨드 러너](/docs/ko/self-hosted-environments-configuration#on-demand-runners)를 선호하세요. 여기서 시크릿은 사용자 코드를 실행하지 않는 오케스트레이터 호스트에 유지되며, 각 러너는 정확히 하나의 러너를 등록하는 단일 사용 작업 주문을 받습니다. 고정 플릿에서는 환경 시크릿 파일을 모든 세션이 읽을 수 있는 것으로 취급하고 의심되는 세션 손상 후 시크릿을 회전하세요.

25* **기본 거부 네트워크 이그레스**: 모든 환경에서 네트워크 경계에서 러너 및 세션 컨테이너 아웃바운드 트래픽을 제한하세요. [기본 거부 이그레스](#default-deny-egress)에서 허용할 항목과 이유를 다룹니다.28* **기본 거부 네트워크 이그레스**: 모든 환경에서 네트워크 경계에서 러너 및 세션 컨테이너 아웃바운드 트래픽을 제한하세요. [기본 거부 이그레스](#default-deny-egress)에서 허용할 항목과 이유를 다룹니다.

26* **최소 권한 호스트 IAM**: 러너 호스트에 연결된 컴퓨팅 ID(예: 인스턴스 프로필 또는 노드 서비스 계정)는 러너 자체가 필요한 것만 부여해야 합니다. 세션은 호스트의 ID를 상속하는 대신 래퍼 스크립트를 통해 자신의 자격증명을 얻어야 합니다.29* **최소 권한 호스트 IAM**: 러너 호스트에 연결된 컴퓨팅 ID(예: 인스턴스 프로필 또는 노드 서비스 계정)는 러너 자체가 필요한 것만 부여해야 합니다. 세션은 호스트의 ID를 상속하는 대신 래퍼 스크립트를 통해 자신의 자격증명을 얻어야 합니다.


42 가드는 [`--trust-workspace`](/docs/ko/self-hosted-environments-reference#runner-cli-flags)와 관계없이 실행되며, 리포지토리 훅, `.mcp.json`, 또는 Bash 규칙을 다루지 않습니다. [권한 및 도구 승인](/docs/ko/self-hosted-environments-configuration#permissions-and-tool-approval)에서 이러한 권한이 어디에 속하는지 참조하세요.45 가드는 [`--trust-workspace`](/docs/ko/self-hosted-environments-reference#runner-cli-flags)와 관계없이 실행되며, 리포지토리 훅, `.mcp.json`, 또는 Bash 규칙을 다루지 않습니다. [권한 및 도구 승인](/docs/ko/self-hosted-environments-configuration#permissions-and-tool-approval)에서 이러한 권한이 어디에 속하는지 참조하세요.

43 46 

44<Note>47<Note>

45 조직의 IP 허용 목록은 기본적으로 자체 호스팅 러너 트래픽을 다루지 않습니다. 러너 또는 세션 트래픽에 대한 네트워크 제어로 의존하지 마세요. 대신 자신의 네트워크 경계에서 기본 거부 이그레스를 적용하고, 조직에 대한 IP 허용 목록 적용을 원하면 Anthropic 계정 팀에 문의하세요.48 조직에 [IP 허용 목록](https://support.claude.com/en/articles/13200993-restrict-access-to-claude-with-ip-allowlisting)이 활성화되어 있으면 러너와 세션 컨테이너를 시작하기 전에 해당 공개 이그레스 주소를 허용 목록에 추가하세요. [온디맨드 러너](/docs/ko/self-hosted-environments-configuration#on-demand-runners)를 실행하는 경우 오케스트레이터 호스트의 주소도 추가하세요. 러너 또는 세션 트래픽에 대한 네트워크 제어로 허용 목록에 의존하지 마세요. 대신 자체 네트워크 경계에서 기본 거부 이그레스를 적용하세요.

46</Note>49</Note>

47 50 

48<h2 id="network-requirements">51<h2 id="network-requirements">


55 58 

56| 호스트 | 포트 | 사용 목적 |59| 호스트 | 포트 | 사용 목적 |

57| :- | :- | :- |60| :- | :- | :- |

58| `api.anthropic.com` | 443, HTTPS; SCM 커넥터만 WSS | 러너 제어 평면 및 세션 스트리밍, 모델 추론, 기능 플래그, 제품 분석, [JWKS](/docs/ko/self-hosted-environments-identity) 키 가져오기, 커밋 서명, `--use-anthropic-git-proxy`가 설정되었을 때 git 프록시, `--scm-connector-host`가 설정되었을 때 오케스트레이터의 [SCM 커넥터](/docs/ko/self-hosted-environments-reference#scm-connector-flags) 터널 |61| `api.anthropic.com` | 443, HTTPS; [Anthropic 관리 git](#use-the-anthropic-git-proxy)의 경우 WSS | 러너 제어 평면 및 세션 스트리밍, 모델 추론, 기능 플래그, 제품 분석, [JWKS](/docs/ko/self-hosted-environments-identity) 키 가져오기, 커밋 서명, `--use-anthropic-git-proxy`가 설정되었을 때 Anthropic 관리 git |

59| `github.com` 또는 GitHub Enterprise 호스트와 같은 git 호스트 | 443 또는 22 | 리포지토리 클론 및 푸시. 러너가 `--use-anthropic-git-proxy`를 사용하는 경우 필요하지 않습니다. 이는 git 트래픽을 `api.anthropic.com`을 통해 라우팅합니다. |62| `github.com` 또는 GitHub Enterprise 호스트와 같은 git 호스트 | 443 또는 22 | 러너의 세션이 사용하는 각 git 호스트에서 저장소 클론 및 푸시. [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)를 사용하는 러너의 경우 [`github.com` 경로가 여전히 필요한 경우](#github-com-egress-with-the-anthropic-git-proxy)를 참조하세요. |

63 

64<span id="github-com-egress-with-the-anthropic-git-proxy" />[`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)를 사용하는 러너는 `github.com` git 트래픽을 `api.anthropic.com`을 통해 라우팅하므로 `github.com`에 대한 git 호스트 경로가 필요하지 않습니다. 다만 `--push-outcome-on-release`를 설정하거나 `post-session` 훅에서 푸시하는 경우에는 여전히 해당 경로가 필요합니다.

60 65 

61이러한 호스트가 필요한지 여부는 구성에 따라 다릅니다:66이러한 호스트가 필요한지 여부는 구성에 따라 다릅니다:

62 67 


71| `browser-intake-us5-datadoghq.com` | 443 | Anthropic 오류 보고서 업로드, [오류 보고](/docs/ko/data-usage#telemetry-services)가 세션의 계정에 대해 활성화되었을 때만 전송됩니다. `DISABLE_ERROR_REPORTING=1` 또는 `DISABLE_TELEMETRY=1`로 억제됩니다. |76| `browser-intake-us5-datadoghq.com` | 443 | Anthropic 오류 보고서 업로드, [오류 보고](/docs/ko/data-usage#telemetry-services)가 세션의 계정에 대해 활성화되었을 때만 전송됩니다. `DISABLE_ERROR_REPORTING=1` 또는 `DISABLE_TELEMETRY=1`로 억제됩니다. |

72| `bedrock-runtime.us-east-1.amazonaws.com` 또는 `aiplatform.googleapis.com`과 같이 모델 요청, 모델 조회, 자격 증명 갱신에 사용되는 클라우드 제공업체의 엔드포인트 | 443 | 러너가 [Amazon Bedrock 또는 Google Cloud의 Agent Platform으로 모델 요청을 보내는](/docs/ko/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform) 경우에만 |77| `bedrock-runtime.us-east-1.amazonaws.com` 또는 `aiplatform.googleapis.com`과 같이 모델 요청, 모델 조회, 자격 증명 갱신에 사용되는 클라우드 제공업체의 엔드포인트 | 443 | 러너가 [Amazon Bedrock 또는 Google Cloud의 Agent Platform으로 모델 요청을 보내는](/docs/ko/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform) 경우에만 |

73 78 

74러너는 `statsig.anthropic.com`, `*.sentry.io`, `claude.ai`, 또는 `platform.claude.com`에 도달하지 않습니다. 이러한 호스트는 일부 이전 엔터프라이즈 네트워크 체크리스트에 나타나지만, 러너 또는 세션 트래픽에 대해 허용 목록에 추가할 필요가 없습니다: 기능 플래그 가져오기는 `api.anthropic.com`으로 이동하고, 러너는 대화형 OAuth가 아닌 환경 시크릿으로 인증합니다. 두 호스트 측 흐름은 `claude.ai`에 도달하므로 세션 컨테이너 이그레스를 넓히는 대신 이그레스를 허용하는 호스트에서 실행하세요: 한 줄 설치 프로그램은 설치 시간에 `claude.ai`에서 `install.sh`를 가져오고, 대화형 `claude auth login`은 [안내 설정](/docs/ko/self-hosted-environments-quickstart#set-up-an-environment-and-runner), `doctor`의 서명된 모드, 및 [CI 전달](/docs/ko/self-hosted-environments-testing#authenticate-from-ci)이 사용하며, `claude.ai`, `claude.com`, 및 `platform.claude.com`을 통해 서명합니다. `mcp-proxy.anthropic.com`도 필요하지 않습니다: 자체 호스팅 세션은 이를 사용하지 않으며, 조직의 claude.ai 커넥터를 세션에 전달하는 것(조직에 대해 활성화된 경우)은 `api.anthropic.com`을 통해 라우팅됩니다. [MCP 서버](/docs/ko/self-hosted-environments-configuration#mcp-servers)를 참조하세요.79다음 호스트는 러너 또는 세션 트래픽에 대해 허용 목록에 추가할 필요가 없습니다:

80 

81* **`statsig.anthropic.com`, `*.sentry.io`, `claude.ai`, `platform.claude.com`**: 이러한 호스트는 일부 이전 엔터프라이즈 네트워크 체크리스트에 나타나지만, 러너는 이에 도달하지 않습니다. 기능 플래그 가져오기는 `api.anthropic.com`으로 이동하고, 러너는 대화형 OAuth가 아닌 환경 시크릿으로 인증합니다.

82* **`mcp-proxy.anthropic.com`**: 자체 호스팅 세션은 이를 사용하지 않습니다. 조직에 커넥터 전달이 활성화된 경우 조직의 claude.ai 커넥터는 `api.anthropic.com`을 통해 세션에 도달합니다. [MCP 서버](/docs/ko/self-hosted-environments-configuration#mcp-servers)를 참조하세요.

83 

84다음 호스트 측 흐름은 `claude.ai`에 도달하므로 세션 컨테이너 이그레스를 넓히는 대신 이그레스를 허용하는 호스트에서 실행하세요:

85 

86* **한 줄 설치 프로그램**: 설치 시간에 `claude.ai`에서 `install.sh`를 가져옵니다.

87* **대화형 `claude auth login`**: `claude.ai`, `claude.com`, `platform.claude.com`을 통해 로그인합니다. [안내 설정](/docs/ko/self-hosted-environments-quickstart#run-the-guided-setup), `doctor`의 로그인 모드, [CI 전달](/docs/ko/self-hosted-environments-testing#authenticate-from-ci)이 이를 사용합니다. 로그인에 사용하는 브라우저는 `hcaptcha.com`, `*.hcaptcha.com`, `challenges.cloudflare.com`에서 claude.ai 로그인 페이지의 브라우저 검사도 로드합니다.

75 88 

76<h3 id="default-deny-egress">89<h3 id="default-deny-egress">

77 기본 거부 이그레스90 기본 거부 이그레스


127* **러너가 git을 구성하도록 허용**: `--configure-git`으로 러너를 시작하여 Anthropic 호스팅 세션이 사용하는 동일한 ID 및 커밋 서명 구성을 작성하도록 합니다.140* **러너가 git을 구성하도록 허용**: `--configure-git`으로 러너를 시작하여 Anthropic 호스팅 세션이 사용하는 동일한 ID 및 커밋 서명 구성을 작성하도록 합니다.

128* **이미지에 git 구성 제공**: ID 및 푸시 자격증명을 직접 설정하세요(예: 자신의 봇 ID로 커밋하기 위해).141* **이미지에 git 구성 제공**: ID 및 푸시 자격증명을 직접 설정하세요(예: 자신의 봇 ID로 커밋하기 위해).

129 142 

143github.com의 저장소라면 [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)로 러너를 시작하거나 `CLAUDE_RUNNER_USE_GIT_PROXY=1`을 설정하여 러너의 세션에 대한 git을 Anthropic이 제공하도록 요청할 수도 있습니다.

144 

130러너 호스트의 Git 버전 하한: [`--configure-git`](#let-the-runner-configure-git) SSH 커밋 서명에는 Git 2.34 이상이 필요하고, [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)에는 2.32 이상이 필요하며, [`--push-outcome-on-release`](/docs/ko/self-hosted-environments-reference#runner-cli-flags)로 푸시된 분기에서 세션을 재개하려면 2.29 이상이 필요합니다. 세 가지를 모두 생략하고 git ID를 직접 관리하면 Git 2.24로 충분합니다.145러너 호스트의 Git 버전 하한: [`--configure-git`](#let-the-runner-configure-git) SSH 커밋 서명에는 Git 2.34 이상이 필요하고, [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)에는 2.32 이상이 필요하며, [`--push-outcome-on-release`](/docs/ko/self-hosted-environments-reference#runner-cli-flags)로 푸시된 분기에서 세션을 재개하려면 2.29 이상이 필요합니다. 세 가지를 모두 생략하고 git ID를 직접 관리하면 Git 2.24로 충분합니다.

131 146 

132<h3 id="let-the-runner-configure-git">147<h3 id="let-the-runner-configure-git">


138* `user.name = Claude` 및 `user.email = noreply@anthropic.com`, Anthropic 호스팅 세션과 일치153* `user.name = Claude` 및 `user.email = noreply@anthropic.com`, Anthropic 호스팅 세션과 일치

139* SSH 형식 커밋 및 태그 서명, 러너 관리 shim을 통해 라우팅되어 세션의 자신의 자격증명을 사용하여 Anthropic의 서명 서비스를 통해 각 커밋에 서명합니다. 서명은 Anthropic의 게시된 SSH 서명 키에 대해 GitHub에서 확인할 수 있습니다.154* SSH 형식 커밋 및 태그 서명, 러너 관리 shim을 통해 라우팅되어 세션의 자신의 자격증명을 사용하여 Anthropic의 서명 서비스를 통해 각 커밋에 서명합니다. 서명은 Anthropic의 게시된 SSH 서명 키에 대해 GitHub에서 확인할 수 있습니다.

140* `push.negotiate = true`, git이 푸시를 패킹하기 전에 git 호스트에 이미 가지고 있는 커밋을 요청하도록 합니다. Claude Code v2.1.257 이상이 필요합니다.155* `push.negotiate = true`, git이 푸시를 패킹하기 전에 git 호스트에 이미 가지고 있는 커밋을 요청하도록 합니다. Claude Code v2.1.257 이상이 필요합니다.

141* `core.hooksPath`는 러너 관리 훅 디렉토리를 가리킵니다. 해당 `commit-msg` 및 `prepare-commit-msg` 훅은 각 커밋에 세션 작성자를 위한 `Co-authored-by:` 트레일러를 추가하며, [`CCR_SESSION_ACCOUNT_EMAIL`](/docs/ko/self-hosted-environments-configuration#wrapper-scripts)의 이메일에서 빌드되고 해당 변수가 설정되지 않으면 생략됩니다. 이미지가 이미 `core.hooksPath`를 설정한 경우 러너는 설정을 그대로 두고 이러한 훅 설치를 건너뛰며 `[runner:git]` 경고를 출력합니다.156* `core.hooksPath`는 러너 관리 훅 디렉토리를 가리킵니다. 해당 `commit-msg` 및 `prepare-commit-msg` 훅은 각 커밋에 세션 작성자를 위한 `Co-authored-by:` 트레일러를 추가합니다. 트레일러는 [`CCR_SESSION_ACCOUNT_EMAIL`](/docs/ko/self-hosted-environments-configuration#wrapper-scripts)의 이메일로 만들어지며 해당 변수가 설정되지 않으면 생략됩니다. 이미지가 이미 `core.hooksPath`를 설정했고 러너가 [Anthropic 관리 git](#use-the-anthropic-git-proxy)을 사용하지 않는 경우, 러너는 설정을 그대로 두고 이러한 훅 설치를 건너뛰며 `[runner:git]` 경고를 출력합니다.

142 157 

143커밋 서명에는 Git 2.34 이상이 필요합니다. 러너는 시작 시 확인하고 git이 더 오래되면 오류로 종료합니다. 이 플래그는 푸시 자격증명을 구성하지 않으므로 여전히 이미지에 제공합니다.158커밋 서명에는 Git 2.34 이상이 필요합니다. 러너는 시작 시 확인하고 git이 더 오래되면 오류로 종료합니다. 이 플래그는 푸시 자격증명을 구성하지 않으므로 여전히 이미지에 제공합니다.

144 159 

145v2.1.280 이상의 러너에서는 `checkout` 또는 `post-session` 수명 주기 훅에서 만드는 커밋도 `Co-authored-by:` 트레일러 없이 세션으로 서명됩니다. [수명 주기 훅 내부의 git 구성](/docs/ko/self-hosted-environments-configuration#git-configuration-inside-lifecycle-hooks)에서 러너가 해당 훅 내부에서 고정하는 git 설정을 설명합니다.160v2.1.280 이상의 러너에서는 `checkout` 또는 `post-session` 수명 주기 훅에서 만드는 커밋도 `Co-authored-by:` 트레일러 없이 세션으로 서명됩니다. [수명 주기 훅 내부의 git 구성](/docs/ko/self-hosted-environments-configuration#git-configuration-inside-lifecycle-hooks)에서 러너가 해당 훅 내부에서 고정하는 git 설정을 설명합니다.

146 161 

162`--configure-git` 사용 여부와 관계없이 Claude Code는 Claude에게 커밋 메시지 끝에 `Claude-Session: <url>` 트레일러를, 풀 리퀘스트 설명 끝에 세션의 URL을 추가하도록 지시합니다. 둘 다 생략하려면 러너 호스트의 [`~/.claude/settings.json`](/docs/ko/self-hosted-environments-configuration#how-each-session’s-config-is-assembled)에서 [`attribution.sessionUrl`](/docs/ko/settings-reference#attribution-sessionurl)을 `false`로 설정한 다음 러너를 다시 시작하세요.

163 

147<h3 id="ship-git-config-in-your-image">164<h3 id="ship-git-config-in-your-image">

148 이미지에 git 구성 제공165 이미지에 git 구성 제공

149</h3>166</h3>


186 Anthropic git 프록시 사용203 Anthropic git 프록시 사용

187</h3>204</h3>

188 205 

189`--use-anthropic-git-proxy`로 러너를 시작하거나 `CLAUDE_RUNNER_USE_GIT_PROXY=1`을 설정하여 Anthropic의 git 프록시를 통해 클론하도록 합니다. 세션의 자신의 단기 토큰으로 인증됩니다. 일반 사용자 세션의 경우 프록시는 세션 작성자를 위해 저장된 GitHub 또는 GitHub Enterprise OAuth 토큰을 사용합니다. 봇 및 에이전트 세션의 경우 조직의 GitHub App 설치 토큰을 사용합니다. 어느 쪽이든 러너 이미지는 git 자격증명이 필요하지 않습니다: SSH 키, 자격증명 헬퍼, `.netrc` 없음. 이는 Anthropic 호스팅 환경이 사용하는 동일한 인증 경로입니다.206Anthropic 관리 git이라고도 하는 Anthropic git 프록시를 사용하면 러너 이미지에는 세션 자체를 위한 SSH 키, 자격 증명 헬퍼, `.netrc` 또는 기타 git 자격 증명이 필요하지 않습니다. 대신 러너는 Anthropic에 세션의 git을 제공하도록 요청합니다. Anthropic이 제공하는 사용자 세션의 경우 러너의 클론과 세션 자체의 페치 및 푸시는 Anthropic을 거치며, Anthropic은 세션 작성자를 위해 저장된 GitHub OAuth 토큰을 사용합니다. 봇 및 에이전트 세션은 [Anthropic이 세션의 git을 제공하는 방식](#how-anthropic-serves-git-for-a-session)에서 다룹니다.

207 

208git 프록시는 [켜지](#turn-the-anthropic-git-proxy-on) 않는 한 꺼져 있습니다. 자체 자격 증명으로 git 호스트에 도달하는 러너에는 필요하지 않으며, 해당 러너의 git은 모든 git 호스트에서 작동합니다.

209 

210그 대가로 git 프록시는 러너가 지원하는 범위를 제한하고 러너에 필요한 사항을 변경합니다:

211 

212* **github.com 전용**: Anthropic은 세션의 모든 저장소가 github.com에 있는 경우에만 세션을 제공하며, git 프록시는 아직 GitHub Enterprise Server를 지원하지 않습니다. git 프록시를 사용하는 러너에서 다른 git 호스트의 저장소가 있는 세션은 [시작에 실패합니다](#when-anthropic-doesnt-serve-a-session).

213* **세션의 저장소에 대한 자격 증명만 제공**: Anthropic은 세션에 포함된 저장소에 대해서만 git 자격 증명을 제공하며, 같은 git 호스트의 다른 저장소에는 제공하지 않습니다. 비공개 서브모듈, 패키지 관리자가 git으로 가져오는 의존성, 또는 다른 저장소에 있는 플러그인 마켓플레이스는 Anthropic으로부터 자격 증명을 받지 못합니다. 세션을 만드는 사람들에게 세션을 만들 때 세션에 필요한 [모든 저장소를 추가](/docs/ko/web-quickstart#start-a-task)하도록 요청하세요.

214* **브랜치 푸시만 가능**: 브랜치를 삭제하는 푸시는 실패하며, 태그와 같은 다른 종류의 ref로의 푸시도 실패합니다. 푸시가 업데이트할 수 있는 브랜치는 [GitHub 프록시](/docs/ko/cloud-environments#github-proxy)를 참조하세요.

215* **연결된 GitHub 계정**: 사용자 세션을 만든 사람은 claude.ai에서 GitHub를 연결해야 하며, 그렇지 않으면 세션이 [시작되지 않습니다](#creator-has-no-github-connection).

216* **`--capacity 1`**: git 프록시는 러너 프로세스당 하나의 세션이 필요하므로 병렬 처리를 위해 더 많은 복제본을 실행하세요. [Anthropic git 프록시 켜기](#turn-the-anthropic-git-proxy-on)에서 요구 사항을 나열합니다.

217* **전역 git 구성 대체**: 러너는 자신이 실행되는 사용자의 [전역 git 구성을 삭제하고 대체합니다](#git-proxy-replaces-global-git-config). 전용 사용자로 또는 컨테이너에서 실행하세요.

218* **호스트 푸시를 위한 호스트 자격 증명**: 러너의 [`--push-outcome-on-release`](/docs/ko/self-hosted-environments-reference#runner-cli-flags) 푸시와 [`post-session` 훅](/docs/ko/self-hosted-environments-configuration#post-session)이 수행하는 모든 푸시는 여전히 러너 호스트 자체의 git 자격 증명과 [`github.com`으로의 네트워크 경로](#github-com-egress-with-the-anthropic-git-proxy)를 사용합니다. 해당 자격 증명은 [이미지에 git 구성 제공](#ship-git-config-in-your-image)을 참조하세요.

219* **세션별 결정**: Anthropic은 러너의 각 세션에 대해 git을 제공할지 결정하며, 제공하지 않는 세션은 시작에 실패합니다. [git 프록시를 사용하는 러너에서 세션이 시작에 실패하는 경우](#when-anthropic-doesnt-serve-a-session)에서 원인을 다룹니다.

220 

221<span id="git-proxy-replaces-global-git-config" />

222 

223<Warning>

224 `--use-anthropic-git-proxy`가 설정되면 러너는 자신이 실행되는 사용자의 전역 git 구성을 삭제하고 대체하며 백업을 보관하지 않습니다. 이 작업은 시작 시와 각 세션 전에 수행됩니다. 그곳에 보관한 로그인 또는 자격 증명 헬퍼는 사라집니다. [`--configure-git`](#let-the-runner-configure-git)이 작성하는 설정은 유지됩니다. 러너는 전용 사용자로 또는 컨테이너에서 실행하고, 절대 자신의 사용자로 실행하지 마세요.

225</Warning>

226 

227ID 및 `safe.directory`와 같이 비밀이 아닌 git 설정은 시스템 git 구성에 보관하세요.

228 

229<h4 id="turn-the-anthropic-git-proxy-on">

230 Anthropic git 프록시 켜기

231</h4>

232 

233`--use-anthropic-git-proxy`로 러너를 시작하기 전에 러너 호스트가 다음 각 요구 사항을 충족하는지 확인하세요. 용량 또는 git 요구 사항이 충족되지 않으면 러너는 시작을 거부합니다:

190 234 

191프록시는 `--capacity 1`이 필요합니다. 프록시 URL은 세션별이고 Git 2.32 이상이 필요합니다. 더 오래된 git은 프록시가 세션을 서로 격리하는 데 사용하는 구성 메커니즘을 무시합니다. 러너는 요구사항이 충족되지 않으면 시작을 거부합니다. 프록시가 Anthropic 측에서 가져오기 때문에 git 호스트는 Anthropic 인프라에서 도달할 수 있어야 합니다. 이는 Anthropic 호스팅 세션이 가진 동일한 요구사항입니다. 네트워크 내부에서만 라우팅 가능한 git 호스트의 경우 대신 [`checkout` 수명 주기 훅](/docs/ko/self-hosted-environments-configuration#checkout)을 사용하세요. 각 러너 프로세스는 한 번에 하나의 세션을 처리하므로 병렬 처리를 위해 더 많은 복제본을 실행하세요. 프록시가 활성화되면 `--git-host-rewrite` 및 `--git-ssh-rewrite`는 효과가 없습니다: 프록시 URL은 git 호스트가 아닌 `api.anthropic.com`을 가리킵니다.235* **Claude Code v2.1.267 이상**: 이전 버전은 플래그를 수락하지만 Anthropic에 git 제공 요청을 보고하거나 `Registering as opted in` 라인을 출력하지 않으므로 Anthropic은 해당 세션을 제공하지 않습니다.

236* **기본값인 `--capacity 1`**: 각 러너 프로세스는 한 번에 하나의 세션을 처리하므로 병렬 처리를 위해 더 많은 복제본을 실행하세요.

237* **Git 2.32 이상**: 더 오래된 git은 러너가 git 프록시를 위해 설정하는 세션별 git 구성을 무시합니다.

192 238 

193<Warning>239<Warning>

194 이 페이지의 [Kubernetes](#kubernetes) 및 [Docker Compose](#docker-compose) 레시피는 `--capacity 4`를 사용합니다. `--use-anthropic-git-proxy` 또는 `CLAUDE_RUNNER_USE_GIT_PROXY=1`을 용량을 `1`로 변경하지 않고 이 중 하나에 추가하면 오케스트레이터가 이를 다시 시작할 때마다 러너가 시작 시 종료됩니다. `--capacity 1`을 설정하고 병렬 처리를 위해 더 많은 복제본을 실행하세요. [러너가 종료될 때](#when-the-runner-exits)는 러너가 출력하는 라인을 보여줍니다.240 이 페이지의 [Kubernetes](#kubernetes) 및 [Docker Compose](#docker-compose) 레시피는 `--capacity 4`를 사용합니다. `--use-anthropic-git-proxy` 또는 `CLAUDE_RUNNER_USE_GIT_PROXY=1`을 용량을 `1`로 변경하지 않고 이 중 하나에 추가하면 오케스트레이터가 이를 다시 시작할 때마다 러너가 시작 시 종료됩니다. `--capacity 1`을 설정하고 병렬 처리를 위해 더 많은 복제본을 실행하세요. [러너가 종료될 때](#when-the-runner-exits)는 러너가 출력하는 라인을 보여줍니다.

195</Warning>241</Warning>

196 242 

197러너는 또한 등록할 때 Anthropic에 옵트인을 보고하며, 시작 시 `Registering as opted in to Anthropic-managed git (--use-anthropic-git-proxy)`를 출력합니다. 옵트인 보고에는 Claude Code v2.1.267 이상이 필요하며, 이전 버전은 플래그를 수락하지만 이를 보고하거나 해당 라인을 출력하지 않습니다. 옵트인된 러너의 각 세션은 Anthropic 관리 git 또는 세션별 프록시 URL을 사용합니다. 세션이 세션별 프록시 URL을 사용할 때 러너는 그렇게 하는 것을 나타내는 `[runner:warn]` 라인 하나를 기록합니다.243git 프록시를 켜려면 러너의 명령에 `--use-anthropic-git-proxy`를 추가하거나 러너의 환경에서 `CLAUDE_RUNNER_USE_GIT_PROXY=1`을 설정하세요. 러너 호스트의 셸에서 실행하는 다음 명령은 git 프록시를 켠 상태로 [빠른 시작](/docs/ko/self-hosted-environments-quickstart#set-up-manually)의 러너를 시작합니다:

244 

245```bash theme={null}

246claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>' --use-anthropic-git-proxy

247```

248 

249시작 시 러너는 `Registering as opted in to Anthropic-managed git (--use-anthropic-git-proxy)`를 출력합니다. 그런 다음 Anthropic은 해당 러너의 각 세션에 대해 git을 제공할지 결정합니다. 제공하는 각 세션에 대해 러너는 `governed git ACTIVE`를 포함하는 `[runner:session]` 라인을 로그에 기록합니다. 대신 세션이 시작에 실패하면 [git 프록시를 사용하는 러너에서 세션이 시작에 실패하는 경우](#when-anthropic-doesnt-serve-a-session)를 참조하세요.

250 

251<h4 id="how-anthropic-serves-git-for-a-session">

252 Anthropic이 세션의 git을 제공하는 방식

253</h4>

254 

255Anthropic이 제공하는 세션의 경우 러너의 클론과 세션 자체의 페치 및 푸시는 Anthropic을 거치며, 세션 자체의 단기 토큰으로 인증됩니다:

256 

257* **사용자 세션**: Anthropic은 세션 작성자를 위해 저장된 GitHub OAuth 토큰을 사용합니다.

258* **봇 및 에이전트 세션**: Anthropic은 조직의 GitHub App 설치 토큰을 사용합니다.

259* **URL 다시 쓰기**: `--git-host-rewrite` 및 `--git-ssh-rewrite`는 git 프록시가 제공하는 저장소에 효과가 없습니다.

260 

261<h4 id="when-anthropic-doesnt-serve-a-session">

262 git 프록시를 사용하는 러너에서 세션이 시작에 실패하는 경우

263</h4>

264 

265`--use-anthropic-git-proxy`로 시작한 러너에서는 Anthropic이 세션의 git을 제공하지 않으면 세션이 시작에 실패합니다. 러너의 로그에서 `/git_proxy/`를 포함하는 `api.anthropic.com` 주소를 언급하는 git 오류를 찾으세요.

266 

267Claude Code v2.1.267 이상의 러너는 각 세션에 대해 Anthropic이 세션의 git을 제공하는 경우 `governed git ACTIVE`를 포함하는 `[runner:session]` 라인을, 제공하지 않는 경우 `the server withheld Anthropic-managed git for this session`을 포함하는 `[runner:warn]` 라인 하나를 로그에 기록합니다. 다음 경우 중에서 보고 있는 라인을 찾으세요:

268 

269* **`governed git ACTIVE`와 `withheld` 라인 모두 없음**: Claude Code v2.1.267 이전의 러너는 두 라인 모두 기록하지 않으며, Anthropic은 해당 세션을 제공하지 않습니다. [버전 고정](#pin-the-version)에 따라 러너를 v2.1.267 이상으로 업데이트하세요.

270* **`withheld` 라인**: Anthropic이 세션을 제공하지 않았습니다. 이전에 git 프록시로 작동하던 러너도 사용자 측의 변경 없이 이런 방식으로 실패할 수 있습니다.

271 * **저장소가 github.com에 없음**: GitHub Enterprise Server와 같은 다른 git 호스트에 저장소가 하나라도 있는 세션은 해당 github.com 저장소를 포함하여 제공되지 않습니다. 해당 환경의 러너에 대해 [Anthropic git 프록시를 끄세요](#turn-the-anthropic-git-proxy-off).

272 * **모든 저장소가 github.com에 있음**: `withheld` 라인의 세션 ID와 함께 [Anthropic 계정 팀](#report-an-issue)에 실패를 보고하세요. Anthropic은 자체 측에서 이유를 기록합니다.

273* **`remote: access denied by the git proxy`를 포함하는 라인**: Anthropic이 제공하는 세션도 거부될 수 있습니다. 예를 들어 조직 정책이 세션의 git 액세스를 거부하거나 세션이 저장소에 대한 권한이 없는 경우입니다. 그러면 러너의 로그에 `remote: access denied by the git proxy`를 포함하는 라인이 표시되며, 해당 라인의 나머지 부분에 이유가 나옵니다.

274* <span id="creator-has-no-github-connection" />**`GitHub authentication required`**: 세션 작성자가 claude.ai에서 작동하는 GitHub 연결이 없을 때 표시됩니다. 세션의 클론이 실패하고 git 오류는 `GitHub authentication required. Please reconnect your GitHub account.`로 표시됩니다. 해당 사용자에게 claude.ai 설정에서 GitHub를 연결하거나 다시 연결하도록 요청하세요.

275 

276원인을 해결한 후 실패한 세션을 다시 시작하세요.

277 

278<h4 id="turn-the-anthropic-git-proxy-off">

279 Anthropic git 프록시 끄기

280</h4>

281 

282환경의 세션이 GitHub Enterprise Server와 같이 github.com이 아닌 git 호스트의 저장소를 사용하는 경우 해당 환경의 러너에 대해 `--use-anthropic-git-proxy`를 끄세요.

283 

284<Steps>

285 <Step title="플래그 제거">

286 러너의 명령에서 `--use-anthropic-git-proxy`를 제거하세요. 파드 사양이나 Compose 파일과 같은 러너의 환경에서 `CLAUDE_RUNNER_USE_GIT_PROXY`를 설정한 경우 그곳에서 제거하세요. 셸에서는 설정을 해제하세요:

287 

288 ```bash theme={null}

289 unset CLAUDE_RUNNER_USE_GIT_PROXY

290 ```

291 </Step>

292 

293 <Step title="러너에 git 자격 증명 제공">

294 github.com을 포함하여 러너의 세션이 사용하는 모든 git 호스트에 대해 프롬프트 없이 작동하는 자격 증명을 제공하세요. `--use-anthropic-git-proxy`가 설정되어 있는 동안 러너가 러너 사용자의 전역 git 구성을 삭제했으므로 그곳에 있던 자격 증명은 사라졌습니다. [이미지에 자격 증명을 제공](#ship-git-config-in-your-image)하거나 [`checkout` 수명 주기 훅](/docs/ko/self-hosted-environments-configuration#checkout)을 사용하세요.

295 </Step>

296 

297 <Step title="네트워크 경로 열기">

298 러너가 러너의 세션이 사용하는 각 git 호스트에 포트 443 또는 22로 도달할 수 있도록 허용하세요. [네트워크 요구 사항](#network-requirements)의 git 호스트 행을 참조하세요.

299 </Step>

300 

301 <Step title="러너 다시 시작">

302 러너가 git 프록시 없이 등록되도록 러너를 다시 시작하세요. 그런 다음 실패한 각 세션을 다시 시작하세요.

303 </Step>

304</Steps>

198 305 

199<h4 id="github-api-access-without-the-github-cli">306<h4 id="github-api-access-without-the-github-cli">

200 GitHub CLI 없이 GitHub API 액세스307 GitHub CLI 없이 GitHub API 액세스


266```dockerfile theme={null}373```dockerfile theme={null}

267FROM debian:bookworm-slim374FROM debian:bookworm-slim

268ARG CLAUDE_CODE_VERSION375ARG CLAUDE_CODE_VERSION

269RUN apt-get update && apt-get install -y --no-install-recommends git curl ca-certificates openssh-client \376RUN apt-get update && apt-get install -y --no-install-recommends git curl ca-certificates openssh-client jq \

270 && rm -rf /var/lib/apt/lists/*377 && rm -rf /var/lib/apt/lists/*

271RUN curl -fsSL "https://downloads.claude.ai/claude-code-releases/${CLAUDE_CODE_VERSION:?set with --build-arg CLAUDE_CODE_VERSION}/linux-x64/claude" \378RUN curl -fsSL "https://downloads.claude.ai/claude-code-releases/${CLAUDE_CODE_VERSION:?set with --build-arg CLAUDE_CODE_VERSION}/linux-x64/claude" \

272 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude379 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude


382kubectl create namespace claude-runners489kubectl create namespace claude-runners

383```490```

384 491 

385관리 UI의 [**환경 키 복사** 단계](/docs/ko/self-hosted-environments-quickstart#set-up-an-environment-and-runner)에서 복사한 값을 보유하는 로컬 파일에서 지원 Secret을 생성하세요. 시크릿이 셸 기록에 나타나지 않도록 합니다. `(umask 077 && cat > ./environment-secret)`을 실행하고, 시크릿을 붙여넣고, Enter를 누른 다음 Ctrl-D를 누르세요. 그런 다음 Secret을 생성하고 파일을 삭제하세요:492관리자 UI의 [**환경 키 복사** 단계](/docs/ko/self-hosted-environments-quickstart#set-up-manually)에서 복사한 값을 보유하는 로컬 파일에서 지원 Secret을 생성하세요. 이렇게 하면 시크릿이 셸 기록에 나타나지 않습니다. `(umask 077 && cat > ./environment-secret)`을 실행하고, 시크릿을 붙여넣고, Enter를 누른 다음 Ctrl-D를 누르세요. 그런 다음 Secret을 생성하고 파일을 삭제하세요:

386 493 

387```bash theme={null}494```bash theme={null}

388kubectl create secret generic claude-runner-environment-secret -n claude-runners --from-file=environment-secret=./environment-secret495kubectl create secret generic claude-runner-environment-secret -n claude-runners --from-file=environment-secret=./environment-secret


500 사전 준비된 체크아웃 재사용607 사전 준비된 체크아웃 재사용

501</h2>608</h2>

502 609 

503대규모 리포지토리의 경우 클론이 세션 시작을 지배할 수 있습니다. `--capacity 1`에서 [`checkout` 훅](/docs/ko/self-hosted-environments-configuration#checkout) 없이 러너는 `<base-dir>/<repo-owner>/<repo>`에서 리포지토리당 하나의 정규 클론을 유지하고 세션 간에 재사용합니다: 요청된 ref를 가져오고, `HEAD`를 분리하고, 이에 대해 하드 리셋합니다. 거의 변경되지 않았을 때 거의 즉시입니다. 콜드 클론을 건너뛰려면 다음 두 가지 방법 중 하나로 클론을 제공하세요:610대규모 저장소의 경우 클론이 세션 시작 시간의 대부분을 차지할 수 있습니다. 콜드 클론을 건너뛰려면 러너가 자체 클론을 보관하는 경로에 직접 클론을 제공하세요. [`checkout` 훅](/docs/ko/self-hosted-environments-configuration#checkout)이 없으면 러너는 `<base-dir>/<repo-owner>/<repo>`에 저장소당 하나의 정규 클론을 유지하고 세션 간에 재사용합니다:

611 

612* **`--capacity 1`에서**: 러너는 요청된 ref를 가져오고, `HEAD`를 분리한 다음, 해당 ref로 하드 리셋합니다. 변경 사항이 적을 때는 거의 즉시 완료됩니다.

613* **`--capacity`가 1보다 클 때**: 러너는 해당 클론으로 가져온 다음, 각 세션마다 그 클론에서 별도의 worktree를 체크아웃합니다. 사전 준비된 클론은 다운로드 시간은 절약하지만 체크아웃 시간은 절약하지 않습니다.

614 

615클론은 이미지 또는 영구 볼륨에 제공합니다:

504 616 

505* **이미지에 클론**: 러너 이미지를 해당 경로에 빌드합니다. 모든 새로운 컨테이너는 디스크를 재사용하지 않고 준비된 클론으로 시작합니다.617* **이미지에 클론**: 러너 이미지를 해당 경로에 빌드합니다. 모든 새로운 컨테이너는 디스크를 재사용하지 않고 준비된 클론으로 시작합니다.

506* **지속적인 볼륨에 클론**: [`--lock-to-account`](/docs/ko/self-hosted-environments-reference#runner-cli-flags)로 한 사용자의 계정에 사전 잠긴 러너에서 `--base-dir`을 지속적인 볼륨으로 가리키므로 디스크는 해당 계정만 제공합니다. 사전 잠긴 러너는 Claude Tag 채널 세션을 절대 선택하지 않으므로 이 옵션은 이들을 제공하는 러너에 적용되지 않습니다.618* **지속적인 볼륨에 클론**: [`--lock-to-account`](/docs/ko/self-hosted-environments-reference#runner-cli-flags)로 한 사용자의 계정에 사전 잠긴 러너에서 `--base-dir`을 지속적인 볼륨으로 가리키므로 디스크는 해당 계정만 제공합니다. 사전 잠긴 러너는 Claude Tag 채널 세션을 절대 선택하지 않으므로 이 옵션은 이들을 제공하는 러너에 적용되지 않습니다.


508재사용 경로가 보장하고 보장하지 않는 것:620재사용 경로가 보장하고 보장하지 않는 것:

509 621 

510* **모든 클론 형태가 작동합니다**: 경로의 전체, 얕은, 또는 단일 분기 클론은 그대로 사용됩니다. 러너는 기존 클론으로 가져올 때 `--depth`를 절대 전달하지 않으므로 전체 사전 준비는 전체 기록을 유지하고 얕은 것은 얕게 유지됩니다. `CLAUDE_RUNNER_FETCH_DEPTH`(`full`, `0`, 또는 숫자; 기본값 50)는 클론이 아직 없을 때 러너가 만드는 콜드 클론만 제어합니다.622* **모든 클론 형태가 작동합니다**: 경로의 전체, 얕은, 또는 단일 분기 클론은 그대로 사용됩니다. 러너는 기존 클론으로 가져올 때 `--depth`를 절대 전달하지 않으므로 전체 사전 준비는 전체 기록을 유지하고 얕은 것은 얕게 유지됩니다. `CLAUDE_RUNNER_FETCH_DEPTH`(`full`, `0`, 또는 숫자; 기본값 50)는 클론이 아직 없을 때 러너가 만드는 콜드 클론만 제어합니다.

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

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

513 625 

514 기본적으로 러너는 세션이 끝날 때 이들을 제자리에 두므로 러너 프로세스보다 오래 지속되는 디스크에서 누적됩니다. 모든 세션은 러너 자신의 사용자로 실행되므로 해당 디스크가 제공하는 나중의 모든 세션이 이들을 읽을 수 있습니다. 지속적인 `--base-dir`을 유지하면 해당 성장에 대해 볼륨의 크기를 조정하세요. 동일한 파일 시스템에서 러너를 다시 시작하는 모든 설정(예: [Docker Compose 레시피](#docker-compose))에도 동일하게 적용됩니다.626 기본적으로 러너는 세션이 끝날 때 이들을 제자리에 두므로 러너 프로세스보다 오래 지속되는 디스크에서 누적됩니다. 모든 세션은 러너 자신의 사용자로 실행되므로 해당 디스크가 제공하는 나중의 모든 세션이 이들을 읽을 수 있습니다. 지속적인 `--base-dir`을 유지하면 해당 성장에 대해 볼륨의 크기를 조정하세요. 동일한 파일 시스템에서 러너를 다시 시작하는 모든 설정(예: [Docker Compose 레시피](#docker-compose))에도 동일하게 적용됩니다.


522 634 

523각 세션의 자식 Claude Code 프로세스는 러너의 자신의 바이너리를 실행하고, 러너는 생성하는 세션 내에서 자동 업데이트를 끕니다. 따라서 모든 세션은 호스트에 설치하거나 이미지에 빌드한 버전을 실행합니다. 호스트 수준 업데이트는 러너가 다음 번에 시작할 때 적용됩니다.635각 세션의 자식 Claude Code 프로세스는 러너의 자신의 바이너리를 실행하고, 러너는 생성하는 세션 내에서 자동 업데이트를 끕니다. 따라서 모든 세션은 호스트에 설치하거나 이미지에 빌드한 버전을 실행합니다. 호스트 수준 업데이트는 러너가 다음 번에 시작할 때 적용됩니다.

524 636 

525세션이 사용하는 모델은 실행 중인 Claude Code 버전보다 최신 Claude Code 버전이 필요할 수 있습니다. 그러면 서버는 해당 모델에 대한 요청을 [Claude Code does not support this model](/docs/ko/errors#claude-code-does-not-support-this-model)로 거부합니다. 버전을 고정하기 전에 세션이 사용하는 모든 모델에 대해 [모델이 필요로 하는 Claude Code 버전](/docs/ko/model-config#available-models)을 확인하세요.637세션이 실행할 버전과 버전이 변경되는 시점을 선택합니다.

526 638 

639* **버전을 고정하기 전에**: 세션이 사용하는 모든 모델에 대해 [모델이 필요로 하는 Claude Code 버전](/docs/ko/model-config#available-models)을 확인하세요. 모델이 세션에서 실행 중인 버전보다 최신 버전을 필요로 하는 경우, 서버는 해당 모델에 대한 요청을 [Claude Code does not support this model](/docs/ko/errors#claude-code-does-not-support-this-model)로 거부합니다.

527* **플릿을 한 버전으로 유지하려면**: 이미지를 고정된 버전으로 빌드하거나 베어 호스트에 특정 버전을 설치하고 [자동 업데이트를 비활성화](/docs/ko/setup#disable-auto-updates)하세요.640* **플릿을 한 버전으로 유지하려면**: 이미지를 고정된 버전으로 빌드하거나 베어 호스트에 특정 버전을 설치하고 [자동 업데이트를 비활성화](/docs/ko/setup#disable-auto-updates)하세요.

528* **업그레이드하려면**: 새로운 버전을 설치하거나 이미지를 다시 빌드한 다음 러너를 재시작하세요.641* **고정 플릿을 업그레이드하려면**: 현재 버전과 설치할 버전 사이의 [변경 로그](/docs/en/changelog) 항목을 읽은 다음, 새로운 버전을 설치하거나 이미지를 다시 빌드하고 러너를 재시작하세요.

642* **온디맨드 러너를 업그레이드하려면**: 현재 버전과 설치할 버전 사이의 [변경 로그](/docs/en/changelog) 항목을 읽은 다음, [`spawn-runner` 훅](/docs/ko/self-hosted-environments-configuration#the-spawn-runner-hook)이 시작하는 이미지를 변경하세요. 새로 생성되는 각 러너는 새 버전을 받습니다. [`--min-idle`](/docs/ko/self-hosted-environments-reference#orchestrator-cli-flags)이 시작한 대기 러너를 포함하여 이미 실행 중인 러너는 종료될 때까지 기존 버전을 유지합니다. 해당 러너의 작업 지시는 일회용이므로 재시작하지 마세요.

529* **플러그인**: 플러그인 마켓플레이스도 자동 업데이트되지 않습니다. 바이너리가 고정된 상태로 유지되는 동안 플러그인이 자동 업데이트되도록 하려면 러너의 환경에서 `FORCE_AUTOUPDATE_PLUGINS=1`을 설정하세요.643* **플러그인**: 플러그인 마켓플레이스도 자동 업데이트되지 않습니다. 바이너리가 고정된 상태로 유지되는 동안 플러그인이 자동 업데이트되도록 하려면 러너의 환경에서 `FORCE_AUTOUPDATE_PLUGINS=1`을 설정하세요.

530 644 

531<h2 id="scale-the-fleet">645<h2 id="scale-the-fleet">


580</h3>694</h3>

581 695 

582* **재개된 세션이 푸시되지 않은 작업을 손실함**: 새로운 러너는 저장소를 시작 브랜치에서 다시 클론하므로, 세션이 푸시하지 않은 작업은 손실됩니다.696* **재개된 세션이 푸시되지 않은 작업을 손실함**: 새로운 러너는 저장소를 시작 브랜치에서 다시 클론하므로, 세션이 푸시하지 않은 작업은 손실됩니다.

583 * **커밋된 작업을 보존하려면**: [`--push-outcome-on-release`](/docs/ko/self-hosted-environments-reference#runner-cli-flags)를 설정합니다. 그러면 러너는 해제하기 전에 세션의 결과 브랜치를 최선의 노력으로 푸시하며, 재개된 세션은 해당 커밋에서 시작됩니다. 커밋되지 않은 변경 사항은 여전히 손실됩니다.697 * **커밋된 작업을 보존하려면**: 환경의 모든 러너에 [`--push-outcome-on-release`](/docs/ko/self-hosted-environments-reference#runner-cli-flags)를 설정합니다. 플래그가 없는 러너는 세션을 시작 브랜치에서 재개하기 때문입니다. 플래그가 있는 러너는 해제하기 전에 세션의 결과 브랜치를 최선의 노력으로 푸시하며, 재개된 세션은 해당 커밋에서 시작됩니다. 푸시에는 [Anthropic 관리 git](#use-the-anthropic-git-proxy)을 사용하는 러너를 포함하여 러너 호스트 자체의 git 자격 증명이 사용됩니다. 커밋되지 않은 변경 사항은 여전히 손실됩니다.

698 * **`checkout` 훅을 사용하는 경우**: [`checkout` 라이프사이클 훅](/docs/ko/self-hosted-environments-configuration#checkout)을 통해 체크아웃된 저장소는 푸시되지 않습니다. 대신 [`post-session` 훅](/docs/ko/self-hosted-environments-configuration#post-session)에서 해당 저장소의 스냅샷을 만듭니다.

584 * **플래그를 활성화하기 전에**: 소스 원격의 `claude/*` refs에 푸시할 수 있는 사람을 제한합니다. 재개 시 러너는 이전에 푸시된 브랜치를 누가 푸시했는지 확인하지 않고 가져옵니다.699 * **플래그를 활성화하기 전에**: 소스 원격의 `claude/*` refs에 푸시할 수 있는 사람을 제한합니다. 재개 시 러너는 이전에 푸시된 브랜치를 누가 푸시했는지 확인하지 않고 가져옵니다.

585* **세션 중간에 추가한 저장소는 클론에 실패할 수 있음**: Claude는 HTTPS를 통해 `git clone`으로 저장소를 클론합니다. [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)가 없는 러너에서는 호스트에서 해당 저장소를 읽을 수 있는 수단이 없으면 git 인증 오류로 클론이 실패합니다. 가능하면 세션을 만들 때 세션에 필요한 모든 저장소를 선택합니다.700* **세션 중간에 추가한 저장소는 클론에 실패할 수 있음**: Claude는 HTTPS를 통해 `git clone`으로 저장소를 클론합니다. [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)가 없는 러너에서는 호스트에서 해당 저장소를 읽을 수 있는 수단이 없으면 git 인증 오류로 클론이 실패합니다. 가능하면 세션을 만들 때 세션에 필요한 모든 저장소를 선택합니다.

586* **일부 커넥터는 자체 호스팅 세션에 나타나지 않음**: claude.ai 설정에서 아직 연결하지 않은 커넥터는 자체 호스팅 세션에 나열되지 않으며, 세션은 연결하라는 메시지를 표시하지 않습니다. 먼저 설정에서 연결한 후 새로운 세션을 시작합니다. 이미 실행 중인 세션에 커넥터를 추가해도 Claude에서 해당 도구를 사용할 수 없습니다. 새로 추가된 커넥터를 선택하려면 새로운 세션을 시작합니다.701* **일부 커넥터는 자체 호스팅 세션에 나타나지 않음**: claude.ai 설정에서 아직 연결하지 않은 커넥터는 자체 호스팅 세션에 나열되지 않으며, 세션은 연결하라는 메시지를 표시하지 않습니다. 먼저 설정에서 연결한 후 새로운 세션을 시작합니다. 이미 실행 중인 세션에 커넥터를 추가해도 Claude에서 해당 도구를 사용할 수 없습니다. 새로 추가된 커넥터를 선택하려면 새로운 세션을 시작합니다.


606* **러너가 환경에 나타나지 않음**: 호스트가 HTTPS를 통해 `api.anthropic.com`에 도달할 수 있는지, 환경 시크릿이 현재인지, 호스트 시계가 실제 시간의 5분 이내인지 확인하세요. 더 큰 스큐는 인증 실패를 유발합니다. 러너는 인증 실패 시 거부 이유와 함께 `[runner:fatal]`을 기록합니다.721* **러너가 환경에 나타나지 않음**: 호스트가 HTTPS를 통해 `api.anthropic.com`에 도달할 수 있는지, 환경 시크릿이 현재인지, 호스트 시계가 실제 시간의 5분 이내인지 확인하세요. 더 큰 스큐는 인증 실패를 유발합니다. 러너는 인증 실패 시 거부 이유와 함께 `[runner:fatal]`을 기록합니다.

607* **러너가 `cannot create or write to base directory`로 시작 시 종료됨**: 러너가 `--base-dir`을 생성하거나 쓸 수 없습니다. 기본값은 `/workspace`입니다. 디렉토리의 소유권을 수정하거나 `--base-dir`을 쓰기 가능한 경로로 가리키세요. [기본 디렉토리 및 용량을 러너 간에 동일하게 유지](#keep-the-base-directory-and-capacity-identical-across-runners)에서 설명합니다. 러너가 대신 기본 디렉토리 확인이 시간 초과되었다고 `[runner:fatal]`을 기록하면 디렉토리는 행(hung) NFS 또는 CSI 마운트에 있습니다. 권한이 아닌 마운트 상태를 확인하세요. 러너는 `--log-file`을 열기 전에 이러한 시작 실패를 stderr에 인쇄하므로 로그 파일이 아닌 터미널 또는 플랫폼의 컨테이너 로그에서 찾으세요. v2.1.225 이전에 러너는 시작 시 기본 디렉토리를 확인하지 않았으며, 이 잘못된 구성은 대신 선택 후 세션에 실패했습니다.722* **러너가 `cannot create or write to base directory`로 시작 시 종료됨**: 러너가 `--base-dir`을 생성하거나 쓸 수 없습니다. 기본값은 `/workspace`입니다. 디렉토리의 소유권을 수정하거나 `--base-dir`을 쓰기 가능한 경로로 가리키세요. [기본 디렉토리 및 용량을 러너 간에 동일하게 유지](#keep-the-base-directory-and-capacity-identical-across-runners)에서 설명합니다. 러너가 대신 기본 디렉토리 확인이 시간 초과되었다고 `[runner:fatal]`을 기록하면 디렉토리는 행(hung) NFS 또는 CSI 마운트에 있습니다. 권한이 아닌 마운트 상태를 확인하세요. 러너는 `--log-file`을 열기 전에 이러한 시작 실패를 stderr에 인쇄하므로 로그 파일이 아닌 터미널 또는 플랫폼의 컨테이너 로그에서 찾으세요. v2.1.225 이전에 러너는 시작 시 기본 디렉토리를 확인하지 않았으며, 이 잘못된 구성은 대신 선택 후 세션에 실패했습니다.

608* **세션이 대기 중 상태로 유지됨**: 모든 온라인 러너는 다른 소유자로 잠길 수 있습니다. 각 러너의 `claude_code_self_hosted_runner_locked_account` [메트릭](/docs/ko/self-hosted-environments-reference#prometheus-metrics) 또는 `[runner:health]` 로그 라인의 `locked_account` 필드를 확인하여 누가 보유하는지 확인하세요. 둘 다 러너가 `act.email` 클레임을 전달하는 세션 토큰을 발급받은 후에만 소유자의 이메일을 표시합니다. Claude Tag 에이전트의 세션은 절대 이를 수행하지 않습니다. 클레임 없이 러너는 `locked_account` 시리즈를 내보내지 않으며 `locked_account=yes`를 기록합니다. 이는 러너가 잠겨 있지만 어느 소유자에게 잠겨 있는지 알려줍니다. 복제본을 추가하거나 기존 러너가 드레인되고 재시작될 때까지 기다리세요. 환경이 온디맨드 러너를 사용하면 대신 오케스트레이터를 확인하세요. [온디맨드 러너](/docs/ko/self-hosted-environments-configuration#on-demand-runners)를 참조하세요.723* **세션이 대기 중 상태로 유지됨**: 모든 온라인 러너는 다른 소유자로 잠길 수 있습니다. 각 러너의 `claude_code_self_hosted_runner_locked_account` [메트릭](/docs/ko/self-hosted-environments-reference#prometheus-metrics) 또는 `[runner:health]` 로그 라인의 `locked_account` 필드를 확인하여 누가 보유하는지 확인하세요. 둘 다 러너가 `act.email` 클레임을 전달하는 세션 토큰을 발급받은 후에만 소유자의 이메일을 표시합니다. Claude Tag 에이전트의 세션은 절대 이를 수행하지 않습니다. 클레임 없이 러너는 `locked_account` 시리즈를 내보내지 않으며 `locked_account=yes`를 기록합니다. 이는 러너가 잠겨 있지만 어느 소유자에게 잠겨 있는지 알려줍니다. 복제본을 추가하거나 기존 러너가 드레인되고 재시작될 때까지 기다리세요. 환경이 온디맨드 러너를 사용하면 대신 오케스트레이터를 확인하세요. [온디맨드 러너](/docs/ko/self-hosted-environments-configuration#on-demand-runners)를 참조하세요.

609* **세션이 선택 직후 실패함**: claude.ai/code에서 세션을 열어 오류를 확인하세요. 가장 일반적인 원인은 러너 이미지의 누락된 [git 자격증명](#configure-git) 및 설치되지 않은 빌드 도구입니다. 쓰기 불가능한 기본 디렉토리는 세션 실패 대신 시작 시 러너를 중지합니다. 이 목록의 **러너가 `cannot create or write to base directory`로 시작 시 종료됨** 항목을 참조하세요.724* **세션이 선택 직후 실패함**: claude.ai/code에서 세션을 열어 오류를 확인하세요. 가장 일반적인 원인은 러너 이미지의 누락된 [git 자격 증명](#configure-git) 및 설치되지 않은 빌드 도구입니다. `--use-anthropic-git-proxy`로 시작된 러너에서는 [git 프록시를 사용하는 러너에서 세션이 시작되지 않을 때](#when-anthropic-doesnt-serve-a-session)를 참조하세요. 쓰기 불가능한 기본 디렉터리는 세션 실패 대신 시작 시 러너를 중지합니다. 이 목록의 **러너가 `cannot create or write to base directory`로 시작 시 종료됨** 항목을 참조하세요.

725* **`--use-anthropic-git-proxy`를 설정한 러너에서 세션이 시작되지 않음**: 러너의 로그에서 `access denied by the git proxy`를 찾거나, `/git_proxy/`를 포함하는 `api.anthropic.com` 주소를 명시하는 git 오류를 찾으세요. Anthropic이 세션을 처리했는지 판단하고 원인을 해결하려면 [git 프록시를 사용하는 러너에서 세션이 시작되지 않을 때](#when-anthropic-doesnt-serve-a-session)를 참조하세요.

610* **세션이 인증하는 이그레스 프록시를 통해 네트워크에 도달할 수 없음**: [`--proxy-authorization-command` 또는 `--proxy-authorization-file`](#authenticate-to-an-egress-proxy)로 설정한 소스가 실패하거나 30초 후 시간 초과되거나 빈 값을 생성하면 러너는 해당 연결에 `502 Bad Gateway`로 응답하고 이유를 기록합니다. 러너는 해당 로그에서 명령의 stderr를 수정하고 헤더 값을 절대 기록하지 않습니다. `--proxy-authorization-command`로 호스트에서 명령을 직접 실행하여 전체 헤더 값을 stdout에 인쇄하는지 확인하세요. 러너가 대신 `could not start the proxy-authorization listener`로 시작 시 종료되면 루프백 리스너를 열 수 없습니다.726* **세션이 인증하는 이그레스 프록시를 통해 네트워크에 도달할 수 없음**: [`--proxy-authorization-command` 또는 `--proxy-authorization-file`](#authenticate-to-an-egress-proxy)로 설정한 소스가 실패하거나 30초 후 시간 초과되거나 빈 값을 생성하면 러너는 해당 연결에 `502 Bad Gateway`로 응답하고 이유를 기록합니다. 러너는 해당 로그에서 명령의 stderr를 수정하고 헤더 값을 절대 기록하지 않습니다. `--proxy-authorization-command`로 호스트에서 명령을 직접 실행하여 전체 헤더 값을 stdout에 인쇄하는지 확인하세요. 러너가 대신 `could not start the proxy-authorization listener`로 시작 시 종료되면 루프백 리스너를 열 수 없습니다.

611* **러너 로그에 `rejecting the malformed poll response`를 포함하는 `Poll failed` 라인**: 러너가 큐의 예상 JSON이 아닌 본문을 가진 작업 폴 응답을 받았습니다. 가장 자주 러너와 `api.anthropic.com` 사이의 무언가(예: 가로채는 프록시 또는 캡티브 포털)가 자신의 페이지로 응답했기 때문입니다. 러너는 응답을 거부하고 [`claude_code_self_hosted_runner_poll_errors_total` 메트릭](/docs/ko/self-hosted-environments-reference#prometheus-metrics)의 `transport` 종류 아래에서 계산하고 [세션 수명 주기](/docs/ko/self-hosted-environments#session-lifecycle)에서 설명하는 실패한 폴 일정에서 재시도합니다. 러너는 라이브 세션을 계속 제공합니다. 프록시를 구성하여 `api.anthropic.com`의 응답을 변경되지 않은 상태로 전달하세요. v2.1.246 이전에 러너는 그러한 응답을 빈 작업 큐로 읽었으며, 이는 라이브 세션을 종료하거나 종료하게 할 수 있습니다.727* **러너 로그에 `rejecting the malformed poll response`를 포함하는 `Poll failed` 라인**: 러너가 큐의 예상 JSON이 아닌 본문을 가진 작업 폴 응답을 받았습니다. 가장 자주 러너와 `api.anthropic.com` 사이의 무언가(예: 가로채는 프록시 또는 캡티브 포털)가 자신의 페이지로 응답했기 때문입니다. 러너는 응답을 거부하고 [`claude_code_self_hosted_runner_poll_errors_total` 메트릭](/docs/ko/self-hosted-environments-reference#prometheus-metrics)의 `transport` 종류 아래에서 계산하고 [세션 수명 주기](/docs/ko/self-hosted-environments#session-lifecycle)에서 설명하는 실패한 폴 일정에서 재시도합니다. 러너는 라이브 세션을 계속 제공합니다. 프록시를 구성하여 `api.anthropic.com`의 응답을 변경되지 않은 상태로 전달하세요. v2.1.246 이전에 러너는 그러한 응답을 빈 작업 큐로 읽었으며, 이는 라이브 세션을 종료하거나 종료하게 할 수 있습니다.

612* **세션의 분기가 원격에 더 이상 존재하지 않음**: 세션이 읽기만 하는 git 소스의 경우 러너는 해당 소스를 건너뛰고 나머지에서 계속합니다. 세션이 결과를 푸시하는 소스의 경우 삭제된 분기(일반적으로 병합되고 자동 삭제되었기 때문)는 리포지토리 및 분기를 이름 지정하고 분기를 복원하고 재시도하도록 요청하는 오류로 세션을 실패합니다. 러너는 건너뛰기가 리포지토리 없이 남겨질 때 동일한 오류로 세션을 실패합니다. v2.1.228 이전에 그러한 세션은 빈 디렉토리에서 시작했습니다.728* **세션의 분기가 원격에 더 이상 존재하지 않음**: 세션이 읽기만 하는 git 소스의 경우 러너는 해당 소스를 건너뛰고 나머지에서 계속합니다. 세션이 결과를 푸시하는 소스의 경우 삭제된 분기(일반적으로 병합되고 자동 삭제되었기 때문)는 리포지토리 및 분기를 이름 지정하고 분기를 복원하고 재시도하도록 요청하는 오류로 세션을 실패합니다. 러너는 건너뛰기가 리포지토리 없이 남겨질 때 동일한 오류로 세션을 실패합니다. v2.1.228 이전에 그러한 세션은 빈 디렉토리에서 시작했습니다.


616 732 

617 액세스 확인은 세션이 러너에서 시작될 때마다 다시 실행되므로, 러너의 git 아이덴티티가 읽기 액세스를 가지면 다음 시작은 리포지토리를 복제합니다. v2.1.274 이전에 이러한 각 거부는 세션 시작을 실패했습니다.733 액세스 확인은 세션이 러너에서 시작될 때마다 다시 실행되므로, 러너의 git 아이덴티티가 읽기 액세스를 가지면 다음 시작은 리포지토리를 복제합니다. v2.1.274 이전에 이러한 각 거부는 세션 시작을 실패했습니다.

618* **세션이 시작하는 데 분이 걸림**: 초기 클론이 일반적으로 지배합니다. `claude_code_self_hosted_runner_session_init_duration_seconds` [메트릭](/docs/ko/self-hosted-environments-reference#prometheus-metrics)을 확인하여 확인하고 [사전 준비된 체크아웃](#reuse-a-pre-warmed-checkout) 또는 더 작은 `CLAUDE_RUNNER_FETCH_DEPTH`로 클론을 자르세요.734* **세션이 시작하는 데 분이 걸림**: 초기 클론이 일반적으로 지배합니다. `claude_code_self_hosted_runner_session_init_duration_seconds` [메트릭](/docs/ko/self-hosted-environments-reference#prometheus-metrics)을 확인하여 확인하고 [사전 준비된 체크아웃](#reuse-a-pre-warmed-checkout) 또는 더 작은 `CLAUDE_RUNNER_FETCH_DEPTH`로 클론을 자르세요.

619* **턴이 401로 실패함**: 각 세션은 러너가 Anthropic에서 가져오고 세션의 stdin을 통해 회전하는 단기 [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/ko/self-hosted-environments-configuration#wrapper-scripts)으로 모델 호출을 인증합니다. 턴이 모델 API에서 401 또는 403으로 끝나면 러너는 새로운 토큰을 가져오고 세션에 전달합니다. 실패한 턴은 재시도되지 않습니다.735* **턴이 401로 실패함**: 턴이 Anthropic API의 401 또는 403으로 끝나면 러너는 Anthropic에서 새로운 [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/ko/self-hosted-environments-configuration#wrapper-scripts)을 가져와 세션에 전달합니다. 실패한 턴은 재시도되지 않습니다. 이 토큰은 수명이 짧으며, 러너는 세션의 stdin을 통해 이를 교체합니다.

620 736 

621 가져오기가 실패하면 러너는 언제 재시도할지 말하는 `inference_token refresh failed` 라인을 기록하고 세션이 실행되는 동안 계속 재시도합니다.737 가져오기가 실패하면 러너는 언제 재시도할지 말하는 `inference_token refresh failed` 라인을 기록하고 세션이 실행되는 동안 계속 재시도합니다.

622 738 


637 753 

638* **정상 종료**: 러너가 세션을 완료하고 드레인했거나, 은퇴 시간에 도달했거나, 중지하도록 지시받았습니다. 환경이 다시 용량을 가지도록 다시 시작하세요. [러너 수명 주기](/docs/ko/self-hosted-environments#runner-lifecycle)는 이러한 종료를 설명합니다.754* **정상 종료**: 러너가 세션을 완료하고 드레인했거나, 은퇴 시간에 도달했거나, 중지하도록 지시받았습니다. 환경이 다시 용량을 가지도록 다시 시작하세요. [러너 수명 주기](/docs/ko/self-hosted-environments#runner-lifecycle)는 이러한 종료를 설명합니다.

639* **실패한 시작**: 러너가 주어진 구성 또는 호스트로 시작할 수 없으므로 시작 후 몇 초 후에 종료되며, 다시 시작할 때마다 동일한 방식으로 종료됩니다. 더 빠르게 다시 시작하는 것은 도움이 되지 않습니다. 누군가가 출력을 읽고 원인을 수정해야 합니다.755* **실패한 시작**: 러너가 주어진 구성 또는 호스트로 시작할 수 없으므로 시작 후 몇 초 후에 종료되며, 다시 시작할 때마다 동일한 방식으로 종료됩니다. 더 빠르게 다시 시작하는 것은 도움이 되지 않습니다. 누군가가 출력을 읽고 원인을 수정해야 합니다.

756* **연결 끊김**: 예를 들어 호스트가 절전 상태인 동안처럼 [임대](/docs/ko/self-hosted-environments#session-lifecycle) 기간보다 오래 Anthropic에 도달할 수 없는 러너는 환경에서 제거될 수 있습니다. 제거된 러너가 다시 연결되면 종료됩니다. 로그에는 `runner record gone server-side`를 포함하는 `[runner:fatal]` 라인이 표시되거나, 더 긴 중단 이후에는 [`poll auth failed`](/docs/ko/self-hosted-environments-quickstart#set-up-an-environment-and-runner)가 표시될 수 있습니다. 러너는 스스로 다시 등록하지 않으므로 다시 시작하세요.

640 757 

641러너가 종료될 때마다 다시 시작하도록 감독자를 구성하고, 러너가 시작 직후에 계속 종료될 때 재시작 사이에 더 오래 기다리고, 그것이 계속 발생할 때 누군가에게 알리세요.758러너가 종료될 때마다 다시 시작하도록 감독자를 구성하고, 러너가 시작 직후에 계속 종료될 때 재시작 사이에 더 오래 기다리고, 그것이 계속 발생할 때 누군가에게 알리세요.

642 759 

Details

195 195 

196래퍼는 `CLAUDE_RUNNER_CLAUDE_BIN`에서 실행기 자신의 바이너리에 대한 절대 경로를 받습니다. PATH 해석 `claude` 대신 해당 경로를 사용하여 디코드가 실행기 자체가 사용하는 동일한 바이너리에서 실행되도록 합니다.196래퍼는 `CLAUDE_RUNNER_CLAUDE_BIN`에서 실행기 자신의 바이너리에 대한 절대 경로를 받습니다. PATH 해석 `claude` 대신 해당 경로를 사용하여 디코드가 실행기 자체가 사용하는 동일한 바이너리에서 실행되도록 합니다.

197 197 

198`jq -r` 대신 `jq -re`를 사용하여 누락된 클레임이 0이 아닌 종료를 발생시킵니다. `-r`만 사용하면 누락된 클레임은 리터럴 문자열 `null`을 인쇄하고 0으로 종료되어 잘못된 값을 조용히 다운스트림으로 전달합니다. JWKS 엔드포인트에 도달할 수 없는 오프라인 검사의 경우에만 `decode-token`에 `--no-verify`를 전달합니다.198`jq -r` 대신 `jq -re`를 사용하여 누락된 클레임이 0이 아닌 종료를 발생시킵니다. `-r`만 사용하면 누락된 클레임은 리터럴 문자열 `null`을 인쇄하고 0으로 종료되어 잘못된 값을 조용히 다운스트림으로 전달합니다.

199 

200`decode-token`이 JWKS 엔드포인트에서 키를 가져올 수 없거나 토큰을 확인할 수 없으면 stderr에 이유를 인쇄하고, 클레임을 인쇄하지 않으며, 코드 1로 종료됩니다. JWKS 엔드포인트에 도달할 수 없는 오프라인 검사의 경우에만 `decode-token`에 `--no-verify`를 전달합니다.

199 201 

200<h2 id="claims-reference">202<h2 id="claims-reference">

201 클레임 참조203 클레임 참조

Details

34러너 호스트에 필요한 사항:34러너 호스트에 필요한 사항:

35 35 

36* `api.anthropic.com`, `claude.ai` 및 아래 설치 단계를 위해 리디렉션되는 다운로드 호스트, 그리고 클론을 위해 git 호스트로의 아웃바운드 HTTPS를 사용하는 Linux 또는 macOS 호스트 또는 컨테이너입니다. [네트워크 요구 사항 표](/docs/ko/self-hosted-environments-deploy#network-requirements)에 전체 목록이 있습니다. Windows는 러너 호스트로 지원되지 않습니다. 대신 Linux 컨테이너에서 러너를 실행하세요. 개발자 워크스테이션은 영향을 받지 않습니다. 세션은 브라우저의 claude.ai에서 시작되기 때문입니다.36* `api.anthropic.com`, `claude.ai` 및 아래 설치 단계를 위해 리디렉션되는 다운로드 호스트, 그리고 클론을 위해 git 호스트로의 아웃바운드 HTTPS를 사용하는 Linux 또는 macOS 호스트 또는 컨테이너입니다. [네트워크 요구 사항 표](/docs/ko/self-hosted-environments-deploy#network-requirements)에 전체 목록이 있습니다. Windows는 러너 호스트로 지원되지 않습니다. 대신 Linux 컨테이너에서 러너를 실행하세요. 개발자 워크스테이션은 영향을 받지 않습니다. 세션은 브라우저의 claude.ai에서 시작되기 때문입니다.

37* 테스트 세션용 저장소입니다. 공개 저장소이거나, 이 호스트가 자격 증명을 요청받지 않고 HTTPS URL로 이미 클론할 수 있는 저장소여야 합니다.

37* NTP와 같은 실시간으로 동기화된 시계입니다. 시계가 5분 이상 차이나면 인증이 실패합니다. [문제 해결](/docs/ko/self-hosted-environments-deploy#troubleshooting)을 참조하세요.38* NTP와 같은 실시간으로 동기화된 시계입니다. 시계가 5분 이상 차이나면 인증이 실패합니다. [문제 해결](/docs/ko/self-hosted-environments-deploy#troubleshooting)을 참조하세요.

38 39 

39<h3 id="software-on-the-runner-host">40<h3 id="software-on-the-runner-host">


57 환경 및 러너 설정58 환경 및 러너 설정

58</h2>59</h2>

59 60 

60Claude Code에는 안내식 설정이 포함되어 있습니다. 관리자 UI에서 환경 생성을 안내하는 대화형 Claude Code 세션으로, 저장한 비밀 파일로 로컬 러너를 시작하고, 러너가 등록되었는지 확인하고, `./runner-setup/CHEAT-SHEET.md`에 치트 시트를 작성합니다. Owner 역할을 보유한 계정으로 `claude auth login`을 사용하여 로그인한 머신에서 실행하세요. API 키 또는 타사 모델 제공자와는 사용할 수 없습니다. 대화형 세션이 불가능한 호스트에서는 대신 아래의 수동 단계를 사용하세요. [버전 확인](#software-on-the-runner-host)이 통과했는지 확인하세요. 2.1.224보다 이전 버전에서는 이 명령이 안내식 설정 대신 단어를 프롬프트로 하는 일반 Claude 세션을 시작합니다. 안내식 설정을 시작하려면 설정 서브 명령을 실행하고 프롬프트를 따르세요:61[안내식 설정](#run-the-guided-setup) 또는 [수동 단계](#set-up-manually) 중 하나를 사용하세요. 안내식 설정은 대화형 Claude Code 세션을 시작하고 나머지 과정을 안내하는 단일 명령입니다. 대화형 세션이 불가능한 호스트에서는 대신 수동 단계를 사용하세요. Owner 역할을 보유한 다른 사람이 환경을 생성하고 그 비밀을 전달한 경우에도 수동 단계를 사용하세요. 안내식 설정에는 Owner 로그인이 필요하기 때문입니다.

62 

63<h3 id="run-the-guided-setup">

64 안내식 설정 실행

65</h3>

66 

67안내식 설정은 관리자 UI에서 환경 생성을 안내하고, 저장한 비밀 파일로 로컬 러너를 시작하고, 러너가 등록되었는지 확인하고, `./runner-setup/CHEAT-SHEET.md`에 치트 시트를 작성합니다. 실행하기 전에 로그인과 버전을 확인하세요:

68 

69* **로그인**: Owner 역할을 보유한 계정으로 `claude auth login`을 사용하여 로그인한 머신에서 실행하세요. API 키 또는 타사 모델 제공자만 있는 경우 세션은 시작되지만 조직 확인이 실패합니다.

70* **버전**: [버전 확인](#software-on-the-runner-host)이 통과했는지 확인하세요. 2.1.224보다 이전 버전에서는 setup 명령이 안내식 설정 대신 단어를 프롬프트로 하는 Claude 세션을 시작합니다.

71 

72안내식 설정을 시작하려면 셸에서 setup 서브 명령을 실행하고 프롬프트를 따르세요:

61 73 

62```bash theme={null}74```bash theme={null}

63claude self-hosted-runner setup75claude self-hosted-runner setup

64```76```

65 77 

66대신 수동으로 설정하려면:78설정 자체는 테스트 세션을 시작하지 않으며, claude.ai/code에서 세션을 시작하도록 안내합니다. 설정의 마지막 단계는 설정이 시작한 러너를 중지합니다. 해당 단계 이전에 설정을 떠나면 러너는 계속 실행됩니다. 마지막 단계 이후에도 계속하려면 `./runner-setup/CHEAT-SHEET.md`에 있는 명령으로 셸에서 러너를 다시 시작한 다음 [세션을 환경으로 라우팅](#route-a-session)하세요.

79 

80<h3 id="set-up-manually">

81 수동으로 설정

82</h3>

83 

84claude.ai에서 환경을 생성하고, 호스트의 터미널에서 러너를 시작한 다음, claude.ai로 돌아가 러너가 나타나는지 확인하고 세션을 러너로 라우팅합니다. Owner 역할을 보유한 사람이 이미 환경을 생성하고 그 비밀을 전달한 경우 2단계부터 시작하세요.

67 85 

68<Steps>86<Steps>

69 <Step title="환경 생성">87 <Step title="환경 생성">


73 </Step>91 </Step>

74 92 

75 <Step title="러너 시작">93 <Step title="러너 시작">

76 비밀 디렉토리를 생성하세요. 이 단계와 다음 단계에는 `/etc/claude` 경로에 대한 루트가 필요합니다. 러너 프로세스가 읽을 수 있는 모든 경로가 작동하므로, 다른 경로를 사용하는 경우 두 명령과 `--environment-secret-file` 값을 함께 조정하세요.94 비밀 디렉토리를 생성하세요. 이 명령과 다음 명령은 루트 권한이 필요한 `/etc/claude`를 사용하며, 이 명령들이 생성하는 비밀 파일은 명령을 실행한 사용자만 읽을 수 있습니다. 러너가 다른 사용자로 실행되면 `error: Failed to read environment secret file <path> (EACCES: permission denied, open '<path>')`와 함께 종료됩니다. 이 경우 `/etc/claude` 대신 러너의 사용자가 쓸 수 있는 디렉토리를 사용하여 두 명령을 러너의 사용자로 실행하고, 같은 경로를 `--environment-secret-file`에 전달하세요. 러너 프로세스가 읽을 수 있는 모든 경로가 작동합니다.

77 95 

78 ```bash theme={null}96 ```bash theme={null}

79 mkdir -p /etc/claude97 mkdir -p /etc/claude


89 107 

90 러너가 경로를 생성하거나 쓸 수 없으면, 등록하지 않고 시작 시 디렉토리의 이름을 지정하는 오류로 종료됩니다. [문제 해결](/docs/ko/self-hosted-environments-deploy#troubleshooting)을 참조하세요.108 러너가 경로를 생성하거나 쓸 수 없으면, 등록하지 않고 시작 시 디렉토리의 이름을 지정하는 오류로 종료됩니다. [문제 해결](/docs/ko/self-hosted-environments-deploy#troubleshooting)을 참조하세요.

91 109 

92 그런 다음 `--environment-secret-file` 및 `--base-dir`로 러너를 시작하세요. 러너는 환경에 등록하고 작업을 폴링하기 시작합니다. 러너가 종료되면 수동으로 다시 시작하세요. 프로덕션 배포는 종료된 러너를 다시 시작하는 오케스트레이터 아래에서 러너를 실행하며, 일반적으로 재시작당 새로운 파일 시스템을 사용합니다. [사전 준비된 체크아웃 재사용](/docs/ko/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout)은 지원되는 영구 디스크 설정을 다룹니다.110 그런 다음 `--environment-secret-file` 및 `--base-dir`로 러너를 시작하세요:

93 111 

94 ```bash theme={null}112 ```bash theme={null}

95 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'113 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'

96 ```114 ```

115 

116 러너는 환경에 등록되면 `Registered: runner_id=<runner-id>`를 기록한 다음 작업 폴링을 시작합니다. 이후 러너가 종료되면 직접 다시 시작하세요. 종료되는 경우에 대해서는 [러너가 종료되는 경우](#if-the-runner-exits)를 참조하세요.

97 </Step>117 </Step>

98 118 

99 <Step title="러너가 나타나는지 확인">119 <Step title="러너가 나타나는지 확인">

100 [**클라우드 환경** 페이지](https://claude.ai/admin-settings/cloud-environments)로 돌아가세요. 환경의 상태는 러너 시작 후 몇 초 내에 **배포된 러너 없음**에서 **정상**으로 변경됩니다. 환경을 열고 **활동**을 선택하여 러너 자체를 확인하세요.120 [**클라우드 환경** 페이지](https://claude.ai/admin-settings/cloud-environments)로 돌아가세요. 환경의 상태는 러너 시작 후 몇 초 내에 **배포된 러너 없음**에서 **정상**으로 변경됩니다. 환경을 열고 **활동**을 선택하여 러너 자체를 확인하세요. 관리자 페이지에 접근할 수 없는 경우, 이전 단계의 러너 로그에 있는 `Registered: runner_id=<runner-id>` 줄이 같은 신호를 제공합니다.

101 </Step>121 </Step>

102 122 

103 <Step title="세션을 환경으로 라우팅">123 <Step title="세션을 환경으로 라우팅">

104 claude.ai/code에서 세션을 시작하고 환경 선택기에서 환경을 선택하세요. 자체 호스팅 환경은 Anthropic 호스팅 환경과 함께 나타납니다. 러너는 호스트가 이미 가지고 있는 git 자격 증명으로 클론하므로, 이 호스트가 이미 클론할 수 있는 저장소 또는 공개 저장소를 선택하세요. 프로덕션의 비공개 저장소에 대한 자격 증명 옵션은 [Git 구성](/docs/ko/self-hosted-environments-deploy#configure-git)에 있습니다. 다음 사용 가능한 러너가 대기 중인 세션을 선택하고 `Picked up session <session-id>`를 기록하며, 활성 개수 및 용량을 함께 기록하므로, 러너의 자체 출력에서 어느 호스트가 세션을 선택했는지 확인할 수 있습니다. [claude.ai/code](https://claude.ai/code)에서 세션이 작동하는 것을 보고 Claude의 답변을 읽으세요. 세션이 대기 중인 경우 [문제 해결](/docs/ko/self-hosted-environments-deploy#troubleshooting)을 참조하세요.124 <span id="route-a-session" />claude.ai/code에서 세션을 시작하고 환경 선택기에서 환경을 선택하세요. 자체 호스팅 환경은 Anthropic 호스팅 환경과 함께 나타납니다. 저장소는 [사전 요구 사항](#host-and-network)에서 정한 것, 즉 공개 저장소나 이 호스트가 이미 클론할 수 있는 저장소를 선택하세요. 러너는 호스트가 이미 가지고 있는 git 자격 증명으로 클론합니다.

125 

126 다음 사용 가능한 러너가 대기 중인 세션을 선택하고 `Picked up session <session-id>`를 기록하며, 활성 개수 및 용량을 함께 기록하므로, 러너의 자체 출력에서 어느 호스트가 세션을 선택했는지 확인할 수 있습니다. [claude.ai/code](https://claude.ai/code)에서 세션이 작동하는 것을 보고 Claude의 답변을 읽으세요.

127 

128 세션이 작업을 시작하지 않으면 보이는 상황에 맞춰 확인하세요:

129 

130 * **세션이 대기 상태로 머무는 경우**: [문제 해결](/docs/ko/self-hosted-environments-deploy#troubleshooting)을 참조하세요.

131 * **세션이 git 오류로 시작에 실패하는 경우**: 오류는 세션과 러너의 로그에 나타납니다. 오류에 git의 `could not read Username for`와 그 뒤에 git 호스트의 URL이 포함되어 있다면, 러너에 해당 호스트에 대한 HTTPS 자격 증명이 없는 것입니다. [Git 구성](/docs/ko/self-hosted-environments-deploy#configure-git)을 참조하세요. 이 문서는 프로덕션의 비공개 저장소에 대한 자격 증명 옵션도 다룹니다.

105 </Step>132 </Step>

106</Steps>133</Steps>

107 134 

108러너는 활성 세션이 완료되면 설계상 종료됩니다. [러너 수명 주기](/docs/ko/self-hosted-environments#runner-lifecycle)를 참조하세요. 프로덕션의 경우, 종료 시 다시 시작하는 오케스트레이터 아래에 배포하세요. [프로덕션에 배포](/docs/ko/self-hosted-environments-deploy) 및 [러너가 종료될 때](/docs/ko/self-hosted-environments-deploy#when-the-runner-exits)를 참조하세요.135<h3 id="if-the-runner-exits">

136 러너가 종료되는 경우

137</h3>

138 

139이 빠른 시작 중에 러너가 종료되면 같은 명령으로 다시 시작하세요. 러너는 스스로 종료될 수 있습니다:

140 

141* **세션 완료**: 로그에 `[runner:exit] account workload drained — exiting`이 표시됩니다. 러너는 활성 세션이 완료되면 설계상 종료됩니다. [러너 수명 주기](/docs/ko/self-hosted-environments#runner-lifecycle)를 참조하세요.

142* **연결 끊김**: 로그에 `runner record gone server-side` 또는 `poll auth failed`가 포함된 `[runner:fatal]` 줄이 표시됩니다. 호스트가 절전 상태가 되는 등의 이유로 러너가 한동안 Anthropic과 연결이 끊기면, 다음에 Anthropic에 연결될 때 종료될 수 있습니다.

143 

144턴이 완료되어도 테스트 세션은 끝나지 않습니다. 첫 번째 턴 이후에도 세션은 계속 연결되어 있고 러너도 계속 실행 중이므로, 러너를 먼저 다시 시작하지 않고도 [세션에 후속 메시지를 보낼](#send-a-follow-up-message-to-a-running-session) 수 있습니다.

145 

146프로덕션의 경우, 종료 시 러너를 다시 시작하고 러너가 시작 직후 계속 종료될 때는 재시작 간격을 더 길게 두는 오케스트레이터 아래에 러너를 배포하세요. [프로덕션에 배포](/docs/ko/self-hosted-environments-deploy) 및 [러너가 종료될 때](/docs/ko/self-hosted-environments-deploy#when-the-runner-exits)를 참조하세요.

109 147 

110<h2 id="send-a-follow-up-message-to-a-running-session">148<h2 id="send-a-follow-up-message-to-a-running-session">

111 실행 중인 세션에 후속 메시지 전송149 실행 중인 세션에 후속 메시지 전송

Details

52| `--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`](/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분의 비활성 상태 후 세션 슬롯을 해제합니다. 여전히 턴 중간에 있는 세션(절대 완료되지 않는 백그라운드 작업을 보유하거나 실행 중인 도구 호출 내에서 요청된 승인을 포함)은 유휴로 계산되지 않습니다. `--kill-session-after-min`과 쌍을 이루어 하드 백스톱으로 사용하십시오. 세션의 백그라운드 작업이 완료된 후, 러너는 최대 [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings) 윈도우 동안 결과를 읽는 후속 턴이 시작될 때까지 세션을 바쁜 것으로 간주합니다. 러너가 종료 신호를 받거나 은퇴 시간에 도달할 때까지, 러너를 활성 세션 없이 남겨두는 해제는 `--drain-grace-sec`에 의해 관리되는 정상 드레인과 동일한 종료 경로를 시작합니다. [`--defer-shutdown-max-min`](/docs/ko/self-hosted-environments-deploy#defer-the-drain-past-the-first-signal)으로 연기한 첫 번째 신호 이후, 러너는 해제로 인해 세션을 보유하지 않는 즉시 종료됩니다. `0`은 비활성화합니다. |

53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | 꺼짐 | 세션이 이 러너에서 종료될 때 결과와 관계없이 `<base-dir>/_sessions/` 아래의 세션별 디렉터리를 제거합니다. [사전 준비된 체크아웃 재사용](/docs/ko/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout)은 이들이 보유한 내용과 유지될 때 이를 읽을 수 있는 사람을 설명합니다. 제거는 최선의 노력입니다: 러너가 종료되거나 정리가 실행되기 전에 드레인 마감에 도달하면 세션별 디렉터리가 제자리에 남아 있습니다. 플래그가 켜져 있으면 실패하거나 중단된 세션의 디버그 로그가 디스크에 유지되지 않습니다. Claude Code v2.1.268 이상이 필요합니다. |53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | 꺼짐 | 세션이 이 러너에서 종료될 때 결과와 관계없이 `<base-dir>/_sessions/` 아래의 세션별 디렉터리를 제거합니다. [사전 준비된 체크아웃 재사용](/docs/ko/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout)은 이들이 보유한 내용과 유지될 때 이를 읽을 수 있는 사람을 설명합니다. 제거는 최선의 노력입니다: 러너가 종료되거나 정리가 실행되기 전에 드레인 마감에 도달하면 세션별 디렉터리가 제자리에 남아 있습니다. 플래그가 켜져 있으면 실패하거나 중단된 세션의 디버그 로그가 디스크에 유지되지 않습니다. Claude Code v2.1.268 이상이 필요합니다. |

54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | 설정되지 않음 | 러너가 알려진 시간에 종료되는 인프라를 위해 절대 Unix 타임스탬프(초)에서 러너를 은퇴시킵니다. [러너 라이프사이클](/docs/ko/self-hosted-environments#runner-lifecycle)은 해제 시퀀스 및 여유를 크기 조정하는 방법을 설명합니다. 2001 이전 또는 5138년 이후의 값은 플래그에 의해 거부되고 환경 변수에 의해 무시됩니다. |54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | 설정되지 않음 | 러너가 알려진 시간에 종료되는 인프라를 위해 절대 Unix 타임스탬프(초)에서 러너를 은퇴시킵니다. [러너 라이프사이클](/docs/ko/self-hosted-environments#runner-lifecycle)은 해제 시퀀스 및 여유를 크기 조정하는 방법을 설명합니다. 2001 이전 또는 5138년 이후의 값은 플래그에 의해 거부되고 환경 변수에 의해 무시됩니다. |

55| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | 컨트롤 플레인이 세션과 함께 보내는 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode) 분류기 규칙 목록 중 어떤 것이 해당 세션에 도달할 수 있는지 지정합니다: `all`, `no-allow` 또는 `none`. 각 값이 적용하는 내용은 [자동 모드 규칙 목록](#auto-mode-rule-lists)을 참조하십시오. 잘못된 값은 시작 시 러너를 중지시킵니다. Claude Code v2.1.295 이상이 필요합니다. |

55| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | 세션이 종료된 후 Claude 프로세스가 깔끔하게 종료될 때까지 기다린 후 강제 종료하기 전까지 기다리는 시간입니다. 자식의 자체 `SessionEnd` 훅에 더 많은 시간이 필요한 경우 값을 높이십시오. |56| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | 세션이 종료된 후 Claude 프로세스가 깔끔하게 종료될 때까지 기다린 후 강제 종료하기 전까지 기다리는 시간입니다. 자식의 자체 `SessionEnd` 훅에 더 많은 시간이 필요한 경우 값을 높이십시오. |

56| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | 자식이 생성 후 N분 이내에 [활동 채널](/docs/ko/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached)에서 초기화되었음을 신호하지 않은 경우 세션 슬롯을 해제합니다. 일반 출력이 아닌 자식의 초기화 신호로 지워지며, 그 후 `--release-idle-session-min`이 인수합니다. `0`은 비활성화합니다. |57| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | 자식이 생성 후 N분 이내에 초기화되었음을 신호하지 않은 경우 세션 슬롯을 해제합니다. 복제는 생성 전에 이루어지므로 복제 시간은 계산되지 않습니다. 일반 출력이 아닌 [활동 채널](/docs/ko/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached)의 자식 초기화 신호로 지워지며, 그 후 `--release-idle-session-min`이 인수합니다. `0`은 비활성화합니다. |

57| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | 켜짐 | 각 세션의 저장소 경로에 대해 지속된 신뢰를 시드하여 저장소 커밋된 `permissions.allow` 및 `additionalDirectories`가 준수되도록 합니다. 저장소 커밋된 권한 부여를 삭제하고 대신 호스트 구성의 `settings.json`에서 허용 규칙을 구성하려면 `false`로 설정하십시오. 저장소 커밋된 `sandbox.*` 설정은 여전히 어느 쪽이든 적용되며, 이것이 [저장소 설정 가드](/docs/ko/self-hosted-environments-deploy#harden-your-deployment)가 이 플래그와 관계없이 이를 스캔하는 이유입니다. |58| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | 켜짐 | 각 세션의 저장소 경로에 대해 지속된 신뢰를 시드하여 저장소 커밋된 `permissions.allow` 및 `additionalDirectories`가 준수되도록 합니다. 저장소 커밋된 권한 부여를 삭제하고 대신 호스트 구성의 `settings.json`에서 허용 규칙을 구성하려면 `false`로 설정하십시오. 저장소 커밋된 `sandbox.*` 설정은 여전히 어느 쪽이든 적용되며, 이것이 [저장소 설정 가드](/docs/ko/self-hosted-environments-deploy#harden-your-deployment)가 이 플래그와 관계없이 이를 스캔하는 이유입니다. |

58| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | 꺼짐 | 고객 관리 git 인증 대신 [Anthropic git 프록시](/docs/ko/self-hosted-environments-deploy#use-the-anthropic-git-proxy)를 통해 복제합니다. `--capacity 1` 및 git 2.32 이상이 필요합니다. 러너는 그렇지 않으면 시작을 거부합니다. 다시 작성 플래그를 대체합니다. |59| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | 꺼짐 | 고객 관리 git 인증 대신 [Anthropic git 프록시](/docs/ko/self-hosted-environments-deploy#use-the-anthropic-git-proxy)를 통해 github.com의 저장소를 복제합니다. `--capacity 1` 및 git 2.32 이상이 필요합니다. 러너는 그렇지 않으면 시작을 거부합니다. 다시 작성 플래그를 대체합니다. |

59 60 

60대부분의 기간 플래그에는 최대값이 있으며, 각 타임아웃을 런타임의 32비트 타이머 상한인 약 24.85일 이내로 유지하도록 선택됩니다. `--*-min` 플래그는 10080분(7일)에서 상한선을 설정합니다. `--drain-grace-sec`는 604800초(역시 7일)에서 상한선을 설정합니다. `--drain-wait-sec`는 86400초(24시간)에서 상한선을 설정합니다. `--session-stop-grace-sec` 및 `--post-session-hook-timeout-sec`는 상한선이 없습니다. 상한선을 초과하는 동작은 표면별로 다릅니다:61대부분의 기간 플래그에는 최대값이 있으며, 각 타임아웃을 런타임의 32비트 타이머 상한인 약 24.85일 이내로 유지하도록 선택됩니다. `--*-min` 플래그는 10080분(7일)에서 상한선을 설정합니다. `--drain-grace-sec`는 604800초(역시 7일)에서 상한선을 설정합니다. `--drain-wait-sec`는 86400초(24시간)에서 상한선을 설정합니다. `--session-stop-grace-sec` 및 `--post-session-hook-timeout-sec`는 상한선이 없습니다. 상한선을 초과하는 동작은 표면별로 다릅니다:

61 62 

62* **플래그**: 시작이 오류로 실패합니다.63* **플래그**: 시작이 오류로 실패합니다.

63* **환경 변수**: 러너는 값을 거부하는 대신 타이머 상한선으로 고정합니다.64* **환경 변수**: 러너는 값을 거부하는 대신 타이머 상한선으로 고정합니다.

64 65 

66<h3 id="auto-mode-rule-lists">

67 자동 모드 규칙 목록

68</h3>

69 

70`--server-auto-mode-lists`를 사용하면 러너 외부에서 오는 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode) 분류기 규칙 중 어떤 것이 러너의 세션에 도달할지 결정할 수 있습니다. Anthropic의 컨트롤 플레인은 세션과 함께 규칙 목록을 보내고 러너에 이를 적용하도록 요청할 수 있습니다. 일부 항목은 조직의 관리자가 작성한 규칙일 수 있습니다. 목록은 `environment`, `soft_deny`, `allow`입니다:

71 

72* **`environment`**: 항목이 분류기가 더 많이 허용하도록 만들 수도 있고, 더 적게 허용하도록 만들 수도 있습니다.

73* **`soft_deny`**: 사용자가 명시적으로 요청했거나 `allow` 예외가 적용되지 않는 한 항목이 작업을 차단합니다.

74* **`allow`**: `soft_deny` 항목에 대한 예외입니다.

75 

76플래그의 값은 러너가 적용할 목록을 선택합니다:

77 

78* **`no-allow`**: 기본값입니다. `environment`와 `soft_deny`를 적용하고 `allow`는 보류합니다. `environment` 항목은 여전히 분류기가 더 많이 허용하도록 만들 수 있으므로, 기본값이 모든 완화를 배제하지는 않습니다.

79* **`all`**: 세 목록을 모두 적용합니다.

80* **`none`**: 어떤 목록도 적용하지 않습니다. 이러한 목록에서 오는 모든 완화를 배제하려면 `none`을 선택하십시오. 이 경우 `soft_deny` 제한도 함께 제외됩니다.

81 

82컨트롤 플레인이 러너에 목록 적용을 요청하도록 만드는 러너 설정은 없습니다. 요청하지 않으면 어떤 값을 설정하든 세션은 목록을 받지 않습니다. 어느 쪽이었는지 확인하려면 `--log-level debug`로 러너를 시작하십시오. 그러면 러너는 각 세션에 대해 `the server asked this runner to apply`가 포함된 줄 또는 `the server did not ask this runner to apply the auto mode lists it sends`가 포함된 줄을 로그에 기록합니다.

83 

65<h2 id="orchestrator-cli-flags">84<h2 id="orchestrator-cli-flags">

66 오케스트레이터 CLI 플래그85 오케스트레이터 CLI 플래그

67</h2>86</h2>


72| :- | :- | :- |91| :- | :- | :- |

73| `--hook-concurrency <n>` | `4` | 병렬로 실행되는 최대 `spawn-runner` 훅입니다. 또한 폴링당 청구되는 스폰 요청 수를 제한합니다. |92| `--hook-concurrency <n>` | `4` | 병렬로 실행되는 최대 `spawn-runner` 훅입니다. 또한 폴링당 청구되는 스폰 요청 수를 제한합니다. |

74| `--hook-timeout <sec>` | `60` | 이 많은 초 후 훅의 프로세스 트리를 종료합니다. 타임아웃과 5초 킬 유예는 `--expected-spawn-seconds` 아래에 있어야 합니다. 오케스트레이터는 시작 시 이를 적용합니다. |93| `--hook-timeout <sec>` | `60` | 이 많은 초 후 훅의 프로세스 트리를 종료합니다. 타임아웃과 5초 킬 유예는 `--expected-spawn-seconds` 아래에 있어야 합니다. 오케스트레이터는 시작 시 이를 적용합니다. |

75| `--expected-spawn-seconds <sec>` | `120` | 생성된 러너의 예상 p99 부팅 시간(서버 적용 범위 10\~3600). 모든 폴링에서 서버 측 임차로 전송됩니다. 경과하기 전에 러너가 등록되지 않으면 세션이 새 주문 ID로 다시 제공됩니다. 모든 복제본은 이 값을 공유해야 합니다. |94| `--expected-spawn-seconds <sec>` | `120` | 오케스트레이터가 스폰 요청을 받은 시점부터 러너가 등록될 때까지의 예상 p99 시간이며, 플랫폼에서 용량을 기다리는 시간도 포함됩니다. 서버는 10\~3600 범위를 적용합니다. 모든 폴링에서 서버 측 임차로 전송됩니다. 경과하기 전에 러너가 등록되지 않으면 세션이 새 주문 ID로 다시 제공됩니다. 모든 복제본은 이 값을 공유해야 합니다. |

76| `--min-idle <n>` | `0` | 대기 중인 러너를 사전에 생성하여 최소 N개의 유휴 세션 슬롯을 무료로 유지합니다. `0`은 사전 워밍을 비활성화합니다. 러너의 `--exit-if-unused-min`과 쌍을 이루어 잉여 대기 러너가 자신을 회수하도록 합니다. |95| `--min-idle <n>` | `0` | 대기 중인 러너를 사전에 생성하여 최소 N개의 유휴 세션 슬롯을 무료로 유지합니다. `0`은 사전 워밍을 비활성화합니다. 러너의 `--exit-if-unused-min`과 쌍을 이루어 잉여 대기 러너가 자신을 회수하도록 합니다. |

77| `--debug-dir <path>` | 설정되지 않음 | 각 스폰 요청의 작업 주문 및 훅 stderr을 디스크에 씁니다. 디버그 전용이며 프로덕션에서 설정하지 마세요. |96| `--debug-dir <path>` | 설정되지 않음 | 각 스폰 요청의 작업 주문 및 훅 stderr을 디스크에 씁니다. 디버그 전용이며 프로덕션에서 설정하지 마세요. |

78 97 


108| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | 턴이 완료된 후 세션의 프로세스가 턴의 끝을 Anthropic에 보고하는 동안 러너가 `--drain-wait-sec` 드레인에 대해 세션을 바쁜 것으로 계산하는 시간의 상한입니다. `0` 또는 사용할 수 없는 값은 기본값으로 폴백되므로 보유를 끌 수 없습니다. Claude Code v2.1.275 이상이 필요합니다. |127| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | 턴이 완료된 후 세션의 프로세스가 턴의 끝을 Anthropic에 보고하는 동안 러너가 `--drain-wait-sec` 드레인에 대해 세션을 바쁜 것으로 계산하는 시간의 상한입니다. `0` 또는 사용할 수 없는 값은 기본값으로 폴백되므로 보유를 끌 수 없습니다. Claude Code v2.1.275 이상이 필요합니다. |

109| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | 러너가 중단 불가능한 I/O에 갇혀 있는 자식에게 OS가 `SIGKILL`을 전달할 때까지 기다린 후 자신을 종료하기 전까지 기다리는 시간입니다. `--post-session-hook-timeout-sec` 더하기 15초로 바닥이 정해지며, `--push-outcome-on-release`가 설정되면 30초 더 추가되므로 효과적인 최소값은 기본값에서 75초입니다. |128| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | 러너가 중단 불가능한 I/O에 갇혀 있는 자식에게 OS가 `SIGKILL`을 전달할 때까지 기다린 후 자신을 종료하기 전까지 기다리는 시간입니다. `--post-session-hook-timeout-sec` 더하기 15초로 바닥이 정해지며, `--push-outcome-on-release`가 설정되면 30초 더 추가되므로 효과적인 최소값은 기본값에서 75초입니다. |

110| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | 신선한 복제를 위한 Git 페치 깊이입니다. 양의 정수 또는 완전한 페치를 위해 `full` 또는 `0`을 설정하세요. 작업 공간에 이미 있는 저장소는 기존 깊이를 유지합니다. |129| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | 신선한 복제를 위한 Git 페치 깊이입니다. 양의 정수 또는 완전한 페치를 위해 `full` 또는 `0`을 설정하세요. 작업 공간에 이미 있는 저장소는 기존 깊이를 유지합니다. |

130| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | 서버가 대규모 저장소의 팩을 준비할 때처럼 Git 서버 자체의 진행률 수치가 계속 증가하는 동안, Git 페치가 첫 데이터를 기다릴 수 있는 시도당 시간(밀리초)입니다. `0` 또는 `off`는 이 대기를 끕니다. 이 경우 해당 페치는 데이터 없이 2분이 지나면 중단됩니다. 그 외의 정수는 `120000`에서 `1800000` 사이, 즉 2분에서 30분 사이로 제한됩니다. Claude Code v2.1.295 이상이 필요합니다. |

111| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | 설정되지 않음 | `1`일 때, `checkout` 훅이 실행된 후 `.git` 존재 확인을 건너뜁니다. 훅이 비git 소스를 구체화할 때 이를 설정하세요. |131| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | 설정되지 않음 | `1`일 때, `checkout` 훅이 실행된 후 `.git` 존재 확인을 건너뜁니다. 훅이 비git 소스를 구체화할 때 이를 설정하세요. |

112| `FORCE_AUTOUPDATE_PLUGINS` | 설정되지 않음 | `1`일 때, 바이너리가 고정되어 있어도 플러그인 마켓플레이스가 자동 업데이트되도록 합니다. |132| `FORCE_AUTOUPDATE_PLUGINS` | 설정되지 않음 | `1`일 때, 바이너리가 고정되어 있어도 플러그인 마켓플레이스가 자동 업데이트되도록 합니다. |

113| `CLAUDE_CODE_DISABLE_ARTIFACT` | 설정되지 않음 | `1`일 때, 조직의 관리자 설정과 관계없이 세션에서 Artifact 도구를 비활성화하고 `*.frame.claudeusercontent.com` 이그레스 요구 사항을 삭제합니다. |133| `CLAUDE_CODE_DISABLE_ARTIFACT` | 설정되지 않음 | `1`일 때, 조직의 관리자 설정과 관계없이 세션에서 Artifact 도구를 비활성화하고 `*.frame.claudeusercontent.com` 이그레스 요구 사항을 삭제합니다. |


178| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | 종류별 누적 PollSpawnHints 실패: `transport`, `timeout`, `5xx`, `429` 또는 `4xx`. 모든 5개 시리즈는 프로세스 시작부터 존재합니다. `rate(...[5m]) > 0`에서 경고하세요. |198| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | 종류별 누적 PollSpawnHints 실패: `transport`, `timeout`, `5xx`, `429` 또는 `4xx`. 모든 5개 시리즈는 프로세스 시작부터 존재합니다. `rate(...[5m]) > 0`에서 경고하세요. |

179| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | 지금 청구 가능한 스폰 요청 |199| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | 지금 청구 가능한 스폰 요청 |

180| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | 재시도 가능한 훅 실패 후 재시도 백오프의 스폰 요청 |200| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | 재시도 가능한 훅 실패 후 재시도 백오프의 스폰 요청 |

181| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | Owner가 환경의 **Activity** 탭에서 재시도할 때까지 차단된 스폰 요청입니다. 0 이상이면 경고하세요. |201| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | 스폰이 차단된 세션입니다. 각 세션은 사용자가 새 메시지를 보내거나 Owner가 환경의 **Activity** 탭에서 재시도할 때까지 차단된 상태로 유지됩니다. 원인을 수정한 후에도 수가 0보다 크게 유지될 수 있습니다. 0 이상이면 경고하세요. |

182| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | 이 환경의 러너를 기다리는 총 세션입니다. 환경 전체 집계이며, 모든 오케스트레이터 인스턴스에서 동일합니다: 인스턴스 전체에서 `SUM` 대신 `MAX`를 사용하세요. |202| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | 이 환경의 러너를 기다리는 총 세션입니다. 환경 전체 집계이며, 모든 오케스트레이터 인스턴스에서 동일합니다: 인스턴스 전체에서 `SUM` 대신 `MAX`를 사용하세요. |

183| `claude_code_self_hosted_orchestrator_pool_active_sessions` | 현재 이 환경의 살아있는 러너에 할당된 세션입니다. 환경 전체 집계이며, 모든 오케스트레이터 인스턴스에서 동일합니다: 인스턴스 전체에서 `SUM` 대신 `MAX`를 사용하세요. |203| `claude_code_self_hosted_orchestrator_pool_active_sessions` | 현재 이 환경의 살아있는 러너에 할당된 세션입니다. 환경 전체 집계이며, 모든 오케스트레이터 인스턴스에서 동일합니다: 인스턴스 전체에서 `SUM` 대신 `MAX`를 사용하세요. |

184| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | 누적 `spawn-runner` 훅 결과: `ok`, `retryable`, `non_retryable`. 오케스트레이터 훅 호출을 계산하며, 러너가 생성하는 세션 자식이 아닙니다: 용량이 1 이상, 웜 풀 및 동일한 세션에 대해 다시 생성된 러너가 둘을 분산시키므로 `sessions_started_total`과 비교할 수 없습니다. |204| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | 누적 `spawn-runner` 훅 결과: `ok`, `retryable`, `non_retryable`. 오케스트레이터 훅 호출을 계산하며, 러너가 생성하는 세션 자식이 아닙니다: 용량이 1 이상, 웜 풀 및 동일한 세션에 대해 다시 생성된 러너가 둘을 분산시키므로 `sessions_started_total`과 비교할 수 없습니다. |


283 for: 1m303 for: 1m

284 labels: {severity: critical}304 labels: {severity: critical}

285 annotations:305 annotations:

286 summary: "{{ $value }}개 세션이 회로 차단됨 — spawn-runner 훅이 반복적으로 재시도 불가능합니다. 인프라를 수정한 후 Activity 탭에서 재시도하세요."306 summary: "스폰이 차단된 세션: {{ $value }}개. Activity 탭에서 각 세션의 오류를 확인하고 원인을 수정한 후 Retry를 선택하세요."

287 - alert: ClaudeOrchestratorPollErrors307 - alert: ClaudeOrchestratorPollErrors

288 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0308 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0

289 for: 2m309 for: 2m


318 338 

319v2.1.260 이전에는 러너가 `--kill-session-after-min` 한계에 도달한 모든 세션을 종료하고 `sessions_interrupted_total`에서 계산했습니다.339v2.1.260 이전에는 러너가 `--kill-session-after-min` 한계에 도달한 모든 세션을 종료하고 `sessions_interrupted_total`에서 계산했습니다.

320 340 

321[`post-session` 훅](/docs/ko/self-hosted-environments-configuration#post-session)의 `CLAUDE_RUNNER_EXIT_REASON`은 이러한 깔끔한 슬롯 반환을 다르게 분류합니다. 훅은 해제, 시작 타임아웃 및 서버 할당 해제를 `interrupted`로 보고합니다. 러너가 자식을 중지했기 때문입니다. 이러한 카운터는 동일한 이벤트를 `completed`로 기록합니다. 슬롯이 깔끔하게 반환되었기 때문입니다.341[`post-session` 훅](/docs/ko/self-hosted-environments-configuration#post-session)의 `CLAUDE_RUNNER_EXIT_REASON`은 깔끔한 슬롯 반환을 다르게 분류합니다. 훅은 해제, 시작 타임아웃, 서버 할당 해제, 그리고 폴이 먼저 알아챈 보관 또는 삭제를 `interrupted`로 보고합니다. 러너가 자식을 중지했기 때문입니다. 이러한 카운터는 동일한 이벤트를 `completed`로 기록합니다. 슬롯이 깔끔하게 반환되었기 때문입니다.

322 342 

323훅 수신을 `sessions_completed_total`에 직접 조정하면 완료를 과소 계산합니다. 세션별 보장을 위해 훅을 사용하고 집계 비율을 위해 카운터를 사용하세요.343훅 수신을 `sessions_completed_total`에 직접 조정하면 완료를 과소 계산합니다. 세션별 보장을 위해 훅을 사용하고 집계 비율을 위해 카운터를 사용하세요.

324 344 

Details

87 87 

88`--environment` 및 `--ref` 디스패치 플래그는 스크립트를 실행하는 머신(러너 자체와 동일한 수준)에서 Claude Code v2.1.224 이상이 필요합니다. 훅이 설치되고 이 호스트에서 러너가 시작된 상태에서 테스트 스크립트는:88`--environment` 및 `--ref` 디스패치 플래그는 스크립트를 실행하는 머신(러너 자체와 동일한 수준)에서 Claude Code v2.1.224 이상이 필요합니다. 훅이 설치되고 이 호스트에서 러너가 시작된 상태에서 테스트 스크립트는:

89 89 

901. `claude -p "<prompt>" --environment <environment-id> --output-format json`으로 테스트 환경에서 세션을 생성합니다. `origin` 원격에서 저장소를 자동 감지할 수 있도록 git 체크아웃에서 실행합니다. 선택적 `--ref <branch>`는 로컬 HEAD 대신 명명된 ref를 기반으로 세션의 체크아웃을 설정합니다. 명령은 세션을 생성하고, `session_id`를 포함하는 한 줄의 JSON을 인쇄하고, Claude의 응답을 기다리지 않고 종료합니다.901. `claude -p "<prompt>" --environment <environment-id> --output-format json`으로 테스트 환경에서 세션을 생성합니다. CLI가 `origin` 원격에서 저장소를 자동 감지할 수 있도록 git 체크아웃에서 명령을 실행합니다. 선택적 `--ref <branch>`는 로컬 HEAD 대신 명명된 ref를 기반으로 세션의 체크아웃을 설정합니다. 명령은 Claude의 응답을 기다리지 않고 종료합니다. 출력되는 내용을 통해 스크립트는 결과를 알 수 있습니다:

91 * **세션 생성됨**: `{"ok":true,"session_id":"session_...","title":"...","url":"...","pool_id":"..."}`와 같은 한 줄의 JSON

92 * **세션 생성 실패**: `{"ok":false,"error":"..."}` 줄이 출력되고, 명령은 상태 1로 종료됩니다

93 * **일부 이전 단계의 오류**(예: 조직에서 클라우드 세션을 사용할 수 없거나 프롬프트가 누락된 경우): JSON 줄 없이 stderr에 오류가 출력되고, 명령은 상태 1로 종료됩니다

912. 러너의 Stop 훅이 턴을 완료한 후 `$E2E_REPLY_DIR/<session_id>.txt`에 기록된 응답이 나타날 때까지 기다립니다.942. 러너의 Stop 훅이 턴을 완료한 후 `$E2E_REPLY_DIR/<session_id>.txt`에 기록된 응답이 나타날 때까지 기다립니다.

923. `claude -p "<message>" --cloud <session_id> --output-format json`으로 후속 메시지를 보냅니다([실행 중인 세션에 후속 메시지 보내기](/docs/ko/claude-code-on-the-web#send-follow-ups-from-the-cli) 참조). 이는 기존 세션에 사용자 이벤트를 게시하고 종료합니다.953. `claude -p "<message>" --cloud <session_id> --output-format json`으로 후속 메시지를 보냅니다([실행 중인 세션에 후속 메시지 보내기](/docs/ko/claude-code-on-the-web#send-follow-ups-from-the-cli) 참조). 이는 기존 세션에 사용자 이벤트를 게시하고 종료합니다.

934. 2단계와 동일한 방식으로 후속 응답을 기다립니다.964. 2단계와 동일한 방식으로 후속 응답을 기다립니다.


104 예제 스크립트107 예제 스크립트

105</h2>108</h2>

106 109 

107아래 스크립트는 `$CLAUDE_TEST_ENVIRONMENT_ID`에 대해 전체 루프를 실행합니다. 이는 테스트 환경의 `ccpool_...` ID이며, 관리 페이지의 환경 상세 대화상자에 표시되거나 [환경 생성 호출](#create-a-dedicated-test-environment)에서 반환됩니다. 각 응답의 센티널 구문을 어설션합니다. 캡처 훅이 설치되고 `E2E_REPLY_DIR`이 내보내진 이 호스트에서 러너를 시작한 후, 작업하려는 저장소의 git 체크아웃에서 실행합니다. 먼저 [CI에서 인증하기](#authenticate-from-ci)에 설명된 대로 스크립트를 실행하는 머신에서 claude.ai 계정으로 로그인합니다. 로그인하지 않으면 첫 번째 디스패치가 `Unable to get organization UUID for cloud session creation`과 같은 오류와 함께 실패합니다.110예제 스크립트는 테스트 러너와 같은 머신에서 실행됩니다. 실행하기 전에 해당 머신을 준비합니다.

111 

112* **저장소 체크아웃**: 세션이 작업할 저장소의 git 체크아웃에서 스크립트를 실행합니다.

113* **러너**: 캡처 훅이 설치되고 `E2E_REPLY_DIR`이 내보내진 상태로 이 호스트에서 러너를 시작합니다.

114* **로그인**: [CI에서 인증하기](#authenticate-from-ci)에 설명된 대로 스크립트를 실행하는 머신에서 claude.ai 계정으로 로그인합니다.

115* **환경 ID**: `CLAUDE_TEST_ENVIRONMENT_ID`를 테스트 환경의 `ccpool_...` ID로 설정합니다. 이 ID는 관리 페이지의 환경 상세 대화상자에 표시되거나 [환경 생성 호출](#create-a-dedicated-test-environment)에서 반환됩니다.

116 

117아래 스크립트는 `$CLAUDE_TEST_ENVIRONMENT_ID`에 대해 전체 루프를 실행하고 각 응답의 센티널 구문을 어설션합니다.

108 118 

109```bash theme={null}119```bash theme={null}

110#!/usr/bin/env bash120#!/usr/bin/env bash


152TURN1="e2e-probe-$(date +%s)-$$: say exactly 'ok: custom tools are reachable' and nothing else"162TURN1="e2e-probe-$(date +%s)-$$: say exactly 'ok: custom tools are reachable' and nothing else"

153EXPECT1="ok: custom tools are reachable"163EXPECT1="ok: custom tools are reachable"

154create_json=$(claude -p "$TURN1" --environment "$CLAUDE_TEST_ENVIRONMENT_ID" \164create_json=$(claude -p "$TURN1" --environment "$CLAUDE_TEST_ENVIRONMENT_ID" \

155 --ref "$TEST_REPO_REF" --output-format json)165 --ref "$TEST_REPO_REF" --output-format json < /dev/null)

156echo "create: $create_json"166echo "create: $create_json"

157SESSION_ID=$(jq -er '.session_id' <<<"$create_json")167SESSION_ID=$(jq -er '.session_id' <<<"$create_json")

158 168 


163# 3. Post a follow-up via the CLI.173# 3. Post a follow-up via the CLI.

164TURN2="e2e-probe-followup-$(date +%s): say exactly 'ok: follow-up delivered' and nothing else"174TURN2="e2e-probe-followup-$(date +%s): say exactly 'ok: follow-up delivered' and nothing else"

165EXPECT2="ok: follow-up delivered"175EXPECT2="ok: follow-up delivered"

166followup_json=$(claude -p "$TURN2" --cloud "$SESSION_ID" --output-format json)176followup_json=$(claude -p "$TURN2" --cloud "$SESSION_ID" --output-format json < /dev/null)

167echo "followup: $followup_json"177echo "followup: $followup_json"

168jq -e '.ok == true' <<<"$followup_json" >/dev/null178jq -e '.ok == true' <<<"$followup_json" >/dev/null

169 179 

sessions.md +58 −50

Details

6 6 

7> Claude Code 대화의 이름을 지정하고, 재개하고, 분기하고, 전환합니다. `--continue`, `--resume`, `--from-pr`, `/resume` 선택기, 세션 이름 지정, 대화 기록 내보내기 및 대화 기록 저장 위치를 다룹니다.7> Claude Code 대화의 이름을 지정하고, 재개하고, 분기하고, 전환합니다. `--continue`, `--resume`, `--from-pr`, `/resume` 선택기, 세션 이름 지정, 대화 기록 내보내기 및 대화 기록 저장 위치를 다룹니다.

8 8 

9세션은 프로젝트 디렉토리에 연결된 저장된 대화입니다. Claude Code는 작업할 때 로컬에 저장하므로 중단한 지점부터 재개하거나, 다른 접근 방식을 시도하기 위해 분기하거나, 작업 간에 전환할 수 있습니다.9[세션](/docs/ko/glossary#session)은 프로젝트 디렉토리에 연결된 저장된 대화입니다. Claude Code는 작업할 때 로컬에 저장하므로 중단한 지점부터 재개하거나, 다른 접근 방식을 시도하기 위해 분기하거나, 작업 간에 전환할 수 있습니다.

10 10 

11[데스크톱 앱](/docs/ko/desktop#work-in-parallel-with-sessions), [claude.ai/code](/docs/ko/claude-code-on-the-web), [VS Code 확장](/docs/ko/vs-code#resume-past-conversations)은 각각 자신의 세션 목록을 유지하며, 데스크톱 앱은 [CLI 세션을 재개](/docs/ko/desktop#coming-from-the-cli)할 수도 있습니다. 이 페이지는 CLI를 다룹니다.11[데스크톱 앱](/docs/ko/desktop#work-in-parallel-with-sessions), [claude.ai/code](/docs/ko/claude-code-on-the-web), [VS Code 확장](/docs/ko/vs-code#resume-past-conversations)은 각각 자신의 세션 목록을 유지하며, 데스크톱 앱은 [CLI 세션을 재개](/docs/ko/desktop#coming-from-the-cli)할 수도 있습니다. 이 페이지는 CLI를 다룹니다.

12 12 


18 18 

19| 명령 | 기능 |19| 명령 | 기능 |

20| :- | :- |20| :- | :- |

21| `claude --continue` | 현재 디렉토리에서 가장 최근 대화를 다시 엽니다 |21| `claude --continue` | 현재 디렉토리에서 가장 최근 세션을 다시 엽니다 |

22| `claude --resume` | [세션 선택기](#use-the-session-picker)를 엽니다 |22| `claude --resume` | [세션 선택기](#use-the-session-picker)를 엽니다 |

23| `claude --resume <name>` | 지정된 이름의 세션을 직접 재개합니다 |23| `claude --resume <name>` | 지정된 이름의 세션을 직접 재개합니다 |

24| `claude --resume <transcript-path>` | 해당 절대 경로의 `.jsonl` [트랜스크립트 파일](#where-transcripts-are-stored)에 저장된 대화를 재개합니다 |24| `claude --resume <transcript-path>` | 해당 절대 경로의 `.jsonl` [트랜스크립트 파일](#where-transcripts-are-stored)에 저장된 세션을 재개합니다 |

25| `claude --from-pr <number>` | 해당 풀 리퀘스트에 연결된 세션으로 필터링된 세션 선택기를 엽니다 |25| `claude --from-pr <number>` | 해당 풀 리퀘스트에 연결된 세션으로 필터링된 세션 선택기를 엽니다 |

26| `/resume` | 활성 세션 내에서 다른 대화로 전환합니다 |26| `/resume` | 활성 세션 내에서 다른 세션으로 전환합니다 |

27 

28Claude Code는 [`claude -p`](/docs/ko/headless) 또는 [Agent SDK](/docs/ko/agent-sdk/overview)로 생성된 세션을 세션 선택기 및 `claude --continue`에서 제외합니다. 세션 ID를 `claude --resume <session-id>`에 전달하여 여전히 재개할 수 있습니다. `claude --continue`를 사용하면 Claude Code는 [첫 번째 프롬프트가 `/loop`인 세션](#where-the-session-picker-looks)도 건너뜁니다. [`claude -p --continue`](/docs/ko/headless#continue-conversations)를 실행하면 Claude Code는 `-p`, SDK 및 `/loop` 세션을 포함합니다.

29 

30`claude --resume <session-id>`는 모든 디렉토리에서 실행할 수 있으므로 다른 곳에서 시작되었거나 [`/cd`](/docs/ko/commands)로 이동한 세션도 재개할 수 있습니다. Claude Code는 다음 순서로 ID를 찾습니다:

31 

321. 현재 프로젝트 디렉토리 및 해당 git worktree

332. 이 머신의 다른 모든 프로젝트

34 

35교차 프로젝트 검색은 정확히 하나의 다른 프로젝트가 해당 ID에 대한 메시지가 있는 트랜스크립트를 보유할 때만 ID를 확인하므로, 손으로 복사한 중복이 있으면 Claude Code는 임의의 복사본을 재개하지 않고 찾을 수 없음을 보고합니다. 저장된 세션이 ID와 일치하지 않으면 Claude Code는 `No conversation found with session ID: <session-id>`를 보고합니다.

36 

37v2.1.223 이전에는 조회가 현재 프로젝트 디렉토리 및 해당 git worktree에서 중지되었으므로 세션이 마지막으로 작업한 디렉토리에서 재개해야 했습니다.

38 

39`claude --continue`는 완료된 [백그라운드 세션](/docs/ko/agent-view)을 열지만 여전히 실행 중인 세션은 열지 않습니다. 완료된 백그라운드 세션을 열려면 Claude Code v2.1.257 이상이 필요합니다. 가장 최근 대화가 [백그라운드로 이동](/docs/ko/agent-view#send-the-session-to-the-background)한 세션이고 여전히 그곳에서 실행 중인 경우 Claude Code는 `Your most recent conversation is running in the background`와 해당 세션의 ID로 종료됩니다. [`claude agents`](/docs/ko/agent-view#attach-to-a-session)에서 세션에 연결하거나 `claude --resume`을 실행하여 다른 세션을 선택합니다.

40 27 

41<h3 id="resume-a-running-background-session">28<h3 id="resume-a-running-background-session">

42 실행 중인 백그라운드 세션 재개29 실행 중인 백그라운드 세션 재개


64 51 

65Claude Code가 트랜스크립트에서 대화를 로드할 때 재개된 세션은 대화와 함께 저장된 상태를 복원합니다:52Claude Code가 트랜스크립트에서 대화를 로드할 때 재개된 세션은 대화와 함께 저장된 상태를 복원합니다:

66 53 

67* 대화 기록: 도구 호출 및 결과를 포함한 전체 기록입니다. 이전 프로세스가 종료될 때(예: 충돌) 여전히 실행 중이던 도구는 재개할 때 완료되거나 다시 실행되지 않습니다. [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/ko/env-vars#variables)이 설정되지 않은 경우, Claude는 결과가 기록되기 전에 중단된 것으로 표시된 호출을 보게 되며 다시 실행하기 전에 효과가 있었는지 확인하도록 지시받습니다. v2.1.281 이전에는 Claude Code가 중단된 호출을 대화에서 삭제하거나 사용자가 중단한 것으로 Claude에게 표시했습니다.54* 대화 기록: 도구 호출 및 결과를 포함한 전체 기록입니다. 이전 프로세스가 종료될 때(예: 충돌) 여전히 실행 중이던 도구는 재개할 때 완료되거나 다시 실행되지 않습니다. [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/ko/env-vars#variables)이 설정되지 않은 경우, Claude는 결과가 기록되기 전에 중단된 것으로 표시된 호출을 보게 되며 다시 실행하기 전에 효과가 있었는지 확인하도록 지시받습니다.

68* 모델: 세션은 사용 중이던 모델에서 계속됩니다. 단, [모델 설정](/docs/ko/model-config#setting-your-model)에 설명된 경우는 제외됩니다.55* 모델: 세션은 사용 중이던 모델에서 계속됩니다. 단, [모델 설정](/docs/ko/model-config#setting-your-model)에 설명된 경우는 제외됩니다.

69* 에이전트: [`--agent`](/docs/ko/sub-agents#invoke-subagents-explicitly) 또는 `agent` 설정으로 시작된 세션은 해당 에이전트로 계속되며 도구 제한 및 모델을 유지합니다. 재개할 때 `--agent`를 전달하여 다른 에이전트를 선택합니다. 두 경우 모두 시스템 프롬프트는 [재개된 대화의 시스템 프롬프트 플래그](/docs/ko/cli-reference#system-prompt-flags-in-resumed-conversations)를 참조하세요. Claude Code는 두 위치에서 에이전트를 찾습니다: 세션의 원본 디렉토리(해당 워크스페이스를 [신뢰](/docs/ko/permissions#project-allow-rules-and-workspace-trust)한 경우) 및 재개하는 디렉토리이므로 프로젝트 범위 에이전트는 다른 디렉토리에서 재개할 때도 로드됩니다. Claude Code가 두 위치 모두에서 에이전트를 찾지 못하면 세션은 기본 도구로 재개되고 [에이전트 이름을 지정하는 경고](/docs/ko/errors#session-agent-no-longer-available)를 표시합니다.56* 에이전트: [`--agent`](/docs/ko/sub-agents#invoke-subagents-explicitly) 또는 `agent` 설정으로 시작된 세션은 해당 에이전트로 계속되며 도구 제한 및 모델을 유지합니다. 재개할 때 `--agent`를 전달하여 다른 에이전트를 선택합니다. 두 경우 모두 시스템 프롬프트는 [재개된 대화의 시스템 프롬프트 플래그](/docs/ko/cli-reference#system-prompt-flags-in-resumed-conversations)를 참조하세요. Claude Code는 두 위치에서 에이전트를 찾습니다: 세션의 원본 디렉토리(해당 워크스페이스를 [신뢰](/docs/ko/permissions#project-allow-rules-and-workspace-trust)한 경우) 및 재개하는 디렉토리이므로 프로젝트 범위 에이전트는 다른 디렉토리에서 재개할 때도 로드됩니다. Claude Code가 두 위치 모두에서 에이전트를 찾지 못하면 세션은 기본 도구로 재개되고 [에이전트 이름을 지정하는 경고](/docs/ko/errors#session-agent-no-longer-available)를 표시합니다.

70* 권한 모드: 터미널에서 `claude --continue`, `claude --resume <session-id>` 또는 이름이 한 세션과 일치할 때 `-p` 없이 `claude --resume <name>`으로 재개하면 Claude Code는 세션이 있던 권한 모드를 복원합니다. 단, [재개 시 권한 모드](#permission-mode-on-resume)의 경우는 제외되며, 이는 세션 선택기, `/resume` 및 `claude -p`로 재개하는 경우도 포함합니다. `--permission-mode` 또는 `--dangerously-skip-permissions`를 전달하여 복원된 모드를 재정의합니다.57* 권한 모드: 터미널에서 `claude --continue`, `claude --resume <session-id>` 또는 이름이 한 세션과 일치할 때 `-p` 없이 `claude --resume <name>`으로 재개하면 Claude Code는 세션이 있던 권한 모드를 복원합니다. 단, [재개 시 권한 모드](#permission-mode-on-resume)의 경우는 제외되며, 이는 세션 선택기, `/resume` 및 `claude -p`로 재개하는 경우도 포함합니다. `--permission-mode` 또는 `--dangerously-skip-permissions`를 전달하여 복원된 모드를 재정의합니다.


83* 터미널: `claude --continue`, `claude --resume <session-id>` 또는 이름이 한 세션과 일치할 때 `-p` 없이 `claude --resume <name>`. Claude Code는 세션이 있던 권한 모드를 복원합니다. 단, 표의 경우는 제외됩니다. `--permission-mode` 또는 `--dangerously-skip-permissions`를 전달하여 복원된 모드를 재정의합니다.70* 터미널: `claude --continue`, `claude --resume <session-id>` 또는 이름이 한 세션과 일치할 때 `-p` 없이 `claude --resume <name>`. Claude Code는 세션이 있던 권한 모드를 복원합니다. 단, 표의 경우는 제외됩니다. `--permission-mode` 또는 `--dangerously-skip-permissions`를 전달하여 복원된 모드를 재정의합니다.

84* 비대화형: `claude -p --resume` 또는 `claude -p --continue`. Claude Code는 새로운 `claude -p` 실행이 시작될 권한 모드로 실행을 시작합니다. 단, 플랜 모드에서 종료된 세션은 [아래 조건](#resume-in-plan-mode-with-p)에서 플랜 모드로 재개됩니다.71* 비대화형: `claude -p --resume` 또는 `claude -p --continue`. Claude Code는 새로운 `claude -p` 실행이 시작될 권한 모드로 실행을 시작합니다. 단, 플랜 모드에서 종료된 세션은 [아래 조건](#resume-in-plan-mode-with-p)에서 플랜 모드로 재개됩니다.

85* VS Code: 확장의 대화 패널입니다. 표는 플랜 모드에서 종료된 대화만 다룹니다. 나머지는 [과거 대화 재개](/docs/ko/vs-code#resume-past-conversations)를 참조하세요.72* VS Code: 확장의 대화 패널입니다. 표는 플랜 모드에서 종료된 대화만 다룹니다. 나머지는 [과거 대화 재개](/docs/ko/vs-code#resume-past-conversations)를 참조하세요.

86* 시작 시 세션 선택기: `claude --resume` 단독, `claude --from-pr` 또는 여러 세션과 일치하는 이름 중 어느 방법으로 열었든 [세션 선택기](#use-the-session-picker)에서 선택한 세션입니다. Claude Code는 동일한 명령줄에서 새 세션을 시작할 권한 모드로 세션을 시작합니다. 단, 플랜 모드에서 종료된 세션은 `--permission-mode`, `--dangerously-skip-permissions` 또는 `--fork-session`을 전달하지 않는 한 플랜 모드로 재개됩니다. 그 외의 저장된 권한 모드는 복원되지 않습니다.73* 시작 시 세션 선택기: `claude --resume` 단독, `claude --from-pr` 또는 여러 세션과 일치하는 이름 중 어느 방법으로 열었든 [세션 선택기](#use-the-session-picker)에서 선택한 세션입니다. Claude Code는 동일한 명령줄에서 새 세션을 시작할 권한 모드로 세션을 시작합니다. 단, 플랜 모드에서 종료된 세션은 플랜 모드로 재개됩니다. `--permission-mode`, `--dangerously-skip-permissions` 또는 `--fork-session`을 전달하면 Claude Code는 플랜 모드를 복원하지 않습니다. 그 외의 저장된 권한 모드는 복원되지 않습니다.

87* 세션 내 `/resume`(인수 있음 또는 없음): 전환하는 대화는 현재 세션이 있는 권한 모드에서 계속됩니다. 단, 플랜 모드에서 종료된 대화는 `--permission-mode` 또는 `--dangerously-skip-permissions`로 Claude Code를 시작했더라도 플랜 모드로 재개됩니다. 해당 대화가 이번 Claude Code 실행에서 이미 열린 적이 있다면(예: 처음 시작한 대화나 `/clear` 또는 `/resume`으로 떠난 대화) 대신 현재 권한 모드에서 계속됩니다.74* 세션 내 `/resume`(인수 있음 또는 없음): 전환하는 대화는 현재 세션이 있는 권한 모드에서 계속됩니다. 단, 플랜 모드에서 종료된 대화는 `--permission-mode` 또는 `--dangerously-skip-permissions`로 Claude Code를 시작했더라도 플랜 모드로 재개됩니다. 해당 대화가 이번 Claude Code 실행에서 이미 열린 적이 있다면(예: 처음 시작한 대화나 `/clear` 또는 `/resume`으로 떠난 대화) 대신 현재 권한 모드에서 계속됩니다.

88 75 

76[거부 규칙](/docs/ko/permissions#manage-permissions)이 [`ExitPlanMode`](/docs/ko/tools-reference) 도구를 제거하면 Claude가 승인을 위해 계획을 제시할 수 없으므로 Claude Code는 플랜 모드를 복원하지 않습니다. 세션은 동일한 명령줄에서 새 세션이 시작될 권한 모드로 시작됩니다. `/resume`을 사용하면 대화는 현재 권한 모드에서 계속됩니다.

77 

89비대화형 및 VS Code 경로에서 플랜 모드 복원은 Claude Code v2.1.246 이상이 필요합니다. 각 행은 세션이 종료된 권한 모드, 재개하는 터미널, 비대화형 및 VS Code 경로 중 어느 것인지, 그리고 Claude Code가 재개된 세션을 시작하는 권한 모드를 나타냅니다.78비대화형 및 VS Code 경로에서 플랜 모드 복원은 Claude Code v2.1.246 이상이 필요합니다. 각 행은 세션이 종료된 권한 모드, 재개하는 터미널, 비대화형 및 VS Code 경로 중 어느 것인지, 그리고 Claude Code가 재개된 세션을 시작하는 권한 모드를 나타냅니다.

90 79 

91| 세션이 종료된 모드 | 재개 방식 | 재개 후 권한 모드 |80| 세션이 종료된 모드 | 재개 방식 | 재개 후 권한 모드 |

92| :- | :- | :- |81| :- | :- | :- |

93| `bypassPermissions` | 터미널 | 새 세션이 시작될 권한 모드입니다. [권한을 다시 우회](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)하려면 시작 시 해당 플래그 중 하나 또는 [사용자, `--settings` 또는 관리형 설정](/docs/ko/settings-reference#permissions-defaultmode)의 `permissions.defaultMode: "bypassPermissions"`로 활성화합니다 |82| `bypassPermissions` | 터미널 | 새 세션이 시작될 권한 모드입니다. [권한을 다시 우회](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)하려면 시작 시 해당 플래그 중 하나 또는 [사용자, `--settings` 또는 관리형 설정](/docs/ko/settings-reference#permissions-defaultmode)의 `permissions.defaultMode: "bypassPermissions"`로 활성화합니다 |

94| `plan` | 터미널 | 플랜 모드입니다. `--fork-session`을 사용하면 새 세션이 시작될 권한 모드입니다 |83| `plan` | 터미널 | 플랜 모드입니다. `--fork-session`을 사용하면 새 세션이 시작될 권한 모드입니다 |

84| `plan` | 터미널(거부 규칙이 `ExitPlanMode`를 제거하는 경우) | 새 세션이 시작될 권한 모드입니다 |

95| `auto` | 터미널 | `auto`(계정이 여전히 [자동 모드 요구 사항](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)을 충족하는 경우에만) |85| `auto` | 터미널 | `auto`(계정이 여전히 [자동 모드 요구 사항](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)을 충족하는 경우에만) |

96| Manual | 터미널 | 새 세션이 [기본 제공 기본값](/docs/ko/permission-modes#which-mode-a-session-starts-in)에서 자동 모드로 시작될 때 수동입니다. 설정 파일의 `defaultMode`가 [적용](/docs/ko/permission-modes#which-mode-a-session-starts-in)되면 Claude Code는 재개된 세션을 해당 모드로 시작합니다 |86| Manual | 터미널 | 새 세션이 [기본 제공 기본값](/docs/ko/permission-modes#which-mode-a-session-starts-in)에서 자동 모드로 시작될 때 수동입니다. 설정 파일의 `defaultMode`가 [적용](/docs/ko/permission-modes#which-mode-a-session-starts-in)되면 Claude Code는 재개된 세션을 해당 모드로 시작합니다 |

97| `plan` | 비대화형([아래 조건](#resume-in-plan-mode-with-p)에서) | 플랜 모드 |87| `plan` | 비대화형([아래 조건](#resume-in-plan-mode-with-p)에서) | 플랜 모드 |


110* `--permission-mode` 또는 `--dangerously-skip-permissions`를 전달하지 않습니다100* `--permission-mode` 또는 `--dangerously-skip-permissions`를 전달하지 않습니다

111* `--fork-session`을 전달하지 않습니다101* `--fork-session`을 전달하지 않습니다

112* 실행이 [채널](/docs/ko/channels)을 통해 시작되지 않습니다102* 실행이 [채널](/docs/ko/channels)을 통해 시작되지 않습니다

103* [거부 규칙](/docs/ko/permissions#manage-permissions)이 `ExitPlanMode` 도구를 제거하지 않습니다

113 104 

114<h3 id="resume-from-a-summary">105<h3 id="resume-from-a-summary">

115 요약에서 재개106 요약에서 재개


117 108 

118Pro 또는 Max 플랜에서 약 1시간 이상 비활성 상태이고 100,000토큰을 초과하는 세션을 재개하면 Claude Code는 대화를 복원한 다음 첫 번째 메시지를 보내기 전에 대화 상자를 엽니다. 세션의 [프롬프트 캐시](/docs/ko/prompt-caching#cache-lifetime)는 그때쯤 만료되므로 다음 요청은 대화 상자의 옵션 중 어느 것을 선택하든 전체 기록을 한 번 처리합니다.109Pro 또는 Max 플랜에서 약 1시간 이상 비활성 상태이고 100,000토큰을 초과하는 세션을 재개하면 Claude Code는 대화를 복원한 다음 첫 번째 메시지를 보내기 전에 대화 상자를 엽니다. 세션의 [프롬프트 캐시](/docs/ko/prompt-caching#cache-lifetime)는 그때쯤 만료되므로 다음 요청은 대화 상자의 옵션 중 어느 것을 선택하든 전체 기록을 한 번 처리합니다.

119 110 

120대화 상자는 세션을 계속하는 세 가지 방법을 제공합니다. 각 방법은 대화의 얼마나 많은 부분을 이후 요청으로 전달하는지에 따라 다르며, 이는 모든 세부 사항을 유지하고 요청당 더 적은 토큰을 보내는 것 사이의 트레이드오프입니다:111대화 상자는 세션을 계속하는 세 가지 방법을 제공합니다:

121 112 

122* **요약에서 재개**: [`/compact`](/docs/ko/context-window#what-survives-compaction)를 즉시 실행합니다. Claude Code는 전체 기록에 대해 하나의 요약 요청을 보낸 다음 기록을 요약, 가장 최근 교환 및 최대 5개의 최근에 읽은 파일로 바꿉니다. 이후 요청은 전체 기록 대신 요약을 전달합니다.113* **요약에서 재개**: [`/compact`](/docs/ko/context-window#what-survives-compaction)를 즉시 실행합니다. 이후 요청은 전체 기록 대신 요약을 전달합니다.

123* **전체 세션을 그대로 재개**: 대화를 변경하지 않고 로드합니다. 첫 번째 메시지를 보낸 후 Claude Code는 전체 기록을 다시 처리하고 다시 캐시한 다음 캐시가 따뜻한 상태로 유지되는 동안 이후 요청에서 캐시에서 다시 읽습니다.114* **전체 세션을 그대로 재개**: 대화를 변경하지 않고 로드합니다.

124* **다시 묻지 않기**: 전체 세션을 재개하고 모든 향후 재개에서 대화 상자 표시를 중지합니다.115* **다시 묻지 않기**: 전체 세션을 재개하고 모든 향후 재개에서 대화 상자 표시를 중지합니다.

125 116 

126그대로 재개하면 대화의 모든 세부 사항을 사용할 수 있으며, 요청당 비용은 대화의 크기에 따라 확장됩니다. 요약에서 재개하면 요약이 전체 기록 대신 전달되므로 이후 각 요청에서 비용이 적게 들지만 요약이 생략한 것은 더 이상 Claude의 컨텍스트에 없습니다. [긴 세션에서 사용량이 증가하는 이유](/docs/ko/costs#why-usage-climbs-in-a-long-session)를 참조하여 요청당 비용이 어디서 나오는지 확인하세요.117그대로 재개하면 대화의 모든 세부 사항을 사용할 수 있으며, 요청당 비용은 대화의 크기에 따라 확장됩니다. 요약에서 재개하면 요약이 전체 기록 대신 전달되므로 이후 각 요청에서 비용이 적게 들지만 요약이 생략한 것은 더 이상 Claude의 컨텍스트에 없습니다. [긴 세션에서 사용량이 증가하는 이유](/docs/ko/costs#why-usage-climbs-in-a-long-session)를 참조하여 요청당 비용이 어디서 나오는지 확인하세요.


136 127 

137`Ctrl+W`를 사용하여 저장소의 모든 worktree로 확장하거나 `Ctrl+A`를 사용하여 이 머신의 모든 프로젝트로 확장합니다.128`Ctrl+W`를 사용하여 저장소의 모든 worktree로 확장하거나 `Ctrl+A`를 사용하여 이 머신의 모든 프로젝트로 확장합니다.

138 129 

139첫 번째 프롬프트가 [`/loop`](/docs/ko/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop) 명령인 세션은 선택기에 나타나지 않으며 `claude --continue`도 이를 건너뜁니다. 대화 후반에 `/loop`를 실행해도 세션이 숨겨지지 않습니다. v2.1.211 이전에는 대화 초반에 `/loop` 실행이 선택기에서 세션을 영구적으로 숨겼습니다.130<h4 id="/loop-p-agent-sdk-and-background-sessions">

131 `/loop`, `-p`, Agent SDK 및 백그라운드 세션

132</h4>

133 

134첫 번째 프롬프트가 [`/loop`](/docs/ko/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop) 명령인 세션은 선택기에 나타나지 않으며 `claude --continue`도 이를 건너뜁니다. 대화 후반에 `/loop`를 실행해도 세션이 숨겨지지 않습니다.

135 

136Claude Code는 [`claude -p`](/docs/ko/headless) 또는 [Agent SDK](/docs/ko/agent-sdk/overview)로 생성된 세션을 세션 선택기 및 `claude --continue`에서 제외합니다. 세션 ID를 `claude --resume <session-id>`에 전달하여 여전히 재개할 수 있습니다. [`claude -p --continue`](/docs/ko/headless#continue-conversations)를 실행하면 Claude Code는 `-p`, SDK 및 `/loop` 세션을 포함합니다.

137 

138`claude --continue`는 완료된 [백그라운드 세션](/docs/ko/agent-view)을 열지만 여전히 실행 중인 세션은 열지 않습니다. 완료된 백그라운드 세션을 열려면 Claude Code v2.1.257 이상이 필요합니다. 가장 최근 대화가 [백그라운드로 이동](/docs/ko/agent-view#send-the-session-to-the-background)한 세션이고 여전히 그곳에서 실행 중인 경우 Claude Code는 `Your most recent conversation is running in the background`와 해당 세션의 ID로 종료됩니다. [`claude agents`](/docs/ko/agent-view#attach-to-a-session)에서 세션에 연결하거나 `claude --resume`을 실행하여 다른 세션을 선택합니다.

140 139 

141[`/cd`](/docs/ko/commands)로 세션을 이동하면 새 디렉토리의 프로젝트 스토리지로 재배치되므로 이후 해당 디렉토리의 선택기에 나타납니다. v2.1.196부터 이동된 세션은 충돌이나 강제 종료 후에도 이전 디렉토리의 선택기에서 제외된 상태로 유지됩니다. 이전 버전에서는 언더스코어와 같은 특수 문자가 포함된 이전 경로가 있을 때 깔끔하지 않은 종료 후 이전 디렉토리의 목록에 다시 나타날 수 있습니다.140<h4 id="sessions-in-other-worktrees-and-projects">

141 다른 worktree 및 프로젝트의 세션

142</h4>

142 143 

143같은 저장소의 다른 worktree에서 세션을 선택하면 그 위치에서 재개됩니다. 세션의 자체 worktree가 더 이상 존재하지 않으면 Claude Code는 [현재 디렉토리에서 재개](/docs/ko/worktrees#resume-a-worktree-session)합니다. 관련 없는 프로젝트에서 세션을 선택하면 Claude Code는 `cd` 및 재개 명령을 클립보드에 복사합니다. 해당 프로젝트의 디렉토리가 더 이상 존재하지 않으면 Claude Code는 실패할 `cd` 명령을 복사하는 대신 현재 디렉토리에서 세션을 재개합니다.144같은 저장소의 다른 worktree에서 세션을 선택하면 그 위치에서 재개됩니다. 세션의 자체 worktree가 더 이상 존재하지 않으면 Claude Code는 [현재 디렉토리에서 재개](/docs/ko/worktrees#resume-a-worktree-session)합니다. 관련 없는 프로젝트에서 세션을 선택하면 Claude Code는 `cd` 및 재개 명령을 클립보드에 복사합니다. 해당 프로젝트의 디렉토리가 더 이상 존재하지 않으면 Claude Code는 실패할 `cd` 명령을 복사하는 대신 현재 디렉토리에서 세션을 재개합니다.

144 145 

146[`/cd`](/docs/ko/commands)로 세션을 이동하면 새 디렉토리의 프로젝트 스토리지로 재배치되므로 이후 해당 디렉토리의 선택기에 나타납니다.

147 

148<h4 id="resume-by-session-id-or-name">

149 세션 ID 또는 이름으로 재개

150</h4>

151 

152`claude --resume <session-id>`는 모든 디렉토리에서 실행할 수 있으므로 다른 곳에서 시작되었거나 [`/cd`](/docs/ko/commands)로 이동한 세션도 재개할 수 있습니다. Claude Code는 다음 순서로 ID를 찾습니다:

153 

1541. 현재 프로젝트 디렉토리 및 해당 git worktree

1552. 이 머신의 다른 모든 프로젝트

156 

157교차 프로젝트 검색은 정확히 하나의 다른 프로젝트가 해당 ID에 대한 메시지가 있는 트랜스크립트를 보유할 때만 ID를 확인하므로, 손으로 복사한 중복이 있으면 Claude Code는 임의의 복사본을 재개하지 않고 찾을 수 없음을 보고합니다. 저장된 세션이 ID와 일치하지 않으면 Claude Code는 `No conversation found with session ID: <session-id>`를 보고합니다.

158 

145이름으로 재개하면 현재 저장소 및 해당 worktree 전체에서 확인됩니다. 두 형식 모두 정확한 일치를 찾고 다른 worktree에 있더라도 직접 재개합니다:159이름으로 재개하면 현재 저장소 및 해당 worktree 전체에서 확인됩니다. 두 형식 모두 정확한 일치를 찾고 다른 worktree에 있더라도 직접 재개합니다:

146 160 

147| 명령 | 정확한 일치 | 모호한 이름 |161| 명령 | 정확한 일치 | 모호한 이름 |


160| 시작 시 | `claude -n auth-refactor` |174| 시작 시 | `claude -n auth-refactor` |

161| 세션 중 | `/rename auth-refactor`. 이름은 프롬프트 표시줄에도 나타납니다 |175| 세션 중 | `/rename auth-refactor`. 이름은 프롬프트 표시줄에도 나타납니다 |

162| 세션 선택기에서 | 세션을 강조 표시하고 `Ctrl+R`을 누릅니다 |176| 세션 선택기에서 | 세션을 강조 표시하고 `Ctrl+R`을 누릅니다 |

163| 계획 수락 시 | [계획 모드](/docs/ko/permission-modes#analyze-before-you-edit-with-plan-mode)에서 계획을 수락하면 이미 설정하지 않은 경우 계획 내용에 따라 세션에 생성된 제목을 부여합니다 |177| 계획 수락 시 | [플랜 모드](/docs/ko/permission-modes#analyze-before-you-edit-with-plan-mode)에서 계획을 수락하면 이미 이름을 지정하지 않은 경우 계획 내용에 따라 세션에 생성된 제목을 부여합니다 |

164| claude.ai 또는 Claude 앱에서 | [원격 제어 세션](/docs/ko/remote-control#connect-from-another-device)의 이름을 변경합니다. Claude Code는 CLI에서 동일한 이름을 적용합니다. Claude Code v2.1.221 이상이 필요합니다 |178| claude.ai 또는 Claude 앱에서 | [Remote Control 세션](/docs/ko/remote-control#connect-from-another-device)의 이름을 변경합니다. Claude Code는 CLI에서 동일한 이름을 적용합니다. Claude Code v2.1.221 이상이 필요합니다 |

165| 데스크톱 앱에서 | [데스크톱 앱](/docs/ko/desktop#work-in-parallel-with-sessions)에서 세션의 이름을 변경합니다 |179| 데스크톱 앱에서 | [데스크톱 앱](/docs/ko/desktop#work-in-parallel-with-sessions)에서 세션의 이름을 변경합니다 |

166 180 

167CLI 경로를 통해 또는 claude.ai에서 세션의 이름을 지정한 후 `claude --resume <name>` 또는 `/resume <name>`으로 돌아갑니다. 데스크톱 앱 세션은 [데스크톱 앱](/docs/ko/desktop#work-in-parallel-with-sessions)에서 재개됩니다. worktree 전체에서 이름 확인이 어떻게 작동하는지는 [세션 재개](#resume-a-session)를 참조합니다.181CLI 경로를 통해 또는 claude.ai에서 세션의 이름을 지정한 후 `claude --resume <name>` 또는 `/resume <name>`으로 돌아갑니다. 데스크톱 앱 세션은 [데스크톱 앱](/docs/ko/desktop#work-in-parallel-with-sessions)에서 재개됩니다. worktree 전체에서 이름 확인이 어떻게 작동하는지는 [세션 재개](#resume-a-session)를 참조합니다.

168 182 

169이 머신의 다른 활성 세션이 이미 사용 중인 이름으로 대화형 세션을 시작하거나 재개하거나, 세션의 이름을 그러한 이름으로 변경하면, Claude Code는 이미 해당 이름을 가진 세션에 이름을 남기고, 사용자의 세션 이름을 `auth-refactor-graceful-unicorn`과 같은 두 단어 접미사가 있는 변형으로 변경하고 알려줍니다. 직접 선택하려면 새 이름으로 `/rename`을 실행합니다. v2.1.232 이전에는 두 세션 모두 이름을 유지했습니다.

170 

171Claude Code가 중복 이름을 변경하지 않는 세 가지 경우가 있으므로 목록에서 동일한 이름을 가진 두 세션을 볼 수 있습니다:

172 

173* AI 생성 제목이나 기본 표시 이름을 확인하지 않습니다.

174* 시작 시 [백그라운드](/docs/ko/agent-view#from-your-shell) 또는 `-p` 세션의 `--name`을 확인하지 않습니다.

175* 이전 버전의 Claude Code에서 세션의 이름을 변경할 수 없습니다.

176 

177이름을 지정하지 않은 세션도 Claude Code가 할당하는 두 가지 레이블을 받습니다. 생성된 제목만 재개 핸들로 작동합니다:183이름을 지정하지 않은 세션도 Claude Code가 할당하는 두 가지 레이블을 받습니다. 생성된 제목만 재개 핸들로 작동합니다:

178 184 

179* 기본 표시 이름: 이름을 지정하지 않은 대화형 세션도 시작할 때 기본 표시 이름을 받습니다. Claude Code v2.1.196 이상이 필요합니다. 기본값은 작업 디렉토리의 이름과 두 문자 접미사를 결합합니다(예: `my-app-3f`). 이는 [에이전트 보기](/docs/ko/agent-view) 및 `claude agents --json` 출력과 같은 실행 중인 세션의 목록에서 세션을 식별합니다. 기본값은 재개 핸들이 아닙니다. `claude --resume` 또는 `/resume`에 전달하면 Claude Code는 세션을 찾지 못합니다. 세션의 이름을 지정하면 해당 목록에서 기본값이 바뀌고, 계획을 수락해도 마찬가지입니다.185* 기본 표시 이름: 이름을 지정하지 않은 대화형 세션도 시작할 때 기본 표시 이름을 받습니다. Claude Code v2.1.196 이상이 필요합니다. 기본값은 작업 디렉터리의 이름과 두 문자 접미사를 결합합니다(예: `my-app-3f`). 이는 [에이전트 보기](/docs/ko/agent-view) 및 `claude agents --json` 출력과 같은 실행 중인 세션의 목록에서 세션을 식별합니다. 기본값은 재개 핸들이 아닙니다. `claude --resume` 또는 `/resume`에 전달하면 Claude Code는 세션을 찾지 못합니다.

180* 생성된 제목: 세션의 이름을 지정하지 않으면 Claude Code는 세션 제목을 생성합니다. 제목은 첫 번째 프롬프트의 짧은 요약으로, 일반적으로 Haiku 클래스 모델인 소형/빠른 모델에 대한 백그라운드 요청으로 작성됩니다. 계획을 수락하면 계획 기반 제목으로 바뀝니다. 세션의 이름을 지정하면 생성된 제목이 바뀝니다. 첫 번째 프롬프트 제목은 [세션 선택기](#use-the-session-picker)와 이름이 설정되지 않았을 때 상태 표시줄 [`session_name`](/docs/ko/statusline) 필드에 표시됩니다. 계획 제목은 동일한 두 위치에 표시되며 기본 표시 이름을 대신하는 실행 중인 세션의 목록에도 표시됩니다. 두 제목 중 하나를 `claude --resume` 또는 `/resume`에 전달할 수 있으며, Claude Code는 설정한 이름과 동일한 방식으로 확인합니다.186* 생성된 제목: 세션의 이름을 지정하지 않으면 Claude Code는 세션 제목을 생성합니다. 제목은 첫 번째 프롬프트의 짧은 요약으로, 일반적으로 Haiku 클래스 모델인 소형/빠른 모델에 대한 백그라운드 요청으로 작성됩니다. 셸이나 스크립트에서 직접 시작한 `claude -p` 실행은 제목을 받지 않습니다.

187 

188 계획을 수락하면 생성된 제목이 계획 기반 제목으로 바뀝니다. 두 제목 중 하나를 `claude --resume` 또는 `/resume`에 전달할 수 있으며, Claude Code는 설정한 이름과 동일한 방식으로 확인합니다.

181 189 

182<h2 id="use-the-session-picker">190<h2 id="use-the-session-picker">

183 세션 선택기 사용191 세션 선택기 사용


199| `Ctrl+B` | 현재 git 분기의 세션으로 필터링합니다. 다시 누르면 모든 분기를 표시합니다 |207| `Ctrl+B` | 현재 git 분기의 세션으로 필터링합니다. 다시 누르면 모든 분기를 표시합니다 |

200| `Esc` | 세션 선택기 또는 검색 모드를 종료합니다 |208| `Esc` | 세션 선택기 또는 검색 모드를 종료합니다 |

201 209 

202각 행은 설정된 경우 세션 이름을 표시하고, 그렇지 않으면 AI 생성 세션 제목, 대화 요약 또는 첫 번째 프롬프트와 마지막 활동 이후 경과 시간, git 분기 및 파일 크기를 표시합니다. `Ctrl+A`로 모든 프로젝트로 확장하면 각 세션의 프로젝트 경로도 표시됩니다.210각 행은 설정된 경우 세션 이름을 표시하고, 그렇지 않으면 AI 생성 세션 제목, 대화 요약 또는 첫 번째 프롬프트와 마지막 활동 이후 경과 시간, git 브랜치 및 파일 크기를 표시합니다.

203 211 

204`/branch` 또는 `--fork-session`으로 생성된 세션은 자신의 세션 ID를 가지며 별도의 행으로 나타납니다. 선택기가 동일한 세션에 대해 둘 이상의 항목을 찾으면 단일 행 아래에 그룹화됩니다. `→`를 눌러 그룹을 확장합니다.212`/branch` 또는 `--fork-session`으로 생성된 세션은 자신의 세션 ID를 가지며 별도의 행으로 나타납니다. 선택기가 동일한 세션에 대해 둘 이상의 항목을 찾으면 단일 행 아래에 그룹화됩니다. `→`를 눌러 그룹을 확장합니다.

205 213 

206Claude Code가 `claude --resume` 선택기에서 선택한 세션을 로드할 수 없으면 [`Failed to resume the conversation`](/docs/ko/errors#failed-to-resume-the-conversation) 메시지를 인쇄하고 재시도 명령을 표시한 후 코드 1로 종료됩니다. 세션 내의 `/resume` 선택기에서 Claude Code는 실패를 보고하고 현재 대화는 계속 실행됩니다.214Claude Code가 `claude --resume` 선택기에서 선택한 세션을 로드할 수 없으면 [`Failed to resume the conversation`](/docs/ko/errors#failed-to-resume-the-conversation) 메시지를 인쇄하고 재시도 명령을 표시한 후 코드 1로 종료됩니다. 세션 내의 `/resume` 선택기에서 Claude Code는 실패를 보고하고 현재 대화는 계속 실행됩니다.

207 215 

208<h2 id="branch-a-session">216<h2 id="branch-a-session">

209 세션 분기217 세션 분기하기

210</h2>218</h2>

211 219 

212분기는 지금까지의 대화 복사본을 만들고 이를 전환하여 원본은 그대로 유지합니다. 진행 중인 경로를 잃지 않고 다른 접근 방식을 시도하는 데 사용합니다.220분기하면 지금까지의 대화 사본이 만들어지고 해당 사본으로 전환되며, 원본은 그대로 유지됩니다. 진행 중이던 흐름을 잃지 않고 다른 접근 방식을 시도할 때 사용합니다.

213 221 

214세션 내에서 선택적 이름과 함께 `/branch`를 실행합니다:222세션 내에서 선택적으로 이름을 지정하여 `/branch`를 실행합니다.

215 223 

216```text theme={null}224```text theme={null}

217/branch try-streaming-approach225/branch try-streaming-approach

218```226```

219 227 

220이름을 생략하면 Claude Code는 대화의 첫 번째 프롬프트 이후로 새 분기의 이름을 지정합니다. v2.1.198부터 이는 [압축](/docs/ko/how-claude-code-works#when-context-fills-up) 이후에도 적용됩니다. 이전 버전은 압축 요약을 지나 원본 첫 번째 프롬프트를 찾는 대신 리터럴 이름 `Branched conversation`으로 폴백했습니다.228이름을 생략하면 Claude Code가 대화의 첫 번째 프롬프트를 기준으로 새 분기의 이름을 지정합니다.

221 229 

222명령줄에서 `--continue` 또는 `--resume`을 `--fork-session`과 결합합니다:230명령줄에서는 `--continue` 또는 `--resume`을 `--fork-session`과 함께 사용합니다.

223 231 

224```bash theme={null}232```bash theme={null}

225claude --continue --fork-session233claude --continue --fork-session

226```234```

227 235 

228`/branch` 확인은 두 개의 세션 ID를 인쇄합니다: 현재 있는 새 분기와 원본입니다. 원본은 디스크에서 변경되지 않으며 세션 선택기에서 사용 가능하게 유지됩니다. `/resume <original-name>`을 사용하거나 해당 ID를 `/resume`에 전달하여 원본으로 돌아갑니다.236`/branch` 확인 메시지에는 두 개의 세션 ID가 출력됩니다. 하나는 현재 전환된 새 분기의 ID이고, 다른 하나는 원본의 ID입니다. 원본은 디스크에 변경 없이 남아 있으며 세션 선택기에도 계속 표시됩니다. `/resume <original-name>`을 실행하거나 해당 ID를 `/resume`에 전달하여 원본으로 돌아갈 수 있습니다.

229 237 

230`/branch`는 대화 기록을 복사하고 실행 중인 Claude Code 프로세스를 이로 전환합니다. 이 구분은 분기가 상속하는 항목을 결정합니다:238`/branch`는 트랜스크립트를 복사하고, 실행 중인 Claude Code 프로세스가 복사된 트랜스크립트에 기록하도록 전환합니다. 이 차이에 따라 분기가 무엇을 이어받는지가 결정됩니다.

231 239 

232| 상태 | `/branch` 이후 |240| 상태 | `/branch` 이후 |

233| :- | :- |241| :- | :- |

234| 대화 기록 | `/branch`를 실행한 시점까지 분기로 복사됨 |242| 대화 기록 | `/branch`를 실행한 시점까지의 내용이 분기에 복사됩니다 |

235| "이 세션에 대해 허용" 권한 부여 | 이월됨; 분기는 같은 프로세스에서 실행되므로 기존 부여가 계속 적용됩니다. `--fork-session`으로 별도 프로세스로 포크하면 새 프로세스는 이를 시작하지 않으며 해당 위치에서 다시 승인합니다 |243| "이 세션에 대해 허용" 권한 부여 | 그대로 이어집니다. 분기는 동일한 프로세스에서 실행되므로 기존 권한 부여가 계속 적용됩니다. `--fork-session`으로 별도 프로세스에 분기하면 새 프로세스는 기존 권한 부여가 없는 상태로 시작되므로 해당 프로세스에서 다시 승인해야 합니다 |

236| 진행 중인 [백그라운드 서브에이전트](/docs/ko/sub-agents#run-subagents-in-foreground-or-background) 및 [백그라운드 Bash 명령](/docs/ko/interactive-mode#background-bash-commands) | 계속 실행됩니다. 이들의 출력은 원본 세션이 아닌 전환한 새 분기에 나타납니다 |244| 실행 중인 [백그라운드 서브에이전트](/docs/ko/sub-agents#run-subagents-in-foreground-or-background) 및 [백그라운드 Bash 명령](/docs/ko/interactive-mode#background-bash-commands) | 계속 실행됩니다. 출력은 원래 세션이 아니라 전환된 새 분기에 표시됩니다 |

237| [Remote Control](/docs/ko/remote-control) 연결 | 연결 유지됩니다. 세션에 연결된 휴대폰 또는 브라우저는 사용자와 함께 분기로 이동하고 해당 위치에서 새 메시지를 계속 수신합니다 |245| [Remote Control](/docs/ko/remote-control) 연결 | 연결이 유지됩니다. 세션에 연결된 휴대폰이나 브라우저가 분기로 함께 전환되어 해당 분기에서 새 메시지를 계속 수신합니다 |

238 246 

239포크하지 않고 두 터미널에서 같은 세션을 재개하면 두 터미널의 메시지가 하나의 대화 기록으로 인터리브됩니다. 단일 세션 내에서 체크포인트 기반 되감기는 [체크포인팅](/docs/ko/checkpointing)을 참조합니다.247분기하지 않고 두 터미널에서 같은 세션을 재개하면 양쪽의 메시지가 하나의 트랜스크립트에 뒤섞여 기록됩니다. 단일 세션 내에서 체크포인트 기반으로 되감으려면 [체크포인트](/docs/ko/checkpointing)를 참조하세요.

240 248 

241<h2 id="manage-context-within-a-session">249<h2 id="manage-context-within-a-session">

242 세션 내 컨텍스트 관리250 세션 내 컨텍스트 관리


244 252 

245이 명령은 세션을 떠나지 않고 컨텍스트 윈도우에 있는 내용을 제어합니다:253이 명령은 세션을 떠나지 않고 컨텍스트 윈도우에 있는 내용을 제어합니다:

246 254 

247* **`/clear`**: 빈 컨텍스트로 새로 시작합니다. Claude Code는 이전 대화를 저장하며, `/resume`으로 재개하거나, 동일한 Claude Code 프로세스에서 [되감기 메뉴의 이전 세션 항목](/docs/ko/checkpointing#rewind-past-a-cleared-conversation)에서 재개할 수 있습니다. 인수가 없으면 새 대화는 `--name` 또는 `/rename`으로 설정한 이름을 유지하지만 AI가 생성한 세션 제목은 유지하지 않습니다. 대신 떠나는 대화의 이름을 지정하려면 `/clear release-prep`처럼 이름을 전달하면 새 대화가 이름 없이 시작됩니다255* **`/clear`**: 빈 컨텍스트로 새로 시작합니다. Claude Code는 이전 세션을 저장하며, `/resume`으로 재개하거나, 동일한 Claude Code 프로세스에서 [되감기 메뉴의 이전 세션 항목](/docs/ko/checkpointing#rewind-past-a-cleared-conversation)에서 재개할 수 있습니다. 인수가 없으면 새 세션은 `--name` 또는 `/rename`으로 설정한 이름을 유지하지만 AI가 생성한 세션 제목은 유지하지 않습니다. 대신 떠나는 세션의 이름을 지정하려면 `/clear release-prep`처럼 이름을 전달하면 새 세션이 이름 없이 시작됩니다

248* **`/compact [instructions]`**: 기록을 요약으로 바꾸고, 선택적으로 지정한 내용에 초점을 맞춥니다256* **`/compact [instructions]`**: 기록을 요약으로 바꾸고, 선택적으로 지정한 내용에 초점을 맞춥니다

249* **`/context`**: 현재 컨텍스트를 소비하는 것을 표시합니다257* **`/context`**: 현재 컨텍스트를 소비하는 것을 표시합니다

250 258 

settings.md +2 −2

Details

495 495 

496v2.1.211 이전에는 Claude Code가 시작 디렉터리에 파일을 보관했습니다. 이전 버전이 루트 파일 옆에 남긴 파일을 여전히 읽습니다. 두 파일이 동일한 키를 설정하는 경우 루트의 값이 적용되고, 두 파일의 권한 규칙이 적용됩니다. Agent SDK의 [`resolveSettings()`](/docs/ko/agent-sdk/typescript#resolvesettings) 헬퍼는 항상 시작 디렉터리에서 파일을 읽습니다.496v2.1.211 이전에는 Claude Code가 시작 디렉터리에 파일을 보관했습니다. 이전 버전이 루트 파일 옆에 남긴 파일을 여전히 읽습니다. 두 파일이 동일한 키를 설정하는 경우 루트의 값이 적용되고, 두 파일의 권한 규칙이 적용됩니다. Agent SDK의 [`resolveSettings()`](/docs/ko/agent-sdk/typescript#resolvesettings) 헬퍼는 항상 시작 디렉터리에서 파일을 읽습니다.

497 497 

498Claude Code는 공유 `.claude/settings.json`을 세션의 [기본 작업 디렉터리](/docs/ko/permissions#working-directories)에서 읽으므로, 저장소 루트에 커밋된 파일을 사용하려면 거기서 Claude Code를 시작합니다. [`/cd`로 세션을 이동](/docs/ko/permissions#move-the-session-to-another-directory)한 후, Claude Code는 대신 새 디렉터리에서 두 프로젝트 파일을 읽으며, 로컬 파일을 동일한 규칙으로 배치합니다. 이동한 디렉터리에서 읽으려면 Claude Code v2.1.246 이상이 필요합니다.498Claude Code는 공유 `.claude/settings.json`을 세션의 [기본 작업 디렉터리](/docs/ko/permissions#working-directories)에서 읽으므로, 저장소 루트에 커밋된 파일을 사용하려면 거기서 Claude Code를 시작합니다. [`/cd`로 세션을 이동](/docs/ko/permissions#move-the-session-to-another-directory)한 후, Claude Code는 대신 새 디렉터리에서 두 프로젝트 파일을 읽으며, 로컬 파일을 동일한 규칙으로 배치합니다. 이동한 디렉터리에서 읽으려면 Claude Code v2.1.246 이상이 필요합니다. 데스크톱 앱에서 시작하는 worktree 세션의 경우 [worktree가 주 체크아웃과 공유하는 항목](/docs/ko/worktrees#what-worktrees-share-with-the-main-checkout)을 참조합니다.

499 499 

500<span id="managed-settings-delivery" />500<span id="managed-settings-delivery" />

501 501 


767 767 

768두 가지가 `.claude/settings.json`의 키가 이를 복제하는 모든 사람에게 적용되는 것을 방지합니다.768두 가지가 `.claude/settings.json`의 키가 이를 복제하는 모든 사람에게 적용되는 것을 방지합니다.

769 769 

770* **Claude Code는 저장소 파일의 키를 무시합니다.** [설정 인덱스](/docs/ko/settings-reference#settings-index)의 범위 열에서 `User, local, or managed`, `User or managed`, `Managed`, 또는 `Global config`를 찾습니다. 이러한 키는 공유 파일에서 적용되지 않으며, 저장소 파일이 여전히 끌 수 있는 몇 가지 키만 예외입니다. 해당 항목은 각각 범위 줄에 이를 명시합니다. `Global config` 키는 `~/.claude.json`에서만 적용됩니다.770* **Claude Code는 저장소 파일의 키를 무시합니다.** [설정 인덱스](/docs/ko/settings-reference#settings-index)의 범위 열에서 `User, local, or managed`, `User or managed`, `User`, `Managed`, 또는 `Global config`를 찾습니다. 이러한 키는 공유 파일에서 적용되지 않으며, 저장소 파일이 여전히 끌 수 있는 몇 가지 키만 예외입니다. 해당 항목은 각각 범위 줄에 이를 명시합니다. `Global config` 키는 `~/.claude.json`에서만 적용됩니다.

771 771 

772 `env` 키 내에서, 텔레메트리 내보내기 변수도 공유 파일에서 적용되지 않습니다. 몇 가지 끄기 값은 제외합니다. [Claude Code가 `env`에서 무시하는 변수](/docs/ko/settings-reference#variables-claude-code-ignores-in-env)를 참조하세요.772 `env` 키 내에서, 텔레메트리 내보내기 변수도 공유 파일에서 적용되지 않습니다. 몇 가지 끄기 값은 제외합니다. [Claude Code가 `env`에서 무시하는 변수](/docs/ko/settings-reference#variables-claude-code-ignores-in-env)를 참조하세요.

773* **키가 신뢰를 기다립니다.** `permissions.allow` 규칙, `permissions.additionalDirectories`, `extraKnownMarketplaces`, 및 대부분의 [`env`](/docs/ko/settings-reference#env) 값은 각 팀원이 [폴더를 신뢰](/docs/ko/permissions#project-allow-rules-and-workspace-trust)한 후에만 적용됩니다. 그때까지 그들은 여전히 프롬프트를 보고 파일이 선언하는 마켓플레이스에서 플러그인을 얻지 못합니다. `deny`와 `ask` 규칙은 즉시 적용됩니다.773* **키가 신뢰를 기다립니다.** `permissions.allow` 규칙, `permissions.additionalDirectories`, `extraKnownMarketplaces`, 및 대부분의 [`env`](/docs/ko/settings-reference#env) 값은 각 팀원이 [폴더를 신뢰](/docs/ko/permissions#project-allow-rules-and-workspace-trust)한 후에만 적용됩니다. 그때까지 그들은 여전히 프롬프트를 보고 파일이 선언하는 마켓플레이스에서 플러그인을 얻지 못합니다. `deny`와 `ask` 규칙은 즉시 적용됩니다.

Details

582<ReferenceFilter582<ReferenceFilter

583 noun="settings"583 noun="settings"

584 placeholder="Filter settings by key or purpose"584 placeholder="Filter settings by key or purpose"

585 facetOrder={{ scope: ["Any file", "User, local, or managed", "User or managed", "Managed", "Global config"] }}585 facetOrder={{ scope: ["Any file", "User, local, or managed", "User or managed", "User", "Managed", "Global config"] }}

586 columnHelp={{586 columnHelp={{

587topic: "The section of this page that holds the entry. Use Sort by to group the table by topic.",587topic: "The section of this page that holds the entry. Use Sort by to group the table by topic.",

588scope: "Which settings files can set the key: user (~/.claude/settings.json), project (.claude/settings.json), local (.claude/settings.local.json), or managed (deployed by your organization). Global config keys are in ~/.claude.json instead.",588scope: "Which settings files can set the key: user (~/.claude/settings.json), project (.claude/settings.json), local (.claude/settings.local.json), or managed (deployed by your organization). Global config keys are in ~/.claude.json instead.",


638| [`claudeMdExcludes`](#claudemdexcludes) | 메모리가 로드될 때 특정 [CLAUDE.md](/docs/ko/memory#exclude-specific-claude-md-files) 파일 건너뛰기 | 메모리 및 컨텍스트 | 모든 파일 |638| [`claudeMdExcludes`](#claudemdexcludes) | 메모리가 로드될 때 특정 [CLAUDE.md](/docs/ko/memory#exclude-specific-claude-md-files) 파일 건너뛰기 | 메모리 및 컨텍스트 | 모든 파일 |

639| [`cleanupPeriodDays`](#cleanupperioddays) | Claude Code가 [트랜스크립트](/docs/ko/data-usage#data-retention)를 삭제하기 전에 유지하는 일 수 선택 | 개인정보 보호 및 텔레메트리 | 모든 파일 |639| [`cleanupPeriodDays`](#cleanupperioddays) | Claude Code가 [트랜스크립트](/docs/ko/data-usage#data-retention)를 삭제하기 전에 유지하는 일 수 선택 | 개인정보 보호 및 텔레메트리 | 모든 파일 |

640| [`companyAnnouncements`](#companyannouncements) | 시작 시 조직의 공지사항 표시 | 인터페이스 및 터미널 | 모든 파일 |640| [`companyAnnouncements`](#companyannouncements) | 시작 시 조직의 공지사항 표시 | 인터페이스 및 터미널 | 모든 파일 |

641| [`copyFullResponse`](#copyfullresponse) | [`/copy`](/docs/ko/commands)가 코드 블록 선택기를 표시하지 않고 전체 응답을 복사하도록 만들기 | 전역 설정 | 전역 설정 |641| [`copyFullResponse`](#copyfullresponse) | [`/copy`](/docs/ko/commands)가 선택기를 표시하지 않고 전체 응답을 복사하도록 만들기 | 전역 설정 | 전역 설정 |

642| [`copyOnSelect`](#copyonselect) | [전체 화면 렌더링](/docs/ko/fullscreen#use-the-mouse) 및 에이전트 보기에서 마우스로 선택한 텍스트의 자동 복사 끄기 | 전역 설정 | 전역 설정 |642| [`copyOnSelect`](#copyonselect) | [전체 화면 렌더링](/docs/ko/fullscreen#use-the-mouse) 및 에이전트 보기에서 마우스로 선택한 텍스트의 자동 복사 끄기 | 전역 설정 | 전역 설정 |

643| [`crossSessionInbound`](#crosssessioninbound) | Claude Code가 [다른 세션의 메시지](/docs/ko/cross-session-messaging#control-inbound-messages)를 전달하는지, 전달하지 않고 공지를 표시하는지, 거부하는지 선택 | 에이전트, 세션, 워크트리 | 모든 파일 |643| [`crossSessionInbound`](#crosssessioninbound) | Claude Code가 [다른 세션의 메시지](/docs/ko/cross-session-messaging#control-inbound-messages)를 전달하는지, 전달하지 않고 공지를 표시하는지, 거부하는지 선택 | 에이전트, 세션, 워크트리 | 모든 파일 |

644| [`defaultShell`](#defaultshell) | [`!` 접두사](/docs/ko/interactive-mode#shell-mode-with-prefix)로 입력한 셸 명령을 Bash 또는 PowerShell 중 어느 것이 실행할지 선택 | 인터페이스 및 터미널 | 모든 파일 |644| [`defaultShell`](#defaultshell) | [`!` 접두사](/docs/ko/interactive-mode#shell-mode-with-prefix)로 입력한 셸 명령을 Bash 또는 PowerShell 중 어느 것이 실행할지 선택 | 인터페이스 및 터미널 | 모든 파일 |


684| [`fileCheckpointingEnabled`](#filecheckpointingenabled) | [`/rewind`](/docs/ko/checkpointing)가 복원하는 파일 스냅샷 끄기 또는 켜기 | 메모리 및 컨텍스트 | 모든 파일 |684| [`fileCheckpointingEnabled`](#filecheckpointingenabled) | [`/rewind`](/docs/ko/checkpointing)가 복원하는 파일 스냅샷 끄기 또는 켜기 | 메모리 및 컨텍스트 | 모든 파일 |

685| [`fileSuggestion`](#filesuggestion) | 자신의 명령에서 [`@` 파일 자동 완성](/docs/ko/interactive-mode#quick-commands) 제공 | 인터페이스 및 터미널 | 모든 파일 |685| [`fileSuggestion`](#filesuggestion) | 자신의 명령에서 [`@` 파일 자동 완성](/docs/ko/interactive-mode#quick-commands) 제공 | 인터페이스 및 터미널 | 모든 파일 |

686| [`footerLinksRegexes`](#footerlinksregexes) | 출력의 이슈 또는 리뷰 ID를 입력 상자 아래의 [클릭 가능한 링크](/docs/ko/statusline#clickable-links)로 만들기 | 인터페이스 및 터미널 | 사용자 또는 관리됨 |686| [`footerLinksRegexes`](#footerlinksregexes) | 출력의 이슈 또는 리뷰 ID를 입력 상자 아래의 [클릭 가능한 링크](/docs/ko/statusline#clickable-links)로 만들기 | 인터페이스 및 터미널 | 사용자 또는 관리됨 |

687| [`forceLoginGatewayUrl`](#forcelogingatewayurl) | 로그인 화면이 연결하는 [게이트웨이 URL](/docs/ko/claude-apps-gateway#set-the-gateway-url) 설정 | 인증 및 공급자 | 관리됨 |687| [`forceLoginGatewayUrl`](#forcelogingatewayurl) | 로그인 화면이 연결하는 [게이트웨이 URL](/docs/ko/claude-apps-gateway#set-the-gateway-url) 설정 | 인증 및 공급자 | 사용자 또는 관리됨 |

688| [`forceLoginMethod`](#forceloginmethod) | [로그인을 제한](/docs/ko/authentication#restrict-login-to-your-organization)하여 claude.ai, Claude Console 또는 [클라우드 게이트웨이](/docs/ko/claude-apps-gateway)만 허용 | 인증 및 공급자 | 모든 파일 |688| [`forceLoginMethod`](#forceloginmethod) | [로그인을 제한](/docs/ko/authentication#restrict-login-to-your-organization)하여 claude.ai, Claude Console 또는 [클라우드 게이트웨이](/docs/ko/claude-apps-gateway)만 허용 | 인증 및 공급자 | 모든 파일 |

689| [`forceLoginOrgUUID`](#forceloginorguuid) | [claude.ai 로그인을 조직에 고정](/docs/ko/authentication#restrict-login-to-your-organization); 관리형 소스만 적용 | 인증 및 공급자 | 모든 파일 |689| [`forceLoginOrgUUID`](#forceloginorguuid) | [claude.ai 로그인을 조직에 고정](/docs/ko/authentication#restrict-login-to-your-organization); 관리형 소스만 적용 | 인증 및 공급자 | 모든 파일 |

690| [`forceRemoteSettingsRefresh`](#forceremotesettingsrefresh) | [서버 관리형 설정](/docs/ko/server-managed-settings)을 새로 가져올 때까지 시작 차단 | 엔터프라이즈 및 관리형 설정 | 관리됨 |690| [`forceRemoteSettingsRefresh`](#forceremotesettingsrefresh) | [서버 관리형 설정](/docs/ko/server-managed-settings)을 새로 가져올 때까지 시작 차단 | 엔터프라이즈 및 관리형 설정 | 관리됨 |


831| [`worktree`](#worktree) | Claude Code가 git [worktree](/docs/ko/worktrees)를 생성하는 방법 구성 | 에이전트, 세션, 워크트리 | 모든 파일 |831| [`worktree`](#worktree) | Claude Code가 git [worktree](/docs/ko/worktrees)를 생성하는 방법 구성 | 에이전트, 세션, 워크트리 | 모든 파일 |

832| [`worktree.baseRef`](#worktree-baseref) | 새 [워크트리](/docs/ko/worktrees)를 원격 기본 브랜치 또는 로컬 HEAD에서 생성 | 에이전트, 세션, 워크트리 | 모든 파일 |832| [`worktree.baseRef`](#worktree-baseref) | 새 [워크트리](/docs/ko/worktrees)를 원격 기본 브랜치 또는 로컬 HEAD에서 생성 | 에이전트, 세션, 워크트리 | 모든 파일 |

833| [`worktree.bgIsolation`](#worktree-bgisolation) | 백그라운드 세션이 [워크트리](/docs/ko/worktrees) 없이 작업 복사본을 편집하도록 허용 | 에이전트, 세션, 워크트리 | 모든 파일 |833| [`worktree.bgIsolation`](#worktree-bgisolation) | 백그라운드 세션이 [워크트리](/docs/ko/worktrees) 없이 작업 복사본을 편집하도록 허용 | 에이전트, 세션, 워크트리 | 모든 파일 |

834| [`worktree.location`](#worktree-location) | [Desktop SSH 세션](/docs/ko/desktop#ssh-sessions)이 원격 기기에서 워크트리를 생성하는 위치 선택 | 에이전트, 세션, 워크트리 | 사용자 |

834| [`worktree.sparsePaths`](#worktree-sparsepaths) | 각 [워크트리](/docs/ko/worktrees)에서 필요한 디렉터리만 체크아웃 | 에이전트, 세션, 워크트리 | 모든 파일 |835| [`worktree.sparsePaths`](#worktree-sparsepaths) | 각 [워크트리](/docs/ko/worktrees)에서 필요한 디렉터리만 체크아웃 | 에이전트, 세션, 워크트리 | 모든 파일 |

835| [`worktree.symlinkDirectories`](#worktree-symlinkdirectories) | 각 [워크트리](/docs/ko/worktrees)에 큰 디렉터리를 복제하는 대신 심볼릭 링크로 연결 | 에이전트, 세션, 워크트리 | 모든 파일 |836| [`worktree.symlinkDirectories`](#worktree-symlinkdirectories) | 각 [워크트리](/docs/ko/worktrees)에 큰 디렉터리를 복제하는 대신 심볼릭 링크로 연결 | 에이전트, 세션, 워크트리 | 모든 파일 |

836| [`wslInheritsWindowsSettings`](#wslinheritswindowssettings) | WSL이 Windows 정책 체인에서 [관리형 설정](/docs/ko/managed-settings)을 읽도록 함 | 엔터프라이즈 및 관리형 설정 | 관리됨 |837| [`wslInheritsWindowsSettings`](#wslinheritswindowssettings) | WSL이 Windows 정책 체인에서 [관리형 설정](/docs/ko/managed-settings)을 읽도록 함 | 엔터프라이즈 및 관리형 설정 | 관리됨 |


1763 * `"acceptEdits"`: Claude Code는 또한 파일 편집 및 `mkdir` 및 `mv` 같은 일반적인 파일 시스템 명령을 묻지 않고 실행합니다1764 * `"acceptEdits"`: Claude Code는 또한 파일 편집 및 `mkdir` 및 `mv` 같은 일반적인 파일 시스템 명령을 묻지 않고 실행합니다

1764 * `"plan"`: Claude Code는 읽고 계획하지만 계획을 승인할 때까지 편집을 차단합니다1765 * `"plan"`: Claude Code는 읽고 계획하지만 계획을 승인할 때까지 편집을 차단합니다

1765 * `"auto"`: Claude Code는 일상적인 프롬프트 없이 실행됩니다. 셸 명령 및 네트워크 요청 같은 작업이 실행되기 전에 백그라운드 분류기가 해당 작업이 사용자의 요청과 일치하는지 확인합니다1766 * `"auto"`: Claude Code는 일상적인 프롬프트 없이 실행됩니다. 셸 명령 및 네트워크 요청 같은 작업이 실행되기 전에 백그라운드 분류기가 해당 작업이 사용자의 요청과 일치하는지 확인합니다

1766 * `"dontAsk"`: Claude Code는 원래 확인을 요청했을 모든 호출을 자동으로 거부합니다. 읽기, 승인이 필요 없는 다른 작업 및 사전 승인된 도구는 여전히 실행됩니다1767 * `"dontAsk"`: Claude Code는 원래 확인을 요청했을 모든 호출을 자동으로 거부합니다. 작업 디렉터리 내부의 파일 읽기, 승인이 필요 없는 다른 작업 및 사전 승인된 도구는 여전히 실행됩니다. 단, [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기는 제외됩니다

1767 * `"bypassPermissions"`: Claude Code는 묻지 않고 모든 것을 실행합니다1768 * `"bypassPermissions"`: Claude Code는 묻지 않고 모든 것을 실행합니다

1768 * `"manual"`: `"default"`의 별칭입니다1769 * `"manual"`: `"default"`의 별칭입니다

1769* **기본값**: 설정되지 않음1770* **기본값**: 설정되지 않음


2398 2399 

2399* 유효한 `path` 또는 `name` 및 `mask` 또는 `deny`의 `mode`를 여전히 가진 `files` 또는 `envVars`의 항목(예: `extract` 패턴에 캡처 그룹이 없는 항목)은 경고와 함께 `mode: "deny"`로 저하되므로, 자격 증명은 항목을 수정할 때까지 마스크되지 않고 차단된 상태로 유지됩니다. 저하된 `files` 항목은 명시적 `deny` 항목처럼 [`filesystem.disabled`](/docs/ko/sandboxing#disable-filesystem-isolation)를 고정하며, 경고는 관리형 설정이 파일시스템 격리를 끄면 읽기 차단이 적용되지 않음을 알립니다.2400* 유효한 `path` 또는 `name` 및 `mask` 또는 `deny`의 `mode`를 여전히 가진 `files` 또는 `envVars`의 항목(예: `extract` 패턴에 캡처 그룹이 없는 항목)은 경고와 함께 `mode: "deny"`로 저하되므로, 자격 증명은 항목을 수정할 때까지 마스크되지 않고 차단된 상태로 유지됩니다. 저하된 `files` 항목은 명시적 `deny` 항목처럼 [`filesystem.disabled`](/docs/ko/sandboxing#disable-filesystem-isolation)를 고정하며, 경고는 관리형 설정이 파일시스템 격리를 끄면 읽기 차단이 적용되지 않음을 알립니다.

2400* 알 수 없는 `mode` 또는 잘못된 `path` 또는 `name`을 가진 항목은 제거됩니다.2401* 알 수 없는 `mode` 또는 잘못된 `path` 또는 `name`을 가진 항목은 제거됩니다.

2401* 각 경우에 경고가 표시됩니다. 항목이 저하되든 제거되든 나머지 유효한 항목은 여전히 적용되며, 완전히 잘못된 `credentials` 값은 버려지고 `sandbox`의 나머지는 여전히 적용됩니다.2402* 각 경우에 경고가 표시됩니다. 항목이 저하되든 제거되든 나머지 유효한 항목은 여전히 적용됩니다.

2402 2403 

2403v2.1.191 이상에 적용됩니다. v2.1.221 이전에는 모든 잘못된 항목이 제거되었습니다. 필드별 처리를 포함하는 다른 관리형 키는 [관리형 설정의 잘못된 항목](/docs/ko/managed-settings#invalid-entries-in-managed-settings)을 참조하십시오.2404v2.1.191 이상에 적용됩니다. v2.1.221 이전에는 모든 잘못된 항목이 제거되었습니다. 필드별 처리를 포함하는 다른 관리형 키는 [관리형 설정의 잘못된 항목](/docs/ko/managed-settings#invalid-entries-in-managed-settings)을 참조하십시오.

2404 2405 


5681 5682 

5682git 저장소 외부에서 실패하는 [`WorktreeCreate` 훅](/docs/ko/worktrees#non-git-version-control)은 차단을 해제하여 세션이 작업 디렉터리를 제자리에서 편집할 수 있도록 합니다. 해당 해제에는 Claude Code v2.1.203 이상이 필요합니다.5683git 저장소 외부에서 실패하는 [`WorktreeCreate` 훅](/docs/ko/worktrees#non-git-version-control)은 차단을 해제하여 세션이 작업 디렉터리를 제자리에서 편집할 수 있도록 합니다. 해당 해제에는 Claude Code v2.1.203 이상이 필요합니다.

5683 5684 

5685<h3 id="worktree-location">

5686 `worktree.location`

5687</h3>

5688 

5689[Desktop SSH 세션](/docs/ko/desktop#choose-where-ssh-session-worktrees-go)이 `<project-root>/.claude/worktrees/` 대신 worktree를 생성할 원격 머신의 폴더를 선택합니다. 이 키는 데스크톱 앱만 읽습니다. `--worktree`, `EnterWorktree` 도구, 격리된 서브에이전트 및 배경 세션은 이 키를 무시합니다. Claude Desktop v1.44121.0 이상이 필요합니다.

5690 

5691* **Scope**: [`User`](#scopes), 원격 머신의 `~/.claude/settings.json`에서 설정

5692* **Type**: string, 절대 경로 또는 `~/`로 시작하는 경로

5693* **Default**: 설정되지 않음. worktree는 프로젝트 내부에 생성됩니다

5694 

5695이 예제는 폴더를 `~/worktrees`로 설정합니다:

5696 

5697```json settings.json theme={null}

5698{

5699 "worktree": {

5700 "location": "~/worktrees"

5701 }

5702}

5703```

5704 

5705Desktop에서 SSH 연결에 설정한 **Worktree folder**가 우선합니다. 조직에서 세션이 사용할 수 있는 폴더를 제한하는 경우 Desktop은 worktree를 프로젝트 내부에 유지합니다.

5706 

5684<h2 id="remote-desktop-and-notifications">5707<h2 id="remote-desktop-and-notifications">

5685 원격, 데스크톱 및 알림5708 원격, 데스크톱 및 알림

5686</h2>5709</h2>


5813 `enableArtifact`5836 `enableArtifact`

5814</h3>5837</h3>

5815 5838 

5816[Artifact](/docs/ko/artifacts) 도구를 끕니다. 이 도구는 세션 출력을 claude.ai의 비공개 웹 페이지로 게시합니다. `/config`에서 **Artifacts** 행을 끄면 Claude Code는 이 키를 사용자 설정에 기록하므로 일반적으로 수동으로 편집할 필요가 없습니다. Claude Code v2.1.196 이상이 필요합니다.5839[Artifact](/docs/ko/artifacts) 도구를 끕니다. 이 도구는 세션 출력을 claude.ai의 비공개 웹 페이지로 게시합니다. `/config`에서 **Artifacts** 행을 끄면 Claude Code는 이 키를 사용자 설정에 기록하므로 일반적으로 수동으로 편집할 필요가 없습니다.

5817 5840 

5818* **범위**: [`Any file`](#scopes). 모든 파일이 도구를 끌 수 있으며, 어떤 파일도 이를 다시 켤 수 없습니다.5841* **범위**: [`Any file`](#scopes). 모든 파일이 도구를 끌 수 있으며, 어떤 파일도 이를 다시 켤 수 없습니다.

5819* **유형**: Boolean5842* **유형**: Boolean


5920 `sshConfigs`5943 `sshConfigs`

5921</h3>5944</h3>

5922 5945 

5923[Desktop](/docs/ko/desktop#pre-configure-ssh-connections-for-your-team) 환경 드롭다운에 SSH 연결을 추가합니다. 관리자는 이를 사용하여 팀에 공유 연결을 배포합니다. 관리 설정에서 정의한 연결은 관리됨으로 표시되므로 사용자는 이를 선택할 수 있지만 앱에서 편집하거나 삭제할 수 없습니다.5946[Desktop](/docs/ko/desktop#pre-configure-ssh-connections-for-your-team) 환경 드롭다운에 SSH 연결을 추가합니다. 관리자는 이를 사용하여 팀에 공유 연결을 배포합니다. 관리형 설정에서 정의한 연결은 관리됨으로 표시됩니다. 사용자는 이를 선택하고 해당 연결에 대해 [자신의 **Worktree 폴더**를 설정](/docs/ko/desktop#choose-where-ssh-session-worktrees-go)할 수 있지만, 앱에서 그 밖의 항목을 편집하거나 연결을 삭제할 수는 없습니다.

5924 5947 

5925* **범위**: [`User or managed`](#scopes). 데스크톱 앱은 이 키를 읽습니다. 기본적으로 [하나의 관리형 소스](/docs/ko/managed-settings#how-claude-code-combines-managed-sources)에서 관리되는 연결을 읽습니다.5948* **범위**: [`User or managed`](#scopes). 데스크톱 앱은 이 키를 읽습니다. 기본적으로 [하나의 관리형 소스](/docs/ko/managed-settings#how-claude-code-combines-managed-sources)에서 관리되는 연결을 읽습니다.

5926* **유형**: 필수 `id`, `name` 및 `sshHost`와 선택적 `sshPort` 및 `sshIdentityFile`을 포함하는 객체 배열5949* **유형**: 필수 `id`, `name` 및 `sshHost`와 선택적 `sshPort` 및 `sshIdentityFile`을 포함하는 객체 배열


6085 6108 

6086사람들이 로그인할 수 있는 계정 종류를 제한합니다. `"claudeai"`로 설정하여 claude.ai 계정만 허용하거나, `"console"`로 설정하여 Claude Console 계정만 허용하거나, `"gateway"`로 설정하여 사람들을 첫 번째 당사자 로그인 대신 [클라우드 게이트웨이](/docs/ko/claude-apps-gateway)로 보냅니다. 관리자는 관리형 설정에서 설정하고 [`forceLoginOrgUUID`](#forceloginorguuid)와 쌍을 이루어 개발자의 claude.ai 로그인을 한 조직 내에 유지합니다. 설정 파일에서 `"claudeai"` 또는 `"console"`로 설정하면, Claude Code는 해당 파일이 적용되는 세션에서 [키 없는 Console 로그인](/docs/ko/authentication#sign-in-without-an-api-key)도 제공하지 않습니다.6109사람들이 로그인할 수 있는 계정 종류를 제한합니다. `"claudeai"`로 설정하여 claude.ai 계정만 허용하거나, `"console"`로 설정하여 Claude Console 계정만 허용하거나, `"gateway"`로 설정하여 사람들을 첫 번째 당사자 로그인 대신 [클라우드 게이트웨이](/docs/ko/claude-apps-gateway)로 보냅니다. 관리자는 관리형 설정에서 설정하고 [`forceLoginOrgUUID`](#forceloginorguuid)와 쌍을 이루어 개발자의 claude.ai 로그인을 한 조직 내에 유지합니다. 설정 파일에서 `"claudeai"` 또는 `"console"`로 설정하면, Claude Code는 해당 파일이 적용되는 세션에서 [키 없는 Console 로그인](/docs/ko/authentication#sign-in-without-an-api-key)도 제공하지 않습니다.

6087 6110 

6088* **범위**: [`모든 파일`](#scopes). Claude Code는 `"gateway"`를 머신의 관리 소스에서만 인정합니다: `managed-settings.json`, macOS plist 또는 Windows HKLM 레지스트리, 또는 정책 도우미. 사용자, 프로젝트, 로컬, HKCU, 서버 관리형 설정에서는 `"gateway"`를 설정되지 않은 것으로 취급하며, [`forceLoginGatewayUrl`](#forcelogingatewayurl)과 동일한 규칙입니다.6111* **범위**: [`모든 파일`](#scopes). Claude Code는 [`forceLoginGatewayUrl`](#forcelogingatewayurl)과 동일한 소스에서만 `"gateway"`를 인정하며, 그 외의 모든 곳에서는 설정되지 않은 것으로 취급합니다.

6089* **유형**: 문자열, 다음 중 하나:6112* **유형**: 문자열, 다음 중 하나:

6090 * `"claudeai"`: claude.ai 계정만 로그인할 수 있습니다.6113 * `"claudeai"`: claude.ai 계정만 로그인할 수 있습니다.

6091 * `"console"`: Claude Console 계정만 로그인할 수 있습니다.6114 * `"console"`: Claude Console 계정만 로그인할 수 있습니다.


6108 6131 

6109`/login` 클라우드 게이트웨이 화면이 연결하는 게이트웨이 URL을 설정하여 사람들이 주소를 입력하지 않고 [클라우드 게이트웨이](/docs/ko/claude-apps-gateway)에 도달하도록 합니다. 화면에는 URL 필드가 없습니다: 이 키가 설정되면, 게이트웨이 URL을 표시하고 사람이 Enter를 누르면 연결합니다. 없으면, IT 관리자에게 문의하도록 알립니다.6132`/login` 클라우드 게이트웨이 화면이 연결하는 게이트웨이 URL을 설정하여 사람들이 주소를 입력하지 않고 [클라우드 게이트웨이](/docs/ko/claude-apps-gateway)에 도달하도록 합니다. 화면에는 URL 필드가 없습니다: 이 키가 설정되면, 게이트웨이 URL을 표시하고 사람이 Enter를 누르면 연결합니다. 없으면, IT 관리자에게 문의하도록 알립니다.

6110 6133 

6111이 키 또는 `forceLoginMethod: "gateway"` 중 하나는 `CLAUDE_CODE_USE_*`로 클라우드 공급자를 선택하는 세션을 제외하고 머신을 게이트웨이 전용으로 만듭니다. 그러면 `/login`은 로그인 방법 선택기 없이 클라우드 게이트웨이 화면에서 열립니다. [관리자 정책이 클라우드 게이트웨이 로그인을 요구합니다](/docs/ko/errors#administrator-policy-requires-a-cloud-gateway-sign-in)를 참조하여 남은 첫 번째 당사자 로그인 또는 API 키에 어떤 일이 발생하는지 확인하세요. 화면이 오류를 표시하는 대신 연결하도록 두 키를 모두 설정하세요.6134관리형 설정에서는 이 키 또는 `forceLoginMethod: "gateway"` 중 하나가 `CLAUDE_CODE_USE_*`로 클라우드 공급자를 선택하는 세션을 제외하고 머신을 게이트웨이 전용으로 만듭니다. 그러면 `/login`은 로그인 방법 선택기 없이 클라우드 게이트웨이 화면에서 열립니다. [관리자 정책이 클라우드 게이트웨이 로그인을 요구합니다](/docs/ko/errors#administrator-policy-requires-a-cloud-gateway-sign-in)를 참조하여 남은 첫 번째 당사자 로그인 또는 API 키에 어떤 일이 발생하는지 확인하세요. 화면이 오류를 표시하는 대신 연결하도록 두 키를 모두 설정하세요.

6112 6135 

6113* **범위**: [`관리됨`](#scopes). 머신의 소스에서만 읽습니다: `managed-settings.json`, macOS plist 또는 Windows HKLM 레지스트리, 또는 정책 도우미. Claude Code는 HKCU 및 서버 관리형 설정에서 무시합니다.6136* **범위**: [`사용자 또는 관리됨`](#scopes). 머신의 관리 소스에서 읽습니다: `managed-settings.json`, macOS plist 또는 Windows HKLM 레지스트리, 또는 정책 도우미. 이 중 어느 것도 없는 머신에서는 Claude Code v2.1.295 이상이 [사용자 설정](/docs/ko/claude-apps-gateway#set-the-gateway-url-in-user-settings)에서도 이 키를 읽습니다. Claude Code는 HKCU 및 서버 관리형 설정에서 무시합니다.

6114* **유형**: 문자열, 스키마를 포함한 전체 URL6137* **유형**: 문자열, 스키마를 포함한 전체 URL

6115* **기본값**: 설정되지 않음, 따라서 클라우드 게이트웨이 화면은 IT 관리자에게 문의하도록 알리는 오류를 표시합니다.6138* **기본값**: 설정되지 않음, 따라서 클라우드 게이트웨이 화면은 IT 관리자에게 문의하도록 알리는 오류를 표시합니다.

6116 6139 


6140}6163}

6141```6164```

6142 6165 

6143관리 소스가 빈 배열을 설정하거나 Claude Code가 구문 분석할 수 없는 값을 설정하면, Claude Code는 잘못된 구성 메시지로 모든 로그인을 차단합니다.6166관리 소스가 빈 배열 또는 문자열이나 문자열 배열이 아닌 값을 설정하면, Anthropic 계정으로 로그인하는 사용자는 Claude Code를 시작하거나 로그인을 완료할 수 없습니다. 이 경우 `forceLoginOrgUUID`를 명시하고 관리자에게 문의하도록 안내하는 메시지가 표시됩니다. 잘못된 유형의 값을 내보내는 [`policyHelper`](#policyhelper)는 대신 [실행에 실패합니다](#helper-failures).

6144 6167 

6145[조직에 로그인 제한](/docs/ko/authentication#restrict-login-to-your-organization)을 참조하여 Claude Code가 Claude Console 로그인, 다른 로그인 경로, 및 환경 자격 증명을 어떻게 취급하는지 확인하세요.6168[조직에 로그인 제한](/docs/ko/authentication#restrict-login-to-your-organization)을 참조하여 Claude Code가 Claude Console 로그인, 다른 로그인 경로, 및 환경 자격 증명을 어떻게 취급하는지 확인하세요.

6146 6169 


6806 `copyFullResponse`6829 `copyFullResponse`

6807</h3>6830</h3>

6808 6831 

6809응답에 코드 블록이 포함되어 있을 때 표시되는 선택기 없이 [`/copy`](/docs/ko/commands)가 매번 전체 응답을 복사하도록 합니다. 해당 선택기에서 **항상 전체 응답 복사**를 선택하면 이 키가 `true`로 설정됩니다. `/config`에 **선택기 건너뛰기**로 표시됩니다.6832선택기를 표시하지 않고 [`/copy`](/docs/ko/commands)가 매번 전체 응답을 복사하도록 합니다. 해당 선택기에서 **항상 전체 응답 복사**를 선택하면 이 키가 `true`로 설정됩니다. `/config`에 **/copy 선택기 건너뛰기**로 표시됩니다.

6810 6833 

6811* **범위**: [`전역 설정`](#scopes)6834* **범위**: [`전역 설정`](#scopes)

6812* **유형**: Boolean6835* **유형**: Boolean

6813 * `true`: `/copy`가 선택기를 표시하지 않고 전체 응답을 복사합니다6836 * `true`: `/copy`가 선택기를 표시하지 않고 전체 응답을 복사합니다

6814 * `false`: 응답에 코드 블록이 포함되어 있을 때 `/copy`가 한 코드 블록 또는 전체 응답을 선택하는 선택기를 표시합니다6837 * `false`: 응답에 코드 블록이나 인용 블록이 포함되어 있을 때 `/copy`가 한 블록 또는 전체 응답을 선택하는 선택기를 표시합니다

6815* **기본값**: `false`6838* **기본값**: `false`

6816 6839 

6817```json ~/.claude.json theme={null}6840```json ~/.claude.json theme={null}

skills.md +6 −6

Details

192 192 

193Claude Code는 세션을 시작한 디렉터리와 저장소 루트까지의 모든 상위 디렉터리의 `.claude/skills/`에서 프로젝트 스킬을 로드하므로 `packages/frontend/`에서 시작해도 루트에 정의된 스킬을 선택합니다. v2.1.246 이상에서 [`/cd`로 세션을 이동](/docs/ko/permissions#move-the-session-to-another-directory)하면 Claude Code는 새 디렉터리의 프로젝트 스킬을 추가합니다.193Claude Code는 세션을 시작한 디렉터리와 저장소 루트까지의 모든 상위 디렉터리의 `.claude/skills/`에서 프로젝트 스킬을 로드하므로 `packages/frontend/`에서 시작해도 루트에 정의된 스킬을 선택합니다. v2.1.246 이상에서 [`/cd`로 세션을 이동](/docs/ko/permissions#move-the-session-to-another-directory)하면 Claude Code는 새 디렉터리의 프로젝트 스킬을 추가합니다.

194 194 

195연결된 [git worktree](/docs/ko/worktrees)에서 실행되는 세션에서 Claude Code는 worktree 루트까지만 상위 디렉터리를 검색합니다. Claude Code v2.1.277 이상에서는 worktree 체크아웃의 루트에 `.claude/skills` 디렉터리가 없으면 Claude Code가 대신 메인 체크아웃의 프로젝트 스킬을 로드합니다. [워크트리가 메인 체크아웃과 공유하는 항목](/docs/ko/worktrees#what-worktrees-share-with-the-main-checkout)을 참조하세요.195`--worktree` 또는 `git worktree add`로 만든 연결된 [git worktree](/docs/ko/worktrees)에서 실행되는 세션에서 Claude Code는 worktree 루트까지만 상위 디렉터리를 검색합니다. Claude Code v2.1.277 이상에서는 worktree 체크아웃의 루트에 `.claude/skills` 디렉터리가 없으면 Claude Code가 대신 메인 체크아웃의 프로젝트 스킬을 로드합니다. [워크트리가 메인 체크아웃과 공유하는 항목](/docs/ko/worktrees#what-worktrees-share-with-the-main-checkout)을 참조하세요.

196 196 

197시작한 위치 아래의 `.claude/skills/` 디렉터리의 스킬은 시작 시 로드되지 않습니다. Claude가 해당 하위 디렉터리의 파일을 처음 읽거나 편집할 때 로드되며 세션의 나머지 기간 동안 사용 가능합니다. 그때까지는 `/` 메뉴에 나타나지 않으며 이름으로 호출할 수 없습니다. 더 빨리 로드하려면 하위 디렉터리의 경로와 함께 `/add-dir`을 실행하세요. 이는 Claude Code v2.1.257 이상이 필요합니다.197시작한 위치 아래의 `.claude/skills/` 디렉터리의 스킬은 시작 시 로드되지 않습니다. Claude가 해당 하위 디렉터리의 파일을 처음 읽거나 편집할 때 로드되며 세션의 나머지 기간 동안 사용 가능합니다. 그때까지는 `/` 메뉴에 나타나지 않으며 이름으로 호출할 수 없습니다. 더 빨리 로드하려면 하위 디렉터리의 경로와 함께 `/add-dir`을 실행하세요. 이는 Claude Code v2.1.257 이상이 필요합니다. 데스크톱 앱에서 시작하는 워크트리 세션의 경우 [워크트리가 메인 체크아웃과 공유하는 항목](/docs/ko/worktrees#what-worktrees-share-with-the-main-checkout)을 참조하세요.

198 198 

199중첩된 스킬의 디렉터리 이름이 다른 스킬의 이름과 일치할 때 둘 다 사용 가능합니다. 저장소 루트에 `deploy` 스킬이 있고 `apps/web/.claude/skills/`에 다른 스킬이 있는 경우:199중첩된 스킬의 디렉터리 이름이 다른 스킬의 이름과 일치할 때 둘 다 사용 가능합니다. 저장소 루트에 `deploy` 스킬이 있고 `apps/web/.claude/skills/`에 다른 스킬이 있는 경우:

200 200 


235 235 

236스킬이 머신의 `~/.claude/skills/`에만 존재하면 [루틴](/docs/ko/routines)이 호출할 때 Claude Code는 스킬을 찾을 수 없다고 보고합니다. 각 루틴 실행이 새로운 클라우드 세션으로 시작되기 때문입니다. 이러한 세션에서 개인 스킬을 사용 가능하게 하려면:236스킬이 머신의 `~/.claude/skills/`에만 존재하면 [루틴](/docs/ko/routines)이 호출할 때 Claude Code는 스킬을 찾을 수 없다고 보고합니다. 각 루틴 실행이 새로운 클라우드 세션으로 시작되기 때문입니다. 이러한 세션에서 개인 스킬을 사용 가능하게 하려면:

237 237 

238* Cowork 및 클라우드 세션의 경우 claude.ai 계정에 대해 스킬을 활성화합니다.238* Cowork 및 클라우드 세션의 경우 claude.ai 계정에 대해 스킬을 활성화합니다. [자체 호스팅 환경의 일부 세션](/docs/ko/self-hosted-environments-configuration#how-each-session’s-config-is-assembled)은 계정의 스킬을 로드하지 않습니다.

239* 클라우드 세션의 경우 대신 저장소의 `.claude/skills/`에 스킬을 커밋할 수 있습니다. 저장소의 `.claude/settings.json`에 선언된 플러그인과 사용자 설정에서만 활성화된 플러그인은 [클라우드 세션에서 로드되지 않습니다](/docs/ko/cloud-environments#what-carries-over-from-your-setup).239* 클라우드 세션의 경우 대신 저장소의 `.claude/skills/`에 스킬을 커밋할 수 있습니다. 저장소의 `.claude/settings.json`에 선언된 플러그인과 사용자 설정에서만 활성화된 플러그인은 [클라우드 세션에서 로드되지 않습니다](/docs/ko/cloud-environments#what-carries-over-from-your-setup).

240 240 

241[Desktop 예약 작업](/docs/ko/desktop-scheduled-tasks)은 머신에서 로컬로 실행되므로 `~/.claude/skills/`를 로드합니다.241[Desktop 예약 작업](/docs/ko/desktop-scheduled-tasks)은 머신에서 로컬로 실행되므로 `~/.claude/skills/`를 로드합니다.


434| `when_to_use` | 아니요 | Claude가 스킬을 호출해야 할 때에 대한 추가 컨텍스트입니다. 예를 들어 트리거 구문이나 예제 요청입니다. 스킬 목록의 `description`에 추가되며 1,536자 제한에 포함됩니다. |434| `when_to_use` | 아니요 | Claude가 스킬을 호출해야 할 때에 대한 추가 컨텍스트입니다. 예를 들어 트리거 구문이나 예제 요청입니다. 스킬 목록의 `description`에 추가되며 1,536자 제한에 포함됩니다. |

435| `argument-hint` | 아니요 | 자동 완성 중에 표시되는 힌트로 예상 인수를 나타냅니다. 예: `[issue-number]` 또는 `[filename] [format]`. |435| `argument-hint` | 아니요 | 자동 완성 중에 표시되는 힌트로 예상 인수를 나타냅니다. 예: `[issue-number]` 또는 `[filename] [format]`. |

436| `arguments` | 아니요 | 스킬 콘텐츠에서 [`$name` 치환](#available-string-substitutions)을 위한 명명된 위치 인수입니다. 공백으로 구분된 문자열 또는 YAML 목록을 허용합니다. 이름은 순서대로 인수 위치에 매핑됩니다. |436| `arguments` | 아니요 | 스킬 콘텐츠에서 [`$name` 치환](#available-string-substitutions)을 위한 명명된 위치 인수입니다. 공백으로 구분된 문자열 또는 YAML 목록을 허용합니다. 이름은 순서대로 인수 위치에 매핑됩니다. |

437| `disable-model-invocation` | 아니요 | Claude가 이 스킬을 자동으로 로드하는 것을 방지하려면 `true`로 설정합니다. `/name`으로 수동으로 트리거하려는 워크플로에 사용합니다. 또한 스킬이 [서브에이전트에 사전 로드되는 것을 방지합니다](/docs/ko/sub-agents#preload-skills-into-subagents). v2.1.196부터 스킬을 프롬프트로 하는 [예약 작업](/docs/ko/scheduled-tasks)이 실행될 때 스킬이 실행되는 것도 방지합니다. 기본값: `false`. |437| `disable-model-invocation` | 아니요 | Claude가 이 스킬을 자동으로 로드하는 것을 방지하려면 `true`로 설정합니다. `/name`으로 수동으로 트리거하려는 워크플로에 사용합니다. 또한 스킬이 [서브에이전트에 사전 로드되는 것](/docs/ko/sub-agents#preload-skills-into-subagents)과 스킬을 프롬프트로 하는 [예약 작업](/docs/ko/scheduled-tasks)이 실행될 때 스킬이 실행되는 것을 방지합니다. 기본값: `false`. |

438| `user-invocable` | 아니요 | Claude만 스킬을 호출해야 할 때 `false`로 설정합니다. Claude Code는 `/` 메뉴에서 숨기고 `/name`을 입력할 때 실행하지 않습니다. 사용자가 직접 호출하지 않아야 하는 배경 지식에 사용합니다. 기본값: `true`. |438| `user-invocable` | 아니요 | Claude만 스킬을 호출해야 할 때 `false`로 설정합니다. Claude Code는 `/` 메뉴에서 숨기고 `/name`을 입력할 때 실행하지 않습니다. 사용자가 직접 호출하지 않아야 하는 배경 지식에 사용합니다. 기본값: `true`. |

439| `allowed-tools` | 아니요 | 이 스킬을 호출하는 턴 중에 Claude가 권한을 요청하지 않고 사용할 수 있는 도구입니다. 다음 메시지를 보낼 때 권한이 해제됩니다. 공백 또는 쉼표로 구분된 문자열 또는 YAML 목록을 허용합니다. [스킬에 대한 도구 사전 승인](#pre-approve-tools-for-a-skill)을 참조하세요. |439| `allowed-tools` | 아니요 | 이 스킬을 호출하는 턴 중에 Claude가 권한을 요청하지 않고 사용할 수 있는 도구입니다. 다음 메시지를 보낼 때 권한이 해제됩니다. 공백 또는 쉼표로 구분된 문자열 또는 YAML 목록을 허용합니다. [스킬에 대한 도구 사전 승인](#pre-approve-tools-for-a-skill)을 참조하세요. |

440| `disallowed-tools` | 아니요 | 이 스킬이 활성화되는 동안 Claude의 사용 가능한 도구 풀에서 제거되는 도구입니다. 백그라운드 루프에서의 `AskUserQuestion`처럼 특정 도구를 호출하지 않아야 하는 자율 스킬에 사용합니다. 공백 또는 쉼표로 구분된 문자열 또는 YAML 목록을 허용합니다. 다음 메시지를 보낼 때 제한이 해제됩니다. 거부 규칙과 마찬가지로 다른 도구가 남아 있는 동안 이 필드는 [`EndConversation`](/docs/ko/tools-reference#endconversation-tool-behavior)을 제거할 수 없습니다. |440| `disallowed-tools` | 아니요 | 이 스킬이 활성화되는 동안 Claude의 사용 가능한 도구 풀에서 제거되는 도구입니다. 백그라운드 루프에서의 `AskUserQuestion`처럼 특정 도구를 호출하지 않아야 하는 자율 스킬에 사용합니다. 공백 또는 쉼표로 구분된 문자열 또는 YAML 목록을 허용합니다. 다음 메시지를 보낼 때 제한이 해제됩니다. 거부 규칙과 마찬가지로 다른 도구가 남아 있는 동안 이 필드는 [`EndConversation`](/docs/ko/tools-reference#endconversation-tool-behavior)을 제거할 수 없습니다. |


528 528 

529이 스킬이 `~/.claude/skills/render-chart/`에 설치되면 `${CLAUDE_SKILL_DIR}`의 두 발생 모두 해당 디렉터리로 확장됩니다. `allowed-tools` 규칙은 스킬 본문이 Claude에게 실행하도록 지시하는 정확한 명령과 일치하므로 스크립트는 확인 요청 없이 실행됩니다.529이 스킬이 `~/.claude/skills/render-chart/`에 설치되면 `${CLAUDE_SKILL_DIR}`의 두 발생 모두 해당 디렉터리로 확장됩니다. `allowed-tools` 규칙은 스킬 본문이 Claude에게 실행하도록 지시하는 정확한 명령과 일치하므로 스크립트는 확인 요청 없이 실행됩니다.

530 530 

531`${CLAUDE_PROJECT_DIR}` 치환에는 Claude Code v2.1.196 이상이 필요합니다.

532 

533인덱싱된 인수는 셸 스타일 인용을 사용하므로 다중 단어 값을 따옴표로 감싸서 단일 인수로 전달합니다. 예를 들어 `/my-skill "hello world" second`는 `$0`을 `hello world`로 확장하고 `$1`을 `second`로 확장합니다. `$ARGUMENTS` 플레이스홀더는 항상 입력한 대로 전체 인수 문자열로 확장됩니다.531인덱싱된 인수는 셸 스타일 인용을 사용하므로 다중 단어 값을 따옴표로 감싸서 단일 인수로 전달합니다. 예를 들어 `/my-skill "hello world" second`는 `$0`을 `hello world`로 확장하고 `$1`을 `second`로 확장합니다. `$ARGUMENTS` 플레이스홀더는 항상 입력한 대로 전체 인수 문자열로 확장됩니다.

534 532 

535해당 인수가 없는 인덱싱된 플레이스홀더(예: 하나의 인수만 전달되었을 때 `$2`)는 콘텐츠에서 변경되지 않은 상태로 유지됩니다. [`arguments`](#frontmatter-reference) frontmatter의 일치하는 인수가 없는 명명된 플레이스홀더는 빈 문자열로 확장됩니다.533해당 인수가 없는 인덱싱된 플레이스홀더(예: 하나의 인수만 전달되었을 때 `$2`)는 콘텐츠에서 변경되지 않은 상태로 유지됩니다. [`arguments`](#frontmatter-reference) frontmatter의 일치하는 인수가 없는 명명된 플레이스홀더는 빈 문자열로 확장됩니다.


843* 동일한 스킬의 이전 호출이 여전히 실행 중인 동안 포크된 스킬을 호출할 때841* 동일한 스킬의 이전 호출이 여전히 실행 중인 동안 포크된 스킬을 호출할 때

844* [예약 작업](/docs/ko/scheduled-tasks)이 스킬을 프롬프트로 하여 실행될 때842* [예약 작업](/docs/ko/scheduled-tasks)이 스킬을 프롬프트로 하여 실행될 때

845 843 

844[동적 워크플로](/docs/ko/workflows)의 에이전트가 포크된 스킬을 호출하면, 스킬이 `background: false`를 설정하지 않더라도 해당 에이전트가 결과를 기다렸다가 받습니다. v2.1.295 이전에는 이 경우 Claude Code가 기다리지 않았으며, 스킬이 백그라운드에서 실행되면 결과가 해당 에이전트에 전달되지 않고 주 대화에 도착했습니다.

845 

846백그라운드에서 실행되는 포크는 [백그라운드 서브에이전트에 적용되는 더 좁은 도구 집합](/docs/ko/sub-agents#run-subagents-in-foreground-or-background)으로도 실행됩니다: 스킬의 서브에이전트는 일반 에이전트 유형이므로 대화를 포크하는 서브에이전트에 대한 예외는 적용되지 않습니다. 스킬의 단계가 해당 집합 외부의 도구에 따라 다르면 `background: false`를 설정하여 전체 도구 집합을 유지합니다.846백그라운드에서 실행되는 포크는 [백그라운드 서브에이전트에 적용되는 더 좁은 도구 집합](/docs/ko/sub-agents#run-subagents-in-foreground-or-background)으로도 실행됩니다: 스킬의 서브에이전트는 일반 에이전트 유형이므로 대화를 포크하는 서브에이전트에 대한 예외는 적용되지 않습니다. 스킬의 단계가 해당 집합 외부의 도구에 따라 다르면 `background: false`를 설정하여 전체 도구 집합을 유지합니다.

847 847 

848백그라운드에서 실행되는 포크된 스킬은 세션의 [체크포인트](/docs/ko/checkpointing) 외부에서 편집을 적용하므로 `/rewind`는 이를 실행 취소하지 않습니다. git을 사용하여 되돌립니다.848백그라운드에서 실행되는 포크된 스킬은 세션의 [체크포인트](/docs/ko/checkpointing) 외부에서 편집을 적용하므로 `/rewind`는 이를 실행 취소하지 않습니다. git을 사용하여 되돌립니다.

sub-agents.md +5 −7

Details

386* **주 대화의 모델이 해당 패밀리에 속함**: 서브에이전트는 주 대화의 정확한 모델(모든 `[1m]` 접미사 포함)에서 실행되므로 주 대화와 동일한 [확장 컨텍스트](/docs/ko/model-config#extended-context) 윈도우를 얻습니다.386* **주 대화의 모델이 해당 패밀리에 속함**: 서브에이전트는 주 대화의 정확한 모델(모든 `[1m]` 접미사 포함)에서 실행되므로 주 대화와 동일한 [확장 컨텍스트](/docs/ko/model-config#extended-context) 윈도우를 얻습니다.

387* **Claude Code가 [Anthropic API 이외의 공급자](/docs/ko/third-party-integrations)에서 주 대화의 모델 패밀리를 알 수 없음**: 이는 Claude Code가 지원 모델로 확인하지 않은 Amazon Bedrock의 [애플리케이션 추론 프로필 ARN](/docs/ko/amazon-bedrock#iam-configuration)에서 발생할 수 있습니다. 이 경우는 `opus` 별칭만 다루며, [`ANTHROPIC_DEFAULT_OPUS_MODEL`](/docs/ko/model-config#environment-variables)을 설정할 때는 적용되지 않습니다. `opus`는 설정한 모델로 확인되기 때문입니다.387* **Claude Code가 [Anthropic API 이외의 공급자](/docs/ko/third-party-integrations)에서 주 대화의 모델 패밀리를 알 수 없음**: 이는 Claude Code가 지원 모델로 확인하지 않은 Amazon Bedrock의 [애플리케이션 추론 프로필 ARN](/docs/ko/amazon-bedrock#iam-configuration)에서 발생할 수 있습니다. 이 경우는 `opus` 별칭만 다루며, [`ANTHROPIC_DEFAULT_OPUS_MODEL`](/docs/ko/model-config#environment-variables)을 설정할 때는 적용되지 않습니다. `opus`는 설정한 모델로 확인되기 때문입니다.

388 388 

389`CLAUDE_CODE_SUBAGENT_MODEL`의 별칭은 항상 별칭이 가리키는 버전으로 확인되며, 주 대화의 패밀리를 이름 지을 때도 마찬가지입니다.389`CLAUDE_CODE_SUBAGENT_MODEL`의 별칭은 주 대화의 패밀리를 가리키는 경우에도 항상 별칭이 가리키는 버전으로 확인됩니다. 이 변수를 `inherit`로 설정하는 것은 설정하지 않은 것과 같습니다.

390 390 

391`CLAUDE_CODE_SUBAGENT_MODEL`을 자체로 설정하는 것은 기본 제공 Explore 및 Plan 서브에이전트가 실행되는 모델을 변경하지 않습니다. 변경하려면 [모든 서브에이전트를 한 모델에서 실행](#run-every-subagent-on-one-model)을 참조하세요.391`CLAUDE_CODE_SUBAGENT_MODEL`을 자체로 설정하는 것은 기본 제공 Explore 및 Plan 서브에이전트가 실행되는 모델을 변경하지 않습니다. 변경하려면 [모든 서브에이전트를 한 모델에서 실행](#run-every-subagent-on-one-model)을 참조하세요.

392 392 

393v2.1.251 이전에는 `CLAUDE_CODE_SUBAGENT_MODEL`이 이 순서에서 먼저 나왔으며 호출별 매개변수와 프론트매터(모델 상속 포함)를 모두 재정의했습니다.393v2.1.251 이전에는 `CLAUDE_CODE_SUBAGENT_MODEL`이 이 순서에서 가장 먼저 적용되어 호출별 매개변수와 frontmatter(`model: inherit` 포함)를 모두 재정의했습니다.

394 

395변수를 `inherit`로 설정하는 것은 설정하지 않은 것과 동일합니다. v2.1.196 이전에는 해당 값이 서브에이전트를 주 대화의 모델로 강제하고 다른 소스를 무시했습니다.

396 394 

397Claude Code는 호출별 매개변수, 프론트매터, 및 환경 변수 값을 조직의 [`availableModels`](/docs/ko/model-config#restrict-model-selection) 허용 목록에 대해 확인합니다. 차단된 값의 경우 다른 모델로 대체합니다:395Claude Code는 호출별 매개변수, 프론트매터, 및 환경 변수 값을 조직의 [`availableModels`](/docs/ko/model-config#restrict-model-selection) 허용 목록에 대해 확인합니다. 차단된 값의 경우 다른 모델로 대체합니다:

398 396 


593 591 

594* **신뢰하지 않는 것**: 부모 폴더의 신뢰, 및 `-p` 또는 SDK 세션이 [설정 파일의 훅](/docs/ko/permissions#what-runs-before-you-trust-a-folder)에 대해 얻는 자동 신뢰592* **신뢰하지 않는 것**: 부모 폴더의 신뢰, 및 `-p` 또는 SDK 세션이 [설정 파일의 훅](/docs/ko/permissions#what-runs-before-you-trust-a-folder)에 대해 얻는 자동 신뢰

595* **그때까지**: Claude Code는 해당 에이전트 파일의 모든 인라인 서버를 건너뛰고 `~/.claude.json`에 대한 정확한 `projects["<path>"].hasTrustDialogAccepted` 키를 디버그 로그에 씁니다593* **그때까지**: Claude Code는 해당 에이전트 파일의 모든 인라인 서버를 건너뛰고 `~/.claude.json`에 대한 정확한 `projects["<path>"].hasTrustDialogAccepted` 키를 디버그 로그에 씁니다

596* **`--add-dir` 디렉토리**: 신뢰된 작업 공간의 저장소 외부의 디렉토리는 자신의 신뢰 항목이 필요합니다. 작업 공간의 신뢰를 상속하지 않기 때문입니다594* **`--add-dir` 디렉터리**: 신뢰된 워크스페이스의 저장소 외부에 있는 디렉터리는 자체 신뢰 항목이 필요합니다. 해당 디렉터리의 `.claude/agents/` 파일은 워크스페이스의 신뢰를 상속하지 않기 때문입니다

597 595 

598Claude Code는 에이전트 파일이 나온 폴더에 대한 신뢰를 확인하지 않고 두 종류의 서버를 로드합니다:596Claude Code는 에이전트 파일이 나온 폴더에 대한 신뢰를 확인하지 않고 두 종류의 서버를 로드합니다:

599 597 


620| `default` | 수동 모드: 권한 프롬프트 |618| `default` | 수동 모드: 권한 프롬프트 |

621| `acceptEdits` | 자동 수락 파일 편집 및 작업 디렉토리 또는 `additionalDirectories`의 경로에 대한 일반적인 파일시스템 명령 |619| `acceptEdits` | 자동 수락 파일 편집 및 작업 디렉토리 또는 `additionalDirectories`의 경로에 대한 일반적인 파일시스템 명령 |

622| `auto` | [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode): 백그라운드 분류자가 명령 및 보호된 디렉토리 쓰기를 검토합니다 |620| `auto` | [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode): 백그라운드 분류자가 명령 및 보호된 디렉토리 쓰기를 검토합니다 |

623| `dontAsk` | 자동 거부 권한 프롬프트. 명시적으로 허용된 도구는 여전히 작동합니다. `AskUserQuestion`, [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구, 및 조직이 설정한 커넥터 도구 [`ask`](/docs/ko/mcp#organization-controls-on-connector-tools)는 설정이 Claude Code에 도달하는 세션에서 허용되었더라도 거부됩니다 |621| `dontAsk` | 권한 프롬프트를 자동 거부합니다. 명시적으로 허용된 도구는 여전히 작동합니다. `AskUserQuestion`, [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구, [네트워크 경로에서의 읽기](/docs/ko/permissions#network-paths), 그리고 해당 설정이 Claude Code에 전달되는 세션에서 [조직이 `ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구는 허용했더라도 거부됩니다 |

624| `bypassPermissions` | [권한 프롬프트 건너뛰기](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode). 서브에이전트는 주 대화도 이 모드에 있을 때만 이 모드에서 실행됩니다 |622| `bypassPermissions` | [권한 프롬프트 건너뛰기](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode). 서브에이전트는 주 대화도 이 모드에 있을 때만 이 모드에서 실행됩니다 |

625| `plan` | 계획 모드(읽기 전용 탐색) |623| `plan` | 계획 모드(읽기 전용 탐색) |

626 624 


1150* **시스템 프롬프트**: 에이전트 자신의 프롬프트 및 Claude Code가 추가하는 환경 세부 정보이며 Claude Code 시스템 프롬프트는 아닙니다. 사용자 정의 서브에이전트는 [마크다운 본문](#write-subagent-files) 또는 `prompt` 필드에서 정의합니다. 기본 제공 에이전트는 미리 정의된 프롬프트를 가집니다.1148* **시스템 프롬프트**: 에이전트 자신의 프롬프트 및 Claude Code가 추가하는 환경 세부 정보이며 Claude Code 시스템 프롬프트는 아닙니다. 사용자 정의 서브에이전트는 [마크다운 본문](#write-subagent-files) 또는 `prompt` 필드에서 정의합니다. 기본 제공 에이전트는 미리 정의된 프롬프트를 가집니다.

1151* **작업 메시지**: Claude가 작업을 넘길 때 작성하는 위임 프롬프트입니다.1149* **작업 메시지**: Claude가 작업을 넘길 때 작성하는 위임 프롬프트입니다.

1152* **CLAUDE.md 파일**: 메인 대화가 로드하는 [CLAUDE.md 계층 구조](/docs/ko/memory#how-claude-md-files-load)의 모든 수준(`~/.claude/CLAUDE.md`, 프로젝트 규칙, `CLAUDE.local.md`, 관리되는 정책 파일 및 프로젝트 지시사항으로 로드된 모든 [`AGENTS.md` 파일](/docs/ko/memory#agents-md) 포함). 기본 제공 Explore 및 Plan 에이전트는 이를 건너뜁니다. 정의가 [`omitClaudeMd`](#supported-frontmatter-fields)를 설정하는 서브에이전트는 관리되는 정책 파일만 로드하거나 정의가 [관리형 설정](#choose-the-subagent-scope)에서 올 때 아무것도 로드하지 않습니다.1150* **CLAUDE.md 파일**: 메인 대화가 로드하는 [CLAUDE.md 계층 구조](/docs/ko/memory#how-claude-md-files-load)의 모든 수준(`~/.claude/CLAUDE.md`, 프로젝트 규칙, `CLAUDE.local.md`, 관리되는 정책 파일 및 프로젝트 지시사항으로 로드된 모든 [`AGENTS.md` 파일](/docs/ko/memory#agents-md) 포함). 기본 제공 Explore 및 Plan 에이전트는 이를 건너뜁니다. 정의가 [`omitClaudeMd`](#supported-frontmatter-fields)를 설정하는 서브에이전트는 관리되는 정책 파일만 로드하거나 정의가 [관리형 설정](#choose-the-subagent-scope)에서 올 때 아무것도 로드하지 않습니다.

1153* **Git 상태**: 서브에이전트가 시작할 때 Claude Code가 저장소에서 읽는 스냅샷입니다. Git 저장소 외부에서는 없으며 스냅샷이 꺼져 있을 때도 없습니다. [`includeGitInstructions`](/docs/ko/settings-reference#includegitinstructions)를 참조하십시오. Explore 및 Plan은 관계없이 건너뜁니다.1151* **Git 상태**: 서브에이전트가 시작할 때 Claude Code가 저장소에서 읽는 스냅샷입니다. 해당 저장소의 [자체 worktree](/docs/ko/worktrees#isolate-subagents-with-worktrees)에 있는 서브에이전트의 경우 스냅샷은 워크트리의 브랜치, 상태 및 최근 커밋을 보여줍니다. Git 저장소 외부에서는 없으며 스냅샷이 꺼져 있을 때도 없습니다. [`includeGitInstructions`](/docs/ko/settings-reference#includegitinstructions)를 참조하십시오. Explore 및 Plan은 관계없이 건너뜁니다.

1154* **미리 로드된 스킬**: 에이전트의 [`skills` 필드](#preload-skills-into-subagents)에 명명된 모든 스킬의 전체 콘텐츠입니다. 기본 제공 에이전트는 스킬을 미리 로드하지 않습니다.1152* **미리 로드된 스킬**: 에이전트의 [`skills` 필드](#preload-skills-into-subagents)에 명명된 모든 스킬의 전체 콘텐츠입니다. 기본 제공 에이전트는 스킬을 미리 로드하지 않습니다.

1155* **형제 명단**: `main` 및 세션의 다른 모든 명명된 에이전트를 나열하는 [시스템 리마인더](/docs/ko/glossary#system-reminder)이며 각각은 [`SendMessage`](#resume-subagents)의 유효한 `to` 값입니다. Claude Code v2.1.206 이상이 필요합니다. 명단은 서브에이전트의 도구에 `SendMessage`가 포함되고 적어도 하나의 다른 에이전트가 이름을 가질 때만 나타나며, Claude가 생성할 때 이름을 지정했는지 또는 [에이전트 팀](/docs/ko/agent-teams) 팀원으로 실행되는지 여부와 관계없이 나타납니다. 이는 서브에이전트가 시작할 때 찍은 스냅샷이므로 나중에 명명된 에이전트는 나타나지 않습니다.1153* **형제 명단**: `main` 및 세션의 다른 모든 명명된 에이전트를 나열하는 [시스템 리마인더](/docs/ko/glossary#system-reminder)이며 각각은 [`SendMessage`](#resume-subagents)의 유효한 `to` 값입니다. Claude Code v2.1.206 이상이 필요합니다. 명단은 서브에이전트의 도구에 `SendMessage`가 포함되고 적어도 하나의 다른 에이전트가 이름을 가질 때만 나타나며, Claude가 생성할 때 이름을 지정했는지 또는 [에이전트 팀](/docs/ko/agent-teams) 팀원으로 실행되는지 여부와 관계없이 나타납니다. 이는 서브에이전트가 시작할 때 찍은 스냅샷이므로 나중에 명명된 에이전트는 나타나지 않습니다.

1156 1154 

Details

122}122}

123```123```

124 124 

125<h2 id="see-session-status-in-your-terminal">

126 터미널에서 세션 상태 확인하기

127</h2>

128 

129터미널이 OSC 7501 Program Status Protocol을 구현하는 경우, 각 대화형 Claude Code 세션이 작업 중인지, 사용자의 응답을 기다리는 중인지, 완료되었는지를 표시할 수 있습니다. 이는 긴 작업을 실행하거나 여러 세션을 동시에 실행할 때 유용합니다. Claude Code에서 따로 켜야 할 설정은 없습니다. 터미널이 이 프로토콜을 구현하는지, 그리고 상태를 어디에 표시하는지 확인하려면 해당 터미널의 문서를 참조하십시오.

130 

131터미널이 프로토콜을 구현하는데도 세션의 상태가 표시되지 않는다면 다음 각 원인을 확인하십시오.

132 

133* **Claude Code 버전**: 상태 보고에는 Claude Code v2.1.295 이상이 필요합니다. 셸에서 `claude --version`을 실행하여 확인하십시오.

134* **tmux**: tmux 내부에서는 Claude Code가 터미널 대신 tmux에서 지원 여부를 확인하며, [`allow-passthrough`](#configure-tmux)는 이에 영향을 주지 않습니다. tmux 외부에서 세션을 시작하십시오.

135* **백그라운드 세션**: [백그라운드 세션](/docs/ko/agent-view)은 세션에 연결되어 있는 동안에도 터미널에 상태를 보고하지 않습니다. 대신 에이전트 뷰에 상태가 표시됩니다.

136* **[`CLAUDE_CODE_DISABLE_TERMINAL_TITLE`](/docs/ko/env-vars#variables)**: 이 변수를 `1`로 설정하면 Claude Code는 지원 여부를 확인하거나 상태를 보고하지 않습니다. 이 변수의 설정을 해제하십시오.

137 

125<h2 id="configure-tmux">138<h2 id="configure-tmux">

126 tmux 구성139 tmux 구성

127</h2>140</h2>

tools-reference.md +32 −11

Details

279 279 

280Edit 도구는 정확한 문자열 교체를 수행합니다. `old_string`과 `new_string`을 받아 첫 번째를 두 번째로 교체합니다. 정규식이나 유사 일치를 사용하지 않습니다.280Edit 도구는 정확한 문자열 교체를 수행합니다. `old_string`과 `new_string`을 받아 첫 번째를 두 번째로 교체합니다. 정규식이나 유사 일치를 사용하지 않습니다.

281 281 

282편집을 적용하기 위해 세 가지 검사를 통과해야 합니다. 그 전에, [`Read` 거부 규칙](/docs/ko/permissions#tool-specific-permission-rules)과 일치하는 경로는 거부되며, 여기에 새 파일을 만드는 것도 포함됩니다. 거부는 Claude Code v2.1.208 이상이 필요합니다.282편집을 적용하기 위해 다음 검사를 통과해야 합니다. 그 전에, [`Read` 거부 규칙](/docs/ko/permissions#tool-specific-permission-rules)과 일치하는 경로는 거부되며, 여기에 새 파일을 만드는 것도 포함됩니다. 거부는 Claude Code v2.1.208 이상이 필요합니다.

283 283 

284* **편집 전 읽기**: Claude는 편집하기 전에 현재 대화에서 파일을 읽으며, [`PARTIAL view` 공지](#read-tool-behavior)로 단축된 읽기는 계산되지 않습니다. Claude Opus 4.6, Claude Haiku 4.5 및 이전 모델은 항상 읽기를 요구합니다. 최신 모델은 읽기가 권한 프롬프트를 필요로 하지 않고 Read 도구를 사용할 수 있을 때 읽지 않은 파일을 편집할 수 있습니다.284* **편집 전 읽기**: Claude는 편집하기 전에 현재 대화에서 파일을 읽으며, [`PARTIAL view` 공지](#large-files)로 단축된 읽기는 계산되지 않습니다. Claude Opus 4.6, Claude Haiku 4.5 및 이전 모델은 항상 읽기를 요구합니다. 최신 모델은 읽기가 권한 프롬프트를 필요로 하지 않고 Read 도구를 사용할 수 있을 때 읽지 않은 파일을 편집할 수 있습니다.

285* **일치**: `old_string`은 파일에 정확히 작성된 대로 나타나야 합니다. 공백이나 들여쓰기의 단 한 글자 차이도 일치하지 않기에 충분합니다.285* **일치**: `old_string`은 파일에 정확히 작성된 대로 나타나야 합니다. 공백이나 들여쓰기의 단 한 글자 차이도 일치하지 않기에 충분합니다.

286* **고유성**: `old_string`은 정확히 한 번 나타나야 합니다. 두 번 이상 나타날 때, Claude는 한 번의 발생을 고정하기에 충분한 주변 컨텍스트가 있는 더 긴 문자열을 제공하거나, `replace_all: true`를 설정하여 모두 교체합니다.286* **고유성**: `old_string`은 정확히 한 번 나타나야 합니다. 두 번 이상 나타날 때, Claude는 한 번의 발생을 고정하기에 충분한 주변 컨텍스트가 있는 더 긴 문자열을 제공하거나, `replace_all: true`를 설정하여 모두 교체합니다.

287 287 

288Claude가 마지막으로 읽은 후 디스크에서 변경된 파일은 `old_string`이 현재 콘텐츠와 정확히 일치하고 명확하며 Claude Code가 프롬프트 없이 파일을 읽을 수 있을 때 여전히 편집할 수 있습니다. 파일의 현재 콘텐츠와 일치하면 이것이 안전하게 유지되며, 결과는 파일이 다른 변경 사항을 포함하고 있음을 기록하므로 Claude는 주변 콘텐츠에 따라 달라지는 편집 전에 다시 읽습니다. 다른 경우, 예를 들어 오래된 `old_string` 또는 `replace_all` 없이 두 번 이상 일치하는 경우, Claude는 편집하기 전에 파일을 다시 읽습니다. 읽지 않은 파일 및 변경된 파일의 완화된 처리는 Claude Code v2.1.208 이상이 필요합니다. 그 전에는 Claude Code가 대화에서 읽지 않았거나 읽은 후 디스크에서 변경된 파일에 대한 모든 편집을 거부했습니다.288Claude가 마지막으로 읽은 후 디스크에서 변경된 파일은 `old_string`이 현재 콘텐츠와 정확히 일치하고 명확하며 Claude Code가 프롬프트 없이 파일을 읽을 수 있을 때 여전히 편집할 수 있습니다. 파일의 현재 콘텐츠와 일치하면 이것이 안전하게 유지되며, 결과는 파일이 다른 변경 사항을 포함하고 있음을 기록하므로 Claude는 주변 콘텐츠에 따라 달라지는 편집 전에 다시 읽습니다. 다른 경우, 예를 들어 오래된 `old_string` 또는 `replace_all` 없이 두 번 이상 일치하는 경우, Claude는 편집하기 전에 파일을 다시 읽습니다. 읽지 않은 파일 및 변경된 파일의 완화된 처리는 Claude Code v2.1.208 이상이 필요합니다. 그 전에는 Claude Code가 대화에서 읽지 않았거나 읽은 후 디스크에서 변경된 파일에 대한 모든 편집을 거부했습니다.

289 289 

290Bash로 파일을 보는 것은 명령이 `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep` 또는 `rg`일 때 단일 파일에 대해 파이프나 리디렉션이 없을 때 편집 전 읽기 요구 사항을 충족합니다. 파이프된 출력 및 기타 Bash 명령은 편집 전 읽기 검사에 계산되지 않습니다.290Claude는 `cat`이나 `grep` 같은 Bash 명령으로 파일을 본 후에도 별도의 Read 없이 파일을 편집할 수 있습니다. 해당 명령은 `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep`, `rg`이며, 각각 파이프나 리디렉션 없이 단일 파일에 대해 실행되어야 합니다. 일치 항목을 출력하지 않는 검색은 읽기로 간주되지 않으며, 이 목록에 없는 명령도 마찬가지입니다.

291 291 

292Claude가 이 방식으로 파일을 볼 때, Claude Code는 해당 파일에 적용되는 [하위 디렉터리 `CLAUDE.md`](/docs/ko/memory#how-claude-md-files-load) 및 [경로 범위 규칙](/docs/ko/memory#path-specific-rules)도 로드합니다. [Read 및 Edit 권한 규칙](/docs/ko/permissions#read-and-edit)에서 `Read` 및 `Edit` 거부 규칙이 적용되는 Bash 명령을 확인하십시오.292Claude가 이 방식으로 파일을 볼 때, Claude Code는 해당 파일에 적용되는 [하위 디렉터리 `CLAUDE.md`](/docs/ko/memory#how-claude-md-files-load) 및 [경로 범위 규칙](/docs/ko/memory#path-specific-rules)도 로드합니다. [Read 및 Edit 권한 규칙](/docs/ko/permissions#read-and-edit)에서 `Read` 및 `Edit` 거부 규칙이 적용되는 Bash 명령을 확인하십시오.

293 293 

294<h3 id="non-utf-8-files">

295 UTF-8이 아닌 파일

296</h3>

297 

298Claude는 유효한 UTF-8이 아닌 파일에 [NotebookEdit](#notebookedit-tool-behavior)를 사용할 수 없습니다. Edit도 마찬가지이며, 파일이 리틀 엔디언 UTF-16 바이트 순서 표시로 시작하는 경우는 예외입니다. Claude가 시도하면 도구는 변경을 거부하고 파일을 그대로 둡니다. 거부되는 파일에는 Windows-1252나 Shift-JIS 같은 레거시 인코딩으로 저장된 비ASCII 텍스트, 바이너리 파일, 잘못된 바이트 시퀀스가 있는 UTF-8이 포함됩니다.

299 

300도구가 거부하는 이유는 전체 파일을 UTF-8로 다시 저장하면 디코딩할 수 없는 모든 바이트가 대체 문자 `U+FFFD`로 바뀌기 때문입니다. 대신 [Claude가 받는 오류](/docs/ko/errors#file-is-not-valid-utf-8)는 파일의 인코딩을 유지하는 셸 명령으로 변경하거나, 먼저 파일을 UTF-8로 변환할지 사용자에게 묻도록 Claude에게 안내합니다.

301 

302Claude는 이러한 파일을 Write로 교체할 수는 있지만, 새 콘텐츠에 `U+FFFD`(Read가 디코딩할 수 없는 바이트 대신 Claude에게 표시하는 문자)가 포함된 경우는 예외입니다. 이 보호 장치는 Claude가 읽은 깨진 텍스트를 다시 쓰지 못하도록 막습니다. Write가 파일을 교체하면 새 콘텐츠를 UTF-8로 저장하므로 파일의 원래 인코딩이 손실됩니다.

303 

294<h2 id="endconversation-tool-behavior">304<h2 id="endconversation-tool-behavior">

295 EndConversation 도구 동작305 EndConversation 도구 동작

296</h2>306</h2>


455* `insert`: 대상 후에 새 셀을 추가합니다. `cell_id`가 없으면, 새 셀은 노트북의 시작 부분으로 이동합니다. `cell_type`을 `code` 또는 `markdown`으로 설정해야 합니다.465* `insert`: 대상 후에 새 셀을 추가합니다. `cell_id`가 없으면, 새 셀은 노트북의 시작 부분으로 이동합니다. `cell_type`을 `code` 또는 `markdown`으로 설정해야 합니다.

456* `delete`: 대상 셀을 제거합니다.466* `delete`: 대상 셀을 제거합니다.

457 467 

468NotebookEdit은 [Edit과 동일한 규칙](#non-utf-8-files)에 따라 UTF-8로 디코딩되지 않는 노트북 파일을 거부하며, 아무것도 쓰지 않습니다.

469 

458권한 규칙은 `Edit(...)` 경로 형식을 사용합니다. `Edit(notebooks/**)`와 같은 규칙은 해당 디렉토리의 파일에 대한 NotebookEdit 호출을 포함합니다.470권한 규칙은 `Edit(...)` 경로 형식을 사용합니다. `Edit(notebooks/**)`와 같은 규칙은 해당 디렉토리의 파일에 대한 NotebookEdit 호출을 포함합니다.

459 471 

460<h2 id="powershell-tool">472<h2 id="powershell-tool">


514* 개별 [command hooks](/docs/ko/hooks#command-hook-fields)의 `"shell": "powershell"`: 해당 hook을 PowerShell에서 실행합니다. Hooks는 PowerShell을 직접 생성하므로, `CLAUDE_CODE_USE_POWERSHELL_TOOL`과 관계없이 작동합니다.526* 개별 [command hooks](/docs/ko/hooks#command-hook-fields)의 `"shell": "powershell"`: 해당 hook을 PowerShell에서 실행합니다. Hooks는 PowerShell을 직접 생성하므로, `CLAUDE_CODE_USE_POWERSHELL_TOOL`과 관계없이 작동합니다.

515* [skill frontmatter](/docs/ko/skills#frontmatter-reference)의 `shell: powershell`: `` !`command` `` 블록을 PowerShell에서 실행합니다. PowerShell 도구가 활성화되어야 합니다.527* [skill frontmatter](/docs/ko/skills#frontmatter-reference)의 `shell: powershell`: `` !`command` `` 블록을 PowerShell에서 실행합니다. PowerShell 도구가 활성화되어야 합니다.

516 528 

517Bash 도구 섹션에서 설명한 동일한 주 세션 작업 디렉토리 재설정 동작이 PowerShell 명령에 적용되며, `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR` 환경 변수를 포함합니다.529PowerShell 명령은 `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR` 환경 변수를 포함하여 Bash 명령과 [동일한 주 세션 작업 디렉터리 재설정 동작](#what-persists-between-commands)을 따릅니다.

530 

531PowerShell 명령은 [PowerShell 명령의 지속 변수](/docs/ko/hooks#persisted-variables-in-powershell-commands)에 설명된 조건에 따라 훅이 `CLAUDE_ENV_FILE`을 통해 유지하는 변수도 수신합니다. Claude Code v2.1.296 이상이 필요합니다.

518 532 

519`grep`, `rg`, `egrep`, `fgrep`, `findstr` 및 `git grep`의 종료 코드 1은 일치하는 항목이 없음을 의미합니다. `git diff`의 종료 코드 1은 변경 사항이 존재함을 의미합니다. 두 결과 모두 Claude에 명령 실패로 보고되지 않습니다. `robocopy`의 경우, 종료 코드 0부터 7까지는 복사된 파일 또는 감지된 추가 파일과 같은 정보 결과입니다. 종료 코드 8 이상은 실패로 계산됩니다.533`grep`, `rg`, `egrep`, `fgrep`, `findstr` 및 `git grep`의 종료 코드 1은 일치하는 항목이 없음을 의미합니다. `git diff`의 종료 코드 1은 변경 사항이 존재함을 의미합니다. 두 결과 모두 Claude에 명령 실패로 보고되지 않습니다. `robocopy`의 경우, 종료 코드 0부터 7까지는 복사된 파일 또는 감지된 추가 파일과 같은 정보 결과입니다. 종료 코드 8 이상은 실패로 계산됩니다.

520 534 


547 561 

548Read 도구는 파일 경로를 받아 줄 번호와 함께 내용을 반환합니다. Claude는 항상 절대 경로를 전달하도록 지시됩니다.562Read 도구는 파일 경로를 받아 줄 번호와 함께 내용을 반환합니다. Claude는 항상 절대 경로를 전달하도록 지시됩니다.

549 563 

550기본적으로 Read는 파일의 시작 부분에서 반환합니다. 전체 파일 읽기가 토큰 제한을 초과하면 Read는 첫 번째 페이지를 `PARTIAL view` 공지와 함께 반환하며, 이는 Claude가 받은 파일의 양과 `offset` 및 `limit`을 사용하여 더 읽는 방법을 알려줍니다. 명시적 `offset` 또는 `limit`을 전달하고 여전히 토큰 제한을 초과하는 읽기는 오류를 반환합니다.

551 

552명시적 `limit`이 있는 읽기는 선택된 줄이 토큰 제한에 맞을 수 있는 것을 초과하는 즉시 중지되고 나머지 범위를 로드하지 않고 오류를 반환합니다. 오류는 Claude에게 더 작은 `limit`을 사용하거나, 단일 줄이 그렇게 큰 경우에는 대신 [Grep](#grep-tool-behavior)으로 특정 내용을 검색하도록 지시합니다. v2.1.208 이전에는 Claude Code가 전체 범위를 메모리에 로드한 후 거부했으므로, 매우 긴 단일 줄이 있는 파일을 읽으면 메모리 부족이 발생할 수 있었습니다.

553 

554빈 파일을 읽으면 파일이 존재하지만 내용이 비어 있다는 공지가 반환되고, 마지막 줄을 지난 `offset`은 파일의 줄 수를 나타내는 공지를 반환합니다. v2.1.208 이전에는 빈 파일을 읽으면 끝을 지난 공지가 반환되었습니다.564빈 파일을 읽으면 파일이 존재하지만 내용이 비어 있다는 공지가 반환되고, 마지막 줄을 지난 `offset`은 파일의 줄 수를 나타내는 공지를 반환합니다. v2.1.208 이전에는 빈 파일을 읽으면 끝을 지난 공지가 반환되었습니다.

555 565 

556Read는 일반 텍스트 이상의 여러 파일 유형을 처리합니다:566Read는 일반 텍스트 이상의 여러 파일 유형을 처리합니다:

557 567 

558* **이미지**: PNG, JPG 및 기타 이미지 형식은 원본 바이트가 아닌 Claude가 볼 수 있는 시각적 콘텐츠로 반환됩니다. Claude Code는 모델의 이미지 크기 제한에 맞추기 위해 큰 이미지를 크기 조정하고 재압축하므로, Claude는 큰 스크린샷의 축소된 버전을 볼 수 있습니다. 크기 조정 후에도 500KB보다 큰 이미지는 픽셀 치수는 변경하지 않고 품질을 낮춘 JPEG로 다시 인코딩됩니다. Claude가 큰 이미지에서 세밀한 픽셀 수준의 세부 정보를 놓친 경우, 예를 들어 ImageMagick을 통해 Bash로 관심 영역을 먼저 자르도록 요청하십시오.568* **이미지**: PNG, JPG 및 기타 이미지 형식은 원본 바이트가 아닌 Claude가 볼 수 있는 시각적 콘텐츠로 반환됩니다. Claude Code는 모델의 이미지 크기 제한에 맞추기 위해 큰 이미지를 크기 조정하고 재압축하므로, Claude는 큰 스크린샷의 축소된 버전을 볼 수 있습니다. 크기 조정 후에도 500KB보다 큰 이미지는 픽셀 치수는 변경하지 않고 품질을 낮춘 JPEG로 다시 인코딩됩니다. Claude가 큰 이미지에서 세밀한 픽셀 수준의 세부 정보를 놓친 경우, 예를 들어 ImageMagick을 통해 Bash로 관심 영역을 먼저 자르도록 요청하십시오.

559* **PDF**: Claude는 짧은 `.pdf` 파일을 전체적으로 읽습니다. 10페이지보다 긴 PDF의 경우, `pages` 매개변수(예: `"1-5"`)를 사용하여 범위로 읽으며, 한 번에 최대 20페이지까지 읽습니다. 페이지 범위 읽기는 poppler-utils의 `pdftoppm`으로 페이지를 렌더링하므로, macOS에서는 `brew install poppler`로, Debian 및 Ubuntu에서는 `apt-get install poppler-utils`로 설치하십시오. Windows 및 기타 플랫폼에서는 `pdftoppm`을 `PATH`에 배치하는 poppler 빌드를 설치하십시오. 이것이 없으면 페이지 범위 읽기가 `pdftoppm is not installed` 오류로 실패합니다.569* **PDF**: Claude는 짧은 `.pdf` 파일을 전체적으로 읽습니다. 10페이지보다 긴 PDF의 경우, `pages` 매개변수(예: `"1-5"`)를 사용하여 범위로 읽으며, 한 번에 최대 20페이지까지 읽습니다. 페이지 범위 읽기는 poppler-utils의 `pdftoppm`으로 페이지를 렌더링하므로, macOS에서는 `brew install poppler`로, Debian 및 Ubuntu에서는 `apt-get install poppler-utils`로 설치하십시오. Windows 및 기타 플랫폼에서는 `pdftoppm`을 `PATH`에 배치하는 poppler 빌드를 설치하십시오. 이것이 없으면 페이지 범위 읽기가 `pdftoppm is not installed` 오류로 실패합니다.

560* **Jupyter 노트북**: `.ipynb` 파일은 코드, 마크다운 및 시각화를 포함한 모든 셀과 해당 출력을 반환합니다. Claude Code는 100MB를 초과하는 노트북 파일을 읽기를 거부합니다. 오류는 Claude에게 셀 슬라이스와 같은 노트북의 일부를 읽는 방법을 알려주며, 셸 명령을 사용합니다.570* **Jupyter 노트북**: `.ipynb` 파일은 코드, 마크다운 및 시각화를 포함한 모든 셀과 해당 출력을 반환합니다. 셀의 크기가 256 KB를 초과하거나 [토큰 제한](#large-files)을 초과하는 노트북은 대신 오류를 반환합니다. Claude Code는 100MB를 초과하는 노트북 파일을 읽기를 거부합니다. 오류는 Claude에게 셀 슬라이스와 같은 노트북의 일부를 읽는 방법을 알려주며, 셸 명령을 사용합니다.

561 571 

562Read는 디렉토리가 아닌 파일만 읽습니다. Claude는 `ls`와 같은 셸 명령을 사용하여 디렉토리 내용을 나열합니다.572Read는 디렉토리가 아닌 파일만 읽습니다. Claude는 `ls`와 같은 셸 명령을 사용하여 디렉토리 내용을 나열합니다.

563 573 

574<h3 id="large-files">

575 대용량 파일

576</h3>

577 

578Claude는 한 번의 Read 호출로 반환되는 양보다 큰 텍스트 파일도 읽을 수 있습니다. 기본적으로 한 번의 호출은 최대 25,000 토큰 또는 [`CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS`](/docs/ko/env-vars)에 설정한 값까지 반환하며, 256 KB를 초과하는 전체 파일은 거부하므로, Claude는 더 큰 파일을 `offset` 및 `limit`을 사용하여 페이지 단위로 읽습니다. Claude Code v2.1.296 이상에서는 필요한 경우(예: 사용자가 전체 파일을 요청한 경우) `allow_large: true`를 설정하여 전체 파일 또는 긴 줄 범위를 한 번의 호출로 읽을 수 있습니다. 이 읽기는 기본 제한 대신 세션의 [컨텍스트 윈도우](/docs/ko/context-window)에 남아 있는 공간을 기준으로 크기가 정해집니다. 이미지, PDF 및 노트북에는 기존 제한이 그대로 적용됩니다.

579 

580읽기가 기본 제한을 초과할 때 Claude가 받는 내용은 다음과 같습니다:

581 

582* **토큰 제한을 초과하는 전체 파일**: 파일의 첫 번째 페이지와 함께, Claude가 받은 파일의 양과 `offset` 및 `limit`을 사용하여 더 읽는 방법을 알려주는 `PARTIAL view` 공지

583* **256 KB를 초과하는 전체 파일, 또는 토큰 제한을 초과하는 `offset` 또는 `limit` 읽기**: `offset` 및 `limit`을 사용하여 일부를 읽거나, 대신 [Grep](#grep-tool-behavior)으로 특정 내용을 검색하도록 지시하는 오류

584 

564<h2 id="sendfeedback-tool-behavior">585<h2 id="sendfeedback-tool-behavior">

565 SendFeedback 도구 동작586 SendFeedback 도구 동작

566</h2>587</h2>


734 Write 도구 동작755 Write 도구 동작

735</h2>756</h2>

736 757 

737Write 도구는 새 파일을 생성하거나 기존 파일을 제공된 전체 콘텐츠로 덮어씁니다. 추가하거나 병합하지 않습니다.758Write 도구는 새 파일을 생성하거나 기존 파일을 제공된 전체 콘텐츠로 덮어씁니다. 추가하거나 병합하지 않습니다. 또한 Write는 [UTF-8이 아닌 파일](#non-utf-8-files)에 설명된 대로 바이트가 디코딩되지 않는 기존 파일도 덮어쓰며, 새 콘텐츠를 UTF-8로 저장합니다.

738 759 

739Claude가 기존 파일을 덮어쓰기 전에 현재 대화에서 읽어야 하는지 여부는 모델과 파일에 따라 다릅니다.760Claude가 기존 파일을 덮어쓰기 전에 현재 대화에서 읽어야 하는지 여부는 모델과 파일에 따라 다릅니다.

740 761 

741* Claude Opus 4.6, Claude Haiku 4.5 및 이전 모델은 항상 읽기를 요구하므로, 읽지 않은 기존 파일에 대한 Write는 오류로 실패합니다.762* Claude Opus 4.6, Claude Haiku 4.5 및 이전 모델은 항상 읽기를 요구하므로, 읽지 않은 기존 파일에 대한 Write는 오류로 실패합니다.

742* 최신 모델은 [읽기-편집 전 동작](#edit-tool-behavior)과 동일한 조건에서 이 세션에서 읽지 않은 파일을 덮어쓸 수 있습니다. 읽기에 권한 프롬프트가 필요하지 않고 Read 도구를 사용할 수 있습니다.763* 최신 모델은 [읽기-편집 전 동작](#edit-tool-behavior)과 동일한 조건에서 이 세션에서 읽지 않은 파일을 덮어쓸 수 있습니다. 읽기에 권한 프롬프트가 필요하지 않고 Read 도구를 사용할 수 있습니다.

743* Jupyter 노트북 및 [`PARTIAL view` 공지](#read-tool-behavior)가 있는 부분적으로만 읽은 파일은 모든 모델에서 읽기를 요구합니다.764* Jupyter 노트북 및 [`PARTIAL view` 공지](#large-files)가 있는 부분적으로만 읽은 파일은 모든 모델에서 읽기를 요구합니다.

744 765 

745이 제약은 새 파일에는 적용되지 않습니다. v2.1.228 이전에는 모든 모델이 기존 파일을 덮어쓰기 전에 읽기를 요구했습니다.766이 제약은 새 파일에는 적용되지 않습니다. v2.1.228 이전에는 모든 모델이 기존 파일을 덮어쓰기 전에 읽기를 요구했습니다.

746 767 

Details

1212로그인 후 `API Error: 403 Request not allowed`가 표시되면:1212로그인 후 `API Error: 403 Request not allowed`가 표시되면:

1213 1213 

1214* **Claude Pro/Max 사용자**: [claude.ai/settings](https://claude.ai/settings)에서 구독이 활성화되어 있는지 확인1214* **Claude Pro/Max 사용자**: [claude.ai/settings](https://claude.ai/settings)에서 구독이 활성화되어 있는지 확인

1215* **Anthropic Console 사용자**: 계정에 "Claude Code" 또는 "Developer" 역할이 있는지 확인. 관리자는 Anthropic Console의 설정 → 멤버에서 이를 할당합니다.1215* **Anthropic Console 사용자**: 계정에 "Claude Code" 또는 "Developer" 역할이 있는지 확인. 관리자는 [platform.claude.com/settings/members](https://platform.claude.com/settings/members)의 Console 멤버 페이지에서 이를 할당합니다.

1216* **프록시 뒤에 있음**: 회사 프록시가 API 요청을 방해할 수 있습니다. 프록시 설정은 [네트워크 구성](/docs/ko/network-config)을 참조하세요.1216* **프록시 뒤에 있음**: 회사 프록시가 API 요청을 방해할 수 있습니다. 프록시 설정은 [네트워크 구성](/docs/ko/network-config)을 참조하세요.

1217 1217 

1218<h3 id="claude-code-access-has-not-been-granted-for-this-account">1218<h3 id="claude-code-access-has-not-been-granted-for-this-account">

vs-code.md +3 −2

Details

237 237 

238보관된 세션을 복원하려면 **Archived sessions**을 확장하고 **Unarchive session**을 클릭합니다. 보관된 모든 세션을 한 번에 복원하려면 Activity Bar의 세션 목록에서 **Archived sessions** 헤더 위에 마우스를 올리고 해당 보관 해제 아이콘을 클릭합니다. Claude Code v2.1.277 이상이 필요합니다. v2.1.257 이전에는 작업이 **Delete session**이었으며, 이는 복원할 방법이 없는 세션을 숨겼습니다. 그 후 삭제한 세션은 업그레이드 후 **Archived sessions** 아래에 나타납니다.238보관된 세션을 복원하려면 **Archived sessions**을 확장하고 **Unarchive session**을 클릭합니다. 보관된 모든 세션을 한 번에 복원하려면 Activity Bar의 세션 목록에서 **Archived sessions** 헤더 위에 마우스를 올리고 해당 보관 해제 아이콘을 클릭합니다. Claude Code v2.1.277 이상이 필요합니다. v2.1.257 이전에는 작업이 **Delete session**이었으며, 이는 복원할 방법이 없는 세션을 숨겼습니다. 그 후 삭제한 세션은 업그레이드 후 **Archived sessions** 아래에 나타납니다.

239 239 

240재개한 대화가 계획 모드에서 끝난 경우 Claude Code는 계획 모드를 복원합니다. Claude Code v2.1.246 이상이 필요합니다. Claude Code는 두 가지 경우에 복원하지 않습니다:240재개한 대화가 플랜 모드에서 끝난 경우 Claude Code는 플랜 모드를 복원합니다. Claude Code v2.1.246 이상이 필요합니다. Claude Code는 다음 경우에 복원하지 않습니다:

241 241 

242* 확장 프로그램이 `claudeCode.initialPermissionMode`에서 또는 이전 대화에서 이월되는 선택에서 [시작 권한 모드를 선택](/docs/ko/permission-modes#switch-permission-modes)합니다242* 확장 프로그램이 `claudeCode.initialPermissionMode`에서 또는 이전 대화에서 이월되는 선택에서 [시작 권한 모드를 선택](/docs/ko/permission-modes#switch-permission-modes)합니다

243* `claudeCode.claudeProcessWrapper`가 구성되어 있습니다243* `claudeCode.claudeProcessWrapper`가 구성되어 있습니다

244* [거부 규칙](/docs/ko/permissions#manage-permissions)이 [`ExitPlanMode`](/docs/ko/tools-reference) 도구를 제거합니다

244 245 

245<h3 id="resume-cloud-sessions-from-claude-ai">246<h3 id="resume-cloud-sessions-from-claude-ai">

246 Claude.ai에서 클라우드 세션 재개247 Claude.ai에서 클라우드 세션 재개


479 480 

480Claude는 브라우저 작업을 위해 새 탭을 열고 브라우저의 로그인 상태를 공유하므로, 이미 로그인한 모든 사이트에 액세스할 수 있습니다.481Claude는 브라우저 작업을 위해 새 탭을 열고 브라우저의 로그인 상태를 공유하므로, 이미 로그인한 모든 사이트에 액세스할 수 있습니다.

481 482 

482`@browser`를 입력하지 않고도 각 세션이 시작될 때 브라우저에 연결되도록 하려면 [기본적으로 Chrome 활성화](/docs/ko/chrome#enable-chrome-by-default)를 참조합니다. 이렇게 연결된 세션에서 Claude Code가 브라우저 작업 전에 확인을 요청하는 경우에 대해서는 [VS Code 세션의 권한 프롬프트](/docs/ko/chrome#permission-prompts-in-vs-code-sessions)를 참조합니다.483`@browser`를 입력하지 않고도 각 세션이 시작될 때 브라우저에 연결되도록 하려면 [기본적으로 Chrome 활성화](/docs/ko/chrome#enable-chrome-by-default)를 참조합니다. Claude Code가 브라우저 작업 전에 확인을 요청하는 경우에 대해서는 [VS Code 세션의 권한 프롬프트](/docs/ko/chrome#permission-prompts-in-vs-code-sessions)를 참조합니다.

483 484 

484설정 지침, 전체 기능 목록 및 문제 해결에 대해서는 [Claude Code를 Chrome과 함께 사용](/docs/ko/chrome)을 참조합니다.485설정 지침, 전체 기능 목록 및 문제 해결에 대해서는 [Claude Code를 Chrome과 함께 사용](/docs/ko/chrome)을 참조합니다.

485 486 

workflows.md +1 −1

Details

511* 일상적인 작업을 위해 일반적으로 더 작은 모델로 전환하는 경우 대규모 실행 전에 `/model`을 확인합니다511* 일상적인 작업을 위해 일반적으로 더 작은 모델로 전환하는 경우 대규모 실행 전에 `/model`을 확인합니다

512* 작업을 설명할 때 Claude에게 가장 강력한 것이 필요하지 않은 단계에 더 작은 모델을 사용하도록 요청합니다512* 작업을 설명할 때 Claude에게 가장 강력한 것이 필요하지 않은 단계에 더 작은 모델을 사용하도록 요청합니다

513 513 

514조직의 [`availableModels` 허용 목록](/docs/ko/model-config#restrict-model-selection)이 스크립트가 에이전트에 대해 요청하는 모델을 차단하면 해당 에이전트는 대신 대체 모델에서 실행되며, [서브에이전트와 같은 대체 규칙](/docs/ko/sub-agents#choose-a-model)을 따릅니다. [`/workflows`](#watch-the-run)의 실행 진행 보기는 요청된 모델과 대체된 모델을 모두 이름 지정하는 경고를 표시합니다.514조직의 [`availableModels` 허용 목록](/docs/ko/model-config#restrict-model-selection)이 스크립트가 에이전트에 대해 요청하는 모델을 차단하면 해당 에이전트는 대신 대체 모델에서 실행되며, [서브에이전트와 같은 대체 규칙](/docs/ko/sub-agents#choose-a-model)을 따릅니다.

515 515 

516<h3 id="set-a-size-guideline">516<h3 id="set-a-size-guideline">

517 크기 지침 설정517 크기 지침 설정

worktrees.md +3 −1

Details

268 268 

269 동일한 읽기 통과는 `.claude/agents` 및 `.claude/commands`를 포함합니다. Skills의 경우 읽기 통과에는 Claude Code v2.1.277 이상이 필요합니다.269 동일한 읽기 통과는 `.claude/agents` 및 `.claude/commands`를 포함합니다. Skills의 경우 읽기 통과에는 Claude Code v2.1.277 이상이 필요합니다.

270 270 

271이 모든 것들은 `--worktree`로 worktree를 생성했든, `git worktree add`로 생성했든, 또는 [데스크톱 앱](/docs/ko/desktop#work-in-parallel-with-sessions)을 통해 생성했든 적용됩니다.271이 모든 것들은 `--worktree`로 worktree를 생성했든, `git worktree add`로 생성했든 적용됩니다.

272 

273[데스크톱 앱](/docs/ko/desktop#work-in-parallel-with-sessions)에서 시작한 worktree 세션에서 Claude Code는 설정, 훅, 스킬, 에이전트, 명령, [`.mcp.json`](/docs/ko/mcp#project-scope) 서버와 같은 프로젝트 구성을 worktree가 아닌 메인 체크아웃의 루트에서 읽습니다. 훅 명령은 해당 루트에서 실행되며, `${CLAUDE_PROJECT_DIR}`는 해당 루트를 가리킵니다. Claude가 작업 중인 파일에 접근하려면 훅의 [`cwd` 입력 필드](/docs/ko/hooks#common-input-fields)에서 worktree의 경로를 읽습니다. `CLAUDE.md` 파일과 `.claude/rules/`는 여전히 worktree에서 로드됩니다.

272 274 

273<h2 id="manage-worktrees-manually">275<h2 id="manage-worktrees-manually">

274 worktree 수동 관리276 worktree 수동 관리