SpyBara
Go Premium

Documentation 2026-10-08 22:58 UTC to 2026-10-09 16:59 UTC

41 files changed +312 −142. View all changes and history on the product overview
2026
Fri 9 18:01 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

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

217| :- | :- | :- |217| :- | :- | :- |

218| 최대 턴(`max_turns` / `maxTurns`) | 최대 도구 사용 왕복 | 제한 없음 |218| 최대 턴(`max_turns` / `maxTurns`) | 최대 도구 사용 왕복 | 제한 없음 |

219| 최대 예산(`max_budget_usd` / `maxBudgetUsd`) | 중지 전 최대 비용 | 제한 없음 |219| 최대 예산(`max_budget_usd` / `maxBudgetUsd`) | 루프가 중지되는 추정 지출액 | 제한 없음 |

220 220 

221제한 중 하나에 도달하면 SDK는 해당 오류 서브타입(`error_max_turns` 또는 `error_max_budget_usd`)이 있는 `ResultMessage`를 반환합니다. 이러한 서브타입을 확인하는 방법은 [결과 처리](#handle-the-result)를 참조하고, 구문은 [`ClaudeAgentOptions`](/docs/ko/agent-sdk/python#claudeagentoptions) / [`Options`](/docs/ko/agent-sdk/typescript#options)를 참조하세요.221제한 중 하나에 도달하면 SDK는 해당 오류 서브타입(`error_max_turns` 또는 `error_max_budget_usd`)이 있는 `ResultMessage`를 반환합니다. 이러한 서브타입을 확인하는 방법은 [결과 처리](#handle-the-result)를 참조하고, 구문은 [`ClaudeAgentOptions`](/docs/ko/agent-sdk/python#claudeagentoptions) / [`Options`](/docs/ko/agent-sdk/typescript#options)를 참조하세요.

222 222 


224 224 

225[스트리밍 입력](/docs/ko/agent-sdk/streaming-vs-single-mode)을 사용하면 턴이 최대 턴 제한에서 끝날 때 실행 중인 메시지는 대기열에 남아 있습니다. Claude Code는 이를 해당 턴의 마지막 모델 호출에 추가하지 않습니다. 메시지에 대해 새로운 턴을 시작하고, 해당 턴에 대해 최대 턴 수가 다시 시작됩니다. 예산 총액은 메시지 전체에 계속 누적되며, 지출이 `maxBudgetUsd`에 도달하면 같은 대화의 이후 메시지는 `error_max_budget_usd` 결과로 끝납니다. [`/clear`](/docs/ko/agent-sdk/cost-tracking)는 예산을 다시 시작합니다.225[스트리밍 입력](/docs/ko/agent-sdk/streaming-vs-single-mode)을 사용하면 턴이 최대 턴 제한에서 끝날 때 실행 중인 메시지는 대기열에 남아 있습니다. Claude Code는 이를 해당 턴의 마지막 모델 호출에 추가하지 않습니다. 메시지에 대해 새로운 턴을 시작하고, 해당 턴에 대해 최대 턴 수가 다시 시작됩니다. 예산 총액은 메시지 전체에 계속 누적되며, 지출이 `maxBudgetUsd`에 도달하면 같은 대화의 이후 메시지는 `error_max_budget_usd` 결과로 끝납니다. [`/clear`](/docs/ko/agent-sdk/cost-tracking)는 예산을 다시 시작합니다.

226 226 

227<h4 id="budget-headroom">

228 예산 여유분

229</h4>

230 

231Claude Code는 모델 응답이 도착한 후에 지출을 `max_budget_usd` / `maxBudgetUsd` 상한과 비교합니다. 각 응답의 비용은 API가 응답과 함께 반환하는 토큰 사용량에서 산출되기 때문입니다. 상한에 도달하게 만든 응답은 그대로 완료되며 [`total_cost_usd`](/docs/ko/agent-sdk/cost-tracking#get-the-total-cost-of-a-query)에 포함됩니다. 따라서 지출은 해당 응답 하나의 비용에 더해, 그 시점에 아직 실행 중인 서브에이전트가 중지되기 전까지 지출한 금액만큼 상한을 초과할 수 있습니다. 상한을 설정할 때는 이를 고려하여 여유분을 두세요.

232 

227<h3 id="effort-level">233<h3 id="effort-level">

228 노력 수준234 노력 수준

229</h3>235</h3>

Details

146| `auto` | 모델 분류 승인 | 모델 분류기가 셸 명령 및 네트워크 요청과 같은 작업을 검토하여 각각을 허용하거나 차단합니다. 가용성은 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)를 참조하고 결정 순서를 확인하세요 |146| `auto` | 모델 분류 승인 | 모델 분류기가 셸 명령 및 네트워크 요청과 같은 작업을 검토하여 각각을 허용하거나 차단합니다. 가용성은 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)를 참조하고 결정 순서를 확인하세요 |

147 147 

148<Warning>148<Warning>

