SpyBara
Go Premium

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

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

771 771 

772콜백이 타임아웃을 초과하면 Claude Code는 이를 취소하고 출력을 버리며, 세션은 중단되지 않고 계속됩니다. 다음에 일어나는 일은 이벤트에 따라 다릅니다:772콜백이 타임아웃을 초과하면 Claude Code는 이를 취소하고 출력을 버리며, 세션은 중단되지 않고 계속됩니다. 다음에 일어나는 일은 이벤트에 따라 다릅니다:

773 773 

774* `PreToolUse`: Claude Code는 도구 호출을 차단합니다. 그 대신 Claude는 훅이 타임아웃 전에 응답하지 않았다는 도구 결과를 받고 턴이 계속됩니다. v2.1.210 이전에는 Claude Code가 타임아웃을 Claude에 사용자 거부로 보고했으며, 이는 무인 세션을 중지하고 입력을 기다리게 했습니다.774* `PreToolUse`: Claude Code는 도구 호출을 차단합니다. 다른 모든 훅이 아무것도 반환하지 않았거나 `allow` 결정만 반환한 경우, 도구 결과는 Claude에게 훅이 타임아웃 전에 응답하지 않았다고 알리고 턴이 계속됩니다. 다른 훅이 이미 호출을 거부한 경우에도 해당 거부는 여전히 Claude에 전달됩니다: 도구 결과에는 그 훅의 사유가 포함되며, 그 뒤에 타임아웃 텍스트가 이어질 수 있습니다.

775 

776 v2.1.210 이전에는 Claude Code가 타임아웃을 Claude에 사용자 거부로 보고했으며, 이는 무인 세션을 중지하고 입력을 기다리게 했습니다.

775* `PostToolUse` 및 `PostToolUseFailure`: Claude Code는 도구 결과를 유지하고 턴이 계속됩니다.777* `PostToolUse` 및 `PostToolUseFailure`: Claude Code는 도구 결과를 유지하고 턴이 계속됩니다.

776* `UserPromptSubmit` 및 [`UserPromptExpansion`](https://code.claude.com/docs/ko/hooks#userpromptexpansion): Claude Code는 훅과 타임아웃을 명시하는 메시지로 프롬프트를 차단하고 세션은 계속됩니다. v2.1.208 이전에는 Claude Code가 이러한 이벤트의 콜백 타임아웃 시 `error_during_execution`으로 쿼리를 종료했습니다.778* `UserPromptSubmit` 및 [`UserPromptExpansion`](https://code.claude.com/docs/ko/hooks#userpromptexpansion): Claude Code는 훅과 타임아웃을 명시하는 메시지로 프롬프트를 차단하고 세션은 계속됩니다. v2.1.208 이전에는 Claude Code가 이러한 이벤트의 콜백 타임아웃 시 `error_during_execution`으로 쿼리를 종료했습니다.

777* `Stop` 및 `SubagentStop`: 타임아웃된 콜백은 결정을 반환하지 않은 것으로 계산됩니다. 에이전트 또는 서브에이전트는 해당 콜백이 이를 허용한 것처럼 중지되며, 이벤트의 다른 훅의 결정은 여전히 적용됩니다. Claude Code v2.1.273 이전에는 타임아웃된 `Stop` 또는 `SubagentStop` 콜백이 실패한 훅 실행으로 계산되었으며, Claude Code는 이벤트의 다른 훅의 결정을 버렸습니다.779* `Stop` 및 `SubagentStop`: 타임아웃된 콜백은 결정을 반환하지 않은 것으로 계산됩니다. 에이전트 또는 서브에이전트는 해당 콜백이 이를 허용한 것처럼 중지되며, 이벤트의 다른 훅의 결정은 여전히 적용됩니다. Claude Code v2.1.273 이전에는 타임아웃된 `Stop` 또는 `SubagentStop` 콜백이 실패한 훅 실행으로 계산되었으며, Claude Code는 이벤트의 다른 훅의 결정을 버렸습니다.

Details

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

310| `options.limit` | `number` | `undefined` | 반환할 최대 메시지 수 |310| `options.limit` | `number` | `undefined` | 반환할 최대 메시지 수 |

311| `options.offset` | `number` | `undefined` | 시작 부분에서 건너뛸 메시지 수 |311| `options.offset` | `number` | `undefined` | 시작 부분에서 건너뛸 메시지 수 |

312| `options.includeSystemMessages` | `boolean` | `false` | `true`인 경우 사용자 및 어시스턴트 메시지와 함께 압축 경계와 같은 시스템 메시지도 반환합니다 |

312 313 

313#### 반환 유형: `SessionMessage`314#### 반환 유형: `SessionMessage`

314 315 

315| 속성 | 유형 | 설명 |316| 속성 | 유형 | 설명 |

316| :- | :- | :- |317| :- | :- | :- |

317| `type` | `"user" \| "assistant"` | 메시지 역할 |318| `type` | `"user" \| "assistant" \| "system"` | 메시지 역할입니다. `"system"`은 `options.includeSystemMessages`가 `true`인 경우에만 나타납니다 |

318| `uuid` | `string` | 고유 메시지 식별자 |319| `uuid` | `string` | 고유 메시지 식별자 |

319| `session_id` | `string` | 이 메시지가 속한 세션 |320| `session_id` | `string` | 이 메시지가 속한 세션 |

320| `message` | `unknown` | 트랜스크립트의 원본 메시지 페이로드 |321| `message` | `unknown` | 트랜스크립트의 원본 메시지 페이로드 |


632 }): Promise<SDKControlReloadPluginsResponse>;633 }): Promise<SDKControlReloadPluginsResponse>;

633 reloadSkills(): Promise<SDKControlReloadSkillsResponse>;634 reloadSkills(): Promise<SDKControlReloadSkillsResponse>;

634 reloadOutputStyles(): Promise<SDKControlReloadOutputStylesResponse>;635 reloadOutputStyles(): Promise<SDKControlReloadOutputStylesResponse>;

636 seedReadState(path: string, mtime: number): Promise<void>;

635 accountInfo(): Promise<AccountInfo>;637 accountInfo(): Promise<AccountInfo>;

636 reconnectMcpServer(serverName: string): Promise<void>;638 reconnectMcpServer(serverName: string): Promise<void>;

637 toggleMcpServer(serverName: string, enabled: boolean): Promise<void>;639 toggleMcpServer(serverName: string, enabled: boolean): Promise<void>;

638 setMcpServers(servers: Record<string, McpServerConfig>): Promise<McpSetServersResult>;640 setMcpServers(servers: Record<string, McpServerConfig>): Promise<McpSetServersResult>;

641 setMcpPermissionModeOverride(

642 serverName: string,

643 mode: 'default' | 'auto' | null

644 ): Promise<{ warning?: string }>;

639 readMcpResource(serverName: string, uri: string): Promise<SDKControlMcpReadResourceResponse>;645 readMcpResource(serverName: string, uri: string): Promise<SDKControlMcpReadResourceResponse>;

640 streamInput(stream: AsyncIterable<SDKUserMessage>): Promise<void>;646 streamInput(stream: AsyncIterable<SDKUserMessage>): Promise<void>;

641 stopTask(taskId: string): Promise<void>;647 stopTask(taskId: string): Promise<void>;

648 backgroundTasks(toolUseId?: string): Promise<boolean>;

642 close(): void;649 close(): void;

643}650}

644```651```


665| `reloadPlugins(options?)` | 디스크에서 플러그인을 다시 로드하여, 세션 중에 설치하거나 편집한 플러그인이 실행 중인 세션에 반영되도록 합니다. 세션의 명령, 서브에이전트, 플러그인, MCP 서버 상태를 나열하는 [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse)로 resolve됩니다. Agent SDK v0.2.85 이상이 필요합니다. [`holdOnCacheImpact` 옵션](#sdkcontrolreloadpluginsresponse)에는 Agent SDK v0.3.268 이상이 필요합니다 |672| `reloadPlugins(options?)` | 디스크에서 플러그인을 다시 로드하여, 세션 중에 설치하거나 편집한 플러그인이 실행 중인 세션에 반영되도록 합니다. 세션의 명령, 서브에이전트, 플러그인, MCP 서버 상태를 나열하는 [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse)로 resolve됩니다. Agent SDK v0.2.85 이상이 필요합니다. [`holdOnCacheImpact` 옵션](#sdkcontrolreloadpluginsresponse)에는 Agent SDK v0.3.268 이상이 필요합니다 |

666| `reloadSkills()` | 디스크에서 스킬을 다시 로드하여, 세션 중에 추가하거나 편집한 스킬을 실행 중인 세션에서 사용할 수 있게 합니다. 다시 로드한 후 사용 가능한 스킬을 나열하는 [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse)로 resolve됩니다. Agent SDK v0.3.163 이상이 필요합니다 |673| `reloadSkills()` | 디스크에서 스킬을 다시 로드하여, 세션 중에 추가하거나 편집한 스킬을 실행 중인 세션에서 사용할 수 있게 합니다. 다시 로드한 후 사용 가능한 스킬을 나열하는 [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse)로 resolve됩니다. Agent SDK v0.3.163 이상이 필요합니다 |

667| `reloadOutputStyles()` | 디스크에서 [출력 스타일](https://code.claude.com/docs/ko/output-styles.md)을 다시 읽어, 세션 중에 추가하거나 편집한 스타일 파일을 실행 중인 세션에서 사용할 수 있게 합니다. 다시 로드한 후 사용 가능한 스타일 이름을 나열하는 [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse)로 resolve됩니다. Agent SDK v0.3.261 이상이 필요합니다 |674| `reloadOutputStyles()` | 디스크에서 [출력 스타일](https://code.claude.com/docs/ko/output-styles.md)을 다시 읽어, 세션 중에 추가하거나 편집한 스타일 파일을 실행 중인 세션에서 사용할 수 있게 합니다. 다시 로드한 후 사용 가능한 스타일 이름을 나열하는 [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse)로 resolve됩니다. Agent SDK v0.3.261 이상이 필요합니다 |

675| `seedReadState(path, mtime)` | 파일을 이미 읽은 것으로 표시하여 이후 Edit가 `File has not been read yet`으로 실패하지 않도록 합니다. [`seedReadState()`](#seedreadstate)를 참조하세요. TypeScript SDK v0.2.83 이상이 필요합니다 |

668| `accountInfo()` | 계정 정보를 반환합니다 |676| `accountInfo()` | 계정 정보를 반환합니다 |

669| `reconnectMcpServer(serverName)` | 이름으로 MCP 서버에 다시 연결합니다. 이름이 `.mcp.json` 또는 `~/.claude.json`과 같은 설정 파일의 항목과도 일치하는 경우, Claude Code는 설정 파일 항목이 아니라 [`mcpServers`](#options) 또는 `setMcpServers()`로 구성한 서버에 다시 연결합니다. 이 확인 순서에는 Claude Code v2.1.257 이상이 필요합니다 |677| `reconnectMcpServer(serverName)` | 이름으로 MCP 서버에 다시 연결합니다. 이름이 `.mcp.json` 또는 `~/.claude.json`과 같은 설정 파일의 항목과도 일치하는 경우, Claude Code는 설정 파일 항목이 아니라 [`mcpServers`](#options) 또는 `setMcpServers()`로 구성한 서버에 다시 연결합니다. 이 확인 순서에는 Claude Code v2.1.257 이상이 필요합니다 |

670| `toggleMcpServer(serverName, enabled)` | `reconnectMcpServer()`와 동일한 이름 확인 방식으로 이름을 통해 MCP 서버를 활성화하거나 비활성화합니다. 서버를 비활성화하면 연결이 끊기고 해당 도구가 제거됩니다. 서버 종류별로 필요한 Claude Code 버전은 [`toggleMcpServer()`](#togglemcpserver)를 참조하세요 |678| `toggleMcpServer(serverName, enabled)` | `reconnectMcpServer()`와 동일한 이름 확인 방식으로 이름을 통해 MCP 서버를 활성화하거나 비활성화합니다. 서버를 비활성화하면 연결이 끊기고 해당 도구가 제거됩니다. 서버 종류별로 필요한 Claude Code 버전은 [`toggleMcpServer()`](#togglemcpserver)를 참조하세요 |

671| `setMcpServers(servers)` | 이 메서드가 관리하는 MCP 서버, 즉 이 메서드로 추가한 서버와 [프로세스 내 SDK 서버](#createsdkmcpserver)를 교체합니다. 추가 및 제거된 서버와 오류를 알려 주는 [`McpSetServersResult`](#mcpsetserversresult)로 resolve되며, 다른 어떤 서버가 연결 상태로 유지되는지는 해당 섹션에서 설명합니다 |679| `setMcpServers(servers)` | 이 메서드가 관리하는 MCP 서버, 즉 이 메서드로 추가한 서버와 [프로세스 내 SDK 서버](#createsdkmcpserver)를 교체합니다. 추가 및 제거된 서버와 오류를 알려 주는 [`McpSetServersResult`](#mcpsetserversresult)로 resolve되며, 다른 어떤 서버가 연결 상태로 유지되는지는 해당 섹션에서 설명합니다 |

680| `setMcpPermissionModeOverride(serverName, mode)` | 한 MCP 서버 도구의 권한 모드를 세션보다 엄격한 모드로 재정의하거나, `null`로 재정의를 지웁니다. 스트리밍 입력 모드에서만 사용할 수 있습니다. [`setMcpPermissionModeOverride()`](#setmcppermissionmodeoverride)를 참조하세요. TypeScript SDK v0.3.187 이상이 필요합니다 |

672| `readMcpResource(serverName, uri)` | *알파.* 애플리케이션이 도구의 위젯을 렌더링할 수 있도록 연결된 MCP 서버에서 MCP Apps `ui://` 리소스 하나를 읽습니다. [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse)로 resolve됩니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다 |681| `readMcpResource(serverName, uri)` | *알파.* 애플리케이션이 도구의 위젯을 렌더링할 수 있도록 연결된 MCP 서버에서 MCP Apps `ui://` 리소스 하나를 읽습니다. [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse)로 resolve됩니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다 |

673| `streamInput(stream)` | 멀티턴 대화를 위해 입력 메시지를 쿼리로 스트리밍합니다 |682| `streamInput(stream)` | 멀티턴 대화를 위해 입력 메시지를 쿼리로 스트리밍합니다 |

674| `stopTask(taskId)` | ID로 실행 중인 백그라운드 작업을 중지합니다 |683| `stopTask(taskId)` | ID로 실행 중인 백그라운드 작업을 중지합니다 |

684| `backgroundTasks(toolUseId?)` | 턴이 기다리고 있는 실행 중인 Bash 명령과 서브에이전트를 백그라운드로 이동합니다. 대화형 터미널에서 Ctrl+B를 누르는 것과 같습니다. [`backgroundTasks()`](#backgroundtasks)를 참조하세요. TypeScript SDK v0.2.139 이상이 필요합니다 |

675| `close()` | 쿼리를 닫고 기본 프로세스를 종료합니다. 쿼리를 강제로 종료하고 모든 리소스를 정리합니다 |685| `close()` | 쿼리를 닫고 기본 프로세스를 종료합니다. 쿼리를 강제로 종료하고 모든 리소스를 정리합니다 |

676 686 

687#### `setMcpPermissionModeOverride()`

688 

689한 MCP 서버 도구의 권한 모드를 세션보다 엄격한 모드로 재정의하거나, `null`로 재정의를 지웁니다. 세션이 작업별 프롬프트를 건너뛰는 모드로 실행되지만 특정 서버의 도구는 여전히 검토해야 할 때 사용합니다. TypeScript SDK v0.3.187 이상이 필요합니다.

690 

691`mode`로 다음 세 가지 값 중 하나를 전달합니다.

692 

693* `'default'`: Claude Code는 해당 서버의 도구 호출을 [수동 모드](https://code.claude.com/docs/ko/permission-modes.md#available-modes)와 같은 방식으로 평가합니다.

694* `'auto'`: Claude Code는 해당 서버의 도구 호출을 [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode) 분류기로 라우팅합니다. 세션에서 분류기를 사용할 수 없으면 Claude Code는 이 값을 거부합니다.

695* `null`: 재정의를 지웁니다.

696 

697재정의는 세션이 작업별 프롬프트를 건너뛰는 모드인 `bypassPermissions` 또는 `auto`에 있는 동안에만 적용됩니다. 다른 세션 모드에서는 Claude Code가 재정의를 무시하므로, 재정의가 세션이 허용하는 범위를 넓히는 일은 없습니다.

698 

699해당 이름의 서버가 아직 알려지지 않은 경우 promise는 `{ warning }`으로 완료됩니다. Claude Code는 재정의를 그대로 저장하고, 정확히 그 이름을 가진 서버가 연결되면 적용하므로, 이 경고는 실패가 아니라 오타 확인용입니다.

700 

701`setModel()` 및 `setPermissionMode()`와 마찬가지로 스트리밍 입력 모드에서만 사용할 수 있습니다.

702 

703#### `seedReadState()`

704 

705파일을 이미 읽은 것으로 표시하여 이후 Edit가 `File has not been read yet`으로 실패하지 않도록 합니다. 애플리케이션이 대화 컨텍스트에서 이전 `Read` 결과를 제거했고 Claude가 다음에 해당 파일을 편집할 때 사용합니다. TypeScript SDK v0.2.83 이상이 필요합니다.

706 

707`mtime`에는 이전에 읽은 시점의 파일 수정 시간을 epoch 이후 정수 밀리초로 전달합니다(예: `Math.floor(stat.mtimeMs)`). 디스크의 파일이 그 시간 이후에 변경되었다면 Claude Code는 표시를 건너뜁니다.

708 

709promise는 파일이 표시되었는지 여부와 관계없이 완료되므로, promise가 완료되었다고 해서 어느 쪽이 일어났는지 알 수는 없습니다.

710 

711#### `backgroundTasks()`

712 

713턴이 기다리고 있는 실행 중인 Bash 명령과 서브에이전트를 백그라운드로 이동합니다. 대화형 터미널에서 Ctrl+B를 누르는 것과 같습니다. 특정 도구 호출이 시작한 Bash 명령이나 서브에이전트만 백그라운드로 보내려면 해당 도구 호출의 `toolUseId`를 전달하고, 모든 포그라운드 작업을 백그라운드로 보내려면 생략하세요. TypeScript SDK v0.2.139 이상이 필요합니다.

714 

715백그라운드로 보내진 각 도구 호출은 백그라운드에서 실행 중이라는 결과와 함께 즉시 Claude에 반환되고, 턴은 계속 진행되며, 작업이 완료되면 Claude Code가 [`SDKTaskNotificationMessage`](#sdktasknotificationmessage)를 내보냅니다.

716 

717백그라운드 작업이 활성화된 세션에서 promise는 boolean으로 완료됩니다.

718 

719* **`true`**: 작업이 백그라운드로 보내졌거나, `toolUseId`를 생략했습니다.

720* **`false`**: 전달한 `toolUseId`와 일치하는 포그라운드 작업이 없습니다.

721 

722[`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](https://code.claude.com/docs/ko/env-vars) 등으로 세션에서 백그라운드 작업이 비활성화된 경우에는 promise가 대신 거부되며 아무것도 백그라운드로 보내지지 않습니다.

723 

677#### `applyFlagSettings()`724#### `applyFlagSettings()`

678 725 

679쿼리를 다시 시작하지 않고 실행 중인 세션의 [설정](https://code.claude.com/docs/ko/settings.md)을 변경합니다. 에이전트가 신뢰할 수 없는 입력을 읽은 후 `permissions`를 강화하는 경우처럼, 전용 setter가 없는 설정을 세션 중에 변경해야 할 때 사용하세요. `setModel()`과 `setPermissionMode()`는 해당 두 키의 전용 setter이며, `applyFlagSettings()`는 설정 키의 어떤 하위 집합이든 허용하는 일반 형식입니다. 여기에 `model`을 전달하면 `setModel()`과 동일하게 동작합니다.726쿼리를 다시 시작하지 않고 실행 중인 세션의 [설정](https://code.claude.com/docs/ko/settings.md)을 변경합니다. 에이전트가 신뢰할 수 없는 입력을 읽은 후 `permissions`를 강화하는 경우처럼, 전용 setter가 없는 설정을 세션 중에 변경해야 할 때 사용하세요. `setModel()`과 `setPermissionMode()`는 해당 두 키의 전용 setter이며, `applyFlagSettings()`는 설정 키의 어떤 하위 집합이든 허용하는 일반 형식입니다. 여기에 `model`을 전달하면 `setModel()`과 동일하게 동작합니다.


1472 | SDKPermissionDeniedMessage1519 | SDKPermissionDeniedMessage

1473 | SDKPromptSuggestionMessage1520 | SDKPromptSuggestionMessage

1474 | SDKAPIRetryMessage1521 | SDKAPIRetryMessage

1522 | SDKControlRequestProgressMessage

1523 | SDKModelRefusalFallbackMessage

1524 | SDKModelRefusalNoFallbackMessage

1475 | SDKMirrorErrorMessage1525 | SDKMirrorErrorMessage

1476 | SDKInformationalMessage1526 | SDKInformationalMessage

1477 | SDKConversationResetMessage;1527 | SDKConversationResetMessage;

1478```1528```

1479 1529 

1530이 유니온에 포함된 세 가지 메시지는 제어 요청 진행 상황과 모델 거부를 보고합니다. 세 메시지 모두 `type: "system"`을 가지므로, 각 항목에 함께 나열된 `subtype`으로 구분합니다:

1531 

1532* `SDKControlRequestProgressMessage`, `subtype: "control_request_progress"`: 클라이언트가 보낸 장시간 실행 제어 요청의 진행 상황을 보고합니다. `request_id`는 메시지를 해당 요청과 연결하며, `status`는 `"started"` 또는 `"api_retry"`입니다. Agent SDK v0.3.203 이상이 필요합니다.

1533* `SDKModelRefusalFallbackMessage`, `subtype: "model_refusal_fallback"`: 모델이 거부로 스트림을 종료하고 해당 턴이 폴백 모델로 재시도될 때 생성됩니다. `original_model`과 `fallback_model`을 포함합니다. Agent SDK v0.3.170 이상이 필요합니다.

1534* `SDKModelRefusalNoFallbackMessage`, `subtype: "model_refusal_no_fallback"`: 모델이 거부로 스트림을 종료했지만 재시도가 실행되지 않을 때 생성됩니다. 예를 들어 폴백 모델이 구성되지 않은 경우입니다. `original_model`을 포함합니다. Agent SDK v0.3.193 이상이 필요합니다.

1535 

1480### `SDKAssistantMessage`1536### `SDKAssistantMessage`

1481 1537 

1482어시스턴트 응답 메시지입니다.1538어시스턴트 응답 메시지입니다.


1636 stop_reason: string | null;1692 stop_reason: string | null;

1637 ttft_ms?: number;1693 ttft_ms?: number;

1638 ttft_stream_ms?: number;1694 ttft_stream_ms?: number;

1695 time_to_request_ms?: number;

1639 user_message_uuid?: string;1696 user_message_uuid?: string;

1640 user_message_uuids?: string[];1697 user_message_uuids?: string[];

1641 resume_reason?: string;1698 resume_reason?: string;


1701* `api_error_status`: 대화를 종료시킨 API 오류의 HTTP 상태 코드입니다. 턴이 API 오류 없이 끝난 경우 없거나 `null`입니다.1758* `api_error_status`: 대화를 종료시킨 API 오류의 HTTP 상태 코드입니다. 턴이 API 오류 없이 끝난 경우 없거나 `null`입니다.

1702* `ttft_ms`: 첫 번째 완전한 어시스턴트 메시지가 도착한 시점에 측정한 첫 토큰까지의 시간(밀리초)입니다. success 분기에만 있습니다.1759* `ttft_ms`: 첫 번째 완전한 어시스턴트 메시지가 도착한 시점에 측정한 첫 토큰까지의 시간(밀리초)입니다. success 분기에만 있습니다.

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

1761* `time_to_request_ms`: 턴 시작부터 Claude Code가 API 요청을 보낼 때까지의 시간(밀리초)입니다. success 분기에만 있습니다. Claude Code v2.1.162 이상이 필요합니다.

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

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

1706* `resume_reason`: 이 턴이 재시작으로 중단된 턴을 이어가는 이유입니다. 두 분기 모두에 있습니다. [`resume_reason`](#resume_reason)을 참조하세요.1764* `resume_reason`: 이 턴이 재시작으로 중단된 턴을 이어가는 이유입니다. 두 분기 모두에 있습니다. [`resume_reason`](#resume_reason)을 참조하세요.


1772* 사용자의 어떤 메시지에도 응답하지 않거나, `uuid` 없이 보낸 메시지에 응답하는 턴1830* 사용자의 어떤 메시지에도 응답하지 않거나, `uuid` 없이 보낸 메시지에 응답하는 턴

1773* 충돌한 워커 프로세스 이후의 0으로 초기화된 결과처럼, 사용자가 보낸 어떤 메시지에도 응답하지 않는 결과1831* 충돌한 워커 프로세스 이후의 0으로 초기화된 결과처럼, 사용자가 보낸 어떤 메시지에도 응답하지 않는 결과

1774 1832 

1833[`UserPromptSubmit`](https://code.claude.com/docs/ko/hooks#userpromptsubmit) 훅이 자체 턴을 시작하는 메시지를 차단하거나 `continue: false`로 중지하더라도 해당 메시지에 대한 결과는 여전히 받습니다. 이는 `is_error: false`와 `num_turns: 0`을 가진 성공 결과이며, `result`는 [차단 메시지](https://code.claude.com/docs/ko/hooks.md#what-a-blocked-prompt-leaves-behind) 또는 [중지 메시지](https://code.claude.com/docs/ko/hooks.md#json-output)이고, 다른 결과와 같은 규칙에 따라 메시지의 `uuid`를 반환합니다. 이 결과에는 `terminal_reason`이 없으며, `result` 텍스트 외에는 훅이 턴을 종료했음을 나타내는 것이 없습니다. 다른 턴이 실행 중일 때 훅이 차단한 메시지는 결과를 받지 못할 수 있습니다. [`user_message_uuids`](#user_message_uuids)를 참조하세요.

1834 

1775#### `user_message_uuids`1835#### `user_message_uuids`

1776 1836 

1777이 턴에서 Claude Code가 응답한, 사용자가 보낸 모든 메시지의 `uuid`입니다. 여러 메시지를 짧은 간격으로 보내면 Claude Code가 이를 하나의 턴으로 병합할 수 있으며, 이때 `user_message_uuid`는 그중 마지막 메시지만 나타냅니다. 병합된 메시지 중 어느 것과든 응답을 매칭하려면 이 목록에서 해당 메시지의 `uuid`를 찾으세요. Agent SDK v0.3.259 이상이 필요합니다.1837이 턴에서 Claude Code가 응답한, 사용자가 보낸 모든 메시지의 `uuid`입니다. 여러 메시지를 짧은 간격으로 보내면 Claude Code가 이를 하나의 턴으로 병합할 수 있으며, 이때 `user_message_uuid`는 그중 마지막 메시지만 나타냅니다. 병합된 메시지 중 어느 것과든 응답을 매칭하려면 이 목록에서 해당 메시지의 `uuid`를 찾으세요. Agent SDK v0.3.259 이상이 필요합니다.

1778 1838 

1779Claude Code는 `user_message_uuid` 필드를 가진 각 응답 프레임과 결과에 이 목록을 함께 설정합니다. 응답한 메시지의 `uuid`를 반환하는 턴 프레임의 전체 목록과 각각에 필요한 버전은 [`user_message_uuid`](#user_message_uuid)를 참조하세요. 목록에는 항상 `user_message_uuid`가 포함되며 최대 64개 항목을 담습니다.1839Claude Code는 `user_message_uuid` 필드를 가진 각 응답 프레임과 결과에 이 목록을 함께 설정합니다. 응답한 메시지의 `uuid`를 반환하는 턴 프레임의 전체 목록과 각각에 필요한 버전은 [`user_message_uuid`](#user_message_uuid)를 참조하세요. 목록에는 항상 `user_message_uuid`가 포함되며 최대 64개 항목을 담습니다.

1780 1840 

1781턴이 실행 중일 때 사용자가 보낸 일반 메시지를 Claude Code가 받아들이면, 해당 메시지의 `uuid`를 결과의 목록에 추가합니다.1841Claude Code가 턴 실행 중에 보낸 일반 메시지를 가져오면, 해당 메시지의 `uuid`를 결과의 목록에 추가합니다. [`UserPromptSubmit`](https://code.claude.com/docs/ko/hooks#userpromptsubmit) 훅이 가져오는 시점에 메시지를 차단하면 Claude Code는 대신 메시지를 폐기합니다. 메시지는 Claude에 도달하지 않으며 이후 턴을 위해 보관되지도 않습니다. 해당 메시지에 대한 결과는 없으며, 그 `uuid`는 어떤 결과의 목록에도 나타나지 않습니다. 훅이 메시지를 차단할 수 있다면, 턴 실행 중에 보낸 메시지가 나열된 결과를 기다릴 때 타임아웃을 설정하세요.

1842 

1843이는 훅의 출력이 차단만 있는 경우에 해당합니다. 출력이 `decision: "block"`과 함께라도 `continue: false`를 설정하거나, 훅이 `continueOnBlock: true` 없이 [`ok: false`](https://code.claude.com/docs/ko/hooks#response-schema)로 응답하는 프롬프트 훅인 경우, Claude Code는 메시지를 폐기하지 않고 중지합니다. 메시지는 자체 턴을 기다리고, 해당 메시지에 대한 결과를 받으며, 텍스트가 대화에 남으므로 Claude는 다음 턴에서 이를 봅니다.

1782 1844 

1783첫 번째 응답이나 결과에 목록 없이 `user_message_uuid`만 있다면 이전 Claude Code 버전에서 온 것이므로 단일 필드를 사용하세요.1845첫 번째 응답이나 결과에 목록 없이 `user_message_uuid`만 있다면 이전 Claude Code 버전에서 온 것이므로 단일 필드를 사용하세요.

1784 1846 

Details

582}582}

583```583```

584 584 

585예상된 형식과 정확히 일치하지 않는 원격 회신은 두 가지 방식 중 하나로 실패하며 두 경우 모두 로컬 터미널 대화는 열려 있습니다:585원격 회신이 아무런 효과가 없고 로컬 터미널 대화가 열린 상태로 유지되면 다음 원인을 확인합니다:

586 586 

587* **다른 형식**: 인바운드 핸들러의 정규식이 일치하지 않으므로 `approve it` 또는 ID 없는 `yes`와 같은 텍스트는 Claude로 일반 메시지로 넘어갑니다.587* **형식이 잘못됨**: 인바운드 핸들러의 정규식이 일치하지 않으므로 `approve it` 또는 ID 없는 `yes`와 같은 텍스트는 Claude로 일반 메시지로 넘어갑니다.

588* **올바른 형식, 잘못된 ID**: 서버가 판정을 내보내지만 Claude Code는 해당 ID를 가진 열린 요청을 찾지 못하고 자동으로 삭제합니다.588* **ID가 잘못됨**: 서버가 판정을 내보내지만 Claude Code는 해당 ID를 가진 열린 요청을 찾지 못하고 자동으로 삭제합니다.

589* **이전 프롬프트에서 사용된 ID**: 서버가 요청의 ID로 판정을 내보내지만 세션의 이전 프롬프트에 동일한 ID가 있었습니다. ID가 반복되면 Claude Code는 해당 ID를 가진 모든 채널 판정을 삭제하므로 한 프롬프트를 위한 회신이 다른 프롬프트를 승인할 수 없습니다. ID는 5개의 무작위 문자이므로 반복은 드뭅니다. 대신 터미널에서 답변하세요.

589 590 

590### 전체 예제591### 전체 예제

591 592 


752curl -d "list the files in this directory" -H "X-Sender: dev" localhost:8788753curl -d "list the files in this directory" -H "X-Sender: dev" localhost:8788

753```754```

754 755 

755파일 나열은 읽기 전용이므로 Claude는 승인 없이 실행합니다. 권한 대화는 Claude가 `reply` 도구를 호출하여 답변을 다시 보낼 때 열립니다. 로컬 대화가 Claude Code 터미널에서 열립니다. 잠시 후 프롬프트가 `/events` 스트림에 나타나며 5자 ID를 포함합니다. 원격 측에서 승인합니다:756파일 나열은 읽기 전용이므로 Claude는 승인 없이 실행합니다. 권한 대화는 Claude가 `reply` 도구를 호출하여 답변을 다시 보낼 때 열립니다. 로컬 대화가 Claude Code 터미널에서 열리고, 잠시 후 `mcp__webhook__reply`에 대한 프롬프트가 5자 ID를 포함하여 `/events` 스트림에 나타납니다. 원격 측에서 승인합니다:

756 757 

757```bash theme={null}758```bash theme={null}

758curl -d "yes <id>" -H "X-Sender: dev" localhost:8788759curl -d "yes <id>" -H "X-Sender: dev" localhost:8788

Details

90 90 

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

92 92 

93rewind 메뉴에서 [Claude가 아직 작업하는 동안 입력한](https://code.claude.com/docs/ko/interactive-mode.md#queue-messages-while-claude-works) 메시지에 **No code restore** 표시가 붙을 수 있습니다. Claude는 턴이 끝나기 전에 해당 메시지를 읽었습니다. [체크포인트는 턴을 시작하는 프롬프트에 대해 생성되므로](#how-checkpoints-work), 이 메시지에는 자체 체크포인트가 없습니다. Claude가 이 메시지를 읽은 후 수행한 편집은 해당 턴을 시작한 프롬프트에 포함됩니다.93rewind 메뉴에서 [Claude가 아직 작업하는 동안 입력한](https://code.claude.com/docs/ko/interactive-mode.md#queue-messages-while-claude-works) 메시지에 **No code restore** 표시가 붙을 수 있습니다. 표시가 붙은 메시지에는 자체 [체크포인트](#how-checkpoints-work)가 없습니다.

94 94 

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

96 96 

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

98 98 

Details

98 98 

99경고와 백분율은 `anthropic-ratelimit-unified-*` 헤더에서 가져오며, 게이트웨이는 한도가 있는 개발자에 대한 각 성공적인 `/v1/messages` 응답에 이 헤더를 추가합니다. 헤더는 항상 개발자 자신의 한도를 설명합니다. 게이트웨이는 공유 할당량을 설명하는 업스트림 공급자의 속도 제한 헤더를 제거하고 절대 전달하지 않습니다.99경고와 백분율은 `anthropic-ratelimit-unified-*` 헤더에서 가져오며, 게이트웨이는 한도가 있는 개발자에 대한 각 성공적인 `/v1/messages` 응답에 이 헤더를 추가합니다. 헤더는 항상 개발자 자신의 한도를 설명합니다. 게이트웨이는 공유 할당량을 설명하는 업스트림 공급자의 속도 제한 헤더를 제거하고 절대 전달하지 않습니다.

100 100 

101개발자에게 표시되는 지출액은 게이트웨이 자체의 [추정값](#how-requests-are-priced)으로, 한도를 적용할 때 사용하는 것과 동일한 수치이며 공급자 청구서의 금액이 아닙니다. Claude Code는 게이트웨이에 대한 별도의 요청으로 달러 금액을 읽습니다. [규정 준수 태세](https://code.claude.com/docs/ko/claude-apps-gateway-deploy.md#compliance-posture)에서 권장하는 대로 개발자의 머신에 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`을 설정하면 Claude Code는 해당 요청을 건너뜁니다. 이 변수가 설정되어 있거나 게이트웨이 서버가 v2.1.284보다 오래된 경우 막대와 상태줄은 백분율만 표시합니다.101개발자에게 표시되는 지출액은 게이트웨이 자체의 [추정값](#how-requests-are-priced)으로, 한도를 적용할 때 사용하는 것과 동일한 수치입니다. 공급자 청구서의 금액이 아닙니다. Claude Code는 게이트웨이에 대한 별도의 요청으로 달러 금액을 읽으며, 개발자의 머신에 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`을 설정하더라도 이 요청을 보냅니다. v2.1.295 이전에는 이 변수가 설정되어 있으면 Claude Code가 해당 요청을 건너뛰었으며, `/usage`와 상태줄에는 달러 금액 없이 백분율과 재설정 날짜만 표시되었습니다.

102 102 

103## Admin API 참조103## Admin API 참조

104 104 

Details

18 18 

19* **브라우저**: [claude.ai/code](https://claude.ai/code), 웹에서 Claude Code라고도 불림19* **브라우저**: [claude.ai/code](https://claude.ai/code), 웹에서 Claude Code라고도 불림

20* **모바일**: [Claude 앱](https://code.claude.com/docs/ko/mobile.md)의 **Code** 탭20* **모바일**: [Claude 앱](https://code.claude.com/docs/ko/mobile.md)의 **Code** 탭

21* **데스크톱 앱**: [세션을 시작](https://code.claude.com/docs/ko/desktop.md#run-long-running-tasks-in-the-cloud)할 때 **Local** 대신 **Cloud**를 선택21* **데스크톱 앱**: [세션을 시작](https://code.claude.com/docs/ko/desktop.md#run-long-running-tasks-in-the-cloud)할 때 환경 선택기의 **Cloud** 아래에서 환경을 선택

22* **터미널**: [`claude --cloud`](#from-terminal-to-cloud)22* **터미널**: [`claude --cloud`](#from-terminal-to-cloud)

23* **클라우드 예약 작업**: [예약 및 트리거된 실행](https://code.claude.com/docs/ko/routines.md)은 각각 클라우드 세션으로 실행됨23* **클라우드 예약 작업**: [예약 및 트리거된 실행](https://code.claude.com/docs/ko/routines.md)은 각각 클라우드 세션으로 실행됨

24 24 


247 247 

248### 변경 사항 검토248### 변경 사항 검토

249 249 

250각 세션은 추가 및 제거된 줄을 표시하는 diff 표시기를 표시합니다(예: `+42 -18`). 이를 선택하여 diff 보기를 열고, 특정 줄에 인라인 주석을 남기고, 다음 메시지로 Claude에 보내세요.250Claude가 변경 사항을 브랜치에 푸시하면 채팅 옆 패널의 **Changes** 카드에 `+42 -18`과 같이 추가 및 제거된 줄 수가 표시됩니다. **Changes** 카드의 줄 수를 클릭하면 diff 보기가 열립니다.

251 251 

252diff 보기는 기본적으로 세션의 변경 사항을 해당 기본 브랜치와 비교합니다. 저장소의 다른 브랜치와 비교하려면 **Compare against**를 선택하고 브랜치를 하나 고르세요.252* 세션 제목 표시줄 또는 표시줄의 **⋮** 메뉴에서 **Changes**를 클릭할 수도 있습니다.

253* 패널이 숨겨져 있을 때 표시하려면 세션 제목 표시줄 또는 표시줄의 **⋮** 메뉴에서 **Show session rail** 아이콘을 클릭하세요.

254 

255diff 보기에서는 줄에 주석을 달고 다른 브랜치와 비교할 수 있습니다:

256 

257* **Comment**: 특정 줄에 인라인 주석을 남긴 다음, 다음 메시지와 함께 주석을 Claude에 보냅니다

258* **Compare**: diff 보기는 기본적으로 세션의 변경 사항을 해당 기본 브랜치와 비교합니다. 저장소의 다른 브랜치와 비교하려면 **Compare against**를 선택하고 브랜치를 하나 고르세요

253 259 

254Claude Code는 이러한 diff를 raw git blob 콘텐츠에서 계산하므로 저장소에 구성된 diff 드라이버 및 `textconv` 필터는 적용되지 않습니다.260Claude Code는 이러한 diff를 raw git blob 콘텐츠에서 계산하므로 저장소에 구성된 diff 드라이버 및 `textconv` 필터는 적용되지 않습니다.

255 261 


313 319 

314### 세션 보관320### 세션 보관

315 321 

316세션을 보관하여 세션 목록을 정리할 수 있습니다. 보관된 세션은 기본 세션 목록에서 숨겨지지만 보관된 세션을 필터링하여 볼 수 있습니다.322세션을 보관하면 사이드바의 세션 목록에서 제거됩니다. 세션을 보관하려면 사이드바에서 세션 위에 마우스를 올리고 **⋯** 메뉴를 열어 **Archive**를 선택하세요.

317 323 

318세션을 보관하려면 사이드바의 세션 위에 마우스를 올리고 보관 아이콘을 선택합니다.324#### 보관된 세션 찾기

325 

326보관된 세션을 보려면 [claude.ai/code/sessions](https://claude.ai/code/sessions)로 이동하여 **Archived** 탭을 여세요. 세션을 사이드바의 세션 목록으로 되돌리려면 해당 탭에서 세션 위에 마우스를 올리고 **⋮** 메뉴를 열어 **Unarchive**를 선택하세요.

319 327 

320### 세션 삭제328### 세션 삭제

321 329 

322세션을 삭제하면 세션과 해당 데이터가 영구적으로 제거됩니다. 이 작업은 실행 취소할 수 없습니다. 두 가지 방법으로 세션을 삭제할 수 있습니다:330세션을 삭제하면 세션과 해당 데이터가 영구적으로 제거됩니다. 이 작업은 실행 취소할 수 없습니다. 사이드바, 세션 메뉴 또는 이미 보관한 경우 **Archived** 탭에서 세션을 삭제할 수 있습니다:

323 331 

324* **사이드바에서**: 보관된 세션을 필터링한 다음 삭제할 세션 위에 마우스를 올리고 삭제 아이콘을 선택합니다332* **사이드바에서**: 세션 위에 마우스를 올리고 **⋯** 메뉴를 열어 **Delete**를 선택합니다

325* **세션 메뉴에서**: 세션을 열고 세션 제목 옆의 드롭다운을 선택한 다음 **Delete**를 선택합니다333* **세션 메뉴에서**: 세션을 열고 세션 제목 옆의 드롭다운을 선택한 다음 **Delete**를 선택합니다

334* **Archived 탭에서**: [**Archived** 탭](#find-an-archived-session)에서 세션 위에 마우스를 올리고 **⋮** 메뉴를 열어 **Delete**를 선택합니다

326 335 

327세션이 삭제되기 전에 확인하라는 메시지가 표시됩니다.336세션이 삭제되기 전에 확인하라는 메시지가 표시됩니다.

328 337 


336 345 

337PR이 어디에서 왔는지와 어떤 기기를 사용하는지에 따라 자동 수정을 켜는 방법은 몇 가지가 있습니다:346PR이 어디에서 왔는지와 어떤 기기를 사용하는지에 따라 자동 수정을 켜는 방법은 몇 가지가 있습니다:

338 347 

339* **클라우드 세션에서 생성된 PR**: claude.ai/code에서 세션을 열고, CI 상태 표시줄을 열고, **Auto-fix**를 선택합니다348* **클라우드 세션에서 생성된 PR**: claude.ai/code에서 세션을 열고 [**Changes** 카드](#review-changes)에서 풀 리퀘스트를 찾습니다. 풀 리퀘스트 제목 옆의 **⋮** 메뉴를 열고 **Auto-fix**를 켭니다

340* **터미널에서**: PR의 분기에 있는 동안 [`/autofix-pr`](https://code.claude.com/docs/ko/commands)을 실행합니다. Claude Code가 `gh`로 열린 PR을 감지하고, 클라우드 세션을 생성하고, 한 단계에서 자동 수정을 켭니다349* **터미널에서**: PR의 분기에 있는 동안 [`/autofix-pr`](https://code.claude.com/docs/ko/commands)을 실행합니다. Claude Code가 `gh`로 열린 PR을 감지하고, 클라우드 세션을 생성하고, 한 단계에서 자동 수정을 켭니다

341* **모바일 앱에서**: Claude에 PR을 자동 수정하도록 지시합니다. 예를 들어 "watch this PR and fix any CI failures or review comments"350* **모바일 앱에서**: Claude에 PR을 자동 수정하도록 지시합니다. 예를 들어 "watch this PR and fix any CI failures or review comments"

342* **기존 PR**: PR URL을 세션에 붙여넣고 Claude에 자동 수정하도록 지시합니다351* **기존 PR**: PR URL을 세션에 붙여넣고 Claude에 자동 수정하도록 지시합니다

343 352 

344자동 수정은 PR별 토글입니다. 모니터링을 중지하려면 claude.ai/code의 세션에서 CI 상태 표시줄을 열고 **Auto-fix** 토글을 해제하거나, Claude에 PR 감시를 중지하도록 지시합니다.353모니터링을 중지하려면 세션의 [**Changes** 카드](#review-changes)에서 풀 리퀘스트의 **⋮** 메뉴에 있는 **Auto-fix**를 끄거나, Claude에 PR 감시를 중지하도록 지시합니다.

345 354 

346### Claude가 PR 활동에 응답하는 방식355### Claude가 PR 활동에 응답하는 방식

347 356 


381* 용량은 필요할 때 프로비저닝되므로 1분 후에 재시도합니다390* 용량은 필요할 때 프로비저닝되므로 1분 후에 재시도합니다

382* [GitHub 연결 후 저장소가 표시되지 않음](https://code.claude.com/docs/ko/web-quickstart.md#no-repositories-appear-after-connecting-github)의 안내에 따라 GitHub 연결이 저장소에 접근할 수 있는지 확인합니다391* [GitHub 연결 후 저장소가 표시되지 않음](https://code.claude.com/docs/ko/web-quickstart.md#no-repositories-appear-after-connecting-github)의 안내에 따라 GitHub 연결이 저장소에 접근할 수 있는지 확인합니다

383 392 

393### Your new session couldn't start

394 

395프롬프트는 보냈던 입력란에 다시 채워져 있습니다.

396 

397* **연결 끊김**: 인터넷 연결과 사용 중인 VPN 또는 프록시를 확인한 다음 프롬프트를 다시 보냅니다

398* **서버 오류**: 잠시 기다린 다음 프롬프트를 다시 보냅니다. 알림이 다시 나타나면 [status.claude.com](https://status.claude.com)을 확인합니다

399 

400### Can't rewind to this message

401 

402v2.1.246 이전 Claude Code를 사용하는 [자체 호스팅 러너](https://code.claude.com/docs/ko/self-hosted-environments)에서 세션이 실행되는 경우, 가장 최근 메시지를 제외한 모든 메시지에서 **Rewind to here**가 이 오류와 함께 실패합니다. 조직의 러너를 운영하는 담당자에게 [러너 업그레이드](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#pin-the-version)를 요청하십시오.

403 

384### Unable to get organization UUID404### Unable to get organization UUID

385 405 

386`claude --cloud` 및 `claude --teleport`를 사용하려면 claude.ai 계정으로 로그인해야 합니다. API 키로 인증하거나 저장된 계정 정보가 오래된 경우 다음 중 하나가 표시됩니다.406`claude --cloud` 및 `claude --teleport`를 사용하려면 claude.ai 계정으로 로그인해야 합니다. API 키로 인증하거나 저장된 계정 정보가 오래된 경우 다음 중 하나가 표시됩니다.

Details

111 111 

112프로젝트는 이제 사이드바의 **프로젝트** 아래에 나열되고 대화가 열려 있습니다. [첫 번째 배치](#your-first-batch)에서는 작업을 보내기 전에 설정할 사항을 다룹니다.112프로젝트는 이제 사이드바의 **프로젝트** 아래에 나열되고 대화가 열려 있습니다. [첫 번째 배치](#your-first-batch)에서는 작업을 보내기 전에 설정할 사항을 다룹니다.

113 113 

114### 기존 클라우드 세션에서 시작하기114### 기존 세션에서 시작하기

115 115 

116직접 시작한 클라우드 세션이 프로젝트에 속해야 하는 작업을 수행 중인 경우, 해당 세션의 사이드바 메뉴를 열고 **프로젝트로 이동**을 선택한 다음 하위 메뉴에서 선택합니다:116직접 시작한 클라우드 세션이 프로젝트에 속해야 하는 작업을 수행 중인 경우, 해당 세션의 사이드바 메뉴를 열고 **프로젝트로 이동**을 선택한 다음 하위 메뉴에서 선택합니다:

117 117 


120 120 

121클라우드 세션의 메시지 상자 위에 **프로젝트 설정** 배너가 나타날 수도 있습니다. **새 프로젝트로 계속하기** 대신 이 배너를 사용하면 결과는 동일하지만, 프로젝트가 열리면 세션의 실행 중인 턴이 중지됩니다.121클라우드 세션의 메시지 상자 위에 **프로젝트 설정** 배너가 나타날 수도 있습니다. **새 프로젝트로 계속하기** 대신 이 배너를 사용하면 결과는 동일하지만, 프로젝트가 열리면 세션의 실행 중인 턴이 중지됩니다.

122 122 

123로컬 세션에는 이러한 옵션이 없습니다. 프로젝트에서 해당 작업을 계속하려면 프로젝트 대화에서 작업을 설명하거나, 해당 브랜치를 푸시하고, 해당 리포지토리를 프로젝트에 추가하고, 작업에서 브랜치 이름을 지정합니다.123사용자의 로컬 머신에서 실행되는 세션도 [Remote Control](https://code.claude.com/docs/ko/remote-control.md#start-a-remote-control-session)을 통해 연결하면 claude.ai/code에서 동일한 사이드바 메뉴를 사용할 수 있습니다. 계정에 [**신뢰할 수 있는 기기 필요**](https://code.claude.com/docs/ko/remote-control.md#trusted-devices)가 켜져 있는 동안 연결된 세션의 경우, Claude는 프로젝트에서 해당 세션의 트랜스크립트를 읽을 수 없습니다. 해당 설정이 꺼져 있다면:

124 

1251. 세션이 아직 연결되지 않았다면 해당 세션에서 `/remote-control`을 실행합니다. 해당 설정이 켜져 있는 동안 연결되었다면 먼저 연결을 해제한 후 다시 연결합니다.

1262. 브라우저의 [claude.ai/code](https://claude.ai/code) 사이드바에서 해당 세션의 행을 찾아 메뉴를 열고, 동일한 하위 메뉴에서 선택합니다.

127 

128**신뢰할 수 있는 기기 필요**가 켜져 있거나 Remote Control을 사용하지 않는 경우, 프로젝트 대화에서 직접 작업을 설명하세요. 또는 세션의 브랜치를 푸시하고, 해당 저장소를 프로젝트에 추가한 다음, Claude에게 브랜치 이름을 알려 주세요.

124 129 

125### GitHub 액세스 설정하기130### GitHub 액세스 설정하기

126 131 


425* **클라우드 세션**: 모든 스레드는 Claude에게 머신에서 실행하도록 요청하지 않는 한 [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md)입니다. 어느 쪽이든 Claude가 세션을 시작하고 추적합니다. 직접 시작한 클라우드 세션의 작업을 프로젝트로 가져올 수도 있습니다: 해당 세션의 사이드바 메뉴에서 [**프로젝트로 이동**](#start-from-an-existing-cloud-session)을 선택합니다.430* **클라우드 세션**: 모든 스레드는 Claude에게 머신에서 실행하도록 요청하지 않는 한 [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md)입니다. 어느 쪽이든 Claude가 세션을 시작하고 추적합니다. 직접 시작한 클라우드 세션의 작업을 프로젝트로 가져올 수도 있습니다: 해당 세션의 사이드바 메뉴에서 [**프로젝트로 이동**](#start-from-an-existing-cloud-session)을 선택합니다.

426* **예약 작업**: 프로젝트에서 예약된 작업을 요청하면 Claude는 해당 프로젝트의 스레드로 실행되고 해당 프로젝트의 **예약 작업** 탭에 표시되는 [클라우드 예약 작업](https://code.claude.com/docs/ko/routines.md)을 생성합니다. 프로젝트 외부에서 생성한 예약 작업은 계속 독립적으로 작동합니다.431* **예약 작업**: 프로젝트에서 예약된 작업을 요청하면 Claude는 해당 프로젝트의 스레드로 실행되고 해당 프로젝트의 **예약 작업** 탭에 표시되는 [클라우드 예약 작업](https://code.claude.com/docs/ko/routines.md)을 생성합니다. 프로젝트 외부에서 생성한 예약 작업은 계속 독립적으로 작동합니다.

427* **원격 제어**: [원격 제어](https://code.claude.com/docs/ko/remote-control.md)는 claude.ai를 머신에서 실행 중인 Claude Code 세션에 연결합니다. 프로젝트에서 Claude에게 컴퓨터에서 스레드를 실행하도록 요청하면, 프로젝트는 [원격 제어를 사용하여 이를 수행합니다](#run-a-thread-on-your-own-computer).432* **원격 제어**: [원격 제어](https://code.claude.com/docs/ko/remote-control.md)는 claude.ai를 머신에서 실행 중인 Claude Code 세션에 연결합니다. 프로젝트에서 Claude에게 컴퓨터에서 스레드를 실행하도록 요청하면, 프로젝트는 [원격 제어를 사용하여 이를 수행합니다](#run-a-thread-on-your-own-computer).

428* **로컬 세션 및 에이전트 뷰**: 터미널, IDE 또는 데스크톱 앱의 로컬 환경에서 직접 시작한 세션은 프로젝트에 추가할 수 없습니다. [에이전트 뷰](https://code.claude.com/docs/ko/agent-view.md)는 여러 로컬 세션을 나란히 추적하기 위한 화면이며, 사용자가 각 세션을 직접 시작하고 작업을 할당합니다.433* **로컬 세션 및 에이전트 뷰**: 터미널, IDE 또는 데스크톱 앱의 로컬 환경에서 직접 시작한 세션은 프로젝트 외부에 남아 있지만, [해당 세션의 작업을 프로젝트로 가져올](#start-from-an-existing-cloud-session) 수 있습니다. [에이전트 뷰](https://code.claude.com/docs/ko/agent-view.md)는 여러 로컬 세션을 나란히 추적하기 위한 화면이며, 이 경우에도 사용자가 각 세션을 직접 시작하고 작업을 할당합니다.

429* **Worktrees**: [worktree](https://code.claude.com/docs/ko/worktrees.md)는 각 로컬 세션에 저장소의 자체 작업 복사본을 제공합니다. 클라우드 스레드는 이를 필요로 하지 않습니다: 각 스레드는 저장소를 자체 클라우드 샌드박스에 복제하고 자체 브랜치에서 작동합니다.434* **Worktrees**: [worktree](https://code.claude.com/docs/ko/worktrees.md)는 각 로컬 세션에 저장소의 자체 작업 복사본을 제공합니다. 클라우드 스레드는 이를 필요로 하지 않습니다: 각 스레드는 저장소를 자체 클라우드 샌드박스에 복제하고 자체 브랜치에서 작동합니다.

430* **에이전트 팀**: [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md)은 머신 또는 클라우드 세션 내에서 단일 작업을 위해 팀원 세션을 시작하고 해당 작업으로 끝나는 하나의 세션입니다.435* **에이전트 팀**: [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md)은 머신 또는 클라우드 세션 내에서 단일 작업을 위해 팀원 세션을 시작하고 해당 작업으로 끝나는 하나의 세션입니다.

431* **서브에이전트**: [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md)는 하나의 세션 내에서 실행되며, 자체 컨텍스트 윈도우에서 부수적인 작업을 수행하고, 해당 세션에 요약을 반환합니다. 프로젝트의 스레드는 Claude가 시작하고 프로젝트 대화에 보고하는 전체 세션이며, 스레드는 자체 부수 작업을 위해 여전히 서브에이전트를 사용할 수 있습니다.436* **서브에이전트**: [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md)는 하나의 세션 내에서 실행되며, 자체 컨텍스트 윈도우에서 부수적인 작업을 수행하고, 해당 세션에 요약을 반환합니다. 프로젝트의 스레드는 Claude가 시작하고 프로젝트 대화에 보고하는 전체 세션이며, 스레드는 자체 부수 작업을 위해 여전히 서브에이전트를 사용할 수 있습니다.


437 442 

438* 프로젝트는 claude.ai/code, 데스크톱 앱 및 Claude 모바일 앱에서 사용 가능하며, 터미널 CLI, VS Code 확장 프로그램 또는 JetBrains 플러그인에서는 사용할 수 없으며, Amazon Bedrock, Google Cloud의 Agent Platform 또는 Microsoft Foundry를 통해서도 사용할 수 없습니다.443* 프로젝트는 claude.ai/code, 데스크톱 앱 및 Claude 모바일 앱에서 사용 가능하며, 터미널 CLI, VS Code 확장 프로그램 또는 JetBrains 플러그인에서는 사용할 수 없으며, Amazon Bedrock, Google Cloud의 Agent Platform 또는 Microsoft Foundry를 통해서도 사용할 수 없습니다.

439* 프로젝트 스레드는 [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md)이거나, [Remote Control](https://code.claude.com/docs/ko/remote-control.md)을 통한 자신의 머신의 세션이며, 두 경우 모두 Anthropic이 모델 제공자입니다. [보안](https://code.claude.com/docs/ko/security.md) 및 [데이터 사용](https://code.claude.com/docs/ko/data-usage.md)은 클라우드 세션이 어떻게 격리되고 무엇이 유지되는지를 다루며, [연결 및 보안](https://code.claude.com/docs/ko/remote-control.md#connection-and-security)은 머신의 스레드가 어떻게 연결되고 무엇이 저장되는지를 다룹니다.444* 프로젝트 스레드는 [클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md)이거나, [Remote Control](https://code.claude.com/docs/ko/remote-control.md)을 통한 자신의 머신의 세션이며, 두 경우 모두 Anthropic이 모델 제공자입니다. [보안](https://code.claude.com/docs/ko/security.md) 및 [데이터 사용](https://code.claude.com/docs/ko/data-usage.md)은 클라우드 세션이 어떻게 격리되고 무엇이 유지되는지를 다루며, [연결 및 보안](https://code.claude.com/docs/ko/remote-control.md#connection-and-security)은 머신의 스레드가 어떻게 연결되고 무엇이 저장되는지를 다룹니다.

440* 자신의 머신에서 직접 시작한 세션을 프로젝트에 추가할 수 없습니다. 프로젝트가 머신에 도달하는 유일한 방법은 [Remote Control을 통해 머신에서 스레드를 실행](#run-a-thread-on-your-own-computer)하는 것이며, 해당 섹션에서 필요한 사항을 나열합니다.445* 자신의 머신에서 직접 시작한 세션을 프로젝트에 추가할 수는 없지만, [해당 세션의 작업을 프로젝트로 가져올 수는](#start-from-an-existing-cloud-session) 있습니다. 프로젝트는 [Remote Control을 통해 머신에서 스레드를 실행](#run-a-thread-on-your-own-computer)하는 방식으로 머신에 도달하며, 해당 섹션에서 필요한 사항을 나열합니다.

441* 클라우드 스레드의 샌드박스는 차례 사이에 일시 중지되고 스레드가 계속될 때 다시 시작됩니다. 샌드박스를 다시 시작할 수 없으면 스레드는 새 복제에서 계속되므로 커밋되지 않은 변경 사항이 손실될 수 있습니다. 긴 작업에서 Claude에게 진행 중인 작업을 커밋하고 푸시하도록 요청합니다.446* 클라우드 스레드의 샌드박스는 차례 사이에 일시 중지되고 스레드가 계속될 때 다시 시작됩니다. 샌드박스를 다시 시작할 수 없으면 스레드는 새 복제에서 계속되므로 커밋되지 않은 변경 사항이 손실될 수 있습니다. 긴 작업에서 Claude에게 진행 중인 작업을 커밋하고 푸시하도록 요청합니다.

442* 프로젝트는 한 사용자에게 속합니다. 프로젝트 또는 스레드를 다른 사용자와 공유할 수 없으며, 스레드 기록에는 다른 클라우드 세션이 가진 공유 옵션이 없습니다. 베타 중에는 프로젝트에 대한 조직 수준 제어가 없습니다.447* 프로젝트는 한 사용자에게 속합니다. 프로젝트 또는 스레드를 다른 사용자와 공유할 수 없으며, 스레드 기록에는 다른 클라우드 세션이 가진 공유 옵션이 없습니다. 베타 중에는 프로젝트에 대한 조직 수준 제어가 없습니다.

443* 스레드는 시작한 하나의 프로젝트에 속합니다. 스레드를 다른 프로젝트로 이동하거나 복사할 수 없으며, 독립적으로 이동할 수 없습니다. [**프로젝트로 이동**](#start-from-an-existing-cloud-session)은 다른 방향으로만 이동합니다: 클라우드 세션의 작업을 프로젝트로 가져옵니다. 두 프로젝트를 하나로 병합할 수 없습니다.448* 스레드는 시작한 하나의 프로젝트에 속합니다. 스레드를 다른 프로젝트로 이동하거나 복사할 수 없으며, 독립적으로 이동할 수 없습니다. [**프로젝트로 이동**](#start-from-an-existing-cloud-session)은 다른 방향으로만 이동합니다: 클라우드 세션의 작업을 프로젝트로 가져옵니다. 두 프로젝트를 하나로 병합할 수 없습니다.

code-review.md +1 −1

Details

67 67 

68* **결과**: 해당 라인의 인라인 댓글과 리뷰 본문의 요약68* **결과**: 해당 라인의 인라인 댓글과 리뷰 본문의 요약

69* **확인 실행**: 이름은 **Claude Code Review**이며, 결과가 [세부 정보](https://code.claude.com/docs/ko/code-review-pull-requests.md#check-run-output)에 나열됩니다. 확인 실행은 실패로 종료되지 않습니다.69* **확인 실행**: 이름은 **Claude Code Review**이며, 결과가 [세부 정보](https://code.claude.com/docs/ko/code-review-pull-requests.md#check-run-output)에 나열됩니다. 확인 실행은 실패로 종료되지 않습니다.

70* **아무것도 찾지 못한 경우**: 확인 실행의 제목이 **Code review found no issues**로 표시되며, Claude가 풀 리퀘스트에 같은 내용의 짧은 메모를 게시합니다70* **결과 대신 남기는 메모**: 확인 실행의 제목이 **Code review found no issues**로 표시될 때 게시됩니다

71 71 

72Code Review는 리뷰가 실행될 Claude 모델을 선택하며, 관리자 설정에서는 모델 선택을 제공하지 않습니다. 리뷰를 더 철저하게 또는 덜 철저하게 하려면 [리뷰 수준](#review-levels)을 변경하십시오.72Code Review는 리뷰가 실행될 Claude 모델을 선택하며, 관리자 설정에서는 모델 선택을 제공하지 않습니다. 리뷰를 더 철저하게 또는 덜 철저하게 하려면 [리뷰 수준](#review-levels)을 변경하십시오.

73 73 

Details

152 152 

153### 이후 리뷰가 다루는 범위153### 이후 리뷰가 다루는 범위

154 154 

155푸시 후처럼 자체적으로 시작되는 이후 리뷰는 마지막 리뷰 이후 변경된 내용에 집중하며, Nit과 기존 발견 사항을 더 적게 게시합니다. 요약에는 제외한 항목의 개수가 "found and not posted" 또는 "outside the scope of this re-review and not posted."로 끝나는 줄에 표시됩니다.155푸시 후처럼 자체적으로 시작되는 이후 리뷰는 마지막 리뷰 이후 변경된 내용에 집중하며, [Nit과 기존 발견 사항](#severity-levels)을 더 적게 게시합니다. 그 결과 제외된 발견 사항이 있는지 확인하려면 리뷰 본문에서 해당 개수를 알려 주는 문장을 찾습니다.

156 

157* **마지막 리뷰 이후 변경되지 않은 코드에 대한 발견 사항**: 문장이 "outside the scope of this re-review and not posted"로 끝납니다

158* **Nit과 기존 발견 사항**: 문장이 "found and not posted"로 끝납니다

156 159 

157이러한 항목을 하나도 제외하지 않는 리뷰를 받으려면 [`@claude review`](#comment-commands)를 댓글로 작성합니다. 이 리뷰는 풀 리퀘스트 전체를 다시 다룹니다.160이러한 항목을 하나도 제외하지 않는 리뷰를 받으려면 [`@claude review`](#comment-commands)를 댓글로 작성합니다. 이 리뷰는 풀 리퀘스트 전체를 다시 다룹니다.

158 161 

Details

15| 체크 실행 제목 | 의미 | 조치 |15| 체크 실행 제목 | 의미 | 조치 |

16| :- | :- | :- |16| :- | :- | :- |

17| **Code review queued...** 또는 **Code review in progress...** | 리뷰가 아직 완료되지 않았습니다 | 제목이 바뀔 때까지 기다립니다 |17| **Code review queued...** 또는 **Code review in progress...** | 리뷰가 아직 완료되지 않았습니다 | 제목이 바뀔 때까지 기다립니다 |

18| **Code review found no issues** | 리뷰가 완료되었으며 지적할 사항을 찾지 못했습니다 | 조치가 필요하지 않습니다 |18| **Code review found no issues** | 리뷰가 완료되었으며 지적할 사항을 찾지 못했습니다 | 풀 리퀘스트의 첫 번째 리뷰가 아니라면, 리뷰 본문에서 [리뷰가 제외한 발견 사항](https://code.claude.com/docs/ko/code-review-pull-requests.md#what-a-later-review-covers)의 개수를 확인합니다. 그렇지 않으면 조치가 필요하지 않습니다 |

19| 문제가 발견되었다는 제목 | 리뷰가 발견 사항과 함께 완료되었습니다 | diff에서 발견 사항이 보이지 않으면 [인라인 댓글로 표시되지 않는 문제 찾기](#find-issues-that-aren’t-showing-as-inline-comments)를 참조하세요 |19| 문제가 발견되었다는 제목 | 리뷰가 발견 사항과 함께 완료되었습니다 | diff에서 발견 사항이 보이지 않으면 [인라인 댓글로 표시되지 않는 문제 찾기](#find-issues-that-aren’t-showing-as-inline-comments)를 참조하세요 |

20| **Code review skipped — no new changes** | 최근 푸시에 대해 자동 리뷰가 실행되지 않았습니다 | 그래도 리뷰를 받으려면 `@claude review`라고 댓글을 작성합니다 |20| **Code review skipped — no new changes** | 최근 푸시에 대해 자동 리뷰가 실행되지 않았습니다 | 그래도 리뷰를 받으려면 `@claude review`라고 댓글을 작성합니다 |

21| **Code review not repeated — earlier findings still open** | 최근 푸시에 대해 자동 리뷰가 실행되지 않았으며, 이전 리뷰의 Important 발견 사항이 아직 해결되지 않았습니다 | 수정 사항을 푸시하거나, 그래도 리뷰를 받으려면 `@claude review`라고 댓글을 작성합니다. [푸시 후에도 이전 결과가 유지되는 경우](https://code.claude.com/docs/ko/code-review-pull-requests.md#when-a-push-keeps-the-earlier-result)를 참조하세요 |21| **Code review not repeated — earlier findings still open** | 최근 푸시에 대해 자동 리뷰가 실행되지 않았으며, 이전 리뷰의 Important 발견 사항이 아직 해결되지 않았습니다 | 수정 사항을 푸시하거나, 그래도 리뷰를 받으려면 `@claude review`라고 댓글을 작성합니다. [푸시 후에도 이전 결과가 유지되는 경우](https://code.claude.com/docs/ko/code-review-pull-requests.md#when-a-push-keeps-the-earlier-result)를 참조하세요 |

desktop.md +48 −17

Details

223 223 

224#### 세션 세부 정보 패널 숨기기 또는 표시하기224#### 세션 세부 정보 패널 숨기기 또는 표시하기

225 225 

226패널을 숨기거나 표시하려면 세션 제목 표시줄에서 **Hide session rail** 또는 **Show session rail**을 클릭하거나, 창이 좁을 때는 표시줄의 **⋮** 메뉴에서 클릭합니다. 그래도 패널이 보이지 않으면 [사용 중인 Code 탭 레이아웃을 확인합니다](#check-which-layout-you-have).226패널을 숨기거나 표시하려면 세션 제목 표시줄 또는 표시줄의 **⋮** 메뉴에서 **Hide session rail** 또는 **Show session rail**을 클릭합니다. 그래도 패널이 보이지 않으면 [사용 중인 Code 탭 레이아웃을 확인합니다](#check-which-layout-you-have).

227 227 

228### 터미널에서 명령 실행하기228### 터미널에서 명령 실행하기

229 229 


984 984 

985* **시스템**: x86\_64 또는 arm64 프로세서. 머신은 Claude Code의 [시스템 요구 사항](https://code.claude.com/docs/ko/setup.md#system-requirements)도 충족해야 합니다. Linux에서 Claude Code에는 glibc 2.17 이상 또는 musl이 필요합니다. 머신에 어느 것이 있는지 확인하려면 해당 머신에서 `ldd --version`을 실행합니다. Alpine Linux와 같은 musl 기반 배포판에서는 [Claude Code에 필요한 패키지](https://code.claude.com/docs/ko/setup.md#alpine-linux-and-musl-based-distributions)도 설치합니다.985* **시스템**: x86\_64 또는 arm64 프로세서. 머신은 Claude Code의 [시스템 요구 사항](https://code.claude.com/docs/ko/setup.md#system-requirements)도 충족해야 합니다. Linux에서 Claude Code에는 glibc 2.17 이상 또는 musl이 필요합니다. 머신에 어느 것이 있는지 확인하려면 해당 머신에서 `ldd --version`을 실행합니다. Alpine Linux와 같은 musl 기반 배포판에서는 [Claude Code에 필요한 패키지](https://code.claude.com/docs/ko/setup.md#alpine-linux-and-musl-based-distributions)도 설치합니다.

986* **SFTP**: SSH 서버가 SFTP 하위 시스템을 제공해야 하며, 이는 `sshd_config`의 `Subsystem sftp` 줄로 켜집니다. 확인하려면 컴퓨터의 터미널에서 `sftp`로 동일한 호스트와 포트에 연결합니다. 정상적으로 작동하는 서버는 `sftp>` 프롬프트를 표시합니다.986* **SFTP**: SSH 서버가 SFTP 하위 시스템을 제공해야 하며, 이는 `sshd_config`의 `Subsystem sftp` 줄로 켜집니다. 확인하려면 컴퓨터의 터미널에서 `sftp`로 동일한 호스트와 포트에 연결합니다. 정상적으로 작동하는 서버는 `sftp>` 프롬프트를 표시합니다.

987* **연결당 세션 수**: macOS 및 Linux의 Desktop은 하나의 SSH 연결에서 여러 세션을 엽니다. 서버의 `sshd_config`가 `MaxSessions 1`로 설정되어 있다면 OpenSSH의 기본값인 10 등으로 값을 늘립니다.987* **서버의 `MaxSessions 1`**: `sshd_config`에서 `MaxSessions 1`을 설정한 서버에 연결하려면 다음 중 하나를 수행합니다:

988 * **컴퓨터가 macOS 또는 Linux를 실행하는 경우**: Claude Desktop v3.1623.0 이상으로 업데이트합니다

989 * **컴퓨터가 Windows를 실행하는 경우**: Desktop의 기본 제공 SSH 클라이언트는 해당 서버에 연결할 수 없으므로 Desktop이 [OpenSSH 클라이언트를 통해 연결](#use-your-ssh-configuration)하는지 확인합니다

990 * **서버를 변경할 수 있는 경우**: `MaxSessions`를 예를 들어 OpenSSH의 기본값인 10으로 늘립니다

991* **`MaxSessions 1`에서의 로그인**: SSH 에이전트가 보유한 키처럼 프롬프트 없이 작동하는 로그인을 사용합니다. Desktop은 연결하거나 다시 연결할 때마다 최소 두 번 로그인합니다. 각 [터미널](#run-commands-in-the-terminal) 탭마다, 그리고 `!`로 시작하는 명령을 실행하는 각 Desktop 세션마다 최소 한 번의 로그인이 추가됩니다. Claude가 실행하는 명령에는 추가 로그인이 없습니다.

992* **`MaxSessions 1`에서의 일회용 코드**: 일회용 코드처럼 로그인할 때마다 확인을 요청하는 경우 `!` 명령이 실패합니다. 대신 자체 창에서 확인을 요청하는 터미널 탭에서 해당 명령을 실행하세요.

988* **설치 폴더**: Desktop은 홈 디렉터리의 `~/.claude/remote/` 아래에 도우미 프로그램과 Claude Code를 설치합니다. 해당 위치에서 이를 실행하므로 이 폴더는 `noexec`로 마운트된 파일 시스템에 있으면 안 됩니다. 연결하는 각 사용자의 홈 디렉터리에 약 1 GB의 디스크 공간을 확보하세요. 이 폴더에 담긴 내용은 [원격 머신의 파일 및 프로세스](#files-and-processes-on-the-remote-machine)를 참조하세요.993* **설치 폴더**: Desktop은 홈 디렉터리의 `~/.claude/remote/` 아래에 도우미 프로그램과 Claude Code를 설치합니다. 해당 위치에서 이를 실행하므로 이 폴더는 `noexec`로 마운트된 파일 시스템에 있으면 안 됩니다. 연결하는 각 사용자의 홈 디렉터리에 약 1 GB의 디스크 공간을 확보하세요. 이 폴더에 담긴 내용은 [원격 머신의 파일 및 프로세스](#files-and-processes-on-the-remote-machine)를 참조하세요.

989* **셸**: 원격 머신에서 계정에 설정된 셸은 Bash, Zsh, `sh`처럼 SSH를 통해 전송된 명령을 실행할 수 있어야 합니다994* **셸**: 원격 머신에서 계정에 설정된 셸은 Bash, Zsh, `sh`처럼 SSH를 통해 전송된 명령을 실행할 수 있어야 합니다

990* **네트워크**: Claude Code는 원격 머신에서 실행되며 네트워크 요청도 그곳에서 보내므로, 머신에는 [Claude Code에 필요한 네트워크 액세스](https://code.claude.com/docs/ko/network-config.md#network-access-requirements)가 있어야 합니다. 머신이 Claude Code를 다운로드할 수 없는 경우 Desktop이 컴퓨터에서 다운로드하여 업로드합니다. Claude Code의 다른 요청은 여전히 원격 머신에서 전송됩니다. Linux 원격 머신에서 이러한 요청에 프록시가 필요하다면 [SSH 세션에 프록시를 설정](#set-a-proxy-or-a-ca-certificate-for-ssh-sessions)하세요.995* **네트워크**: Claude Code는 원격 머신에서 실행되며 네트워크 요청도 그곳에서 보내므로, 머신에는 [Claude Code에 필요한 네트워크 액세스](https://code.claude.com/docs/ko/network-config.md#network-access-requirements)가 있어야 합니다. 머신이 Claude Code를 다운로드할 수 없는 경우 Desktop이 컴퓨터에서 다운로드하여 업로드합니다. Claude Code의 다른 요청은 여전히 원격 머신에서 전송됩니다. Linux 원격 머신에서 이러한 요청에 프록시가 필요하다면 [SSH 세션에 프록시를 설정](#set-a-proxy-or-a-ca-certificate-for-ssh-sessions)하세요.


993 998 

994Linux 원격 머신이 프록시를 통해 인터넷에 연결하거나 CA 인증서가 필요한 경우, 해당 머신의 `~/.claude/settings.json`에 있는 `env` 아래에 [프록시 및 CA 변수](https://code.claude.com/docs/ko/network-config.md)를 추가합니다. 해당 머신의 `~/.profile`, `~/.bash_profile`, `~/.zprofile` 또는 `~/.zshrc`에서 이미 내보내고 있더라도 추가하세요.999Linux 원격 머신이 프록시를 통해 인터넷에 연결하거나 CA 인증서가 필요한 경우, 해당 머신의 `~/.claude/settings.json`에 있는 `env` 아래에 [프록시 및 CA 변수](https://code.claude.com/docs/ko/network-config.md)를 추가합니다. 해당 머신의 `~/.profile`, `~/.bash_profile`, `~/.zprofile` 또는 `~/.zshrc`에서 이미 내보내고 있더라도 추가하세요.

995 1000 

996해당 머신의 터미널에서 실행한 `claude`는 이러한 파일에서 변수를 가져오더라도, SSH 세션은 이 파일들에서 변수를 가져오지 않습니다. 그러면 세션이 멈추거나 **The connection from … to the API failed** 또는 **Authentication failed**가 표시될 수 있으며, 다시 로그인해도 해결되지 않습니다.1001SSH 세션에서 Claude Code는 해당 머신의 터미널에서 실행한 `claude`가 이러한 파일의 변수를 받는 경우에도 그 변수를 받지 않습니다. 그러면 세션이 멈추거나 **The connection from … to the API failed** 또는 **Authentication failed**가 표시될 수 있으며, 다시 로그인해도 도움이 되지 않습니다.

997 1002 

998**1. 변수 추가**1003**1. 변수 추가**

999 1004 


1028 1033 

1029원격 머신을 재시작하거나, [도우미 제거](#files-and-processes-on-the-remote-machine)의 처음 두 단계처럼 Desktop을 종료하고 도우미의 프로세스를 종료합니다. 어느 방법이든 Claude의 작업을 중단시키므로 실행 중인 작업이 없을 때 수행하세요.1034원격 머신을 재시작하거나, [도우미 제거](#files-and-processes-on-the-remote-machine)의 처음 두 단계처럼 Desktop을 종료하고 도우미의 프로세스를 종료합니다. 어느 방법이든 Claude의 작업을 중단시키므로 실행 중인 작업이 없을 때 수행하세요.

1030 1035 

1031#### macOS 및 Linux에서 SSH 구성 사용1036#### SSH 구성 사용

1032 1037 

1033macOS 및 Linux에서 Desktop은 컴퓨터의 OpenSSH 클라이언트를 실행하여 연결하므로 `~/.ssh/config`를 사용합니다. OpenSSH 클라이언트를 통한 연결에는 Claude Desktop v1.37937.0 이상이 필요합니다. 해당 파일의 `Host` 이름을 **SSH host** 필드에 입력하면 `HostName`, `User`, `IdentityFile`, `CertificateFile`, `ProxyJump`, `ProxyCommand`와 같은 해당 항목의 설정이 사용됩니다.1038Desktop이 컴퓨터의 OpenSSH 클라이언트를 통해 연결하는 경우 macOS, Linux, Windows에서 SSH 구성을 사용할 수 있습니다:

1039 

1040* **macOS 및 Linux**: Desktop은 컴퓨터에서 OpenSSH 클라이언트를 실행하여 연결하므로 `~/.ssh/config`를 사용합니다. OpenSSH 클라이언트를 통한 연결에는 Claude Desktop v1.37937.0 이상이 필요합니다.

1041* **Windows**: Desktop이 OpenSSH 클라이언트를 통해 연결하면 `%USERPROFILE%\.ssh\config`를 사용합니다. 서드 파티 제공업체가 아닌 Claude 계정을 사용하는 경우 OpenSSH 클라이언트를 통해 연결하려면 다음이 모두 필요합니다:

1042 

1043 * Claude Desktop v2.2553.0 이상. 버전을 확인하려면 [버전 확인](#check-your-version)을 참조하세요.

1044 * Microsoft의 OpenSSH 9.4 이상

1045 * 이 페이지 상단의 다운로드 버튼으로 설치한 Desktop. Microsoft Store의 Desktop은 OpenSSH 클라이언트를 통해 연결하지 않기 때문입니다

1046 

1047 이러한 요구 사항을 충족할 수 없거나 서드 파티 제공업체를 사용하는 경우 [OpenSSH 클라이언트 없이 Windows에서 연결](#connect-on-windows-without-the-openssh-client)을 참조하세요.

1048 

1049OpenSSH 클라이언트를 사용하는 경우 **SSH host** 필드에 구성 파일의 `Host` 이름을 입력합니다. 그러면 Desktop은 `HostName`, `User`, `IdentityFile`, `CertificateFile`, `ProxyJump`, `ProxyCommand` 등 해당 `Host` 항목의 설정을 사용합니다.

1034 1050 

1035연결을 추가하기 전에 컴퓨터의 터미널에서 클라이언트와 항목을 확인하세요:1051연결을 추가하기 전에 컴퓨터의 터미널에서 클라이언트와 항목을 확인하세요:

1036 1052 

1037* **클라이언트 버전**: `ssh -V`를 실행합니다. 클라이언트는 OpenSSH 7.6 이상이어야 합니다.1053* **macOS 및 Linux의 클라이언트 버전**: `ssh -V`를 실행합니다. 클라이언트는 OpenSSH 7.6 이상이어야 합니다.

1038* **항목**: `ssh devbox`와 같이 `Host` 이름으로 `ssh`를 실행합니다. 실패하면 먼저 항목을 수정합니다.1054* **Windows의 클라이언트 버전**: Desktop은 먼저 `PATH`에 있는 `ssh`를 시도하므로 `ssh -V`를 실행합니다. 출력에 `OpenSSH_for_Windows_`와 9.4 이상이 표시되면 통과입니다. 통과하지 못하면 Desktop이 다음으로 시도하는 두 폴더를 확인합니다: `C:\Windows\System32\OpenSSH`에서 `.\ssh.exe -V`를 실행한 다음 `C:\Program Files\OpenSSH`에서 실행합니다.

1055* **Windows에서 통과하는 클라이언트가 없는 경우**: Windows에서 **OpenSSH Client** 선택적 기능을 추가하고 보류 중인 Windows 업데이트를 설치하거나, [Microsoft의 최신 빌드](https://learn.microsoft.com/en-us/troubleshoot/windows-server/system-management-components/upgrade-in-box-openssh-to-latest-openssh-release)를 설치합니다. 그런 다음 Desktop을 종료했다가 다시 엽니다. Desktop이 사용 가능한 OpenSSH 클라이언트를 찾았는지 확인하려면 [`ssh.log`](#get-desktops-logs-for-an-ssh-problem)에서 `Windows OpenSSH client:`와 버전, 또는 `no usable Windows OpenSSH client`를 찾습니다.

1056* **항목**: Windows에서는 버전 확인을 통과한 클라이언트를 사용합니다. `ssh devbox`처럼 `Host` 이름으로 `ssh`를 실행합니다. 실패하면 먼저 항목을 수정합니다.

1039 1057 

1040**SSH port** 및 **SSH key (optional)** 필드는 비워 둘 수 있습니다. 값을 입력하면 Desktop은 이를 항목과 함께 사용합니다:1058**SSH port** 및 **SSH key (optional)** 필드는 비워 둘 수 있습니다. 값을 입력하면 Desktop은 이를 항목과 함께 사용합니다:

1041 1059 

1042* **SSH port**: 여기에 입력한 값은 항목의 `Port`를 재정의합니다1060* **SSH port**: 여기에 입력한 값은 항목의 `Port`를 재정의합니다

1043* **SSH key (optional)**: Desktop은 항목의 `IdentityFile` 및 SSH 에이전트의 키에 더해 선택한 키 파일을 제공합니다1061* **SSH key (optional)**: OpenSSH 클라이언트를 사용하면 Desktop은 항목의 `IdentityFile` 및 SSH 에이전트의 키와 함께 선택한 키 파일도 제시합니다. Windows에서는 `ssh`가 PuTTY `.ppk` 파일을 읽지 않으므로 OpenSSH 형식의 키를 선택하세요.

1062 

1063##### OpenSSH 클라이언트 없이 Windows에서 연결

1064 

1065Windows에서 컴퓨터가 [OpenSSH 클라이언트 요구 사항](#use-your-ssh-configuration)을 충족하지 않으면 Desktop의 기본 제공 SSH 클라이언트를 통해 연결합니다. 서드 파티 제공업체를 사용하는 경우 기본적으로 기본 제공 클라이언트를 통해 연결하며, 관리자가 이를 변경할 수 있습니다. 해당 설정은 [3P의 Claude Desktop에서 SSH 원격 세션](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions)을 참조하세요.

1066 

1067기본 제공 클라이언트를 사용하는 경우에도 `PATH`에 `ssh` 명령이 있으면 **SSH host** 필드에 SSH 구성의 `Host` 이름을 입력할 수 있으며, 다음과 같은 제한이 있습니다:

1068 

1069* **항목의 설정**: Desktop은 `HostName`, `User`, `Port`, `IdentityFile`을 가져옵니다. `PATH`에 `sh` 셸이 있으면 `ProxyCommand`도 가져옵니다.

1070* **SSH key (optional)**: 여기서 선택한 키 파일은 `IdentityFile`을 대체하므로, 항목의 `IdentityFile`을 유지하려면 이 필드를 비워 둡니다

1071* **`CertificateFile` 및 `ProxyJump`**: Desktop은 `CertificateFile`을 무시하며, 항목에 `ProxyJump`가 설정되어 있으면 연결이 실패합니다. 두 설정 중 하나를 사용하려면 [OpenSSH 클라이언트를 통해 연결](#use-your-ssh-configuration)하세요.

1044 1072 

1045##### 점프 호스트 뒤의 머신에 연결1073##### 점프 호스트 뒤의 머신에 연결

1046 1074 


1095 1123 

1096##### `ProxyCommand`에서 셸의 변수 사용1124##### `ProxyCommand`에서 셸의 변수 사용

1097 1125 

1098`ProxyCommand` 또는 `Match exec` 명령에서 직접 정의한 환경 변수를 사용하려면 `~/.zshrc`와 같은 셸 시작 파일에서 해당 변수를 내보낸 다음 Desktop을 종료했다가 다시 엽니다. Desktop은 시작할 때 로그인 셸이 내보내는 값을 읽고, 종료할 때까지 그 값을 유지합니다.1126macOS 및 Linux에서 `ProxyCommand` 또는 `Match exec` 명령에 자신의 환경 변수를 사용하려면 `~/.zshrc` 같은 셸 시작 파일에서 export합니다. 그런 다음 Desktop을 종료했다가 다시 엽니다. Desktop은 시작할 때 로그인 셸이 export하는 값을 읽고, 종료할 때까지 그 값을 유지합니다.

1099 1127 

1100이 기능을 사용하려면 Claude Desktop v2.37337.0 이상과 `-0`을 허용하는 `env` 명령이 필요합니다. 컴퓨터의 터미널에서 `env -0`을 실행하여 확인할 수 있습니다.1128이 기능을 사용하려면 Claude Desktop v2.37337.0 이상과 `-0`을 허용하는 `env` 명령이 필요합니다. 컴퓨터의 터미널에서 `env -0`을 실행하여 확인할 수 있습니다.

1101 1129 


1103>1131>

1104> 셸이 임시 AWS 자격 증명을 설정하는 경우 `AWS_*` 변수를 내보내는 대신 [AWS CLI에 프로필을 제공](#use-aws-credentials-in-a-proxycommand)하세요.1132> 셸이 임시 AWS 자격 증명을 설정하는 경우 `AWS_*` 변수를 내보내는 대신 [AWS CLI에 프로필을 제공](#use-aws-credentials-in-a-proxycommand)하세요.

1105 1133 

1106##### `ProxyCommand`에서 AWS 자격 증명 사용1134##### macOS 및 Linux에서 `ProxyCommand`에 AWS 자격 증명 사용

1107 1135 

1108셸 시작 파일에서 임시 AWS 자격 증명을 설정하는 경우, AWS CLI를 실행하는 `ProxyCommand`가 터미널에서는 연결되지만 Desktop에서는 실패할 수 있습니다. 셸이 `AWS_SESSION_TOKEN`, `AWS_SECURITY_TOKEN` 또는 `AWS_CREDENTIAL_EXPIRATION`을 내보내면 Desktop의 `ssh`와 `ProxyCommand`는 셸의 AWS 자격 증명, `AWS_REGION`, `AWS_PROFILE`을 받지 못합니다.1136셸 시작 파일에서 임시 AWS 자격 증명을 설정하는 경우, AWS CLI를 실행하는 `ProxyCommand`가 터미널에서는 연결되지만 Desktop에서는 실패할 수 있습니다. 셸이 `AWS_SESSION_TOKEN`, `AWS_SECURITY_TOKEN` 또는 `AWS_CREDENTIAL_EXPIRATION`을 내보내면 Desktop의 `ssh`와 `ProxyCommand`는 셸의 AWS 자격 증명, `AWS_REGION`, `AWS_PROFILE`을 받지 못합니다.

1109 1137 


1242 1270 

1243##### 긴 작업 준비1271##### 긴 작업 준비

1244 1272 

1245* **먼저 업데이트**: 긴 작업을 시작하기 전에 Desktop을 업데이트하세요. macOS와 Windows에서 Desktop은 다운로드한 업데이트를 설치하기 위해 자동으로 재시작할 수 있습니다. 이 재시작은 Claude가 SSH 작업을 수행하는 동안 대기합니다. Claude 계정을 사용하는 macOS에서는 기본적으로 업데이트가 72시간 동안 대기한 후에는 재시작이 그대로 진행될 수 있습니다.1273* **먼저 업데이트**: 긴 작업을 시작하기 전에 Desktop을 업데이트합니다. macOS 및 Windows에서 Desktop은 다운로드한 업데이트를 설치하기 위해 자동으로 다시 시작할 수 있습니다. 이 재시작은 Claude가 SSH 작업을 수행하는 동안 대기합니다. 기본적으로 업데이트가 72시간 동안 대기한 후에는 Desktop이 [이후 작업에 다시 연결](#reopen-a-session-after-you-quit-desktop)할 수 있는 경우 작업 중에도 재시작이 진행될 수 있습니다.

1246* **Windows에서, 또는 타사 제공업체로 v2.42304.0 이전 버전을 사용하는 경우 종료하지 않기**: 이 경우 종료하면 실행 중인 작업을 잃으므로, 작업 중에는 Desktop을 열어 둡니다. 그 외의 경우에는 종료하기 전에 [다시 가져올 수 있는 것](#reopen-a-session-after-you-quit-desktop)을 확인합니다.1274* **종료 전 확인**: 일부 Desktop 업데이트 후처럼 종료나 재시작 후 실행 중인 작업을 항상 다시 가져올 수 있는 것은 아닙니다. 해당 경우는 [Desktop 종료 후 세션 다시 열기](#reopen-a-session-after-you-quit-desktop)를 참조하세요.

1275* **이전 버전에서는 Desktop을 열어 두기**: v3.1623.0 이전 Claude Desktop을 사용하는 Windows에서는 Desktop이 종료되거나 다시 시작된 후 실행 중인 작업을 다시 가져올 수 없습니다. v2.42304.0 이전 버전의 macOS 또는 Linux에서 서드 파티 제공업체를 사용하는 경우에도 마찬가지입니다. 두 경우 모두 작업 중에는 Desktop을 열어 두세요. 버전을 확인하려면 [버전 확인](#check-your-version)을 참조하세요.

1247* **요청 줄이기**: [작업이 사용자를 기다리는 빈도를 줄이는](#handle-requests-that-arrive-while-you-are-away) 권한 모드, 규칙 또는 훅을 선택하세요1276* **요청 줄이기**: [작업이 사용자를 기다리는 빈도를 줄이는](#handle-requests-that-arrive-while-you-are-away) 권한 모드, 규칙 또는 훅을 선택하세요

1248* **점프 호스트 확인**: 점프 호스트가 휴대폰 푸시와 같은 로그인을 요구하는 경우 프롬프트 없이 작동하는 로그인으로 전환하세요. 그렇지 않으면 Desktop이 다시 연결을 시도할 때마다 푸시를 다시 보낼 수 있습니다.1277* **점프 호스트 확인**: 점프 호스트가 휴대폰 푸시와 같은 로그인을 요구하는 경우 프롬프트 없이 작동하는 로그인으로 전환하세요. 그렇지 않으면 Desktop이 다시 연결을 시도할 때마다 푸시를 다시 보낼 수 있습니다.

1249* **원격 머신 테스트**: 짧은 작업을 시작하고, 작업이 아직 실행 중일 때 Desktop을 종료한 다음, 작업이 완료되었어야 할 시점이 충분히 지난 후 세션을 다시 엽니다. 작업이 완료되지 않았고 세션에 인증 오류가 표시되지 않으면 원격 머신에서 [작업을 종료시킬 수 있는 요인](#limits-while-desktop-is-disconnected)을 확인하세요.1278* **원격 머신 테스트**: 짧은 작업을 시작하고, 작업이 아직 실행 중일 때 Desktop을 종료한 다음, 작업이 완료되었어야 할 시점이 충분히 지난 후 세션을 다시 엽니다. 작업이 완료되지 않았고 세션에 인증 오류가 표시되지 않으면 원격 머신에서 [작업을 종료시킬 수 있는 요인](#limits-while-desktop-is-disconnected)을 확인하세요.


1320 1349 

1321Desktop을 종료한 후에도 작업은 원격 머신에서 계속 실행되지만, Desktop이 해당 프로세스에 다시 연결할 수 없으면 세션이 다시 열릴 때 중지됩니다. Desktop이 닫혀 있는 동안 작업은 완료되거나, 사용자의 응답이 필요하거나, [제한](#limits-while-desktop-is-disconnected) 중 하나에 도달할 때까지 실행됩니다.1350Desktop을 종료한 후에도 작업은 원격 머신에서 계속 실행되지만, Desktop이 해당 프로세스에 다시 연결할 수 없으면 세션이 다시 열릴 때 중지됩니다. Desktop이 닫혀 있는 동안 작업은 완료되거나, 사용자의 응답이 필요하거나, [제한](#limits-while-desktop-is-disconnected) 중 하나에 도달할 때까지 실행됩니다.

1322 1351 

1323* **Windows의 Desktop**: Desktop은 종료 후 다시 연결하지 않으므로 실행 중인 작업을 다시 가져올 수 없습니다. Desktop이 시작될 때 세션이 열릴 수 있으므로, 작업이 완료되었을 것으로 예상될 때만 Desktop을 다시 시작합니다.1352* **Windows의 Desktop, v3.1623.0 이전 버전에서 시작한 작업**: 그 이후 Desktop이 업데이트되었더라도 작업을 다시 가져올 수 없습니다. Desktop이 시작될 때 세션이 열릴 수 있고 세션이 열리면 작업이 중지되므로, 작업이 완료되었을 것으로 예상될 때만 Desktop을 다시 시작하세요. 어떤 버전에서 작업을 시작했는지 모르는 경우에도 작업이 완료되었을 것으로 예상될 때까지 기다리세요.

1324* **타사 제공업체, 이전 버전에서 시작한 작업**: v2.42304.0 이전 Desktop 버전에서 작업을 시작한 경우 macOS나 Linux에서도 작업을 다시 가져올 수 없습니다. 작업이 완료되었을 것으로 예상될 때만 Desktop을 다시 시작합니다.1353* **macOS 또는 Linux의 서드 파티 제공업체, v2.42304.0 이전 버전에서 시작한 작업**: 작업을 다시 가져올 수 없습니다. 작업이 완료되었을 것으로 예상될 때만 Desktop을 다시 시작하세요.

1325* **그 외 작업, macOS 또는 Linux의 Desktop**: Desktop을 시작하고 세션을 열면, Desktop이 다시 연결되는 경우 작업이 계속됩니다. 일부 Desktop 업데이트 후처럼 항상 다시 연결할 수 있는 것은 아니므로 [긴 작업 전에 업데이트](#prepare-a-long-task)합니다.1354* **기타 모든 작업**: Desktop을 시작하고 세션을 열면 Desktop이 다시 연결되는 경우 작업이 계속됩니다. 일부 Desktop 업데이트 후처럼 항상 다시 연결할 수 있는 것은 아니므로 [긴 작업 전에 업데이트](#prepare-a-long-task)하세요.

1326 1355 

1327Desktop이 다시 연결할 수 없으면 대기 중이던 승인이나 질문도 잃습니다. 작업이 자동으로 계속되지 않으면 메시지를 보내세요. 그러면 Claude가 대화의 저장된 기록에서 이어서 진행합니다.1356작업이 중지되면 Desktop이 새 프로세스를 시작하는 동안 세션에 `Restarting Claude Code on <host>…`가 표시될 수 있습니다. 대기 중이던 승인이나 질문도 잃게 됩니다. Claude가 자동으로 계속하지 않으면 메시지를 보내세요. 그러면 Claude가 대화의 저장된 기록에서 계속합니다.

1328 1357 

1329타사 배포의 경우 [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions)를 참조하세요.1358타사 배포의 경우 [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions)를 참조하세요.

1330 1359 


1411 1440 

1412원격 머신에 누가 연결했는지 확인하려면 해당 머신에서 SSH 서버의 로그를 읽습니다. 로그에서 Desktop의 로그인은 터미널의 로그인과 같은 형태로 표시됩니다. macOS 또는 Linux의 Desktop에서는 세션마다가 아니라 Desktop이 연결할 때마다 항목이 하나씩 기록됩니다.1441원격 머신에 누가 연결했는지 확인하려면 해당 머신에서 SSH 서버의 로그를 읽습니다. 로그에서 Desktop의 로그인은 터미널의 로그인과 같은 형태로 표시됩니다. macOS 또는 Linux의 Desktop에서는 세션마다가 아니라 Desktop이 연결할 때마다 항목이 하나씩 기록됩니다.

1413 1442 

1443서버에 `MaxSessions 1`이 설정되어 있으면 Desktop이 연결하거나 다시 연결할 때마다 최소 두 개의 항목이 기록됩니다. 또한 터미널 탭마다, 그리고 `!`로 시작하는 명령을 실행하는 Desktop 세션마다 최소 하나의 항목이 추가로 기록됩니다.

1444 

1414Claude Code의 [메트릭 및 이벤트](https://code.claude.com/docs/ko/monitoring-usage.md#available-metrics-and-events)에서는 Desktop의 SSH 연결을 찾을 수 없습니다. 이를 통해 SSH 세션이 어느 원격 머신에서 실행되었는지 확인하려면 [Desktop SSH 세션에 텔레메트리 귀속](https://code.claude.com/docs/ko/monitoring-usage.md#attribute-telemetry-to-desktop-ssh-sessions)을 참조하십시오. Desktop 자체의 연결 기록은 [SSH 문제에 대한 Desktop 로그 가져오기](#get-desktops-logs-for-an-ssh-problem)를 참조하십시오.1445Claude Code의 [메트릭 및 이벤트](https://code.claude.com/docs/ko/monitoring-usage.md#available-metrics-and-events)에서는 Desktop의 SSH 연결을 찾을 수 없습니다. 이를 통해 SSH 세션이 어느 원격 머신에서 실행되었는지 확인하려면 [Desktop SSH 세션에 텔레메트리 귀속](https://code.claude.com/docs/ko/monitoring-usage.md#attribute-telemetry-to-desktop-ssh-sessions)을 참조하십시오. Desktop 자체의 연결 기록은 [SSH 문제에 대한 Desktop 로그 가져오기](#get-desktops-logs-for-an-ssh-problem)를 참조하십시오.

1415 1446 

1416#### 로그인 전에 닫히는 연결1447#### 로그인 전에 닫히는 연결


2112| - | - | - |2143| - | - | - |

2113| `<host>'s SSH server has SFTP turned off` | `[SFTP_UNAVAILABLE]` | [원격 머신 요구 사항](#remote-machine-requirements-for-ssh-sessions)에 설명된 대로 서버의 `sshd_config`에서 SFTP를 켭니다 |2144| `<host>'s SSH server has SFTP turned off` | `[SFTP_UNAVAILABLE]` | [원격 머신 요구 사항](#remote-machine-requirements-for-ssh-sessions)에 설명된 대로 서버의 `sshd_config`에서 SFTP를 켭니다 |

2114| `SFTP doesn't start on <host>` | `[SFTP_NOT_STARTED]` | 컴퓨터의 터미널에서 `sftp`로 동일한 호스트에 연결하여 무엇이 시작을 막는지 확인한 다음, Desktop 메시지에 언급된 설정과 파일을 확인합니다 |2145| `SFTP doesn't start on <host>` | `[SFTP_NOT_STARTED]` | 컴퓨터의 터미널에서 `sftp`로 동일한 호스트에 연결하여 무엇이 시작을 막는지 확인한 다음, Desktop 메시지에 언급된 설정과 파일을 확인합니다 |

2115| `<host> allows too few SSH sessions per connection` | `[SESSION_LIMIT]` | 서버의 `sshd_config`에서 `MaxSessions`를 높입니다. 예를 들어 OpenSSH 기본값인 10으로 설정합니다 |2146| `<host> allows too few SSH sessions per connection` | `[SESSION_LIMIT]` | Claude Desktop v3.1623.0 이상으로 업데이트하거나, 서버의 `sshd_config`에서 `MaxSessions`를 높입니다. 예를 들어 OpenSSH 기본값인 10으로 설정합니다 |

2116| `<host> is out of disk space` | `[ENOSPC]` 또는 `[EDQUOT]` | 원격 머신의 홈 디렉터리 또는 `/tmp`에서 공간 또는 할당량을 확보합니다 |2147| `<host> is out of disk space` | `[ENOSPC]` 또는 `[EDQUOT]` | 원격 머신의 홈 디렉터리 또는 `/tmp`에서 공간 또는 할당량을 확보합니다 |

2117| `Free up disk space on this computer` | `Couldn't prepare the deploy locally`로 시작하는 메시지의 `[ENOSPC]` 또는 `[EDQUOT]` | 컴퓨터의 공간을 확보합니다 |2148| `Free up disk space on this computer` | `Couldn't prepare the deploy locally`로 시작하는 메시지의 `[ENOSPC]` 또는 `[EDQUOT]` | 컴퓨터의 공간을 확보합니다 |

2118| `Claude Code won't start on <host>` | `[CLI_UNRESPONSIVE]` | 1분 정도 기다린 후 다시 시도합니다. 계속 실패하면 원격 머신에서 메시지에 언급된 명령을 실행하여 Claude Code가 그곳에서 응답하는지 확인합니다. |2149| `Claude Code won't start on <host>` | `[CLI_UNRESPONSIVE]` | 1분 정도 기다린 후 다시 시도합니다. 계속 실패하면 원격 머신에서 메시지에 언급된 명령을 실행하여 Claude Code가 그곳에서 응답하는지 확인합니다. |

errors.md +2 −0

Details

327| `Cannot read this as an image: <path> is a pipe or a device` | [도구 오류](#file-is-too-large-to-read-as-an-image) |327| `Cannot read this as an image: <path> is a pipe or a device` | [도구 오류](#file-is-too-large-to-read-as-an-image) |

328| `subagent_type is required: the general-purpose agent is not available in this session` | [도구 오류](#subagent-type-is-required) |328| `subagent_type is required: the general-purpose agent is not available in this session` | [도구 오류](#subagent-type-is-required) |

329| `Error: this write left the memory index at MEMORY.md at ..., over its ... read limit` | [도구 오류](#memory-index-is-over-its-read-limit) |329| `Error: this write left the memory index at MEMORY.md at ..., over its ... read limit` | [도구 오류](#memory-index-is-over-its-read-limit) |

330| `Sandbox is required but failed to initialize: <reason>` | [샌드박싱 문제 해결](https://code.claude.com/docs/ko/sandboxing.md#commands-refused-with-sandbox-is-required) |

331| `Sandbox is required (sandbox.failIfUnavailable) and stopped being available in this session: <reason>` | [샌드박싱 문제 해결](https://code.claude.com/docs/ko/sandboxing.md#commands-refused-with-sandbox-is-required) |

330| `pkill: refusing to run` | [도구 오류](#pkill-pattern-matches-the-claude-code-process) |332| `pkill: refusing to run` | [도구 오류](#pkill-pattern-matches-the-claude-code-process) |

331| `Failed to write to <name>'s inbox — nothing was sent` | [도구 오류](#failed-to-write-to-a-teammate-inbox) |333| `Failed to write to <name>'s inbox — nothing was sent` | [도구 오류](#failed-to-write-to-a-teammate-inbox) |

332| `Failed to write the plan approval request to the lead's inbox — plan not submitted` | [도구 오류](#failed-to-write-to-a-teammate-inbox) |334| `Failed to write the plan approval request to the lead's inbox — plan not submitted` | [도구 오류](#failed-to-write-to-a-teammate-inbox) |

fast-mode.md +3 −3

Details

80 80 

81빠른 모드 가격은 전체 1M 토큰 컨텍스트 윈도우에 걸쳐 고정입니다. 표준 Opus 요금을 비교하려면 [Claude 가격 책정 참고](https://platform.claude.com/docs/ko/about-claude/pricing)를 참조하십시오.81빠른 모드 가격은 전체 1M 토큰 컨텍스트 윈도우에 걸쳐 고정입니다. 표준 Opus 요금을 비교하려면 [Claude 가격 책정 참고](https://platform.claude.com/docs/ko/about-claude/pricing)를 참조하십시오.

82 82 

83대화에서 빠른 모드를 처음 활성화하면 전체 대화 컨텍스트에 대해 빠른 모드의 캐시되지 않은 입력 토큰 전체 가격을 지불합니다. 대화가 깊어질수록 이 비용이 커지므로, 대화를 시작할 때 빠른 모드를 활성화하면 요금이 가장 적습니다. 비용은 대화당 한 번만 적용되므로, 나중에 빠른 모드를 끄고 다시 켜도 반복되지 않습니다. 메커니즘에 대해서는 [빠른 모드가 프롬프트 캐시와 상호작용하는 방식](https://code.claude.com/docs/ko/prompt-caching.md#turning-on-fast-mode)을 참조하십시오.83대화에서 빠른 모드를 처음 활성화하면 전체 대화 컨텍스트에 대해 빠른 모드의 캐시되지 않은 입력 토큰 전체 가격을 지불합니다. 대화가 깊어질수록 이 비용이 커지므로, 대화를 시작할 때 빠른 모드를 활성화하면 요금이 가장 적습니다. 빠른 모드와 표준 속도는 [별도의 캐시](https://code.claude.com/docs/ko/prompt-caching.md#turning-on-fast-mode)를 유지하므로, 이후 전환할 때마다 대화의 일부 또는 전체를 다시 캐시되지 않은 상태로 읽습니다.

84 84 

85### 빠른 모드 지출이 표시되는 위치 확인85### 빠른 모드 지출이 표시되는 위치 확인

86 86 

87로그인 방식에 따라 빠른 모드 지출이 다른 위치에 표시되므로, 먼저 [`/status`](https://code.claude.com/docs/ko/commands)를 실행하여 확인하십시오. `Claude Max 계정`과 같은 `로그인 방법` 행이 표시되면 Claude 구독으로 로그인한 것입니다. 대신 `API 키` 행이 표시되면 요청이 Claude Console 조직에 청구됩니다.87로그인 방식에 따라 빠른 모드 지출이 다른 위치에 표시되므로, 먼저 [`/status`](https://code.claude.com/docs/ko/commands)를 실행하여 확인하십시오. `Claude Max account`와 같은 `Login method` 행이 표시되면 Claude 구독으로 로그인한 것입니다. 대신 `API key` 행이 표시되면 요청이 Claude Console 조직에 청구됩니다.

88 88 

89* **Pro 및 Max**: 사용 크레딧에서 빠른 모드 비용을 지불합니다. claude.ai의 [**설정 > 사용**](https://claude.ai/settings/usage)으로 이동하면, **사용 크레딧** 섹션에 이번 달 사용 크레딧으로 얼마를 지출했는지 표시됩니다. 이 수치에는 빠른 모드가 포함되지만 별도로 분류되지 않습니다.89* **Pro 및 Max**: 사용 크레딧에서 빠른 모드 비용을 지불합니다. claude.ai의 [**설정 > 사용**](https://claude.ai/settings/usage)으로 이동하면, **사용 크레딧** 섹션에 이번 달 사용 크레딧으로 얼마를 지출했는지 표시됩니다. 이 수치에는 빠른 모드가 포함되지만 별도로 분류되지 않습니다.

90* **Team 및 Enterprise**: 조직이 사용 크레딧에서 빠른 모드 사용 비용을 지불합니다. 자신의 사용 크레딧 지출을 확인하려면 [`/usage`](https://code.claude.com/docs/ko/costs#check-your-usage-credits-spend)를 실행하십시오. 조직이 해당 지출을 확인하는 위치에 대해서는 [Claude for Teams and Enterprise](https://code.claude.com/docs/ko/costs.md#claude-for-teams-and-enterprise)를 참조하십시오.90* **Team 및 Enterprise**: 조직이 사용 크레딧에서 빠른 모드 사용 비용을 지불합니다. 자신의 사용 크레딧 지출을 확인하려면 [`/usage`](https://code.claude.com/docs/ko/costs#check-your-usage-credits-spend)를 실행하십시오. 조직이 해당 지출을 확인하는 위치에 대해서는 [Claude for Teams and Enterprise](https://code.claude.com/docs/ko/costs.md#claude-for-teams-and-enterprise)를 참조하십시오.


167 167 

168게이트웨이 뒤에서는 Claude Code가 가용성 확인을 보내지 않고 캐시된 이전의 성공한 확인도 없는 다음 구성에 해당하는지 확인합니다:168게이트웨이 뒤에서는 Claude Code가 가용성 확인을 보내지 않고 캐시된 이전의 성공한 확인도 없는 다음 구성에 해당하는지 확인합니다:

169 169 

170* `ANTHROPIC_BASE_URL`이 게이트웨이를 가리키도록 하고 [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/ko/llm-gateway-connect#set-the-base-url-and-credential)를 Anthropic API 키 형식이 아닌 게이트웨이 발급 키로 설정한 경우입니다. Claude Code는 이러한 키를 `api.anthropic.com`에 보내지 않습니다.170* `ANTHROPIC_BASE_URL`이 게이트웨이를 가리키도록 하고 [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/ko/llm-gateway-connect#set-the-base-url-and-credential)를 Anthropic API 키 형식이 아닌 게이트웨이 발급 키로 설정한 경우입니다.

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

172 172 

173두 구성 모두에서 빠른 모드를 복원하려면 `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`을 설정합니다.173두 구성 모두에서 빠른 모드를 복원하려면 `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`을 설정합니다.

Details

262 262 

263**컨텍스트 비용:** 사용할 때까지 낮음. 사용자 전용 skill은 호출할 때까지 0 비용입니다.263**컨텍스트 비용:** 사용할 때까지 낮음. 사용자 전용 skill은 호출할 때까지 0 비용입니다.

264 264 

265**Subagent에서:** Skill은 subagent에서 다르게 작동합니다. 온디맨드 로딩 대신, subagent의 `skills` 필드에 나열된 skill은 시작 시 컨텍스트에 완전히 미리 로드됩니다. Subagent는 여전히 Skill 도구를 통해 나열되지 않은 프로젝트, 사용자 및 플러그인 skill을 검색하고 호출할 수 있습니다.265**Subagent에서:** subagent의 `skills` 필드에 나열된 skill의 전체 콘텐츠는 온디맨드가 아니라 [시작 시 해당 subagent의 컨텍스트에 로드됩니다](https://code.claude.com/docs/ko/sub-agents.md#preload-skills-into-subagents). Subagent는 여전히 Skill 도구를 통해 나열되지 않은 프로젝트, 사용자 및 플러그인 skill을 검색하고 호출할 수 있습니다.

266 266 

267> [!TIP]267> [!TIP]

268>268>

glossary.md +2 −2

Details

120 120 

121### Compaction121### Compaction

122 122 

123[컨텍스트 윈도우](#context-window)가 한계에 접근할 때 대화의 자동 요약입니다. 이전 도구 출력이 먼저 지워지고, 그 다음 대화가 요약됩니다. 프로젝트 루트 CLAUDE.md 및 auto memory는 컴팩션을 견디고 디스크에서 다시 로드됩니다. 대화에서만 제공된 지침은 손실될 수 있습니다. `/compact`를 수동으로 트리거하거나, `/compact focus on the API changes`와 같은 포커스를 선택적으로 사용합니다.123[컨텍스트 윈도우](#context-window)가 한계에 접근할 때 대화의 자동 요약입니다. 프로젝트 루트 CLAUDE.md와 자동 메모리는 압축 후에도 유지되지만, 대화에서만 제공된 지침은 유지되지 않을 수 있습니다. `/compact`를 실행하여 수동으로 트리거하며, `/compact focus on the API changes`와 같은 포커스를 선택적으로 지정할 수 있습니다.

124 124 

125자세히 알아보기: [컴팩션에서 생존하는 것](https://code.claude.com/docs/ko/context-window.md#what-survives-compaction) · [컨텍스트가 가득 찰 때](https://code.claude.com/docs/ko/how-claude-code-works.md#when-context-fills-up)125자세히 알아보기: [압축 후에도 유지되는 것](https://code.claude.com/docs/ko/context-window.md#what-survives-compaction) · [컨텍스트가 가득 찰 때](https://code.claude.com/docs/ko/how-claude-code-works.md#when-context-fills-up) · [유휴 상태로 둔 대화를 Claude Code가 압축하는 시점](https://code.claude.com/docs/ko/settings-reference.md#idlecompaction)

126 126 

127### Connector127### Connector

128 128 

hooks.md +16 −6

Details

1426 1426 

1427Setup 훅은 차단할 수 없으며, 어떤 종료 코드에서도 실행이 계속됩니다. 모든 종료 코드에서 Claude Code는 `systemMessage`, `continue`, `hookSpecificOutput.additionalContext` 같은 Setup 훅의 [JSON 출력 필드](#json-output)를 버립니다. `-p`를 사용하는 경우, Setup 훅의 stdout, stderr, 종료 코드는 `--output-format stream-json --verbose`로 실행할 때만 실행 출력에 [`hook_response` 이벤트](https://code.claude.com/docs/ko/headless#read-session-metadata)로 나타납니다.1427Setup 훅은 차단할 수 없으며, 어떤 종료 코드에서도 실행이 계속됩니다. 모든 종료 코드에서 Claude Code는 `systemMessage`, `continue`, `hookSpecificOutput.additionalContext` 같은 Setup 훅의 [JSON 출력 필드](#json-output)를 버립니다. `-p`를 사용하는 경우, Setup 훅의 stdout, stderr, 종료 코드는 `--output-format stream-json --verbose`로 실행할 때만 실행 출력에 [`hook_response` 이벤트](https://code.claude.com/docs/ko/headless#read-session-metadata)로 나타납니다.

1428 1428 

1429Setup 훅은 `CLAUDE_ENV_FILE`에 접근할 수 있습니다. 해당 파일에 쓴 변수는 [SessionStart 훅](#persist-environment-variables)에서와 같이 세션의 이후 Bash 명령에 유지됩니다. `Setup`에서는 `type: "command"` 훅만 실행됩니다. [MCP 도구 훅 필드](#mcp-tool-hook-fields)에 설명된 대로, `Setup`의 `type: "mcp_tool"` 훅은 항상 건너뜁니다.1429Setup 훅은 `CLAUDE_ENV_FILE`에 액세스할 수 있습니다. 훅이 이 파일에 변수를 쓰면 [SessionStart 훅](#persist-environment-variables)에서와 마찬가지로 세션의 이후 Bash 명령에 유지됩니다. `Setup`에서는 `type: "command"` 훅만 실행됩니다. `Setup`의 `type: "mcp_tool"` 훅은 [MCP 도구 훅 필드](#mcp-tool-hook-fields)에 설명된 대로 항상 건너뜁니다.

1430 1430 

1431### InstructionsLoaded1431### InstructionsLoaded

1432 1432 


1483 1483 

1484`UserPromptSubmit`의 [Agent SDK 콜백 훅](https://code.claude.com/docs/ko/agent-sdk/hooks.md)이 타임아웃에 도달하면 훅 이름과 타임아웃을 명시한 메시지와 함께 프롬프트를 차단합니다. 해당 위치의 콜백은 실패 시 열려서는 안 되는 정책 게이트 역할을 할 수 있기 때문입니다. 세션은 계속됩니다.1484`UserPromptSubmit`의 [Agent SDK 콜백 훅](https://code.claude.com/docs/ko/agent-sdk/hooks.md)이 타임아웃에 도달하면 훅 이름과 타임아웃을 명시한 메시지와 함께 프롬프트를 차단합니다. 해당 위치의 콜백은 실패 시 열려서는 안 되는 정책 게이트 역할을 할 수 있기 때문입니다. 세션은 계속됩니다.

1485 1485 

1486#### 프롬프트 확인 중 `Esc`

1487 

1488훅이 아직 프롬프트를 확인하는 동안 `Esc`를 누르거나 세션을 중단하면 확인이 중지되고 프롬프트는 Claude에 전달되지 않습니다. 터미널에서 입력한 텍스트는 프롬프트 입력란으로 돌아가며, 다시 보낼 때 훅이 다시 확인합니다.

1489 

1490중단하는 순간에 훅이 프롬프트를 차단할 수도 있습니다. 이 경우 프롬프트는 차단된 상태로 유지됩니다. 해당 훅의 [차단 메시지](#what-a-blocked-prompt-leaves-behind)가 표시되고 텍스트는 입력란으로 돌아가지 않습니다.

1491 

1486#### UserPromptSubmit 입력1492#### UserPromptSubmit 입력

1487 1493 

1488[공통 입력 필드](#common-input-fields) 외에도 UserPromptSubmit 훅은 제출된 텍스트가 담긴 `prompt` 필드를 받습니다. `[Pasted text #N]` 자리 표시자로 축소된 붙여넣은 내용은 해당 위치에 확장되어 도착합니다. Claude Code가 [Claude를 위해 붙여넣은 텍스트를 표시](https://code.claude.com/docs/ko/terminal-config.md#how-claude-treats-pasted-text)하는 세션에서는 확장된 내용이 `<pasted_content id="…">` 줄과 `</pasted_content id="…">` 줄 사이에 위치하므로, 훅이 프롬프트를 파싱하는 경우 이 줄들을 고려하십시오.1494[공통 입력 필드](#common-input-fields) 외에도 UserPromptSubmit 훅은 제출된 텍스트가 담긴 `prompt` 필드를 받습니다. `[Pasted text #N]` 자리 표시자로 축소된 붙여넣은 내용은 해당 위치에 확장되어 도착합니다. Claude Code가 [Claude를 위해 붙여넣은 텍스트를 표시](https://code.claude.com/docs/ko/terminal-config.md#how-claude-treats-pasted-text)하는 세션에서는 확장된 내용이 `<pasted_content id="…">` 줄과 `</pasted_content id="…">` 줄 사이에 위치하므로, 훅이 프롬프트를 파싱하는 경우 이 줄들을 고려하십시오.


1741 1747 

1742[PreToolUse 결정 제어](#pretooluse-decision-control)를 사용해 도구 호출을 허용, 거부, 확인 요청 또는 지연할 수 있습니다.1748[PreToolUse 결정 제어](#pretooluse-decision-control)를 사용해 도구 호출을 허용, 거부, 확인 요청 또는 지연할 수 있습니다.

1743 1749 

1744`PreToolUse`의 [Agent SDK 콜백 훅](https://code.claude.com/docs/ko/agent-sdk/hooks.md)이 타임아웃을 초과하면 도구 호출을 차단하며, Claude는 타임아웃을 명시한 오류 결과를 받습니다.1750`PreToolUse`의 [Agent SDK 콜백 훅](https://code.claude.com/docs/ko/agent-sdk/hooks.md#hook-timeout)이 타임아웃을 초과하면 도구 호출을 차단합니다.

1745 1751 

1746#### PreToolUse 입력1752#### PreToolUse 입력

1747 1753 


2457| `quota_auto_resume_fired` | claude.ai 사용 한도로 일시 중지된 작업을 Claude Code가 계속하는 경우: 재설정 시점에, 또는 대기 중에 사용량 크레딧 추가, 플랜 업그레이드, 모델 전환 등 Claude Code에서 사용자가 한 작업으로 다시 사용할 수 있게 되면 더 일찍 계속합니다. 단, [모델 설정 예외](https://code.claude.com/docs/ko/interactive-mode.md#wait-for-a-usage-limit-to-reset)가 적용됩니다 |2463| `quota_auto_resume_fired` | claude.ai 사용 한도로 일시 중지된 작업을 Claude Code가 계속하는 경우: 재설정 시점에, 또는 대기 중에 사용량 크레딧 추가, 플랜 업그레이드, 모델 전환 등 Claude Code에서 사용자가 한 작업으로 다시 사용할 수 있게 되면 더 일찍 계속합니다. 단, [모델 설정 예외](https://code.claude.com/docs/ko/interactive-mode.md#wait-for-a-usage-limit-to-reset)가 적용됩니다 |

2458| `quota_auto_resume_stale` | 컴퓨터가 약 30분 이상 절전 상태인 동안 claude.ai 사용 한도가 재설정된 경우. Claude Code는 계속하지 않고 사용자가 `Enter`를 누를 때까지 기다립니다. 더 짧은 절전 후에는 계속 진행하며 대신 `quota_auto_resume_fired`를 발생시킵니다 |2464| `quota_auto_resume_stale` | 컴퓨터가 약 30분 이상 절전 상태인 동안 claude.ai 사용 한도가 재설정된 경우. Claude Code는 계속하지 않고 사용자가 `Enter`를 누를 때까지 기다립니다. 더 짧은 절전 후에는 계속 진행하며 대신 `quota_auto_resume_fired`를 발생시킵니다 |

2459| `quota_auto_resume_disabled` | Claude Code가 작업을 계속하지 않고 claude.ai 사용 한도 대기를 종료한 경우: Claude Code가 스스로 시작한 대기 중에 [`autoContinueAtUsageLimit`](https://code.claude.com/docs/ko/settings-reference#autocontinueatusagelimit)이 꺼졌거나 재설정 시점이 24시간 이상 뒤로 밀린 경우, 계속한 작업이 계속 한도에 도달한 경우, 또는 계속 진행이 모델에 도달하기 전에 차단된 경우입니다. 사용자가 `Esc` 또는 `Ctrl+C`를 누르거나 **Don't continue automatically**를 선택한 경우에는 발생하지 않습니다 |2465| `quota_auto_resume_disabled` | Claude Code가 작업을 계속하지 않고 claude.ai 사용 한도 대기를 종료한 경우: Claude Code가 스스로 시작한 대기 중에 [`autoContinueAtUsageLimit`](https://code.claude.com/docs/ko/settings-reference#autocontinueatusagelimit)이 꺼졌거나 재설정 시점이 24시간 이상 뒤로 밀린 경우, 계속한 작업이 계속 한도에 도달한 경우, 또는 계속 진행이 모델에 도달하기 전에 차단된 경우입니다. 사용자가 `Esc` 또는 `Ctrl+C`를 누르거나 **Don't continue automatically**를 선택한 경우에는 발생하지 않습니다 |

2460| `plugin_notification` | [mod](https://code.claude.com/docs/ko/plugins/mods/api.md#show-something-without-starting-a-turn)가 `$.ui.notify`로 알림을 발생시킨 경우. mod가 `title`을 설정하지 않으면 훅의 `title`은 mod의 이름입니다 |2466| `plugin_notification` | [mod](https://code.claude.com/docs/ko/plugins/mods/api.md#show-something-without-starting-a-turn)가 `$.ui.notify`로 알림을 발생시킨 경우. mod가 설정하지 않는 한 훅의 `title`은 mod의 이름입니다 |

2461 2467 

2462`quota_auto_resume_fired`, `quota_auto_resume_stale`, `quota_auto_resume_disabled` 유형은 Claude Code v2.1.234 이상이 필요합니다.2468`quota_auto_resume_fired`, `quota_auto_resume_stale`, `quota_auto_resume_disabled` 유형은 Claude Code v2.1.234 이상이 필요합니다.

2463 2469 


2970 2976 

2971메인 대화의 셸 명령이 작업 디렉터리를 변경할 때 실행됩니다. 예를 들어 Claude가 `cd` 명령을 실행하는 경우입니다. 디렉터리 변경에 대응하는 데 사용하십시오. 환경 변수를 다시 로드하거나, 프로젝트별 툴체인을 활성화하거나, 설정 스크립트를 자동으로 실행할 수 있습니다. 디렉터리별 환경을 관리하는 [direnv](https://direnv.net/)와 같은 도구를 위해 [FileChanged](#filechanged)와 함께 사용됩니다.2977메인 대화의 셸 명령이 작업 디렉터리를 변경할 때 실행됩니다. 예를 들어 Claude가 `cd` 명령을 실행하는 경우입니다. 디렉터리 변경에 대응하는 데 사용하십시오. 환경 변수를 다시 로드하거나, 프로젝트별 툴체인을 활성화하거나, 설정 스크립트를 자동으로 실행할 수 있습니다. 디렉터리별 환경을 관리하는 [direnv](https://direnv.net/)와 같은 도구를 위해 [FileChanged](#filechanged)와 함께 사용됩니다.

2972 2978 

2973CwdChanged 훅은 [`CLAUDE_ENV_FILE`](#persist-environment-variables)에 접근할 수 있습니다. 해당 파일에 기록된 변수는 다음 CwdChanged 이벤트에서 Claude Code가 이를 지울 때까지 이후 Bash 명령에 유지됩니다.2979CwdChanged 훅은 [`CLAUDE_ENV_FILE`](#persist-environment-variables)에 접근할 수 있습니다. 훅이 해당 파일에 변수를 작성하면, 해당 변수는 Claude Code가 이를 지우는 다음 CwdChanged 이벤트까지 이후의 Bash 명령에 유지됩니다.

2974 2980 

2975CwdChanged는 matcher를 지원하지 않으며 매번 발생합니다.2981CwdChanged는 matcher를 지원하지 않으며 매번 발생합니다.

2976 2982 


3135* Claude Code가 [백그라운드 세션](https://code.claude.com/docs/ko/agent-view.md#how-file-edits-are-isolated)을 자체 worktree에 격리하는 경우3141* Claude Code가 [백그라운드 세션](https://code.claude.com/docs/ko/agent-view.md#how-file-edits-are-isolated)을 자체 worktree에 격리하는 경우

3136* `worktree` 모드의 [`claude remote-control`](https://code.claude.com/docs/ko/remote-control#start-a-remote-control-session)이 자체 worktree에서 세션을 시작하는 경우3142* `worktree` 모드의 [`claude remote-control`](https://code.claude.com/docs/ko/remote-control#start-a-remote-control-session)이 자체 worktree에서 세션을 시작하는 경우

3137 3143 

3138Claude가 `EnterWorktree`를 호출하는 대신 Bash 도구를 통해 `git worktree add`를 실행하면 WorktreeCreate 훅은 실행되지 않습니다. 해당 명령을 검사하거나 차단하려면 `Bash` matcher를 사용하는 [`PreToolUse`](#pretooluse) 훅을 추가하세요.3144WorktreeCreate 훅은 Claude가 Bash를 통해 추가하는 worktree에 대해서는 실행되지 않으며, 플러그인의 훅은 `--worktree`와 [`--tmux`](https://code.claude.com/docs/ko/cli-reference#cli-flags)로 실행할 때 생성되는 worktree에 대해서는 실행되지 않습니다.

3145 

3146* **Bash를 통한 `git worktree add`**: 해당 명령을 검사하거나 차단하려면 `Bash` matcher를 사용하는 [`PreToolUse`](#pretooluse) 훅을 추가하세요.

3147* **`--worktree`와 `--tmux`**: Claude Code는 플러그인을 로드하기 전에 worktree를 생성하므로 플러그인의 WorktreeCreate 훅은 실행되지 않습니다. 두 플래그를 함께 사용할 때 훅을 실행하려면 대신 [설정 파일](#configuration)에 정의하세요. v2.1.300 이전에는 `--worktree`만 사용할 때도 플러그인의 WorktreeCreate 훅이 실행되지 않았습니다.

3139 3148 

3140기본적으로 Claude Code는 `git worktree`로 격리된 작업 사본을 생성합니다. WorktreeCreate 훅을 구성하면 이 기본 git 동작이 대체되어 SVN, Perforce, Mercurial 같은 다른 버전 관리 시스템을 사용할 수 있습니다.3149기본적으로 Claude Code는 `git worktree`로 격리된 작업 사본을 생성합니다. WorktreeCreate 훅을 구성하면 이 기본 git 동작이 대체되어 SVN, Perforce, Mercurial 같은 다른 버전 관리 시스템을 사용할 수 있습니다.

3141 3150 


4077 4086 

4078비동기 hook이 발생하면 Claude Code는 hook 프로세스를 시작하고 완료를 기다리지 않고 즉시 계속합니다. hook은 동기 hook과 동일한 JSON 입력을 stdin을 통해 받습니다.4087비동기 hook이 발생하면 Claude Code는 hook 프로세스를 시작하고 완료를 기다리지 않고 즉시 계속합니다. hook은 동기 hook과 동일한 JSON 입력을 stdin을 통해 받습니다.

4079 4088 

4080백그라운드 프로세스가 종료된 후 Claude Code는 hook의 JSON 응답에서 `additionalContext` 및 `systemMessage` 필드를 다음 대화 턴에서 Claude에 전달합니다. 동기 hook의 `systemMessage`와 달리 두 필드 모두 사용자에게 표시되지 않습니다.4089백그라운드 프로세스가 종료된 후 Claude Code는 hook의 JSON 응답에서 `additionalContext` 및 `systemMessage` 필드를 다음 대화 턴에서 Claude에 전달합니다. 단, [반복되는 `SessionStart` 출력](#limitations)은 예외입니다. 동기 hook의 `systemMessage`와 달리 두 필드 모두 사용자에게 표시되지 않습니다.

4081 4090 

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

4083 4092 


4145 4154 

4146* Hook 출력은 다음 대화 턴에 전달됩니다. 세션이 유휴 상태이면 응답은 다음 사용자 상호 작용까지 기다립니다. 예외: `asyncRewake` hook이 종료 코드 2로 종료되면 세션이 유휴 상태일 때도 Claude를 즉시 깨웁니다.4155* Hook 출력은 다음 대화 턴에 전달됩니다. 세션이 유휴 상태이면 응답은 다음 사용자 상호 작용까지 기다립니다. 예외: `asyncRewake` hook이 종료 코드 2로 종료되면 세션이 유휴 상태일 때도 Claude를 즉시 깨웁니다.

4147* 각 실행은 별도의 백그라운드 프로세스를 생성합니다.4156* 각 실행은 별도의 백그라운드 프로세스를 생성합니다.

4157* 비동기 `SessionStart` hook은 이벤트가 발생할 때마다 실행됩니다. `additionalContext` 및 `systemMessage` 텍스트가 Claude가 해당 hook에서 마지막으로 받은 내용과 일치하면 Claude Code는 hook의 출력을 건너뜁니다. 단, 그 이후 동기 `SessionStart` hook이 다른 텍스트를 추가한 경우는 예외입니다. 텍스트가 변경되면 Claude Code는 해당 텍스트를 전달하며, 압축 또는 `/clear` 이후 hook이 다음에 실행될 때도 다시 전달합니다. v2.1.295 이전에는 Claude Code가 재개할 때마다 동일한 텍스트를 대화에 다시 추가했습니다.

4148 4158 

4149## 보안 고려 사항4159## 보안 고려 사항

4150 4160 

hooks-guide.md +1 −1

Details

954* `PostToolUse` hooks는 도구가 이미 실행되었으므로 작업을 취소할 수 없습니다.954* `PostToolUse` hooks는 도구가 이미 실행되었으므로 작업을 취소할 수 없습니다.

955* [`PermissionRequest`](https://code.claude.com/docs/ko/hooks#permissionrequest) 훅은 Claude Code가 사용자에게 권한을 요청하려고 할 때, 또는 프롬프트를 표시할 수 없는 호출을 자동으로 거부하려고 할 때 발생합니다. `-p` 플래그를 사용하는 [비대화형 모드](https://code.claude.com/docs/ko/headless.md)에서도 [`dontAsk` 모드](https://code.claude.com/docs/ko/permission-modes#allow-only-pre-approved-tools-with-dontask-mode)가 아닌 경우 여전히 실행되며, 어떤 훅도 결정하지 않고 다른 어떤 것도 응답할 수 없는 호출은 거부됩니다.955* [`PermissionRequest`](https://code.claude.com/docs/ko/hooks#permissionrequest) 훅은 Claude Code가 사용자에게 권한을 요청하려고 할 때, 또는 프롬프트를 표시할 수 없는 호출을 자동으로 거부하려고 할 때 발생합니다. `-p` 플래그를 사용하는 [비대화형 모드](https://code.claude.com/docs/ko/headless.md)에서도 [`dontAsk` 모드](https://code.claude.com/docs/ko/permission-modes#allow-only-pre-approved-tools-with-dontask-mode)가 아닌 경우 여전히 실행되며, 어떤 훅도 결정하지 않고 다른 어떤 것도 응답할 수 없는 호출은 거부됩니다.

956* `Stop` hooks는 작업 완료 시에만이 아니라 Claude가 응답을 완료할 때마다 발생합니다. 사용자 중단 시에는 발생하지 않습니다. API 오류는 대신 [StopFailure](https://code.claude.com/docs/ko/hooks.md#stopfailure)를 발생시킵니다.956* `Stop` hooks는 작업 완료 시에만이 아니라 Claude가 응답을 완료할 때마다 발생합니다. 사용자 중단 시에는 발생하지 않습니다. API 오류는 대신 [StopFailure](https://code.claude.com/docs/ko/hooks.md#stopfailure)를 발생시킵니다.

957* 여러 `PreToolUse` hooks가 [`updatedInput`](https://code.claude.com/docs/ko/hooks#pretooluse)을 반환하여 도구의 인수를 다시 쓸 때 마지막으로 완료된 것이 우선합니다. Hooks는 병렬로 실행되므로 순서는 비결정적입니다. 동일한 도구의 입력을 수정하는 hook이 두 개 이상 있는 것을 피합니다.957* 여러 `PreToolUse` hooks가 [`updatedInput`](https://code.claude.com/docs/ko/hooks#pretooluse)을 반환하여 도구의 입력을 다시 쓸 때, Claude Code는 다시 쓴 내용을 병합하지 않으며 도구가 어떤 다시 쓴 입력으로 실행될지도 보장하지 않습니다. 동일한 도구의 입력을 다시 쓰는 hook이 두 개 이상 있는 것을 피합니다.

958 958 

959### Hooks 및 권한 모드959### Hooks 및 권한 모드

960 960 

Details

131 131 

132#### 컨텍스트가 채워질 때132#### 컨텍스트가 채워질 때

133 133 

134Claude Code는 한계에 접근할 때 컨텍스트를 자동으로 관리합니다. 먼저 이전 도구 출력을 지우고, 필요하면 대화를 요약합니다. 요청과 주요 코드 스니펫은 유지되지만 대화 초반의 자세한 지침이 손실될 수 있습니다. 대화 기록에 의존하기보다는 지속적인 규칙을 CLAUDE.md에 넣으세요.134Claude Code는 한계에 접근할 때 컨텍스트를 자동으로 관리합니다. 대화를 요약으로 압축합니다. 요약에는 요청과 주요 코드 스니펫이 유지되지만 대화 초반의 자세한 지침이 손실될 수 있습니다. 대화 기록에 의존하기보다는 지속적인 규칙을 CLAUDE.md에 넣으세요.

135 135 

136압축 중에 보존되는 것을 제어하려면 CLAUDE.md에 "Compact Instructions" 섹션을 추가하거나 `/compact`를 포커스와 함께 실행하세요 (예: `/compact focus on the API changes`).136압축 중에 보존되는 것을 제어하려면 CLAUDE.md에 "Compact Instructions" 섹션을 추가하거나 `/compact`를 포커스와 함께 실행하세요 (예: `/compact focus on the API changes`).

137 137 

Details

659 659 

660파일 목록을 스크롤하거나 비교 대상을 변경하는 키를 다시 바인딩하려면 [Diff 패널 작업](https://code.claude.com/docs/ko/keybindings.md#diff-panel-actions)을 참조하세요.660파일 목록을 스크롤하거나 비교 대상을 변경하는 키를 다시 바인딩하려면 [Diff 패널 작업](https://code.claude.com/docs/ko/keybindings.md#diff-panel-actions)을 참조하세요.

661 661 

662완료되지 않은 병합, 리베이스, 체리픽 또는 되돌리기 작업 중에는 패널이 git에서 마지막으로 읽은 변경 사항을 계속 표시하므로, 해당 작업으로 들어오는 변경 사항으로 채워지지 않습니다. 작업이 끝난 후 첫 번째 새로 고침 시점, 예를 들어 Claude가 다음에 파일을 편집할 때 패널이 업데이트됩니다.

663 

662### Diff 대화 상자664### Diff 대화 상자

663 665 

664diff 대화 상자는 프롬프트 위에 테두리가 있는 블록으로 열리며, 변경된 파일을 추가 및 제거된 줄 수와 함께 나열합니다. 파일을 `HEAD`와 비교하거나, 이 저장소에 대해 마지막으로 [diff 패널에서 선택한](#diff-panel) 대상과 비교합니다.666diff 대화 상자는 프롬프트 위에 테두리가 있는 블록으로 열리며, 변경된 파일을 추가 및 제거된 줄 수와 함께 나열합니다. 파일을 `HEAD`와 비교하거나, 이 저장소에 대해 마지막으로 [diff 패널에서 선택한](#diff-panel) 대상과 비교합니다.

keybindings.md +4 −4

Details

678 678 

679## Vim 모드 상호 작용679## Vim 모드 상호 작용

680 680 

681vim 모드가 `/config` → 편집기 모드를 통해 활성화되면 키바인딩과 vim 모드는 독립적으로 작동합니다:681`/config`의 편집기 모드 설정으로 vim 모드를 활성화하면 키보드 단축키와 vim 모드는 독립적으로 작동합니다:

682 682 

683* **Vim 모드**는 텍스트 입력 수준에서 입력을 처리합니다(커서 이동, 모드, 동작).683* **Vim 모드**는 텍스트 입력 수준에서 입력을 처리합니다: 커서 이동, 모드, 모션

684* **키바인딩**은 구성 요소 수준에서 작업을 처리합니다(작업 전환, 제출 등).684* **키보드 단축키**는 할 일 전환이나 메시지 제출과 같은 작업을 구성 요소 수준에서 처리합니다.

685* vim 모드의 Escape 키는 INSERT를 NORMAL 모드로 전환합니다. `chat:cancel`을 트리거하지 않습니다.685* vim 모드에서 Escape 키는 INSERT 모드를 NORMAL 모드로 전환하며, `chat:cancel`을 트리거하지 않습니다

686* 대부분의 Ctrl+key 단축키는 vim 모드를 통과하여 키바인딩 시스템으로 이동합니다.686* 대부분의 Ctrl+key 단축키는 vim 모드를 통과하여 키바인딩 시스템으로 이동합니다.

687* Vim 키는 키바인딩 파일을 통해 다시 매핑할 수 없습니다. `jj`를 Escape로 매핑하는 것과 같은 두 키 INSERT 모드 시퀀스를 매핑하려면 [`vimInsertModeRemaps`](https://code.claude.com/docs/ko/interactive-mode#remap-insert-mode-key-sequences) 설정을 사용합니다.687* Vim 키는 키바인딩 파일을 통해 다시 매핑할 수 없습니다. `jj`를 Escape로 매핑하는 것과 같은 두 키 INSERT 모드 시퀀스를 매핑하려면 [`vimInsertModeRemaps`](https://code.claude.com/docs/ko/interactive-mode#remap-insert-mode-key-sequences) 설정을 사용합니다.

688* vim NORMAL 모드에서 `?`는 도움말 메뉴를 표시합니다(vim 동작).688* vim NORMAL 모드에서 `?`는 도움말 메뉴를 표시합니다(vim 동작).

Details

306 306 

307## 디렉터리별 스킬 추가307## 디렉터리별 스킬 추가

308 308 

309모든 하위 디렉터리는 자체 스택으로 범위가 지정된 [스킬](https://code.claude.com/docs/ko/skills.md)을 정의할 수 있습니다. 스킬은 Claude가 관련이 있다고 판단할 때 필요에 따라 로드되므로, API 전용 도구가 프런트엔드 작업 중에 컨텍스트를 소비하지 않습니다.309모든 하위 디렉터리는 자체 스택으로 범위가 지정된 [스킬](https://code.claude.com/docs/ko/skills.md)을 정의할 수 있습니다. 스킬은 Claude가 관련이 있다고 판단할 때 필요에 따라 로드됩니다.

310 310 

311스킬은 해당 디렉터리 내부의 `.claude/skills/` 아래에 위치합니다. 해당 영역의 코드와 함께 커밋하면 저장소를 클론하는 모든 사람이 스킬을 사용할 수 있습니다. 모노레포에서는 패키지마다 하나의 스킬 세트를 둘 수 있습니다. 대규모 단일 트리 코드베이스에서는 `src/db/.claude/skills/`와 같이 서브시스템마다 하나의 세트를 둡니다.311스킬은 해당 디렉터리 내부의 `.claude/skills/` 아래에 위치합니다. 해당 영역의 코드와 함께 커밋하면 저장소를 클론하는 모든 사람이 스킬을 사용할 수 있습니다. 모노레포에서는 패키지마다 하나의 스킬 세트를 둘 수 있습니다. 대규모 단일 트리 코드베이스에서는 `src/db/.claude/skills/`와 같이 서브시스템마다 하나의 세트를 둡니다.

312 312 


347- Mock external services in `src/__tests__/mocks/`347- Mock external services in `src/__tests__/mocks/`

348```348```

349 349 

350다른 하위 디렉터리도 같은 방식으로 다른 스킬을 보유합니다. `packages/web/.claude/skills/component-patterns/`는 테스트 대신 프런트엔드의 컴포넌트 규칙을 설명합니다. Claude가 `packages/api/`의 파일에서 작업할 때는 api-testing 스킬을 로드합니다. `packages/web/`에서 작업할 때는 대신 component-patterns를 로드합니다. 어느 디렉터리의 스킬도 다른 디렉터리의 작업 중에는 로드되지 않습니다.350다른 하위 디렉터리도 같은 방식으로 다른 스킬을 보유합니다. `packages/web/.claude/skills/component-patterns/`는 테스트 대신 프런트엔드의 컴포넌트 규칙을 설명합니다. Claude가 `packages/api/`의 파일에서 작업할 때는 api-testing 스킬을 로드합니다. `packages/web/`에서 작업할 때는 component-patterns를 로드합니다.

351 351 

352배치 위치 대신 파일 패턴으로 스킬의 범위를 지정할 수도 있습니다. [`paths` frontmatter 필드](https://code.claude.com/docs/ko/skills#frontmatter-reference)는 glob 패턴을 받으며, Claude는 일치하는 파일로 작업할 때만 스킬을 자동으로 로드합니다. 저장소 루트의 `.claude/skills/`에 있지만 특정 파일에만 적용되는 스킬에 이 방법을 사용합니다. 예를 들어 `**/migrations/**`로 범위가 지정된 데이터베이스 마이그레이션 스킬이 있습니다.352배치 위치 대신 파일 패턴으로 스킬의 범위를 지정할 수도 있습니다. [`paths` frontmatter 필드](https://code.claude.com/docs/ko/skills#frontmatter-reference)는 glob 패턴을 받으며, Claude는 일치하는 파일로 작업할 때만 스킬을 자동으로 로드합니다. 저장소 루트의 `.claude/skills/`에 있지만 특정 파일에만 적용되는 스킬에 이 방법을 사용합니다. 예를 들어 `**/migrations/**`로 범위가 지정된 데이터베이스 마이그레이션 스킬이 있습니다.

353 353 

Details

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

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

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

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

524| 조직에서 빠른 모드를 활성화했는데도 `ANTHROPIC_AUTH_TOKEN`으로 인증한 세션에서 `/fast`가 `Fast mode has been disabled by your organization`를 보고함 | 가용성 확인에는 claude.ai 로그인 또는 API 키가 필요합니다. bearer 토큰만 있으면 Claude Code는 확인을 보내지 않고 빠른 모드를 비활성화된 것으로 간주합니다 | `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`을 설정합니다. [프록시 및 LLM 게이트웨이 뒤에서 빠른 모드 사용](https://code.claude.com/docs/ko/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)을 참조하세요 |524| 조직에서 빠른 모드를 활성화했는데도 `ANTHROPIC_AUTH_TOKEN`으로 인증한 세션에서 `/fast`가 `Fast mode has been disabled by your organization`를 보고함 | 가용성 확인에는 claude.ai 로그인 또는 API 키가 필요합니다. bearer 토큰만 있으면 Claude Code는 확인을 보내지 않고 빠른 모드를 비활성화된 것으로 간주합니다 | `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`을 설정합니다. [프록시 및 LLM 게이트웨이 뒤에서 빠른 모드 사용](https://code.claude.com/docs/ko/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways)을 참조하세요 |

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

526| `ANTHROPIC_API_KEY`가 설정되어 있지만 확인 요청 없이 무시됨 | 대화형 세션에서는 키에 대한 일회성 승인이 필요하며, 이전에 거부한 키는 다시 묻지 않고 무시됩니다 | `/config`에서 `Use custom API key` 옵션으로 활성화합니다 |526| `ANTHROPIC_API_KEY`가 설정되어 있지만 확인 요청 없이 무시됨 | 대화형 세션에서는 키에 대한 일회성 승인이 필요하며, 이전에 거부한 키는 다시 묻지 않고 무시됩니다 | `/config`에서 `Use custom API key` 옵션으로 활성화합니다 |

Details

148| :- | :- |148| :- | :- |

149| `x-claude-code-request-class` | 이 요청의 종류: 주 대화의 턴에 대해 `main`, [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md)의 턴에 대해 `subagent`, 워크플로우 내에서 실행되는 에이전트에 대해 `workflow`, 대화를 압축하는 요약 요청에 대해 `compaction`, 세션 제목, 분류기 및 요약과 같은 측면 요청에 대해 `auxiliary`. 모든 요청에서 전송됨 |149| `x-claude-code-request-class` | 이 요청의 종류: 주 대화의 턴에 대해 `main`, [서브에이전트](https://code.claude.com/docs/ko/sub-agents.md)의 턴에 대해 `subagent`, 워크플로우 내에서 실행되는 에이전트에 대해 `workflow`, 대화를 압축하는 요약 요청에 대해 `compaction`, 세션 제목, 분류기 및 요약과 같은 측면 요청에 대해 `auxiliary`. 모든 요청에서 전송됨 |

150| `x-claude-code-agent-type` | 요청을 발급한 서브에이전트의 종류: `Explore`, `Plan` 또는 `general-purpose`와 같은 기본 제공 에이전트 타입 이름, 사용자 정의 에이전트에 대해 `custom`, [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md) 멤버가 리드의 프로세스에서 실행 중일 때 `teammate`, 또는 [포크](https://code.claude.com/docs/ko/sub-agents.md#fork-the-current-conversation)에 대해 `fork`. 서브에이전트 자신의 턴에만 존재합니다. 서브에이전트의 압축 또는 측면 요청은 에이전트 ID를 유지하지만 타입을 전달하지 않습니다. 사용자가 선택한 에이전트 이름은 절대 전송되지 않습니다. |150| `x-claude-code-agent-type` | 요청을 발급한 서브에이전트의 종류: `Explore`, `Plan` 또는 `general-purpose`와 같은 기본 제공 에이전트 타입 이름, 사용자 정의 에이전트에 대해 `custom`, [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md) 멤버가 리드의 프로세스에서 실행 중일 때 `teammate`, 또는 [포크](https://code.claude.com/docs/ko/sub-agents.md#fork-the-current-conversation)에 대해 `fork`. 서브에이전트 자신의 턴에만 존재합니다. 서브에이전트의 압축 또는 측면 요청은 에이전트 ID를 유지하지만 타입을 전달하지 않습니다. 사용자가 선택한 에이전트 이름은 절대 전송되지 않습니다. |

151| `x-claude-code-compaction` | [압축](https://code.claude.com/docs/ko/prompt-caching.md#compacting-the-conversation) 중에 대화를 요약하는 요청에 존재합니다. 값은 트리거된 것을 나타냅니다: 컨텍스트 윈도우가 용량에 접근할 때 `auto`, `/compact`에 대해 `manual`, API가 요청을 너무 길다고 거부했을 때 `reactive`. [유휴 압축](https://code.claude.com/docs/ko/settings-reference.md#idlecompaction)의 경우에도 값은 `auto`입니다. 다른 모든 요청에서는 없습니다. |151| `x-claude-code-compaction` | [압축](https://code.claude.com/docs/ko/prompt-caching.md#compacting-the-conversation) 중에 대화를 요약하는 요청에 존재합니다. 값은 트리거된 것을 나타냅니다: 컨텍스트 윈도우가 용량에 접근할 때 `auto`, `/compact`에 대해 `manual`, API가 요청을 너무 길다고 거부했을 때 `reactive`. 대화형 터미널 세션의 [유휴 압축](https://code.claude.com/docs/ko/settings-reference.md#idlecompaction)의 경우에도 값은 `auto`입니다. 압축 전에 백그라운드에서 요약을 작성하는 요청을 포함하여 다른 모든 요청에서는 없습니다. |

152| `x-claude-code-context-compacted` | 압축 후 첫 번째 주 대화 요청에 한 번 존재하며, `x-claude-code-compaction`과 동일한 값을 가집니다. 이 요청 전의 대화 접두사는 더 이상 사용되지 않으므로, 이를 기반으로 키가 지정된 캐시를 삭제할 수 있습니다. |152| `x-claude-code-context-compacted` | 압축 후 첫 번째 주 대화 요청에 한 번 존재하며, `x-claude-code-compaction`과 동일한 값을 가집니다. 이 요청 전의 대화 접두사는 더 이상 사용되지 않으므로, 이를 기반으로 키가 지정된 캐시를 삭제할 수 있습니다. |

153| `x-claude-code-prev-tool-durations` | 이 요청이 전달하는 결과의 도구 호출의 측정된 실행 시간. `<name>=<ms>;<name>=<ms>` 형식입니다. 예를 들어 `Bash=742;Read=9`. 도구 호출 배치 후 동일한 대화의 다음 요청에서 전송됩니다. 주 세션 또는 서브에이전트에서 전송됩니다. |153| `x-claude-code-prev-tool-durations` | 이 요청이 전달하는 결과의 도구 호출의 측정된 실행 시간. `<name>=<ms>;<name>=<ms>` 형식입니다. 예를 들어 `Bash=742;Read=9`. 도구 호출 배치 후 동일한 대화의 다음 요청에서 전송됩니다. 주 세션 또는 서브에이전트에서 전송됩니다. |

154| `x-claude-code-prompt-id` | 요청이 제공하는 사용자 프롬프트를 식별하는 무작위 UUID입니다. 하나의 프롬프트를 제공하는 요청은 값을 공유하며, 프롬프트가 시작한 서브에이전트의 턴을 포함합니다. 프롬프트에 속하지 않은 요청은 이를 생략합니다. 이를 사용하여 세션의 요청을 프롬프트별로 그룹화합니다. Claude Code v2.1.283 이상이 필요합니다. |154| `x-claude-code-prompt-id` | 요청이 제공하는 사용자 프롬프트를 식별하는 무작위 UUID입니다. 하나의 프롬프트를 제공하는 요청은 값을 공유하며, 프롬프트가 시작한 서브에이전트의 턴을 포함합니다. 프롬프트에 속하지 않은 요청은 이를 생략합니다. 이를 사용하여 세션의 요청을 프롬프트별로 그룹화합니다. Claude Code v2.1.283 이상이 필요합니다. |


238* 업스트림이 대화 중간 시스템 메시지의 `cache_control` 마커만 거부하면, Claude Code는 시스템 메시지를 유지하고 마커를 옮겨 한 번 재시도합니다. 해당 재시도와 Claude Code가 종료될 때까지의 이후 요청에서 마커는 `messages`에서 시스템 메시지가 아닌 마지막 항목에 붙습니다.238* 업스트림이 대화 중간 시스템 메시지의 `cache_control` 마커만 거부하면, Claude Code는 시스템 메시지를 유지하고 마커를 옮겨 한 번 재시도합니다. 해당 재시도와 Claude Code가 종료될 때까지의 이후 요청에서 마커는 `messages`에서 시스템 메시지가 아닌 마지막 항목에 붙습니다.

239* 업스트림이 [사고 서명](https://platform.claude.com/docs/en/build-with-claude/extended-thinking)을 거부할 때, 블록이 `bound to a different conversation`이라는 `400`을 포함하여, Claude Code는 요청에서 이전 사고 블록을 제거하고, 재시도하며, 이후의 모든 요청에서 이들을 제외합니다. 새로운 응답은 여전히 사고를 포함합니다.239* 업스트림이 [사고 서명](https://platform.claude.com/docs/en/build-with-claude/extended-thinking)을 거부할 때, 블록이 `bound to a different conversation`이라는 `400`을 포함하여, Claude Code는 요청에서 이전 사고 블록을 제거하고, 재시도하며, 이후의 모든 요청에서 이들을 제외합니다. 새로운 응답은 여전히 사고를 포함합니다.

240* 게이트웨이 또는 그 업스트림이 `tools`의 [어드바이저 도구](https://code.claude.com/docs/ko/advisor.md) 항목을 인식되지 않는 도구 유형으로 거부할 때, Claude Code는 해당 항목과 그 `anthropic-beta` 값 없이 요청을 한 번 재시도합니다. 이후 해당 기본 URL에 대한 요청은 Claude Code가 종료될 때까지 어드바이저를 제외하고, `/advisor`는 그 시간 동안 개발자에게 사용 불가능합니다. Claude Code는 `Input tag` 뒤에 도구 유형의 이름을 지정하는 `400` 또는 `422` 응답으로 이 거부를 인식합니다. 예를 들어 `Input tag 'advisor_20260301'`입니다. v2.1.280 이전에는 Claude Code가 이 거부를 재시도하지 않았습니다.240* 게이트웨이 또는 그 업스트림이 `tools`의 [어드바이저 도구](https://code.claude.com/docs/ko/advisor.md) 항목을 인식되지 않는 도구 유형으로 거부할 때, Claude Code는 해당 항목과 그 `anthropic-beta` 값 없이 요청을 한 번 재시도합니다. 이후 해당 기본 URL에 대한 요청은 Claude Code가 종료될 때까지 어드바이저를 제외하고, `/advisor`는 그 시간 동안 개발자에게 사용 불가능합니다. Claude Code는 `Input tag` 뒤에 도구 유형의 이름을 지정하는 `400` 또는 `422` 응답으로 이 거부를 인식합니다. 예를 들어 `Input tag 'advisor_20260301'`입니다. v2.1.280 이전에는 Claude Code가 이 거부를 재시도하지 않았습니다.

241* 업스트림이 `output_config.effort`를 거부할 때, Claude Code는 노력 없이 요청을 재시도하고 Claude Code가 종료될 때까지 해당 모델에 대한 이후 요청에서 이를 제외합니다. Claude Code는 메시지가 `Extra inputs are not permitted`와 함께 `output_config.effort`의 이름을 지정하거나, 모델이 노력 매개변수를 지원하지 않는다고 명시하는 `400`으로 이 거부를 인식합니다.241* 업스트림이 `output_config.effort` 또는 그 `anthropic-beta` 값을 거부하면, Claude Code는 재시도하고 Claude Code가 종료될 때까지 해당 모델에 대한 요청에 둘 다 추가하지 않습니다. 게이트웨이가 업스트림의 `400`을 수정하지 않고 전달하고 메시지가 다음 조건에 해당하면 게이트웨이를 변경할 필요가 없습니다:

242 * `Extra inputs are not permitted`와 함께 `output_config.effort`의 이름을 지정합니다.

243 * 모델이 노력 매개변수를 지원하지 않는다고 명시합니다.

244 * `Unexpected value(s)`로 시작하고 `anthropic-beta` 헤더에 대해 `effort-2025-11-24`를 나열합니다. v2.1.310 이상이 필요합니다. [`ANTHROPIC_BETAS`](https://code.claude.com/docs/ko/env-vars)에 이 값이 나열된 개발자는 계속 이 값을 전송하여 `400`을 받게 되므로, 해당 항목을 제거하도록 합니다.

242* 업스트림이 `context_management` 필드 또는 그 `anthropic-beta` 값을 거부하면, 게이트웨이는 이들이 제외된 요청을 한 번 더 받습니다. 이후 요청에서 게이트웨이가 이들을 다시 받고 업스트림이 다시 거부하면, 같은 재시도가 이어집니다. Claude Code는 메시지로 이 거부를 인식합니다. 예를 들어 `context_management: Extra inputs are not permitted`를 포함하는 메시지입니다. v2.1.304 이전에는 Claude Code가 이 거부를 재시도하지 않았습니다.245* 업스트림이 `context_management` 필드 또는 그 `anthropic-beta` 값을 거부하면, 게이트웨이는 이들이 제외된 요청을 한 번 더 받습니다. 이후 요청에서 게이트웨이가 이들을 다시 받고 업스트림이 다시 거부하면, 같은 재시도가 이어집니다. Claude Code는 메시지로 이 거부를 인식합니다. 예를 들어 `context_management: Extra inputs are not permitted`를 포함하는 메시지입니다. v2.1.304 이전에는 Claude Code가 이 거부를 재시도하지 않았습니다.

243* 업스트림이 `strict`와 같이 `defer_loading` 이외의 베타 도구 필드를 거부하면, `400`이 개발자에게 도달합니다. 그 전에 게이트웨이는 [도구 검색 필드 없이](#retry-without-tool-search) 요청을 다시 받을 수 있습니다. 이러한 필드의 전송을 중지하려면 개발자가 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](#disable-pre-release-capabilities)을 설정하도록 합니다.246* 업스트림이 `strict`와 같이 `defer_loading` 이외의 베타 도구 필드를 거부하면, `400`이 개발자에게 도달합니다. 그 전에 게이트웨이는 [도구 검색 필드 없이](#retry-without-tool-search) 요청을 다시 받을 수 있습니다. 이러한 필드의 전송을 중지하려면 개발자가 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](#disable-pre-release-capabilities)을 설정하도록 합니다.

244 247 

monitoring-usage.md +182 −182

Details

97 97 

98## 구성 세부 정보98## 구성 세부 정보

99 99 

100### 일반적인 구성 변수100### 공통 구성 변수

101 101 

102이러한 변수는 모든 배포에 대한 내보내기, 엔드포인트 및 내보내기 동작을 구성합니다.102이 변수들은 모든 배포에 대해 익스포터, 엔드포인트 및 내보내기 동작을 구성합니다.

103 103 

104`OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`와 같은 신호별 엔드포인트 또는 프로토콜 변수를 설정하면 Claude Code는 해당 신호에 대해 일반 변수 대신 이를 사용합니다. `OTEL_EXPORTER_OTLP_METRICS_HEADERS`와 같은 신호별 헤더 변수를 설정하면 Claude Code는 해당 신호에 대해 일반 `OTEL_EXPORTER_OTLP_HEADERS`와 병합합니다.104`OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`와 같은 신호별 엔드포인트 또는 프로토콜 변수를 설정하면 Claude Code는 해당 신호에 대해 일반 변수 대신 이를 사용합니다. `OTEL_EXPORTER_OTLP_METRICS_HEADERS`와 같은 신호별 헤더 변수를 설정하면 Claude Code는 해당 신호에 대해 이를 일반 `OTEL_EXPORTER_OTLP_HEADERS`와 병합합니다.

105 105 

106관리되는 설정이 있는 머신에서는 [관리되는 설정이 OTLP 대상을 잠그는 방법](#how-managed-settings-lock-the-otlp-destination)을 참조하여 Claude Code가 제거하는 항목을 확인하세요.106관리형 설정이 있는 머신에서 Claude Code가 제거하는 항목은 [관리형 설정이 OTLP 대상을 잠그는 방식](#how-managed-settings-lock-the-otlp-destination)을 참조하세요.

107 107 

108| 환경 변수 | 설명 | 예제 값 |108| 환경 변수 | 설명 | 예시 값 |

109| - | - | - |109| - | - | - |

110| `CLAUDE_CODE_ENABLE_TELEMETRY` | 원격 분석 수집 활성화(필수) | `1` |110| `CLAUDE_CODE_ENABLE_TELEMETRY` | 텔레메트리 수집을 활성화합니다(필수) | `1` |

111| `OTEL_METRICS_EXPORTER` | 메트릭 내보내기 유형, 쉼표로 구분. 비활성화하려면 `none` 사용 | `console`, `otlp`, `prometheus`, `none` |111| `OTEL_METRICS_EXPORTER` | 메트릭 익스포터 유형(쉼표로 구분). 비활성화하려면 `none` 사용 | `console`, `otlp`, `prometheus`, `none` |

112| `OTEL_LOGS_EXPORTER` | 로그/이벤트 내보내기 유형, 쉼표로 구분. 비활성화하려면 `none` 사용 | `console`, `otlp`, `none` |112| `OTEL_LOGS_EXPORTER` | 로그/이벤트 익스포터 유형(쉼표로 구분). 비활성화하려면 `none` 사용 | `console`, `otlp`, `none` |

113| `OTEL_EXPORTER_OTLP_PROTOCOL` | OTLP 내보내기용 프로토콜, 모든 신호에 적용. Claude Code에는 기본 프로토콜이 없으므로 활성화하는 각 `otlp` 내보내기에 대해 이 또는 신호별 프로토콜 변수를 설정하세요 | `grpc`, `http/json`, `http/protobuf` |113| `OTEL_EXPORTER_OTLP_PROTOCOL` | OTLP 익스포터용 프로토콜로, 모든 신호에 적용됩니다. Claude Code에는 기본 프로토콜이 없으므로 활성화하는 각 `otlp` 익스포터에 대해 이 변수 또는 신호별 프로토콜 변수를 설정해야 합니다 | `grpc`, `http/json`, `http/protobuf` |

114| `OTEL_EXPORTER_OTLP_ENDPOINT` | 모든 신호에 대한 OTLP 수집기 엔드포인트 | `http://localhost:4317` |114| `OTEL_EXPORTER_OTLP_ENDPOINT` | 모든 신호에 대한 OTLP 수집기 엔드포인트 | `http://localhost:4317` |

115| `OTEL_EXPORTER_OTLP_METRICS_PROTOCOL` | 메트릭용 프로토콜, 일반 설정 재정의 | `grpc`, `http/json`, `http/protobuf` |115| `OTEL_EXPORTER_OTLP_METRICS_PROTOCOL` | 메트릭용 프로토콜로, 일반 설정을 재정의합니다 | `grpc`, `http/json`, `http/protobuf` |

116| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | OTLP 메트릭 엔드포인트, 일반 설정 재정의 | `http://localhost:4318/v1/metrics` |116| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | OTLP 메트릭 엔드포인트로, 일반 설정을 재정의합니다 | `http://localhost:4318/v1/metrics` |

117| `OTEL_EXPORTER_OTLP_LOGS_PROTOCOL` | 로그용 프로토콜, 일반 설정 재정의 | `grpc`, `http/json`, `http/protobuf` |117| `OTEL_EXPORTER_OTLP_LOGS_PROTOCOL` | 로그용 프로토콜로, 일반 설정을 재정의합니다 | `grpc`, `http/json`, `http/protobuf` |

118| `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` | OTLP 로그 엔드포인트, 일반 설정 재정의 | `http://localhost:4318/v1/logs` |118| `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` | OTLP 로그 엔드포인트로, 일반 설정을 재정의합니다 | `http://localhost:4318/v1/logs` |

119| `OTEL_EXPORTER_OTLP_HEADERS` | OTLP용 인증 헤더 | `Authorization=Bearer token` |119| `OTEL_EXPORTER_OTLP_HEADERS` | OTLP용 인증 헤더 | `Authorization=Bearer token` |

120| `OTEL_EXPORTER_OTLP_METRICS_HEADERS` | 메트릭용 인증 헤더, 일반 헤더와 병합 | `Authorization=Bearer token` |120| `OTEL_EXPORTER_OTLP_METRICS_HEADERS` | 메트릭용 인증 헤더로, 일반 헤더와 병합됩니다 | `Authorization=Bearer token` |

121| `OTEL_EXPORTER_OTLP_LOGS_HEADERS` | 로그용 인증 헤더, 일반 헤더와 병합 | `Authorization=Bearer token` |121| `OTEL_EXPORTER_OTLP_LOGS_HEADERS` | 로그용 인증 헤더로, 일반 헤더와 병합됩니다 | `Authorization=Bearer token` |

122| `OTEL_METRIC_EXPORT_INTERVAL` | 내보내기 간격(밀리초)(기본값: 60000) | `5000`, `60000` |122| `OTEL_METRIC_EXPORT_INTERVAL` | 밀리초 단위의 내보내기 간격(기본값: 60000) | `5000`, `60000` |

123| `OTEL_LOGS_EXPORT_INTERVAL` | 로그 내보내기 간격(밀리초)(기본값: 5000) | `1000`, `10000` |123| `OTEL_LOGS_EXPORT_INTERVAL` | 밀리초 단위의 로그 내보내기 간격(기본값: 5000) | `1000`, `10000` |

124| `OTEL_LOG_USER_PROMPTS` | 사용자 프롬프트 콘텐츠 로깅 활성화(기본값: 비활성화) | `1`로 활성화 |124| `OTEL_LOG_USER_PROMPTS` | 사용자 프롬프트 내용의 로깅을 활성화합니다(기본값: 비활성화) | 활성화하려면 `1` |

125| `OTEL_LOG_ASSISTANT_RESPONSES` | `assistant_response` 이벤트에서 어시스턴트 응답 텍스트 로깅 활성화(기본값: 비활성화). 설정하지 않으면 `OTEL_LOG_USER_PROMPTS`의 값으로 폴백합니다 | `1`로 활성화, `0`으로 편집됨 유지 |125| `OTEL_LOG_ASSISTANT_RESPONSES` | `assistant_response` 이벤트에서 어시스턴트 응답 텍스트의 로깅을 활성화합니다(기본값: 비활성화). 설정하지 않으면 `OTEL_LOG_USER_PROMPTS`의 값을 따릅니다 | 활성화하려면 `1`, 마스킹 상태를 유지하려면 `0` |

126| `OTEL_LOG_TOOL_DETAILS` | 도구 이벤트 및 추적 범위 속성에서 도구 매개변수 및 입력 인수 로깅 활성화: Bash 명령, MCP 서버 및 도구 이름, 스킬 이름, 사용자 작성 워크플로우 이름 및 도구 입력. 또한 `user_prompt` 이벤트에서 사용자 정의, 플러그인 및 MCP 명령 이름을 활성화하고, [비용 및 토큰 카운터](#cost-counter)에서 실제 에이전트, 스킬, 플러그인 및 MCP 서버 및 도구 이름을 활성화합니다(기본값: 비활성화). Claude Desktop의 기본 제공 서버의 경우, Claude Desktop이 소유한 세션에서 플래그가 꺼져 있어도 `mcp_server_name`/`mcp_tool_name`이 `tool_decision`/`tool_result`에서 내보내집니다. 예외는 Claude Code v2.1.214 이상 필요 | `1`로 활성화 |126| `OTEL_LOG_TOOL_DETAILS` | 도구 이벤트 및 트레이스 스팬 속성에서 도구 매개변수와 입력 인수의 로깅을 활성화합니다: Bash 명령, MCP 서버 및 도구 이름, 스킬 이름, 사용자가 작성한 워크플로 이름, 도구 입력. 또한 `user_prompt` 이벤트의 사용자 지정, 플러그인 및 MCP 명령 이름과 [비용 및 토큰 카운터](#cost-counter)의 실제 에이전트, 스킬, 플러그인, MCP 서버 및 도구 이름을 활성화합니다(기본값: 비활성화). Claude Desktop의 내장 서버의 경우, Claude Desktop이 소유한 세션에서는 플래그가 꺼져 있어도 `tool_decision`/`tool_result`에서 `mcp_server_name`/`mcp_tool_name`이 출력됩니다. 이 예외는 Claude Code v2.1.214 이상이 필요합니다 | 활성화하려면 `1` |

127| `OTEL_LOG_TOOL_CONTENT` | [`tool.output` 범위 이벤트](#tool-output-span-event)에서 도구 콘텐츠 로깅 활성화(기본값: 비활성화). 범위 속성은 [자체 게이트](#new-context-gates) 아래에서 도구 콘텐츠를 전달합니다. [추적](#traces-beta) 필요. 콘텐츠는 콘텐츠 제한(기본값 60KB)에서 잘립니다 | `1`로 활성화 |127| `OTEL_LOG_TOOL_CONTENT` | [`tool.output` 스팬 이벤트](#tool-output-span-event)에서 도구 콘텐츠의 로깅을 활성화합니다(기본값: 비활성화). 스팬 속성은 [자체 게이트](#new-context-gates)에 따라 도구 콘텐츠를 포함합니다. [트레이싱](#traces-beta)이 필요합니다. 콘텐츠는 콘텐츠 한도(기본값 60 KB)에서 잘립니다 | 활성화하려면 `1` |

128| `OTEL_LOG_MANAGED_SETTINGS` | 편집된 관리 설정 및 편집 전 설정의 SHA-256 다이제스트를 [관리 설정 해결됨](#managed-settings-resolved-event) 이벤트에 추가합니다(기본값: 비활성화). 프로젝트 또는 로컬 설정의 값은 이를 켜지 않습니다. Claude Code v2.1.274 이상 필요 | `1`로 활성화 |128| `OTEL_LOG_MANAGED_SETTINGS` | 마스킹된 관리형 설정과 마스킹 전 설정의 SHA-256 다이제스트를 [관리형 설정 확인](#managed-settings-resolved-event) 이벤트에 추가합니다(기본값: 비활성화). 프로젝트 또는 로컬 설정의 값으로는 켜지지 않습니다. Claude Code v2.1.274 이상이 필요합니다 | 활성화하려면 `1` |

129| `OTEL_LOG_RAW_API_BODIES` | 전체 Anthropic Messages API 요청 및 응답 JSON을 `api_request_body` / `api_response_body` 로그 이벤트로 내보냅니다(기본값: 비활성화). 본문에는 전체 대화 기록이 포함됩니다. 이를 활성화하면 `OTEL_LOG_USER_PROMPTS`, `OTEL_LOG_TOOL_DETAILS` 및 `OTEL_LOG_TOOL_CONTENT`가 드러낼 모든 것에 동의하는 것을 의미합니다 | 콘텐츠 제한(기본값 60KB)에서 잘린 인라인 본문의 경우 `1`, 또는 이벤트의 `body_ref` 포인터가 있는 디스크의 잘리지 않은 본문의 경우 `file:<dir>` |129| `OTEL_LOG_RAW_API_BODIES` | 전체 Anthropic Messages API 요청 및 응답 JSON을 `api_request_body` / `api_response_body` 로그 이벤트로 출력합니다(기본값: 비활성화). 본문에는 전체 대화 기록이 포함됩니다. 이를 활성화하면 `OTEL_LOG_USER_PROMPTS`, `OTEL_LOG_TOOL_DETAILS`, `OTEL_LOG_TOOL_CONTENT`가 노출하는 모든 내용에 동의하는 것으로 간주됩니다 | 콘텐츠 한도(기본값 60 KB)에서 잘린 인라인 본문의 경우 `1`, 이벤트에 `body_ref` 포인터가 포함된 디스크상의 잘리지 않은 본문의 경우 `file:<dir>` |

130| `CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH` | 콘텐츠 제한: 모델 응답, 도구 콘텐츠, 시스템 프롬프트 및 원본 API 본문과 같은 콘텐츠 포함 속성의 최대 길이(잘림 마커 포함, UTF-16 코드 단위)(기본값: 61440, 즉 60KB). 기본값은 속성 값을 64KB로 제한하는 백엔드용으로 크기가 조정됩니다. 백엔드가 더 큰 값을 허용하는 경우에만 높이거나, 텔레메트리 볼륨을 줄이려면 낮추세요. OpenTelemetry SDK 속성 제한인 `OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT` 또는 해당 logrecord 및 범위 변형이 더 낮게 설정된 경우, Claude Code는 `[TRUNCATED ...]` 마커가 SDK 제한 내에 유지되도록 더 작은 값에서 잘립니다 | `262144` |130| `CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH` | 콘텐츠 한도: 모델 응답, 도구 콘텐츠, 시스템 프롬프트, 원시 API 본문 등 콘텐츠를 포함하는 속성의 최대 길이로, 잘림 표시를 포함하며 UTF-16 코드 단위로 측정됩니다(기본값: 61440, 즉 60 KB). 기본값은 속성 값을 64 KB로 제한하는 백엔드에 맞춰져 있습니다. 백엔드가 더 큰 값을 허용하는 경우에만 늘리고, 텔레메트리 양을 줄이려면 낮추세요. OpenTelemetry SDK 속성 한도인 `OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT` 또는 그 logrecord 및 span 변형 중 하나가 더 낮게 설정되어 있으면, Claude Code는 `[TRUNCATED ...]` 표시가 SDK 한도 내에 머물도록 그 더 작은 값에서 자릅니다 | `262144` |

131| `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` | 메트릭 시간성 선호도(기본값: `delta`). 백엔드가 누적 시간성을 예상하는 경우 `cumulative`로 설정 | `delta`, `cumulative` |131| `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` | 메트릭 시간성(temporality) 기본 설정(기본값: `delta`). 백엔드가 누적 시간성을 기대하는 경우 `cumulative`로 설정하세요 | `delta`, `cumulative` |

132| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | 동적 헤더 새로 고침 간격(기본값: 1740000ms / 29분) | `900000` |132| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | 동적 헤더 새로 고침 간격(기본값: 1740000ms / 29분) | `900000` |

133 133 

134`http/protobuf` 및 `http/json` 프로토콜의 경우, Claude Code는 각 내보내기 요청을 `Content-Length` 헤더와 함께 보냅니다.134`http/protobuf` 및 `http/json` 프로토콜의 경우 Claude Code는 각 내보내기 요청을 `Content-Length` 헤더와 함께 전송합니다.

135 135 

136### mTLS 인증136### mTLS 인증

137 137 

138OTLP 내보내기용 클라이언트 인증서를 구성하는 방법은 `OTEL_EXPORTER_OTLP_PROTOCOL` 또는 신호별 재정의를 통해 설정된 해당 신호에 사용되는 OTLP 프로토콜에 따라 다릅니다. 동일한 구성이 메트릭, 로그 및 추적에 적용됩니다.138OTLP 익스포터의 클라이언트 인증서를 구성하는 방법은 해당 신호에 사용 중인 OTLP 프로토콜에 따라 달라지며, 이 프로토콜은 `OTEL_EXPORTER_OTLP_PROTOCOL` 또는 신호별 재정의를 통해 설정됩니다. 동일한 구성이 메트릭, 로그, 트레이스에 적용됩니다.

139 139 

140| 프로토콜 | 클라이언트 인증서 변수 | 수집기의 CA 신뢰 |140| 프로토콜 | 클라이언트 인증서 변수 | 수집기의 CA를 신뢰하는 방법 |

141| :- | :- | :- |141| :- | :- | :- |

142| `http/protobuf`, `http/json` | `CLAUDE_CODE_CLIENT_CERT`, `CLAUDE_CODE_CLIENT_KEY` 및 선택적으로 `CLAUDE_CODE_CLIENT_KEY_PASSPHRASE`. [네트워크 구성](https://code.claude.com/docs/ko/network-config.md#mtls-authentication) 참조 | `NODE_EXTRA_CA_CERTS` |142| `http/protobuf`, `http/json` | `CLAUDE_CODE_CLIENT_CERT`, `CLAUDE_CODE_CLIENT_KEY`, 그리고 선택적으로 `CLAUDE_CODE_CLIENT_KEY_PASSPHRASE`. [네트워크 구성](https://code.claude.com/docs/ko/network-config.md#mtls-authentication)을 참조하세요 | `NODE_EXTRA_CA_CERTS` |

143| `grpc` | `OTEL_EXPORTER_OTLP_CLIENT_KEY` 및 `OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE`, 또는 신호별로 다른 인증서를 사용하기 위한 `OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY`와 같은 신호별 변형 | `OTEL_EXPORTER_OTLP_CERTIFICATE` |143| `grpc` | `OTEL_EXPORTER_OTLP_CLIENT_KEY` 및 `OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE`, 또는 신호마다 다른 인증서를 사용하려면 `OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY`와 같은 신호별 변형 | `OTEL_EXPORTER_OTLP_CERTIFICATE` |

144 144 

145`grpc`의 경우, OpenTelemetry SDK는 표준 OTLP 변수를 직접 읽으므로 신호별 메트릭 변수를 설정하는 기존 구성은 계속 작동합니다. 관리되는 설정이 있는 머신에서는 Claude Code가 시작 시 [개발자가 설정한 신호별 자격 증명 및 엔드포인트를 제거할 수 있습니다](#how-managed-settings-lock-the-otlp-destination).145`grpc`의 경우 OpenTelemetry SDK가 표준 OTLP 변수를 직접 읽으므로, 신호별 메트릭 변수를 설정하는 기존 구성은 계속 작동합니다. 관리형 설정이 있는 머신에서는 Claude Code가 시작 시 [개발자가 설정한 신호별 자격 증명과 엔드포인트를 제거할 수 있습니다](#how-managed-settings-lock-the-otlp-destination).

146 146 

147### 메트릭 카디널리티 제어147### 메트릭 카디널리티 제어

148 148 

149다음 환경 변수는 카디널리티를 관리하기 위해 메트릭에 포함되는 속성을 제어합니다:149다음 환경 변수는 카디널리티를 관리하기 위해 메트릭에 포함되는 속성을 제어합니다.

150 150 

151| 환경 변수 | 설명 | 기본값 | 비활성화 예제 |151| 환경 변수 | 설명 | 기본값 | 비활성화 예시 |

152| - | - | - | - |152| - | - | - | - |

153| `OTEL_METRICS_INCLUDE_SESSION_ID` | 메트릭에 session.id 및 클라우드 세션의 경우 ccr.session.id 속성 포함 | `true` | `false` |153| `OTEL_METRICS_INCLUDE_SESSION_ID` | 메트릭에 session.id 속성과, 클라우드 세션의 경우 ccr.session.id 속성을 포함합니다 | `true` | `false` |

154| `OTEL_METRICS_INCLUDE_VERSION` | 메트릭에 app.version 속성 포함 | `false` | `true` |154| `OTEL_METRICS_INCLUDE_VERSION` | 메트릭에 app.version 속성을 포함합니다 | `false` | `true` |

155| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 메트릭에 user.account\_uuid 및 user.account\_id 속성 포함 | `true` | `false` |155| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 메트릭에 user.account\_uuid 및 user.account\_id 속성을 포함합니다 | `true` | `false` |

156| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | 메트릭에 app.entrypoint 속성 포함 | `false` | `true` |156| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | 메트릭에 app.entrypoint 속성을 포함합니다 | `false` | `true` |

157| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | `OTEL_RESOURCE_ATTRIBUTES`의 키를 메트릭 데이터포인트의 속성으로 포함 | `true` | `false` |157| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | `OTEL_RESOURCE_ATTRIBUTES`의 키를 메트릭 데이터 포인트의 속성으로 포함합니다 | `true` | `false` |

158| `OTEL_METRICS_INCLUDE_REPOSITORY` | 메트릭 및 이벤트에 `vcs.*` [저장소 ID 속성](#repository-attributes) 포함. Claude Code v2.1.269 이상 필요 | `false` | `true` |158| `OTEL_METRICS_INCLUDE_REPOSITORY` | 메트릭과 이벤트에 `vcs.*` [저장소 식별 속성](#repository-attributes)을 포함합니다. Claude Code v2.1.269 이상이 필요합니다 | `false` | `true` |

159 159 

160낮은 카디널리티는 일반적으로 더 나은 성능과 낮은 저장소 비용을 의미하지만 분석을 위한 덜 세분화된 데이터를 의미합니다.160일반적으로 카디널리티가 낮을수록 성능이 향상되고 스토리지 비용이 줄어들지만, 분석용 데이터의 세분성은 떨어집니다.

161 161 

162### 추적(베타)162### 트레이스(베타)

163 163 

164분산 추적은 각 사용자 프롬프트를 트리거하는 API 요청 및 도구 실행에 연결하는 범위를 내보내므로 추적 백엔드에서 전체 요청을 단일 추적으로 볼 수 있습니다.164분산 트레이싱은 각 사용자 프롬프트를 그 프롬프트가 트리거한 API 요청 및 도구 실행과 연결하는 스팬을 내보내므로, 트레이싱 백엔드에서 전체 요청을 하나의 트레이스로 볼 수 있습니다.

165 165 

166추적은 기본적으로 꺼져 있습니다. 활성화하려면 `CLAUDE_CODE_ENABLE_TELEMETRY=1` 및 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`을 모두 설정한 다음 `OTEL_TRACES_EXPORTER`를 설정하여 범위를 보낼 위치를 선택하세요. 추적은 엔드포인트, 프로토콜, 헤더 및 [mTLS](#mtls-authentication)에 대한 [일반 OTLP 구성](#common-configuration-variables)을 재사용합니다. 관리되는 설정이 있는 머신에서는 Claude Code가 시작 시 [개발자가 설정한 신호별 자격 증명 및 엔드포인트를 제거할 수 있습니다](#how-managed-settings-lock-the-otlp-destination).166트레이싱은 기본적으로 꺼져 있습니다. 활성화하려면 `CLAUDE_CODE_ENABLE_TELEMETRY=1`과 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`을 모두 설정한 다음, `OTEL_TRACES_EXPORTER`를 설정하여 스팬을 보낼 위치를 선택하세요. 트레이스는 엔드포인트, 프로토콜, 헤더 및 [mTLS](#mtls-authentication)에 대해 [공통 OTLP 구성](#common-configuration-variables)을 재사용합니다. 관리형 설정이 있는 머신에서는 Claude Code가 시작 시 [개발자가 설정한 신호별 자격 증명과 엔드포인트를 제거할 수 있습니다](#how-managed-settings-lock-the-otlp-destination).

167 167 

168| 환경 변수 | 설명 | 예제 값 |168| 환경 변수 | 설명 | 예시 값 |

169| - | - | - |169| - | - | - |

170| `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` | 범위 추적 활성화(필수). `ENABLE_ENHANCED_TELEMETRY_BETA`도 허용됨 | `1` |170| `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` | 스팬 트레이싱을 활성화합니다(필수). `ENABLE_ENHANCED_TELEMETRY_BETA`도 허용됩니다 | `1` |

171| `OTEL_TRACES_EXPORTER` | 추적 내보내기 유형, 쉼표로 구분. 비활성화하려면 `none` 사용 | `console`, `otlp`, `none` |171| `OTEL_TRACES_EXPORTER` | 트레이스 익스포터 유형(쉼표로 구분). 비활성화하려면 `none` 사용 | `console`, `otlp`, `none` |

172| `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` | 추적용 프로토콜, `OTEL_EXPORTER_OTLP_PROTOCOL` 재정의 | `grpc`, `http/json`, `http/protobuf` |172| `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` | 트레이스용 프로토콜로, `OTEL_EXPORTER_OTLP_PROTOCOL`을 재정의합니다 | `grpc`, `http/json`, `http/protobuf` |

173| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | OTLP 추적 엔드포인트, `OTEL_EXPORTER_OTLP_ENDPOINT` 재정의 | `http://localhost:4318/v1/traces` |173| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | OTLP 트레이스 엔드포인트로, `OTEL_EXPORTER_OTLP_ENDPOINT`를 재정의합니다 | `http://localhost:4318/v1/traces` |

174| `OTEL_EXPORTER_OTLP_TRACES_HEADERS` | 추적용 인증 헤더, `OTEL_EXPORTER_OTLP_HEADERS`와 병합 | `Authorization=Bearer token` |174| `OTEL_EXPORTER_OTLP_TRACES_HEADERS` | 트레이스용 인증 헤더로, `OTEL_EXPORTER_OTLP_HEADERS`와 병합됩니다 | `Authorization=Bearer token` |

175| `OTEL_TRACES_EXPORT_INTERVAL` | 범위 배치 내보내기 간격(밀리초)(기본값: 5000) | `1000`, `10000` |175| `OTEL_TRACES_EXPORT_INTERVAL` | 밀리초 단위의 스팬 배치 내보내기 간격(기본값: 5000) | `1000`, `10000` |

176 176 

177범위는 기본적으로 사용자 프롬프트 텍스트, 도구 입력 세부 정보 및 도구 콘텐츠를 편집합니다. `OTEL_LOG_USER_PROMPTS=1`, `OTEL_LOG_TOOL_DETAILS=1` 및 `OTEL_LOG_TOOL_CONTENT=1`을 설정하여 포함하세요.177스팬은 기본적으로 사용자 프롬프트 텍스트, 도구 입력 세부 정보 및 도구 콘텐츠를 마스킹합니다. 이를 포함하려면 `OTEL_LOG_USER_PROMPTS=1`, `OTEL_LOG_TOOL_DETAILS=1`, `OTEL_LOG_TOOL_CONTENT=1`을 설정하세요.

178 178 

179추적이 활성화되면 Bash 및 PowerShell 하위 프로세스는 활성 도구 실행 범위의 W3C 추적 컨텍스트를 포함하는 `TRACEPARENT` 환경 변수를 자동으로 상속합니다. 이를 통해 `TRACEPARENT`를 읽는 모든 하위 프로세스는 자신의 범위를 동일한 추적 아래에 부모로 지정할 수 있으므로 Claude가 실행하는 스크립트 및 명령을 통한 엔드투엔드 분산 추적이 가능합니다.179트레이싱이 활성화되어 있으면 Bash 및 PowerShell 하위 프로세스는 활성 도구 실행 스팬의 W3C 트레이스 컨텍스트를 담은 `TRACEPARENT` 환경 변수를 자동으로 상속합니다. 이를 통해 `TRACEPARENT`를 읽는 모든 하위 프로세스가 자체 스팬을 같은 트레이스 아래에 둘 수 있어, Claude가 실행하는 스크립트와 명령 전반에 걸쳐 엔드투엔드 분산 트레이싱이 가능해집니다.

180 180 

181추적이 활성화되고 Claude Code가 Anthropic API에 직접 연결된 경우, 각 모델 요청은 `claude_code.llm_request` 범위의 컨텍스트로 설정된 W3C `traceparent` 헤더를 전달하고, API의 `traceresponse` 헤더는 범위 링크로 기록됩니다. 이들은 함께 Claude Code의 클라이언트 측 범위를 호환 가능한 중개자를 통해 서버 측 추적에 연결합니다. 아웃바운드 HTTP MCP 요청은 동일한 방식으로 `traceparent`를 전달합니다. 헤더는 타사 제공자에게 전송되지 않습니다.181트레이싱이 활성화되어 있고 Claude Code가 Anthropic API에 직접 연결된 경우, 각 모델 요청에는 `claude_code.llm_request` 스팬의 컨텍스트로 설정된 W3C `traceparent` 헤더가 포함되며, API의 `traceresponse` 헤더는 스팬 링크로 기록됩니다. 이 둘이 함께 규격을 준수하는 모든 중개자를 거쳐 Claude Code의 클라이언트 측 스팬을 서버 측 트레이스에 연결합니다. 아웃바운드 HTTP MCP 요청도 같은 방식으로 `traceparent`를 포함합니다. 이 헤더는 서드파티 제공업체에는 전송되지 않습니다.

182 182 

183기본적으로 모델 및 HTTP MCP 요청의 `traceparent` 헤더는 `ANTHROPIC_BASE_URL`이 설정되지 않았거나 Anthropic API를 가리킬 때만 전송됩니다. 일부 프록시는 인식되지 않는 헤더를 거부하기 때문입니다. 하위 프로세스 `TRACEPARENT` 변수는 일관성을 위해 동일한 스위치로 제어됩니다. 사용자 정의 `ANTHROPIC_BASE_URL` 프록시를 통해 Claude Code를 실행하고 추적 컨텍스트를 전파하려면 `CLAUDE_CODE_PROPAGATE_TRACEPARENT=1`을 설정하세요.183일부 프록시는 인식되지 않는 헤더를 거부하므로, 기본적으로 모델 및 HTTP MCP 요청의 `traceparent` 헤더는 `ANTHROPIC_BASE_URL`이 설정되지 않았거나 Anthropic API를 가리킬 때만 전송됩니다. 일관성을 위해 하위 프로세스의 `TRACEPARENT` 변수도 같은 스위치로 제어됩니다. 사용자 지정 `ANTHROPIC_BASE_URL` 프록시를 통해 Claude Code를 실행하면서 트레이스 컨텍스트를 전파하려면 `CLAUDE_CODE_PROPAGATE_TRACEPARENT=1`을 설정하세요.

184 184 

185Agent SDK 및 `-p`로 시작된 비대화형 세션에서 Claude Code는 각 상호작용 범위를 시작할 때 자신의 환경에서 `TRACEPARENT` 및 `TRACESTATE`를 읽습니다. 이를 통해 임베딩 프로세스는 활성 W3C 추적 컨텍스트를 하위 프로세스에 전달할 수 있으므로 Claude Code의 범위가 호출자의 분산 추적의 자식으로 나타납니다. 대화형 세션은 CI 또는 컨테이너 환경의 주변 값을 실수로 상속하는 것을 피하기 위해 인바운드 `TRACEPARENT`를 무시합니다.185Agent SDK 및 `-p`로 시작된 비대화형 세션에서 Claude Code는 각 상호작용 스팬을 시작할 때 자체 환경에서 `TRACEPARENT`와 `TRACESTATE`도 읽습니다. 이를 통해 임베딩 프로세스가 활성 W3C 트레이스 컨텍스트를 하위 프로세스에 전달하여 Claude Code의 스팬이 호출자의 분산 트레이스의 자식으로 나타나게 할 수 있습니다. 대화형 세션은 CI 또는 컨테이너 환경의 주변 값을 실수로 상속하지 않도록 인바운드 `TRACEPARENT`를 무시합니다.

186 186 

187인바운드 추적 컨텍스트는 [이벤트](#events)에도 적용됩니다. `TRACEPARENT`가 설정된 Agent SDK 및 `-p` 세션에서 각 OTLP 이벤트 로그 레코드는 추적 내보내기가 구성되지 않은 경우에도 로깅 백엔드가 이벤트를 추적의 나머지와 상관시킬 수 있도록 애플리케이션의 추적에 조인하는 `trace_id` 및 `span_id` 값을 전달합니다.187인바운드 트레이스 컨텍스트는 [이벤트](#events)에도 적용됩니다. `TRACEPARENT`가 설정된 Agent SDK 및 `-p` 세션에서는 트레이스 익스포터가 구성되지 않은 경우에도 각 OTLP 이벤트 로그 레코드에 애플리케이션의 트레이스와 연결하는 `trace_id` 및 `span_id` 값이 포함되므로, 로깅 백엔드에서 이벤트를 트레이스의 나머지 부분과 연관시킬 수 있습니다.

188 188 

189상호작용이 활성화되는 동안 내보낸 레코드는 권한 프롬프트 콜백이나 시작 중에 버퍼링되고 나중에 내보낸 레코드와 같이 범위의 비동기 컨텍스트 외부에서 Claude Code가 내보낸 경우에도 상호작용 범위의 ID를 전달합니다. 활성 상호작용 범위가 없는 상태에서 내보낸 레코드는 인바운드 `TRACEPARENT` ID를 직접 전달합니다.189상호작용이 활성 상태일 때 출력된 레코드는 Claude Code가 스팬의 비동기 컨텍스트 밖에서 출력하더라도(예: 권한 프롬프트 콜백에서, 또는 시작 중에 버퍼링되었다가 나중에 내보내진 레코드의 경우) 상호작용 스팬의 ID를 포함합니다. 활성 상호작용 스팬이 없을 때 출력된 레코드는 인바운드 `TRACEPARENT` ID를 직접 포함합니다.

190 190 

191#### 범위 계층 구조191#### 스팬 계층 구조

192 192 

193각 사용자 프롬프트는 `claude_code.interaction` 루트 범위를 시작합니다. API 호출, 도구 호출 및 훅 실행은 자식으로 기록됩니다. 도구 범위는 자체 두 개의 자식 범위를 가집니다: 하나는 권한 결정을 기다리는 데 소요된 시간이고 다른 하나는 실행 자체입니다. Agent 도구 또는 레거시 Task 도구가 하위 에이전트를 생성하면 하위 에이전트의 API 및 도구 범위는 부모의 `claude_code.tool` 범위 아래에 중첩됩니다.193각 사용자 프롬프트는 `claude_code.interaction` 루트 스팬을 시작합니다. API 호출, 도구 호출 및 훅 실행은 그 자식으로 기록됩니다. 도구 스팬에는 자체 자식 스팬이 두 개 있습니다. 하나는 권한 결정을 기다리는 데 소요된 시간에 대한 것이고, 다른 하나는 실행 자체에 대한 것입니다. Agent 도구 또는 레거시 Task 도구가 서브에이전트를 생성하면, 서브에이전트의 API 및 도구 스팬은 부모의 `claude_code.tool` 스팬 아래에 중첩됩니다.

194 194 

195```text theme={null}195```text theme={null}

196claude_code.interaction196claude_code.interaction


202 └── (Agent tool) subagent claude_code.llm_request / claude_code.tool spans202 └── (Agent tool) subagent claude_code.llm_request / claude_code.tool spans

203```203```

204 204 

205Agent SDK 및 `claude -p` 세션에서 `TRACEPARENT`가 환경에 설정되면 `claude_code.interaction` 자체가 호출자의 범위의 자식이 됩니다.205Agent SDK 및 `claude -p` 세션에서는 환경에 `TRACEPARENT`가 설정되어 있으면 `claude_code.interaction` 자체가 호출자 스팬의 자식이 됩니다.

206 206 

207`PreToolUse` 훅이 [도구 호출을 나중으로 연기](https://code.claude.com/docs/ko/hooks.md#defer-a-tool-call-for-later)할 때, Claude Code는 이를 연기한 턴의 추적 컨텍스트를 저장합니다. 세션을 재개하고 도구가 다시 실행되면 도구의 범위는 턴의 `claude_code.interaction` 범위의 자식으로 이전 턴의 추적에 조인합니다.207`PreToolUse` 훅이 [도구 호출을 연기](https://code.claude.com/docs/ko/hooks.md#defer-a-tool-call-for-later)하면 Claude Code는 연기한 턴의 트레이스 컨텍스트를 저장합니다. 세션을 재개하여 도구가 다시 실행되면, 도구의 스팬은 해당 턴의 `claude_code.interaction` 스팬의 자식으로서 그 이전 턴의 트레이스에 합류합니다.

208 208 

209#### 범위 속성209#### 스팬 속성

210 210 

211모든 범위는 [표준 속성](#standard-attributes)과 이름과 일치하는 `span.type` 속성을 전달합니다. 아래 표는 각 범위에 설정된 추가 속성을 나열합니다. `llm_request`, `tool.execution` 및 `hook` 범위는 실패를 기록할 때 OpenTelemetry 상태 `ERROR`를 설정합니다. 다른 범위는 항상 상태 `UNSET`으로 끝납니다.211모든 스팬은 [표준 속성](#standard-attributes)과 함께 이름에 해당하는 `span.type` 속성을 포함합니다. 아래 표에는 각 스팬에 설정되는 추가 속성이 나열되어 있습니다. `llm_request`, `tool.execution`, `hook` 스팬은 실패를 기록할 때 OpenTelemetry 상태를 `ERROR`로 설정하며, 다른 스팬은 항상 `UNSET` 상태로 종료됩니다.

212 212 

213**`claude_code.interaction`**213**`claude_code.interaction`**

214 214 

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

216| - | - | - |216| - | - | - |

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

218| `user_prompt_length` | 프롬프트 길이(문자) | |218| `user_prompt_length` | 문자 단위의 프롬프트 길이 | |

219| `interaction.sequence` | 상호작용의 1 기반 카운터, [`event.sequence`](#event-correlation-attributes)에 설명된 대로 Claude Code 프로세스당 계산되며 세션당이 아님 | |219| `interaction.sequence` | 1부터 시작하는 상호작용 카운터로, [`event.sequence`](#event-correlation-attributes)에서 설명한 대로 세션이 아닌 Claude Code 프로세스 단위로 계산됩니다 | |

220| `parent.source` | 범위가 추적 부모를 얻은 방법: 인바운드 `TRACEPARENT`에서 부모가 될 때 `env`, 자신의 추적을 시작할 때 `none`. Claude Code v2.1.268 이상 필요 | |220| `parent.source` | 스팬이 트레이스 부모를 얻은 방식: 인바운드 `TRACEPARENT` 아래에 부모가 지정된 경우 `env`, 자체 트레이스를 시작한 경우 `none`. Claude Code v2.1.268 이상이 필요합니다 | |

221| `interaction.duration_ms` | 턴의 벽시계 지속 시간 | |221| `interaction.duration_ms` | 턴의 실제 경과 시간 | |

222 222 

223**`claude_code.llm_request`**223**`claude_code.llm_request`**

224 224 

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

226| - | - | - |226| - | - | - |

227| `model` | 모델 식별자 | |227| `model` | 모델 식별자 | |

228| `gen_ai.system` | 항상 `anthropic`. OpenTelemetry GenAI 의미론적 규칙 | |228| `gen_ai.system` | 항상 `anthropic`. OpenTelemetry GenAI 시맨틱 규칙 | |

229| `gen_ai.request.model` | `model`과 동일한 값. OpenTelemetry GenAI 의미론적 규칙 | |229| `gen_ai.request.model` | `model`과 같은 값. OpenTelemetry GenAI 시맨틱 규칙 | |

230| `query_source` | `repl_main_thread` 또는 하위 에이전트 이름과 같이 요청을 발급한 하위 시스템 | `ENABLE_BETA_TRACING_DETAILED` |230| `query_source` | 요청을 발행한 하위 시스템(예: `repl_main_thread` 또는 서브에이전트 이름) | `ENABLE_BETA_TRACING_DETAILED` |

231| `query_source_safe` | `query_source`의 제한된 형식, 상세 베타 추적 활성 여부와 관계없이 내보내짐, `repl_main_thread` 또는 `agent.builtin.general-purpose`와 같은 값. `:`는 `.`이 되고 사용자 명명 에이전트는 `agent.custom`으로 나타납니다. Claude Code v2.1.268 이상 필요 | |231| `query_source_safe` | 상세 베타 트레이싱의 활성화 여부와 관계없이 출력되는 `query_source`의 제한된 형태로, `repl_main_thread` 또는 `agent.builtin.general-purpose`와 같은 값을 가집니다. `:`는 `.`이 되며, 사용자가 이름을 지정한 에이전트는 `agent.custom`으로 표시됩니다. Claude Code v2.1.268 이상이 필요합니다 | |

232| `agent_id` | 요청을 발급한 하위 에이전트 또는 팀원의 식별자. 주 세션에서는 없음 | |232| `agent_id` | 요청을 발행한 서브에이전트 또는 팀원의 식별자. 메인 세션에는 없습니다 | |

233| `parent_agent_id` | 이 에이전트를 생성한 에이전트의 식별자. 주 세션 및 직접 생성된 에이전트에서는 없음 | |233| `parent_agent_id` | 이 에이전트를 생성한 에이전트의 식별자. 메인 세션 및 메인 세션에서 직접 생성된 에이전트에는 없습니다 | |

234| `workflow.run_id` | 이 에이전트를 생성한 [Workflow](https://code.claude.com/docs/ko/workflows.md) 도구 실행의 실행 식별자, `wf_` 접두사. 워크플로우에 의해 생성되지 않은 에이전트에서는 없음 | |234| `workflow.run_id` | 이 에이전트를 생성한 [Workflow](https://code.claude.com/docs/ko/workflows.md) 도구 실행의 실행 식별자로, 접두사 `wf_`가 붙습니다. 워크플로에 의해 생성되지 않은 에이전트에는 없습니다 | |

235| `workflow.name` | 이 에이전트를 생성한 워크플로우의 이름. 사용자 작성 이름은 게이트가 설정되지 않으면 `custom`으로 대체됨 | `OTEL_LOG_TOOL_DETAILS` |235| `workflow.name` | 이 에이전트를 생성한 워크플로의 이름. 게이트가 설정되지 않으면 사용자가 작성한 이름은 `custom`으로 대체됩니다 | `OTEL_LOG_TOOL_DETAILS` |

236| `speed` | `fast` 또는 `normal` | |236| `speed` | `fast` 또는 `normal` | |

237| `effort` | 요청에 적용된 [노력 수준](https://code.claude.com/docs/ko/model-config.md#adjust-effort-level): `low`, `medium`, `high`, `xhigh` 또는 `max`. 예를 들어 노력을 지원하지 않는 모델에서 Claude Code가 노력 수준을 보내지 않을 때 없음. Claude Code v2.1.274 이상 필요 | |237| `effort` | 요청에 적용된 [effort 수준](https://code.claude.com/docs/ko/model-config.md#adjust-effort-level): `low`, `medium`, `high`, `xhigh` 또는 `max`. Claude Code가 effort 수준을 보내지 않는 경우(예: effort를 지원하지 않는 모델)에는 없습니다. Claude Code v2.1.274 이상이 필요합니다 | |

238| `llm_request.context` | 부모 범위에 따라 `interaction`, `tool` 또는 `standalone` | |238| `llm_request.context` | 부모 스팬에 따라 `interaction`, `tool` 또는 `standalone` | |

239| `duration_ms` | 재시도를 포함한 벽시계 지속 시간 | |239| `duration_ms` | 재시도를 포함한 실제 경과 시간 | |

240| `ttft_ms` | 첫 번째 토큰까지의 시간(밀리초) | |240| `ttft_ms` | 밀리초 단위의 첫 토큰까지의 시간 | |

241| `first_content_ms` | 요청 시작부터 성공한 시도의 첫 번째 콘텐츠 블록까지의 시간(밀리초). 비스트리밍 경로로 폴백한 요청에서는 없음. Claude Code v2.1.268 이상 필요 | |241| `first_content_ms` | 요청 시작부터 성공한 시도의 첫 콘텐츠 블록까지의 시간(밀리초). 비스트리밍 경로로 폴백된 요청에는 없습니다. Claude Code v2.1.268 이상이 필요합니다 | |

242| `input_tokens` | API 사용 블록의 입력 토큰 수. 프롬프트 캐시에서 읽거나 프롬프트 캐시에 기록된 토큰은 제외되며, 이는 `cache_read_tokens` 및 `cache_creation_tokens`에 보고됩니다 | |242| `input_tokens` | API 사용량 블록의 입력 토큰 수. 프롬프트 캐시에서 읽거나 캐시에 쓴 토큰은 제외되며, 이는 `cache_read_tokens` 및 `cache_creation_tokens`에 보고됩니다 | |

243| `output_tokens` | 출력 토큰 수 | |243| `output_tokens` | 출력 토큰 수 | |

244| `cache_read_tokens` | 프롬프트 캐시에서 읽은 토큰 | |244| `cache_read_tokens` | 프롬프트 캐시에서 읽은 토큰 | |

245| `cache_creation_tokens` | 프롬프트 캐시에 기록된 토큰 | |245| `cache_creation_tokens` | 프롬프트 캐시에 쓴 토큰 | |

246| `request_id` | API 요청 ID. `request_id` [이벤트 상관 속성](#event-correlation-attributes)과 동일한 값 | |246| `request_id` | API 요청 ID. `request_id` [이벤트 상관 속성](#event-correlation-attributes)과 같은 값 | |

247| `gen_ai.response.id` | `request_id`와 동일한 값. OpenTelemetry GenAI 의미론적 규칙 | |247| `gen_ai.response.id` | `request_id`와 같은 값. OpenTelemetry GenAI 시맨틱 규칙 | |

248| `client_request_id` | 최종 시도의 클라이언트 생성 `x-client-request-id` | |248| `client_request_id` | 최종 시도의 클라이언트 생성 `x-client-request-id` | |

249| `attempt` | 이 요청에 대해 수행된 총 시도 | |249| `attempt` | 이 요청에 대해 이루어진 총 시도 횟수 | |

250| `success` | `true` 또는 `false` | |250| `success` | `true` 또는 `false` | |

251| `status_code` | 요청이 실패했을 때 HTTP 상태 코드 | |251| `status_code` | 요청이 실패한 경우의 HTTP 상태 코드 | |

252| `error` | 요청이 실패했을 때 오류 메시지 | |252| `error` | 요청이 실패한 경우의 오류 메시지 | |

253| `error_class` | 요청이 실패했을 때 짧은 오류 클래스 토큰, `api_timeout` 또는 `server_overload`와 같음. Claude Code v2.1.268 이상 필요 | |253| `error_class` | 요청이 실패한 경우의 짧은 오류 클래스 토큰(예: `api_timeout` 또는 `server_overload`). Claude Code v2.1.268 이상이 필요합니다 | |

254| `response.has_tool_call` | 응답에 도구 사용 블록이 포함되었을 때 `true` | |254| `response.has_tool_call` | 응답에 도구 사용 블록이 포함된 경우 `true` | |

255| `stop_reason` | API 응답 `stop_reason`, `end_turn`, `tool_use`, `max_tokens`, `stop_sequence`, `pause_turn` 또는 `refusal`과 같음 | |255| `stop_reason` | API 응답의 `stop_reason`(예: `end_turn`, `tool_use`, `max_tokens`, `stop_sequence`, `pause_turn` 또는 `refusal`) | |

256| `gen_ai.response.finish_reasons` | `stop_reason`과 동일한 값, 문자열 배열로 래핑됨. OpenTelemetry GenAI 의미론적 규칙 | |256| `gen_ai.response.finish_reasons` | `stop_reason`과 같은 값을 문자열 배열로 감싼 것. OpenTelemetry GenAI 시맨틱 규칙 | |

257 257 

258각 재시도 시도는 `attempt` 및 `client_request_id` 속성이 있는 `gen_ai.request.attempt` 범위 이벤트로도 기록됩니다.258각 재시도도 `attempt` 및 `client_request_id` 속성을 가진 `gen_ai.request.attempt` 스팬 이벤트로 기록됩니다.

259 259 

260**`claude_code.tool`**260**`claude_code.tool`**

261 261 

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

263| - | - | - |263| - | - | - |

264| `tool_name` | 도구 이름 | |264| `tool_name` | 도구 이름 | |

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

266| `bash_command_class` | Bash 도구의 경우: 고정 목록의 명령 첫 번째 프로그램 범주, `vcs` 또는 `package_manager`와 같음. 목록 외부의 프로그램의 경우 `other`, 줄을 구문 분석할 수 없을 때 `unparsed`. Claude Code v2.1.268 이상 필요 | |266| `bash_command_class` | Bash 도구의 경우: 고정된 목록에서 가져온 명령의 첫 번째 프로그램의 범주(예: `vcs` 또는 `package_manager`). 목록에 없는 프로그램은 `other`, 줄을 파싱할 수 없는 경우 `unparsed` Claude Code v2.1.268 이상이 필요합니다 | |

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

268| `duration_ms` | 권한 대기 및 실행을 포함한 벽시계 지속 시간 | |268| `duration_ms` | 권한 대기 및 실행을 포함한 실제 경과 시간 | |

269| `result_tokens` | 도구 결과의 대략적인 토큰 크기 | |269| `result_tokens` | 도구 결과의 대략적인 토큰 크기 | |

270| `agent_id` | 도구를 실행한 하위 에이전트 또는 팀원의 식별자. 주 세션에서는 없음 | |270| `agent_id` | 도구를 실행한 서브에이전트 또는 팀원의 식별자. 메인 세션에는 없습니다 | |

271| `parent_agent_id` | 이 에이전트를 생성한 에이전트의 식별자. 주 세션 및 직접 생성된 에이전트에서는 없음 | |271| `parent_agent_id` | 이 에이전트를 생성한 에이전트의 식별자. 메인 세션 및 메인 세션에서 직접 생성된 에이전트에는 없습니다 | |

272| `workflow.run_id` | 이 에이전트를 생성한 Workflow 도구 실행의 실행 식별자, `wf_` 접두사. 워크플로우에 의해 생성되지 않은 에이전트에서는 없음 | |272| `workflow.run_id` | 이 에이전트를 생성한 Workflow 도구 실행의 실행 식별자로, 접두사 `wf_`가 붙습니다. 워크플로에 의해 생성되지 않은 에이전트에는 없습니다 | |

273| `workflow.name` | 이 에이전트를 생성한 워크플로우의 이름. 사용자 작성 이름은 게이트가 설정되지 않으면 `custom`으로 대체됨 | `OTEL_LOG_TOOL_DETAILS` |273| `workflow.name` | 이 에이전트를 생성한 워크플로의 이름. 게이트가 설정되지 않으면 사용자가 작성한 이름은 `custom`으로 대체됩니다 | `OTEL_LOG_TOOL_DETAILS` |

274| `tool_use_id` | 이 호출에 대한 모델의 `tool_use` 블록 ID. [tool\_result](#tool-result-event) 및 [tool\_decision](#tool-decision-event) 이벤트 및 훅 페이로드의 `tool_use_id`와 일치하므로 범위를 해당 레코드에 조인할 수 있습니다 | |274| `tool_use_id` | 이 호출에 대한 모델의 `tool_use` 블록 id. [tool\_result](#tool-result-event) 및 [tool\_decision](#tool-decision-event) 이벤트와 훅 페이로드의 `tool_use_id`와 일치하므로, 스팬을 해당 레코드와 연결할 수 있습니다 | |

275| `gen_ai.tool.call.id` | `tool_use_id`와 동일한 값. OpenTelemetry GenAI 의미론적 규칙 | |275| `gen_ai.tool.call.id` | `tool_use_id`와 같은 값. OpenTelemetry GenAI 시맨틱 규칙 | |

276| `file_path` | Read, Edit 및 Write 도구의 대상 파일 경로 | `OTEL_LOG_TOOL_DETAILS` |276| `file_path` | Read, Edit, Write 도구의 대상 파일 경로 | `OTEL_LOG_TOOL_DETAILS` |

277| `full_command` | Bash 도구의 명령 문자열 | `OTEL_LOG_TOOL_DETAILS` |277| `full_command` | Bash 도구의 명령 문자열 | `OTEL_LOG_TOOL_DETAILS` |

278| `skill_name` | Skill 도구의 스킬 이름 | `OTEL_LOG_TOOL_DETAILS` |278| `skill_name` | Skill 도구의 스킬 이름 | `OTEL_LOG_TOOL_DETAILS` |

279| `subagent_type` | Agent 도구 또는 레거시 Task 도구의 하위 에이전트 유형 | `OTEL_LOG_TOOL_DETAILS` |279| `subagent_type` | Agent 도구 또는 레거시 Task 도구의 서브에이전트 유형 | `OTEL_LOG_TOOL_DETAILS` |

280 280 

281**`claude_code.tool`의 `tool.output` 범위 이벤트**281**`claude_code.tool`의 `tool.output` 스팬 이벤트**

282 282 

283`OTEL_LOG_TOOL_CONTENT=1`을 설정하면 Read 및 Bash 호출은 `claude_code.tool` 범위에 `tool.output` 범위 이벤트를 기록할 수 있습니다. Edit 및 Write 호출은 `OTEL_LOG_TOOL_DETAILS=1`도 설정할 때만 하나를 기록합니다. 해당 변수는 해당 두 도구로 범위가 지정되지 않으므로 구성 표의 [행](#common-configuration-variables)에서 다른 곳에 추가하는 인수를 확인하세요.283`OTEL_LOG_TOOL_CONTENT=1`을 설정하면 Read 및 Bash 호출이 `claude_code.tool` 스팬에 `tool.output` 스팬 이벤트를 기록할 수 있습니다. Edit 및 Write 호출은 `OTEL_LOG_TOOL_DETAILS=1`도 설정한 경우에만 이를 기록합니다. 이 변수는 이 두 도구에만 국한되지 않으므로, 다른 곳에서 추가되는 인수는 [구성 표의 해당 행](#common-configuration-variables)을 확인하세요.

284 284 

285MCP 도구, WebFetch 및 WebSearch도 Claude Code v2.1.283 이상에서 이 이벤트를 기록합니다.285Claude Code v2.1.283 이상에서는 MCP 도구, WebFetch, WebSearch도 이 이벤트를 기록합니다.

286 286 

287Claude Code는 도구 호출의 성공적인 반환에서 이 이벤트를 작성하므로 오류를 발생시키는 호출은 도구에 관계없이 아무것도 기록하지 않습니다. 반환하는 호출 중에서 다음에 대해 `tool.output` 이벤트를 기록하지 않습니다:287Claude Code는 도구 호출이 성공적으로 반환될 때 이 이벤트를 기록하므로, 도구와 관계없이 오류를 발생시킨 호출은 아무것도 기록하지 않습니다. 반환된 호출 중에서도 다음의 경우에는 `tool.output` 이벤트를 기록하지 않습니다.

288 288 

289* Read, Edit, Write, Bash, WebFetch, WebSearch 및 MCP 도구 이외의 도구에 대한 호출289* Read, Edit, Write, Bash, WebFetch, WebSearch 및 MCP 도구 이외의 도구 호출

290* 이미지, PDF 또는 콘텐츠가 변경되지 않은 파일의 재읽기와 같이 파일 텍스트 이외의 것을 반환하는 Read290* 이미지, PDF 또는 내용이 변경되지 않은 파일의 재읽기처럼 파일 텍스트 이외의 것을 반환하는 Read

291* `OTEL_LOG_TOOL_DETAILS=1`도 설정하지 않으면 Edit 또는 Write 호출291* `OTEL_LOG_TOOL_DETAILS=1`도 설정하지 않은 경우의 Edit 또는 Write 호출

292* 대기 중인 메시지가 Claude에 전달될 수 있도록 Claude Code가 실행 중에 백그라운드로 옮긴 WebFetch 또는 WebSearch 호출. 나중에 도착하는 결과도 기록되지 않습니다. Claude Code가 호출을 옮기는 시점은 터미널의 경우 [Claude Code가 대기열에 넣은 항목을 보내는 시점](https://code.claude.com/docs/ko/interactive-mode.md#when-claude-code-sends-what-you-queued)을, Agent SDK 세션의 경우 [`priority` 필드](https://code.claude.com/docs/ko/agent-sdk/typescript#sdkusermessage)를 참조하세요292* 대기 중인 메시지가 Claude에 전달될 수 있도록 Claude Code가 실행 중에 백그라운드로 이동한 WebFetch 또는 WebSearch 호출. 나중에 도착하는 결과도 기록되지 않습니다. Claude Code가 호출을 이동하는 시점은 터미널의 경우 [대기열에 넣은 항목을 Claude Code가 보내는 시점](https://code.claude.com/docs/ko/interactive-mode.md#when-claude-code-sends-what-you-queued)을, Agent SDK 세션의 경우 [`priority` 필드](https://code.claude.com/docs/ko/agent-sdk/typescript#sdkusermessage)를 참조하세요

293 293 

294이벤트는 각각 콘텐츠 제한(기본값 60KB)에서 잘린 이러한 속성을 전달합니다. `Gated by`는 `OTEL_LOG_TOOL_CONTENT=1` 위에 속성이 필요한 변수의 이름을 지정하고, Edit 및 Write의 경우 해당 변수는 속성이 아닌 이벤트 자체를 게이트합니다.294이 이벤트에는 다음 속성이 포함되며, 각각 콘텐츠 한도(기본값 60 KB)에서 잘립니다. `게이트`는 `OTEL_LOG_TOOL_CONTENT=1`에 더해 속성에 필요한 변수를 나타내며, Edit 및 Write의 경우 해당 변수는 속성이 아니라 이벤트 자체를 제어합니다.

295 295 

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

297| - | - | - |297| - | - | - |

298| `content` | Read 도구가 반환한 텍스트 또는 Write 호출이 작성하도록 요청한 텍스트 | Write 도구의 경우 `OTEL_LOG_TOOL_DETAILS` |298| `content` | Read 도구가 반환한 텍스트 또는 Write 호출이 쓰도록 요청받은 텍스트 | Write 도구의 경우 `OTEL_LOG_TOOL_DETAILS` |

299| `output` | Bash 도구의 경우 명령의 결합된 출력, stderr이 stdout에 인터리브됨. MCP 도구, WebFetch 또는 WebSearch의 경우 도구가 반환한 결과: 줄바꿈으로 조인된 텍스트 블록, 이미지 또는 문서가 `[image]`와 같은 자리 표시자로 대체됨 | |299| `output` | Bash 도구의 경우 stderr가 stdout에 섞인 명령의 결합 출력. MCP 도구, WebFetch 또는 WebSearch의 경우 도구가 반환한 결과로, 텍스트 블록은 줄바꿈으로 연결되고 이미지나 문서는 `[image]`와 같은 자리 표시자로 대체됩니다 | |

300| `diff` | Edit 도구가 적용한 구조화된 패치 | `OTEL_LOG_TOOL_DETAILS` |300| `diff` | Edit 도구가 적용한 구조화된 패치 | `OTEL_LOG_TOOL_DETAILS` |

301| `file_path` | Read, Edit 및 Write 도구의 대상 파일 경로, 동일한 이름의 범위 속성 반복 | `OTEL_LOG_TOOL_DETAILS` |301| `file_path` | Read, Edit, Write 도구의 대상 파일 경로로, 같은 이름의 스팬 속성을 반복합니다 | `OTEL_LOG_TOOL_DETAILS` |

302| `bash_command` | Bash 도구의 명령 문자열 | `OTEL_LOG_TOOL_DETAILS` |302| `bash_command` | Bash 도구의 명령 문자열 | `OTEL_LOG_TOOL_DETAILS` |

303 303 

304부모 범위의 `tool_name` 속성은 이벤트가 어느 도구에서 왔는지 알려줍니다. 콘텐츠 제한에서 잘린 속성에는 `<attribute>_truncated` 및 `<attribute>_original_length`가 함께 제공됩니다.304부모 스팬의 `tool_name` 속성으로 이벤트가 어느 도구에서 왔는지 알 수 있습니다. 콘텐츠 한도에서 잘린 속성에는 `<attribute>_truncated` 및 `<attribute>_original_length`가 함께 포함됩니다.

305 305 

306**`claude_code.tool.blocked_on_user`**306**`claude_code.tool.blocked_on_user`**

307 307 

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

309| - | - | - |309| - | - | - |

310| `duration_ms` | 권한 결정을 기다리는 데 소요된 시간 | |310| `duration_ms` | 권한 결정을 기다리는 데 소요된 시간 | |

311| `decision` | `accept`, `reject` 또는 `cancelled`. `cancelled`는 Claude Code가 도구 호출에 대한 권한 결정을 더 이상 기다리지 않고 도구를 실행하지 않았음을 의미합니다 | |311| `decision` | `accept`, `reject` 또는 `cancelled`. `cancelled`는 Claude Code가 도구 호출에 대한 권한 결정 대기를 중단하고 도구를 실행하지 않았음을 의미합니다 | |

312| `source` | `accept` 또는 `reject`의 경우 결정의 출처로, `config`, `hook` 또는 `user_temporary`와 같으며 각 의미는 [도구 결정 이벤트](#tool-decision-event)에 설명되어 있습니다. `cancelled`의 경우 결정이 내려지기 전에 대기를 종료한 원인으로, `user_abort`와 같습니다 | |312| `source` | `accept` 또는 `reject`의 경우 결정이 나온 출처(예: `config`, `hook` 또는 `user_temporary`)로, 의미는 [도구 결정 이벤트](#tool-decision-event)에 설명되어 있습니다. `cancelled`의 경우 결정이 내려지기 전에 대기를 종료시킨 원인(예: `user_abort`) | |

313 313 

314`source`가 `user_abort`인 `cancelled` 결정은 권한 프롬프트 또는 [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode) 검사가 보류 중인 동안 즉시 전달해야 하는 메시지가 턴을 중단했음을 의미합니다. 예를 들어 자동 모드 검사 중에 사용자가 대기열에 메시지를 넣어 두었다가 [즉시 보낸](https://code.claude.com/docs/ko/interactive-mode.md#when-claude-code-sends-what-you-queued) 경우입니다.314`source`가 `user_abort`인 `cancelled` 결정은 권한 프롬프트 또는 [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode) 검사가 보류 중인 동안 즉시 전달이 필요한 메시지가 턴을 중단시켰음을 의미합니다. 예를 들어 자동 모드 검사 중에 사용자가 대기열에 메시지를 넣어 두었다가 [즉시 보낸](https://code.claude.com/docs/ko/interactive-mode.md#when-claude-code-sends-what-you-queued) 경우입니다.

315 315 

316**`claude_code.tool.execution`**316**`claude_code.tool.execution`**

317 317 

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

319| - | - | - |319| - | - | - |

320| `duration_ms` | 도구 본문을 실행하는 데 소요된 시간 | |320| `duration_ms` | 도구 본체를 실행하는 데 소요된 시간 | |

321| `tool_use_id` | 부모 `claude_code.tool` 범위와 동일한 값 | |321| `tool_use_id` | 부모 `claude_code.tool` 스팬과 같은 값 | |

322| `gen_ai.tool.call.id` | `tool_use_id`와 동일한 값. OpenTelemetry GenAI 의미론적 규칙 | |322| `gen_ai.tool.call.id` | `tool_use_id`와 같은 값. OpenTelemetry GenAI 시맨틱 규칙 | |

323| `success` | `true` 또는 `false` | |323| `success` | `true` 또는 `false` | |

324| `error` | 실행이 실패했을 때 오류 범주 문자열, `Error:ENOENT` 또는 `ShellError`와 같음. 게이트가 설정되면 대신 전체 오류 메시지를 포함합니다 | `OTEL_LOG_TOOL_DETAILS` |324| `error` | 실행이 실패한 경우의 오류 범주 문자열(예: `Error:ENOENT` 또는 `ShellError`). 게이트가 설정되면 대신 전체 오류 메시지를 포함합니다 | `OTEL_LOG_TOOL_DETAILS` |

325| `error_class` | 문자, 숫자 및 밑줄 외의 문자가 `_`로 대체된 식별자 형식의 오류 범주, `Error_ENOENT` 또는 `ShellError`와 같음. `error`가 전체 메시지를 전달할 때에도 범주를 전달합니다. Claude Code v2.1.268 이상 필요 | |325| `error_class` | 문자, 숫자, 밑줄 이외의 문자를 `_`로 대체한 식별자 형태의 오류 범주(예: `Error_ENOENT` 또는 `ShellError`). `error`가 전체 메시지를 포함하는 경우에도 범주를 담습니다. Claude Code v2.1.268 이상이 필요합니다 | |

326 326 

327**`claude_code.hook`**327**`claude_code.hook`**

328 328 

329이 범위는 상세 베타 추적이 활성화되었을 때만 나타나며, 이는 `ENABLE_BETA_TRACING_DETAILED=1` 및 `BETA_TRACING_ENDPOINT`가 필요합니다. 이 쌍은 또한 [로그 및 추적이 가는 위치를 변경합니다](https://code.claude.com/docs/ko/env-vars.md#variables). 쌍을 셸, 사용자 설정 또는 관리 설정에 설정하세요. 두 변수 모두 [프로젝트 및 로컬 설정](https://code.claude.com/docs/ko/settings-reference.md#variables-claude-code-ignores-in-env)에서 무시됩니다. `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` 단독으로는 이를 생성하지 않습니다.329이 스팬은 상세 베타 트레이싱이 활성화된 경우에만 나타나며, 이를 위해서는 `ENABLE_BETA_TRACING_DETAILED=1`과 `BETA_TRACING_ENDPOINT`가 필요합니다. 이 두 변수는 [로그와 트레이스가 전송되는 위치도 변경합니다](https://code.claude.com/docs/ko/env-vars.md#variables). 이 두 변수는 셸, 사용자 설정 또는 관리형 설정에서 설정하세요. 두 변수 모두 [프로젝트 및 로컬 설정](https://code.claude.com/docs/ko/settings-reference.md#variables-claude-code-ignores-in-env)에서는 무시됩니다. `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA`만으로는 이 스팬이 생성되지 않습니다.

330 330 

331대화형 CLI 세션에서 상세 베타 추적은 또한 조직이 기능에 대해 허용 목록에 있어야 합니다. Agent SDK 및 비대화형 `-p` 세션은 허용 목록이 필요하지 않습니다.331대화형 CLI 세션에서 상세 베타 트레이싱을 사용하려면 조직이 해당 기능의 허용 목록에 등록되어 있어야 합니다. Agent SDK 및 비대화형 `-p` 세션에는 허용 목록 등록이 필요하지 않습니다.

332 332 

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

334| - | - | - |334| - | - | - |

335| `hook_event` | 훅 이벤트 유형, `PreToolUse`와 같음 | |335| `hook_event` | 훅 이벤트 유형(예: `PreToolUse`) | |

336| `hook_name` | 전체 훅 이름, `PreToolUse:Write`와 같음 | |336| `hook_name` | 전체 훅 이름(예: `PreToolUse:Write`) | |

337| `num_hooks` | 실행된 일치하는 훅 명령 수 | |337| `num_hooks` | 실행된 일치하는 훅 명령의 수 | |

338| `hook_definitions` | JSON 직렬화된 훅 구성 | `OTEL_LOG_TOOL_DETAILS` |338| `hook_definitions` | JSON으로 직렬화된 훅 구성 | `OTEL_LOG_TOOL_DETAILS` |

339| `duration_ms` | 모든 일치하는 훅의 벽시계 지속 시간 | |339| `duration_ms` | 일치하는 모든 훅의 실제 경과 시간 | |

340| `num_success` | 성공적으로 완료된 훅 수 | |340| `num_success` | 성공적으로 완료된 훅 수 | |

341| `num_blocking` | 차단 결정을 반환한 훅 수 | |341| `num_blocking` | 차단 결정을 반환한 훅 수 | |

342| `num_non_blocking_error` | 차단 없이 실패한 훅 수 | |342| `num_non_blocking_error` | 차단하지 않고 실패한 훅 수 | |

343| `num_cancelled` | 완료 전에 취소된 훅 수 | |343| `num_cancelled` | 완료 전에 취소된 훅 수 | |

344 344 

345**상세 베타 추적의 콘텐츠 속성**345**상세 베타 트레이싱의 콘텐츠 속성**

346 346 

347> [!NOTE]347> [!NOTE]

348>348>

349> `new_context`, `system_reminders`, `system_prompt_preview`, `user_system_prompt`, `tool_input` 및 `response.model_output`과 같은 추가 콘텐츠 포함 속성은 상세 베타 추적이 활성화되었을 때만 내보내집니다. 이들은 안정적인 범위 스키마의 일부가 아닙니다.349> `new_context`, `system_reminders`, `system_prompt_preview`, `user_system_prompt`, `tool_input`, `response.model_output`과 같은 추가 콘텐츠 속성은 상세 베타 트레이싱이 활성화된 경우에만 출력됩니다. 이들은 안정적인 스팬 스키마의 일부가 아닙니다.

350 350 

351이러한 속성은 아래 범위에 나타나며, `Gated by`는 상세 베타 추적 외에 속성에 필요한 변수의 이름을 지정합니다. 콘텐츠 제한(기본값 60KB)보다 긴 값은 잘립니다.351이 속성들은 아래 스팬에 나타나며, `게이트`는 상세 베타 트레이싱에 더해 속성에 필요한 변수를 나타냅니다. 콘텐츠 한도(기본값 60 KB)보다 긴 값은 잘립니다.

352 352 

353| 속성 | 범위 | 설명 | 게이트 |353| 속성 | 스팬 | 설명 | 게이트 |

354| - | - | - | - |354| - | - | - | - |

355| `new_context` | `claude_code.interaction` | 사용자 프롬프트 | `OTEL_LOG_USER_PROMPTS` |355| `new_context` | `claude_code.interaction` | 사용자 프롬프트 | `OTEL_LOG_USER_PROMPTS` |

356| `new_context` | `claude_code.llm_request` | 요청과 함께 전송된 새 사용자 메시지 및 도구 결과 | `OTEL_LOG_USER_PROMPTS` |356| `new_context` | `claude_code.llm_request` | 요청과 함께 전송된 새 사용자 메시지 및 도구 결과 | `OTEL_LOG_USER_PROMPTS` |

357| `system_reminders` | `claude_code.llm_request` | 요청의 새 메시지 중 [시스템 리마인더](https://code.claude.com/docs/ko/glossary.md#system-reminder)의 텍스트 | `OTEL_LOG_USER_PROMPTS` |357| `system_reminders` | `claude_code.llm_request` | 요청의 새 메시지 중 [시스템 리마인더](https://code.claude.com/docs/ko/glossary.md#system-reminder)의 텍스트 | `OTEL_LOG_USER_PROMPTS` |

358| `system_prompt_preview` | `claude_code.llm_request` | 요청과 함께 전송된 전체 시스템 프롬프트의 처음 500자 | `OTEL_LOG_USER_PROMPTS` |358| `system_prompt_preview` | `claude_code.llm_request` | 요청과 함께 전송된 전체 시스템 프롬프트의 처음 500자 | `OTEL_LOG_USER_PROMPTS` |

359| `user_system_prompt` | `claude_code.llm_request` | `systemPrompt` SDK 옵션 또는 `--system-prompt` 및 `--append-system-prompt` 플래그를 통해 제공하는 시스템 프롬프트 텍스트만 해당. 요청당이 아닌 세션당 한 번 내보내짐 | `OTEL_LOG_USER_PROMPTS` |359| `user_system_prompt` | `claude_code.llm_request` | `systemPrompt` SDK 옵션 또는 `--system-prompt` 및 `--append-system-prompt` 플래그를 통해 제공한 시스템 프롬프트 텍스트만 포함합니다. 요청마다가 아니라 세션당 한 번 출력됩니다 | `OTEL_LOG_USER_PROMPTS` |

360| `response.model_output` | `claude_code.llm_request` | 요청에 대한 모델 응답의 텍스트 | `OTEL_LOG_USER_PROMPTS` |360| `response.model_output` | `claude_code.llm_request` | 요청에 대한 모델 응답의 텍스트 | `OTEL_LOG_USER_PROMPTS` |

361| `new_context` | `claude_code.tool` | 도구에 관계없이 해당 도구 호출의 결과 | `OTEL_LOG_TOOL_CONTENT` |361| `new_context` | `claude_code.tool` | 도구와 관계없이 도구 호출의 결과 | `OTEL_LOG_TOOL_CONTENT` |

362| `tool_input` | `claude_code.tool` | 도구 호출의 직렬화된 입력 | `OTEL_LOG_TOOL_DETAILS` |362| `tool_input` | `claude_code.tool` | 도구 호출의 직렬화된 입력 | `OTEL_LOG_TOOL_DETAILS` |

363 363 

364`OTEL_LOG_USER_PROMPTS=1`을 설정한 상세 베타 추적에서 Claude Code는 콘텐츠 제한에서 잘린 전체 시스템 프롬프트를 전달하는 `claude_code.system_prompt` 이벤트도 내보냅니다. 이 이벤트는 세션이 각각의 고유한 시스템 프롬프트를 처음 보낼 때 도착하며, 압축 후에 다시 도착합니다.364`OTEL_LOG_USER_PROMPTS=1`이 설정된 상세 베타 트레이싱에서 Claude Code는 콘텐츠 한도에서 잘린 전체 시스템 프롬프트를 담은 `claude_code.system_prompt` 이벤트도 출력합니다. 이 이벤트는 세션이 각각의 고유한 시스템 프롬프트를 처음 전송할 때, 그리고 압축 후에 다시 도착합니다.

365 365 

366### 동적 헤더366### 동적 헤더

367 367 

368동적 인증이 필요한 엔터프라이즈 환경의 경우 헤더를 동적으로 생성하도록 스크립트를 구성할 수 있습니다. 동적 헤더는 `http/protobuf` 및 `http/json` 프로토콜에만 적용됩니다. `grpc` 프로토콜을 사용하면 Claude Code는 정적 헤더 변수인 `OTEL_EXPORTER_OTLP_HEADERS` 및 신호별 변형만 사용합니다.368동적 인증이 필요한 엔터프라이즈 환경에서는 스크립트를 구성하여 헤더를 동적으로 생성할 수 있습니다. 동적 헤더는 `http/protobuf` 및 `http/json` 프로토콜에만 적용됩니다. `grpc` 프로토콜에서 Claude Code는 정적 헤더 변수인 `OTEL_EXPORTER_OTLP_HEADERS`와 그 신호별 변형만 사용합니다.

369 369 

370#### 설정 구성370#### 설정 구성

371 371 

372`.claude/settings.json`에 추가하고 경로를 자신의 스크립트로 바꾸세요:372경로를 자신의 스크립트로 바꾸어 `.claude/settings.json`에 추가합니다.

373 373 

374```json theme={null}374```json theme={null}

375{375{


377}377}

378```378```

379 379 

380값은 공백을 포함한 경로를 포함한 실행 가능한 파일의 경로이거나 인수가 있는 셸 명령줄일 수 있습니다. Windows에서 값은 항상 셸을 통해 실행되므로 공백을 포함하는 경로를 JSON 값 내에 인용하세요.380값은 공백이 포함된 경로를 포함한 실행 파일의 경로이거나, 인수가 있는 셸 명령줄일 수 있습니다. Windows에서는 값이 항상 셸을 통해 실행되므로, 공백이 포함된 경로는 JSON 값 안에서 따옴표로 감싸세요.

381 381 

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

383 383 

384스크립트는 HTTP 헤더를 나타내는 문자열 키-값 쌍이 있는 유효한 JSON을 출력해야 합니다:384스크립트는 HTTP 헤더를 나타내는 문자열 키-값 쌍으로 구성된 유효한 JSON을 출력해야 합니다.

385 385 

386```bash theme={null}386```bash theme={null}

387#!/bin/bash387#!/bin/bash


389echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"389echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"

390```390```

391 391 

392헬퍼가 실패하거나 이러한 요구 사항을 충족하지 않는 출력을 인쇄하면 내보내기가 실패하고 헬퍼가 다시 작동할 때까지 원격 분석 백엔드는 세션에서 아무것도 받지 않습니다. Claude Code는 다음에서 실패를 보고합니다:392헬퍼가 실패하거나 이 요구 사항을 충족하지 않는 출력을 내보내면, 내보내기가 실패하고 헬퍼가 다시 작동할 때까지 텔레메트리 백엔드는 해당 세션에서 아무것도 받지 못합니다. Claude Code는 다음 위치에서 실패를 보고합니다.

393 393 

394* 대화형 세션의 경고 알림, [`otelHeadersHelper failed; telemetry is not being exported`](https://code.claude.com/docs/ko/errors#otelheadershelper-failed), 헬퍼가 처음 실패할 때 세션당 한 번 표시394* 대화형 세션의 경고 알림 [`otelHeadersHelper failed; telemetry is not being exported`](https://code.claude.com/docs/ko/errors#otelheadershelper-failed)로, 헬퍼가 처음 실패할 때 세션당 한 번 표시됩니다

395* `/status` 출력395* `/status` 출력

396* [`--debug`](https://code.claude.com/docs/ko/cli-reference#cli-flags)로 실행하거나 세션에서 `/debug`를 실행한 후 디버그 로그396* [`--debug`](https://code.claude.com/docs/ko/cli-reference#cli-flags)로 실행하거나 세션에서 `/debug`를 실행한 후의 디버그 로그

397* `-p`로 시작된 비대화형 세션의 stderr397* `-p`로 시작된 비대화형 세션의 stderr

398 398 

399#### 새로 고침 동작399#### 새로 고침 동작

400 400 

401헤더 헬퍼 스크립트는 시작 시 및 토큰 새로 고침을 지원하기 위해 주기적으로 실행됩니다. 기본적으로 스크립트는 29분마다 실행됩니다. `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` 환경 변수로 간격을 사용자 정의하세요.401헤더 헬퍼 스크립트는 토큰 새로 고침을 지원하기 위해 시작 시 실행되고 이후 주기적으로 실행됩니다. 기본적으로 스크립트는 29분마다 실행됩니다. `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` 환경 변수로 간격을 사용자 지정할 수 있습니다.

402 402 

403### 다중 팀 조직 지원403### 다중 팀 조직 지원

404 404 

405여러 팀 또는 부서가 있는 조직은 `OTEL_RESOURCE_ATTRIBUTES` 환경 변수를 사용하여 다양한 그룹을 구분하기 위한 사용자 정의 속성을 추가할 수 있습니다:405여러 팀이나 부서가 있는 조직은 `OTEL_RESOURCE_ATTRIBUTES` 환경 변수를 사용하여 서로 다른 그룹을 구분하는 사용자 지정 속성을 추가할 수 있습니다.

406 406 

407```bash theme={null}407```bash theme={null}

408# Add custom attributes for team identification408# Add custom attributes for team identification

409export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"409export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"

410```410```

411 411 

412이러한 사용자 정의 속성은 모든 메트릭 및 이벤트에 포함되므로 다음을 수행할 수 있습니다:412이러한 사용자 지정 속성은 모든 메트릭과 이벤트에 포함되므로 다음과 같은 작업을 할 수 있습니다.

413 413 

414* 팀 또는 부서별로 메트릭 필터링414* 팀 또는 부서별로 메트릭 필터링

415* 비용 센터당 비용 추적415* 비용 센터별 비용 추적

416* 팀별 대시보드 생성416* 팀별 대시보드 생성

417* 특정 팀에 대한 경고 설정417* 특정 팀에 대한 알림 설정

418 418 

419Claude Code는 OTLP 리소스 블록에서 보내는 것 외에도 모든 메트릭 데이터포인트 및 이벤트 레코드에 이러한 값을 속성으로 첨부합니다. 대부분의 메트릭 백엔드는 데이터포인트 속성을 쿼리 가능한 레이블로 노출하므로 사용자 정의 키로 메트릭을 직접 그룹화하고 필터링할 수 있습니다. `vcs.*` [저장소 속성](#repository-attributes)을 제외하고 사용자 정의 키는 `user.id` 또는 `session.id`와 같은 [표준 속성](#standard-attributes)을 재정의하지 않습니다: 키가 충돌하면 Claude Code는 기본 제공 값을 유지합니다.419Claude Code는 이 값들을 OTLP 리소스 블록으로 전송할 뿐 아니라 모든 메트릭 데이터 포인트와 이벤트 레코드에 속성으로 첨부합니다. 대부분의 메트릭 백엔드는 데이터 포인트 속성을 쿼리 가능한 레이블로 노출하므로, 사용자 지정 키로 메트릭을 직접 그룹화하고 필터링할 수 있습니다. `vcs.*` [저장소 속성](#repository-attributes)을 제외하고, 사용자 지정 키는 `user.id`나 `session.id`와 같은 [표준 속성](#standard-attributes)을 재정의하지 않습니다. 키가 충돌하면 Claude Code는 내장 값을 유지합니다.

420 420 

421각 사용자 정의 키는 모든 메트릭 시리즈의 레이블이 되므로 높은 카디널리티 값은 메트릭 백엔드의 저장소 비용을 증가시킵니다. 리소스 블록에만 사용자 정의 속성을 보내고 데이터포인트 레이블에서 생략하려면 `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false`를 설정하세요. [메트릭 카디널리티 제어](#metrics-cardinality-control)를 참조하세요.421각 사용자 지정 키는 모든 메트릭 시리즈의 레이블이 되므로, 카디널리티가 높은 값은 메트릭 백엔드의 스토리지 비용을 증가시킵니다. 사용자 지정 속성을 리소스 블록으로만 전송하고 데이터 포인트 레이블에서는 생략하려면 `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false`를 설정하세요. [메트릭 카디널리티 제어](#metrics-cardinality-control)를 참조하세요.

422 422 

423> [!WARNING]423> [!WARNING]

424>424>

425> `OTEL_RESOURCE_ATTRIBUTES` 환경 변수는 엄격한 형식 요구 사항이 있는 쉼표로 구분된 키=값 쌍을 사용합니다:425> `OTEL_RESOURCE_ATTRIBUTES` 환경 변수는 엄격한 형식 요구 사항이 있는 쉼표로 구분된 key=value 쌍을 사용합니다.

426>426>

427> * **공백 허용 안 함**: 값에 공백이 포함될 수 없습니다. 예를 들어 `user.organizationName=My Company`는 유효하지 않습니다427> * **공백 허용 안 됨**: 값에 공백을 포함할 수 없습니다. 예를 들어 `user.organizationName=My Company`는 유효하지 않습니다

428> * **형식**: 쉼표로 구분된 키=값 쌍이어야 합니다: `key1=value1,key2=value2`428> * **형식**: 쉼표로 구분된 key=value 쌍이어야 합니다: `key1=value1,key2=value2`

429> * **허용된 문자**: 제어 문자, 공백, 큰따옴표, 쉼표, 세미콜론 및 백슬래시를 제외한 US-ASCII 문자만429> * **허용 문자**: 제어 문자, 공백, 큰따옴표, 쉼표, 세미콜론, 백슬래시를 제외한 US-ASCII 문자만 허용됩니다

430> * **특수 문자**: 허용된 범위 외의 문자는 퍼센트 인코딩되어야 합니다430> * **특수 문자**: 허용 범위를 벗어난 문자는 퍼센트 인코딩해야 합니다

431>431>

432> 공백이 필요한 값의 경우 대신 밑줄이나 camelCase를 사용하세요. 다음 예제는 각 형식으로 `org.name`을 설정합니다:432> 공백이 필요한 값에는 대신 밑줄이나 camelCase를 사용하세요. 다음 예시는 각 형식으로 `org.name`을 설정합니다.

433>433>

434> ```bash theme={null}434> ```bash theme={null}

435> export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"435> export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"

436> export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"436> export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"

437> ```437> ```

438>438>

439> 허용된 문자만이 아닌 모든 문자를 퍼센트 인코딩할 수 있습니다. 이 예제는 공백과 아포스트로피를 모두 인코딩합니다:439> 제외된 문자뿐 아니라 어떤 문자든 퍼센트 인코딩할 수 있습니다. 이 예시는 공백과 아포스트로피를 모두 인코딩합니다.

440>440>

441> ```bash theme={null}441> ```bash theme={null}

442> export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"442> export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"

443> ```443> ```

444>444>

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

446 446 

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

448 448 

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

450 450 

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

452 452 

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

454 454 

455```json theme={null}455```json theme={null}

456{456{


465}465}

466```466```

467 467 

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

469 469 

470이름이 도착하지 않으면 다음 원인 중 하나에 해당하는지 확인하세요:470이름이 도착하지 않으면 다음 원인 중 하나인지 확인하세요.

471 471 

472* **Desktop을 실행하는 컴퓨터에 설정한 경우**: Desktop은 해당 컴퓨터에서 설정한 값을 SSH 세션에 전달하지 않습니다472* **Desktop을 실행하는 컴퓨터에서 설정한 경우**: Desktop은 그곳에서 설정한 값을 SSH 세션에 전달하지 않습니다

473* **로그인 파일에서 export한 경우**: `/etc/profile`과 같은 파일은 로그인 셸만 읽습니다. 해당 파일에서 `export`한 값은 로그인 셸에서 시작한 Claude Code에는 전달됩니다. Desktop은 로그인 셸을 통해 Claude Code를 시작하지 않으므로 Desktop SSH 세션에는 전달되지 않습니다.473* **`/etc/profile` 또는 로그인 셸만 읽는 다른 파일에서 export한 경우**: 로그인 셸에서 `claude`를 실행하면 이름이 도착하지만 Desktop SSH 세션에서는 도착하지 않습니다. Desktop은 로그인 셸을 통해 Claude Code를 시작하지 않습니다. 대신 원격 머신의 [관리형 설정 파일](https://code.claude.com/docs/ko/desktop.md#managed-settings)에서 `env` 아래에 변수를 설정하세요.

474* **값 안에 공백이 있는 경우**: 이 경우 Claude Code는 어떤 키도 이벤트나 데이터포인트에 복사하지 않으며 오류도 보고하지 않습니다. [값에서 공백을 제거하세요](#multi-team-organization-support).474* **값 안에 공백이 있는 경우**: 이때 Claude Code는 어떤 키도 이벤트나 데이터 포인트에 복사하지 않으며 오류도 보고하지 않습니다. [값에서 공백을 제거하세요](#multi-team-organization-support).

475* **다른 곳에서 이미 변수를 설정한 경우**: 데스크톱 앱이 시작하는 세션에서는 실행 환경에 이미 설정된 변수가 [설정 파일보다 우선합니다](https://code.claude.com/docs/ko/settings-reference.md#how-env-values-interact-with-your-shell). [디버그 로그](https://code.claude.com/docs/ko/debug-your-config.md)에는 무시된 각 변수의 이름이 표시됩니다. 타사 Desktop 배포가 제공하는 환경에서 [OTLP 엔드포인트를 지정하는](#how-managed-settings-lock-the-otlp-destination) 경우, 해당 환경에는 Desktop 자체의 `OTEL_RESOURCE_ATTRIBUTES`가 포함됩니다.475* **다른 무언가가 이미 변수를 설정한 경우**: 데스크톱 앱이 시작하는 세션에서는 실행 환경에 이미 설정된 변수가 [설정 파일보다 우선합니다](https://code.claude.com/docs/ko/settings-reference.md#how-env-values-interact-with-your-shell). [디버그 로그](https://code.claude.com/docs/ko/debug-your-config.md)에 무시된 각 변수의 이름이 표시됩니다. 서드파티 Desktop 배포가 제공하는 환경에서 [OTLP 엔드포인트를 지정](#how-managed-settings-lock-the-otlp-destination)하는 경우, 해당 환경에는 Desktop 자체의 `OTEL_RESOURCE_ATTRIBUTES`가 포함됩니다.

476 476 

477### 예제 구성477### 구성 예시

478 478 

479`claude`를 실행하기 전에 이러한 환경 변수를 설정하세요. 아래의 각 시나리오는 완전한 구성을 보여주며, 각 변수는 [일반적인 구성 변수](#common-configuration-variables) 아래에 설명되어 있습니다. 구성이 적용되었는지 확인하려면 세션을 시작한 후 백엔드에서 `claude_code.session.count` 메트릭을 확인하세요. [빠른 시작](#quick-start)은 로그 전용 검증 및 아무것도 도착하지 않을 때 확인할 사항을 다룹니다.479`claude`를 실행하기 전에 이 환경 변수들을 설정하세요. 아래의 각 시나리오는 완전한 구성을 보여 주며, 각 변수는 [공통 구성 변수](#common-configuration-variables)에 설명되어 있습니다. 구성이 적용되었는지 확인하려면 세션을 시작한 후 백엔드에서 `claude_code.session.count` 메트릭을 확인하세요. 로그 전용 확인 방법과 아무것도 도착하지 않을 때 확인할 사항은 [빠른 시작](#quick-start)에서 다룹니다.

480 480 

481콘솔 디버깅을 위해 1초 내보내기 간격:4811초 내보내기 간격으로 콘솔 디버깅을 하는 경우:

482 482 

483```bash theme={null}483```bash theme={null}

484export CLAUDE_CODE_ENABLE_TELEMETRY=1484export CLAUDE_CODE_ENABLE_TELEMETRY=1


486export OTEL_METRIC_EXPORT_INTERVAL=1000486export OTEL_METRIC_EXPORT_INTERVAL=1000

487```487```

488 488 

489OTLP over gRPC:489gRPC를 통한 OTLP의 경우:

490 490 

491```bash theme={null}491```bash theme={null}

492export CLAUDE_CODE_ENABLE_TELEMETRY=1492export CLAUDE_CODE_ENABLE_TELEMETRY=1


495export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317495export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

496```496```

497 497 

498Prometheus, `http://localhost:9464/metrics`에서 스크래핑:498`http://localhost:9464/metrics`에서 스크레이핑하는 Prometheus의 경우:

499 499 

500```bash theme={null}500```bash theme={null}

501export CLAUDE_CODE_ENABLE_TELEMETRY=1501export CLAUDE_CODE_ENABLE_TELEMETRY=1

502export OTEL_METRICS_EXPORTER=prometheus502export OTEL_METRICS_EXPORTER=prometheus

503```503```

504 504 

505[자체 호스팅 환경](https://code.claude.com/docs/ko/self-hosted-environments-reference.md#pass-through-session-child-metrics)에서 세션은 러너의 기본 용량 1에서만 포트 9464를 바인딩합니다. 더 높은 용량에서 러너는 대신 자신의 `/metrics` 엔드포인트에서 세션 카운터 및 게이지를 다시 노출합니다.505[자체 호스팅 환경](https://code.claude.com/docs/ko/self-hosted-environments-reference.md#pass-through-session-child-metrics)에서는 러너의 기본 용량이 1일 때만 세션이 포트 9464에 바인딩됩니다. 용량이 더 크면 러너가 대신 자체 `/metrics` 엔드포인트에서 세션 카운터와 게이지를 다시 노출합니다.

506 506 

507여러 내보내기로 메트릭을 보내려면:507여러 익스포터로 메트릭을 보내려면:

508 508 

509```bash theme={null}509```bash theme={null}

510export CLAUDE_CODE_ENABLE_TELEMETRY=1510export CLAUDE_CODE_ENABLE_TELEMETRY=1


512export OTEL_EXPORTER_OTLP_PROTOCOL=http/json512export OTEL_EXPORTER_OTLP_PROTOCOL=http/json

513```513```

514 514 

515메트릭 및 로그를 다양한 엔드포인트 또는 백엔드로 보내려면:515메트릭과 로그를 서로 다른 엔드포인트 또는 백엔드로 보내려면:

516 516 

517```bash theme={null}517```bash theme={null}

518export CLAUDE_CODE_ENABLE_TELEMETRY=1518export CLAUDE_CODE_ENABLE_TELEMETRY=1


524export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317524export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317

525```525```

526 526 

527이벤트 또는 로그 없이 메트릭만 내보내려면:527이벤트나 로그 없이 메트릭만 내보내려면:

528 528 

529```bash theme={null}529```bash theme={null}

530export CLAUDE_CODE_ENABLE_TELEMETRY=1530export CLAUDE_CODE_ENABLE_TELEMETRY=1


533export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317533export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

534```534```

535 535 

536메트릭 없이 이벤트 및 로그만 내보내려면:536메트릭 없이 이벤트와 로그만 내보내려면:

537 537 

538```bash theme={null}538```bash theme={null}

539export CLAUDE_CODE_ENABLE_TELEMETRY=1539export CLAUDE_CODE_ENABLE_TELEMETRY=1


1403* `pre_tokens`: 압축 전 대략적인 토큰 수1403* `pre_tokens`: 압축 전 대략적인 토큰 수

1404* `post_tokens`: 압축 후 대략적인 토큰 수1404* `post_tokens`: 압축 후 대략적인 토큰 수

1405* `error`: 압축이 실패한 경우의 오류 메시지1405* `error`: 압축이 실패한 경우의 오류 메시지

1406* `precompute_reuse`: `trigger`가 `"manual"`인 경우 또는 `trigger`를 `"auto"`로 보고하는 [유휴 압축](https://code.claude.com/docs/ko/settings-reference.md#idlecompaction)의 경우에만 설정됩니다. 자동 압축은 컨텍스트 윈도우가 가득 차기 전에 백그라운드에서 요약을 미리 준비할 수 있으며, 이 속성은 압축이 준비된 요약을 재사용했는지 여부를 기록합니다. `"hit"`는 재사용되었음을 의미하고, `"miss_custom_instructions"`, `"miss_hook"`, `"miss_not_ready"`는 대신 새 요약을 계산한 이유를 나타냅니다1406* `precompute_reuse`: `trigger`가 `"manual"`인 경우, 또는 대화형 터미널 세션의 [유휴 압축](https://code.claude.com/docs/ko/settings-reference.md#idlecompaction)에서 `trigger`가 `"auto"`인 경우에만 설정됩니다. 자동 압축은 컨텍스트 윈도우가 가득 차기 전에 백그라운드에서 요약을 준비할 수 있으며, 이 속성은 압축이 준비된 요약을 재사용했는지 여부를 기록합니다. `"hit"`는 재사용되었음을 의미하며, `"miss_custom_instructions"`, `"miss_hook"`, `"miss_not_ready"`는 대신 새 요약을 계산한 이유를 나타냅니다

1407 1407 

1408#### 서브에이전트 완료 이벤트1408#### 서브에이전트 완료 이벤트

1409 1409 

Details

248 248 

249**Web and mobile**249**Web and mobile**

250 250 

251[claude.ai/code](https://claude.ai/code)에서는 프롬프트 상자 옆의 모드 드롭다운을 사용합니다. 모바일 앱에서는 프롬프트 상자의 **+** 버튼을 탭한 다음 **Permission**을 탭합니다. 클라우드 세션과 Remote Control 세션은 서로 다른 권한 모드를 제공합니다:251[claude.ai/code](https://claude.ai/code)에서는 프롬프트 상자 아래 행에 있는 모드 드롭다운을 사용합니다. 모바일 앱에서는 프롬프트 상자의 **+** 버튼을 탭한 다음 **Permission**을 탭합니다. 클라우드 세션과 Remote Control 세션은 서로 다른 권한 모드를 제공합니다:

252 252 

253* **[클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md)**: Accept edits, Plan, Auto. Accept edits는 `default` 모드에 해당합니다: 클라우드 세션은 모드에 관계없이 파일 편집을 사전 승인하므로 드롭다운은 Manual 대신 Accept edits를 표시합니다. 클라우드 세션은 여전히 설정의 `defaultMode: "acceptEdits"`를 준수합니다. 자동 모드는 조직이 허용하고 선택한 모델이 지원할 때만 나타납니다. Bypass permissions는 사용할 수 없습니다.253* **[클라우드 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md)**: Accept edits, Plan, Auto. Accept edits는 `default` 모드에 해당합니다: 클라우드 세션은 모드에 관계없이 파일 편집을 사전 승인하므로 드롭다운은 Manual 대신 Accept edits를 표시합니다. 클라우드 세션은 여전히 설정의 `defaultMode: "acceptEdits"`를 준수합니다. 자동 모드는 조직이 허용하고 선택한 모델이 지원할 때만 나타납니다. Bypass permissions는 사용할 수 없습니다.

254* **로컬 머신의 [Remote Control](https://code.claude.com/docs/ko/remote-control.md) 세션**: 직접 시작한 세션의 경우 Manual, Accept edits, Plan, Auto이며, 앱에서 Bypass permissions를 선택할 수 없습니다. Auto를 사용하려면 세션이 자동 모드 [사용 가능 요건](#eliminate-prompts-with-auto-mode)을 충족해야 합니다. 컴퓨터에서 실행 중인 프로젝트 스레드의 경우 [자신의 컴퓨터에서 스레드 실행](https://code.claude.com/docs/ko/claude-projects.md#run-a-thread-on-your-own-computer)을 참조하세요.254* **로컬 머신의 [Remote Control](https://code.claude.com/docs/ko/remote-control.md) 세션**: 직접 시작한 세션의 경우 Manual, Accept edits, Plan, Auto이며, 앱에서 Bypass permissions를 선택할 수 없습니다. Auto를 사용하려면 세션이 자동 모드 [사용 가능 요건](#eliminate-prompts-with-auto-mode)을 충족해야 합니다. 컴퓨터에서 실행 중인 프로젝트 스레드의 경우 [자신의 컴퓨터에서 스레드 실행](https://code.claude.com/docs/ko/claude-projects.md#run-a-thread-on-your-own-computer)을 참조하세요.

Details

584 584 

585모니터의 명령은 시작 위치와 참조할 수 있는 항목이 제한됩니다.585모니터의 명령은 시작 위치와 참조할 수 있는 항목이 제한됩니다.

586 586 

587* **대화형 세션 전용**: 플러그인 모니터는 대화형 세션에서 시작되며, `-p` 플래그를 사용하는 비대화형 모드에서는 절대 시작되지 않습니다. API 제공자 또는 텔레메트리 설정으로 인해 [Monitor 도구](https://code.claude.com/docs/ko/tools-reference.md#monitor-tool)를 사용할 수 없는 세션에서도 시작되지 않습니다587* **대화형 세션**: 플러그인 모니터는 `-p` 플래그를 사용하는 비대화형 모드에서는 시작되지 않습니다

588* **최소 버전**: Amazon Bedrock, Claude Platform on AWS, Google Cloud의 Agent Platform 또는 Microsoft Foundry에서 사용하거나 `DISABLE_TELEMETRY` 또는 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`이 설정된 경우, 모니터에는 Claude Code v2.1.310 이상이 필요합니다. 이 요구 사항은 [기능 플래그 가져오기](https://code.claude.com/docs/ko/env-vars.md#features-that-need-feature-flag-fetching)가 꺼져 있을 때 적용됩니다

588* **사용자 구성 사용 불가**: `command`는 [경로 변수](#path-variables-and-persistent-data)와 환경의 `${ENV_VAR}`를 받지만 `${user_config.*}`는 절대 받지 않습니다. 이를 참조하는 모니터는 시작되지 않으며, 모니터 프로세스는 `CLAUDE_PLUGIN_OPTION_<KEY>`도 받지 않습니다589* **사용자 구성 사용 불가**: `command`는 [경로 변수](#path-variables-and-persistent-data)와 환경의 `${ENV_VAR}`를 받지만 `${user_config.*}`는 절대 받지 않습니다. 이를 참조하는 모니터는 시작되지 않으며, 모니터 프로세스는 `CLAUDE_PLUGIN_OPTION_<KEY>`도 받지 않습니다

589* **세션 중 비활성화**: 세션 도중 플러그인을 비활성화해도 Claude Code는 이미 실행 중인 모니터를 중지하지 않습니다. 모니터는 세션이 종료될 때 중지됩니다590* **세션 중 비활성화**: 세션 도중 플러그인을 비활성화해도 Claude Code는 이미 실행 중인 모니터를 중지하지 않습니다. 모니터는 세션이 종료될 때 중지됩니다

590 591 


647 648 

648데이터 디렉토리 경로에서, `<id>`는 문자, 숫자, `_`, `-` 이외의 모든 문자가 `-`로 대체된 플러그인 식별자이므로, `my-plugin@my-marketplace`는 `my-plugin-my-marketplace`가 됩니다.649데이터 디렉토리 경로에서, `<id>`는 문자, 숫자, `_`, `-` 이외의 모든 문자가 `-`로 대체된 플러그인 식별자이므로, `my-plugin@my-marketplace`는 `my-plugin-my-marketplace`가 됩니다.

649 650 

650Windows에서, 대체된 경로는 셸이 백슬래시를 이스케이프로 읽지 않도록 전진 슬래시를 사용합니다.651Windows에서는 대부분의 대체된 경로가 `C:/Users/you/...`처럼 슬래시(/)를 사용합니다. [exec 형식 hook](https://code.claude.com/docs/ko/hooks.md#exec-form-and-shell-form)과 PowerShell을 통해 실행되는 hook에서는 원래의 백슬래시를 유지합니다. PowerShell은 Git Bash가 설치되어 있지 않을 때 Windows의 기본 셸입니다.

651 652 

652### 데이터 디렉토리에 종속성 설치653### 데이터 디렉토리에 종속성 설치

653 654 


670}671}

671```672```

672 673 

673첫 번째 세션 후, `~/.claude/plugins/data/<id>/node_modules`이 존재합니다. MCP 서버는 그 다음 `NODE_PATH`를 `${CLAUDE_PLUGIN_DATA}/node_modules`로 설정할 수 있습니다. 어느 필드가 어느 변수를 대체하는지의 경우, [환경 변수](https://code.claude.com/docs/ko/plugins/manifest-reference.md#environment-variables)를 참조합니다.674첫 번째 세션 후, `~/.claude/plugins/data/<id>/node_modules`이 존재합니다. 그러면 MCP 서버는 자신의 `env`에서 `NODE_PATH`를 `${CLAUDE_PLUGIN_DATA}/node_modules`로 설정할 수 있습니다. 어느 필드가 어느 변수를 대체하는지는 [환경 변수](https://code.claude.com/docs/ko/plugins/manifest-reference.md#environment-variables)를 참조하십시오.

674 675 

675## 다음 단계676## 다음 단계

676 677 

Details

148 148 

149두 이름이 다르고 누군가 매니페스트 이름으로 설치할 때 Claude Code는 `Plugin "<manifest-name>" not found in marketplace "<marketplace>"`를 보고합니다. 두 이름을 동일하게 유지합니다. Claude Code가 두 이름을 사용하는 방법에 대한 자세한 내용은 [플러그인 로딩 참조](https://code.claude.com/docs/ko/plugins/loading.md#find-where-a-plugin-came-from)를 참조하세요.149두 이름이 다르고 누군가 매니페스트 이름으로 설치할 때 Claude Code는 `Plugin "<manifest-name>" not found in marketplace "<marketplace>"`를 보고합니다. 두 이름을 동일하게 유지합니다. Claude Code가 두 이름을 사용하는 방법에 대한 자세한 내용은 [플러그인 로딩 참조](https://code.claude.com/docs/ko/plugins/loading.md#find-where-a-plugin-came-from)를 참조하세요.

150 150 

151### 사용하지 않는 서브모듈을 클론에서 제외

152 

153누군가 마켓플레이스를 추가하면 Claude Code는 저장소를 클론하고 플러그인 파일을 포함하는 git 서브모듈만 가져옵니다. Claude Code v2.1.295 이상이 필요합니다.

154 

155각 플러그인을 어디에 두는지에 따라 Claude Code가 가져오는 서브모듈이 결정됩니다:

156 

157* **하위 디렉터리에 있는 플러그인**: Claude Code는 플러그인 디렉터리 내부의 서브모듈과 플러그인을 포함하는 서브모듈을 가져옵니다. 플러그인에 필요한 서브모듈은 플러그인 디렉터리 안에 두고, 필요하지 않은 서브모듈은 밖에 두세요

158* **마켓플레이스 루트에 있는 플러그인**: 플러그인 파일 중 하나가 어느 서브모듈 내부의 경로를 참조하는 즉시 Claude Code는 저장소의 모든 서브모듈을 가져옵니다. 저장소에 빌드에서만 사용하는 대용량 서브모듈이 있다면 플러그인을 하위 디렉터리로 옮기세요

159 

160루트에 있는 플러그인이 서브모듈의 파일을 실행하는 경우, 플러그인의 훅 또는 서버 구성에 `${CLAUDE_PLUGIN_ROOT}/vendor/tool/run.sh`와 같이 파일 경로를 명시적으로 작성하세요. Claude Code는 이러한 경로를 읽어 플러그인에 서브모듈이 필요한지 판단합니다. 스크립트가 실행 중에 만드는 경로는 인식할 수 없습니다.

161 

162전체 규칙은 [마켓플레이스 저장소의 Git 서브모듈](https://code.claude.com/docs/ko/plugins/marketplace-reference.md#git-submodules-in-the-marketplace-repository)을 참조하세요.

163 

151## 플러그인 소스 선택164## 플러그인 소스 선택

152 165 

153`marketplace.json`의 각 플러그인 항목에는 Claude Code에 해당 플러그인을 가져올 위치를 알려주는 `source`가 있습니다. 플러그인의 파일이 저장된 위치에 따라 소스를 선택합니다. 표는 대부분의 마켓플레이스 소유자가 사용하는 소스를 나열합니다.166`marketplace.json`의 각 플러그인 항목에는 Claude Code에 해당 플러그인을 가져올 위치를 알려주는 `source`가 있습니다. 플러그인의 파일이 저장된 위치에 따라 소스를 선택합니다. 표는 대부분의 마켓플레이스 소유자가 사용하는 소스를 나열합니다.

Details

111각 프로토콜이 머신에서 필요한 것을 사용자에게 알려주세요:111각 프로토콜이 머신에서 필요한 것을 사용자에게 알려주세요:

112 112 

113* **SSH**: 키는 암호 프롬프트 없이 작동해야 합니다(예: `ssh-agent`에 로드됨). 호스트는 이미 `known_hosts`에 있어야 합니다.113* **SSH**: 키는 암호 프롬프트 없이 작동해야 합니다(예: `ssh-agent`에 로드됨). 호스트는 이미 `known_hosts`에 있어야 합니다.

114* **HTTPS**: Claude Code는 사용자의 git 자격 증명 도우미를 활성화 상태로 두지만 프롬프트를 금지합니다. 도우미가 이미 저장한 자격 증명은 작동합니다. 요청해야 하는 자격 증명은 실패합니다. GitHub에서 `gh auth login` 다음 `gh auth setup-git`을 실행하면 자격 증명이 저장됩니다.114* **HTTPS**: Claude Code는 사용자의 git 자격 증명 도우미를 활성화 상태로 두지만 프롬프트를 금지하며, `GIT_ASKPASS`에 설정된 것과 같은 askpass 프로그램을 실행하지 않습니다. 도우미가 이미 저장한 자격 증명은 작동합니다. 요청해야 하는 자격 증명은 실패합니다. GitHub에서 `gh auth login` 다음 `gh auth setup-git`을 실행하면 자격 증명이 저장됩니다.

115 115 

116GitHub Enterprise Server 호스트의 경우 사용자는 머신에서 해당 호스트에 대한 git 액세스가 필요합니다. [GHES의 플러그인 마켓플레이스](https://code.claude.com/docs/ko/github-enterprise-server.md#plugin-marketplaces-on-ghes)에서 각 Claude Code 표면이 GHES 호스팅 마켓플레이스에 도달하는 데 필요한 것을 참조하세요.116GitHub Enterprise Server 호스트의 경우 사용자는 머신에서 해당 호스트에 대한 git 액세스가 필요합니다. [GHES의 플러그인 마켓플레이스](https://code.claude.com/docs/ko/github-enterprise-server.md#plugin-marketplaces-on-ghes)에서 각 Claude Code 표면이 GHES 호스팅 마켓플레이스에 도달하는 데 필요한 것을 참조하세요.

117 117 

Details

238 238 

239비공개 마켓플레이스는 GitHub 또는 다른 git 호스트의 저장소에 있으며, 복제하려면 자격 증명이 필요합니다. 공개 마켓플레이스와 동일한 `/plugin marketplace add` 또는 `claude plugin marketplace add` 명령으로 추가합니다. Claude Code는 머신에 이미 있는 git 자격 증명으로 복제하고 절대 프롬프트하지 않으므로, 각 연결 방식에는 요구 사항이 있습니다:239비공개 마켓플레이스는 GitHub 또는 다른 git 호스트의 저장소에 있으며, 복제하려면 자격 증명이 필요합니다. 공개 마켓플레이스와 동일한 `/plugin marketplace add` 또는 `claude plugin marketplace add` 명령으로 추가합니다. Claude Code는 머신에 이미 있는 git 자격 증명으로 복제하고 절대 프롬프트하지 않으므로, 각 연결 방식에는 요구 사항이 있습니다:

240 240 

241* **HTTPS**: git 자격 증명 도우미가 적용되므로 `gh auth login`, macOS Keychain 또는 `git-credential-store`로 설정한 액세스가 작동합니다. 대화형 프롬프트가 억제되므로 인증한 적이 없는 호스트는 암호를 요청하는 대신 실패합니다.241* **HTTPS**: git 자격 증명 도우미가 적용되므로 `gh auth login`, macOS Keychain 또는 `git-credential-store`로 설정한 액세스가 작동합니다. `GIT_ASKPASS`에 설정된 프로그램을 포함하여 git의 프롬프트와 askpass 프로그램이 꺼져 있으므로, git이 자격 증명을 요청해야 하는 경우 복제는 확인을 요청하는 대신 실패합니다.

242* **SSH**: 호스트가 이미 `known_hosts` 파일에 있어야 하고 키가 암호 프롬프트 없이 작동해야 합니다. git 설정이 `GIT_SSH_COMMAND`, `GIT_SSH` 또는 git config의 `core.sshCommand`에서 SSH 프로그램을 이름 지정하면 Claude Code는 해당 프로그램을 실행합니다.242* **SSH**: 호스트가 이미 `known_hosts` 파일에 있어야 하고 키가 암호 프롬프트 없이 작동해야 합니다. git 설정이 `GIT_SSH_COMMAND`, `GIT_SSH` 또는 git config의 `core.sshCommand`에서 SSH 프로그램을 이름 지정하면 Claude Code는 해당 프로그램을 실행합니다.

243* **GitHub `owner/repo` 약자**: Claude Code는 SSH 키가 `github.com`에 인증되는지 확인한 후, 인증되면 SSH를 통해 복제하고 인증되지 않으면 HTTPS를 통해 복제합니다. [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](https://code.claude.com/docs/ko/env-vars#variables)을 설정하여 해당 확인을 건너뛰고 항상 HTTPS를 통해 복제합니다.243* **GitHub `owner/repo` 약자**: Claude Code는 SSH 키가 `github.com`에 인증되는지 확인한 후, 인증되면 SSH를 통해 복제하고 인증되지 않으면 HTTPS를 통해 복제합니다. [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](https://code.claude.com/docs/ko/env-vars#variables)을 설정하여 해당 확인을 건너뛰고 항상 HTTPS를 통해 복제합니다.

244 244 

Details

41* **설정이 선언하지만 `known_marketplaces.json`이 부족한 마켓플레이스**: Claude Code는 이를 복제한 다음 플러그인을 다시 로드하고 아직 캐시되지 않은 활성화된 플러그인을 다운로드합니다41* **설정이 선언하지만 `known_marketplaces.json`이 부족한 마켓플레이스**: Claude Code는 이를 복제한 다음 플러그인을 다시 로드하고 아직 캐시되지 않은 활성화된 플러그인을 다운로드합니다

42* **선언된 마켓플레이스의 소스가 설정에서 변경됨**: Claude Code는 새 소스에서 다시 가져오고 `Plugins changed. Run /reload-plugins to activate.`를 표시합니다42* **선언된 마켓플레이스의 소스가 설정에서 변경됨**: Claude Code는 새 소스에서 다시 가져오고 `Plugins changed. Run /reload-plugins to activate.`를 표시합니다

43 43 

44활성화된 플러그인이 어느 경로도 가져오지 않았고 사용 가능한 캐시 디렉토리가 없으면 `/plugin` **Errors** 탭에 `Plugin "<name>" not cached at <path>`가 표시되고, `claude plugin list`는 같은 줄에 `— run /plugin to refresh`를 추가합니다. 수정 방법은 [`Plugin "<name>" not cached at <path>`](https://code.claude.com/docs/ko/plugins/troubleshooting#plugin-not-cached-at)를 참조합니다.44활성화된 플러그인이 어느 경로도 가져오지 않았고 사용 가능한 캐시 디렉토리가 없으면 `/plugin` **Errors** 탭에 `Plugin "<name>" not cached at <path>`가 표시됩니다. 수정 방법은 [`Plugin "<name>" not cached at <path>`](https://code.claude.com/docs/ko/plugins/troubleshooting#plugin-not-cached-at)를 참조합니다.

45 45 

46## 플러그인의 출처 확인하기46## 플러그인의 출처 확인하기

47 47 

Details

155| `workflows` | Path, or array of paths | [워크플로우](https://code.claude.com/docs/ko/workflows.md#distribute-a-workflow-in-a-plugin) `.js` 파일 또는 디렉토리. 기본 `workflows/` 스캔을 대체합니다 |155| `workflows` | Path, or array of paths | [워크플로우](https://code.claude.com/docs/ko/workflows.md#distribute-a-workflow-in-a-plugin) `.js` 파일 또는 디렉토리. 기본 `workflows/` 스캔을 대체합니다 |

156| `experimental` | Object | `themes`, `monitors` 및 `evals`의 컨테이너, 매니페스트 형식이 여전히 변경될 수 있음 |156| `experimental` | Object | `themes`, `monitors` 및 `evals`의 컨테이너, 매니페스트 형식이 여전히 변경될 수 있음 |

157| `experimental.themes` | Path, or array of paths | 테마 파일 또는 디렉토리. 기본 `themes/` 스캔을 대체합니다. 최상위 `themes` 키는 여전히 로드되며 `claude plugin validate` 경고가 표시됩니다 |157| `experimental.themes` | Path, or array of paths | 테마 파일 또는 디렉토리. 기본 `themes/` 스캔을 대체합니다. 최상위 `themes` 키는 여전히 로드되며 `claude plugin validate` 경고가 표시됩니다 |

158| [`experimental.monitors`](#monitors) | Path, or inline array | 모니터 배열을 보유하는 `.json` 파일 또는 배열 자체. 기본값은 `monitors/monitors.json`입니다. 최상위 `monitors` 키는 여전히 로드되며 `claude plugin validate` 경고가 표시됩니다. 모니터는 대화형 세션에서만 실행되며 Amazon Bedrock, Google Cloud의 Agent Platform 또는 Microsoft Foundry에서는 실행되지 않습니다 |158| [`experimental.monitors`](#monitors) | Path, or inline array | 모니터 배열을 보유하는 `.json` 파일 또는 배열 자체. 기본값은 `monitors/monitors.json`입니다. 최상위 `monitors` 키는 여전히 로드되며 `claude plugin validate` 경고가 표시됩니다. 모니터는 [`-p` 플래그를 사용하면 시작되지 않습니다](https://code.claude.com/docs/ko/plugins/components#monitors) |

159| `experimental.evals` | Path, or array of paths | 기본값이 `evals/`가 아닐 때 플러그인의 [평가 사례](https://code.claude.com/docs/ko/plugin-evals.md#use-a-different-eval-directory)를 보유하는 디렉토리. `claude plugin eval --eval-dir`이 이를 재정의합니다 |159| `experimental.evals` | Path, or array of paths | 기본값이 `evals/`가 아닐 때 플러그인의 [평가 사례](https://code.claude.com/docs/ko/plugin-evals.md#use-a-different-eval-directory)를 보유하는 디렉토리. `claude plugin eval --eval-dir`이 이를 재정의합니다 |

160 160 

161Type 열에서 경로는 `"./custom/commands"`와 같이 플러그인 루트에 상대적인 문자열입니다.161Type 열에서 경로는 `"./custom/commands"`와 같이 플러그인 루트에 상대적인 문자열입니다.


606}606}

607```607```

608 608 

609Windows에서 대체된 경로는 앞으로 슬래시를 사용하므로 Shell이 백슬래시를 이스케이프로 읽지 않습니다.609Windows에서 대체된 경로는 대부분 `C:/Users/you/...`처럼 슬래시를 사용합니다. 단, [exec form 훅](https://code.claude.com/docs/ko/hooks.md#exec-form-and-shell-form)과 PowerShell을 통해 실행되는 훅에서는 원래의 백슬래시가 유지됩니다. PowerShell은 Git Bash가 설치되지 않은 경우 Windows의 기본 셸입니다.

610 610 

611## 표준 레이아웃611## 표준 레이아웃

612 612 

Details

131 131 

132## 플러그인 소스132## 플러그인 소스

133 133 

134플러그인 항목의 `source`는 Claude Code가 해당 플러그인을 어디서 가져오는지를 나타냅니다. 상대 경로 문자열이거나 자체 `source` 키가 유형을 지정하는 객체이므로, 항목은 `"source": { "source": "github", "repo": "your-org/formatter" }`와 같은 형태입니다.134플러그인 항목의 `source`는 Claude Code가 해당 플러그인 하나를 어디에서 가져오는지 지정합니다. 이 값은 상대 경로 문자열이거나, 자체 `source` 키로 유형을 지정하는 객체입니다. 따라서 항목은 `"source": { "source": "github", "repo": "your-org/formatter" }`와 같은 형태가 됩니다.

135 135 

136아래 표는 각 플러그인 소스 유형과 해당 필드를 나열합니다.136다음 표는 각 플러그인 소스 유형과 해당 필드를 보여 줍니다.

137 137 

138| 유형 | 필드 | 참고 |138| 유형 | 필드 | 참고 |

139| :- | :- | :- |139| :- | :- | :- |

140| 상대 경로 | 문자열 자체 | 마켓플레이스 내의 디렉토리로, 마켓플레이스 루트에서 확인됩니다. `./`로 시작해야 하며, [`metadata.pluginRoot`](#relative-path-plugin-source) 아래에 베어 이름을 작성하지 않는 한 그렇습니다. `"."`는 루트 자체를 의미합니다 |140| 상대 경로 | 문자열 자체 | 마켓플레이스 내부의 디렉터리로, 마켓플레이스 루트를 기준으로 확인됩니다. `./`로 시작해야 합니다. 단, [`metadata.pluginRoot` 아래의 단순 이름](#relative-path-plugin-source)을 작성하는 경우에는 예외입니다. `"."`만 단독으로 쓰면 루트 자체를 의미합니다 |

141| `github` | `repo`, `ref`, `sha` | `owner/repo` 형식의 GitHub 저장소 |141| `github` | `repo`, `ref`, `sha` | `owner/repo` 형식의 GitHub 저장소 |

142| `url` | `url`, `ref`, `sha` | URL로 지정된 모든 git 저장소 |142| `url` | `url`, `ref`, `sha` | URL로 지정하는 모든 git 저장소 |

143| `git-subdir` | `url`, `path`, `ref`, `sha` | git 저장소의 한 하위 디렉터리로, 스파스 체크아웃으로 가져옵니다 |143| `git-subdir` | `url`, `path`, `ref`, `sha` | sparse checkout으로 가져오는 git 저장소의 하위 디렉터리 하나 |

144| `npm` | `package`, `version`, `registry` | npm 레지스트리 패키지 또는 tarball 링크로, npm 클라이언트로 가져오고 설치 스크립트를 실행하지 않고 압축을 풉니다 |144| `npm` | `package`, `version`, `registry` | npm 레지스트리 패키지 또는 tarball 링크로, 사용자의 npm 클라이언트로 가져오며 설치 스크립트를 실행하지 않고 압축을 풉니다 |

145| `archive` | `url`, `sha256` | HTTPS를 통한 Zip 아카이브입니다. Claude Code v2.1.224 이상이 필요합니다 |145| `archive` | `url`, `sha256` | HTTPS를 통한 Zip 아카이브입니다. Claude Code v2.1.224 이상이 필요합니다 |

146| `command` | `command`, `timeout`, `mode` | Claude Code가 사용자의 머신에서 실행하는 명령으로 출력된 디렉토리입니다. Claude Code v2.1.229 이상이 필요합니다 |146| `command` | `command`, `timeout`, `mode` | Claude Code가 사용자 머신에서 실행하는 명령이 출력하는 디렉터리입니다. Claude Code v2.1.229 이상이 필요합니다 |

147 147 

148`url`과 `github`이라는 이름은 또한 [마켓플레이스 소스](#marketplace-sources) 유형이기도 하며, 여기서 `url`은 git 저장소가 아닌 `marketplace.json` 파일로의 직접 링크를 의미합니다. `git`은 마켓플레이스 소스로만 존재하고, `npm`은 둘 다로 존재합니다. `git-subdir`, `archive`, `command`는 플러그인 소스로만 존재합니다.148`url`과 `github`라는 이름은 [마켓플레이스 소스](#marketplace-sources) 유형이기도 하며, 이 경우 `url`은 git 저장소가 아니라 `marketplace.json` 파일에 대한 직접 링크를 의미합니다. `git`은 마켓플레이스 소스로만 존재하고, `npm`은 양쪽 모두에 존재합니다. `git-subdir`, `archive`, `command`는 플러그인 소스로만 존재합니다.

149 149 

150마켓플레이스 저장소 자체의 하위 디렉토리에 있는 플러그인의 경우 상대 경로를 사용합니다. 다른 저장소의 하위 디렉토리의 경우 `git-subdir`을 사용합니다.150마켓플레이스 저장소 자체의 하위 디렉터리에 있는 플러그인에는 상대 경로를 사용합니다. 다른 저장소의 하위 디렉터리에는 `git-subdir`를 사용합니다.

151 151 

152`github`, `url`, `git-subdir` 소스는 `ref`와 `sha` 필드를 공유합니다:152`github`, `url`, `git-subdir` 소스는 `ref` 및 `sha` 필드를 공유합니다.

153 153 

154* **`ref`**: 브랜치 또는 태그입니다. 저장소의 기본 브랜치로 기본 설정됩니다.154* **`ref`**: 브랜치 또는 태그입니다. 기본값은 저장소의 기본 브랜치입니다.

155* **`sha`**: 전체 40자 소문자 커밋 SHA입니다. `ref`와 `sha`를 모두 설정하면 Claude Code는 `sha`를 체크아웃합니다. GitHub, GitLab, Bitbucket을 포함한 대부분의 git 호스트에서 이는 `ref`로 지정된 브랜치 또는 태그가 업스트림에서 삭제되었더라도 커밋이 여전히 저장소에서 도달 가능한 한 설치가 성공함을 의미합니다. AWS CodeCommit과 같은 일부 서버는 SHA로 커밋을 가져오는 것을 지원하지 않습니다. 이러한 서버에서는 `ref`가 여전히 존재해야 하고 고정된 커밋이 이로부터 도달 가능해야 합니다.155* **`sha`**: 40자로 된 전체 소문자 커밋 SHA입니다. `ref`와 `sha`를 모두 설정하면 Claude Code는 `sha`를 체크아웃합니다. GitHub, GitLab, Bitbucket을 포함한 대부분의 git 호스트에서는, `ref`가 가리키는 브랜치나 태그가 이후 업스트림에서 삭제되었더라도 해당 커밋이 저장소에서 여전히 도달 가능하다면 설치가 성공한다는 의미입니다. AWS CodeCommit과 같은 일부 서버는 SHA로 커밋을 가져오는 기능을 지원하지 않습니다. 이러한 서버에서는 `ref`가 여전히 존재해야 하며, 고정된 커밋이 그 `ref`에서 도달 가능해야 합니다.

156 156 

157각 유형이 어떻게 가져오고, 캐시되고, 버전 관리되는지는 [플러그인 로딩 참조](https://code.claude.com/docs/ko/plugins/loading.md)를 참조하세요.157각 유형을 가져오고, 캐시하고, 버전을 관리하는 방식은 [플러그인 로딩 레퍼런스](https://code.claude.com/docs/ko/plugins/loading.md)를 참조하세요.

158 158 

159### 상대 경로 플러그인 소스159### 상대 경로 플러그인 소스

160 160 

161경로는 마켓플레이스 루트에서 확인됩니다. `./plugins/formatter`는 마켓플레이스 파일이 `<root>/.claude-plugin/`에 있더라도 `<root>/plugins/formatter`입니다.161경로는 마켓플레이스 루트를 기준으로 확인됩니다. 마켓플레이스 파일이 `<root>/.claude-plugin/`에 있더라도 `./plugins/formatter`는 `<root>/plugins/formatter`입니다.

162 162 

163`..`를 포함하는 경로는 검증에 실패합니다. macOS와 Linux에서 Claude Code는 선행 `./` 이후에 백슬래시를 포함하는 항목 경로를 거부하므로 경로를 슬래시로 작성합니다.163`..`를 포함하는 경로는 유효성 검사에 실패합니다. macOS와 Linux에서 Claude Code는 앞의 `./` 이후 어디에든 백슬래시가 포함된 항목 경로를 거부하므로, 경로는 슬래시로 작성해야 합니다.

164 164 

165```json theme={null}165```json theme={null}

166{ "name": "formatter", "source": "./plugins/formatter" }166{ "name": "formatter", "source": "./plugins/formatter" }

167```167```

168 168 

169상대 경로는 Claude Code가 마켓플레이스의 파일을 가지고 있을 때만 확인되므로 [마켓플레이스 소스](#marketplace-sources) 유형을 확인합니다:169상대 경로는 Claude Code가 마켓플레이스의 파일을 가지고 있을 때만 확인되므로, [마켓플레이스 소스](#marketplace-sources) 유형을 확인하세요.

170 170 

171* **`github`, `git`, `file`, `directory`**: Claude Code가 마켓플레이스의 파일을 가지고 있습니다.171* **`github`, `git`, `file`, `directory`**: Claude Code가 마켓플레이스의 파일을 가지고 있습니다.

172* **`url`**: Claude Code는 `marketplace.json`만 가져오므로 상대 경로를 확인할 수 없습니다. 각 플러그인에 `github` 또는 `git-subdir`과 같은 객체 소스를 제공합니다.172* **`url`**: Claude Code는 `marketplace.json`만 가져오므로 상대 경로를 확인할 수 없습니다. 대신 각 플러그인에 `github` 또는 `git-subdir`와 같은 객체 소스를 지정하세요.

173* **`settings`**: 상대 경로는 완전히 거부됩니다.173* **`settings`**: 상대 경로가 즉시 거부됩니다.

174 174 

175#### pluginRoot 아래의 베어 이름175#### 마켓플레이스 저장소의 Git 서브모듈

176 176 

177베어 이름은 `/`가 없는 단일 디렉토리 이름입니다(예: `"formatter"`). `./` 경로 대신 베어 이름을 작성하려면 [`metadata.pluginRoot`](#top-level-fields)를 이들이 확인되는 디렉토리로 설정합니다. `"pluginRoot": "./plugins"`를 사용하면 `"source": "formatter"`는 `./plugins/formatter`로 확인됩니다. Claude Code v2.1.239 이상이 필요합니다.177Claude Code는 마켓플레이스 저장소를 클론할 때 플러그인 파일을 담고 있는 git 서브모듈만 가져옵니다. Claude Code v2.1.295 이상이 필요합니다.

178 178 

179`metadata.pluginRoot`에는 다음과 같은 제한이 있습니다:179이전 버전은 중첩된 서브모듈을 포함해 모든 서브모듈을 가져옵니다. 저장소에 큰 서브모듈이 있으면, Claude Code가 이를 가져오는 동안 [클론 타임아웃](https://code.claude.com/docs/ko/plugins/troubleshooting.md#git-clone-timed-out-after-120s)을 초과할 수 있습니다.

180 180 

181* 그 자체가 마켓플레이스 내의 상대 경로여야 합니다.181`./plugins/formatter`와 같이 하위 디렉터리에 있는 플러그인의 경우, Claude Code는 다음과 같은 경우에 서브모듈을 가져옵니다.

182 

183* **플러그인이 서브모듈 내부에 있는 경우**: 서브모듈이 플러그인의 디렉터리이거나 그 상위 디렉터리입니다

184* **서브모듈이 플러그인 내부에 있는 경우**: 서브모듈이 플러그인 디렉터리 아래 어딘가에 있습니다

185* **심볼릭 링크가 서브모듈을 가리키는 경우**: 저장소에 커밋된 링크의 대상이 서브모듈 안에 있습니다

186 

187`"source": "./"`로 마켓플레이스 루트에 있는 플러그인은 저장소의 모든 서브모듈을 받거나 하나도 받지 않습니다. 다음 중 하나가 어떤 서브모듈이든 가리키면 Claude Code는 모든 서브모듈을 가져옵니다.

188 

189* **컴포넌트 디렉터리**: `skills/`, `hooks/`, `bin/`과 같이 플러그인 컴포넌트를 담고 있는 루트의 디렉터리

190* **플러그인 구성의 경로**: 플러그인의 마켓플레이스 항목, `plugin.json`, 또는 `.mcp.json`이나 `hooks/hooks.json`과 같은 설정 파일에 있는 경로

191* **심볼릭 링크**: 저장소에 커밋된 링크

192* **플러그인 파일의 텍스트**: 설정 파일이나 컴포넌트 디렉터리 아래의 파일에 작성된 `vendor/tool`과 같은 서브모듈 경로

193 

194어느 것도 해당하지 않으면 Claude Code는 해당 플러그인에 대해 서브모듈을 가져오지 않습니다. 프로젝트이면서 동시에 플러그인인 저장소에는 프로젝트 빌드에서만 사용하는 서브모듈이 있는 경우가 많으며, 이 규칙은 그러한 서브모듈을 제외합니다.

195 

196Claude Code는 또한 다음과 같이 어떤 서브모듈이 플러그인 파일을 담고 있는지 판단할 수 없는 경우에도 모든 서브모듈을 가져옵니다.

197 

198* **루트의 `SKILL.md`**: 이 경우 저장소 전체가 하나의 스킬 디렉터리가 됩니다

199* **Claude Code가 읽을 수 없는 파일**: 마켓플레이스 파일, 플러그인의 설정 파일 중 하나, 또는 `.gitmodules`

200 

201`--sparse`로 마켓플레이스를 추가하거나 소스에 `sparsePaths`가 설정되어 있으면, Claude Code는 거기에 지정된 디렉터리만 체크아웃하고 서브모듈은 가져오지 않습니다. 이전 버전도 동일하게 동작합니다.

202 

203플러그인이 사용하지 않는 서브모듈을 클론에서 제외하려면 [사용하지 않는 서브모듈을 클론에서 제외하기](https://code.claude.com/docs/ko/plugins/create-marketplace.md#keep-unused-submodules-out-of-the-clone)를 참조하세요.

204 

205#### pluginRoot 아래의 단순 이름

206 

207단순 이름은 `"formatter"`처럼 `/`가 없는 단일 디렉터리 이름입니다. `./` 경로 대신 단순 이름을 작성하려면 [`metadata.pluginRoot`](#top-level-fields)를 단순 이름이 확인될 기준 디렉터리로 설정합니다. `"pluginRoot": "./plugins"`로 설정하면 `"source": "formatter"`는 `./plugins/formatter`로 확인됩니다. Claude Code v2.1.239 이상이 필요합니다.

208 

209`metadata.pluginRoot`에는 다음과 같은 제한이 있습니다.

210 

211* 자체적으로 마켓플레이스 내부의 상대 경로여야 합니다.

182* 이미 `./`로 시작하는 소스에는 영향을 주지 않습니다.212* 이미 `./`로 시작하는 소스에는 영향을 주지 않습니다.

183* `team-a/formatter`와 같이 `/`를 포함하는 소스는 베어 이름이 아니며 `metadata.pluginRoot`가 설정되어 있더라도 여전히 `./` 접두사가 필요합니다.213* `team-a/formatter`처럼 `/`를 포함하는 소스는 단순 이름이 아니므로, `metadata.pluginRoot`가 설정되어 있더라도 여전히 `./` 접두사가 필요합니다.

184 214 

185### github 플러그인 소스215### github 플러그인 소스

186 216 

187`repo`는 `owner/repo`를 사용합니다. `ref`와 `sha`는 선택 사항입니다.217`repo`는 `owner/repo`를 받습니다. `ref`와 `sha`는 선택 사항입니다.

188 218 

189```json theme={null}219```json theme={null}

190{220{


200 230 

201### url 플러그인 소스231### url 플러그인 소스

202 232 

203`url`은 전체 git URL입니다: `https://`, `http://`, `file://`, 또는 `git@`. `.git` 접미사는 필요하지 않으므로 Azure DevOps 및 AWS CodeCommit URL이 그대로 작동합니다. 이 유형은 `owner/repo` 단축형을 사용하지 않습니다.233`url`은 `https://`, `http://`, `file://` 또는 `git@` 형식의 전체 git URL입니다. `.git` 접미사는 필요하지 않으므로 Azure DevOps 및 AWS CodeCommit URL을 그대로 사용할 수 있습니다. 이 유형은 `owner/repo` 약식 표기를 받지 않습니다.

204 234 

205```json theme={null}235```json theme={null}

206{236{


215 245 

216### git-subdir 플러그인 소스246### git-subdir 플러그인 소스

217 247 

218`url`은 전체 git URL 또는 GitHub `owner/repo` 단축형을 허용합니다. `path`는 플러그인을 보유한 하위 디렉터리이며, Claude Code는 해당 하위 디렉터리만 체크아웃합니다. `https` 또는 SSH URL을 통해서는 Claude Code가 서버에 부분 클론을 요청하므로, 부분 클론을 지원하는 호스트에서는 대규모 모노레포의 플러그인이 저장소의 나머지 부분을 다운로드하지 않고 설치됩니다.248`url`은 전체 git URL 또는 GitHub `owner/repo` 약식 표기를 받습니다. `path`는 플러그인을 담고 있는 하위 디렉터리이며, Claude Code는 해당 하위 디렉터리만 체크아웃합니다. `https` 또는 SSH URL을 통해 Claude Code는 서버에 부분 클론을 요청하므로, 부분 클론을 지원하는 호스트에서는 대규모 모노레포의 플러그인을 저장소의 나머지 부분을 다운로드하지 않고 설치할 수 있습니다.

219 249 

220```json theme={null}250```json theme={null}

221{251{


230 260 

231### npm 플러그인 소스261### npm 플러그인 소스

232 262 

233`npm` 소스는 다음 필드를 사용합니다:263`npm` 소스는 다음 필드를 받습니다.

234 264 

235* `package`: `@your-org/formatter`와 같은 레지스트리 패키지 이름, `@your-org/formatter@2.0.0`과 같이 버전이 추가된 이름, 또는 패키지의 tarball 파일에 대한 `https` 링크265* `package`: `@your-org/formatter`와 같은 레지스트리 패키지 이름, `@your-org/formatter@2.0.0`처럼 버전이 덧붙은 이름, 또는 패키지 tarball 파일에 대한 `https` 링크

236* `version`: 버전, semver 범위 또는 dist-tag로, `package`가 버전이 추가되지 않은 패키지 이름일 때 사용됩니다. 생략하면 `latest`를 가져옵니다266* `version`: 버전, semver 범위 또는 dist-tag로, `package`가 버전이 덧붙지 않은 패키지 이름일 때 사용됩니다. 생략하면 `latest`를 가져옵니다

237* `registry`: 기본 레지스트리에 없는 패키지의 레지스트리 URL267* `registry`: 기본 레지스트리에 없는 패키지의 레지스트리 URL

238 268 

239Claude Code는 npm 클라이언트로 패키지를 가져옵니다. 패키지의 설치 스크립트(예: `preinstall` 또는 `postinstall`)는 절대 실행되지 않으며, 해당 종속성은 가져오기 중에 설치되지 않습니다. 패키지의 `package.json` 옆에 지원되는 lockfile이 있으면 Claude Code는 스크립트도 비활성화된 상태에서 별도의 단계에서 해당 [Node.js 패키지 종속성](https://code.claude.com/docs/ko/plugins/loading.md#node-js-package-dependencies)을 설치합니다.269Claude Code는 사용자의 npm 클라이언트로 패키지를 가져옵니다. `preinstall`이나 `postinstall`과 같은 패키지의 설치 스크립트는 절대 실행되지 않으며, 가져오는 동안 의존성도 설치되지 않습니다. 패키지의 `package.json` 옆에 지원되는 lockfile이 있으면, Claude Code는 별도의 단계에서 해당 [Node.js 패키지 의존성](https://code.claude.com/docs/ko/plugins/loading.md#node-js-package-dependencies)을 설치하며, 이때도 스크립트는 비활성화됩니다.

240 270 

241Claude Code는 무엇이든 가져오기 전에 `package` 값을 확인합니다. 거부된 값은 해당 값과 이유를 명시하는 메시지와 함께 설치를 실패시킵니다. 거부되는 값은 다음과 같습니다:271Claude Code는 무엇이든 가져오기 전에 `package` 값을 확인합니다. 거부된 값은 해당 값과 이유를 명시하는 메시지와 함께 설치에 실패합니다. 거부되는 값은 다음과 같습니다.

242 272 

243* **git 주소, 폴더 또는 `file:` 경로, `npm:` 별칭**: git 저장소에는 [`github`, `url` 또는 `git-subdir` 소스](#plugin-sources)를, 마켓플레이스 내의 폴더에는 상대 경로를, 별칭에는 패키지 자체의 이름을 사용합니다273* **git 주소, 폴더 또는 `file:` 경로, 또는 `npm:` 별칭**: git 저장소에는 [`github`, `url` 또는 `git-subdir` 소스](#plugin-sources)를, 마켓플레이스의 폴더에는 상대 경로를, 별칭에는 패키지 자체의 이름을 사용하세요

244* **github.com, gist.github.com, gitlab.com, bitbucket.org 또는 git.sr.ht의 tarball 링크**: 링크가 GitHub 릴리스 다운로드인 경우에도 거부되며, `gitlab.com/api/v4/` 아래의 GitLab npm 레지스트리 링크인 경우는 예외입니다274* **github.com, gist.github.com, gitlab.com, bitbucket.org 또는 git.sr.ht의 tarball 링크**: 링크가 GitHub 릴리스 다운로드인 경우에도 거부됩니다. 단, `gitlab.com/api/v4/` 아래의 GitLab npm 레지스트리 링크는 예외입니다

245* **`http`를 통한 tarball 링크**: 설치하는 사용자 자신의 기본 npm 레지스트리를 가리키지 않는 한 거부됩니다275* **`http`를 통한 tarball 링크**: 설치하는 사용자 자신의 기본 npm 레지스트리를 가리키는 경우가 아니면 거부됩니다

246 276 

247`registry` URL은 설치하는 사용자 자신의 기본 npm 레지스트리가 아닌 한 `https`를 사용해야 합니다. 그 외의 `http` 레지스트리를 사용하면 npm이 레지스트리에 접속하기 전에 설치가 실패합니다.277`registry` URL은 설치하는 사용자 자신의 기본 npm 레지스트리가 아닌 한 `https`를 사용해야 합니다. 그 외의 `http` 레지스트리를 사용하면 npm이 해당 레지스트리에 접속하기 전에 설치가 실패합니다.

248 278 

249```json theme={null}279```json theme={null}

250{280{


260 290 

261### archive 플러그인 소스291### archive 플러그인 소스

262 292 

263`url`은 `https://`를 사용해야 하며 루프백, 링크-로컬 또는 클라우드 메타데이터 호스트를 가리킬 수 없습니다. 다운로드의 크기, 타임아웃, 리디렉션 및 추출 제한에 대해서는 [호스팅된 파일의 다운로드 제한 내에 유지](https://code.claude.com/docs/ko/plugins/host-marketplace.md#stay-within-the-download-limits-for-hosted-files)를 참조하세요.293`url`은 `https://`를 사용해야 하며 루프백, 링크 로컬 또는 클라우드 메타데이터 호스트를 가리킬 수 없습니다. 다운로드의 크기, 타임아웃, 리디렉션 및 압축 해제 제한은 [호스팅된 파일의 다운로드 제한 준수하기](https://code.claude.com/docs/ko/plugins/host-marketplace.md#stay-within-the-download-limits-for-hosted-files)를 참조하세요.

264 294 

265플러그인 루트는 zip의 맨 위 또는 한 디렉토리 아래에 있을 수 있습니다.295플러그인 루트는 zip의 최상위에 있거나 한 단계 아래 디렉터리에 있을 수 있습니다.

266 296 

267`sha256`은 아카이브의 다이제스트로 64개의 16진 문자(대문자 또는 소문자)입니다. 이를 설정하면 Claude Code는 일치하지 않는 다운로드를 거부합니다.297`sha256`은 대문자 또는 소문자로 된 64자의 16진수 아카이브 다이제스트입니다. 이 값을 설정하면 Claude Code는 일치하지 않는 다운로드를 거부합니다.

268 298 

269```json theme={null}299```json theme={null}

270{300{


279 309 

280### command 플러그인 소스310### command 플러그인 소스

281 311 

282사용자의 머신에 설치된 도구가 플러그인 디렉토리를 생성할 때(예: 사용자가 선택한 도구 체인에 대해 플러그인을 렌더링하는 IDE) `command` 소스를 사용합니다. Claude Code는 사용자가 플러그인을 설치하거나 업데이트할 때 명령을 실행하고, [세션당 한 번 다시](https://code.claude.com/docs/ko/plugins/loading.md#when-a-command-source-re-runs) 실행하므로 사용자는 재설치 없이 도구의 변경된 출력을 얻습니다.312사용자가 선택한 툴체인에 맞게 플러그인을 렌더링하는 IDE처럼, 사용자 머신에 설치된 도구가 플러그인 디렉터리를 생성하는 경우 `command` 소스를 사용합니다. Claude Code는 사용자가 플러그인을 설치하거나 업데이트할 때 명령을 실행하고, [세션마다 한 번 다시](https://code.claude.com/docs/ko/plugins/loading.md#when-a-command-source-re-runs) 실행하므로, 사용자는 재설치하지 않고도 도구의 변경된 출력을 받을 수 있습니다.

283 313 

284`command` 소스는 다음 필드를 사용합니다:314`command` 소스는 다음 필드를 받습니다.

285 315 

286* `command`: 플러그인 디렉토리의 절대 경로를 한 줄로 출력하고 0으로 종료하는 셸 명령입니다. Claude Code는 실행하기 전에 사용자에게 전체 문자열을 검토하도록 표시합니다. 인쇄 가능한 ASCII로 작성하고, 최대 500자이며, 4개 이상의 연속 공백이 없어야 합니다.316* `command`: 플러그인 디렉터리의 절대 경로를 한 줄로 출력하고 0으로 종료하는 셸 명령입니다. Claude Code는 실행하기 전에 검토할 수 있도록 전체 문자열을 사용자에게 보여 줍니다. 출력 가능한 ASCII로 최대 500자까지 작성하며, 네 개 이상의 연속된 공백을 포함하지 않아야 합니다.

287* `timeout`: 1에서 600 사이의 전체 초 수입니다. 기본값은 60입니다.317* `timeout`: 1에서 600 사이의 정수 초입니다. 기본값은 60입니다.

288* `mode`: `copy`(기본값) 또는 `link`입니다. [복사 모드 및 링크 모드](#copy-mode-and-link-mode)를 참조하세요.318* `mode`: 기본값인 `copy` 또는 `link`입니다. [복사 모드와 링크 모드](#copy-mode-and-link-mode)를 참조하세요.

289 319 

290```json theme={null}320```json theme={null}

291{321{


298}328}

299```329```

300 330 

301사용자가 명령을 수락하는 방법은 [셸에서 설치](https://code.claude.com/docs/ko/plugins/install.md#install-from-your-shell)를 참조하세요. 변경 후 사용자가 보는 내용은 [명령 소스의 명령 변경](https://code.claude.com/docs/ko/plugins/host-marketplace.md#change-the-command-of-a-command-source)을 참조하세요. 관리자는 [`disableCommandPluginSources`](https://code.claude.com/docs/ko/settings-reference#disablecommandpluginsources)로 명령 소스를 비활성화합니다.331사용자가 명령을 승인하는 방법은 [셸에서 설치하기](https://code.claude.com/docs/ko/plugins/install.md#install-from-your-shell)를 참조하세요. 명령을 변경한 후 사용자에게 표시되는 내용은 [command 소스의 명령 변경하기](https://code.claude.com/docs/ko/plugins/host-marketplace.md#change-the-command-of-a-command-source)를 참조하세요. 관리자는 [`disableCommandPluginSources`](https://code.claude.com/docs/ko/settings-reference#disablecommandpluginsources)로 command 소스를 끌 수 있습니다.

302 332 

303#### 명령이 수행해야 할 작업333#### 명령이 수행해야 하는 작업

304 334 

305명령이 다음 요구 사항을 충족하도록 작성합니다:335다음 요구 사항을 충족하도록 명령을 작성하세요.

306 336 

307* **셸 및 작업 디렉토리**: Claude Code는 사용자의 홈 디렉토리에서 `sh` 또는 Windows의 `cmd.exe`를 통해 명령을 실행합니다. 절대 경로 또는 `PATH`의 명령을 제공합니다.337* **셸과 작업 디렉터리**: Claude Code는 사용자의 홈 디렉터리에서 `sh`를 통해, 또는 Windows에서는 `cmd.exe`를 통해 명령을 실행합니다. 절대 경로나 `PATH`에 있는 명령을 지정하세요.

308* **출력**: stdout에 정확히 한 줄(플러그인 디렉토리의 절대 경로)을 출력하고 `timeout` 초 내에 0으로 종료합니다.338* **출력**: stdout에 정확히 한 줄, 즉 플러그인 디렉터리의 절대 경로를 출력하고 `timeout`초 이내에 0으로 종료해야 합니다.

309* **디렉토리 내용**: 디렉토리는 명령이 종료될 때까지 완전한 플러그인을 보유합니다. 경로는 실행마다 다를 수 있습니다.339* **디렉터리 내용**: 명령이 종료될 때까지 디렉터리에 완전한 플러그인이 들어 있어야 합니다. 경로는 실행할 때마다 달라질 수 있습니다.

310 340 

311#### 설치 또는 업데이트를 실패하게 하는 출력341#### 설치 또는 업데이트를 실패시키는 출력

312 342 

313명령이 0이 아닌 값으로 종료되거나, `timeout`보다 오래 실행되거나, 하나의 절대 경로 이외의 것을 출력할 때 설치 또는 업데이트가 실패합니다. 또한 인쇄된 디렉토리가 다음 중 하나일 때도 실패합니다:343명령이 0이 아닌 값으로 종료되거나, `timeout`보다 오래 실행되거나, 하나의 절대 경로 이외의 내용을 출력하면 설치 또는 업데이트가 실패합니다. 출력된 디렉터리가 다음 중 하나인 경우에도 실패합니다.

314 344 

315* **플러그인 콘텐츠 없음**: 인쇄된 디렉토리의 최상위 수준에 `.claude-plugin/` 디렉토리 또는 `skills/`, `commands/`, `agents/`, `hooks/` 디렉토리와 같은 플러그인 콘텐츠가 없습니다.345* **플러그인 내용 없음**: 출력된 디렉터리의 최상위에 `.claude-plugin/` 디렉터리나 `skills/`, `commands/`, `agents/`, `hooks/` 디렉터리와 같은 플러그인 내용이 없습니다.

316* **세션의 자체 디렉토리**: 인쇄된 디렉토리는 Claude Code가 시작된 디렉토리 또는 그 부모 중 하나입니다.346* **세션 자체의 디렉터리**: 출력된 디렉터리가 Claude Code가 시작된 디렉터리이거나 그 상위 디렉터리 중 하나입니다.

317* **네트워크 경로**: Windows에서 인쇄된 경로는 UNC 경로입니다.347* **네트워크 경로**: Windows에서 출력된 경로가 UNC 경로입니다.

318* **복사하기에 너무 큼**: 복사 모드에서 디렉토리는 256 MiB보다 크거나 20,000개 이상의 항목을 가집니다.348* **복사하기에 너무 큼**: 복사 모드에서 디렉터리가 256 MiB보다 크거나 항목이 20,000개를 넘습니다.

319 349 

320#### 복사 모드 및 링크 모드350#### 복사 모드와 링크 모드

321 351 

322`mode`는 Claude Code가 인쇄된 디렉토리를 복사할지 아니면 제자리에서 사용할지를 결정합니다:352`mode`는 Claude Code가 출력된 디렉터리를 복사할지, 아니면 제자리에서 사용할지를 결정합니다.

323 353 

324* **`copy`**: Claude Code는 디렉토리를 플러그인 캐시에 복사하고 복사된 파일의 해시에서 [플러그인 버전](https://code.claude.com/docs/ko/plugins/loading.md#how-claude-code-computes-the-version)을 파생합니다. 도구는 명령이 종료된 후 디렉토리를 삭제하거나 다시 쓸 수 있습니다. 동일한 파일을 생성하는 재실행은 최신 상태로 계산됩니다.354* **`copy`**: Claude Code는 디렉터리를 플러그인 캐시로 복사하고 복사된 파일의 해시에서 [플러그인 버전](https://code.claude.com/docs/ko/plugins/loading.md#how-claude-code-computes-the-version)을 도출합니다. 도구는 명령이 종료된 후 디렉터리를 삭제하거나 다시 작성할 수 있습니다. 동일한 파일을 생성하는 재실행은 최신 상태로 간주됩니다.

325* **`link`**: Claude Code는 인쇄된 디렉토리의 각 최상위 항목에 대한 링크로 플러그인의 캐시 항목을 채우고 파일을 제자리에서 로드합니다. 아무것도 복사되지 않고, 파일 내용이 해시되지 않으며, 크기 제한이 적용되지 않습니다. 렌더링된 SDK 내보내기와 같이 복사하기에 너무 큰 디렉토리에 사용합니다.355* **`link`**: Claude Code는 출력된 디렉터리의 각 최상위 항목에 대한 링크로 플러그인의 캐시 항목을 채우고 파일을 제자리에서 로드합니다. 아무것도 복사되지 않고, 파일 내용은 해시되지 않으며, 크기 제한도 적용되지 않습니다. 렌더링된 SDK 내보내기처럼 복사하기에 너무 큰 디렉터리에 사용하세요.

326 356 

327링크 모드 플러그인에는 다음과 같은 요구 사항이 있습니다:357링크 모드 플러그인에는 다음 요구 사항이 있습니다.

328 358 

329* **디렉토리를 제자리에 유지**: Claude Code는 모든 시작 시 링크를 통해 플러그인을 로드하므로 인쇄된 디렉토리는 플러그인이 설치된 상태로 유지되는 동안 그 위치에 남아 있어야 합니다.359* **디렉터리를 제자리에 유지**: Claude Code는 시작할 때마다 링크를 통해 플러그인을 로드하므로, 플러그인이 설치되어 있는 동안에는 출력된 디렉터리가 그 위치에 그대로 있어야 합니다.

330* **새 콘텐츠를 신호하기 위해 다른 경로 출력**: 버전은 인쇄된 디렉토리의 실제 경로 및 최상위 항목에서 나오며, 내부의 파일에서는 나오지 않습니다.360* **새 내용을 알리려면 다른 경로를 출력**: 버전은 내부 파일이 아니라 출력된 디렉터리의 실제 경로와 그 최상위 항목에서 도출됩니다.

331* **디렉토리 내에 최상위 심볼릭 링크 유지**: 최상위 항목이 인쇄된 디렉토리 외부를 가리키는 심볼릭 링크인 경우 설치가 실패합니다.361* **최상위 심볼릭 링크를 디렉터리 내부에 유지**: 최상위 항목이 출력된 디렉터리 외부를 가리키는 심볼릭 링크이면 설치가 실패합니다.

332* **`node_modules` 포함**: Claude Code는 링크 모드 플러그인에 대해 [Node.js 패키지 종속성 설치](https://code.claude.com/docs/ko/plugins/loading.md#node-js-package-dependencies)를 건너뛰므로 플러그인이 필요한 패키지를 이미 포함하는 디렉토리를 출력합니다.362* **`node_modules` 포함**: Claude Code는 링크 모드 플러그인에 대해 [Node.js 패키지 의존성 설치](https://code.claude.com/docs/ko/plugins/loading.md#node-js-package-dependencies)를 건너뛰므로, 플러그인에 필요한 패키지가 이미 들어 있는 디렉터리를 출력하세요.

333* **디렉토리 내에서 시작된 세션**: 인쇄된 디렉토리 또는 그 아래 어디서나 시작된 세션은 플러그인을 로드하지 않습니다.363* **디렉터리 내부에서 시작된 세션**: 출력된 디렉터리 또는 그 아래 어디에서든 시작된 세션은 플러그인을 로드하지 않습니다.

334* **Windows에서 아님**: Claude Code는 Windows에서 링크 모드 플러그인 설치를 거부합니다. 거기서 `"mode": "copy"`를 선언합니다.364* **Windows에서는 사용 불가**: Claude Code는 Windows에서 링크 모드 플러그인 설치를 거부합니다. Windows에서는 `"mode": "copy"`를 선언하세요.

335 365 

336## 마켓플레이스 소스366## 마켓플레이스 소스

337 367 

Details

313 313 

314#### 거부된 호출이 반환하는 값314#### 거부된 호출이 반환하는 값

315 315 

316결과에서 `<reason>`은 `the session was stopped and nobody has sent input since`를 나타냅니다.316결과에서 `<reason>`은 호출이 거부된 사유를 나타냅니다. 중단 후에는 `the session was stopped and nobody has sent input since`입니다. 다른 사유는 [`claude -p` 실행 및 Agent SDK 세션에서 거부되는 호출](#calls-refused-in-non-interactive-runs)을 참조하십시오.

317 317 

318| 거부되는 일부 호출 | 사용자의 다음 입력 전까지의 결과 |318| 거부되는 일부 호출 | 결과 |

319| :- | :- |319| :- | :- |

320| `$.prompt.submit` | `{ drop: '<reason>' }`으로 resolve되며 프롬프트를 대기열에 넣지 않습니다 |320| `$.prompt.submit` | `{ drop: '<reason>' }`으로 resolve되며 프롬프트를 대기열에 넣지 않습니다 |

321| `$.command.run` | 메시지가 `<reason>`으로 끝나는 오류와 함께 reject됩니다 |321| `$.command.run` | 메시지가 `<reason>`으로 끝나는 오류와 함께 reject됩니다 |


324| [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md) 팀원에 대한 `$.session.send` | `{ isDelivered: false, reason: 'Teammate "<name>" was not messaged: <reason>.' }`으로 resolve되며, 여기서 `<name>`은 팀원의 이름입니다 |324| [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md) 팀원에 대한 `$.session.send` | `{ isDelivered: false, reason: 'Teammate "<name>" was not messaged: <reason>.' }`으로 resolve되며, 여기서 `<name>`은 팀원의 이름입니다 |

325| `run_in_background: true`를 사용한 Bash, Monitor 또는 CronCreate의 [`$.tool.call`](https://code.claude.com/docs/ko/plugins/mods/reference#mods-api-methods) | `{ deny: '<tool> was not run: it starts background work, a schedule or a goal, and <reason>' }`으로 resolve되며, 여기서 `<tool>`은 도구의 이름입니다 |325| `run_in_background: true`를 사용한 Bash, Monitor 또는 CronCreate의 [`$.tool.call`](https://code.claude.com/docs/ko/plugins/mods/reference#mods-api-methods) | `{ deny: '<tool> was not run: it starts background work, a schedule or a goal, and <reason>' }`으로 resolve되며, 여기서 `<tool>`은 도구의 이름입니다 |

326 326 

327이러한 `$.session.send` 및 `$.tool.call` 결과와 함께 사용자에게 [`Stopped:` 토스트](https://code.claude.com/docs/ko/plugins/mods/troubleshoot#stopped-type-a-message-to-continue)가 표시될 수 있습니다.327대화형 세션에서 중단 후 이러한 `$.session.send` 또는 `$.tool.call` 호출 중 하나가 거부되면 사용자에게 [`Stopped:` 토스트](https://code.claude.com/docs/ko/plugins/mods/troubleshoot#stopped-type-a-message-to-continue)가 표시될 수 있습니다.

328 328 

329#### 중단 전에 mod가 시작한 작업329#### 중단 전에 mod가 시작한 작업

330 330 


341 341 

342예약된 작업의 실행 시점이 되거나 모니터가 사용자의 다음 입력 전에 이벤트를 발생시키면 사용자에게 [`Stopped:` 토스트](https://code.claude.com/docs/ko/plugins/mods/troubleshoot#stopped-type-a-message-to-continue)가 표시될 수 있습니다.342예약된 작업의 실행 시점이 되거나 모니터가 사용자의 다음 입력 전에 이벤트를 발생시키면 사용자에게 [`Stopped:` 토스트](https://code.claude.com/docs/ko/plugins/mods/troubleshoot#stopped-type-a-message-to-continue)가 표시될 수 있습니다.

343 343 

344### `claude -p` 실행 및 Agent SDK 세션에서 거부되는 호출

345 

346`claude -p` 실행이나 [Agent SDK](https://code.claude.com/docs/ko/agent-sdk/overview.md) 세션에서 `{ drop: 'the run reached its --max-turns limit' }` 같은 결과는 실행이 mod의 호출을 거부했다는 의미입니다.

347 

348거부된 `$.prompt.submit`은 `{ drop: '<reason>' }`으로 resolve됩니다. `$.command.run`과 `$.agent.spawn` 같은 다른 거부된 호출은 `<reason>` 자리에 사유가 들어간 채로 [거부된 호출이 반환하는 값](#what-refused-calls-return)에 나온 결과를 반환합니다. 아래에서 해당하는 `<reason>`을 찾아 대처 방법을 확인하십시오.

349 

350* **`the run reached its --max-turns limit`**: mod의 프롬프트와 mod가 생성한 서브에이전트의 턴은 [`--max-turns`](https://code.claude.com/docs/ko/cli-reference#cli-flags) 또는 Agent SDK의 [턴 제한](https://code.claude.com/docs/ko/agent-sdk/configuration.md#limit-turns-and-spend)에 포함됩니다. 더 많은 턴이 필요하면 더 높은 제한으로 실행을 시작하십시오. 그럴 수 없다면 mod가 거부된 호출을 더 이상 수행하지 않도록 하십시오. 실행이 사용자나 SDK 애플리케이션으로부터 다른 프롬프트를 받으면 턴 수가 초기화되고 실행이 다시 호출을 받아들입니다.

351* **`the run is past its --max-budget-usd limit`**: 더 높은 `--max-budget-usd`로 실행을 시작하거나 Agent SDK의 [지출 제한](https://code.claude.com/docs/ko/agent-sdk/configuration.md#limit-turns-and-spend)을 높이십시오. 그럴 수 없다면 mod가 거부된 호출을 더 이상 수행하지 않도록 하십시오. 이 제한은 지금까지의 실행 총비용에 적용됩니다. 이 총액은 실행이 다른 프롬프트를 받아도 계속 누적되므로, 재시도해도 같은 사유가 반환됩니다.

352* **`the host has ended its input`**: 예를 들어 SDK 애플리케이션이 [스트리밍 입력](https://code.claude.com/docs/ko/agent-sdk/streaming-vs-single-mode.md)을 종료했거나, [`--input-format stream-json`](https://code.claude.com/docs/ko/cli-reference#cli-flags)으로 시작한 실행에서 stdin이 닫힌 경우입니다. 실행이 종료되는 중이며 더 이상 입력을 받지 않으므로, 재시도해도 같은 사유가 반환됩니다. mod가 거부된 호출을 더 이상 수행하지 않도록 하십시오. 실행을 직접 시작하는 경우, 다음부터는 mod가 더 이상 수행할 호출이 없을 때까지 해당 입력을 열어 두십시오.

353* **`the session was stopped and nobody has sent input since`**: 예를 들어 Agent SDK의 [`interrupt()`](https://code.claude.com/docs/ko/agent-sdk/typescript#query-object)로 실행이 [중단](#calls-and-background-work-after-the-user-interrupts-a-turn)되었습니다. 사용자나 SDK 애플리케이션의 다음 메시지 이후에 호출을 다시 수행하려면 [거부되거나 삭제된 호출 재시도하기](#retry-a-refused-or-dropped-call)를 따르십시오.

354 

355### mod를 사용하는 `claude -p` 실행이 종료되지 않음

356 

357mod가 매 턴이 끝날 때마다 프롬프트를 제출하면 각 프롬프트가 또 다른 턴을 시작합니다. [`--max-turns`](https://code.claude.com/docs/ko/cli-reference#cli-flags)나 `--max-budget-usd`가 없으면 mod를 로드하는 `claude -p` 실행은 직접 중지할 때까지 계속됩니다.

358 

359실행이 스스로 종료되도록 하려면 셸의 명령에 두 플래그 중 하나를 추가하십시오. 다른 사람이 실행을 시작하는 경우에는 작업이 끝나면 mod가 프롬프트 제출을 중지하도록 하십시오. 다음 명령은 `--max-turns`를 추가합니다.

360 

361```bash theme={null}

362claude -p "find the TODOs" --max-turns 5

363```

364 

365실행이 해당 제한에 도달하면 mod의 다음 프롬프트는 턴을 시작하는 대신 [거부](#calls-refused-in-non-interactive-runs)되고, 실행이 종료됩니다.

366 

367그래도 실행이 제한을 넘어 계속되면 셸에서 `claude --version`을 실행하고, 버전이 v2.1.304보다 이전이면 [Claude Code를 업데이트](https://code.claude.com/docs/ko/setup.md#update-claude-code)하십시오. v2.1.299부터는 제한에 도달하면 mod의 프롬프트가 거부됩니다. mod가 서브에이전트를 생성하는 경우, v2.1.304부터는 서브에이전트의 턴이 `--max-turns`에 포함됩니다.

368 

344## 세션 간 메시지 보내기 및 받기369## 세션 간 메시지 보내기 및 받기

345 370 

346mod는 사용자의 다른 세션, 이 세션의 서브에이전트 중 하나, 또는 [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md)의 팀원에게 일반 텍스트 메시지를 보낼 수 있습니다. 또한 도착하고 나가는 메시지를 관찰할 수 있습니다.371mod는 사용자의 다른 세션, 이 세션의 서브에이전트 중 하나, 또는 [에이전트 팀](https://code.claude.com/docs/ko/agent-teams.md)의 팀원에게 일반 텍스트 메시지를 보낼 수 있습니다. 또한 도착하고 나가는 메시지를 관찰할 수 있습니다.


390| `$.http` | `http` 또는 `https`를 통한 `fetch(url, init)`입니다. 본문을 읽고 나면 `{ status, ok, headers, text }`로 resolve됩니다. |415| `$.http` | `http` 또는 `https`를 통한 `fetch(url, init)`입니다. 본문을 읽고 나면 `{ status, ok, headers, text }`로 resolve됩니다. |

391| `$.store` | 플러그인 전용 JSON 키-값 저장소로, 세션 간에 유지됩니다 |416| `$.store` | 플러그인 전용 JSON 키-값 저장소로, 세션 간에 유지됩니다 |

392| `$.env` | 환경 변수를 `get` 및 `set`합니다. 이름은 문자열 리터럴로 작성합니다. |417| `$.env` | 환경 변수를 `get` 및 `set`합니다. 이름은 문자열 리터럴로 작성합니다. |

393| `$.settings` | 설정 파일과 관리형 정책에 담긴 내용을 `read`합니다 |418| `$.settings` | `read()`는 하나의 객체로 병합된 모든 설정으로 resolve됩니다. `{ source }` 또는 `{ key }`를 전달하면 대신 [한 소스의 설정 또는 한 키의 값](#read-one-source-or-one-key)으로 resolve됩니다. |

394| `$.session` | `messages()`는 트랜스크립트를 `{ role, text, toolUses }`의 목록으로 반환합니다. 작업 디렉터리, 모델 등도 제공합니다. [`usage()`](https://code.claude.com/docs/ko/plugins/mods/reference#mods-api-methods)는 컨텍스트 윈도우 사용량과 플랜 한도를 반환합니다. |419| `$.session` | `messages()`는 트랜스크립트를 `{ role, text, toolUses }`의 목록으로 반환합니다. 작업 디렉터리, 모델 등도 제공합니다. [`usage()`](https://code.claude.com/docs/ko/plugins/mods/reference#mods-api-methods)는 컨텍스트 윈도우 사용량과 플랜 한도를 반환합니다. |

395| `$.mcp` | 연결된 MCP 서버의 도구를 `call`합니다 |420| `$.mcp` | 연결된 MCP 서버의 도구를 `call`합니다 |

396 421 


408* **`$.process.spawn started, and a plugin withheld its result:`**: 거부한 mod가 명령의 출력을 끝까지 읽지 않은 상태였습니다. 명령이 아직 실행 중이면 Claude Code가 명령을 중지합니다.433* **`$.process.spawn started, and a plugin withheld its result:`**: 거부한 mod가 명령의 출력을 끝까지 읽지 않은 상태였습니다. 명령이 아직 실행 중이면 Claude Code가 명령을 중지합니다.

409* **`$.process.spawn ran, and a plugin withheld its result:`**: 거부한 mod가 명령의 출력을 끝까지 읽은 상태였으므로 명령은 이미 종료되었습니다434* **`$.process.spawn ran, and a plugin withheld its result:`**: 거부한 mod가 명령의 출력을 끝까지 읽은 상태였으므로 명령은 이미 종료되었습니다

410 435 

436### 모든 설정, 한 소스 또는 한 키 읽기

437 

438`$.settings.read()`는 사용 중인 모든 소스의 설정을 [우선순위](https://code.claude.com/docs/ko/settings.md#settings-precedence)에 따라 병합한 하나의 객체로 resolve됩니다. 대신 한 소스를 읽으려면 `{ source }`를, 한 키를 읽으려면 `{ key }`를 전달하거나 둘 다 전달합니다.

439 

440| 호출 | resolve 결과 |

441| :- | :- |

442| `$.settings.read()` | 병합된 설정을 담은 하나의 객체입니다. 최상위 키는 `permissions`, `hooks` 등 `settings.json` 파일의 키와 같습니다. |

443| `$.settings.read({ source: 'policy' })` | 해당 소스 하나의 설정을 담은 객체이며, 해당 소스에 설정이 없으면 `{}`입니다 |

444| `$.settings.read({ key: 'spinnerTipsEnabled' })` | 병합된 설정에서 해당 키의 값이며, 키가 설정되지 않았으면 `undefined`입니다 |

445| `$.settings.read({ key: 'spinnerTipsEnabled', source: 'user' })` | 해당 소스 하나에서 해당 키의 값이며, 해당 소스가 그 키를 설정하지 않았으면 `undefined`입니다 |

446 

447`source`에는 읽을 설정 소스 하나의 이름을 전달합니다.

448 

449* **`user`**: `~/.claude/settings.json`

450* **`project`**: `.claude/settings.json`

451* **`local`**: `.claude/settings.local.json`

452* **`flag`**: `--settings`로 전달한 내용과 SDK의 인라인 설정

453* **`policy`**: [관리형 설정](https://code.claude.com/docs/ko/managed-settings.md#how-claude-code-combines-managed-sources)

454 

455`key`에는 최상위 키 하나의 정확한 이름을 전달하며, 중첩된 객체를 가리키는 점 표기 경로는 사용할 수 없습니다. `key` 인수를 사용하려면 Claude Code v2.1.304 이상이 필요합니다.

456 

411## 다음 단계457## 다음 단계

412 458 

413* [이벤트에 반응하기](https://code.claude.com/docs/ko/plugins/mods/events.md): 도구 호출, 프롬프트, 턴에 훅 연결459* [이벤트에 반응하기](https://code.claude.com/docs/ko/plugins/mods/events.md): 도구 호출, 프롬프트, 턴에 훅 연결

Details

48 48 

49요청한 기능을 사용해 봅니다. 예시 프롬프트의 경우 현재 브랜치 이름이 프롬프트 상자 위에 표시됩니다. mod가 원하는 대로 동작하지 않으면 변경할 내용을 Claude에게 알려 주십시오. mod는 파일을 변경하는 각 턴이 끝날 때마다 다시 로드되므로, Claude가 작업을 마치는 즉시 변경 사항을 확인할 수 있습니다.49요청한 기능을 사용해 봅니다. 예시 프롬프트의 경우 현재 브랜치 이름이 프롬프트 상자 위에 표시됩니다. mod가 원하는 대로 동작하지 않으면 변경할 내용을 Claude에게 알려 주십시오. mod는 파일을 변경하는 각 턴이 끝날 때마다 다시 로드되므로, Claude가 작업을 마치는 즉시 변경 사항을 확인할 수 있습니다.

50 50 

51mod 이름으로 시작하는 트랜스크립트 줄에 [변경 사항이 로드되지 않았다](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#this-mods-change-didnt-load)고 표시되면, Claude에게 수정을 요청할 때 다음 메시지에 해당 줄을 붙여 넣으십시오. 붙여 넣지 않으면 Claude는 해당 줄을 볼 수 없습니다.

52 

51### 다른 세션에서 mod 사용하기53### 다른 세션에서 mod 사용하기

52 54 

53Claude가 작성한 mod는 해당 mod를 만든 세션에서만 로드되며, Claude Code는 세션의 mod 폴더가 [`cleanupPeriodDays`](https://code.claude.com/docs/ko/settings-reference#cleanupperioddays)보다 오래되면 삭제합니다. mod를 보관하려면 해당 디렉터리를 mod 폴더에서 `~/mods/git-branch`와 같은 별도 위치로 복사하십시오. 그런 다음 로드 방법을 선택합니다.55Claude가 작성한 mod는 해당 mod를 만든 세션에서만 로드되며, Claude Code는 세션의 mod 폴더가 [`cleanupPeriodDays`](https://code.claude.com/docs/ko/settings-reference#cleanupperioddays)보다 오래되면 삭제합니다. mod를 보관하려면 해당 디렉터리를 mod 폴더에서 `~/mods/git-branch`와 같은 별도 위치로 복사하십시오. 그런 다음 로드 방법을 선택합니다.

Details

93 93 

94## Claude가 하는 작업에 훅 연결하기94## Claude가 하는 작업에 훅 연결하기

95 95 

96이 이벤트들을 처리하면 도구 호출, 프롬프트, 턴이 진행되는 동안 이를 확인하거나 변경할 수 있습니다. 모든 이벤트와 훅이 반환할 수 있는 값은 [이벤트 레퍼런스](https://code.claude.com/docs/ko/plugins/mods/reference.md#events)를 참조하세요.96이 이벤트들을 처리하면 도구 호출, 프롬프트, 턴, 설정 읽기가 진행되는 동안 이를 확인하거나 변경할 수 있습니다. 모든 이벤트와 훅이 반환할 수 있는 값은 [이벤트 레퍼런스](https://code.claude.com/docs/ko/plugins/mods/reference.md#events)를 참조하세요.

97 97 

98### 도구 호출 차단 또는 변경하기98### 도구 호출 차단 또는 변경하기

99 99 


115 115 

116Claude가 `git push --force`를 시도하면 훅이 `next`를 호출하지 않으므로 명령이 실행되지 않고 권한 프롬프트도 표시되지 않습니다. Claude는 `deny` 텍스트를 도구의 결과로 읽으므로, Claude가 따를 수 있는 지시문 형태로 작성해야 합니다. 그 밖의 모든 Bash 명령은 mod가 없을 때와 동일하게 실행됩니다.116Claude가 `git push --force`를 시도하면 훅이 `next`를 호출하지 않으므로 명령이 실행되지 않고 권한 프롬프트도 표시되지 않습니다. Claude는 `deny` 텍스트를 도구의 결과로 읽으므로, Claude가 따를 수 있는 지시문 형태로 작성해야 합니다. 그 밖의 모든 Bash 명령은 mod가 없을 때와 동일하게 실행됩니다.

117 117 

118이 훅이 예외를 발생시키거나 시간 초과되면 Claude Code는 훅을 건너뛰고, 명령은 mod가 없을 때와 동일하게 진행됩니다. 대신 명령을 거부하려면 훅에 [`.catch` 핸들러를 추가](#handle-a-hook-that-fails)하세요.

119 

118도구가 실행된 후에 작업하려면 `await next(e)`를 수행하고, 필요한 작업을 한 다음, `next`가 반환한 값을 반환합니다. 다음 훅은 Claude가 변경하는 각 `.mdx` 파일을 [`$.ui.log`](https://code.claude.com/docs/ko/plugins/mods/api#show-something-without-starting-a-turn)로 로그에 기록합니다. 이 함수는 Claude가 읽지 않는 흐린 줄을 트랜스크립트에 추가합니다.120도구가 실행된 후에 작업하려면 `await next(e)`를 수행하고, 필요한 작업을 한 다음, `next`가 반환한 값을 반환합니다. 다음 훅은 Claude가 변경하는 각 `.mdx` 파일을 [`$.ui.log`](https://code.claude.com/docs/ko/plugins/mods/api#show-something-without-starting-a-turn)로 로그에 기록합니다. 이 함수는 Claude가 읽지 않는 흐린 줄을 트랜스크립트에 추가합니다.

119 121 

120```javascript theme={null}122```javascript theme={null}


177* **사용자가 답변을 입력하는 경우**: `$.ui.ask`가 입력된 텍스트로 resolve됩니다. 훅은 이를 `Run it`과 비교하므로 그 외의 텍스트는 명령을 거부합니다.179* **사용자가 답변을 입력하는 경우**: `$.ui.ask`가 입력된 텍스트로 resolve됩니다. 훅은 이를 `Run it`과 비교하므로 그 외의 텍스트는 명령을 거부합니다.

178* **아무도 답변하지 않는 경우**: 사용자가 질문을 닫거나 **Chat about this**를 선택하면, 그리고 `claude -p` 실행에서는 `$.ui.ask`가 reject되므로 `catch` 블록이 답변을 `Refuse`로 유지합니다180* **아무도 답변하지 않는 경우**: 사용자가 질문을 닫거나 **Chat about this**를 선택하면, 그리고 `claude -p` 실행에서는 `$.ui.ask`가 reject되므로 `catch` 블록이 답변을 `Refuse`로 유지합니다

179 181 

180대기는 `$.ui.ask` 같은 mods API 호출 안에서 이루어지도록 해야 합니다. 그 시간은 훅의 [시간 제한](https://code.claude.com/docs/ko/plugins/mods/reference.md#limits)에 포함되지 않기 때문입니다. 직접 만든 promise를 기다리는 데 소요된 시간은 포함됩니다. Claude Code는 시간 초과된 훅을 건너뛰므로, 보류된 명령이 실행됩니다.182대기는 `$.ui.ask` 같은 mods API 호출 안에서 이루어지도록 해야 합니다. 그 시간은 훅의 [시간 제한](https://code.claude.com/docs/ko/plugins/mods/reference.md#limits)에 포함되지 않기 때문입니다. 직접 만든 promise를 기다리는 데 소요된 시간은 포함됩니다.

183 

184Claude Code는 시간 초과된 훅을 건너뛰므로, 보류된 명령이 실행됩니다. 대신 명령을 거부하려면 `on`이 반환하는 등록에 [`.catch` 핸들러](#handle-a-hook-that-fails)를 연결하세요. 이 핸들러는 훅 내부의 `catch` 블록과는 별개입니다.

181 185 

182#### 사용자에게 묻기 전에 도구 호출 승인 또는 거부하기186#### 사용자에게 묻기 전에 도구 호출 승인 또는 거부하기

183 187 


207 211 

208* **`main`에서**: 규칙이 `git push`를 허용하더라도 훅이 `deny`를 반환합니다212* **`main`에서**: 규칙이 `git push`를 허용하더라도 훅이 `deny`를 반환합니다

209* **다른 브랜치에서, 그리고 다른 명령의 경우**: 호출에는 mod가 없을 때와 동일한 결정이 적용됩니다213* **다른 브랜치에서, 그리고 다른 명령의 경우**: 호출에는 mod가 없을 때와 동일한 결정이 적용됩니다

214* **훅이 예외를 발생시키거나 시간 초과되는 경우**: 이때도 호출에는 mod가 없을 때와 동일한 결정이 적용됩니다. 대신 호출을 거부하려면 `{ decision: 'deny', reason: 'the reason' }`을 반환하는 [`.catch` 핸들러를 추가](#handle-a-hook-that-fails)하세요.

210 215 

211이 훅은 명령의 텍스트를 대조하므로 Claude를 위한 알림 정도로 취급해야 합니다. 모든 사람의 `main` 푸시를 차단하려면 Git 호스트에서 브랜치를 보호하세요.216이 훅은 명령의 텍스트를 대조하므로 Claude를 위한 알림 정도로 취급해야 합니다. 모든 사람의 `main` 푸시를 차단하려면 Git 호스트에서 브랜치를 보호하세요.

212 217 


269 274 

270`open a PR for this change` 같은 프롬프트를 보내면 트랜스크립트의 메시지는 그대로 보이며, Claude는 그 뒤에 `Current branch: feature/auth` 같은 줄도 읽습니다. 풀 리퀘스트를 언급하지 않는 프롬프트는 변경 없이 전달되며 `git`도 실행되지 않습니다.275`open a PR for this change` 같은 프롬프트를 보내면 트랜스크립트의 메시지는 그대로 보이며, Claude는 그 뒤에 `Current branch: feature/auth` 같은 줄도 읽습니다. 풀 리퀘스트를 언급하지 않는 프롬프트는 변경 없이 전달되며 `git`도 실행되지 않습니다.

271 276 

272프롬프트를 중단하려면 `next`를 호출하지 않고 `{ drop: 'the reason' }`을 반환합니다. 텍스트는 사용자의 프롬프트 입력란으로 되돌아가고, 사용자에게는 `Prompt dropped by a hook:` 뒤에 지정한 이유가 표시되므로 이유는 사용자를 대상으로 작성해야 합니다. 훅의 `next(e)` 호출이 프롬프트를 통과시킨 후에 훅이 `drop`을 반환하면 턴은 그대로 실행되며, 훅은 `a drop after its next() was answered`가 포함된 메시지와 함께 [실패합니다](#handle-a-hook-that-fails).277프롬프트를 중단하려면 `next`를 호출하지 않고 `{ drop: 'the reason' }`을 반환합니다. 텍스트는 사용자의 프롬프트 입력란으로 되돌아가고, 사용자에게는 `Prompt dropped by a hook:` 뒤에 지정한 이유가 표시되므로 이유는 사용자를 대상으로 작성해야 합니다. 다음 경우에는 프롬프트가 그대로 전송됩니다.

278 

279* **훅의 `next(e)` 호출이 프롬프트를 통과시킨 후에 훅이 `drop`을 반환하는 경우**: 턴은 그대로 실행되며, 훅은 `a drop after its next() was answered`가 포함된 메시지와 함께 [실패합니다](#handle-a-hook-that-fails)

280* **훅이 예외를 발생시키거나 시간 초과되는 경우**: Claude Code는 훅을 건너뛰고 프롬프트를 전송합니다. 실패로 인해 훅이 중단했을 프롬프트가 전송되지 않도록 [`.catch` 핸들러를 추가](#handle-a-hook-that-fails)하세요.

273 281 

274[다른 이벤트](https://code.claude.com/docs/ko/plugins/mods/reference.md#prompts-and-what-claude-reads)는 Claude가 읽는 나머지 내용을 다룹니다. 시스템 프롬프트의 각 섹션에는 `prompt.section`, 첫 번째 메시지와 함께 전송되는 컨텍스트에는 `prompt.context`, 스킬의 텍스트에는 `skill.prompt`를 사용합니다. 이러한 훅에서 나온 텍스트가 요청마다 달라지면 [프롬프트 캐시가 무효화됩니다](https://code.claude.com/docs/ko/prompt-caching.md). `skill.prompt` 훅에서는 [스킬이 어떤 플러그인이나 파일에서 왔는지](https://code.claude.com/docs/ko/plugins/mods/reference.md#skill-prompt-fields)도 읽을 수 있습니다.282[다른 이벤트](https://code.claude.com/docs/ko/plugins/mods/reference.md#prompts-and-what-claude-reads)는 Claude가 읽는 나머지 내용을 다룹니다. 시스템 프롬프트의 각 섹션에는 `prompt.section`, 첫 번째 메시지와 함께 전송되는 컨텍스트에는 `prompt.context`, 스킬의 텍스트에는 `skill.prompt`를 사용합니다. 이러한 훅에서 나온 텍스트가 요청마다 달라지면 [프롬프트 캐시가 무효화됩니다](https://code.claude.com/docs/ko/prompt-caching.md). `skill.prompt` 훅에서는 [스킬이 어떤 플러그인이나 파일에서 왔는지](https://code.claude.com/docs/ko/plugins/mods/reference.md#skill-prompt-fields)도 읽을 수 있습니다.

275 283 


305 313 

306[advisor 도구](https://code.claude.com/docs/ko/advisor.md) 호출처럼 요청 중에 API가 직접 실행한 도구 호출을 확인하려면 `result.serverToolUses`를 읽습니다. Claude Code는 이러한 호출을 실행하지 않으므로 `tool.call`이나 `tool.check` 훅이 발생하지 않습니다. 응답에 이러한 호출이 없으면 이 필드는 존재하지 않으며, Claude Code v2.1.290 이상이 필요합니다.314[advisor 도구](https://code.claude.com/docs/ko/advisor.md) 호출처럼 요청 중에 API가 직접 실행한 도구 호출을 확인하려면 `result.serverToolUses`를 읽습니다. Claude Code는 이러한 호출을 실행하지 않으므로 `tool.call`이나 `tool.check` 훅이 발생하지 않습니다. 응답에 이러한 호출이 없으면 이 필드는 존재하지 않으며, Claude Code v2.1.290 이상이 필요합니다.

307 315 

316### 설정 읽기 변경 또는 거부하기

317 

318`settings.read` 훅은 mod의 읽기와 Claude Code 자체의 읽기에서 실행됩니다.

319 

320* **mod의 읽기**: mod가 [`$.settings.read`](https://code.claude.com/docs/ko/plugins/mods/api#read-one-source-or-one-key)를 호출합니다.

321* **Claude Code 자체의 읽기**: Claude Code가 세션의 병합된 설정을 구성합니다. 이 읽기는 설정이나 로드된 플러그인이 변경될 때 반복됩니다.

322 

323두 읽기 중 어느 쪽에 의존하기 전에 가드와 버전을 확인하세요.

324 

325* **기본 제공 가드**: 관리형 설정이 있거나 Team 또는 Enterprise [`/login`](https://code.claude.com/docs/ko/authentication#authentication-precedence)이 세션의 자격 증명인 경우, [기본 제공 가드](https://code.claude.com/docs/ko/plugins/mods/admin.md#know-what-happens-by-default)는 설치했거나 `--plugin-dir`로 로드한 mod에서 이 훅을 건너뛸 수 있습니다. 확인하려면 [디버그 로그](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#read-the-debug-log)에서 `settings.read bypassed by cc-plugin-sec-default`를 검색하세요. 해당 텍스트가 포함된 줄에 해당 mod의 이름이 있으면 조직의 관리자에게 [해당 mod를 조직의 mod 중 하나로 설치](https://code.claude.com/docs/ko/plugins/mods/admin.md#install-your-organizations-mods)해 달라고 요청하세요.

326* **버전**: Claude Code 자체의 읽기에서 이 이벤트가 발생하는 것과 `e.layers` 필드에는 Claude Code v2.1.304 이상이 필요합니다.

327 

328#### `settings.read` 훅이 받는 값

329 

330| 필드 | 타입 | 담고 있는 내용 |

331| :- | :- | :- |

332| `e.layers` | array | 설정을 담고 있는 사용 중인 각 소스마다 하나씩 있는 `{ source, settings }` 객체로, [우선순위](https://code.claude.com/docs/ko/settings.md#settings-precedence)가 가장 낮은 것부터 나열됩니다: `plugin`, `user`, `project`, `local`, `flag`, `policy`. `claude plugin test`에서는 비어 있습니다. |

333| `e.source` | string | `$.settings.read({ source: 'policy' })`처럼 mod가 요청한 하나의 소스입니다. 이 경우 `e.layers`에는 해당 레이어만 들어 있습니다. Claude Code 자체의 읽기와 병합된 설정에 대한 그 밖의 모든 읽기에서는 존재하지 않습니다. |

334 

335`e.layers`에서 `plugin`은 활성화된 플러그인이 제공하는 설정을 담으며, 레이어 이름일 뿐 `$.settings.read`에 전달할 수 있는 `source`가 아닙니다. `flag`는 `--settings`로 전달된 설정을, `policy`는 관리형 설정을 담습니다.

336 

337#### Claude Code 자체의 읽기와 mod의 읽기 구분하기

338 

339[Claude Code 자체의 읽기](#settings-read-hook)에서 [`next.origin`](https://code.claude.com/docs/ko/plugins/mods/reference#the-hook-function)은 `{ plugin: 'engine', tier: 'core' }`이고, mod의 읽기에서 `next.origin.plugin`은 호출한 mod의 이름입니다.

340 

341#### `settings.read` 훅이 반환할 수 있는 값

342 

343훅은 [`next(e)`](https://code.claude.com/docs/ko/plugins/mods/reference#the-hook-function)의 결과를 그대로 반환하거나, 자체 `{ value }`를 반환하거나, `{ deny: reason }`을 반환할 수 있습니다. [Claude Code 자체의 읽기](#settings-read-hook)와 mod의 읽기 모두에서 `{ value }`는 읽기가 제공하는 값을 대체하고 `{ deny: reason }`은 읽기를 거부합니다.

344 

345| 반환 값 | Claude Code 자체의 읽기에서 | mod의 읽기에서 |

346| :- | :- | :- |

347| `{ value }` | 변경하는 각 키에 대해, 반환한 값이 [키의 스키마에 맞으면](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#settings-read-key-refused) 세션의 병합된 설정에서 해당 키의 전체 값을 대체합니다 | 해당 mod의 호출은 반환한 `value`로, 또는 반환한 `value`에서 가져온 요청된 `key`로 resolve되므로, 배열이 아닌 전체 객체를 반환하세요 |

348| `{ deny: reason }` | 세션은 어떤 훅이 응답하기 전에 병합된 설정을 그대로 유지하며, [디버그 로그에 `reason`이 기록됩니다](https://code.claude.com/docs/ko/plugins/mods/troubleshoot#settings-read-refused) | 해당 mod의 호출이 `<calling mod>: $.settings.read: <reason>`으로 reject됩니다 |

349 

350Claude Code 자체의 읽기에서는 생략한 키가 설정 해제되므로 [`next(e)`의 `value`](#settings-read-next)를 바탕으로 `{ value }`를 구성하세요. Claude Code가 `env` 같은 키를 각 소스에서 따로 읽는 경우, `value`에서 그 키를 변경해도 [효과가 없습니다](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#settings-read-key-no-effect).

351 

352#### `next(e)`가 `settings.read` 훅에 제공하는 값

353 

354`next(e)`는 `{ value }` 또는 `{ deny }`로 resolve됩니다.

355 

356* **`{ value }`**: `value`는 병합된 설정이며, [`e.source`](#settings-read-receives)가 설정된 경우에는 하나의 소스의 설정입니다. [현재 훅 다음에 실행되는](#the-order-mods-run-in) 훅이 자체 `{ value }`를 반환했다면 대신 그 훅의 `value`를 받습니다.

357* **`{ deny }`**: 현재 훅 다음에 실행되는 훅이 읽기를 거부했습니다. 해당 `{ deny }`를 그대로 반환하세요.

358 

359#### `settings.read` 훅에서 설정 하나 변경하기

360 

361먼저 [어떤 mod가 이 이벤트를 받는지, 그리고 어떤 버전부터인지](#settings-read-hook) 확인하세요.

362 

363키 하나를 변경하려면 다음 훅이 [`spinnerTipsEnabled`](https://code.claude.com/docs/ko/settings-reference#spinnertipsenabled)에 대해 하는 것처럼 [`next(e)`](https://code.claude.com/docs/ko/plugins/mods/reference#the-hook-function)의 `value`를 spread한 다음 해당 키를 설정합니다. 이 훅은 [`next.origin`](#settings-read-origin)을 확인하지 않으므로 [Claude Code 자체의 읽기](#settings-read-hook)와 mod의 병합된 읽기 모두에서 키를 변경합니다.

364 

365```javascript theme={null}

366on('settings.read', async ($, e, next) => {

367 const read = await next(e)

368 // Pass through a read of one source, so that only the merged settings change.

369 // Pass through a { deny } from a later hook too: it has no value.

370 if (e.source || !read.value) return read

371 // Keep every other key and change this one

372 return { value: { ...read.value, spinnerTipsEnabled: false } }

373})

374```

375 

376Claude Code 자체의 읽기에서 훅이 문자열처럼 키의 스키마를 벗어나는 값을 반환하면, 해당 키만 어떤 훅이 응답하기 전에 병합된 값을 유지합니다. 이때 디버그 로그에는 [`the answer for <key> is no value the key can hold`](https://code.claude.com/docs/ko/plugins/mods/troubleshoot#settings-read-key-refused)가 표시됩니다. 값이 스키마에 맞는데도 키가 변경되지 않으면 [반환한 키가 효과가 없는 이유](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#settings-read-key-no-effect)를 참조하세요.

377 

308### 설정 훅 이벤트 처리하기378### 설정 훅 이벤트 처리하기

309 379 

310설정 훅은 설정 파일에서 구성하는 command, HTTP, prompt, agent 훅입니다. `Stop`, `SessionEnd`, `PostToolUse` 같은 각 [설정 훅 이벤트](https://code.claude.com/docs/ko/hooks.md#hook-events)는 `classic.` 뒤에 설정 훅 이벤트 이름이 붙은 이벤트(예: `classic.Stop`)이기도 합니다. `e`는 설정 훅이 stdin으로 받는 JSON이며, `transcript_path`를 포함합니다.380설정 훅은 설정 파일에서 구성하는 command, HTTP, prompt, agent 훅입니다. `Stop`, `SessionEnd`, `PostToolUse` 같은 각 [설정 훅 이벤트](https://code.claude.com/docs/ko/hooks.md#hook-events)는 `classic.` 뒤에 설정 훅 이벤트 이름이 붙은 이벤트(예: `classic.Stop`)이기도 합니다. `e`는 설정 훅이 stdin으로 받는 JSON이며, `transcript_path`를 포함합니다.

Details

508* **`Input`**: `onSubmit(value)`와 `onInput(value)`를 받습니다508* **`Input`**: `onSubmit(value)`와 `onInput(value)`를 받습니다

509* **`Select`**: `options`에 선택지를 담은 `onSelect(value)`를 받습니다. `options`는 고유한 값을 가진 선택지를 하나 이상 포함하는 목록이며, 예를 들어 `[{ value: 'sm', label: 'Small' }, { value: 'lg', label: 'Large' }]`와 같습니다509* **`Select`**: `options`에 선택지를 담은 `onSelect(value)`를 받습니다. `options`는 고유한 값을 가진 선택지를 하나 이상 포함하는 목록이며, 예를 들어 `[{ value: 'sm', label: 'Small' }, { value: 'lg', label: 'Large' }]`와 같습니다

510 510 

511테스트는 `key`를 통해 컨트롤을 누르거나 컨트롤에 입력하므로 각 컨트롤에 `key`를 지정합니다. 또한 컨트롤을 사용할 때마다 `e.element`에 `key`를 담아 [`ui.press`, `ui.input` 또는 `ui.select`](https://code.claude.com/docs/ko/plugins/mods/reference#interface)가 발생하며, 다른 mod가 이러한 이벤트를 처리할 수 있습니다. 해당 훅은 콜백보다 먼저 실행되므로 사용자가 `Input`에 입력하는 내용을 볼 수 있고, 이를 변경하거나 콜백 대신 응답할 수 있습니다. mods API에는 다른 mod의 버튼을 누르는 메서드가 없습니다.511### `key`가 필요한 컨트롤

512 

513모든 `Input`과 `Select`에 `key: 'size'`처럼 `key` prop을 지정합니다. `Button`은 `label` prop이나 단일 문자열 자식이 있으면 `key` 없이 사용할 수 있습니다. 이 경우 키는 `label` 값 또는 해당 문자열이 됩니다.

514 

515테스트와 다른 mod는 키로 컨트롤을 식별합니다.

516 

517* **테스트**: [테스트](https://code.claude.com/docs/ko/plugins/mods/test.md#test-a-drawing)는 키를 통해 컨트롤을 누르거나 컨트롤에 입력합니다.

518* **다른 mod**: Claude Code는 컨트롤의 콜백을 실행하기 전에 `e.element`에 컨트롤의 키를 담아 [`ui.press`, `ui.input` 또는 `ui.select`](https://code.claude.com/docs/ko/plugins/mods/reference#interface)를 발생시킵니다. 해당 이벤트에 대한 다른 mod의 훅은 사용자가 `Input`에 입력한 내용을 볼 수 있으며, 그 텍스트를 변경하거나 콜백이 실행되지 않도록 할 수 있습니다. mods API는 해당 mod에 이 mod의 버튼을 누르는 메서드를 제공하지 않습니다.

519 

520`needs a key` 또는 `is drawn twice`라는 메시지가 표시되면 [해당 메시지로 원인을 찾습니다](https://code.claude.com/docs/ko/plugins/mods/troubleshoot.md#needs-a-key).

512 521 

513### 키보드 포커스와 단축키522### 키보드 포커스와 단축키

514 523 

Details

21| `.claude-plugin/plugin.json` | 예 | 플러그인 [매니페스트](https://code.claude.com/docs/ko/plugins/manifest-reference.md)입니다. mod는 필수 필드를 추가하지 않습니다. |21| `.claude-plugin/plugin.json` | 예 | 플러그인 [매니페스트](https://code.claude.com/docs/ko/plugins/manifest-reference.md)입니다. mod는 필수 필드를 추가하지 않습니다. |

22| `hooks/hooks.json` | 예 | `modules`: `"modules": ["./register.js"]`처럼 훅 모듈에 대한 경로 하나를 이 파일 기준 상대 경로로 담은 배열입니다. `hooks` 아래에 [설정 훅](https://code.claude.com/docs/ko/hooks.md)을 포함할 수도 있습니다. |22| `hooks/hooks.json` | 예 | `modules`: `"modules": ["./register.js"]`처럼 훅 모듈에 대한 경로 하나를 이 파일 기준 상대 경로로 담은 배열입니다. `hooks` 아래에 [설정 훅](https://code.claude.com/docs/ko/hooks.md)을 포함할 수도 있습니다. |

23| [`hooks/register.js`](https://code.claude.com/docs/ko/plugins/mods/create#write-a-mod-yourself)와 같은 훅 모듈 | 예 | mod의 진입점입니다. `register(on, options)`를 내보냅니다. 파일 이름은 `.js`, `.mjs`, `.cjs`, `.jsx`, `.ts`, `.mts`, `.cts` 또는 `.tsx`로 끝납니다. ES 모듈입니다. |23| [`hooks/register.js`](https://code.claude.com/docs/ko/plugins/mods/create#write-a-mod-yourself)와 같은 훅 모듈 | 예 | mod의 진입점입니다. `register(on, options)`를 내보냅니다. 파일 이름은 `.js`, `.mjs`, `.cjs`, `.jsx`, `.ts`, `.mts`, `.cts` 또는 `.tsx`로 끝납니다. ES 모듈입니다. |

24| 매니페스트의 `types`로 지정된 [`types/index.d.ts`](https://code.claude.com/docs/ko/plugins/mods/interface#declare-the-values) | mod가 `$.state`를 사용하거나 mods API에 네임스페이스를 추가하는 경우 | `PluginState` 값과 mod가 추가하는 모든 네임스페이스를 선언합니다 |24| [`types/index.d.ts`](https://code.claude.com/docs/ko/plugins/mods/interface#declare-the-values)(매니페스트의 `types`가 다른 경로를 지정하지 않는 경우) | mod가 `$.state`를 사용하거나 mods API에 네임스페이스를 추가하는 경우 | `PluginState` 값과 mod가 추가하는 모든 네임스페이스를 선언합니다. 매니페스트에서 `types`를 생략하려면 v2.1.299 이상이 필요합니다. |

25| 이름이 `.test.ts` 또는 `.test.tsx`로 끝나는 파일 | 아니요 | [`claude plugin test`](https://code.claude.com/docs/ko/plugins/mods/test#write-a-test)가 실행하는 테스트입니다 |25| 이름이 `.test.ts` 또는 `.test.tsx`로 끝나는 파일 | 아니요 | [`claude plugin test`](https://code.claude.com/docs/ko/plugins/mods/test#write-a-test)가 실행하는 테스트입니다 |

26 26 

27`register`는 `on`과 `options`를 받습니다. `options`에는 매니페스트가 선언한 [`userConfig`](https://code.claude.com/docs/ko/plugins/components#user-configuration) 필드의 값이 기본값이 채워진 상태로 담겨 있습니다.27`register`는 `on`과 `options`를 받습니다. `options`에는 매니페스트가 선언한 [`userConfig`](https://code.claude.com/docs/ko/plugins/components#user-configuration) 필드의 값이 기본값이 채워진 상태로 담겨 있습니다.


110 110 

111### 명령과 구성111### 명령과 구성

112 112 

113명령 및 구성 이벤트는 명령이 실행되거나 목록에 표시될 때, 그리고 `/config` 행이 표시되거나 변경될 때 발생합니다.113명령 및 구성 이벤트는 명령이 실행되거나 목록에 표시될 때, `/config` 행이 표시되거나 변경될 때, 그리고 설정을 읽을 때 발생합니다.

114 114 

115| 이벤트 | 발생 시점 | 훅이 반환할 수 있는 값 |115| 이벤트 | 발생 시점 | 훅이 반환할 수 있는 값 |

116| :- | :- | :- |116| :- | :- | :- |


118| `command.describe` | 명령 목록을 위해 명령마다 한 번 | `{ description, argumentHint, isHidden }` |118| `command.describe` | 명령 목록을 위해 명령마다 한 번 | `{ description, argumentHint, isHidden }` |

119| `config.set` | `/config` 행이 변경되기 직전 | `next({ ...e, value })` 또는 `{ deny: reason }` |119| `config.set` | `/config` 행이 변경되기 직전 | `next({ ...e, value })` 또는 `{ deny: reason }` |

120| `config.describe` | `/config` 행마다 한 번 | `{ label, description, isHidden }` |120| `config.describe` | `/config` 행마다 한 번 | `{ label, description, isHidden }` |

121| [`settings.read`](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-hook) | mod가 [`$.settings.read`](https://code.claude.com/docs/ko/plugins/mods/api#reach-files-processes-and-the-network)를 호출하거나, Claude Code가 세션의 병합된 설정을 만들 때 | `next(e)`, `{ value }` 또는 `{ deny: reason }` |

122 

123#### `settings.read`의 `e.layers` 및 `e.source`

124 

125* **`e.layers`**: 설정을 담고 있는 사용 중인 소스마다 하나씩 있는 `{ source, settings }` 객체로, [우선순위](https://code.claude.com/docs/ko/settings.md#settings-precedence)가 가장 낮은 것부터 나열됩니다. [`settings.read` 훅이 받는 값](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-receives)을 참조하세요.

126* **`e.source`**: `$.settings.read({ source: 'policy' })`처럼 mod가 요청한 하나의 소스입니다. Claude Code 자체의 읽기와 병합된 설정에 대한 그 밖의 읽기에서는 없습니다

127 

128`settings.read`에서 Claude Code 자체의 읽기 시 이벤트가 발생하는 동작과 `e.layers` 필드를 사용하려면 Claude Code v2.1.304 이상이 필요합니다. 훅이 실행되는 시점과 훅이 반환할 수 있는 값은 예제와 함께 [설정 읽기 변경 또는 거부](https://code.claude.com/docs/ko/plugins/mods/events.md#settings-read-hook)에서 확인할 수 있습니다.

121 129 

122### 턴130### 턴

123 131 

Details

168 168 

169v2.1.292 이전에는 해당 호출이 두 번째로 실행되었기 때문에 프롬프트가 두 번 제출되거나, 명령이 두 번 실행되거나, 서브에이전트가 두 번 시작되었습니다.169v2.1.292 이전에는 해당 호출이 두 번째로 실행되었기 때문에 프롬프트가 두 번 제출되거나, 명령이 두 번 실행되거나, 서브에이전트가 두 번 시작되었습니다.

170 170 

171### `This mod's change didn't load` 또는 `the earlier version is no longer running`

172 

173[이 세션에서 Claude가 작성한 mod](https://code.claude.com/docs/ko/plugins/mods/create.md#ask-claude-for-a-mod)의 변경 사항을 로드할 수 없었습니다. 트랜스크립트 줄은 mod의 이름으로 시작하고 이유로 끝납니다.

174 

175* `This mod's change didn't load, so the earlier version is still running: <reason>.`

176* `This mod didn't load, and the earlier version is no longer running: <reason>.`

177 

178Claude는 이 줄을 볼 수 없으므로, Claude에게 수정을 요청할 때 다음 메시지에 이 줄을 붙여 넣으십시오.

179 

171### `$.agent.register refused: the hooks module that made the call is no longer loaded`180### `$.agent.register refused: the hooks module that made the call is no longer loaded`

172 181 

173이 줄은 mod의 이름으로 시작하며(예: `first-mod: $.agent.register refused: the hooks module that made the call is no longer loaded (it was reloaded or removed)`), 에이전트는 등록되지 않습니다. 호출이 이루어지기 전에 mod가 다시 로드되었거나 언로드된 것입니다. 다시 로드하면 훅 모듈의 새 사본이 로드되는데, 이 호출은 아직 반환되지 않은 훅처럼 이전 사본에서 여전히 실행 중이던 코드에서 온 것입니다.182이 줄은 mod의 이름으로 시작하며(예: `first-mod: $.agent.register refused: the hooks module that made the call is no longer loaded (it was reloaded or removed)`), 에이전트는 등록되지 않습니다. 호출이 이루어지기 전에 mod가 다시 로드되었거나 언로드된 것입니다. 다시 로드하면 훅 모듈의 새 사본이 로드되는데, 이 호출은 아직 반환되지 않은 훅처럼 이전 사본에서 여전히 실행 중이던 코드에서 온 것입니다.


225 234 

226해당 줄에 표시된 이유를 확인합니다. 흔한 원인은 해당 요소가 받지 않는 prop을 사용했거나 앱에 없는 요소를 사용한 경우입니다.235해당 줄에 표시된 이유를 확인합니다. 흔한 원인은 해당 요소가 받지 않는 prop을 사용했거나 앱에 없는 요소를 사용한 경우입니다.

227 236 

237### `needs a key`, `is drawn twice` 또는 `key each once`

238 

239`ui.render` 훅이 반환하는 트리의 요소에 유효한 [`key`](https://code.claude.com/docs/ko/plugins/mods/interface#which-controls-need-a-key)가 없거나, 두 요소가 같은 key를 공유합니다. 받은 메시지를 찾습니다.

240 

241* **`<Input> needs a key` 또는 `<Select> needs a key`**: 요소에 `key` prop이 없거나, `key`가 비어 있거나 `key: 3`처럼 문자열이 아닙니다. 비어 있지 않은 문자열을 `key`로 지정합니다.

242* **`<Button> needs a key`**: 버튼에 비어 있지 않은 문자열을 `key`로 지정합니다

243* **`is drawn twice; each takes its own key`**: 메시지에 명시된 종류의 두 요소가 같은 `key`를 가지고 있습니다. 예를 들면 `Input "size" is drawn twice; each takes its own key`와 같습니다. 각 요소에 고유한 `key`를 지정합니다.

244* **[테스트](https://code.claude.com/docs/ko/plugins/mods/test.md#test-a-drawing)의 `press`에서 발생한 `key each once`**: 그림에 전달한 key를 가진 버튼이 둘 이상 있습니다. 레이블이 같고 `key` prop이 없는 버튼은 해당 레이블을 key로 공유합니다. 각 버튼에 고유한 `key`를 지정합니다.

245 

228### `ui.render` 줄에 `threw while drawn`이 표시됨246### `ui.render` 줄에 `threw while drawn`이 표시됨

229 247 

230해당 줄은 [렌더링 지점](https://code.claude.com/docs/ko/plugins/mods/reference.md#render-sites)을 명시한 다음 `threw while drawn:`과 오류를 표시합니다. 예를 들면 `first-mod: ui.render (ToolUse) threw while drawn: <error>; the engine drew its own`과 같습니다. Claude Code가 [`ui.render`](https://code.claude.com/docs/ko/plugins/mods/reference#interface) 훅이 반환한 트리를 그리는 중에, 또는 [훅이 `next`에 전달한 `props`](https://code.claude.com/docs/ko/plugins/mods/interface#change-what-claude-code-already-draws)로 해당 지점을 그리는 중에 이 오류가 발생한 것입니다. 끝부분의 `the engine drew its own`은 해당 지점에 Claude Code의 일반 콘텐츠가 표시된다는 의미입니다.248해당 줄은 [렌더링 지점](https://code.claude.com/docs/ko/plugins/mods/reference.md#render-sites)을 명시한 다음 `threw while drawn:`과 오류를 표시합니다. 예를 들면 `first-mod: ui.render (ToolUse) threw while drawn: <error>; the engine drew its own`과 같습니다. Claude Code가 [`ui.render`](https://code.claude.com/docs/ko/plugins/mods/reference#interface) 훅이 반환한 트리를 그리는 중에, 또는 [훅이 `next`에 전달한 `props`](https://code.claude.com/docs/ko/plugins/mods/interface#change-what-claude-code-already-draws)로 해당 지점을 그리는 중에 이 오류가 발생한 것입니다. 끝부분의 `the engine drew its own`은 해당 지점에 Claude Code의 일반 콘텐츠가 표시된다는 의미입니다.


303 321 

304`classic.SessionStart` 훅에서 [저장된 값을 다시 로드합니다](https://code.claude.com/docs/ko/plugins/mods/interface.md#load-a-saved-value-again-after-clear).322`classic.SessionStart` 훅에서 [저장된 값을 다시 로드합니다](https://code.claude.com/docs/ko/plugins/mods/interface.md#load-a-saved-value-again-after-clear).

305 323 

324### `settings.read` 훅이 반환하는 키가 적용되지 않음

325 

326반환된 `env` 항목은 환경 변수가 되지 않습니다. 반환된 `allow`, `ask`, `deny` 규칙은 도구 호출 시 검사되지 않습니다. 이러한 항목은 [설정 파일](https://code.claude.com/docs/ko/settings.md)에서 설정하거나, 환경 변수의 경우 [`$.env.set`](https://code.claude.com/docs/ko/plugins/mods/api#reach-files-processes-and-the-network)을 호출합니다.

327 

328다른 키의 경우 [어떤 mod가 어느 버전부터 `settings.read`를 받는지](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-hook) 확인한 다음, [디버그 로그](#read-the-debug-log)에서 `settings.read`를 검색하여 다음 줄 중 하나를 찾습니다.

329 

330| 로그 줄 | 의미 및 조치 |

331| :- | :- |

332| mod 이름 뒤에 오는 `settings.read hook skipped` | 훅이 실패했습니다. [해당 줄이 보고하는 오류를 수정합니다](#hook-skipped). |

333| mod 이름이 앞에 나오는 줄의 `settings.read bypassed by cc-plugin-sec-default` | [기본 제공 가드](https://code.claude.com/docs/ko/plugins/mods/admin.md#know-what-happens-by-default)가 훅을 건너뛰었습니다. 조직의 관리자에게 [해당 mod를 조직의 mod 중 하나로 설치](https://code.claude.com/docs/ko/plugins/mods/admin.md#install-your-organizations-mods)해 달라고 요청합니다. |

334| `settings.read: the answer for <key> is no value the key can hold` | 반환된 값이 키의 스키마에 맞지 않습니다. [스키마가 허용하는 값을 반환합니다](#settings-read-key-refused). |

335| `settings.read: the merge never settles for <key>` | 해당 줄에 명시된 키는 설정 소스의 값을 유지합니다. 설정 파일에서 해당 키를 설정합니다. |

336| mod 이름 뒤에 오는 `answered settings.read without next()` | 해당 mod가 [사용자의 mod보다 먼저 실행되는](https://code.claude.com/docs/ko/plugins/mods/events.md#the-order-mods-run-in) 경우에만 관련이 있습니다. 이 경우 해당 읽기에서 사용자의 훅은 실행되지 않았습니다. [해당 mod를 끄거나](https://code.claude.com/docs/ko/plugins/mods/overview.md#turn-mods-on-or-off), 조직에서 배포한 mod라면 관리자에게 꺼 달라고 요청합니다. |

337| `settings.read: refused to the engine` | 읽기가 거부되어 어떤 훅의 `{ value }`도 적용되지 않았습니다. [무엇이 거부했는지 찾습니다](#settings-read-refused). |

338 

339어떤 줄로도 키를 설명할 수 없다면, 사용자의 mod보다 먼저 실행되는 mod 중 [키를 변경하는](https://code.claude.com/docs/ko/plugins/mods/events.md#settings-read-example) `settings.read` 훅이 있는지 확인합니다. 해당 mod를 끄거나, 조직의 관리자에게 꺼 달라고 요청합니다. 그러한 훅이 없다면 설정 파일에서 키를 설정합니다.

340 

341### `the answer for <key> is no value the key can hold`

342 

343이 [디버그 로그](#read-the-debug-log) 줄은 [`settings.read`](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-hook) 훅이 명시된 키에 대해 반환한 값을 Claude Code가 거부했으며, 해당 키에만 해당한다는 의미입니다.

344 

345```text theme={null}

346settings.read: the answer for <key> is no value the key can hold; the settings' own value stands

347```

348 

349명시된 키에 대해 반환한 값이 유형이나 범위 등에서 해당 키의 스키마에 맞지 않았습니다. 해당 키의 [설정 참조](https://code.claude.com/docs/ko/settings-reference.md) 항목이 허용하는 값을 반환합니다. 값이 맞지 않는 동안 해당 키는 훅이 응답하기 전에 설정 소스에서 병합된 값을 유지합니다. 로그 줄에서는 이를 설정 자체의 값(the settings' own value)이라고 부릅니다.

350 

351### `settings.read: refused to the engine`

352 

353이 [디버그 로그](#read-the-debug-log) 줄은 [Claude Code 자체의 읽기](https://code.claude.com/docs/ko/plugins/mods/events.md#settings-read-hook)가 거부되어 사용자의 훅을 포함한 어떤 훅의 `{ value }`도 적용되지 않았다는 의미입니다. `settings.read` 훅이 [`{ deny: reason }`](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-returns)으로 해당 읽기를 거부하면, 로그 줄에 그 훅의 사유가 포함됩니다.

354 

355```text theme={null}

356settings.read: refused to the engine (engine: $.settings.read: <reason>); the settings' own values stand

357```

358 

359사용자 훅의 코드에서 `<reason>` 텍스트를 검색합니다.

360 

361* **코드에 해당 텍스트가 있는 경우**: 사용자의 훅이 읽기를 거부했습니다. [`next.origin`](https://code.claude.com/docs/ko/plugins/mods/events#settings-read-origin)이 Claude Code 자체의 읽기를 나타낼 때 `{ value }`를 반환하도록 수정합니다.

362* **코드에 해당 텍스트가 없는 경우**: 다른 mod를 하나씩 [끕니다](https://code.claude.com/docs/ko/plugins/mods/overview.md#turn-mods-on-or-off). 하나를 끌 때마다 셸에서 이 세션의 명령을 새 경로를 지정한 `--debug-file` 하나와 함께 다시 실행하고, 해당 파일에서 `refused to the engine`을 검색합니다. 해당 줄이 있으면 다음 mod를 끕니다. 없으면 마지막으로 끈 mod가 읽기를 거부한 것이므로 그 mod를 끈 상태로 유지합니다.

363 

364남은 다른 mod가 없다면 훅이 반환하는 키에 대해 [설정 파일](https://code.claude.com/docs/ko/settings.md)을 사용합니다. 읽기가 거부되는 동안에도 설정 파일의 값은 유지됩니다.

365 

306## 디버그 로그 읽기366## 디버그 로그 읽기

307 367 

308디버그 로그에는 Claude Code가 로드하거나 거부하는 모든 모듈, 실패하는 모든 훅, 거부하는 모든 결과에 대한 줄이 기록되므로, 트랜스크립트에 아무것도 표시되지 않을 때 확인할 곳입니다. 로그를 작성하려면 셸에서 `--debug`로 Claude Code를 시작하거나, 저장 위치를 지정하려면 `--debug-file <path>`로 시작합니다:368디버그 로그에는 Claude Code가 로드하거나 거부하는 모든 모듈, 실패하는 모든 훅, 거부하는 모든 결과에 대한 줄이 기록되므로, 트랜스크립트에 아무것도 표시되지 않을 때 확인할 곳입니다. 로그를 작성하려면 셸에서 `--debug`로 Claude Code를 시작하거나, 저장 위치를 지정하려면 `--debug-file <path>`로 시작합니다:

Details

251 251 

252먼저 저장소 자체를 확인합니다: 철자가 잘못된 `owner/repo`, 존재하지 않는 저장소 또는 볼 수 없는 비공개 저장소도 이 메시지로 끝납니다. 브라우저에서 저장소 URL을 열거나 터미널에서 `git ls-remote <url>`을 실행하여 존재하고 액세스 권한이 있는지 확인합니다.252먼저 저장소 자체를 확인합니다: 철자가 잘못된 `owner/repo`, 존재하지 않는 저장소 또는 볼 수 없는 비공개 저장소도 이 메시지로 끝납니다. 브라우저에서 저장소 URL을 열거나 터미널에서 `git ls-remote <url>`을 실행하여 존재하고 액세스 권한이 있는지 확인합니다.

253 253 

254저장소가 맞으면 원인은 자격 증명입니다. Claude Code는 대화형 프롬프트를 비활성화하여 git을 실행하므로 터미널이 하는 방식으로 암호, 키 암호 또는 자격 증명을 요청할 수 없습니다. git이 프롬프트해야 하면 `fatal: Cannot prompt because user interactivity has been disabled` 또는 `terminal prompts disabled`가 원본 오류에 표시됩니다. 이미 비대화형으로 작동하는 자격 증명만 성공합니다:254저장소가 맞으면 원인은 자격 증명입니다. Claude Code는 `GIT_ASKPASS`에 설정된 것을 포함하여 git의 프롬프트와 askpass 프로그램을 끄고, SSH를 배치 모드로 실행합니다. git이 프롬프트를 표시해야 하는 경우 클론 오류에 `fatal: Cannot prompt because user interactivity has been disabled`, `terminal prompts disabled` 또는 `fatal: unable to get password from user`가 포함됩니다. git이 프롬프트나 askpass 프로그램 없이 얻을 수 있는 자격 증명만 성공합니다:

255 255 

256* **SSH**: `ssh -T git@<host>`는 암호 프롬프트 없이 성공해야 하며, 호스트는 이미 `known_hosts`에 있어야 합니다.256* **SSH**: `ssh -T git@<host>`는 암호 프롬프트 없이 성공해야 하며, 호스트는 이미 `known_hosts`에 있어야 합니다.

257* **HTTPS**: 자격 증명 도우미가 호스트에 대한 토큰을 보유해야 합니다. GitHub의 경우 `gh auth login` 및 `gh auth setup-git`을 실행합니다. 다른 호스트의 경우 git 자격 증명 도우미에 개인 액세스 토큰을 저장합니다. `git ls-remote <url>`로 테스트합니다.257* **HTTPS**: 자격 증명 도우미가 호스트에 대한 토큰을 보유해야 합니다. GitHub의 경우 `gh auth login` 및 `gh auth setup-git`을 실행합니다. 다른 호스트의 경우 git 자격 증명 도우미에 개인 액세스 토큰을 저장합니다. 테스트하려면 터미널에서 `GIT_ASKPASS`를 설정 해제하고 `git -c core.askPass= ls-remote <url>`을 실행합니다.

258 258 

259터미널에서 프롬프트 없이 `git ls-remote`가 성공하면 추가 또는 업데이트를 다시 실행합니다. 성공적인 추가는 `Successfully added marketplace: <name>`을 인쇄합니다. 성공적인 업데이트는 셸에서 `Successfully updated marketplace: <name>`을 인쇄하거나 세션에서 `✔ Updated 1 marketplace`을 인쇄합니다.259사용하는 프로토콜에 대한 확인이 프롬프트 없이 성공하면 추가 또는 업데이트를 다시 실행합니다. 성공적인 추가는 `Successfully added marketplace: <name>`을 인쇄합니다. 성공적인 업데이트는 셸에서 `Successfully updated marketplace: <name>`을 인쇄하거나 세션에서 `✔ Updated 1 marketplace`을 인쇄합니다.

260 260 

261Claude Code가 GitHub `owner/repo` 소스에 대해 SSH를 건너뛰도록 하려면 `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`을 설정합니다. 없으면 Claude Code는 `github.com`에 대한 SSH 키가 구성된 것처럼 보일 때 SSH를 통해 해당 소스를 클론하고 SSH 클론이 실패할 때 HTTPS로 폴백합니다.261Claude Code가 GitHub `owner/repo` 소스에 대해 SSH를 건너뛰도록 하려면 `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`을 설정합니다. 없으면 Claude Code는 `github.com`에 대한 SSH 키가 구성된 것처럼 보일 때 SSH를 통해 해당 소스를 클론하고 SSH 클론이 실패할 때 HTTPS로 폴백합니다.

262 262 


318 318 

319저장소가 모노레포인 경우 `claude plugin marketplace add <source> --sparse <paths>`로 이름을 지정하는 디렉토리로 체크아웃을 제한합니다.319저장소가 모노레포인 경우 `claude plugin marketplace add <source> --sparse <paths>`로 이름을 지정하는 디렉토리로 체크아웃을 제한합니다.

320 320 

321저장소에 큰 git 서브모듈이 있는 경우 Claude Code를 업데이트합니다. v2.1.295 이상에서는 Claude Code가 [플러그인 파일이 있는 서브모듈](https://code.claude.com/docs/ko/plugins/marketplace-reference.md#git-submodules-in-the-marketplace-repository)만 가져옵니다. 이전 버전은 모든 서브모듈을 가져오며, 이것만으로도 120초를 모두 소진할 수 있습니다.

322 

321### 마켓플레이스 업데이트가 오프라인에서 계속 실패323### 마켓플레이스 업데이트가 오프라인에서 계속 실패

322 324 

323마켓플레이스의 git 호스트에 도달할 수 없는 환경에서 작업하고 있으며, 모든 세션이 백그라운드에서 실패한 새로고침을 반복합니다. 마켓플레이스의 기존 체크아웃은 제자리에 남아 있고 시작이 지연되지 않습니다.325마켓플레이스의 git 호스트에 도달할 수 없는 환경에서 작업하고 있으며, 모든 세션이 백그라운드에서 실패한 새로고침을 반복합니다. 마켓플레이스의 기존 체크아웃은 제자리에 남아 있고 시작이 지연되지 않습니다.


609| `<Plugin or Dependency> "<name>" has conflicting version requirements` | 모든 범위를 만족하는 버전이 없습니다. 메시지는 범위를 나열합니다. | 충돌하는 플러그인 중 하나를 제거하거나 업데이트하거나 업스트림 작성자에게 제약을 넓히도록 요청합니다. |611| `<Plugin or Dependency> "<name>" has conflicting version requirements` | 모든 범위를 만족하는 버전이 없습니다. 메시지는 범위를 나열합니다. | 충돌하는 플러그인 중 하나를 제거하거나 업데이트하거나 업스트림 작성자에게 제약을 넓히도록 요청합니다. |

610| `... has version requirements too complex to intersect` 또는 `has an invalid version requirement` | 범위가 유효한 semver가 아니거나 결합된 범위를 교차할 수 없습니다. | 유효하지 않은 범위를 수정하거나 긴 `\|\|` 체인을 단순화합니다. |612| `... has version requirements too complex to intersect` 또는 `has an invalid version requirement` | 범위가 유효한 semver가 아니거나 결합된 범위를 교차할 수 없습니다. | 유효하지 않은 범위를 수정하거나 긴 `\|\|` 체인을 단순화합니다. |

611| `... has no git tag satisfying <range>` | 의존성의 저장소에 범위의 `<name>--v*` 태그가 없습니다. | 업스트림이 해당 규칙으로 릴리스를 태그하는지 확인하거나 범위를 완화합니다. |613| `... has no git tag satisfying <range>` | 의존성의 저장소에 범위의 `<name>--v*` 태그가 없습니다. | 업스트림이 해당 규칙으로 릴리스를 태그하는지 확인하거나 범위를 완화합니다. |

612| `Dependency "<dep>" (required by <plugin>) is in <marketplace>, which is not in the allowlist` | 의존성이 다른 마켓플레이스에 있고 교차 마켓플레이스 해결이 기본적으로 꺼져 있습니다. | 동일한 범위에서 의존성을 직접 설치합니다. 셸에서 `claude plugin install <dep>@<marketplace>` 및 플러그인을 설치하는 `--scope`를 사용한 다음 다시 시도합니다. |614| `Dependency "<dep>" (required by <plugin>) is in marketplace "<marketplace>", which is not in the allowlist` | 의존성이 다른 마켓플레이스에 있고 교차 마켓플레이스 해결이 기본적으로 꺼져 있습니다. | 동일한 범위에서 의존성을 직접 설치합니다. 셸에서 `claude plugin install <dep>@<marketplace>` 및 플러그인을 설치하는 `--scope`를 사용한 다음 다시 시도합니다. |

613 615 

614이를 프로그래밍 방식으로 보려면 셸에서 `claude plugin list --json`을 실행합니다. 문제가 있는 플러그인은 메시지가 있는 `errors` 필드와 각각에 대한 `type`이 있는 `errorDetails` 필드를 전달합니다: 처음 세 행은 `dependency-unsatisfied`이고 네 번째는 `dependency-version-unsatisfied`입니다.616이를 프로그래밍 방식으로 보려면 셸에서 `claude plugin list --json`을 실행합니다. 문제가 있는 플러그인은 메시지가 있는 `errors` 필드와 각각에 대한 `type`이 있는 `errorDetails` 필드를 전달합니다: 처음 세 행은 `dependency-unsatisfied`이고 네 번째는 `dependency-version-unsatisfied`입니다.

615 617 


979 981 

980### `${CLAUDE_PLUGIN_ROOT}`가 Windows에서 정방향 슬래시를 표시982### `${CLAUDE_PLUGIN_ROOT}`가 Windows에서 정방향 슬래시를 표시

981 983 

982Windows에서 플러그인 훅은 `C:\Users\you\...` 대신 `C:/Users/you/...`로 `${CLAUDE_PLUGIN_ROOT}`를 수신하고 백슬래시를 기대한 스크립트가 중단됩니다.984Windows에서 Git Bash를 통해 실행되는 플러그인 훅은 `C:\Users\you\...` 대신 `C:/Users/you/...`로 `${CLAUDE_PLUGIN_ROOT}`를 수신하고 백슬래시를 기대한 스크립트가 중단됩니다.

983 985 

984Claude Code는 Windows에서 Git Bash를 통해 셸 형식 훅을 실행하고 의도적으로 정방향 슬래시 Win32 형식으로 플러그인 루트를 대체합니다. Bash 내장, MSYS 도구 및 기본 Windows 바이너리는 모두 해당 형식을 허용합니다.986Git Bash가 설치되어 있으면 [셸 형식 훅](https://code.claude.com/docs/ko/hooks.md#exec-form-and-shell-form)은 기본적으로 Git Bash를 통해 실행됩니다. Git Bash를 통해 실행되는 훅의 경우 Claude Code는 Bash가 백슬래시를 이스케이프로 읽지 않도록 정방향 슬래시로 경로를 전달합니다. Bash 내장, MSYS 도구 및 기본 Windows 바이너리는 모두 해당 형식을 허용합니다.

985 987 

986스크립트에 백슬래시가 필요하면 [exec 형식 및 셸 형식](https://code.claude.com/docs/ko/hooks.md#exec-form-and-shell-form) 아래에 설명된 기본 경로를 유지하는 형식 중 하나로 훅을 전환합니다:988스크립트에 백슬래시가 필요하면 [exec 형식 및 셸 형식](https://code.claude.com/docs/ko/hooks.md#exec-form-and-shell-form) 아래에 설명된 기본 경로를 유지하는 형식 중 하나로 훅을 전환합니다:

987 989 


1090 1092 

1091또는 git 저장소에서 마켓플레이스를 호스팅하고 사용자에게 저장소 URL로 추가하도록 알립니다. git 소스의 경우 Claude Code가 전체 저장소를 클론하므로 상대 경로가 확인됩니다. 소스 유형은 [마켓플레이스 참조](https://code.claude.com/docs/ko/plugins/marketplace-reference.md)에 있습니다.1093또는 git 저장소에서 마켓플레이스를 호스팅하고 사용자에게 저장소 URL로 추가하도록 알립니다. git 소스의 경우 Claude Code가 전체 저장소를 클론하므로 상대 경로가 확인됩니다. 소스 유형은 [마켓플레이스 참조](https://code.claude.com/docs/ko/plugins/marketplace-reference.md)에 있습니다.

1092 1094 

1095### git 서브모듈에 있는 루트 플러그인의 파일이 설치 후 누락됨

1096 

1097플러그인이 마켓플레이스 루트에 있으며 저장소의 git 서브모듈에 있는 파일을 실행하거나 읽습니다. 설치 후 서브모듈의 디렉토리가 비어 있습니다. v2.1.295 이전에는 Claude Code가 모든 서브모듈을 가져왔으므로 디렉토리가 채워져 있었습니다.

1098 

1099Claude Code가 마켓플레이스를 클론할 때는 [플러그인 파일을 포함하는 서브모듈](https://code.claude.com/docs/ko/plugins/marketplace-reference.md#git-submodules-in-the-marketplace-repository)만 가져옵니다. 루트에 있는 플러그인의 경우 플러그인 구성의 경로와 플러그인 파일의 텍스트를 읽어 판단합니다. 스크립트가 실행 중에 만들어 내는 경로는 인식할 수 없습니다.

1100 

1101서브모듈 내부를 가리키는 경로를 Claude Code가 읽을 수 있는 곳에 전체 형태로 작성합니다(예: 훅 명령의 `${CLAUDE_PLUGIN_ROOT}/vendor/tool/run.sh`). 그러면 Claude Code가 해당 플러그인에 대해 저장소의 모든 서브모듈을 가져옵니다.

1102 

1093### 마켓플레이스 유효성 검사 오류1103### 마켓플레이스 유효성 검사 오류

1094 1104 

1095마켓플레이스 디렉토리에서 `claude plugin validate .`를 실행했고 마켓플레이스 파일 자체에 오류 또는 경고를 보고했습니다.1105마켓플레이스 디렉토리에서 `claude plugin validate .`를 실행했고 마켓플레이스 파일 자체에 오류 또는 경고를 보고했습니다.


1115 1125 

1116v2.1.247 이전에는 제어 또는 양방향 형식 문자를 포함하는 마켓플레이스 이름이 `Marketplace name impersonates an official Anthropic/Claude marketplace`로만 보고되었습니다.1126v2.1.247 이전에는 제어 또는 양방향 형식 문자를 포함하는 마켓플레이스 이름이 `Marketplace name impersonates an official Anthropic/Claude marketplace`로만 보고되었습니다.

1117 1127 

1118## 조직에서 차단됨1128## 조직에 의해 차단됨

1119 1129 

1120조직에서 플러그인을 제한하는 관리 설정을 배포했으며, 명령이 정책 메시지와 함께 거부되었습니다. 이 항목들은 각 거부 뒤의 설정 이름을 지정하므로 관리자에게 무엇을 요청해야 하는지 알 수 있습니다. 관리자 측의 경우 [조직을 위한 플러그인 관리](https://code.claude.com/docs/ko/plugins/org.md)를 참조하십시오.1130조직에서 플러그인을 제한하는 관리형 설정을 배포했으며, 정책 메시지와 함께 명령이 거부되었습니다. 이 항목들은 각 거부의 원인이 되는 설정을 알려 주므로 관리자에게 무엇을 요청해야 하는지 알 수 있습니다. 관리자 측 내용은 [조직의 플러그인 관리](https://code.claude.com/docs/ko/plugins/org.md)를 참조하세요.

1121 1131 

1122### `Marketplace source '<source>' is blocked by enterprise policy`1132### `Marketplace source '<source>' is blocked by enterprise policy`

1123 1133 

1124`/plugin marketplace add`, `update`를 실행했거나 설치했으며, Claude Code가 이 줄로 거부했습니다. GitHub 또는 git 소스의 경우, 호스트는 `'github:owner/repo' (github.com)`과 같이 괄호 안의 소스를 따릅니다.1134`/plugin marketplace add`, `update` 또는 설치를 실행했는데 Claude Code가 이 메시지와 함께 거부한 경우입니다.

1125 1135 

1126관리자가 관리 설정에서 `blockedMarketplaces` 또는 `strictKnownMarketplaces`를 설정했으며, 이 소스는 허용되지 않습니다. 관리자에게 소스를 허용하도록 요청하거나, 메시지가 나열하는 허용된 소스 중 하나를 추가하십시오.1136관리자가 관리형 설정에서 `blockedMarketplaces` 또는 `strictKnownMarketplaces`를 설정했으며, 이 소스는 허용되지 않습니다. 관리자에게 해당 소스를 허용해 달라고 요청하거나, 메시지에 나열된 허용된 소스 중 하나를 추가하세요.

1127 1137 

1128메시지의 나머지 부분을 일치시켜 어떤 종류의 정책이 소스를 차단했는지 확인하십시오:1138메시지의 나머지 부분을 확인하여 어떤 종류의 정책이 소스를 차단했는지 파악하세요.

1129 1139 

1130* **`Allowed sources: <list>`**: 차단은 `blockedMarketplaces` 차단 목록이 아닌 `strictKnownMarketplaces` 허용 목록에서 비롯됩니다1140* **`Allowed sources: <list>`**: 차단이 `blockedMarketplaces` 차단 목록이 아니라 `strictKnownMarketplaces` 허용 목록에서 비롯된 것입니다

1131* **`No external marketplaces are allowed.`**: `strictKnownMarketplaces` 허용 목록이 비어 있습니다1141* **`No external marketplaces are allowed.`**: `strictKnownMarketplaces` 허용 목록이 비어 있습니다

1132* **shorthand가 github.com을 가정한다는 `Tip:`**: 허용 목록이 호스트 이름으로 git 호스트를 허용하며, 전달한 `owner/repo` shorthand는 github.com을 가리킵니다. 저장소가 내부 호스트에 있는 경우, `git@your-git-host.com:owner/repo.git`과 같은 전체 URL로 다시 추가하십시오.1142* **단축 표기가 github.com을 가정한다는 `Tip:`**: 허용 목록이 호스트 이름으로 Git 호스트를 허용하고 있으며, 전달한 `owner/repo` 단축 표기는 github.com을 가리킵니다. 저장소가 내부 호스트에 있다면 `git@your-git-host.com:owner/repo.git`과 같이 전체 URL로 다시 추가하세요

1133 1143 

1134정책이 더 제한적이 되기 전에 추가한 마켓플레이스는 정책이 모든 새로고침에 적용되기 때문에 새로고침도 중단됩니다.1144정책은 새로 고칠 때마다 적용되므로, 정책이 더 엄격해지기 전에 추가한 마켓플레이스도 새로 고쳐지지 않습니다.

1135 1145 

1136### `Marketplace "<name>" is not in the allowed marketplace list`1146### `Marketplace "<name>" is not in the allowed marketplace list`

1137 1147 

1138**Errors** 탭에 이 줄이 표시되거나, 이미 등록한 마켓플레이스에 대해 `Marketplace "<name>" is blocked by enterprise policy`가 표시됩니다.1148이미 등록된 마켓플레이스에 대해 **Errors** 탭에 이 메시지 또는 `Marketplace "<name>" is blocked by enterprise policy`가 표시되는 경우입니다.

1139 1149 

1140[마켓플레이스 소스](#marketplace-source-is-blocked-by-enterprise-policy)를 차단하는 동일한 관리 설정이 로드 시간에 적용됩니다. `strictKnownMarketplaces`에 이 마켓플레이스가 포함되지 않거나 `blockedMarketplaces`가 이를 지정하므로, Claude Code는 이를 및 해당 플러그인을 로드하는 것을 중단합니다. 허용 목록 변형의 경우, 지침 줄에 허용된 소스가 표시되거나 `Contact your administrator to configure allowed marketplace sources`가 표시됩니다. 차단 목록 변형의 경우 `This marketplace source is explicitly blocked by your administrator`로 읽힙니다.1150[마켓플레이스 소스](#marketplace-source-is-blocked-by-enterprise-policy)를 차단하는 것과 동일한 관리형 설정이 로드 시점에도 적용됩니다. `strictKnownMarketplaces`에 이 마켓플레이스가 포함되어 있지 않거나 `blockedMarketplaces`에 이 마켓플레이스가 지정되어 있으므로, Claude Code는 해당 마켓플레이스와 그 플러그인의 로드를 중단합니다. 허용 목록의 경우 안내 메시지에 허용된 소스 또는 `Contact your administrator to configure allowed marketplace sources`가 표시됩니다. 차단 목록의 경우 `This marketplace source is explicitly blocked by your administrator`로 표시됩니다.

1141 1151 

1142### `Plugin "<name>" is blocked by your organization's policy and cannot be installed`1152### `Plugin "<name>" is blocked by your organization's policy and cannot be installed`

1143 1153 

1144설치가 이 줄로 거부되었거나, 동일한 줄로 끝나는 `cannot be enabled`로 활성화되었거나, 이유를 지정하는 설치 또는 업데이트가 있었습니다: `Plugin "<name>" is from marketplace "<marketplace>", which is blocked by your organization's policy` 또는 `Plugin "<name>" depends on "<dep>", which is blocked by your organization's policy`.1154설치가 이 메시지와 함께 거부되었거나, 활성화가 `cannot be enabled`로 끝나는 동일한 메시지와 함께 거부되었거나, 설치 또는 업데이트가 `Plugin "<name>" is from marketplace "<marketplace>", which is blocked by your organization's policy` 또는 `Plugin "<name>" depends on "<dep>", which is blocked by your organization's policy`와 같이 이유를 명시하는 메시지와 함께 거부된 경우입니다.

1145 1155 

1146관리 설정이 이 플러그인, 해당 마켓플레이스 또는 필요한 종속성을 차단합니다. 관리자에게 어떤 항목이 적용되는지 물어보십시오. 차단된 종속성은 종속성의 마켓플레이스가 허용될 때까지 플러그인을 설치할 수 없음을 의미합니다.1156관리형 설정이 이 플러그인, 해당 마켓플레이스 또는 플러그인에 필요한 의존성을 차단하고 있습니다. 관리자에게 어떤 항목이 적용되는지 문의하세요. 의존성이 차단된 경우, 해당 의존성의 마켓플레이스가 허용될 때까지 플러그인을 설치할 수 없습니다.

1147 1157 

1148### `--plugin-dir is disabled by your organization's managed settings (disableSideloadFlags)`1158### `--plugin-dir is disabled by your organization's managed settings (disableSideloadFlags)`

1149 1159 

1150`--plugin-dir`, `--plugin-url`, `--agents` 또는 `--mcp-config`로 `claude`를 시작했습니다. Claude Code가 이 메시지와 `Plugins, custom agents, and MCP servers can only be loaded from sources your administrator has approved.`로 종료되었습니다.1160`--plugin-dir`, `--plugin-url`, `--agents` 또는 `--mcp-config`를 사용하여 `claude`를 시작했는데, Claude Code가 이 메시지와 `Plugins, custom agents, and MCP servers can only be loaded from sources your administrator has approved.`를 표시하며 종료된 경우입니다.

1151 1161 

1152관리자가 관리 설정에서 `disableSideloadFlags`를 설정했으며, 이는 임의의 경로에서 플러그인, 에이전트 및 서버를 로드하는 플래그를 끕니다. 승인된 마켓플레이스에서 플러그인을 로드하거나, 관리자에게 설정을 제거하도록 요청하십시오.1162관리자가 관리형 설정에서 `disableSideloadFlags`를 설정했으며, 이 설정은 임의의 경로에서 플러그인, 에이전트, 서버를 로드하는 플래그를 끕니다. 대신 승인된 마켓플레이스에서 플러그인을 로드하거나, 관리자에게 해당 설정을 제거해 달라고 요청하세요.

1153 1163 

1154`/plugin` **Errors** 탭의 관련 메시지는 `--plugin-dir copy of "<name>" ignored: plugin is locked by managed settings`입니다. 관리 설정이 해당 플러그인을 이름으로 활성화 또는 비활성화하며, Claude Code는 플래그가 정책을 재정의할 수 없도록 `--plugin-dir` 복사본을 무시합니다.1164`/plugin` **Errors** 탭의 관련 메시지로는 `--plugin-dir copy of "<name>" ignored: plugin is locked by managed settings`가 있습니다. 관리형 설정이 해당 플러그인을 이름으로 활성화하거나 비활성화하고 있으며, 플래그가 정책을 재정의할 수 없도록 Claude Code는 `--plugin-dir`로 지정한 해당 플러그인의 사본을 무시합니다.

1155 1165 

1156### `Plugins from ~/.claude/skills/ are blocked by your organization's managed settings`1166### `Plugins from ~/.claude/skills/ are blocked by your organization's managed settings`

1157 1167 

1158`claude plugin init` 또는 `claude plugin enable`을 실행했으며, 이 줄로 중단되었습니다. 메시지는 `strictKnownMarketplaces or blockedMarketplaces`를 지정하고 관리자에게 `{"source":"skills-dir"}`을 `strictKnownMarketplaces`에 추가하거나 `blockedMarketplaces`에서 제거하도록 요청합니다.1168`claude plugin init` 또는 `claude plugin enable`을 실행했는데 이 메시지와 함께 중단된 경우입니다. 메시지는 `strictKnownMarketplaces or blockedMarketplaces`를 지정하며, 관리자에게 `{"source":"skills-dir"}`를 `strictKnownMarketplaces`에 추가하거나 `blockedMarketplaces`에서 제거해 달라고 요청하도록 안내합니다.

1159 1169 

1160`skills-dir` 소스는 Claude Code가 `~/.claude/skills/` 디렉토리에서 로드하는 플러그인을 나타냅니다. 관리자에게 메시지가 지정하는 변경을 수행하도록 요청하십시오.1170`skills-dir` 소스는 Claude Code가 `~/.claude/skills/` 디렉터리에서 로드하는 플러그인을 나타냅니다. 관리자에게 메시지에 명시된 변경을 요청하세요.

1161 1171 

1162### `Command-sourced plugins are disabled by your organization's managed settings`1172### `Command-sourced plugins are disabled by your organization's managed settings`

1163 1173 

1164`command` 소스로 플러그인을 설치 또는 업데이트했으며, 이 줄과 `The plugin was not installed or updated and its command was not run.`로 중단되었습니다.1174`command` 소스를 사용하는 플러그인을 설치하거나 업데이트했는데, 이 메시지와 `The plugin was not installed or updated and its command was not run.`와 함께 중단된 경우입니다.

1165 1175 

1166관리자가 `disableCommandPluginSources`를 설정했으므로, Claude Code는 플러그인을 생성하는 마켓플레이스 선언 명령을 실행하기를 거부합니다. `disableCommandPluginSources`가 설정되지 않은 경우 `allowManagedHooksOnly`만 설정하면 동일한 효과가 있습니다. 관리자에게 플러그인을 정책이 허용하는 소스 유형에서 게시할 수 있는지 물어보십시오.1176관리자가 `disableCommandPluginSources`를 설정했으므로, Claude Code는 마켓플레이스에 선언된, 플러그인을 생성하는 명령의 실행을 거부합니다. `disableCommandPluginSources`가 설정되지 않은 경우 `allowManagedHooksOnly`만 설정해도 같은 효과가 있습니다. 정책에서 허용하는 소스 유형으로 플러그인을 게시할 수 있는지 관리자에게 문의하세요.

1167 1177 

1168### `Marketplace '<name>' is seed-managed`1178### `Marketplace '<name>' is seed-managed`

1169 1179 

1170`claude plugin marketplace update <name>`을 실행했으며, `Marketplace '<name>' is seed-managed (<dir>)`로 실패했으며 관리자에게 문의하라는 힌트가 있습니다.1180`claude plugin marketplace update <name>`을 실행했는데 `Marketplace '<name>' is seed-managed (<dir>)`와 관리자에게 문의하라는 힌트와 함께 실패한 경우입니다.

1171 1181 

1172운영자가 `CLAUDE_CODE_PLUGIN_SEED_DIR`을 통해 이 마켓플레이스를 미리 채웠으며, Claude Code는 seed-managed 마켓플레이스를 읽기 전용으로 취급합니다. 대량 `marketplace update`는 이를 건너뛰고 다른 것들을 업데이트합니다.1182운영자가 `CLAUDE_CODE_PLUGIN_SEED_DIR`을 통해 이 마켓플레이스를 미리 채워 두었으며, Claude Code는 시드로 관리되는 마켓플레이스를 읽기 전용으로 취급합니다. 일괄 `marketplace update`는 이 마켓플레이스를 건너뛰고 나머지를 업데이트합니다.

1173 1183 

1174마켓플레이스의 콘텐츠를 변경하려면, seed 이미지를 유지하는 사람에게 업데이트하도록 요청하십시오. 절차는 [Seed 컨테이너 및 CI](https://code.claude.com/docs/ko/plugins/org.md#seed-containers-and-ci)를 참조하십시오.1184마켓플레이스의 콘텐츠를 변경하려면 시드 이미지를 유지 관리하는 담당자에게 업데이트를 요청하세요. 절차는 [시드 컨테이너 및 CI](https://code.claude.com/docs/ko/plugins/org.md#seed-containers-and-ci)를 참조하세요.

1175 1185 

1176## 다음 단계1186## 다음 단계

1177 1187 

Details

100 100 

101### 빠른 모드 켜기101### 빠른 모드 켜기

102 102 

103[빠른 모드](https://code.claude.com/docs/ko/fast-mode.md)를 활성화하면 캐시 키의 일부인 요청 헤더가 추가되므로 Claude Code가 빠른 모드를 켜고 보내는 첫 번째 요청은 캐시 히트 없이 전체 대화 기록을 읽습니다. Claude Code는 턴이 시작될 때 해당 헤더를 한 번 설정하고 전체 턴 동안 유지하므로 Claude가 작업 중일 때 빠른 모드를 켜면 헤더로 인한 캐시 미스가 다음 턴의 첫 번째 요청에서 발생합니다. 캐시되지 않은 입력 토큰은 [빠른 모드 요금](https://code.claude.com/docs/ko/fast-mode.md#understand-the-cost-tradeoff)으로 청구되므로 세션 시작 시 켜는 것이 긴 세션 깊숙이 켜는 것보다 비용이 적습니다. 현재 모델이 빠른 모드를 지원하지 않으면 빠른 모드를 활성화하면 [모델도 전환](#switching-models)되며, 그 전환은 실행 중인 턴의 다음 요청부터 자체적으로 새로운 캐시를 시작합니다.103[빠른 모드](https://code.claude.com/docs/ko/fast-mode.md)와 표준 속도는 별도의 캐시를 유지하므로, 빠른 모드를 켜거나 끈 후 다음 요청은 다른 속도에서 캐시한 내용을 사용할 수 없습니다. 대화에서 처음으로 빠른 모드를 켜면 다음 요청은 지금까지의 전체 대화를 캐시 없이 [빠른 모드 요금](https://code.claude.com/docs/ko/fast-mode.md#understand-the-cost-tradeoff)으로 읽습니다. 이 비용을 작게 유지하려면 세션을 시작할 때 빠른 모드를 켭니다.

104 104 

105비용은 대화당 한 번 적용됩니다. 첫 번째 빠른 모드 턴 후 Claude Code는 계속 헤더를 보내고 캐시 키의 일부가 아닌 요청의 속도 설정만 변합니다. 빠른 모드를 끄기, [속도 제한 후 표준 속도로 자동 폴백](https://code.claude.com/docs/ko/fast-mode.md#handle-rate-limits), 나중에 다시 켜기는 모두 캐시를 유지합니다. 세션 중간에 [사용량 크레딧이 소진](https://code.claude.com/docs/ko/fast-mode.md#handle-rate-limits)되면 Claude Code는 거부된 각 빠른 모드 요청을 같은 방식으로 표준 속도에서 재시도하므로 이 폴백도 캐시를 유지합니다. `/clear`와 `/compact`는 어쨌든 그 지점에서 캐시를 다시 빌드하므로 이를 재설정합니다.105* Claude가 작업 중일 때 켜면 해당 턴은 표준 속도로 완료되며, 캐시되지 않은 읽기 비용은 다음 턴의 첫 번째 요청에서 지불합니다.

106* 현재 모델이 빠른 모드를 지원하지 않으면 빠른 모드를 활성화할 때 [Opus로도 전환](https://code.claude.com/docs/ko/fast-mode.md#toggle-fast-mode)됩니다. 이 [모델 전환](#switching-models)은 실행 중인 턴의 다음 요청부터 자체적으로 새로운 캐시를 시작합니다.

107 

108이후의 각 토글은 전환하는 속도에 캐시되어 있지 않은 내용을 캐시 없이 읽습니다. 속도 제한 후 [표준 속도로 폴백](https://code.claude.com/docs/ko/fast-mode.md#handle-rate-limits)하고 나중에 빠른 모드로 돌아가는 것처럼 Claude Code가 자체적으로 수행하는 속도 변경도 토글로 간주됩니다.

106 109 

107### MCP 서버 연결 또는 제거110### MCP 서버 연결 또는 제거

108 111 


184>187>

185> 압축은 더 이상 필요하지 않은 콘텐츠를 버릴 때 유리합니다. 오버헤드가 발생하는 시기를 선택하려면 작업 중간에 자동 압축이 트리거되기를 기다리는 대신 작업 간 자연스러운 휴식 시간에 `/compact`를 실행합니다. 완전히 포기하고 싶은 경로로 들어섰다면 대신 [`/rewind`](#rewinding-the-conversation)로 이전 턴으로 되돌아갑니다. 되감기는 압축처럼 새 접두사를 빌드하는 대신 이미 캐시된 접두사로 다시 잘라냅니다.188> 압축은 더 이상 필요하지 않은 콘텐츠를 버릴 때 유리합니다. 오버헤드가 발생하는 시기를 선택하려면 작업 중간에 자동 압축이 트리거되기를 기다리는 대신 작업 간 자연스러운 휴식 시간에 `/compact`를 실행합니다. 완전히 포기하고 싶은 경로로 들어섰다면 대신 [`/rewind`](#rewinding-the-conversation)로 이전 턴으로 되돌아갑니다. 되감기는 압축처럼 새 접두사를 빌드하는 대신 이미 캐시된 접두사로 다시 잘라냅니다.

186 189 

187긴 대화가 [1시간 TTL](#which-ttl-each-request-gets)을 사용하는 동안 터미널 세션에서 유휴 상태로 두면 Claude Code는 캐시가 만료되기 직전에 해당 대화를 압축할 수 있습니다. 유휴 압축을 끄려면 [`idleCompaction`](https://code.claude.com/docs/ko/settings-reference#idlecompaction)을 `false`로 설정합니다. 이 설정에는 Claude Code v2.1.290 이상이 필요합니다.190긴 대화가 [1시간 TTL](#which-ttl-each-request-gets)을 사용하는 동안 유휴 상태로 두면 Claude Code는 해당 대화를 압축할 수 있습니다. 유휴 압축을 끄려면 [`idleCompaction`](https://code.claude.com/docs/ko/settings-reference#idlecompaction)을 `false`로 설정합니다. 이 설정에는 Claude Code v2.1.290 이상이 필요합니다.

188 191 

189### 많은 이미지 누적192### 많은 이미지 누적

190 193 


309 312 

310Claude Code에서 캐시는 효과적으로 하나의 머신과 디렉토리로 범위가 지정됩니다. 시스템 프롬프트는 자동 메모리 경로를 포함하며, 대화는 작업 디렉토리, 플랫폼, 셸 및 OS 버전의 공지로 시작됩니다. 따라서 서로 다른 디렉토리의 두 세션은 서로 다른 접두사를 구축하고 서로의 캐시를 놓칩니다.313Claude Code에서 캐시는 효과적으로 하나의 머신과 디렉토리로 범위가 지정됩니다. 시스템 프롬프트는 자동 메모리 경로를 포함하며, 대화는 작업 디렉토리, 플랫폼, 셸 및 OS 버전의 공지로 시작됩니다. 따라서 서로 다른 디렉토리의 두 세션은 서로 다른 접두사를 구축하고 서로의 캐시를 놓칩니다.

311 314 

312동일한 디렉토리에서 병렬로 실행하는 세션은 일치하는 접두사를 구축하고 서로의 캐시를 읽습니다. 순차 세션은 시작 시 촬영한 git 상태 스냅샷이 일치할 때만 접두사를 공유합니다. 각 대화는 해당 스냅샷의 분기 및 최근 커밋도 포함하기 때문입니다.315* 동일한 디렉터리에서 병렬로 실행하는 세션은 일치하는 접두사를 구성하므로 서로의 캐시를 읽을 수 있습니다.

316* 순차 세션은 시작 시 생성된 git 상태 스냅샷이 일치할 때만 접두사를 공유합니다. 각 대화에는 해당 스냅샷의 브랜치와 최근 커밋도 포함되기 때문입니다.

317 

318기반이 되는 API 캐시는 범위가 더 넓습니다. 캐시는 조직 간에 격리되며, 일부 제공자의 경우 [조직 내 워크스페이스 간에도 격리됩니다](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#cache-storage-and-sharing). 이러한 경계 내에서 두 요청은 모델, [속도](#turning-on-fast-mode), 접두사가 모두 일치할 때만 캐시를 공유합니다.

313 319 

314기본 API 캐시는 더 광범위합니다. 캐시는 조직 간에 격리되며, 일부 제공자의 경우 [조직 내 워크스페이스 간에 격리됩니다](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#cache-storage-and-sharing). 이러한 경계 내에서 동일한 모델과 접두사를 가진 두 요청은 동일한 캐시를 읽습니다. Agent SDK 호출자가 자동화된 프로세스의 플릿을 실행하는 경우, [사용자 및 머신 간 프롬프트 캐싱 개선](https://code.claude.com/docs/ko/agent-sdk/modifying-system-prompts.md#improve-prompt-caching-across-users-and-machines)을 참조하여 자동 메모리 위치를 시스템 프롬프트 밖으로 이동하고 시스템 프롬프트의 캐시 항목을 사용자 및 머신 간에 공유합니다.320자동화된 프로세스를 대규모로 실행하는 Agent SDK 호출자의 경우, [사용자 및 머신 간 프롬프트 캐싱 개선](https://code.claude.com/docs/ko/agent-sdk/modifying-system-prompts.md#improve-prompt-caching-across-users-and-machines)을 참조하여 자동 메모리 위치를 시스템 프롬프트 밖으로 이동하십시오.

315 321 

316## 캐시 성능 확인322## 캐시 성능 확인

317 323 

Details

179* **변경 사항의 diff**: 세션의 디렉터리가 git 저장소에 있으면 연결된 기기의 diff 창에 변경 사항이 표시됩니다. 저장소의 기본 브랜치보다 앞선 커밋이 있는 브랜치에서는 커밋되지 않은 편집을 포함하여 브랜치가 기본 브랜치에서 갈라진 이후의 변경 사항이 표시됩니다. 기본 브랜치 자체 또는 기본 브랜치보다 앞서지 않은 브랜치에서는 커밋되지 않은 변경 사항만 표시됩니다.179* **변경 사항의 diff**: 세션의 디렉터리가 git 저장소에 있으면 연결된 기기의 diff 창에 변경 사항이 표시됩니다. 저장소의 기본 브랜치보다 앞선 커밋이 있는 브랜치에서는 커밋되지 않은 편집을 포함하여 브랜치가 기본 브랜치에서 갈라진 이후의 변경 사항이 표시됩니다. 기본 브랜치 자체 또는 기본 브랜치보다 앞서지 않은 브랜치에서는 커밋되지 않은 변경 사항만 표시됩니다.

180* **모델**: 연결된 기기에서 [모델](https://code.claude.com/docs/ko/model-config.md)을 선택하면 Claude Code는 해당 모델로 세션을 실행합니다. Claude Code v2.1.238 이상이 필요합니다. 기기의 모델 컨트롤에서 선택한 모델은 현재 세션에만 적용됩니다. 기기에서 대화형 세션으로 `/model <name>`을 보내면 Claude Code는 새 세션의 기본값도 설정합니다.180* **모델**: 연결된 기기에서 [모델](https://code.claude.com/docs/ko/model-config.md)을 선택하면 Claude Code는 해당 모델로 세션을 실행합니다. Claude Code v2.1.238 이상이 필요합니다. 기기의 모델 컨트롤에서 선택한 모델은 현재 세션에만 적용됩니다. 기기에서 대화형 세션으로 `/model <name>`을 보내면 Claude Code는 새 세션의 기본값도 설정합니다.

181* **Effort 수준**: 연결된 기기에서 `/effort` 또는 기기의 effort 컨트롤로 [effort 수준](https://code.claude.com/docs/ko/model-config.md#adjust-effort-level)을 설정하면 Claude Code는 사용자 머신의 세션에 이를 적용합니다. `CLAUDE_CODE_EFFORT_LEVEL`로 수준을 고정한 경우 세션은 해당 수준을 유지하며, Claude Code는 effort 컨트롤에서 다른 값을 선택해도 거부합니다. effort 컨트롤에서 수준을 선택하려면 사용자 머신에 Claude Code v2.1.234 이상이 필요합니다.181* **Effort 수준**: 연결된 기기에서 `/effort` 또는 기기의 effort 컨트롤로 [effort 수준](https://code.claude.com/docs/ko/model-config.md#adjust-effort-level)을 설정하면 Claude Code는 사용자 머신의 세션에 이를 적용합니다. `CLAUDE_CODE_EFFORT_LEVEL`로 수준을 고정한 경우 세션은 해당 수준을 유지하며, Claude Code는 effort 컨트롤에서 다른 값을 선택해도 거부합니다. effort 컨트롤에서 수준을 선택하려면 사용자 머신에 Claude Code v2.1.234 이상이 필요합니다.

182* **연결 실패 후 다시 연결**: `/remote-control`을 실행하여 다시 연결합니다. 그 사이에 압축으로 대화가 다시 작성되었거나 `/resume`으로 대화를 전환한 경우, Claude Code는 사용하던 서버 세션을 세션 목록에 남겨 두는 대신 보관 처리합니다. [보관된 세션을 필터링](https://code.claude.com/docs/ko/claude-code-on-the-web.md#archive-sessions)하여 여전히 찾을 수 있습니다. 기기가 연결된 상태에서 대화를 전환하면 세션이 보관 처리되지 않습니다.182* **연결 실패 후 다시 연결**: `/remote-control`을 실행하여 다시 연결합니다. 그 사이에 압축으로 대화가 다시 작성되었거나 `/resume`으로 대화를 전환한 경우, Claude Code는 사용하던 서버 세션을 세션 목록에 남겨 두는 대신 보관 처리합니다. claude.ai/code의 [보관된 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md#find-an-archived-session)에서 해당 세션을 여전히 찾을 수 있습니다. 기기가 연결된 상태에서 대화를 전환하면 세션이 보관 처리되지 않습니다.

183 183 

184### 모든 세션에서 Remote Control 활성화하기184### 모든 세션에서 Remote Control 활성화하기

185 185 


401 401 

402## 문제 해결402## 문제 해결

403 403 

404### "Remote Control disconnected" or "Can't reach"

405 

406[claude.ai/code](https://claude.ai/code) 또는 Desktop 앱에서 **Remote Control disconnected** 또는 **Can't reach** 메시지가 표시되면 브라우저나 앱이 컴퓨터의 Claude Code와 연결이 끊어졌다는 의미입니다. 두 메시지 모두 Claude나 지켜보던 서브에이전트가 컴퓨터에서 여전히 작업 중인지는 알려 주지 않습니다. 해당 컴퓨터에서 Claude Code가 어떤 상태인지 확인하고, 그에 맞는 단계에 따라 다시 연결합니다:

407 

408* **대화형 세션에 `Remote Control disconnected`가 표시됨**: [해당 줄에 표시된 이유에 맞는 재연결 단계](#session-ended-elsewhere)를 따릅니다

409* **Claude Code가 실행 중이며 실패가 표시되지 않음**: 대화형 세션은 머신이 절전 모드에서 깨어나 온라인 상태가 되면 자동으로 다시 연결되므로 별도의 조치가 필요하지 않습니다. `claude remote-control`을 사용한 경우 [제한 사항](#limitations)의 **Extended network outage**를 참조하세요

410* **Claude Code가 실행 중이 아님**: [다시 시작하여 세션을 복구합니다](#resume-sessions-after-stopping-the-server)

411 

404### "Remote Control requires a claude.ai subscription"412### "Remote Control requires a claude.ai subscription"

405 413 

406Claude.ai 계정으로 로그인하지 않았거나 다른 자격 증명이 로그인보다 우선순위를 가지고 있습니다. 메시지는 다음 중 하나의 형태를 띱니다:414Claude.ai 계정으로 로그인하지 않았거나 다른 자격 증명이 로그인보다 우선순위를 가지고 있습니다. 메시지는 다음 중 하나의 형태를 띱니다:


463* **`/remote-control`, `claude --remote-control` 또는 [자동 연결](#enable-remote-control-for-all-sessions)로 시작한 경우**: 세션은 Remote Control 없이 계속 실행되며, Claude Code는 claude.ai에서 해당 세션을 보관합니다471* **`/remote-control`, `claude --remote-control` 또는 [자동 연결](#enable-remote-control-for-all-sessions)로 시작한 경우**: 세션은 Remote Control 없이 계속 실행되며, Claude Code는 claude.ai에서 해당 세션을 보관합니다

464* **`claude remote-control`로 시작한 경우**: 서버가 중지되고 제공하던 세션을 보관한 후 종료됩니다472* **`claude remote-control`로 시작한 경우**: 서버가 중지되고 제공하던 세션을 보관한 후 종료됩니다

465 473 

466[보관된 세션을 필터링](https://code.claude.com/docs/ko/claude-code-on-the-web.md#archive-sessions)하면 보관된 세션을 여전히 찾을 수 있습니다.474이러한 세션을 다시 찾으려면 claude.ai/code에서 [보관된 세션](https://code.claude.com/docs/ko/claude-code-on-the-web.md#find-an-archived-session)을 엽니다.

467 475 

468Remote Control은 자동으로 다시 연결되지 않습니다. 조직이 다시 허용한 후 Remote Control을 다시 켜려면 세션에서 `/remote-control`을 실행하거나 셸에서 `claude remote-control`을 실행합니다. 이 머신의 Claude Code가 변경된 정책을 가져올 때까지 두 명령 모두 [`Remote Control is disabled by your organization's policy`](#remote-control-is-disabled-by-your-organizations-policy)로 실패합니다. 열려 있는 세션은 약 1시간에 한 번 정책을 가져옵니다. 무엇이 Remote Control을 차단하고 있는지 확인하려면 명령이 출력하는 전체 텍스트를 해당 항목과 대조합니다.476Remote Control은 자동으로 다시 연결되지 않습니다. 조직이 다시 허용한 후 Remote Control을 다시 켜려면 세션에서 `/remote-control`을 실행하거나 셸에서 `claude remote-control`을 실행합니다. 이 머신의 Claude Code가 변경된 정책을 가져올 때까지 두 명령 모두 [`Remote Control is disabled by your organization's policy`](#remote-control-is-disabled-by-your-organizations-policy)로 실패합니다. 열려 있는 세션은 약 1시간에 한 번 정책을 가져옵니다. 무엇이 Remote Control을 차단하고 있는지 확인하려면 명령이 출력하는 전체 텍스트를 해당 항목과 대조합니다.

469 477 

routines.md +24 −4

Details

293 293 

294#### 지원되는 이벤트294#### 지원되는 이벤트

295 295 

296GitHub 트리거는 다음 이벤트 범주 중 하나를 구독할 수 있습니다. 각 범주 내에서 `pull_request.opened`와 같은 특정 작업을 선택하거나 범주의 모든 작업에 반응할 수 있습니다.296다음 범주 중 어느 것에서든 이벤트를 선택합니다. 각 범주 내에서 `pull_request.opened`와 같은 특정 작업을 선택하거나 범주의 모든 작업에 반응할 수 있습니다.

297 297 

298| 이벤트 | 트리거 시점 |298| 이벤트 | 트리거 시점 |

299| :- | :- |299| :- | :- |

300| 풀 리퀘스트 | PR이 열리거나, 닫히거나, 할당되거나, 레이블이 지정되거나, 동기화되거나, 기타 방식으로 업데이트될 때 |300| 풀 리퀘스트 | PR이 열리거나, 닫히거나, 할당되거나, 레이블이 지정되거나, 동기화되거나, 기타 방식으로 업데이트될 때 |

301| 릴리스 | 릴리스가 생성되거나, 게시되거나, 편집되거나, 삭제될 때 |301| 릴리스 | 릴리스가 생성되거나, 게시되거나, 편집되거나, 삭제될 때 |

302| 이슈 | 이슈가 열리거나, 편집되거나, 닫히거나, 다시 열리거나, 레이블이 지정되거나, 할당되거나, 기타 방식으로 업데이트될 때 |

302 303 

303#### 풀 리퀘스트 필터링304#### 풀 리퀘스트 필터링

304 305 


333 334 

334실행을 클릭하면 전체 세션으로 열립니다. 거기서 Claude가 수행한 작업을 확인하고, 변경 사항을 검토하고, 풀 리퀘스트를 만들거나, 대화를 이어갈 수 있습니다. 각 실행 세션은 다른 세션과 동일하게 작동합니다. 세션 제목 옆의 드롭다운 메뉴를 사용하여 이름을 바꾸거나, 보관하거나, 삭제할 수 있습니다.335실행을 클릭하면 전체 세션으로 열립니다. 거기서 Claude가 수행한 작업을 확인하고, 변경 사항을 검토하고, 풀 리퀘스트를 만들거나, 대화를 이어갈 수 있습니다. 각 실행 세션은 다른 세션과 동일하게 작동합니다. 세션 제목 옆의 드롭다운 메뉴를 사용하여 이름을 바꾸거나, 보관하거나, 삭제할 수 있습니다.

335 336 

336> [!NOTE]337작업 세부 정보 페이지의 **History**에서 완료된 각 실행의 행 끝에는 실행이 실패한 경우 **Error**, 취소된 경우 **Cancelled**가 표시되며, 성공한 경우에는 두 단어 모두 표시되지 않습니다. **Status** 필터에서는 이 세 가지 결과를 각각 **Failed**, **Cancelled**, **Succeeded**라고 부릅니다. 이러한 결과는 세션이 어떻게 종료되었는지를 나타낼 뿐, 프롬프트에 설명된 작업을 Claude가 완료했는지를 나타내지는 않습니다. 따라서 실행을 열고 트랜스크립트를 읽어 무슨 일이 있었는지 확인하십시오.

337>338 

338> 실행 목록의 녹색 상태는 세션이 시작되어 인프라 오류 없이 종료되었음을 의미합니다. 프롬프트에 설명된 작업이 성공했다는 의미는 아닙니다. 실행을 열어 트랜스크립트를 읽고 Claude가 실제로 수행한 작업을 확인하십시오. 차단된 네트워크 요청, 누락된 커넥터 도구, 작업 자체의 실패는 모두 상태 표시기가 아닌 트랜스크립트에 나타납니다.339* **Succeeded**: Claude Code가 실패를 보고하지 않고 세션이 종료되었습니다. 차단된 네트워크 요청, 누락된 커넥터 도구, Claude가 완료하지 못한 작업은 행이 아닌 트랜스크립트에 나타납니다

340* **Failed**: 세션이 정상적으로 완료되지 않았습니다. 예를 들어 예기치 않게 중지되었거나, 오류로 종료되었거나, 실행이 시작되기 전에 보관된 경우입니다

341* **Cancelled**: 실행이 실패하지 않았으며 해당 세션이 보관되었습니다. 성공한 실행의 세션을 보관하면 해당 실행은 **Cancelled**로 변경됩니다. 작업에서 변경해야 할 사항은 없습니다

342 

343**History** 아래에 경고가 표시되면 ["The last run" 경고](#the-last-run-didnt-start)를 참조하십시오.

339 344 

340### 예약 작업 편집 및 제어345### 예약 작업 편집 및 제어

341 346 


499 504 

500Team 또는 Enterprise 조직의 Owner가 [**Organization settings > Capabilities > Remote sessions**](https://claude.ai/admin-settings/capabilities)의 **Scheduled tasks (Was Routines)** 토글을 껐을 가능성이 높습니다. Claude Code v2.1.227 이상에서는 같은 토글이 CLI의 `/schedule`도 숨깁니다. 이는 서버 측 조직 설정이므로 로컬 구성으로 재정의할 수 없습니다. Owner에게 조직의 예약 작업을 다시 켜 달라고 요청하십시오.505Team 또는 Enterprise 조직의 Owner가 [**Organization settings > Capabilities > Remote sessions**](https://claude.ai/admin-settings/capabilities)의 **Scheduled tasks (Was Routines)** 토글을 껐을 가능성이 높습니다. Claude Code v2.1.227 이상에서는 같은 토글이 CLI의 `/schedule`도 숨깁니다. 이는 서버 측 조직 설정이므로 로컬 구성으로 재정의할 수 없습니다. Owner에게 조직의 예약 작업을 다시 켜 달라고 요청하십시오.

501 506 

507### "The last run" 경고

508 

509**History** 아래의 경고가 "The last run"으로 시작하면 첫 번째 열에서 해당 경고를 찾아 그 행에 안내된 대로 조치하십시오. 이후 실행이 시작되면 경고가 사라집니다.

510 

511| 경고 | 조치 방법 |

512| :- | :- |

513| "The last run didn't start because your organization had reached its limit on cloud sessions running at once." | 작업을 변경할 필요는 없습니다. 나중에 **Run now**를 클릭하거나 다음 실행을 기다리십시오 |

514| "The last run didn't start because its cloud environment couldn't be found or used." | 작업의 세부 정보 페이지에서 이름 옆의 메뉴를 열고 **Edit**를 선택한 다음 [클라우드 환경 선택기](#environments-and-network-access)를 찾으십시오. **Unavailable environment**로 표시되면 해당 환경이 보관되었거나 더 이상 계정에서 사용할 수 없는 것이므로, 그곳에서 다른 환경을 선택하고 변경 사항을 저장하십시오. 그렇지 않으면 세부 정보 페이지에서 **Run now**로 재시도하거나, 선택기에서 다른 환경을 선택하고 변경 사항을 저장하십시오 |

515| "The last run was blocked because it couldn't access something it needs, or your organization's policy doesn't allow it." | [GitHub 액세스](#repositories-and-branch-permissions)가 작업의 저장소를 포함하는지 확인하십시오. 포함한다면 Claude 조직의 [Owner](https://code.claude.com/docs/ko/server-managed-settings.md#access-control)에게 정책이 작업을 차단하고 있는지 문의하십시오 |

516| "The last run didn't start because of a problem that's usually temporary." | **Run now**를 클릭하여 다시 시도하거나 다음 실행을 기다리십시오 |

517| "The last run didn't start because its repository or branch wasn't available." | GitHub에서 작업의 각 저장소에 [실행이 시작되는 브랜치](#repositories-and-branch-permissions)가 있는지 확인하십시오. 또한 [GitHub 액세스](#repositories-and-branch-permissions)가 각 저장소를 포함하는지 확인하고, 연결이 만료되었다면 GitHub를 다시 연결하십시오 |

518| "The last run didn't start because some of its settings weren't accepted." | 작업의 세부 정보 페이지에서 이름 옆의 메뉴를 열고 **Edit**를 선택하십시오. 대화 상자에는 어떤 설정이 허용되지 않았는지 표시되지 않으므로, 작업의 이름, 프롬프트, 모델, 저장소, 환경, 커넥터, 트리거를 포함한 각 설정을 그곳에서 확인하십시오 |

519| "The last run stopped because a usage limit was reached." | 사용 한도에 도달한 후 작업 실행이 언제 다시 시작될 수 있는지는 [사용량 및 한도](#usage-and-limits)를 참조하십시오 |

520| "The last run failed." | **Run now**를 클릭하여 다시 시도하거나 다음 실행을 기다리십시오. 실패한 실행에는 열 수 있는 세션이 없습니다 |

521 

502## 관련 리소스522## 관련 리소스

503 523 

504* [`/loop` 및 세션 내 예약](https://code.claude.com/docs/ko/scheduled-tasks): 열려 있는 CLI 세션 내에서 로컬 작업 예약524* [`/loop` 및 세션 내 예약](https://code.claude.com/docs/ko/scheduled-tasks): 열려 있는 CLI 세션 내에서 로컬 작업 예약

sandboxing.md +26 −2

Details

223* **파라미터에 대한 ask 규칙**: `Bash(dangerouslyDisableSandbox:true)`에 대한 [ask 규칙](https://code.claude.com/docs/ko/permissions.md#match-by-input-parameter)을 추가하면 Bash 재시도 시 확인을 요청받습니다. 자동 모드와 `bypassPermissions` 모드에서도 프롬프트가 표시되며, 이 규칙은 일치하는 allow 규칙보다 우선합니다223* **파라미터에 대한 ask 규칙**: `Bash(dangerouslyDisableSandbox:true)`에 대한 [ask 규칙](https://code.claude.com/docs/ko/permissions.md#match-by-input-parameter)을 추가하면 Bash 재시도 시 확인을 요청받습니다. 자동 모드와 `bypassPermissions` 모드에서도 프롬프트가 표시되며, 이 규칙은 일치하는 allow 규칙보다 우선합니다

224* **[`permissions.blockReadsOutsideWorkingDirectories`](https://code.claude.com/docs/ko/settings-reference#permissions-blockreadsoutsideworkingdirectories)**: 이 설정이 켜져 있을 때 확인을 요청하는 재시도는 [어떤 모드도 자동 승인하지 않는 작업](https://code.claude.com/docs/ko/permission-modes.md#actions-no-mode-auto-approves)에서 다룹니다224* **[`permissions.blockReadsOutsideWorkingDirectories`](https://code.claude.com/docs/ko/settings-reference#permissions-blockreadsoutsideworkingdirectories)**: 이 설정이 켜져 있을 때 확인을 요청하는 재시도는 [어떤 모드도 자동 승인하지 않는 작업](https://code.claude.com/docs/ko/permission-modes.md#actions-no-mode-auto-approves)에서 다룹니다

225 225 

226명령이 [`Sandbox is required` 메시지](#commands-refused-with-sandbox-is-required)와 함께 거부되는 동안에는 Claude Code가 `dangerouslyDisableSandbox` 파라미터를 무시하고 재시도도 거부합니다.

227 

226#### strict 샌드박스 모드로 재시도 끄기228#### strict 샌드박스 모드로 재시도 끄기

227 229 

228[샌드박스 설정](https://code.claude.com/docs/ko/settings-reference.md#sandbox-settings)에서 `"allowUnsandboxedCommands": false`를 설정하여 샌드박스 없는 재시도를 비활성화할 수 있습니다. 재시도가 비활성화되면 Claude Code는 `dangerouslyDisableSandbox` 파라미터를 무시합니다. 그러면 샌드박스가 실행 중인 동안 Claude가 실행하는 명령은 `excludedCommands` 항목과 일치하지 않는 한 샌드박스 처리됩니다. 샌드박스를 시작할 수 없을 때 Claude Code가 샌드박스 없이 명령을 실행하지 않도록 하려면 [`failIfUnavailable`](https://code.claude.com/docs/ko/settings-reference#sandbox-failifunavailable)도 설정합니다. `/sandbox` **Overrides** 탭에서는 이 설정이 **Strict sandbox mode**로 표시됩니다.230[샌드박스 설정](https://code.claude.com/docs/ko/settings-reference.md#sandbox-settings)에서 `"allowUnsandboxedCommands": false`를 설정하여 샌드박스 없는 재시도를 비활성화할 수 있습니다. 재시도가 비활성화되면 Claude Code는 `dangerouslyDisableSandbox` 파라미터를 무시합니다. 그러면 샌드박스가 실행 중인 동안 Claude가 실행하는 명령은 `excludedCommands` 항목과 일치하지 않는 한 샌드박스 처리됩니다. 샌드박스를 시작할 수 없을 때 Claude Code가 샌드박스 없이 명령을 실행하지 않도록 하려면 [`failIfUnavailable`](https://code.claude.com/docs/ko/settings-reference#sandbox-failifunavailable)도 설정합니다. `/sandbox` **Overrides** 탭에서는 이 설정이 **Strict sandbox mode**로 표시됩니다.


899 901 

900### 0바이트 읽기 전용 파일이 `.claude` 설정 경로에 나타나고 "예, 다시 묻지 않기"가 저장되지 않음902### 0바이트 읽기 전용 파일이 `.claude` 설정 경로에 나타나고 "예, 다시 묻지 않기"가 저장되지 않음

901 903 

902Linux 및 WSL2에서 샌드박스는 샌드박싱된 명령이 실행되는 동안 아직 존재하지 않는 파일에 대한 쓰기 거부를 해당 위치에 0바이트 읽기 전용 자리 표시자를 만들어 유지합니다. 샌드박스는 그 후 자리 표시자를 제거합니다. 예를 들어 SIGKILL에 의해 세션이 정리 실행 전에 종료되면 자리 표시자가 남아 있습니다. 이후 세션은 매번 시작할 때마다 자리 표시자를 다시 읽기 전용으로 바인드하므로 권한 선택 저장과 같은 설정 쓰기가 자리 표시자가 남아 있는 경로에서 실패합니다.904Linux 및 WSL2에서 샌드박스는 샌드박싱된 명령이 실행되는 동안 아직 존재하지 않는 파일에 대한 쓰기 거부를 해당 위치에 0바이트 읽기 전용 자리 표시자를 만들어 유지합니다. 샌드박스는 그 후 자리 표시자를 제거합니다.

905 

906다음과 같은 경우에는 자리 표시자가 남아 있습니다.

907 

908* 예를 들어 SIGKILL에 의해 세션이 정리 실행 전에 종료되는 경우

909* 백그라운드 명령처럼 샌드박싱된 명령이 아직 실행 중인 상태에서 세션이 종료되는 경우

903 910 

904터미널에서 `claude doctor`를 실행하여 남은 자리 표시자 파일을 나열합니다. [`Sandbox mask files left behind at write-deny paths`](https://code.claude.com/docs/ko/errors#stale-sandbox-mask-files-left-by-a-killed-session) 경고는 그중 일부의 이름을 표시하고 나머지는 개수로 표시합니다. 해당 프로젝트에서 다른 Claude Code 세션이 실행되지 않는 동안 `rm`으로 각 파일을 삭제합니다. v2.1.257 이전에는 Claude Code가 동일한 자리 표시자를 남겨두면서도 이를 알리지 않았습니다.911이후 세션은 매번 시작할 때마다 자리 표시자를 다시 읽기 전용으로 바인드하므로 권한 선택 저장과 같은 설정 쓰기가 자리 표시자가 남아 있는 경로에서 실패합니다.

912 

913터미널에서 `claude doctor`를 실행하여 남은 자리 표시자 파일을 나열합니다. [`Sandbox mask files left behind at write-deny paths`](https://code.claude.com/docs/ko/errors#stale-sandbox-mask-files-left-by-a-killed-session) 경고는 그중 일부의 이름을 표시하고 나머지는 개수로 표시합니다. 해당 프로젝트에서 다른 Claude Code 세션이 실행되지 않는 동안 `rm`으로 각 파일을 삭제합니다. v2.1.257 이전에는 세션이 종료될 때 Claude Code가 동일한 자리 표시자를 남겨두면서도 이를 알리지 않았습니다.

905 914 

906### 샌드박스가 켜진 상태에서 SSH를 통한 `git`이 실패915### 샌드박스가 켜진 상태에서 SSH를 통한 `git`이 실패

907 916 


1000 1009 

1001v2.1.284 이전에는 프록시가 허용된 호스트 이름이 확인되는 주소가 무엇이든 연결했습니다.1010v2.1.284 이전에는 프록시가 허용된 호스트 이름이 확인되는 주소가 무엇이든 연결했습니다.

1002 1011 

1012### 명령이 `Sandbox is required`로 거부됨

1013 

1014[`sandbox.failIfUnavailable`](https://code.claude.com/docs/ko/settings-reference#sandbox-failifunavailable)로 샌드박스를 필수로 지정했는데 Claude Code가 시작된 후 샌드박스가 다음 중 한 가지 방식으로 실패하면, Claude가 실행하는 각 샌드박싱된 명령은 표시된 메시지와 함께 거부됩니다. 세션은 계속 실행되며, 거부된 명령은 샌드박스 없이 실행되지 않습니다.

1015 

1016* **`Sandbox is required but failed to initialize: <reason>`**: Claude Code는 시작되었지만 이후 샌드박스 초기화에 실패했습니다. 메시지에 표시된 조치(`Restart to retry.` 또는 `Fix the sandbox settings to retry`)를 따릅니다.

1017* **`Sandbox is required (sandbox.failIfUnavailable) and stopped being available in this session: <reason>`**: Linux 또는 WSL2에서 샌드박스가 시작된 후 Claude Code가 누락된 의존성을 발견했습니다. [누락된 의존성 설치](#set-up-linux-and-wsl2)처럼 이유에 명시된 문제를 해결한 다음 Claude Code를 다시 시작합니다.

1018 

1019제외된 명령과 사용자가 직접 입력한 명령은 계속 실행되며, Claude는 거부된 명령을 샌드박스 없이 재시도할 수 없습니다.

1020 

1021* **제외된 명령**: [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) 항목과 일치하는 명령은 샌드박스 외부에서 계속 실행됩니다. 이러한 명령이 작업 디렉터리 외부의 [`filesystem.allowWrite`](https://code.claude.com/docs/ko/settings-reference#sandbox-filesystem-allowwrite) 경로에 쓰면 해당 쓰기는 일반 권한 흐름을 거칩니다. [관리자 필수 샌드박스](#repository-settings-under-an-admin-required-sandbox)에서는 Claude Code가 저장소 설정의 항목을 무시합니다

1022* **[`!` 셸 모드 프롬프트](https://code.claude.com/docs/ko/interactive-mode#shell-mode-with-prefix)에서 입력한 명령**: 샌드박스 외부에서 계속 실행됩니다. [백그라운드 세션](https://code.claude.com/docs/ko/agent-view.md)에서는 이 명령도 거부됩니다

1023* **샌드박스 없는 재시도**: Claude Code는 [샌드박스 없는 재시도](#the-unsandboxed-retry-escape-hatch)의 `dangerouslyDisableSandbox` 매개변수를 무시합니다

1024 

1025`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`가 설정된 Linux 세션에서는 모든 명령이 샌드박스에서 실행되므로, 제외된 명령과 사용자가 입력한 명령도 거부됩니다.

1026 

1003### `/sandbox`가 `Sandbox settings are overridden by a higher-priority configuration`으로 실패1027### `/sandbox`가 `Sandbox settings are overridden by a higher-priority configuration`으로 실패

1004 1028 

1005더 높은 [설정 수준](https://code.claude.com/docs/ko/settings.md#settings-precedence)에서 `sandbox.enabled`, `sandbox.autoAllowBashIfSandboxed` 또는 `sandbox.allowUnsandboxedCommands`를 설정하면 `/sandbox`는 패널을 여는 대신 `Error: Sandbox settings are overridden by a higher-priority configuration and cannot be changed locally.`를 출력합니다. 패널은 선택 사항을 `.claude/settings.local.json`에 저장하는데, 그곳에 저장된 값은 해당 수준을 재정의할 수 없습니다.1029더 높은 [설정 수준](https://code.claude.com/docs/ko/settings.md#settings-precedence)에서 `sandbox.enabled`, `sandbox.autoAllowBashIfSandboxed` 또는 `sandbox.allowUnsandboxedCommands`를 설정하면 `/sandbox`는 패널을 여는 대신 `Error: Sandbox settings are overridden by a higher-priority configuration and cannot be changed locally.`를 출력합니다. 패널은 선택 사항을 `.claude/settings.local.json`에 저장하는데, 그곳에 저장된 값은 해당 수준을 재정의할 수 없습니다.

Details

781 781 

782이러한 소스가 적용되는 순서는 [설정 우선순위](https://code.claude.com/docs/ko/settings.md#settings-precedence)를 참조하십시오.782이러한 소스가 적용되는 순서는 [설정 우선순위](https://code.claude.com/docs/ko/settings.md#settings-precedence)를 참조하십시오.

783 783 

784Anthropic의 컨트롤 플레인이 세션에 [Claude Code 훅](https://code.claude.com/docs/ko/hooks.md)을 제공하면, 러너는 이를 사용자의 구성을 덮어쓰지 않고 함께 설치합니다. Claude Code v2.1.229 이상이 필요합니다.784Anthropic의 컨트롤 플레인이 세션에 [Claude Code 훅](https://code.claude.com/docs/ko/hooks.md)을 제공하면, 러너는 이를 사용자의 구성을 덮어쓰지 않고 함께 설치합니다. Claude Code v2.1.229 이상이 필요하며, 이전 버전의 러너는 제공된 훅을 무시합니다. 제공된 훅은 `python3`를 실행하므로 [러너 이미지](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#build-the-runner-image)에 `python3`를 설치하십시오.

785 785 

786* **설치 위치**: 러너는 제공된 각 훅 스크립트를 세션 설정 디렉터리의 예약된 `hooks/.ccr-launcher/` 하위 디렉터리에 작성하고, `--settings`로 세션에 전달하는 별도의 설정 파일에 스크립트를 등록합니다. 이때 초기화된 `settings.json`과 `hooks/<name>`에 있는 사용자 자신의 스크립트는 변경되지 않습니다. 러너는 세션마다 예약된 하위 디렉터리를 다시 생성하며, `~/.claude/hooks/.ccr-launcher/`에 있는 호스트 콘텐츠를 세션으로 초기화하지 않습니다.786* **설치 위치**: 러너는 제공된 각 훅 스크립트를 세션 설정 디렉터리의 예약된 `hooks/.ccr-launcher/` 하위 디렉터리에 작성하고, `--settings`로 세션에 전달하는 별도의 설정 파일에 스크립트를 등록합니다. 이때 초기화된 `settings.json`과 `hooks/<name>`에 있는 사용자 자신의 스크립트는 변경되지 않습니다. 러너는 세션마다 예약된 하위 디렉터리를 다시 생성하며, `~/.claude/hooks/.ccr-launcher/`에 있는 호스트 콘텐츠를 세션으로 초기화하지 않습니다.

787* **작성 주체**: 컨트롤 플레인은 세션별 입력이나 서드 파티 입력이 아닌, 자체 배포의 고정된 상수로 스크립트를 채웁니다.787* **작성 주체**: 컨트롤 플레인은 세션별 입력이나 서드 파티 입력이 아닌, 자체 배포의 고정된 상수로 스크립트를 채웁니다.

Details

348 348 

349아래 레시피는 `--capacity 4`를 사용하므로 하나의 컨테이너는 동일한 잠긴 소유자의 최대 4개의 동시 세션을 제공합니다. 이는 [강화 섹션](#harden-your-deployment)의 세션별 컨테이너 격리를 제공하지 않습니다: 환경을 프로덕션 시스템에 연결하기 전에 레시피를 `--capacity 1`로 실행하여 세션당 하나의 컨테이너를 사용하거나 [온디맨드 러너](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#on-demand-runners)를 사용하세요. 이는 또한 환경 시크릿을 세션 실행 호스트에서 벗어나게 유지합니다. 이 레시피 중 하나에 [Anthropic git 프록시](#use-the-anthropic-git-proxy)를 추가하면 `--capacity`를 `1`로 변경하세요.349아래 레시피는 `--capacity 4`를 사용하므로 하나의 컨테이너는 동일한 잠긴 소유자의 최대 4개의 동시 세션을 제공합니다. 이는 [강화 섹션](#harden-your-deployment)의 세션별 컨테이너 격리를 제공하지 않습니다: 환경을 프로덕션 시스템에 연결하기 전에 레시피를 `--capacity 1`로 실행하여 세션당 하나의 컨테이너를 사용하거나 [온디맨드 러너](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#on-demand-runners)를 사용하세요. 이는 또한 환경 시크릿을 세션 실행 호스트에서 벗어나게 유지합니다. 이 레시피 중 하나에 [Anthropic git 프록시](#use-the-anthropic-git-proxy)를 추가하면 `--capacity`를 `1`로 변경하세요.

350 350 

351이 Dockerfile은 최소한의 시작점입니다:351이 Dockerfile은 최소한의 시작점입니다. Claude가 Slack에 답장을 게시하도록 하는 훅을 포함하여 [Anthropic의 컨트롤 플레인이 Claude Tag 세션에 제공하는 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#how-each-session’s-config-is-assembled)이 `python3`를 실행하므로 이 Dockerfile은 `python3`를 설치합니다. Claude Tag 세션을 제공하는 모든 이미지에서 `python3`를 `PATH`에 유지하세요:

352 352 

353```dockerfile theme={null}353```dockerfile theme={null}

354FROM debian:bookworm-slim354FROM debian:bookworm-slim

355ARG CLAUDE_CODE_VERSION355ARG CLAUDE_CODE_VERSION

356RUN apt-get update && apt-get install -y --no-install-recommends git curl ca-certificates openssh-client jq \356RUN apt-get update && apt-get install -y --no-install-recommends git curl ca-certificates openssh-client jq python3 \

357 && rm -rf /var/lib/apt/lists/*357 && rm -rf /var/lib/apt/lists/*

358RUN curl -fsSL "https://downloads.claude.ai/claude-code-releases/${CLAUDE_CODE_VERSION:?set with --build-arg CLAUDE_CODE_VERSION}/linux-x64/claude" \358RUN curl -fsSL "https://downloads.claude.ai/claude-code-releases/${CLAUDE_CODE_VERSION:?set with --build-arg CLAUDE_CODE_VERSION}/linux-x64/claude" \

359 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude359 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude


363ENTRYPOINT ["claude"]363ENTRYPOINT ["claude"]

364```364```

365 365 

366노드가 ARM인 경우 `linux-x64`를 `linux-arm64`로 바꾸거나, Alpine과 같은 musl 기반 이미지에서 `linux-x64-musl` 또는 `linux-arm64-musl`로 바꾸세요. musl 이미지가 필요로 하는 추가 패키지는 [Alpine Linux 설정](https://code.claude.com/docs/ko/setup.md#alpine-linux-and-musl-based-distributions)을 참조하세요. URL은 표준 Claude Code 릴리스 위치이므로 [바이너리 무결성 및 코드 서명](https://code.claude.com/docs/ko/setup.md#binary-integrity-and-code-signing)에 설명된 대로 릴리스의 서명된 매니페스트에 대해 다운로드된 바이너리를 확인할 수 있습니다. 러너는 Claude Code 버전 2.1.224 이상이 필요합니다. 이미지를 빌드한 다음 레지스트리로 푸시하고 아래 레시피에서 참조하세요:366노드가 ARM인 경우 `linux-x64`를 `linux-arm64`로 바꾸거나, Alpine과 같은 musl 기반 이미지에서 `linux-x64-musl` 또는 `linux-arm64-musl`로 바꾸세요. musl 이미지가 필요로 하는 추가 패키지는 [Alpine Linux 설정](https://code.claude.com/docs/ko/setup.md#alpine-linux-and-musl-based-distributions)을 참조하세요. URL은 표준 Claude Code 릴리스 위치이므로 [바이너리 무결성 및 코드 서명](https://code.claude.com/docs/ko/setup.md#binary-integrity-and-code-signing)에 설명된 대로 릴리스의 서명된 매니페스트에 대해 다운로드된 바이너리를 확인할 수 있습니다. 러너는 Claude Code 버전 2.1.224 이상이 필요하며, Claude Tag 세션을 제공하려면 2.1.229 이상이 필요합니다. 이미지를 빌드한 다음 레지스트리로 푸시하고 아래 레시피에서 참조하세요:

367 367 

368```bash theme={null}368```bash theme={null}

369docker build \369docker build \


768 * **`checkout` 훅을 사용하는 경우**: [`checkout` 라이프사이클 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#checkout)을 통해 체크아웃된 저장소는 푸시되지 않습니다. 대신 [`post-session` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#post-session)에서 해당 저장소의 스냅샷을 만듭니다.768 * **`checkout` 훅을 사용하는 경우**: [`checkout` 라이프사이클 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#checkout)을 통해 체크아웃된 저장소는 푸시되지 않습니다. 대신 [`post-session` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#post-session)에서 해당 저장소의 스냅샷을 만듭니다.

769 * **플래그를 활성화하기 전에**: 소스 원격의 `claude/*` refs에 푸시할 수 있는 사람을 제한합니다. 재개 시 러너는 이전에 푸시된 브랜치를 누가 푸시했는지 확인하지 않고 가져옵니다.769 * **플래그를 활성화하기 전에**: 소스 원격의 `claude/*` refs에 푸시할 수 있는 사람을 제한합니다. 재개 시 러너는 이전에 푸시된 브랜치를 누가 푸시했는지 확인하지 않고 가져옵니다.

770 * **커밋되지 않은 변경 사항은 여전히 손실됨**: Claude가 응답을 마쳤을 때 커밋하고 푸시하도록 요청하려면 [세션이 작업을 푸시하도록 프롬프트 지정](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#prompt-sessions-to-push-their-work)을 참조합니다.770 * **커밋되지 않은 변경 사항은 여전히 손실됨**: Claude가 응답을 마쳤을 때 커밋하고 푸시하도록 요청하려면 [세션이 작업을 푸시하도록 프롬프트 지정](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#prompt-sessions-to-push-their-work)을 참조합니다.

771* **러너 손실로 중단된 명령이 다시 실행될 수 있음**: 세션이 다른 러너에서 재개되면, Claude에게는 중단된 도구 호출이 그 결과를 알 수 없다는 내용의 결과와 함께 표시됩니다.

771* **세션 중간에 추가한 저장소는 클론에 실패할 수 있음**: Claude는 HTTPS를 통해 `git clone`으로 저장소를 클론합니다. [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)가 없는 러너에서는 호스트에서 해당 저장소를 읽을 수 있는 수단이 없으면 git 인증 오류로 클론이 실패합니다. 가능하면 세션을 만들 때 세션에 필요한 모든 저장소를 선택합니다.772* **세션 중간에 추가한 저장소는 클론에 실패할 수 있음**: Claude는 HTTPS를 통해 `git clone`으로 저장소를 클론합니다. [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)가 없는 러너에서는 호스트에서 해당 저장소를 읽을 수 있는 수단이 없으면 git 인증 오류로 클론이 실패합니다. 가능하면 세션을 만들 때 세션에 필요한 모든 저장소를 선택합니다.

772* **일부 커넥터는 자체 호스팅 세션에 나타나지 않음**: claude.ai 설정에서 아직 연결하지 않은 커넥터는 자체 호스팅 세션에 나열되지 않으며, 세션은 연결하라는 메시지를 표시하지 않습니다. 먼저 설정에서 연결한 후 새로운 세션을 시작합니다. 이미 실행 중인 세션에 커넥터를 추가해도 Claude에서 해당 도구를 사용할 수 없습니다. 새로 추가된 커넥터를 선택하려면 새로운 세션을 시작합니다.773* **일부 커넥터는 자체 호스팅 세션에 나타나지 않음**: claude.ai 설정에서 아직 연결하지 않은 커넥터는 자체 호스팅 세션에 나열되지 않으며, 세션은 연결하라는 메시지를 표시하지 않습니다. 먼저 설정에서 연결한 후 새로운 세션을 시작합니다. 이미 실행 중인 세션에 커넥터를 추가해도 Claude에서 해당 도구를 사용할 수 없습니다. 새로 추가된 커넥터를 선택하려면 새로운 세션을 시작합니다.

773* **누군가 세션을 보관 또는 삭제하거나, 세션 메뉴에서 러너를 해제하는 경우**: [`--push-outcome-on-release`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags) 푸시에 의존할 수 없습니다. 이러한 경우 커밋을 저장하려면 [`post-session` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#post-session)에서 `HEAD`를 복구 브랜치로 푸시합니다. 해당 문서의 예제에서 시작하는 경우, 예제는 스냅샷 커밋 후에만 푸시하므로 커밋되지 않은 항목이 없을 때도 푸시하도록 수정합니다.774* **누군가 세션을 보관 또는 삭제하거나, 세션 메뉴에서 러너를 해제하는 경우**: [`--push-outcome-on-release`](https://code.claude.com/docs/ko/self-hosted-environments-reference#runner-cli-flags) 푸시에 의존할 수 없습니다. 이러한 경우 커밋을 저장하려면 [`post-session` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#post-session)에서 `HEAD`를 복구 브랜치로 푸시합니다. 해당 문서의 예제에서 시작하는 경우, 예제는 스냅샷 커밋 후에만 푸시하므로 커밋되지 않은 항목이 없을 때도 푸시하도록 수정합니다.


824 러너를 업그레이드하거나 원인을 해결한 후 세션을 재시도하거나 새 세션을 시작합니다. 이러한 확인으로도 원인을 찾지 못하면 [문제를 보고합니다](#report-an-issue).825 러너를 업그레이드하거나 원인을 해결한 후 세션을 재시도하거나 새 세션을 시작합니다. 이러한 확인으로도 원인을 찾지 못하면 [문제를 보고합니다](#report-an-issue).

825 826 

826 세션이 결과를 푸시하는 소스의 경우 삭제된 브랜치는 세션을 실패시킵니다. 세션이 읽기만 하는 git 소스의 경우 러너는 해당 소스를 건너뛰고 나머지 소스로 계속 진행합니다. 건너뛰면 세션에 저장소가 하나도 남지 않는 경우에는 러너가 세션을 실패시킵니다. v2.1.228 이전에는 이러한 세션이 빈 디렉터리에서 시작되었습니다.827 세션이 결과를 푸시하는 소스의 경우 삭제된 브랜치는 세션을 실패시킵니다. 세션이 읽기만 하는 git 소스의 경우 러너는 해당 소스를 건너뛰고 나머지 소스로 계속 진행합니다. 건너뛰면 세션에 저장소가 하나도 남지 않는 경우에는 러너가 세션을 실패시킵니다. v2.1.228 이전에는 이러한 세션이 빈 디렉터리에서 시작되었습니다.

828* **Claude Tag가 Slack에 응답을 게시하지 않는 경우가 있음**: 응답 알림은 [컨트롤 플레인이 제공하는 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#how-each-session’s-config-is-assembled)입니다. 이전 러너는 제공된 훅을 무시하므로 `claude --version`으로 러너가 Claude Code v2.1.229 이상인지 확인합니다. 훅은 `python3`을 실행하므로 러너 이미지 안에서 `python3 --version`이 성공하는지 확인합니다. 그리고 어떤 설정 파일도 훅을 끄지 않는지 확인합니다. 여기에는 `managed-settings.json`, 러너 사용자의 `~/.claude/settings.json`, 저장소의 `.claude/settings.json` 또는 `.claude/settings.local.json`에 있는 `disableAllHooks`, 그리고 관리형 설정에서 훅을 포함하는 `allowManagedHooksOnly` 또는 [`strictPluginOnlyCustomization`](https://code.claude.com/docs/ko/settings-reference#strictpluginonlycustomization)이 해당됩니다.

827* **세션이 저장소 중 하나 없이 시작됨**: [`checkout` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#checkout)이 없는 러너에서는 세션이 읽기만 하는 저장소에 대해 git 호스트가 러너의 액세스 확인을 거부할 수 있습니다. 그러면 러너는 해당 저장소를 건너뛰고, 거부 내용을 명시하는 `[runner:warn] could not access context source` 줄을 로그에 기록한 후 나머지 저장소로 세션을 시작합니다.829* **세션이 저장소 중 하나 없이 시작됨**: [`checkout` 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration#checkout)이 없는 러너에서는 세션이 읽기만 하는 저장소에 대해 git 호스트가 러너의 액세스 확인을 거부할 수 있습니다. 그러면 러너는 해당 저장소를 건너뛰고, 거부 내용을 명시하는 `[runner:warn] could not access context source` 줄을 로그에 기록한 후 나머지 저장소로 세션을 시작합니다.

828 830 

829 러너는 명확한 거부인 경우에만 건너뜁니다. 즉, 호스트가 저장소를 찾을 수 없다고 응답하거나, git이 해당 호스트의 자격 증명을 찾지 못하거나, 인증이 실패한 경우입니다. 네트워크 장애, 시간 초과 또는 HTTP `403`은 여전히 세션 시작을 실패시키며, 세션이 결과를 푸시하는 저장소에 대한 거부도 마찬가지입니다. 건너뛰면 저장소가 하나도 남지 않는 세션은 여전히 러너가 실패시킵니다. [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)를 사용하는 경우 러너는 git 프록시 자체가 거부한 저장소만 건너뜁니다.831 러너는 명확한 거부인 경우에만 건너뜁니다. 즉, 호스트가 저장소를 찾을 수 없다고 응답하거나, git이 해당 호스트의 자격 증명을 찾지 못하거나, 인증이 실패한 경우입니다. 네트워크 장애, 시간 초과 또는 HTTP `403`은 여전히 세션 시작을 실패시키며, 세션이 결과를 푸시하는 저장소에 대한 거부도 마찬가지입니다. 건너뛰면 저장소가 하나도 남지 않는 세션은 여전히 러너가 실패시킵니다. [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy)를 사용하는 경우 러너는 git 프록시 자체가 거부한 저장소만 건너뜁니다.

Details

35 35 

36시작하기 전에 호스트에 설치하세요:36시작하기 전에 호스트에 설치하세요:

37 37 

38* **Claude Code v2.1.224 이상**, [표준 설치 방법](https://code.claude.com/docs/ko/setup.md) 중 하나를 사용합니다. 러너는 표준 `claude` 바이너리의 일부이며, 이전 버전은 `self-hosted-runner` 서브 명령을 인식하지 못합니다. 플릿이 실행하는 정확한 버전을 고정하려면 [특정 버전 설치](https://code.claude.com/docs/ko/setup.md#install-a-specific-version)를 참조하세요. 컨테이너 이미지의 경우 [프로덕션에 배포](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#build-the-runner-image)의 Dockerfile을 참조하세요.38* **Claude Code v2.1.224 이상**, [표준 설치 방법](https://code.claude.com/docs/ko/setup.md) 중 하나를 사용합니다. 러너는 표준 `claude` 바이너리의 일부이며, 이전 버전은 `self-hosted-runner` 서브 명령을 인식하지 못합니다. Claude Tag 세션을 처리하는 러너에는 v2.1.229 이상과 `PATH`상의 `python3`이 필요합니다. 해당 세션을 위해 [컨트롤 플레인이 제공하는 훅](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#how-each-session’s-config-is-assembled)이 `python3`을 실행하기 때문입니다. 플릿이 실행하는 정확한 버전을 고정하려면 [특정 버전 설치](https://code.claude.com/docs/ko/setup.md#install-a-specific-version)를 참조하세요. 컨테이너 이미지의 경우 [프로덕션에 배포](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#build-the-runner-image)의 Dockerfile을 참조하세요.

39* **Git 2.24 이상**. 배포 페이지의 일부 git 옵션에는 최신 버전이 필요합니다. [Git 구성](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#configure-git)에서 각 하한을 명시합니다.39* **Git 2.24 이상**. 배포 페이지의 일부 git 옵션에는 최신 버전이 필요합니다. [Git 구성](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#configure-git)에서 각 하한을 명시합니다.

40 40 

41호스트가 준비되었는지 확인하세요:41호스트가 준비되었는지 확인하세요:

Details

52| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | 설정 안 됨 | 알려진 시간에 러너를 종료하는 인프라를 위해, 초 단위의 절대 Unix 타임스탬프에 러너를 은퇴시킵니다. 해제 순서와 여유 시간 설정 방법은 [러너 라이프사이클](https://code.claude.com/docs/ko/self-hosted-environments#runner-lifecycle)에 설명되어 있습니다. 2001년 이전 또는 5138년 이후의 값은 플래그에서는 거부되고 환경 변수에서는 무시됩니다. |52| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | 설정 안 됨 | 알려진 시간에 러너를 종료하는 인프라를 위해, 초 단위의 절대 Unix 타임스탬프에 러너를 은퇴시킵니다. 해제 순서와 여유 시간 설정 방법은 [러너 라이프사이클](https://code.claude.com/docs/ko/self-hosted-environments#runner-lifecycle)에 설명되어 있습니다. 2001년 이전 또는 5138년 이후의 값은 플래그에서는 거부되고 환경 변수에서는 무시됩니다. |

53| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | 컨트롤 플레인이 세션과 함께 보내는 [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode) 분류기 규칙 목록 중 어떤 목록이 해당 세션에 도달할 수 있는지를 지정합니다: `all`, `no-allow`, 또는 `none`. 각 값이 무엇을 적용하는지는 [자동 모드 규칙 목록](#auto-mode-rule-lists)을 참조하십시오. 잘못된 값을 지정하면 시작 시 러너가 중지됩니다. Claude Code v2.1.295 이상이 필요합니다. |53| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | 컨트롤 플레인이 세션과 함께 보내는 [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode) 분류기 규칙 목록 중 어떤 목록이 해당 세션에 도달할 수 있는지를 지정합니다: `all`, `no-allow`, 또는 `none`. 각 값이 무엇을 적용하는지는 [자동 모드 규칙 목록](#auto-mode-rule-lists)을 참조하십시오. 잘못된 값을 지정하면 시작 시 러너가 중지됩니다. Claude Code v2.1.295 이상이 필요합니다. |

54| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | 세션이 끝난 후 Claude 프로세스를 강제 종료하기 전에 정상적으로 종료되기를 기다리는 시간입니다. 자식 프로세스 자체의 `SessionEnd` 훅에 더 많은 시간이 필요하면 값을 늘리십시오. |54| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | 세션이 끝난 후 Claude 프로세스를 강제 종료하기 전에 정상적으로 종료되기를 기다리는 시간입니다. 자식 프로세스 자체의 `SessionEnd` 훅에 더 많은 시간이 필요하면 값을 늘리십시오. |

55| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | 자식 프로세스가 N분 이내에 [활동 채널](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#keep-stdin-and-file-descriptor-3-attached)에서 초기화되었음을 알리지 않으면 세션 슬롯을 해제합니다. N분은 클론 이후 프로세스 생성 시점부터 시작되며, 자식 프로세스가 초기화되거나 상태를 보고하기 전에 `user` 또는 `assistant` 메시지를 내보낼 때마다 다시 시작됩니다. v2.1.299 이전에는 이 타임아웃이 세션의 첫 번째 그러한 메시지에서 더 이상 적용되지 않았습니다. 초기화 신호 이후의 해제에 대해서는 `--release-idle-session-min`을 참조하십시오. `0`은 비활성화합니다. |55| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | 초기화되지 않은 자식 프로세스를 세션 슬롯 해제 전까지 기다리는 시간입니다. 카운트가 시작되는 시점과 어떤 세션은 계속 실행되도록 두는지에 대해서는 [세션 시작 타임아웃](#session-startup-timeout)을 참조하십시오. `0`은 타임아웃을 비활성화합니다. |

56| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | 켜짐 | 각 세션의 저장소 경로에 대한 영구 신뢰를 미리 설정하여 저장소에 커밋된 `permissions.allow` 및 `additionalDirectories`가 적용되도록 합니다. 저장소에 커밋된 권한 부여를 제외하고 대신 호스트 구성의 `settings.json`에서 허용 규칙을 구성하려면 `false`로 설정하십시오. 저장소에 커밋된 `sandbox.*` 설정은 어느 경우든 여전히 적용되며, 이 때문에 [저장소 설정 가드](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#harden-your-deployment)는 이 플래그와 관계없이 해당 설정을 검사합니다. |56| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | 켜짐 | 각 세션의 저장소 경로에 대한 영구 신뢰를 미리 설정하여 저장소에 커밋된 `permissions.allow` 및 `additionalDirectories`가 적용되도록 합니다. 저장소에 커밋된 권한 부여를 제외하고 대신 호스트 구성의 `settings.json`에서 허용 규칙을 구성하려면 `false`로 설정하십시오. 저장소에 커밋된 `sandbox.*` 설정은 어느 경우든 여전히 적용되며, 이 때문에 [저장소 설정 가드](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#harden-your-deployment)는 이 플래그와 관계없이 해당 설정을 검사합니다. |

57| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | 꺼짐 | 고객이 관리하는 git 인증 대신 [Anthropic git 프록시](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#use-the-anthropic-git-proxy)를 통해 github.com의 저장소를 클론합니다. `--capacity 1`과 git 2.32 이상이 필요하며, 그렇지 않으면 러너가 시작을 거부합니다. 다시 쓰기 플래그보다 우선합니다. |57| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | 꺼짐 | 고객이 관리하는 git 인증 대신 [Anthropic git 프록시](https://code.claude.com/docs/ko/self-hosted-environments-deploy.md#use-the-anthropic-git-proxy)를 통해 github.com의 저장소를 클론합니다. `--capacity 1`과 git 2.32 이상이 필요하며, 그렇지 않으면 러너가 시작을 거부합니다. 다시 쓰기 플래그보다 우선합니다. |

58 58 


61* **플래그**: 오류와 함께 시작이 실패합니다.61* **플래그**: 오류와 함께 시작이 실패합니다.

62* **환경 변수**: 러너가 값을 거부하지 않고 타이머 상한으로 제한합니다.62* **환경 변수**: 러너가 값을 거부하지 않고 타이머 상한으로 제한합니다.

63 63 

64### 세션 시작 타임아웃

65 

66`/code-review`와 같은 턴 도중 세션이 슬롯을 잃었다면 러너와 자식 바이너리를 v2.1.309 이상으로 업데이트하십시오. v2.1.299부터 v2.1.308까지는 `user` 또는 `assistant` 메시지 없이 시작 타임아웃이 지나면 러너가 턴 도중이라도 세션을 해제했습니다.

67 

68`--startup-timeout-min <n>`을 사용하면, 클론 이후 `<n>`분 이내에 자식 프로세스가 초기화되지 않을 때 러너가 세션 슬롯을 해제합니다. 자식 프로세스가 초기화되기 전에 시작된 턴 동안에는, 자식 프로세스의 [활동 채널](https://code.claude.com/docs/ko/self-hosted-environments-configuration.md#keep-stdin-and-file-descriptor-3-attached)에 아무 줄도 없는 상태로 `<n>`분이 지날 때까지 세션이 슬롯을 유지합니다. 자식 프로세스가 초기화되면 러너는 해당 카운트를 초기화하며, 이후 해제는 `--release-idle-session-min`이 관리합니다. 자식 프로세스가 살아 있지만 멈춘 세션을 제한하려면 `--kill-session-after-min`을 설정하십시오.

69 

64### 자동 모드 규칙 목록70### 자동 모드 규칙 목록

65 71 

66`--server-auto-mode-lists`를 사용하면 러너 외부에서 오는 [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode) 분류기 규칙 중 어떤 것이 러너의 세션에 도달할지 결정할 수 있습니다. Anthropic의 컨트롤 플레인은 세션과 함께 규칙 목록을 보내고 러너에 이를 적용하도록 요청할 수 있습니다. 일부 항목은 조직의 관리자가 작성한 규칙일 수 있습니다. 목록은 `environment`, `soft_deny`, `allow`입니다.72`--server-auto-mode-lists`를 사용하면 러너 외부에서 오는 [자동 모드](https://code.claude.com/docs/ko/permission-modes.md#eliminate-prompts-with-auto-mode) 분류기 규칙 중 어떤 것이 러너의 세션에 도달할지 결정할 수 있습니다. Anthropic의 컨트롤 플레인은 세션과 함께 규칙 목록을 보내고 러너에 이를 적용하도록 요청할 수 있습니다. 일부 항목은 조직의 관리자가 작성한 규칙일 수 있습니다. 목록은 `environment`, `soft_deny`, `allow`입니다.


374 380 

375#### 세션 메트릭을 러너 메트릭과 조인하기381#### 세션 메트릭을 러너 메트릭과 조인하기

376 382 

377세션 자체의 메트릭을 `claude_code_self_hosted_runner_session_idle_seconds` 옆에 나란히 두려면 러너의 `session_id`를 기준으로 조인하십시오.383유휴 세션에 든 비용을 확인하려면 러너의 `claude_code_self_hosted_runner_session_idle_seconds`를 `ccr_session_id` 기준으로 Claude Code의 비용 메트릭과 조인하십시오. 러너의 메트릭에는 해당 레이블이 없으므로, 다음 쿼리처럼 `label_replace`로 레이블을 추가하십시오.

384 

385```text theme={null}

386sum by (ccr_session_id) (claude_code_cost_usage_total)

387and on (ccr_session_id)

388label_replace(

389 claude_code_self_hosted_runner_session_idle_seconds > 600,

390 "ccr_session_id", "cse_$1", "session_id", "session_(.*)"

391)

392```

393 

394이 쿼리는 10분 넘게 유휴 상태인 세션마다 하나의 결과, 즉 해당 세션의 Claude Code 프로세스가 지금까지 집계한 비용(미국 달러)을 반환합니다. 다른 Claude Code 메트릭을 조인하려면 쿼리의 `claude_code_cost_usage_total`을 바꾸십시오. 이 쿼리는 모든 `--capacity` 값에서 작동합니다.

378 395 

379* **`--capacity`가 1보다 큰 경우**: 직접 조인합니다. 러너의 `/metrics`에서 세션의 시리즈는 해당 메트릭과 동일한 `session_id`를 `session_...` 형식으로 가집니다.396* **`session_id`**: 포트 9464에서 Claude Code 메트릭의 이 레이블에는 Claude Code 자체의 [`session.id`](https://code.claude.com/docs/ko/monitoring-usage#standard-attributes)가 들어 있으며, 이는 어떤 러너 시리즈와도 일치하지 않습니다. 이 레이블로 조인하면 아무것도 반환되지 않으므로 `ccr_session_id`를 기준으로 조인하십시오.

380* **`--capacity 1`인 경우**: 변환된 `ccr_session_id`를 기준으로 조인합니다. 기본적으로 포트 9464의 각 Claude Code 메트릭에는 이 레이블이 있으며, 여기에는 `cse_...` 형식의 세션 ID가 들어 있습니다. 새 레이블에서 `cse_` 접두사를 `session_`으로 바꾸면 러너의 `session_id`를 얻을 수 있습니다. 메트릭 자체의 `session_id`에는 Claude Code 자체의 [`session.id`](https://code.claude.com/docs/ko/monitoring-usage#standard-attributes)가 들어 있으며, 이는 어떤 러너 시리즈와도 일치하지 않습니다.397* **Claude Code 메트릭에 `ccr_session_id`가 없는 경우**: [`OTEL_METRICS_INCLUDE_SESSION_ID`](https://code.claude.com/docs/ko/monitoring-usage#metrics-cardinality-control)가 `false`로 설정되어 있지 않은지 확인하십시오

381 398 

382### 세션 수명 주기 카운터 의미399### 세션 수명 주기 카운터 의미

383 400 

Details

117| [`gcpAuthRefresh`](#gcpauthrefresh) | 직접 지정한 명령으로 [Google Cloud 자격 증명](https://code.claude.com/docs/ko/google-vertex-ai.md#advanced-credential-configuration)을 갱신합니다 | 인증 및 제공자 | 모든 파일 |117| [`gcpAuthRefresh`](#gcpauthrefresh) | 직접 지정한 명령으로 [Google Cloud 자격 증명](https://code.claude.com/docs/ko/google-vertex-ai.md#advanced-credential-configuration)을 갱신합니다 | 인증 및 제공자 | 모든 파일 |

118| [`hooks`](#hooks) | Claude Code 수명 주기의 특정 시점에 직접 지정한 명령을 [훅](https://code.claude.com/docs/ko/hooks.md)으로 실행합니다 | 훅 및 자동화 | 모든 파일 |118| [`hooks`](#hooks) | Claude Code 수명 주기의 특정 시점에 직접 지정한 명령을 [훅](https://code.claude.com/docs/ko/hooks.md)으로 실행합니다 | 훅 및 자동화 | 모든 파일 |

119| [`httpHookAllowedEnvVars`](#httphookallowedenvvars) | [HTTP 훅](https://code.claude.com/docs/ko/hooks.md)이 헤더에 넣을 수 있는 환경 변수를 제한합니다 | 훅 및 자동화 | 모든 파일 |119| [`httpHookAllowedEnvVars`](#httphookallowedenvvars) | [HTTP 훅](https://code.claude.com/docs/ko/hooks.md)이 헤더에 넣을 수 있는 환경 변수를 제한합니다 | 훅 및 자동화 | 모든 파일 |

120| [`idleCompaction`](#idlecompaction) | 터미널 세션이 유휴 상태일 때 Claude Code가 긴 대화를 압축하지 않도록 합니다 | 메모리 및 컨텍스트 | 모든 파일 |120| [`idleCompaction`](#idlecompaction) | 사용자가 자리를 비운 긴 대화를 Claude Code가 압축하지 않도록 합니다 | 메모리 및 컨텍스트 | 모든 파일 |

121| [`includeCoAuthoredBy`](#includecoauthoredby) | deprecated 되었습니다. 커밋 및 PR 작성자 표시를 숨기거나 변경하려면 `attribution`을 사용합니다 | Git 및 작성자 표시 | 모든 파일 |121| [`includeCoAuthoredBy`](#includecoauthoredby) | deprecated 되었습니다. 커밋 및 PR 작성자 표시를 숨기거나 변경하려면 `attribution`을 사용합니다 | Git 및 작성자 표시 | 모든 파일 |

122| [`includeGitInstructions`](#includegitinstructions) | Claude의 컨텍스트에서 기본 제공 커밋 및 PR 지침을 제거합니다 | Git 및 작성자 표시 | 모든 파일 |122| [`includeGitInstructions`](#includegitinstructions) | Claude의 컨텍스트에서 기본 제공 커밋 및 PR 지침을 제거합니다 | Git 및 작성자 표시 | 모든 파일 |

123| [`inputNeededNotifEnabled`](#inputneedednotifenabled) | Claude가 사용자 입력을 기다릴 때 [푸시 알림](https://code.claude.com/docs/ko/remote-control.md#mobile-push-notifications)을 받습니다 | 원격, 데스크톱 및 알림 | 모든 파일 |123| [`inputNeededNotifEnabled`](#inputneedednotifenabled) | Claude가 사용자 입력을 기다릴 때 [푸시 알림](https://code.claude.com/docs/ko/remote-control.md#mobile-push-notifications)을 받습니다 | 원격, 데스크톱 및 알림 | 모든 파일 |


1230 1230 

1231* **범위**: [`Any file`](#scopes), [프로젝트 및 로컬 설정에 대한 제한](https://code.claude.com/docs/ko/sandboxing.md#repository-settings-under-an-admin-required-sandbox) 있음1231* **범위**: [`Any file`](#scopes), [프로젝트 및 로컬 설정에 대한 제한](https://code.claude.com/docs/ko/sandboxing.md#repository-settings-under-an-admin-required-sandbox) 있음

1232* **유형**: Boolean1232* **유형**: Boolean

1233 * `true`: `sandbox.enabled`가 `true`이지만 샌드박스를 시작할 수 없을 때 Claude Code는 시작 시 오류로 종료됩니다.1233 * `true`: `sandbox.enabled`가 `true`이지만 샌드박스를 시작할 수 없으면 Claude Code가 시작 시 오류와 함께 종료됩니다. 샌드박스가 이 검사를 통과한 후 초기화에 실패하면 세션은 계속 실행되고 Claude Code는 [샌드박스 처리된 각 명령을 거부](https://code.claude.com/docs/ko/sandboxing.md#commands-refused-with-sandbox-is-required)합니다

1234 * `false`: 샌드박스를 시작할 수 없을 때 Claude Code는 명령을 샌드박스 없이 실행합니다.1234 * `false`: 샌드박스를 시작할 수 없으면 Claude Code가 샌드박스 없이 명령을 실행합니다

1235* **기본값**: `false`1235* **기본값**: `false`

1236 1236 

1237다음은 모든 관리 대상 머신이 명령을 샌드박스하거나 시작을 거부하도록 합니다:1237다음 예시는 관리 대상 머신에서 샌드박스를 켜고 `failIfUnavailable`을 `true`로 설정합니다.

1238 1238 

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

1240{1240{


2415 2415 

2416### `idleCompaction`2416### `idleCompaction`

2417 2417 

2418유휴 압축은 사용자가 자리를 비운 긴 대화를 프롬프트 캐시가 만료되기 직전에 [압축](https://code.claude.com/docs/ko/context-window.md#what-survives-compaction)합니다. 그러면 다음 메시지는 전체 대화 대신 요약을 전송합니다. 돌아오면 대화에 `Compacted while idle, before the prompt cache expired`로 시작하는 줄이 표시됩니다.2418유휴 압축은 사용자가 자리를 비운 긴 대화를 [압축](https://code.claude.com/docs/ko/context-window.md#what-survives-compaction)합니다. 그러면 다음 메시지는 전체 대화 대신 요약을 전송합니다. 압축이 완료되면 대화에 다음과 같은 알림이 표시됩니다:

2419 

2420* **터미널**: `Compacted while idle, before the prompt cache expired`로 시작하는 줄

2421* **[VS Code 채팅 패널](#idle-compaction-in-vs-code-and-the-desktop-app)**: `a summary written while you were away`가 포함된 알림

2422* **[데스크톱 앱](#idle-compaction-in-vs-code-and-the-desktop-app)**: 레이블에 `Claude Code notice`가 포함된 행 안에 표시되는 동일한 알림. 해당 행이나 텍스트가 보이지 않으면 [Verbose 보기 모드](https://code.claude.com/docs/ko/desktop.md#switch-view-modes)로 전환합니다.

2419 2423 

2420유휴 압축은 다음 조건을 모두 충족하는 대화에 대해 기본적으로 켜져 있습니다:2424유휴 압축은 다음 조건을 모두 충족하는 대화에 대해 기본적으로 켜져 있습니다:

2421 2425 

2422* **세션**: 대화형 터미널 세션에 있습니다2426* **세션**: 대화형 터미널 세션에 있거나, [Anthropic이 선택한 계정](#idle-compaction-in-vs-code-and-the-desktop-app)으로 VS Code 확장 프로그램의 채팅 패널 또는 데스크톱 앱의 Code 탭을 사용하고 있습니다

2423* **자동 압축**: [`autoCompactEnabled`](#autocompactenabled)가 켜져 있습니다2427* **자동 압축**: [`autoCompactEnabled`](#autocompactenabled)가 켜져 있습니다

2424* **프롬프트 캐시**: 대화가 [1시간 프롬프트 캐시 TTL](https://code.claude.com/docs/ko/prompt-caching.md#which-ttl-each-request-gets)을 사용합니다2428* **프롬프트 캐시**: 대화가 [1시간 프롬프트 캐시 TTL](https://code.claude.com/docs/ko/prompt-caching.md#which-ttl-each-request-gets)을 사용합니다

2425* **기능 플래그**: Claude Code가 [Anthropic에서 기능 플래그를 가져올](https://code.claude.com/docs/ko/env-vars.md#features-that-need-feature-flag-fetching) 수 있습니다2429* **기능 플래그**: Claude Code가 [Anthropic에서 기능 플래그를 가져올](https://code.claude.com/docs/ko/env-vars.md#features-that-need-feature-flag-fetching) 수 있습니다


2441}2445}

2442```2446```

2443 2447 

2444세션 내에서 유휴 압축을 끄거나 켜려면 `/config`를 실행하고 **유휴 압축** 행을 변경합니다. 선택한 값은 사용자 설정에 저장되며 즉시 적용됩니다. 이 행은 Claude Code v2.1.302 이상이 필요합니다. 해당 버전을 실행 중인데 `/config`에 이 행이 표시되지 않으면 다음 원인을 확인합니다:2448터미널 세션 내에서 유휴 압축을 끄거나 켜려면 `/config`를 실행하고 **유휴 압축** 행을 변경합니다. 선택한 값은 사용자 설정에 저장되며 즉시 적용됩니다. 이 행은 Claude Code v2.1.302 이상이 필요합니다. 해당 버전을 실행 중인데 `/config`에 이 행이 표시되지 않으면 다음 원인을 확인합니다:

2445 2449 

2446* **다른 설정 소스가 키를 설정함**: 관리형 설정, `--settings` 플래그 또는 프로젝트나 로컬 설정 파일의 값이 사용자 설정을 재정의합니다. 대신 해당 소스에서 키를 변경합니다2450* **다른 설정 소스가 키를 설정함**: 관리형 설정, `--settings` 플래그 또는 프로젝트나 로컬 설정 파일의 값이 사용자 설정을 재정의합니다. 대신 해당 소스에서 키를 변경합니다

2447* **기능 플래그를 사용할 수 없음**: Claude Code가 [Anthropic에서 기능 플래그를 가져올](https://code.claude.com/docs/ko/env-vars.md#features-that-need-feature-flag-fetching) 수 없는 환경에서는 유휴 압축이 실행되지 않으므로 끌 대상이 없습니다2451* **기능 플래그를 사용할 수 없음**: Claude Code가 [Anthropic에서 기능 플래그를 가져올](https://code.claude.com/docs/ko/env-vars.md#features-that-need-feature-flag-fetching) 수 없는 환경에서는 유휴 압축이 실행되지 않으므로 끌 대상이 없습니다


2462}2466}

2463```2467```

2464 2468 

2469#### VS Code 및 데스크톱 앱의 유휴 압축

2470 

2471다음과 같은 알림은 Claude Code가 [이전 대화를 요약으로 대체](https://code.claude.com/docs/ko/context-window.md#what-survives-compaction)했으며, Claude가 이제 그 요약을 바탕으로 작업한다는 의미입니다:

2472 

2473```text theme={null}

2474Compacted using a summary written while you were away · turn off with "idleCompaction": false in settings.json

2475```

2476 

2477별도로 조치할 필요는 없습니다. 유휴 압축을 끄려면 `~/.claude/settings.json` 또는 다른 [설정 파일](https://code.claude.com/docs/ko/settings.md#settings-files-and-who-they-affect)에서 `idleCompaction`을 `false`로 설정합니다.

2478 

2479VS Code 확장 프로그램의 채팅 패널과 데스크톱 앱의 Code 탭에서는 Anthropic이 선택한 계정에 대해 유휴 압축이 실행됩니다. Claude Code는 사용자가 자리를 비운 동안 요약을 작성한 다음, 다음 메시지가 마지막 요청으로부터 1시간 이상 지나서 도착하는 경우에만 그 요약으로 압축합니다.

2480 

2465### `plansDirectory`2481### `plansDirectory`

2466 2482 

2467Claude Code가 [플랜 모드](https://code.claude.com/docs/ko/permission-modes.md#analyze-before-you-edit-with-plan-mode)에서 작성하는 계획 파일을 저장할 위치를 선택합니다. Claude Code는 경로를 프로젝트 루트에 상대적으로 해석합니다.2483Claude Code가 [플랜 모드](https://code.claude.com/docs/ko/permission-modes.md#analyze-before-you-edit-with-plan-mode)에서 작성하는 계획 파일을 저장할 위치를 선택합니다. Claude Code는 경로를 프로젝트 루트에 상대적으로 해석합니다.


3522 3538 

3523* **관리형 훅 및 SDK 훅 실행**: 관리형 설정의 훅 및 [Agent SDK](https://code.claude.com/docs/ko/agent-sdk/overview.md)가 프로세스에 등록하는 훅3539* **관리형 훅 및 SDK 훅 실행**: 관리형 설정의 훅 및 [Agent SDK](https://code.claude.com/docs/ko/agent-sdk/overview.md)가 프로세스에 등록하는 훅

3524* **강제 활성화된 플러그인 훅 실행**: 관리형 설정이 [`enabledPlugins`](#enabledplugins)를 통해 강제로 활성화하는 플러그인의 훅. Claude Code는 전체 `plugin@marketplace` ID와 일치하므로 다른 마켓플레이스의 동일한 이름의 플러그인은 차단된 상태로 유지됩니다. 이를 통해 조직 마켓플레이스를 통해 검증된 훅을 배포하면서 다른 모든 것을 차단할 수 있습니다. 이러한 플러그인의 [mod](https://code.claude.com/docs/ko/plugins/mods/overview.md)는 [조직의 것으로 계산될 때](https://code.claude.com/docs/ko/plugins/mods/admin.md#install-your-organizations-mods)만 로드됩니다.3540* **강제 활성화된 플러그인 훅 실행**: 관리형 설정이 [`enabledPlugins`](#enabledplugins)를 통해 강제로 활성화하는 플러그인의 훅. Claude Code는 전체 `plugin@marketplace` ID와 일치하므로 다른 마켓플레이스의 동일한 이름의 플러그인은 차단된 상태로 유지됩니다. 이를 통해 조직 마켓플레이스를 통해 검증된 훅을 배포하면서 다른 모든 것을 차단할 수 있습니다. 이러한 플러그인의 [mod](https://code.claude.com/docs/ko/plugins/mods/overview.md)는 [조직의 것으로 계산될 때](https://code.claude.com/docs/ko/plugins/mods/admin.md#install-your-organizations-mods)만 로드됩니다.

3541* **다른 플러그인의 모니터 차단**: 플러그인이 강제로 활성화되지 않는 한 플러그인의 [모니터](https://code.claude.com/docs/ko/plugins/components.md#monitors)는 시작되지 않습니다. Claude Code v2.1.310 이상이 필요합니다.

3525* **다른 모든 것은 차단됨**: 사용자, 프로젝트 및 로컬 훅, 다른 설치된 플러그인의 훅 및 mod, 에이전트 frontmatter에 선언된 훅. [Claude Code에 내장된 mod](https://code.claude.com/docs/ko/plugins/mods/overview.md#mods-built-into-claude-code)는 계속 실행됩니다. 사용자의 mod만 차단하려면 [`allowManagedModsOnly`](https://code.claude.com/docs/ko/plugins/mods/admin#set-options-on-the-built-in-guard)를 대신 설정합니다.3542* **다른 모든 것은 차단됨**: 사용자, 프로젝트 및 로컬 훅, 다른 설치된 플러그인의 훅 및 mod, 에이전트 frontmatter에 선언된 훅. [Claude Code에 내장된 mod](https://code.claude.com/docs/ko/plugins/mods/overview.md#mods-built-into-claude-code)는 계속 실행됩니다. 사용자의 mod만 차단하려면 [`allowManagedModsOnly`](https://code.claude.com/docs/ko/plugins/mods/admin#set-options-on-the-built-in-guard)를 대신 설정합니다.

3526* **명령 소스 플러그인 비활성화**: Claude Code는 또한 [`disableCommandPluginSources`](#disablecommandpluginsources)를 명시적으로 `false`로 설정하지 않는 한 [`command` 소스](https://code.claude.com/docs/ko/plugins/marketplace-reference#command-plugin-source)가 있는 플러그인(관리형 `enabledPlugins`에서 강제로 활성화된 플러그인 포함)을 비활성화합니다.3543* **명령 소스 플러그인 비활성화**: Claude Code는 또한 [`disableCommandPluginSources`](#disablecommandpluginsources)를 명시적으로 `false`로 설정하지 않는 한 [`command` 소스](https://code.claude.com/docs/ko/plugins/marketplace-reference#command-plugin-source)가 있는 플러그인(관리형 `enabledPlugins`에서 강제로 활성화된 플러그인 포함)을 비활성화합니다.

3527* **마켓플레이스 `headersHelper` 명령 차단**: Claude Code는 또한 [`disableCommandPluginSources`](#disablecommandpluginsources)가 명시적으로 `false`로 설정되지 않는 한 마켓플레이스 [`headersHelper` 명령](https://code.claude.com/docs/ko/plugins/host-marketplace#authenticate-archive-downloads)을 차단합니다. 단, 관리형 설정 자체가 선언하는 마켓플레이스는 제외됩니다. Claude Code v2.1.238 이상이 필요합니다.3544* **마켓플레이스 `headersHelper` 명령 차단**: Claude Code는 또한 [`disableCommandPluginSources`](#disablecommandpluginsources)가 명시적으로 `false`로 설정되지 않는 한 마켓플레이스 [`headersHelper` 명령](https://code.claude.com/docs/ko/plugins/host-marketplace#authenticate-archive-downloads)을 차단합니다. 단, 관리형 설정 자체가 선언하는 마켓플레이스는 제외됩니다. Claude Code v2.1.238 이상이 필요합니다.

statusline.md +1 −1

Details

380* `used_percentage` 및 `resets_at`: 모든 응답과 함께 제공되므로 `spend_limit`이 있을 때는 항상 존재합니다. `used_percentage`는 0\~100 범위이거나 제한을 초과하면 100 이상이며, `resets_at`은 제한의 기간이 재설정되는 Unix epoch 초입니다.380* `used_percentage` 및 `resets_at`: 모든 응답과 함께 제공되므로 `spend_limit`이 있을 때는 항상 존재합니다. `used_percentage`는 0\~100 범위이거나 제한을 초과하면 100 이상이며, `resets_at`은 제한의 기간이 재설정되는 Unix epoch 초입니다.

381* `used_usd`, `limit_usd` 및 `period`: 지금까지의 예상 지출액과 미국 달러 기준의 제한, 그리고 제한이 적용되는 기간으로, `daily`, `weekly` 또는 `monthly` 중 하나입니다. 게이트웨이는 [토큰 수로부터 `used_usd`를 계산](https://code.claude.com/docs/ko/claude-apps-gateway-spend-limits#how-requests-are-priced)하므로 이는 추정치이며 청구 금액이 아닙니다. Claude Code는 요청을 보내는 동안 약 5분마다 별도의 요청으로 게이트웨이에서 이 값을 읽습니다. 달러 금액은 `used_percentage`보다 최대 약 5분 오래된 값일 수 있으므로 두 값이 잠시 일치하지 않을 수 있습니다. Claude Code와 게이트웨이 모두 v2.1.284 이상이 필요합니다.381* `used_usd`, `limit_usd` 및 `period`: 지금까지의 예상 지출액과 미국 달러 기준의 제한, 그리고 제한이 적용되는 기간으로, `daily`, `weekly` 또는 `monthly` 중 하나입니다. 게이트웨이는 [토큰 수로부터 `used_usd`를 계산](https://code.claude.com/docs/ko/claude-apps-gateway-spend-limits#how-requests-are-priced)하므로 이는 추정치이며 청구 금액이 아닙니다. Claude Code는 요청을 보내는 동안 약 5분마다 별도의 요청으로 게이트웨이에서 이 값을 읽습니다. 달러 금액은 `used_percentage`보다 최대 약 5분 오래된 값일 수 있으므로 두 값이 잠시 일치하지 않을 수 있습니다. Claude Code와 게이트웨이 모두 v2.1.284 이상이 필요합니다.

382 382 

383`spend_limit`이 있을 때도 `used_usd`, `limit_usd` 및 `period`는 선택 사항으로 취급하세요. 스크립트는 이 필드보다 백분율을 먼저 수신하며, 해당 요청을 끄는 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`을 설정하면 이 필드는 계속 없습니다. 스크립트에서 `jq -r '.rate_limits.spend_limit.used_usd // empty'`와 같이 폴백을 사용하여 각 필드를 읽으세요.383`spend_limit`이 있을 때도 `used_usd`, `limit_usd` 및 `period`는 선택 사항으로 취급하세요. 스크립트는 이 필드보다 백분율을 먼저 수신하기 때문입니다. 스크립트에서 `jq -r '.rate_limits.spend_limit.used_usd // empty'`와 같이 폴백을 사용하여 각 필드를 읽으세요. Claude Code v2.1.295 이전에는 해당 요청을 끄는 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`을 설정하면 이 필드가 계속 없었습니다.

384 384 

385### 프롬프트 캐시 필드385### 프롬프트 캐시 필드

386 386 

Details

121* **백그라운드 세션**: [백그라운드 세션](https://code.claude.com/docs/ko/agent-view.md)은 세션에 연결되어 있는 동안에도 터미널에 상태를 보고하지 않습니다. 대신 에이전트 뷰에 상태가 표시됩니다.121* **백그라운드 세션**: [백그라운드 세션](https://code.claude.com/docs/ko/agent-view.md)은 세션에 연결되어 있는 동안에도 터미널에 상태를 보고하지 않습니다. 대신 에이전트 뷰에 상태가 표시됩니다.

122* **[`CLAUDE_CODE_DISABLE_TERMINAL_TITLE`](https://code.claude.com/docs/ko/env-vars#variables)**: 이 변수를 `1`로 설정하면 Claude Code는 지원 여부를 확인하거나 상태를 보고하지 않습니다. 이 변수의 설정을 해제하십시오.122* **[`CLAUDE_CODE_DISABLE_TERMINAL_TITLE`](https://code.claude.com/docs/ko/env-vars#variables)**: 이 변수를 `1`로 설정하면 Claude Code는 지원 여부를 확인하거나 상태를 보고하지 않습니다. 이 변수의 설정을 해제하십시오.

123 123 

124프로토콜 지원을 보고하는 터미널에서는 탭 제목이 상태 글리프로 시작하지 않습니다. 터미널이 세션의 상태를 직접 표시하므로, Claude Code는 다른 터미널에서 제목 앞에 붙이는 글리프를 생략합니다.

125 

124## tmux 구성126## tmux 구성

125 127 

126Claude Code가 tmux 내에서 실행될 때, 기본적으로 Shift+Enter가 새 줄을 삽입하는 대신 제출하고, 데스크톱 알림과 [진행률 표시줄](https://code.claude.com/docs/ko/settings-reference.md#terminalprogressbarenabled)이 외부 터미널에 도달하지 않습니다. `~/.tmux.conf`에 다음 줄을 추가한 후 `tmux source-file ~/.tmux.conf`를 실행하여 실행 중인 서버에 적용합니다:128Claude Code가 tmux 내에서 실행될 때, 기본적으로 Shift+Enter가 새 줄을 삽입하는 대신 제출하고, 데스크톱 알림과 [진행률 표시줄](https://code.claude.com/docs/ko/settings-reference.md#terminalprogressbarenabled)이 외부 터미널에 도달하지 않습니다. `~/.tmux.conf`에 다음 줄을 추가한 후 `tmux source-file ~/.tmux.conf`를 실행하여 실행 중인 서버에 적용합니다:

Details

258 258 

259Claude가 마지막으로 읽은 후 디스크에서 변경된 파일은 `old_string`이 현재 콘텐츠와 정확히 일치하고 명확하며 Claude Code가 프롬프트 없이 파일을 읽을 수 있을 때 여전히 편집할 수 있습니다. 파일의 현재 콘텐츠와 일치하면 이것이 안전하게 유지되며, 결과는 파일이 다른 변경 사항을 포함하고 있음을 기록하므로 Claude는 주변 콘텐츠에 따라 달라지는 편집 전에 다시 읽습니다. 다른 경우, 예를 들어 오래된 `old_string` 또는 `replace_all` 없이 두 번 이상 일치하는 경우, Claude는 편집하기 전에 파일을 다시 읽습니다.259Claude가 마지막으로 읽은 후 디스크에서 변경된 파일은 `old_string`이 현재 콘텐츠와 정확히 일치하고 명확하며 Claude Code가 프롬프트 없이 파일을 읽을 수 있을 때 여전히 편집할 수 있습니다. 파일의 현재 콘텐츠와 일치하면 이것이 안전하게 유지되며, 결과는 파일이 다른 변경 사항을 포함하고 있음을 기록하므로 Claude는 주변 콘텐츠에 따라 달라지는 편집 전에 다시 읽습니다. 다른 경우, 예를 들어 오래된 `old_string` 또는 `replace_all` 없이 두 번 이상 일치하는 경우, Claude는 편집하기 전에 파일을 다시 읽습니다.

260 260 

261Claude는 `cat`이나 `grep` 같은 Bash 명령으로 파일을 본 후에도 별도의 Read 없이 파일을 편집할 수 있습니다. 해당 명령은 `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep`, `rg`이며, 각각 파이프나 리디렉션 없이 단일 파일에 대해 실행되어야 합니다. 일치 항목을 출력하지 않는 검색은 읽기로 간주되지 않으며, 이 목록에 없는 명령도 마찬가지입니다.261Claude는 `cat`이나 `grep` 같은 Bash 명령으로 파일을 본 후에도 별도의 Read 없이 파일을 편집할 수 있습니다. 해당 명령은 `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep`, `rg`이며, 각각 파이프나 리디렉션 없이 단일 파일에 대해 실행되어야 합니다. 검색과 일치하는 항목이 없는 경우처럼 명령이 파일의 텍스트를 전혀 출력하지 않았다면 편집 전 읽기 검사가 여전히 적용됩니다.

262 262 

263Claude가 이 방식으로 파일을 볼 때, Claude Code는 해당 파일에 적용되는 [하위 디렉터리 `CLAUDE.md`](https://code.claude.com/docs/ko/memory#how-claude-md-files-load) 및 [경로 범위 규칙](https://code.claude.com/docs/ko/memory.md#path-specific-rules)도 로드합니다. [Read 및 Edit 권한 규칙](https://code.claude.com/docs/ko/permissions.md#read-and-edit)에서 `Read` 및 `Edit` 거부 규칙이 적용되는 Bash 명령을 확인하십시오.263Claude가 이 방식으로 파일을 볼 때, Claude Code는 해당 파일에 적용되는 [하위 디렉터리 `CLAUDE.md`](https://code.claude.com/docs/ko/memory#how-claude-md-files-load) 및 [경로 범위 규칙](https://code.claude.com/docs/ko/memory.md#path-specific-rules)도 로드합니다. [Read 및 Edit 권한 규칙](https://code.claude.com/docs/ko/permissions.md#read-and-edit)에서 `Read` 및 `Edit` 거부 규칙이 적용되는 Bash 명령을 확인하십시오.

264 264 


383 383 

384[WebSocket 소스](#websocket-source)에는 자체 승인 프롬프트가 있으며, 분류기도 자동 모드에서 이를 결정합니다.384[WebSocket 소스](#websocket-source)에는 자체 승인 프롬프트가 있으며, 분류기도 자동 모드에서 이를 결정합니다.

385 385 

386이 도구는 Amazon Bedrock, Google Cloud의 Agent Platform 또는 Microsoft Foundry에서 사용할 수 없습니다. `DISABLE_TELEMETRY` 또는 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`이 설정된 경우에도 사용할 수 없습니다. Windows에서는 [Git Bash](https://code.claude.com/docs/ko/setup.md#set-up-on-windows)가 설치된 경우에만 이 도구를 사용할 수 있습니다.386다음의 경우 Monitor를 사용하려면 최소 버전 또는 Git Bash가 필요합니다:

387 

388* **최소 버전**: Amazon Bedrock, Claude Platform on AWS, Google Cloud의 Agent Platform 또는 Microsoft Foundry에서, 또는 `DISABLE_TELEMETRY`나 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`이 설정된 경우 Monitor에는 Claude Code v2.1.310 이상이 필요합니다. 이 요구 사항은 [기능 플래그 가져오기](https://code.claude.com/docs/ko/env-vars.md#features-that-need-feature-flag-fetching)가 꺼져 있을 때 적용됩니다

389* **Windows**: [Git Bash](https://code.claude.com/docs/ko/setup.md#set-up-on-windows)가 설치된 경우에만 이 도구를 사용할 수 있습니다

387 390 

388플러그인은 Claude에게 시작을 요청하는 대신 플러그인이 활성화될 때 자동으로 시작되는 모니터를 선언할 수 있습니다. [플러그인 모니터](https://code.claude.com/docs/ko/plugins/components.md#monitors)를 참조하세요.391플러그인은 Claude에게 시작을 요청하는 대신 플러그인이 활성화될 때 자동으로 시작되는 모니터를 선언할 수 있습니다. [플러그인 모니터](https://code.claude.com/docs/ko/plugins/components.md#monitors)를 참조하세요.

389 392 

Details

175 175 

176Claude가 완료되면, 변경 사항을 검토하고, 특정 줄에 피드백을 남기고, 차이가 올바를 때까지 계속합니다.176Claude가 완료되면, 변경 사항을 검토하고, 특정 줄에 피드백을 남기고, 차이가 올바를 때까지 계속합니다.

177 177 

178**1. 차이 보기 열기**178**1. diff 보기 열기**

179 179 

180차이 표시기는 세션 전체에서 추가되고 제거된 줄을 표시합니다(예: `+42 -18`). 이를 선택하여 차이 보기를 열고, 왼쪽에 파일 목록이 있고 오른쪽에 변경 사항이 있습니다.180Claude가 변경 사항을 브랜치에 푸시하면, 채팅 옆 패널의 **Changes** 카드에 세션 전체에서 추가되고 제거된 줄이 표시됩니다(예: `+42 -18`). 이 숫자를 클릭하여 diff 보기를 엽니다.

181 181 

182차이 보기는 기본적으로 세션의 변경 사항을 기본 분기와 비교합니다. 다른 분기와 비교하려면 **비교 대상**을 선택하고 하나를 선택합니다.182* 세션 제목 표시줄 또는 표시줄의 **⋮** 메뉴에서 **Changes**를 클릭할 수도 있습니다.

183* 패널이 숨겨져 있을 때 표시하려면, 세션 제목 표시줄 또는 표시줄의 **⋮** 메뉴에서 **Show session rail** 아이콘을 클릭합니다.

184 

185diff는 기본적으로 세션의 변경 사항을 기본 브랜치와 비교합니다. 다른 브랜치와 비교하려면 **Compare against**를 선택하고 하나를 선택합니다.

183 186 

184**2. 인라인 댓글 남기기**187**2. 인라인 댓글 남기기**

185 188 

186차이의 모든 줄을 선택하고, 피드백을 입력하고, Enter를 누릅니다. 댓글은 다음 메시지를 보낼 때까지 대기열에 있다가 함께 번들로 제공됩니다. Claude는 주요 지침과 함께 "`src/auth.ts:47`에서 여기서 오류를 포착하지 마십시오"를 보므로, 문제가 있는 위치를 설명할 필요가 없습니다.189diff의 모든 줄을 선택하고, 피드백을 입력하고, Enter를 누릅니다. 댓글은 다음 메시지를 보낼 때까지 대기열에 있다가 함께 번들로 제공됩니다. Claude는 주요 지침과 함께 "`src/auth.ts:47`에서 여기서 오류를 포착하지 마십시오"를 보므로, 문제가 있는 위치를 설명할 필요가 없습니다.

190 

191**3. 풀 리퀘스트 생성**

187 192 

188**3. 풀 요청 생성**193diff가 올바르면, **Changes** 카드가 보이지 않는 경우 [패널을 다시 표시](https://code.claude.com/docs/ko/claude-code-on-the-web.md#review-changes)한 다음 카드에서 풀 리퀘스트 또는 초안을 생성합니다.

189 194 

190차이가 올바르면, 차이 보기 상단에서 **PR 생성**을 선택합니다. 전체 PR로 열거나, 초안으로 열거나, 생성된 제목 및 설명과 함께 GitHub의 작성 페이지로 이동할 수 있습니다.195* **Create PR**을 클릭합니다. Claude Code가 생성된 제목과 설명으로 풀 리퀘스트를 생성합니다.

196* 대신 초안으로 열려면, **Create PR**을 마우스 오른쪽 버튼으로 클릭하고 **Create draft PR**을 선택하여 버튼 동작을 변경한 다음 버튼을 클릭합니다.

191 197 

192**4. PR 후 계속 반복**198**4. PR 후 계속 반복**

193 199 

194PR이 생성된 후 세션이 활성 상태로 유지됩니다. CI 실패 출력 또는 검토자 댓글을 채팅에 붙여넣고 Claude에게 이를 해결하도록 요청합니다. Claude가 PR을 자동으로 모니터링하도록 하려면, [자동 수정 풀 요청](https://code.claude.com/docs/ko/claude-code-on-the-web.md#auto-fix-pull-requests)을 참조합니다.200PR이 생성된 후 세션이 활성 상태로 유지됩니다. CI 실패 출력 또는 검토자 댓글을 채팅에 붙여넣고 Claude에게 이를 해결하도록 요청합니다. Claude가 PR을 자동으로 모니터링하도록 하려면, [자동 수정 풀 리퀘스트](https://code.claude.com/docs/ko/claude-code-on-the-web.md#auto-fix-pull-requests)를 참조합니다.

195 201 

196## 설정 문제 해결202## 설정 문제 해결

197 203