149 **하위 에이전트 상속:** 하위 에이전트는 부모 세션의 권한 모드에서 실행됩니다. 단, [`AgentDefinition`](/docs/ko/agent-sdk/typescript#agentdefinition)에서 `permissionMode`를 설정하고 부모 세션이 `default`, `dontAsk` 또는 `plan` 모드에 있는 경우는 예외입니다. 이 경우에도 Claude Code는 `"bypassPermissions"` 값을 적용하지 않습니다. 하위 에이전트는 부모 세션 자체가 `bypassPermissions` 모드에 있을 때만 `bypassPermissions` 모드에서 실행됩니다. `bypassPermissions` 예외는 Claude Code v2.1.267 이상이 필요합니다.149 **서브에이전트 상속:** 서브에이전트는 부모 세션의 권한 모드에서 실행됩니다. 단, [`AgentDefinition`](/docs/ko/agent-sdk/typescript#agentdefinition)에서 `permissionMode`를 설정하고 부모 세션이 `default`, `dontAsk` 또는 `plan` 모드에 있는 경우는 예외입니다. 이 경우에도 Claude Code는 `"bypassPermissions"` 값을 적용하지 않으며, `"auto"` 값은 해당 서브에이전트에 [자동 모드를 사용할 수 있는 경우](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)에만 적용합니다. 서브에이전트는 부모 세션 자체가 `bypassPermissions` 모드에 있을 때만 `bypassPermissions` 모드에서 실행됩니다. `bypassPermissions` 예외는 Claude Code v2.1.267 이상이 필요합니다.

150 150 

151 하위 에이전트는 주 에이전트와 다른 시스템 프롬프트를 가질 수 있으며 덜 제한된 동작을 할 수 있으므로, `bypassPermissions` 상속은 전체 자율 시스템 액세스 권한을 부여합니다. [모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)은 여전히 적용됩니다.151 하위 에이전트는 주 에이전트와 다른 시스템 프롬프트를 가질 수 있으며 덜 제한된 동작을 할 수 있으므로, `bypassPermissions` 상속은 전체 자율 시스템 액세스 권한을 부여합니다. [모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)은 여전히 적용됩니다.

152</Warning>152</Warning>

Details

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

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

930| `max_turns` | `int \| None` | `None` | 최대 에이전트 턴 (도구 사용 왕복) |930| `max_turns` | `int \| None` | `None` | 최대 에이전트 턴 (도구 사용 왕복) |

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

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

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

934| `model` | `str \| None` | `None` | Claude 모델 별칭 또는 전체 모델 이름. [허용되는 값 및 공급자별 ID](/docs/ko/model-config#available-models) 참조 |934| `model` | `str \| None` | `None` | Claude 모델 별칭 또는 전체 모델 이름. [허용되는 값 및 공급자별 ID](/docs/ko/model-config#available-models) 참조 |


987```987```

988 988 

989* `API_TIMEOUT_MS`: Anthropic 클라이언트의 요청당 타임아웃 (밀리초). 기본값 `600000`. 주 루프 및 모든 서브에이전트에 적용됩니다.989* `API_TIMEOUT_MS`: Anthropic 클라이언트의 요청당 타임아웃 (밀리초). 기본값 `600000`. 주 루프 및 모든 서브에이전트에 적용됩니다.

990* `CLAUDE_CODE_MAX_RETRIES`: 최대 API 재시도. 기본값 `10`, 최대 `15`로 제한됨. 각 재시도는 자체 `API_TIMEOUT_MS` 윈도우를 가지므로, 최악의 경우 벽시간은 대략 `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` 더하기 백오프입니다. 더 긴 중단을 기다려야 하는 무인 실행의 경우, [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/ko/errors#tune-retry-behavior)을 설정하여 일시적 용량 오류를 무한정 재시도합니다. 그리고 Claude Code v2.1.199 이상에서는 다른 일시적 오류의 기본값을 `300`으로 올리고 이 변수의 상한을 제거합니다.990* `CLAUDE_CODE_MAX_RETRIES`: 최대 API 재시도. 기본값 `10`, 최대 `15`로 제한됨. 각 재시도는 자체 `API_TIMEOUT_MS` 윈도우를 가집니다.

991 

992 더 긴 중단을 기다려야 하는 무인 실행의 경우, [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/ko/errors#tune-retry-behavior)을 설정합니다. 이 설정은 일시적 용량 오류를 무한정 재시도하며, Claude Code v2.1.199 이상에서는 다른 일시적 오류의 기본값을 `300`으로 올리고 이 변수의 상한을 제거합니다.

991* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: 서브에이전트의 정지 감시견. 스트림 감시견이 켜져 있는 동안 기본값은 `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 더하기 5분이며, 이는 해당 변수를 올리지 않으면 `600000`입니다. 스트림 감시견이 꺼져 있으면 기본값은 `600000`입니다. v2.1.257 이전에는 기본값이 항상 `600000`이었습니다.993* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: 서브에이전트의 정지 감시견. 스트림 감시견이 켜져 있는 동안 기본값은 `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 더하기 5분이며, 이는 해당 변수를 올리지 않으면 `600000`입니다. 스트림 감시견이 꺼져 있으면 기본값은 `600000`입니다. v2.1.257 이전에는 기본값이 항상 `600000`이었습니다.

992 994 

993 타이머는 각 스트림 이벤트에서 재설정됩니다. 정지 시 Claude Code는 서브에이전트를 중단하고 정지를 부모에게 보고합니다. 백그라운드 서브에이전트의 경우 작업을 실패로 표시하고 부분 결과를 첨부합니다.995 타이머는 각 스트림 이벤트에서 재설정됩니다. 정지 시 Claude Code는 서브에이전트를 중단하고 정지를 부모에게 보고합니다. 백그라운드 서브에이전트의 경우 작업을 실패로 표시하고 부분 결과를 첨부합니다.


2877 2879 

2878서브에이전트의 결과를 반환합니다. 출력은 `status` 필드에서 구분됩니다: 완료된 작업의 경우 `"completed"`, 백그라운드 작업의 경우 `"async_launched"`, Claude Code가 클라우드 세션으로 전달한 작업의 경우 `"remote_launched"`. `sessionUrl`은 해당 세션으로 연결되고 `taskId`는 이를 식별합니다. Claude Code가 [서브에이전트의 격리된 worktree를 유지](/docs/ko/worktrees#isolate-subagents-with-worktrees)한 경우, `completed` 변형의 `worktreePath`는 이를 찾을 수 있는 위치이고, `worktreeBranch`는 Claude Code가 git으로 worktree를 생성했을 때의 브랜치입니다.2880서브에이전트의 결과를 반환합니다. 출력은 `status` 필드에서 구분됩니다: 완료된 작업의 경우 `"completed"`, 백그라운드 작업의 경우 `"async_launched"`, Claude Code가 클라우드 세션으로 전달한 작업의 경우 `"remote_launched"`. `sessionUrl`은 해당 세션으로 연결되고 `taskId`는 이를 식별합니다. Claude Code가 [서브에이전트의 격리된 worktree를 유지](/docs/ko/worktrees#isolate-subagents-with-worktrees)한 경우, `completed` 변형의 `worktreePath`는 이를 찾을 수 있는 위치이고, `worktreeBranch`는 Claude Code가 git으로 worktree를 생성했을 때의 브랜치입니다.

2879 2881 

2880`completed` 변형에서 `resolvedModel`은 서브에이전트가 시작한 모델을 이름 지으며, 이는 [`availableModels`](/docs/ko/model-config#restrict-model-selection) 또는 다른 오버라이드가 적용될 때 요청된 `model` 입력과 다를 수 있습니다. 이 필드는 Claude Code v2.1.174 이상이 필요합니다. `async_launched` 변형에서 `resolvedModel`은 에이전트가 백그라운드로 이동했을 때 사용 중인 모델을 이름 지으므로, 백그라운드 전환 전에 발생한 스왑이 반영됩니다. `modelsUsed` 필드는 두 변형 모두에서 순서대로 사용된 모델을 나열하며, 연속 반복은 축소됩니다. 실행 중에 모델이 교체되었을 때만 설정됩니다. `modelsUsed`와 백그라운드 시간 `resolvedModel` 동작은 Claude Code v2.1.212 이상이 필요합니다.2882`completed` 변형에서 `resolvedModel`은 서브에이전트가 시작한 모델을 이름 지으며, 이는 [`availableModels`](/docs/ko/model-config#restrict-model-selection) 또는 다른 재정의가 적용될 때 요청된 `model` 입력과 다를 수 있습니다. 이 필드는 Claude Code v2.1.174 이상이 필요합니다. `async_launched` 변형에서 `resolvedModel`은 에이전트가 백그라운드로 이동했을 때 사용 중인 모델을 이름 지으므로, 백그라운드 전환 전에 발생한 스왑이 반영됩니다. `modelsUsed` 필드는 두 변형 모두에서 순서대로 사용된 모델을 나열하며, 연속 반복은 축소됩니다. 실행 중에 모델이 교체되었을 때만 설정됩니다. `modelsUsed`와 백그라운드 시간 `resolvedModel` 동작은 Claude Code v2.1.212 이상이 필요합니다.

2881 2883 

2882Claude Code는 전체 실행이 아닌 서브에이전트의 최종 API 요청에서 `usage`와 `totalTokens`를 채웁니다. 존재할 때, `usage`의 `output_tokens_details` 아래 `thinking_tokens`은 해당 요청의 출력 토큰 중 사고 토큰의 수입니다. `output_tokens_details` 키는 Claude Code v2.1.228을 번들로 하는 Python SDK v0.2.136 이상이 필요합니다. `fallback_credit` 키는 Claude Code v2.1.285를 번들로 하는 Python SDK v0.2.162 이상이 필요합니다.2884Claude Code는 전체 실행이 아닌 서브에이전트의 최종 API 요청에서 `usage`와 `totalTokens`를 채웁니다. 존재할 때, `usage`의 `output_tokens_details` 아래 `thinking_tokens`은 해당 요청의 출력 토큰 중 사고 토큰의 수입니다. `output_tokens_details` 키는 Claude Code v2.1.228을 번들로 하는 Python SDK v0.2.136 이상이 필요합니다. `fallback_credit` 키는 Claude Code v2.1.285를 번들로 하는 Python SDK v0.2.162 이상이 필요합니다.

2883 2885 


2935 # 다중 선택 답변은 쉼표로 구분됨2937 # 다중 선택 답변은 쉼표로 구분됨

2936 "response": str | None,2938 "response": str | None,

2937 # 질문에 답하는 대신 입력한 자유 형식 답변; 설정되면,2939 # 질문에 답하는 대신 입력한 자유 형식 답변; 설정되면,

2938 # Claude는 답변 목록 대신 "사용자가 응답했습니다: ..."를 받습니다2940 # Claude는 답변 목록 대신 "The user responded: ..."를 받습니다

2939 "annotations": dict[str, dict] | None, # 사용자의 선택에서 질문별 "preview"와 "notes"2941 "annotations": dict[str, dict] | None, # 사용자의 선택에서 질문별 "preview"와 "notes"

2940 "afkTimeoutMs": int | None, # 사용자 비활성 후 이 많은 밀리초 후 대화가 자동 해결되었을 때 설정됨; 사용자가 답변했을 때는 없음2942 "afkTimeoutMs": int | None, # 사용자 비활성 후 이 많은 밀리초 후 대화가 자동 해결되었을 때 설정됨; 사용자가 답변했을 때는 없음

2941}2943}


2947 2949 

2948**도구 이름:** `Bash`2950**도구 이름:** `Bash`

2949 2951 

2950전경 상한선을 설정하는 것에 대해서는 [시간 초과 및 출력 제한](/docs/ko/tools-reference#timeout-and-output-limits)을 참조하십시오. 백그라운드 시간 제한에 대해서는 [백그라운드 명령의 시간 제한](/docs/ko/tools-reference#time-limit-for-background-commands)을 참조하십시오.2952전경 상한선을 설정하는 것에 대해서는 [타임아웃 및 출력 제한](/docs/ko/tools-reference#timeout-and-output-limits)을 참조하십시오. 백그라운드 시간 제한에 대해서는 [백그라운드 명령의 시간 제한](/docs/ko/tools-reference#time-limit-for-background-commands)을 참조하십시오.

2951 2953 

2952**입력:**2954**입력:**

2953 2955 


2989 "command": str | None, # 셸 스크립트; 각 stdout 줄은 이벤트이고, 종료는 감시를 끝냅니다2991 "command": str | None, # 셸 스크립트; 각 stdout 줄은 이벤트이고, 종료는 감시를 끝냅니다

2990 "ws": dict | None, # WebSocket 소스: {"url": str, "protocols": list[str] | None}; 각 텍스트 프레임은 이벤트입니다2992 "ws": dict | None, # WebSocket 소스: {"url": str, "protocols": list[str] | None}; 각 텍스트 프레임은 이벤트입니다

2991 "description": str, # 알림에 표시되는 짧은 설명2993 "description": str, # 알림에 표시되는 짧은 설명

2992 "timeout_ms": int | None, # 이 기한 후 종료 (기본값 300000, 최대 3600000; 유효한 기한은 최대 1800000)2994 "timeout_ms": int | None, # 밀리초 단위의 기한 (기본값 300000, 최대 3600000; 유효한 기한은 최대 1800000)

2993}2995}

2994```2996```

2995 2997 


3028 "oldString": str, # 바뀐 텍스트3030 "oldString": str, # 바뀐 텍스트

3029 "newString": str, # 이를 대체한 텍스트3031 "newString": str, # 이를 대체한 텍스트

3030 "originalFile": str | None, # 편집 전 파일 내용3032 "originalFile": str | None, # 편집 전 파일 내용

3031 "structuredPatch": [ # 변경에 대한 Diff 청크3033 "structuredPatch": [ # 변경에 대한 diff 청크

3032 {3034 {

3033 "oldStart": int,3035 "oldStart": int,

3034 "oldLines": int,3036 "oldLines": int,


3152 "file": {3154 "file": {

3153 "filePath": str,3155 "filePath": str,

3154 },3156 },

3155 "source": "seeded" | None, # 이전 복사본이 시작 시 로드된 CLAUDE.md 또는 메모리 파일에서 나온 경우 표시됨3157 "source": "seeded" | None, # 이전 복사본이 Read 호출이 아닌 시작 시 로드된 CLAUDE.md 또는 메모리 파일에서 나온 경우 표시됨

3156}3158}

3157```3159```

3158 3160 


3178 "type": "create" | "update", # 쓰기가 새 파일을 생성했는지 또는 기존 파일을 덮어썼는지 여부3180 "type": "create" | "update", # 쓰기가 새 파일을 생성했는지 또는 기존 파일을 덮어썼는지 여부

3179 "filePath": str, # 쓴 파일3181 "filePath": str, # 쓴 파일

3180 "content": str, # 쓴 콘텐츠3182 "content": str, # 쓴 콘텐츠

3181 "structuredPatch": [ # Diff 청크; 새 파일, 아무것도 변경되지 않음, 또는 Claude Code가 diff를 건너뛴 경우 비어 있음3183 "structuredPatch": [ # diff 청크; 새 파일, 아무것도 변경되지 않음, 또는 Claude Code가 diff를 건너뛴 경우 비어 있음

3182 {3184 {

3183 "oldStart": int,3185 "oldStart": int,

3184 "oldLines": int,3186 "oldLines": int,


3327{3329{

3328 "url": str, # 콘텐츠를 가져올 URL3330 "url": str, # 콘텐츠를 가져올 URL

3329 "prompt": str, # 가져온 콘텐츠에서 실행할 프롬프트3331 "prompt": str, # 가져온 콘텐츠에서 실행할 프롬프트

3332 "offset": int | None, # 페이지 시작 부분에서 건너뛸 문자 수. Python Agent SDK 0.2.164 이상 필요

3330}3333}

3331```3334```

3332 3335 


3546 TaskOutput3549 TaskOutput

3547</h3>3550</h3>

3548 3551 

3549Claude Code v2.1.277에서 제거됨. 이전에는 실행 중이거나 완료된 백그라운드 작업의 출력을 검색했으며, `BashOutput`은 별칭으로 허용되었습니다. Claude는 `Read`를 사용하여 백그라운드 작업의 출력 파일을 읽습니다.3552Claude Code v2.1.277에서 제거되었습니다. 이전에는 실행 중이거나 완료된 백그라운드 작업의 출력을 검색했으며, `BashOutput`은 별칭으로 허용되었습니다. 이제 Claude는 `Read`를 사용하여 백그라운드 작업의 출력 파일을 읽습니다.

3550 3553 

3551`disallowed_tools` 항목 또는 두 이름 중 하나를 여전히 지정하는 거부 규칙은 경고 없이 무시됩니다.3554`disallowed_tools` 항목 또는 두 이름 중 하나를 여전히 지정하는 거부 규칙은 경고 없이 무시됩니다.

3552 3555 

Details

323 서브에이전트 호출 감지323 서브에이전트 호출 감지

324</h2>324</h2>

325 325 

326Claude는 Agent 도구를 통해 서브에이전트를 호출합니다. 서브에이전트가 호출되는 시점을 감지하려면 `name`이 `"Agent"`인 `tool_use` 블록을 확인하면 됩니다. 서브에이전트의 컨텍스트 내에서 생성된 메시지에는 `parent_tool_use_id` 필드가 포함됩니다.326Claude는 Agent 도구를 통해 서브에이전트를 호출합니다. 서브에이전트가 호출되는 시점을 감지하려면 `name`이 `"Agent"`인 `tool_use` 블록을 확인하면 됩니다.

327 

328서브에이전트의 컨텍스트 내에서 생성된 메시지에는 `parent_tool_use_id` 필드가 포함됩니다. TypeScript에서는 서브에이전트가 생성하는 각 assistant 및 user 메시지에 [`agent_id`](/docs/ko/agent-sdk/typescript#sdkassistantmessage)도 포함되며, 이는 해당 서브에이전트의 [task 이벤트](/docs/ko/agent-sdk/typescript#sdktaskstartedmessage)의 `task_id`입니다. `agent_id`를 사용하려면 TypeScript Agent SDK v0.3.292 이상이 필요합니다.

327 329 

328<Note>330<Note>

329 이 도구는 `tool_use` 블록에서는 `"Agent"`로 표시되지만 `system:init` 도구 목록에서는 `"Task"`로 표시됩니다. Claude Code v2.1.63 이전에는 `tool_use` 블록도 이를 `"Task"`로 명명했습니다. SDK 버전 간에 감지가 작동하도록 유지하려면 `block.name`에서 두 값을 모두 일치시키십시오.331 이 도구는 `tool_use` 블록에서는 `"Agent"`로 표시되지만 `system:init` 도구 목록에서는 `"Task"`로 표시됩니다. Claude Code v2.1.63 이전에는 `tool_use` 블록도 이를 `"Task"`로 명명했습니다. SDK 버전 간에 감지가 작동하도록 유지하려면 `block.name`에서 두 값을 모두 일치시키십시오.


331 333 

332메시지 구조는 SDK마다 다릅니다. Python에서는 `message.content`를 통해 콘텐츠 블록에 직접 액세스합니다. TypeScript에서는 `SDKAssistantMessage`가 Claude API 메시지를 래핑하므로 `message.message.content`를 통해 콘텐츠에 액세스합니다.334메시지 구조는 SDK마다 다릅니다. Python에서는 `message.content`를 통해 콘텐츠 블록에 직접 액세스합니다. TypeScript에서는 `SDKAssistantMessage`가 Claude API 메시지를 래핑하므로 `message.message.content`를 통해 콘텐츠에 액세스합니다.

333 335 

334이 예제는 스트리밍된 메시지를 반복하며 서브에이전트가 호출될 때와 후속 메시지가 해당 서브에이전트의 실행 컨텍스트 내에서 생성될 때를 기록합니다.336이 예제는 스트리밍된 메시지를 반복하며 서브에이전트가 호출될 때와 후속 메시지가 해당 서브에이전트의 실행 컨텍스트 내에서 생성될 때를 기록합니다. TypeScript 버전은 `agent_id`가 포함된 각 서브에이전트 메시지의 `agent_id`도 기록합니다.

335 337 

336<CodeGroup>338<CodeGroup>

337 ```python Python theme={null}339 ```python Python theme={null}


403 // Check if this message is from within a subagent's context405 // Check if this message is from within a subagent's context

404 if (msg.parent_tool_use_id) {406 if (msg.parent_tool_use_id) {

405 console.log(" (running inside subagent)");407 console.log(" (running inside subagent)");

408 // On assistant and user messages, agent_id matches the task_id

409 // on that subagent's task_started and other task events

410 if (msg.agent_id) {

411 console.log(` agent_id: ${msg.agent_id}`);

412 }

406 }413 }

407 414 

408 if ("result" in message) {415 if ("result" in message) {

Details

569| `includePartialMessages` | `boolean` | `false` | 부분 메시지 이벤트를 포함합니다 |569| `includePartialMessages` | `boolean` | `false` | 부분 메시지 이벤트를 포함합니다 |

570| `loadTimeoutMs` | `number` | `60000` | *알파.* 재개 구체화 중 각 `sessionStore.load()` 및 `sessionStore.listSubkeys()` 호출에 대한 타임아웃(밀리초)입니다. 어댑터가 이 시간 내에 완료되지 않으면 쿼리가 멈춰 있는 대신 실패합니다. `sessionStore`가 설정되지 않은 경우 무시됩니다 |570| `loadTimeoutMs` | `number` | `60000` | *알파.* 재개 구체화 중 각 `sessionStore.load()` 및 `sessionStore.listSubkeys()` 호출에 대한 타임아웃(밀리초)입니다. 어댑터가 이 시간 내에 완료되지 않으면 쿼리가 멈춰 있는 대신 실패합니다. `sessionStore`가 설정되지 않은 경우 무시됩니다 |

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

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

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

574| `maxTurns` | `number` | `undefined` | 최대 에이전트 턴 수(도구 사용 왕복)입니다 |574| `maxTurns` | `number` | `undefined` | 최대 에이전트 턴 수(도구 사용 왕복)입니다 |

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


631```631```

632 632 

633* `API_TIMEOUT_MS`: Anthropic 클라이언트의 요청별 타임아웃(밀리초)입니다. 기본값은 `600000`입니다. 메인 루프와 모든 서브에이전트에 적용됩니다.633* `API_TIMEOUT_MS`: Anthropic 클라이언트의 요청별 타임아웃(밀리초)입니다. 기본값은 `600000`입니다. 메인 루프와 모든 서브에이전트에 적용됩니다.

634* `CLAUDE_CODE_MAX_RETRIES`: 최대 API 재시도 횟수입니다. 기본값은 `10`이며 상한은 `15`입니다. 각 재시도마다 별도의 `API_TIMEOUT_MS` 시간이 주어지므로, 최악의 경우 총 소요 시간은 대략 `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)`에 백오프 시간을 더한 값입니다. 더 긴 장애를 기다려야 하는 무인 실행에는 [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/ko/errors#tune-retry-behavior)을 설정하세요. 이 설정은 일시적인 용량 오류를 무기한 재시도하며, Claude Code v2.1.199 이상에서는 다른 일시적 오류의 기본값을 `300`으로 높이고 이 변수의 상한을 제거합니다.634* `CLAUDE_CODE_MAX_RETRIES`: 최대 API 재시도 횟수입니다. 기본값은 `10`이며 상한은 `15`입니다. 각 재시도는 자체 `API_TIMEOUT_MS` 시간 범위를 가집니다.

635 

636 더 긴 장애를 기다려야 하는 무인 실행의 경우 [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/ko/errors#tune-retry-behavior)을 설정하세요. 이 설정은 일시적인 용량 오류를 무기한 재시도하며, Claude Code v2.1.199 이상에서는 다른 일시적 오류에 대한 기본값을 `300`으로 올리고 이 변수의 상한을 제거합니다.

635* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: 서브에이전트용 멈춤 감시기입니다. 스트림 감시기가 켜져 있는 동안 기본값은 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`에 5분을 더한 값이며, 해당 변수를 높이지 않는 한 `600000`이 됩니다. 스트림 감시기가 꺼져 있으면 기본값은 `600000`입니다. v2.1.257 이전에는 기본값이 항상 `600000`이었습니다.637* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: 서브에이전트용 멈춤 감시기입니다. 스트림 감시기가 켜져 있는 동안 기본값은 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`에 5분을 더한 값이며, 해당 변수를 높이지 않는 한 `600000`이 됩니다. 스트림 감시기가 꺼져 있으면 기본값은 `600000`입니다. v2.1.257 이전에는 기본값이 항상 `600000`이었습니다.

636 638 

637 타이머는 스트림 이벤트마다 재설정됩니다. 멈춤이 발생하면 Claude Code는 서브에이전트를 중단하고 상위 에이전트에 멈춤을 보고합니다. 백그라운드 서브에이전트의 경우 작업을 실패로 표시하고 부분 결과가 있으면 함께 첨부합니다.639 타이머는 스트림 이벤트마다 재설정됩니다. 멈춤이 발생하면 Claude Code는 서브에이전트를 중단하고 상위 에이전트에 멈춤을 보고합니다. 백그라운드 서브에이전트의 경우 작업을 실패로 표시하고 부분 결과가 있으면 함께 첨부합니다.


1561 parent_tool_use_id: string | null;1563 parent_tool_use_id: string | null;

1562 error?: SDKAssistantMessageError;1564 error?: SDKAssistantMessageError;

1563 aborted?: true;1565 aborted?: true;

1566 agent_id?: string;

1564 timestamp?: string;1567 timestamp?: string;

1565 context_usage?: SDKContextUsage;1568 context_usage?: SDKContextUsage;

1566 user_message_uuid?: string;1569 user_message_uuid?: string;


1580 1583 

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

1582 1585 

1586`agent_id`는 메시지를 생성한 서브에이전트를 식별하며, 메인 스레드 메시지에는 없습니다. 이 값은 해당 서브에이전트의 [`task_started`](#sdktaskstartedmessage) 및 기타 작업 이벤트의 `task_id`와 같으며, 서브에이전트가 [재개](/docs/ko/agent-sdk/subagents#resume-subagents)되어도 변경되지 않습니다. 이 필드에는 Agent SDK v0.3.292 이상이 필요합니다.

1587 

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

1589 

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

1584 1591 

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


1597 type: "user";1604 type: "user";

1598 uuid?: UUID;1605 uuid?: UUID;

1599 session_id?: string;1606 session_id?: string;

1607 agent_id?: string;

1600 message: MessageParam; // From Anthropic SDK1608 message: MessageParam; // From Anthropic SDK

1601 pasted_content?: MessageParam["content"][];1609 pasted_content?: MessageParam["content"][];

1602 parent_tool_use_id: string | null;1610 parent_tool_use_id: string | null;


1636};1644};

1637```1645```

1638 1646 

1647서브에이전트가 생성하는 사용자 메시지(예: 자체 도구 호출 중 하나에 대한 `tool_result`)는 `agent_id`를 가집니다. 이 필드와 버전 요구 사항은 [`SDKAssistantMessage`](#sdkassistantmessage)에서 정의합니다.

1648 

1639`tool_result` 블록을 포함한 메시지에서 `tool_use_result`는 모델에 전송된 텍스트가 아니라 도구의 구조화된 출력 객체입니다. 그 형태는 대응하는 `tool_use` 블록이 지정한 도구에 따라 달라지므로 이 필드는 `unknown` 타입입니다. 기본 제공 형태는 [도구 출력 타입](#tool-output-types)에 나열되어 있습니다. 다음 결과는 나열된 형태 이상의 처리가 필요합니다.1649`tool_result` 블록을 포함한 메시지에서 `tool_use_result`는 모델에 전송된 텍스트가 아니라 도구의 구조화된 출력 객체입니다. 그 형태는 대응하는 `tool_use` 블록이 지정한 도구에 따라 달라지므로 이 필드는 `unknown` 타입입니다. 기본 제공 형태는 [도구 출력 타입](#tool-output-types)에 나열되어 있습니다. 다음 결과는 나열된 형태 이상의 처리가 필요합니다.

1640 1650 

1641* `Agent` 도구: `tool_use_result`는 [`AgentOutput`](#agent-2)입니다. `tool_result` 텍스트를 파싱하지 말고 이 값으로 렌더링하세요. `completed` 결과의 `content`에는 서브에이전트의 보고서가 담기며, 보고서를 `SubagentHandback` 도구 호출로 전달하는 서브에이전트의 경우에는 보고서 대신 해당 인계에 대한 짧은 메모가 담깁니다. Claude Code v2.1.271 이상의 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)에서는 [포크](/docs/ko/sub-agents#fork-the-current-conversation)가 아닌 한 `completed` 결과를 생성하는 모든 서브에이전트가 그런 방식으로 보고하며, Claude는 서브에이전트로부터 별도의 메시지로 보고서를 받습니다.1651* `Agent` 도구: `tool_use_result`는 [`AgentOutput`](#agent-2)입니다. `tool_result` 텍스트를 파싱하지 말고 이 값으로 렌더링하세요. `completed` 결과의 `content`에는 서브에이전트의 보고서가 담기며, 보고서를 `SubagentHandback` 도구 호출로 전달하는 서브에이전트의 경우에는 보고서 대신 해당 인계에 대한 짧은 메모가 담깁니다. Claude Code v2.1.271 이상의 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)에서는 [포크](/docs/ko/sub-agents#fork-the-current-conversation)가 아닌 한 `completed` 결과를 생성하는 모든 서브에이전트가 그런 방식으로 보고하며, Claude는 서브에이전트로부터 별도의 메시지로 보고서를 받습니다.


1992 `SDKPartialAssistantMessage`2002 `SDKPartialAssistantMessage`

1993</h3>2003</h3>

1994 2004 

1995스트리밍 부분 메시지입니다(`includePartialMessages`가 true일 때만). `parent_tool_use_id` 필드는 항상 `null`입니다. 스트림 이벤트는 메인 세션에 대해서만 내보내집니다. 서브에이전트 귀속에는 `parent_tool_use_id`를 가진 완전한 메시지를 사용하거나, [`forwardSubagentText`](#options)를 활성화하여 서브에이전트 텍스트와 사고를 완전한 메시지로 받으세요.2005스트리밍 부분 메시지입니다(`includePartialMessages`가 true인 경우에만).

2006 

2007`parent_tool_use_id` 필드는 항상 `null`입니다. 스트림 이벤트는 메인 세션에 대해서만 생성됩니다. 서브에이전트 귀속에는 [`agent_id`](#sdkassistantmessage)와 `parent_tool_use_id`를 가진 완전한 메시지를 사용하거나, [`forwardSubagentText`](#options)를 활성화하여 서브에이전트의 텍스트와 사고를 완전한 메시지로 받으세요.

1996 2008 

1997```typescript theme={null}2009```typescript theme={null}

1998type SDKPartialAssistantMessage = {2010type SDKPartialAssistantMessage = {


3414type WebFetchInput = {3426type WebFetchInput = {

3415 url: string;3427 url: string;

3416 prompt: string;3428 prompt: string;

3429 offset?: number;

3417};3430};

3418```3431```

3419 3432 

3420URL에서 콘텐츠를 가져오고 AI 모델로 처리합니다.3433URL에서 콘텐츠를 가져오고 AI 모델로 처리합니다.

3421 3434 

3435`offset`은 페이지 시작 부분부터 건너뛸 문자 수입니다. Claude는 긴 페이지를 계속 읽기 위해 이 값을 설정합니다. 이 필드는 Agent SDK v0.3.290 이상이 필요합니다.

3436 

3422<h3 id="websearch">3437<h3 id="websearch">

3423 WebSearch3438 WebSearch

3424</h3>3439</h3>


5773 task_type?: string;5788 task_type?: string;

5774 is_backgrounded?: boolean;5789 is_backgrounded?: boolean;

5775 spawn_depth?: number;5790 spawn_depth?: number;

5791 parent_task_id?: string;

5776 ambient?: boolean;5792 ambient?: boolean;

5777 uuid: UUID;5793 uuid: UUID;

5778 session_id: string;5794 session_id: string;


5790 5806 

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

5792 5808 

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

5810 

5811* 주 스레드가 작업을 시작한 경우

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

5813* [팀원](/docs/ko/agent-teams) 또는 워크플로 내부의 에이전트가 작업을 시작한 경우

5814 

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

5816 

5793<h3 id="sdktaskprogressmessage">5817<h3 id="sdktaskprogressmessage">

5794 `SDKTaskProgressMessage`5818 `SDKTaskProgressMessage`

5795</h3>5819</h3>


5846 `SDKBackgroundTasksChangedMessage`5870 `SDKBackgroundTasksChangedMessage`

5847</h3>5871</h3>

5848 5872 

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

5850 5874 

5851`tasks` 배열은 전체 라이브 집합입니다. `task_started` 및 `task_notification` 이벤트를 쌍으로 맞추는 대신 각 페이로드로 캐시된 집합을 교체하세요. 그러면 다음 멤버십 변경이 놓친 이벤트를 바로잡습니다.5875`tasks` 배열은 전체 라이브 집합입니다. `task_started` 및 `task_notification` 이벤트를 쌍으로 맞추는 대신 각 페이로드로 캐시된 집합을 교체하세요. 그러면 다음 멤버십 변경이 놓친 이벤트를 바로잡습니다.

5852 5876 

5853이러한 작업별 이벤트에 대한 순서는 지정되지 않으므로, 두 스트림을 상관시키지 마세요.5877작업이 종료되면 해당 작업의 [`task_updated`](#sdktaskupdatedmessage) 및 [`task_notification`](#sdktasknotificationmessage)이 목록에서 해당 작업을 제거하는 `background_tasks_changed`보다 먼저 도착합니다. 그 외에는 작업별 이벤트에 대한 순서가 지정되지 않습니다.

5854 5878 

5855시작 시 아무것도 내보내지지 않습니다. 세션의 CLI 프로세스가 시작되거나 다시 시작될 때마다 빈 집합으로 재설정하고 다음 멤버십 변경이 다시 채우도록 하세요.5879시작 시 아무것도 내보내지지 않습니다. 세션의 CLI 프로세스가 시작되거나 다시 시작될 때마다 빈 집합으로 재설정하고 다음 멤버십 변경이 다시 채우도록 하세요.

5856 5880 


5867 task_type: string;5891 task_type: string;

5868 subagent_type?: string;5892 subagent_type?: string;

5869 description: string;5893 description: string;

5894 parent_task_id?: string;

5870 ambient?: boolean;5895 ambient?: boolean;

5871 }[];5896 }[];

5872 uuid: UUID;5897 uuid: UUID;

Details

36 ```36 ```

37 37 

38 ```typescript TypeScript theme={null}38 ```typescript TypeScript theme={null}

39 async function handleToolRequest(toolName, input, options) {39 import type { CanUseTool } from "@anthropic-ai/claude-agent-sdk";

40 

41 const handleToolRequest: CanUseTool = async (toolName, input, options) => {

40 // options includes { signal: AbortSignal, suggestions?: PermissionUpdate[] }42 // options includes { signal: AbortSignal, suggestions?: PermissionUpdate[] }

41 // 사용자에게 프롬프트하고 허용 또는 거부 반환43 // 여기서 사용자에게 확인을 요청한 다음 허용 또는 거부 반환

42 }44 return { behavior: "deny", message: "User declined" };

45 };

43 46 

44 const options = { canUseTool: handleToolRequest };47 const options = { canUseTool: handleToolRequest };

45 ```48 ```


440 // 도구 목록에 AskUserQuestion 포함443 // 도구 목록에 AskUserQuestion 포함

441 tools: ["Read", "Glob", "Grep", "AskUserQuestion"],444 tools: ["Read", "Glob", "Grep", "AskUserQuestion"],

442 canUseTool: async (toolName, input) => {445 canUseTool: async (toolName, input) => {

443 // 명확화 질문을 여기서 처리446 // 모든 호출을 승인하는 플레이스홀더입니다. AskUserQuestion 감지 단계에서 이를 대체합니다.

447 return { behavior: "allow", updatedInput: input };

444 }448 }

445 }449 }

446 })) {450 })) {


763 767 

764 ```typescript TypeScript theme={null}768 ```typescript TypeScript theme={null}

765 import { query } from "@anthropic-ai/claude-agent-sdk";769 import { query } from "@anthropic-ai/claude-agent-sdk";

770 import type { PermissionResult } from "@anthropic-ai/claude-agent-sdk";

766 import * as readline from "readline/promises";771 import * as readline from "readline/promises";

767 772 

768 // 터미널에서 사용자 입력을 프롬프트하는 헬퍼773 // 터미널에서 사용자 입력을 프롬프트하는 헬퍼


783 }788 }

784 789 

785 // Claude의 질문을 표시하고 사용자 답변을 수집790 // Claude의 질문을 표시하고 사용자 답변을 수집

786 async function handleAskUserQuestion(input: any) {791 async function handleAskUserQuestion(input: any): Promise<PermissionResult> {

787 const answers: Record<string, string> = {};792 const answers: Record<string, string> = {};

788 793 

789 for (const q of input.questions) {794 for (const q of input.questions) {

agent-view.md +7 −4

Details

603 603 

604git 저장소 외부에서는 세션이 작업 디렉터리에 직접 쓰고 서로 격리되지 않으므로, 동일한 파일을 편집하는 병렬 세션을 디스패치하지 않도록 합니다. 다른 버전 관리 시스템을 사용한다면 [`WorktreeCreate` 훅](/docs/ko/worktrees#non-git-version-control)을 구성하면 Claude가 git과 동일한 방식으로 편집을 격리합니다.604git 저장소 외부에서는 세션이 작업 디렉터리에 직접 쓰고 서로 격리되지 않으므로, 동일한 파일을 편집하는 병렬 세션을 디스패치하지 않도록 합니다. 다른 버전 관리 시스템을 사용한다면 [`WorktreeCreate` 훅](/docs/ko/worktrees#non-git-version-control)을 구성하면 Claude가 git과 동일한 방식으로 편집을 격리합니다.

605 605 

606git 저장소가 아닌 디렉터리에서 훅이 실패하면 Claude는 해당 디렉터리의 격리를 건너뛰고 작업 디렉터리를 제자리에서 편집합니다. git 저장소 안에서는 Claude가 편집 전에 워크트리로 이동시키는 세션은 그 이동이 이루어질 때까지 공유 체크아웃의 파일을 편집할 수 없습니다.606git 저장소가 아닌 디렉터리에서 훅이 실패하면 Claude는 해당 디렉터리의 격리를 건너뛰고 작업 디렉터리를 제자리에서 편집합니다. git 저장소 안에서는 Claude가 편집 전에 워크트리로 이동시키는 세션은 그 이동이 이루어질 때까지 공유 체크아웃에서 `Edit`, `Write`, `NotebookEdit` 도구를 사용할 수 없습니다.

607 607 

608세션의 워크트리 경로를 찾으려면 세션에 연결하여 작업 디렉터리를 확인합니다.608세션의 워크트리 경로를 찾으려면 세션에 연결하여 작업 디렉터리를 확인합니다.

609 609 


979 세션을 열면 저장된 트랜스크립트가 없다고 표시됨979 세션을 열면 저장된 트랜스크립트가 없다고 표시됨

980</h3>980</h3>

981 981 

982[다른 대화에서 백그라운드로 이동된](#from-inside-a-session) 중지된 세션이 첫 번째 응답이 완료되기 전에 중지된 경우 다시 시작할 것이 없습니다: 첫 번째 응답이 완료될 때까지 대화는 여전히 백그라운드로 이동된 세션에만 존재합니다. `claude attach`는 `This session has no saved transcript`로 열기를 거부합니다.982[다른 대화에서 백그라운드로 이동한](#from-inside-a-session) 세션이 자체 턴을 실행하기 전에 중지된 경우, 해당 세션을 열면 Claude Code는 그 대화를 다시 시작합니다. Claude Code가 대화를 찾을 수 없으면 세션 열기를 거부합니다:

983 983 

984에이전트 뷰에서 해당 행을 열면 목록 아래에 `Press enter again to restart this session fresh`가 표시됩니다. 같은 행에서 `Enter`를 다시 누르면 빈 대화로 세션을 다시 시작하거나, 셸에서 `claude respawn <id>`를 실행합니다.984* `claude attach`는 `This session has no saved transcript`를 출력합니다.

985* 에이전트 뷰는 목록 아래에 `Press enter again to restart this session fresh`를 표시합니다.

985 986 

986원래 대화는 그대로 유지됩니다; `claude --resume`으로 다시 시작하거나 계속 작업합니다. 자세한 내용은 [오류 참조](/docs/ko/errors#this-session-has-no-saved-transcript)를 참조합니다.987같은 행에서 `Enter`를 다시 눌러 빈 대화로 세션을 다시 시작하거나, 셸에서 `claude respawn <id>`를 실행합니다.

988 

989자세한 내용은 [오류 참조](/docs/ko/errors#this-session-has-no-saved-transcript)를 참조합니다.

987 990 

988<h3 id="the-terminal-host-died-or-the-session-stopped-responding">991<h3 id="the-terminal-host-died-or-the-session-stopped-responding">

989 터미널 호스트가 죽었거나 세션이 응답하지 않음992 터미널 호스트가 죽었거나 세션이 응답하지 않음

Details

1237 1237 

1238CLI는 메트릭, 로그, 그리고 활성화된 경우 트레이스를 게이트웨이로 전송하며, 게이트웨이는 이를 구성된 각 대상으로 그대로 중계합니다. 내보내기는 HTTP 기반 OpenTelemetry Protocol(OTLP)을 사용합니다. 중계를 건너뛰고 세션이 수집기로 직접 내보내도록 하려면 [정책에서 수집기를 지정](#export-directly-to-your-collector)합니다. CLI가 내보내는 메트릭과 이벤트는 [사용량 모니터링](/docs/ko/monitoring-usage)을 참조하세요.1238CLI는 메트릭, 로그, 그리고 활성화된 경우 트레이스를 게이트웨이로 전송하며, 게이트웨이는 이를 구성된 각 대상으로 그대로 중계합니다. 내보내기는 HTTP 기반 OpenTelemetry Protocol(OTLP)을 사용합니다. 중계를 건너뛰고 세션이 수집기로 직접 내보내도록 하려면 [정책에서 수집기를 지정](#export-directly-to-your-collector)합니다. CLI가 내보내는 메트릭과 이벤트는 [사용량 모니터링](/docs/ko/monitoring-usage)을 참조하세요.

1239 1239 

1240`/login`으로 로그인한 세션에서 CLI는 게이트웨이가 발급한 JWT에서 읽은 인증된 사용자의 ID, 즉 `user.id`, `user.email` 및 `user.groups` 속성을 각 내보내기에 기록합니다. 따라서 개발자별 비용 및 사용량 귀속은 개발자 측 구성 없이 작동합니다.1240`/login`으로 로그인한 세션에서 CLI는 게이트웨이가 발급한 JWT에서 읽은 인증된 사용자의 ID, 즉 `user.id`, `user.email` 및 `user.groups` 속성을 각 내보내기에 기록합니다. 따라서 개발자별 비용 및 사용량 귀속은 개발자 측 구성 없이 작동합니다. 개발자가 로그인하기 전에 Claude Code가 기록하는 이벤트에는 [이 ID가 포함되지 않습니다](/docs/ko/monitoring-usage#standard-attributes).

1241 1241 

1242게이트웨이를 통해 로그인한 [Claude Desktop](#claude-desktop-overlay) 및 Cowork 세션은 `enduser.id`와 함께 `user.email` 및 `user.groups`를 텔레메트리에 기록하므로, `user.email` 또는 `user.groups`에 대한 하나의 쿼리로 터미널, Desktop 및 Cowork 사용량을 모두 다룰 수 있습니다. `user.groups`는 쉼표로 구분된 IdP 그룹 목록입니다.1242게이트웨이를 통해 로그인한 [Claude Desktop](#claude-desktop-overlay) 및 Cowork 세션은 `enduser.id`와 함께 `user.email` 및 `user.groups`를 텔레메트리에 기록하므로, `user.email` 또는 `user.groups`에 대한 하나의 쿼리로 터미널, Desktop 및 Cowork 사용량을 모두 다룰 수 있습니다. `user.groups`는 쉼표로 구분된 IdP 그룹 목록입니다.

1243 1243 

Details

516 텔레메트리516 텔레메트리

517</h2>517</h2>

518 518 

519게이트웨이는 머신별 OTEL 구성 없이 개발자별 사용 현황 메트릭을 제공합니다. Claude Code는 OpenTelemetry (OTLP) 메트릭, 로그 및 옵트인 추적을 내보냅니다. [모니터링 사용](/docs/ko/monitoring-usage)에서는 CLI가 보고하는 모든 내용을 다룹니다. `/login`을 통해 로그인한 세션에서 CLI는 각 내보내기에 인증된 IdP 신원 속성 `user.id`, `user.email` 및 `user.groups`을 스탬프하므로 사용 현황이 개발자별로 집계됩니다.519게이트웨이는 머신별 OTEL 구성 없이 개발자별 사용 현황 메트릭을 제공합니다. Claude Code는 OpenTelemetry (OTLP) 메트릭, 로그 및 옵트인 추적을 내보냅니다. [모니터링 사용](/docs/ko/monitoring-usage)에서는 CLI가 보고하는 모든 내용을 다룹니다. `/login`을 통해 로그인한 세션에서 CLI는 인증된 IdP 신원 속성 `user.id`, `user.email` 및 `user.groups`을 [각 내보내기에 스탬프](/docs/ko/monitoring-usage#standard-attributes)하므로 사용 현황이 개발자별로 집계됩니다.

520 520 

521게이트웨이 자체는 인증된 OTLP 릴레이입니다. [`telemetry.forward_to`](/docs/ko/claude-apps-gateway-config#telemetry)를 `listen.public_url`과 함께 설정하면 OTEL 내보내기 설정을 모든 연결된 클라이언트에 푸시하고 OTLP 트래픽을 나열한 각 대상으로 그대로 전달합니다. 각 대상은 메트릭, 로그 및 추적에 독립적으로 옵트인하며 기본값은 메트릭만입니다. 신호별 필드 및 민감도 트레이드오프에 대해서는 [`telemetry` 참조](/docs/ko/claude-apps-gateway-config#telemetry)를 참조하세요. 게이트웨이는 텔레메트리를 버퍼링, 집계 또는 저장하지 않으므로 데이터가 도착하는 위치는 전적으로 수집기의 내보내기 구성에 따릅니다.521게이트웨이 자체는 인증된 OTLP 릴레이입니다. [`telemetry.forward_to`](/docs/ko/claude-apps-gateway-config#telemetry)를 `listen.public_url`과 함께 설정하면 OTEL 내보내기 설정을 모든 연결된 클라이언트에 푸시하고 OTLP 트래픽을 나열한 각 대상으로 그대로 전달합니다. 각 대상은 메트릭, 로그 및 추적에 독립적으로 옵트인하며 기본값은 메트릭만입니다. 신호별 필드 및 민감도 트레이드오프에 대해서는 [`telemetry` 참조](/docs/ko/claude-apps-gateway-config#telemetry)를 참조하세요. 게이트웨이는 텔레메트리를 버퍼링, 집계 또는 저장하지 않으므로 데이터가 도착하는 위치는 전적으로 수집기의 내보내기 구성에 따릅니다.

522 522 

Details

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

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

491* **로컬 세션 및 에이전트 뷰**: 터미널, IDE 또는 데스크톱 앱의 로컬 환경에서 직접 시작한 세션은 프로젝트에 추가할 수 없습니다. [에이전트 뷰](/docs/ko/agent-view)는 여러 로컬 세션을 나란히 추적하기 위한 화면이며, 사용자가 각 세션을 직접 시작하고 작업을 할당합니다.491* **로컬 세션 및 에이전트 뷰**: 터미널, IDE 또는 데스크톱 앱의 로컬 환경에서 직접 시작한 세션은 프로젝트에 추가할 수 없습니다. [에이전트 뷰](/docs/ko/agent-view)는 여러 로컬 세션을 나란히 추적하기 위한 화면이며, 사용자가 각 세션을 직접 시작하고 작업을 할당합니다.

492* **Worktrees**: [worktree](/docs/ko/worktrees)는 각 로컬 세션에 리포지토리의 자체 작업 복사본을 제공하므로 머신의 병렬 세션이 서로 덮어쓰지 않습니다. 클라우드 스레드는 이를 필요로 하지 않습니다: 각 스레드는 리포지토리를 자체 클라우드 샌드박스에 복제하고 자체 브랜치에서 작동합니다.492* **Worktrees**: [worktree](/docs/ko/worktrees)는 각 로컬 세션에 저장소의 자체 작업 복사본을 제공합니다. 클라우드 스레드는 이를 필요로 하지 않습니다: 각 스레드는 저장소를 자체 클라우드 샌드박스에 복제하고 자체 브랜치에서 작동합니다.

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

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

495* **claude.ai 채팅 및 Cowork의 프로젝트**: 스레드나 조정자 없이 대화 및 참조 파일을 그룹화하는 [이전 프로젝트 경험](https://support.claude.com/en/articles/9517075-what-are-projects)입니다. 이러한 프로젝트는 재설계된 경험이 도달할 때까지 현재대로 계속 작동합니다.495* **claude.ai 채팅 및 Cowork의 프로젝트**: 스레드나 조정자 없이 대화 및 참조 파일을 그룹화하는 [이전 프로젝트 경험](https://support.claude.com/en/articles/9517075-what-are-projects)입니다. 이러한 프로젝트는 재설계된 경험이 도달할 때까지 현재대로 계속 작동합니다.

Details

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

107| `--json-schema` | 에이전트가 워크플로우를 완료한 후 JSON 스키마와 일치하는 검증된 JSON 출력을 가져옵니다(인쇄 모드만 해당). [구조화된 출력](/docs/ko/agent-sdk/structured-outputs)을 참조하세요. Claude Code는 잘못된 스키마에서 오류로 종료되고 클라이언트 측 검증 없이 주석으로 `format` 키워드를 허용합니다 | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |107| `--json-schema` | 에이전트가 워크플로우를 완료한 후 JSON 스키마와 일치하는 검증된 JSON 출력을 가져옵니다(인쇄 모드만 해당). [구조화된 출력](/docs/ko/agent-sdk/structured-outputs)을 참조하세요. Claude Code는 잘못된 스키마에서 오류로 종료되고 클라이언트 측 검증 없이 주석으로 `format` 키워드를 허용합니다 | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |

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

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

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

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

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

Details

307| | 클라우드 세션에서 사용 가능 | 이유 |307| | 클라우드 세션에서 사용 가능 | 이유 |

308| :- | :- | :- |308| :- | :- | :- |

309| 저장소의 `CLAUDE.md` | 예 | 복제본의 일부 |309| 저장소의 `CLAUDE.md` | 예 | 복제본의 일부 |

310| 저장소의 `.claude/settings.json` 훅 및 권한 규칙 | 예, 하나의 저장소가 있는 세션에서 | 복제본의 일부입니다. 여러 저장소가 있는 세션([프로젝트](/docs/ko/claude-projects#what-threads-pick-up-from-your-repositories) 스레드 포함)은 복제본 위에서 시작되며 이를 읽지 않습니다 |310| 저장소의 `.claude/settings.json` 훅 및 권한 규칙 | 예, 하나의 저장소가 있는 세션에서 | 복제본의 일부입니다. 여러 저장소가 있는 세션의 경우 [읽는 설정](/docs/ko/settings#settings-in-cloud-sessions)을 참조하세요 |

311| 저장소의 `.mcp.json` MCP 서버 | 예, 하나의 저장소가 있는 세션에서 | 복제본의 일부이며 세션의 작업 디렉터리에서 찾습니다 |311| 저장소의 `.mcp.json` MCP 서버 | 예, 하나의 저장소가 있는 세션에서 | 복제본의 일부이며 세션의 작업 디렉터리에서 찾습니다. 자체 호스팅 환경의 경우 [적용되는 저장소의 설정](/docs/ko/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories)을 참조하세요 |

312| 저장소의 `.claude/rules/` | 예 | 복제본의 일부 |312| 저장소의 `.claude/rules/` | 예 | 복제본의 일부 |

313| 저장소의 `.claude/skills/`, `.claude/agents/`, `.claude/commands/` | 예 | 복제본의 일부 |313| 저장소의 `.claude/skills/`, `.claude/agents/`, `.claude/commands/` | 예 | 복제본의 일부 |

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


575 575 

576SessionStart hook은 다음 주의사항을 제외하고 클라우드에서 로컬과 동일하게 작동합니다.576SessionStart hook은 다음 주의사항을 제외하고 클라우드에서 로컬과 동일하게 작동합니다.

577 577 

578* **세션당 하나의 리포지토리**: 여러 리포지토리가 있는 세션은 리포지토리의 `.claude/settings.json`에서 hook을 로드하지 않으므로 정의한 SessionStart hook이 실행되지 않습니다. 이러한 세션의 종속성을 [설정 스크립트](#setup-scripts)로 설치합니다.578* **세션당 하나의 저장소**: Anthropic 호스팅 환경에서 여러 저장소가 있는 세션은 어떤 저장소의 `.claude/settings.json`에서도 훅을 로드하지 않으므로 그곳에 정의한 SessionStart 훅이 실행되지 않습니다. 이러한 세션의 의존성은 대신 [설정 스크립트](#setup-scripts)로 설치합니다. 자체 호스팅 환경의 경우 [어떤 저장소의 설정이 적용되는지](/docs/ko/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories)를 참조합니다.

579* **클라우드 전용 범위 없음**: hook은 로컬 및 클라우드 세션 모두에서 실행됩니다. 로컬 실행을 건너뛰려면 `CLAUDE_CODE_REMOTE` 환경 변수가 `true`가 아닌 한 조기에 종료합니다. [종속성 설치 스크립트](#install-dependencies-with-a-sessionstart-hook)가 수행하는 방식입니다.579* **클라우드 전용 범위 없음**: hook은 로컬 및 클라우드 세션 모두에서 실행됩니다. 로컬 실행을 건너뛰려면 `CLAUDE_CODE_REMOTE` 환경 변수가 `true`가 아닌 한 조기에 종료합니다. [종속성 설치 스크립트](#install-dependencies-with-a-sessionstart-hook)가 수행하는 방식입니다.

580* **네트워크 액세스 필요**: 설치 명령은 패키지 레지스트리에 도달해야 합니다. 환경이 **없음** 네트워크 액세스를 사용하면 이러한 hook이 실패합니다. **신뢰됨** 아래의 [기본 허용 목록](#default-allowed-domains)은 npm, PyPI, RubyGems 및 crates.io를 포함합니다.580* **네트워크 액세스 필요**: 설치 명령은 패키지 레지스트리에 도달해야 합니다. 환경이 **없음** 네트워크 액세스를 사용하면 이러한 hook이 실패합니다. **신뢰됨** 아래의 [기본 허용 목록](#default-allowed-domains)은 npm, PyPI, RubyGems 및 crates.io를 포함합니다.

581* **프록시 호환성**: Anthropic 호스팅 환경에서 모든 아웃바운드 트래픽은 [보안 프록시](#security-proxy)를 통과하고, 일부 패키지 관리자는 이와 올바르게 작동하지 않습니다. Bun은 알려진 예입니다. [자체 호스팅 환경](/docs/ko/self-hosted-environments-deploy#default-deny-egress)에서 아웃바운드 트래픽은 대신 자신의 네트워크 경계를 통과합니다.581* **프록시 호환성**: Anthropic 호스팅 환경에서 모든 아웃바운드 트래픽은 [보안 프록시](#security-proxy)를 통과하고, 일부 패키지 관리자는 이와 올바르게 작동하지 않습니다. Bun은 알려진 예입니다. [자체 호스팅 환경](/docs/ko/self-hosted-environments-deploy#default-deny-egress)에서 아웃바운드 트래픽은 대신 자신의 네트워크 경계를 통과합니다.

desktop.md +1 −1

Details

396 세션으로 병렬 작업하기396 세션으로 병렬 작업하기

397</h3>397</h3>

398 398 

399사이드바에서 **+ New session**을 클릭하거나 macOS에서 **Cmd+N**을 누르거나 Windows에서 **Ctrl+N**을 눌러 여러 작업을 병렬로 작업합니다. **Ctrl+Tab** 및 **Ctrl+Shift+Tab**을 눌러 사이드바의 세션을 순환합니다. Git 저장소의 경우 브랜치 이름 옆의 **worktree** 옵션을 선택하여 세션이 [Git worktrees](/docs/ko/worktrees)를 사용하여 프로젝트의 자신의 격리된 복사본을 가지도록 하므로 한 세션의 변경 사항이 커밋할 때까지 다른 세션에 영향을 주지 않습니다.399사이드바에서 **+ New session**을 클릭하거나 macOS에서 **Cmd+N**을 누르거나 Windows에서 **Ctrl+N**을 눌러 여러 작업을 병렬로 작업합니다. **Ctrl+Tab** 및 **Ctrl+Shift+Tab**을 눌러 사이드바의 세션을 순환합니다. Git 저장소의 경우 브랜치 이름 옆의 **worktree** 옵션을 선택하면 [Git worktrees](/docs/ko/worktrees)를 사용하여 세션이 프로젝트의 자체 격리된 복사본을 가지게 됩니다.

400 400 

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

402 402 

env-vars.md +2 −2

Details

204| `CLAUDE_AFK_TIMEOUT_MS` | 응답하지 않은 [`AskUserQuestion`](/docs/ko/tools-reference) 대화 상자가 사용자 없이 자동으로 계속되기까지의 유휴 시간(밀리초)입니다. 자동 계속은 기본적으로 꺼져 있으며, [`askUserQuestionTimeout`](/docs/ko/settings-reference#askuserquestiontimeout) 설정으로 사용하도록 선택할 수 있습니다. 이 변수는 데모와 자동화된 테스트를 위한 재정의 값으로, 설정하면 해당 설정보다 우선하며 설정이 지정되지 않았거나 `never`인 경우에도 자동 계속을 켭니다. `0`으로 설정해도 타임아웃이 꺼지지 않으며, 대화 상자가 즉시 닫힙니다. [프로젝트 및 로컬 설정](/docs/ko/settings-reference#variables-claude-code-ignores-in-env)에서는 무시됩니다. v2.1.200 이전에는 자동 계속이 기본적으로 켜져 있었으며 타임아웃은 `60000`(60초)이었습니다. Claude Code v2.1.198 이상이 필요합니다 |204| `CLAUDE_AFK_TIMEOUT_MS` | 응답하지 않은 [`AskUserQuestion`](/docs/ko/tools-reference) 대화 상자가 사용자 없이 자동으로 계속되기까지의 유휴 시간(밀리초)입니다. 자동 계속은 기본적으로 꺼져 있으며, [`askUserQuestionTimeout`](/docs/ko/settings-reference#askuserquestiontimeout) 설정으로 사용하도록 선택할 수 있습니다. 이 변수는 데모와 자동화된 테스트를 위한 재정의 값으로, 설정하면 해당 설정보다 우선하며 설정이 지정되지 않았거나 `never`인 경우에도 자동 계속을 켭니다. `0`으로 설정해도 타임아웃이 꺼지지 않으며, 대화 상자가 즉시 닫힙니다. [프로젝트 및 로컬 설정](/docs/ko/settings-reference#variables-claude-code-ignores-in-env)에서는 무시됩니다. v2.1.200 이전에는 자동 계속이 기본적으로 켜져 있었으며 타임아웃은 `60000`(60초)이었습니다. Claude Code v2.1.198 이상이 필요합니다 |

205| `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` | `1`로 설정하면 Explore, Plan 같은 모든 기본 제공 [서브에이전트](/docs/ko/sub-agents) 유형을 비활성화합니다. 비대화형 모드(`-p` 플래그)에서만 적용됩니다. 빈 상태에서 시작하려는 SDK 사용자에게 유용합니다. 이렇게 하면 Agent 도구 호출에서 `subagent_type`을 생략했을 때 Claude Code가 실행하는 서브에이전트인 `general-purpose`도 제거됩니다. 그러면 이러한 호출은 [`subagent_type is required`](/docs/ko/errors#subagent-type-is-required)로 실패합니다 |205| `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` | `1`로 설정하면 Explore, Plan 같은 모든 기본 제공 [서브에이전트](/docs/ko/sub-agents) 유형을 비활성화합니다. 비대화형 모드(`-p` 플래그)에서만 적용됩니다. 빈 상태에서 시작하려는 SDK 사용자에게 유용합니다. 이렇게 하면 Agent 도구 호출에서 `subagent_type`을 생략했을 때 Claude Code가 실행하는 서브에이전트인 `general-purpose`도 제거됩니다. 그러면 이러한 호출은 [`subagent_type is required`](/docs/ko/errors#subagent-type-is-required)로 실패합니다 |

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

207| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | 서브에이전트의 정체 타임아웃(밀리초)입니다. 기본값은 `600000`(10분)이며, 스트림 워치독이 켜져 있는 동안 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`를 늘리면 [느리거나 정체된 API 응답 처리](/docs/ko/agent-sdk/typescript#handle-slow-or-stalled-api-responses)에 설명된 대로 기본값도 함께 늘어납니다. 타이머는 스트리밍 진행 이벤트마다 재설정되며, 해당 시간 내에 진행이 없으면 Claude Code는 서브에이전트를 중단하고 상위 에이전트에 정체를 보고합니다 |207| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | 서브에이전트의 정체 타임아웃(밀리초)입니다. Claude Code v2.1.286 이상에서는 [워크플로 에이전트](/docs/ko/workflows#when-an-agent-stalls-and-restarts)에도 적용됩니다. 기본값은 `600000`(10분)입니다. 스트림 워치독이 켜져 있는 상태에서 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`를 높이면, [느리거나 정체된 API 응답 처리](/docs/ko/agent-sdk/typescript#handle-slow-or-stalled-api-responses)에 설명된 대로 기본값도 함께 높아집니다 |

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

209| `CLAUDE_AUTO_BACKGROUND_TASKS` | `1`로 설정하면 오래 실행되는 에이전트 작업의 자동 백그라운드 전환을 강제로 활성화합니다. 활성화하면 서브에이전트는 약 2분간 실행된 후 백그라운드로 이동합니다. Claude Code v2.1.212 이상에서는 비대화형 모드에서 [긴 MCP 도구 호출의 자동 백그라운드 전환](/docs/ko/mcp#automatic-backgrounding-of-long-tool-calls)도 활성화합니다 |209| `CLAUDE_AUTO_BACKGROUND_TASKS` | `1`로 설정하면 오래 실행되는 에이전트 작업의 자동 백그라운드 전환을 강제로 활성화합니다. 활성화하면 서브에이전트는 약 2분간 실행된 후 백그라운드로 이동합니다. Claude Code v2.1.212 이상에서는 비대화형 모드에서 [긴 MCP 도구 호출의 자동 백그라운드 전환](/docs/ko/mcp#automatic-backgrounding-of-long-tool-calls)도 활성화합니다 |

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


378| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | 턴 도중 종료된 세션이 재개 시 자동으로 계속되기 위한 마지막 트랜스크립트 메시지의 최대 경과 시간(밀리초)입니다. 마지막 메시지가 이 기준보다 오래된 경우 Claude Code는 `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` 자동 재개와 `CLAUDE_CODE_RESUME_PROMPT` 계속 메시지를 건너뛰고, 세션이 유휴 상태로 시작되므로 사용자가 명시적으로 계속해야 합니다. 설정하지 않거나 `0`이면 제한이 없습니다. 단, 마지막 요청이 API 오류로 실패한 턴은 해당 오류가 발생한 지 6시간이 지나지 않은 경우에만 재개됩니다. 양수 값은 이러한 턴을 포함해 모든 턴을 제한하며, 음수 또는 숫자가 아닌 값은 1시간 제한을 적용합니다. 장기 실행 에이전트의 생성 스크립트에서 이 값을 설정하면 오래된 트랜스크립트로 다시 시작할 때 오래된 프롬프트가 다시 실행되지 않습니다. Claude Code는 대화형 세션에서 대화를 상속한 [에이전트 뷰](/docs/ko/agent-view) 세션이 충돌 후 다시 시작될 때 자체적으로 1시간 제한을 설정합니다. Claude Code v2.1.211 이상이 필요합니다 |378| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | 턴 도중 종료된 세션이 재개 시 자동으로 계속되기 위한 마지막 트랜스크립트 메시지의 최대 경과 시간(밀리초)입니다. 마지막 메시지가 이 기준보다 오래된 경우 Claude Code는 `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` 자동 재개와 `CLAUDE_CODE_RESUME_PROMPT` 계속 메시지를 건너뛰고, 세션이 유휴 상태로 시작되므로 사용자가 명시적으로 계속해야 합니다. 설정하지 않거나 `0`이면 제한이 없습니다. 단, 마지막 요청이 API 오류로 실패한 턴은 해당 오류가 발생한 지 6시간이 지나지 않은 경우에만 재개됩니다. 양수 값은 이러한 턴을 포함해 모든 턴을 제한하며, 음수 또는 숫자가 아닌 값은 1시간 제한을 적용합니다. 장기 실행 에이전트의 생성 스크립트에서 이 값을 설정하면 오래된 트랜스크립트로 다시 시작할 때 오래된 프롬프트가 다시 실행되지 않습니다. Claude Code는 대화형 세션에서 대화를 상속한 [에이전트 뷰](/docs/ko/agent-view) 세션이 충돌 후 다시 시작될 때 자체적으로 1시간 제한을 설정합니다. Claude Code v2.1.211 이상이 필요합니다 |

379| `CLAUDE_CODE_RESUME_PROMPT` | `CLAUDE_CODE_RESUME_INTERRUPTED_TURN`이 프롬프트를 다시 보내는 대신 중단된 턴을 계속할 때, 또는 `-p`로 [지연된 도구 호출](/docs/ko/hooks#defer-a-tool-call-for-later)을 재개할 때 Claude Code가 Claude에게 보내는 계속 메시지를 재정의합니다. 기본값은 `Continue from where you left off.`입니다. 빈 문자열은 기본값을 사용합니다 |379| `CLAUDE_CODE_RESUME_PROMPT` | `CLAUDE_CODE_RESUME_INTERRUPTED_TURN`이 프롬프트를 다시 보내는 대신 중단된 턴을 계속할 때, 또는 `-p`로 [지연된 도구 호출](/docs/ko/hooks#defer-a-tool-call-for-later)을 재개할 때 Claude Code가 Claude에게 보내는 계속 메시지를 재정의합니다. 기본값은 `Continue from where you left off.`입니다. 빈 문자열은 기본값을 사용합니다 |

380| `CLAUDE_CODE_RETRY_WATCHDOG` | eval 하네스, CI 작업 또는 원격 워커 같은 무인 세션에서는 `1`로 설정합니다. `CLAUDE_CODE_MAX_RETRIES`회 시도 후 실패하는 대신 `429` 및 `529` 용량 오류를 무기한 재시도합니다. 표준 속도 요청이 지출 한도나 소진된 사용량 크레딧을 보고하는 `429`를 받으면, 일정에 따라 재설정되는 [게이트웨이 지출 상한](/docs/ko/errors#spend-limit-reached)에서 온 것이더라도 Claude Code는 즉시 실패합니다. v2.1.239 이전에는 워치독이 이러한 오류를 무기한 재시도했습니다. 빠른 모드 요청의 경우 [속도 제한 처리](/docs/ko/fast-mode#handle-rate-limits)를 참조하세요. 워치독은 시도 사이에 최대 5분까지 백오프하며, 응답에 속도 제한 재설정 시간이 포함된 경우에는 한도가 재설정될 때까지 대기하므로 사용 한도에 도달한 세션은 남은 기간이 지날 때까지 기다립니다. v2.1.199 이상에서는 서버 오류, 타임아웃, 연결 끊김 같은 기타 일시적 오류의 기본 재시도 횟수도 약 3시간의 백오프에 해당하는 300으로 높이고, `CLAUDE_CODE_MAX_RETRIES`를 명시적으로 설정한 경우 15의 상한을 제거합니다. Claude Code v2.1.186 이상이 필요합니다 |380| `CLAUDE_CODE_RETRY_WATCHDOG` | eval 하네스, CI 작업 또는 원격 워커 같은 무인 세션에서는 `1`로 설정합니다. `CLAUDE_CODE_MAX_RETRIES`회 시도 후 실패하는 대신 `429` 및 `529` 용량 오류를 무기한 재시도합니다. 표준 속도 요청이 지출 한도나 소진된 사용량 크레딧을 보고하는 `429`를 받으면, 일정에 따라 재설정되는 [게이트웨이 지출 상한](/docs/ko/errors#spend-limit-reached)에서 온 것이더라도 Claude Code는 즉시 실패합니다. v2.1.239 이전에는 워치독이 이러한 오류를 무기한 재시도했습니다. 빠른 모드 요청의 경우 [속도 제한 처리](/docs/ko/fast-mode#handle-rate-limits)를 참조하세요. 워치독은 시도 사이에 최대 5분까지 백오프하며, 응답에 속도 제한 재설정 시간이 포함된 경우에는 한도가 재설정될 때까지 대기하므로 사용 한도에 도달한 세션은 남은 기간이 지날 때까지 기다립니다. v2.1.199 이상에서는 서버 오류, 타임아웃, 연결 끊김 같은 기타 일시적 오류의 기본 재시도 횟수도 약 3시간의 백오프에 해당하는 300으로 높이고, `CLAUDE_CODE_MAX_RETRIES`를 명시적으로 설정한 경우 15의 상한을 제거합니다. Claude Code v2.1.186 이상이 필요합니다 |

381| `CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS` | `CLAUDE_CODE_RETRY_WATCHDOG`가 설정된 경우 각 API 요청이 `429` 및 `529` 오류를 기다리며 소비하는 최대 시간(밀리초)입니다. 해당 시간이 지나면 다음 오류에서 요청이 종료됩니다. 30분을 뜻하는 `1800000`처럼 숫자로만 된 양의 정수를 입력합니다. 설정하지 않으면 대기 시간에 제한이 없습니다. Claude Code v2.1.295 이상이 필요합니다 |

381| `CLAUDE_CODE_SAFE_MODE` | `1`로 설정하면 손상된 구성의 문제 해결을 위해 안전 모드로 시작합니다. 안전 모드에서는 CLAUDE.md, 스킬, 플러그인, 훅, MCP 서버, 사용자 지정 명령과 에이전트, 출력 스타일, 워크플로, 사용자 지정 테마, 사용자 지정 키보드 단축키, 상태줄 및 파일 제안 명령, LSP 서버, 자동 메모리가 로드되지 않습니다. 정책으로 구성된 훅, 상태줄, 파일 제안 명령을 포함해 관리형 설정 정책은 계속 적용되지만, 관리형 플러그인, 관리형 스킬, 관리형 CLAUDE.md, 정책으로 구성된 MCP 서버는 적용되지 않습니다. [`--safe-mode`](/docs/ko/cli-reference#cli-flags)를 전달하는 것과 같습니다. 직접 생성된 자식 프로세스는 이 변수를 상속합니다 |382| `CLAUDE_CODE_SAFE_MODE` | `1`로 설정하면 손상된 구성의 문제 해결을 위해 안전 모드로 시작합니다. 안전 모드에서는 CLAUDE.md, 스킬, 플러그인, 훅, MCP 서버, 사용자 지정 명령과 에이전트, 출력 스타일, 워크플로, 사용자 지정 테마, 사용자 지정 키보드 단축키, 상태줄 및 파일 제안 명령, LSP 서버, 자동 메모리가 로드되지 않습니다. 정책으로 구성된 훅, 상태줄, 파일 제안 명령을 포함해 관리형 설정 정책은 계속 적용되지만, 관리형 플러그인, 관리형 스킬, 관리형 CLAUDE.md, 정책으로 구성된 MCP 서버는 적용되지 않습니다. [`--safe-mode`](/docs/ko/cli-reference#cli-flags)를 전달하는 것과 같습니다. 직접 생성된 자식 프로세스는 이 변수를 상속합니다 |

382| `CLAUDE_CODE_SCRIPT_CAPS` | `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`이 설정된 경우 세션당 특정 스크립트를 호출할 수 있는 횟수를 제한하는 JSON 객체입니다. 키는 명령 텍스트와 비교되는 부분 문자열이고, 값은 정수 호출 제한입니다. 예를 들어 `{"deploy.sh": 2}`는 `deploy.sh`를 최대 두 번까지 호출할 수 있게 합니다. 부분 문자열 기반으로 일치하므로 `./scripts/deploy.sh $(evil)` 같은 셸 확장 기법도 상한에 포함됩니다. `xargs`나 `find -exec`를 통한 런타임 팬아웃은 감지되지 않습니다. 이는 심층 방어 제어입니다 |383| `CLAUDE_CODE_SCRIPT_CAPS` | `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`이 설정된 경우 세션당 특정 스크립트를 호출할 수 있는 횟수를 제한하는 JSON 객체입니다. 키는 명령 텍스트와 비교되는 부분 문자열이고, 값은 정수 호출 제한입니다. 예를 들어 `{"deploy.sh": 2}`는 `deploy.sh`를 최대 두 번까지 호출할 수 있게 합니다. 부분 문자열 기반으로 일치하므로 `./scripts/deploy.sh $(evil)` 같은 셸 확장 기법도 상한에 포함됩니다. `xargs`나 `find -exec`를 통한 런타임 팬아웃은 감지되지 않습니다. 이는 심층 방어 제어입니다 |

383| `CLAUDE_CODE_SCROLL_SPEED` | [전체 화면 렌더링](/docs/ko/fullscreen#mouse-wheel-scrolling)에서 마우스 휠 스크롤 배율을 설정합니다. 최대 20까지의 모든 양수 값을 허용하며, 이미 휠 이벤트를 증폭하는 터미널에서 가속된 트랙패드 및 휠 스크롤을 늦추기 위한 `0.5` 같은 1 미만의 소수 값도 허용합니다. 터미널이 증폭 없이 노치당 하나의 휠 이벤트를 보내는 경우 `vim`과 맞추려면 `3`으로 설정합니다. Claude Code가 자체 스크롤 처리를 사용하는 JetBrains IDE 터미널에서는 무시됩니다 |384| `CLAUDE_CODE_SCROLL_SPEED` | [전체 화면 렌더링](/docs/ko/fullscreen#mouse-wheel-scrolling)에서 마우스 휠 스크롤 배율을 설정합니다. 최대 20까지의 모든 양수 값을 허용하며, 이미 휠 이벤트를 증폭하는 터미널에서 가속된 트랙패드 및 휠 스크롤을 늦추기 위한 `0.5` 같은 1 미만의 소수 값도 허용합니다. 터미널이 증폭 없이 노치당 하나의 휠 이벤트를 보내는 경우 `vim`과 맞추려면 `3`으로 설정합니다. Claude Code가 자체 스크롤 처리를 사용하는 JetBrains IDE 터미널에서는 무시됩니다 |


590* [advisor 도구](/docs/ko/advisor#requirements) 사용591* [advisor 도구](/docs/ko/advisor#requirements) 사용

591* [아티팩트의 댓글](/docs/ko/artifacts#collect-comments-on-an-artifact) 읽기 또는 답글 달기592* [아티팩트의 댓글](/docs/ko/artifacts#collect-comments-on-an-artifact) 읽기 또는 답글 달기

592* Claude가 [다른 조직의 공개 아티팩트](/docs/ko/artifacts#read-an-artifact-shared-with-you)를 읽도록 하기593* Claude가 [다른 조직의 공개 아티팩트](/docs/ko/artifacts#read-an-artifact-shared-with-you)를 읽도록 하기

593* `MCP_PROTOCOL_NEGOTIATION=auto`를 설정하지 않은 경우, Claude Code가 claude.ai 커넥터 서버에 대해 [MCP 프로토콜 개정판 2026-07-28](/docs/ko/mcp#mcp-client-runtimes) 지원 여부를 확인하도록 하기

594* Git Bash가 설치된 Windows에서 claude.ai 및 Console 계정에 기본적으로 [PowerShell 도구](/docs/ko/tools-reference#powershell-tool) 제공받기. `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`을 설정하지 않으면 Claude Code는 셸 명령을 Git Bash를 통해 실행합니다. Git Bash가 없는 Windows에서는 이 도구가 계속 켜져 있습니다594* Git Bash가 설치된 Windows에서 claude.ai 및 Console 계정에 기본적으로 [PowerShell 도구](/docs/ko/tools-reference#powershell-tool) 제공받기. `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`을 설정하지 않으면 Claude Code는 셸 명령을 Git Bash를 통해 실행합니다. Git Bash가 없는 Windows에서는 이 도구가 계속 켜져 있습니다

595* [Claude가 초안을 작성한 피드백](/docs/ko/tools-reference#sendfeedback-tool-behavior) 받기. 이 기능은 Claude Code가 가져온 플래그를 통해 켭니다595* [Claude가 초안을 작성한 피드백](/docs/ko/tools-reference#sendfeedback-tool-behavior) 받기. 이 기능은 Claude Code가 가져온 플래그를 통해 켭니다

596* Claude가 [큰 붙여넣기를 입력한 텍스트가 아닌 붙여넣은 텍스트로 취급](/docs/ko/terminal-config#how-claude-treats-pasted-text)하도록 하기. `[Pasted text #N]` 플레이스홀더 뒤의 내용은 표시 없이 Claude에 전달됩니다596* Claude가 [큰 붙여넣기를 입력한 텍스트가 아닌 붙여넣은 텍스트로 취급](/docs/ko/terminal-config#how-claude-treats-pasted-text)하도록 하기. `[Pasted text #N]` 플레이스홀더 뒤의 내용은 표시 없이 Claude에 전달됩니다

errors.md +3 −4

Details

386* Claude가 사고를 마친 후 텍스트나 도구 호출을 시작하기 전에 발생한 서버 오류 또는 과부하 응답. 이 시점의 서버 오류는 최대 2회까지 재시도합니다. v2.1.284 이전에는 이 시점에서 Claude Code가 오류와 함께 턴을 종료했습니다.386* Claude가 사고를 마친 후 텍스트나 도구 호출을 시작하기 전에 발생한 서버 오류 또는 과부하 응답. 이 시점의 서버 오류는 최대 2회까지 재시도합니다. v2.1.284 이전에는 이 시점에서 Claude Code가 오류와 함께 턴을 종료했습니다.

387* 끊어진 연결. Claude가 사고를 포함하여 응답의 어떤 부분도 완료하기 전에 요청 도중 연결이 끊어지면, 일부 텍스트가 이미 스트리밍되기 시작했더라도 Claude Code는 동일한 백오프로 요청을 다시 보내고 턴이 계속됩니다. Claude가 사고를 마친 후 텍스트나 도구 호출을 시작하기 전에 연결이 끊어지면, Claude Code는 대신 요청을 빠르게 연달아 최대 2회 다시 보내며, 이 시점에서 연결이 계속 끊어지면 `Connection lost before a response was produced`와 함께 턴을 종료합니다.387* 끊어진 연결. Claude가 사고를 포함하여 응답의 어떤 부분도 완료하기 전에 요청 도중 연결이 끊어지면, 일부 텍스트가 이미 스트리밍되기 시작했더라도 Claude Code는 동일한 백오프로 요청을 다시 보내고 턴이 계속됩니다. Claude가 사고를 마친 후 텍스트나 도구 호출을 시작하기 전에 연결이 끊어지면, Claude Code는 대신 요청을 빠르게 연달아 최대 2회 다시 보내며, 이 시점에서 연결이 계속 끊어지면 `Connection lost before a response was produced`와 함께 턴을 종료합니다.

388* 요청 도중 컴퓨터가 절전 모드로 전환되어 연결이 끊어졌다고 Claude Code가 감지한 경우. Claude Code는 이를 위 규칙에 따른 끊어진 연결로 간주합니다. 재시도 레이블에 구체적인 이유가 표시되면 `Connection lost while your computer was asleep`로 표시되며, Claude가 사고를 마친 후 텍스트나 도구 호출 전에 턴이 종료되면 메시지는 `Your computer went to sleep before a response was produced`로 표시됩니다.388* 요청 도중 컴퓨터가 절전 모드로 전환되어 연결이 끊어졌다고 Claude Code가 감지한 경우. Claude Code는 이를 위 규칙에 따른 끊어진 연결로 간주합니다. 재시도 레이블에 구체적인 이유가 표시되면 `Connection lost while your computer was asleep`로 표시되며, Claude가 사고를 마친 후 텍스트나 도구 호출 전에 턴이 종료되면 메시지는 `Your computer went to sleep before a response was produced`로 표시됩니다.

389* 응답 헤더는 도착했지만 Claude의 응답이 전혀 도착하지 않았거나, Claude가 사고를 마쳤지만 텍스트나 도구 호출을 시작하지 않은 상태에서 멈춘 응답 스트림: Claude Code는 멈춘 연결을 중단하고 위의 10회 재시도 예산과 별도로 요청을 최대 1회 다시 보냅니다. Claude가 사고를 마친 후 텍스트나 도구 호출 전에 응답이 두 번째로 멈추면, Claude Code는 `The response stalled before a response was produced`와 함께 턴을 종료합니다.389* 응답 헤더는 도착했지만 Claude의 응답이 전혀 도착하지 않았거나, Claude가 사고를 마쳤지만 텍스트나 도구 호출을 시작하지 않은 상태에서 멈춘 응답 스트림: Claude Code는 멈춘 연결을 중단하고 요청을 최대 1회 다시 스트리밍합니다. Claude가 사고를 마친 후 텍스트나 도구 호출 전에 응답이 두 번째로 멈추면, Claude Code는 `The response stalled before a response was produced`와 함께 턴을 종료합니다.

390* [첫 바이트 기한이 적용되는](/docs/ko/network-config#streaming-idle-watchdogs) 연결에서 API가 응답 헤더로 전혀 응답하지 않는 스트리밍 요청: Claude Code는 기한에 도달하면 요청을 중단하고 재시도 예산 내에서 모델 요청당 최대 1회 다시 보내며, 그 시도에도 응답이 없으면 [No response from API](#no-response-from-api)와 함께 턴을 종료합니다. 다른 연결에서는 요청이 `API_TIMEOUT_MS`만큼 기다립니다. `CLAUDE_CODE_RETRY_WATCHDOG`을 설정하면 1회 재시도 상한이 적용되지 않습니다.390* [첫 바이트 기한이 적용되는](/docs/ko/network-config#streaming-idle-watchdogs) 연결에서 API가 응답 헤더로 전혀 응답하지 않는 스트리밍 요청: Claude Code는 기한에 도달하면 요청을 중단하고 재시도 예산 내에서 모델 요청당 최대 1회 다시 보내며, 그 시도에도 응답이 없으면 [No response from API](#no-response-from-api)와 함께 턴을 종료합니다. 다른 연결에서는 요청이 `API_TIMEOUT_MS`만큼 기다립니다. `CLAUDE_CODE_RETRY_WATCHDOG`을 설정하면 1회 재시도 상한이 적용되지 않습니다.

391* Claude가 사고를 마치거나 텍스트 또는 도구 호출을 시작하기 전에 API의 출력 콘텐츠 필터가 중단시킨 스트리밍 응답. Claude Code는 재시도 예산 내에서 요청을 1회 다시 보내며, 필터가 두 번째 응답도 중단시키면 [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy)를 표시합니다.391* Claude가 사고를 마치거나 텍스트 또는 도구 호출을 시작하기 전에 API의 출력 콘텐츠 필터가 중단시킨 스트리밍 응답. Claude Code는 재시도 예산 내에서 요청을 1회 다시 보내며, 필터가 두 번째 응답도 중단시키면 [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy)를 표시합니다.

392* 일시적인 429 스로틀. 단, 게이트웨이의 지출 한도 `429`는 스로틀이 아니므로 제외됩니다. [Spend limit reached](#spend-limit-reached)를 참조하세요.392* 일시적인 429 스로틀. 단, 게이트웨이의 지출 한도 `429`는 스로틀이 아니므로 제외됩니다. [Spend limit reached](#spend-limit-reached)를 참조하세요.


4064 Marketplace is already added from a different source4064 Marketplace is already added from a different source

4065</h3>4065</h3>

4066 4066 

4067[`/plugin install <plugin> --marketplace <source>`](/docs/ko/plugins/install#add-a-marketplace-and-install-in-one-command)를 통해 마켓플레이스 추가를 확인했으며 해당 소스에서 Claude Code가 가져온 카탈로그가 이미 다른 소스에서 추가한 마켓플레이스와 동일한 이름으로 지정합니다. Claude Code는 기존 마켓플레이스를 유지하고 이를 대체하지 않으므로 플러그인이 설치되지 않습니다.4067세션 또는 셸에서 [설치 명령의 `--marketplace <source>`](/docs/ko/plugins/install#add-a-marketplace-and-install-in-one-command)로 새 마켓플레이스 소스를 지정했습니다. Claude Code가 해당 소스에서 가져온 카탈로그의 이름이 이미 다른 소스에서 추가한 마켓플레이스의 이름과 같습니다. Claude Code는 기존 마켓플레이스를 대체하지 않고 유지하며, 플러그인은 설치되지 않습니다.

4068 4068 

4069```text theme={null}4069```text theme={null}

4070Marketplace "acme-tools" is already added from a different source (github:acme/plugins). To use this source instead, remove that marketplace first with /plugin marketplace remove acme-tools.4070Marketplace "acme-tools" is already added from a different source (github:acme/plugins). To use this source instead, remove that marketplace first with /plugin marketplace remove acme-tools.


4817 이 세션에는 저장된 트랜스크립트가 없습니다4817 이 세션에는 저장된 트랜스크립트가 없습니다

4818</h3>4818</h3>

4819 4819 

4820`←` 또는 `/background`로 다른 대화에서 백그라운드로 처리되고 첫 번째 응답이 완료되기 전에 중지된 [백그라운드 세션](/docs/ko/agent-view)에 연결했습니다. 첫 번째 응답이 완료될 때까지 대화는 백그라운드로 처리된 세션에만 존재하므로 `claude attach`는 같은 세션 ID로 빈 대화를 시작하는 대신 중지된 세션을 시작하기를 거부합니다. 메시지는 이 세션에 대한 `claude respawn` 명령으로 끝납니다:4820`←` 또는 `/background`로 [백그라운드로 이동한](/docs/ko/agent-view#from-inside-a-session) 세션이 자체 턴을 실행하기 전에 중지되었으며, 해당 세션에 연결했습니다. Claude Code가 세션을 이동해 온 원래 대화를 찾을 수 없으므로 세션에는 재개할 내용이 없습니다. 메시지는 이 세션에 대한 `claude respawn` 명령으로 끝납니다:

4821 4821 

4822```text theme={null}4822```text theme={null}

4823This session has no saved transcript — it was stopped before its first response finished. If it was backgrounded from another conversation, that one is still intact; `claude respawn <id>` starts this one fresh.4823This session has no saved transcript — it was stopped before its first response finished. If it was backgrounded from another conversation, that one is still intact; `claude respawn <id>` starts this one fresh.


4827 4827 

4828**할 일:**4828**할 일:**

4829 4829 

4830* 백그라운드로 처리한 대화는 그대로 유지됩니다: [`claude --resume`](/docs/ko/sessions)으로 재개하거나 계속 작업합니다.

4831* 중지된 세션을 새로 시작하려면 메시지의 ID로 `claude respawn <id>`를 실행하거나 에이전트 뷰의 행에서 `Enter`를 두 번 누릅니다.4830* 중지된 세션을 새로 시작하려면 메시지의 ID로 `claude respawn <id>`를 실행하거나 에이전트 뷰의 행에서 `Enter`를 두 번 누릅니다.

4832* 세션이 응답을 완료했는데도 v2.1.214 이전 버전에서 이 거부가 표시되면 `~/.claude/projects`의 읽을 수 없는 폴더로 인해 트랜스크립트 스캔이 저장된 대화를 놓칠 수 있습니다. v2.1.214 이상으로 업데이트하면 스캔 중에 읽을 수 없는 폴더를 허용합니다.4831* 세션이 응답을 완료했는데도 v2.1.214 이전 버전에서 이 거부가 표시되면 `~/.claude/projects`의 읽을 수 없는 폴더로 인해 트랜스크립트 스캔이 저장된 대화를 놓칠 수 있습니다. v2.1.214 이상으로 업데이트하면 스캔 중에 읽을 수 없는 폴더를 허용합니다.

4833 4832 

glossary.md +1 −1

Details

511 Worktree isolation511 Worktree isolation

512</h3>512</h3>

513 513 

514`.claude/worktrees/` 아래의 별도 git worktree에서 Claude를 실행하는 격리 모드이며, `-w` 플래그 또는 서브에이전트 구성의 `isolation: worktree`로 활성화됩니다. 변경 사항은 별도 디렉토리의 별도 분기에 남아 있으므로 병렬 에이전트가 서로의 파일을 덮어쓰지 않습니다.514`.claude/worktrees/` 아래의 별도 git worktree에서 Claude를 실행하는 격리 모드이며, `-w` 플래그 또는 서브에이전트 구성의 `isolation: worktree`로 활성화됩니다. 변경 사항은 별도 디렉토리의 별도 브랜치에 남아 있으므로 병렬 에이전트는 각자 자신의 파일 사본을 편집합니다.

515 515 

516자세히 알아보기: [git worktrees로 병렬 세션 실행](/docs/ko/worktrees)516자세히 알아보기: [git worktrees로 병렬 세션 실행](/docs/ko/worktrees)

517 517 

goal.md +1 −1

Details

127claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"127claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"

128```128```

129 129 

130기본 텍스트 출력을 사용하면 실행이 끝날 때까지 아무것도 출력되지 않으므로 많은 턴을 실행하는 목표는 멈춘 것처럼 보일 수 있습니다. 루프가 실행되는 동안 각 메시지를 내보내려면 `--output-format stream-json --verbose`를 추가합니다.130기본 텍스트 출력을 사용하면 루프가 끝날 때 Claude의 최종 응답이 출력되므로 많은 턴을 실행하는 목표는 멈춘 것처럼 보일 수 있습니다. 루프가 실행되는 동안 각 메시지를 내보내려면 `--output-format stream-json --verbose`를 추가합니다.

131 131 

132Ctrl+C로 프로세스를 중단하여 조건이 충족되기 전에 비대화형 목표를 중지합니다.132Ctrl+C로 프로세스를 중단하여 조건이 충족되기 전에 비대화형 목표를 중지합니다.

133 133 

headless.md +15 −13

Details

35Claude Code는 성공 시 코드 0으로 종료되고 실행이 실패하면 0이 아닌 코드로 종료되므로 스크립트는 종료 상태에 따라 분기할 수 있습니다. 잘못된 플래그를 전달하면 Claude Code는 실행이 시작되기 전에 오류를 stderr에 보고합니다. 실행 중에 인증 누락과 같은 오류가 발생하면 Claude Code는 오류를 stdout의 결과로 출력합니다.35Claude Code는 성공 시 코드 0으로 종료되고 실행이 실패하면 0이 아닌 코드로 종료되므로 스크립트는 종료 상태에 따라 분기할 수 있습니다. 잘못된 플래그를 전달하면 Claude Code는 실행이 시작되기 전에 오류를 stderr에 보고합니다. 실행 중에 인증 누락과 같은 오류가 발생하면 Claude Code는 오류를 stdout의 결과로 출력합니다.

36 36 

37<h3 id="start-faster-with-bare-mode">37<h3 id="start-faster-with-bare-mode">

38 베어 모드로 더 빠르게 시작하기38 bare 모드로 더 빠르게 시작하기

39</h3>39</h3>

40 40 

41`--bare`를 추가하여 hooks, skills, 사용자 정의 명령, [서브에이전트](/docs/ko/sub-agents), 설치된 플러그인, MCP 서버, 자동 메모리 및 CLAUDE.md의 자동 검색을 건너뛰어 시작 시간을 단축합니다. 이를 사용하지 않으면 `claude -p`는 대화형 세션과 동일한 [컨텍스트](/docs/ko/how-claude-code-works#the-context-window)를 로드하며, 작업 디렉토리 또는 `~/.claude`에 구성된 모든 항목을 포함합니다.41`--bare`를 추가하여 훅, 스킬, 사용자 정의 명령, [서브에이전트](/docs/ko/sub-agents), 설치된 플러그인, MCP 서버, 자동 메모리 및 CLAUDE.md의 자동 검색을 건너뛰어 시작 시간을 단축합니다. 이를 사용하지 않으면 `claude -p`는 대화형 세션과 동일한 [컨텍스트](/docs/ko/how-claude-code-works#the-context-window)를 로드하며, 작업 디렉터리 또는 `~/.claude`에 구성된 모든 항목을 포함합니다.

42 42 

43베어 모드는 모든 머신에서 동일한 결과가 필요한 CI 및 스크립트에 유용합니다. 팀원의 `~/.claude`에 있는 hook이나 프로젝트의 `.mcp.json`에 있는 MCP 서버는 베어 모드가 이들을 읽지 않기 때문에 실행되지 않습니다. `--add-dir`로 지정한 디렉토리는 부분적인 예외입니다: 베어 모드는 해당 `.claude/skills/` 폴더에서 skills를 로드하지만 여전히 해당 `.claude/commands/` 및 `.claude/agents/` 폴더를 건너뜁니다. [추가 디렉토리의 Skills](/docs/ko/skills#skills-from-additional-directories)는 로드되는 항목과 로드되지 않는 항목을 다룹니다.43bare 모드는 모든 머신에서 동일한 결과가 필요한 CI 및 스크립트에 유용합니다. 팀원의 `~/.claude`에 있는 훅이나 프로젝트의 `.mcp.json`에 있는 MCP 서버는 bare 모드가 이들을 읽지 않기 때문에 실행되지 않습니다. `--add-dir`로 지정한 디렉터리는 부분적인 예외입니다: bare 모드는 해당 `.claude/skills/` 폴더에서 스킬을 로드하지만 여전히 해당 `.claude/commands/` 및 `.claude/agents/` 폴더를 건너뜁니다. [추가 디렉터리의 스킬](/docs/ko/skills#skills-from-additional-directories)은 로드되는 항목과 로드되지 않는 항목을 다룹니다.

44 44 

45`--bare` 없이 `-p` 세션은 프로젝트의 `.claude/settings.json`에서 hooks를 실행하고 해당 `.mcp.json`의 서버를 연결합니다. 이는 신뢰한 적이 없는 폴더에서도 마찬가지입니다. `-p` 세션은 워크스페이스 신뢰 대화 상자나 서버별 승인 프롬프트를 표시하지 않습니다. [폴더를 신뢰하기 전에 실행되는 항목](/docs/ko/permissions#what-runs-before-you-trust-a-folder)은 `-p` 아래의 각 종류의 저장소 콘텐츠와 이를 제외하는 방법을 다룹니다.45`--bare` 없이 `-p` 세션은 프로젝트의 `.claude/settings.json`에서 훅을 실행하고 해당 `.mcp.json`의 서버를 연결합니다. 이는 신뢰한 적이 없는 폴더에서도 마찬가지입니다. `-p` 세션은 워크스페이스 신뢰 대화 상자나 서버별 승인 프롬프트를 표시하지 않습니다. [폴더를 신뢰하기 전에 실행되는 항목](/docs/ko/permissions#what-runs-before-you-trust-a-folder)은 `-p` 아래의 각 종류의 저장소 콘텐츠와 이를 제외하는 방법을 다룹니다.

46 46 

47이 예제는 베어 모드에서 일회성 요약 작업을 실행하고 Read 도구를 사전 승인하여 권한 프롬프트 없이 호출이 완료되도록 합니다. 베어 모드는 구독 로그인을 사용하지 않기 때문에 실행하기 전에 `ANTHROPIC_API_KEY`를 설정합니다:47이 예제는 bare 모드에서 일회성 요약 작업을 실행하고 Read 도구를 사전 승인하여 권한 프롬프트 없이 호출이 완료되도록 합니다. bare 모드는 구독 로그인을 사용하지 않기 때문에 실행하기 전에 `ANTHROPIC_API_KEY`를 설정합니다:

48 48 

49```bash theme={null}49```bash theme={null}

50claude --bare -p "Summarize README.md" --allowedTools "Read"50claude --bare -p "Summarize README.md" --allowedTools "Read"

51```51```

52 52 

53베어 모드에서 Claude Code는 OAuth 자격 증명이나 시스템 키체인을 읽지 않습니다. Anthropic API의 경우 환경에서 `ANTHROPIC_API_KEY`를 설정하고, [Claude Console](https://platform.claude.com)에서 생성한 키를 사용하거나, `--settings` JSON에서 `apiKeyHelper`를 제공합니다. Amazon Bedrock, Google Cloud의 Agent Platform 및 Microsoft Foundry는 일반적인 공급자 자격 증명을 계속 읽습니다.53bare 모드에서 Claude Code는 OAuth 자격 증명이나 시스템 키체인을 읽지 않습니다. Anthropic API의 경우 환경에서 `ANTHROPIC_API_KEY`를 설정하고, [Claude Console](https://platform.claude.com)에서 생성한 키를 사용하거나, `--settings` JSON에서 `apiKeyHelper`를 제공합니다. Amazon Bedrock, Google Cloud의 Agent Platform 및 Microsoft Foundry는 일반적인 공급자 자격 증명을 계속 읽습니다.

54 54 

55베어 모드에서 Claude는 Bash, 파일 읽기 및 파일 편집 도구에 액세스할 수 있습니다. 플래그를 사용하여 필요한 컨텍스트를 전달합니다:55bare 모드에서 Claude는 Bash, 파일 읽기 및 파일 편집 도구에 액세스할 수 있습니다. 플래그를 사용하여 필요한 컨텍스트를 전달합니다:

56 56 

57| 로드할 항목 | 사용 |57| 로드할 항목 | 사용 |

58| - | - |58| - | - |


84 84 

85실행은 백그라운드 명령, 서브에이전트 및 워크플로, Monitor 감시, 대기 중인 `/loop` 웨이크업과 같은 백그라운드 작업을 기다립니다:85실행은 백그라운드 명령, 서브에이전트 및 워크플로, Monitor 감시, 대기 중인 `/loop` 웨이크업과 같은 백그라운드 작업을 기다립니다:

86 86 

87* **[백그라운드 명령](/docs/ko/tools-reference#background-commands)**: 메인 대화가 시작한 명령(예: 개발 서버 또는 감시 빌드)의 경우, 실행은 명령이 종료되거나 [시간 제한](/docs/ko/tools-reference#time-limit-for-background-commands)에 도달할 때까지 기다립니다. 그런 다음 Claude는 그 결과를 가지고 턴을 한 번 더 수행하며, 해당 턴의 결과가 실행의 마지막 결과가 되고 `text` 및 `json` 출력은 이 결과를 출력합니다. 명령이 실행되는 동안에는 10분 상한이 대기를 종료하지 않습니다.87* **[백그라운드 명령](/docs/ko/tools-reference#background-commands)**: 메인 대화가 시작한 명령(예: 개발 서버 또는 감시 빌드)의 경우, 실행은 명령이 종료되거나 [시간 제한](/docs/ko/tools-reference#time-limit-for-background-commands)에 도달할 때까지 기다립니다. 그런 다음 Claude는 그 결과를 가지고 턴을 한 번 더 수행합니다. 명령이 실행되는 동안에는 10분 상한이 대기를 종료하지 않습니다.

88* **백그라운드 [서브에이전트](/docs/ko/sub-agents) 및 워크플로**: 해당 작업의 결과가 최종 출력의 일부이므로 작업이 완료될 때까지 실행이 열린 상태로 유지됩니다.88* **백그라운드 [서브에이전트](/docs/ko/sub-agents) 및 워크플로**: 해당 작업의 결과가 최종 출력의 일부이므로 작업이 완료될 때까지 실행이 열린 상태로 유지됩니다.

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

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

91 91 

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

93 93 

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

95 

94<h3 id="stop-a-run-with-sigterm">96<h3 id="stop-a-run-with-sigterm">

95 SIGTERM으로 실행 중지97 SIGTERM으로 실행 중지

96</h3>98</h3>

97 99 

98`claude -p` 실행을 SIGTERM으로 중지하면(예: `kill` 또는 프로세스 감독자에서), Claude Code는 코드 143으로 종료됩니다. Claude Code는 진행 중인 턴을 완료하지 않은 상태로 두고 해당 턴에 대한 결과를 기록하지 않습니다. 턴을 대신 종료하려면 SIGINT를 보내거나 Agent SDK의 `interrupt()`를 호출한 후 프로세스를 중지합니다.100`claude -p` 실행을 SIGTERM으로 중지하면(예: `kill` 또는 프로세스 감독자에서), Claude Code는 코드 143으로 종료됩니다. Claude Code는 진행 중인 턴을 완료하지 않은 상태로 두고 해당 턴에 대한 결과를 기록하지 않습니다. 턴을 대신 종료하려면 SIGINT를 보내거나 Agent SDK의 `interrupt()`를 호출한 후 프로세스를 중지합니다.

99 101 

100SIGTERM에서 Claude Code는 여전히 실행 중인 모든 Bash 명령의 프로세스 트리를 종료합니다. Claude Code는 [`SessionEnd` hooks](/docs/ko/hooks#sessionend)를 실행하고 종료합니다. 종료하는 동안 Claude Code는 새로운 도구 호출을 시작하지 않고, 새로운 모델 요청을 보내지 않으며, `SessionEnd` 이외의 hook을 실행하지 않습니다. 신호가 도착했을 때 실행이 명령 중간에 있거나 권한 프롬프트에 대한 답변을 기다리고 있었다면 Claude Code는 다음과 같이 해당 단계를 처리합니다:102SIGTERM에서 Claude Code는 여전히 실행 중인 모든 Bash 명령의 프로세스 트리를 종료합니다. Claude Code는 [`SessionEnd` 훅](/docs/ko/hooks#sessionend)을 실행하고 종료합니다. 종료하는 동안 Claude Code는 새로운 도구 호출을 시작하지 않고, 새로운 모델 요청을 보내지 않으며, `SessionEnd` 이외의 훅을 실행하지 않습니다. 신호가 도착했을 때 실행이 명령 중간에 있거나 권한 프롬프트에 대한 답변을 기다리고 있었다면 Claude Code는 다음과 같이 해당 단계를 처리합니다:

101 103 

102* **명령 실행 중**: Claude Code는 명령을 세션에서 종료된 것으로 기록합니다.104* **명령 실행 중**: Claude Code는 명령을 세션에서 종료된 것으로 기록합니다.

103* **권한 프롬프트에 대한 답변 대기 중**: 프로세스에 SIGTERM을 보내면 Claude Code는 프롬프트를 답변하지 않은 상태로 둡니다. 프로그램이 Agent SDK를 통해 세션을 닫으면 SDK는 신호를 보내기 전에 Claude Code의 입력을 종료하고 Claude Code는 입력이 종료되는 즉시 프롬프트를 취소합니다.105* **권한 프롬프트에 대한 답변 대기 중**: 프로세스에 SIGTERM을 보내면 Claude Code는 프롬프트를 답변하지 않은 상태로 둡니다. 프로그램이 Agent SDK를 통해 세션을 닫으면 SDK는 신호를 보내기 전에 Claude Code의 입력을 종료하고 Claude Code는 입력이 종료되는 즉시 프롬프트를 취소합니다.


105[세션을 재개](#continue-conversations)할 때 Claude Code는 진행 중이던 턴을 그대로 두고 다음 프롬프트가 대화를 진행합니다. 재개 시 Claude Code가 진행 중이던 턴을 계속하도록 하려면 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN=1`](/docs/ko/env-vars)을 설정합니다.107[세션을 재개](#continue-conversations)할 때 Claude Code는 진행 중이던 턴을 그대로 두고 다음 프롬프트가 대화를 진행합니다. 재개 시 Claude Code가 진행 중이던 턴을 계속하도록 하려면 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN=1`](/docs/ko/env-vars)을 설정합니다.

106 108 

107<h3 id="if-the-working-directory-is-deleted">109<h3 id="if-the-working-directory-is-deleted">

108 작업 디렉토리가 삭제된 경우110 작업 디렉터리가 삭제된 경우

109</h3>111</h3>

110 112 

111`claude -p` 또는 Agent SDK 세션의 작업 디렉토리가 세션 중간에 삭제되면 세션은 계속 실행됩니다. 디렉토리가 없는 상태에서 턴이 시작되면 Claude Code는 `stream-json` 출력에서 [경고 메시지](/docs/ko/agent-sdk/typescript#sdkinformationalmessage)를 내보내고, 디렉토리가 다시 존재할 때까지 셸 명령이 실패합니다.113`claude -p` 또는 Agent SDK 세션의 작업 디렉터리가 세션 중간에 삭제되면 세션은 계속 실행됩니다. 디렉터리가 없는 상태에서 턴이 시작되면 Claude Code는 `stream-json` 출력에서 [경고 메시지](/docs/ko/agent-sdk/typescript#sdkinformationalmessage)를 내보내고, 디렉터리가 다시 존재할 때까지 셸 명령이 실패합니다.

112 114 

113<h2 id="examples">115<h2 id="examples">

114 예제116 예제


262| `type` | `"system"` | 메시지 유형 |264| `type` | `"system"` | 메시지 유형 |

263| `subtype` | `"api_retry"` | 이를 재시도 이벤트로 식별 |265| `subtype` | `"api_retry"` | 이를 재시도 이벤트로 식별 |

264| `attempt` | 정수 | 현재 시도 번호, 1부터 시작 |266| `attempt` | 정수 | 현재 시도 번호, 1부터 시작 |

265| `max_retries` | 정수 | 이 실패의 원인에 대해 허용된 총 재시도 횟수, 세션 전체 예산보다 적을 수 있음 |267| `max_retries` | 정수 | 이 실패의 원인에 대해 허용된 총 재시도 횟수 |

266| `retry_delay_ms` | 정수 | 다음 시도까지의 밀리초 |268| `retry_delay_ms` | 정수 | 다음 시도까지의 밀리초 |

267| `error_status` | 정수 또는 null | 실패한 시도의 HTTP 상태 코드, 또는 시도가 API에서 HTTP 응답을 받지 못한 경우 `null` |269| `error_status` | 정수 또는 null | 실패한 시도의 HTTP 상태 코드, 또는 시도가 API에서 HTTP 응답을 받지 못한 경우 `null` |

268| `no_response` | 객체, 선택 사항 | 실패한 시도가 [시간 내에 응답 헤더를 받지 못한](/docs/ko/errors#no-response-from-api) 경우에만 존재합니다. `waited_ms`는 해당 시도가 대기한 시간이고 `retry_wait_ms`는 재시도가 대기할 시간입니다. 이러한 이벤트에서 `max_retries`는 이 원인이 일반적으로 받는 하나의 재시도를 반영하며 세션 전체 예산이 아닙니다. Claude Code v2.1.261 이상이 필요합니다 |270| `no_response` | 객체, 선택 사항 | 실패한 시도가 [시간 내에 응답 헤더를 받지 못한](/docs/ko/errors#no-response-from-api) 경우에만 존재합니다. `waited_ms`는 해당 시도가 대기한 시간이고 `retry_wait_ms`는 재시도가 대기할 시간입니다. Claude Code v2.1.261 이상이 필요합니다 |

269| `error` | 문자열 | 오류 범주: `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `rate_limit`, `overloaded`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error`, 또는 `unknown` |271| `error` | 문자열 | 오류 범주: `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `rate_limit`, `overloaded`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error`, 또는 `unknown` |

270| `uuid` | 문자열 | 고유 이벤트 식별자 |272| `uuid` | 문자열 | 고유 이벤트 식별자 |

271| `session_id` | 문자열 | 이벤트가 속한 세션 |273| `session_id` | 문자열 | 이벤트가 속한 세션 |

hooks.md +19 −8

Details

1237 SessionStart 결정 제어1237 SessionStart 결정 제어

1238</h4>1238</h4>

1239 1239 

1240Claude Code는 [일반 텍스트로 처리하는](#exit-code-0) stdout을 Claude의 컨텍스트에 추가합니다. 모든 훅에서 사용할 수 있는 [JSON 출력 필드](#json-output) 외에도 다음 이벤트별 필드를 반환할 수 있습니다:1240SessionStart 훅은 Claude를 위한 컨텍스트 추가, 첫 사용자 메시지 제공, 세션 제목 설정, 파일 감시, 스킬 다시 로드를 할 수 있습니다. 모든 훅에서 사용할 수 있는 [JSON 출력 필드](#json-output) 외에 각 항목에 해당하는 필드를 반환합니다.

1241 1241 

1242| 필드 | 설명 |1242| 필드 | 설명 |

1243| :- | :- |1243| :- | :- |

1244| `additionalContext` | 대화 시작 시 첫 프롬프트 전에 Claude의 컨텍스트에 추가되는 문자열. 텍스트가 전달되는 방식과 넣을 내용은 [Claude를 위한 컨텍스트 추가](#add-context-for-claude)를 참조하세요 |1244| `additionalContext` | 대화 시작 시 첫 프롬프트 전에 Claude의 컨텍스트에 추가되는 문자열. 텍스트가 전달되는 방식과 넣을 내용은 [Claude를 위한 컨텍스트 추가](#add-context-for-claude)를 참조하세요 |

1245| `initialUserMessage` | 세션의 첫 사용자 메시지로 사용되는 문자열. `-p` 플래그를 사용하는 [비대화형 모드](/docs/ko/headless)에 적용되며, 프롬프트가 제공되지 않아도 첫 턴이 됩니다. 프롬프트가 제공되면 그다음 턴으로 이어집니다. 기존 턴에 첨부되는 `additionalContext`와 달리 이 필드는 턴을 생성합니다 |1245| `initialUserMessage` | `-p` 플래그를 사용하는 [비대화형 모드](/docs/ko/headless)에서 세션의 첫 사용자 메시지로 사용되는 문자열입니다. 프롬프트를 전달하지 않아도 첫 턴이 됩니다. 프롬프트를 전달하면 그 프롬프트는 다음 턴으로 이어집니다 |

1246| `sessionTitle` | 세션 제목을 설정하며 `/rename`과 동일한 효과가 있습니다. 실행 폴더, git 브랜치 또는 worktree 이름으로 세션 이름을 자동 지정하는 데 사용합니다. `source`가 `"startup"`, `"resume"` 또는 `"fork"`일 때 적용되며, `"clear"`와 `"compact"`에서는 무시됩니다 |1246| `sessionTitle` | 세션 제목을 설정하며, `/rename`과 같은 효과를 냅니다. `source`가 `"startup"`, `"resume"` 또는 `"fork"`일 때 적용됩니다 |

1247| `watchPaths` | 이 세션 동안 [FileChanged](#filechanged) 이벤트를 감시할 절대 경로 배열 |1247| `watchPaths` | 이 세션 동안 [FileChanged](#filechanged) 이벤트를 감시할 절대 경로 배열 |

1248| `reloadSkills` | 불리언. `true`이면 Claude Code는 SessionStart 훅이 완료된 후 [스킬](/docs/ko/skills) 및 명령 디렉터리를 다시 스캔하므로, 훅이 설치한 스킬을 첫 프롬프트부터 같은 세션에서 사용할 수 있습니다 |1248| `reloadSkills` | 불리언입니다. `true`이면 SessionStart 훅이 완료된 후 Claude Code가 [스킬](/docs/ko/skills) 및 명령 디렉터리를 다시 스캔합니다. [훅이 설치한 스킬 다시 로드](#reload-skills-that-a-hook-installs)를 참조하세요 |

1249 

1250이 출력은 컨텍스트를 추가하고 세션 이름을 지정합니다.

1249 1251 

1250```json theme={null}1252```json theme={null}

1251{1253{


1257}1259}

1258```1260```

1259 1261 

1260이 이벤트에서는 일반 stdout이 이미 Claude에 전달되므로, 컨텍스트만 로드하는 훅은 JSON을 만들지 않고 stdout에 바로 출력할 수 있습니다. 컨텍스트를 `sessionTitle` 같은 다른 필드와 결합해야 할 때 JSON 형식을 사용하세요.1262컨텍스트만 추가하는 훅은 JSON을 만들지 않고 출력만 해도 됩니다. Claude Code는 SessionStart 훅의 [일반 텍스트 stdout](#exit-code-0)을 Claude의 컨텍스트에 추가하기 때문입니다.

1263 

1264플러그인의 SessionStart 훅이 `initialUserMessage` 또는 `sessionTitle`을 제공한다면 세션이 시작되기 전에 플러그인을 설치하세요. SessionStart 훅이 실행된 후에 설치가 완료된 플러그인의 두 필드는 Claude Code가 무시합니다.

1265 

1266<h4 id="reload-skills-that-a-hook-installs">

1267 훅이 설치한 스킬 다시 로드

1268</h4>

1269 

1270SessionStart 훅이 설치한 스킬을 같은 세션에서 사용할 수 있게 하려면 `reloadSkills`를 반환하세요. 스킬 검색은 일반적으로 SessionStart 훅이 완료되기 전에 실행되므로, 이 필드가 없으면 훅이 `~/.claude/skills/` 또는 `.claude/skills/`에 쓴 파일이 첫 프롬프트 실행 시 누락될 수 있습니다.

1261 1271 

1262SessionStart 훅이 스킬을 설치하거나 업데이트할 때는 `reloadSkills`를 사용하세요. 스킬 검색은 일반적으로 SessionStart 훅이 완료되기 전에 실행되므로, 이 필드가 없으면 훅이 `~/.claude/skills/` 또는 `.claude/skills/`에 쓴 파일은 다음 세션에서만 나타납니다. 이 예시는 공유 스킬 저장소를 동기화하고 다시 스캔을 요청합니다:1272이 예시는 공유 스킬 저장소를 동기화하고 다시 스캔을 요청합니다.

1263 1273 

1264```bash theme={null}1274```bash theme={null}

1265#!/bin/bash1275#!/bin/bash


1270echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'1280echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'

1271```1281```

1272 1282 

1273저장소 URL은 자리 표시자이므로 자체 스킬 저장소로 바꾸세요. 자리 표시자를 그대로 두면 clone이 실패하고 stderr에 `fatal:` 메시지가 출력됩니다. 0으로 종료되는 SessionStart 훅의 stderr는 정보 제공용일 뿐이므로 `reloadSkills` 요청은 여전히 적용됩니다.1283저장소 URL은 예시용입니다. 자신의 스킬 저장소로 바꾸세요.

1274 1284 

1275<h4 id="persist-environment-variables">1285<h4 id="persist-environment-variables">

1276 환경 변수 유지1286 환경 변수 유지


1860| :- | :- | :- | :- |1870| :- | :- | :- | :- |

1861| `url` | string | `"https://example.com/api"` | 콘텐츠를 가져올 URL |1871| `url` | string | `"https://example.com/api"` | 콘텐츠를 가져올 URL |

1862| `prompt` | string | `"Extract the API endpoints"` | 가져온 콘텐츠에 대해 실행할 프롬프트 |1872| `prompt` | string | `"Extract the API endpoints"` | 가져온 콘텐츠에 대해 실행할 프롬프트 |

1873| `offset` | number | `100000` | 페이지 시작 부분부터 건너뛸 선택적 문자 수입니다. Claude는 긴 페이지를 계속 읽기 위해 이 값을 설정합니다. Claude Code v2.1.290 이상이 필요합니다 |

1863 1874 

1864<h5 id="websearch">1875<h5 id="websearch">

1865 WebSearch1876 WebSearch


4279비동기 hook은 동기 hook과 비교하여 여러 제약이 있습니다:4290비동기 hook은 동기 hook과 비교하여 여러 제약이 있습니다:

4280 4291 

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

4282* 각 실행은 별도의 백그라운드 프로세스를 생성합니다. 동일한 비동기 hook의 여러 발생에 걸쳐 중복 제거가 없습니다.4293* 각 실행은 별도의 백그라운드 프로세스를 생성합니다.

4283 4294 

4284<h2 id="security-considerations">4295<h2 id="security-considerations">

4285 보안 고려 사항4296 보안 고려 사항

mcp.md +1 −1

Details

367 367 

368v2에서 Claude Code는 또한:368v2에서 Claude Code는 또한:

369 369 

370* HTTP 및 stdio 서버에 더 새로운 개정을 지원하는지 묻고, 지원하는 서버와 함께 사용합니다. 기능 플래그를 가져오는 세션에서는 claude.ai 커넥터 서버에도 묻습니다. 다른 모든 서버에는 v1처럼 연결합니다.370* HTTP, stdio 및 claude.ai 커넥터 서버에 더 새로운 개정을 지원하는지 묻고, 지원하는 서버와 함께 사용합니다. 다른 모든 서버에는 v1처럼 연결합니다.

371* [열린 스트림](#notification-streams-on-the-v2-runtime)을 통해 더 새로운 개정의 서버에서 `list_changed` 알림을 받습니다.371* [열린 스트림](#notification-streams-on-the-v2-runtime)을 통해 더 새로운 개정의 서버에서 `list_changed` 알림을 받습니다.

372* 더 새로운 개정에 연결되는 [채널](#push-messages-with-channels) 서버를 등록하지 않습니다. 해당 개정은 채널 메시지를 전달할 수 없기 때문입니다.372* 더 새로운 개정에 연결되는 [채널](#push-messages-with-channels) 서버를 등록하지 않습니다. 해당 개정은 채널 메시지를 전달할 수 없기 때문입니다.

373* 인증 응답이 예상치 못한 발급자의 이름을 지정하는 [MCP OAuth 로그인](#authenticate-with-remote-mcp-servers)을 실패합니다.373* 인증 응답이 예상치 못한 발급자의 이름을 지정하는 [MCP OAuth 로그인](#authenticate-with-remote-mcp-servers)을 실패합니다.

Details

599 599 

600`/login`을 통해 [Claude 앱 게이트웨이](/docs/ko/claude-apps-gateway)에 로그인한 세션에서 CLI는 인증된 ID로 내보내기를 스탬프합니다: `user.id`는 IdP 주체, `user.email`은 로그인한 이메일, `user.groups`는 IdP 그룹 멤버십을 쉼표로 구분된 문자열로 전달합니다. 각 내보내기는 또한 `identity.source: gateway-oidc`를 전달합니다. 게이트웨이 ID가 마지막에 적용되므로 `OTEL_RESOURCE_ATTRIBUTES`를 통해 설정된 `user.*` 및 `identity.*` 키는 해당 세션에서 무시됩니다.600`/login`을 통해 [Claude 앱 게이트웨이](/docs/ko/claude-apps-gateway)에 로그인한 세션에서 CLI는 인증된 ID로 내보내기를 스탬프합니다: `user.id`는 IdP 주체, `user.email`은 로그인한 이메일, `user.groups`는 IdP 그룹 멤버십을 쉼표로 구분된 문자열로 전달합니다. 각 내보내기는 또한 `identity.source: gateway-oidc`를 전달합니다. 게이트웨이 ID가 마지막에 적용되므로 `OTEL_RESOURCE_ATTRIBUTES`를 통해 설정된 `user.*` 및 `identity.*` 키는 해당 세션에서 무시됩니다.

601 601 

602<Note>

603 개발자가 로그인하기 전에 Claude Code가 로그에 기록하는 이벤트에는 게이트웨이 ID가 포함되지 않습니다. 예를 들어 [게이트웨이가 로그인을 종료한](/docs/ko/errors#cloud-gateway-session-expired) 후처럼 Claude Code가 게이트웨이에서 로그아웃된 상태로 세션을 열면, 로그인 전에 기록된 시작 이벤트에는 익명 `user.id`가 포함되고 `identity.source`는 포함되지 않습니다. 여기에는 [`managed_settings_resolved`](#managed-settings-resolved-event), [`plugin_loaded`](#plugin-loaded-event), [`mcp_server_connection`](#mcp-server-connection-event)이 포함됩니다.

604</Note>

605 

602게이트웨이를 통해 연결되는 Claude Desktop 및 Cowork 세션의 ID 속성에 대해서는 [게이트웨이 `telemetry` 참조](/docs/ko/claude-apps-gateway-config#telemetry)를 참조하세요.606게이트웨이를 통해 연결되는 Claude Desktop 및 Cowork 세션의 ID 속성에 대해서는 [게이트웨이 `telemetry` 참조](/docs/ko/claude-apps-gateway-config#telemetry)를 참조하세요.

603 607 

604이벤트는 추가로 다음 속성을 포함합니다. 이들은 무제한 카디널리티를 야기할 수 있으므로 메트릭에 절대 첨부되지 않습니다:608이벤트는 추가로 다음 속성을 포함합니다. 이들은 무제한 카디널리티를 야기할 수 있으므로 메트릭에 절대 첨부되지 않습니다:


917* `error`: 오류 메시지921* `error`: 오류 메시지

918* `status_code`: HTTP 상태 코드 (숫자). 연결 실패와 같은 비 HTTP 오류의 경우 없음.922* `status_code`: HTTP 상태 코드 (숫자). 연결 실패와 같은 비 HTTP 오류의 경우 없음.

919* `duration_ms`: 요청 지속 시간 (밀리초)923* `duration_ms`: 요청 지속 시간 (밀리초)

920* `attempt`: 초기 요청을 포함한 총 시도 횟수 (`1`은 재시도가 발생하지 않았음을 의미)924* `attempt`: 최초 요청을 포함한 시도 횟수입니다. 횟수가 다시 시작되는 시점은 [재시도 소진 감지](#detect-retry-exhaustion)에서 설명합니다

921* `request_id`: `"req_011..."`과 같은 API 요청 ID, [이벤트 상관 속성](#event-correlation-attributes)에서 설명함.925* `request_id`: `"req_011..."`과 같은 API 요청 ID, [이벤트 상관 속성](#event-correlation-attributes)에서 설명함.

922* `client_request_id`: `x-client-request-id` 요청 헤더로 전송된 클라이언트 생성 UUID. 시간 초과 또는 연결 오류와 같은 실패가 서버 `request_id`를 생성하지 않았을 때도 사용 가능; 존재할 때는 [이벤트 상관 속성](#event-correlation-attributes) 테이블을 참조하세요. Claude Code v2.1.214 이상 필요926* `client_request_id`: `x-client-request-id` 요청 헤더로 전송된 클라이언트 생성 UUID. 시간 초과 또는 연결 오류와 같은 실패가 서버 `request_id`를 생성하지 않았을 때도 사용 가능; 존재할 때는 [이벤트 상관 속성](#event-correlation-attributes) 테이블을 참조하세요. Claude Code v2.1.214 이상 필요

923* `speed`: `"fast"` 또는 `"normal"`, 빠른 모드가 활성화되었는지 여부를 나타냄927* `speed`: `"fast"` 또는 `"normal"`, 빠른 모드가 활성화되었는지 여부를 나타냄


1528 1532 

1529Claude Code는 실패한 API 요청을 내부적으로 재시도하고 포기한 후에만 단일 `claude_code.api_error` 이벤트를 내보내므로 이벤트 자체가 해당 요청의 최종 신호입니다. 중간 재시도 시도는 별도의 이벤트로 기록되지 않습니다.1533Claude Code는 실패한 API 요청을 내부적으로 재시도하고 포기한 후에만 단일 `claude_code.api_error` 이벤트를 내보내므로 이벤트 자체가 해당 요청의 최종 신호입니다. 중간 재시도 시도는 별도의 이벤트로 기록되지 않습니다.

1530 1534 

1531이벤트의 `attempt` 속성은 총 시도 횟수를 기록합니다. `CLAUDE_CODE_MAX_RETRIES`는 기본값이 10이고 최대 15입니다. v2.1.199 이상에서는 `CLAUDE_CODE_RETRY_WATCHDOG`을 설정하여 기본값을 높이고 상한을 제거할 수 있습니다.1535이벤트의 `attempt` 속성은 시도 횟수를 기록합니다. `CLAUDE_CODE_MAX_RETRIES`는 기본값이 10이고 최대 15입니다. v2.1.199 이상에서는 `CLAUDE_CODE_RETRY_WATCHDOG`을 설정하여 기본값을 높이고 상한을 제거할 수 있습니다.

1536 

1537요청이 일시적 오류에 대한 모든 재시도를 소진하면 `attempt`는 최대 해당 유효 제한보다 하나 많은 값이 됩니다: 기본값으로는 11입니다.

1532 1538 

1533요청이 일시적 오류에 대한 모든 재시도를 소진하면 `attempt`는 해당 유효 제한보다 하나 많습니다: 기본값으로는 11이고 감시 기능이 설정되지 않은 경우 16을 초과하지 않습니다. 더 낮은 값은 `400` 응답과 같은 재시도 불가능한 오류를 나타내거나 자체 더 작은 재시도 예산이 있는 원인을 나타냅니다. 예를 들어 Claude Code는 AWS 또는 Google Cloud 자격 증명 로드 실패를 최대 두 번 재시도합니다.1539더 낮은 값도 재시도가 소진되었음을 의미할 수 있습니다: Claude Code가 스트리밍 실패 후 요청을 다시 보낼 때마다 `attempt`는 `1`부터 다시 시작합니다.

1534 1540 

1535복구된 세션과 정체된 세션을 구분하려면 `session.id`로 이벤트를 그룹화하고 오류 후 나중에 `api_request` 이벤트가 존재하는지 확인합니다.1541복구된 세션과 정체된 세션을 구분하려면 `session.id`로 이벤트를 그룹화하고 오류 후 나중에 `api_request` 이벤트가 존재하는지 확인합니다.

1536 1542 

Details

91| `-y, --yes` | `Run this command now?` 프롬프트 없이 표시된 설치 명령을 수락합니다. Bash 도구나 훅에서와 같이 Claude Code 세션 내부에서 명령이 실행될 때는 무시됩니다. Claude Code v2.1.229 이상 필요 |91| `-y, --yes` | `Run this command now?` 프롬프트 없이 표시된 설치 명령을 수락합니다. Bash 도구나 훅에서와 같이 Claude Code 세션 내부에서 명령이 실행될 때는 무시됩니다. Claude Code v2.1.229 이상 필요 |

92| `--accept-command <sha256>` | 이전 [`--json` 실행](#plugin-json-result)이 `shownCommand`에서 보고한 `sha256`인 표시된 설치 명령을 수락합니다. `-y` 대신 사용합니다. `-y`와 결합할 수 없습니다. [표시된 설치 명령 수락](#accept-a-displayed-install-command)을 참조하세요. Claude Code v2.1.271 이상 필요 |92| `--accept-command <sha256>` | 이전 [`--json` 실행](#plugin-json-result)이 `shownCommand`에서 보고한 `sha256`인 표시된 설치 명령을 수락합니다. `-y` 대신 사용합니다. `-y`와 결합할 수 없습니다. [표시된 설치 명령 수락](#accept-a-displayed-install-command)을 참조하세요. Claude Code v2.1.271 이상 필요 |

93| `--json` | 스크립트에서 사용하기 위해 사람이 읽을 수 있는 메시지 대신 stdout의 마지막 줄에 하나의 JSON 객체로 결과를 출력합니다. [JSON 결과 형식](#plugin-json-result)을 참조하세요. Claude Code v2.1.268 이상 필요 |93| `--json` | 스크립트에서 사용하기 위해 사람이 읽을 수 있는 메시지 대신 stdout의 마지막 줄에 하나의 JSON 객체로 결과를 출력합니다. [JSON 결과 형식](#plugin-json-result)을 참조하세요. Claude Code v2.1.268 이상 필요 |

94| `--marketplace <source>` | 이름만으로 지정한 `<plugin>`을 `<source>`의 마켓플레이스에서 설치합니다. 해당 마켓플레이스를 아직 추가하지 않았다면 먼저 추가합니다. [한 번의 명령으로 마켓플레이스 추가 및 설치](/docs/ko/plugins/install#add-a-marketplace-and-install-in-one-command)를 참조하세요. Claude Code v2.1.292 이상 필요 |

94 95 

95셸에서 `claude plugin install --help`를 실행하여 버전이 지원하는 모든 옵션을 확인하세요.96셸에서 `claude plugin install --help`를 실행하여 버전이 지원하는 모든 옵션을 확인하세요.

96 97 

Details

189 189 

190* **범위**: 기본적으로 사용자 범위. `--scope project` 또는 `--scope local`을 전달하여 변경합니다.190* **범위**: 기본적으로 사용자 범위. `--scope project` 또는 `--scope local`을 전달하여 변경합니다.

191* **플러그인이 로드되는 시기**: 설치한 플러그인은 다음 번에 Claude Code를 시작할 때 또는 이미 열려 있는 세션에서 `/reload-plugins`을 실행할 때 로드됩니다.191* **플러그인이 로드되는 시기**: 설치한 플러그인은 다음 번에 Claude Code를 시작할 때 또는 이미 열려 있는 세션에서 `/reload-plugins`을 실행할 때 로드됩니다.

192* **마켓플레이스를 먼저 추가해야 함**: 아직 아무도 대화형 Claude Code 세션을 열지 않은 머신에서는 공식 마켓플레이스가 등록되지 않으므로, 이를 설치하는 스크립트는 설치 전에 `claude plugin marketplace add anthropics/claude-plugins-official`을 실행합니다.192* **새 머신의 마켓플레이스**: 아직 아무도 대화형 Claude Code 세션을 열지 않은 머신에서는 공식 마켓플레이스가 등록되지 않으므로, 이를 설치하는 스크립트는 설치 전에 `claude plugin marketplace add anthropics/claude-plugins-official`을 실행합니다. [셸에서 추가 및 설치](#add-and-install-from-your-shell)를 참조하세요.

193 193 

194```bash theme={null}194```bash theme={null}

195claude plugin install formatter@your-org --scope project195claude plugin install formatter@your-org --scope project


232 마켓플레이스 추가 및 한 명령으로 설치232 마켓플레이스 추가 및 한 명령으로 설치

233</h3>233</h3>

234 234 

235아직 추가하지 않은 마켓플레이스에서 플러그인을 설치하려면 Claude Code 세션에서 `/plugin install`을 실행하고 `--marketplace`로 마켓플레이스 소스를 이름 지정합니다. Claude Code v2.1.275 이상이 필요합니다.235아직 추가하지 않은 마켓플레이스에서 플러그인을 설치하려면 세션 또는 셸에서 설치 명령에 `--marketplace`로 마켓플레이스 소스를 지정합니다. 소스는 GitHub `owner/repo`, git URL 또는 로컬 경로와 같이 [`/plugin marketplace add`와 동일한 형식](#add-a-marketplace)을 사용합니다. 플러그인 이름을 `@marketplace` 접미사 없이 지정합니다.

236 

237<h4 id="add-and-install-in-a-session">

238 세션에서 추가 및 설치

239</h4>

240 

241Claude Code 세션에서 플러그인과 소스를 지정하여 `/plugin install`을 실행합니다. Claude Code v2.1.275 이상이 필요합니다. 세션에서는 소스에 공백을 포함할 수 없습니다.

236 242 

237```text theme={null}243```text theme={null}

238/plugin install deploy-helper --marketplace your-org/plugins244/plugin install deploy-helper --marketplace your-org/plugins

239```245```

240 246 

241소스는 GitHub `owner/repo`, git URL 또는 로컬 경로와 같이 [/plugin marketplace add와 동일한 형식](#add-a-marketplace)을 사용합니다. 단, 공백을 포함할 수 없습니다. 플러그인 이름을 `@marketplace` 접미사 없이 지정합니다.

242 

243아직 해당 마켓플레이스를 추가하지 않았으면 Claude Code는 해결한 소스를 표시하고 추가하기 전에 확인하도록 요청합니다. 마켓플레이스가 추가되면 플러그인의 세부 정보가 열리고 [설치 범위](#install-a-plugin)를 선택합니다. 소스가 이미 추가한 마켓플레이스와 일치하면 Claude Code는 확인을 건너뛰고 해당 마켓플레이스에서 플러그인의 세부 정보를 엽니다.247아직 해당 마켓플레이스를 추가하지 않았으면 Claude Code는 해결한 소스를 표시하고 추가하기 전에 확인하도록 요청합니다. 마켓플레이스가 추가되면 플러그인의 세부 정보가 열리고 [설치 범위](#install-a-plugin)를 선택합니다. 소스가 이미 추가한 마켓플레이스와 일치하면 Claude Code는 확인을 건너뛰고 해당 마켓플레이스에서 플러그인의 세부 정보를 엽니다.

244 248 

249<h4 id="add-and-install-from-your-shell">

250 셸에서 추가 및 설치

251</h4>

252 

253셸에서 세션을 시작하지 않고 플러그인과 소스를 지정하여 `claude plugin install`을 실행합니다. Claude Code v2.1.292 이상이 필요합니다.

254 

255```bash theme={null}

256claude plugin install deploy-helper --marketplace your-org/plugins

257```

258 

259셸 명령은 확인 단계 없이 마켓플레이스를 추가합니다. 해당 소스에서 이미 추가한 마켓플레이스는 재사용됩니다. 새 마켓플레이스는 `claude plugin marketplace add`와 동일한 [조직 정책 검사](/docs/ko/plugins/org#restrict-what-users-can-install)를 거쳐 추가되며, `--scope project`를 전달하더라도 사용자 설정에 선언됩니다.

260 

245<h3 id="add-a-private-marketplace">261<h3 id="add-a-private-marketplace">

246 비공개 마켓플레이스 추가262 비공개 마켓플레이스 추가

247</h3>263</h3>

Details

138| `$.mcp.call` | 세션의 권한 규칙에 따라 연결된 MCP 서버의 도구를 호출합니다 |138| `$.mcp.call` | 세션의 권한 규칙에 따라 연결된 MCP 서버의 도구를 호출합니다 |

139| `$.model.complete` | 모델 호출에 사용자의 플랜 또는 API 키를 사용합니다 |139| `$.model.complete` | 모델 호출에 사용자의 플랜 또는 API 키를 사용합니다 |

140| `$.prompt.submit` | 프롬프트를 제출하며, 사용자가 직접 작성한 것처럼 보낼 수 있습니다 |140| `$.prompt.submit` | 프롬프트를 제출하며, 사용자가 직접 작성한 것처럼 보낼 수 있습니다 |

141| `$.session.send` | 다른 세션 또는 서브에이전트의 Claude가 읽는 메시지를 보냅니다 |141| `$.session.send` | 다른 세션, 서브에이전트 또는 [팀원](/docs/ko/agent-teams)의 Claude가 읽는 메시지를 보냅니다 |

142 142 

143`hooks:` 줄에서 [`tool.call`](/docs/ko/plugins/mods/reference#tools)과 [`prompt.submit`](/docs/ko/plugins/mods/reference#prompts-and-what-claude-reads)은 mod가 모든 도구 호출과 모든 프롬프트를 확인하고 변경할 수 있음을 의미합니다. [`session.append`](/docs/ko/plugins/mods/reference#session)는 mod가 대화의 각 행이 저장되기 전에 이를 다시 작성할 수 있음을 의미합니다. [`ui.render{component=AskUserQuestion}`](/docs/ko/plugins/mods/interface#change-what-claude-code-already-draws)는 Claude가 사용자에게 질문할 때 사용하는 대화 상자를 mod가 다시 그릴 수 있음을 의미합니다. `tool.check`는 권한 프롬프트가 표시되기 전에 mod가 도구 호출을 승인하거나 거부할 수 있음을 의미합니다. [기본 동작 알아보기](#know-what-happens-by-default)에서 mod의 응답보다 우선 적용되는 규칙과 훅을 확인할 수 있습니다.143`hooks:` 줄에서 [`tool.call`](/docs/ko/plugins/mods/reference#tools)과 [`prompt.submit`](/docs/ko/plugins/mods/reference#prompts-and-what-claude-reads)은 mod가 모든 도구 호출과 모든 프롬프트를 확인하고 변경할 수 있음을 의미합니다. [`session.append`](/docs/ko/plugins/mods/reference#session)는 mod가 대화의 각 행이 저장되기 전에 이를 다시 작성할 수 있음을 의미합니다. [`ui.render{component=AskUserQuestion}`](/docs/ko/plugins/mods/interface#change-what-claude-code-already-draws)는 Claude가 사용자에게 질문할 때 사용하는 대화 상자를 mod가 다시 그릴 수 있음을 의미합니다. `tool.check`는 권한 프롬프트가 표시되기 전에 mod가 도구 호출을 승인하거나 거부할 수 있음을 의미합니다. [기본 동작 알아보기](#know-what-happens-by-default)에서 mod의 응답보다 우선 적용되는 규칙과 훅을 확인할 수 있습니다.

144 144 

Details

140| 호출 | 사용자에게 표시되는 내용 |140| 호출 | 사용자에게 표시되는 내용 |

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

142| `$.ui.status(text)` | 변경할 때까지 유지되는 프롬프트 아래의 한 줄입니다. `⚠ my-mod: checks: 3 passing`처럼 `⚠`와 mod 이름으로 시작합니다. |142| `$.ui.status(text)` | 변경할 때까지 유지되는 프롬프트 아래의 한 줄입니다. `⚠ my-mod: checks: 3 passing`처럼 `⚠`와 mod 이름으로 시작합니다. |

143| `$.ui.toast(text)` | 오른쪽 상단에 표시되는 토스트 알림으로, 텍스트 위에 mod 이름이 표시되며 몇 초 후 사라집니다 |143| `$.ui.toast(text)` | mod 이름과 함께 표시되며 몇 초 후 사라지는 토스트 알림입니다. [전체 화면 렌더링](/docs/ko/fullscreen)에서는 오른쪽 상단의 상자로, 클래식 렌더러에서는 프롬프트 아래 오른쪽의 한 줄로 표시됩니다. |

144| `$.ui.log(text)` | Claude가 읽지 않는 트랜스크립트의 흐린 줄입니다. `● my-mod: build finished`처럼 `●`와 mod 이름으로 시작합니다. |144| `$.ui.log(text)` | Claude가 읽지 않는 트랜스크립트의 흐린 줄입니다. `● my-mod: build finished`처럼 `●`와 mod 이름으로 시작합니다. |

145 145 

146<h3 id="start-a-turn-from-a-background-job">146<h3 id="start-a-turn-from-a-background-job">


159 세션 간 메시지 보내기 및 받기159 세션 간 메시지 보내기 및 받기

160</h2>160</h2>

161 161 

162mod는 사용자의 다른 세션이나 이 세션의 서브에이전트 중 하나에 일반 텍스트 메시지를 보낼 수 있으며, 도착하고 나가는 메시지를 관찰할 수 있습니다. `$.session.send({ to, text })`는 메시지 하나를 보내며, SendMessage 도구와 동일한 방식으로 전달합니다. `to`는 세션의 경우 `{ sessionId }`, `$.agent.list()`에서 가져온 서브에이전트의 경우 `{ agentId }`, 또는 수신된 메시지의 발신 문자열 주소입니다. 이 호출은 메시지가 대기열에 추가되면 `{ isDelivered: true }`로 resolve됩니다. 아무것도 전달되지 않은 경우 `{ isDelivered: false, reason }`으로 resolve되며, `reason`에 그 이유가 담깁니다.162mod는 사용자의 다른 세션, 이 세션의 서브에이전트 중 하나, 또는 [에이전트 팀](/docs/ko/agent-teams)의 팀원에게 일반 텍스트 메시지를 보낼 수 있습니다. 또한 도착하고 나가는 메시지를 관찰할 수 있습니다.

163 

164메시지를 보내려면 `$.session.send({ to, text })`를 호출합니다. 이 호출은 SendMessage 도구와 동일한 방식으로 전달합니다. `to`는 메시지를 받는 대상에 따라 설정합니다.

165 

166* **사용자의 다른 세션**: `{ sessionId }`

167* **서브에이전트 또는 팀원**: `$.agent.list()`에서 가져온 id를 사용한 `{ agentId }`

168* **수신된 메시지의 발신자**: 해당 메시지의 발신 문자열 주소

169 

170이 호출은 메시지가 대기열에 추가되면 `{ isDelivered: true }`로 resolve됩니다. 아무것도 전달되지 않은 경우 `{ isDelivered: false, reason }`으로 resolve되며, `reason`에 그 이유가 담깁니다.

163 171 

164다음 훅은 [명령으로 등록된](#add-a-command) `/ping` 명령에 응답하여, 명령 뒤에 입력한 id의 세션에 상태를 요청합니다.172다음 훅은 [명령으로 등록된](#add-a-command) `/ping` 명령에 응답하여, 명령 뒤에 입력한 id의 세션에 상태를 요청합니다.

165 173 

Details

281 281 

282`result.usage`에는 Claude API가 요청에 대해 보고하는 토큰 수인 `input_tokens`, `output_tokens`, `cache_read_input_tokens`, `cache_creation_input_tokens`와 응답한 `model`이 들어 있습니다. 이 훅은 서브에이전트의 요청에도 실행되므로, 메인 대화만 원하는 경우 `e.agentId`를 확인하세요.282`result.usage`에는 Claude API가 요청에 대해 보고하는 토큰 수인 `input_tokens`, `output_tokens`, `cache_read_input_tokens`, `cache_creation_input_tokens`와 응답한 `model`이 들어 있습니다. 이 훅은 서브에이전트의 요청에도 실행되므로, 메인 대화만 원하는 경우 `e.agentId`를 확인하세요.

283 283 

284[advisor 도구](/docs/ko/advisor) 호출처럼 요청 중에 API가 직접 실행한 도구 호출을 확인하려면 `result.serverToolUses`를 읽습니다. Claude Code는 이러한 호출을 실행하지 않으므로 `tool.call`이나 `tool.check` 훅이 발생하지 않습니다. 응답에 이러한 호출이 없으면 이 필드는 존재하지 않으며, Claude Code v2.1.290 이상이 필요합니다.

285 

284<h3 id="hook-the-settings-hook-events">286<h3 id="hook-the-settings-hook-events">

285 설정 훅 이벤트 처리하기287 설정 훅 이벤트 처리하기

286</h3>288</h3>

Details

10 10 

11다음 맵은 터미널 세션에서 mod가 그릴 수 있는 위치를 보여 줍니다.11다음 맵은 터미널 세션에서 mod가 그릴 수 있는 위치를 보여 줍니다.

12 12 

13<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5fda26b6609c62b68c6f9e528c1590ea" className="dark:hidden" alt="Claude Code 터미널 세션의 맵. mod는 오른쪽에 사이드바로 창을, 트랜스크립트 오른쪽 상단에 토스트를, 트랜스크립트에 로그 줄을, 프롬프트 위에 밴드를, 프롬프트 아래에 상태줄을 추가할 수 있습니다. mod는 메시지, 도구 호출 행, 스피너를 다시 그릴 수 있습니다. 프롬프트는 Claude Code 자체의 것입니다." width="600" height="336" data-path="images/mods-screen-map.svg" />13<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5fda26b6609c62b68c6f9e528c1590ea" className="dark:hidden" alt="전체 화면 렌더링에서의 Claude Code 터미널 세션 맵. mod는 오른쪽에 사이드바로 창을, 트랜스크립트 오른쪽 상단에 토스트를, 트랜스크립트에 로그 줄을, 프롬프트 위에 밴드를, 프롬프트 아래에 상태줄을 추가할 수 있습니다. mod는 메시지, 도구 호출 행, 스피너를 다시 그릴 수 있습니다. 프롬프트는 Claude Code 자체의 것입니다." width="600" height="336" data-path="images/mods-screen-map.svg" />

14 14 

15<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map-dark.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5b4161581a1bd2c0450b0c8b57bc1225" className="hidden dark:block" alt="Claude Code 터미널 세션의 맵. mod는 오른쪽에 사이드바로 창을, 트랜스크립트 오른쪽 상단에 토스트를, 트랜스크립트에 로그 줄을, 프롬프트 위에 밴드를, 프롬프트 아래에 상태줄을 추가할 수 있습니다. mod는 메시지, 도구 호출 행, 스피너를 다시 그릴 수 있습니다. 프롬프트는 Claude Code 자체의 것입니다." width="600" height="336" data-path="images/mods-screen-map-dark.svg" />15<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map-dark.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5b4161581a1bd2c0450b0c8b57bc1225" className="hidden dark:block" alt="전체 화면 렌더링에서의 Claude Code 터미널 세션 맵. mod는 오른쪽에 사이드바로 창을, 트랜스크립트 오른쪽 상단에 토스트를, 트랜스크립트에 로그 줄을, 프롬프트 위에 밴드를, 프롬프트 아래에 상태줄을 추가할 수 있습니다. mod는 메시지, 도구 호출 행, 스피너를 다시 그릴 수 있습니다. 프롬프트는 Claude Code 자체의 것입니다." width="600" height="336" data-path="images/mods-screen-map-dark.svg" />

16 16 

17더 좁은 터미널에서는 창이 트랜스크립트 옆이 아닌 프롬프트 위에 배치됩니다.17더 좁은 터미널에서는 창이 트랜스크립트 옆이 아닌 프롬프트 위에 배치됩니다.

18 18 


324| `title` | 둘 이상의 pane이 열려 있을 때 pane의 탭 레이블 |324| `title` | 둘 이상의 pane이 열려 있을 때 pane의 탭 레이블 |

325| `focus` | [키보드 포커스](#know-which-keys-your-mod-can-receive)를 요청 |325| `focus` | [키보드 포커스](#know-which-keys-your-mod-can-receive)를 요청 |

326| `closeOnEscape` | Esc로 pane을 닫도록 설정 |326| `closeOnEscape` | Esc로 pane을 닫도록 설정 |

327| `holdToasts` | pane이 닫힐 때까지 토스트([`$.ui.toast`](/docs/ko/plugins/mods/api#show-something-without-starting-a-turn)의 작은 알림)를 보류 |327| `holdToasts` | 터미널에서 이 pane이 표시되는 동안 토스트를 보류합니다. [대화 상자 뒤에 토스트 보류하기](#hold-toasts-behind-a-dialog)를 참조하십시오. |

328| `rows` | pane이 프롬프트 위에 있을 때 요청할 높이. 기본값은 공간의 3분의 1입니다. |328| `rows` | pane이 프롬프트 위에 있을 때 요청할 높이. 기본값은 공간의 3분의 1입니다. |

329| `columns` | pane이 트랜스크립트 옆에 있을 때 요청할 너비 |329| `columns` | pane이 트랜스크립트 옆에 있을 때 요청할 너비 |

330 330 


337 337 

338Claude가 작업하는 동안 명령으로 pane을 열 수 있게 하려면 [명령을 등록](/docs/ko/plugins/mods/api#add-a-command)할 때 `immediate: true`를 추가합니다. 이 설정이 없으면 턴 중에 입력한 명령은 턴이 끝날 때까지 대기합니다.338Claude가 작업하는 동안 명령으로 pane을 열 수 있게 하려면 [명령을 등록](/docs/ko/plugins/mods/api#add-a-command)할 때 `immediate: true`를 추가합니다. 이 설정이 없으면 턴 중에 입력한 명령은 턴이 끝날 때까지 대기합니다.

339 339 

340<h4 id="hold-toasts-behind-a-dialog">

341 대화 상자 뒤에 토스트 보류하기

342</h4>

343 

344pane이 사용자가 응답한 뒤 떠나는 대화 상자인 경우 `$.ui.open`에 `holdToasts: true`를 전달하여 사용자가 결정하는 동안 토스트가 나타나지 않도록 합니다. 터미널에서 보류는 해당 pane이 표시되는 동안 유지되며, 그 사이에 발생한 토스트는 보류가 끝날 때까지 대기합니다.

345 

346Claude Code는 mod가 [`$.ui.toast`](/docs/ko/plugins/mods/api#show-something-without-starting-a-turn)로 발생시키는 토스트뿐 아니라 다른 mod의 토스트와 Claude Code 자체의 짧은 알림도 보류합니다. 계속 열려 있는 pane에서는 사용자가 이러한 알림을 계속 볼 수 있도록 이 필드를 생략하십시오.

347 

340<h4 id="when-a-pane-waits-for-a-wider-terminal">348<h4 id="when-a-pane-waits-for-a-wider-terminal">

341 pane이 더 넓은 터미널을 기다리는 경우349 pane이 더 넓은 터미널을 기다리는 경우

342</h4>350</h4>

Details

209| [`$.ui`](/docs/ko/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |209| [`$.ui`](/docs/ko/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |

210| [`$.command`](/docs/ko/plugins/mods/api#add-a-command) | `register`, `run`, `list` |210| [`$.command`](/docs/ko/plugins/mods/api#add-a-command) | `register`, `run`, `list` |

211| [`$.tool`](/docs/ko/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |211| [`$.tool`](/docs/ko/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |

212| `$.agent` | `register`, `spawn`, `list` |212| `$.agent` | `register`, `spawn`, `list`. `list()`는 이 세션의 서브에이전트와 팀원을 반환하며, 각 항목의 `status`는 `pending`, `running`, `waiting`, `idle`, `completed`, `failed`, `killed` 중 하나입니다. 이 중 `idle`과 `waiting`에는 Claude Code v2.1.289 이상이 필요합니다. |

213| [`$.model`](/docs/ko/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |213| [`$.model`](/docs/ko/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |

214| [`$.prompt`](/docs/ko/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`, `read`, `fill`, `suggest`, `compose`. Claude는 해당 mod를 발신자로 명시하는 문장 뒤에 오는 `submit({ text })`의 텍스트를 읽습니다. `submit({ text, asUser: true })`는 그 문장 없이 텍스트를 사용자 본인의 말로 보냅니다. |214| [`$.prompt`](/docs/ko/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`, `read`, `fill`, `suggest`, `compose`. Claude는 해당 mod를 발신자로 명시하는 문장 뒤에 오는 `submit({ text })`의 텍스트를 읽습니다. `submit({ text, asUser: true })`는 그 문장 없이 텍스트를 사용자 본인의 말로 보냅니다. |

215| `$.turn` | `abort` |215| `$.turn` | `abort` |


317| `$.process.run` 타임아웃 | 기본값 30초, 최대 10분 |317| `$.process.run` 타임아웃 | 기본값 30초, 최대 10분 |

318| `$.model.complete` `maxTokens` | 기본값 1024, 최대 64,000 또는 모델의 출력 제한 |318| `$.model.complete` `maxTokens` | 기본값 1024, 최대 64,000 또는 모델의 출력 제한 |

319| `$.fs.read` 및 `$.fs.write` | 파일 하나당 4 MiB |319| `$.fs.read` 및 `$.fs.write` | 파일 하나당 4 MiB |

320| 훅의 `drop` 사유 또는 `config.set` `deny` 사유 | 4,096자. 이보다 긴 사유는 끝부분이 잘리며, drop 또는 deny는 그대로 적용됩니다. 잘라내기에는 Claude Code v2.1.292 이상이 필요하며, 이전 버전에서는 대신 훅이 [실패합니다](/docs/ko/plugins/mods/events#handle-a-hook-that-fails). |

320| 하나의 트리에 포함된 텍스트 | 처음 100,000자까지 그려집니다 |321| 하나의 트리에 포함된 텍스트 | 처음 100,000자까지 그려집니다 |

321| `Code`의 `language` 또는 `path`, `Select` 옵션의 `value`, `Client`의 `module` | 10,000자. 이보다 길면 Claude Code가 [해당 위치를 자체 버전으로 그립니다](/docs/ko/plugins/mods/interface#build-a-tree-from-elements). |322| `Code`의 `language` 또는 `path`, `Select` 옵션의 `value`, `Client`의 `module` | 10,000자. 이보다 길면 Claude Code가 [해당 위치를 자체 버전으로 그립니다](/docs/ko/plugins/mods/interface#build-a-tree-from-elements). |

322| `Link`의 `href` | 2,048자. 이보다 긴 `href`가 있으면 트리 전체가 그려지지 않습니다. |323| `Link`의 `href` | 2,048자. 이보다 긴 `href`가 있으면 트리 전체가 그려지지 않습니다. |

Details

110* `returned neither { value } nor { deny }`: mods API 호출에 대한 스텁이 값을 그대로 반환했으며, 이 경우 테스트가 실패합니다110* `returned neither { value } nor { deny }`: mods API 호출에 대한 스텁이 값을 그대로 반환했으며, 이 경우 테스트가 실패합니다

111* `no implementation for` 뒤에 이름이 오는 경우: mod가 해당 호출을 했지만 응답하는 스텁이 없습니다111* `no implementation for` 뒤에 이름이 오는 경우: mod가 해당 호출을 했지만 응답하는 스텁이 없습니다

112 112 

113키트는 네임스페이스 전체에 대신 응답하는 인메모리 mock도 내보냅니다. `mock.clock(on)`은 [`$.clock`](/docs/ko/plugins/mods/api#run-work-in-the-background)에 응답하고, `mock.store(on, { count: 7 })`는 지정한 항목으로 시작하는 저장소에서 `$.store`에 응답하며, `mock.env(on, { CI: 'true' })`는 지정한 변수에서 `$.env.get`에 응답합니다. `mock.clock`은 테스트가 시간을 앞당길 수 있는 mock 시계를 반환하므로, 타이머 테스트가 기다릴 필요가 없습니다. `mock.store`는 아무것도 반환하지 않으므로, mod가 무엇을 저장했는지 확인하려면 [그리기 테스트](#test-a-drawing)처럼 두 개의 `store` 스텁을 직접 작성해야 합니다.113키트는 시계, 저장소, 환경 변수, 대화에 추가된 행을 위한 미리 만들어진 mock도 내보냅니다.

114 

115* **`mock.clock(on)`**: [`$.clock`](/docs/ko/plugins/mods/api#run-work-in-the-background)에 응답하고, 테스트가 시간을 앞당길 수 있는 mock 시계를 반환하므로 타이머 테스트가 기다릴 필요가 없습니다.

116* **`mock.store(on, { count: 7 })`**: 지정한 항목으로 시작하는 저장소에서 `$.store`에 응답합니다. 아무것도 반환하지 않으므로, mod가 무엇을 저장했는지 확인하려면 [그리기 테스트](#test-a-drawing)처럼 두 개의 `store` 스텁을 직접 작성해야 합니다.

117* **`mock.env(on, { CI: 'true' })`**: 지정한 변수에서 `$.env.get`에 응답합니다.

118* **`mock.session(on)`**: mod가 [`$.session.append`](/docs/ko/plugins/mods/reference#session)로 추가한 행을 오래된 것부터 나열하는 `appended()` 메서드가 있는 mock 세션을 반환합니다. Claude Code v2.1.293 이상이 필요합니다.

114 119 

115<h3 id="follow-the-test-kit’s-rules">120<h3 id="follow-the-test-kit’s-rules">

116 테스트 키트의 규칙 따르기121 테스트 키트의 규칙 따르기


168 스텁이 반환하는 값 찾아보기173 스텁이 반환하는 값 찾아보기

169</h3>174</h3>

170 175 

171테스트에서 mod가 하는 모든 mods API 호출에는 Claude Code 대신 응답하는 스텁이 필요합니다. 단, 키트가 직접 응답하는 몇 가지, 즉 [`$.ui.invalidate`](/docs/ko/plugins/mods/interface#redraw-when-something-changes)와 [`$.state`](/docs/ko/plugins/mods/interface#keep-state) 호출은 예외입니다. `$.clock` 호출에는 `mock.clock(on)`을 사용해야 하며, 그렇지 않으면 mod의 `$.clock.now()`가 `no implementation for clock.now`로 실패합니다.176테스트에서 mod가 하는 모든 mods API 호출에는 Claude Code 대신 응답하는 스텁이 필요합니다. 단, 키트가 직접 응답하는 몇 가지, 즉 [`$.ui.invalidate`](/docs/ko/plugins/mods/interface#redraw-when-something-changes), [`$.state`](/docs/ko/plugins/mods/interface#keep-state), `$.session.append` 호출은 예외입니다. `$.clock` 호출에는 `mock.clock(on)`을 사용해야 하며, 그렇지 않으면 mod의 `$.clock.now()`가 `no implementation for clock.now`로 실패합니다.

172 177 

173다음 표에는 mod가 가장 많이 사용하는 항목이 나와 있습니다. 첫 번째 열은 mod가 하는 호출 또는 `next(e)`로 넘기는 이벤트입니다. 두 번째 열은 그 이름으로 `on`에 전달할 함수이므로, `$.store.get` 행은 `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`이 됩니다. 스텁의 `'...'`은 사용자가 채울 텍스트를 나타냅니다.178다음 표에는 mod가 가장 많이 사용하는 항목이 나와 있습니다. 첫 번째 열은 mod가 하는 호출 또는 `next(e)`로 넘기는 이벤트입니다. 두 번째 열은 그 이름으로 `on`에 전달할 함수이므로, `$.store.get` 행은 `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`이 됩니다. 스텁의 `'...'`은 사용자가 채울 텍스트를 나타냅니다.

174 179 

Details

209 그림이 나타나지 않거나 반응하지 않음209 그림이 나타나지 않거나 반응하지 않음

210</h2>210</h2>

211 211 

212mod는 로드되었지만 해당 pane, band 또는 컨트롤이 예상대로 동작하지 않습니다.212mod는 로드되었지만 해당 pane, band, toast 또는 컨트롤이 예상대로 동작하지 않습니다.

213 213 

214<h3 id="a-pane-or-band-is-empty-or-shows-claude-code’s-usual-content">214<h3 id="a-pane-or-band-is-empty-or-shows-claude-code’s-usual-content">

215 pane 또는 band가 비어 있거나 Claude Code의 일반 콘텐츠를 표시함215 pane 또는 band가 비어 있거나 Claude Code의 일반 콘텐츠를 표시함


247 247 

248명령이나 버튼에서 pane을 열거나, 호출의 `isPlaced` 결과를 확인합니다. [적절한 시점에 pane 열기](/docs/ko/plugins/mods/interface#open-a-pane-at-the-right-time)를 참조하세요.248명령이나 버튼에서 pane을 열거나, 호출의 `isPlaced` 결과를 확인합니다. [적절한 시점에 pane 열기](/docs/ko/plugins/mods/interface#open-a-pane-at-the-right-time)를 참조하세요.

249 249 

250<h3 id="a-toast-doesn’t-appear">

251 toast가 나타나지 않음

252</h3>

253 

254mod가 대화형 터미널 세션에서 [`$.ui.toast`](/docs/ko/plugins/mods/api#show-something-without-starting-a-turn)를 호출하지만 toast가 보이지 않습니다. 호출이 실행되었는지 확인하려면 [디버그 로그](#read-the-debug-log)에서 mod 이름과 toast 텍스트가 포함된 줄을 찾습니다. 예를 들면 `$.ui.toast (first-mod): build finished`와 같습니다. 그런 다음 다음과 같은 원인을 확인합니다.

255 

256* **호출에 대한 줄이 없는 경우**: Claude Code가 호출을 거부한 이유를 알려 주는 줄을 찾습니다. 예를 들면 `first-mod: $.ui.toast dropped: timeoutMs is a whole number of ms, 1 to 60000`과 같습니다.

257* **pane이 toast를 보류하고 있는 경우**: 현재 표시 중인 pane을 열 때 해당 mod나 다른 mod가 [`holdToasts`](/docs/ko/plugins/mods/interface#hold-toasts-behind-a-dialog)를 전달했습니다. pane을 닫으면 보류가 해제됩니다. 해당 pane이 사용자의 mod에 속하고 계속 열려 있어야 한다면 `$.ui.open` 호출에서 `holdToasts`를 제거하고 pane을 다시 엽니다.

258* **toast가 프롬프트 아래에 있는 경우**: [클래식 렌더러](/docs/ko/fullscreen#enable-fullscreen-rendering)에서는 프롬프트 아래 오른쪽을 확인합니다. 이 위치의 toast는 오른쪽 위의 상자가 아니라 mod 이름으로 시작하는 한 줄입니다.

259* **mod가 더 새로운 toast를 띄운 경우**: 클래식 렌더러에서는 mod의 더 새로운 toast가 표시 중이거나 표시 대기 중인 toast를 대체할 수 있습니다. 디버그 로그에는 이전 toast에 대한 줄이 하나 더 있으며, 표시 중이었다면 `gave way, cut short`로, 나타나지 않았다면 `gave way, unseen`으로 끝납니다. 두 메시지를 모두 표시하려면 하나의 toast에 넣습니다.

260* **toast가 그려지기 전에 시간이 만료된 경우**: 전체 화면 렌더링에서 Claude Code는 한 번에 최대 세 개의 toast만 그리므로, toast가 그려지기 전에 시간이 만료될 수 있습니다. 디버그 로그에는 해당 toast에 대한 줄이 하나 더 있으며 `left the stack, never drawn`으로 끝납니다. mod가 여러 toast를 한꺼번에 띄운다면 메시지를 하나의 toast에 넣습니다.

261 

262v2.1.290 이전에는 Claude Code가 해당 mod에 대해 마지막으로 표시한 toast 이후 2초 이내에 띄워진 toast를 삭제했으며, 삭제된 toast에 대한 디버그 로그 줄에는 `within 2000ms of the last; dropped`가 표시되었습니다.

263 

250<h3 id="hotkeys-do-nothing">264<h3 id="hotkeys-do-nothing">

251 단축키가 작동하지 않음265 단축키가 작동하지 않음

252</h3>266</h3>

Details

129* 마켓플레이스를 한 번 추가: `claude plugin marketplace add your-org/your-marketplace`. 인수는 GitHub `owner/repo` 약자, URL 또는 경로입니다129* 마켓플레이스를 한 번 추가: `claude plugin marketplace add your-org/your-marketplace`. 인수는 GitHub `owner/repo` 약자, URL 또는 경로입니다

130* 플러그인 설치: `claude plugin install deploy-helper@your-marketplace`130* 플러그인 설치: `claude plugin install deploy-helper@your-marketplace`

131* 또는 세션 내에서 둘 다 수행: `/plugin install deploy-helper --marketplace your-org/your-marketplace`. Claude Code v2.1.275 이상이 필요합니다. [한 명령으로 마켓플레이스 추가 및 설치](/docs/ko/plugins/install#add-a-marketplace-and-install-in-one-command)를 참조하세요131* 또는 세션 내에서 둘 다 수행: `/plugin install deploy-helper --marketplace your-org/your-marketplace`. Claude Code v2.1.275 이상이 필요합니다. [한 명령으로 마켓플레이스 추가 및 설치](/docs/ko/plugins/install#add-a-marketplace-and-install-in-one-command)를 참조하세요

132* 또는 셸에서 한 명령으로 둘 다 수행: `claude plugin install deploy-helper --marketplace your-org/your-marketplace`. Claude Code v2.1.292 이상이 필요합니다

132 133 

133<h3 id="ship-updates-to-users">134<h3 id="ship-updates-to-users">

134 사용자에게 업데이트 배포135 사용자에게 업데이트 배포

Details

163 `Invalid marketplace source format`163 `Invalid marketplace source format`

164</h3>164</h3>

165 165 

166`/plugin marketplace add <source>` 또는 `claude plugin marketplace add <source>`를 실행했고, Claude Code가 `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`로 응답했습니다.166`/plugin marketplace add <source>`, `claude plugin marketplace add <source>` 또는 `claude plugin install <plugin> --marketplace <source>`를 실행했고, Claude Code가 `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`로 응답했습니다.

167 167 

168Claude Code는 다음 형식 중 하나의 소스를 허용합니다:168Claude Code는 다음 형식 중 하나의 소스를 허용합니다:

169 169 


568 `Marketplace "<name>" is already added from a different source`568 `Marketplace "<name>" is already added from a different source`

569</h3>569</h3>

570 570 

571[`/plugin install <plugin> --marketplace <source>`](/docs/ko/plugins/install#add-a-marketplace-and-install-in-one-command)를 통해 마켓플레이스 추가를 확인했고, Claude Code가 해당 소스에서 가져온 카탈로그가 다른 소스에서 이미 추가한 마켓플레이스와 동일한 이름을 가지고 있습니다. Claude Code는 기존 마켓플레이스를 대체하지 않고 유지하며 플러그인은 설치되지 않습니다.571세션 또는 셸에서 [설치 명령의 `--marketplace <source>`](/docs/ko/plugins/install#add-a-marketplace-and-install-in-one-command)로 새 마켓플레이스 소스를 지정했습니다. Claude Code가 해당 소스에서 가져온 카탈로그가 다른 소스에서 이미 추가한 마켓플레이스와 동일한 이름을 가지고 있습니다. Claude Code는 기존 마켓플레이스를 대체하지 않고 유지하며 플러그인은 설치되지 않습니다.

572 572 

573전체 메시지는 다음과 같습니다:573전체 메시지는 다음과 같습니다:

574 574 

Details

403 403 

404* 표준 시스템 경로에 있는 엔터프라이즈 범위 [관리형 MCP 파일](/docs/ko/managed-mcp): Linux 러너 호스트에서는 `/etc/claude-code/managed-mcp.json`, macOS 호스트에서는 `/Library/Application Support/ClaudeCode/managed-mcp.json`입니다. 관리자가 나열한 서버만 로드할 수 있도록 잠긴 플릿에 사용합니다. 우선순위 규칙은 [managed-mcp.json을 통한 배타적 제어](/docs/ko/managed-mcp#exclusive-control-with-managed-mcp-json)를 참조하세요. 이 파일이 러너 호스트에 있으면 Claude Code는 claude.ai 커넥터를 포함하여 Anthropic의 컨트롤 플레인이 세션에 전달하는 MCP 서버를 건너뛰고, 세션 자식 프로세스의 stderr에 경고로 해당 서버 이름을 표시하며, 러너는 이를 `debug` 로그 수준으로 기록합니다. v2.1.229 이전에는 이러한 세션이 `You cannot dynamically configure MCP servers when an enterprise MCP config is present`와 함께 시작 시 종료되었습니다.404* 표준 시스템 경로에 있는 엔터프라이즈 범위 [관리형 MCP 파일](/docs/ko/managed-mcp): Linux 러너 호스트에서는 `/etc/claude-code/managed-mcp.json`, macOS 호스트에서는 `/Library/Application Support/ClaudeCode/managed-mcp.json`입니다. 관리자가 나열한 서버만 로드할 수 있도록 잠긴 플릿에 사용합니다. 우선순위 규칙은 [managed-mcp.json을 통한 배타적 제어](/docs/ko/managed-mcp#exclusive-control-with-managed-mcp-json)를 참조하세요. 이 파일이 러너 호스트에 있으면 Claude Code는 claude.ai 커넥터를 포함하여 Anthropic의 컨트롤 플레인이 세션에 전달하는 MCP 서버를 건너뛰고, 세션 자식 프로세스의 stderr에 경고로 해당 서버 이름을 표시하며, 러너는 이를 `debug` 로그 수준으로 기록합니다. v2.1.229 이전에는 이러한 세션이 `You cannot dynamically configure MCP servers when an enterprise MCP config is present`와 함께 시작 시 종료되었습니다.

405* 러너 호스트의 [관리형 설정](/docs/ko/managed-settings)에 있는 [`managedMcpServers`](/docs/ko/settings-reference#managedmcpservers) 키: 배타적 제어를 하지 않고 HTTP 및 SSE 서버를 제공하므로 다른 소스의 서버도 계속 로드됩니다. Claude Code v2.1.259 이상이 필요합니다.405* 러너 호스트의 [관리형 설정](/docs/ko/managed-settings)에 있는 [`managedMcpServers`](/docs/ko/settings-reference#managedmcpservers) 키: 배타적 제어를 하지 않고 HTTP 및 SSE 서버를 제공하므로 다른 소스의 서버도 계속 로드됩니다. Claude Code v2.1.259 이상이 필요합니다.

406* `<repo>/.mcp.json`: 프로젝트 범위입니다. 파일을 저장소에 커밋하면 해당 서버는 클라우드 세션에서 자동 승인됩니다.406* `<repo>/.mcp.json`: 프로젝트 범위입니다. 파일을 저장소에 커밋하면 해당 서버는 클라우드 세션에서 자동 승인됩니다. 여러 저장소가 있는 세션에서는 [최대 하나의 저장소 파일만 로드됩니다](#repository-settings-in-sessions-with-several-repositories).

407 407 

408조직에 커넥터 전달이 활성화되어 있으면 Anthropic의 컨트롤 플레인은 claude.ai에서 구성한 커넥터를 `api.anthropic.com`을 경유하는 서버 제공 MCP 구성을 통해 대화형으로 생성된 세션에 전달합니다. [CLI 디스패치](/docs/ko/self-hosted-environments-testing#run-the-test-loop)와 같이 프로그래밍 방식으로 생성된 세션은 커넥터 전달을 받지 않으므로, 이 섹션에 나열된 다른 소스를 통해 MCP 서버를 제공해야 합니다. 자식 프로세스의 OAuth 토큰에는 커넥터를 직접 가져오기 위한 범위가 포함되어 있지 않으므로 자식 프로세스는 직접 가져오기를 시도하지 않으며, 전달은 서버 주도로 이루어집니다.408조직에 커넥터 전달이 활성화되어 있으면 Anthropic의 컨트롤 플레인은 claude.ai에서 구성한 커넥터를 `api.anthropic.com`을 경유하는 서버 제공 MCP 구성을 통해 대화형으로 생성된 세션에 전달합니다. [CLI 디스패치](/docs/ko/self-hosted-environments-testing#run-the-test-loop)와 같이 프로그래밍 방식으로 생성된 세션은 커넥터 전달을 받지 않으므로, 이 섹션에 나열된 다른 소스를 통해 MCP 서버를 제공해야 합니다. 자식 프로세스의 OAuth 토큰에는 커넥터를 직접 가져오기 위한 범위가 포함되어 있지 않으므로 자식 프로세스는 직접 가져오기를 시도하지 않으며, 전달은 서버 주도로 이루어집니다.

409 409 


540exit 0540exit 0

541```541```

542 542 

543훅은 세션이 끝나기 전에 Claude에 커밋하고 푸시하도록 프롬프트하며 디렉토리가 git 저장소가 아니거나 원격이 없을 때 침묵합니다.543훅은 세션이 끝나기 전에 Claude에게 커밋하고 푸시하도록 요청하며, 디렉토리가 git 저장소가 아니거나 원격이 없을 때는 아무것도 출력하지 않습니다. 저장소가 여러 개인 세션의 경우 [`$CLAUDE_PROJECT_DIR`이 가리키는 대상](#repository-settings-in-sessions-with-several-repositories)을 참조하세요.

544 544 

545<h2 id="permissions-and-tool-approval">545<h2 id="permissions-and-tool-approval">

546 권한 및 도구 승인546 권한 및 도구 승인


569 569 

570`SELF_HOSTED_RUNNER_HOST_CONFIG_DIR`을 설정하여 다른 경로에서 시드하거나 빈 디렉토리를 가리켜 시딩을 비활성화하십시오.570`SELF_HOSTED_RUNNER_HOST_CONFIG_DIR`을 설정하여 다른 경로에서 시드하거나 빈 디렉토리를 가리켜 시딩을 비활성화하십시오.

571 571 

572저장소 커밋된 `.claude/settings.json`은 프로젝트 설정으로 위에 계층화됩니다. 세션은 또한 러너 이미지의 표준 시스템 경로에서 [`managed-settings.json`](/docs/ko/settings#where-settings-live)을 읽습니다. 해당 키가 [서버 관리 설정](/docs/ko/server-managed-settings)과 함께 적용되는지 여부는 [Claude Code가 관리되는 소스를 결합하는 방식](/docs/ko/managed-settings#how-claude-code-combines-managed-sources)을 따릅니다. 기본적으로 조직이 서버 관리 키를 제공할 때 세션은 [Claude Code가 모든 관리자 소스에서 읽는 키](/docs/ko/managed-settings#keys-read-from-every-admin-source)(예: `env` 블록, 샌드박스 잠금, 샌드박스 바이너리 경로 및 `forceRemoteSettingsRefresh`)를 제외하고 러너 이미지의 파일을 무시합니다. [설정 우선순위](/docs/ko/settings#settings-precedence)를 참조하십시오.572저장소 커밋된 `.claude/settings.json`은 프로젝트 설정으로 위에 계층화됩니다. 여러 저장소가 있는 세션에서는 [최대 하나의 저장소 파일만 적용됩니다](#repository-settings-in-sessions-with-several-repositories). 세션은 또한 러너 이미지의 표준 시스템 경로에서 [`managed-settings.json`](/docs/ko/settings#where-settings-live)을 읽습니다. 해당 키가 [서버 관리 설정](/docs/ko/server-managed-settings)과 함께 적용되는지 여부는 [Claude Code가 관리형 소스를 결합하는 방식](/docs/ko/managed-settings#how-claude-code-combines-managed-sources)을 따릅니다. 기본적으로 조직이 서버 관리 키를 제공할 때 세션은 [Claude Code가 모든 관리자 소스에서 읽는 키](/docs/ko/managed-settings#keys-read-from-every-admin-source)(예: `env` 블록, 샌드박스 잠금, 샌드박스 바이너리 경로 및 `forceRemoteSettingsRefresh`)를 제외하고 러너 이미지의 파일을 무시합니다. [설정 우선순위](/docs/ko/settings#settings-precedence)를 참조하십시오.

573 573 

574Anthropic의 제어 평면이 세션에 [Claude Code 훅](/docs/ko/hooks)을 제공할 때 러너는 자신의 구성 위에 설치하지 않고 자신의 구성과 함께 설치합니다. Claude Code v2.1.229 이상이 필요합니다.574Anthropic의 제어 평면이 세션에 [Claude Code 훅](/docs/ko/hooks)을 제공할 때 러너는 자신의 구성 위에 설치하지 않고 자신의 구성과 함께 설치합니다. Claude Code v2.1.229 이상이 필요합니다.

575 575 


581 581 

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

583 583 

584<h3 id="repository-settings-in-sessions-with-several-repositories">

585 여러 저장소가 있는 세션의 저장소 설정

586</h3>

587 

588여러 저장소가 있는 세션에서 Claude Code는 세션이 시작되는 디렉토리에서 프로젝트 설정을 읽으므로, 최대 하나의 저장소의 `.claude/settings.json`만 프로젝트 설정으로 적용됩니다. 다른 저장소의 파일에 정의된 훅은 실행되지 않고, 그 안의 거부 규칙은 적용되지 않으며, 해당 `env`도 설정되지 않습니다.

589 

590* **기본값인 `--capacity 1`과 기본 제공 체크아웃 사용 시**: 세션은 저장소 목록의 첫 번째 저장소에서 시작됩니다. 해당 저장소의 `.claude/settings.json`이 프로젝트 설정으로 적용되고 `.mcp.json`이 로드되며, 다른 저장소의 파일은 적용되거나 로드되지 않습니다.

591* **1보다 큰 `--capacity` 또는 [`checkout` 훅](#checkout) 사용 시**: 세션은 체크아웃을 포함하는 세션별 디렉토리에서 시작됩니다. 어떤 저장소의 `.claude/settings.json`도 프로젝트 설정으로 적용되지 않고, 어떤 저장소의 `.mcp.json`도 로드되지 않으며, 훅 명령의 [`$CLAUDE_PROJECT_DIR`](/docs/ko/hooks#reference-scripts-by-path)은 체크아웃이 아닌 해당 디렉토리입니다.

592 

593각 저장소의 `CLAUDE.md`와 스킬은 세션이 어디에서 시작되든 로드됩니다. 러너는 모든 저장소를 Claude Code에 [추가 디렉토리](/docs/ko/permissions#additional-directories-grant-file-access-not-configuration)로 전달하므로, Claude Code는 각 저장소의 `.claude/settings.json`에서 `enabledPlugins` 및 `extraKnownMarketplaces` 키도 읽습니다.

594 

595모든 세션에서 훅을 실행하거나 권한 규칙을 적용하려면 러너 호스트의 `~/.claude/settings.json`에 넣으십시오. 러너는 세션이 어디에서 시작되든 [호스트 파일을 모든 세션으로 시드합니다](#how-each-session’s-config-is-assembled). `Read` 또는 `Edit` 규칙의 경로는 `//` 절대 경로 또는 `~/` 홈 기준 [패턴](/docs/ko/permissions#read-and-edit)으로 작성하십시오. 다른 패턴은 설정 소스 또는 현재 디렉토리를 기준으로 고정되기 때문입니다.

596 

584<h3 id="repository-committed-permission-rules">597<h3 id="repository-committed-permission-rules">

585 저장소 커밋된 권한 규칙598 저장소 커밋된 권한 규칙

586</h3>599</h3>

Details

92 92 

93 <Step title="저장 및 배포">93 <Step title="저장 및 배포">

94 변경 사항을 저장합니다. Claude Code 클라이언트는 다음 시작 또는 시간별 폴링 주기에 업데이트된 설정을 수신합니다.94 변경 사항을 저장합니다. Claude Code 클라이언트는 다음 시작 또는 시간별 폴링 주기에 업데이트된 설정을 수신합니다.

95 

96 편집기는 Claude Code 설정용으로 게시된 JSON 스키마를 기준으로 JSON을 검사합니다. 구문 분석이 가능한 JSON에서 문제를 발견하면 경고를 표시하고 저장 버튼의 레이블을 변경합니다. 설정이 이미 저장되어 있으면 레이블은 **Update with errors**이고, 아직 저장된 설정이 없으면 **Add with errors**입니다. 스키마 경고는 저장을 차단하지 않으므로 이 버튼으로도 저장됩니다.

97 

98 스키마는 [최신 릴리스보다 늦게 업데이트될 수 있으므로](/docs/ko/settings#edit-a-settings-file) 편집기가 [설정 참조](/docs/ko/settings-reference#all-settings)에 문서화된 키나 값을 문제로 표시할 수 있습니다. Claude Code는 저장된 키와 값을 그대로 받아 로드할 때 [자체 유효성 검사](#invalid-entries-in-delivered-settings)를 실행합니다.

95 </Step>99 </Step>

96</Steps>100</Steps>

97 101 

settings.md +15 −15

Details

409| 프로젝트 로컬 | `.claude/settings.local.json` | 이 프로젝트에서만 사용자. Claude Code는 파일을 생성할 때 git에서 제외함. 수동으로 생성한 경우 `.gitignore`에 직접 추가 | 한 프로젝트에 대한 개인 설정 재정의 및 공유 전 테스트 |409| 프로젝트 로컬 | `.claude/settings.local.json` | 이 프로젝트에서만 사용자. Claude Code는 파일을 생성할 때 git에서 제외함. 수동으로 생성한 경우 `.gitignore`에 직접 추가 | 한 프로젝트에 대한 개인 설정 재정의 및 공유 전 테스트 |

410| 관리됨 | `managed-settings.json` 및 기타 [관리형 소스](/docs/ko/managed-settings#delivery-mechanisms) | 조직이 배포하는 모든 사용자. 무엇이 이를 재정의할 수 있는지는 [설정 우선순위](#settings-precedence)를 참조 | 보안 정책 및 규정 준수 요구사항 |410| 관리됨 | `managed-settings.json` 및 기타 [관리형 소스](/docs/ko/managed-settings#delivery-mechanisms) | 조직이 배포하는 모든 사용자. 무엇이 이를 재정의할 수 있는지는 [설정 우선순위](#settings-precedence)를 참조 | 보안 정책 및 규정 준수 요구사항 |

411 411 

412파일 열에서 `~/.claude`는 홈 디렉토리의 `.claude` 폴더이고, 단순 `.claude`는 프로젝트 내부의 `.claude` 폴더입니다.412파일 열에서 `~/.claude`는 홈 디렉터리의 `.claude` 폴더이고, 단순 `.claude`는 프로젝트 내부의 `.claude` 폴더입니다.

413 413 

414<span id="where-each-file-applies" />414<span id="where-each-file-applies" />

415 415 


428* **`~/.claude/settings.json`**: 머신의 모든 프로젝트, 팀원의 것이나 클라우드 세션의 것은 제외428* **`~/.claude/settings.json`**: 머신의 모든 프로젝트, 팀원의 것이나 클라우드 세션의 것은 제외

429* **`acme-app/.claude/settings.json`**: 사용자의 `acme-app/`. 파일을 버전 제어에 커밋한 경우에만 팀원의 클론과 클라우드 세션에 도달합니다. 커밋하기 전까지는 다른 파일처럼 디스크의 파일이며 다른 사람은 이를 가지지 않습니다.429* **`acme-app/.claude/settings.json`**: 사용자의 `acme-app/`. 파일을 버전 제어에 커밋한 경우에만 팀원의 클론과 클라우드 세션에 도달합니다. 커밋하기 전까지는 다른 파일처럼 디스크의 파일이며 다른 사람은 이를 가지지 않습니다.

430* **`acme-app/.claude/settings.local.json`**: 사용자의 `acme-app/`만. Claude Code는 파일을 처음 작성할 때 전역 git 제외에 추가하므로 커밋에서 제외됩니다. 수동으로 파일을 생성한 경우 [`.gitignore`에 직접 추가](#keep-personal-settings-out-of-a-repository)합니다.430* **`acme-app/.claude/settings.local.json`**: 사용자의 `acme-app/`만. Claude Code는 파일을 처음 작성할 때 전역 git 제외에 추가하므로 커밋에서 제외됩니다. 수동으로 파일을 생성한 경우 [`.gitignore`에 직접 추가](#keep-personal-settings-out-of-a-repository)합니다.

431* **관리되는 설정**, `managed-settings.json` 파일, MDM 정책, 또는 claude.ai 콘솔의 [서버 관리 설정](/docs/ko/server-managed-settings): 조직이 배포하는 모든 머신의 모든 프로젝트, 또는 조직 계정으로 로그인한 모든 머신. 서버 관리 설정만 클라우드 세션에 도달합니다.431* **관리형 설정**, `managed-settings.json` 파일, MDM 정책, 또는 claude.ai 콘솔의 [서버 관리형 설정](/docs/ko/server-managed-settings): 조직이 배포하는 모든 머신의 모든 프로젝트, 또는 조직 계정으로 로그인한 모든 머신. 서버 관리형 설정만 클라우드 세션에 도달합니다.

432 432 

433<span id="which-files-you-have" />433<span id="which-files-you-have" />

434 434 


443* **사용자** 및 **프로젝트 로컬**: 직접 생성하거나 Claude Code가 생성하도록 합니다. 테마와 같이 사용자 설정에 저장되는 `/config` 메뉴의 옵션을 처음 변경할 때 `~/.claude/settings.json`을 작성하고, Bash 명령에 대해 "Yes, and don't ask again"과 같은 권한 프롬프트에서 처음 승인을 할 때 `.claude/settings.local.json`을 작성합니다. **Show tips**를 포함한 몇 가지 `/config` 옵션은 사용자 파일 대신 `.claude/settings.local.json`에 저장됩니다.443* **사용자** 및 **프로젝트 로컬**: 직접 생성하거나 Claude Code가 생성하도록 합니다. 테마와 같이 사용자 설정에 저장되는 `/config` 메뉴의 옵션을 처음 변경할 때 `~/.claude/settings.json`을 작성하고, Bash 명령에 대해 "Yes, and don't ask again"과 같은 권한 프롬프트에서 처음 승인을 할 때 `.claude/settings.local.json`을 작성합니다. **Show tips**를 포함한 몇 가지 `/config` 옵션은 사용자 파일 대신 `.claude/settings.local.json`에 저장됩니다.

444 444 

445<Info>445<Info>

446 Windows에서 `~/.claude`는 `%USERPROFILE%\.claude`를 의미합니다. 홈 디렉토리 파일을 다른 곳에 보관하려면 [`CLAUDE_CONFIG_DIR`](/docs/ko/env-vars)을 설정합니다. Claude Code는 설정, 세션 기록, 플러그인을 대신 그곳에 저장합니다.446 Windows에서 `~/.claude`는 `%USERPROFILE%\.claude`를 의미합니다. 홈 디렉터리 파일을 다른 곳에 보관하려면 [`CLAUDE_CONFIG_DIR`](/docs/ko/env-vars)을 설정합니다. Claude Code는 설정, 세션 기록, 플러그인을 대신 그곳에 저장합니다.

447</Info>447</Info>

448 448 

449Claude Code는 또한 다섯 번째 파일인 [`~/.claude.json`](/docs/ko/claude-directory#ce-claude-json)을 유지합니다. 이는 Claude Code가 자신을 위해 작성하는 파일이므로 편집할 필요가 없습니다. 로그인 세션, [MCP 서버](/docs/ko/mcp) 구성, 신뢰 결정과 같은 프로젝트별 상태, `/config`가 사용자를 위해 작성하는 [전역 구성 키](/docs/ko/settings-reference#global-config-settings)를 보유합니다.449Claude Code는 또한 다섯 번째 파일인 [`~/.claude.json`](/docs/ko/claude-directory#ce-claude-json)을 유지합니다. 이는 Claude Code가 자신을 위해 작성하는 파일이므로 편집할 필요가 없습니다. 로그인 세션, [MCP 서버](/docs/ko/mcp) 구성, 신뢰 결정과 같은 프로젝트별 상태, `/config`가 사용자를 위해 작성하는 [전역 구성 키](/docs/ko/settings-reference#global-config-settings)를 보유합니다.


486 Claude Code가 git 저장소에서 로컬 파일을 보관하는 위치486 Claude Code가 git 저장소에서 로컬 파일을 보관하는 위치

487</h4>487</h4>

488 488 

489Claude가 Bash 명령을 실행할 권한을 요청하고 "Yes, and don't ask again"을 선택하면, Claude Code는 해당 승인을 `.claude/settings.local.json`의 `allow` 규칙으로 저장합니다. git 저장소의 하위 디렉토리에서 Claude Code를 시작하면 저장소 루트에서 해당 파일을 읽고 작성하며 전체 저장소에 승인을 적용합니다. [worktree](/docs/ko/worktrees)에서는 주 체크아웃의 루트에 있는 파일을 사용합니다.489Claude가 Bash 명령을 실행할 권한을 요청하고 "Yes, and don't ask again"을 선택하면, Claude Code는 해당 승인을 `.claude/settings.local.json`의 `allow` 규칙으로 저장합니다. git 저장소의 하위 디렉터리에서 Claude Code를 시작하면 저장소 루트에서 해당 파일을 읽고 작성하며 전체 저장소에 승인을 적용합니다. [worktree](/docs/ko/worktrees)에서는 주 체크아웃의 루트에 있는 파일을 사용합니다.

490 490 

491두 가지 규칙이 루트 위치를 한정합니다:491두 가지 규칙이 루트 위치를 한정합니다:

492 492 

493* **파일이 `.claude/settings.json` 대신 유지되는 경우**: git 저장소 외부, 저장소 루트가 홈 디렉토리인 경우, Windows에서, 또는 저장소 루트나 `.git` 또는 `.claude` 항목이 사용자가 소유하지 않은 경우.493* **파일이 `.claude/settings.json` 대신 유지되는 경우**: git 저장소 외부, 저장소 루트가 홈 디렉터리인 경우, Windows에서, 또는 저장소 루트나 `.git` 또는 `.claude` 항목이 사용자가 소유하지 않은 경우.

494* **파일의 경로는 저장소 루트에 고정되지 않습니다**: `/`로 시작하거나 상대 샌드박스 경로인 권한 규칙은 [세션의 기본 작업 디렉토리](/docs/ko/permissions#read-and-edit)에 고정됩니다.494* **파일의 경로는 저장소 루트에 고정되지 않습니다**: `/`로 시작하거나 상대 샌드박스 경로인 권한 규칙은 [세션의 기본 작업 디렉터리](/docs/ko/permissions#read-and-edit)에 고정됩니다.

495 495 

496v2.1.211 이전에는 Claude Code가 시작 디렉토리에 파일을 보관했습니다. 이전 버전이 루트 파일 옆에 남긴 파일을 여전히 읽습니다. 두 파일이 동일한 키를 설정하는 경우 루트의 값이 적용되고, 두 파일의 권한 규칙이 적용됩니다. Agent SDK의 [`resolveSettings()`](/docs/ko/agent-sdk/typescript#resolvesettings) 헬퍼는 항상 시작 디렉토리에서 파일을 읽습니다.496v2.1.211 이전에는 Claude Code가 시작 디렉터리에 파일을 보관했습니다. 이전 버전이 루트 파일 옆에 남긴 파일을 여전히 읽습니다. 두 파일이 동일한 키를 설정하는 경우 루트의 값이 적용되고, 두 파일의 권한 규칙이 적용됩니다. Agent SDK의 [`resolveSettings()`](/docs/ko/agent-sdk/typescript#resolvesettings) 헬퍼는 항상 시작 디렉터리에서 파일을 읽습니다.

497 497 

498Claude Code는 공유 `.claude/settings.json`을 세션의 [기본 작업 디렉토리](/docs/ko/permissions#working-directories)에서 읽으므로, 저장소 루트에 커밋된 파일을 사용하려면 거기서 Claude Code를 시작합니다. [`/cd`로 세션을 이동](/docs/ko/permissions#move-the-session-to-another-directory)한 후, Claude Code는 대신 새 디렉토리에서 두 프로젝트 파일을 읽으며, 로컬 파일을 동일한 규칙으로 배치합니다. 이동한 디렉토리에서 읽으려면 Claude Code v2.1.246 이상이 필요합니다.498Claude Code는 공유 `.claude/settings.json`을 세션의 [기본 작업 디렉터리](/docs/ko/permissions#working-directories)에서 읽으므로, 저장소 루트에 커밋된 파일을 사용하려면 거기서 Claude Code를 시작합니다. [`/cd`로 세션을 이동](/docs/ko/permissions#move-the-session-to-another-directory)한 후, Claude Code는 대신 새 디렉터리에서 두 프로젝트 파일을 읽으며, 로컬 파일을 동일한 규칙으로 배치합니다. 이동한 디렉터리에서 읽으려면 Claude Code v2.1.246 이상이 필요합니다.

499 499 

500<span id="managed-settings-delivery" />500<span id="managed-settings-delivery" />

501 501 


511 조직이 적용하는 항목 확인511 조직이 적용하는 항목 확인

512</h3>512</h3>

513 513 

514조직이 Claude Code를 관리하는 경우, 일부 설정은 사용자를 위해 결정되며 자신의 파일에 입력한 것이 이를 변경하지 않습니다. 어떤 것인지 확인하려면 `/status`를 실행합니다. `Setting sources` 줄은 사용자에게 적용되는 관리되는 소스의 이름을 지정합니다. 관리되는 설정은 이 머신에서 Claude Code가 실행되는 모든 곳에 적용됩니다. [개발자가 변경할 수 있는 항목](/docs/ko/managed-settings#what-a-developer-can-change)은 로컬 관리자 권한 및 Claude Code 이외의 도구를 다룹니다.514조직이 Claude Code를 관리하는 경우, 일부 설정은 사용자를 위해 결정되며 자신의 파일에 입력한 것이 이를 변경하지 않습니다. 어떤 것인지 확인하려면 `/status`를 실행합니다. `Setting sources` 줄은 사용자에게 적용되는 관리형 소스의 이름을 지정합니다. 관리형 설정은 이 머신에서 Claude Code가 실행되는 모든 곳에 적용됩니다. [개발자가 변경할 수 있는 항목](/docs/ko/managed-settings#what-a-developer-can-change)은 로컬 관리자 권한 및 Claude Code 이외의 도구를 다룹니다.

515 515 

516관리되는 설정은 관리되는 설정 페이지의 [전달 메커니즘](/docs/ko/managed-settings#delivery-mechanisms)을 통해 사용자에게 도달합니다. 가장 일반적으로:516관리형 설정은 관리형 설정 페이지의 [전달 메커니즘](/docs/ko/managed-settings#delivery-mechanisms)을 통해 사용자에게 도달합니다. 가장 일반적으로:

517 517 

518* [서버 관리 설정](/docs/ko/server-managed-settings), Claude Code가 claude.ai 관리 콘솔 또는 자체 호스팅 [Claude 앱 게이트웨이](/docs/ko/claude-apps-gateway)에서 가져옴518* [서버 관리형 설정](/docs/ko/server-managed-settings), Claude Code가 claude.ai 관리 콘솔 또는 자체 호스팅 [Claude 앱 게이트웨이](/docs/ko/claude-apps-gateway)에서 가져옴

519* MDM 또는 OS 수준 정책, 시스템 디렉토리의 `managed-settings.json` 파일519* MDM 또는 OS 수준 정책, 시스템 디렉터리의 `managed-settings.json` 파일

520* Claude Desktop과 같은 임베딩 호스트, SDK `managedSettings` 옵션을 통해. [임베딩 호스트에서 정책 제어](/docs/ko/managed-settings#parent-settings-from-embedding-hosts)를 참조합니다.520* Claude Desktop과 같은 임베딩 호스트, SDK `managedSettings` 옵션을 통해. [임베딩 호스트에서 정책 제어](/docs/ko/managed-settings#parent-settings-from-embedding-hosts)를 참조합니다.

521 521 

522Claude Desktop 앱에서 머신에서 실행되는 [Cowork](https://claude.com/docs/cowork/overview) 세션에서, Claude Code는 claude.ai 관리 콘솔에서 서버 관리 설정을 가져오지 않으며, 조직의 Claude Desktop 구성이 `requireCoworkFullVmSandbox`를 설정하지 않는 한 디바이스에 배포된 정책을 읽습니다. [정책이 적용되는 위치 및 시기](/docs/ko/managed-settings#where-and-when-a-policy-applies)는 Cowork 및 클라우드 세션을 다룹니다.522Claude Desktop 앱에서 머신에서 실행되는 [Cowork](https://claude.com/docs/cowork/overview) 세션에서, Claude Code는 claude.ai 관리 콘솔에서 서버 관리형 설정을 가져오지 않으며, 조직의 Claude Desktop 구성이 `requireCoworkFullVmSandbox`를 설정하지 않는 한 디바이스에 배포된 정책을 읽습니다. [정책이 적용되는 위치 및 시기](/docs/ko/managed-settings#where-and-when-a-policy-applies)는 Cowork 및 클라우드 세션을 다룹니다.

523 523 

524관리자인 경우, [조직을 위해 Claude Code 설정](/docs/ko/admin-setup)은 적용할 항목 선택을 안내하고, [관리되는 설정 배포](/docs/ko/managed-settings)는 전달 및 정책이 적용 중인지 확인하는 방법을 다룹니다.524관리자인 경우, [조직을 위해 Claude Code 설정](/docs/ko/admin-setup)은 적용할 항목 선택을 안내하고, [관리형 설정 배포](/docs/ko/managed-settings)는 전달 및 정책이 적용 중인지 확인하는 방법을 다룹니다. claude.ai 관리 콘솔의 관리형 설정 편집기에 표시될 수 있는 경고는 [서버 관리형 설정 구성](/docs/ko/server-managed-settings#configure-server-managed-settings)을 참조합니다.

525 525 

526<h2 id="change-a-setting">526<h2 id="change-a-setting">

527 설정 변경527 설정 변경


809 809 

810[클라우드 세션](/docs/ko/claude-code-on-the-web)은 [클라우드 환경](/docs/ko/cloud-environments)에서 저장소의 신선한 복제본에서 실행되며, 머신에서 실행되지 않습니다. 이는 어느 설정이 도달하는지 변경합니다:810[클라우드 세션](/docs/ko/claude-code-on-the-web)은 [클라우드 환경](/docs/ko/cloud-environments)에서 저장소의 신선한 복제본에서 실행되며, 머신에서 실행되지 않습니다. 이는 어느 설정이 도달하는지 변경합니다:

811 811 

812* **공유 프로젝트 설정** (`.claude/settings.json`): 한 저장소가 있는 세션에서 읽습니다. 파일이 복제본의 일부이고 세션이 그 안에서 시작되기 때문입니다. 해당 세션에 적용하려면 설정을 거기에 커밋합니다. 여러 저장소가 있는 세션은 복제본 위에서 시작되고 각 저장소의 `.claude/settings.json`에서 `enabledPlugins` 및 `extraKnownMarketplaces` 키만 읽으며, 권한 규칙, hooks, `env` 또는 기타 키는 읽지 않습니다. 이 두 키가 선언하는 마켓플레이스와 플러그인은 여전히 [클라우드 세션에서 로드되지 않습니다](/docs/ko/cloud-environments#what-carries-over-from-your-setup).812* **공유 프로젝트 설정** (`.claude/settings.json`): 한 저장소가 있는 세션에서 읽습니다. 파일이 복제본의 일부이고 세션이 그 안에서 시작되기 때문입니다. 해당 세션에 적용하려면 설정을 거기에 커밋합니다. Anthropic 호스팅 환경에서 여러 저장소가 있는 세션은 복제본 위에서 시작되고 각 저장소의 `.claude/settings.json`에서 `enabledPlugins` 및 `extraKnownMarketplaces` 키만 읽으며, 권한 규칙, 훅, `env` 또는 기타 키는 읽지 않습니다. 이 두 키가 선언하는 마켓플레이스와 플러그인은 여전히 [클라우드 세션에서 로드되지 않습니다](/docs/ko/cloud-environments#what-carries-over-from-your-setup). 자체 호스팅 환경의 경우 [어느 저장소의 설정이 적용되는지](/docs/ko/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories)를 참조하세요.

813* **사용자 및 프로젝트 로컬 설정** (`~/.claude/settings.json` 및 `.claude/settings.local.json`): 읽지 않습니다. 둘 다 머신에 유지되고 로컬 파일은 복제본에 없습니다.813* **사용자 및 프로젝트 로컬 설정** (`~/.claude/settings.json` 및 `.claude/settings.local.json`): 읽지 않습니다. 둘 다 머신에 유지되고 로컬 파일은 복제본에 없습니다.

814* **관리되는 설정**: 장치의 `managed-settings.json` 파일이나 MDM 프로필은 클라우드 세션에 도달하지 않습니다. 조직의 [서버 관리 설정](/docs/ko/server-managed-settings)은 도달합니다. [표면 범위](/docs/ko/model-config#surface-coverage)는 어느 클라우드 세션이 이를 수신하는지 나열합니다. [자체 호스팅 환경](/docs/ko/self-hosted-environments)도 실행기 이미지의 관리되는 설정 파일을 읽습니다. [Claude Code가 관리되는 소스를 결합하는 방식](/docs/ko/managed-settings#how-claude-code-combines-managed-sources)은 해당 파일이 적용되는 시기를 설명합니다.814* **관리되는 설정**: 장치의 `managed-settings.json` 파일이나 MDM 프로필은 클라우드 세션에 도달하지 않습니다. 조직의 [서버 관리 설정](/docs/ko/server-managed-settings)은 도달합니다. [표면 범위](/docs/ko/model-config#surface-coverage)는 어느 클라우드 세션이 이를 수신하는지 나열합니다. [자체 호스팅 환경](/docs/ko/self-hosted-environments)도 실행기 이미지의 관리되는 설정 파일을 읽습니다. [Claude Code가 관리되는 소스를 결합하는 방식](/docs/ko/managed-settings#how-claude-code-combines-managed-sources)은 해당 파일이 적용되는 시기를 설명합니다.

815* **`/config`**: 브라우저에서 claude.ai/code에서 설정 값을 변경하는 대신 claude.ai 설정의 Claude Code 섹션을 엽니다. 클라우드 세션에 대해 설정을 변경하려면 환경에서 [환경 변수](/docs/ko/cloud-environments#set-environment-variables)를 설정하거나, 한 저장소가 있는 세션에서 해당 저장소의 `.claude/settings.json`에 키를 커밋합니다.815* **`/config`**: 브라우저에서 claude.ai/code에서 설정 값을 변경하는 대신 claude.ai 설정의 Claude Code 섹션을 엽니다. 클라우드 세션에 대해 설정을 변경하려면 환경에서 [환경 변수](/docs/ko/cloud-environments#set-environment-variables)를 설정하거나, 한 저장소가 있는 세션에서 해당 저장소의 `.claude/settings.json`에 키를 커밋합니다.

skills.md +2 −0

Details

94| `migrate` | 기존 Claude API 코드를 최신 모델에 맞게 업데이트 | v2.1.221 이전 |94| `migrate` | 기존 Claude API 코드를 최신 모델에 맞게 업데이트 | v2.1.221 이전 |

95| `upgrade` | 프로젝트의 Anthropic SDK 의존성을 메이저 버전 간에 이전(현재는 Python `anthropic` 패키지를 0.x에서 1.x로) | v2.1.236 이상 |95| `upgrade` | 프로젝트의 Anthropic SDK 의존성을 메이저 버전 간에 이전(현재는 Python `anthropic` 패키지를 0.x에서 1.x로) | v2.1.236 이상 |

96| `managed-agents-onboard` | 새 Managed Agent 생성 과정을 단계별로 안내 | v2.1.221 이전 |96| `managed-agents-onboard` | 새 Managed Agent 생성 과정을 단계별로 안내 | v2.1.221 이전 |

97| `managed-agents-onboard <url>` | [Managed Agents 문서](https://platform.claude.com/docs/en/managed-agents/overview)의 페이지 등 해당 URL의 페이지에 설명된 Managed Agent를 구축 | v2.1.290 이상 |

98| `managed-agents-onboard <quickstart-name>` | `deep-researcher` 등 Console의 빠른 시작 템플릿 중 하나를 구축. 템플릿 이름이 아닌 단어 하나를 입력하면 Claude가 유효한 이름 목록을 표시 | v2.1.290 이상 |

97| `prompt-audit` | 프롬프트, 스킬, 도구 설명에서 이전 모델용으로 작성된 지침에 플래그를 지정하고 수정 사항을 diff로 제안 | v2.1.221 이상 |99| `prompt-audit` | 프롬프트, 스킬, 도구 설명에서 이전 모델용으로 작성된 지침에 플래그를 지정하고 수정 사항을 diff로 제안 | v2.1.221 이상 |

98| `cost-optimize` | 프로젝트의 Claude API 지출이 어디에 쓰이는지 프로파일링하고, 프롬프트 캐싱, 불필요한 입력 및 출력 토큰 줄이기, 배치 처리, effort, 모델 선택 등의 옵션을 통한 절감 방안을 한 번에 하나씩 제안 | v2.1.247 이상 |100| `cost-optimize` | 프로젝트의 Claude API 지출이 어디에 쓰이는지 프로파일링하고, 프롬프트 캐싱, 불필요한 입력 및 출력 토큰 줄이기, 배치 처리, effort, 모델 선택 등의 옵션을 통한 절감 방안을 한 번에 하나씩 제안 | v2.1.247 이상 |

99| `build-eval` | Claude 기반 앱을 위한 평가 세트 구축 | v2.1.259 이상 |101| `build-eval` | Claude 기반 앱을 위한 평가 세트 구축 | v2.1.259 이상 |

sub-agents.md +4 −2

Details

609주 대화의 권한 모드는 Claude Code가 설정한 값을 사용하는지 결정합니다:609주 대화의 권한 모드는 Claude Code가 설정한 값을 사용하는지 결정합니다:

610 610 

611* 주 대화가 `bypassPermissions`, `acceptEdits`, 또는 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)에 있을 때, 서브에이전트는 동일한 모드에서 실행되고 Claude Code는 설정한 `permissionMode`를 무시합니다. 자동 모드에서, 분류자는 주 대화의 차단 및 허용 규칙으로 서브에이전트의 도구 호출을 평가합니다. 서브에이전트가 완료되면, 분류자는 보고서가 전달되기 전에 작업과 최종 보고서도 검토합니다. [자동 모드가 서브에이전트를 처리하는 방법](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)을 참조하세요.611* 주 대화가 `bypassPermissions`, `acceptEdits`, 또는 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)에 있을 때, 서브에이전트는 동일한 모드에서 실행되고 Claude Code는 설정한 `permissionMode`를 무시합니다. 자동 모드에서, 분류자는 주 대화의 차단 및 허용 규칙으로 서브에이전트의 도구 호출을 평가합니다. 서브에이전트가 완료되면, 분류자는 보고서가 전달되기 전에 작업과 최종 보고서도 검토합니다. [자동 모드가 서브에이전트를 처리하는 방법](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)을 참조하세요.

612* 주 대화가 `default`, `dontAsk`, 또는 `plan` 모드에 있을 때, 서브에이전트는 설정한 권한 모드에서 실행됩니다. `bypassPermissions` 제외. `bypassPermissions`를 선언하는 서브에이전트는 주 대화의 모드를 대신 유지합니다. `bypassPermissions` 예외는 Claude Code v2.1.267 이상이 필요합니다.612* 주 대화가 `default`, `dontAsk`, 또는 `plan` 모드일 때, 서브에이전트는 설정한 권한 모드에서 실행됩니다. 다음 경우에는 대신 주 대화의 권한 모드를 유지합니다:

613 * `bypassPermissions`를 설정한 경우. `bypassPermissions` 예외는 Claude Code v2.1.267 이상이 필요합니다.

614 * `auto`를 설정했지만 서브에이전트에서 [자동 모드를 사용할 수 없는](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode) 경우. 예를 들어 설정 파일이 [`disableAutoMode`](/docs/ko/settings-reference#disableautomode)를 설정했거나 서브에이전트의 모델이 자동 모드를 지원하지 않는 경우입니다.

613 615 

614`permissionMode`는 이러한 값을 허용하며, `manual`을 `default`의 별칭으로 허용합니다:616`permissionMode`는 이러한 값을 허용하며, `manual`을 `default`의 별칭으로 허용합니다:

615 617 


640Implement API endpoints. Follow the conventions and patterns from the preloaded skills.642Implement API endpoints. Follow the conventions and patterns from the preloaded skills.

641```643```

642 644 

643나열된 각 스킬의 전체 내용은 시작 시 서브에이전트의 컨텍스트에 주입됩니다. 이 필드는 서브에이전트가 실행 중에 발견하고 호출할 수 있는 스킬을 제어하지 않습니다. 이 필드는 미리 로드할 스킬을 제어합니다. 이 필드 없이, 서브에이전트는 여전히 실행 중에 스킬 도구를 통해 프로젝트, 사용자, 및 플러그인 스킬을 발견하고 호출할 수 있습니다. 서브에이전트가 스킬을 완전히 호출하지 못하도록 하려면, [`tools`](#available-tools) 목록에서 `Skill`을 생략하거나 `disallowedTools`에 추가하세요.645나열된 각 스킬의 전체 내용은 목록의 처음 32개 고유 이름까지 시작 시 서브에이전트의 컨텍스트에 주입됩니다. 이 필드는 서브에이전트가 접근할 수 있는 스킬이 아니라 미리 로드할 스킬을 제어합니다. 이 필드가 없어도 서브에이전트는 실행 중에 Skill 도구를 통해 프로젝트, 사용자, 및 플러그인 스킬을 발견하고 호출할 수 있습니다. 서브에이전트가 스킬을 아예 호출하지 못하도록 하려면, [`tools`](#available-tools) 목록에서 `Skill`을 생략하거나 `disallowedTools`에 추가하세요.

644 646 

645[`disable-model-invocation: true`](/docs/ko/skills#control-who-invokes-a-skill)를 설정한 스킬은 미리 로드할 수 없습니다. 미리 로드는 Claude가 호출할 수 있는 스킬 세트에서 가져오기 때문입니다. 여기에는 Claude가 스스로 실행할 수 없는 번들 `/verify` 스킬도 포함됩니다.647[`disable-model-invocation: true`](/docs/ko/skills#control-who-invokes-a-skill)를 설정한 스킬은 미리 로드할 수 없습니다. 미리 로드는 Claude가 호출할 수 있는 스킬 세트에서 가져오기 때문입니다. 여기에는 Claude가 스스로 실행할 수 없는 번들 `/verify` 스킬도 포함됩니다.

646 648 

Details

666 666 

667* WebFetch는 요청을 하기 전에 `localhost` 및 점이 없는 다른 호스트명(예: 베어 인트라넷 이름)을 거부합니다. [반환되는 오류](/docs/ko/errors#webfetch-cannot-fetch-localhost)는 Claude에 Bash를 통해 `curl`로 로컬 서버에 도달하도록 지시합니다.667* WebFetch는 요청을 하기 전에 `localhost` 및 점이 없는 다른 호스트명(예: 베어 인트라넷 이름)을 거부합니다. [반환되는 오류](/docs/ko/errors#webfetch-cannot-fetch-localhost)는 Claude에 Bash를 통해 `curl`로 로컬 서버에 도달하도록 지시합니다.

668* HTTP URL은 자동으로 HTTPS로 업그레이드됩니다.668* HTTP URL은 자동으로 HTTPS로 업그레이드됩니다.

669* 큰 페이지는 처리 전에 고정된 문자 제한으로 잘립니다.669* WebFetch는 호출당 페이지 콘텐츠를 최대 100,000자까지 읽습니다. Claude Code v2.1.290 이상에서는 더 긴 페이지에 대한 결과가 읽지 않은 분량을 Claude에 알려 주므로, Claude가 다음 부분을 가져올 수 있습니다.

670* WebFetch는 기본적으로 각 응답을 15분 동안 캐시하므로, 동일한 URL의 반복된 가져오기가 빠르게 반환됩니다. Claude Code v2.1.233 이상에서는 [`CLAUDE_CODE_WEBFETCH_CACHE_TTL_MS`](/docs/ko/env-vars#variables)를 설정하여 WebFetch가 각 응답을 유지하는 기간을 변경할 수 있습니다.670* WebFetch는 기본적으로 각 응답을 15분 동안 캐시하므로, 동일한 URL의 반복된 가져오기가 빠르게 반환됩니다. Claude Code v2.1.233 이상에서는 [`CLAUDE_CODE_WEBFETCH_CACHE_TTL_MS`](/docs/ko/env-vars#variables)를 설정하여 WebFetch가 각 응답을 유지하는 기간을 변경할 수 있습니다.

671* 5분 이내에 다운로드를 완료하지 못한 페이지(WebFetch가 따라가는 모든 리디렉션 포함)는 마감 오류로 실패합니다. Claude Code v2.1.268 이상에서는 [`CLAUDE_CODE_WEBFETCH_DEADLINE_MS`](/docs/ko/env-vars#variables)를 설정하여 제한을 변경하거나, `0`으로 설정하여 제거할 수 있습니다.671* 5분 이내에 다운로드를 완료하지 못한 페이지(WebFetch가 따라가는 모든 리디렉션 포함)는 마감 오류로 실패합니다. Claude Code v2.1.268 이상에서는 [`CLAUDE_CODE_WEBFETCH_DEADLINE_MS`](/docs/ko/env-vars#variables)를 설정하여 제한을 변경하거나, `0`으로 설정하여 제거할 수 있습니다.

672* URL이 다른 호스트로 리디렉션될 때, WebFetch는 원본 URL과 리디렉션 대상을 이름으로 지정하는 텍스트 결과를 반환하고 따라가지 않습니다. 그러면 Claude는 두 번째 WebFetch 호출로 새 URL을 가져옵니다.672* URL이 다른 호스트로 리디렉션될 때, WebFetch는 원본 URL과 리디렉션 대상을 이름으로 지정하는 텍스트 결과를 반환하고 따라가지 않습니다. 그러면 Claude는 두 번째 WebFetch 호출로 새 URL을 가져옵니다.

ultrareview.md +6 −6

Details

56 풀 요청 검토56 풀 요청 검토

57</h3>57</h3>

58 58 

59로컬 브랜치 대신 GitHub 풀 요청을 검토하려면 PR 번호를 전달합니다:59로컬 브랜치 대신 `github.com`의 풀 리퀘스트를 검토하려면 PR 번호를 전달합니다:

60 60 

61```text theme={null}61```text theme={null}

62/code-review ultra 123462/code-review ultra 1234


64 64 

65명령은 또한 `#1234`, `PR 1234` 및 붙여넣은 PR URL을 허용합니다. 붙여넣은 URL은 현재 디렉토리의 저장소를 가리켜야 합니다.65명령은 또한 `#1234`, `PR 1234` 및 붙여넣은 PR URL을 허용합니다. 붙여넣은 URL은 현재 디렉토리의 저장소를 가리켜야 합니다.

66 66 

67PR 모드에서 클라우드 샌드박스는 로컬 작업 트리를 번들로 묶는 대신 호스트에서 직접 풀 요청을 복제합니다. PR 모드는 `github.com`의 저장소 및 관리자가 Claude Code에 연결한 [GitHub Enterprise Server](/docs/ko/github-enterprise-server) 인스턴스에서 작동합니다.67PR 모드에는 `github.com`의 저장소가 필요합니다. [GitHub Enterprise Server](/docs/ko/github-enterprise-server) 인스턴스의 저장소인 경우 PR 번호 없이 `/code-review ultra`를 실행하여 대신 로컬 브랜치를 검토합니다.

68 68 

69`github.com`의 저장소의 경우 샌드박스는 Claude 계정에 연결된 GitHub 계정으로 복제하므로 계정이 PR의 저장소를 읽을 수 있어야 합니다.69PR 모드에서 클라우드 샌드박스는 작업 트리를 업로드하는 대신 `github.com`에서 풀 리퀘스트를 복제합니다. Claude 계정에 연결된 GitHub 계정을 사용하므로 해당 계정에 저장소에 대한 읽기 권한이 있어야 합니다.

70 70 

71GitHub CLI 로그인을 Claude 계정에 연결하려면 [`/web-setup`](/docs/ko/web-quickstart#connect-from-your-terminal)을 실행합니다.71GitHub CLI 로그인을 Claude 계정에 연결하려면 [`/web-setup`](/docs/ko/web-quickstart#connect-from-your-terminal)을 실행합니다.

72 72 


74 풀 요청에 결과 게시74 풀 요청에 결과 게시

75</h3>75</h3>

76 76 

77Claude Code v2.1.227 이상에서 `github.com`의 풀 요청을 검토할 때 Claude가 완료된 결과를 PR에 자신의 GitHub 계정에서 단일 일반 댓글로 게시하도록 할 수 있습니다. 댓글은 리뷰나 승인이 아니며 "Generated by Claude Code" 메모로 끝납니다. 브랜치 또는 GitHub Enterprise Server 풀 요청을 검토할 때 Claude Code는 세션에만 결과를 표시합니다.77Claude Code v2.1.227 이상에서 `github.com`의 풀 리퀘스트를 검토할 때 Claude가 완료된 결과를 PR에 자신의 GitHub 계정에서 단일 일반 댓글로 게시하도록 할 수 있습니다. 댓글은 리뷰나 승인이 아니며 "Generated by Claude Code" 메모로 끝납니다. 브랜치를 검토할 때 Claude Code는 세션에만 결과를 표시합니다.

78 78 

79Claude Code는 해당 실행에서 선택하지 않는 한 게시하지 않으며 `--no-post`가 기본값입니다. 게시는 각 실행에 대해 선택하는 사항입니다:79Claude Code는 해당 실행에서 선택하지 않는 한 게시하지 않으며 `--no-post`가 기본값입니다. 게시는 각 실행에 대해 선택하는 사항입니다:

80 80 


106Claude Code는 텍스트에 두 개 이상의 단어가 있고 브랜치 이름이나 PR 참조가 아닐 때만 메모로 취급합니다. 단일 단어를 브랜치 이름이나 PR 참조로 읽으므로 오타가 있는 브랜치 이름은 [다른 기본에 대해 검토](#review-against-a-different-base)의 가장 가까운 브랜치 오류를 받습니다. 텍스트가 `check PR 123 again`과 같은 다른 단어와 PR 참조를 결합하면 Claude Code도 시작하지 않습니다. 대신 PR 번호만으로 다시 실행하여 해당 PR을 검토하거나 참조 없이 현재 브랜치를 검토하도록 요청합니다.106Claude Code는 텍스트에 두 개 이상의 단어가 있고 브랜치 이름이나 PR 참조가 아닐 때만 메모로 취급합니다. 단일 단어를 브랜치 이름이나 PR 참조로 읽으므로 오타가 있는 브랜치 이름은 [다른 기본에 대해 검토](#review-against-a-different-base)의 가장 가까운 브랜치 오류를 받습니다. 텍스트가 `check PR 123 again`과 같은 다른 단어와 PR 참조를 결합하면 Claude Code도 시작하지 않습니다. 대신 PR 번호만으로 다시 실행하여 해당 PR을 검토하거나 참조 없이 현재 브랜치를 검토하도록 요청합니다.

107 107 

108<Tip>108<Tip>

109 저장소가 너무 커서 번들로 묶을 수 없는 경우 Claude Code는 대신 PR 모드를 사용하도록 요청합니다. 브랜치를 푸시하고 초안 PR을 열고 `/code-review ultra <PR-number>`를 실행합니다.109 저장소가 너무 커서 번들로 묶을 수 없는 경우 Claude Code는 대신 PR 모드를 사용하도록 요청합니다. `github.com`의 저장소인 경우 브랜치를 푸시하고 초안 PR을 연 다음 `/code-review ultra <PR-number>`를 실행합니다.

110</Tip>110</Tip>

111 111 

112<h3 id="diff-limits-and-fallbacks">112<h3 id="diff-limits-and-fallbacks">


173claude ultrareview origin/main173claude ultrareview origin/main

174```174```

175 175 

176인수 없이 하위 명령은 현재 브랜치와 기본 브랜치 간의 diff를 검토하며, 병합 기반이 없을 때 `/code-review ultra`와 동일한 [전체 저장소 폴백](#diff-limits-and-fallbacks)을 사용합니다. PR 번호를 전달하여 풀 리퀘스트를 검토하거나, 기본 브랜치를 전달하여 해당 브랜치에 대해 검토합니다. [기본 브랜치 처리](#review-against-a-different-base)는 대화형 명령과 일치합니다.176인수 없이 하위 명령은 현재 브랜치와 기본 브랜치 간의 diff를 검토하며, 병합 기반이 없을 때 `/code-review ultra`와 동일한 [전체 저장소 폴백](#diff-limits-and-fallbacks)을 사용합니다. PR 번호를 전달하여 [`github.com`의 풀 리퀘스트를 리뷰](#review-a-pull-request)하거나, 기본 브랜치를 전달하여 해당 브랜치에 대해 검토합니다. [기본 브랜치 처리](#review-against-a-different-base)는 대화형 명령과 일치합니다.

177 177 

178하위 명령을 실행하면 전체 저장소 폴백과 청구 및 약관 프롬프트에 동의하므로 입력을 기다리지 않고 실행이 시작됩니다. 직접 실행하는 것이 동의로 간주됩니다. Claude가 예를 들어 Bash 도구를 통해 대신 하위 명령을 실행할 때 Claude Code는 전체 저장소 리뷰를 거부합니다.178하위 명령을 실행하면 전체 저장소 폴백과 청구 및 약관 프롬프트에 동의하므로 입력을 기다리지 않고 실행이 시작됩니다. 직접 실행하는 것이 동의로 간주됩니다. Claude가 예를 들어 Bash 도구를 통해 대신 하위 명령을 실행할 때 Claude Code는 전체 저장소 리뷰를 거부합니다.

179 179 

workflows.md +55 −29

Details

264Claude는 목록을 구조화된 데이터로 전달하므로 스크립트는 먼저 구문 분석하지 않고도 `args`에서 배열 및 객체 메서드를 직접 호출할 수 있습니다. `args`가 생략되면 스크립트 내부의 전역 변수는 `undefined`입니다.264Claude는 목록을 구조화된 데이터로 전달하므로 스크립트는 먼저 구문 분석하지 않고도 `args`에서 배열 및 객체 메서드를 직접 호출할 수 있습니다. `args`가 생략되면 스크립트 내부의 전역 변수는 `undefined`입니다.

265 265 

266<h2 id="example-workflow-prompts">266<h2 id="example-workflow-prompts">

267 예제 워크플로우 프롬프트267 워크플로 프롬프트 예시

268</h2>268</h2>

269 269 

270워크플로우는 작업이 한 에이전트가 컨텍스트에 보유할 수 있는 것보다 크거나, 같은 단계를 많은 항목에 걸쳐 실행해야 할 때 가장 적합합니다. 아래 프롬프트는 일반적인 형태를 보여줍니다. 각각은 Claude에게 해당 작업을 위한 워크플로우를 작성하고 실행하도록 요청합니다; 스크립트를 직접 작성하지 않습니다.270워크플로는 작업이 하나의 에이전트가 컨텍스트에 담을 수 있는 범위보다 크거나, 같은 단계를 여러 항목에 걸쳐 실행해야 할 때 가장 적합합니다. 아래 프롬프트는 일반적인 형태를 보여 줍니다. 각 프롬프트는 Claude에게 해당 작업을 위한 워크플로를 작성하고 실행하도록 요청하므로, 스크립트를 직접 작성할 필요가 없습니다.

271 271 

272<h3 id="audit-many-files-for-the-same-issue">272<h3 id="audit-many-files-for-the-same-issue">

273 많은 파일을 같은 문제에 대해 감사하기273 여러 파일에서 같은 문제 감사하기

274</h3>274</h3>

275 275 

276파일당 하나의 에이전트를 확산시킨 후 발견 사항을 수집하고 검증합니다.276파일마다 에이전트를 하나씩 분산 실행한 다음, 발견 사항을 수집하고 검증합니다.

277 277 

278```text wrap theme={null}278```text wrap theme={null}

279use a workflow to audit every route handler under src/routes/ for missing authentication checks, and adversarially verify each finding before reporting it279use a workflow to audit every route handler under src/routes/ for missing authentication checks, and adversarially verify each finding before reporting it

280```280```

281 281 

282<h3 id="keep-fixing-until-a-check-passes">282<h3 id="keep-fixing-until-a-check-passes">

283 검사가 통과할 때까지 계속 수정하기283 검사를 통과할 때까지 계속 수정하기

284</h3>284</h3>

285 285 

286검사기를 실행하고, 실패한 것을 수정하며, 통과하거나 진행이 멈출 때까지 반복합니다.286검사기를 실행하고, 실패한 부분을 수정한 뒤, 통과하거나 더 이상 진전이 없을 때까지 반복합니다.

287 287 

288```text wrap theme={null}288```text wrap theme={null}

289use a workflow to run npx tsc --noEmit and keep fixing the reported errors until the type check passes or two rounds in a row make no progress289use a workflow to run npx tsc --noEmit and keep fixing the reported errors until the type check passes or two rounds in a row make no progress

290```290```

291 291 

292<h3 id="migrate-many-files-in-parallel">292<h3 id="migrate-many-files-in-parallel">

293 많은 파일을 병렬로 마이그레이션하기293 여러 파일을 병렬로 마이그레이션하기

294</h3>294</h3>

295 295 

296마이그레이션할 파일을 발견하고, 편집이 충돌하지 않도록 각각을 격리된 복사본에서 변환하며, 각 결과를 검증합니다.296마이그레이션할 파일을 찾고, 편집이 충돌하지 않도록 각 파일을 격리된 사본에서 변환한 다음, 각 결과를 검증합니다.

297 297 

298```text wrap theme={null}298```text wrap theme={null}

299use a workflow to migrate every component under src/components/ from JavaScript to TypeScript, working on each file in its own isolated copy299use a workflow to migrate every component under src/components/ from JavaScript to TypeScript, working on each file in its own isolated copy

300```300```

301 301 

302<h3 id="review-every-changed-file-and-write-one-summary">302<h3 id="review-every-changed-file-and-write-one-summary">

303 모든 변경된 파일을 검토하고 하나의 요약 작성하기303 변경된 모든 파일을 리뷰하고 하나의 요약 작성하기

304</h3>304</h3>

305 305 

306파일당 하나의 검토자를 실행한 후 모든 발견 사항을 하나의 에이전트에 전달하여 순위를 매기고 중복을 제거합니다.306파일마다 리뷰어를 실행한 다음, 모든 발견 사항을 하나의 에이전트에 전달하여 순위를 매기고 중복을 제거합니다.

307 307 

308```text wrap theme={null}308```text wrap theme={null}

309use a workflow to review every file changed in this PR for correctness issues, then merge the per-file findings into one ranked summary309use a workflow to review every file changed in this PR for correctness issues, then merge the per-file findings into one ranked summary

310```310```

311 311 

312<h3 id="research-a-topic-across-many-sources">312<h3 id="research-a-topic-across-many-sources">

313 많은 소스에서 주제 연구하기313 여러 출처에 걸쳐 주제 조사하기

314</h3>314</h3>

315 315 

316변경 로그, 문제, 문서에 걸쳐 읽기를 확산시킨 후 종합합니다. 번들된 `/deep-research` 워크플로우가 이를 수행합니다; 더 좁은 버전을 설명할 수도 있습니다.316변경 로그, 이슈, 문서에 걸쳐 리더를 분산 실행한 다음 종합합니다. 번들로 제공되는 `/deep-research` 워크플로가 이 작업을 수행하며, 더 좁은 범위의 버전을 직접 설명할 수도 있습니다.

317 317 

318```text wrap theme={null}318```text wrap theme={null}

319use a workflow to research how our three competitors handle rate limiting: read their public docs and recent changelog entries in parallel, then compare the approaches319use a workflow to research how our three competitors handle rate limiting: read their public docs and recent changelog entries in parallel, then compare the approaches

320```320```

321 321 

322<h3 id="find-issues-until-the-list-stops-growing">322<h3 id="find-issues-until-the-list-stops-growing">

323 목록이 더 이상 증가할 때까지 문제 찾기323 목록이 더 이상 늘어나지 않을 때까지 문제 찾기

324</h3>324</h3>

325 325 

326라운드에서 계속 검색하고 새 라운드가 새로운 것을 찾지 못하면 중지합니다.326여러 라운드에 걸쳐 계속 탐색하고, 새 라운드에서 새로운 것이 발견되지 않으면 중단합니다.

327 327 

328```text wrap theme={null}328```text wrap theme={null}

329use a workflow to find flaky tests in this repo: run the suite repeatedly, record which tests fail intermittently, and stop once two rounds in a row find nothing new329use a workflow to find flaky tests in this repo: run the suite repeatedly, record which tests fail intermittently, and stop once two rounds in a row find nothing new

330```330```

331 331 

332<h3 id="what-the-saved-script-looks-like">332<h3 id="what-the-saved-script-looks-like">

333 저장된 스크립트가 어떻게 보이는지333 저장된 스크립트의 모습

334</h3>334</h3>

335 335 

336[워크플로우를 저장](#save-the-workflow-for-reuse)하면 `.claude/workflows/`의 파일은 `meta` 블록 다음에 서브에이전트를 조율하는 스크립트 본문을 보유합니다. 일반적으로 편집할 필요가 없지만, 여기는 Claude가 생성한 것을 인식할 수 있도록 작은 것의 형태입니다:336[워크플로를 저장](#save-the-workflow-for-reuse)하면 `.claude/workflows/`의 파일에는 `meta` 블록과 그 뒤에 서브에이전트를 오케스트레이션하는 스크립트 본문이 담깁니다. 일반적으로 이 파일을 편집할 필요는 없지만, Claude가 생성한 내용을 알아볼 수 있도록 작은 스크립트의 형태를 아래에 보여 드립니다.

337 337 

338```javascript theme={null}338```javascript theme={null}

339export const meta = {339export const meta = {


352return audits.filter(Boolean)352return audits.filter(Boolean)

353```353```

354 354 

355본문은 최상위 `await`를 포함한 순수 JavaScript입니다. `agent()`는 하나의 서브에이전트를 생성하고, `pipeline()`은 목록의 각 항목당 하나를 실행하며, `parallel()`은 에이전트 작업 집합을 동시에 실행하고 모두가 완료될 때까지 기다립니다.355본문은 최상위 `await`를 사용하는 일반 JavaScript입니다. `agent()`는 서브에이전트 하나를 생성하고, `pipeline()`은 목록의 항목마다 하나씩 실행하며, `parallel()`은 에이전트 작업 집합을 동시에 실행하고 모두 완료될 때까지 기다립니다.

356 356 

357`agent()` 호출은 실행 중에 중지하거나 복구 불가능한 API 오류가 발생하면 `null`로 해결됩니다. `pipeline()`은 결과 배열에 각 `null`을 유지하므로, 예제는 해당 항목을 제거하기 위해 `.filter(Boolean)`으로 끝납니다.357사용자가 실행 도중에 `agent()` 호출을 중지하거나 해당 호출이 복구할 수 없는 API 오류를 만나면, 호출은 `null`로 확인됩니다. `pipeline()`은 각 `null`을 결과 배열에 그대로 유지하므로, 예시는 [모든 시도에서 멈춘 에이전트](#when-an-agent-stalls-and-restarts)의 슬롯을 포함한 해당 항목을 제거하기 위해 `.filter(Boolean)`으로 끝납니다.

358 358 

359[자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)에서 스크립트가 `agent()`에 전달하는 프롬프트는 분류기가 해당 서브에이전트의 작업을 검토할 때 사용자로부터의 요청으로 계산되지 않습니다. Claude Code는 이를 스크립트가 계산한 텍스트로 표시하기 때문입니다.359[자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)에서 분류기가 서브에이전트의 작업을 검토할 때, 스크립트가 `agent()`에 전달하는 프롬프트는 사용자의 요청으로 간주되지 않습니다. Claude Code가 이를 스크립트가 계산한 텍스트로 표시하기 때문입니다.

360 360 

361`agent()` 호출에 `schema`를 전달하면, 서브에이전트는 산문 대신 형태와 일치하는 JSON을 반환합니다. Claude Code는 서브에이전트를 시작하기 전에 스키마를 확인합니다: 스키마가 자신과 모순된다는 것을 증명할 수 있을 때, 호출은 모순을 명명하는 오류로 실패하며, 서브에이전트는 시작되지 않습니다. 증명할 수 있는 한 가지 모순은 `additionalProperties: false`가 제외하는 `required` 키입니다.361`agent()` 호출에 `schema`를 전달하면, 해당 서브에이전트는 산문 대신 그 형태에 맞는 JSON을 반환합니다. Claude Code는 서브에이전트를 시작하기 전에 스키마를 검사합니다. 스키마가 자기모순임을 증명할 수 있으면 호출은 해당 모순을 명시한 오류와 함께 실패하며, 서브에이전트는 시작되지 않습니다. 증명할 수 있는 모순의 한 예는 `additionalProperties: false`가 배제하는 `required` 키입니다.

362 362 

363서브에이전트의 출력이 5번의 시도 후에도 검증에 실패하면, 호출은 마지막 검증 실패를 포함하는 오류로 실패합니다. 시도 횟수를 변경하려면 [`MAX_STRUCTURED_OUTPUT_RETRIES`](/docs/ko/env-vars)를 설정하십시오.363서브에이전트의 출력이 다섯 번 시도한 후에도 여전히 검증에 실패하면, 호출은 마지막 검증 실패 내용을 포함한 오류와 함께 실패합니다. 시도 횟수를 변경하려면 [`MAX_STRUCTURED_OUTPUT_RETRIES`](/docs/ko/env-vars)를 설정합니다.

364 364 

365<h3 id="edit-a-saved-script">365<h3 id="edit-a-saved-script">

366 저장된 스크립트 편집하기366 저장된 스크립트 편집하기

367</h3>367</h3>

368 368 

369[저장한 워크플로우](#save-the-workflow-for-reuse)를 변경하려면 해당 `.js` 파일을 편집하거나 Claude에게 변경을 요청하십시오. 편집하거나 요청하기 전에 `/workflow-authoring` [번들된 스킬](/docs/ko/skills#bundled-skills)을 실행하여 Claude가 작동하는 스크립트 작성 참조를 로드하십시오. 스킬에는 Claude Code v2.1.248 이상이 필요합니다.369[저장한 워크플로](#save-the-workflow-for-reuse)를 변경하려면 해당 `.js` 파일을 편집하거나 Claude에게 변경을 요청합니다. 편집하거나 요청하기 전에 `/workflow-authoring` [번들 스킬](/docs/ko/skills#bundled-skills)을 실행하여 Claude가 참고하는 스크립트 작성 레퍼런스를 로드합니다. 이 스킬에는 Claude Code v2.1.248 이상이 필요합니다.

370 370 

371현재 세션에서 편집된 버전을 실행하려면 [`/reload-skills`](/docs/ko/commands#all-commands)를 실행하여 워크플로우 디렉터리를 다시 읽은 후 `/<name>`을 다시 실행하십시오.371현재 세션에서 편집된 버전을 실행하려면 [`/reload-skills`](/docs/ko/commands#all-commands)를 실행하여 워크플로 디렉터리를 다시 읽은 다음, `/<name>`을 다시 실행합니다.

372 372 

373Claude Code는 스크립트를 로드하고 실행할 때 파일의 각 부분에 다음 규칙을 적용합니다:373Claude Code는 스크립트를 로드하고 실행할 때 파일의 각 부분에 다음 규칙을 적용합니다.

374 374 

375* **`meta` 블록**: `export const meta`를 첫 번째 문으로 유지하고, `name`과 `description`을 포함하는 순수 객체 리터럴로 유지하십시오. 변수, 함수 호출 또는 스프레드와 같은 리터럴 값 이외의 것을 포함하면, Claude Code는 `/` 자동완성에서 `/<name>`을 제거합니다.375* **`meta` 블록**: `export const meta`를 첫 번째 문으로 유지하고, `name`과 `description`을 가진 일반 객체 리터럴로 유지합니다. 변수, 함수 호출, 스프레드처럼 리터럴 값이 아닌 것이 포함되어 있으면 Claude Code는 `/` 자동 완성에서 `/<name>`을 제외합니다.

376* **본문**: `agent()`, `pipeline()`, `parallel()` 외에도 `phase()`를 호출하여 진행 보기에서 다음 에이전트를 제목 아래에 그룹화하고, `log()`를 호출하여 단계 위에 메시지를 표시하며, [`args`](#pass-input-to-a-saved-workflow) 전역을 읽을 수 있습니다. 본문에 구문 오류가 있으면, Claude Code는 워크플로우를 실행할 때 이를 보고합니다.376* **본문**: `agent()`, `pipeline()`, `parallel()` 외에도 `phase()`를 호출하여 이후의 에이전트를 진행 상황 보기에서 하나의 제목 아래로 그룹화하고, `log()`를 호출하여 단계 위에 메시지를 표시하며, [`args`](#pass-input-to-a-saved-workflow) 전역 변수를 읽을 수 있습니다. 본문에 구문 오류가 있으면 Claude Code는 워크플로를 실행할 때 이를 보고합니다.

377* **`phases`**: `meta`에 나열하면, `phase()`에 전달하는 각 항목에 정확히 제목을 지정하십시오. 항목이 없는 `phase()` 제목은 자체 진행 그룹을 가집니다.377* **`phases`**: `meta`에 나열하는 경우, 각 항목에 `phase()`에 전달하는 제목을 정확히 그대로 지정합니다. 항목이 없는 `phase()` 제목은 별도의 진행 상황 그룹을 갖게 됩니다.

378* **타임스탬프 및 무작위성**: Claude Code는 스크립트 내에서 `Date.now()`, `Math.random()`, 인수 없는 `new Date()`를 throw하므로, [재시작된 실행](#resume-after-a-pause)이 동일한 `agent()` 호출을 반복합니다. 대신 `args`를 통해 타임스탬프를 전달하십시오.378* **타임스탬프와 무작위성**: Claude Code는 스크립트 내에서 `Date.now()`, `Math.random()`, 인수 없는 `new Date()`가 예외를 발생시키도록 하여, [다시 시작된 실행](#resume-after-a-pause)이 동일한 `agent()` 호출을 반복하도록 합니다. 대신 `args`를 통해 타임스탬프를 전달합니다.

379 379 

380[단일 실행의 스크립트](#how-a-workflow-runs)를 저장된 복사본이 아닌 편집할 수도 있습니다. [일시 중지 후 재개](#resume-after-a-pause)는 편집된 스크립트를 재시작할 때 어떤 에이전트가 다시 실행되는지를 다룹니다. Workflow 도구의 입력에 대해서는 [Agent SDK 참조](/docs/ko/agent-sdk/typescript#workflow)의 항목을 참조하십시오.380저장된 사본 대신 [단일 실행의 스크립트](#how-a-workflow-runs)를 편집할 수도 있습니다. 편집된 스크립트를 다시 시작할 때 어떤 에이전트가 다시 실행되는지는 [일시 중지 후 재개하기](#resume-after-a-pause)에서 다룹니다. Workflow 도구의 입력에 대해서는 [Agent SDK 레퍼런스](/docs/ko/agent-sdk/typescript#workflow)의 해당 항목을 참조하세요.

381 381 

382<h2 id="how-a-workflow-runs">382<h2 id="how-a-workflow-runs">

383 워크플로우가 어떻게 실행되는지383 워크플로우가 어떻게 실행되는지


463* 제한이 24시간 이내에 재설정됩니다. 주간 제한은 더 멀리 재설정될 수 있습니다.463* 제한이 24시간 이내에 재설정됩니다. 주간 제한은 더 멀리 재설정될 수 있습니다.

464* 실행이 아직 두 번 대기하지 않았습니다. 세 번째로 제한에 도달하면 에이전트가 실패합니다.464* 실행이 아직 두 번 대기하지 않았습니다. 세 번째로 제한에 도달하면 에이전트가 실패합니다.

465 465 

466<h3 id="when-an-agent-stalls-and-restarts">

467 에이전트가 멈추고 다시 시작될 때

468</h3>

469 

470출력이 충분히 오랫동안 도착하지 않는 에이전트는 같은 프롬프트로 처음부터 다시 시작합니다. [`/workflows`](#watch-the-run)에서 해당 에이전트의 이름에 `(retry 1)` 접미사가 붙고 세부 정보에 `attempt 2 (stalled)`가 표시됩니다. 재시작은 자동으로 이루어지므로 별도로 조치할 필요가 없습니다.

471 

472새 시도는 멈춘 시도의 트랜스크립트 없이 시작됩니다. 멈춘 시도가 이미 변경한 파일은 변경된 상태로 유지되며, 해당 시도가 사용한 토큰은 실행의 총계에 그대로 남습니다. 정체 기간은 Claude Code가 시도를 종료하기 전에 에이전트의 출력을 기다리는 시간입니다. 에이전트가 자체 도구 호출이나 [사용 한도 재설정](#when-a-run-hits-your-usage-limit)을 기다리는 데 보내는 시간은 정체 기간에 포함되지 않습니다.

473 

474에이전트는 `r`로 요청한 재시작을 포함하여 최대 다섯 번까지 다시 시작합니다. 여섯 번째 시도도 멈추면 `agent()` 호출이 실패하며, 오류의 시작 부분에 그 이유가 표시됩니다:

475 

476* `agent stalled on all 6 attempts`: 모든 시도가 정체 기간 내내 출력 없이 지나갔습니다. 에이전트의 작업 특성상 그만큼 오래 출력이 없는 경우 정체 기간을 늘립니다

477* `agent lost its reply on all 6 attempts`: 모든 시도의 응답 스트림이 멈췄고 Claude Code가 기다리기를 포기했습니다. [스트리밍 유휴 감시](/docs/ko/network-config#streaming-idle-watchdogs)가 먼저 응답을 종료했으므로 정체 기간을 늘려도 도움이 되지 않으며, 해당 감시의 타임아웃은 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`로 설정합니다

478* `agent abandoned after 6 attempts`: 시도들이 서로 다른 방식으로 종료되었으며, 오류에 순서대로 나열됩니다

479 

480정체 기간이 끝나기 전에 에이전트가 출력을 생성할 시간을 더 주려면:

481 

482* **단일 에이전트**: 해당 에이전트의 `agent()` 호출에 `stallMs`를 밀리초 단위로 전달합니다. 예를 들어 30분의 경우 `agent(prompt, { stallMs: 1800000 })`입니다

483* **모든 에이전트**: [`CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`](/docs/ko/env-vars#variables)를 설정합니다. 이 값은 워크플로 외부의 서브에이전트에도 적용됩니다

484 

485실패 후 실행이 계속되는지는 스크립트가 에이전트를 호출한 방식에 따라 달라집니다:

486 

487* **[`parallel()` 또는 `pipeline()`](#what-the-saved-script-looks-like) 내부**: 에이전트의 결과 대신 `null`로 실행이 계속됩니다

488* **직접 await한 경우**: 실행이 오류와 함께 종료됩니다

489 

490다시 시도하려면 Claude에게 워크플로를 다시 시작하도록 요청합니다. 무엇이 다시 실행되는지는 [일시 중지 후 재개](#resume-after-a-pause)에서 다룹니다.

491 

466<h3 id="cost">492<h3 id="cost">

467 비용493 비용

468</h3>494</h3>

worktrees.md +1 −1

Details

104* **Git 리다이렉트**: Claude Code는 git을 메인 체크아웃으로 리다이렉트하는 Bash 또는 Monitor 명령을 차단합니다. 리다이렉트는 `git -C`, `--git-dir`, `GIT_DIR` 또는 `GIT_WORK_TREE` 변수, 또는 git을 실행하기 전에 메인 체크아웃으로 `cd`를 통해 올 수 있습니다.104* **Git 리다이렉트**: Claude Code는 git을 메인 체크아웃으로 리다이렉트하는 Bash 또는 Monitor 명령을 차단합니다. 리다이렉트는 `git -C`, `--git-dir`, `GIT_DIR` 또는 `GIT_WORK_TREE` 변수, 또는 git을 실행하기 전에 메인 체크아웃으로 `cd`를 통해 올 수 있습니다.

105* **명령 형태**: Claude Code는 명령 텍스트에서 명령이 실행하는 모든 git이 worktree 내부에 머물러 있는지 확인할 수 없을 때 Bash 또는 Monitor 명령을 차단합니다. 예를 들어 명령 이름이 런타임에 계산되거나 구문을 파싱할 수 없거나 `${!name}` 또는 `${ command; }`와 같은 확장이 텍스트에서 명시하지 않은 명령을 실행할 수 있을 때 발생합니다. Claude Code는 Claude에게 거부된 명령을 다시 작성하는 방법을 알려줍니다. 예를 들어 이를 일반 별도 명령으로 분할합니다. 이 확인을 끌 수 없습니다.105* **명령 형태**: Claude Code는 명령 텍스트에서 명령이 실행하는 모든 git이 worktree 내부에 머물러 있는지 확인할 수 없을 때 Bash 또는 Monitor 명령을 차단합니다. 예를 들어 명령 이름이 런타임에 계산되거나 구문을 파싱할 수 없거나 `${!name}` 또는 `${ command; }`와 같은 확장이 텍스트에서 명시하지 않은 명령을 실행할 수 있을 때 발생합니다. Claude Code는 Claude에게 거부된 명령을 다시 작성하는 방법을 알려줍니다. 예를 들어 이를 일반 별도 명령으로 분할합니다. 이 확인을 끌 수 없습니다.

106 106 

107이러한 확인은 편집이 대상으로 하는 경로, 명령이 실행되는 디렉터리, 명령의 텍스트를 읽습니다. 어느 확인도 셸 명령이 어떤 파일에 쓰는지는 추적하지 않으므로, `cp`나 셸 리다이렉트처럼 메인 체크아웃에서 git을 실행하지 않고 메인 체크아웃에 쓰는 명령은 이 확인으로 거부되지 않습니다. Claude Code는 이러한 명령을 다른 셸 명령과 동일하게 취급하므로, 명령이 실행되는지 또는 확인을 요청하는지는 [권한 모드](/docs/ko/permission-modes)와 규칙에 따라 달라집니다.107이러한 확인은 편집이 대상으로 하는 경로, 명령이 실행되는 디렉터리, 명령의 텍스트를 읽습니다. 어느 확인도 셸 명령이 어떤 파일에 쓰는지는 추적하지 않으므로, `cp`나 셸 리다이렉트처럼 메인 체크아웃에서 git을 실행하지 않고 메인 체크아웃에 쓰는 명령은 이 확인으로 거부되지 않습니다. Claude Code는 이러한 명령을 [권한](/docs/ko/permissions) 및 [샌드박싱](/docs/ko/sandboxing) 설정에 따라 다른 셸 명령과 동일하게 취급합니다.

108 108 

109확인은 Claude Code를 실행한 저장소에 적용됩니다. 또한 연결된 worktree가 연결된 메인 체크아웃도 포함합니다. PowerShell 명령의 경우 Claude Code는 작업 디렉토리 확인만 적용합니다.109확인은 Claude Code를 실행한 저장소에 적용됩니다. 또한 연결된 worktree가 연결된 메인 체크아웃도 포함합니다. PowerShell 명령의 경우 Claude Code는 작업 디렉토리 확인만 적용합니다.

110 110