SpyBara
Go Premium

Documentation 2026-05-02 18:14 UTC to 2026-05-04 22:58 UTC

99 files changed +47,107 −0. View all changes and history on the product overview
2026
Sun 31 06:39 Sat 30 06:23 Fri 29 06:38 Thu 28 06:37 Wed 27 06:42 Tue 26 06:33 Sun 24 06:25 Sat 23 06:18 Fri 22 06:33 Thu 21 06:36 Wed 20 06:35 Tue 19 06:34 Mon 18 23:59 Sun 17 01:01 Fri 15 22:58 Thu 14 17:02 Wed 13 23:01 Tue 12 22:57 Mon 11 23:00 Sun 10 23:03 Sat 9 04:57 Fri 8 22:00 Thu 7 22:59 Tue 5 23:00 Mon 4 22:58 Sat 2 18:14 Fri 1 18:19

admin-setup.md +132 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 조직을 위한 Claude Code 설정

6 

7> Claude Code를 배포하는 관리자를 위한 의사결정 맵으로, API 제공자, 관리 설정, 정책 시행, 사용량 모니터링 및 데이터 처리를 다룹니다.

8 

9Claude Code는 로컬 개발자 구성보다 우선하는 관리 설정을 통해 조직 정책을 시행합니다. 이러한 설정은 Claude 관리자 콘솔, 모바일 기기 관리(MDM) 시스템 또는 디스크의 파일에서 전달합니다. 설정은 Claude가 도달할 수 있는 도구, 명령, 서버 및 네트워크 대상을 제어합니다.

10 

11이 페이지는 배포 결정을 순서대로 안내합니다. 각 행은 아래 섹션 및 해당 영역의 참조 페이지로 연결됩니다.

12 

13<Note>

14 SSO, SCIM 프로비저닝 및 시트 할당은 Claude 계정 수준에서 구성됩니다. 해당 단계는 [Claude Enterprise Administrator Guide](https://claude.com/resources/tutorials/claude-enterprise-administrator-guide) 및 [시트 할당](https://support.claude.com/en/articles/11845131-use-claude-code-with-your-team-or-enterprise-plan)을 참조하세요.

15</Note>

16 

17| 결정 | 선택 항목 | 참조 |

18| :------------------------------------------------------- | :--------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------- |

19| [API 제공자 선택](#choose-your-api-provider) | Claude Code가 인증하는 위치 및 청구 방식 | [Authentication](/ko/authentication), [Bedrock](/ko/amazon-bedrock), [Vertex AI](/ko/google-vertex-ai), [Foundry](/ko/microsoft-foundry) |

20| [설정이 기기에 도달하는 방식 결정](#decide-how-settings-reach-devices) | 관리 정책이 개발자 머신에 도달하는 방식 | [Server-managed settings](/ko/server-managed-settings), [Settings files](/ko/settings#settings-files) |

21| [시행할 항목 결정](#decide-what-to-enforce) | 허용되는 도구, 명령 및 통합 | [Permissions](/ko/permissions), [Sandboxing](/ko/sandboxing) |

22| [사용량 가시성 설정](#set-up-usage-visibility) | 지출 및 채택을 추적하는 방식 | [Analytics](/ko/analytics), [Monitoring](/ko/monitoring-usage), [Costs](/ko/costs) |

23| [데이터 처리 검토](#review-data-handling) | 데이터 보존 및 규정 준수 태세 | [Data usage](/ko/data-usage), [Security](/ko/security) |

24 

25## API 제공자 선택

26 

27Claude Code는 여러 API 제공자 중 하나를 통해 Claude에 연결됩니다. 선택에 따라 청구, 인증 및 상속하는 규정 준수 태세가 결정됩니다.

28 

29| 제공자 | 다음의 경우 선택 |

30| :---------------------------- | :------------------------------------------------------------------------ |

31| Claude for Teams / Enterprise | Claude Code와 claude.ai를 실행할 인프라 없이 사용자당 구독 하나로 원하는 경우입니다. 이것이 기본 권장사항입니다. |

32| Claude Console | API 우선이거나 종량제 청구를 원하는 경우 |

33| Amazon Bedrock | 기존 AWS 규정 준수 제어 및 청구를 상속하려는 경우 |

34| Google Vertex AI | 기존 GCP 규정 준수 제어 및 청구를 상속하려는 경우 |

35| Microsoft Foundry | 기존 Azure 규정 준수 제어 및 청구를 상속하려는 경우 |

36 

37인증, 지역 및 기능 패리티를 다루는 전체 제공자 비교는 [enterprise deployment overview](/ko/third-party-integrations)를 참조하세요. 각 제공자의 인증 설정은 [Authentication](/ko/authentication)에 있습니다.

38 

39[Network configuration](/ko/network-config)의 프록시 및 방화벽 요구사항은 제공자와 관계없이 적용됩니다. 여러 제공자 앞에 단일 엔드포인트를 원하거나 중앙 집중식 요청 로깅을 원하는 경우 [LLM gateway](/ko/llm-gateway)를 참조하세요.

40 

41## 설정이 기기에 도달하는 방식 결정

42 

43관리 설정은 로컬 개발자 구성보다 우선하는 정책을 정의합니다. Claude Code는 네 가지 위치에서 이를 찾으며 주어진 기기에서 찾은 첫 번째 위치를 사용합니다.

44 

45| 메커니즘 | 전달 | 우선순위 | 플랫폼 |

46| :---------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--- | :------------- |

47| Server-managed | Claude.ai 관리자 콘솔 | 최고 | 모두 |

48| plist / registry policy | macOS: `com.anthropic.claudecode` plist<br />Windows: `HKLM\SOFTWARE\Policies\ClaudeCode` | 높음 | macOS, Windows |

49| File-based managed | macOS: `/Library/Application Support/ClaudeCode/managed-settings.json`<br />Linux and WSL: `/etc/claude-code/managed-settings.json`<br />Windows: `C:\Program Files\ClaudeCode\managed-settings.json` | 중간 | 모두 |

50| Windows user registry | `HKCU\SOFTWARE\Policies\ClaudeCode` | 최저 | Windows만 |

51 

52Server-managed 설정은 인증 시 기기에 도달하고 활성 세션 중에 매시간 새로 고쳐지며 엔드포인트 인프라가 필요하지 않습니다. Claude for Teams 또는 Enterprise 플랜이 필요하므로 다른 제공자의 배포는 대신 파일 기반 또는 OS 수준 메커니즘 중 하나가 필요합니다.

53 

54조직이 제공자를 혼합하는 경우 Claude.ai 사용자를 위해 [server-managed settings](/ko/server-managed-settings)를 구성하고 다른 사용자도 관리 정책을 받을 수 있도록 [file-based or plist/registry fallback](/ko/settings#settings-files)을 구성하세요.

55 

56plist 및 HKLM 레지스트리 위치는 모든 제공자와 함께 작동하며 관리자 권한이 필요하므로 변조에 저항합니다. HKCU의 Windows 사용자 레지스트리는 상승 권한 없이 쓸 수 있으므로 시행 채널이 아닌 편의 기본값으로 취급하세요.

57 

58기본적으로 WSL은 `/etc/claude-code`의 Linux 파일 경로만 읽습니다. Windows 레지스트리 및 `C:\Program Files\ClaudeCode` 정책을 같은 머신의 WSL로 확장하려면 관리자 전용 Windows 소스 중 하나에서 [`wslInheritsWindowsSettings: true`](/ko/settings#available-settings)를 설정하세요.

59 

60선택한 메커니즘이 무엇이든 관리 값은 사용자 및 프로젝트 설정보다 우선합니다. `permissions.allow` 및 `permissions.deny`와 같은 배열 설정은 모든 소스의 항목을 병합하므로 개발자는 관리 목록을 확장할 수 있지만 제거할 수는 없습니다.

61 

62[Server-managed settings](/ko/server-managed-settings) 및 [Settings files and precedence](/ko/settings#settings-files)를 참조하세요.

63 

64## 시행할 항목 결정

65 

66관리 설정은 도구, 샌드박스 실행, MCP 서버 및 플러그인 소스 제한, 실행되는 hooks 제어를 잠글 수 있습니다. 각 행은 이를 구동하는 설정 키가 있는 제어 표면입니다.

67 

68| 제어 | 기능 | 주요 설정 |

69| :------------------------------------------------------------------------------------- | :-------------------------------------------------- | :---------------------------------------------------------------------------- |

70| [Permission rules](/ko/permissions) | 특정 도구 및 명령 허용, 요청 또는 거부 | `permissions.allow`, `permissions.deny` |

71| [Permission lockdown](/ko/permissions#managed-only-settings) | 관리 권한 규칙만 적용; `--dangerously-skip-permissions` 비활성화 | `allowManagedPermissionRulesOnly`, `permissions.disableBypassPermissionsMode` |

72| [Sandboxing](/ko/sandboxing) | 도메인 허용 목록이 있는 OS 수준 파일 시스템 및 네트워크 격리 | `sandbox.enabled`, `sandbox.network.allowedDomains` |

73| [Managed policy CLAUDE.md](/ko/memory#deploy-organization-wide-claude-md) | 모든 세션에서 로드되는 조직 전체 지침, 제외할 수 없음 | 관리 정책 경로의 파일 |

74| [MCP server control](/ko/mcp#managed-mcp-configuration) | 사용자가 추가하거나 연결할 수 있는 MCP 서버 제한 | `allowedMcpServers`, `deniedMcpServers`, `allowManagedMcpServersOnly` |

75| [Plugin marketplace control](/ko/plugin-marketplaces#managed-marketplace-restrictions) | 사용자가 추가하고 설치할 수 있는 마켓플레이스 소스 제한 | `strictKnownMarketplaces`, `blockedMarketplaces` |

76| [Hook restrictions](/ko/settings#hook-configuration) | 관리 hooks만 로드; HTTP hook URL 제한 | `allowManagedHooksOnly`, `allowedHttpHookUrls` |

77| [Version floor](/ko/settings) | 자동 업데이트가 조직 전체 최소값 아래로 설치되는 것을 방지 | `minimumVersion` |

78 

79권한 규칙 및 샌드박싱은 다양한 계층을 다룹니다. WebFetch를 거부하면 Claude의 fetch 도구가 차단되지만 Bash가 허용되면 `curl` 및 `wget`은 여전히 모든 URL에 도달할 수 있습니다. 샌드박싱은 OS 수준에서 시행되는 네트워크 도메인 허용 목록으로 그 격차를 닫습니다.

80 

81이러한 제어가 방어하는 위협 모델은 [Security](/ko/security)를 참조하세요.

82 

83## 사용량 가시성 설정

84 

85필요한 보고 내용에 따라 모니터링을 선택하세요.

86 

87| 기능 | 제공 항목 | 가용성 | 시작 위치 |

88| :------------------ | :------------------------------ | :--------- | :--------------------------------------- |

89| Usage monitoring | 세션, 도구 및 토큰의 OpenTelemetry 내보내기 | 모든 제공자 | [Monitoring usage](/ko/monitoring-usage) |

90| Analytics dashboard | 사용자별 메트릭, 기여도 추적, 리더보드 | Anthropic만 | [Analytics](/ko/analytics) |

91| Cost tracking | 지출 제한, 속도 제한 및 사용량 속성 | Anthropic만 | [Costs](/ko/costs) |

92 

93클라우드 제공자는 AWS Cost Explorer, GCP Billing 또는 Azure Cost Management를 통해 지출을 노출합니다. Claude for Teams 및 Enterprise 플랜에는 [claude.ai/analytics/claude-code](https://claude.ai/analytics/claude-code)의 사용량 대시보드가 포함됩니다.

94 

95## 데이터 처리 검토

96 

97Team, Enterprise, Claude API 및 클라우드 제공자 플랜에서 Anthropic은 코드 또는 프롬프트에 대해 모델을 학습하지 않습니다. API 제공자가 보존 및 규정 준수 태세를 결정합니다.

98 

99| 주제 | 알아야 할 사항 | 시작 위치 |

100| :------------------------ | :--------------------------------------------- | :--------------------------------------------- |

101| Data usage policy | Anthropic이 수집하는 항목, 보존 기간, 학습에 사용되지 않는 항목 | [Data usage](/ko/data-usage) |

102| Zero Data Retention (ZDR) | 요청 완료 후 저장되지 않음. Claude for Enterprise에서 사용 가능 | [Zero data retention](/ko/zero-data-retention) |

103| Security architecture | 네트워크 모델, 암호화, 인증, 감사 추적 | [Security](/ko/security) |

104 

105요청 수준 감사 로깅이 필요하거나 데이터 민감도별로 트래픽을 라우팅하려면 개발자와 제공자 사이에 [LLM gateway](/ko/llm-gateway)를 배치하세요. 규제 요구사항 및 인증은 [Legal and compliance](/ko/legal-and-compliance)를 참조하세요.

106 

107## 확인 및 온보딩

108 

109관리 설정을 구성한 후 개발자가 Claude Code 내에서 `/status`를 실행하도록 하세요. 출력에는 `Enterprise managed settings`로 시작하는 줄이 포함되며 그 뒤에 괄호 안의 소스가 `(remote)`, `(plist)`, `(HKLM)`, `(HKCU)` 또는 `(file)` 중 하나입니다. [활성 설정 확인](/ko/settings#verify-active-settings)을 참조하세요.

110 

111개발자가 시작하는 데 도움이 되도록 다음 리소스를 공유하세요:

112 

113* [빠른 시작](/ko/quickstart): 설치부터 프로젝트 작업까지의 첫 세션 안내

114* [일반적인 워크플로우](/ko/common-workflows): 코드 검토, 리팩토링 및 디버깅과 같은 일상적인 작업의 패턴

115* [Claude 101](https://anthropic.skilljar.com/claude-101) 및 [Claude Code in Action](https://anthropic.skilljar.com/claude-code-in-action): 자기 주도식 Anthropic Academy 과정

116 

117로그인 문제의 경우 개발자에게 [인증 문제 해결](/ko/troubleshoot-install#login-and-authentication)을 참조하도록 안내하세요. 가장 일반적인 해결 방법은 다음과 같습니다:

118 

119* `/logout`을 실행한 후 `/login`을 실행하여 계정 전환

120* 엔터프라이즈 인증 옵션이 누락된 경우 `claude update` 실행

121* 업데이트 후 터미널 다시 시작

122 

123개발자가 "You haven't been added to your organization yet"을 보면 해당 시트에 Claude Code 액세스가 포함되지 않으며 관리자 콘솔에서 업데이트해야 합니다.

124 

125## 다음 단계

126 

127제공자 및 전달 메커니즘을 선택한 후 자세한 구성으로 이동하세요:

128 

129* [Server-managed settings](/ko/server-managed-settings): Claude 관리자 콘솔에서 관리 정책 전달

130* [Settings reference](/ko/settings): 모든 설정 키, 파일 위치 및 우선순위 규칙

131* [Amazon Bedrock](/ko/amazon-bedrock), [Google Vertex AI](/ko/google-vertex-ai), [Microsoft Foundry](/ko/microsoft-foundry): 제공자별 배포

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

Details

1> ## Documentation Index

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

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

4 

5# SDK에서 Claude Code 기능 사용하기

6 

7> 프로젝트 지침, 스킬, 훅 및 기타 Claude Code 기능을 SDK 에이전트에 로드합니다.

8 

9Agent SDK는 Claude Code와 동일한 기반 위에 구축되어 있으므로, SDK 에이전트는 동일한 파일시스템 기반 기능에 접근할 수 있습니다: 프로젝트 지침(`CLAUDE.md` 및 규칙), 스킬, 훅 등입니다.

10 

11`settingSources`를 생략하면 `query()`는 Claude Code CLI와 동일한 파일시스템 설정을 읽습니다: 사용자, 프로젝트 및 로컬 설정, CLAUDE.md 파일, `.claude/` 스킬, 에이전트 및 명령입니다. 이 없이 실행하려면 `settingSources: []`를 전달하면 에이전트가 프로그래밍 방식으로 구성한 것으로만 제한됩니다. 관리형 정책 설정 및 전역 `~/.claude.json` 구성은 이 옵션과 관계없이 읽혀집니다. [settingSources가 제어하지 않는 것](#what-settingsources-does-not-control)을 참조하세요.

12 

13각 기능이 수행하는 작업과 사용 시기에 대한 개념적 개요는 [Claude Code 확장](/ko/features-overview)을 참조하세요.

14 

15## settingSources로 파일시스템 설정 제어하기

16 

17설정 소스 옵션(Python의 [`setting_sources`](/ko/agent-sdk/python#claude-agent-options), TypeScript의 [`settingSources`](/ko/agent-sdk/typescript#setting-source))은 SDK가 로드하는 파일시스템 기반 설정을 제어합니다. 특정 소스를 선택하려면 명시적 목록을 전달하거나, 사용자, 프로젝트 및 로컬 설정을 비활성화하려면 빈 배열을 전달합니다.

18 

19이 예제는 `settingSources`를 `["user", "project"]`로 설정하여 사용자 수준 및 프로젝트 수준 설정을 모두 로드합니다:

20 

21<CodeGroup>

22 ```python Python theme={null}

23 from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage

24 

25 async for message in query(

26 prompt="Help me refactor the auth module",

27 options=ClaudeAgentOptions(

28 # "user" loads from ~/.claude/, "project" loads from ./.claude/ in cwd.

29 # Together they give the agent access to CLAUDE.md, skills, hooks, and

30 # permissions from both locations.

31 setting_sources=["user", "project"],

32 allowed_tools=["Read", "Edit", "Bash"],

33 ),

34 ):

35 if isinstance(message, AssistantMessage):

36 for block in message.content:

37 if hasattr(block, "text"):

38 print(block.text)

39 if isinstance(message, ResultMessage) and message.subtype == "success":

40 print(f"\nResult: {message.result}")

41 ```

42 

43 ```typescript TypeScript theme={null}

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

45 

46 for await (const message of query({

47 prompt: "Help me refactor the auth module",

48 options: {

49 // "user" loads from ~/.claude/, "project" loads from ./.claude/ in cwd.

50 // Together they give the agent access to CLAUDE.md, skills, hooks, and

51 // permissions from both locations.

52 settingSources: ["user", "project"],

53 allowedTools: ["Read", "Edit", "Bash"]

54 }

55 })) {

56 if (message.type === "assistant") {

57 for (const block of message.message.content) {

58 if (block.type === "text") console.log(block.text);

59 }

60 }

61 if (message.type === "result" && message.subtype === "success") {

62 console.log(`\nResult: ${message.result}`);

63 }

64 }

65 ```

66</CodeGroup>

67 

68각 소스는 특정 위치에서 설정을 로드합니다. 여기서 `<cwd>`는 `cwd` 옵션을 통해 전달하는 작업 디렉토리입니다(설정되지 않은 경우 프로세스의 현재 디렉토리). 전체 타입 정의는 [`SettingSource`](/ko/agent-sdk/typescript#setting-source)(TypeScript) 또는 [`SettingSource`](/ko/agent-sdk/python#setting-source)(Python)을 참조하세요.

69 

70| 소스 | 로드되는 항목 | 위치 |

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

72| `"project"` | 프로젝트 CLAUDE.md, `.claude/rules/*.md`, 프로젝트 스킬, 프로젝트 훅, 프로젝트 `settings.json` | `<cwd>/.claude/` 및 파일시스템 루트까지의 각 상위 디렉토리(`.claude/`를 찾거나 더 이상 상위 디렉토리가 없을 때 중지) |

73| `"user"` | 사용자 CLAUDE.md, `~/.claude/rules/*.md`, 사용자 스킬, 사용자 설정 | `~/.claude/` |

74| `"local"` | CLAUDE.local.md(gitignored), `.claude/settings.local.json` | `<cwd>/` |

75 

76`settingSources`를 생략하는 것은 `["user", "project", "local"]`과 동일합니다.

77 

78`cwd` 옵션은 SDK가 프로젝트 설정을 찾는 위치를 결정합니다. `cwd` 또는 그 상위 디렉토리 중 어느 것도 `.claude/` 폴더를 포함하지 않으면 프로젝트 수준 기능이 로드되지 않습니다.

79 

80### settingSources가 제어하지 않는 것

81 

82`settingSources`는 사용자, 프로젝트 및 로컬 설정을 다룹니다. 몇 가지 입력은 해당 값과 관계없이 읽혀집니다:

83 

84| 입력 | 동작 | 비활성화하려면 |

85| :--------------------------------------------- | :------------------ | :----------------------------------------------------------------------------------- |

86| 관리형 정책 설정 | 호스트에 있을 때 항상 로드됨 | 관리형 설정 파일 제거 |

87| `~/.claude.json` 전역 구성 | 항상 읽음 | `env`의 `CLAUDE_CONFIG_DIR`로 재배치 |

88| `~/.claude/projects/<project>/memory/`의 자동 메모리 | 기본적으로 시스템 프롬프트에 로드됨 | 설정에서 `autoMemoryEnabled: false` 설정 또는 `env`에서 `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` 설정 |

89 

90<Warning>

91 다중 테넌트 격리를 위해 기본 `query()` 옵션에 의존하지 마세요. 위의 입력이 `settingSources`와 관계없이 읽혀지므로, SDK 프로세스는 호스트 수준 구성 및 디렉토리별 메모리를 선택할 수 있습니다. 다중 테넌트 배포의 경우 각 테넌트를 자체 파일시스템에서 실행하고 `settingSources: []` 및 `env`에서 `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1`을 설정합니다. [안전한 배포](/ko/agent-sdk/secure-deployment)를 참조하세요.

92</Warning>

93 

94## 프로젝트 지침(CLAUDE.md 및 규칙)

95 

96`CLAUDE.md` 파일 및 `.claude/rules/*.md` 파일은 에이전트에 프로젝트에 대한 지속적인 컨텍스트를 제공합니다: 코딩 규칙, 빌드 명령, 아키텍처 결정 및 지침입니다. `settingSources`에 `"project"`가 포함되면(위의 예제처럼), SDK는 세션 시작 시 이 파일들을 컨텍스트에 로드합니다. 그러면 에이전트는 모든 프롬프트에서 반복하지 않고도 프로젝트 규칙을 따릅니다.

97 

98### CLAUDE.md 로드 위치

99 

100| 수준 | 위치 | 로드 시기 |

101| :------------- | :--------------------------------------------- | :------------------------------------------------------------------ |

102| 프로젝트(루트) | `<cwd>/CLAUDE.md` 또는 `<cwd>/.claude/CLAUDE.md` | `settingSources`에 `"project"` 포함 |

103| 프로젝트 규칙 | `<cwd>/.claude/rules/*.md` | `settingSources`에 `"project"` 포함 |

104| 프로젝트(상위 디렉토리) | `cwd` 위의 디렉토리에 있는 `CLAUDE.md` 파일 | `settingSources`에 `"project"` 포함, 세션 시작 시 로드 |

105| 프로젝트(하위 디렉토리) | `cwd`의 하위 디렉토리에 있는 `CLAUDE.md` 파일 | `settingSources`에 `"project"` 포함, 에이전트가 해당 서브트리의 파일을 읽을 때 필요에 따라 로드 |

106| 로컬(gitignored) | `<cwd>/CLAUDE.local.md` | `settingSources`에 `"local"` 포함 |

107| 사용자 | `~/.claude/CLAUDE.md` | `settingSources`에 `"user"` 포함 |

108| 사용자 규칙 | `~/.claude/rules/*.md` | `settingSources`에 `"user"` 포함 |

109 

110모든 수준은 누적됩니다: 프로젝트 및 사용자 CLAUDE.md 파일이 모두 존재하면 에이전트는 둘 다 봅니다. 수준 간에 하드 우선순위 규칙은 없습니다. 지침이 충돌하면 결과는 Claude가 해석하는 방식에 따라 달라집니다. 충돌하지 않는 규칙을 작성하거나 더 구체적인 파일에서 명시적으로 우선순위를 명시합니다("이 프로젝트 지침은 충돌하는 모든 사용자 수준 기본값을 재정의합니다").

111 

112<Tip>

113 `systemPrompt`를 통해 CLAUDE.md 파일을 사용하지 않고도 컨텍스트를 직접 주입할 수 있습니다. [시스템 프롬프트 수정](/ko/agent-sdk/modifying-system-prompts)을 참조하세요. 대화형 Claude Code 세션과 SDK 에이전트 간에 동일한 컨텍스트를 공유하려면 CLAUDE.md를 사용합니다.

114</Tip>

115 

116CLAUDE.md 콘텐츠를 구조화하고 구성하는 방법은 [Claude의 메모리 관리](/ko/memory)를 참조하세요.

117 

118## 스킬

119 

120스킬은 에이전트에 전문 지식과 호출 가능한 워크플로우를 제공하는 마크다운 파일입니다. `CLAUDE.md`(모든 세션에서 로드)와 달리 스킬은 필요에 따라 로드됩니다. 에이전트는 시작 시 스킬 설명을 받고 관련이 있을 때 전체 콘텐츠를 로드합니다.

121 

122스킬은 `settingSources`를 통해 파일시스템에서 발견됩니다. 기본 옵션을 사용하면 사용자 및 프로젝트 스킬이 자동으로 로드됩니다. `allowedTools`를 지정하지 않으면 `Skill` 도구가 기본적으로 활성화됩니다. `allowedTools` 허용 목록을 사용하는 경우 `"Skill"`을 명시적으로 포함합니다.

123 

124<CodeGroup>

125 ```python Python theme={null}

126 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

127 

128 # Skills in .claude/skills/ are discovered automatically

129 # when settingSources includes "project"

130 async for message in query(

131 prompt="Review this PR using our code review checklist",

132 options=ClaudeAgentOptions(

133 setting_sources=["user", "project"],

134 allowed_tools=["Skill", "Read", "Grep", "Glob"],

135 ),

136 ):

137 if isinstance(message, ResultMessage) and message.subtype == "success":

138 print(message.result)

139 ```

140 

141 ```typescript TypeScript theme={null}

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

143 

144 // Skills in .claude/skills/ are discovered automatically

145 // when settingSources includes "project"

146 for await (const message of query({

147 prompt: "Review this PR using our code review checklist",

148 options: {

149 settingSources: ["user", "project"],

150 allowedTools: ["Skill", "Read", "Grep", "Glob"]

151 }

152 })) {

153 if (message.type === "result" && message.subtype === "success") {

154 console.log(message.result);

155 }

156 }

157 ```

158</CodeGroup>

159 

160<Note>

161 스킬은 파일시스템 아티팩트(`.claude/skills/<name>/SKILL.md`)로 생성되어야 합니다. SDK에는 스킬을 등록하기 위한 프로그래밍 방식 API가 없습니다. 전체 세부 정보는 [SDK의 에이전트 스킬](/ko/agent-sdk/skills)을 참조하세요.

162</Note>

163 

164스킬 생성 및 사용에 대한 자세한 내용은 [SDK의 에이전트 스킬](/ko/agent-sdk/skills)을 참조하세요.

165 

166## 훅

167 

168SDK는 훅을 정의하는 두 가지 방법을 지원하며, 이들은 나란히 실행됩니다:

169 

170* **파일시스템 훅:** `settings.json`에 정의된 셸 명령, `settingSources`에 관련 소스가 포함될 때 로드됩니다. 이는 [대화형 Claude Code 세션](/ko/hooks-guide)에 대해 구성하는 것과 동일한 훅입니다.

171* **프로그래밍 방식 훅:** `query()`에 직접 전달되는 콜백 함수입니다. 이들은 애플리케이션 프로세스에서 실행되며 구조화된 결정을 반환할 수 있습니다. [훅으로 실행 제어](/ko/agent-sdk/hooks)를 참조하세요.

172 

173두 유형 모두 동일한 훅 수명 주기 동안 실행됩니다. 프로젝트의 `.claude/settings.json`에 이미 훅이 있고 `settingSources: ["project"]`를 설정하면 추가 구성 없이 SDK에서 해당 훅이 자동으로 실행됩니다.

174 

175훅 콜백은 도구 입력을 받고 결정 딕셔너리를 반환합니다. `{}`(빈 딕셔너리)를 반환하면 도구가 진행되도록 허용합니다. `{"decision": "block", "reason": "..."}`를 반환하면 실행이 방지되고 이유가 도구 결과로 Claude에 전송됩니다. 전체 콜백 서명 및 반환 유형은 [훅 가이드](/ko/agent-sdk/hooks)를 참조하세요.

176 

177<CodeGroup>

178 ```python Python theme={null}

179 from claude_agent_sdk import query, ClaudeAgentOptions, HookMatcher, ResultMessage

180 

181 

182 # PreToolUse hook callback. Positional args:

183 # input_data: HookInput dict with tool_name, tool_input, hook_event_name

184 # tool_use_id: str | None, the ID of the tool call being intercepted

185 # context: HookContext, carries session metadata

186 async def audit_bash(input_data, tool_use_id, context):

187 command = input_data.get("tool_input", {}).get("command", "")

188 if "rm -rf" in command:

189 return {"decision": "block", "reason": "Destructive command blocked"}

190 return {} # Empty dict: allow the tool to proceed

191 

192 

193 # Filesystem hooks from .claude/settings.json run automatically

194 # when settingSources loads them. You can also add programmatic hooks:

195 async for message in query(

196 prompt="Refactor the auth module",

197 options=ClaudeAgentOptions(

198 setting_sources=["project"], # Loads hooks from .claude/settings.json

199 hooks={

200 "PreToolUse": [

201 HookMatcher(matcher="Bash", hooks=[audit_bash]),

202 ]

203 },

204 ),

205 ):

206 if isinstance(message, ResultMessage) and message.subtype == "success":

207 print(message.result)

208 ```

209 

210 ```typescript TypeScript theme={null}

211 import { query, type HookInput, type HookJSONOutput } from "@anthropic-ai/claude-agent-sdk";

212 

213 // PreToolUse hook callback. HookInput is a discriminated union on

214 // hook_event_name, so narrowing on it gives TypeScript the right

215 // tool_input shape for this event.

216 const auditBash = async (input: HookInput): Promise<HookJSONOutput> => {

217 if (input.hook_event_name !== "PreToolUse") return {};

218 const toolInput = input.tool_input as { command?: string };

219 if (toolInput.command?.includes("rm -rf")) {

220 return { decision: "block", reason: "Destructive command blocked" };

221 }

222 return {}; // Empty object: allow the tool to proceed

223 };

224 

225 // Filesystem hooks from .claude/settings.json run automatically

226 // when settingSources loads them. You can also add programmatic hooks:

227 for await (const message of query({

228 prompt: "Refactor the auth module",

229 options: {

230 settingSources: ["project"], // Loads hooks from .claude/settings.json

231 hooks: {

232 PreToolUse: [{ matcher: "Bash", hooks: [auditBash] }]

233 }

234 }

235 })) {

236 if (message.type === "result" && message.subtype === "success") {

237 console.log(message.result);

238 }

239 }

240 ```

241</CodeGroup>

242 

243### 어느 훅 유형을 사용할지

244 

245| 훅 유형 | 최적 사용 |

246| :--------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

247| **파일시스템** (`settings.json`) | CLI와 SDK 세션 간에 훅 공유. `"command"`(셸 스크립트), `"http"`(엔드포인트에 POST), `"mcp_tool"`(연결된 MCP 서버의 도구 호출), `"prompt"`(LLM이 프롬프트 평가), `"agent"`(검증자 에이전트 생성)를 지원합니다. 이들은 주 에이전트 및 생성하는 모든 하위 에이전트에서 실행됩니다. |

248| **프로그래밍 방식** (`query()`의 콜백) | 애플리케이션 특정 로직; 구조화된 결정 반환; 프로세스 내 통합. 주 세션으로만 범위가 지정됩니다. |

249 

250<Note>

251 TypeScript SDK는 Python을 넘어 `SessionStart`, `SessionEnd`, `TeammateIdle` 및 `TaskCompleted`를 포함한 추가 훅 이벤트를 지원합니다. 전체 이벤트 호환성 표는 [훅 가이드](/ko/agent-sdk/hooks)를 참조하세요.

252</Note>

253 

254프로그래밍 방식 훅에 대한 전체 세부 정보는 [훅으로 실행 제어](/ko/agent-sdk/hooks)를 참조하세요. 파일시스템 훅 구문은 [훅](/ko/hooks)을 참조하세요.

255 

256## 올바른 기능 선택하기

257 

258Agent SDK는 에이전트의 동작을 확장하는 여러 방법에 접근할 수 있게 합니다. 어느 것을 사용할지 확실하지 않으면 이 표는 일반적인 목표를 올바른 접근 방식에 매핑합니다.

259 

260| 원하는 것 | 사용 | SDK 표면 |

261| :------------------------------------------------ | :----------------------------------- | :------------------------------------------------------------------------------ |

262| 에이전트가 항상 따르는 프로젝트 규칙 설정 | [CLAUDE.md](/ko/memory) | `settingSources: ["project"]`가 자동으로 로드 |

263| 에이전트가 관련이 있을 때 로드하는 참고 자료 제공 | [스킬](/ko/agent-sdk/skills) | `settingSources` + `allowedTools: ["Skill"]` |

264| 재사용 가능한 워크플로우 실행(배포, 검토, 릴리스) | [사용자 호출 가능 스킬](/ko/agent-sdk/skills) | `settingSources` + `allowedTools: ["Skill"]` |

265| 격리된 하위 작업을 새로운 컨텍스트에 위임(연구, 검토) | [하위 에이전트](/ko/agent-sdk/subagents) | `agents` 매개변수 + `allowedTools: ["Agent"]` |

266| 공유 작업 목록 및 직접 에이전트 간 메시징으로 여러 Claude Code 인스턴스 조정 | [에이전트 팀](/ko/agent-teams) | SDK 옵션을 통해 직접 구성되지 않습니다. 에이전트 팀은 한 세션이 팀 리더로 작동하여 독립적인 팀원 간의 작업을 조정하는 CLI 기능입니다 |

267| 도구 호출에서 결정론적 로직 실행(감사, 차단, 변환) | [훅](/ko/agent-sdk/hooks) | 콜백이 있는 `hooks` 매개변수 또는 `settingSources`를 통해 로드된 셸 스크립트 |

268| Claude에 외부 서비스에 대한 구조화된 도구 접근 제공 | [MCP](/ko/agent-sdk/mcp) | `mcpServers` 매개변수 |

269 

270<Tip>

271 **하위 에이전트 대 에이전트 팀:** 하위 에이전트는 임시적이고 격리됩니다: 새로운 대화, 한 가지 작업, 부모에게 반환된 요약. 에이전트 팀은 공유 작업 목록을 공유하고 직접 메시지를 주고받는 여러 독립적인 Claude Code 인스턴스를 조정합니다. 에이전트 팀은 CLI 기능입니다. [하위 에이전트가 상속하는 것](/ko/agent-sdk/subagents#what-subagents-inherit) 및 [에이전트 팀 비교](/ko/agent-teams#compare-with-subagents)를 참조하세요.

272</Tip>

273 

274활성화하는 모든 기능은 에이전트의 컨텍스트 윈도우에 추가됩니다. 기능별 비용 및 이 기능들이 함께 계층화되는 방식은 [Claude Code 확장](/ko/features-overview#understand-context-costs)을 참조하세요.

275 

276## 관련 리소스

277 

278* [Claude Code 확장](/ko/features-overview): 모든 확장 기능의 개념적 개요, 비교 표 및 컨텍스트 비용 분석

279* [SDK의 스킬](/ko/agent-sdk/skills): 프로그래밍 방식으로 스킬을 사용하는 전체 가이드

280* [하위 에이전트](/ko/agent-sdk/subagents): 격리된 하위 작업을 위한 하위 에이전트 정의 및 호출

281* [훅](/ko/agent-sdk/hooks): 주요 실행 지점에서 에이전트 동작 가로채기 및 제어

282* [권한](/ko/agent-sdk/permissions): 모드, 규칙 및 콜백으로 도구 접근 제어

283* [시스템 프롬프트](/ko/agent-sdk/modifying-system-prompts): CLAUDE.md 파일 없이 컨텍스트 주입

agent-sdk/cost-tracking.md +263 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 비용 및 사용량 추적

6 

7> Claude Agent SDK를 사용하여 토큰 사용량을 추적하고, 비용을 예측하며, 프롬프트 캐싱을 구성하는 방법을 알아봅니다.

8 

9Claude Agent SDK는 Claude와의 각 상호작용에 대한 상세한 토큰 사용량 정보를 제공합니다. 이 가이드에서는 사용량을 적절히 추적하고 비용 보고를 이해하는 방법을 설명합니다. 특히 병렬 도구 사용 및 다단계 대화를 다룰 때 유용합니다.

10 

11완전한 API 문서는 [TypeScript SDK 참조](/ko/agent-sdk/typescript) 및 [Python SDK 참조](/ko/agent-sdk/python)를 참조하십시오.

12 

13<Warning>

14 `total_cost_usd` 및 `costUSD` 필드는 클라이언트 측 추정값이며, 권위 있는 청구 데이터가 아닙니다. SDK는 빌드 시간에 번들된 가격 테이블에서 로컬로 계산하므로 다음과 같은 경우에 실제 청구 금액과 달라질 수 있습니다:

15 

16 * 가격 변경

17 * 설치된 SDK 버전이 모델을 인식하지 못함

18 * 클라이언트가 모델링할 수 없는 청구 규칙 적용

19 

20 이 필드는 개발 통찰력 및 대략적인 예산 책정을 위해 사용하십시오. 권위 있는 청구의 경우 [Usage and Cost API](https://platform.claude.com/docs/en/build-with-claude/usage-cost-api) 또는 [Claude Console](https://platform.claude.com/usage)의 Usage 페이지를 사용하십시오. 이 필드에서 최종 사용자에게 청구하거나 재정 결정을 트리거하지 마십시오.

21</Warning>

22 

23## 토큰 사용량 이해

24 

25TypeScript 및 Python SDK는 다른 필드 이름으로 동일한 사용량 데이터를 노출합니다:

26 

27* **TypeScript**는 각 어시스턴트 메시지(`message.message.id`, `message.message.usage`)에 대한 단계별 토큰 분석, 결과 메시지의 `modelUsage`를 통한 모델별 비용, 결과 메시지의 누적 합계를 제공합니다.

28* **Python**은 각 어시스턴트 메시지(`message.usage`, `message.message_id`)에 대한 단계별 토큰 분석, 결과 메시지의 `model_usage`를 통한 모델별 비용, 결과 메시지의 누적 합계(`total_cost_usd` 및 `usage` dict)를 제공합니다.

29 

30두 SDK 모두 동일한 기본 비용 모델을 사용하고 동일한 세분성을 노출합니다. 차이점은 필드 이름 지정 및 단계별 사용량이 중첩된 위치입니다.

31 

32비용 추적은 SDK가 사용량 데이터를 어떻게 범위 지정하는지 이해하는 것에 달려 있습니다:

33 

34* **`query()` 호출:** SDK의 `query()` 함수 한 번의 호출입니다. 단일 호출은 여러 단계를 포함할 수 있습니다(Claude가 응답하고, 도구를 사용하고, 결과를 받고, 다시 응답합니다). 각 호출은 끝에 하나의 [`result`](/ko/agent-sdk/typescript#sdk-result-message) 메시지를 생성합니다.

35* **단계:** `query()` 호출 내의 단일 요청/응답 사이클입니다. 각 단계는 토큰 사용량이 있는 어시스턴트 메시지를 생성합니다.

36* **세션:** 세션 ID로 연결된 일련의 `query()` 호출입니다(`resume` 옵션 사용). 세션 내의 각 `query()` 호출은 자신의 비용을 독립적으로 보고합니다.

37 

38다음 다이어그램은 단일 `query()` 호출의 메시지 스트림을 보여주며, 각 단계에서 토큰 사용량이 보고되고 끝에 누적 추정값이 표시됩니다:

39 

40<img src="https://mintcdn.com/claude-code/Dujg43sxTkuhSELI/images/agent-sdk/message-usage-flow.svg?fit=max&auto=format&n=Dujg43sxTkuhSELI&q=85&s=c542f51ff58547ef9c0e57b16d03f33c" alt="쿼리가 두 단계의 메시지를 생성하는 다이어그램입니다. 단계 1은 동일한 ID와 사용량을 공유하는 4개의 어시스턴트 메시지(한 번만 계산)를 가지고 있고, 단계 2는 새로운 ID를 가진 1개의 어시스턴트 메시지를 가지고 있으며, 최종 결과 메시지는 추정된 total_cost_usd를 표시합니다." width="760" height="520" data-path="images/agent-sdk/message-usage-flow.svg" />

41 

42<Steps>

43 <Step title="각 단계는 어시스턴트 메시지를 생성합니다">

44 Claude가 응답할 때, 하나 이상의 어시스턴트 메시지를 보냅니다. TypeScript에서 각 어시스턴트 메시지는 `id` 및 토큰 개수(`input_tokens`, `output_tokens`)가 있는 [`usage`](https://platform.claude.com/docs/en/api/messages) 객체를 포함하는 중첩된 `BetaMessage`(`message.message`를 통해 액세스)를 포함합니다. Python에서 `AssistantMessage` 데이터클래스는 `message.usage` 및 `message.message_id`를 통해 동일한 데이터를 직접 노출합니다. Claude가 한 번에 여러 도구를 사용할 때, 해당 턴의 모든 메시지는 동일한 ID를 공유하므로 ID로 중복 제거하여 중복 계산을 피하십시오.

45 </Step>

46 

47 <Step title="결과 메시지는 누적 추정값을 제공합니다">

48 `query()` 호출이 완료되면, SDK는 `total_cost_usd` 및 누적 `usage`가 있는 결과 메시지를 내보냅니다. 이는 TypeScript([`SDKResultMessage`](/ko/agent-sdk/typescript#sdk-result-message)) 및 Python([`ResultMessage`](/ko/agent-sdk/python#result-message)) 모두에서 사용 가능합니다. 여러 `query()` 호출을 수행하는 경우(예: 다중 턴 세션에서), 각 결과는 해당 개별 호출의 비용만 반영합니다. 추정된 합계만 필요한 경우, 단계별 사용량을 무시하고 이 단일 값을 읽을 수 있습니다.

49 </Step>

50</Steps>

51 

52## 쿼리의 총 비용 얻기

53 

54결과 메시지([TypeScript](/ko/agent-sdk/typescript#sdk-result-message), [Python](/ko/agent-sdk/python#result-message))는 `query()` 호출에 대한 에이전트 루프의 끝을 표시합니다. 여기에는 `total_cost_usd`가 포함되어 있으며, 이는 해당 호출의 모든 단계에 걸친 누적 추정 비용입니다. 이는 성공 및 오류 결과 모두에 대해 작동합니다. 세션을 사용하여 여러 `query()` 호출을 수행하는 경우, 각 결과는 해당 개별 호출의 비용만 반영합니다.

55 

56다음 예제는 `query()` 호출의 메시지 스트림을 반복하고 `result` 메시지가 도착할 때 총 비용을 인쇄합니다:

57 

58<CodeGroup>

59 ```typescript TypeScript theme={null}

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

61 

62 for await (const message of query({ prompt: "Summarize this project" })) {

63 if (message.type === "result") {

64 console.log(`Total cost: $${message.total_cost_usd}`);

65 }

66 }

67 ```

68 

69 ```python Python theme={null}

70 from claude_agent_sdk import query, ResultMessage

71 import asyncio

72 

73 

74 async def main():

75 async for message in query(prompt="Summarize this project"):

76 if isinstance(message, ResultMessage):

77 print(f"Total cost: ${message.total_cost_usd or 0}")

78 

79 

80 asyncio.run(main())

81 ```

82</CodeGroup>

83 

84## 단계별 및 모델별 사용량 추적

85 

86이 섹션의 예제는 TypeScript 필드 이름을 사용합니다. Python에서 동등한 필드는 단계별 사용량의 경우 [`AssistantMessage.usage`](/ko/agent-sdk/python#assistant-message) 및 `AssistantMessage.message_id`이고, 모델별 분석의 경우 [`ResultMessage.model_usage`](/ko/agent-sdk/python#result-message)입니다.

87 

88### 단계별 사용량 추적

89 

90각 어시스턴트 메시지는 `id` 및 토큰 개수가 있는 `usage` 객체를 포함하는 중첩된 `BetaMessage`(`message.message`를 통해 액세스)를 포함합니다. Claude가 도구를 병렬로 사용할 때, 여러 메시지는 동일한 `id`를 공유하고 동일한 사용량 데이터를 가집니다. 이미 계산한 ID를 추적하고 중복을 건너뛰어 부풀려진 합계를 피하십시오.

91 

92<Warning>

93 병렬 도구 호출은 중첩된 `BetaMessage`가 동일한 `id`를 공유하고 동일한 사용량을 가진 여러 어시스턴트 메시지를 생성합니다. 정확한 단계별 토큰 개수를 얻으려면 항상 ID로 중복 제거하십시오.

94</Warning>

95 

96다음 예제는 모든 단계에 걸쳐 입력 및 출력 토큰을 누적하고, 각 고유 메시지 ID를 한 번만 계산합니다:

97 

98```typescript theme={null}

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

100 

101const seenIds = new Set<string>();

102let totalInputTokens = 0;

103let totalOutputTokens = 0;

104 

105for await (const message of query({ prompt: "Summarize this project" })) {

106 if (message.type === "assistant") {

107 const msgId = message.message.id;

108 

109 // Parallel tool calls share the same ID, only count once

110 if (!seenIds.has(msgId)) {

111 seenIds.add(msgId);

112 totalInputTokens += message.message.usage.input_tokens;

113 totalOutputTokens += message.message.usage.output_tokens;

114 }

115 }

116}

117 

118console.log(`Steps: ${seenIds.size}`);

119console.log(`Input tokens: ${totalInputTokens}`);

120console.log(`Output tokens: ${totalOutputTokens}`);

121```

122 

123### 모델별 사용량 분석

124 

125결과 메시지는 [`modelUsage`](/ko/agent-sdk/typescript#model-usage)를 포함하며, 이는 모델 이름을 모델별 토큰 개수 및 비용에 매핑합니다. 이는 여러 모델을 실행할 때(예: 서브에이전트의 경우 Haiku, 메인 에이전트의 경우 Opus) 토큰이 어디로 가는지 확인하려는 경우 유용합니다.

126 

127다음 예제는 쿼리를 실행하고 사용된 각 모델에 대한 비용 및 토큰 분석을 인쇄합니다:

128 

129```typescript theme={null}

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

131 

132for await (const message of query({ prompt: "Summarize this project" })) {

133 if (message.type !== "result") continue;

134 

135 for (const [modelName, usage] of Object.entries(message.modelUsage)) {

136 console.log(`${modelName}: $${usage.costUSD.toFixed(4)}`);

137 console.log(` Input tokens: ${usage.inputTokens}`);

138 console.log(` Output tokens: ${usage.outputTokens}`);

139 console.log(` Cache read: ${usage.cacheReadInputTokens}`);

140 console.log(` Cache creation: ${usage.cacheCreationInputTokens}`);

141 }

142}

143```

144 

145## 여러 호출에 걸쳐 비용 누적

146 

147각 `query()` 호출은 자신의 `total_cost_usd`를 반환합니다. SDK는 세션 수준 합계를 제공하지 않으므로, 애플리케이션이 여러 `query()` 호출을 수행하는 경우(예: 다중 턴 세션 또는 다양한 사용자에 걸쳐), 합계를 직접 누적하십시오.

148 

149다음 예제는 두 개의 `query()` 호출을 순차적으로 실행하고, 각 호출의 `total_cost_usd`를 실행 합계에 추가하고, 호출별 및 결합된 비용을 모두 인쇄합니다:

150 

151<CodeGroup>

152 ```typescript TypeScript theme={null}

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

154 

155 // Track cumulative cost across multiple query() calls

156 let totalSpend = 0;

157 

158 const prompts = [

159 "Read the files in src/ and summarize the architecture",

160 "List all exported functions in src/auth.ts"

161 ];

162 

163 for (const prompt of prompts) {

164 for await (const message of query({ prompt })) {

165 if (message.type === "result") {

166 totalSpend += message.total_cost_usd;

167 console.log(`This call: $${message.total_cost_usd}`);

168 }

169 }

170 }

171 

172 console.log(`Total spend: $${totalSpend.toFixed(4)}`);

173 ```

174 

175 ```python Python theme={null}

176 from claude_agent_sdk import query, ResultMessage

177 import asyncio

178 

179 

180 async def main():

181 # Track cumulative cost across multiple query() calls

182 total_spend = 0.0

183 

184 prompts = [

185 "Read the files in src/ and summarize the architecture",

186 "List all exported functions in src/auth.ts",

187 ]

188 

189 for prompt in prompts:

190 async for message in query(prompt=prompt):

191 if isinstance(message, ResultMessage):

192 cost = message.total_cost_usd or 0

193 total_spend += cost

194 print(f"This call: ${cost}")

195 

196 print(f"Total spend: ${total_spend:.4f}")

197 

198 

199 asyncio.run(main())

200 ```

201</CodeGroup>

202 

203## 오류, 캐싱 및 토큰 불일치 처리

204 

205정확한 비용 추적을 위해 실패한 대화, 캐시 토큰 가격 책정 및 가끔 발생하는 보고 불일치를 고려하십시오.

206 

207### 출력 토큰 불일치 해결

208 

209드물게 동일한 ID를 가진 메시지에 대해 다른 `output_tokens` 값을 관찰할 수 있습니다. 이 경우:

210 

2111. **최고값 사용:** 그룹의 최종 메시지는 일반적으로 정확한 합계를 포함합니다.

2122. **결과 메시지 선호:** 결과 메시지의 `total_cost_usd`는 모든 단계에 걸친 SDK의 누적 추정값을 반영하므로, 단계별 값을 직접 합산하는 것보다 더 신뢰할 수 있습니다. 여전히 추정값이며 실제 청구와 다를 수 있습니다.

2133. **불일치 보고:** [Claude Code GitHub 저장소](https://github.com/anthropics/claude-code/issues)에서 문제를 제출하십시오.

214 

215### 실패한 대화의 비용 추적

216 

217성공 및 오류 결과 메시지 모두 `usage` 및 `total_cost_usd`를 포함합니다. 대화가 중간에 실패하면, 실패 지점까지 토큰을 소비했습니다. 항상 `subtype`에 관계없이 결과 메시지에서 비용 데이터를 읽으십시오.

218 

219### 캐시 토큰 추적

220 

221Agent SDK는 반복된 콘텐츠에 대한 비용을 줄이기 위해 [프롬프트 캐싱](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)을 자동으로 사용합니다. 캐싱을 직접 구성할 필요가 없습니다. 사용량 객체는 캐시 추적을 위한 두 가지 추가 필드를 포함합니다:

222 

223* `cache_creation_input_tokens`: 새 캐시 항목을 생성하는 데 사용된 토큰(표준 입력 토큰보다 높은 요금으로 청구됨).

224* `cache_read_input_tokens`: 기존 캐시 항목에서 읽은 토큰(감소된 요금으로 청구됨).

225 

226캐싱 절감액을 이해하려면 이들을 `input_tokens`과 별도로 추적하십시오. TypeScript에서 이 필드는 [`Usage`](/ko/agent-sdk/typescript#usage) 객체에 입력됩니다. Python에서 이들은 [`ResultMessage.usage`](/ko/agent-sdk/python#result-message) dict의 키로 나타납니다(예: `message.usage.get("cache_read_input_tokens", 0)`).

227 

228### 프롬프트 캐시 TTL을 1시간으로 연장

229 

230SDK에서 작성한 캐시 항목은 API 키로 인증하거나 Amazon Bedrock, Google Cloud Vertex AI 또는 Microsoft Foundry에서 실행할 때 기본적으로 5분 TTL을 사용합니다. 워크로드가 동일한 시스템 프롬프트 및 컨텍스트에 대해 많은 짧은 세션을 실행하고 세션 간에 5분보다 긴 간격이 있는 경우, 캐시는 세션 간에 만료되고 각 새 세션은 전체 입력 가격을 지불합니다.

231 

232캐시 쓰기에 1시간 TTL을 요청하려면 [`ENABLE_PROMPT_CACHING_1H`](/ko/env-vars) 환경 변수를 설정하십시오. 셸 또는 컨테이너 환경에서 내보내거나 `options.env`를 통해 전달할 수 있습니다.

233 

234다음 예제는 Bedrock에서 실행되는 에이전트에 대해 1시간 TTL을 활성화합니다:

235 

236<CodeGroup>

237 ```python Python theme={null}

238 options = ClaudeAgentOptions(

239 env={

240 "CLAUDE_CODE_USE_BEDROCK": "1",

241 "ENABLE_PROMPT_CACHING_1H": "1",

242 },

243 )

244 ```

245 

246 ```typescript TypeScript theme={null}

247 const options = {

248 env: {

249 ...process.env,

250 CLAUDE_CODE_USE_BEDROCK: "1",

251 ENABLE_PROMPT_CACHING_1H: "1",

252 },

253 };

254 ```

255</CodeGroup>

256 

2571시간 TTL을 가진 캐시 쓰기는 5분 쓰기보다 높은 요금으로 청구되므로, 이를 활성화하면 더 높은 쓰기 비용으로 더 많은 캐시 읽기를 거래합니다. 자세한 내용은 [프롬프트 캐싱 가격 책정](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)을 참조하십시오. Claude 구독 사용자는 이미 자동으로 1시간 TTL을 받으며 이 변수를 설정할 필요가 없습니다.

258 

259## 관련 문서

260 

261* [TypeScript SDK 참조](/ko/agent-sdk/typescript) - 완전한 API 문서

262* [SDK 개요](/ko/agent-sdk/overview) - SDK 시작하기

263* [SDK 권한](/ko/agent-sdk/permissions) - 도구 권한 관리

agent-sdk/hooks.md +819 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 훅으로 에이전트 동작 가로채기 및 제어

6 

7> 훅을 사용하여 에이전트 실행의 주요 지점에서 에이전트 동작을 가로채고 사용자 정의합니다

8 

9훅은 도구가 호출되거나 세션이 시작되거나 실행이 중지되는 등 에이전트 이벤트에 응답하여 코드를 실행하는 콜백 함수입니다. 훅을 사용하면 다음을 수행할 수 있습니다.

10 

11* **위험한 작업 차단** 실행 전에 파괴적인 셸 명령이나 무단 파일 액세스 같은 위험한 작업을 차단합니다

12* **로깅 및 감사** 규정 준수, 디버깅 또는 분석을 위해 모든 도구 호출을 기록합니다

13* **입력 및 출력 변환** 데이터를 정제하거나 자격 증명을 주입하거나 파일 경로를 리디렉션합니다

14* **인간 승인 요구** 데이터베이스 쓰기 또는 API 호출 같은 민감한 작업에 대해 승인을 요구합니다

15* **세션 수명 주기 추적** 상태를 관리하거나 리소스를 정리하거나 알림을 보냅니다

16 

17이 가이드에서는 훅이 어떻게 작동하는지, 훅을 구성하는 방법, 그리고 도구 차단, 입력 수정, 알림 전달 같은 일반적인 패턴의 예제를 제공합니다.

18 

19## 훅이 작동하는 방식

20 

21<Steps>

22 <Step title="이벤트가 발생합니다">

23 에이전트 실행 중에 무언가가 발생하고 SDK가 이벤트를 발생시킵니다. 도구가 호출되려고 할 때(`PreToolUse`), 도구가 결과를 반환했을 때(`PostToolUse`), 서브에이전트가 시작되거나 중지되었을 때, 에이전트가 유휴 상태일 때, 또는 실행이 완료되었을 때입니다. [전체 이벤트 목록](#available-hooks)을 참조하세요.

24 </Step>

25 

26 <Step title="SDK가 등록된 훅을 수집합니다">

27 SDK는 해당 이벤트 유형에 대해 등록된 훅을 확인합니다. 여기에는 `options.hooks`에 전달하는 콜백 훅과 해당 [`settingSources`](/ko/agent-sdk/typescript#setting-source) 또는 [`setting_sources`](/ko/agent-sdk/python#setting-source) 항목이 활성화된 경우 설정 파일의 셸 명령 훅이 포함되며, 기본 `query()` 옵션에서는 활성화됩니다.

28 </Step>

29 

30 <Step title="매처가 실행할 훅을 필터링합니다">

31 훅에 [`matcher`](#matchers) 패턴(예: `"Write|Edit"`)이 있으면 SDK는 이벤트의 대상(예: 도구 이름)에 대해 테스트합니다. 매처가 없는 훅은 해당 유형의 모든 이벤트에 대해 실행됩니다.

32 </Step>

33 

34 <Step title="콜백 함수가 실행됩니다">

35 각 일치하는 훅의 [콜백 함수](#callback-functions)는 발생하는 상황에 대한 입력을 받습니다. 도구 이름, 인수, 세션 ID 및 기타 이벤트별 세부 정보입니다.

36 </Step>

37 

38 <Step title="콜백이 결정을 반환합니다">

39 작업(로깅, API 호출, 유효성 검사)을 수행한 후 콜백은 에이전트에게 수행할 작업을 알려주는 [출력 객체](#outputs)를 반환합니다. 작업을 허용하거나, 차단하거나, 입력을 수정하거나, 대화에 컨텍스트를 주입합니다.

40 </Step>

41</Steps>

42 

43다음 예제는 이러한 단계를 함께 보여줍니다. `PreToolUse` 훅(단계 1)을 `"Write|Edit"` 매처(단계 3)로 등록하므로 콜백은 파일 쓰기 도구에만 발생합니다. 트리거되면 콜백은 도구의 입력(단계 4)을 받고 파일 경로가 `.env` 파일을 대상으로 하는지 확인한 후 `permissionDecision: "deny"`를 반환하여 작업을 차단합니다(단계 5).

44 

45<CodeGroup>

46 ```python Python theme={null}

47 import asyncio

48 from claude_agent_sdk import (

49 AssistantMessage,

50 ClaudeSDKClient,

51 ClaudeAgentOptions,

52 HookMatcher,

53 ResultMessage,

54 )

55 

56 

57 # 도구 호출 세부 정보를 받는 훅 콜백을 정의합니다

58 async def protect_env_files(input_data, tool_use_id, context):

59 # 도구의 입력 인수에서 파일 경로를 추출합니다

60 file_path = input_data["tool_input"].get("file_path", "")

61 file_name = file_path.split("/")[-1]

62 

63 # .env 파일을 대상으로 하는 경우 작업을 차단합니다

64 if file_name == ".env":

65 return {

66 "hookSpecificOutput": {

67 "hookEventName": input_data["hook_event_name"],

68 "permissionDecision": "deny",

69 "permissionDecisionReason": "Cannot modify .env files",

70 }

71 }

72 

73 # 빈 객체를 반환하여 작업을 허용합니다

74 return {}

75 

76 

77 async def main():

78 options = ClaudeAgentOptions(

79 hooks={

80 # PreToolUse 이벤트에 대한 훅을 등록합니다

81 # 매처는 Write 및 Edit 도구 호출만 필터링합니다

82 "PreToolUse": [HookMatcher(matcher="Write|Edit", hooks=[protect_env_files])]

83 }

84 )

85 

86 async with ClaudeSDKClient(options=options) as client:

87 await client.query("Update the database configuration")

88 async for message in client.receive_response():

89 # 어시스턴트 및 결과 메시지를 필터링합니다

90 if isinstance(message, (AssistantMessage, ResultMessage)):

91 print(message)

92 

93 

94 asyncio.run(main())

95 ```

96 

97 ```typescript TypeScript theme={null}

98 import { query, HookCallback, PreToolUseHookInput } from "@anthropic-ai/claude-agent-sdk";

99 

100 // HookCallback 타입으로 훅 콜백을 정의합니다

101 const protectEnvFiles: HookCallback = async (input, toolUseID, { signal }) => {

102 // 타입 안전성을 위해 입력을 특정 훅 타입으로 캐스팅합니다

103 const preInput = input as PreToolUseHookInput;

104 

105 // tool_input을 캐스팅하여 속성에 액세스합니다(SDK에서 unknown으로 입력됨)

106 const toolInput = preInput.tool_input as Record<string, unknown>;

107 const filePath = toolInput?.file_path as string;

108 const fileName = filePath?.split("/").pop();

109 

110 // .env 파일을 대상으로 하는 경우 작업을 차단합니다

111 if (fileName === ".env") {

112 return {

113 hookSpecificOutput: {

114 hookEventName: preInput.hook_event_name,

115 permissionDecision: "deny",

116 permissionDecisionReason: "Cannot modify .env files"

117 }

118 };

119 }

120 

121 // 빈 객체를 반환하여 작업을 허용합니다

122 return {};

123 };

124 

125 for await (const message of query({

126 prompt: "Update the database configuration",

127 options: {

128 hooks: {

129 // PreToolUse 이벤트에 대한 훅을 등록합니다

130 // 매처는 Write 및 Edit 도구 호출만 필터링합니다

131 PreToolUse: [{ matcher: "Write|Edit", hooks: [protectEnvFiles] }]

132 }

133 }

134 })) {

135 // 어시스턴트 및 결과 메시지를 필터링합니다

136 if (message.type === "assistant" || message.type === "result") {

137 console.log(message);

138 }

139 }

140 ```

141</CodeGroup>

142 

143## 사용 가능한 훅

144 

145SDK는 에이전트 실행의 다양한 단계에 대한 훅을 제공합니다. 일부 훅은 두 SDK 모두에서 사용 가능하지만 다른 훅은 TypeScript 전용입니다.

146 

147| 훅 이벤트 | Python SDK | TypeScript SDK | 트리거되는 조건 | 사용 사례 예 |

148| -------------------- | ---------- | -------------- | -------------------------------------- | ------------------------------------ |

149| `PreToolUse` | 예 | 예 | 도구 호출 요청(차단 또는 수정 가능) | 위험한 셸 명령 차단 |

150| `PostToolUse` | 예 | 예 | 도구 실행 결과 | 모든 파일 변경 사항을 감사 추적에 기록 |

151| `PostToolUseFailure` | 예 | 예 | 도구 실행 실패 | 도구 오류 처리 또는 기록 |

152| `PostToolBatch` | 아니오 | 예 | 전체 도구 호출 배치가 해결되며, 다음 모델 호출 전에 배치당 한 번 | 전체 배치에 대해 한 번 규칙 주입 |

153| `UserPromptSubmit` | 예 | 예 | 사용자 프롬프트 제출 | 프롬프트에 추가 컨텍스트 주입 |

154| `Stop` | 예 | 예 | 에이전트 실행 중지 | 종료 전 세션 상태 저장 |

155| `SubagentStart` | 예 | 예 | 서브에이전트 초기화 | 병렬 작업 생성 추적 |

156| `SubagentStop` | 예 | 예 | 서브에이전트 완료 | 병렬 작업의 결과 집계 |

157| `PreCompact` | 예 | 예 | 대화 압축 요청 | 요약 전에 전체 기록 보관 |

158| `PermissionRequest` | 예 | 예 | 권한 대화가 표시될 예정 | 사용자 정의 권한 처리 |

159| `SessionStart` | 아니오 | 예 | 세션 초기화 | 로깅 및 원격 측정 초기화 |

160| `SessionEnd` | 아니오 | 예 | 세션 종료 | 임시 리소스 정리 |

161| `Notification` | 예 | 예 | 에이전트 상태 메시지 | 에이전트 상태 업데이트를 Slack 또는 PagerDuty로 전송 |

162| `Setup` | 아니오 | 예 | 세션 설정/유지 관리 | 초기화 작업 실행 |

163| `TeammateIdle` | 아니오 | 예 | 팀원이 유휴 상태가 됨 | 작업 재할당 또는 알림 |

164| `TaskCompleted` | 아니오 | 예 | 백그라운드 작업 완료 | 병렬 작업의 결과 집계 |

165| `ConfigChange` | 아니오 | 예 | 구성 파일 변경 | 동적으로 설정 다시 로드 |

166| `WorktreeCreate` | 아니오 | 예 | Git worktree 생성 | 격리된 작업 공간 추적 |

167| `WorktreeRemove` | 아니오 | 예 | Git worktree 제거 | 작업 공간 리소스 정리 |

168 

169## 훅 구성

170 

171훅을 구성하려면 에이전트 옵션의 `hooks` 필드에 전달합니다(Python의 `ClaudeAgentOptions`, TypeScript의 `options` 객체).

172 

173<CodeGroup>

174 ```python Python theme={null}

175 options = ClaudeAgentOptions(

176 hooks={"PreToolUse": [HookMatcher(matcher="Bash", hooks=[my_callback])]}

177 )

178 

179 async with ClaudeSDKClient(options=options) as client:

180 await client.query("Your prompt")

181 async for message in client.receive_response():

182 print(message)

183 ```

184 

185 ```typescript TypeScript theme={null}

186 for await (const message of query({

187 prompt: "Your prompt",

188 options: {

189 hooks: {

190 PreToolUse: [{ matcher: "Bash", hooks: [myCallback] }]

191 }

192 }

193 })) {

194 console.log(message);

195 }

196 ```

197</CodeGroup>

198 

199`hooks` 옵션은 다음과 같은 딕셔너리(Python) 또는 객체(TypeScript)입니다.

200 

201* **키**는 [훅 이벤트 이름](#available-hooks)입니다(예: `'PreToolUse'`, `'PostToolUse'`, `'Stop'`).

202* **값**은 [매처](#matchers) 배열이며, 각각 선택적 필터 패턴과 [콜백 함수](#callback-functions)를 포함합니다.

203 

204### 매처

205 

206매처를 사용하여 콜백이 발생할 때를 필터링합니다. `matcher` 필드는 훅 이벤트 유형에 따라 다른 값과 일치하는 정규식 문자열입니다. 예를 들어 도구 기반 훅은 도구 이름과 일치하고, `Notification` 훅은 알림 유형과 일치합니다. 각 이벤트 유형에 대한 매처 값의 전체 목록은 [Claude Code 훅 참조](/ko/hooks#matcher-patterns)를 참조하세요.

207 

208| 옵션 | 타입 | 기본값 | 설명 |

209| --------- | ---------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

210| `matcher` | `string` | `undefined` | 이벤트의 필터 필드와 일치하는 정규식 패턴입니다. 도구 훅의 경우 도구 이름입니다. 기본 제공 도구에는 `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent` 등이 포함됩니다([도구 입력 타입](/ko/agent-sdk/typescript#tool-input-types)에서 전체 목록 참조). MCP 도구는 `mcp__<server>__<action>` 패턴을 사용합니다. |

211| `hooks` | `HookCallback[]` | - | 필수입니다. 패턴이 일치할 때 실행할 콜백 함수의 배열 |

212| `timeout` | `number` | `60` | 초 단위의 타임아웃 |

213 

214가능할 때마다 `matcher` 패턴을 사용하여 특정 도구를 대상으로 합니다. `'Bash'` 매처는 Bash 명령에만 실행되지만 패턴을 생략하면 콜백이 이벤트의 모든 발생에 대해 실행됩니다. 도구 기반 훅의 경우 매처는 **도구 이름**으로만 필터링하며, 파일 경로나 다른 인수로는 필터링하지 않습니다. 파일 경로로 필터링하려면 콜백 내에서 `tool_input.file_path`를 확인합니다.

215 

216<Tip>

217 **도구 이름 발견:** [도구 입력 타입](/ko/agent-sdk/typescript#tool-input-types)에서 기본 제공 도구 이름의 전체 목록을 참조하거나, 매처 없이 훅을 추가하여 세션이 수행하는 모든 도구 호출을 기록합니다.

218 

219 **MCP 도구 이름 지정:** MCP 도구는 항상 `mcp__`로 시작하고 그 뒤에 서버 이름과 작업이 옵니다. `mcp__<server>__<action>`. 예를 들어 `playwright`라는 서버를 구성하면 해당 도구는 `mcp__playwright__browser_screenshot`, `mcp__playwright__browser_click` 등으로 이름이 지정됩니다. 서버 이름은 `mcpServers` 구성에서 사용하는 키에서 나옵니다.

220</Tip>

221 

222### 콜백 함수

223 

224#### 입력

225 

226모든 훅 콜백은 세 가지 인수를 받습니다.

227 

228* **입력 데이터:** 이벤트 세부 정보를 포함하는 입력된 객체입니다. 각 훅 유형은 자체 입력 형태를 가집니다(예: `PreToolUseHookInput`은 `tool_name`과 `tool_input`을 포함하고, `NotificationHookInput`은 `message`를 포함합니다). [TypeScript](/ko/agent-sdk/typescript#hook-input) 및 [Python](/ko/agent-sdk/python#hook-input) SDK 참조에서 전체 타입 정의를 참조하세요.

229 * 모든 훅 입력은 `session_id`, `cwd`, `hook_event_name`을 공유합니다.

230 * `agent_id`와 `agent_type`은 훅이 서브에이전트 내에서 발생할 때 채워집니다. TypeScript에서는 기본 훅 입력에 있으며 모든 훅 유형에서 사용 가능합니다. Python에서는 `PreToolUse`, `PostToolUse`, `PostToolUseFailure`에만 있습니다.

231* **도구 사용 ID** (`str | None` / `string | undefined`): 동일한 도구 호출에 대해 `PreToolUse` 및 `PostToolUse` 이벤트를 연결합니다.

232* **컨텍스트:** TypeScript에서는 취소를 위한 `signal` 속성(`AbortSignal`)을 포함합니다. Python에서는 이 인수는 향후 사용을 위해 예약되어 있습니다.

233 

234#### 출력

235 

236콜백은 두 가지 필드 범주를 포함하는 객체를 반환합니다.

237 

238* **최상위 필드**는 대화를 제어합니다. `systemMessage`는 모델에 표시되는 메시지를 대화에 주입하고, `continue`(Python에서는 `continue_`)는 이 훅 후에 에이전트가 계속 실행되는지 여부를 결정합니다.

239* \*\*`hookSpecificOutput`\*\*은 현재 작업을 제어합니다. 내부의 필드는 훅 이벤트 유형에 따라 다릅니다. `PreToolUse` 훅의 경우 `permissionDecision`(`"allow"`, `"deny"`, 또는 `"ask"`), `permissionDecisionReason`, `updatedInput`을 설정하는 곳입니다. TypeScript SDK에서 `permissionDecision`은 또한 `"defer"`를 수락하여 쿼리를 종료하고 [나중에 재개](/ko/hooks#defer-a-tool-call-for-later)합니다. 이 값은 Python SDK에서 사용할 수 없습니다. `PostToolUse` 훅의 경우 `additionalContext`를 설정하여 도구 결과에 정보를 추가할 수 있습니다.

240 

241변경 없이 작업을 허용하려면 `{}`를 반환합니다. SDK 콜백 훅은 [Claude Code 셸 명령 훅](/ko/hooks#json-output)과 동일한 JSON 출력 형식을 사용하며, 이는 모든 필드와 이벤트별 옵션을 문서화합니다. SDK 타입 정의는 [TypeScript](/ko/agent-sdk/typescript#sync-hook-json-output) 및 [Python](/ko/agent-sdk/python#sync-hook-json-output) SDK 참조를 참조하세요.

242 

243<Note>

244 여러 훅 또는 권한 규칙이 적용되는 경우 **deny**는 **defer**보다 우선하고, **defer**는 **ask**보다 우선하고, **ask**는 **allow**보다 우선합니다. 훅이 `deny`를 반환하면 다른 훅에 관계없이 작업이 차단됩니다.

245</Note>

246 

247#### 비동기 출력

248 

249기본적으로 에이전트는 훅이 반환될 때까지 기다립니다. 훅이 부작용(로깅, 웹훅 전송)을 수행하고 에이전트의 동작에 영향을 미칠 필요가 없으면 대신 비동기 출력을 반환할 수 있습니다. 이는 에이전트에게 훅이 완료될 때까지 기다리지 않고 즉시 계속하도록 알립니다.

250 

251<CodeGroup>

252 ```python Python theme={null}

253 async def async_hook(input_data, tool_use_id, context):

254 # 백그라운드 작업을 시작한 후 즉시 반환합니다

255 asyncio.create_task(send_to_logging_service(input_data))

256 return {"async_": True, "asyncTimeout": 30000}

257 ```

258 

259 ```typescript TypeScript theme={null}

260 const asyncHook: HookCallback = async (input, toolUseID, { signal }) => {

261 // 백그라운드 작업을 시작한 후 즉시 반환합니다

262 sendToLoggingService(input).catch(console.error);

263 return { async: true, asyncTimeout: 30000 };

264 };

265 ```

266</CodeGroup>

267 

268| 필드 | 타입 | 설명 |

269| -------------- | -------- | ------------------------------------------------------------------------------ |

270| `async` | `true` | 비동기 모드를 신호합니다. 에이전트는 기다리지 않고 진행합니다. Python에서는 예약된 키워드를 피하기 위해 `async_`를 사용합니다. |

271| `asyncTimeout` | `number` | 백그라운드 작업에 대한 선택적 타임아웃(밀리초) |

272 

273<Note>

274 비동기 출력은 에이전트가 이미 진행했으므로 차단, 수정 또는 작업에 컨텍스트를 주입할 수 없습니다. 로깅, 메트릭 또는 알림 같은 부작용에만 사용합니다.

275</Note>

276 

277## 예제

278 

279### 도구 입력 수정

280 

281이 예제는 Write 도구 호출을 가로채고 `file_path` 인수를 다시 작성하여 `/sandbox`를 앞에 붙여 모든 파일 쓰기를 샌드박스 디렉토리로 리디렉션합니다. 콜백은 수정된 경로와 함께 `updatedInput`을 반환하고 `permissionDecision: 'allow'`를 반환하여 다시 작성된 작업을 자동 승인합니다.

282 

283<CodeGroup>

284 ```python Python theme={null}

285 async def redirect_to_sandbox(input_data, tool_use_id, context):

286 if input_data["hook_event_name"] != "PreToolUse":

287 return {}

288 

289 if input_data["tool_name"] == "Write":

290 original_path = input_data["tool_input"].get("file_path", "")

291 return {

292 "hookSpecificOutput": {

293 "hookEventName": input_data["hook_event_name"],

294 "permissionDecision": "allow",

295 "updatedInput": {

296 **input_data["tool_input"],

297 "file_path": f"/sandbox{original_path}",

298 },

299 }

300 }

301 return {}

302 ```

303 

304 ```typescript TypeScript theme={null}

305 const redirectToSandbox: HookCallback = async (input, toolUseID, { signal }) => {

306 if (input.hook_event_name !== "PreToolUse") return {};

307 

308 const preInput = input as PreToolUseHookInput;

309 const toolInput = preInput.tool_input as Record<string, unknown>;

310 if (preInput.tool_name === "Write") {

311 const originalPath = toolInput.file_path as string;

312 return {

313 hookSpecificOutput: {

314 hookEventName: preInput.hook_event_name,

315 permissionDecision: "allow",

316 updatedInput: {

317 ...toolInput,

318 file_path: `/sandbox${originalPath}`

319 }

320 }

321 };

322 }

323 return {};

324 };

325 ```

326</CodeGroup>

327 

328<Note>

329 `updatedInput`을 사용할 때는 `permissionDecision: 'allow'`도 포함해야 합니다. 항상 원본 `tool_input`을 변경하지 않고 새 객체를 반환합니다.

330</Note>

331 

332### 컨텍스트 추가 및 도구 차단

333 

334이 예제는 `/etc` 디렉토리에 쓰려는 모든 시도를 차단하고 두 개의 출력 필드를 함께 사용합니다. `permissionDecision: 'deny'`는 도구 호출을 중지하고, `systemMessage`는 대화에 미리 알림을 주입하여 에이전트가 작업이 차단된 이유에 대한 컨텍스트를 받고 재시도를 피합니다.

335 

336<CodeGroup>

337 ```python Python theme={null}

338 async def block_etc_writes(input_data, tool_use_id, context):

339 file_path = input_data["tool_input"].get("file_path", "")

340 

341 if file_path.startswith("/etc"):

342 return {

343 # 최상위 필드: 대화에 지침을 주입합니다

344 "systemMessage": "Remember: system directories like /etc are protected.",

345 # hookSpecificOutput: 작업을 차단합니다

346 "hookSpecificOutput": {

347 "hookEventName": input_data["hook_event_name"],

348 "permissionDecision": "deny",

349 "permissionDecisionReason": "Writing to /etc is not allowed",

350 },

351 }

352 return {}

353 ```

354 

355 ```typescript TypeScript theme={null}

356 const blockEtcWrites: HookCallback = async (input, toolUseID, { signal }) => {

357 const preInput = input as PreToolUseHookInput;

358 const toolInput = preInput.tool_input as Record<string, unknown>;

359 const filePath = toolInput?.file_path as string;

360 

361 if (filePath?.startsWith("/etc")) {

362 return {

363 // 최상위 필드: 대화에 지침을 주입합니다

364 systemMessage: "Remember: system directories like /etc are protected.",

365 // hookSpecificOutput: 작업을 차단합니다

366 hookSpecificOutput: {

367 hookEventName: preInput.hook_event_name,

368 permissionDecision: "deny",

369 permissionDecisionReason: "Writing to /etc is not allowed"

370 }

371 };

372 }

373 return {};

374 };

375 ```

376</CodeGroup>

377 

378### 특정 도구 자동 승인

379 

380기본적으로 에이전트는 특정 도구를 사용하기 전에 권한을 요청할 수 있습니다. 이 예제는 `permissionDecision: 'allow'`를 반환하여 읽기 전용 파일 시스템 도구(Read, Glob, Grep)를 자동 승인하여 사용자 확인 없이 실행되도록 하면서 다른 모든 도구는 일반 권한 확인을 받습니다.

381 

382<CodeGroup>

383 ```python Python theme={null}

384 async def auto_approve_read_only(input_data, tool_use_id, context):

385 if input_data["hook_event_name"] != "PreToolUse":

386 return {}

387 

388 read_only_tools = ["Read", "Glob", "Grep"]

389 if input_data["tool_name"] in read_only_tools:

390 return {

391 "hookSpecificOutput": {

392 "hookEventName": input_data["hook_event_name"],

393 "permissionDecision": "allow",

394 "permissionDecisionReason": "Read-only tool auto-approved",

395 }

396 }

397 return {}

398 ```

399 

400 ```typescript TypeScript theme={null}

401 const autoApproveReadOnly: HookCallback = async (input, toolUseID, { signal }) => {

402 if (input.hook_event_name !== "PreToolUse") return {};

403 

404 const preInput = input as PreToolUseHookInput;

405 const readOnlyTools = ["Read", "Glob", "Grep"];

406 if (readOnlyTools.includes(preInput.tool_name)) {

407 return {

408 hookSpecificOutput: {

409 hookEventName: preInput.hook_event_name,

410 permissionDecision: "allow",

411 permissionDecisionReason: "Read-only tool auto-approved"

412 }

413 };

414 }

415 return {};

416 };

417 ```

418</CodeGroup>

419 

420### 여러 훅 연결

421 

422훅은 배열에 나타나는 순서대로 실행됩니다. 각 훅을 단일 책임에 집중하고 복잡한 로직을 위해 여러 훅을 연결합니다.

423 

424<CodeGroup>

425 ```python Python theme={null}

426 options = ClaudeAgentOptions(

427 hooks={

428 "PreToolUse": [

429 HookMatcher(hooks=[rate_limiter]), # 첫 번째: 속도 제한 확인

430 HookMatcher(hooks=[authorization_check]), # 두 번째: 권한 확인

431 HookMatcher(hooks=[input_sanitizer]), # 세 번째: 입력 정제

432 HookMatcher(hooks=[audit_logger]), # 마지막: 작업 기록

433 ]

434 }

435 )

436 ```

437 

438 ```typescript TypeScript theme={null}

439 const options = {

440 hooks: {

441 PreToolUse: [

442 { hooks: [rateLimiter] }, // 첫 번째: 속도 제한 확인

443 { hooks: [authorizationCheck] }, // 두 번째: 권한 확인

444 { hooks: [inputSanitizer] }, // 세 번째: 입력 정제

445 { hooks: [auditLogger] } // 마지막: 작업 기록

446 ]

447 }

448 };

449 ```

450</CodeGroup>

451 

452### 정규식 매처로 필터링

453 

454정규식 패턴을 사용하여 여러 도구를 일치시킵니다. 이 예제는 서로 다른 범위의 세 가지 매처를 등록합니다. 첫 번째는 파일 수정 도구에만 `file_security_hook`을 트리거하고, 두 번째는 모든 MCP 도구(이름이 `mcp__`로 시작하는 도구)에 대해 `mcp_audit_hook`을 트리거하고, 세 번째는 이름에 관계없이 모든 도구 호출에 대해 `global_logger`를 트리거합니다.

455 

456<CodeGroup>

457 ```python Python theme={null}

458 options = ClaudeAgentOptions(

459 hooks={

460 "PreToolUse": [

461 # 파일 수정 도구 일치

462 HookMatcher(matcher="Write|Edit|Delete", hooks=[file_security_hook]),

463 # 모든 MCP 도구 일치

464 HookMatcher(matcher="^mcp__", hooks=[mcp_audit_hook]),

465 # 모든 것 일치(매처 없음)

466 HookMatcher(hooks=[global_logger]),

467 ]

468 }

469 )

470 ```

471 

472 ```typescript TypeScript theme={null}

473 const options = {

474 hooks: {

475 PreToolUse: [

476 // 파일 수정 도구 일치

477 { matcher: "Write|Edit|Delete", hooks: [fileSecurityHook] },

478 

479 // 모든 MCP 도구 일치

480 { matcher: "^mcp__", hooks: [mcpAuditHook] },

481 

482 // 모든 것 일치(매처 없음)

483 { hooks: [globalLogger] }

484 ]

485 }

486 };

487 ```

488</CodeGroup>

489 

490### 서브에이전트 활동 추적

491 

492`SubagentStop` 훅을 사용하여 서브에이전트가 작업을 완료할 때를 모니터링합니다. [TypeScript](/ko/agent-sdk/typescript#hook-input) 및 [Python](/ko/agent-sdk/python#hook-input) SDK 참조에서 전체 입력 타입을 참조하세요. 이 예제는 서브에이전트가 완료될 때마다 요약을 기록합니다.

493 

494<CodeGroup>

495 ```python Python theme={null}

496 async def subagent_tracker(input_data, tool_use_id, context):

497 # 서브에이전트가 완료될 때 세부 정보를 기록합니다

498 print(f"[SUBAGENT] Completed: {input_data['agent_id']}")

499 print(f" Transcript: {input_data['agent_transcript_path']}")

500 print(f" Tool use ID: {tool_use_id}")

501 print(f" Stop hook active: {input_data.get('stop_hook_active')}")

502 return {}

503 

504 

505 options = ClaudeAgentOptions(

506 hooks={"SubagentStop": [HookMatcher(hooks=[subagent_tracker])]}

507 )

508 ```

509 

510 ```typescript TypeScript theme={null}

511 import { HookCallback, SubagentStopHookInput } from "@anthropic-ai/claude-agent-sdk";

512 

513 const subagentTracker: HookCallback = async (input, toolUseID, { signal }) => {

514 // SubagentStopHookInput으로 캐스팅하여 서브에이전트별 필드에 액세스합니다

515 const subInput = input as SubagentStopHookInput;

516 

517 // 서브에이전트가 완료될 때 세부 정보를 기록합니다

518 console.log(`[SUBAGENT] Completed: ${subInput.agent_id}`);

519 console.log(` Transcript: ${subInput.agent_transcript_path}`);

520 console.log(` Tool use ID: ${toolUseID}`);

521 console.log(` Stop hook active: ${subInput.stop_hook_active}`);

522 return {};

523 };

524 

525 const options = {

526 hooks: {

527 SubagentStop: [{ hooks: [subagentTracker] }]

528 }

529 };

530 ```

531</CodeGroup>

532 

533### 훅에서 HTTP 요청 만들기

534 

535훅은 HTTP 요청 같은 비동기 작업을 수행할 수 있습니다. 처리되지 않은 예외가 에이전트를 중단할 수 있으므로 훅 내에서 오류를 포착하고 전파하지 않습니다.

536 

537이 예제는 각 도구가 완료된 후 웹훅을 전송하여 어떤 도구가 실행되었는지와 언제 실행되었는지를 기록합니다. 훅은 실패한 웹훅이 에이전트를 중단하지 않도록 오류를 포착합니다.

538 

539<CodeGroup>

540 ```python Python theme={null}

541 import asyncio

542 import json

543 import urllib.request

544 from datetime import datetime

545 

546 

547 def _send_webhook(tool_name):

548 """도구 사용 데이터를 외부 웹훅에 POST하는 동기 헬퍼입니다."""

549 data = json.dumps(

550 {

551 "tool": tool_name,

552 "timestamp": datetime.now().isoformat(),

553 }

554 ).encode()

555 req = urllib.request.Request(

556 "https://api.example.com/webhook",

557 data=data,

558 headers={"Content-Type": "application/json"},

559 method="POST",

560 )

561 urllib.request.urlopen(req)

562 

563 

564 async def webhook_notifier(input_data, tool_use_id, context):

565 # 도구가 완료된 후(PostToolUse)에만 발생하고, 전에는 아닙니다

566 if input_data["hook_event_name"] != "PostToolUse":

567 return {}

568 

569 try:

570 # 이벤트 루프를 차단하지 않도록 스레드에서 차단 HTTP 호출을 실행합니다

571 await asyncio.to_thread(_send_webhook, input_data["tool_name"])

572 except Exception as e:

573 # 오류를 기록하지만 발생시키지 않습니다. 실패한 웹훅이 에이전트를 중단해서는 안 됩니다

574 print(f"Webhook request failed: {e}")

575 

576 return {}

577 ```

578 

579 ```typescript TypeScript theme={null}

580 import { query, HookCallback, PostToolUseHookInput } from "@anthropic-ai/claude-agent-sdk";

581 

582 const webhookNotifier: HookCallback = async (input, toolUseID, { signal }) => {

583 // 도구가 완료된 후(PostToolUse)에만 발생하고, 전에는 아닙니다

584 if (input.hook_event_name !== "PostToolUse") return {};

585 

586 try {

587 await fetch("https://api.example.com/webhook", {

588 method: "POST",

589 headers: { "Content-Type": "application/json" },

590 body: JSON.stringify({

591 tool: (input as PostToolUseHookInput).tool_name,

592 timestamp: new Date().toISOString()

593 }),

594 // 훅이 타임아웃되면 요청이 취소되도록 신호를 전달합니다

595 signal

596 });

597 } catch (error) {

598 // 다른 오류와 별도로 취소를 처리합니다

599 if (error instanceof Error && error.name === "AbortError") {

600 console.log("Webhook request cancelled");

601 }

602 // 다시 발생시키지 않습니다. 실패한 웹훅이 에이전트를 중단해서는 안 됩니다

603 }

604 

605 return {};

606 };

607 

608 // PostToolUse 훅으로 등록합니다

609 for await (const message of query({

610 prompt: "Refactor the auth module",

611 options: {

612 hooks: {

613 PostToolUse: [{ hooks: [webhookNotifier] }]

614 }

615 }

616 })) {

617 console.log(message);

618 }

619 ```

620</CodeGroup>

621 

622### Slack으로 알림 전달

623 

624`Notification` 훅을 사용하여 에이전트에서 시스템 알림을 받고 외부 서비스로 전달합니다. 알림은 특정 이벤트 유형에 대해 발생합니다. `permission_prompt`(Claude가 권한 필요), `idle_prompt`(Claude가 입력 대기 중), `auth_success`(인증 완료), `elicitation_dialog`(Claude가 사용자에게 프롬프트 중). 각 알림에는 인간이 읽을 수 있는 설명이 있는 `message` 필드와 선택적으로 `title`이 포함됩니다.

625 

626이 예제는 모든 알림을 Slack 채널로 전달합니다. [Slack 수신 웹훅 URL](https://api.slack.com/messaging/webhooks)이 필요하며, 이는 Slack 작업 공간에 앱을 추가하고 수신 웹훅을 활성화하여 생성합니다.

627 

628<CodeGroup>

629 ```python Python theme={null}

630 import asyncio

631 import json

632 import urllib.request

633 

634 from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, HookMatcher

635 

636 

637 def _send_slack_notification(message):

638 """수신 웹훅을 통해 Slack에 메시지를 보내는 동기 헬퍼입니다."""

639 data = json.dumps({"text": f"Agent status: {message}"}).encode()

640 req = urllib.request.Request(

641 "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",

642 data=data,

643 headers={"Content-Type": "application/json"},

644 method="POST",

645 )

646 urllib.request.urlopen(req)

647 

648 

649 async def notification_handler(input_data, tool_use_id, context):

650 try:

651 # 이벤트 루프를 차단하지 않도록 스레드에서 차단 HTTP 호출을 실행합니다

652 await asyncio.to_thread(_send_slack_notification, input_data.get("message", ""))

653 except Exception as e:

654 print(f"Failed to send notification: {e}")

655 

656 # 빈 객체를 반환합니다. 알림 훅은 에이전트 동작을 수정하지 않습니다

657 return {}

658 

659 

660 async def main():

661 options = ClaudeAgentOptions(

662 hooks={

663 # 알림 이벤트에 대한 훅을 등록합니다(매처 필요 없음)

664 "Notification": [HookMatcher(hooks=[notification_handler])],

665 },

666 )

667 

668 async with ClaudeSDKClient(options=options) as client:

669 await client.query("Analyze this codebase")

670 async for message in client.receive_response():

671 print(message)

672 

673 

674 asyncio.run(main())

675 ```

676 

677 ```typescript TypeScript theme={null}

678 import { query, HookCallback, NotificationHookInput } from "@anthropic-ai/claude-agent-sdk";

679 

680 // Slack으로 알림을 보내는 훅 콜백을 정의합니다

681 const notificationHandler: HookCallback = async (input, toolUseID, { signal }) => {

682 // NotificationHookInput으로 캐스팅하여 메시지 필드에 액세스합니다

683 const notification = input as NotificationHookInput;

684 

685 try {

686 // 알림 메시지를 Slack 수신 웹훅에 POST합니다

687 await fetch("https://hooks.slack.com/services/YOUR/WEBHOOK/URL", {

688 method: "POST",

689 headers: { "Content-Type": "application/json" },

690 body: JSON.stringify({

691 text: `Agent status: ${notification.message}`

692 }),

693 // 훅이 타임아웃되면 요청이 취소되도록 신호를 전달합니다

694 signal

695 });

696 } catch (error) {

697 if (error instanceof Error && error.name === "AbortError") {

698 console.log("Notification cancelled");

699 } else {

700 console.error("Failed to send notification:", error);

701 }

702 }

703 

704 // 빈 객체를 반환합니다. 알림 훅은 에이전트 동작을 수정하지 않습니다

705 return {};

706 };

707 

708 // 알림 이벤트에 대한 훅을 등록합니다(매처 필요 없음)

709 for await (const message of query({

710 prompt: "Analyze this codebase",

711 options: {

712 hooks: {

713 Notification: [{ hooks: [notificationHandler] }]

714 }

715 }

716 })) {

717 console.log(message);

718 }

719 ```

720</CodeGroup>

721 

722## 일반적인 문제 해결

723 

724### 훅이 발생하지 않음

725 

726* 훅 이벤트 이름이 올바르고 대소문자를 구분하는지 확인합니다(`preToolUse`가 아닌 `PreToolUse`).

727* 매처 패턴이 도구 이름과 정확히 일치하는지 확인합니다.

728* 훅이 `options.hooks`의 올바른 이벤트 유형 아래에 있는지 확인합니다.

729* `Stop` 및 `SubagentStop` 같은 도구가 아닌 훅의 경우 매처는 다른 필드와 일치합니다([매처 패턴](/ko/hooks#matcher-patterns) 참조).

730* 에이전트가 [`max_turns`](/ko/agent-sdk/python#claude-agent-options) 제한에 도달하면 훅이 발생하지 않을 수 있습니다. 세션이 훅을 실행하기 전에 종료되기 때문입니다.

731 

732### 매처가 예상대로 필터링하지 않음

733 

734매처는 **도구 이름**만 일치하며, 파일 경로나 다른 인수는 일치하지 않습니다. 파일 경로로 필터링하려면 훅 내에서 `tool_input.file_path`를 확인합니다.

735 

736```typescript theme={null}

737const myHook: HookCallback = async (input, toolUseID, { signal }) => {

738 const preInput = input as PreToolUseHookInput;

739 const toolInput = preInput.tool_input as Record<string, unknown>;

740 const filePath = toolInput?.file_path as string;

741 if (!filePath?.endsWith(".md")) return {}; // 마크다운이 아닌 파일 건너뛰기

742 // 마크다운 파일 처리...

743 return {};

744};

745```

746 

747### 훅 타임아웃

748 

749* `HookMatcher` 구성에서 `timeout` 값을 증가시킵니다.

750* TypeScript에서 세 번째 콜백 인수의 `AbortSignal`을 사용하여 취소를 정상적으로 처리합니다.

751 

752### 도구가 예기치 않게 차단됨

753 

754* `permissionDecision: 'deny'` 반환에 대해 모든 `PreToolUse` 훅을 확인합니다.

755* 훅에 로깅을 추가하여 반환하는 `permissionDecisionReason`을 확인합니다.

756* 매처 패턴이 너무 광범위하지 않은지 확인합니다(빈 매처는 모든 도구와 일치).

757 

758### 수정된 입력이 적용되지 않음

759 

760* `updatedInput`이 최상위 수준이 아닌 `hookSpecificOutput` 내부에 있는지 확인합니다.

761 

762 ```typescript theme={null}

763 return {

764 hookSpecificOutput: {

765 hookEventName: "PreToolUse",

766 permissionDecision: "allow",

767 updatedInput: { command: "new command" }

768 }

769 };

770 ```

771 

772* 입력 수정이 적용되려면 `permissionDecision: 'allow'`도 반환해야 합니다.

773 

774* `hookSpecificOutput`에 `hookEventName`을 포함하여 출력이 어떤 훅 유형에 대한 것인지 식별합니다.

775 

776### Python에서 세션 훅을 사용할 수 없음

777 

778`SessionStart` 및 `SessionEnd`는 TypeScript에서 SDK 콜백 훅으로 등록할 수 있지만 Python SDK에서는 사용할 수 없습니다(`HookEvent`는 이를 생략합니다). Python에서는 설정 파일(예: `.claude/settings.json`)에 정의된 [셸 명령 훅](/ko/hooks#hook-events)으로만 사용 가능합니다. SDK 애플리케이션에서 셸 명령 훅을 로드하려면 [`setting_sources`](/ko/agent-sdk/python#setting-source) 또는 [`settingSources`](/ko/agent-sdk/typescript#setting-source)를 사용하여 적절한 설정 소스를 포함합니다.

779 

780<CodeGroup>

781 ```python Python theme={null}

782 options = ClaudeAgentOptions(

783 setting_sources=["project"], # .claude/settings.json을 로드합니다(훅 포함)

784 )

785 ```

786 

787 ```typescript TypeScript theme={null}

788 const options = {

789 settingSources: ["project"] // .claude/settings.json을 로드합니다(훅 포함)

790 };

791 ```

792</CodeGroup>

793 

794Python SDK 콜백으로 초기화 로직을 실행하려면 `client.receive_response()`의 첫 번째 메시지를 트리거로 사용합니다.

795 

796### 서브에이전트 권한 프롬프트 증가

797 

798여러 서브에이전트를 생성할 때 각각 별도로 권한을 요청할 수 있습니다. 서브에이전트는 부모 에이전트 권한을 자동으로 상속하지 않습니다. 반복된 프롬프트를 피하려면 `PreToolUse` 훅을 사용하여 특정 도구를 자동 승인하거나 서브에이전트 세션에 적용되는 권한 규칙을 구성합니다.

799 

800### 서브에이전트를 사용한 재귀 훅 루프

801 

802서브에이전트를 생성하는 `UserPromptSubmit` 훅은 해당 서브에이전트가 동일한 훅을 트리거하면 무한 루프를 만들 수 있습니다. 이를 방지하려면:

803 

804* 훅 입력에서 서브에이전트 표시기를 확인한 후 생성합니다.

805* 공유 변수 또는 세션 상태를 사용하여 이미 서브에이전트 내부에 있는지 추적합니다.

806* 훅을 최상위 에이전트 세션에만 실행되도록 범위를 지정합니다.

807 

808### systemMessage가 출력에 나타나지 않음

809 

810`systemMessage` 필드는 모델이 보는 대화에 컨텍스트를 추가하지만 모든 SDK 출력 모드에 나타나지 않을 수 있습니다. 훅 결정을 애플리케이션에 표시해야 하면 별도로 기록하거나 전용 출력 채널을 사용합니다.

811 

812## 관련 리소스

813 

814* [Claude Code 훅 참조](/ko/hooks): 전체 JSON 입력/출력 스키마, 이벤트 문서 및 매처 패턴

815* [Claude Code 훅 가이드](/ko/hooks-guide): 셸 명령 훅 예제 및 연습

816* [TypeScript SDK 참조](/ko/agent-sdk/typescript): 훅 타입, 입력/출력 정의 및 구성 옵션

817* [Python SDK 참조](/ko/agent-sdk/python): 훅 타입, 입력/출력 정의 및 구성 옵션

818* [권한](/ko/agent-sdk/permissions): 에이전트가 수행할 수 있는 작업 제어

819* [사용자 정의 도구](/ko/agent-sdk/custom-tools): 에이전트 기능을 확장하는 도구 구축

agent-sdk/hosting.md +142 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Agent SDK 호스팅

6 

7> 프로덕션 환경에서 Claude Agent SDK 배포 및 호스팅

8 

9Claude Agent SDK는 기존의 상태 비저장 LLM API와 달리 대화 상태를 유지하고 지속적인 환경에서 명령을 실행합니다. 이 가이드는 프로덕션에서 SDK 기반 에이전트를 배포하기 위한 아키텍처, 호스팅 고려사항 및 모범 사례를 다룹니다.

10 

11<Info>

12 기본 샌드박싱을 넘어선 보안 강화(네트워크 제어, 자격증명 관리 및 격리 옵션 포함)에 대해서는 [보안 배포](/ko/agent-sdk/secure-deployment)를 참조하십시오.

13</Info>

14 

15## 호스팅 요구사항

16 

17### 컨테이너 기반 샌드박싱

18 

19보안 및 격리를 위해 SDK는 샌드박싱된 컨테이너 환경 내에서 실행되어야 합니다. 이는 프로세스 격리, 리소스 제한, 네트워크 제어 및 임시 파일 시스템을 제공합니다.

20 

21SDK는 또한 명령 실행을 위한 [프로그래밍 방식의 샌드박스 구성](/ko/agent-sdk/typescript#sandbox-settings)을 지원합니다.

22 

23### 시스템 요구사항

24 

25각 SDK 인스턴스에는 다음이 필요합니다:

26 

27* **런타임 종속성**

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

29 * 두 SDK 패키지 모두 호스트 플랫폼용 네이티브 Claude Code 바이너리를 번들로 포함하므로 생성된 CLI에 대해 별도의 Claude Code 또는 Node.js 설치가 필요하지 않습니다.

30 

31* **리소스 할당**

32 * 권장: 1GiB RAM, 5GiB 디스크 및 1 CPU(필요에 따라 작업에 맞게 조정)

33 

34* **네트워크 액세스**

35 * `api.anthropic.com`으로의 아웃바운드 HTTPS

36 * 선택사항: MCP 서버 또는 외부 도구에 대한 액세스

37 

38## SDK 아키텍처 이해

39 

40상태 비저장 API 호출과 달리 Claude Agent SDK는 다음을 수행하는 **장기 실행 프로세스**로 작동합니다:

41 

42* **명령 실행** - 지속적인 셸 환경에서

43* **파일 작업 관리** - 작업 디렉토리 내에서

44* **도구 실행 처리** - 이전 상호작용의 컨텍스트 포함

45 

46## 샌드박스 제공자 옵션

47 

48여러 제공자가 AI 코드 실행을 위한 보안 컨테이너 환경을 전문으로 합니다:

49 

50* **[Modal Sandbox](https://modal.com/docs/guide/sandbox)** - [데모 구현](https://modal.com/docs/examples/claude-slack-gif-creator)

51* **[Cloudflare Sandboxes](https://github.com/cloudflare/sandbox-sdk)**

52* **[Daytona](https://www.daytona.io/)**

53* **[E2B](https://e2b.dev/)**

54* **[Fly Machines](https://fly.io/docs/machines/)**

55* **[Vercel Sandbox](https://vercel.com/docs/functions/sandbox)**

56 

57자체 호스팅 옵션(Docker, gVisor, Firecracker) 및 상세한 격리 구성에 대해서는 [격리 기술](/ko/agent-sdk/secure-deployment#isolation-technologies)을 참조하십시오.

58 

59## 프로덕션 배포 패턴

60 

61### 패턴 1: 임시 세션

62 

63각 사용자 작업에 대해 새 컨테이너를 생성한 후 완료되면 삭제합니다.

64 

65일회성 작업에 최적이며, 사용자는 작업이 완료되는 동안 AI와 상호작용할 수 있지만 완료되면 컨테이너가 삭제됩니다.

66 

67**예시:**

68 

69* 버그 조사 및 수정: 관련 컨텍스트를 사용하여 특정 문제를 디버깅하고 해결

70* 송장 처리: 회계 시스템을 위해 영수증/송장에서 데이터 추출 및 구조화

71* 번역 작업: 언어 간 문서 또는 콘텐츠 배치 번역

72* 이미지/비디오 처리: 미디어 파일에서 변환, 최적화 또는 메타데이터 추출 적용

73 

74### 패턴 2: 장기 실행 세션

75 

76장기 실행 작업을 위해 지속적인 컨테이너 인스턴스를 유지합니다. 종종 수요에 따라 컨테이너 내에서 **여러** Claude Agent 프로세스를 실행합니다.

77 

78사용자 입력 없이 조치를 취하는 사전 예방적 에이전트, 콘텐츠를 제공하는 에이전트 또는 많은 양의 메시지를 처리하는 에이전트에 최적입니다.

79 

80**예시:**

81 

82* 이메일 에이전트: 수신 이메일을 모니터링하고 콘텐츠에 따라 자동으로 분류, 응답 또는 조치 수행

83* 사이트 빌더: 컨테이너 포트를 통해 제공되는 라이브 편집 기능이 있는 사용자별 맞춤 웹사이트 호스팅

84* 고빈도 채팅봇: Slack과 같은 플랫폼에서 빠른 응답 시간이 중요한 지속적인 메시지 스트림 처리

85 

86### 패턴 3: 하이브리드 세션

87 

88데이터베이스에서 또는 SDK의 세션 재개 기능에서 가져온 기록 및 상태로 수화된 임시 컨테이너입니다.

89 

90사용자의 간헐적인 상호작용으로 작업을 시작하고 작업이 완료되면 종료되지만 계속할 수 있는 컨테이너에 최적입니다.

91 

92**예시:**

93 

94* 개인 프로젝트 관리자: 간헐적인 체크인으로 진행 중인 프로젝트 관리를 지원하고 작업, 결정 및 진행 상황의 컨텍스트 유지

95* 심층 연구: 수 시간의 연구 작업을 수행하고 결과를 저장하며 사용자가 돌아올 때 조사 재개

96* 고객 지원 에이전트: 여러 상호작용에 걸친 지원 티켓을 처리하고 티켓 기록 및 고객 컨텍스트 로드

97 

98### 패턴 4: 단일 컨테이너

99 

100하나의 글로벌 컨테이너에서 여러 Claude Agent SDK 프로세스를 실행합니다.

101 

102밀접하게 협력해야 하는 에이전트에 최적입니다. 에이전트가 서로를 덮어쓰지 않도록 방지해야 하므로 이것이 가장 인기 없는 패턴일 가능성이 높습니다.

103 

104**예시:**

105 

106* **시뮬레이션**: 비디오 게임과 같은 시뮬레이션에서 서로 상호작용하는 에이전트입니다.

107 

108## FAQ

109 

110### 샌드박스와 어떻게 통신합니까?

111 

112컨테이너에서 호스팅할 때 SDK 인스턴스와 통신하기 위해 포트를 노출합니다. 애플리케이션은 외부 클라이언트를 위해 HTTP/WebSocket 엔드포인트를 노출할 수 있으며 SDK는 컨테이너 내에서 내부적으로 실행됩니다.

113 

114### 컨테이너 호스팅 비용은 얼마입니까?

115 

116에이전트 제공의 주요 비용은 토큰입니다. 컨테이너는 프로비저닝하는 항목에 따라 다르지만 최소 비용은 대략 시간당 5센트입니다.

117 

118### 유휴 컨테이너를 종료해야 할 때와 따뜻하게 유지해야 할 때는 언제입니까?

119 

120이는 제공자에 따라 다를 가능성이 높으며, 다양한 샌드박스 제공자는 샌드박스가 종료될 수 있는 유휴 타임아웃에 대해 다양한 기준을 설정할 수 있습니다.

121사용자 응답이 얼마나 자주 발생할 것으로 예상되는지에 따라 이 타임아웃을 조정하고 싶을 것입니다.

122 

123### Claude Code CLI를 얼마나 자주 업데이트해야 합니까?

124 

125Claude Code CLI는 semver로 버전이 지정되므로 모든 주요 변경사항이 버전이 지정됩니다.

126 

127### 컨테이너 상태 및 에이전트 성능을 어떻게 모니터링합니까?

128 

129컨테이너는 단지 서버이므로 백엔드에 사용하는 동일한 로깅 인프라가 컨테이너에서 작동합니다.

130 

131### 에이전트 세션이 타임아웃되기 전에 얼마나 오래 실행될 수 있습니까?

132 

133에이전트 세션은 타임아웃되지 않지만 Claude가 루프에 갇히는 것을 방지하기 위해 'maxTurns' 속성을 설정하는 것을 고려하십시오.

134 

135## 다음 단계

136 

137* [보안 배포](/ko/agent-sdk/secure-deployment) - 네트워크 제어, 자격증명 관리 및 격리 강화

138* [TypeScript SDK - 샌드박스 설정](/ko/agent-sdk/typescript#sandbox-settings) - 프로그래밍 방식으로 샌드박스 구성

139* [세션 가이드](/ko/agent-sdk/sessions) - 세션 관리에 대해 알아보기

140* [권한](/ko/agent-sdk/permissions) - 도구 권한 구성

141* [비용 추적](/ko/agent-sdk/cost-tracking) - API 사용량 모니터링

142* [MCP 통합](/ko/agent-sdk/mcp) - 맞춤 도구로 확장

agent-sdk/overview.md +607 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Agent SDK 개요

6 

7> Claude Code를 라이브러리로 사용하여 프로덕션 AI 에이전트 구축하기

8 

9<Note>

10 Claude Code SDK의 이름이 Claude Agent SDK로 변경되었습니다. 이전 SDK에서 마이그레이션하는 경우 [마이그레이션 가이드](/ko/agent-sdk/migration-guide)를 참조하십시오.

11</Note>

12 

13자율적으로 파일을 읽고, 명령을 실행하고, 웹을 검색하고, 코드를 편집하는 등의 작업을 수행하는 AI 에이전트를 구축하십시오. Agent SDK는 Claude Code를 강화하는 동일한 도구, 에이전트 루프 및 컨텍스트 관리를 Python 및 TypeScript로 프로그래밍할 수 있도록 제공합니다.

14 

15<Note>

16 Opus 4.7(`claude-opus-4-7`)은 Agent SDK v0.2.111 이상이 필요합니다. `thinking.type.enabled` API 오류가 표시되면 [문제 해결](/ko/agent-sdk/quickstart#troubleshooting)을 참조하십시오.

17</Note>

18 

19<CodeGroup>

20 ```python Python theme={null}

21 import asyncio

22 from claude_agent_sdk import query, ClaudeAgentOptions

23 

24 

25 async def main():

26 async for message in query(

27 prompt="Find and fix the bug in auth.py",

28 options=ClaudeAgentOptions(allowed_tools=["Read", "Edit", "Bash"]),

29 ):

30 print(message) # Claude reads the file, finds the bug, edits it

31 

32 

33 asyncio.run(main())

34 ```

35 

36 ```typescript TypeScript theme={null}

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

38 

39 for await (const message of query({

40 prompt: "Find and fix the bug in auth.ts",

41 options: { allowedTools: ["Read", "Edit", "Bash"] }

42 })) {

43 console.log(message); // Claude reads the file, finds the bug, edits it

44 }

45 ```

46</CodeGroup>

47 

48Agent SDK에는 파일 읽기, 명령 실행 및 코드 편집을 위한 기본 제공 도구가 포함되어 있으므로 도구 실행을 직접 구현하지 않고도 에이전트가 즉시 작업을 시작할 수 있습니다. 빠른 시작을 살펴보거나 SDK로 구축한 실제 에이전트를 탐색하십시오:

49 

50<CardGroup cols={2}>

51 <Card title="빠른 시작" icon="play" href="/ko/agent-sdk/quickstart">

52 몇 분 안에 버그 수정 에이전트 구축하기

53 </Card>

54 

55 <Card title="예제 에이전트" icon="star" href="https://github.com/anthropics/claude-agent-sdk-demos">

56 이메일 어시스턴트, 연구 에이전트 등

57 </Card>

58</CardGroup>

59 

60## 시작하기

61 

62<Steps>

63 <Step title="SDK 설치">

64 <Tabs>

65 <Tab title="TypeScript">

66 ```bash theme={null}

67 npm install @anthropic-ai/claude-agent-sdk

68 ```

69 </Tab>

70 

71 <Tab title="Python">

72 ```bash theme={null}

73 pip install claude-agent-sdk

74 ```

75 </Tab>

76 </Tabs>

77 

78 <Note>

79 TypeScript SDK는 선택적 종속성으로 플랫폼용 네이티브 Claude Code 바이너리를 번들로 제공하므로 Claude Code를 별도로 설치할 필요가 없습니다.

80 </Note>

81 </Step>

82 

83 <Step title="API 키 설정">

84 [콘솔](https://platform.claude.com/)에서 API 키를 가져온 다음 환경 변수로 설정하십시오:

85 

86 ```bash theme={null}

87 export ANTHROPIC_API_KEY=your-api-key

88 ```

89 

90 SDK는 또한 타사 API 제공자를 통한 인증을 지원합니다:

91 

92 * **Amazon Bedrock**: `CLAUDE_CODE_USE_BEDROCK=1` 환경 변수를 설정하고 AWS 자격 증명을 구성합니다

93 * **Google Vertex AI**: `CLAUDE_CODE_USE_VERTEX=1` 환경 변수를 설정하고 Google Cloud 자격 증명을 구성합니다

94 * **Microsoft Azure**: `CLAUDE_CODE_USE_FOUNDRY=1` 환경 변수를 설정하고 Azure 자격 증명을 구성합니다

95 

96 [Bedrock](/ko/amazon-bedrock), [Vertex AI](/ko/google-vertex-ai) 또는 [Azure AI Foundry](/ko/microsoft-foundry)의 설정 가이드를 참조하십시오.

97 

98 <Note>

99 이전에 승인되지 않은 경우, Anthropic은 타사 개발자가 Claude Agent SDK로 구축한 에이전트를 포함하여 자신의 제품에 대해 claude.ai 로그인 또는 속도 제한을 제공하도록 허용하지 않습니다. 대신 이 문서에 설명된 API 키 인증 방법을 사용하십시오.

100 </Note>

101 </Step>

102 

103 <Step title="첫 번째 에이전트 실행">

104 이 예제는 기본 제공 도구를 사용하여 현재 디렉토리의 파일을 나열하는 에이전트를 만듭니다.

105 

106 <CodeGroup>

107 ```python Python theme={null}

108 import asyncio

109 from claude_agent_sdk import query, ClaudeAgentOptions

110 

111 

112 async def main():

113 async for message in query(

114 prompt="What files are in this directory?",

115 options=ClaudeAgentOptions(allowed_tools=["Bash", "Glob"]),

116 ):

117 if hasattr(message, "result"):

118 print(message.result)

119 

120 

121 asyncio.run(main())

122 ```

123 

124 ```typescript TypeScript theme={null}

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

126 

127 for await (const message of query({

128 prompt: "What files are in this directory?",

129 options: { allowedTools: ["Bash", "Glob"] }

130 })) {

131 if ("result" in message) console.log(message.result);

132 }

133 ```

134 </CodeGroup>

135 </Step>

136</Steps>

137 

138**구축할 준비가 되셨나요?** [빠른 시작](/ko/agent-sdk/quickstart)을 따라 몇 분 안에 버그를 찾고 수정하는 에이전트를 만드십시오.

139 

140## 기능

141 

142Claude Code를 강력하게 만드는 모든 것이 SDK에서 사용 가능합니다:

143 

144<Tabs>

145 <Tab title="기본 제공 도구">

146 에이전트는 기본적으로 파일을 읽고, 명령을 실행하고, 코드베이스를 검색할 수 있습니다. 주요 도구는 다음과 같습니다:

147 

148 | 도구 | 기능 |

149 | --------------------------------------------------------------------------- | ------------------------------------ |

150 | **Read** | 작업 디렉토리의 모든 파일 읽기 |

151 | **Write** | 새 파일 생성 |

152 | **Edit** | 기존 파일에 정확한 편집 수행 |

153 | **Bash** | 터미널 명령, 스크립트, git 작업 실행 |

154 | **Monitor** | 백그라운드 스크립트를 감시하고 각 출력 라인에 이벤트로 반응 |

155 | **Glob** | 패턴으로 파일 찾기(`**/*.ts`, `src/**/*.py`) |

156 | **Grep** | 정규식으로 파일 내용 검색 |

157 | **WebSearch** | 현재 정보를 위해 웹 검색 |

158 | **WebFetch** | 웹 페이지 내용 가져오기 및 구문 분석 |

159 | **[AskUserQuestion](/ko/agent-sdk/user-input#handle-clarifying-questions)** | 여러 선택 옵션으로 사용자에게 명확히 하는 질문 하기 |

160 

161 이 예제는 코드베이스에서 TODO 주석을 검색하는 에이전트를 만듭니다:

162 

163 <CodeGroup>

164 ```python Python theme={null}

165 import asyncio

166 from claude_agent_sdk import query, ClaudeAgentOptions

167 

168 

169 async def main():

170 async for message in query(

171 prompt="Find all TODO comments and create a summary",

172 options=ClaudeAgentOptions(allowed_tools=["Read", "Glob", "Grep"]),

173 ):

174 if hasattr(message, "result"):

175 print(message.result)

176 

177 

178 asyncio.run(main())

179 ```

180 

181 ```typescript TypeScript theme={null}

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

183 

184 for await (const message of query({

185 prompt: "Find all TODO comments and create a summary",

186 options: { allowedTools: ["Read", "Glob", "Grep"] }

187 })) {

188 if ("result" in message) console.log(message.result);

189 }

190 ```

191 </CodeGroup>

192 </Tab>

193 

194 <Tab title="Hooks">

195 에이전트 라이프사이클의 주요 지점에서 사용자 정의 코드를 실행합니다. SDK 훅은 콜백 함수를 사용하여 에이전트 동작을 검증, 로깅, 차단 또는 변환합니다.

196 

197 **사용 가능한 훅:** `PreToolUse`, `PostToolUse`, `Stop`, `SessionStart`, `SessionEnd`, `UserPromptSubmit` 등.

198 

199 이 예제는 모든 파일 변경 사항을 감사 파일에 기록합니다:

200 

201 <CodeGroup>

202 ```python Python theme={null}

203 import asyncio

204 from datetime import datetime

205 from claude_agent_sdk import query, ClaudeAgentOptions, HookMatcher

206 

207 

208 async def log_file_change(input_data, tool_use_id, context):

209 file_path = input_data.get("tool_input", {}).get("file_path", "unknown")

210 with open("./audit.log", "a") as f:

211 f.write(f"{datetime.now()}: modified {file_path}\n")

212 return {}

213 

214 

215 async def main():

216 async for message in query(

217 prompt="Refactor utils.py to improve readability",

218 options=ClaudeAgentOptions(

219 permission_mode="acceptEdits",

220 hooks={

221 "PostToolUse": [

222 HookMatcher(matcher="Edit|Write", hooks=[log_file_change])

223 ]

224 },

225 ),

226 ):

227 if hasattr(message, "result"):

228 print(message.result)

229 

230 

231 asyncio.run(main())

232 ```

233 

234 ```typescript TypeScript theme={null}

235 import { query, HookCallback } from "@anthropic-ai/claude-agent-sdk";

236 import { appendFile } from "fs/promises";

237 

238 const logFileChange: HookCallback = async (input) => {

239 const filePath = (input as any).tool_input?.file_path ?? "unknown";

240 await appendFile("./audit.log", `${new Date().toISOString()}: modified ${filePath}\n`);

241 return {};

242 };

243 

244 for await (const message of query({

245 prompt: "Refactor utils.py to improve readability",

246 options: {

247 permissionMode: "acceptEdits",

248 hooks: {

249 PostToolUse: [{ matcher: "Edit|Write", hooks: [logFileChange] }]

250 }

251 }

252 })) {

253 if ("result" in message) console.log(message.result);

254 }

255 ```

256 </CodeGroup>

257 

258 [훅에 대해 자세히 알아보기 →](/ko/agent-sdk/hooks)

259 </Tab>

260 

261 <Tab title="서브에이전트">

262 특화된 에이전트를 생성하여 집중된 부작업을 처리합니다. 주 에이전트가 작업을 위임하고 서브에이전트가 결과를 보고합니다.

263 

264 특화된 지침으로 사용자 정의 에이전트를 정의합니다. 서브에이전트가 Agent 도구를 통해 호출되므로 `allowedTools`에 `Agent`를 포함하십시오:

265 

266 <CodeGroup>

267 ```python Python theme={null}

268 import asyncio

269 from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition

270 

271 

272 async def main():

273 async for message in query(

274 prompt="Use the code-reviewer agent to review this codebase",

275 options=ClaudeAgentOptions(

276 allowed_tools=["Read", "Glob", "Grep", "Agent"],

277 agents={

278 "code-reviewer": AgentDefinition(

279 description="Expert code reviewer for quality and security reviews.",

280 prompt="Analyze code quality and suggest improvements.",

281 tools=["Read", "Glob", "Grep"],

282 )

283 },

284 ),

285 ):

286 if hasattr(message, "result"):

287 print(message.result)

288 

289 

290 asyncio.run(main())

291 ```

292 

293 ```typescript TypeScript theme={null}

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

295 

296 for await (const message of query({

297 prompt: "Use the code-reviewer agent to review this codebase",

298 options: {

299 allowedTools: ["Read", "Glob", "Grep", "Agent"],

300 agents: {

301 "code-reviewer": {

302 description: "Expert code reviewer for quality and security reviews.",

303 prompt: "Analyze code quality and suggest improvements.",

304 tools: ["Read", "Glob", "Grep"]

305 }

306 }

307 }

308 })) {

309 if ("result" in message) console.log(message.result);

310 }

311 ```

312 </CodeGroup>

313 

314 서브에이전트의 컨텍스트 내의 메시지에는 `parent_tool_use_id` 필드가 포함되어 있어 어떤 메시지가 어떤 서브에이전트 실행에 속하는지 추적할 수 있습니다.

315 

316 [서브에이전트에 대해 자세히 알아보기 →](/ko/agent-sdk/subagents)

317 </Tab>

318 

319 <Tab title="MCP">

320 Model Context Protocol을 통해 외부 시스템에 연결합니다: 데이터베이스, 브라우저, API 및 [수백 개 이상](https://github.com/modelcontextprotocol/servers).

321 

322 이 예제는 [Playwright MCP 서버](https://github.com/microsoft/playwright-mcp)를 연결하여 에이전트에 브라우저 자동화 기능을 제공합니다:

323 

324 <CodeGroup>

325 ```python Python theme={null}

326 import asyncio

327 from claude_agent_sdk import query, ClaudeAgentOptions

328 

329 

330 async def main():

331 async for message in query(

332 prompt="Open example.com and describe what you see",

333 options=ClaudeAgentOptions(

334 mcp_servers={

335 "playwright": {"command": "npx", "args": ["@playwright/mcp@latest"]}

336 }

337 ),

338 ):

339 if hasattr(message, "result"):

340 print(message.result)

341 

342 

343 asyncio.run(main())

344 ```

345 

346 ```typescript TypeScript theme={null}

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

348 

349 for await (const message of query({

350 prompt: "Open example.com and describe what you see",

351 options: {

352 mcpServers: {

353 playwright: { command: "npx", args: ["@playwright/mcp@latest"] }

354 }

355 }

356 })) {

357 if ("result" in message) console.log(message.result);

358 }

359 ```

360 </CodeGroup>

361 

362 [MCP에 대해 자세히 알아보기 →](/ko/agent-sdk/mcp)

363 </Tab>

364 

365 <Tab title="권한">

366 에이전트가 사용할 수 있는 도구를 정확히 제어합니다. 안전한 작업을 허용하고, 위험한 작업을 차단하거나, 민감한 작업에 대한 승인을 요구합니다.

367 

368 <Note>

369 대화형 승인 프롬프트 및 `AskUserQuestion` 도구는 [승인 및 사용자 입력 처리](/ko/agent-sdk/user-input)를 참조하십시오.

370 </Note>

371 

372 이 예제는 코드를 분석할 수 있지만 수정할 수 없는 읽기 전용 에이전트를 만듭니다. `allowed_tools`는 `Read`, `Glob` 및 `Grep`을 사전 승인합니다.

373 

374 <CodeGroup>

375 ```python Python theme={null}

376 import asyncio

377 from claude_agent_sdk import query, ClaudeAgentOptions

378 

379 

380 async def main():

381 async for message in query(

382 prompt="Review this code for best practices",

383 options=ClaudeAgentOptions(

384 allowed_tools=["Read", "Glob", "Grep"],

385 ),

386 ):

387 if hasattr(message, "result"):

388 print(message.result)

389 

390 

391 asyncio.run(main())

392 ```

393 

394 ```typescript TypeScript theme={null}

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

396 

397 for await (const message of query({

398 prompt: "Review this code for best practices",

399 options: {

400 allowedTools: ["Read", "Glob", "Grep"]

401 }

402 })) {

403 if ("result" in message) console.log(message.result);

404 }

405 ```

406 </CodeGroup>

407 

408 [권한에 대해 자세히 알아보기 →](/ko/agent-sdk/permissions)

409 </Tab>

410 

411 <Tab title="세션">

412 여러 교환에 걸쳐 컨텍스트를 유지합니다. Claude는 읽은 파일, 수행한 분석 및 대화 기록을 기억합니다. 나중에 세션을 재개하거나 다양한 접근 방식을 탐색하기 위해 포크합니다.

413 

414 이 예제는 첫 번째 쿼리에서 세션 ID를 캡처한 다음 전체 컨텍스트로 계속하기 위해 재개합니다:

415 

416 <CodeGroup>

417 ```python Python theme={null}

418 import asyncio

419 from claude_agent_sdk import query, ClaudeAgentOptions, SystemMessage, ResultMessage

420 

421 

422 async def main():

423 session_id = None

424 

425 # First query: capture the session ID

426 async for message in query(

427 prompt="Read the authentication module",

428 options=ClaudeAgentOptions(allowed_tools=["Read", "Glob"]),

429 ):

430 if isinstance(message, SystemMessage) and message.subtype == "init":

431 session_id = message.data["session_id"]

432 

433 # Resume with full context from the first query

434 async for message in query(

435 prompt="Now find all places that call it", # "it" = auth module

436 options=ClaudeAgentOptions(resume=session_id),

437 ):

438 if isinstance(message, ResultMessage):

439 print(message.result)

440 

441 

442 asyncio.run(main())

443 ```

444 

445 ```typescript TypeScript theme={null}

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

447 

448 let sessionId: string | undefined;

449 

450 // First query: capture the session ID

451 for await (const message of query({

452 prompt: "Read the authentication module",

453 options: { allowedTools: ["Read", "Glob"] }

454 })) {

455 if (message.type === "system" && message.subtype === "init") {

456 sessionId = message.session_id;

457 }

458 }

459 

460 // Resume with full context from the first query

461 for await (const message of query({

462 prompt: "Now find all places that call it", // "it" = auth module

463 options: { resume: sessionId }

464 })) {

465 if ("result" in message) console.log(message.result);

466 }

467 ```

468 </CodeGroup>

469 

470 [세션에 대해 자세히 알아보기 →](/ko/agent-sdk/sessions)

471 </Tab>

472</Tabs>

473 

474### Claude Code 기능

475 

476SDK는 또한 Claude Code의 파일 시스템 기반 구성을 지원합니다. 기본 옵션을 사용하면 SDK는 작업 디렉토리의 `.claude/` 및 `~/.claude/`에서 이를 로드합니다. 로드되는 소스를 제한하려면 옵션에서 `setting_sources`(Python) 또는 `settingSources`(TypeScript)를 설정하십시오.

477 

478| 기능 | 설명 | 위치 |

479| ------------------------------------------------ | ---------------------------- | ---------------------------------- |

480| [Skills](/ko/agent-sdk/skills) | Markdown에 정의된 특화된 기능 | `.claude/skills/*/SKILL.md` |

481| [Slash commands](/ko/agent-sdk/slash-commands) | 일반적인 작업을 위한 사용자 정의 명령 | `.claude/commands/*.md` |

482| [Memory](/ko/agent-sdk/modifying-system-prompts) | 프로젝트 컨텍스트 및 지침 | `CLAUDE.md` 또는 `.claude/CLAUDE.md` |

483| [Plugins](/ko/agent-sdk/plugins) | 사용자 정의 명령, 에이전트 및 MCP 서버로 확장 | `plugins` 옵션을 통한 프로그래밍 방식 |

484 

485## Agent SDK를 다른 Claude 도구와 비교

486 

487Claude 플랫폼은 Claude로 구축하는 여러 방법을 제공합니다. Agent SDK가 어떻게 적합한지 다음과 같습니다:

488 

489<Tabs>

490 <Tab title="Agent SDK vs Client SDK">

491 [Anthropic Client SDK](https://platform.claude.com/docs/ko/api/client-sdks)는 직접 API 액세스를 제공합니다: 프롬프트를 보내고 도구 실행을 직접 구현합니다. **Agent SDK**는 기본 제공 도구 실행이 있는 Claude를 제공합니다.

492 

493 Client SDK를 사용하면 도구 루프를 구현합니다. Agent SDK를 사용하면 Claude가 처리합니다:

494 

495 <CodeGroup>

496 ```python Python theme={null}

497 # Client SDK: You implement the tool loop

498 response = client.messages.create(...)

499 while response.stop_reason == "tool_use":

500 result = your_tool_executor(response.tool_use)

501 response = client.messages.create(tool_result=result, **params)

502 

503 # Agent SDK: Claude handles tools autonomously

504 async for message in query(prompt="Fix the bug in auth.py"):

505 print(message)

506 ```

507 

508 ```typescript TypeScript theme={null}

509 // Client SDK: You implement the tool loop

510 let response = await client.messages.create({ ...params });

511 while (response.stop_reason === "tool_use") {

512 const result = yourToolExecutor(response.tool_use);

513 response = await client.messages.create({ tool_result: result, ...params });

514 }

515 

516 // Agent SDK: Claude handles tools autonomously

517 for await (const message of query({ prompt: "Fix the bug in auth.ts" })) {

518 console.log(message);

519 }

520 ```

521 </CodeGroup>

522 </Tab>

523 

524 <Tab title="Agent SDK vs Claude Code CLI">

525 동일한 기능, 다른 인터페이스:

526 

527 | 사용 사례 | 최선의 선택 |

528 | ------------- | ------ |

529 | 대화형 개발 | CLI |

530 | CI/CD 파이프라인 | SDK |

531 | 사용자 정의 애플리케이션 | SDK |

532 | 일회성 작업 | CLI |

533 | 프로덕션 자동화 | SDK |

534 

535 많은 팀이 둘 다 사용합니다: 일일 개발을 위한 CLI, 프로덕션을 위한 SDK. 워크플로우는 둘 사이에서 직접 변환됩니다.

536 </Tab>

537 

538 <Tab title="Agent SDK vs Managed Agents">

539 [Managed Agents](https://platform.claude.com/docs/ko/managed-agents/overview)는 호스팅된 REST API입니다: Anthropic이 에이전트와 샌드박스를 실행하고, 애플리케이션이 이벤트를 보내고 결과를 다시 스트리밍합니다. **Agent SDK**는 자신의 프로세스 내에서 에이전트 루프를 실행하는 라이브러리입니다.

540 

541 | | Agent SDK | Managed Agents |

542 | -------------- | ------------------------------------- | ---------------------------------------------------- |

543 | **실행 위치** | 사용자의 프로세스, 사용자의 인프라 | Anthropic 관리 인프라 |

544 | **인터페이스** | Python 또는 TypeScript 라이브러리 | REST API |

545 | **에이전트 작업 대상** | 사용자의 인프라의 파일 | 세션당 관리되는 샌드박스 |

546 | **세션 상태** | 파일시스템의 JSONL | Anthropic 호스팅 이벤트 로그 |

547 | **사용자 정의 도구** | 프로세스 내 Python 또는 TypeScript 함수 | Claude가 도구를 트리거합니다; 사용자가 실행하고 결과를 반환합니다 |

548 | **최적 용도** | 로컬 프로토타이핑, 파일시스템 및 서비스에서 직접 작동하는 에이전트 | 샌드박스 또는 세션 인프라를 운영할 필요가 없는 프로덕션 에이전트, 장기 실행 및 비동기 세션 |

549 

550 일반적인 경로는 Agent SDK로 로컬에서 프로토타입을 만든 다음 프로덕션을 위해 Managed Agents로 이동하는 것입니다.

551 </Tab>

552</Tabs>

553 

554## 변경 로그

555 

556SDK 업데이트, 버그 수정 및 새로운 기능에 대한 전체 변경 로그를 보십시오:

557 

558* **TypeScript SDK**: [CHANGELOG.md 보기](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md)

559* **Python SDK**: [CHANGELOG.md 보기](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md)

560 

561## 버그 보고

562 

563Agent SDK에서 버그 또는 문제가 발생하면:

564 

565* **TypeScript SDK**: [GitHub에서 문제 보고](https://github.com/anthropics/claude-agent-sdk-typescript/issues)

566* **Python SDK**: [GitHub에서 문제 보고](https://github.com/anthropics/claude-agent-sdk-python/issues)

567 

568## 브랜딩 지침

569 

570Claude Agent SDK를 통합하는 파트너의 경우 Claude 브랜딩 사용은 선택 사항입니다. 제품에서 Claude를 참조할 때:

571 

572**허용됨:**

573 

574* "Claude Agent" (드롭다운 메뉴에 권장)

575* "Claude" (이미 "Agents"로 표시된 메뉴 내)

576* "{YourAgentName} Powered by Claude" (기존 에이전트 이름이 있는 경우)

577 

578**허용되지 않음:**

579 

580* "Claude Code" 또는 "Claude Code Agent"

581* Claude Code 브랜드 ASCII 아트 또는 Claude Code를 모방하는 시각적 요소

582 

583제품은 자체 브랜딩을 유지해야 하며 Claude Code 또는 Anthropic 제품으로 보이지 않아야 합니다. 브랜딩 준수에 대한 질문은 Anthropic [영업팀](https://www.anthropic.com/contact-sales)에 문의하십시오.

584 

585## 라이선스 및 약관

586 

587Claude Agent SDK의 사용은 [Anthropic의 상용 서비스 약관](https://www.anthropic.com/legal/commercial-terms)에 의해 관리되며, 이는 자신의 고객 및 최종 사용자가 사용할 수 있도록 제공하는 제품 및 서비스를 강화하기 위해 사용할 때도 포함됩니다. 단, 특정 구성 요소 또는 종속성이 해당 구성 요소의 LICENSE 파일에 표시된 대로 다른 라이선스로 적용되는 경우는 제외합니다.

588 

589## 다음 단계

590 

591<CardGroup cols={2}>

592 <Card title="빠른 시작" icon="play" href="/ko/agent-sdk/quickstart">

593 몇 분 안에 버그를 찾고 수정하는 에이전트 구축하기

594 </Card>

595 

596 <Card title="예제 에이전트" icon="star" href="https://github.com/anthropics/claude-agent-sdk-demos">

597 이메일 어시스턴트, 연구 에이전트 등

598 </Card>

599 

600 <Card title="TypeScript SDK" icon="code" href="/ko/agent-sdk/typescript">

601 전체 TypeScript API 참조 및 예제

602 </Card>

603 

604 <Card title="Python SDK" icon="code" href="/ko/agent-sdk/python">

605 전체 Python API 참조 및 예제

606 </Card>

607</CardGroup>

agent-sdk/plugins.md +342 −0 created

Details

1> ## Documentation Index

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

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

4 

5# SDK의 플러그인

6 

7> Agent SDK를 통해 명령어, 에이전트, 스킬 및 훅을 추가하여 Claude Code를 확장하는 사용자 정의 플러그인 로드

8 

9플러그인을 사용하면 프로젝트 전체에서 공유할 수 있는 사용자 정의 기능으로 Claude Code를 확장할 수 있습니다. Agent SDK를 통해 로컬 디렉터리에서 플러그인을 프로그래밍 방식으로 로드하여 에이전트 세션에 사용자 정의 슬래시 명령어, 에이전트, 스킬, 훅 및 MCP 서버를 추가할 수 있습니다.

10 

11## 플러그인이란 무엇입니까?

12 

13플러그인은 다음을 포함할 수 있는 Claude Code 확장 패키지입니다:

14 

15* **Skills**: Claude가 자율적으로 사용하는 모델 호출 기능(`/skill-name`으로도 호출 가능)

16* **Agents**: 특정 작업을 위한 전문화된 서브에이전트

17* **Hooks**: 도구 사용 및 기타 이벤트에 응답하는 이벤트 핸들러

18* **MCP servers**: Model Context Protocol을 통한 외부 도구 통합

19 

20<Note>

21 `commands/` 디렉터리는 레거시 형식입니다. 새로운 플러그인의 경우 `skills/`를 사용하십시오. Claude Code는 하위 호환성을 위해 두 형식을 모두 계속 지원합니다.

22</Note>

23 

24플러그인 구조 및 플러그인 생성 방법에 대한 완전한 정보는 [플러그인](/ko/plugins)을 참조하십시오.

25 

26## 플러그인 로드

27 

28옵션 구성에서 로컬 파일 시스템 경로를 제공하여 플러그인을 로드합니다. `type` 필드는 `"local"`이어야 하며, 이는 SDK가 허용하는 유일한 값입니다. [마켓플레이스](/ko/plugin-marketplaces)를 통해 배포되거나 원격 저장소에서 플러그인을 사용하려면 먼저 다운로드한 후 로컬 디렉터리 경로를 제공합니다. SDK는 다양한 위치에서 여러 플러그인을 로드하는 것을 지원합니다.

29 

30<CodeGroup>

31 ```typescript TypeScript theme={null}

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

33 

34 for await (const message of query({

35 prompt: "Hello",

36 options: {

37 plugins: [

38 { type: "local", path: "./my-plugin" },

39 { type: "local", path: "/absolute/path/to/another-plugin" }

40 ]

41 }

42 })) {

43 // Plugin commands, agents, and other features are now available

44 }

45 ```

46 

47 ```python Python theme={null}

48 import asyncio

49 from claude_agent_sdk import query

50 

51 

52 async def main():

53 async for message in query(

54 prompt="Hello",

55 options={

56 "plugins": [

57 {"type": "local", "path": "./my-plugin"},

58 {"type": "local", "path": "/absolute/path/to/another-plugin"},

59 ]

60 },

61 ):

62 # Plugin commands, agents, and other features are now available

63 pass

64 

65 

66 asyncio.run(main())

67 ```

68</CodeGroup>

69 

70### 경로 사양

71 

72플러그인 경로는 다음과 같을 수 있습니다:

73 

74* **상대 경로**: 현재 작업 디렉터리를 기준으로 확인됨(예: `"./plugins/my-plugin"`)

75* **절대 경로**: 전체 파일 시스템 경로(예: `"/home/user/plugins/my-plugin"`)

76 

77<Note>

78 경로는 플러그인의 루트 디렉터리(`.claude-plugin/plugin.json`을 포함하는 디렉터리)를 가리켜야 합니다.

79</Note>

80 

81## 플러그인 설치 확인

82 

83플러그인이 성공적으로 로드되면 시스템 초기화 메시지에 나타납니다. 플러그인을 사용할 수 있는지 확인할 수 있습니다:

84 

85<CodeGroup>

86 ```typescript TypeScript theme={null}

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

88 

89 for await (const message of query({

90 prompt: "Hello",

91 options: {

92 plugins: [{ type: "local", path: "./my-plugin" }]

93 }

94 })) {

95 if (message.type === "system" && message.subtype === "init") {

96 // Check loaded plugins

97 console.log("Plugins:", message.plugins);

98 // Example: [{ name: "my-plugin", path: "./my-plugin" }]

99 

100 // Check available commands from plugins

101 console.log("Commands:", message.slash_commands);

102 // Example: ["/help", "/compact", "my-plugin:custom-command"]

103 }

104 }

105 ```

106 

107 ```python Python theme={null}

108 import asyncio

109 from claude_agent_sdk import query

110 

111 

112 async def main():

113 async for message in query(

114 prompt="Hello", options={"plugins": [{"type": "local", "path": "./my-plugin"}]}

115 ):

116 if message.type == "system" and message.subtype == "init":

117 # Check loaded plugins

118 print("Plugins:", message.data.get("plugins"))

119 # Example: [{"name": "my-plugin", "path": "./my-plugin"}]

120 

121 # Check available commands from plugins

122 print("Commands:", message.data.get("slash_commands"))

123 # Example: ["/help", "/compact", "my-plugin:custom-command"]

124 

125 

126 asyncio.run(main())

127 ```

128</CodeGroup>

129 

130## 플러그인 스킬 사용

131 

132플러그인의 스킬은 충돌을 피하기 위해 플러그인 이름으로 자동 네임스페이스됩니다. 슬래시 명령어로 호출될 때 형식은 `plugin-name:skill-name`입니다.

133 

134<CodeGroup>

135 ```typescript TypeScript theme={null}

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

137 

138 // Load a plugin with a custom /greet skill

139 for await (const message of query({

140 prompt: "/my-plugin:greet", // Use plugin skill with namespace

141 options: {

142 plugins: [{ type: "local", path: "./my-plugin" }]

143 }

144 })) {

145 // Claude executes the custom greeting skill from the plugin

146 if (message.type === "assistant") {

147 console.log(message.message.content);

148 }

149 }

150 ```

151 

152 ```python Python theme={null}

153 import asyncio

154 from claude_agent_sdk import query, AssistantMessage, TextBlock

155 

156 

157 async def main():

158 # Load a plugin with a custom /greet skill

159 async for message in query(

160 prompt="/demo-plugin:greet", # Use plugin skill with namespace

161 options={"plugins": [{"type": "local", "path": "./plugins/demo-plugin"}]},

162 ):

163 # Claude executes the custom greeting skill from the plugin

164 if isinstance(message, AssistantMessage):

165 for block in message.content:

166 if isinstance(block, TextBlock):

167 print(f"Claude: {block.text}")

168 

169 

170 asyncio.run(main())

171 ```

172</CodeGroup>

173 

174<Note>

175 CLI를 통해 플러그인을 설치한 경우(예: `/plugin install my-plugin@marketplace`), SDK에서 설치 경로를 제공하여 사용할 수 있습니다. CLI로 설치된 플러그인은 `~/.claude/plugins/`에서 확인하십시오.

176</Note>

177 

178## 완전한 예제

179 

180플러그인 로드 및 사용을 보여주는 전체 예제입니다:

181 

182<CodeGroup>

183 ```typescript TypeScript theme={null}

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

185 import * as path from "path";

186 

187 async function runWithPlugin() {

188 const pluginPath = path.join(__dirname, "plugins", "my-plugin");

189 

190 console.log("Loading plugin from:", pluginPath);

191 

192 for await (const message of query({

193 prompt: "What custom commands do you have available?",

194 options: {

195 plugins: [{ type: "local", path: pluginPath }],

196 maxTurns: 3

197 }

198 })) {

199 if (message.type === "system" && message.subtype === "init") {

200 console.log("Loaded plugins:", message.plugins);

201 console.log("Available commands:", message.slash_commands);

202 }

203 

204 if (message.type === "assistant") {

205 console.log("Assistant:", message.message.content);

206 }

207 }

208 }

209 

210 runWithPlugin().catch(console.error);

211 ```

212 

213 ```python Python theme={null}

214 #!/usr/bin/env python3

215 """Example demonstrating how to use plugins with the Agent SDK."""

216 

217 from pathlib import Path

218 import anyio

219 from claude_agent_sdk import (

220 AssistantMessage,

221 ClaudeAgentOptions,

222 TextBlock,

223 query,

224 )

225 

226 

227 async def run_with_plugin():

228 """Example using a custom plugin."""

229 plugin_path = Path(__file__).parent / "plugins" / "demo-plugin"

230 

231 print(f"Loading plugin from: {plugin_path}")

232 

233 options = ClaudeAgentOptions(

234 plugins=[{"type": "local", "path": str(plugin_path)}],

235 max_turns=3,

236 )

237 

238 async for message in query(

239 prompt="What custom commands do you have available?", options=options

240 ):

241 if message.type == "system" and message.subtype == "init":

242 print(f"Loaded plugins: {message.data.get('plugins')}")

243 print(f"Available commands: {message.data.get('slash_commands')}")

244 

245 if isinstance(message, AssistantMessage):

246 for block in message.content:

247 if isinstance(block, TextBlock):

248 print(f"Assistant: {block.text}")

249 

250 

251 if __name__ == "__main__":

252 anyio.run(run_with_plugin)

253 ```

254</CodeGroup>

255 

256## 플러그인 구조 참조

257 

258플러그인 디렉터리는 `.claude-plugin/plugin.json` 매니페스트 파일을 포함해야 합니다. 선택적으로 다음을 포함할 수 있습니다:

259 

260```text theme={null}

261my-plugin/

262├── .claude-plugin/

263│ └── plugin.json # Required: plugin manifest

264├── skills/ # Agent Skills (invoked autonomously or via /skill-name)

265│ └── my-skill/

266│ └── SKILL.md

267├── commands/ # Legacy: use skills/ instead

268│ └── custom-cmd.md

269├── agents/ # Custom agents

270│ └── specialist.md

271├── hooks/ # Event handlers

272│ └── hooks.json

273└── .mcp.json # MCP server definitions

274```

275 

276플러그인 생성에 대한 자세한 정보는 다음을 참조하십시오:

277 

278* [플러그인](/ko/plugins) - 완전한 플러그인 개발 가이드

279* [플러그인 참조](/ko/plugins-reference) - 기술 사양 및 스키마

280 

281## 일반적인 사용 사례

282 

283### 개발 및 테스트

284 

285전역으로 설치하지 않고 개발 중에 플러그인을 로드합니다:

286 

287```typescript theme={null}

288plugins: [{ type: "local", path: "./dev-plugins/my-plugin" }];

289```

290 

291### 프로젝트별 확장

292 

293팀 전체의 일관성을 위해 프로젝트 저장소에 플러그인을 포함합니다:

294 

295```typescript theme={null}

296plugins: [{ type: "local", path: "./project-plugins/team-workflows" }];

297```

298 

299### 여러 플러그인 소스

300 

301다양한 위치의 플러그인을 결합합니다:

302 

303```typescript theme={null}

304plugins: [

305 { type: "local", path: "./local-plugin" },

306 { type: "local", path: "~/.claude/custom-plugins/shared-plugin" }

307];

308```

309 

310## 문제 해결

311 

312### 플러그인이 로드되지 않음

313 

314플러그인이 초기화 메시지에 나타나지 않으면:

315 

3161. **경로 확인**: 경로가 플러그인 루트 디렉터리(`.claude-plugin/`을 포함하는)를 가리키는지 확인합니다

3172. **plugin.json 검증**: 매니페스트 파일이 유효한 JSON 구문을 가지고 있는지 확인합니다

3183. **파일 권한 확인**: 플러그인 디렉터리를 읽을 수 있는지 확인합니다

319 

320### 스킬이 나타나지 않음

321 

322플러그인 스킬이 작동하지 않으면:

323 

3241. **네임스페이스 사용**: 플러그인 스킬은 슬래시 명령어로 호출될 때 `plugin-name:skill-name` 형식이 필요합니다

3252. **초기화 메시지 확인**: 스킬이 올바른 네임스페이스와 함께 `slash_commands`에 나타나는지 확인합니다

3263. **스킬 파일 검증**: 각 스킬이 `skills/` 아래의 자체 하위 디렉터리에 `SKILL.md` 파일을 가지고 있는지 확인합니다(예: `skills/my-skill/SKILL.md`)

327 

328### 경로 확인 문제

329 

330상대 경로가 작동하지 않으면:

331 

3321. **작업 디렉터리 확인**: 상대 경로는 현재 작업 디렉터리에서 확인됩니다

3332. **절대 경로 사용**: 안정성을 위해 절대 경로 사용을 고려합니다

3343. **경로 정규화**: 경로 유틸리티를 사용하여 경로를 올바르게 구성합니다

335 

336## 참고 항목

337 

338* [플러그인](/ko/plugins) - 완전한 플러그인 개발 가이드

339* [플러그인 참조](/ko/plugins-reference) - 기술 사양

340* [슬래시 명령어](/ko/agent-sdk/slash-commands) - SDK에서 슬래시 명령어 사용

341* [서브에이전트](/ko/agent-sdk/subagents) - 전문화된 에이전트 작업

342* [스킬](/ko/agent-sdk/skills) - Agent Skills 사용

agent-sdk/python.md +3274 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Agent SDK 참조 - Python

6 

7> Python Agent SDK의 완전한 API 참조로, 모든 함수, 타입 및 클래스를 포함합니다.

8 

9## 설치

10 

11```bash theme={null}

12pip install claude-agent-sdk

13```

14 

15## `query()`와 `ClaudeSDKClient` 중 선택하기

16 

17Python SDK는 Claude Code와 상호작용하는 두 가지 방법을 제공합니다.

18 

19### 빠른 비교

20 

21| 기능 | `query()` | `ClaudeSDKClient` |

22| :------------ | :--------- | :---------------- |

23| **세션** | 매번 새 세션 생성 | 동일한 세션 재사용 |

24| **대화** | 단일 교환 | 동일한 컨텍스트에서 여러 교환 |

25| **연결** | 자동으로 관리됨 | 수동 제어 |

26| **스트리밍 입력** | ✅ 지원됨 | ✅ 지원됨 |

27| **중단** | ❌ 지원 안 함 | ✅ 지원됨 |

28| **Hooks** | ✅ 지원됨 | ✅ 지원됨 |

29| **사용자 정의 도구** | ✅ 지원됨 | ✅ 지원됨 |

30| **대화 계속하기** | ❌ 매번 새 세션 | ✅ 대화 유지 |

31| **사용 사례** | 일회성 작업 | 지속적인 대화 |

32 

33### `query()` 사용 시기 (매번 새 세션)

34 

35**최적의 경우:**

36 

37* 대화 기록이 필요 없는 일회성 질문

38* 이전 교환의 컨텍스트가 필요 없는 독립적인 작업

39* 간단한 자동화 스크립트

40* 매번 새로 시작하고 싶을 때

41 

42### `ClaudeSDKClient` 사용 시기 (지속적인 대화)

43 

44**최적의 경우:**

45 

46* **대화 계속하기** - Claude가 컨텍스트를 기억해야 할 때

47* **후속 질문** - 이전 응답을 기반으로 구축

48* **대화형 애플리케이션** - 채팅 인터페이스, REPL

49* **응답 기반 로직** - 다음 작업이 Claude의 응답에 따라 달라질 때

50* **세션 제어** - 대화 수명 주기를 명시적으로 관리

51 

52## 함수

53 

54### `query()`

55 

56Claude Code와의 각 상호작용을 위해 새 세션을 생성합니다. 메시지가 도착하면 생성하는 비동기 반복자를 반환합니다. `query()`에 대한 각 호출은 이전 상호작용의 메모리 없이 새로 시작합니다.

57 

58```python theme={null}

59async def query(

60 *,

61 prompt: str | AsyncIterable[dict[str, Any]],

62 options: ClaudeAgentOptions | None = None,

63 transport: Transport | None = None

64) -> AsyncIterator[Message]

65```

66 

67#### 매개변수

68 

69| 매개변수 | 타입 | 설명 |

70| :---------- | :--------------------------- | :-------------------------------------------------- |

71| `prompt` | `str \| AsyncIterable[dict]` | 문자열 또는 스트리밍 모드용 비동기 반복 가능 객체로서의 입력 프롬프트 |

72| `options` | `ClaudeAgentOptions \| None` | 선택적 구성 객체 (None인 경우 `ClaudeAgentOptions()`로 기본값 설정) |

73| `transport` | `Transport \| None` | CLI 프로세스와 통신하기 위한 선택적 사용자 정의 전송 |

74 

75#### 반환값

76 

77대화에서 메시지를 생성하는 `AsyncIterator[Message]`를 반환합니다.

78 

79#### 예제 - 옵션 포함

80 

81```python theme={null}

82import asyncio

83from claude_agent_sdk import query, ClaudeAgentOptions

84 

85 

86async def main():

87 options = ClaudeAgentOptions(

88 system_prompt="You are an expert Python developer",

89 permission_mode="acceptEdits",

90 cwd="/home/user/project",

91 )

92 

93 async for message in query(prompt="Create a Python web server", options=options):

94 print(message)

95 

96 

97asyncio.run(main())

98```

99 

100### `tool()`

101 

102타입 안전성을 갖춘 MCP 도구를 정의하기 위한 데코레이터입니다.

103 

104```python theme={null}

105def tool(

106 name: str,

107 description: str,

108 input_schema: type | dict[str, Any],

109 annotations: ToolAnnotations | None = None

110) -> Callable[[Callable[[Any], Awaitable[dict[str, Any]]]], SdkMcpTool[Any]]

111```

112 

113#### 매개변수

114 

115| 매개변수 | 타입 | 설명 |

116| :------------- | :----------------------------------------------- | :------------------------------- |

117| `name` | `str` | 도구의 고유 식별자 |

118| `description` | `str` | 도구가 수행하는 작업에 대한 인간이 읽을 수 있는 설명 |

119| `input_schema` | `type \| dict[str, Any]` | 도구의 입력 매개변수를 정의하는 스키마 (아래 참조) |

120| `annotations` | [`ToolAnnotations`](#tool-annotations)` \| None` | 클라이언트에 동작 힌트를 제공하는 선택적 MCP 도구 주석 |

121 

122#### 입력 스키마 옵션

123 

1241. **간단한 타입 매핑** (권장):

125 

126 ```python theme={null}

127 {"text": str, "count": int, "enabled": bool}

128 ```

129 

1302. **JSON Schema 형식** (복잡한 검증용):

131 ```python theme={null}

132 {

133 "type": "object",

134 "properties": {

135 "text": {"type": "string"},

136 "count": {"type": "integer", "minimum": 0},

137 },

138 "required": ["text"],

139 }

140 ```

141 

142#### 반환값

143 

144도구 구현을 래핑하고 `SdkMcpTool` 인스턴스를 반환하는 데코레이터 함수입니다.

145 

146#### 예제

147 

148```python theme={null}

149from claude_agent_sdk import tool

150from typing import Any

151 

152 

153@tool("greet", "Greet a user", {"name": str})

154async def greet(args: dict[str, Any]) -> dict[str, Any]:

155 return {"content": [{"type": "text", "text": f"Hello, {args['name']}!"}]}

156```

157 

158#### `ToolAnnotations`

159 

160`mcp.types`에서 다시 내보낸 것입니다 (`from claude_agent_sdk import ToolAnnotations`로도 사용 가능). 모든 필드는 선택적 힌트이며, 클라이언트는 보안 결정을 위해 이에 의존해서는 안 됩니다.

161 

162| 필드 | 타입 | 기본값 | 설명 |

163| :---------------- | :------------- | :------ | :---------------------------------------------------------------------------------- |

164| `title` | `str \| None` | `None` | 도구의 인간이 읽을 수 있는 제목 |

165| `readOnlyHint` | `bool \| None` | `False` | `True`인 경우, 도구는 환경을 수정하지 않습니다 |

166| `destructiveHint` | `bool \| None` | `True` | `True`인 경우, 도구는 파괴적인 업데이트를 수행할 수 있습니다 (`readOnlyHint`가 `False`일 때만 의미 있음) |

167| `idempotentHint` | `bool \| None` | `False` | `True`인 경우, 동일한 인수로 반복 호출해도 추가 효과가 없습니다 (`readOnlyHint`가 `False`일 때만 의미 있음) |

168| `openWorldHint` | `bool \| None` | `True` | `True`인 경우, 도구는 외부 엔티티와 상호작용합니다 (예: 웹 검색). `False`인 경우, 도구의 도메인은 폐쇄적입니다 (예: 메모리 도구) |

169 

170```python theme={null}

171from claude_agent_sdk import tool, ToolAnnotations

172from typing import Any

173 

174 

175@tool(

176 "search",

177 "Search the web",

178 {"query": str},

179 annotations=ToolAnnotations(readOnlyHint=True, openWorldHint=True),

180)

181async def search(args: dict[str, Any]) -> dict[str, Any]:

182 return {"content": [{"type": "text", "text": f"Results for: {args['query']}"}]}

183```

184 

185### `create_sdk_mcp_server()`

186 

187Python 애플리케이션 내에서 실행되는 인프로세스 MCP 서버를 생성합니다.

188 

189```python theme={null}

190def create_sdk_mcp_server(

191 name: str,

192 version: str = "1.0.0",

193 tools: list[SdkMcpTool[Any]] | None = None

194) -> McpSdkServerConfig

195```

196 

197#### 매개변수

198 

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

200| :-------- | :------------------------------ | :-------- | :-------------------------- |

201| `name` | `str` | - | 서버의 고유 식별자 |

202| `version` | `str` | `"1.0.0"` | 서버 버전 문자열 |

203| `tools` | `list[SdkMcpTool[Any]] \| None` | `None` | `@tool` 데코레이터로 생성된 도구 함수 목록 |

204 

205#### 반환값

206 

207`ClaudeAgentOptions.mcp_servers`에 전달할 수 있는 `McpSdkServerConfig` 객체를 반환합니다.

208 

209#### 예제

210 

211```python theme={null}

212from claude_agent_sdk import tool, create_sdk_mcp_server

213 

214 

215@tool("add", "Add two numbers", {"a": float, "b": float})

216async def add(args):

217 return {"content": [{"type": "text", "text": f"Sum: {args['a'] + args['b']}"}]}

218 

219 

220@tool("multiply", "Multiply two numbers", {"a": float, "b": float})

221async def multiply(args):

222 return {"content": [{"type": "text", "text": f"Product: {args['a'] * args['b']}"}]}

223 

224 

225calculator = create_sdk_mcp_server(

226 name="calculator",

227 version="2.0.0",

228 tools=[add, multiply], # Pass decorated functions

229)

230 

231# Use with Claude

232options = ClaudeAgentOptions(

233 mcp_servers={"calc": calculator},

234 allowed_tools=["mcp__calc__add", "mcp__calc__multiply"],

235)

236```

237 

238### `list_sessions()`

239 

240메타데이터가 포함된 과거 세션을 나열합니다. 프로젝트 디렉토리로 필터링하거나 모든 프로젝트의 세션을 나열합니다. 동기식이며 즉시 반환됩니다.

241 

242```python theme={null}

243def list_sessions(

244 directory: str | None = None,

245 limit: int | None = None,

246 include_worktrees: bool = True

247) -> list[SDKSessionInfo]

248```

249 

250#### 매개변수

251 

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

253| :------------------ | :------------ | :----- | :------------------------------------------------------ |

254| `directory` | `str \| None` | `None` | 세션을 나열할 디렉토리. 생략하면 모든 프로젝트의 세션을 반환합니다 |

255| `limit` | `int \| None` | `None` | 반환할 최대 세션 수 |

256| `include_worktrees` | `bool` | `True` | `directory`가 git 저장소 내에 있을 때, 모든 worktree 경로의 세션을 포함합니다 |

257 

258#### 반환 타입: `SDKSessionInfo`

259 

260| 속성 | 타입 | 설명 |

261| :-------------- | :------------ | :-------------------------------------------------- |

262| `session_id` | `str` | 고유 세션 식별자 |

263| `summary` | `str` | 표시 제목: 사용자 정의 제목, 자동 생성된 요약 또는 첫 프롬프트 |

264| `last_modified` | `int` | 에포크 이후 마지막 수정 시간 (밀리초) |

265| `file_size` | `int \| None` | 세션 파일 크기 (바이트) (원격 저장소 백엔드의 경우 `None`) |

266| `custom_title` | `str \| None` | 사용자가 설정한 세션 제목 |

267| `first_prompt` | `str \| None` | 세션의 첫 번째 의미 있는 사용자 프롬프트 |

268| `git_branch` | `str \| None` | 세션 끝의 Git 브랜치 |

269| `cwd` | `str \| None` | 세션의 작업 디렉토리 |

270| `tag` | `str \| None` | 사용자가 설정한 세션 태그 ([`tag_session()`](#tag-session) 참조) |

271| `created_at` | `int \| None` | 에포크 이후 세션 생성 시간 (밀리초) |

272 

273#### 예제

274 

275프로젝트의 10개 최신 세션을 인쇄합니다. 결과는 `last_modified` 내림차순으로 정렬되므로 첫 번째 항목이 가장 최신입니다. `directory`를 생략하면 모든 프로젝트를 검색합니다.

276 

277```python theme={null}

278from claude_agent_sdk import list_sessions

279 

280for session in list_sessions(directory="/path/to/project", limit=10):

281 print(f"{session.summary} ({session.session_id})")

282```

283 

284### `get_session_messages()`

285 

286과거 세션에서 메시지를 검색합니다. 동기식이며 즉시 반환됩니다.

287 

288```python theme={null}

289def get_session_messages(

290 session_id: str,

291 directory: str | None = None,

292 limit: int | None = None,

293 offset: int = 0

294) -> list[SessionMessage]

295```

296 

297#### 매개변수

298 

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

300| :----------- | :------------ | :----- | :--------------------------------- |

301| `session_id` | `str` | 필수 | 메시지를 검색할 세션 ID |

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

303| `limit` | `int \| None` | `None` | 반환할 최대 메시지 수 |

304| `offset` | `int` | `0` | 시작 부분에서 건너뛸 메시지 수 |

305 

306#### 반환 타입: `SessionMessage`

307 

308| 속성 | 타입 | 설명 |

309| :------------------- | :----------------------------- | :------------ |

310| `type` | `Literal["user", "assistant"]` | 메시지 역할 |

311| `uuid` | `str` | 고유 메시지 식별자 |

312| `session_id` | `str` | 세션 식별자 |

313| `message` | `Any` | 원본 메시지 콘텐츠 |

314| `parent_tool_use_id` | `None` | 향후 사용을 위해 예약됨 |

315 

316#### 예제

317 

318```python theme={null}

319from claude_agent_sdk import list_sessions, get_session_messages

320 

321sessions = list_sessions(limit=1)

322if sessions:

323 messages = get_session_messages(sessions[0].session_id)

324 for msg in messages:

325 print(f"[{msg.type}] {msg.uuid}")

326```

327 

328### `get_session_info()`

329 

330전체 프로젝트 디렉토리를 스캔하지 않고 ID로 단일 세션의 메타데이터를 읽습니다. 동기식이며 즉시 반환됩니다.

331 

332```python theme={null}

333def get_session_info(

334 session_id: str,

335 directory: str | None = None,

336) -> SDKSessionInfo | None

337```

338 

339#### 매개변수

340 

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

342| :----------- | :------------ | :----- | :------------------------------------- |

343| `session_id` | `str` | 필수 | 조회할 세션의 UUID |

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

345 

346[`SDKSessionInfo`](#return-type-sdk-session-info)를 반환하거나, 세션을 찾을 수 없으면 `None`을 반환합니다.

347 

348#### 예제

349 

350프로젝트 디렉토리를 스캔하지 않고 단일 세션의 메타데이터를 조회합니다. 이전 실행에서 세션 ID를 이미 가지고 있을 때 유용합니다.

351 

352```python theme={null}

353from claude_agent_sdk import get_session_info

354 

355info = get_session_info("550e8400-e29b-41d4-a716-446655440000")

356if info:

357 print(f"{info.summary} (branch: {info.git_branch}, tag: {info.tag})")

358```

359 

360### `rename_session()`

361 

362사용자 정의 제목 항목을 추가하여 세션의 이름을 바꿉니다. 반복 호출은 안전하며, 가장 최신 제목이 우선합니다. 동기식입니다.

363 

364```python theme={null}

365def rename_session(

366 session_id: str,

367 title: str,

368 directory: str | None = None,

369) -> None

370```

371 

372#### 매개변수

373 

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

375| :----------- | :------------ | :----- | :------------------------------------- |

376| `session_id` | `str` | 필수 | 이름을 바꿀 세션의 UUID |

377| `title` | `str` | 필수 | 새 제목. 공백을 제거한 후 비어 있지 않아야 합니다 |

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

379 

380`session_id`가 유효한 UUID가 아니거나 `title`이 비어 있으면 `ValueError`를 발생시킵니다. 세션을 찾을 수 없으면 `FileNotFoundError`를 발생시킵니다.

381 

382#### 예제

383 

384가장 최신 세션의 이름을 바꿔서 나중에 찾기 쉽게 합니다. 새 제목은 이후 읽기에서 [`SDKSessionInfo.custom_title`](#return-type-sdk-session-info)에 나타납니다.

385 

386```python theme={null}

387from claude_agent_sdk import list_sessions, rename_session

388 

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

390if sessions:

391 rename_session(sessions[0].session_id, "Refactor auth module")

392```

393 

394### `tag_session()`

395 

396세션에 태그를 지정합니다. 태그를 지우려면 `None`을 전달합니다. 반복 호출은 안전하며, 가장 최신 태그가 우선합니다. 동기식입니다.

397 

398```python theme={null}

399def tag_session(

400 session_id: str,

401 tag: str | None,

402 directory: str | None = None,

403) -> None

404```

405 

406#### 매개변수

407 

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

409| :----------- | :------------ | :----- | :--------------------------------------- |

410| `session_id` | `str` | 필수 | 태그를 지정할 세션의 UUID |

411| `tag` | `str \| None` | 필수 | 태그 문자열 또는 지우려면 `None`. 저장하기 전에 유니코드 정규화됨 |

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

413 

414`session_id`가 유효한 UUID가 아니거나 `tag`가 정규화 후 비어 있으면 `ValueError`를 발생시킵니다. 세션을 찾을 수 없으면 `FileNotFoundError`를 발생시킵니다.

415 

416#### 예제

417 

418세션에 태그를 지정한 다음, 나중에 읽을 때 해당 태그로 필터링합니다. 기존 태그를 지우려면 `None`을 전달합니다.

419 

420```python theme={null}

421from claude_agent_sdk import list_sessions, tag_session

422 

423# Tag a session

424tag_session("550e8400-e29b-41d4-a716-446655440000", "needs-review")

425 

426# Later: find all sessions with that tag

427for session in list_sessions(directory="/path/to/project"):

428 if session.tag == "needs-review":

429 print(session.summary)

430```

431 

432## 클래스

433 

434### `ClaudeSDKClient`

435 

436**여러 교환에 걸쳐 대화 세션을 유지합니다.** 이것은 TypeScript SDK의 `query()` 함수가 내부적으로 작동하는 방식의 Python 동등물입니다 - 대화를 계속할 수 있는 클라이언트 객체를 생성합니다.

437 

438#### 주요 기능

439 

440* **세션 연속성**: 여러 `query()` 호출에 걸쳐 대화 컨텍스트 유지

441* **동일한 대화**: 세션이 이전 메시지를 유지합니다

442* **중단 지원**: 작업 중간에 실행을 중지할 수 있습니다

443* **명시적 수명 주기**: 세션이 시작되고 끝나는 시점을 제어합니다

444* **응답 기반 흐름**: 응답에 반응하고 후속 조치를 보낼 수 있습니다

445* **사용자 정의 도구 및 hooks**: 사용자 정의 도구 (`@tool` 데코레이터로 생성) 및 hooks를 지원합니다

446 

447```python theme={null}

448class ClaudeSDKClient:

449 def __init__(self, options: ClaudeAgentOptions | None = None, transport: Transport | None = None)

450 async def connect(self, prompt: str | AsyncIterable[dict] | None = None) -> None

451 async def query(self, prompt: str | AsyncIterable[dict], session_id: str = "default") -> None

452 async def receive_messages(self) -> AsyncIterator[Message]

453 async def receive_response(self) -> AsyncIterator[Message]

454 async def interrupt(self) -> None

455 async def set_permission_mode(self, mode: str) -> None

456 async def set_model(self, model: str | None = None) -> None

457 async def rewind_files(self, user_message_id: str) -> None

458 async def get_mcp_status(self) -> McpStatusResponse

459 async def reconnect_mcp_server(self, server_name: str) -> None

460 async def toggle_mcp_server(self, server_name: str, enabled: bool) -> None

461 async def stop_task(self, task_id: str) -> None

462 async def get_server_info(self) -> dict[str, Any] | None

463 async def disconnect(self) -> None

464```

465 

466#### 메서드

467 

468| 메서드 | 설명 |

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

470| `__init__(options)` | 선택적 구성으로 클라이언트 초기화 |

471| `connect(prompt)` | 선택적 초기 프롬프트 또는 메시지 스트림으로 Claude에 연결 |

472| `query(prompt, session_id)` | 스트리밍 모드에서 새 요청 전송 |

473| `receive_messages()` | Claude의 모든 메시지를 비동기 반복자로 수신 |

474| `receive_response()` | ResultMessage를 포함하여 메시지 수신 |

475| `interrupt()` | 중단 신호 전송 (스트리밍 모드에서만 작동) |

476| `set_permission_mode(mode)` | 현재 세션의 권한 모드 변경 |

477| `set_model(model)` | 현재 세션의 모델 변경. 기본값으로 재설정하려면 `None` 전달 |

478| `rewind_files(user_message_id)` | 지정된 사용자 메시지의 상태로 파일 복원. `enable_file_checkpointing=True` 필요. [파일 체크포인팅](/ko/agent-sdk/file-checkpointing) 참조 |

479| `get_mcp_status()` | 구성된 모든 MCP 서버의 상태 가져오기. [`McpStatusResponse`](#mcp-status-response) 반환 |

480| `reconnect_mcp_server(server_name)` | 실패했거나 연결이 끊긴 MCP 서버에 다시 연결 시도 |

481| `toggle_mcp_server(server_name, enabled)` | 세션 중간에 MCP 서버 활성화 또는 비활성화. 비활성화하면 도구 제거 |

482| `stop_task(task_id)` | 실행 중인 백그라운드 작업 중지. 상태 `"stopped"`인 [`TaskNotificationMessage`](#task-notification-message)가 메시지 스트림에서 따릅니다 |

483| `get_server_info()` | 세션 ID 및 기능을 포함한 서버 정보 가져오기 |

484| `disconnect()` | Claude에서 연결 해제 |

485 

486#### 컨텍스트 관리자 지원

487 

488클라이언트는 자동 연결 관리를 위한 비동기 컨텍스트 관리자로 사용할 수 있습니다.

489 

490```python theme={null}

491async with ClaudeSDKClient() as client:

492 await client.query("Hello Claude")

493 async for message in client.receive_response():

494 print(message)

495```

496 

497> **중요:** 메시지를 반복할 때, asyncio 정리 문제를 일으킬 수 있으므로 `break`를 사용하여 조기에 종료하지 마십시오. 대신 반복이 자연스럽게 완료되도록 하거나 플래그를 사용하여 필요한 것을 찾았을 때를 추적하십시오.

498 

499#### 예제 - 대화 계속하기

500 

501```python theme={null}

502import asyncio

503from claude_agent_sdk import ClaudeSDKClient, AssistantMessage, TextBlock, ResultMessage

504 

505 

506async def main():

507 async with ClaudeSDKClient() as client:

508 # First question

509 await client.query("What's the capital of France?")

510 

511 # Process response

512 async for message in client.receive_response():

513 if isinstance(message, AssistantMessage):

514 for block in message.content:

515 if isinstance(block, TextBlock):

516 print(f"Claude: {block.text}")

517 

518 # Follow-up question - the session retains the previous context

519 await client.query("What's the population of that city?")

520 

521 async for message in client.receive_response():

522 if isinstance(message, AssistantMessage):

523 for block in message.content:

524 if isinstance(block, TextBlock):

525 print(f"Claude: {block.text}")

526 

527 # Another follow-up - still in the same conversation

528 await client.query("What are some famous landmarks there?")

529 

530 async for message in client.receive_response():

531 if isinstance(message, AssistantMessage):

532 for block in message.content:

533 if isinstance(block, TextBlock):

534 print(f"Claude: {block.text}")

535 

536 

537asyncio.run(main())

538```

539 

540#### 예제 - ClaudeSDKClient를 사용한 스트리밍 입력

541 

542```python theme={null}

543import asyncio

544from claude_agent_sdk import ClaudeSDKClient

545 

546 

547async def message_stream():

548 """Generate messages dynamically."""

549 yield {

550 "type": "user",

551 "message": {"role": "user", "content": "Analyze the following data:"},

552 }

553 await asyncio.sleep(0.5)

554 yield {

555 "type": "user",

556 "message": {"role": "user", "content": "Temperature: 25°C, Humidity: 60%"},

557 }

558 await asyncio.sleep(0.5)

559 yield {

560 "type": "user",

561 "message": {"role": "user", "content": "What patterns do you see?"},

562 }

563 

564 

565async def main():

566 async with ClaudeSDKClient() as client:

567 # Stream input to Claude

568 await client.query(message_stream())

569 

570 # Process response

571 async for message in client.receive_response():

572 print(message)

573 

574 # Follow-up in same session

575 await client.query("Should we be concerned about these readings?")

576 

577 async for message in client.receive_response():

578 print(message)

579 

580 

581asyncio.run(main())

582```

583 

584#### 예제 - 중단 사용

585 

586```python theme={null}

587import asyncio

588from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, ResultMessage

589 

590 

591async def interruptible_task():

592 options = ClaudeAgentOptions(allowed_tools=["Bash"], permission_mode="acceptEdits")

593 

594 async with ClaudeSDKClient(options=options) as client:

595 # Start a long-running task

596 await client.query("Count from 1 to 100 slowly, using the bash sleep command")

597 

598 # Let it run for a bit

599 await asyncio.sleep(2)

600 

601 # Interrupt the task

602 await client.interrupt()

603 print("Task interrupted!")

604 

605 # Drain the interrupted task's messages (including its ResultMessage)

606 async for message in client.receive_response():

607 if isinstance(message, ResultMessage):

608 print(f"Interrupted task finished with subtype={message.subtype!r}")

609 # subtype is "error_during_execution" for interrupted tasks

610 

611 # Send a new command

612 await client.query("Just say hello instead")

613 

614 # Now receive the new response

615 async for message in client.receive_response():

616 if isinstance(message, ResultMessage) and message.subtype == "success":

617 print(f"New result: {message.result}")

618 

619 

620asyncio.run(interruptible_task())

621```

622 

623<Note>

624 **중단 후 버퍼 동작:** `interrupt()`는 중지 신호를 보내지만 메시지 버퍼를 지우지 않습니다. 중단된 작업에서 이미 생성된 메시지 (해당 `ResultMessage` 포함, `subtype="error_during_execution"`)는 스트림에 남아 있습니다. 새 쿼리의 응답을 읽기 전에 `receive_response()`로 이들을 드레인해야 합니다. `interrupt()` 직후에 새 쿼리를 보내고 `receive_response()`를 한 번만 호출하면, 새 쿼리의 응답이 아닌 중단된 작업의 메시지를 받게 됩니다.

625</Note>

626 

627#### 예제 - 고급 권한 제어

628 

629```python theme={null}

630from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions

631from claude_agent_sdk.types import (

632 PermissionResultAllow,

633 PermissionResultDeny,

634 ToolPermissionContext,

635)

636 

637 

638async def custom_permission_handler(

639 tool_name: str, input_data: dict, context: ToolPermissionContext

640) -> PermissionResultAllow | PermissionResultDeny:

641 """Custom logic for tool permissions."""

642 

643 # Block writes to system directories

644 if tool_name == "Write" and input_data.get("file_path", "").startswith("/system/"):

645 return PermissionResultDeny(

646 message="System directory write not allowed", interrupt=True

647 )

648 

649 # Redirect sensitive file operations

650 if tool_name in ["Write", "Edit"] and "config" in input_data.get("file_path", ""):

651 safe_path = f"./sandbox/{input_data['file_path']}"

652 return PermissionResultAllow(

653 updated_input={**input_data, "file_path": safe_path}

654 )

655 

656 # Allow everything else

657 return PermissionResultAllow(updated_input=input_data)

658 

659 

660async def main():

661 options = ClaudeAgentOptions(

662 can_use_tool=custom_permission_handler, allowed_tools=["Read", "Write", "Edit"]

663 )

664 

665 async with ClaudeSDKClient(options=options) as client:

666 await client.query("Update the system config file")

667 

668 async for message in client.receive_response():

669 # Will use sandbox path instead

670 print(message)

671 

672 

673asyncio.run(main())

674```

675 

676## 타입

677 

678<Note>

679 **`@dataclass` vs `TypedDict`:** 이 SDK는 두 가지 종류의 타입을 사용합니다. `@dataclass`로 장식된 클래스 (`ResultMessage`, `AgentDefinition`, `TextBlock`)는 런타임에 객체 인스턴스이며 속성 접근을 지원합니다: `msg.result`. `TypedDict`로 정의된 클래스 (`ThinkingConfigEnabled`, `McpStdioServerConfig`, `SyncHookJSONOutput`)는 **런타임에 일반 딕셔너리**이며 키 접근이 필요합니다: `config["budget_tokens"]`, `config.budget_tokens`가 아닙니다. `ClassName(field=value)` 호출 구문은 둘 다에서 작동하지만, dataclass만 속성이 있는 객체를 생성합니다.

680</Note>

681 

682### `SdkMcpTool`

683 

684`@tool` 데코레이터로 생성된 SDK MCP 도구의 정의입니다.

685 

686```python theme={null}

687@dataclass

688class SdkMcpTool(Generic[T]):

689 name: str

690 description: str

691 input_schema: type[T] | dict[str, Any]

692 handler: Callable[[T], Awaitable[dict[str, Any]]]

693 annotations: ToolAnnotations | None = None

694```

695 

696| 속성 | 타입 | 설명 |

697| :------------- | :----------------------------------------- | :----------------------------------------------------------------------------------- |

698| `name` | `str` | 도구의 고유 식별자 |

699| `description` | `str` | 인간이 읽을 수 있는 설명 |

700| `input_schema` | `type[T] \| dict[str, Any]` | 입력 검증을 위한 스키마 |

701| `handler` | `Callable[[T], Awaitable[dict[str, Any]]]` | 도구 실행을 처리하는 비동기 함수 |

702| `annotations` | `ToolAnnotations \| None` | 선택적 MCP 도구 주석 (예: `readOnlyHint`, `destructiveHint`, `openWorldHint`). `mcp.types`에서 |

703 

704### `Transport`

705 

706사용자 정의 전송 구현을 위한 추상 기본 클래스입니다. 이를 사용하여 사용자 정의 채널 (예: 로컬 서브프로세스 대신 원격 연결)을 통해 Claude 프로세스와 통신합니다.

707 

708<Warning>

709 이것은 낮은 수준의 내부 API입니다. 인터페이스는 향후 릴리스에서 변경될 수 있습니다. 사용자 정의 구현은 인터페이스 변경에 맞게 업데이트되어야 합니다.

710</Warning>

711 

712```python theme={null}

713from abc import ABC, abstractmethod

714from collections.abc import AsyncIterator

715from typing import Any

716 

717 

718class Transport(ABC):

719 @abstractmethod

720 async def connect(self) -> None: ...

721 

722 @abstractmethod

723 async def write(self, data: str) -> None: ...

724 

725 @abstractmethod

726 def read_messages(self) -> AsyncIterator[dict[str, Any]]: ...

727 

728 @abstractmethod

729 async def close(self) -> None: ...

730 

731 @abstractmethod

732 def is_ready(self) -> bool: ...

733 

734 @abstractmethod

735 async def end_input(self) -> None: ...

736```

737 

738| 메서드 | 설명 |

739| :---------------- | :------------------------------------ |

740| `connect()` | 전송을 연결하고 통신을 준비합니다 |

741| `write(data)` | 원본 데이터 (JSON + 줄바꿈)를 전송에 씁니다 |

742| `read_messages()` | 구문 분석된 JSON 메시지를 생성하는 비동기 반복자 |

743| `close()` | 연결을 닫고 리소스를 정리합니다 |

744| `is_ready()` | 전송이 송수신할 수 있으면 `True`를 반환합니다 |

745| `end_input()` | 입력 스트림을 닫습니다 (예: 서브프로세스 전송의 stdin 닫기) |

746 

747가져오기: `from claude_agent_sdk import Transport`

748 

749### `ClaudeAgentOptions`

750 

751Claude Code 쿼리를 위한 구성 dataclass입니다.

752 

753```python theme={null}

754@dataclass

755class ClaudeAgentOptions:

756 tools: list[str] | ToolsPreset | None = None

757 allowed_tools: list[str] = field(default_factory=list)

758 system_prompt: str | SystemPromptPreset | None = None

759 mcp_servers: dict[str, McpServerConfig] | str | Path = field(default_factory=dict)

760 permission_mode: PermissionMode | None = None

761 continue_conversation: bool = False

762 resume: str | None = None

763 max_turns: int | None = None

764 max_budget_usd: float | None = None

765 disallowed_tools: list[str] = field(default_factory=list)

766 model: str | None = None

767 fallback_model: str | None = None

768 betas: list[SdkBeta] = field(default_factory=list)

769 output_format: dict[str, Any] | None = None

770 permission_prompt_tool_name: str | None = None

771 cwd: str | Path | None = None

772 cli_path: str | Path | None = None

773 settings: str | None = None

774 add_dirs: list[str | Path] = field(default_factory=list)

775 env: dict[str, str] = field(default_factory=dict)

776 extra_args: dict[str, str | None] = field(default_factory=dict)

777 max_buffer_size: int | None = None

778 debug_stderr: Any = sys.stderr # Deprecated

779 stderr: Callable[[str], None] | None = None

780 can_use_tool: CanUseTool | None = None

781 hooks: dict[HookEvent, list[HookMatcher]] | None = None

782 user: str | None = None

783 include_partial_messages: bool = False

784 fork_session: bool = False

785 agents: dict[str, AgentDefinition] | None = None

786 setting_sources: list[SettingSource] | None = None

787 sandbox: SandboxSettings | None = None

788 plugins: list[SdkPluginConfig] = field(default_factory=list)

789 max_thinking_tokens: int | None = None # Deprecated: use thinking instead

790 thinking: ThinkingConfig | None = None

791 effort: Literal["low", "medium", "high", "max"] | None = None

792 enable_file_checkpointing: bool = False

793 session_store: SessionStore | None = None

794```

795 

796| 속성 | 타입 | 기본값 | 설명 |

797| :---------------------------- | :------------------------------------------------------------------------------------- | :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

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

799| `allowed_tools` | `list[str]` | `[]` | 프롬프트 없이 자동 승인할 도구. 이것은 Claude를 이 도구로만 제한하지 않습니다. 나열되지 않은 도구는 `permission_mode` 및 `can_use_tool`로 넘어갑니다. `disallowed_tools`를 사용하여 도구를 차단합니다. [권한](/ko/agent-sdk/permissions#allow-and-deny-rules) 참조 |

800| `system_prompt` | `str \| SystemPromptPreset \| None` | `None` | 시스템 프롬프트 구성. 사용자 정의 프롬프트의 경우 문자열을 전달하거나, Claude Code의 시스템 프롬프트를 위해 `{"type": "preset", "preset": "claude_code"}` 사용. 프리셋을 확장하려면 `"append"` 추가 |

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

802| `permission_mode` | `PermissionMode \| None` | `None` | 도구 사용을 위한 권한 모드 |

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

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

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

806| `max_budget_usd` | `float \| None` | `None` | 클라이언트 측 비용 추정이 이 USD 값에 도달하면 쿼리 중지. `total_cost_usd`와 동일한 추정과 비교됨. 정확도 주의 사항은 [비용 및 사용량 추적](/ko/agent-sdk/cost-tracking) 참조 |

807| `disallowed_tools` | `list[str]` | `[]` | 항상 거부할 도구. 거부 규칙이 먼저 확인되고 `allowed_tools` 및 `permission_mode` (including `bypassPermissions`)를 재정의합니다 |

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

809| `model` | `str \| None` | `None` | 사용할 Claude 모델 |

810| `fallback_model` | `str \| None` | `None` | 기본 모델이 실패할 경우 사용할 폴백 모델 |

811| `betas` | `list[SdkBeta]` | `[]` | 활성화할 베타 기능. 사용 가능한 옵션은 [`SdkBeta`](#sdk-beta) 참조 |

812| `output_format` | `dict[str, Any] \| None` | `None` | 구조화된 응답을 위한 출력 형식 (예: `{"type": "json_schema", "schema": {...}}`). 자세한 내용은 [구조화된 출력](/ko/agent-sdk/structured-outputs) 참조 |

813| `permission_prompt_tool_name` | `str \| None` | `None` | 권한 프롬프트를 위한 MCP 도구 이름 |

814| `cwd` | `str \| Path \| None` | `None` | 현재 작업 디렉토리 |

815| `cli_path` | `str \| Path \| None` | `None` | Claude Code CLI 실행 파일의 사용자 정의 경로 |

816| `settings` | `str \| None` | `None` | 설정 파일 경로 |

817| `add_dirs` | `list[str \| Path]` | `[]` | Claude가 접근할 수 있는 추가 디렉토리 |

818| `env` | `dict[str, str]` | `{}` | 상속된 프로세스 환경 위에 병합된 환경 변수. 기본 CLI가 읽는 변수는 [환경 변수](/ko/env-vars) 참조 |

819| `extra_args` | `dict[str, str \| None]` | `{}` | CLI에 직접 전달할 추가 CLI 인수 |

820| `max_buffer_size` | `int \| None` | `None` | CLI stdout 버퍼링 시 최대 바이트 |

821| `debug_stderr` | `Any` | `sys.stderr` | *Deprecated* - 디버그 출력을 위한 파일 유사 객체. 대신 `stderr` 콜백 사용 |

822| `stderr` | `Callable[[str], None] \| None` | `None` | CLI의 stderr 출력을 위한 콜백 함수 |

823| `can_use_tool` | [`CanUseTool`](#can-use-tool) ` \| None` | `None` | 도구 권한 콜백 함수. 자세한 내용은 [권한 타입](#can-use-tool) 참조 |

824| `hooks` | `dict[HookEvent, list[HookMatcher]] \| None` | `None` | 이벤트 가로채기를 위한 hook 구성 |

825| `user` | `str \| None` | `None` | 사용자 식별자 |

826| `include_partial_messages` | `bool` | `False` | 부분 메시지 스트리밍 이벤트 포함. 활성화되면 [`StreamEvent`](#stream-event) 메시지가 생성됩니다 |

827| `fork_session` | `bool` | `False` | `resume`으로 재개할 때, 원본 세션을 계속하는 대신 새 세션 ID로 포크합니다 |

828| `agents` | `dict[str, AgentDefinition] \| None` | `None` | 프로그래밍 방식으로 정의된 서브에이전트 |

829| `plugins` | `list[SdkPluginConfig]` | `[]` | 로컬 경로에서 사용자 정의 플러그인 로드. 자세한 내용은 [플러그인](/ko/agent-sdk/plugins) 참조 |

830| `sandbox` | [`SandboxSettings`](#sandbox-settings) ` \| None` | `None` | 프로그래밍 방식으로 샌드박스 동작 구성. 자세한 내용은 [샌드박스 설정](#sandbox-settings) 참조 |

831| `setting_sources` | `list[SettingSource] \| None` | `None` (CLI 기본값: 모든 소스) | 로드할 파일 시스템 설정을 제어합니다. 사용자, 프로젝트 및 로컬 설정을 비활성화하려면 `[]`를 전달합니다. 관리형 정책 설정은 어쨌든 로드됩니다. [Claude Code 기능 사용](/ko/agent-sdk/claude-code-features#what-settingsources-does-not-control)에서 이것이 제어하지 않는 입력 및 비활성화 방법 참조 |

832| `max_thinking_tokens` | `int \| None` | `None` | *Deprecated* - 생각 블록의 최대 토큰. 대신 `thinking` 사용 |

833| `thinking` | [`ThinkingConfig`](#thinking-config) ` \| None` | `None` | 확장된 생각 동작을 제어합니다. `max_thinking_tokens`보다 우선합니다 |

834| `effort` | `Literal["low", "medium", "high", "max"] \| None` | `None` | 생각 깊이를 위한 노력 수준 |

835| `session_store` | [`SessionStore`](/ko/agent-sdk/session-storage#the-session-store-interface) ` \| None` | `None` | 세션 기록을 외부 백엔드로 미러링하여 모든 호스트가 이를 재개할 수 있도록 합니다. [외부 저장소에 세션 유지](/ko/agent-sdk/session-storage) 참조 |

836 

837### `OutputFormat`

838 

839구조화된 출력 검증을 위한 구성입니다. 이를 `ClaudeAgentOptions`의 `output_format` 필드에 `dict`로 전달합니다.

840 

841```python theme={null}

842# output_format에 대한 예상 dict 형태

843{

844 "type": "json_schema",

845 "schema": {...}, # Your JSON Schema definition

846}

847```

848 

849| 필드 | 필수 | 설명 |

850| :------- | :- | :------------------------------- |

851| `type` | 예 | 출력 검증을 위해 `"json_schema"`이어야 합니다 |

852| `schema` | 예 | 출력 검증을 위한 JSON Schema 정의 |

853 

854### `SystemPromptPreset`

855 

856선택적 추가 사항과 함께 Claude Code의 프리셋 시스템 프롬프트를 사용하기 위한 구성입니다.

857 

858```python theme={null}

859class SystemPromptPreset(TypedDict):

860 type: Literal["preset"]

861 preset: Literal["claude_code"]

862 append: NotRequired[str]

863 exclude_dynamic_sections: NotRequired[bool]

864```

865 

866| 필드 | 필수 | 설명 |

867| :------------------------- | :-- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

868| `type` | 예 | 프리셋 시스템 프롬프트를 사용하려면 `"preset"`이어야 합니다 |

869| `preset` | 예 | Claude Code의 시스템 프롬프트를 사용하려면 `"claude_code"`이어야 합니다 |

870| `append` | 아니오 | 프리셋 시스템 프롬프트에 추가할 추가 지침 |

871| `exclude_dynamic_sections` | 아니오 | 작업 디렉토리, git 상태 및 메모리 경로와 같은 세션별 컨텍스트를 시스템 프롬프트에서 첫 사용자 메시지로 이동합니다. 사용자 및 머신 간 프롬프트 캐시 재사용을 개선합니다. [시스템 프롬프트 수정](/ko/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) 참조 |

872 

873### `SettingSource`

874 

875SDK가 설정을 로드하는 파일 시스템 기반 구성 소스를 제어합니다.

876 

877```python theme={null}

878SettingSource = Literal["user", "project", "local"]

879```

880 

881| 값 | 설명 | 위치 |

882| :---------- | :---------------------- | :---------------------------- |

883| `"user"` | 전역 사용자 설정 | `~/.claude/settings.json` |

884| `"project"` | 공유 프로젝트 설정 (버전 제어됨) | `.claude/settings.json` |

885| `"local"` | 로컬 프로젝트 설정 (gitignored) | `.claude/settings.local.json` |

886 

887#### 기본 동작

888 

889`setting_sources`가 생략되거나 `None`일 때, `query()`는 Claude Code CLI와 동일한 파일 시스템 설정을 로드합니다: 사용자, 프로젝트 및 로컬. 관리형 정책 설정은 모든 경우에 로드됩니다. 이 옵션과 관계없이 읽히는 입력 및 비활성화 방법은 [settingSources가 제어하지 않는 것](/ko/agent-sdk/claude-code-features#what-settingsources-does-not-control)을 참조하십시오.

890 

891#### setting\_sources를 사용하는 이유

892 

893**파일 시스템 설정 비활성화:**

894 

895```python theme={null}

896# Do not load user, project, or local settings from disk

897from claude_agent_sdk import query, ClaudeAgentOptions

898 

899async for message in query(

900 prompt="Analyze this code",

901 options=ClaudeAgentOptions(

902 setting_sources=[]

903 ),

904):

905 print(message)

906```

907 

908<Note>

909 Python SDK 0.1.59 이하에서는 빈 목록이 옵션을 생략하는 것과 동일하게 처리되었으므로 `setting_sources=[]`는 파일 시스템 설정을 비활성화하지 않았습니다. 빈 목록이 적용되어야 하는 경우 최신 릴리스로 업그레이드하십시오. TypeScript SDK는 영향을 받지 않습니다.

910</Note>

911 

912**모든 파일 시스템 설정을 명시적으로 로드:**

913 

914```python theme={null}

915from claude_agent_sdk import query, ClaudeAgentOptions

916 

917async for message in query(

918 prompt="Analyze this code",

919 options=ClaudeAgentOptions(

920 setting_sources=["user", "project", "local"]

921 ),

922):

923 print(message)

924```

925 

926**특정 설정 소스만 로드:**

927 

928```python theme={null}

929# Load only project settings, ignore user and local

930async for message in query(

931 prompt="Run CI checks",

932 options=ClaudeAgentOptions(

933 setting_sources=["project"] # Only .claude/settings.json

934 ),

935):

936 print(message)

937```

938 

939**테스트 및 CI 환경:**

940 

941```python theme={null}

942# Ensure consistent behavior in CI by excluding local settings

943async for message in query(

944 prompt="Run tests",

945 options=ClaudeAgentOptions(

946 setting_sources=["project"], # Only team-shared settings

947 permission_mode="bypassPermissions",

948 ),

949):

950 print(message)

951```

952 

953**SDK 전용 애플리케이션:**

954 

955```python theme={null}

956# Define everything programmatically.

957# Pass [] to opt out of filesystem setting sources.

958async for message in query(

959 prompt="Review this PR",

960 options=ClaudeAgentOptions(

961 setting_sources=[],

962 agents={...},

963 mcp_servers={...},

964 allowed_tools=["Read", "Grep", "Glob"],

965 ),

966):

967 print(message)

968```

969 

970**CLAUDE.md 프로젝트 지침 로드:**

971 

972```python theme={null}

973# Load project settings to include CLAUDE.md files

974async for message in query(

975 prompt="Add a new feature following project conventions",

976 options=ClaudeAgentOptions(

977 system_prompt={

978 "type": "preset",

979 "preset": "claude_code", # Use Claude Code's system prompt

980 },

981 setting_sources=["project"], # Loads CLAUDE.md from project

982 allowed_tools=["Read", "Write", "Edit"],

983 ),

984):

985 print(message)

986```

987 

988#### 설정 우선순위

989 

990여러 소스가 로드될 때, 설정은 이 우선순위로 병합됩니다 (높음에서 낮음):

991 

9921. 로컬 설정 (`.claude/settings.local.json`)

9932. 프로젝트 설정 (`.claude/settings.json`)

9943. 사용자 설정 (`~/.claude/settings.json`)

995 

996`agents` 및 `allowed_tools`와 같은 프로그래밍 방식의 옵션은 사용자, 프로젝트 및 로컬 파일 시스템 설정을 재정의합니다. 관리형 정책 설정은 프로그래밍 방식의 옵션보다 우선합니다.

997 

998### `AgentDefinition`

999 

1000프로그래밍 방식으로 정의된 서브에이전트의 구성입니다.

1001 

1002```python theme={null}

1003@dataclass

1004class AgentDefinition:

1005 description: str

1006 prompt: str

1007 tools: list[str] | None = None

1008 disallowedTools: list[str] | None = None

1009 model: str | None = None

1010 skills: list[str] | None = None

1011 memory: Literal["user", "project", "local"] | None = None

1012 mcpServers: list[str | dict[str, Any]] | None = None

1013 initialPrompt: str | None = None

1014 maxTurns: int | None = None

1015 background: bool | None = None

1016 effort: Literal["low", "medium", "high", "max"] | int | None = None

1017 permissionMode: PermissionMode | None = None

1018```

1019 

1020| 필드 | 필수 | 설명 |

1021| :---------------- | :-- | :------------------------------------------------------------------------------------------------------ |

1022| `description` | 예 | 이 에이전트를 사용할 시기에 대한 자연어 설명 |

1023| `prompt` | 예 | 에이전트의 시스템 프롬프트 |

1024| `tools` | 아니오 | 허용된 도구 이름의 배열. 생략하면 모든 도구를 상속합니다 |

1025| `disallowedTools` | 아니오 | 에이전트의 도구 세트에서 제거할 도구 이름의 배열 |

1026| `model` | 아니오 | 이 에이전트의 모델 재정의. `"sonnet"`, `"opus"`, `"haiku"`, `"inherit"` 같은 별칭 또는 전체 모델 ID를 허용합니다. 생략하면 주 모델을 사용합니다 |

1027| `skills` | 아니오 | 이 에이전트가 사용할 수 있는 스킬 이름 목록 |

1028| `memory` | 아니오 | 이 에이전트의 메모리 소스: `"user"`, `"project"`, 또는 `"local"` |

1029| `mcpServers` | 아니오 | 이 에이전트가 사용할 수 있는 MCP 서버. 각 항목은 서버 이름 또는 인라인 `{name: config}` dict입니다 |

1030| `initialPrompt` | 아니오 | 이 에이전트가 주 스레드 에이전트로 실행될 때 첫 사용자 턴으로 자동 제출됨 |

1031| `maxTurns` | 아니오 | 에이전트가 중지되기 전의 최대 에이전트 턴 수 |

1032| `background` | 아니오 | 호출될 때 이 에이전트를 비차단 백그라운드 작업으로 실행합니다 |

1033| `effort` | 아니오 | 이 에이전트의 추론 노력 수준. 명명된 수준 또는 정수를 허용합니다 |

1034| `permissionMode` | 아니오 | 이 에이전트 내의 도구 실행을 위한 권한 모드. [`PermissionMode`](#permission-mode) 참조 |

1035 

1036<Note>

1037 `AgentDefinition` 필드 이름은 `disallowedTools`, `permissionMode`, `maxTurns`와 같은 camelCase를 사용합니다. 이 이름은 TypeScript SDK와 공유되는 와이어 형식에 직접 매핑됩니다. 이는 `disallowed_tools` 및 `permission_mode`와 같은 동등한 최상위 필드에 Python snake\_case를 사용하는 `ClaudeAgentOptions`와 다릅니다. `AgentDefinition`은 dataclass이므로, snake\_case 키워드를 전달하면 구성 시 `TypeError`를 발생시킵니다.

1038</Note>

1039 

1040### `PermissionMode`

1041 

1042도구 실행을 제어하기 위한 권한 모드입니다.

1043 

1044```python theme={null}

1045PermissionMode = Literal[

1046 "default", # Standard permission behavior

1047 "acceptEdits", # Auto-accept file edits

1048 "plan", # Planning mode - no execution

1049 "dontAsk", # Deny anything not pre-approved instead of prompting

1050 "bypassPermissions", # Bypass all permission checks (use with caution)

1051]

1052```

1053 

1054### `CanUseTool`

1055 

1056도구 권한 콜백 함수의 타입 별칭입니다.

1057 

1058```python theme={null}

1059CanUseTool = Callable[

1060 [str, dict[str, Any], ToolPermissionContext], Awaitable[PermissionResult]

1061]

1062```

1063 

1064콜백은 다음을 수신합니다:

1065 

1066* `tool_name`: 호출되는 도구의 이름

1067* `input_data`: 도구의 입력 매개변수

1068* `context`: 추가 정보가 있는 `ToolPermissionContext`

1069 

1070`PermissionResult` (`PermissionResultAllow` 또는 `PermissionResultDeny`)를 반환합니다.

1071 

1072### `ToolPermissionContext`

1073 

1074도구 권한 콜백에 전달되는 컨텍스트 정보입니다.

1075 

1076```python theme={null}

1077@dataclass

1078class ToolPermissionContext:

1079 signal: Any | None = None # Future: abort signal support

1080 suggestions: list[PermissionUpdate] = field(default_factory=list)

1081```

1082 

1083| 필드 | 타입 | 설명 |

1084| :------------ | :----------------------- | :------------------ |

1085| `signal` | `Any \| None` | 향후 중단 신호 지원을 위해 예약됨 |

1086| `suggestions` | `list[PermissionUpdate]` | CLI의 권한 업데이트 제안 |

1087 

1088### `PermissionResult`

1089 

1090권한 콜백 결과의 합집합 타입입니다.

1091 

1092```python theme={null}

1093PermissionResult = PermissionResultAllow | PermissionResultDeny

1094```

1095 

1096### `PermissionResultAllow`

1097 

1098도구 호출이 허용되어야 함을 나타내는 결과입니다.

1099 

1100```python theme={null}

1101@dataclass

1102class PermissionResultAllow:

1103 behavior: Literal["allow"] = "allow"

1104 updated_input: dict[str, Any] | None = None

1105 updated_permissions: list[PermissionUpdate] | None = None

1106```

1107 

1108| 필드 | 타입 | 기본값 | 설명 |

1109| :-------------------- | :------------------------------- | :-------- | :--------------- |

1110| `behavior` | `Literal["allow"]` | `"allow"` | "allow"이어야 합니다 |

1111| `updated_input` | `dict[str, Any] \| None` | `None` | 원본 대신 사용할 수정된 입력 |

1112| `updated_permissions` | `list[PermissionUpdate] \| None` | `None` | 적용할 권한 업데이트 |

1113 

1114### `PermissionResultDeny`

1115 

1116도구 호출이 거부되어야 함을 나타내는 결과입니다.

1117 

1118```python theme={null}

1119@dataclass

1120class PermissionResultDeny:

1121 behavior: Literal["deny"] = "deny"

1122 message: str = ""

1123 interrupt: bool = False

1124```

1125 

1126| 필드 | 타입 | 기본값 | 설명 |

1127| :---------- | :---------------- | :------- | :------------------- |

1128| `behavior` | `Literal["deny"]` | `"deny"` | "deny"이어야 합니다 |

1129| `message` | `str` | `""` | 도구가 거부된 이유를 설명하는 메시지 |

1130| `interrupt` | `bool` | `False` | 현재 실행을 중단할지 여부 |

1131 

1132### `PermissionUpdate`

1133 

1134프로그래밍 방식으로 권한을 업데이트하기 위한 구성입니다.

1135 

1136```python theme={null}

1137@dataclass

1138class PermissionUpdate:

1139 type: Literal[

1140 "addRules",

1141 "replaceRules",

1142 "removeRules",

1143 "setMode",

1144 "addDirectories",

1145 "removeDirectories",

1146 ]

1147 rules: list[PermissionRuleValue] | None = None

1148 behavior: Literal["allow", "deny", "ask"] | None = None

1149 mode: PermissionMode | None = None

1150 directories: list[str] | None = None

1151 destination: (

1152 Literal["userSettings", "projectSettings", "localSettings", "session"] | None

1153 ) = None

1154```

1155 

1156| 필드 | 타입 | 설명 |

1157| :------------ | :---------------------------------------- | :--------------------- |

1158| `type` | `Literal[...]` | 권한 업데이트 작업의 타입 |

1159| `rules` | `list[PermissionRuleValue] \| None` | 추가/교체/제거 작업을 위한 규칙 |

1160| `behavior` | `Literal["allow", "deny", "ask"] \| None` | 규칙 기반 작업을 위한 동작 |

1161| `mode` | `PermissionMode \| None` | setMode 작업을 위한 모드 |

1162| `directories` | `list[str] \| None` | 디렉토리 추가/제거 작업을 위한 디렉토리 |

1163| `destination` | `Literal[...] \| None` | 권한 업데이트를 적용할 위치 |

1164 

1165### `PermissionRuleValue`

1166 

1167권한 업데이트에서 추가, 교체 또는 제거할 규칙입니다.

1168 

1169```python theme={null}

1170@dataclass

1171class PermissionRuleValue:

1172 tool_name: str

1173 rule_content: str | None = None

1174```

1175 

1176### `ToolsPreset`

1177 

1178Claude Code의 기본 도구 세트를 사용하기 위한 프리셋 도구 구성입니다.

1179 

1180```python theme={null}

1181class ToolsPreset(TypedDict):

1182 type: Literal["preset"]

1183 preset: Literal["claude_code"]

1184```

1185 

1186### `ThinkingConfig`

1187 

1188확장된 생각 동작을 제어합니다. 세 가지 구성의 합집합입니다.

1189 

1190```python theme={null}

1191class ThinkingConfigAdaptive(TypedDict):

1192 type: Literal["adaptive"]

1193 

1194 

1195class ThinkingConfigEnabled(TypedDict):

1196 type: Literal["enabled"]

1197 budget_tokens: int

1198 

1199 

1200class ThinkingConfigDisabled(TypedDict):

1201 type: Literal["disabled"]

1202 

1203 

1204ThinkingConfig = ThinkingConfigAdaptive | ThinkingConfigEnabled | ThinkingConfigDisabled

1205```

1206 

1207| 변형 | 필드 | 설명 |

1208| :--------- | :---------------------- | :-------------------------- |

1209| `adaptive` | `type` | Claude가 생각할 시기를 적응적으로 결정합니다 |

1210| `enabled` | `type`, `budget_tokens` | 특정 토큰 예산으로 생각 활성화 |

1211| `disabled` | `type` | 생각 비활성화 |

1212 

1213이들은 `TypedDict` 클래스이므로 런타임에 일반 dict입니다. dict 리터럴로 구성하거나 클래스를 생성자처럼 호출합니다. 둘 다 `dict`를 생성합니다. `config.budget_tokens`가 아닌 `config["budget_tokens"]`로 필드에 접근합니다.

1214 

1215```python theme={null}

1216from claude_agent_sdk import ClaudeAgentOptions, ThinkingConfigEnabled

1217 

1218# Option 1: dict literal (recommended, no import needed)

1219options = ClaudeAgentOptions(thinking={"type": "enabled", "budget_tokens": 20000})

1220 

1221# Option 2: constructor-style (returns a plain dict)

1222config = ThinkingConfigEnabled(type="enabled", budget_tokens=20000)

1223print(config["budget_tokens"]) # 20000

1224# config.budget_tokens would raise AttributeError

1225```

1226 

1227### `SdkBeta`

1228 

1229SDK 베타 기능의 리터럴 타입입니다.

1230 

1231```python theme={null}

1232SdkBeta = Literal["context-1m-2025-08-07"]

1233```

1234 

1235`ClaudeAgentOptions`의 `betas` 필드와 함께 사용하여 베타 기능을 활성화합니다.

1236 

1237<Warning>

1238 `context-1m-2025-08-07` 베타는 2026년 4월 30일부터 폐기되었습니다. Claude Sonnet 4.5 또는 Sonnet 4와 함께 이 헤더를 전달하면 효과가 없으며, 표준 200k 토큰 컨텍스트 윈도우를 초과하는 요청은 오류를 반환합니다. 1M 토큰 컨텍스트 윈도우를 사용하려면 [Claude Sonnet 4.6, Claude Opus 4.6 또는 Claude Opus 4.7](https://platform.claude.com/docs/en/about-claude/models/overview)로 마이그레이션하십시오. 이들은 베타 헤더 없이 표준 가격으로 1M 컨텍스트를 포함합니다.

1239</Warning>

1240 

1241### `McpSdkServerConfig`

1242 

1243`create_sdk_mcp_server()`로 생성된 SDK MCP 서버의 구성입니다.

1244 

1245```python theme={null}

1246class McpSdkServerConfig(TypedDict):

1247 type: Literal["sdk"]

1248 name: str

1249 instance: Any # MCP Server instance

1250```

1251 

1252### `McpServerConfig`

1253 

1254MCP 서버 구성의 합집합 타입입니다.

1255 

1256```python theme={null}

1257McpServerConfig = (

1258 McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig

1259)

1260```

1261 

1262#### `McpStdioServerConfig`

1263 

1264```python theme={null}

1265class McpStdioServerConfig(TypedDict):

1266 type: NotRequired[Literal["stdio"]] # Optional for backwards compatibility

1267 command: str

1268 args: NotRequired[list[str]]

1269 env: NotRequired[dict[str, str]]

1270```

1271 

1272#### `McpSSEServerConfig`

1273 

1274```python theme={null}

1275class McpSSEServerConfig(TypedDict):

1276 type: Literal["sse"]

1277 url: str

1278 headers: NotRequired[dict[str, str]]

1279```

1280 

1281#### `McpHttpServerConfig`

1282 

1283```python theme={null}

1284class McpHttpServerConfig(TypedDict):

1285 type: Literal["http"]

1286 url: str

1287 headers: NotRequired[dict[str, str]]

1288```

1289 

1290### `McpServerStatusConfig`

1291 

1292[`get_mcp_status()`](#methods)에서 보고한 MCP 서버의 구성입니다. 이것은 모든 [`McpServerConfig`](#mcp-server-config) 전송 변형의 합집합에 claude.ai를 통해 프록시된 서버를 위한 출력 전용 `claudeai-proxy` 변형을 더한 것입니다.

1293 

1294```python theme={null}

1295McpServerStatusConfig = (

1296 McpStdioServerConfig

1297 | McpSSEServerConfig

1298 | McpHttpServerConfig

1299 | McpSdkServerConfigStatus

1300 | McpClaudeAIProxyServerConfig

1301)

1302```

1303 

1304`McpSdkServerConfigStatus`는 [`McpSdkServerConfig`](#mcp-sdk-server-config)의 직렬화 가능한 형식이며 `type` (`"sdk"`) 및 `name` (`str`) 필드만 있습니다. 인프로세스 `instance`는 생략됩니다. `McpClaudeAIProxyServerConfig`는 `type` (`"claudeai-proxy"`), `url` (`str`) 및 `id` (`str`) 필드를 가집니다.

1305 

1306### `McpStatusResponse`

1307 

1308[`ClaudeSDKClient.get_mcp_status()`](#methods)의 응답입니다. 서버 상태 목록을 `mcpServers` 키 아래에 래핑합니다.

1309 

1310```python theme={null}

1311class McpStatusResponse(TypedDict):

1312 mcpServers: list[McpServerStatus]

1313```

1314 

1315### `McpServerStatus`

1316 

1317[`McpStatusResponse`](#mcp-status-response)에 포함된 연결된 MCP 서버의 상태입니다.

1318 

1319```python theme={null}

1320class McpServerStatus(TypedDict):

1321 name: str

1322 status: McpServerConnectionStatus # "connected" | "failed" | "needs-auth" | "pending" | "disabled"

1323 serverInfo: NotRequired[McpServerInfo]

1324 error: NotRequired[str]

1325 config: NotRequired[McpServerStatusConfig]

1326 scope: NotRequired[str]

1327 tools: NotRequired[list[McpToolInfo]]

1328```

1329 

1330| 필드 | 타입 | 설명 |

1331| :----------- | :---------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- |

1332| `name` | `str` | 서버 이름 |

1333| `status` | `str` | `"connected"`, `"failed"`, `"needs-auth"`, `"pending"` 또는 `"disabled"` 중 하나 |

1334| `serverInfo` | `dict` (선택사항) | 서버 이름 및 버전 (`{"name": str, "version": str}`) |

1335| `error` | `str` (선택사항) | 서버가 연결에 실패한 경우 오류 메시지 |

1336| `config` | [`McpServerStatusConfig`](#mcp-server-status-config) (선택사항) | 서버 구성. [`McpServerConfig`](#mcp-server-config)와 동일한 형태 (stdio, SSE, HTTP 또는 SDK), 더하기 claude.ai를 통해 연결된 서버를 위한 `claudeai-proxy` 변형 |

1337| `scope` | `str` (선택사항) | 구성 범위 |

1338| `tools` | `list` (선택사항) | 이 서버가 제공하는 도구, 각각 `name`, `description` 및 `annotations` 필드 포함 |

1339 

1340### `SdkPluginConfig`

1341 

1342SDK에서 플러그인을 로드하기 위한 구성입니다.

1343 

1344```python theme={null}

1345class SdkPluginConfig(TypedDict):

1346 type: Literal["local"]

1347 path: str

1348```

1349 

1350| 필드 | 타입 | 설명 |

1351| :----- | :----------------- | :--------------------------------- |

1352| `type` | `Literal["local"]` | `"local"`이어야 합니다 (현재 로컬 플러그인만 지원됨) |

1353| `path` | `str` | 플러그인 디렉토리의 절대 또는 상대 경로 |

1354 

1355**예제:**

1356 

1357```python theme={null}

1358plugins = [

1359 {"type": "local", "path": "./my-plugin"},

1360 {"type": "local", "path": "/absolute/path/to/plugin"},

1361]

1362```

1363 

1364플러그인 생성 및 사용에 대한 완전한 정보는 [플러그인](/ko/agent-sdk/plugins)을 참조하십시오.

1365 

1366## 메시지 타입

1367 

1368### `Message`

1369 

1370모든 가능한 메시지의 합집합 타입입니다.

1371 

1372```python theme={null}

1373Message = (

1374 UserMessage

1375 | AssistantMessage

1376 | SystemMessage

1377 | ResultMessage

1378 | StreamEvent

1379 | RateLimitEvent

1380)

1381```

1382 

1383### `UserMessage`

1384 

1385사용자 입력 메시지입니다.

1386 

1387```python theme={null}

1388@dataclass

1389class UserMessage:

1390 content: str | list[ContentBlock]

1391 uuid: str | None = None

1392 parent_tool_use_id: str | None = None

1393 tool_use_result: dict[str, Any] | None = None

1394```

1395 

1396| 필드 | 타입 | 설명 |

1397| :------------------- | :-------------------------- | :--------------------------- |

1398| `content` | `str \| list[ContentBlock]` | 텍스트 또는 콘텐츠 블록으로서의 메시지 콘텐츠 |

1399| `uuid` | `str \| None` | 고유 메시지 식별자 |

1400| `parent_tool_use_id` | `str \| None` | 이 메시지가 도구 결과 응답인 경우 도구 사용 ID |

1401| `tool_use_result` | `dict[str, Any] \| None` | 해당하는 경우 도구 결과 데이터 |

1402 

1403### `AssistantMessage`

1404 

1405콘텐츠 블록이 있는 어시스턴트 응답 메시지입니다.

1406 

1407```python theme={null}

1408@dataclass

1409class AssistantMessage:

1410 content: list[ContentBlock]

1411 model: str

1412 parent_tool_use_id: str | None = None

1413 error: AssistantMessageError | None = None

1414 usage: dict[str, Any] | None = None

1415 message_id: str | None = None

1416```

1417 

1418| 필드 | 타입 | 설명 |

1419| :------------------- | :------------------------------------------------------------- | :------------------------------------------------------------ |

1420| `content` | `list[ContentBlock]` | 응답의 콘텐츠 블록 목록 |

1421| `model` | `str` | 응답을 생성한 모델 |

1422| `parent_tool_use_id` | `str \| None` | 이것이 중첩된 응답인 경우 도구 사용 ID |

1423| `error` | [`AssistantMessageError`](#assistant-message-error) ` \| None` | 응답이 오류를 만난 경우 오류 타입 |

1424| `usage` | `dict[str, Any] \| None` | 메시지별 토큰 사용량 ([`ResultMessage.usage`](#result-message)와 동일한 키) |

1425| `message_id` | `str \| None` | API 메시지 ID. 한 턴의 여러 메시지는 동일한 ID를 공유합니다 |

1426 

1427### `AssistantMessageError`

1428 

1429어시스턴트 메시지의 가능한 오류 타입입니다.

1430 

1431```python theme={null}

1432AssistantMessageError = Literal[

1433 "authentication_failed",

1434 "billing_error",

1435 "rate_limit",

1436 "invalid_request",

1437 "server_error",

1438 "max_output_tokens",

1439 "unknown",

1440]

1441```

1442 

1443### `SystemMessage`

1444 

1445메타데이터가 있는 시스템 메시지입니다.

1446 

1447```python theme={null}

1448@dataclass

1449class SystemMessage:

1450 subtype: str

1451 data: dict[str, Any]

1452```

1453 

1454### `ResultMessage`

1455 

1456비용 및 사용량 정보가 있는 최종 결과 메시지입니다.

1457 

1458```python theme={null}

1459@dataclass

1460class ResultMessage:

1461 subtype: str

1462 duration_ms: int

1463 duration_api_ms: int

1464 is_error: bool

1465 num_turns: int

1466 session_id: str

1467 total_cost_usd: float | None = None

1468 usage: dict[str, Any] | None = None

1469 result: str | None = None

1470 stop_reason: str | None = None

1471 structured_output: Any = None

1472 model_usage: dict[str, Any] | None = None

1473```

1474 

1475`usage` dict는 존재할 때 다음 키를 포함합니다.

1476 

1477| 키 | 타입 | 설명 |

1478| ----------------------------- | ----- | ----------------------- |

1479| `input_tokens` | `int` | 소비된 총 입력 토큰. |

1480| `output_tokens` | `int` | 생성된 총 출력 토큰. |

1481| `cache_creation_input_tokens` | `int` | 새 캐시 항목을 생성하는 데 사용된 토큰. |

1482| `cache_read_input_tokens` | `int` | 기존 캐시 항목에서 읽은 토큰. |

1483 

1484`model_usage` dict는 모델 이름을 모델별 사용량에 매핑합니다. 내부 dict 키는 camelCase를 사용합니다. 기본 CLI 프로세스에서 수정되지 않은 상태로 전달되므로 TypeScript [`ModelUsage`](/ko/agent-sdk/typescript#model-usage) 타입과 일치합니다.

1485 

1486| 키 | 타입 | 설명 |

1487| -------------------------- | ------- | --------------------------------------------------------------------------------------- |

1488| `inputTokens` | `int` | 이 모델의 입력 토큰. |

1489| `outputTokens` | `int` | 이 모델의 출력 토큰. |

1490| `cacheReadInputTokens` | `int` | 이 모델의 캐시 읽기 토큰. |

1491| `cacheCreationInputTokens` | `int` | 이 모델의 캐시 생성 토큰. |

1492| `webSearchRequests` | `int` | 이 모델이 수행한 웹 검색 요청. |

1493| `costUSD` | `float` | 이 모델의 추정 비용 (USD), 클라이언트 측 계산. 청구 주의 사항은 [비용 및 사용량 추적](/ko/agent-sdk/cost-tracking) 참조. |

1494| `contextWindow` | `int` | 이 모델의 컨텍스트 윈도우 크기. |

1495| `maxOutputTokens` | `int` | 이 모델의 최대 출력 토큰 제한. |

1496 

1497### `StreamEvent`

1498 

1499스트리밍 중 부분 메시지 업데이트를 위한 스트림 이벤트입니다. `ClaudeAgentOptions`에서 `include_partial_messages=True`일 때만 수신됩니다. `from claude_agent_sdk.types import StreamEvent`를 통해 가져옵니다.

1500 

1501```python theme={null}

1502@dataclass

1503class StreamEvent:

1504 uuid: str

1505 session_id: str

1506 event: dict[str, Any] # The raw Claude API stream event

1507 parent_tool_use_id: str | None = None

1508```

1509 

1510| 필드 | 타입 | 설명 |

1511| :------------------- | :--------------- | :------------------------------- |

1512| `uuid` | `str` | 이 이벤트의 고유 식별자 |

1513| `session_id` | `str` | 세션 식별자 |

1514| `event` | `dict[str, Any]` | 원본 Claude API 스트림 이벤트 데이터 |

1515| `parent_tool_use_id` | `str \| None` | 이 이벤트가 서브에이전트에서 온 경우 부모 도구 사용 ID |

1516 

1517### `RateLimitEvent`

1518 

1519속도 제한 상태가 변경될 때 발생합니다 (예: `"allowed"`에서 `"allowed_warning"`으로). 이를 사용하여 사용자에게 하드 제한에 도달하기 전에 경고하거나, 상태가 `"rejected"`일 때 백오프합니다.

1520 

1521```python theme={null}

1522@dataclass

1523class RateLimitEvent:

1524 rate_limit_info: RateLimitInfo

1525 uuid: str

1526 session_id: str

1527```

1528 

1529| 필드 | 타입 | 설명 |

1530| :---------------- | :---------------------------------- | :---------- |

1531| `rate_limit_info` | [`RateLimitInfo`](#rate-limit-info) | 현재 속도 제한 상태 |

1532| `uuid` | `str` | 고유 이벤트 식별자 |

1533| `session_id` | `str` | 세션 식별자 |

1534 

1535### `RateLimitInfo`

1536 

1537[`RateLimitEvent`](#rate-limit-event)에 의해 전달되는 속도 제한 상태입니다.

1538 

1539```python theme={null}

1540RateLimitStatus = Literal["allowed", "allowed_warning", "rejected"]

1541RateLimitType = Literal[

1542 "five_hour", "seven_day", "seven_day_opus", "seven_day_sonnet", "overage"

1543]

1544 

1545 

1546@dataclass

1547class RateLimitInfo:

1548 status: RateLimitStatus

1549 resets_at: int | None = None

1550 rate_limit_type: RateLimitType | None = None

1551 utilization: float | None = None

1552 overage_status: RateLimitStatus | None = None

1553 overage_resets_at: int | None = None

1554 overage_disabled_reason: str | None = None

1555 raw: dict[str, Any] = field(default_factory=dict)

1556```

1557 

1558| 필드 | 타입 | 설명 |

1559| :------------------------ | :------------------------ | :------------------------------------------------------------------------- |

1560| `status` | `RateLimitStatus` | 현재 상태. `"allowed_warning"`은 제한에 접근 중을 의미합니다. `"rejected"`는 제한에 도달했음을 의미합니다 |

1561| `resets_at` | `int \| None` | 속도 제한 윈도우가 재설정되는 Unix 타임스탬프 |

1562| `rate_limit_type` | `RateLimitType \| None` | 어느 속도 제한 윈도우가 적용되는지 |

1563| `utilization` | `float \| None` | 소비된 속도 제한의 분수 (0.0 \~ 1.0) |

1564| `overage_status` | `RateLimitStatus \| None` | 해당하는 경우 종량제 초과 사용 상태 |

1565| `overage_resets_at` | `int \| None` | 초과 사용 윈도우가 재설정되는 Unix 타임스탬프 |

1566| `overage_disabled_reason` | `str \| None` | 상태가 `"rejected"`인 경우 초과 사용을 사용할 수 없는 이유 |

1567| `raw` | `dict[str, Any]` | 위에서 모델링되지 않은 필드를 포함한 CLI의 전체 원본 dict |

1568 

1569### `TaskStartedMessage`

1570 

1571백그라운드 작업이 시작될 때 발생합니다. 백그라운드 작업은 주 턴 외부에서 추적되는 모든 것입니다: 백그라운드 Bash 명령, [Monitor](#monitor) 감시, Agent 도구를 통해 생성된 서브에이전트 또는 원격 에이전트. `task_type` 필드가 어느 것인지 알려줍니다. 이 명명은 `Task`-to-`Agent` 도구 이름 변경과 무관합니다.

1572 

1573```python theme={null}

1574@dataclass

1575class TaskStartedMessage(SystemMessage):

1576 task_id: str

1577 description: str

1578 uuid: str

1579 session_id: str

1580 tool_use_id: str | None = None

1581 task_type: str | None = None

1582```

1583 

1584| 필드 | 타입 | 설명 |

1585| :------------ | :------------ | :-------------------------------------------------------------------------------------------- |

1586| `task_id` | `str` | 작업의 고유 식별자 |

1587| `description` | `str` | 작업의 설명 |

1588| `uuid` | `str` | 고유 메시지 식별자 |

1589| `session_id` | `str` | 세션 식별자 |

1590| `tool_use_id` | `str \| None` | 관련 도구 사용 ID |

1591| `task_type` | `str \| None` | 백그라운드 작업의 종류: 백그라운드 Bash 및 Monitor 감시의 경우 `"local_bash"`, `"local_agent"` 또는 `"remote_agent"` |

1592 

1593### `TaskUsage`

1594 

1595백그라운드 작업의 토큰 및 타이밍 데이터입니다.

1596 

1597```python theme={null}

1598class TaskUsage(TypedDict):

1599 total_tokens: int

1600 tool_uses: int

1601 duration_ms: int

1602```

1603 

1604### `TaskProgressMessage`

1605 

1606실행 중인 백그라운드 작업에 대한 진행 상황 업데이트로 주기적으로 발생합니다.

1607 

1608```python theme={null}

1609@dataclass

1610class TaskProgressMessage(SystemMessage):

1611 task_id: str

1612 description: str

1613 usage: TaskUsage

1614 uuid: str

1615 session_id: str

1616 tool_use_id: str | None = None

1617 last_tool_name: str | None = None

1618```

1619 

1620| 필드 | 타입 | 설명 |

1621| :--------------- | :------------ | :------------------- |

1622| `task_id` | `str` | 작업의 고유 식별자 |

1623| `description` | `str` | 현재 상태 설명 |

1624| `usage` | `TaskUsage` | 지금까지 이 작업의 토큰 사용량 |

1625| `uuid` | `str` | 고유 메시지 식별자 |

1626| `session_id` | `str` | 세션 식별자 |

1627| `tool_use_id` | `str \| None` | 관련 도구 사용 ID |

1628| `last_tool_name` | `str \| None` | 작업이 마지막으로 사용한 도구의 이름 |

1629 

1630### `TaskNotificationMessage`

1631 

1632백그라운드 작업이 완료, 실패 또는 중지될 때 발생합니다. 백그라운드 작업에는 `run_in_background` Bash 명령, Monitor 감시 및 백그라운드 서브에이전트가 포함됩니다.

1633 

1634```python theme={null}

1635@dataclass

1636class TaskNotificationMessage(SystemMessage):

1637 task_id: str

1638 status: TaskNotificationStatus # "completed" | "failed" | "stopped"

1639 output_file: str

1640 summary: str

1641 uuid: str

1642 session_id: str

1643 tool_use_id: str | None = None

1644 usage: TaskUsage | None = None

1645```

1646 

1647| 필드 | 타입 | 설명 |

1648| :------------ | :----------------------- | :-------------------------------------------- |

1649| `task_id` | `str` | 작업의 고유 식별자 |

1650| `status` | `TaskNotificationStatus` | `"completed"`, `"failed"` 또는 `"stopped"` 중 하나 |

1651| `output_file` | `str` | 작업 출력 파일의 경로 |

1652| `summary` | `str` | 작업 결과의 요약 |

1653| `uuid` | `str` | 고유 메시지 식별자 |

1654| `session_id` | `str` | 세션 식별자 |

1655| `tool_use_id` | `str \| None` | 관련 도구 사용 ID |

1656| `usage` | `TaskUsage \| None` | 작업의 최종 토큰 사용량 |

1657 

1658## 콘텐츠 블록 타입

1659 

1660### `ContentBlock`

1661 

1662모든 콘텐츠 블록의 합집합 타입입니다.

1663 

1664```python theme={null}

1665ContentBlock = TextBlock | ThinkingBlock | ToolUseBlock | ToolResultBlock

1666```

1667 

1668### `TextBlock`

1669 

1670텍스트 콘텐츠 블록입니다.

1671 

1672```python theme={null}

1673@dataclass

1674class TextBlock:

1675 text: str

1676```

1677 

1678### `ThinkingBlock`

1679 

1680생각 콘텐츠 블록입니다 (생각 기능이 있는 모델용).

1681 

1682```python theme={null}

1683@dataclass

1684class ThinkingBlock:

1685 thinking: str

1686 signature: str

1687```

1688 

1689### `ToolUseBlock`

1690 

1691도구 사용 요청 블록입니다.

1692 

1693```python theme={null}

1694@dataclass

1695class ToolUseBlock:

1696 id: str

1697 name: str

1698 input: dict[str, Any]

1699```

1700 

1701### `ToolResultBlock`

1702 

1703도구 실행 결과 블록입니다.

1704 

1705```python theme={null}

1706@dataclass

1707class ToolResultBlock:

1708 tool_use_id: str

1709 content: str | list[dict[str, Any]] | None = None

1710 is_error: bool | None = None

1711```

1712 

1713## 오류 타입

1714 

1715### `ClaudeSDKError`

1716 

1717모든 SDK 오류의 기본 예외 클래스입니다.

1718 

1719```python theme={null}

1720class ClaudeSDKError(Exception):

1721 """Base error for Claude SDK."""

1722```

1723 

1724### `CLINotFoundError`

1725 

1726Claude Code CLI가 설치되지 않았거나 찾을 수 없을 때 발생합니다.

1727 

1728```python theme={null}

1729class CLINotFoundError(CLIConnectionError):

1730 def __init__(

1731 self, message: str = "Claude Code not found", cli_path: str | None = None

1732 ):

1733 """

1734 Args:

1735 message: Error message (default: "Claude Code not found")

1736 cli_path: Optional path to the CLI that was not found

1737 """

1738```

1739 

1740### `CLIConnectionError`

1741 

1742Claude Code 연결이 실패할 때 발생합니다.

1743 

1744```python theme={null}

1745class CLIConnectionError(ClaudeSDKError):

1746 """Failed to connect to Claude Code."""

1747```

1748 

1749### `ProcessError`

1750 

1751Claude Code 프로세스가 실패할 때 발생합니다.

1752 

1753```python theme={null}

1754class ProcessError(ClaudeSDKError):

1755 def __init__(

1756 self, message: str, exit_code: int | None = None, stderr: str | None = None

1757 ):

1758 self.exit_code = exit_code

1759 self.stderr = stderr

1760```

1761 

1762### `CLIJSONDecodeError`

1763 

1764JSON 구문 분석이 실패할 때 발생합니다.

1765 

1766```python theme={null}

1767class CLIJSONDecodeError(ClaudeSDKError):

1768 def __init__(self, line: str, original_error: Exception):

1769 """

1770 Args:

1771 line: The line that failed to parse

1772 original_error: The original JSON decode exception

1773 """

1774 self.line = line

1775 self.original_error = original_error

1776```

1777 

1778## Hook 타입

1779 

1780hooks 사용에 대한 포괄적인 가이드, 예제 및 일반적인 패턴은 [Hooks 가이드](/ko/agent-sdk/hooks)를 참조하십시오.

1781 

1782### `HookEvent`

1783 

1784지원되는 hook 이벤트 타입입니다.

1785 

1786```python theme={null}

1787HookEvent = Literal[

1788 "PreToolUse", # Called before tool execution

1789 "PostToolUse", # Called after tool execution

1790 "PostToolUseFailure", # Called when a tool execution fails

1791 "UserPromptSubmit", # Called when user submits a prompt

1792 "Stop", # Called when stopping execution

1793 "SubagentStop", # Called when a subagent stops

1794 "PreCompact", # Called before message compaction

1795 "Notification", # Called for notification events

1796 "SubagentStart", # Called when a subagent starts

1797 "PermissionRequest", # Called when a permission decision is needed

1798]

1799```

1800 

1801<Note>

1802 TypeScript SDK는 Python에서 아직 사용할 수 없는 추가 hook 이벤트를 지원합니다: `SessionStart`, `SessionEnd`, `Setup`, `TeammateIdle`, `TaskCompleted`, `ConfigChange`, `WorktreeCreate`, `WorktreeRemove` 및 `PostToolBatch`.

1803</Note>

1804 

1805### `HookCallback`

1806 

1807hook 콜백 함수의 타입 정의입니다.

1808 

1809```python theme={null}

1810HookCallback = Callable[[HookInput, str | None, HookContext], Awaitable[HookJSONOutput]]

1811```

1812 

1813매개변수:

1814 

1815* `input`: `hook_event_name`을 기반으로 한 판별된 합집합이 있는 강타입 hook 입력 ([`HookInput`](#hook-input) 참조)

1816* `tool_use_id`: 선택적 도구 사용 식별자 (도구 관련 hooks의 경우)

1817* `context`: 추가 정보가 있는 hook 컨텍스트

1818 

1819다음을 포함할 수 있는 [`HookJSONOutput`](#hook-json-output)을 반환합니다.

1820 

1821* `decision`: 작업을 차단하려면 `"block"`

1822* `systemMessage`: 기록에 추가할 시스템 메시지

1823* `hookSpecificOutput`: hook 특정 출력 데이터

1824 

1825### `HookContext`

1826 

1827hook 콜백에 전달되는 컨텍스트 정보입니다.

1828 

1829```python theme={null}

1830class HookContext(TypedDict):

1831 signal: Any | None # Future: abort signal support

1832```

1833 

1834### `HookMatcher`

1835 

1836특정 이벤트 또는 도구에 hooks를 일치시키기 위한 구성입니다.

1837 

1838```python theme={null}

1839@dataclass

1840class HookMatcher:

1841 matcher: str | None = (

1842 None # Tool name or pattern to match (e.g., "Bash", "Write|Edit")

1843 )

1844 hooks: list[HookCallback] = field(

1845 default_factory=list

1846 ) # List of callbacks to execute

1847 timeout: float | None = (

1848 None # Timeout in seconds for all hooks in this matcher (default: 60)

1849 )

1850```

1851 

1852### `HookInput`

1853 

1854모든 hook 입력 타입의 합집합 타입입니다. 실제 타입은 `hook_event_name` 필드에 따라 달라집니다.

1855 

1856```python theme={null}

1857HookInput = (

1858 PreToolUseHookInput

1859 | PostToolUseHookInput

1860 | PostToolUseFailureHookInput

1861 | UserPromptSubmitHookInput

1862 | StopHookInput

1863 | SubagentStopHookInput

1864 | PreCompactHookInput

1865 | NotificationHookInput

1866 | SubagentStartHookInput

1867 | PermissionRequestHookInput

1868)

1869```

1870 

1871### `BaseHookInput`

1872 

1873모든 hook 입력 타입에 존재하는 기본 필드입니다.

1874 

1875```python theme={null}

1876class BaseHookInput(TypedDict):

1877 session_id: str

1878 transcript_path: str

1879 cwd: str

1880 permission_mode: NotRequired[str]

1881```

1882 

1883| 필드 | 타입 | 설명 |

1884| :---------------- | :----------- | :----------- |

1885| `session_id` | `str` | 현재 세션 식별자 |

1886| `transcript_path` | `str` | 세션 기록 파일의 경로 |

1887| `cwd` | `str` | 현재 작업 디렉토리 |

1888| `permission_mode` | `str` (선택사항) | 현재 권한 모드 |

1889 

1890### `PreToolUseHookInput`

1891 

1892`PreToolUse` hook 이벤트의 입력 데이터입니다.

1893 

1894```python theme={null}

1895class PreToolUseHookInput(BaseHookInput):

1896 hook_event_name: Literal["PreToolUse"]

1897 tool_name: str

1898 tool_input: dict[str, Any]

1899 tool_use_id: str

1900 agent_id: NotRequired[str]

1901 agent_type: NotRequired[str]

1902```

1903 

1904| 필드 | 타입 | 설명 |

1905| :---------------- | :---------------------- | :------------------------------------ |

1906| `hook_event_name` | `Literal["PreToolUse"]` | 항상 "PreToolUse" |

1907| `tool_name` | `str` | 실행될 도구의 이름 |

1908| `tool_input` | `dict[str, Any]` | 도구의 입력 매개변수 |

1909| `tool_use_id` | `str` | 이 도구 사용의 고유 식별자 |

1910| `agent_id` | `str` (선택사항) | 서브에이전트 식별자, hook이 서브에이전트 내에서 발생할 때 존재 |

1911| `agent_type` | `str` (선택사항) | 서브에이전트 타입, hook이 서브에이전트 내에서 발생할 때 존재 |

1912 

1913### `PostToolUseHookInput`

1914 

1915`PostToolUse` hook 이벤트의 입력 데이터입니다.

1916 

1917```python theme={null}

1918class PostToolUseHookInput(BaseHookInput):

1919 hook_event_name: Literal["PostToolUse"]

1920 tool_name: str

1921 tool_input: dict[str, Any]

1922 tool_response: Any

1923 tool_use_id: str

1924 agent_id: NotRequired[str]

1925 agent_type: NotRequired[str]

1926```

1927 

1928| 필드 | 타입 | 설명 |

1929| :---------------- | :----------------------- | :------------------------------------ |

1930| `hook_event_name` | `Literal["PostToolUse"]` | 항상 "PostToolUse" |

1931| `tool_name` | `str` | 실행된 도구의 이름 |

1932| `tool_input` | `dict[str, Any]` | 사용된 입력 매개변수 |

1933| `tool_response` | `Any` | 도구 실행의 응답 |

1934| `tool_use_id` | `str` | 이 도구 사용의 고유 식별자 |

1935| `agent_id` | `str` (선택사항) | 서브에이전트 식별자, hook이 서브에이전트 내에서 발생할 때 존재 |

1936| `agent_type` | `str` (선택사항) | 서브에이전트 타입, hook이 서브에이전트 내에서 발생할 때 존재 |

1937 

1938### `PostToolUseFailureHookInput`

1939 

1940`PostToolUseFailure` hook 이벤트의 입력 데이터입니다. 도구 실행이 실패할 때 호출됩니다.

1941 

1942```python theme={null}

1943class PostToolUseFailureHookInput(BaseHookInput):

1944 hook_event_name: Literal["PostToolUseFailure"]

1945 tool_name: str

1946 tool_input: dict[str, Any]

1947 tool_use_id: str

1948 error: str

1949 is_interrupt: NotRequired[bool]

1950 agent_id: NotRequired[str]

1951 agent_type: NotRequired[str]

1952```

1953 

1954| 필드 | 타입 | 설명 |

1955| :---------------- | :------------------------------ | :------------------------------------ |

1956| `hook_event_name` | `Literal["PostToolUseFailure"]` | 항상 "PostToolUseFailure" |

1957| `tool_name` | `str` | 실패한 도구의 이름 |

1958| `tool_input` | `dict[str, Any]` | 사용된 입력 매개변수 |

1959| `tool_use_id` | `str` | 이 도구 사용의 고유 식별자 |

1960| `error` | `str` | 실패한 실행의 오류 메시지 |

1961| `is_interrupt` | `bool` (선택사항) | 실패가 중단으로 인한 것인지 여부 |

1962| `agent_id` | `str` (선택사항) | 서브에이전트 식별자, hook이 서브에이전트 내에서 발생할 때 존재 |

1963| `agent_type` | `str` (선택사항) | 서브에이전트 타입, hook이 서브에이전트 내에서 발생할 때 존재 |

1964 

1965### `UserPromptSubmitHookInput`

1966 

1967`UserPromptSubmit` hook 이벤트의 입력 데이터입니다.

1968 

1969```python theme={null}

1970class UserPromptSubmitHookInput(BaseHookInput):

1971 hook_event_name: Literal["UserPromptSubmit"]

1972 prompt: str

1973```

1974 

1975| 필드 | 타입 | 설명 |

1976| :---------------- | :---------------------------- | :-------------------- |

1977| `hook_event_name` | `Literal["UserPromptSubmit"]` | 항상 "UserPromptSubmit" |

1978| `prompt` | `str` | 사용자가 제출한 프롬프트 |

1979 

1980### `StopHookInput`

1981 

1982`Stop` hook 이벤트의 입력 데이터입니다.

1983 

1984```python theme={null}

1985class StopHookInput(BaseHookInput):

1986 hook_event_name: Literal["Stop"]

1987 stop_hook_active: bool

1988```

1989 

1990| 필드 | 타입 | 설명 |

1991| :----------------- | :---------------- | :---------------------- |

1992| `hook_event_name` | `Literal["Stop"]` | 항상 "Stop" |

1993| `stop_hook_active` | `bool` | stop hook이 활성화되어 있는지 여부 |

1994 

1995### `SubagentStopHookInput`

1996 

1997`SubagentStop` hook 이벤트의 입력 데이터입니다.

1998 

1999```python theme={null}

2000class SubagentStopHookInput(BaseHookInput):

2001 hook_event_name: Literal["SubagentStop"]

2002 stop_hook_active: bool

2003 agent_id: str

2004 agent_transcript_path: str

2005 agent_type: str

2006```

2007 

2008| 필드 | 타입 | 설명 |

2009| :---------------------- | :------------------------ | :---------------------- |

2010| `hook_event_name` | `Literal["SubagentStop"]` | 항상 "SubagentStop" |

2011| `stop_hook_active` | `bool` | stop hook이 활성화되어 있는지 여부 |

2012| `agent_id` | `str` | 서브에이전트의 고유 식별자 |

2013| `agent_transcript_path` | `str` | 서브에이전트의 기록 파일 경로 |

2014| `agent_type` | `str` | 서브에이전트의 타입 |

2015 

2016### `PreCompactHookInput`

2017 

2018`PreCompact` hook 이벤트의 입력 데이터입니다.

2019 

2020```python theme={null}

2021class PreCompactHookInput(BaseHookInput):

2022 hook_event_name: Literal["PreCompact"]

2023 trigger: Literal["manual", "auto"]

2024 custom_instructions: str | None

2025```

2026 

2027| 필드 | 타입 | 설명 |

2028| :-------------------- | :-------------------------- | :--------------- |

2029| `hook_event_name` | `Literal["PreCompact"]` | 항상 "PreCompact" |

2030| `trigger` | `Literal["manual", "auto"]` | 압축을 트리거한 것 |

2031| `custom_instructions` | `str \| None` | 압축을 위한 사용자 정의 지침 |

2032 

2033### `NotificationHookInput`

2034 

2035`Notification` hook 이벤트의 입력 데이터입니다.

2036 

2037```python theme={null}

2038class NotificationHookInput(BaseHookInput):

2039 hook_event_name: Literal["Notification"]

2040 message: str

2041 title: NotRequired[str]

2042 notification_type: str

2043```

2044 

2045| 필드 | 타입 | 설명 |

2046| :------------------ | :------------------------ | :---------------- |

2047| `hook_event_name` | `Literal["Notification"]` | 항상 "Notification" |

2048| `message` | `str` | 알림 메시지 콘텐츠 |

2049| `title` | `str` (선택사항) | 알림 제목 |

2050| `notification_type` | `str` | 알림의 타입 |

2051 

2052### `SubagentStartHookInput`

2053 

2054`SubagentStart` hook 이벤트의 입력 데이터입니다.

2055 

2056```python theme={null}

2057class SubagentStartHookInput(BaseHookInput):

2058 hook_event_name: Literal["SubagentStart"]

2059 agent_id: str

2060 agent_type: str

2061```

2062 

2063| 필드 | 타입 | 설명 |

2064| :---------------- | :------------------------- | :----------------- |

2065| `hook_event_name` | `Literal["SubagentStart"]` | 항상 "SubagentStart" |

2066| `agent_id` | `str` | 서브에이전트의 고유 식별자 |

2067| `agent_type` | `str` | 서브에이전트의 타입 |

2068 

2069### `PermissionRequestHookInput`

2070 

2071`PermissionRequest` hook 이벤트의 입력 데이터입니다. hooks가 프로그래밍 방식으로 권한 결정을 처리할 수 있습니다.

2072 

2073```python theme={null}

2074class PermissionRequestHookInput(BaseHookInput):

2075 hook_event_name: Literal["PermissionRequest"]

2076 tool_name: str

2077 tool_input: dict[str, Any]

2078 permission_suggestions: NotRequired[list[Any]]

2079```

2080 

2081| 필드 | 타입 | 설명 |

2082| :----------------------- | :----------------------------- | :--------------------- |

2083| `hook_event_name` | `Literal["PermissionRequest"]` | 항상 "PermissionRequest" |

2084| `tool_name` | `str` | 권한을 요청하는 도구의 이름 |

2085| `tool_input` | `dict[str, Any]` | 도구의 입력 매개변수 |

2086| `permission_suggestions` | `list[Any]` (선택사항) | CLI의 제안된 권한 업데이트 |

2087 

2088### `HookJSONOutput`

2089 

2090hook 콜백 반환 값의 합집합 타입입니다.

2091 

2092```python theme={null}

2093HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput

2094```

2095 

2096#### `SyncHookJSONOutput`

2097 

2098제어 및 결정 필드가 있는 동기식 hook 출력입니다.

2099 

2100```python theme={null}

2101class SyncHookJSONOutput(TypedDict):

2102 # Control fields

2103 continue_: NotRequired[bool] # Whether to proceed (default: True)

2104 suppressOutput: NotRequired[bool] # Hide stdout from transcript

2105 stopReason: NotRequired[str] # Message when continue is False

2106 

2107 # Decision fields

2108 decision: NotRequired[Literal["block"]]

2109 systemMessage: NotRequired[str] # Warning message for user

2110 reason: NotRequired[str] # Feedback for Claude

2111 

2112 # Hook-specific output

2113 hookSpecificOutput: NotRequired[HookSpecificOutput]

2114```

2115 

2116<Note>

2117 Python 코드에서 `continue_` (언더스코어 포함)를 사용합니다. CLI로 전송할 때 자동으로 `continue`로 변환됩니다.

2118</Note>

2119 

2120#### `HookSpecificOutput`

2121 

2122hook 이벤트 이름과 이벤트 특정 필드를 포함하는 `TypedDict`입니다. 형태는 `hookEventName` 값에 따라 달라집니다. hook 이벤트별 사용 가능한 필드에 대한 전체 세부 정보는 [hooks로 실행 제어](/ko/agent-sdk/hooks#outputs)를 참조하십시오.

2123 

2124이벤트 특정 출력 타입의 판별된 합집합입니다. `hookEventName` 필드가 어느 필드가 유효한지 결정합니다.

2125 

2126```python theme={null}

2127class PreToolUseHookSpecificOutput(TypedDict):

2128 hookEventName: Literal["PreToolUse"]

2129 permissionDecision: NotRequired[Literal["allow", "deny", "ask"]]

2130 permissionDecisionReason: NotRequired[str]

2131 updatedInput: NotRequired[dict[str, Any]]

2132 additionalContext: NotRequired[str]

2133 

2134 

2135class PostToolUseHookSpecificOutput(TypedDict):

2136 hookEventName: Literal["PostToolUse"]

2137 additionalContext: NotRequired[str]

2138 updatedMCPToolOutput: NotRequired[Any]

2139 

2140 

2141class PostToolUseFailureHookSpecificOutput(TypedDict):

2142 hookEventName: Literal["PostToolUseFailure"]

2143 additionalContext: NotRequired[str]

2144 

2145 

2146class UserPromptSubmitHookSpecificOutput(TypedDict):

2147 hookEventName: Literal["UserPromptSubmit"]

2148 additionalContext: NotRequired[str]

2149 

2150 

2151class NotificationHookSpecificOutput(TypedDict):

2152 hookEventName: Literal["Notification"]

2153 additionalContext: NotRequired[str]

2154 

2155 

2156class SubagentStartHookSpecificOutput(TypedDict):

2157 hookEventName: Literal["SubagentStart"]

2158 additionalContext: NotRequired[str]

2159 

2160 

2161class PermissionRequestHookSpecificOutput(TypedDict):

2162 hookEventName: Literal["PermissionRequest"]

2163 decision: dict[str, Any]

2164 

2165 

2166HookSpecificOutput = (

2167 PreToolUseHookSpecificOutput

2168 | PostToolUseHookSpecificOutput

2169 | PostToolUseFailureHookSpecificOutput

2170 | UserPromptSubmitHookSpecificOutput

2171 | NotificationHookSpecificOutput

2172 | SubagentStartHookSpecificOutput

2173 | PermissionRequestHookSpecificOutput

2174)

2175```

2176 

2177#### `AsyncHookJSONOutput`

2178 

2179hook 실행을 연기하는 비동기 hook 출력입니다.

2180 

2181```python theme={null}

2182class AsyncHookJSONOutput(TypedDict):

2183 async_: Literal[True] # Set to True to defer execution

2184 asyncTimeout: NotRequired[int] # Timeout in milliseconds

2185```

2186 

2187<Note>

2188 Python 코드에서 `async_` (언더스코어 포함)를 사용합니다. CLI로 전송할 때 자동으로 `async`로 변환됩니다.

2189</Note>

2190 

2191### Hook 사용 예제

2192 

2193이 예제는 두 개의 hooks를 등록합니다: `rm -rf /`와 같은 위험한 bash 명령을 차단하는 하나, 감사를 위해 모든 도구 사용을 기록하는 다른 하나. 보안 hook은 `matcher`를 통해 Bash 명령에서만 실행되고, 로깅 hook은 모든 도구에서 실행됩니다.

2194 

2195```python theme={null}

2196from claude_agent_sdk import query, ClaudeAgentOptions, HookMatcher, HookContext

2197from typing import Any

2198 

2199 

2200async def validate_bash_command(

2201 input_data: dict[str, Any], tool_use_id: str | None, context: HookContext

2202) -> dict[str, Any]:

2203 """Validate and potentially block dangerous bash commands."""

2204 if input_data["tool_name"] == "Bash":

2205 command = input_data["tool_input"].get("command", "")

2206 if "rm -rf /" in command:

2207 return {

2208 "hookSpecificOutput": {

2209 "hookEventName": "PreToolUse",

2210 "permissionDecision": "deny",

2211 "permissionDecisionReason": "Dangerous command blocked",

2212 }

2213 }

2214 return {}

2215 

2216 

2217async def log_tool_use(

2218 input_data: dict[str, Any], tool_use_id: str | None, context: HookContext

2219) -> dict[str, Any]:

2220 """Log all tool usage for auditing."""

2221 print(f"Tool used: {input_data.get('tool_name')}")

2222 return {}

2223 

2224 

2225options = ClaudeAgentOptions(

2226 hooks={

2227 "PreToolUse": [

2228 HookMatcher(

2229 matcher="Bash", hooks=[validate_bash_command], timeout=120

2230 ), # 2 min for validation

2231 HookMatcher(

2232 hooks=[log_tool_use]

2233 ), # Applies to all tools (default 60s timeout)

2234 ],

2235 "PostToolUse": [HookMatcher(hooks=[log_tool_use])],

2236 }

2237)

2238 

2239async for message in query(prompt="Analyze this codebase", options=options):

2240 print(message)

2241```

2242 

2243## 도구 입력/출력 타입

2244 

2245모든 기본 Claude Code 도구의 입력/출력 스키마 문서입니다. Python SDK는 이들을 타입으로 내보내지 않지만, 메시지의 도구 입력 및 출력 구조를 나타냅니다.

2246 

2247### Agent

2248 

2249**도구 이름:** `Agent` (이전 `Task`, 여전히 별칭으로 허용됨)

2250 

2251**입력:**

2252 

2253```python theme={null}

2254{

2255 "description": str, # A short (3-5 word) description of the task

2256 "prompt": str, # The task for the agent to perform

2257 "subagent_type": str, # The type of specialized agent to use

2258}

2259```

2260 

2261**출력:**

2262 

2263```python theme={null}

2264{

2265 "result": str, # Final result from the subagent

2266 "usage": dict | None, # Token usage statistics

2267 "total_cost_usd": float | None, # Estimated total cost in USD

2268 "duration_ms": int | None, # Execution duration in milliseconds

2269}

2270```

2271 

2272### AskUserQuestion

2273 

2274**도구 이름:** `AskUserQuestion`

2275 

2276실행 중에 사용자에게 명확히 하는 질문을 합니다. 사용 세부 정보는 [승인 및 사용자 입력 처리](/ko/agent-sdk/user-input#handle-clarifying-questions)를 참조하십시오.

2277 

2278**입력:**

2279 

2280```python theme={null}

2281{

2282 "questions": [ # Questions to ask the user (1-4 questions)

2283 {

2284 "question": str, # The complete question to ask the user

2285 "header": str, # Very short label displayed as a chip/tag (max 12 chars)

2286 "options": [ # The available choices (2-4 options)

2287 {

2288 "label": str, # Display text for this option (1-5 words)

2289 "description": str, # Explanation of what this option means

2290 }

2291 ],

2292 "multiSelect": bool, # Set to true to allow multiple selections

2293 }

2294 ],

2295 "answers": dict | None, # User answers populated by the permission system

2296}

2297```

2298 

2299**출력:**

2300 

2301```python theme={null}

2302{

2303 "questions": [ # The questions that were asked

2304 {

2305 "question": str,

2306 "header": str,

2307 "options": [{"label": str, "description": str}],

2308 "multiSelect": bool,

2309 }

2310 ],

2311 "answers": dict[str, str], # Maps question text to answer string

2312 # Multi-select answers are comma-separated

2313}

2314```

2315 

2316### Bash

2317 

2318**도구 이름:** `Bash`

2319 

2320**입력:**

2321 

2322```python theme={null}

2323{

2324 "command": str, # The command to execute

2325 "timeout": int | None, # Optional timeout in milliseconds (max 600000)

2326 "description": str | None, # Clear, concise description (5-10 words)

2327 "run_in_background": bool | None, # Set to true to run in background

2328}

2329```

2330 

2331**출력:**

2332 

2333```python theme={null}

2334{

2335 "output": str, # Combined stdout and stderr output

2336 "exitCode": int, # Exit code of the command

2337 "killed": bool | None, # Whether command was killed due to timeout

2338 "shellId": str | None, # Shell ID for background processes

2339}

2340```

2341 

2342### Monitor

2343 

2344**도구 이름:** `Monitor`

2345 

2346백그라운드 스크립트를 실행하고 각 stdout 줄을 Claude에 이벤트로 전달하여 폴링 없이 반응할 수 있도록 합니다. Monitor는 Bash와 동일한 권한 규칙을 따릅니다. 동작 및 제공자 가용성은 [Monitor 도구 참조](/ko/tools-reference#monitor-tool)를 참조하십시오.

2347 

2348**입력:**

2349 

2350```python theme={null}

2351{

2352 "command": str, # Shell script; each stdout line is an event, exit ends the watch

2353 "description": str, # Short description shown in notifications

2354 "timeout_ms": int | None, # Kill after this deadline (default 300000, max 3600000)

2355 "persistent": bool | None, # Run for the lifetime of the session; stop with TaskStop

2356}

2357```

2358 

2359**출력:**

2360 

2361```python theme={null}

2362{

2363 "taskId": str, # ID of the background monitor task

2364 "timeoutMs": int, # Timeout deadline in milliseconds (0 when persistent)

2365 "persistent": bool | None, # True when running until TaskStop or session end

2366}

2367```

2368 

2369### Edit

2370 

2371**도구 이름:** `Edit`

2372 

2373**입력:**

2374 

2375```python theme={null}

2376{

2377 "file_path": str, # The absolute path to the file to modify

2378 "old_string": str, # The text to replace

2379 "new_string": str, # The text to replace it with

2380 "replace_all": bool | None, # Replace all occurrences (default False)

2381}

2382```

2383 

2384**출력:**

2385 

2386```python theme={null}

2387{

2388 "message": str, # Confirmation message

2389 "replacements": int, # Number of replacements made

2390 "file_path": str, # File path that was edited

2391}

2392```

2393 

2394### Read

2395 

2396**도구 이름:** `Read`

2397 

2398**입력:**

2399 

2400```python theme={null}

2401{

2402 "file_path": str, # The absolute path to the file to read

2403 "offset": int | None, # The line number to start reading from

2404 "limit": int | None, # The number of lines to read

2405}

2406```

2407 

2408**출력 (텍스트 파일):**

2409 

2410```python theme={null}

2411{

2412 "content": str, # File contents with line numbers

2413 "total_lines": int, # Total number of lines in file

2414 "lines_returned": int, # Lines actually returned

2415}

2416```

2417 

2418**출력 (이미지):**

2419 

2420```python theme={null}

2421{

2422 "image": str, # Base64 encoded image data

2423 "mime_type": str, # Image MIME type

2424 "file_size": int, # File size in bytes

2425}

2426```

2427 

2428### Write

2429 

2430**도구 이름:** `Write`

2431 

2432**입력:**

2433 

2434```python theme={null}

2435{

2436 "file_path": str, # The absolute path to the file to write

2437 "content": str, # The content to write to the file

2438}

2439```

2440 

2441**출력:**

2442 

2443```python theme={null}

2444{

2445 "message": str, # Success message

2446 "bytes_written": int, # Number of bytes written

2447 "file_path": str, # File path that was written

2448}

2449```

2450 

2451### Glob

2452 

2453**도구 이름:** `Glob`

2454 

2455**입력:**

2456 

2457```python theme={null}

2458{

2459 "pattern": str, # The glob pattern to match files against

2460 "path": str | None, # The directory to search in (defaults to cwd)

2461}

2462```

2463 

2464**출력:**

2465 

2466```python theme={null}

2467{

2468 "matches": list[str], # Array of matching file paths

2469 "count": int, # Number of matches found

2470 "search_path": str, # Search directory used

2471}

2472```

2473 

2474### Grep

2475 

2476**도구 이름:** `Grep`

2477 

2478**입력:**

2479 

2480```python theme={null}

2481{

2482 "pattern": str, # The regular expression pattern

2483 "path": str | None, # File or directory to search in

2484 "glob": str | None, # Glob pattern to filter files

2485 "type": str | None, # File type to search

2486 "output_mode": str | None, # "content", "files_with_matches", or "count"

2487 "-i": bool | None, # Case insensitive search

2488 "-n": bool | None, # Show line numbers

2489 "-B": int | None, # Lines to show before each match

2490 "-A": int | None, # Lines to show after each match

2491 "-C": int | None, # Lines to show before and after

2492 "head_limit": int | None, # Limit output to first N lines/entries

2493 "multiline": bool | None, # Enable multiline mode

2494}

2495```

2496 

2497**출력 (content 모드):**

2498 

2499```python theme={null}

2500{

2501 "matches": [

2502 {

2503 "file": str,

2504 "line_number": int | None,

2505 "line": str,

2506 "before_context": list[str] | None,

2507 "after_context": list[str] | None,

2508 }

2509 ],

2510 "total_matches": int,

2511}

2512```

2513 

2514**출력 (files\_with\_matches 모드):**

2515 

2516```python theme={null}

2517{

2518 "files": list[str], # Files containing matches

2519 "count": int, # Number of files with matches

2520}

2521```

2522 

2523### NotebookEdit

2524 

2525**도구 이름:** `NotebookEdit`

2526 

2527**입력:**

2528 

2529```python theme={null}

2530{

2531 "notebook_path": str, # Absolute path to the Jupyter notebook

2532 "cell_id": str | None, # The ID of the cell to edit

2533 "new_source": str, # The new source for the cell

2534 "cell_type": "code" | "markdown" | None, # The type of the cell

2535 "edit_mode": "replace" | "insert" | "delete" | None, # Edit operation type

2536}

2537```

2538 

2539**출력:**

2540 

2541```python theme={null}

2542{

2543 "message": str, # Success message

2544 "edit_type": "replaced" | "inserted" | "deleted", # Type of edit performed

2545 "cell_id": str | None, # Cell ID that was affected

2546 "total_cells": int, # Total cells in notebook after edit

2547}

2548```

2549 

2550### WebFetch

2551 

2552**도구 이름:** `WebFetch`

2553 

2554**입력:**

2555 

2556```python theme={null}

2557{

2558 "url": str, # The URL to fetch content from

2559 "prompt": str, # The prompt to run on the fetched content

2560}

2561```

2562 

2563**출력:**

2564 

2565```python theme={null}

2566{

2567 "response": str, # AI model's response to the prompt

2568 "url": str, # URL that was fetched

2569 "final_url": str | None, # Final URL after redirects

2570 "status_code": int | None, # HTTP status code

2571}

2572```

2573 

2574### WebSearch

2575 

2576**도구 이름:** `WebSearch`

2577 

2578**입력:**

2579 

2580```python theme={null}

2581{

2582 "query": str, # The search query to use

2583 "allowed_domains": list[str] | None, # Only include results from these domains

2584 "blocked_domains": list[str] | None, # Never include results from these domains

2585}

2586```

2587 

2588**출력:**

2589 

2590```python theme={null}

2591{

2592 "results": [{"title": str, "url": str, "snippet": str, "metadata": dict | None}],

2593 "total_results": int,

2594 "query": str,

2595}

2596```

2597 

2598### TodoWrite

2599 

2600**도구 이름:** `TodoWrite`

2601 

2602**입력:**

2603 

2604```python theme={null}

2605{

2606 "todos": [

2607 {

2608 "content": str, # The task description

2609 "status": "pending" | "in_progress" | "completed", # Task status

2610 "activeForm": str, # Active form of the description

2611 }

2612 ]

2613}

2614```

2615 

2616**출력:**

2617 

2618```python theme={null}

2619{

2620 "message": str, # Success message

2621 "stats": {"total": int, "pending": int, "in_progress": int, "completed": int},

2622}

2623```

2624 

2625### BashOutput

2626 

2627**도구 이름:** `BashOutput`

2628 

2629**입력:**

2630 

2631```python theme={null}

2632{

2633 "bash_id": str, # The ID of the background shell

2634 "filter": str | None, # Optional regex to filter output lines

2635}

2636```

2637 

2638**출력:**

2639 

2640```python theme={null}

2641{

2642 "output": str, # New output since last check

2643 "status": "running" | "completed" | "failed", # Current shell status

2644 "exitCode": int | None, # Exit code when completed

2645}

2646```

2647 

2648### KillBash

2649 

2650**도구 이름:** `KillBash`

2651 

2652**입력:**

2653 

2654```python theme={null}

2655{

2656 "shell_id": str # The ID of the background shell to kill

2657}

2658```

2659 

2660**출력:**

2661 

2662```python theme={null}

2663{

2664 "message": str, # Success message

2665 "shell_id": str, # ID of the killed shell

2666}

2667```

2668 

2669### ExitPlanMode

2670 

2671**도구 이름:** `ExitPlanMode`

2672 

2673**입력:**

2674 

2675```python theme={null}

2676{

2677 "plan": str # The plan to run by the user for approval

2678}

2679```

2680 

2681**출력:**

2682 

2683```python theme={null}

2684{

2685 "message": str, # Confirmation message

2686 "approved": bool | None, # Whether user approved the plan

2687}

2688```

2689 

2690### ListMcpResources

2691 

2692**도구 이름:** `ListMcpResources`

2693 

2694**입력:**

2695 

2696```python theme={null}

2697{

2698 "server": str | None # Optional server name to filter resources by

2699}

2700```

2701 

2702**출력:**

2703 

2704```python theme={null}

2705{

2706 "resources": [

2707 {

2708 "uri": str,

2709 "name": str,

2710 "description": str | None,

2711 "mimeType": str | None,

2712 "server": str,

2713 }

2714 ],

2715 "total": int,

2716}

2717```

2718 

2719### ReadMcpResource

2720 

2721**도구 이름:** `ReadMcpResource`

2722 

2723**입력:**

2724 

2725```python theme={null}

2726{

2727 "server": str, # The MCP server name

2728 "uri": str, # The resource URI to read

2729}

2730```

2731 

2732**출력:**

2733 

2734```python theme={null}

2735{

2736 "contents": [

2737 {"uri": str, "mimeType": str | None, "text": str | None, "blob": str | None}

2738 ],

2739 "server": str,

2740}

2741```

2742 

2743## ClaudeSDKClient를 사용한 고급 기능

2744 

2745### 지속적인 대화 인터페이스 구축

2746 

2747```python theme={null}

2748from claude_agent_sdk import (

2749 ClaudeSDKClient,

2750 ClaudeAgentOptions,

2751 AssistantMessage,

2752 TextBlock,

2753)

2754import asyncio

2755 

2756 

2757class ConversationSession:

2758 """Maintains a single conversation session with Claude."""

2759 

2760 def __init__(self, options: ClaudeAgentOptions | None = None):

2761 self.client = ClaudeSDKClient(options)

2762 self.turn_count = 0

2763 

2764 async def start(self):

2765 await self.client.connect()

2766 print("Starting conversation session. Claude will remember context.")

2767 print(

2768 "Commands: 'exit' to quit, 'interrupt' to stop current task, 'new' for new session"

2769 )

2770 

2771 while True:

2772 user_input = input(f"\n[Turn {self.turn_count + 1}] You: ")

2773 

2774 if user_input.lower() == "exit":

2775 break

2776 elif user_input.lower() == "interrupt":

2777 await self.client.interrupt()

2778 print("Task interrupted!")

2779 continue

2780 elif user_input.lower() == "new":

2781 # Disconnect and reconnect for a fresh session

2782 await self.client.disconnect()

2783 await self.client.connect()

2784 self.turn_count = 0

2785 print("Started new conversation session (previous context cleared)")

2786 continue

2787 

2788 # Send message - the session retains all previous messages

2789 await self.client.query(user_input)

2790 self.turn_count += 1

2791 

2792 # Process response

2793 print(f"[Turn {self.turn_count}] Claude: ", end="")

2794 async for message in self.client.receive_response():

2795 if isinstance(message, AssistantMessage):

2796 for block in message.content:

2797 if isinstance(block, TextBlock):

2798 print(block.text, end="")

2799 print() # New line after response

2800 

2801 await self.client.disconnect()

2802 print(f"Conversation ended after {self.turn_count} turns.")

2803 

2804 

2805async def main():

2806 options = ClaudeAgentOptions(

2807 allowed_tools=["Read", "Write", "Bash"], permission_mode="acceptEdits"

2808 )

2809 session = ConversationSession(options)

2810 await session.start()

2811 

2812 

2813# Example conversation:

2814# Turn 1 - You: "Create a file called hello.py"

2815# Turn 1 - Claude: "I'll create a hello.py file for you..."

2816# Turn 2 - You: "What's in that file?"

2817# Turn 2 - Claude: "The hello.py file I just created contains..." (remembers!)

2818# Turn 3 - You: "Add a main function to it"

2819# Turn 3 - Claude: "I'll add a main function to hello.py..." (knows which file!)

2820 

2821asyncio.run(main())

2822```

2823 

2824### 동작 수정을 위해 Hooks 사용

2825 

2826```python theme={null}

2827from claude_agent_sdk import (

2828 ClaudeSDKClient,

2829 ClaudeAgentOptions,

2830 HookMatcher,

2831 HookContext,

2832)

2833import asyncio

2834from typing import Any

2835 

2836 

2837async def pre_tool_logger(

2838 input_data: dict[str, Any], tool_use_id: str | None, context: HookContext

2839) -> dict[str, Any]:

2840 """Log all tool usage before execution."""

2841 tool_name = input_data.get("tool_name", "unknown")

2842 print(f"[PRE-TOOL] About to use: {tool_name}")

2843 

2844 # You can modify or block the tool execution here

2845 if tool_name == "Bash" and "rm -rf" in str(input_data.get("tool_input", {})):

2846 return {

2847 "hookSpecificOutput": {

2848 "hookEventName": "PreToolUse",

2849 "permissionDecision": "deny",

2850 "permissionDecisionReason": "Dangerous command blocked",

2851 }

2852 }

2853 return {}

2854 

2855 

2856async def post_tool_logger(

2857 input_data: dict[str, Any], tool_use_id: str | None, context: HookContext

2858) -> dict[str, Any]:

2859 """Log results after tool execution."""

2860 tool_name = input_data.get("tool_name", "unknown")

2861 print(f"[POST-TOOL] Completed: {tool_name}")

2862 return {}

2863 

2864 

2865async def user_prompt_modifier(

2866 input_data: dict[str, Any], tool_use_id: str | None, context: HookContext

2867) -> dict[str, Any]:

2868 """Add context to user prompts."""

2869 original_prompt = input_data.get("prompt", "")

2870 

2871 # Add a timestamp as additional context for Claude to see

2872 from datetime import datetime

2873 

2874 timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

2875 

2876 return {

2877 "hookSpecificOutput": {

2878 "hookEventName": "UserPromptSubmit",

2879 "additionalContext": f"[Submitted at {timestamp}] Original prompt: {original_prompt}",

2880 }

2881 }

2882 

2883 

2884async def main():

2885 options = ClaudeAgentOptions(

2886 hooks={

2887 "PreToolUse": [

2888 HookMatcher(hooks=[pre_tool_logger]),

2889 HookMatcher(matcher="Bash", hooks=[pre_tool_logger]),

2890 ],

2891 "PostToolUse": [HookMatcher(hooks=[post_tool_logger])],

2892 "UserPromptSubmit": [HookMatcher(hooks=[user_prompt_modifier])],

2893 },

2894 allowed_tools=["Read", "Write", "Bash"],

2895 )

2896 

2897 async with ClaudeSDKClient(options=options) as client:

2898 await client.query("List files in current directory")

2899 

2900 async for message in client.receive_response():

2901 # Hooks will automatically log tool usage

2902 pass

2903 

2904 

2905asyncio.run(main())

2906```

2907 

2908### 실시간 진행 상황 모니터링

2909 

2910```python theme={null}

2911from claude_agent_sdk import (

2912 ClaudeSDKClient,

2913 ClaudeAgentOptions,

2914 AssistantMessage,

2915 ToolUseBlock,

2916 ToolResultBlock,

2917 TextBlock,

2918)

2919import asyncio

2920 

2921 

2922async def monitor_progress():

2923 options = ClaudeAgentOptions(

2924 allowed_tools=["Write", "Bash"], permission_mode="acceptEdits"

2925 )

2926 

2927 async with ClaudeSDKClient(options=options) as client:

2928 await client.query("Create 5 Python files with different sorting algorithms")

2929 

2930 # Monitor progress in real-time

2931 async for message in client.receive_response():

2932 if isinstance(message, AssistantMessage):

2933 for block in message.content:

2934 if isinstance(block, ToolUseBlock):

2935 if block.name == "Write":

2936 file_path = block.input.get("file_path", "")

2937 print(f"Creating: {file_path}")

2938 elif isinstance(block, ToolResultBlock):

2939 print("Completed tool execution")

2940 elif isinstance(block, TextBlock):

2941 print(f"Claude says: {block.text[:100]}...")

2942 

2943 print("Task completed!")

2944 

2945 

2946asyncio.run(monitor_progress())

2947```

2948 

2949## 예제 사용

2950 

2951### 기본 파일 작업 (query 사용)

2952 

2953```python theme={null}

2954from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ToolUseBlock

2955import asyncio

2956 

2957 

2958async def create_project():

2959 options = ClaudeAgentOptions(

2960 allowed_tools=["Read", "Write", "Bash"],

2961 permission_mode="acceptEdits",

2962 cwd="/home/user/project",

2963 )

2964 

2965 async for message in query(

2966 prompt="Create a Python project structure with setup.py", options=options

2967 ):

2968 if isinstance(message, AssistantMessage):

2969 for block in message.content:

2970 if isinstance(block, ToolUseBlock):

2971 print(f"Using tool: {block.name}")

2972 

2973 

2974asyncio.run(create_project())

2975```

2976 

2977### 오류 처리

2978 

2979```python theme={null}

2980from claude_agent_sdk import query, CLINotFoundError, ProcessError, CLIJSONDecodeError

2981 

2982try:

2983 async for message in query(prompt="Hello"):

2984 print(message)

2985except CLINotFoundError:

2986 print(

2987 "Claude Code CLI not found. Try reinstalling: pip install --force-reinstall claude-agent-sdk"

2988 )

2989except ProcessError as e:

2990 print(f"Process failed with exit code: {e.exit_code}")

2991except CLIJSONDecodeError as e:

2992 print(f"Failed to parse response: {e}")

2993```

2994 

2995### 클라이언트를 사용한 스트리밍 모드

2996 

2997```python theme={null}

2998from claude_agent_sdk import ClaudeSDKClient

2999import asyncio

3000 

3001 

3002async def interactive_session():

3003 async with ClaudeSDKClient() as client:

3004 # Send initial message

3005 await client.query("What's the weather like?")

3006 

3007 # Process responses

3008 async for msg in client.receive_response():

3009 print(msg)

3010 

3011 # Send follow-up

3012 await client.query("Tell me more about that")

3013 

3014 # Process follow-up response

3015 async for msg in client.receive_response():

3016 print(msg)

3017 

3018 

3019asyncio.run(interactive_session())

3020```

3021 

3022### ClaudeSDKClient를 사용한 사용자 정의 도구

3023 

3024```python theme={null}

3025from claude_agent_sdk import (

3026 ClaudeSDKClient,

3027 ClaudeAgentOptions,

3028 tool,

3029 create_sdk_mcp_server,

3030 AssistantMessage,

3031 TextBlock,

3032)

3033import asyncio

3034from typing import Any

3035 

3036 

3037# Define custom tools with @tool decorator

3038@tool("calculate", "Perform mathematical calculations", {"expression": str})

3039async def calculate(args: dict[str, Any]) -> dict[str, Any]:

3040 try:

3041 result = eval(args["expression"], {"__builtins__": {}})

3042 return {"content": [{"type": "text", "text": f"Result: {result}"}]}

3043 except Exception as e:

3044 return {

3045 "content": [{"type": "text", "text": f"Error: {str(e)}"}],

3046 "is_error": True,

3047 }

3048 

3049 

3050@tool("get_time", "Get current time", {})

3051async def get_time(args: dict[str, Any]) -> dict[str, Any]:

3052 from datetime import datetime

3053 

3054 current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

3055 return {"content": [{"type": "text", "text": f"Current time: {current_time}"}]}

3056 

3057 

3058async def main():

3059 # Create SDK MCP server with custom tools

3060 my_server = create_sdk_mcp_server(

3061 name="utilities", version="1.0.0", tools=[calculate, get_time]

3062 )

3063 

3064 # Configure options with the server

3065 options = ClaudeAgentOptions(

3066 mcp_servers={"utils": my_server},

3067 allowed_tools=["mcp__utils__calculate", "mcp__utils__get_time"],

3068 )

3069 

3070 # Use ClaudeSDKClient for interactive tool usage

3071 async with ClaudeSDKClient(options=options) as client:

3072 await client.query("What's 123 * 456?")

3073 

3074 # Process calculation response

3075 async for message in client.receive_response():

3076 if isinstance(message, AssistantMessage):

3077 for block in message.content:

3078 if isinstance(block, TextBlock):

3079 print(f"Calculation: {block.text}")

3080 

3081 # Follow up with time query

3082 await client.query("What time is it now?")

3083 

3084 async for message in client.receive_response():

3085 if isinstance(message, AssistantMessage):

3086 for block in message.content:

3087 if isinstance(block, TextBlock):

3088 print(f"Time: {block.text}")

3089 

3090 

3091asyncio.run(main())

3092```

3093 

3094## 샌드박스 구성

3095 

3096### `SandboxSettings`

3097 

3098샌드박스 동작을 위한 구성입니다. 이를 사용하여 명령 샌드박싱을 활성화하고 프로그래밍 방식으로 네트워크 제한을 구성합니다.

3099 

3100```python theme={null}

3101class SandboxSettings(TypedDict, total=False):

3102 enabled: bool

3103 autoAllowBashIfSandboxed: bool

3104 excludedCommands: list[str]

3105 allowUnsandboxedCommands: bool

3106 network: SandboxNetworkConfig

3107 ignoreViolations: SandboxIgnoreViolations

3108 enableWeakerNestedSandbox: bool

3109```

3110 

3111| 속성 | 타입 | 기본값 | 설명 |

3112| :-------------------------- | :------------------------------------------------------ | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

3113| `enabled` | `bool` | `False` | 명령 실행을 위한 샌드박스 모드 활성화 |

3114| `autoAllowBashIfSandboxed` | `bool` | `True` | 샌드박스가 활성화되면 bash 명령 자동 승인 |

3115| `excludedCommands` | `list[str]` | `[]` | 항상 샌드박스 제한을 우회하는 명령 (예: `["docker"]`). 이들은 모델 개입 없이 자동으로 샌드박스되지 않은 상태로 실행됩니다 |

3116| `allowUnsandboxedCommands` | `bool` | `True` | 모델이 샌드박스 외부에서 명령 실행을 요청하도록 허용합니다. `True`일 때, 모델은 도구 입력에서 `dangerouslyDisableSandbox`를 설정할 수 있으며, 이는 [권한 시스템](#permissions-fallback-for-unsandboxed-commands)으로 폴백됩니다 |

3117| `network` | [`SandboxNetworkConfig`](#sandbox-network-config) | `None` | 네트워크 특정 샌드박스 구성 |

3118| `ignoreViolations` | [`SandboxIgnoreViolations`](#sandbox-ignore-violations) | `None` | 무시할 샌드박스 위반을 구성합니다 |

3119| `enableWeakerNestedSandbox` | `bool` | `False` | 호환성을 위해 더 약한 중첩 샌드박스 활성화 |

3120 

3121#### 사용 예제

3122 

3123```python theme={null}

3124from claude_agent_sdk import query, ClaudeAgentOptions, SandboxSettings

3125 

3126sandbox_settings: SandboxSettings = {

3127 "enabled": True,

3128 "autoAllowBashIfSandboxed": True,

3129 "network": {"allowLocalBinding": True},

3130}

3131 

3132async for message in query(

3133 prompt="Build and test my project",

3134 options=ClaudeAgentOptions(sandbox=sandbox_settings),

3135):

3136 print(message)

3137```

3138 

3139<Warning>

3140 **Unix 소켓 보안**: `allowUnixSockets` 옵션은 강력한 시스템 서비스에 대한 접근을 부여할 수 있습니다. 예를 들어, `/var/run/docker.sock`을 허용하면 Docker API를 통해 샌드박스 격리를 우회하여 전체 호스트 시스템 접근을 효과적으로 부여합니다. 엄격히 필요한 Unix 소켓만 허용하고 각각의 보안 영향을 이해하십시오.

3141</Warning>

3142 

3143### `SandboxNetworkConfig`

3144 

3145샌드박스 모드를 위한 네트워크 특정 구성입니다.

3146 

3147```python theme={null}

3148class SandboxNetworkConfig(TypedDict, total=False):

3149 allowedDomains: list[str]

3150 deniedDomains: list[str]

3151 allowManagedDomainsOnly: bool

3152 allowUnixSockets: list[str]

3153 allowAllUnixSockets: bool

3154 allowLocalBinding: bool

3155 allowMachLookup: list[str]

3156 httpProxyPort: int

3157 socksProxyPort: int

3158```

3159 

3160| 속성 | 타입 | 기본값 | 설명 |

3161| :------------------------ | :---------- | :------ | :------------------------------------------------------------------------------------------- |

3162| `allowedDomains` | `list[str]` | `[]` | 샌드박스된 프로세스가 접근할 수 있는 도메인 이름 |

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

3164| `allowManagedDomainsOnly` | `bool` | `False` | 관리되는 설정만: 관리되는 설정에서 설정되면, 관리되지 않는 설정 소스의 `allowedDomains`를 무시합니다. SDK 옵션을 통해 설정할 때는 효과가 없습니다 |

3165| `allowUnixSockets` | `list[str]` | `[]` | 프로세스가 접근할 수 있는 Unix 소켓 경로 (예: Docker 소켓) |

3166| `allowAllUnixSockets` | `bool` | `False` | 모든 Unix 소켓에 대한 접근 허용 |

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

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

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

3170| `socksProxyPort` | `int` | `None` | 네트워크 요청을 위한 SOCKS 프록시 포트 |

3171 

3172<Note>

3173 기본 제공 샌드박스 프록시는 요청된 호스트명을 기반으로 네트워크 허용 목록을 적용하며 TLS 트래픽을 종료하거나 검사하지 않으므로, [도메인 프론팅](https://en.wikipedia.org/wiki/Domain_fronting)과 같은 기술이 이를 우회할 수 있습니다. 자세한 내용은 [샌드박싱 보안 제한 사항](/ko/sandboxing#security-limitations)을 참조하고, TLS 종료 프록시 구성은 [안전한 배포](/ko/agent-sdk/secure-deployment#traffic-forwarding)를 참조하십시오.

3174</Note>

3175 

3176### `SandboxIgnoreViolations`

3177 

3178특정 샌드박스 위반을 무시하기 위한 구성입니다.

3179 

3180```python theme={null}

3181class SandboxIgnoreViolations(TypedDict, total=False):

3182 file: list[str]

3183 network: list[str]

3184```

3185 

3186| 속성 | 타입 | 기본값 | 설명 |

3187| :-------- | :---------- | :--- | :--------------- |

3188| `file` | `list[str]` | `[]` | 위반을 무시할 파일 경로 패턴 |

3189| `network` | `list[str]` | `[]` | 위반을 무시할 네트워크 패턴 |

3190 

3191### 샌드박스되지 않은 명령을 위한 권한 폴백

3192 

3193`allowUnsandboxedCommands`가 활성화되면, 모델은 도구 입력에서 `dangerouslyDisableSandbox: True`를 설정하여 샌드박스 외부에서 명령 실행을 요청할 수 있습니다. 이러한 요청은 기존 권한 시스템으로 폴백되므로, `can_use_tool` 핸들러가 호출되어 사용자 정의 인증 로직을 구현할 수 있습니다.

3194 

3195<Note>

3196 **`excludedCommands` vs `allowUnsandboxedCommands`:**

3197 

3198 * `excludedCommands`: 항상 자동으로 샌드박스를 우회하는 명령의 정적 목록 (예: `["docker"]`). 모델이 이를 제어할 수 없습니다.

3199 * `allowUnsandboxedCommands`: 모델이 도구 입력에서 `dangerouslyDisableSandbox: True`를 설정하여 런타임에 샌드박스되지 않은 실행을 요청하도록 합니다.

3200</Note>

3201 

3202```python theme={null}

3203from claude_agent_sdk import (

3204 query,

3205 ClaudeAgentOptions,

3206 HookMatcher,

3207 PermissionResultAllow,

3208 PermissionResultDeny,

3209 ToolPermissionContext,

3210)

3211 

3212 

3213async def can_use_tool(

3214 tool: str, input: dict, context: ToolPermissionContext

3215) -> PermissionResultAllow | PermissionResultDeny:

3216 # Check if the model is requesting to bypass the sandbox

3217 if tool == "Bash" and input.get("dangerouslyDisableSandbox"):

3218 # The model is requesting to run this command outside the sandbox

3219 print(f"Unsandboxed command requested: {input.get('command')}")

3220 

3221 if is_command_authorized(input.get("command")):

3222 return PermissionResultAllow()

3223 return PermissionResultDeny(

3224 message="Command not authorized for unsandboxed execution"

3225 )

3226 return PermissionResultAllow()

3227 

3228 

3229# Required: dummy hook keeps the stream open for can_use_tool

3230async def dummy_hook(input_data, tool_use_id, context):

3231 return {"continue_": True}

3232 

3233 

3234async def prompt_stream():

3235 yield {

3236 "type": "user",

3237 "message": {"role": "user", "content": "Deploy my application"},

3238 }

3239 

3240 

3241async def main():

3242 async for message in query(

3243 prompt=prompt_stream(),

3244 options=ClaudeAgentOptions(

3245 sandbox={

3246 "enabled": True,

3247 "allowUnsandboxedCommands": True, # Model can request unsandboxed execution

3248 },

3249 permission_mode="default",

3250 can_use_tool=can_use_tool,

3251 hooks={"PreToolUse": [HookMatcher(matcher=None, hooks=[dummy_hook])]},

3252 ),

3253 ):

3254 print(message)

3255```

3256 

3257이 패턴을 사용하면 다음을 수행할 수 있습니다.

3258 

3259* **모델 요청 감사**: 모델이 샌드박스되지 않은 실행을 요청할 때 로깅

3260* **허용 목록 구현**: 특정 명령만 샌드박스되지 않은 상태로 실행하도록 허용

3261* **승인 워크플로우 추가**: 권한 있는 작업에 대한 명시적 인증 필요

3262 

3263<Warning>

3264 `dangerouslyDisableSandbox: True`로 실행되는 명령은 전체 시스템 접근 권한이 있습니다. `can_use_tool` 핸들러가 이러한 요청을 신중하게 검증하는지 확인하십시오.

3265 

3266 `permission_mode`가 `bypassPermissions`로 설정되고 `allow_unsandboxed_commands`가 활성화되면, 모델은 승인 프롬프트 없이 샌드박스 외부에서 명령을 자동으로 실행할 수 있습니다. 이 조합은 모델이 샌드박스 격리를 조용히 탈출할 수 있도록 효과적으로 허용합니다.

3267</Warning>

3268 

3269## 참고 항목

3270 

3271* [SDK 개요](/ko/agent-sdk/overview) - 일반 SDK 개념

3272* [TypeScript SDK 참조](/ko/agent-sdk/typescript) - TypeScript SDK 문서

3273* [CLI 참조](/ko/cli-reference) - 명령줄 인터페이스

3274* [일반적인 워크플로우](/ko/common-workflows) - 단계별 가이드

agent-sdk/quickstart.md +333 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 빠른 시작

6 

7> Python 또는 TypeScript Agent SDK를 사용하여 자율적으로 작동하는 AI 에이전트를 구축하기 시작합니다

8 

9Agent SDK를 사용하여 코드를 읽고, 버그를 찾고, 수동 개입 없이 모두 자동으로 버그를 수정하는 AI 에이전트를 구축합니다.

10 

11**수행할 작업:**

12 

131. Agent SDK를 사용하여 프로젝트 설정

142. 버그가 있는 코드가 포함된 파일 생성

153. 버그를 자동으로 찾고 수정하는 에이전트 실행

16 

17## 필수 조건

18 

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

20* **Anthropic 계정** ([여기서 가입](https://platform.claude.com/))

21 

22## 설정

23 

24<Steps>

25 <Step title="프로젝트 폴더 생성">

26 이 빠른 시작을 위한 새 디렉토리를 생성합니다:

27 

28 ```bash theme={null}

29 mkdir my-agent && cd my-agent

30 ```

31 

32 자신의 프로젝트의 경우 모든 폴더에서 SDK를 실행할 수 있습니다. 기본적으로 해당 디렉토리 및 하위 디렉토리의 파일에 액세스할 수 있습니다.

33 </Step>

34 

35 <Step title="SDK 설치">

36 언어에 맞는 Agent SDK 패키지를 설치합니다:

37 

38 <Tabs>

39 <Tab title="TypeScript">

40 ```bash theme={null}

41 npm install @anthropic-ai/claude-agent-sdk

42 ```

43 </Tab>

44 

45 <Tab title="Python (uv)">

46 [uv Python 패키지 관리자](https://docs.astral.sh/uv/)는 가상 환경을 자동으로 처리하는 빠른 Python 패키지 관리자입니다:

47 

48 ```bash theme={null}

49 uv init && uv add claude-agent-sdk

50 ```

51 </Tab>

52 

53 <Tab title="Python (pip)">

54 먼저 가상 환경을 생성한 다음 설치합니다:

55 

56 ```bash theme={null}

57 python3 -m venv .venv && source .venv/bin/activate

58 pip3 install claude-agent-sdk

59 ```

60 </Tab>

61 </Tabs>

62 

63 <Note>

64 TypeScript SDK는 선택적 종속성으로 플랫폼용 네이티브 Claude Code 바이너리를 번들로 제공하므로 Claude Code를 별도로 설치할 필요가 없습니다.

65 </Note>

66 </Step>

67 

68 <Step title="API 키 설정">

69 [Claude 콘솔](https://platform.claude.com/)에서 API 키를 가져온 다음 프로젝트 디렉토리에 `.env` 파일을 생성합니다:

70 

71 ```bash theme={null}

72 ANTHROPIC_API_KEY=your-api-key

73 ```

74 

75 SDK는 또한 타사 API 공급자를 통한 인증을 지원합니다:

76 

77 * **Amazon Bedrock**: `CLAUDE_CODE_USE_BEDROCK=1` 환경 변수를 설정하고 AWS 자격 증명을 구성합니다

78 * **Google Vertex AI**: `CLAUDE_CODE_USE_VERTEX=1` 환경 변수를 설정하고 Google Cloud 자격 증명을 구성합니다

79 * **Microsoft Azure**: `CLAUDE_CODE_USE_FOUNDRY=1` 환경 변수를 설정하고 Azure 자격 증명을 구성합니다

80 

81 [Bedrock](/ko/amazon-bedrock), [Vertex AI](/ko/google-vertex-ai) 또는 [Azure AI Foundry](/ko/microsoft-foundry)의 설정 가이드를 참조하여 자세한 내용을 확인합니다.

82 

83 <Note>

84 이전에 승인되지 않은 경우 Anthropic은 타사 개발자가 claude.ai 로그인 또는 Claude Agent SDK를 기반으로 구축된 에이전트를 포함한 제품에 대한 속도 제한을 제공하는 것을 허용하지 않습니다. 대신 이 문서에 설명된 API 키 인증 방법을 사용하십시오.

85 </Note>

86 </Step>

87</Steps>

88 

89## 버그가 있는 파일 생성

90 

91이 빠른 시작은 코드에서 버그를 찾고 수정할 수 있는 에이전트를 구축하는 과정을 안내합니다. 먼저 에이전트가 수정할 의도적인 버그가 있는 파일이 필요합니다. `my-agent` 디렉토리에 `utils.py`를 생성하고 다음 코드를 붙여넣습니다:

92 

93```python theme={null}

94def calculate_average(numbers):

95 total = 0

96 for num in numbers:

97 total += num

98 return total / len(numbers)

99 

100 

101def get_user_name(user):

102 return user["name"].upper()

103```

104 

105이 코드에는 두 가지 버그가 있습니다:

106 

1071. `calculate_average([])`는 0으로 나누기 오류로 충돌합니다

1082. `get_user_name(None)`은 TypeError로 충돌합니다

109 

110## 버그를 찾고 수정하는 에이전트 구축

111 

112Python SDK를 사용하는 경우 `agent.py`를 생성하거나 TypeScript의 경우 `agent.ts`를 생성합니다:

113 

114<CodeGroup>

115 ```python Python theme={null}

116 import asyncio

117 from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage

118 

119 

120 async def main():

121 # Agentic loop: streams messages as Claude works

122 async for message in query(

123 prompt="Review utils.py for bugs that would cause crashes. Fix any issues you find.",

124 options=ClaudeAgentOptions(

125 allowed_tools=["Read", "Edit", "Glob"], # Tools Claude can use

126 permission_mode="acceptEdits", # Auto-approve file edits

127 ),

128 ):

129 # Print human-readable output

130 if isinstance(message, AssistantMessage):

131 for block in message.content:

132 if hasattr(block, "text"):

133 print(block.text) # Claude's reasoning

134 elif hasattr(block, "name"):

135 print(f"Tool: {block.name}") # Tool being called

136 elif isinstance(message, ResultMessage):

137 print(f"Done: {message.subtype}") # Final result

138 

139 

140 asyncio.run(main())

141 ```

142 

143 ```typescript TypeScript theme={null}

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

145 

146 // Agentic loop: streams messages as Claude works

147 for await (const message of query({

148 prompt: "Review utils.py for bugs that would cause crashes. Fix any issues you find.",

149 options: {

150 allowedTools: ["Read", "Edit", "Glob"], // Tools Claude can use

151 permissionMode: "acceptEdits" // Auto-approve file edits

152 }

153 })) {

154 // Print human-readable output

155 if (message.type === "assistant" && message.message?.content) {

156 for (const block of message.message.content) {

157 if ("text" in block) {

158 console.log(block.text); // Claude's reasoning

159 } else if ("name" in block) {

160 console.log(`Tool: ${block.name}`); // Tool being called

161 }

162 }

163 } else if (message.type === "result") {

164 console.log(`Done: ${message.subtype}`); // Final result

165 }

166 }

167 ```

168</CodeGroup>

169 

170이 코드에는 세 가지 주요 부분이 있습니다:

171 

1721. **`query`**: 에이전틱 루프를 생성하는 주요 진입점입니다. 비동기 반복자를 반환하므로 `async for`를 사용하여 Claude가 작동할 때 메시지를 스트리밍합니다. [Python](/ko/agent-sdk/python#query) 또는 [TypeScript](/ko/agent-sdk/typescript#query) SDK 참조에서 전체 API를 참조합니다.

173 

1742. **`prompt`**: Claude가 수행할 작업입니다. Claude는 작업을 기반으로 사용할 도구를 파악합니다.

175 

1763. **`options`**: 에이전트의 구성입니다. 이 예제는 `allowedTools`를 사용하여 `Read`, `Edit` 및 `Glob`을 사전 승인하고 `permissionMode: "acceptEdits"`를 사용하여 파일 변경을 자동 승인합니다. 다른 옵션에는 `systemPrompt`, `mcpServers` 등이 포함됩니다. [Python](/ko/agent-sdk/python#claude-agent-options) 또는 [TypeScript](/ko/agent-sdk/typescript#options)의 모든 옵션을 참조합니다.

177 

178`async for` 루프는 Claude가 생각하고, 도구를 호출하고, 결과를 관찰하고, 다음에 할 일을 결정할 때 계속 실행됩니다. 각 반복은 메시지를 생성합니다: Claude의 추론, 도구 호출, 도구 결과 또는 최종 결과입니다. SDK는 오케스트레이션(도구 실행, 컨텍스트 관리, 재시도)을 처리하므로 스트림을 사용하기만 하면 됩니다. Claude가 작업을 완료하거나 오류가 발생하면 루프가 종료됩니다.

179 

180루프 내의 메시지 처리는 인간이 읽을 수 있는 출력을 필터링합니다. 필터링 없이는 시스템 초기화 및 내부 상태를 포함한 원시 메시지 객체가 표시되며, 이는 디버깅에는 유용하지만 그 외에는 번거롭습니다.

181 

182<Note>

183 이 예제는 스트리밍을 사용하여 실시간으로 진행 상황을 표시합니다. 실시간 출력이 필요하지 않은 경우(예: 백그라운드 작업 또는 CI 파이프라인의 경우) 모든 메시지를 한 번에 수집할 수 있습니다. 자세한 내용은 [스트리밍 대 단일 턴 모드](/ko/agent-sdk/streaming-vs-single-mode)를 참조합니다.

184</Note>

185 

186### 에이전트 실행

187 

188에이전트가 준비되었습니다. 다음 명령으로 실행합니다:

189 

190<Tabs>

191 <Tab title="Python">

192 ```bash theme={null}

193 python3 agent.py

194 ```

195 </Tab>

196 

197 <Tab title="TypeScript">

198 ```bash theme={null}

199 npx tsx agent.ts

200 ```

201 </Tab>

202</Tabs>

203 

204실행 후 `utils.py`를 확인합니다. 빈 목록과 null 사용자를 처리하는 방어적 코드가 표시됩니다. 에이전트는 자율적으로:

205 

2061. **읽기** `utils.py`를 읽어 코드 이해

2072. **분석** 논리를 분석하고 충돌을 일으킬 엣지 케이스 식별

2083. **편집** 파일을 편집하여 적절한 오류 처리 추가

209 

210이것이 Agent SDK를 다르게 만드는 것입니다: Claude는 구현을 요청하는 대신 도구를 직접 실행합니다.

211 

212<Note>

213 "API key not found"가 표시되면 `.env` 파일 또는 셸 환경에서 `ANTHROPIC_API_KEY` 환경 변수를 설정했는지 확인합니다. 자세한 내용은 [전체 문제 해결 가이드](/ko/troubleshooting)를 참조합니다.

214</Note>

215 

216### 다른 프롬프트 시도

217 

218에이전트가 설정되었으므로 다른 프롬프트를 시도합니다:

219 

220* `"Add docstrings to all functions in utils.py"`

221* `"Add type hints to all functions in utils.py"`

222* `"Create a README.md documenting the functions in utils.py"`

223 

224### 에이전트 사용자 정의

225 

226옵션을 변경하여 에이전트의 동작을 수정할 수 있습니다. 다음은 몇 가지 예입니다:

227 

228**웹 검색 기능 추가:**

229 

230<CodeGroup>

231 ```python Python theme={null}

232 options = ClaudeAgentOptions(

233 allowed_tools=["Read", "Edit", "Glob", "WebSearch"], permission_mode="acceptEdits"

234 )

235 ```

236 

237 ```typescript TypeScript hidelines={1,-1} theme={null}

238 const _ = {

239 options: {

240 allowedTools: ["Read", "Edit", "Glob", "WebSearch"],

241 permissionMode: "acceptEdits"

242 }

243 };

244 ```

245</CodeGroup>

246 

247**Claude에 사용자 정의 시스템 프롬프트 제공:**

248 

249<CodeGroup>

250 ```python Python theme={null}

251 options = ClaudeAgentOptions(

252 allowed_tools=["Read", "Edit", "Glob"],

253 permission_mode="acceptEdits",

254 system_prompt="You are a senior Python developer. Always follow PEP 8 style guidelines.",

255 )

256 ```

257 

258 ```typescript TypeScript hidelines={1,-1} theme={null}

259 const _ = {

260 options: {

261 allowedTools: ["Read", "Edit", "Glob"],

262 permissionMode: "acceptEdits",

263 systemPrompt: "You are a senior Python developer. Always follow PEP 8 style guidelines."

264 }

265 };

266 ```

267</CodeGroup>

268 

269**터미널에서 명령 실행:**

270 

271<CodeGroup>

272 ```python Python theme={null}

273 options = ClaudeAgentOptions(

274 allowed_tools=["Read", "Edit", "Glob", "Bash"], permission_mode="acceptEdits"

275 )

276 ```

277 

278 ```typescript TypeScript hidelines={1,-1} theme={null}

279 const _ = {

280 options: {

281 allowedTools: ["Read", "Edit", "Glob", "Bash"],

282 permissionMode: "acceptEdits"

283 }

284 };

285 ```

286</CodeGroup>

287 

288`Bash`가 활성화된 상태에서 다음을 시도합니다: `"Write unit tests for utils.py, run them, and fix any failures"`

289 

290## 주요 개념

291 

292**도구**는 에이전트가 수행할 수 있는 작업을 제어합니다:

293 

294| 도구 | 에이전트가 수행할 수 있는 작업 |

295| -------------------------------------- | ----------------- |

296| `Read`, `Glob`, `Grep` | 읽기 전용 분석 |

297| `Read`, `Edit`, `Glob` | 코드 분석 및 수정 |

298| `Read`, `Edit`, `Bash`, `Glob`, `Grep` | 완전 자동화 |

299 

300**권한 모드**는 원하는 인간 감독의 양을 제어합니다:

301 

302| 모드 | 동작 | 사용 사례 |

303| ----------------------- | -------------------------------------------- | ------------------------ |

304| `acceptEdits` | 파일 편집 및 일반적인 파일 시스템 명령을 자동 승인하고 다른 작업을 요청합니다 | 신뢰할 수 있는 개발 워크플로우 |

305| `dontAsk` | `allowedTools`에 없는 모든 것을 거부합니다 | 잠금된 헤드리스 에이전트 |

306| `auto` (TypeScript만 해당) | 모델 분류기가 각 도구 호출을 승인하거나 거부합니다 | 안전 가드레일이 있는 자율 에이전트 |

307| `bypassPermissions` | 프롬프트 없이 모든 도구를 실행합니다 | 샌드박스 CI, 완전히 신뢰할 수 있는 환경 |

308| `default` | 승인을 처리하기 위해 `canUseTool` 콜백이 필요합니다 | 사용자 정의 승인 흐름 |

309 

310위의 예제는 `acceptEdits` 모드를 사용하며, 이는 파일 작업을 자동 승인하므로 에이전트가 대화형 프롬프트 없이 실행될 수 있습니다. 사용자에게 승인을 요청하려면 `default` 모드를 사용하고 사용자 입력을 수집하는 [`canUseTool` 콜백](/ko/agent-sdk/user-input)을 제공합니다. 더 많은 제어를 위해 [권한](/ko/agent-sdk/permissions)을 참조합니다.

311 

312## 문제 해결

313 

314### API 오류 `thinking.type.enabled`는 이 모델에서 지원되지 않습니다

315 

316Claude Opus 4.7은 `thinking.type.enabled`를 `thinking.type.adaptive`로 대체합니다. 이전 Agent SDK 버전은 `claude-opus-4-7`을 선택할 때 다음 API 오류로 실패합니다:

317 

318```text theme={null}

319API Error: 400 {"type":"invalid_request_error","message":"\"thinking.type.enabled\" is not supported for this model. Use \"thinking.type.adaptive\" and \"output_config.effort\" to control thinking behavior."}

320```

321 

322Opus 4.7을 사용하려면 Agent SDK v0.2.111 이상으로 업그레이드합니다.

323 

324## 다음 단계

325 

326첫 번째 에이전트를 생성했으므로 기능을 확장하고 사용 사례에 맞게 조정하는 방법을 알아봅니다:

327 

328* **[권한](/ko/agent-sdk/permissions)**: 에이전트가 수행할 수 있는 작업과 승인이 필요한 시기를 제어합니다

329* **[Hooks](/ko/agent-sdk/hooks)**: 도구 호출 전후에 사용자 정의 코드를 실행합니다

330* **[세션](/ko/agent-sdk/sessions)**: 컨텍스트를 유지하는 다중 턴 에이전트를 구축합니다

331* **[MCP 서버](/ko/agent-sdk/mcp)**: 데이터베이스, 브라우저, API 및 기타 외부 시스템에 연결합니다

332* **[호스팅](/ko/agent-sdk/hosting)**: Docker, 클라우드 및 CI/CD에 에이전트를 배포합니다

333* **[예제 에이전트](https://github.com/anthropics/claude-agent-sdk-demos)**: 완전한 예제를 참조합니다: 이메일 어시스턴트, 연구 에이전트 등

agent-sdk/slash-commands.md +444 −0 created

Details

1> ## Documentation Index

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

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

4 

5# SDK의 슬래시 명령어

6 

7> SDK를 통해 Claude Code 세션을 제어하기 위해 슬래시 명령어를 사용하는 방법을 알아봅니다

8 

9슬래시 명령어는 `/`로 시작하는 특수 명령어를 사용하여 Claude Code 세션을 제어하는 방법을 제공합니다. 이러한 명령어는 SDK를 통해 전송되어 컨텍스트 압축, 컨텍스트 사용량 나열 또는 사용자 정의 명령어 호출과 같은 작업을 수행할 수 있습니다. 대화형 터미널 없이 작동하는 명령어만 SDK를 통해 전달할 수 있으며, `system/init` 메시지에 세션에서 사용 가능한 명령어가 나열됩니다.

10 

11## 사용 가능한 슬래시 명령어 발견

12 

13Claude Agent SDK는 시스템 초기화 메시지에서 사용 가능한 슬래시 명령어에 대한 정보를 제공합니다. 세션이 시작될 때 이 정보에 접근합니다:

14 

15<CodeGroup>

16 ```typescript TypeScript theme={null}

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

18 

19 for await (const message of query({

20 prompt: "Hello Claude",

21 options: { maxTurns: 1 }

22 })) {

23 if (message.type === "system" && message.subtype === "init") {

24 console.log("Available slash commands:", message.slash_commands);

25 // Example output: ["/compact", "/context", "/usage"]

26 }

27 }

28 ```

29 

30 ```python Python theme={null}

31 import asyncio

32 from claude_agent_sdk import query, ClaudeAgentOptions, SystemMessage

33 

34 

35 async def main():

36 async for message in query(prompt="Hello Claude", options=ClaudeAgentOptions(max_turns=1)):

37 if isinstance(message, SystemMessage) and message.subtype == "init":

38 print("Available slash commands:", message.data["slash_commands"])

39 # Example output: ["/compact", "/context", "/usage"]

40 

41 

42 asyncio.run(main())

43 ```

44</CodeGroup>

45 

46## 슬래시 명령어 전송

47 

48프롬프트 문자열에 슬래시 명령어를 포함하여 일반 텍스트처럼 전송합니다:

49 

50<CodeGroup>

51 ```typescript TypeScript theme={null}

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

53 

54 // Send a slash command

55 for await (const message of query({

56 prompt: "/compact",

57 options: { maxTurns: 1 }

58 })) {

59 if (message.type === "result") {

60 console.log("Command executed:", message.result);

61 }

62 }

63 ```

64 

65 ```python Python theme={null}

66 import asyncio

67 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

68 

69 

70 async def main():

71 # Send a slash command

72 async for message in query(prompt="/compact", options=ClaudeAgentOptions(max_turns=1)):

73 if isinstance(message, ResultMessage):

74 print("Command executed:", message.result)

75 

76 

77 asyncio.run(main())

78 ```

79</CodeGroup>

80 

81## 일반적인 슬래시 명령어

82 

83### `/compact` - 대화 기록 압축

84 

85`/compact` 명령어는 이전 메시지를 요약하면서 중요한 컨텍스트를 보존하여 대화 기록의 크기를 줄입니다:

86 

87<CodeGroup>

88 ```typescript TypeScript theme={null}

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

90 

91 for await (const message of query({

92 prompt: "/compact",

93 options: { maxTurns: 1 }

94 })) {

95 if (message.type === "system" && message.subtype === "compact_boundary") {

96 console.log("Compaction completed");

97 console.log("Pre-compaction tokens:", message.compact_metadata.pre_tokens);

98 console.log("Trigger:", message.compact_metadata.trigger);

99 }

100 }

101 ```

102 

103 ```python Python theme={null}

104 import asyncio

105 from claude_agent_sdk import query, ClaudeAgentOptions, SystemMessage

106 

107 

108 async def main():

109 async for message in query(prompt="/compact", options=ClaudeAgentOptions(max_turns=1)):

110 if isinstance(message, SystemMessage) and message.subtype == "compact_boundary":

111 print("Compaction completed")

112 print("Pre-compaction tokens:", message.data["compact_metadata"]["pre_tokens"])

113 print("Trigger:", message.data["compact_metadata"]["trigger"])

114 

115 

116 asyncio.run(main())

117 ```

118</CodeGroup>

119 

120### 대화 지우기

121 

122대화형 `/clear` 명령어는 SDK에서 사용할 수 없습니다. 각 `query()` 호출은 이미 새로운 대화를 시작하므로, 컨텍스트를 지우려면 현재 `query()`를 종료하고 새로운 것을 시작합니다. 이전 대화는 디스크에 남아 있으며 세션 ID를 [`resume` 옵션](/ko/agent-sdk/sessions#resume-by-id)에 전달하여 돌아갈 수 있습니다.

123 

124## 사용자 정의 슬래시 명령어 만들기

125 

126기본 제공 슬래시 명령어를 사용하는 것 외에도 SDK를 통해 사용 가능한 자신만의 사용자 정의 명령어를 만들 수 있습니다. 사용자 정의 명령어는 서브에이전트가 구성되는 방식과 유사하게 특정 디렉토리의 마크다운 파일로 정의됩니다.

127 

128<Note>

129 `.claude/commands/` 디렉토리는 레거시 형식입니다. 권장되는 형식은 `.claude/skills/<name>/SKILL.md`이며, 이는 동일한 슬래시 명령어 호출(`/name`)과 Claude의 자율적 호출을 지원합니다. 현재 형식은 [Skills](/ko/agent-sdk/skills)를 참조하세요. CLI는 두 형식을 모두 계속 지원하며, 아래 예제는 `.claude/commands/`에 대해 정확합니다.

130</Note>

131 

132### 파일 위치

133 

134사용자 정의 슬래시 명령어는 범위에 따라 지정된 디렉토리에 저장됩니다:

135 

136* **프로젝트 명령어**: `.claude/commands/` - 현재 프로젝트에서만 사용 가능 (레거시; `.claude/skills/` 선호)

137* **개인 명령어**: `~/.claude/commands/` - 모든 프로젝트에서 사용 가능 (레거시; `~/.claude/skills/` 선호)

138 

139### 파일 형식

140 

141각 사용자 정의 명령어는 마크다운 파일이며:

142 

143* 파일명(`.md` 확장자 제외)이 명령어 이름이 됩니다

144* 파일 내용이 명령어의 기능을 정의합니다

145* 선택적 YAML frontmatter가 구성을 제공합니다

146 

147#### 기본 예제

148 

149`.claude/commands/refactor.md` 생성:

150 

151```markdown theme={null}

152Refactor the selected code to improve readability and maintainability.

153Focus on clean code principles and best practices.

154```

155 

156이는 SDK를 통해 사용할 수 있는 `/refactor` 명령어를 만듭니다.

157 

158#### Frontmatter 포함

159 

160`.claude/commands/security-check.md` 생성:

161 

162```markdown theme={null}

163---

164allowed-tools: Read, Grep, Glob

165description: Run security vulnerability scan

166model: claude-opus-4-7

167---

168 

169Analyze the codebase for security vulnerabilities including:

170- SQL injection risks

171- XSS vulnerabilities

172- Exposed credentials

173- Insecure configurations

174```

175 

176### SDK에서 사용자 정의 명령어 사용

177 

178파일 시스템에서 정의되면 사용자 정의 명령어는 SDK를 통해 자동으로 사용 가능합니다:

179 

180<CodeGroup>

181 ```typescript TypeScript theme={null}

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

183 

184 // Use a custom command

185 for await (const message of query({

186 prompt: "/refactor src/auth/login.ts",

187 options: { maxTurns: 3 }

188 })) {

189 if (message.type === "assistant") {

190 console.log("Refactoring suggestions:", message.message);

191 }

192 }

193 

194 // Custom commands appear in the slash_commands list

195 for await (const message of query({

196 prompt: "Hello",

197 options: { maxTurns: 1 }

198 })) {

199 if (message.type === "system" && message.subtype === "init") {

200 // Will include both built-in and custom commands

201 console.log("Available commands:", message.slash_commands);

202 // Example: ["/compact", "/context", "/usage", "/refactor", "/security-check"]

203 }

204 }

205 ```

206 

207 ```python Python theme={null}

208 import asyncio

209 from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, SystemMessage

210 

211 

212 async def main():

213 # Use a custom command

214 async for message in query(

215 prompt="/refactor src/auth/login.py", options=ClaudeAgentOptions(max_turns=3)

216 ):

217 if isinstance(message, AssistantMessage):

218 for block in message.content:

219 if hasattr(block, "text"):

220 print("Refactoring suggestions:", block.text)

221 

222 # Custom commands appear in the slash_commands list

223 async for message in query(prompt="Hello", options=ClaudeAgentOptions(max_turns=1)):

224 if isinstance(message, SystemMessage) and message.subtype == "init":

225 # Will include both built-in and custom commands

226 print("Available commands:", message.data["slash_commands"])

227 # Example: ["/compact", "/context", "/usage", "/refactor", "/security-check"]

228 

229 

230 asyncio.run(main())

231 ```

232</CodeGroup>

233 

234### 고급 기능

235 

236#### 인수 및 플레이스홀더

237 

238사용자 정의 명령어는 플레이스홀더를 사용하여 동적 인수를 지원합니다:

239 

240`.claude/commands/fix-issue.md` 생성:

241 

242```markdown theme={null}

243---

244argument-hint: [issue-number] [priority]

245description: Fix a GitHub issue

246---

247 

248Fix issue #$1 with priority $2.

249Check the issue description and implement the necessary changes.

250```

251 

252SDK에서 사용:

253 

254<CodeGroup>

255 ```typescript TypeScript theme={null}

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

257 

258 // Pass arguments to custom command

259 for await (const message of query({

260 prompt: "/fix-issue 123 high",

261 options: { maxTurns: 5 }

262 })) {

263 // Command will process with $1="123" and $2="high"

264 if (message.type === "result") {

265 console.log("Issue fixed:", message.result);

266 }

267 }

268 ```

269 

270 ```python Python theme={null}

271 import asyncio

272 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

273 

274 

275 async def main():

276 # Pass arguments to custom command

277 async for message in query(prompt="/fix-issue 123 high", options=ClaudeAgentOptions(max_turns=5)):

278 # Command will process with $1="123" and $2="high"

279 if isinstance(message, ResultMessage):

280 print("Issue fixed:", message.result)

281 

282 

283 asyncio.run(main())

284 ```

285</CodeGroup>

286 

287#### Bash 명령어 실행

288 

289사용자 정의 명령어는 bash 명령어를 실행하고 출력을 포함할 수 있습니다:

290 

291`.claude/commands/git-commit.md` 생성:

292 

293```markdown theme={null}

294---

295allowed-tools: Bash(git add *), Bash(git status *), Bash(git commit *)

296description: Create a git commit

297---

298 

299## Context

300 

301- Current status: !`git status`

302- Current diff: !`git diff HEAD`

303 

304## Task

305 

306Create a git commit with appropriate message based on the changes.

307```

308 

309#### 파일 참조

310 

311`@` 접두사를 사용하여 파일 내용을 포함합니다:

312 

313`.claude/commands/review-config.md` 생성:

314 

315```markdown theme={null}

316---

317description: Review configuration files

318---

319 

320Review the following configuration files for issues:

321- Package config: @package.json

322- TypeScript config: @tsconfig.json

323- Environment config: @.env

324 

325Check for security issues, outdated dependencies, and misconfigurations.

326```

327 

328### 네임스페이싱을 통한 조직화

329 

330더 나은 구조를 위해 명령어를 하위 디렉토리에 구성합니다:

331 

332```bash theme={null}

333.claude/commands/

334├── frontend/

335│ ├── component.md # Creates /component (project:frontend)

336│ └── style-check.md # Creates /style-check (project:frontend)

337├── backend/

338│ ├── api-test.md # Creates /api-test (project:backend)

339│ └── db-migrate.md # Creates /db-migrate (project:backend)

340└── review.md # Creates /review (project)

341```

342 

343하위 디렉토리는 명령어 설명에 나타나지만 명령어 이름 자체에는 영향을 주지 않습니다.

344 

345### 실용적인 예제

346 

347#### 코드 리뷰 명령어

348 

349`.claude/commands/code-review.md` 생성:

350 

351```markdown theme={null}

352---

353allowed-tools: Read, Grep, Glob, Bash(git diff *)

354description: Comprehensive code review

355---

356 

357## Changed Files

358!`git diff --name-only HEAD~1`

359 

360## Detailed Changes

361!`git diff HEAD~1`

362 

363## Review Checklist

364 

365Review the above changes for:

3661. Code quality and readability

3672. Security vulnerabilities

3683. Performance implications

3694. Test coverage

3705. Documentation completeness

371 

372Provide specific, actionable feedback organized by priority.

373```

374 

375#### 테스트 러너 명령어

376 

377`.claude/commands/test.md` 생성:

378 

379```markdown theme={null}

380---

381allowed-tools: Bash, Read, Edit

382argument-hint: [test-pattern]

383description: Run tests with optional pattern

384---

385 

386Run tests matching pattern: $ARGUMENTS

387 

3881. Detect the test framework (Jest, pytest, etc.)

3892. Run tests with the provided pattern

3903. If tests fail, analyze and fix them

3914. Re-run to verify fixes

392```

393 

394SDK를 통해 이러한 명령어를 사용합니다:

395 

396<CodeGroup>

397 ```typescript TypeScript theme={null}

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

399 

400 // Run code review

401 for await (const message of query({

402 prompt: "/code-review",

403 options: { maxTurns: 3 }

404 })) {

405 // Process review feedback

406 }

407 

408 // Run specific tests

409 for await (const message of query({

410 prompt: "/test auth",

411 options: { maxTurns: 5 }

412 })) {

413 // Handle test results

414 }

415 ```

416 

417 ```python Python theme={null}

418 import asyncio

419 from claude_agent_sdk import query, ClaudeAgentOptions

420 

421 

422 async def main():

423 # Run code review

424 async for message in query(prompt="/code-review", options=ClaudeAgentOptions(max_turns=3)):

425 # Process review feedback

426 pass

427 

428 # Run specific tests

429 async for message in query(prompt="/test auth", options=ClaudeAgentOptions(max_turns=5)):

430 # Handle test results

431 pass

432 

433 

434 asyncio.run(main())

435 ```

436</CodeGroup>

437 

438## 참고 항목

439 

440* [Slash Commands](/ko/skills) - 완전한 슬래시 명령어 문서

441* [SDK의 서브에이전트](/ko/agent-sdk/subagents) - 서브에이전트를 위한 유사한 파일 시스템 기반 구성

442* [TypeScript SDK 참조](/ko/agent-sdk/typescript) - 완전한 API 문서

443* [SDK 개요](/ko/agent-sdk/overview) - 일반 SDK 개념

444* [CLI 참조](/ko/cli-reference) - 명령줄 인터페이스

agent-sdk/typescript.md +2975 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Agent SDK 참조 - TypeScript

6 

7> TypeScript Agent SDK의 완전한 API 참조로, 모든 함수, 타입 및 인터페이스를 포함합니다.

8 

9<script src="/components/typescript-sdk-type-links.js" defer />

10 

11<Note>

12 **새로운 V2 인터페이스 시도 (미리보기):** `send()` 및 `stream()` 패턴을 사용하는 간소화된 인터페이스가 이제 사용 가능하며, 다중 턴 대화를 더 쉽게 만듭니다. [TypeScript V2 미리보기에 대해 자세히 알아보기](/ko/agent-sdk/typescript-v2-preview)

13</Note>

14 

15## 설치

16 

17```bash theme={null}

18npm install @anthropic-ai/claude-agent-sdk

19```

20 

21<Note>

22 SDK는 선택적 종속성으로 플랫폼용 네이티브 Claude Code 바이너리를 번들로 제공합니다(예: `@anthropic-ai/claude-agent-sdk-darwin-arm64`). Claude Code를 별도로 설치할 필요가 없습니다. 패키지 관리자가 선택적 종속성을 건너뛰면 SDK는 `Native CLI binary for <platform> not found` 오류를 발생시킵니다. 이 경우 [`pathToClaudeCodeExecutable`](#options)을 별도로 설치된 `claude` 바이너리로 설정하세요.

23</Note>

24 

25## 함수

26 

27### `query()`

28 

29Claude Code와 상호작용하기 위한 주요 함수입니다. 메시지가 도착할 때 스트리밍하는 비동기 생성기를 만듭니다.

30 

31```typescript theme={null}

32function query({

33 prompt,

34 options

35}: {

36 prompt: string | AsyncIterable<SDKUserMessage>;

37 options?: Options;

38}): Query;

39```

40 

41#### 매개변수

42 

43| 매개변수 | 타입 | 설명 |

44| :-------- | :---------------------------------------------------------------- | :-------------------------------------- |

45| `prompt` | `string \| AsyncIterable<`[`SDKUserMessage`](#sdkuser-message)`>` | 문자열 또는 스트리밍 모드용 비동기 반복 가능 객체로서의 입력 프롬프트 |

46| `options` | [`Options`](#options) | 선택적 구성 객체 (아래 Options 타입 참조) |

47 

48#### 반환값

49 

50[`Query`](#query-object) 객체를 반환하며, 이는 추가 메서드를 포함하는 `AsyncGenerator<`[`SDKMessage`](#sdk-message)`, void>`를 확장합니다.

51 

52### `startup()`

53 

54프롬프트를 사용할 수 있기 전에 CLI 서브프로세스를 생성하고 초기화 핸드셰이크를 완료하여 미리 준비합니다. 반환된 [`WarmQuery`](#warm-query) 핸들은 나중에 프롬프트를 수락하고 이미 준비된 프로세스에 작성하므로, 첫 번째 `query()` 호출은 서브프로세스 생성 및 초기화 비용을 지불하지 않고 해결됩니다.

55 

56```typescript theme={null}

57function startup(params?: {

58 options?: Options;

59 initializeTimeoutMs?: number;

60}): Promise<WarmQuery>;

61```

62 

63#### 매개변수

64 

65| 매개변수 | 타입 | 설명 |

66| :-------------------- | :-------------------- | :--------------------------------------------------------------------------------------- |

67| `options` | [`Options`](#options) | 선택적 구성 객체입니다. `query()`의 `options` 매개변수와 동일합니다 |

68| `initializeTimeoutMs` | `number` | 서브프로세스 초기화를 기다릴 최대 시간(밀리초)입니다. 기본값은 `60000`입니다. 초기화가 시간 내에 완료되지 않으면 프로미스는 타임아웃 오류로 거부됩니다 |

69 

70#### 반환값

71 

72서브프로세스가 생성되고 초기화 핸드셰이크를 완료하면 해결되는 `Promise<`[`WarmQuery`](#warm-query)`>`를 반환합니다.

73 

74#### 예제

75 

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

77 

78```typescript theme={null}

79import { startup } from "@anthropic-ai/claude-agent-sdk";

80 

81// 시작 비용을 미리 지불합니다

82const warm = await startup({ options: { maxTurns: 3 } });

83 

84// 나중에 프롬프트가 준비되면 이것은 즉시입니다

85for await (const message of warm.query("What files are here?")) {

86 console.log(message);

87}

88```

89 

90### `tool()`

91 

92SDK MCP 서버와 함께 사용하기 위한 타입 안전 MCP 도구 정의를 만듭니다.

93 

94```typescript theme={null}

95function tool<Schema extends AnyZodRawShape>(

96 name: string,

97 description: string,

98 inputSchema: Schema,

99 handler: (args: InferShape<Schema>, extra: unknown) => Promise<CallToolResult>,

100 extras?: { annotations?: ToolAnnotations }

101): SdkMcpToolDefinition<Schema>;

102```

103 

104#### 매개변수

105 

106| 매개변수 | 타입 | 설명 |

107| :------------ | :------------------------------------------------------------------ | :---------------------------------------------- |

108| `name` | `string` | 도구의 이름 |

109| `description` | `string` | 도구가 수행하는 작업에 대한 설명 |

110| `inputSchema` | `Schema extends AnyZodRawShape` | 도구의 입력 매개변수를 정의하는 Zod 스키마 (Zod 3 및 Zod 4 모두 지원) |

111| `handler` | `(args, extra) => Promise<`[`CallToolResult`](#call-tool-result)`>` | 도구 로직을 실행하는 비동기 함수 |

112| `extras` | `{ annotations?: `[`ToolAnnotations`](#tool-annotations)` }` | 클라이언트에 동작 힌트를 제공하는 선택적 MCP 도구 주석 |

113 

114#### `ToolAnnotations`

115 

116`@modelcontextprotocol/sdk/types.js`에서 다시 내보냅니다. 모든 필드는 선택적 힌트입니다. 클라이언트는 보안 결정을 위해 이들을 신뢰해서는 안 됩니다.

117 

118| 필드 | 타입 | 기본값 | 설명 |

119| :---------------- | :-------- | :---------- | :---------------------------------------------------------------------------- |

120| `title` | `string` | `undefined` | 도구의 사람이 읽을 수 있는 제목 |

121| `readOnlyHint` | `boolean` | `false` | `true`이면 도구는 환경을 수정하지 않습니다 |

122| `destructiveHint` | `boolean` | `true` | `true`이면 도구는 파괴적인 업데이트를 수행할 수 있습니다 (`readOnlyHint`가 `false`일 때만 의미 있음) |

123| `idempotentHint` | `boolean` | `false` | `true`이면 동일한 인수로 반복 호출해도 추가 효과가 없습니다 (`readOnlyHint`가 `false`일 때만 의미 있음) |

124| `openWorldHint` | `boolean` | `true` | `true`이면 도구는 외부 엔티티와 상호작용합니다 (예: 웹 검색). `false`이면 도구의 도메인은 폐쇄적입니다 (예: 메모리 도구) |

125 

126```typescript theme={null}

127import { tool } from "@anthropic-ai/claude-agent-sdk";

128import { z } from "zod";

129 

130const searchTool = tool(

131 "search",

132 "Search the web",

133 { query: z.string() },

134 async ({ query }) => {

135 return { content: [{ type: "text", text: `Results for: ${query}` }] };

136 },

137 { annotations: { readOnlyHint: true, openWorldHint: true } }

138);

139```

140 

141### `createSdkMcpServer()`

142 

143애플리케이션과 동일한 프로세스에서 실행되는 MCP 서버 인스턴스를 만듭니다.

144 

145```typescript theme={null}

146function createSdkMcpServer(options: {

147 name: string;

148 version?: string;

149 tools?: Array<SdkMcpToolDefinition<any>>;

150}): McpSdkServerConfigWithInstance;

151```

152 

153#### 매개변수

154 

155| 매개변수 | 타입 | 설명 |

156| :---------------- | :---------------------------- | :------------------------------ |

157| `options.name` | `string` | MCP 서버의 이름 |

158| `options.version` | `string` | 선택적 버전 문자열 |

159| `options.tools` | `Array<SdkMcpToolDefinition>` | [`tool()`](#tool)로 만든 도구 정의의 배열 |

160 

161### `listSessions()`

162 

163가벼운 메타데이터를 포함한 과거 세션을 발견하고 나열합니다. 프로젝트 디렉토리별로 필터링하거나 모든 프로젝트에서 세션을 나열합니다.

164 

165```typescript theme={null}

166function listSessions(options?: ListSessionsOptions): Promise<SDKSessionInfo[]>;

167```

168 

169#### 매개변수

170 

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

172| :------------------------- | :-------- | :---------- | :------------------------------------------------ |

173| `options.dir` | `string` | `undefined` | 세션을 나열할 디렉토리입니다. 생략하면 모든 프로젝트에서 세션을 반환합니다 |

174| `options.limit` | `number` | `undefined` | 반환할 최대 세션 수 |

175| `options.includeWorktrees` | `boolean` | `true` | `dir`이 git 저장소 내에 있을 때 모든 worktree 경로에서 세션을 포함합니다 |

176 

177#### 반환 타입: `SDKSessionInfo`

178 

179| 속성 | 타입 | 설명 |

180| :------------- | :-------------------- | :------------------------------------------------- |

181| `sessionId` | `string` | 고유 세션 식별자 (UUID) |

182| `summary` | `string` | 표시 제목: 사용자 정의 제목, 자동 생성된 요약 또는 첫 번째 프롬프트 |

183| `lastModified` | `number` | 에포크 이후 밀리초 단위의 마지막 수정 시간 |

184| `fileSize` | `number \| undefined` | 세션 파일 크기(바이트)입니다. 로컬 JSONL 저장소에만 채워집니다 |

185| `customTitle` | `string \| undefined` | 사용자가 설정한 세션 제목 (`/rename`을 통해) |

186| `firstPrompt` | `string \| undefined` | 세션의 첫 번째 의미 있는 사용자 프롬프트 |

187| `gitBranch` | `string \| undefined` | 세션 끝의 git 분기 |

188| `cwd` | `string \| undefined` | 세션의 작업 디렉토리 |

189| `tag` | `string \| undefined` | 사용자가 설정한 세션 태그 ([`tagSession()`](#tag-session) 참조) |

190| `createdAt` | `number \| undefined` | 첫 번째 항목의 타임스탬프에서 에포크 이후 밀리초 단위의 생성 시간 |

191 

192#### 예제

193 

194프로젝트의 10개 최신 세션을 인쇄합니다. 결과는 `lastModified` 내림차순으로 정렬되므로 첫 번째 항목이 가장 최신입니다. 모든 프로젝트에서 검색하려면 `dir`을 생략합니다.

195 

196```typescript theme={null}

197import { listSessions } from "@anthropic-ai/claude-agent-sdk";

198 

199const sessions = await listSessions({ dir: "/path/to/project", limit: 10 });

200 

201for (const session of sessions) {

202 console.log(`${session.summary} (${session.sessionId})`);

203}

204```

205 

206### `getSessionMessages()`

207 

208과거 세션 트랜스크립트에서 사용자 및 어시스턴트 메시지를 읽습니다.

209 

210```typescript theme={null}

211function getSessionMessages(

212 sessionId: string,

213 options?: GetSessionMessagesOptions

214): Promise<SessionMessage[]>;

215```

216 

217#### 매개변수

218 

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

220| :--------------- | :------- | :---------- | :------------------------------------------------- |

221| `sessionId` | `string` | 필수 | 읽을 세션 UUID ([`listSessions()`](#list-sessions) 참조) |

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

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

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

225 

226#### 반환 타입: `SessionMessage`

227 

228| 속성 | 타입 | 설명 |

229| :------------------- | :---------------------- | :------------------ |

230| `type` | `"user" \| "assistant"` | 메시지 역할 |

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

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

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

234| `parent_tool_use_id` | `null` | 예약됨 |

235 

236#### 예제

237 

238```typescript theme={null}

239import { listSessions, getSessionMessages } from "@anthropic-ai/claude-agent-sdk";

240 

241const [latest] = await listSessions({ dir: "/path/to/project", limit: 1 });

242 

243if (latest) {

244 const messages = await getSessionMessages(latest.sessionId, {

245 dir: "/path/to/project",

246 limit: 20

247 });

248 

249 for (const msg of messages) {

250 console.log(`[${msg.type}] ${msg.uuid}`);

251 }

252}

253```

254 

255### `getSessionInfo()`

256 

257전체 프로젝트 디렉토리를 스캔하지 않고 ID로 단일 세션의 메타데이터를 읽습니다.

258 

259```typescript theme={null}

260function getSessionInfo(

261 sessionId: string,

262 options?: GetSessionInfoOptions

263): Promise<SDKSessionInfo | undefined>;

264```

265 

266#### 매개변수

267 

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

269| :------------ | :------- | :---------- | :---------------------------------------- |

270| `sessionId` | `string` | 필수 | 조회할 세션의 UUID |

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

272 

273[`SDKSessionInfo`](#return-type-sdk-session-info)를 반환하거나, 세션을 찾을 수 없으면 `undefined`를 반환합니다.

274 

275### `renameSession()`

276 

277사용자 정의 제목 항목을 추가하여 세션의 이름을 바꿉니다. 반복 호출은 안전합니다. 가장 최신 제목이 우선합니다.

278 

279```typescript theme={null}

280function renameSession(

281 sessionId: string,

282 title: string,

283 options?: SessionMutationOptions

284): Promise<void>;

285```

286 

287#### 매개변수

288 

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

290| :------------ | :------- | :---------- | :---------------------------------------- |

291| `sessionId` | `string` | 필수 | 이름을 바꿀 세션의 UUID |

292| `title` | `string` | 필수 | 새 제목입니다. 공백을 제거한 후 비어 있지 않아야 합니다 |

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

294 

295### `tagSession()`

296 

297세션에 태그를 지정합니다. `null`을 전달하여 태그를 지웁니다. 반복 호출은 안전합니다. 가장 최신 태그가 우선합니다.

298 

299```typescript theme={null}

300function tagSession(

301 sessionId: string,

302 tag: string | null,

303 options?: SessionMutationOptions

304): Promise<void>;

305```

306 

307#### 매개변수

308 

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

310| :------------ | :--------------- | :---------- | :---------------------------------------- |

311| `sessionId` | `string` | 필수 | 태그를 지정할 세션의 UUID |

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

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

314 

315## 타입

316 

317### `Options`

318 

319`query()` 함수의 구성 객체입니다.

320 

321| 속성 | 타입 | 기본값 | 설명 |

322| :-------------------------------- | :------------------------------------------------------------------------------------------------------- | :--------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

323| `abortController` | `AbortController` | `new AbortController()` | 작업 취소를 위한 컨트롤러 |

324| `additionalDirectories` | `string[]` | `[]` | Claude가 액세스할 수 있는 추가 디렉토리 |

325| `agent` | `string` | `undefined` | 메인 스레드의 에이전트 이름입니다. 에이전트는 `agents` 옵션 또는 설정에서 정의되어야 합니다 |

326| `agents` | `Record<string, [`AgentDefinition`](#agent-definition)>` | `undefined` | 프로그래밍 방식으로 서브에이전트 정의 |

327| `allowDangerouslySkipPermissions` | `boolean` | `false` | 권한 건너뛰기 활성화합니다. `permissionMode: 'bypassPermissions'`를 사용할 때 필수입니다 |

328| `allowedTools` | `string[]` | `[]` | 프롬프트 없이 자동 승인할 도구입니다. 이것은 Claude를 이 도구들로만 제한하지 않습니다. 나열되지 않은 도구는 `permissionMode` 및 `canUseTool`로 넘어갑니다. `disallowedTools`를 사용하여 도구를 차단합니다. [권한](/ko/agent-sdk/permissions#allow-and-deny-rules) 참조 |

329| `betas` | [`SdkBeta`](#sdk-beta)`[]` | `[]` | 베타 기능 활성화 |

330| `canUseTool` | [`CanUseTool`](#can-use-tool) | `undefined` | 도구 사용을 위한 사용자 정의 권한 함수 |

331| `continue` | `boolean` | `false` | 가장 최근 대화 계속 |

332| `cwd` | `string` | `process.cwd()` | 현재 작업 디렉토리 |

333| `debug` | `boolean` | `false` | Claude Code 프로세스에 대한 디버그 모드 활성화 |

334| `debugFile` | `string` | `undefined` | 특정 파일 경로에 디버그 로그를 작성합니다. 암묵적으로 디버그 모드를 활성화합니다 |

335| `disallowedTools` | `string[]` | `[]` | 항상 거부할 도구입니다. 거부 규칙이 먼저 확인되고 `allowedTools` 및 `permissionMode` (`bypassPermissions` 포함)를 재정의합니다 |

336| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max'` | `'high'` | Claude가 응답에 투입하는 노력의 양을 제어합니다. 적응형 사고와 함께 작동하여 사고 깊이를 안내합니다 |

337| `enableFileCheckpointing` | `boolean` | `false` | 되감기를 위한 파일 변경 추적을 활성화합니다. [파일 체크포인팅](/ko/agent-sdk/file-checkpointing) 참조 |

338| `env` | `Record<string, string \| undefined>` | `process.env` | 환경 변수입니다. User-Agent 헤더에서 앱을 식별하려면 `CLAUDE_AGENT_SDK_CLIENT_APP`을 설정합니다 |

339| `executable` | `'bun' \| 'deno' \| 'node'` | 자동 감지 | 사용할 JavaScript 런타임 |

340| `executableArgs` | `string[]` | `[]` | 실행 파일에 전달할 인수 |

341| `extraArgs` | `Record<string, string \| null>` | `{}` | 추가 인수 |

342| `fallbackModel` | `string` | `undefined` | 기본 모델이 실패할 경우 사용할 모델 |

343| `forkSession` | `boolean` | `false` | `resume`으로 재개할 때 원본 세션을 계속하는 대신 새 세션 ID로 포크합니다 |

344| `hooks` | `Partial<Record<`[`HookEvent`](#hook-event)`, `[`HookCallbackMatcher`](#hook-callback-matcher)`[]>>` | `{}` | 이벤트에 대한 훅 콜백 |

345| `includePartialMessages` | `boolean` | `false` | 부분 메시지 이벤트 포함 |

346| `maxBudgetUsd` | `number` | `undefined` | 클라이언트 측 비용 추정이 이 USD 값에 도달하면 쿼리를 중지합니다. `total_cost_usd`와 동일한 추정과 비교됩니다. [비용 및 사용량 추적](/ko/agent-sdk/cost-tracking) 참조 |

347| `maxThinkingTokens` | `number` | `undefined` | *더 이상 사용되지 않음:* 대신 `thinking`을 사용합니다. 사고 프로세스의 최대 토큰 |

348| `maxTurns` | `number` | `undefined` | 최대 에이전트 턴 (도구 사용 왕복) |

349| `mcpServers` | `Record<string, [`McpServerConfig`](#mcp-server-config)>` | `{}` | MCP 서버 구성 |

350| `model` | `string` | CLI의 기본값 | 사용할 Claude 모델 |

351| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | 에이전트 결과의 출력 형식을 정의합니다. [구조화된 출력](/ko/agent-sdk/structured-outputs) 참조 |

352| `pathToClaudeCodeExecutable` | `string` | 번들된 네이티브 바이너리에서 자동 해결 | Claude Code 실행 파일의 경로입니다. 설치 중에 선택적 종속성을 건너뛰었거나 플랫폼이 지원되는 집합에 없을 때만 필요합니다 |

353| `permissionMode` | [`PermissionMode`](#permission-mode) | `'default'` | 세션의 권한 모드 |

354| `permissionPromptToolName` | `string` | `undefined` | 권한 프롬프트용 MCP 도구 이름 |

355| `persistSession` | `boolean` | `true` | `false`일 때 디스크에 세션 지속성을 비활성화합니다. 세션을 나중에 재개할 수 없습니다 |

356| `plugins` | [`SdkPluginConfig`](#sdk-plugin-config)`[]` | `[]` | 로컬 경로에서 사용자 정의 플러그인을 로드합니다. [플러그인](/ko/agent-sdk/plugins) 참조 |

357| `promptSuggestions` | `boolean` | `false` | 프롬프트 제안을 활성화합니다. 각 턴 후 예측된 다음 사용자 프롬프트를 포함하는 `prompt_suggestion` 메시지를 내보냅니다 |

358| `resume` | `string` | `undefined` | 재개할 세션 ID |

359| `resumeSessionAt` | `string` | `undefined` | 특정 메시지 UUID에서 세션 재개 |

360| `sandbox` | [`SandboxSettings`](#sandbox-settings) | `undefined` | 프로그래밍 방식으로 샌드박스 동작을 구성합니다. [샌드박스 설정](#sandbox-settings) 참조 |

361| `sessionId` | `string` | 자동 생성 | 자동 생성하는 대신 세션에 특정 UUID를 사용합니다 |

362| `sessionStore` | [`SessionStore`](/ko/agent-sdk/session-storage#the-session-store-interface) | `undefined` | 세션 대화를 외부 백엔드로 미러링하여 모든 호스트가 이를 재개할 수 있습니다. [세션을 외부 저장소에 유지](/ko/agent-sdk/session-storage) 참조 |

363| `settingSources` | [`SettingSource`](#setting-source)`[]` | CLI 기본값 (모든 소스) | 로드할 파일 시스템 설정을 제어합니다. 사용자, 프로젝트 및 로컬 설정을 비활성화하려면 `[]`을 전달합니다. 관리되는 정책 설정은 어쨌든 로드됩니다. [Claude Code 기능 사용](/ko/agent-sdk/claude-code-features#what-settingsources-does-not-control) 참조 |

364| `spawnClaudeCodeProcess` | `(options: SpawnOptions) => SpawnedProcess` | `undefined` | Claude Code 프로세스를 생성하는 사용자 정의 함수입니다. VM, 컨테이너 또는 원격 환경에서 Claude Code를 실행하는 데 사용합니다 |

365| `stderr` | `(data: string) => void` | `undefined` | stderr 출력에 대한 콜백 |

366| `strictMcpConfig` | `boolean` | `false` | 엄격한 MCP 검증 적용 |

367| `systemPrompt` | `string \| { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean }` | `undefined` (최소 프롬프트) | 시스템 프롬프트 구성입니다. 사용자 정의 프롬프트의 경우 문자열을 전달하거나, Claude Code의 시스템 프롬프트를 사용하려면 `{ type: 'preset', preset: 'claude_code' }`를 전달합니다. 프리셋 객체 형식을 사용할 때 `append`를 추가하여 추가 지침으로 확장하고, `excludeDynamicSections: true`를 설정하여 세션별 컨텍스트를 첫 번째 사용자 메시지로 이동하여 [머신 간 프롬프트 캐시 재사용 개선](/ko/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |

368| `thinking` | [`ThinkingConfig`](#thinking-config) | 지원되는 모델의 경우 `{ type: 'adaptive' }` | Claude의 사고/추론 동작을 제어합니다. [`ThinkingConfig`](#thinking-config) 참조 |

369| `toolConfig` | [`ToolConfig`](#tool-config) | `undefined` | 기본 제공 도구 동작의 구성입니다. [`ToolConfig`](#tool-config) 참조 |

370| `tools` | `string[] \| { type: 'preset'; preset: 'claude_code' }` | `undefined` | 도구 구성입니다. 도구 이름의 배열을 전달하거나 프리셋을 사용하여 Claude Code의 기본 도구를 가져옵니다 |

371 

372### `Query` 객체

373 

374`query()` 함수에서 반환된 인터페이스입니다.

375 

376```typescript theme={null}

377interface Query extends AsyncGenerator<SDKMessage, void> {

378 interrupt(): Promise<void>;

379 rewindFiles(

380 userMessageId: string,

381 options?: { dryRun?: boolean }

382 ): Promise<RewindFilesResult>;

383 setPermissionMode(mode: PermissionMode): Promise<void>;

384 setModel(model?: string): Promise<void>;

385 setMaxThinkingTokens(maxThinkingTokens: number | null): Promise<void>;

386 initializationResult(): Promise<SDKControlInitializeResponse>;

387 supportedCommands(): Promise<SlashCommand[]>;

388 supportedModels(): Promise<ModelInfo[]>;

389 supportedAgents(): Promise<AgentInfo[]>;

390 mcpServerStatus(): Promise<McpServerStatus[]>;

391 accountInfo(): Promise<AccountInfo>;

392 reconnectMcpServer(serverName: string): Promise<void>;

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

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

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

396 stopTask(taskId: string): Promise<void>;

397 close(): void;

398}

399```

400 

401#### 메서드

402 

403| 메서드 | 설명 |

404| :------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |

405| `interrupt()` | 쿼리를 중단합니다 (스트리밍 입력 모드에서만 사용 가능) |

406| `rewindFiles(userMessageId, options?)` | 파일을 지정된 사용자 메시지의 상태로 복원합니다. 변경 사항을 미리 보려면 `{ dryRun: true }`를 전달합니다. `enableFileCheckpointing: true`가 필요합니다. [파일 체크포인팅](/ko/agent-sdk/file-checkpointing) 참조 |

407| `setPermissionMode()` | 권한 모드를 변경합니다 (스트리밍 입력 모드에서만 사용 가능) |

408| `setModel()` | 모델을 변경합니다 (스트리밍 입력 모드에서만 사용 가능) |

409| `setMaxThinkingTokens()` | *더 이상 사용되지 않음:* 대신 `thinking` 옵션을 사용합니다. 최대 사고 토큰을 변경합니다 |

410| `initializationResult()` | 지원되는 명령, 모델, 계정 정보 및 출력 스타일 구성을 포함한 전체 초기화 결과를 반환합니다 |

411| `supportedCommands()` | 사용 가능한 슬래시 명령을 반환합니다 |

412| `supportedModels()` | 표시 정보를 포함한 사용 가능한 모델을 반환합니다 |

413| `supportedAgents()` | 사용 가능한 서브에이전트를 [`AgentInfo`](#agent-info)`[]`로 반환합니다 |

414| `mcpServerStatus()` | 연결된 MCP 서버의 상태를 반환합니다 |

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

416| `reconnectMcpServer(serverName)` | 이름으로 MCP 서버를 다시 연결합니다 |

417| `toggleMcpServer(serverName, enabled)` | 이름으로 MCP 서버를 활성화 또는 비활성화합니다 |

418| `setMcpServers(servers)` | 이 세션의 MCP 서버 집합을 동적으로 바꿉니다. 추가, 제거 및 오류가 발생한 서버에 대한 정보를 반환합니다 |

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

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

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

422 

423### `WarmQuery`

424 

425[`startup()`](#startup)에서 반환된 핸들입니다. 서브프로세스가 이미 생성되고 초기화되었으므로 이 핸들에서 `query()`를 호출하면 시작 지연 없이 준비된 프로세스에 프롬프트를 직접 작성합니다.

426 

427```typescript theme={null}

428interface WarmQuery extends AsyncDisposable {

429 query(prompt: string | AsyncIterable<SDKUserMessage>): Query;

430 close(): void;

431}

432```

433 

434#### 메서드

435 

436| 메서드 | 설명 |

437| :-------------- | :------------------------------------------------------------------------------------- |

438| `query(prompt)` | 미리 준비된 서브프로세스에 프롬프트를 보내고 [`Query`](#query-object)를 반환합니다. `WarmQuery`당 한 번만 호출할 수 있습니다 |

439| `close()` | 프롬프트를 보내지 않고 서브프로세스를 닫습니다. 더 이상 필요하지 않은 따뜻한 쿼리를 버리는 데 사용합니다 |

440 

441`WarmQuery`는 `AsyncDisposable`을 구현하므로 자동 정리를 위해 `await using`과 함께 사용할 수 있습니다.

442 

443### `SDKControlInitializeResponse`

444 

445`initializationResult()`의 반환 타입입니다. 세션 초기화 데이터를 포함합니다.

446 

447```typescript theme={null}

448type SDKControlInitializeResponse = {

449 commands: SlashCommand[];

450 agents: AgentInfo[];

451 output_style: string;

452 available_output_styles: string[];

453 models: ModelInfo[];

454 account: AccountInfo;

455 fast_mode_state?: "off" | "cooldown" | "on";

456};

457```

458 

459### `AgentDefinition`

460 

461프로그래밍 방식으로 정의된 서브에이전트의 구성입니다.

462 

463```typescript theme={null}

464type AgentDefinition = {

465 description: string;

466 tools?: string[];

467 disallowedTools?: string[];

468 prompt: string;

469 model?: string;

470 mcpServers?: AgentMcpServerSpec[];

471 skills?: string[];

472 initialPrompt?: string;

473 maxTurns?: number;

474 background?: boolean;

475 memory?: "user" | "project" | "local";

476 effort?: "low" | "medium" | "high" | "xhigh" | "max" | number;

477 permissionMode?: PermissionMode;

478 criticalSystemReminder_EXPERIMENTAL?: string;

479};

480```

481 

482| 필드 | 필수 | 설명 |

483| :------------------------------------ | :-- | :------------------------------------------------------------------------------------------------------------------------- |

484| `description` | 예 | 이 에이전트를 사용할 시기에 대한 자연어 설명 |

485| `tools` | 아니오 | 허용된 도구 이름의 배열입니다. 생략하면 부모의 모든 도구를 상속합니다 |

486| `disallowedTools` | 아니오 | 이 에이전트에 대해 명시적으로 허용하지 않을 도구 이름의 배열 |

487| `prompt` | 예 | 에이전트의 시스템 프롬프트 |

488| `model` | 아니오 | 이 에이전트의 모델 재정의입니다. `'sonnet'`, `'opus'`, `'haiku'`, `'inherit'` 같은 별칭 또는 전체 모델 ID를 허용합니다. 생략하거나 `'inherit'`이면 메인 모델을 사용합니다 |

489| `mcpServers` | 아니오 | 이 에이전트에 사용 가능한 MCP 서버 사양 |

490| `skills` | 아니오 | 에이전트 컨텍스트에 미리 로드할 스킬 이름의 배열 |

491| `initialPrompt` | 아니오 | 이 에이전트가 메인 스레드 에이전트로 실행될 때 첫 번째 사용자 턴으로 자동 제출됨 |

492| `maxTurns` | 아니오 | 중지하기 전의 최대 에이전트 턴 수 (API 왕복) |

493| `background` | 아니오 | 호출될 때 이 에이전트를 비차단 백그라운드 작업으로 실행 |

494| `memory` | 아니오 | 이 에이전트의 메모리 소스: `'user'`, `'project'` 또는 `'local'` |

495| `effort` | 아니오 | 이 에이전트의 추론 노력 수준입니다. 명명된 수준 또는 정수를 허용합니다 |

496| `permissionMode` | 아니오 | 이 에이전트 내 도구 실행을 위한 권한 모드입니다. [`PermissionMode`](#permission-mode) 참조 |

497| `criticalSystemReminder_EXPERIMENTAL` | 아니오 | 실험적: 시스템 프롬프트에 추가된 중요한 알림 |

498 

499### `AgentMcpServerSpec`

500 

501서브에이전트에 사용 가능한 MCP 서버를 지정합니다. 서버 이름 (부모의 `mcpServers` 구성에서 서버를 참조하는 문자열) 또는 서버 이름을 구성에 매핑하는 인라인 서버 구성 레코드일 수 있습니다.

502 

503```typescript theme={null}

504type AgentMcpServerSpec = string | Record<string, McpServerConfigForProcessTransport>;

505```

506 

507여기서 `McpServerConfigForProcessTransport`는 `McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig`입니다.

508 

509### `SettingSource`

510 

511SDK가 설정을 로드하는 파일 시스템 기반 구성 소스를 제어합니다.

512 

513```typescript theme={null}

514type SettingSource = "user" | "project" | "local";

515```

516 

517| 값 | 설명 | 위치 |

518| :---------- | :---------------------- | :---------------------------- |

519| `'user'` | 전역 사용자 설정 | `~/.claude/settings.json` |

520| `'project'` | 공유 프로젝트 설정 (버전 제어됨) | `.claude/settings.json` |

521| `'local'` | 로컬 프로젝트 설정 (gitignored) | `.claude/settings.local.json` |

522 

523#### 기본 동작

524 

525`settingSources`가 생략되거나 `undefined`일 때 `query()`는 Claude Code CLI와 동일한 파일 시스템 설정을 로드합니다: 사용자, 프로젝트 및 로컬입니다. 관리되는 정책 설정은 모든 경우에 로드됩니다. [settingSources가 제어하지 않는 것](/ko/agent-sdk/claude-code-features#what-settingsources-does-not-control)을 참조하여 이 옵션과 관계없이 읽히는 입력과 이를 비활성화하는 방법을 확인하세요.

526 

527#### settingSources를 사용하는 이유

528 

529**파일 시스템 설정 비활성화:**

530 

531```typescript theme={null}

532// 디스크에서 사용자, 프로젝트 또는 로컬 설정을 로드하지 않습니다

533const result = query({

534 prompt: "Analyze this code",

535 options: { settingSources: [] }

536});

537```

538 

539**모든 파일 시스템 설정을 명시적으로 로드:**

540 

541```typescript theme={null}

542const result = query({

543 prompt: "Analyze this code",

544 options: {

545 settingSources: ["user", "project", "local"] // 모든 설정 로드

546 }

547});

548```

549 

550**특정 설정 소스만 로드:**

551 

552```typescript theme={null}

553// 프로젝트 설정만 로드, 사용자 및 로컬 무시

554const result = query({

555 prompt: "Run CI checks",

556 options: {

557 settingSources: ["project"] // .claude/settings.json만

558 }

559});

560```

561 

562**테스트 및 CI 환경:**

563 

564```typescript theme={null}

565// CI에서 일관된 동작을 보장하기 위해 로컬 설정 제외

566const result = query({

567 prompt: "Run tests",

568 options: {

569 settingSources: ["project"], // 팀 공유 설정만

570 permissionMode: "bypassPermissions"

571 }

572});

573```

574 

575**SDK 전용 애플리케이션:**

576 

577```typescript theme={null}

578// 모든 것을 프로그래밍 방식으로 정의합니다.

579// 파일 시스템 설정 소스를 거부하려면 []을 전달합니다.

580const result = query({

581 prompt: "Review this PR",

582 options: {

583 settingSources: [],

584 agents: {

585 /* ... */

586 },

587 mcpServers: {

588 /* ... */

589 },

590 allowedTools: ["Read", "Grep", "Glob"]

591 }

592});

593```

594 

595**CLAUDE.md 프로젝트 지침 로드:**

596 

597```typescript theme={null}

598// 프로젝트 설정을 로드하여 CLAUDE.md 파일 포함

599const result = query({

600 prompt: "Add a new feature following project conventions",

601 options: {

602 systemPrompt: {

603 type: "preset",

604 preset: "claude_code" // Claude Code의 시스템 프롬프트 사용

605 },

606 settingSources: ["project"], // 프로젝트 디렉토리에서 CLAUDE.md 로드

607 allowedTools: ["Read", "Write", "Edit"]

608 }

609});

610```

611 

612#### 설정 우선순위

613 

614여러 소스가 로드될 때 설정은 이 우선순위로 병합됩니다 (높음에서 낮음):

615 

6161. 로컬 설정 (`.claude/settings.local.json`)

6172. 프로젝트 설정 (`.claude/settings.json`)

6183. 사용자 설정 (`~/.claude/settings.json`)

619 

620`agents` 및 `allowedTools`와 같은 프로그래밍 방식의 옵션은 사용자, 프로젝트 및 로컬 파일 시스템 설정을 재정의합니다. 관리되는 정책 설정은 프로그래밍 방식의 옵션보다 우선합니다.

621 

622### `PermissionMode`

623 

624```typescript theme={null}

625type PermissionMode =

626 | "default" // 표준 권한 동작

627 | "acceptEdits" // 파일 편집 자동 수락

628 | "bypassPermissions" // 모든 권한 확인 무시

629 | "plan" // 계획 모드 - 실행 없음

630 | "dontAsk" // 권한에 대해 프롬프트하지 않음, 미리 승인되지 않으면 거부

631 | "auto"; // 모델 분류기를 사용하여 각 도구 호출을 승인 또는 거부

632```

633 

634### `CanUseTool`

635 

636도구 사용을 제어하기 위한 사용자 정의 권한 함수 타입입니다.

637 

638```typescript theme={null}

639type CanUseTool = (

640 toolName: string,

641 input: Record<string, unknown>,

642 options: {

643 signal: AbortSignal;

644 suggestions?: PermissionUpdate[];

645 blockedPath?: string;

646 decisionReason?: string;

647 toolUseID: string;

648 agentID?: string;

649 }

650) => Promise<PermissionResult>;

651```

652 

653| 옵션 | 타입 | 설명 |

654| :--------------- | :------------------------------------------- | :-------------------------------------- |

655| `signal` | `AbortSignal` | 작업을 중단해야 하는 경우 신호됨 |

656| `suggestions` | [`PermissionUpdate`](#permission-update)`[]` | 사용자가 이 도구에 대해 다시 프롬프트되지 않도록 제안된 권한 업데이트 |

657| `blockedPath` | `string` | 해당하는 경우 권한 요청을 트리거한 파일 경로 |

658| `decisionReason` | `string` | 이 권한 요청이 트리거된 이유를 설명합니다 |

659| `toolUseID` | `string` | 어시스턴트 메시지 내 이 특정 도구 호출의 고유 식별자 |

660| `agentID` | `string` | 서브에이전트 내에서 실행 중인 경우 서브에이전트의 ID |

661 

662### `PermissionResult`

663 

664권한 확인의 결과입니다.

665 

666```typescript theme={null}

667type PermissionResult =

668 | {

669 behavior: "allow";

670 updatedInput?: Record<string, unknown>;

671 updatedPermissions?: PermissionUpdate[];

672 toolUseID?: string;

673 }

674 | {

675 behavior: "deny";

676 message: string;

677 interrupt?: boolean;

678 toolUseID?: string;

679 };

680```

681 

682### `ToolConfig`

683 

684기본 제공 도구 동작의 구성입니다.

685 

686```typescript theme={null}

687type ToolConfig = {

688 askUserQuestion?: {

689 previewFormat?: "markdown" | "html";

690 };

691};

692```

693 

694| 필드 | 타입 | 설명 |

695| :------------------------------ | :--------------------- | :------------------------------------------------------------------------------------------------------------------------------------ |

696| `askUserQuestion.previewFormat` | `'markdown' \| 'html'` | [`AskUserQuestion`](/ko/agent-sdk/user-input#question-format) 옵션의 `preview` 필드를 옵트인하고 콘텐츠 형식을 설정합니다. 설정하지 않으면 Claude는 미리보기를 내보내지 않습니다 |

697 

698### `McpServerConfig`

699 

700MCP 서버의 구성입니다.

701 

702```typescript theme={null}

703type McpServerConfig =

704 | McpStdioServerConfig

705 | McpSSEServerConfig

706 | McpHttpServerConfig

707 | McpSdkServerConfigWithInstance;

708```

709 

710#### `McpStdioServerConfig`

711 

712```typescript theme={null}

713type McpStdioServerConfig = {

714 type?: "stdio";

715 command: string;

716 args?: string[];

717 env?: Record<string, string>;

718};

719```

720 

721#### `McpSSEServerConfig`

722 

723```typescript theme={null}

724type McpSSEServerConfig = {

725 type: "sse";

726 url: string;

727 headers?: Record<string, string>;

728};

729```

730 

731#### `McpHttpServerConfig`

732 

733```typescript theme={null}

734type McpHttpServerConfig = {

735 type: "http";

736 url: string;

737 headers?: Record<string, string>;

738};

739```

740 

741#### `McpSdkServerConfigWithInstance`

742 

743```typescript theme={null}

744type McpSdkServerConfigWithInstance = {

745 type: "sdk";

746 name: string;

747 instance: McpServer;

748};

749```

750 

751#### `McpClaudeAIProxyServerConfig`

752 

753```typescript theme={null}

754type McpClaudeAIProxyServerConfig = {

755 type: "claudeai-proxy";

756 url: string;

757 id: string;

758};

759```

760 

761### `SdkPluginConfig`

762 

763SDK에서 플러그인을 로드하기 위한 구성입니다.

764 

765```typescript theme={null}

766type SdkPluginConfig = {

767 type: "local";

768 path: string;

769};

770```

771 

772| 필드 | 타입 | 설명 |

773| :----- | :-------- | :--------------------------------- |

774| `type` | `'local'` | `'local'`이어야 합니다 (현재 로컬 플러그인만 지원됨) |

775| `path` | `string` | 플러그인 디렉토리의 절대 또는 상대 경로 |

776 

777**예제:**

778 

779```typescript theme={null}

780plugins: [

781 { type: "local", path: "./my-plugin" },

782 { type: "local", path: "/absolute/path/to/plugin" }

783];

784```

785 

786플러그인 생성 및 사용에 대한 완전한 정보는 [플러그인](/ko/agent-sdk/plugins)을 참조하세요.

787 

788## 메시지 타입

789 

790### `SDKMessage`

791 

792쿼리에서 반환된 모든 가능한 메시지의 합집합 타입입니다.

793 

794```typescript theme={null}

795type SDKMessage =

796 | SDKAssistantMessage

797 | SDKUserMessage

798 | SDKUserMessageReplay

799 | SDKResultMessage

800 | SDKSystemMessage

801 | SDKPartialAssistantMessage

802 | SDKCompactBoundaryMessage

803 | SDKStatusMessage

804 | SDKLocalCommandOutputMessage

805 | SDKHookStartedMessage

806 | SDKHookProgressMessage

807 | SDKHookResponseMessage

808 | SDKPluginInstallMessage

809 | SDKToolProgressMessage

810 | SDKAuthStatusMessage

811 | SDKTaskNotificationMessage

812 | SDKTaskStartedMessage

813 | SDKTaskProgressMessage

814 | SDKTaskUpdatedMessage

815 | SDKFilesPersistedEvent

816 | SDKToolUseSummaryMessage

817 | SDKRateLimitEvent

818 | SDKPromptSuggestionMessage;

819```

820 

821### `SDKAssistantMessage`

822 

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

824 

825```typescript theme={null}

826type SDKAssistantMessage = {

827 type: "assistant";

828 uuid: UUID;

829 session_id: string;

830 message: BetaMessage; // Anthropic SDK에서

831 parent_tool_use_id: string | null;

832 error?: SDKAssistantMessageError;

833};

834```

835 

836`message` 필드는 Anthropic SDK의 [`BetaMessage`](https://platform.claude.com/docs/ko/api/messages/create)입니다. `id`, `content`, `model`, `stop_reason` 및 `usage`와 같은 필드를 포함합니다.

837 

838`SDKAssistantMessageError`는 다음 중 하나입니다: `'authentication_failed'`, `'oauth_org_not_allowed'`, `'billing_error'`, `'rate_limit'`, `'invalid_request'`, `'server_error'`, `'max_output_tokens'` 또는 `'unknown'`.

839 

840### `SDKUserMessage`

841 

842사용자 입력 메시지입니다.

843 

844```typescript theme={null}

845type SDKUserMessage = {

846 type: "user";

847 uuid?: UUID;

848 session_id: string;

849 message: MessageParam; // Anthropic SDK에서

850 parent_tool_use_id: string | null;

851 isSynthetic?: boolean;

852 shouldQuery?: boolean;

853 tool_use_result?: unknown;

854 origin?: SDKMessageOrigin;

855};

856```

857 

858`shouldQuery`를 `false`로 설정하여 어시스턴트 턴을 트리거하지 않고 메시지를 트랜스크립트에 추가합니다. 메시지는 보류되고 턴을 트리거하는 다음 사용자 메시지로 병합됩니다. 이를 사용하여 모델 호출을 소비하지 않고 대역 외에서 실행한 명령의 출력과 같은 컨텍스트를 주입합니다.

859 

860### `SDKUserMessageReplay`

861 

862필수 UUID를 포함한 재생된 사용자 메시지입니다.

863 

864```typescript theme={null}

865type SDKUserMessageReplay = {

866 type: "user";

867 uuid: UUID;

868 session_id: string;

869 message: MessageParam;

870 parent_tool_use_id: string | null;

871 isSynthetic?: boolean;

872 tool_use_result?: unknown;

873 origin?: SDKMessageOrigin;

874 isReplay: true;

875};

876```

877 

878### `SDKResultMessage`

879 

880최종 결과 메시지입니다.

881 

882```typescript theme={null}

883type SDKResultMessage =

884 | {

885 type: "result";

886 subtype: "success";

887 uuid: UUID;

888 session_id: string;

889 duration_ms: number;

890 duration_api_ms: number;

891 is_error: boolean;

892 num_turns: number;

893 result: string;

894 stop_reason: string | null;

895 total_cost_usd: number;

896 usage: NonNullableUsage;

897 modelUsage: { [modelName: string]: ModelUsage };

898 permission_denials: SDKPermissionDenial[];

899 structured_output?: unknown;

900 deferred_tool_use?: { id: string; name: string; input: Record<string, unknown> };

901 origin?: SDKMessageOrigin;

902 }

903 | {

904 type: "result";

905 subtype:

906 | "error_max_turns"

907 | "error_during_execution"

908 | "error_max_budget_usd"

909 | "error_max_structured_output_retries";

910 uuid: UUID;

911 session_id: string;

912 duration_ms: number;

913 duration_api_ms: number;

914 is_error: boolean;

915 num_turns: number;

916 stop_reason: string | null;

917 total_cost_usd: number;

918 usage: NonNullableUsage;

919 modelUsage: { [modelName: string]: ModelUsage };

920 permission_denials: SDKPermissionDenial[];

921 errors: string[];

922 origin?: SDKMessageOrigin;

923 };

924```

925 

926`origin` 필드는 이 결과를 트리거한 사용자 메시지의 [`SDKMessageOrigin`](#sdkmessageorigin)을 전달합니다. 백그라운드 작업이 완료되고 SDK가 합성 후속 턴을 주입할 때, 결과 `SDKResultMessage`는 `origin: { kind: "task-notification" }`을 전달합니다. 이 필드를 확인하여 프롬프트에 답하는 결과와 백그라운드 작업 후속을 위해 내보낸 결과를 구분하여 후자를 라우팅하거나 억제할 수 있습니다. 이 필드는 시작 오류와 같이 사용자 턴 이전에 내보낸 결과에는 없습니다.

927 

928`PreToolUse` 훅이 `permissionDecision: "defer"`를 반환할 때, 결과는 `stop_reason: "tool_deferred"`를 가지며 `deferred_tool_use`는 보류 중인 도구의 `id`, `name` 및 `input`을 전달합니다. 이 필드를 읽어 요청을 자신의 UI에 표시한 다음 동일한 `session_id`로 재개하여 계속합니다. 전체 왕복은 [나중을 위해 도구 호출 연기](/ko/hooks#defer-a-tool-call-for-later)를 참조하십시오.

929 

930### `SDKSystemMessage`

931 

932시스템 초기화 메시지입니다.

933 

934```typescript theme={null}

935type SDKSystemMessage = {

936 type: "system";

937 subtype: "init";

938 uuid: UUID;

939 session_id: string;

940 agents?: string[];

941 apiKeySource: ApiKeySource;

942 betas?: string[];

943 claude_code_version: string;

944 cwd: string;

945 tools: string[];

946 mcp_servers: {

947 name: string;

948 status: string;

949 }[];

950 model: string;

951 permissionMode: PermissionMode;

952 slash_commands: string[];

953 output_style: string;

954 skills: string[];

955 plugins: { name: string; path: string }[];

956};

957```

958 

959### `SDKPartialAssistantMessage`

960 

961스트리밍 부분 메시지 (`includePartialMessages`가 true일 때만).

962 

963```typescript theme={null}

964type SDKPartialAssistantMessage = {

965 type: "stream_event";

966 event: BetaRawMessageStreamEvent; // Anthropic SDK에서

967 parent_tool_use_id: string | null;

968 uuid: UUID;

969 session_id: string;

970};

971```

972 

973### `SDKCompactBoundaryMessage`

974 

975대화 압축 경계를 나타내는 메시지입니다.

976 

977```typescript theme={null}

978type SDKCompactBoundaryMessage = {

979 type: "system";

980 subtype: "compact_boundary";

981 uuid: UUID;

982 session_id: string;

983 compact_metadata: {

984 trigger: "manual" | "auto";

985 pre_tokens: number;

986 };

987};

988```

989 

990### `SDKPluginInstallMessage`

991 

992플러그인 설치 진행 이벤트입니다. [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/ko/env-vars)이 설정되면 내보내지므로 Agent SDK 애플리케이션이 첫 번째 턴 전에 마켓플레이스 플러그인 설치를 추적할 수 있습니다. `started` 및 `completed` 상태는 전체 설치를 괄호로 묶습니다. `installed` 및 `failed` 상태는 개별 마켓플레이스를 보고하고 `name`을 포함합니다.

993 

994```typescript theme={null}

995type SDKPluginInstallMessage = {

996 type: "system";

997 subtype: "plugin_install";

998 status: "started" | "installed" | "failed" | "completed";

999 name?: string;

1000 error?: string;

1001 uuid: UUID;

1002 session_id: string;

1003};

1004```

1005 

1006### `SDKPermissionDenial`

1007 

1008거부된 도구 사용에 대한 정보입니다.

1009 

1010```typescript theme={null}

1011type SDKPermissionDenial = {

1012 tool_name: string;

1013 tool_use_id: string;

1014 tool_input: Record<string, unknown>;

1015};

1016```

1017 

1018### `SDKMessageOrigin`

1019 

1020사용자 역할 메시지의 출처입니다. 이는 [`SDKUserMessage`](#sdkusermessage)의 `origin`으로 나타나며 해당 [`SDKResultMessage`](#sdkresultmessage)로 전달되므로 주어진 턴을 트리거한 것을 알 수 있습니다.

1021 

1022```typescript theme={null}

1023type SDKMessageOrigin =

1024 | { kind: "human" }

1025 | { kind: "channel"; server: string }

1026 | { kind: "peer"; from: string; name?: string }

1027 | { kind: "task-notification" }

1028 | { kind: "coordinator" };

1029```

1030 

1031| `kind` | 의미 |

1032| ------------------- | ------------------------------------------------------------------------------------------------- |

1033| `human` | 최종 사용자의 직접 입력입니다. 사용자 메시지에서 없는 `origin`도 인간 입력을 의미합니다. |

1034| `channel` | [채널](/ko/channels)에 도착한 메시지입니다. `server`는 소스 MCP 서버 이름입니다. |

1035| `peer` | `SendMessage`를 통한 다른 에이전트 세션의 메시지입니다. `from`은 발신자 주소이고 `name`은 사용 가능할 때 발신자의 표시 이름입니다. |

1036| `task-notification` | 백그라운드 작업이 완료된 후 주입된 합성 턴입니다. [`SDKTaskNotificationMessage`](#sdktasknotificationmessage)를 참조하십시오. |

1037| `coordinator` | [에이전트 팀](/ko/agent-teams)의 팀 코디네이터로부터의 메시지입니다. |

1038 

1039## 훅 타입

1040 

1041훅 사용에 대한 포괄적인 가이드, 예제 및 일반적인 패턴은 [훅 가이드](/ko/agent-sdk/hooks)를 참조하세요.

1042 

1043### `HookEvent`

1044 

1045사용 가능한 훅 이벤트입니다.

1046 

1047```typescript theme={null}

1048type HookEvent =

1049 | "PreToolUse"

1050 | "PostToolUse"

1051 | "PostToolUseFailure"

1052 | "PostToolBatch"

1053 | "Notification"

1054 | "UserPromptSubmit"

1055 | "SessionStart"

1056 | "SessionEnd"

1057 | "Stop"

1058 | "SubagentStart"

1059 | "SubagentStop"

1060 | "PreCompact"

1061 | "PermissionRequest"

1062 | "Setup"

1063 | "TeammateIdle"

1064 | "TaskCompleted"

1065 | "ConfigChange"

1066 | "WorktreeCreate"

1067 | "WorktreeRemove";

1068```

1069 

1070### `HookCallback`

1071 

1072훅 콜백 함수 타입입니다.

1073 

1074```typescript theme={null}

1075type HookCallback = (

1076 input: HookInput, // 모든 훅 입력 타입의 합집합

1077 toolUseID: string | undefined,

1078 options: { signal: AbortSignal }

1079) => Promise<HookJSONOutput>;

1080```

1081 

1082### `HookCallbackMatcher`

1083 

1084선택적 매처를 포함한 훅 구성입니다.

1085 

1086```typescript theme={null}

1087interface HookCallbackMatcher {

1088 matcher?: string;

1089 hooks: HookCallback[];

1090 timeout?: number; // 이 매처의 모든 훅에 대한 타임아웃 (초)

1091}

1092```

1093 

1094### `HookInput`

1095 

1096모든 훅 입력 타입의 합집합 타입입니다.

1097 

1098```typescript theme={null}

1099type HookInput =

1100 | PreToolUseHookInput

1101 | PostToolUseHookInput

1102 | PostToolUseFailureHookInput

1103 | PostToolBatchHookInput

1104 | NotificationHookInput

1105 | UserPromptSubmitHookInput

1106 | SessionStartHookInput

1107 | SessionEndHookInput

1108 | StopHookInput

1109 | SubagentStartHookInput

1110 | SubagentStopHookInput

1111 | PreCompactHookInput

1112 | PermissionRequestHookInput

1113 | SetupHookInput

1114 | TeammateIdleHookInput

1115 | TaskCompletedHookInput

1116 | ConfigChangeHookInput

1117 | WorktreeCreateHookInput

1118 | WorktreeRemoveHookInput;

1119```

1120 

1121### `BaseHookInput`

1122 

1123모든 훅 입력 타입이 확장하는 기본 인터페이스입니다.

1124 

1125```typescript theme={null}

1126type BaseHookInput = {

1127 session_id: string;

1128 transcript_path: string;

1129 cwd: string;

1130 permission_mode?: string;

1131 agent_id?: string;

1132 agent_type?: string;

1133};

1134```

1135 

1136#### `PreToolUseHookInput`

1137 

1138```typescript theme={null}

1139type PreToolUseHookInput = BaseHookInput & {

1140 hook_event_name: "PreToolUse";

1141 tool_name: string;

1142 tool_input: unknown;

1143 tool_use_id: string;

1144};

1145```

1146 

1147#### `PostToolUseHookInput`

1148 

1149```typescript theme={null}

1150type PostToolUseHookInput = BaseHookInput & {

1151 hook_event_name: "PostToolUse";

1152 tool_name: string;

1153 tool_input: unknown;

1154 tool_response: unknown;

1155 tool_use_id: string;

1156 duration_ms?: number;

1157};

1158```

1159 

1160#### `PostToolUseFailureHookInput`

1161 

1162```typescript theme={null}

1163type PostToolUseFailureHookInput = BaseHookInput & {

1164 hook_event_name: "PostToolUseFailure";

1165 tool_name: string;

1166 tool_input: unknown;

1167 tool_use_id: string;

1168 error: string;

1169 is_interrupt?: boolean;

1170 duration_ms?: number;

1171};

1172```

1173 

1174#### `PostToolBatchHookInput`

1175 

1176배치의 모든 도구 호출이 해결된 후, 다음 모델 요청 전에 한 번 실행됩니다. `tool_response`는 모델이 보는 직렬화된 `tool_result` 콘텐츠를 전달합니다. 형태는 `PostToolUseHookInput`의 구조화된 `Output` 객체와 다릅니다.

1177 

1178```typescript theme={null}

1179type PostToolBatchHookInput = BaseHookInput & {

1180 hook_event_name: "PostToolBatch";

1181 tool_calls: PostToolBatchToolCall[];

1182};

1183 

1184type PostToolBatchToolCall = {

1185 tool_name: string;

1186 tool_input: unknown;

1187 tool_use_id: string;

1188 tool_response?: unknown;

1189};

1190```

1191 

1192#### `NotificationHookInput`

1193 

1194```typescript theme={null}

1195type NotificationHookInput = BaseHookInput & {

1196 hook_event_name: "Notification";

1197 message: string;

1198 title?: string;

1199 notification_type: string;

1200};

1201```

1202 

1203#### `UserPromptSubmitHookInput`

1204 

1205```typescript theme={null}

1206type UserPromptSubmitHookInput = BaseHookInput & {

1207 hook_event_name: "UserPromptSubmit";

1208 prompt: string;

1209};

1210```

1211 

1212#### `SessionStartHookInput`

1213 

1214```typescript theme={null}

1215type SessionStartHookInput = BaseHookInput & {

1216 hook_event_name: "SessionStart";

1217 source: "startup" | "resume" | "clear" | "compact";

1218 agent_type?: string;

1219 model?: string;

1220};

1221```

1222 

1223#### `SessionEndHookInput`

1224 

1225```typescript theme={null}

1226type SessionEndHookInput = BaseHookInput & {

1227 hook_event_name: "SessionEnd";

1228 reason: ExitReason; // EXIT_REASONS 배열의 문자열

1229};

1230```

1231 

1232#### `StopHookInput`

1233 

1234```typescript theme={null}

1235type StopHookInput = BaseHookInput & {

1236 hook_event_name: "Stop";

1237 stop_hook_active: boolean;

1238 last_assistant_message?: string;

1239};

1240```

1241 

1242#### `SubagentStartHookInput`

1243 

1244```typescript theme={null}

1245type SubagentStartHookInput = BaseHookInput & {

1246 hook_event_name: "SubagentStart";

1247 agent_id: string;

1248 agent_type: string;

1249};

1250```

1251 

1252#### `SubagentStopHookInput`

1253 

1254```typescript theme={null}

1255type SubagentStopHookInput = BaseHookInput & {

1256 hook_event_name: "SubagentStop";

1257 stop_hook_active: boolean;

1258 agent_id: string;

1259 agent_transcript_path: string;

1260 agent_type: string;

1261 last_assistant_message?: string;

1262};

1263```

1264 

1265#### `PreCompactHookInput`

1266 

1267```typescript theme={null}

1268type PreCompactHookInput = BaseHookInput & {

1269 hook_event_name: "PreCompact";

1270 trigger: "manual" | "auto";

1271 custom_instructions: string | null;

1272};

1273```

1274 

1275#### `PermissionRequestHookInput`

1276 

1277```typescript theme={null}

1278type PermissionRequestHookInput = BaseHookInput & {

1279 hook_event_name: "PermissionRequest";

1280 tool_name: string;

1281 tool_input: unknown;

1282 permission_suggestions?: PermissionUpdate[];

1283};

1284```

1285 

1286#### `SetupHookInput`

1287 

1288```typescript theme={null}

1289type SetupHookInput = BaseHookInput & {

1290 hook_event_name: "Setup";

1291 trigger: "init" | "maintenance";

1292};

1293```

1294 

1295#### `TeammateIdleHookInput`

1296 

1297```typescript theme={null}

1298type TeammateIdleHookInput = BaseHookInput & {

1299 hook_event_name: "TeammateIdle";

1300 teammate_name: string;

1301 team_name: string;

1302};

1303```

1304 

1305#### `TaskCompletedHookInput`

1306 

1307```typescript theme={null}

1308type TaskCompletedHookInput = BaseHookInput & {

1309 hook_event_name: "TaskCompleted";

1310 task_id: string;

1311 task_subject: string;

1312 task_description?: string;

1313 teammate_name?: string;

1314 team_name?: string;

1315};

1316```

1317 

1318#### `ConfigChangeHookInput`

1319 

1320```typescript theme={null}

1321type ConfigChangeHookInput = BaseHookInput & {

1322 hook_event_name: "ConfigChange";

1323 source:

1324 | "user_settings"

1325 | "project_settings"

1326 | "local_settings"

1327 | "policy_settings"

1328 | "skills";

1329 file_path?: string;

1330};

1331```

1332 

1333#### `WorktreeCreateHookInput`

1334 

1335```typescript theme={null}

1336type WorktreeCreateHookInput = BaseHookInput & {

1337 hook_event_name: "WorktreeCreate";

1338 name: string;

1339};

1340```

1341 

1342#### `WorktreeRemoveHookInput`

1343 

1344```typescript theme={null}

1345type WorktreeRemoveHookInput = BaseHookInput & {

1346 hook_event_name: "WorktreeRemove";

1347 worktree_path: string;

1348};

1349```

1350 

1351### `HookJSONOutput`

1352 

1353훅 반환값입니다.

1354 

1355```typescript theme={null}

1356type HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput;

1357```

1358 

1359#### `AsyncHookJSONOutput`

1360 

1361```typescript theme={null}

1362type AsyncHookJSONOutput = {

1363 async: true;

1364 asyncTimeout?: number;

1365};

1366```

1367 

1368#### `SyncHookJSONOutput`

1369 

1370```typescript theme={null}

1371type SyncHookJSONOutput = {

1372 continue?: boolean;

1373 suppressOutput?: boolean;

1374 stopReason?: string;

1375 decision?: "approve" | "block";

1376 systemMessage?: string;

1377 reason?: string;

1378 hookSpecificOutput?:

1379 | {

1380 hookEventName: "PreToolUse";

1381 permissionDecision?: "allow" | "deny" | "ask" | "defer";

1382 permissionDecisionReason?: string;

1383 updatedInput?: Record<string, unknown>;

1384 additionalContext?: string;

1385 }

1386 | {

1387 hookEventName: "UserPromptSubmit";

1388 additionalContext?: string;

1389 }

1390 | {

1391 hookEventName: "SessionStart";

1392 additionalContext?: string;

1393 }

1394 | {

1395 hookEventName: "Setup";

1396 additionalContext?: string;

1397 }

1398 | {

1399 hookEventName: "SubagentStart";

1400 additionalContext?: string;

1401 }

1402 | {

1403 hookEventName: "PostToolUse";

1404 additionalContext?: string;

1405 updatedToolOutput?: unknown;

1406 /** @deprecated `updatedToolOutput`를 사용하세요. 모든 도구에 대해 작동합니다. */

1407 updatedMCPToolOutput?: unknown;

1408 }

1409 | {

1410 hookEventName: "PostToolUseFailure";

1411 additionalContext?: string;

1412 }

1413 | {

1414 hookEventName: "PostToolBatch";

1415 additionalContext?: string;

1416 }

1417 | {

1418 hookEventName: "Notification";

1419 additionalContext?: string;

1420 }

1421 | {

1422 hookEventName: "PermissionRequest";

1423 decision:

1424 | {

1425 behavior: "allow";

1426 updatedInput?: Record<string, unknown>;

1427 updatedPermissions?: PermissionUpdate[];

1428 }

1429 | {

1430 behavior: "deny";

1431 message?: string;

1432 interrupt?: boolean;

1433 };

1434 };

1435};

1436```

1437 

1438## 도구 입력 타입

1439 

1440모든 기본 제공 Claude Code 도구의 입력 스키마 문서입니다. 이 타입은 `@anthropic-ai/claude-agent-sdk`에서 내보내지며 타입 안전 도구 상호작용에 사용할 수 있습니다.

1441 

1442### `ToolInputSchemas`

1443 

1444모든 도구 입력 타입의 합집합으로, `@anthropic-ai/claude-agent-sdk`에서 내보냅니다.

1445 

1446```typescript theme={null}

1447type ToolInputSchemas =

1448 | AgentInput

1449 | AskUserQuestionInput

1450 | BashInput

1451 | TaskOutputInput

1452 | EnterWorktreeInput

1453 | ExitPlanModeInput

1454 | FileEditInput

1455 | FileReadInput

1456 | FileWriteInput

1457 | GlobInput

1458 | GrepInput

1459 | ListMcpResourcesInput

1460 | McpInput

1461 | MonitorInput

1462 | NotebookEditInput

1463 | ReadMcpResourceInput

1464 | SubscribeMcpResourceInput

1465 | SubscribePollingInput

1466 | TaskStopInput

1467 | TodoWriteInput

1468 | UnsubscribeMcpResourceInput

1469 | UnsubscribePollingInput

1470 | WebFetchInput

1471 | WebSearchInput;

1472```

1473 

1474### Agent

1475 

1476**도구 이름:** `Agent` (이전 `Task`, 여전히 별칭으로 수락됨)

1477 

1478```typescript theme={null}

1479type AgentInput = {

1480 description: string;

1481 prompt: string;

1482 subagent_type: string;

1483 model?: "sonnet" | "opus" | "haiku";

1484 resume?: string;

1485 run_in_background?: boolean;

1486 max_turns?: number;

1487 name?: string;

1488 team_name?: string;

1489 mode?: "acceptEdits" | "bypassPermissions" | "default" | "dontAsk" | "plan";

1490 isolation?: "worktree";

1491};

1492```

1493 

1494복잡한 다단계 작업을 자율적으로 처리할 새로운 에이전트를 시작합니다.

1495 

1496### AskUserQuestion

1497 

1498**도구 이름:** `AskUserQuestion`

1499 

1500```typescript theme={null}

1501type AskUserQuestionInput = {

1502 questions: Array<{

1503 question: string;

1504 header: string;

1505 options: Array<{ label: string; description: string; preview?: string }>;

1506 multiSelect: boolean;

1507 }>;

1508};

1509```

1510 

1511실행 중에 사용자에게 명확히 하는 질문을 합니다. 사용 세부 정보는 [승인 및 사용자 입력 처리](/ko/agent-sdk/user-input#handle-clarifying-questions)를 참조하세요.

1512 

1513### Bash

1514 

1515**도구 이름:** `Bash`

1516 

1517```typescript theme={null}

1518type BashInput = {

1519 command: string;

1520 timeout?: number;

1521 description?: string;

1522 run_in_background?: boolean;

1523 dangerouslyDisableSandbox?: boolean;

1524};

1525```

1526 

1527선택적 타임아웃 및 백그라운드 실행을 포함한 지속적인 셸 세션에서 bash 명령을 실행합니다.

1528 

1529### Monitor

1530 

1531**도구 이름:** `Monitor`

1532 

1533```typescript theme={null}

1534type MonitorInput = {

1535 command: string;

1536 description: string;

1537 timeout_ms?: number;

1538 persistent?: boolean;

1539};

1540```

1541 

1542백그라운드 스크립트를 실행하고 각 stdout 라인을 Claude에 이벤트로 전달하므로 폴링 없이 반응할 수 있습니다. 로그 테일과 같은 세션 길이 감시의 경우 `persistent: true`를 설정합니다. Monitor는 Bash와 동일한 권한 규칙을 따릅니다. [Monitor 도구 참조](/ko/tools-reference#monitor-tool)에서 동작 및 공급자 가용성을 참조하세요.

1543 

1544### TaskOutput

1545 

1546**도구 이름:** `TaskOutput`

1547 

1548```typescript theme={null}

1549type TaskOutputInput = {

1550 task_id: string;

1551 block: boolean;

1552 timeout: number;

1553};

1554```

1555 

1556실행 중이거나 완료된 백그라운드 작업에서 출력을 검색합니다.

1557 

1558### Edit

1559 

1560**도구 이름:** `Edit`

1561 

1562```typescript theme={null}

1563type FileEditInput = {

1564 file_path: string;

1565 old_string: string;

1566 new_string: string;

1567 replace_all?: boolean;

1568};

1569```

1570 

1571파일에서 정확한 문자열 교체를 수행합니다.

1572 

1573### Read

1574 

1575**도구 이름:** `Read`

1576 

1577```typescript theme={null}

1578type FileReadInput = {

1579 file_path: string;

1580 offset?: number;

1581 limit?: number;

1582 pages?: string;

1583};

1584```

1585 

1586텍스트, 이미지, PDF 및 Jupyter 노트북을 포함한 로컬 파일 시스템에서 파일을 읽습니다. PDF 페이지 범위의 경우 `pages`를 사용합니다 (예: `"1-5"`).

1587 

1588### Write

1589 

1590**도구 이름:** `Write`

1591 

1592```typescript theme={null}

1593type FileWriteInput = {

1594 file_path: string;

1595 content: string;

1596};

1597```

1598 

1599로컬 파일 시스템에 파일을 작성하고 존재하면 덮어씁니다.

1600 

1601### Glob

1602 

1603**도구 이름:** `Glob`

1604 

1605```typescript theme={null}

1606type GlobInput = {

1607 pattern: string;

1608 path?: string;

1609};

1610```

1611 

1612모든 코드베이스 크기에서 작동하는 빠른 파일 패턴 매칭입니다.

1613 

1614### Grep

1615 

1616**도구 이름:** `Grep`

1617 

1618```typescript theme={null}

1619type GrepInput = {

1620 pattern: string;

1621 path?: string;

1622 glob?: string;

1623 type?: string;

1624 output_mode?: "content" | "files_with_matches" | "count";

1625 "-i"?: boolean;

1626 "-n"?: boolean;

1627 "-B"?: number;

1628 "-A"?: number;

1629 "-C"?: number;

1630 context?: number;

1631 head_limit?: number;

1632 offset?: number;

1633 multiline?: boolean;

1634};

1635```

1636 

1637정규식 지원을 포함한 ripgrep 기반의 강력한 검색 도구입니다.

1638 

1639### TaskStop

1640 

1641**도구 이름:** `TaskStop`

1642 

1643```typescript theme={null}

1644type TaskStopInput = {

1645 task_id?: string;

1646 shell_id?: string; // 더 이상 사용되지 않음: task_id 사용

1647};

1648```

1649 

1650ID로 실행 중인 백그라운드 작업 또는 셸을 중지합니다.

1651 

1652### NotebookEdit

1653 

1654**도구 이름:** `NotebookEdit`

1655 

1656```typescript theme={null}

1657type NotebookEditInput = {

1658 notebook_path: string;

1659 cell_id?: string;

1660 new_source: string;

1661 cell_type?: "code" | "markdown";

1662 edit_mode?: "replace" | "insert" | "delete";

1663};

1664```

1665 

1666Jupyter 노트북 파일의 셀을 편집합니다.

1667 

1668### WebFetch

1669 

1670**도구 이름:** `WebFetch`

1671 

1672```typescript theme={null}

1673type WebFetchInput = {

1674 url: string;

1675 prompt: string;

1676};

1677```

1678 

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

1680 

1681### WebSearch

1682 

1683**도구 이름:** `WebSearch`

1684 

1685```typescript theme={null}

1686type WebSearchInput = {

1687 query: string;

1688 allowed_domains?: string[];

1689 blocked_domains?: string[];

1690};

1691```

1692 

1693웹을 검색하고 형식화된 결과를 반환합니다.

1694 

1695### TodoWrite

1696 

1697**도구 이름:** `TodoWrite`

1698 

1699```typescript theme={null}

1700type TodoWriteInput = {

1701 todos: Array<{

1702 content: string;

1703 status: "pending" | "in_progress" | "completed";

1704 activeForm: string;

1705 }>;

1706};

1707```

1708 

1709진행 상황을 추적하기 위한 구조화된 작업 목록을 만들고 관리합니다.

1710 

1711### ExitPlanMode

1712 

1713**도구 이름:** `ExitPlanMode`

1714 

1715```typescript theme={null}

1716type ExitPlanModeInput = {

1717 allowedPrompts?: Array<{

1718 tool: "Bash";

1719 prompt: string;

1720 }>;

1721};

1722```

1723 

1724계획 모드를 종료합니다. 선택적으로 계획을 구현하는 데 필요한 프롬프트 기반 권한을 지정합니다.

1725 

1726### ListMcpResources

1727 

1728**도구 이름:** `ListMcpResources`

1729 

1730```typescript theme={null}

1731type ListMcpResourcesInput = {

1732 server?: string;

1733};

1734```

1735 

1736연결된 서버에서 사용 가능한 MCP 리소스를 나열합니다.

1737 

1738### ReadMcpResource

1739 

1740**도구 이름:** `ReadMcpResource`

1741 

1742```typescript theme={null}

1743type ReadMcpResourceInput = {

1744 server: string;

1745 uri: string;

1746};

1747```

1748 

1749서버에서 특정 MCP 리소스를 읽습니다.

1750 

1751### EnterWorktree

1752 

1753**도구 이름:** `EnterWorktree`

1754 

1755```typescript theme={null}

1756type EnterWorktreeInput = {

1757 name?: string;

1758 path?: string;

1759};

1760```

1761 

1762격리된 작업을 위한 임시 git worktree를 만들고 입력합니다. 새 worktree를 만드는 대신 현재 저장소의 기존 worktree로 전환하려면 `path`를 전달합니다. `name` 및 `path`는 상호 배타적입니다.

1763 

1764## 도구 출력 타입

1765 

1766모든 기본 제공 Claude Code 도구의 출력 스키마 문서입니다. 이 타입은 `@anthropic-ai/claude-agent-sdk`에서 내보내지며 각 도구에서 반환된 실제 응답 데이터를 나타냅니다.

1767 

1768### `ToolOutputSchemas`

1769 

1770모든 도구 출력 타입의 합집합입니다.

1771 

1772```typescript theme={null}

1773type ToolOutputSchemas =

1774 | AgentOutput

1775 | AskUserQuestionOutput

1776 | BashOutput

1777 | EnterWorktreeOutput

1778 | ExitPlanModeOutput

1779 | FileEditOutput

1780 | FileReadOutput

1781 | FileWriteOutput

1782 | GlobOutput

1783 | GrepOutput

1784 | ListMcpResourcesOutput

1785 | MonitorOutput

1786 | NotebookEditOutput

1787 | ReadMcpResourceOutput

1788 | TaskStopOutput

1789 | TodoWriteOutput

1790 | WebFetchOutput

1791 | WebSearchOutput;

1792```

1793 

1794### Agent

1795 

1796**도구 이름:** `Agent` (이전 `Task`, 여전히 별칭으로 수락됨)

1797 

1798```typescript theme={null}

1799type AgentOutput =

1800 | {

1801 status: "completed";

1802 agentId: string;

1803 content: Array<{ type: "text"; text: string }>;

1804 totalToolUseCount: number;

1805 totalDurationMs: number;

1806 totalTokens: number;

1807 usage: {

1808 input_tokens: number;

1809 output_tokens: number;

1810 cache_creation_input_tokens: number | null;

1811 cache_read_input_tokens: number | null;

1812 server_tool_use: {

1813 web_search_requests: number;

1814 web_fetch_requests: number;

1815 } | null;

1816 service_tier: ("standard" | "priority" | "batch") | null;

1817 cache_creation: {

1818 ephemeral_1h_input_tokens: number;

1819 ephemeral_5m_input_tokens: number;

1820 } | null;

1821 };

1822 prompt: string;

1823 }

1824 | {

1825 status: "async_launched";

1826 agentId: string;

1827 description: string;

1828 prompt: string;

1829 outputFile: string;

1830 canReadOutputFile?: boolean;

1831 }

1832 | {

1833 status: "sub_agent_entered";

1834 description: string;

1835 message: string;

1836 };

1837```

1838 

1839서브에이전트의 결과를 반환합니다. `status` 필드에서 구분됩니다: 완료된 작업의 경우 `"completed"`, 백그라운드 작업의 경우 `"async_launched"`, 대화형 서브에이전트의 경우 `"sub_agent_entered"`.

1840 

1841### AskUserQuestion

1842 

1843**도구 이름:** `AskUserQuestion`

1844 

1845```typescript theme={null}

1846type AskUserQuestionOutput = {

1847 questions: Array<{

1848 question: string;

1849 header: string;

1850 options: Array<{ label: string; description: string; preview?: string }>;

1851 multiSelect: boolean;

1852 }>;

1853 answers: Record<string, string>;

1854};

1855```

1856 

1857질문과 사용자의 답변을 반환합니다.

1858 

1859### Bash

1860 

1861**도구 이름:** `Bash`

1862 

1863```typescript theme={null}

1864type BashOutput = {

1865 stdout: string;

1866 stderr: string;

1867 rawOutputPath?: string;

1868 interrupted: boolean;

1869 isImage?: boolean;

1870 backgroundTaskId?: string;

1871 backgroundedByUser?: boolean;

1872 dangerouslyDisableSandbox?: boolean;

1873 returnCodeInterpretation?: string;

1874 structuredContent?: unknown[];

1875 persistedOutputPath?: string;

1876 persistedOutputSize?: number;

1877};

1878```

1879 

1880stdout/stderr가 분할된 명령 출력을 반환합니다. 백그라운드 명령은 `backgroundTaskId`를 포함합니다.

1881 

1882### Monitor

1883 

1884**도구 이름:** `Monitor`

1885 

1886```typescript theme={null}

1887type MonitorOutput = {

1888 taskId: string;

1889 timeoutMs: number;

1890 persistent?: boolean;

1891};

1892```

1893 

1894실행 중인 모니터의 백그라운드 작업 ID를 반환합니다. 이 ID를 `TaskStop`과 함께 사용하여 감시를 조기에 취소합니다.

1895 

1896### Edit

1897 

1898**도구 이름:** `Edit`

1899 

1900```typescript theme={null}

1901type FileEditOutput = {

1902 filePath: string;

1903 oldString: string;

1904 newString: string;

1905 originalFile: string;

1906 structuredPatch: Array<{

1907 oldStart: number;

1908 oldLines: number;

1909 newStart: number;

1910 newLines: number;

1911 lines: string[];

1912 }>;

1913 userModified: boolean;

1914 replaceAll: boolean;

1915 gitDiff?: {

1916 filename: string;

1917 status: "modified" | "added";

1918 additions: number;

1919 deletions: number;

1920 changes: number;

1921 patch: string;

1922 };

1923};

1924```

1925 

1926편집 작업의 구조화된 diff를 반환합니다.

1927 

1928### Read

1929 

1930**도구 이름:** `Read`

1931 

1932```typescript theme={null}

1933type FileReadOutput =

1934 | {

1935 type: "text";

1936 file: {

1937 filePath: string;

1938 content: string;

1939 numLines: number;

1940 startLine: number;

1941 totalLines: number;

1942 };

1943 }

1944 | {

1945 type: "image";

1946 file: {

1947 base64: string;

1948 type: "image/jpeg" | "image/png" | "image/gif" | "image/webp";

1949 originalSize: number;

1950 dimensions?: {

1951 originalWidth?: number;

1952 originalHeight?: number;

1953 displayWidth?: number;

1954 displayHeight?: number;

1955 };

1956 };

1957 }

1958 | {

1959 type: "notebook";

1960 file: {

1961 filePath: string;

1962 cells: unknown[];

1963 };

1964 }

1965 | {

1966 type: "pdf";

1967 file: {

1968 filePath: string;

1969 base64: string;

1970 originalSize: number;

1971 };

1972 }

1973 | {

1974 type: "parts";

1975 file: {

1976 filePath: string;

1977 originalSize: number;

1978 count: number;

1979 outputDir: string;

1980 };

1981 };

1982```

1983 

1984파일 타입에 적합한 형식의 파일 콘텐츠를 반환합니다. `type` 필드에서 구분됩니다.

1985 

1986### Write

1987 

1988**도구 이름:** `Write`

1989 

1990```typescript theme={null}

1991type FileWriteOutput = {

1992 type: "create" | "update";

1993 filePath: string;

1994 content: string;

1995 structuredPatch: Array<{

1996 oldStart: number;

1997 oldLines: number;

1998 newStart: number;

1999 newLines: number;

2000 lines: string[];

2001 }>;

2002 originalFile: string | null;

2003 gitDiff?: {

2004 filename: string;

2005 status: "modified" | "added";

2006 additions: number;

2007 deletions: number;

2008 changes: number;

2009 patch: string;

2010 };

2011};

2012```

2013 

2014구조화된 diff 정보를 포함한 쓰기 결과를 반환합니다.

2015 

2016### Glob

2017 

2018**도구 이름:** `Glob`

2019 

2020```typescript theme={null}

2021type GlobOutput = {

2022 durationMs: number;

2023 numFiles: number;

2024 filenames: string[];

2025 truncated: boolean;

2026};

2027```

2028 

2029glob 패턴과 일치하는 파일 경로를 수정 시간별로 정렬하여 반환합니다.

2030 

2031### Grep

2032 

2033**도구 이름:** `Grep`

2034 

2035```typescript theme={null}

2036type GrepOutput = {

2037 mode?: "content" | "files_with_matches" | "count";

2038 numFiles: number;

2039 filenames: string[];

2040 content?: string;

2041 numLines?: number;

2042 numMatches?: number;

2043 appliedLimit?: number;

2044 appliedOffset?: number;

2045};

2046```

2047 

2048검색 결과를 반환합니다. 형태는 `mode`에 따라 다릅니다: 파일 목록, 일치 항목이 있는 콘텐츠 또는 일치 항목 수.

2049 

2050### TaskStop

2051 

2052**도구 이름:** `TaskStop`

2053 

2054```typescript theme={null}

2055type TaskStopOutput = {

2056 message: string;

2057 task_id: string;

2058 task_type: string;

2059 command?: string;

2060};

2061```

2062 

2063백그라운드 작업 중지 후 확인을 반환합니다.

2064 

2065### NotebookEdit

2066 

2067**도구 이름:** `NotebookEdit`

2068 

2069```typescript theme={null}

2070type NotebookEditOutput = {

2071 new_source: string;

2072 cell_id?: string;

2073 cell_type: "code" | "markdown";

2074 language: string;

2075 edit_mode: string;

2076 error?: string;

2077 notebook_path: string;

2078 original_file: string;

2079 updated_file: string;

2080};

2081```

2082 

2083원본 및 업데이트된 파일 콘텐츠를 포함한 노트북 편집 결과를 반환합니다.

2084 

2085### WebFetch

2086 

2087**도구 이름:** `WebFetch`

2088 

2089```typescript theme={null}

2090type WebFetchOutput = {

2091 bytes: number;

2092 code: number;

2093 codeText: string;

2094 result: string;

2095 durationMs: number;

2096 url: string;

2097};

2098```

2099 

2100HTTP 상태 및 메타데이터를 포함한 가져온 콘텐츠를 반환합니다.

2101 

2102### WebSearch

2103 

2104**도구 이름:** `WebSearch`

2105 

2106```typescript theme={null}

2107type WebSearchOutput = {

2108 query: string;

2109 results: Array<

2110 | {

2111 tool_use_id: string;

2112 content: Array<{ title: string; url: string }>;

2113 }

2114 | string

2115 >;

2116 durationSeconds: number;

2117};

2118```

2119 

2120웹에서 검색 결과를 반환합니다.

2121 

2122### TodoWrite

2123 

2124**도구 이름:** `TodoWrite`

2125 

2126```typescript theme={null}

2127type TodoWriteOutput = {

2128 oldTodos: Array<{

2129 content: string;

2130 status: "pending" | "in_progress" | "completed";

2131 activeForm: string;

2132 }>;

2133 newTodos: Array<{

2134 content: string;

2135 status: "pending" | "in_progress" | "completed";

2136 activeForm: string;

2137 }>;

2138};

2139```

2140 

2141이전 및 업데이트된 작업 목록을 반환합니다.

2142 

2143### ExitPlanMode

2144 

2145**도구 이름:** `ExitPlanMode`

2146 

2147```typescript theme={null}

2148type ExitPlanModeOutput = {

2149 plan: string | null;

2150 isAgent: boolean;

2151 filePath?: string;

2152 hasTaskTool?: boolean;

2153 awaitingLeaderApproval?: boolean;

2154 requestId?: string;

2155};

2156```

2157 

2158계획 모드 종료 후 계획 상태를 반환합니다.

2159 

2160### ListMcpResources

2161 

2162**도구 이름:** `ListMcpResources`

2163 

2164```typescript theme={null}

2165type ListMcpResourcesOutput = Array<{

2166 uri: string;

2167 name: string;

2168 mimeType?: string;

2169 description?: string;

2170 server: string;

2171}>;

2172```

2173 

2174사용 가능한 MCP 리소스의 배열을 반환합니다.

2175 

2176### ReadMcpResource

2177 

2178**도구 이름:** `ReadMcpResource`

2179 

2180```typescript theme={null}

2181type ReadMcpResourceOutput = {

2182 contents: Array<{

2183 uri: string;

2184 mimeType?: string;

2185 text?: string;

2186 }>;

2187};

2188```

2189 

2190요청된 MCP 리소스의 콘텐츠를 반환합니다.

2191 

2192### EnterWorktree

2193 

2194**도구 이름:** `EnterWorktree`

2195 

2196```typescript theme={null}

2197type EnterWorktreeOutput = {

2198 worktreePath: string;

2199 worktreeBranch?: string;

2200 message: string;

2201};

2202```

2203 

2204git worktree에 대한 정보를 반환합니다.

2205 

2206## 권한 타입

2207 

2208### `PermissionUpdate`

2209 

2210권한 업데이트 작업입니다.

2211 

2212```typescript theme={null}

2213type PermissionUpdate =

2214 | {

2215 type: "addRules";

2216 rules: PermissionRuleValue[];

2217 behavior: PermissionBehavior;

2218 destination: PermissionUpdateDestination;

2219 }

2220 | {

2221 type: "replaceRules";

2222 rules: PermissionRuleValue[];

2223 behavior: PermissionBehavior;

2224 destination: PermissionUpdateDestination;

2225 }

2226 | {

2227 type: "removeRules";

2228 rules: PermissionRuleValue[];

2229 behavior: PermissionBehavior;

2230 destination: PermissionUpdateDestination;

2231 }

2232 | {

2233 type: "setMode";

2234 mode: PermissionMode;

2235 destination: PermissionUpdateDestination;

2236 }

2237 | {

2238 type: "addDirectories";

2239 directories: string[];

2240 destination: PermissionUpdateDestination;

2241 }

2242 | {

2243 type: "removeDirectories";

2244 directories: string[];

2245 destination: PermissionUpdateDestination;

2246 };

2247```

2248 

2249### `PermissionBehavior`

2250 

2251```typescript theme={null}

2252type PermissionBehavior = "allow" | "deny" | "ask";

2253```

2254 

2255### `PermissionUpdateDestination`

2256 

2257```typescript theme={null}

2258type PermissionUpdateDestination =

2259 | "userSettings" // 전역 사용자 설정

2260 | "projectSettings" // 디렉토리별 프로젝트 설정

2261 | "localSettings" // Gitignored 로컬 설정

2262 | "session" // 현재 세션만

2263 | "cliArg"; // CLI 인수

2264```

2265 

2266### `PermissionRuleValue`

2267 

2268```typescript theme={null}

2269type PermissionRuleValue = {

2270 toolName: string;

2271 ruleContent?: string;

2272};

2273```

2274 

2275## 기타 타입

2276 

2277### `ApiKeySource`

2278 

2279```typescript theme={null}

2280type ApiKeySource = "user" | "project" | "org" | "temporary" | "oauth";

2281```

2282 

2283### `SdkBeta`

2284 

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

2286 

2287```typescript theme={null}

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

2289```

2290 

2291<Warning>

2292 `context-1m-2025-08-07` 베타는 2026년 4월 30일부터 폐기되었습니다. Claude Sonnet 4.5 또는 Sonnet 4와 함께 이 값을 전달하면 효과가 없으며, 표준 200k 토큰 컨텍스트 윈도우를 초과하는 요청은 오류를 반환합니다. 1M 토큰 컨텍스트 윈도우를 사용하려면 [Claude Sonnet 4.6, Claude Opus 4.6 또는 Claude Opus 4.7](https://platform.claude.com/docs/ko/about-claude/models/overview)로 마이그레이션하세요. 이들은 베타 헤더 없이 표준 가격으로 1M 컨텍스트를 포함합니다.

2293</Warning>

2294 

2295### `SlashCommand`

2296 

2297사용 가능한 슬래시 명령에 대한 정보입니다.

2298 

2299```typescript theme={null}

2300type SlashCommand = {

2301 name: string;

2302 description: string;

2303 argumentHint: string;

2304 aliases?: string[];

2305};

2306```

2307 

2308### `ModelInfo`

2309 

2310사용 가능한 모델에 대한 정보입니다.

2311 

2312```typescript theme={null}

2313type ModelInfo = {

2314 value: string;

2315 displayName: string;

2316 description: string;

2317 supportsEffort?: boolean;

2318 supportedEffortLevels?: ("low" | "medium" | "high" | "xhigh" | "max")[];

2319 supportsAdaptiveThinking?: boolean;

2320 supportsFastMode?: boolean;

2321};

2322```

2323 

2324### `AgentInfo`

2325 

2326Agent 도구를 통해 호출할 수 있는 사용 가능한 서브에이전트에 대한 정보입니다.

2327 

2328```typescript theme={null}

2329type AgentInfo = {

2330 name: string;

2331 description: string;

2332 model?: string;

2333};

2334```

2335 

2336| 필드 | 타입 | 설명 |

2337| :------------ | :-------------------- | :------------------------------------------------ |

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

2339| `description` | `string` | 이 에이전트를 사용할 시기에 대한 설명 |

2340| `model` | `string \| undefined` | 이 에이전트가 사용하는 모델 별칭입니다. 생략하면 부모의 모델을 상속합니다 |

2341 

2342### `McpServerStatus`

2343 

2344연결된 MCP 서버의 상태입니다.

2345 

2346```typescript theme={null}

2347type McpServerStatus = {

2348 name: string;

2349 status: "connected" | "failed" | "needs-auth" | "pending" | "disabled";

2350 serverInfo?: {

2351 name: string;

2352 version: string;

2353 };

2354 error?: string;

2355 config?: McpServerStatusConfig;

2356 scope?: string;

2357 tools?: {

2358 name: string;

2359 description?: string;

2360 annotations?: {

2361 readOnly?: boolean;

2362 destructive?: boolean;

2363 openWorld?: boolean;

2364 };

2365 }[];

2366};

2367```

2368 

2369### `McpServerStatusConfig`

2370 

2371`mcpServerStatus()`에서 보고한 MCP 서버의 구성입니다. 이는 모든 MCP 서버 전송 타입의 합집합입니다.

2372 

2373```typescript theme={null}

2374type McpServerStatusConfig =

2375 | McpStdioServerConfig

2376 | McpSSEServerConfig

2377 | McpHttpServerConfig

2378 | McpSdkServerConfig

2379 | McpClaudeAIProxyServerConfig;

2380```

2381 

2382각 전송 타입의 세부 정보는 [`McpServerConfig`](#mcp-server-config)를 참조하세요.

2383 

2384### `AccountInfo`

2385 

2386인증된 사용자의 계정 정보입니다.

2387 

2388```typescript theme={null}

2389type AccountInfo = {

2390 email?: string;

2391 organization?: string;

2392 subscriptionType?: string;

2393 tokenSource?: string;

2394 apiKeySource?: string;

2395};

2396```

2397 

2398### `ModelUsage`

2399 

2400결과 메시지에서 반환된 모델별 사용 통계입니다. `costUSD` 값은 클라이언트 측 추정입니다. [비용 및 사용량 추적](/ko/agent-sdk/cost-tracking)에서 청구 주의 사항을 참조하세요.

2401 

2402```typescript theme={null}

2403type ModelUsage = {

2404 inputTokens: number;

2405 outputTokens: number;

2406 cacheReadInputTokens: number;

2407 cacheCreationInputTokens: number;

2408 webSearchRequests: number;

2409 costUSD: number;

2410 contextWindow: number;

2411 maxOutputTokens: number;

2412};

2413```

2414 

2415### `ConfigScope`

2416 

2417```typescript theme={null}

2418type ConfigScope = "local" | "user" | "project";

2419```

2420 

2421### `NonNullableUsage`

2422 

2423모든 nullable 필드가 non-nullable로 만들어진 [`Usage`](#usage)의 버전입니다.

2424 

2425```typescript theme={null}

2426type NonNullableUsage = {

2427 [K in keyof Usage]: NonNullable<Usage[K]>;

2428};

2429```

2430 

2431### `Usage`

2432 

2433토큰 사용 통계 (`@anthropic-ai/sdk`에서).

2434 

2435```typescript theme={null}

2436type Usage = {

2437 input_tokens: number | null;

2438 output_tokens: number | null;

2439 cache_creation_input_tokens?: number | null;

2440 cache_read_input_tokens?: number | null;

2441};

2442```

2443 

2444### `CallToolResult`

2445 

2446MCP 도구 결과 타입 (`@modelcontextprotocol/sdk/types.js`에서).

2447 

2448```typescript theme={null}

2449type CallToolResult = {

2450 content: Array<{

2451 type: "text" | "image" | "resource";

2452 // 추가 필드는 타입에 따라 다릅니다

2453 }>;

2454 isError?: boolean;

2455};

2456```

2457 

2458### `ThinkingConfig`

2459 

2460Claude의 사고/추론 동작을 제어합니다. 더 이상 사용되지 않는 `maxThinkingTokens`보다 우선합니다.

2461 

2462```typescript theme={null}

2463type ThinkingConfig =

2464 | { type: "adaptive" } // 모델이 언제 그리고 얼마나 추론할지 결정합니다 (Opus 4.6+)

2465 | { type: "enabled"; budgetTokens?: number } // 고정 사고 토큰 예산

2466 | { type: "disabled" }; // 확장된 사고 없음

2467```

2468 

2469### `SpawnedProcess`

2470 

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

2472 

2473```typescript theme={null}

2474interface SpawnedProcess {

2475 stdin: Writable;

2476 stdout: Readable;

2477 readonly killed: boolean;

2478 readonly exitCode: number | null;

2479 kill(signal: NodeJS.Signals): boolean;

2480 on(

2481 event: "exit",

2482 listener: (code: number | null, signal: NodeJS.Signals | null) => void

2483 ): void;

2484 on(event: "error", listener: (error: Error) => void): void;

2485 once(

2486 event: "exit",

2487 listener: (code: number | null, signal: NodeJS.Signals | null) => void

2488 ): void;

2489 once(event: "error", listener: (error: Error) => void): void;

2490 off(

2491 event: "exit",

2492 listener: (code: number | null, signal: NodeJS.Signals | null) => void

2493 ): void;

2494 off(event: "error", listener: (error: Error) => void): void;

2495}

2496```

2497 

2498### `SpawnOptions`

2499 

2500사용자 정의 생성 함수에 전달된 옵션입니다.

2501 

2502```typescript theme={null}

2503interface SpawnOptions {

2504 command: string;

2505 args: string[];

2506 cwd?: string;

2507 env: Record<string, string | undefined>;

2508 signal: AbortSignal;

2509}

2510```

2511 

2512### `McpSetServersResult`

2513 

2514`setMcpServers()` 작업의 결과입니다.

2515 

2516```typescript theme={null}

2517type McpSetServersResult = {

2518 added: string[];

2519 removed: string[];

2520 errors: Record<string, string>;

2521};

2522```

2523 

2524### `RewindFilesResult`

2525 

2526`rewindFiles()` 작업의 결과입니다.

2527 

2528```typescript theme={null}

2529type RewindFilesResult = {

2530 canRewind: boolean;

2531 error?: string;

2532 filesChanged?: string[];

2533 insertions?: number;

2534 deletions?: number;

2535};

2536```

2537 

2538### `SDKStatusMessage`

2539 

2540상태 업데이트 메시지 (예: 압축).

2541 

2542```typescript theme={null}

2543type SDKStatusMessage = {

2544 type: "system";

2545 subtype: "status";

2546 status: "compacting" | null;

2547 permissionMode?: PermissionMode;

2548 uuid: UUID;

2549 session_id: string;

2550};

2551```

2552 

2553### `SDKTaskNotificationMessage`

2554 

2555백그라운드 작업이 완료, 실패 또는 중지될 때의 알림입니다. 백그라운드 작업에는 `run_in_background` Bash 명령, [Monitor](#monitor) 감시 및 백그라운드 서브에이전트가 포함됩니다.

2556 

2557```typescript theme={null}

2558type SDKTaskNotificationMessage = {

2559 type: "system";

2560 subtype: "task_notification";

2561 task_id: string;

2562 tool_use_id?: string;

2563 status: "completed" | "failed" | "stopped";

2564 output_file: string;

2565 summary: string;

2566 usage?: {

2567 total_tokens: number;

2568 tool_uses: number;

2569 duration_ms: number;

2570 };

2571 uuid: UUID;

2572 session_id: string;

2573};

2574```

2575 

2576### `SDKToolUseSummaryMessage`

2577 

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

2579 

2580```typescript theme={null}

2581type SDKToolUseSummaryMessage = {

2582 type: "tool_use_summary";

2583 summary: string;

2584 preceding_tool_use_ids: string[];

2585 uuid: UUID;

2586 session_id: string;

2587};

2588```

2589 

2590### `SDKHookStartedMessage`

2591 

2592훅이 실행을 시작할 때 내보내집니다.

2593 

2594```typescript theme={null}

2595type SDKHookStartedMessage = {

2596 type: "system";

2597 subtype: "hook_started";

2598 hook_id: string;

2599 hook_name: string;

2600 hook_event: string;

2601 uuid: UUID;

2602 session_id: string;

2603};

2604```

2605 

2606### `SDKHookProgressMessage`

2607 

2608훅이 실행 중일 때 stdout/stderr 출력과 함께 내보내집니다.

2609 

2610```typescript theme={null}

2611type SDKHookProgressMessage = {

2612 type: "system";

2613 subtype: "hook_progress";

2614 hook_id: string;

2615 hook_name: string;

2616 hook_event: string;

2617 stdout: string;

2618 stderr: string;

2619 output: string;

2620 uuid: UUID;

2621 session_id: string;

2622};

2623```

2624 

2625### `SDKHookResponseMessage`

2626 

2627훅이 실행을 완료할 때 내보내집니다.

2628 

2629```typescript theme={null}

2630type SDKHookResponseMessage = {

2631 type: "system";

2632 subtype: "hook_response";

2633 hook_id: string;

2634 hook_name: string;

2635 hook_event: string;

2636 output: string;

2637 stdout: string;

2638 stderr: string;

2639 exit_code?: number;

2640 outcome: "success" | "error" | "cancelled";

2641 uuid: UUID;

2642 session_id: string;

2643};

2644```

2645 

2646### `SDKToolProgressMessage`

2647 

2648도구가 실행 중일 때 진행 상황을 나타내기 위해 주기적으로 내보내집니다.

2649 

2650```typescript theme={null}

2651type SDKToolProgressMessage = {

2652 type: "tool_progress";

2653 tool_use_id: string;

2654 tool_name: string;

2655 parent_tool_use_id: string | null;

2656 elapsed_time_seconds: number;

2657 task_id?: string;

2658 uuid: UUID;

2659 session_id: string;

2660};

2661```

2662 

2663### `SDKAuthStatusMessage`

2664 

2665인증 흐름 중에 내보내집니다.

2666 

2667```typescript theme={null}

2668type SDKAuthStatusMessage = {

2669 type: "auth_status";

2670 isAuthenticating: boolean;

2671 output: string[];

2672 error?: string;

2673 uuid: UUID;

2674 session_id: string;

2675};

2676```

2677 

2678### `SDKTaskStartedMessage`

2679 

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

2681 

2682```typescript theme={null}

2683type SDKTaskStartedMessage = {

2684 type: "system";

2685 subtype: "task_started";

2686 task_id: string;

2687 tool_use_id?: string;

2688 description: string;

2689 task_type?: string;

2690 uuid: UUID;

2691 session_id: string;

2692};

2693```

2694 

2695### `SDKTaskProgressMessage`

2696 

2697백그라운드 작업이 실행 중일 때 주기적으로 내보내집니다.

2698 

2699```typescript theme={null}

2700type SDKTaskProgressMessage = {

2701 type: "system";

2702 subtype: "task_progress";

2703 task_id: string;

2704 tool_use_id?: string;

2705 description: string;

2706 usage: {

2707 total_tokens: number;

2708 tool_uses: number;

2709 duration_ms: number;

2710 };

2711 last_tool_name?: string;

2712 uuid: UUID;

2713 session_id: string;

2714};

2715```

2716 

2717### `SDKTaskUpdatedMessage`

2718 

2719백그라운드 작업의 상태가 변경될 때 내보내집니다. 예를 들어 `running`에서 `completed`로 전환될 때입니다. `patch`를 `task_id`로 키가 지정된 로컬 작업 맵에 병합합니다. `end_time` 필드는 Unix epoch 타임스탬프(밀리초)이며 `Date.now()`와 비교할 수 있습니다.

2720 

2721```typescript theme={null}

2722type SDKTaskUpdatedMessage = {

2723 type: "system";

2724 subtype: "task_updated";

2725 task_id: string;

2726 patch: {

2727 status?: "pending" | "running" | "completed" | "failed" | "killed";

2728 description?: string;

2729 end_time?: number;

2730 total_paused_ms?: number;

2731 error?: string;

2732 is_backgrounded?: boolean;

2733 };

2734 uuid: UUID;

2735 session_id: string;

2736};

2737```

2738 

2739### `SDKFilesPersistedEvent`

2740 

2741파일 체크포인트가 디스크에 지속될 때 내보내집니다.

2742 

2743```typescript theme={null}

2744type SDKFilesPersistedEvent = {

2745 type: "system";

2746 subtype: "files_persisted";

2747 files: { filename: string; file_id: string }[];

2748 failed: { filename: string; error: string }[];

2749 processed_at: string;

2750 uuid: UUID;

2751 session_id: string;

2752};

2753```

2754 

2755### `SDKRateLimitEvent`

2756 

2757세션이 속도 제한을 만날 때 내보내집니다.

2758 

2759```typescript theme={null}

2760type SDKRateLimitEvent = {

2761 type: "rate_limit_event";

2762 rate_limit_info: {

2763 status: "allowed" | "allowed_warning" | "rejected";

2764 resetsAt?: number;

2765 utilization?: number;

2766 };

2767 uuid: UUID;

2768 session_id: string;

2769};

2770```

2771 

2772### `SDKLocalCommandOutputMessage`

2773 

2774로컬 슬래시 명령의 출력 (예: `/voice` 또는 `/usage`). 트랜스크립트에서 어시스턴트 스타일 텍스트로 표시됩니다.

2775 

2776```typescript theme={null}

2777type SDKLocalCommandOutputMessage = {

2778 type: "system";

2779 subtype: "local_command_output";

2780 content: string;

2781 uuid: UUID;

2782 session_id: string;

2783};

2784```

2785 

2786### `SDKPromptSuggestionMessage`

2787 

2788`promptSuggestions`가 활성화되었을 때 각 턴 후에 내보내집니다. 예측된 다음 사용자 프롬프트를 포함합니다.

2789 

2790```typescript theme={null}

2791type SDKPromptSuggestionMessage = {

2792 type: "prompt_suggestion";

2793 suggestion: string;

2794 uuid: UUID;

2795 session_id: string;

2796};

2797```

2798 

2799### `AbortError`

2800 

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

2802 

2803```typescript theme={null}

2804class AbortError extends Error {}

2805```

2806 

2807## 샌드박스 구성

2808 

2809### `SandboxSettings`

2810 

2811샌드박스 동작의 구성입니다. 이를 사용하여 명령 샌드박싱을 활성화하고 프로그래밍 방식으로 네트워크 제한을 구성합니다.

2812 

2813```typescript theme={null}

2814type SandboxSettings = {

2815 enabled?: boolean;

2816 autoAllowBashIfSandboxed?: boolean;

2817 excludedCommands?: string[];

2818 allowUnsandboxedCommands?: boolean;

2819 network?: SandboxNetworkConfig;

2820 filesystem?: SandboxFilesystemConfig;

2821 ignoreViolations?: Record<string, string[]>;

2822 enableWeakerNestedSandbox?: boolean;

2823 ripgrep?: { command: string; args?: string[] };

2824};

2825```

2826 

2827| 속성 | 타입 | 기본값 | 설명 |

2828| :-------------------------- | :------------------------------------------------------ | :---------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

2829| `enabled` | `boolean` | `false` | 명령 실행을 위한 샌드박스 모드 활성화 |

2830| `autoAllowBashIfSandboxed` | `boolean` | `true` | 샌드박스가 활성화되었을 때 bash 명령 자동 승인 |

2831| `excludedCommands` | `string[]` | `[]` | 항상 샌드박스 제한을 무시하는 명령 (예: `['docker']`). 이들은 모델 개입 없이 자동으로 샌드박스되지 않은 상태로 실행됩니다 |

2832| `allowUnsandboxedCommands` | `boolean` | `true` | 모델이 샌드박스 외부에서 명령을 실행하도록 요청하도록 허용합니다. `true`일 때 모델은 도구 입력에서 `dangerouslyDisableSandbox`를 설정할 수 있으며, 이는 [권한 시스템](#permissions-fallback-for-unsandboxed-commands)으로 폴백됩니다 |

2833| `network` | [`SandboxNetworkConfig`](#sandbox-network-config) | `undefined` | 네트워크 특정 샌드박스 구성 |

2834| `filesystem` | [`SandboxFilesystemConfig`](#sandbox-filesystem-config) | `undefined` | 읽기/쓰기 제한을 위한 파일 시스템 특정 샌드박스 구성 |

2835| `ignoreViolations` | `Record<string, string[]>` | `undefined` | 무시할 위반 카테고리를 패턴에 매핑합니다 (예: `{ file: ['/tmp/*'], network: ['localhost'] }`) |

2836| `enableWeakerNestedSandbox` | `boolean` | `false` | 호환성을 위해 더 약한 중첩 샌드박스 활성화 |

2837| `ripgrep` | `{ command: string; args?: string[] }` | `undefined` | 샌드박스 환경을 위한 사용자 정의 ripgrep 바이너리 구성 |

2838 

2839#### 사용 예제

2840 

2841```typescript theme={null}

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

2843 

2844for await (const message of query({

2845 prompt: "Build and test my project",

2846 options: {

2847 sandbox: {

2848 enabled: true,

2849 autoAllowBashIfSandboxed: true,

2850 network: {

2851 allowLocalBinding: true

2852 }

2853 }

2854 }

2855})) {

2856 if ("result" in message) console.log(message.result);

2857}

2858```

2859 

2860<Warning>

2861 **Unix 소켓 보안:** `allowUnixSockets` 옵션은 강력한 시스템 서비스에 대한 액세스를 부여할 수 있습니다. 예를 들어 `/var/run/docker.sock`을 허용하면 Docker API를 통해 전체 호스트 시스템 액세스를 효과적으로 부여하여 샌드박스 격리를 무시합니다. 엄격히 필요한 Unix 소켓만 허용하고 각각의 보안 영향을 이해합니다.

2862</Warning>

2863 

2864### `SandboxNetworkConfig`

2865 

2866샌드박스 모드를 위한 네트워크 특정 구성입니다.

2867 

2868```typescript theme={null}

2869type SandboxNetworkConfig = {

2870 allowedDomains?: string[];

2871 deniedDomains?: string[];

2872 allowManagedDomainsOnly?: boolean;

2873 allowLocalBinding?: boolean;

2874 allowUnixSockets?: string[];

2875 allowAllUnixSockets?: boolean;

2876 httpProxyPort?: number;

2877 socksProxyPort?: number;

2878};

2879```

2880 

2881| 속성 | 타입 | 기본값 | 설명 |

2882| :------------------------ | :--------- | :---------- | :-------------------------------------------------------- |

2883| `allowedDomains` | `string[]` | `[]` | 샌드박스된 프로세스가 액세스할 수 있는 도메인 이름 |

2884| `deniedDomains` | `string[]` | `[]` | 샌드박스된 프로세스가 액세스할 수 없는 도메인 이름입니다. `allowedDomains`보다 우선합니다 |

2885| `allowManagedDomainsOnly` | `boolean` | `false` | 네트워크 액세스를 `allowedDomains`의 도메인으로만 제한합니다 |

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

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

2888| `allowAllUnixSockets` | `boolean` | `false` | 모든 Unix 소켓에 대한 액세스 허용 |

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

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

2891 

2892<Note>

2893 기본 제공 샌드박스 프록시는 요청된 호스트명을 기반으로 `allowedDomains`를 적용하며 TLS 트래픽을 종료하거나 검사하지 않으므로 [도메인 프론팅](https://en.wikipedia.org/wiki/Domain_fronting)과 같은 기술이 이를 우회할 수 있습니다. 자세한 내용은 [샌드박싱 보안 제한 사항](/ko/sandboxing#security-limitations)을 참조하고 TLS 종료 프록시 구성에 대해서는 [안전한 배포](/ko/agent-sdk/secure-deployment#traffic-forwarding)를 참조합니다.

2894</Note>

2895 

2896### `SandboxFilesystemConfig`

2897 

2898샌드박스 모드를 위한 파일 시스템 특정 구성입니다.

2899 

2900```typescript theme={null}

2901type SandboxFilesystemConfig = {

2902 allowWrite?: string[];

2903 denyWrite?: string[];

2904 denyRead?: string[];

2905};

2906```

2907 

2908| 속성 | 타입 | 기본값 | 설명 |

2909| :----------- | :--------- | :--- | :------------------- |

2910| `allowWrite` | `string[]` | `[]` | 쓰기 액세스를 허용할 파일 경로 패턴 |

2911| `denyWrite` | `string[]` | `[]` | 쓰기 액세스를 거부할 파일 경로 패턴 |

2912| `denyRead` | `string[]` | `[]` | 읽기 액세스를 거부할 파일 경로 패턴 |

2913 

2914### 샌드박스되지 않은 명령에 대한 권한 폴백

2915 

2916`allowUnsandboxedCommands`가 활성화되었을 때 모델은 도구 입력에서 `dangerouslyDisableSandbox: true`를 설정하여 샌드박스 외부에서 명령을 실행하도록 요청할 수 있습니다. 이러한 요청은 기존 권한 시스템으로 폴백되므로 `canUseTool` 핸들러가 호출되어 사용자 정의 인증 로직을 구현할 수 있습니다.

2917 

2918<Note>

2919 **`excludedCommands` vs `allowUnsandboxedCommands`:**

2920 

2921 * `excludedCommands`: 항상 자동으로 샌드박스를 무시하는 명령의 정적 목록 (예: `['docker']`). 모델은 이에 대한 제어가 없습니다.

2922 * `allowUnsandboxedCommands`: 모델이 도구 입력에서 `dangerouslyDisableSandbox: true`를 설정하여 런타임에 샌드박스되지 않은 실행을 요청하도록 합니다.

2923</Note>

2924 

2925```typescript theme={null}

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

2927 

2928for await (const message of query({

2929 prompt: "Deploy my application",

2930 options: {

2931 sandbox: {

2932 enabled: true,

2933 allowUnsandboxedCommands: true // 모델이 샌드박스되지 않은 실행을 요청할 수 있습니다

2934 },

2935 permissionMode: "default",

2936 canUseTool: async (tool, input) => {

2937 // 모델이 샌드박스를 무시하도록 요청하는지 확인합니다

2938 if (tool === "Bash" && input.dangerouslyDisableSandbox) {

2939 // 모델이 이 명령을 샌드박스 외부에서 실행하도록 요청합니다

2940 console.log(`Unsandboxed command requested: ${input.command}`);

2941 

2942 if (isCommandAuthorized(input.command)) {

2943 return { behavior: "allow" as const, updatedInput: input };

2944 }

2945 return {

2946 behavior: "deny" as const,

2947 message: "Command not authorized for unsandboxed execution"

2948 };

2949 }

2950 return { behavior: "allow" as const, updatedInput: input };

2951 }

2952 }

2953})) {

2954 if ("result" in message) console.log(message.result);

2955}

2956```

2957 

2958이 패턴을 사용하면 다음을 수행할 수 있습니다:

2959 

2960* **모델 요청 감사:** 모델이 샌드박스되지 않은 실행을 요청할 때 로그합니다

2961* **허용 목록 구현:** 특정 명령만 샌드박스되지 않은 상태로 실행하도록 허용합니다

2962* **승인 워크플로우 추가:** 권한 있는 작업에 대한 명시적 인증이 필요합니다

2963 

2964<Warning>

2965 `dangerouslyDisableSandbox: true`로 실행되는 명령은 전체 시스템 액세스 권한이 있습니다. `canUseTool` 핸들러가 이러한 요청을 신중하게 검증하는지 확인합니다.

2966 

2967 `permissionMode`가 `bypassPermissions`로 설정되고 `allowUnsandboxedCommands`가 활성화되면 모델은 승인 프롬프트 없이 샌드박스 외부에서 명령을 자율적으로 실행할 수 있습니다. 이 조합은 모델이 샌드박스 격리를 조용히 탈출하도록 효과적으로 허용합니다.

2968</Warning>

2969 

2970## 참고 항목

2971 

2972* [SDK 개요](/ko/agent-sdk/overview) - 일반 SDK 개념

2973* [Python SDK 참조](/ko/agent-sdk/python) - Python SDK 문서

2974* [CLI 참조](/ko/cli-reference) - 명령줄 인터페이스

2975* [일반적인 워크플로우](/ko/common-workflows) - 단계별 가이드

Details

1> ## Documentation Index

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

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

4 

5# TypeScript SDK V2 인터페이스 (미리보기)

6 

7> 세션 기반 send/stream 패턴을 사용한 간소화된 V2 TypeScript Agent SDK의 미리보기로, 다중 턴 대화를 지원합니다.

8 

9<Warning>

10 V2 인터페이스는 **불안정한 미리보기**입니다. API는 안정화되기 전에 피드백에 따라 변경될 수 있습니다. 세션 포킹과 같은 일부 기능은 [V1 SDK](/ko/agent-sdk/typescript)에서만 사용 가능합니다.

11</Warning>

12 

13V2 Claude Agent TypeScript SDK는 비동기 생성기와 yield 조정의 필요성을 제거합니다. 이를 통해 다중 턴 대화가 더 간단해지며, 턴 전체에서 생성기 상태를 관리하는 대신 각 턴은 별도의 `send()`/`stream()` 사이클입니다. API 표면은 세 가지 개념으로 축소됩니다:

14 

15* `createSession()` / `resumeSession()`: 대화 시작 또는 계속

16* `session.send()`: 메시지 전송

17* `session.stream()`: 응답 받기

18 

19## 설치

20 

21V2 인터페이스는 기존 SDK 패키지에 포함되어 있습니다:

22 

23```bash theme={null}

24npm install @anthropic-ai/claude-agent-sdk

25```

26 

27<Note>

28 SDK는 선택적 종속성으로 플랫폼용 네이티브 Claude Code 바이너리를 번들로 제공하므로 Claude Code를 별도로 설치할 필요가 없습니다.

29</Note>

30 

31## 빠른 시작

32 

33### 일회성 프롬프트

34 

35세션을 유지할 필요가 없는 간단한 단일 턴 쿼리의 경우 `unstable_v2_prompt()`를 사용합니다. 이 예제는 수학 질문을 보내고 답변을 기록합니다:

36 

37```typescript theme={null}

38import { unstable_v2_prompt } from "@anthropic-ai/claude-agent-sdk";

39 

40const result = await unstable_v2_prompt("What is 2 + 2?", {

41 model: "claude-opus-4-7"

42});

43if (result.subtype === "success") {

44 console.log(result.result);

45}

46```

47 

48<details>

49 <summary>V1에서 동일한 작업 보기</summary>

50 

51 ```typescript theme={null}

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

53 

54 const q = query({

55 prompt: "What is 2 + 2?",

56 options: { model: "claude-opus-4-7" }

57 });

58 

59 for await (const msg of q) {

60 if (msg.type === "result" && msg.subtype === "success") {

61 console.log(msg.result);

62 }

63 }

64 ```

65</details>

66 

67### 기본 세션

68 

69단일 프롬프트를 넘어서는 상호작용의 경우 세션을 생성합니다. V2는 전송과 스트리밍을 별개의 단계로 분리합니다:

70 

71* `send()`는 메시지를 전달합니다

72* `stream()`은 응답을 스트리밍합니다

73 

74이러한 명시적 분리를 통해 턴 사이에 로직을 추가하기가 더 쉬워집니다(예: 후속 메시지를 보내기 전에 응답 처리).

75 

76아래 예제는 세션을 생성하고, Claude에 "Hello!"를 보내고, 텍스트 응답을 출력합니다. 블록이 종료될 때 세션을 자동으로 닫기 위해 [`await using`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management)(TypeScript 5.2+)을 사용합니다. `session.close()`를 수동으로 호출할 수도 있습니다.

77 

78```typescript theme={null}

79import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

80 

81await using session = unstable_v2_createSession({

82 model: "claude-opus-4-7"

83});

84 

85await session.send("Hello!");

86for await (const msg of session.stream()) {

87 // Filter for assistant messages to get human-readable output

88 if (msg.type === "assistant") {

89 const text = msg.message.content

90 .filter((block) => block.type === "text")

91 .map((block) => block.text)

92 .join("");

93 console.log(text);

94 }

95}

96```

97 

98<details>

99 <summary>V1에서 동일한 작업 보기</summary>

100 

101 V1에서는 입력과 출력이 모두 단일 비동기 생성기를 통해 흐릅니다. 기본 프롬프트의 경우 유사해 보이지만 다중 턴 로직을 추가하려면 입력 생성기를 사용하도록 재구성해야 합니다.

102 

103 ```typescript theme={null}

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

105 

106 const q = query({

107 prompt: "Hello!",

108 options: { model: "claude-opus-4-7" }

109 });

110 

111 for await (const msg of q) {

112 if (msg.type === "assistant") {

113 const text = msg.message.content

114 .filter((block) => block.type === "text")

115 .map((block) => block.text)

116 .join("");

117 console.log(text);

118 }

119 }

120 ```

121</details>

122 

123### 다중 턴 대화

124 

125세션은 여러 교환 전체에서 컨텍스트를 유지합니다. 대화를 계속하려면 동일한 세션에서 `send()`를 다시 호출합니다. Claude는 이전 턴을 기억합니다.

126 

127이 예제는 수학 질문을 한 다음 이전 답변을 참조하는 후속 질문을 합니다:

128 

129```typescript theme={null}

130import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

131 

132await using session = unstable_v2_createSession({

133 model: "claude-opus-4-7"

134});

135 

136// Turn 1

137await session.send("What is 5 + 3?");

138for await (const msg of session.stream()) {

139 // Filter for assistant messages to get human-readable output

140 if (msg.type === "assistant") {

141 const text = msg.message.content

142 .filter((block) => block.type === "text")

143 .map((block) => block.text)

144 .join("");

145 console.log(text);

146 }

147}

148 

149// Turn 2

150await session.send("Multiply that by 2");

151for await (const msg of session.stream()) {

152 if (msg.type === "assistant") {

153 const text = msg.message.content

154 .filter((block) => block.type === "text")

155 .map((block) => block.text)

156 .join("");

157 console.log(text);

158 }

159}

160```

161 

162<details>

163 <summary>V1에서 동일한 작업 보기</summary>

164 

165 ```typescript theme={null}

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

167 

168 // Must create an async iterable to feed messages

169 async function* createInputStream() {

170 yield {

171 type: "user",

172 session_id: "",

173 message: { role: "user", content: [{ type: "text", text: "What is 5 + 3?" }] },

174 parent_tool_use_id: null

175 };

176 // Must coordinate when to yield next message

177 yield {

178 type: "user",

179 session_id: "",

180 message: { role: "user", content: [{ type: "text", text: "Multiply by 2" }] },

181 parent_tool_use_id: null

182 };

183 }

184 

185 const q = query({

186 prompt: createInputStream(),

187 options: { model: "claude-opus-4-7" }

188 });

189 

190 for await (const msg of q) {

191 if (msg.type === "assistant") {

192 const text = msg.message.content

193 .filter((block) => block.type === "text")

194 .map((block) => block.text)

195 .join("");

196 console.log(text);

197 }

198 }

199 ```

200</details>

201 

202### 세션 재개

203 

204이전 상호작용에서 세션 ID가 있는 경우 나중에 재개할 수 있습니다. 이는 장기 실행 워크플로우나 애플리케이션 재시작 전체에서 대화를 유지해야 할 때 유용합니다.

205 

206이 예제는 세션을 생성하고, ID를 저장하고, 닫은 다음 대화를 재개합니다:

207 

208```typescript theme={null}

209import {

210 unstable_v2_createSession,

211 unstable_v2_resumeSession,

212 type SDKMessage

213} from "@anthropic-ai/claude-agent-sdk";

214 

215// Helper to extract text from assistant messages

216function getAssistantText(msg: SDKMessage): string | null {

217 if (msg.type !== "assistant") return null;

218 return msg.message.content

219 .filter((block) => block.type === "text")

220 .map((block) => block.text)

221 .join("");

222}

223 

224// Create initial session and have a conversation

225const session = unstable_v2_createSession({

226 model: "claude-opus-4-7"

227});

228 

229await session.send("Remember this number: 42");

230 

231// Get the session ID from any received message

232let sessionId: string | undefined;

233for await (const msg of session.stream()) {

234 sessionId = msg.session_id;

235 const text = getAssistantText(msg);

236 if (text) console.log("Initial response:", text);

237}

238 

239console.log("Session ID:", sessionId);

240session.close();

241 

242// Later: resume the session using the stored ID

243await using resumedSession = unstable_v2_resumeSession(sessionId!, {

244 model: "claude-opus-4-7"

245});

246 

247await resumedSession.send("What number did I ask you to remember?");

248for await (const msg of resumedSession.stream()) {

249 const text = getAssistantText(msg);

250 if (text) console.log("Resumed response:", text);

251}

252```

253 

254<details>

255 <summary>V1에서 동일한 작업 보기</summary>

256 

257 ```typescript theme={null}

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

259 

260 // Create initial session

261 const initialQuery = query({

262 prompt: "Remember this number: 42",

263 options: { model: "claude-opus-4-7" }

264 });

265 

266 // Get session ID from any message

267 let sessionId: string | undefined;

268 for await (const msg of initialQuery) {

269 sessionId = msg.session_id;

270 if (msg.type === "assistant") {

271 const text = msg.message.content

272 .filter((block) => block.type === "text")

273 .map((block) => block.text)

274 .join("");

275 console.log("Initial response:", text);

276 }

277 }

278 

279 console.log("Session ID:", sessionId);

280 

281 // Later: resume the session

282 const resumedQuery = query({

283 prompt: "What number did I ask you to remember?",

284 options: {

285 model: "claude-opus-4-7",

286 resume: sessionId

287 }

288 });

289 

290 for await (const msg of resumedQuery) {

291 if (msg.type === "assistant") {

292 const text = msg.message.content

293 .filter((block) => block.type === "text")

294 .map((block) => block.text)

295 .join("");

296 console.log("Resumed response:", text);

297 }

298 }

299 ```

300</details>

301 

302### 정리

303 

304세션은 수동으로 닫거나 [`await using`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management)을 사용하여 자동으로 닫을 수 있습니다. 이는 자동 리소스 정리를 위한 TypeScript 5.2+ 기능입니다. 이전 TypeScript 버전을 사용 중이거나 호환성 문제가 발생하면 대신 수동 정리를 사용합니다.

305 

306**자동 정리 (TypeScript 5.2+):**

307 

308```typescript theme={null}

309import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

310 

311await using session = unstable_v2_createSession({

312 model: "claude-opus-4-7"

313});

314// Session closes automatically when the block exits

315```

316 

317**수동 정리:**

318 

319```typescript theme={null}

320import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

321 

322const session = unstable_v2_createSession({

323 model: "claude-opus-4-7"

324});

325// ... use the session ...

326session.close();

327```

328 

329## API 참조

330 

331### `unstable_v2_createSession()`

332 

333다중 턴 대화를 위한 새 세션을 생성합니다.

334 

335```typescript theme={null}

336function unstable_v2_createSession(options: {

337 model: string;

338 // Additional options supported

339}): SDKSession;

340```

341 

342### `unstable_v2_resumeSession()`

343 

344ID로 기존 세션을 재개합니다.

345 

346```typescript theme={null}

347function unstable_v2_resumeSession(

348 sessionId: string,

349 options: {

350 model: string;

351 // Additional options supported

352 }

353): SDKSession;

354```

355 

356### `unstable_v2_prompt()`

357 

358단일 턴 쿼리를 위한 일회성 편의 함수입니다.

359 

360```typescript theme={null}

361function unstable_v2_prompt(

362 prompt: string,

363 options: {

364 model: string;

365 // Additional options supported

366 }

367): Promise<SDKResultMessage>;

368```

369 

370### SDKSession 인터페이스

371 

372```typescript theme={null}

373interface SDKSession {

374 readonly sessionId: string;

375 send(message: string | SDKUserMessage): Promise<void>;

376 stream(): AsyncGenerator<SDKMessage, void>;

377 close(): void;

378}

379```

380 

381## 기능 가용성

382 

383모든 V1 기능이 V2에서 아직 사용 가능한 것은 아닙니다. 다음은 [V1 SDK](/ko/agent-sdk/typescript)를 사용해야 합니다:

384 

385* 세션 포킹 (`forkSession` 옵션)

386* 일부 고급 스트리밍 입력 패턴

387 

388## 피드백

389 

390V2 인터페이스가 안정화되기 전에 피드백을 공유합니다. [GitHub Issues](https://github.com/anthropics/claude-code/issues)를 통해 문제와 제안을 보고합니다.

391 

392## 참고 항목

393 

394* [TypeScript SDK 참조 (V1)](/ko/agent-sdk/typescript) - 전체 V1 SDK 문서

395* [SDK 개요](/ko/agent-sdk/overview) - 일반 SDK 개념

396* [GitHub의 V2 예제](https://github.com/anthropics/claude-agent-sdk-demos/tree/main/hello-world-v2) - 작동하는 코드 예제

agent-teams.md +424 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Claude Code 세션 팀 조율하기

6 

7> 공유 작업, 에이전트 간 메시징, 중앙 집중식 관리를 통해 함께 작동하는 여러 Claude Code 인스턴스를 조율합니다.

8 

9<Warning>

10 에이전트 팀은 실험적이며 기본적으로 비활성화되어 있습니다. [settings.json](/ko/settings)이나 환경에 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`를 추가하여 활성화합니다. 에이전트 팀은 세션 재개, 작업 조율, 종료 동작 관련 [알려진 제한 사항](#limitations)이 있습니다.

11</Warning>

12 

13에이전트 팀을 사용하면 함께 작동하는 여러 Claude Code 인스턴스를 조율할 수 있습니다. 한 세션이 팀 리더 역할을 하여 작업을 조율하고, 작업을 할당하며, 결과를 종합합니다. 팀원들은 독립적으로 작동하며, 각각 자신의 컨텍스트 윈도우에서 작동하고, 서로 직접 통신합니다.

14 

15단일 세션 내에서 실행되고 메인 에이전트에게만 보고할 수 있는 [subagents](/ko/sub-agents)와 달리, 리더를 거치지 않고 개별 팀원과 직접 상호작용할 수도 있습니다.

16 

17<Note>

18 에이전트 팀은 Claude Code v2.1.32 이상이 필요합니다. `claude --version`으로 버전을 확인합니다.

19</Note>

20 

21이 페이지에서 다루는 내용:

22 

23* [에이전트 팀을 사용할 때](#when-to-use-agent-teams), 최적의 사용 사례 및 subagents와의 비교 포함

24* [팀 시작하기](#start-your-first-agent-team)

25* [팀원 제어하기](#control-your-agent-team), 표시 모드, 작업 할당, 위임 포함

26* [병렬 작업 모범 사례](#best-practices)

27 

28## 에이전트 팀을 사용할 때

29 

30에이전트 팀은 병렬 탐색이 실질적인 가치를 더하는 작업에 가장 효과적입니다. 전체 시나리오는 [사용 사례 예시](#use-case-examples)를 참조합니다. 가장 강력한 사용 사례는 다음과 같습니다:

31 

32* **연구 및 검토**: 여러 팀원이 문제의 다양한 측면을 동시에 조사한 후 서로의 발견을 공유하고 도전할 수 있습니다

33* **새로운 모듈 또는 기능**: 팀원들이 각각 별도의 부분을 소유하면서 서로 간섭하지 않을 수 있습니다

34* **경쟁하는 가설로 디버깅하기**: 팀원들이 다양한 이론을 병렬로 테스트하고 더 빠르게 답에 수렴합니다

35* **교차 계층 조율**: 프론트엔드, 백엔드, 테스트에 걸친 변경 사항으로, 각각 다른 팀원이 소유합니다

36 

37에이전트 팀은 조율 오버헤드를 추가하고 단일 세션보다 훨씬 더 많은 토큰을 사용합니다. 팀원들이 독립적으로 작동할 수 있을 때 가장 잘 작동합니다. 순차적 작업, 동일 파일 편집, 또는 많은 종속성이 있는 작업의 경우 단일 세션이나 [subagents](/ko/sub-agents)가 더 효과적입니다.

38 

39### subagents와 비교

40 

41에이전트 팀과 [subagents](/ko/sub-agents) 모두 작업을 병렬화할 수 있지만, 다르게 작동합니다. 워커들이 서로 통신해야 하는지 여부에 따라 선택합니다:

42 

43<Frame caption="Subagents는 결과만 메인 에이전트에게 보고하고 서로 대화하지 않습니다. 에이전트 팀에서는 팀원들이 작업 목록을 공유하고, 작업을 요청하며, 서로 직접 통신합니다.">

44 <img src="https://mintcdn.com/claude-code/nsvRFSDNfpSU5nT7/images/subagents-vs-agent-teams-light.png?fit=max&auto=format&n=nsvRFSDNfpSU5nT7&q=85&s=2f8db9b4f3705dd3ab931fbe2d96e42a" className="dark:hidden" alt="Subagent와 에이전트 팀 아키텍처를 비교하는 다이어그램입니다. Subagents는 메인 에이전트에 의해 생성되고, 작업을 수행하며, 결과를 보고합니다. 에이전트 팀은 공유 작업 목록을 통해 조율되며, 팀원들이 서로 직접 통신합니다." width="4245" height="1615" data-path="images/subagents-vs-agent-teams-light.png" />

45 

46 <img src="https://mintcdn.com/claude-code/nsvRFSDNfpSU5nT7/images/subagents-vs-agent-teams-dark.png?fit=max&auto=format&n=nsvRFSDNfpSU5nT7&q=85&s=d573a037540f2ada6a9ae7d8285b46fd" className="hidden dark:block" alt="Subagent와 에이전트 팀 아키텍처를 비교하는 다이어그램입니다. Subagents는 메인 에이전트에 의해 생성되고, 작업을 수행하며, 결과를 보고합니다. 에이전트 팀은 공유 작업 목록을 통해 조율되며, 팀원들이 서로 직접 통신합니다." width="4245" height="1615" data-path="images/subagents-vs-agent-teams-dark.png" />

47</Frame>

48 

49| | Subagents | 에이전트 팀 |

50| :-------- | :-------------------------- | :------------------------ |

51| **컨텍스트** | 자신의 컨텍스트 윈도우; 결과는 호출자에게 반환됨 | 자신의 컨텍스트 윈도우; 완전히 독립적 |

52| **통신** | 메인 에이전트에게만 결과 보고 | 팀원들이 서로 직접 메시지 전송 |

53| **조율** | 메인 에이전트가 모든 작업 관리 | 자체 조율을 통한 공유 작업 목록 |

54| **최적 용도** | 결과만 중요한 집중된 작업 | 논의와 협업이 필요한 복잡한 작업 |

55| **토큰 비용** | 낮음: 결과가 메인 컨텍스트로 요약됨 | 높음: 각 팀원이 별도의 Claude 인스턴스 |

56 

57결과를 보고하는 빠르고 집중된 워커가 필요할 때는 subagents를 사용합니다. 팀원들이 발견을 공유하고, 서로 도전하며, 자체적으로 조율해야 할 때는 에이전트 팀을 사용합니다.

58 

59## 에이전트 팀 활성화

60 

61에이전트 팀은 기본적으로 비활성화되어 있습니다. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` 환경 변수를 `1`로 설정하여 활성화합니다. 셸 환경이나 [settings.json](/ko/settings)을 통해 설정할 수 있습니다:

62 

63```json settings.json theme={null}

64{

65 "env": {

66 "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"

67 }

68}

69```

70 

71## 첫 번째 에이전트 팀 시작하기

72 

73에이전트 팀을 활성화한 후, Claude에게 에이전트 팀을 만들도록 요청하고 자연어로 원하는 작업과 팀 구조를 설명합니다. Claude는 팀을 만들고, 팀원들을 생성하며, 프롬프트에 따라 작업을 조율합니다.

74 

75이 예시는 세 가지 역할이 독립적이고 서로를 기다리지 않고 문제를 탐색할 수 있기 때문에 잘 작동합니다:

76 

77```text theme={null}

78I'm designing a CLI tool that helps developers track TODO comments across

79their codebase. Create an agent team to explore this from different angles: one

80teammate on UX, one on technical architecture, one playing devil's advocate.

81```

82 

83그러면 Claude는 [공유 작업 목록](/ko/interactive-mode#task-list)을 가진 팀을 만들고, 각 관점에 대한 팀원들을 생성하며, 문제를 탐색하고, 발견을 종합하며, 완료되었을 때 [팀을 정리](#clean-up-the-team)하려고 시도합니다.

84 

85리더의 터미널은 모든 팀원과 그들이 작업 중인 내용을 나열합니다. Shift+Down을 사용하여 팀원들을 순환하고 직접 메시지를 보냅니다. 마지막 팀원 이후, Shift+Down은 리더로 돌아갑니다.

86 

87각 팀원이 자신의 분할 창에 있기를 원하면 [표시 모드 선택](#choose-a-display-mode)을 참조합니다.

88 

89## 에이전트 팀 제어하기

90 

91리더에게 자연어로 원하는 것을 말합니다. 지시에 따라 팀 조율, 작업 할당, 위임을 처리합니다.

92 

93### 표시 모드 선택

94 

95에이전트 팀은 두 가지 표시 모드를 지원합니다:

96 

97* **In-process**: 모든 팀원이 메인 터미널 내에서 실행됩니다. Shift+Down을 사용하여 팀원들을 순환하고 입력하여 직접 메시지를 보냅니다. 모든 터미널에서 작동하며 추가 설정이 필요하지 않습니다.

98* **분할 창**: 각 팀원이 자신의 창을 가집니다. 모든 사람의 출력을 한 번에 볼 수 있고 창을 클릭하여 직접 상호작용할 수 있습니다. tmux 또는 iTerm2가 필요합니다.

99 

100<Note>

101 `tmux`는 특정 운영 체제에서 알려진 제한 사항이 있으며 전통적으로 macOS에서 가장 잘 작동합니다. iTerm2에서 `tmux -CC`를 사용하는 것이 `tmux`로의 권장 진입점입니다.

102</Note>

103 

104기본값은 `"auto"`이며, 이미 tmux 세션 내에서 실행 중이면 분할 창을 사용하고, 그렇지 않으면 in-process를 사용합니다. `"tmux"` 설정은 분할 창 모드를 활성화하고 터미널에 따라 tmux 또는 iTerm2를 사용할지 자동으로 감지합니다. 재정의하려면 `~/.claude/settings.json`에서 [`teammateMode`](/ko/settings#available-settings)를 설정합니다:

105 

106```json theme={null}

107{

108 "teammateMode": "in-process"

109}

110```

111 

112단일 세션에 대해 in-process 모드를 강제하려면 플래그로 전달합니다:

113 

114```bash theme={null}

115claude --teammate-mode in-process

116```

117 

118분할 창 모드는 [tmux](https://github.com/tmux/tmux/wiki) 또는 [`it2` CLI](https://github.com/mkusaka/it2)가 있는 iTerm2가 필요합니다. 수동으로 설치하려면:

119 

120* **tmux**: 시스템의 패키지 관리자를 통해 설치합니다. 플랫폼별 지침은 [tmux wiki](https://github.com/tmux/tmux/wiki/Installing)를 참조합니다.

121* **iTerm2**: [`it2` CLI](https://github.com/mkusaka/it2)를 설치한 후, **iTerm2 → Settings → General → Magic → Enable Python API**에서 Python API를 활성화합니다.

122 

123### 팀원 및 모델 지정

124 

125Claude는 작업에 따라 생성할 팀원의 수를 결정하거나, 정확히 원하는 것을 지정할 수 있습니다:

126 

127```text theme={null}

128Create a team with 4 teammates to refactor these modules in parallel.

129Use Sonnet for each teammate.

130```

131 

132### 팀원을 위한 계획 승인 요구

133 

134복잡하거나 위험한 작업의 경우, 팀원들이 구현하기 전에 계획하도록 요구할 수 있습니다. 팀원은 리더가 접근 방식을 승인할 때까지 읽기 전용 계획 모드에서 작동합니다:

135 

136```text theme={null}

137Spawn an architect teammate to refactor the authentication module.

138Require plan approval before they make any changes.

139```

140 

141팀원이 계획을 마치면, 리더에게 계획 승인 요청을 보냅니다. 리더는 계획을 검토하고 승인하거나 피드백과 함께 거부합니다. 거부되면, 팀원은 계획 모드에 머물러 피드백에 따라 수정하고 다시 제출합니다. 승인되면, 팀원은 계획 모드를 종료하고 구현을 시작합니다.

142 

143리더는 자율적으로 승인 결정을 내립니다. 리더의 판단에 영향을 미치려면, 프롬프트에 "테스트 커버리지를 포함하는 계획만 승인" 또는 "데이터베이스 스키마를 수정하는 계획 거부"와 같은 기준을 제공합니다.

144 

145### 팀원과 직접 대화하기

146 

147각 팀원은 완전하고 독립적인 Claude Code 세션입니다. 모든 팀원에게 직접 메시지를 보내 추가 지시를 제공하고, 후속 질문을 하거나, 접근 방식을 재지정할 수 있습니다.

148 

149* **In-process 모드**: Shift+Down을 사용하여 팀원들을 순환한 후 입력하여 메시지를 보냅니다. Enter를 눌러 팀원의 세션을 보고, Escape를 눌러 현재 턴을 중단합니다. Ctrl+T를 눌러 작업 목록을 전환합니다.

150* **분할 창 모드**: 팀원의 창을 클릭하여 세션과 직접 상호작용합니다. 각 팀원은 자신의 터미널의 전체 보기를 가집니다.

151 

152### 작업 할당 및 요청

153 

154공유 작업 목록은 팀 전체의 작업을 조율합니다. 리더는 작업을 만들고 팀원들이 이를 처리합니다. 작업은 세 가지 상태를 가집니다: 대기 중, 진행 중, 완료됨. 작업은 다른 작업에 종속될 수도 있습니다: 미해결 종속성이 있는 대기 중인 작업은 해당 종속성이 완료될 때까지 요청할 수 없습니다.

155 

156리더는 작업을 명시적으로 할당하거나 팀원들이 자체 요청할 수 있습니다:

157 

158* **리더 할당**: 리더에게 어느 작업을 어느 팀원에게 줄지 말합니다

159* **자체 요청**: 작업을 마친 후, 팀원은 다음 미할당, 미차단 작업을 자체적으로 선택합니다

160 

161작업 요청은 파일 잠금을 사용하여 여러 팀원이 동시에 동일한 작업을 요청하려고 할 때 경합 조건을 방지합니다.

162 

163### 팀원 종료하기

164 

165팀원의 세션을 우아하게 종료하려면:

166 

167```text theme={null}

168Ask the researcher teammate to shut down

169```

170 

171리더는 종료 요청을 보냅니다. 팀원은 승인하여 우아하게 종료하거나 설명과 함께 거부할 수 있습니다.

172 

173### 팀 정리하기

174 

175완료되었을 때, 리더에게 정리하도록 요청합니다:

176 

177```text theme={null}

178Clean up the team

179```

180 

181이는 공유 팀 리소스를 제거합니다. 리더가 정리를 실행할 때, 활성 팀원을 확인하고 여전히 실행 중이면 실패하므로 먼저 종료합니다.

182 

183<Warning>

184 항상 리더를 사용하여 정리합니다. 팀원들은 정리를 실행하면 안 됩니다. 팀원의 팀 컨텍스트가 올바르게 해결되지 않아 리소스가 일관성 없는 상태로 남을 수 있기 때문입니다.

185</Warning>

186 

187### hooks로 품질 게이트 적용

188 

189[hooks](/ko/hooks)를 사용하여 팀원들이 작업을 마치거나 작업이 생성되거나 완료될 때 규칙을 적용합니다:

190 

191* [`TeammateIdle`](/ko/hooks#teammateidle): 팀원이 유휴 상태가 되려고 할 때 실행됩니다. 종료 코드 2로 종료하여 피드백을 보내고 팀원을 계속 작동하게 합니다.

192* [`TaskCreated`](/ko/hooks#taskcreated): 작업이 생성될 때 실행됩니다. 종료 코드 2로 종료하여 생성을 방지하고 피드백을 보냅니다.

193* [`TaskCompleted`](/ko/hooks#taskcompleted): 작업이 완료로 표시될 때 실행됩니다. 종료 코드 2로 종료하여 완료를 방지하고 피드백을 보냅니다.

194 

195## 에이전트 팀이 어떻게 작동하는지

196 

197이 섹션은 에이전트 팀 뒤의 아키텍처와 메커니즘을 다룹니다. 사용을 시작하려면 위의 [에이전트 팀 제어하기](#control-your-agent-team)를 참조합니다.

198 

199### Claude가 에이전트 팀을 시작하는 방법

200 

201에이전트 팀이 시작되는 두 가지 방법이 있습니다:

202 

203* **팀 요청**: 병렬 작업의 이점이 있는 작업을 제공하고 명시적으로 에이전트 팀을 요청합니다. Claude는 지시에 따라 팀을 만듭니다.

204* **Claude가 팀 제안**: Claude가 작업이 병렬 작업의 이점이 있다고 판단하면, 팀 생성을 제안할 수 있습니다. 진행하기 전에 확인합니다.

205 

206두 경우 모두 제어 권한을 유지합니다. Claude는 승인 없이 팀을 만들지 않습니다.

207 

208### 아키텍처

209 

210에이전트 팀은 다음으로 구성됩니다:

211 

212| 구성 요소 | 역할 |

213| :-------- | :-------------------------------------------- |

214| **팀 리더** | 팀을 만들고, 팀원들을 생성하며, 작업을 조율하는 메인 Claude Code 세션 |

215| **팀원들** | 할당된 작업에서 각각 작동하는 별도의 Claude Code 인스턴스 |

216| **작업 목록** | 팀원들이 요청하고 완료하는 공유 작업 항목 목록 |

217| **메일박스** | 에이전트 간 통신을 위한 메시징 시스템 |

218 

219표시 구성 옵션은 [표시 모드 선택](#choose-a-display-mode)을 참조합니다. 팀원 메시지는 리더에게 자동으로 도착합니다.

220 

221시스템은 작업 종속성을 자동으로 관리합니다. 팀원이 다른 작업이 종속된 작업을 완료하면, 차단된 작업은 수동 개입 없이 차단 해제됩니다.

222 

223팀과 작업은 로컬에 저장됩니다:

224 

225* **팀 구성**: `~/.claude/teams/{team-name}/config.json`

226* **작업 목록**: `~/.claude/tasks/{team-name}/`

227 

228Claude Code는 팀을 만들 때 이 둘을 자동으로 생성하고 팀원들이 참여하거나, 유휴 상태가 되거나, 떠날 때 업데이트합니다. 팀 구성은 세션 ID 및 tmux 창 ID와 같은 런타임 상태를 보유하므로, 수동으로 편집하거나 사전 작성하지 마십시오: 다음 상태 업데이트에서 변경 사항이 덮어씌워집니다.

229 

230재사용 가능한 팀원 역할을 정의하려면, 대신 [subagent 정의 사용](#use-subagent-definitions-for-teammates)을 사용합니다.

231 

232팀 구성에는 각 팀원의 이름, 에이전트 ID, 에이전트 유형이 있는 `members` 배열이 포함됩니다. 팀원들은 이 파일을 읽어 다른 팀 멤버를 발견할 수 있습니다.

233 

234프로젝트 수준의 팀 구성 동등물은 없습니다. 프로젝트 디렉토리의 `.claude/teams/teams.json`과 같은 파일은 구성으로 인식되지 않습니다. Claude는 이를 일반 파일로 취급합니다.

235 

236### 팀원을 위해 subagent 정의 사용

237 

238팀원을 생성할 때, 프로젝트, 사용자, 플러그인, 또는 CLI 정의 등 모든 [subagent 범위](/ko/sub-agents#choose-the-subagent-scope)의 [subagent](/ko/sub-agents) 유형을 참조할 수 있습니다. 이를 통해 보안 검토자 또는 테스트 실행자와 같은 역할을 한 번 정의하고 위임된 subagent와 에이전트 팀 팀원 모두로 재사용할 수 있습니다.

239 

240subagent 정의를 사용하려면, Claude에게 팀원을 생성하도록 요청할 때 이름으로 언급합니다:

241 

242```text theme={null}

243Spawn a teammate using the security-reviewer agent type to audit the auth module.

244```

245 

246팀원은 해당 정의의 `tools` 허용 목록과 `model`을 준수하며, 정의의 본문은 팀원의 시스템 프롬프트에 추가 지시로 추가되며 이를 대체하지 않습니다. `SendMessage`와 작업 관리 도구와 같은 팀 조율 도구는 `tools`가 다른 도구를 제한할 때에도 팀원이 항상 사용할 수 있습니다.

247 

248<Note>

249 subagent 정의의 `skills`과 `mcpServers` frontmatter 필드는 해당 정의가 팀원으로 실행될 때 적용되지 않습니다. 팀원들은 일반 세션과 동일하게 프로젝트 및 사용자 설정에서 skills과 MCP servers를 로드합니다.

250</Note>

251 

252### 권한

253 

254팀원들은 리더의 권한 설정으로 시작합니다. 리더가 `--dangerously-skip-permissions`로 실행되면, 모든 팀원도 그렇게 합니다. 생성 후, 개별 팀원 모드를 변경할 수 있지만, 생성 시 팀원별 모드를 설정할 수 없습니다.

255 

256### 컨텍스트 및 통신

257 

258각 팀원은 자신의 컨텍스트 윈도우를 가집니다. 생성될 때, 팀원은 일반 세션과 동일한 프로젝트 컨텍스트를 로드합니다: CLAUDE.md, MCP servers, skills. 또한 리더의 생성 프롬프트를 받습니다. 리더의 대화 기록은 전달되지 않습니다.

259 

260**팀원들이 정보를 공유하는 방법:**

261 

262* **자동 메시지 전달**: 팀원들이 메시지를 보낼 때, 자동으로 수신자에게 전달됩니다. 리더가 업데이트를 폴링할 필요가 없습니다.

263* **유휴 알림**: 팀원이 완료되고 중지되면, 자동으로 리더에게 알립니다.

264* **공유 작업 목록**: 모든 에이전트는 작업 상태를 보고 사용 가능한 작업을 요청할 수 있습니다.

265* **팀원 메시징**: 이름으로 특정 팀원 한 명에게 메시지를 보냅니다. 모든 사람에게 도달하려면, 각 수신자에게 하나의 메시지를 보냅니다.

266 

267리더는 팀원을 생성할 때 각 팀원에게 이름을 할당하며, 모든 팀원은 그 이름으로 다른 팀원에게 메시지를 보낼 수 있습니다. 나중의 프롬프트에서 참조할 수 있는 예측 가능한 이름을 얻으려면, 생성 지시에서 각 팀원을 무엇이라고 부를지 리더에게 말합니다.

268 

269### 토큰 사용

270 

271에이전트 팀은 단일 세션보다 훨씬 더 많은 토큰을 사용합니다. 각 팀원은 자신의 컨텍스트 윈도우를 가지며, 토큰 사용은 활성 팀원의 수에 따라 증가합니다. 연구, 검토, 새로운 기능 작업의 경우, 추가 토큰은 일반적으로 가치가 있습니다. 일상적인 작업의 경우, 단일 세션이 더 비용 효율적입니다. 사용 지침은 [에이전트 팀 토큰 비용](/ko/costs#agent-team-token-costs)을 참조합니다.

272 

273## 사용 사례 예시

274 

275이 예시들은 병렬 탐색이 가치를 더하는 작업을 에이전트 팀이 어떻게 처리하는지 보여줍니다.

276 

277### 병렬 코드 검토 실행

278 

279단일 검토자는 한 번에 한 가지 유형의 문제로 기울어지는 경향이 있습니다. 검토 기준을 독립적인 도메인으로 분할하면 보안, 성능, 테스트 커버리지가 모두 동시에 철저한 주의를 받습니다. 프롬프트는 각 팀원에게 고유한 렌즈를 할당하여 겹치지 않도록 합니다:

280 

281```text theme={null}

282Create an agent team to review PR #142. Spawn three reviewers:

283- One focused on security implications

284- One checking performance impact

285- One validating test coverage

286Have them each review and report findings.

287```

288 

289각 검토자는 동일한 PR에서 작동하지만 다른 필터를 적용합니다. 리더는 모두 완료된 후 세 명 모두의 발견을 종합합니다.

290 

291### 경쟁하는 가설로 조사하기

292 

293근본 원인이 불명확할 때, 단일 에이전트는 그럴듯한 설명 하나를 찾고 멈추는 경향이 있습니다. 프롬프트는 팀원들을 명시적으로 적대적으로 만들어 이를 방지합니다: 각 팀원의 일은 자신의 이론을 조사하는 것뿐만 아니라 다른 팀원들에게 도전하는 것입니다.

294 

295```text theme={null}

296Users report the app exits after one message instead of staying connected.

297Spawn 5 agent teammates to investigate different hypotheses. Have them talk to

298each other to try to disprove each other's theories, like a scientific

299debate. Update the findings doc with whatever consensus emerges.

300```

301 

302토론 구조가 여기서 핵심 메커니즘입니다. 순차적 조사는 앵커링으로 인해 고통받습니다: 한 이론이 탐색되면, 후속 조사는 그것에 편향됩니다.

303 

304여러 독립적인 조사자가 적극적으로 서로의 이론을 반박하려고 할 때, 생존하는 이론은 실제 근본 원인일 가능성이 훨씬 높습니다.

305 

306## 모범 사례

307 

308### 팀원에게 충분한 컨텍스트 제공

309 

310팀원들은 CLAUDE.md, MCP servers, skills를 포함한 프로젝트 컨텍스트를 자동으로 로드하지만, 리더의 대화 기록을 상속하지 않습니다. 자세한 내용은 [컨텍스트 및 통신](#context-and-communication)을 참조합니다. 생성 프롬프트에 작업별 세부 사항을 포함합니다:

311 

312```text theme={null}

313Spawn a security reviewer teammate with the prompt: "Review the authentication module

314at src/auth/ for security vulnerabilities. Focus on token handling, session

315management, and input validation. The app uses JWT tokens stored in

316httpOnly cookies. Report any issues with severity ratings."

317```

318 

319### 적절한 팀 크기 선택

320 

321팀원의 수에 대한 하드 제한은 없지만, 실질적인 제약이 적용됩니다:

322 

323* **토큰 비용이 선형으로 증가**: 각 팀원은 자신의 컨텍스트 윈도우를 가지며 독립적으로 토큰을 소비합니다. 자세한 내용은 [에이전트 팀 토큰 비용](/ko/costs#agent-team-token-costs)을 참조합니다.

324* **조율 오버헤드 증가**: 더 많은 팀원은 더 많은 통신, 작업 조율, 충돌 가능성을 의미합니다

325* **수익 감소**: 특정 지점을 넘으면, 추가 팀원은 작업 속도를 비례적으로 높이지 않습니다

326 

327대부분의 워크플로우에 대해 3-5명의 팀원으로 시작합니다. 이는 병렬 작업과 관리 가능한 조율의 균형을 맞춥니다. 이 가이드의 예시들은 3-5명의 팀원을 사용합니다. 이 범위는 다양한 작업 유형에서 잘 작동하기 때문입니다.

328 

329팀원당 5-6개의 [작업](/ko/agent-teams#architecture)을 유지하면 과도한 컨텍스트 전환 없이 모두를 생산적으로 유지합니다. 15개의 독립적인 작업이 있으면, 3명의 팀원이 좋은 시작점입니다.

330 

331작업이 실제로 팀원들이 동시에 작동하는 것의 이점이 있을 때만 확장합니다. 세 명의 집중된 팀원은 종종 다섯 명의 산만한 팀원을 능가합니다.

332 

333### 작업을 적절히 크기 조정

334 

335* **너무 작음**: 조율 오버헤드가 이점을 초과합니다

336* **너무 큼**: 팀원들이 체크인 없이 너무 오래 작동하여 낭비된 노력의 위험이 증가합니다

337* **적절함**: 함수, 테스트 파일, 검토와 같은 명확한 결과물을 생성하는 자체 포함된 단위

338 

339<Tip>

340 리더는 작업을 작업으로 나누고 팀원들에게 자동으로 할당합니다. 충분한 작업을 만들지 않으면, 작업을 더 작은 조각으로 분할하도록 요청합니다. 팀원당 5-6개의 작업을 유지하면 모두를 생산적으로 유지하고 누군가 막히면 리더가 작업을 재할당할 수 있습니다.

341</Tip>

342 

343### 팀원들이 완료될 때까지 기다리기

344 

345때때로 리더는 팀원들을 기다리지 않고 작업을 자체적으로 구현하기 시작합니다. 이를 알아차리면:

346 

347```text theme={null}

348Wait for your teammates to complete their tasks before proceeding

349```

350 

351### 연구 및 검토로 시작하기

352 

353에이전트 팀을 처음 사용하는 경우, 명확한 경계가 있고 코드 작성이 필요하지 않은 작업으로 시작합니다: PR 검토, 라이브러리 연구, 또는 버그 조사. 이러한 작업은 병렬 탐색의 가치를 보여주면서 병렬 구현과 함께 오는 조율 문제 없이 보여줍니다.

354 

355### 파일 충돌 피하기

356 

357두 팀원이 동일한 파일을 편집하면 덮어쓰기가 발생합니다. 각 팀원이 다른 파일 집합을 소유하도록 작업을 나눕니다.

358 

359### 모니터링 및 조율

360 

361팀원들의 진행 상황을 확인하고, 작동하지 않는 접근 방식을 재지정하며, 발견이 들어올 때 종합합니다. 팀을 무인으로 너무 오래 실행하면 낭비된 노력의 위험이 증가합니다.

362 

363## 문제 해결

364 

365### 팀원이 나타나지 않음

366 

367Claude에게 팀을 만들도록 요청한 후 팀원이 나타나지 않으면:

368 

369* In-process 모드에서, 팀원들이 이미 실행 중이지만 보이지 않을 수 있습니다. Shift+Down을 눌러 활성 팀원들을 순환합니다.

370* Claude에게 준 작업이 팀을 보증할 만큼 복잡한지 확인합니다. Claude는 작업에 따라 팀원을 생성할지 결정합니다.

371* 분할 창을 명시적으로 요청했으면, tmux가 설치되어 있고 PATH에서 사용 가능한지 확인합니다:

372 ```bash theme={null}

373 which tmux

374 ```

375* iTerm2의 경우, `it2` CLI가 설치되어 있고 Python API가 iTerm2 환경 설정에서 활성화되어 있는지 확인합니다.

376 

377### 너무 많은 권한 프롬프트

378 

379팀원 권한 요청이 리더로 버블업되어 마찰을 일으킬 수 있습니다. 팀원들을 생성하기 전에 [권한 설정](/ko/permissions)에서 일반적인 작업을 사전 승인하여 중단을 줄입니다.

380 

381### 팀원들이 오류에서 중지됨

382 

383팀원들은 오류를 만난 후 복구하지 않고 중지할 수 있습니다. In-process 모드에서 Shift+Down을 사용하거나 분할 모드에서 창을 클릭하여 출력을 확인한 후:

384 

385* 직접 추가 지시를 제공합니다

386* 작업을 계속하기 위해 대체 팀원을 생성합니다

387 

388### 리더가 작업 완료 전에 종료됨

389 

390리더는 모든 작업이 실제로 완료되기 전에 팀이 완료되었다고 결정할 수 있습니다. 이 경우 계속하도록 말합니다. 또한 리더가 위임하지 않고 작업을 시작하면 팀원들이 완료될 때까지 기다리도록 말할 수 있습니다.

391 

392### 고아 tmux 세션

393 

394팀이 끝난 후 tmux 세션이 지속되면, 완전히 정리되지 않았을 수 있습니다. 세션을 나열하고 팀에서 만든 세션을 종료합니다:

395 

396```bash theme={null}

397tmux ls

398tmux kill-session -t <session-name>

399```

400 

401## 제한 사항

402 

403에이전트 팀은 실험적입니다. 주의할 현재 제한 사항:

404 

405* **In-process 팀원과의 세션 재개 없음**: `/resume`과 `/rewind`는 in-process 팀원을 복원하지 않습니다. 세션을 재개한 후, 리더는 더 이상 존재하지 않는 팀원에게 메시지를 보내려고 시도할 수 있습니다. 이 경우 리더에게 새 팀원을 생성하도록 말합니다.

406* **작업 상태가 지연될 수 있음**: 팀원들이 때때로 작업을 완료로 표시하지 못하여 종속 작업을 차단합니다. 작업이 막혀 있는 것처럼 보이면, 작업이 실제로 완료되었는지 확인하고 작업 상태를 수동으로 업데이트하거나 리더에게 팀원을 밀도록 말합니다.

407* **종료가 느릴 수 있음**: 팀원들은 현재 요청이나 도구 호출을 마친 후 종료되어 시간이 걸릴 수 있습니다.

408* **세션당 한 팀**: 리더는 한 번에 한 팀만 관리할 수 있습니다. 새 팀을 시작하기 전에 현재 팀을 정리합니다.

409* **중첩된 팀 없음**: 팀원들은 자신의 팀이나 팀원을 생성할 수 없습니다. 리더만 팀을 관리할 수 있습니다.

410* **리더가 고정됨**: 팀을 만드는 세션은 수명 동안 리더입니다. 팀원을 리더로 승격하거나 리더십을 이전할 수 없습니다.

411* **생성 시 권한 설정**: 모든 팀원은 리더의 권한 모드로 시작합니다. 생성 후 개별 팀원 모드를 변경할 수 있지만, 생성 시 팀원별 모드를 설정할 수 없습니다.

412* **분할 창은 tmux 또는 iTerm2 필요**: 기본 in-process 모드는 모든 터미널에서 작동합니다. 분할 창 모드는 VS Code의 통합 터미널, Windows Terminal, Ghostty에서 지원되지 않습니다.

413 

414<Tip>

415 **`CLAUDE.md`는 정상적으로 작동합니다**: 팀원들은 작업 디렉토리에서 `CLAUDE.md` 파일을 읽습니다. 이를 사용하여 모든 팀원에게 프로젝트별 지침을 제공합니다.

416</Tip>

417 

418## 다음 단계

419 

420병렬 작업 및 위임을 위한 관련 접근 방식을 탐색합니다:

421 

422* **경량 위임**: [subagents](/ko/sub-agents)는 세션 내에서 연구 또는 검증을 위해 도우미 에이전트를 생성하며, 에이전트 간 조율이 필요하지 않은 작업에 더 좋습니다

423* **수동 병렬 세션**: [Git worktrees](/ko/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees)를 사용하면 자동화된 팀 조율 없이 여러 Claude Code 세션을 직접 실행할 수 있습니다

424* **접근 방식 비교**: [subagent vs 에이전트 팀](/ko/features-overview#compare-similar-features) 비교를 참조하여 나란히 비교합니다

amazon-bedrock.md +589 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Amazon Bedrock의 Claude Code

6 

7> Amazon Bedrock을 통한 Claude Code 구성, 설정, IAM 구성 및 문제 해결에 대해 알아봅니다.

8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

79export const Experiment = ({flag, treatment, children}) => {

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="bedrock" />} />

190 

191## 필수 조건

192 

193Claude Code를 Bedrock으로 구성하기 전에 다음을 확인하십시오:

194 

195* Bedrock 액세스가 활성화된 AWS 계정

196* Bedrock에서 원하는 Claude 모델(예: Claude Sonnet 4.6)에 대한 액세스

197* AWS CLI 설치 및 구성(선택 사항 - 자격 증명을 얻을 다른 메커니즘이 없는 경우에만 필요)

198* 적절한 IAM 권한

199 

200Bedrock 자격 증명으로 로그인하려면 아래의 [Bedrock으로 로그인](#sign-in-with-bedrock)을 따르십시오. 팀 전체에 Claude Code를 배포하려면 [수동 설정](#set-up-manually) 단계를 사용하고 롤아웃 전에 [모델 버전을 고정](#4-pin-model-versions)하십시오.

201 

202## Bedrock으로 로그인

203 

204AWS 자격 증명이 있고 Bedrock을 통해 Claude Code 사용을 시작하려면 로그인 마법사가 이를 안내합니다. AWS 측 필수 조건은 계정당 한 번 완료하며, 마법사가 Claude Code 측을 처리합니다.

205 

206<Steps>

207 <Step title="AWS 계정에서 Anthropic 모델 활성화">

208 [Amazon Bedrock 콘솔](https://console.aws.amazon.com/bedrock/)에서 모델 카탈로그를 열고 Anthropic 모델을 선택한 후 사용 사례 양식을 제출하십시오. 제출 후 즉시 액세스가 부여됩니다. AWS Organizations의 경우 [사용 사례 세부 정보 제출](#1-submit-use-case-details)을 참조하고 권한의 경우 [IAM 구성](#iam-configuration)을 참조하십시오.

209 </Step>

210 

211 <Step title="Claude Code를 시작하고 Bedrock 선택">

212 `claude`를 실행하십시오. 로그인 프롬프트에서 **3rd-party platform**을 선택한 후 **Amazon Bedrock**을 선택하십시오.

213 </Step>

214 

215 <Step title="마법사 프롬프트 따르기">

216 AWS에 인증하는 방법을 선택하십시오: `~/.aws` 디렉토리에서 감지된 AWS 프로필, Bedrock API 키, 액세스 키 및 시크릿, 또는 환경에 이미 있는 자격 증명. 마법사가 지역을 선택하고 계정이 호출할 수 있는 Claude 모델을 확인한 후 고정할 수 있도록 합니다. 결과를 [사용자 설정 파일](/ko/settings)의 `env` 블록에 저장하므로 환경 변수를 직접 내보낼 필요가 없습니다.

217 </Step>

218</Steps>

219 

220로그인한 후 언제든지 `/setup-bedrock`을 실행하여 마법사를 다시 열고 자격 증명, 지역 또는 모델 고정을 변경할 수 있습니다.

221 

222## 수동으로 설정

223 

224예를 들어 CI 또는 스크립트된 엔터프라이즈 롤아웃에서 마법사 대신 환경 변수를 통해 Bedrock을 구성하려면 아래 단계를 따르십시오.

225 

226### 1. 사용 사례 세부 정보 제출

227 

228Anthropic 모델의 첫 사용자는 모델을 호출하기 전에 사용 사례 세부 정보를 제출해야 합니다. 이는 AWS 계정당 한 번 수행됩니다.

229 

2301. 아래에 설명된 올바른 IAM 권한이 있는지 확인하십시오

2312. [Amazon Bedrock 콘솔](https://console.aws.amazon.com/bedrock/)로 이동하십시오

2323. **모델 카탈로그**에서 Anthropic 모델을 선택하십시오

2334. 사용 사례 양식을 완료하십시오. 제출 후 즉시 액세스가 부여됩니다.

234 

235AWS Organizations를 사용하는 경우 관리 계정에서 [`PutUseCaseForModelAccess` API](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_PutUseCaseForModelAccess.html)를 사용하여 양식을 한 번 제출할 수 있습니다. 이 호출에는 `bedrock:PutUseCaseForModelAccess` IAM 권한이 필요합니다. 승인은 자동으로 하위 계정으로 확장됩니다.

236 

237### 2. AWS 자격 증명 구성

238 

239Claude Code는 기본 AWS SDK 자격 증명 체인을 사용합니다. 다음 방법 중 하나를 사용하여 자격 증명을 설정하십시오:

240 

241**옵션 A: AWS CLI 구성**

242 

243```bash theme={null}

244aws configure

245```

246 

247**옵션 B: 환경 변수(액세스 키)**

248 

249```bash theme={null}

250export AWS_ACCESS_KEY_ID=your-access-key-id

251export AWS_SECRET_ACCESS_KEY=your-secret-access-key

252export AWS_SESSION_TOKEN=your-session-token

253```

254 

255**옵션 C: 환경 변수(SSO 프로필)**

256 

257```bash theme={null}

258aws sso login --profile=<your-profile-name>

259 

260export AWS_PROFILE=your-profile-name

261```

262 

263**옵션 D: AWS Management Console 자격 증명**

264 

265```bash theme={null}

266aws login

267```

268 

269`aws login`에 대해 [자세히 알아보기](https://docs.aws.amazon.com/signin/latest/userguide/command-line-sign-in.html).

270 

271**옵션 E: Bedrock API 키**

272 

273```bash theme={null}

274export AWS_BEARER_TOKEN_BEDROCK=your-bedrock-api-key

275```

276 

277Bedrock API 키는 전체 AWS 자격 증명이 필요 없는 더 간단한 인증 방법을 제공합니다. [Bedrock API 키에 대해 자세히 알아보기](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/).

278 

279#### 고급 자격 증명 구성

280 

281Claude Code는 AWS SSO 및 회사 ID 공급자에 대한 자동 자격 증명 새로 고침을 지원합니다. Claude Code 설정 파일에 이러한 설정을 추가하십시오([설정](/ko/settings)에서 파일 위치 참조).

282 

283Claude Code가 AWS 자격 증명이 만료되었음을 감지하면(타임스탬프를 기반으로 로컬에서 또는 Bedrock이 자격 증명 오류를 반환할 때), 요청을 다시 시도하기 전에 새 자격 증명을 얻기 위해 구성된 `awsAuthRefresh` 및/또는 `awsCredentialExport` 명령을 자동으로 실행합니다.

284 

285##### 예제 구성

286 

287```json theme={null}

288{

289 "awsAuthRefresh": "aws sso login --profile myprofile",

290 "env": {

291 "AWS_PROFILE": "myprofile"

292 }

293}

294```

295 

296##### 구성 설정 설명

297 

298**`awsAuthRefresh`**: `.aws` 디렉토리를 수정하는 명령(예: 자격 증명, SSO 캐시 또는 구성 파일 업데이트)에 사용하십시오. 명령의 출력이 사용자에게 표시되지만 대화형 입력은 지원되지 않습니다. 이는 CLI가 URL 또는 코드를 표시하고 브라우저에서 인증을 완료하는 브라우저 기반 SSO 흐름에 적합합니다.

299 

300**`awsCredentialExport`**: `.aws`를 수정할 수 없고 자격 증명을 직접 반환해야 하는 경우에만 사용하십시오. 출력은 자동으로 캡처되며 사용자에게 표시되지 않습니다. 명령은 다음 형식으로 JSON을 출력해야 합니다:

301 

302```json theme={null}

303{

304 "Credentials": {

305 "AccessKeyId": "value",

306 "SecretAccessKey": "value",

307 "SessionToken": "value"

308 }

309}

310```

311 

312### 3. Claude Code 구성

313 

314Bedrock을 활성화하려면 다음 환경 변수를 설정하십시오:

315 

316```bash theme={null}

317# Bedrock 통합 활성화

318export CLAUDE_CODE_USE_BEDROCK=1

319export AWS_REGION=us-east-1 # 또는 선호하는 지역

320 

321# 선택 사항: 소형/빠른 모델(Haiku)의 지역 재정의

322# Bedrock Mantle에도 적용됩니다.

323export ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION=us-west-2

324 

325# 선택 사항: 사용자 정의 엔드포인트 또는 게이트웨이를 위한 Bedrock 엔드포인트 URL 재정의

326# export ANTHROPIC_BEDROCK_BASE_URL=https://bedrock-runtime.us-east-1.amazonaws.com

327```

328 

329Claude Code에 대해 Bedrock을 활성화할 때 다음을 염두에 두십시오:

330 

331* `AWS_REGION`은 필수 환경 변수입니다. Claude Code는 이 설정에 대해 `.aws` 구성 파일을 읽지 않습니다.

332* Bedrock을 사용할 때 `/login` 및 `/logout` 명령은 AWS 자격 증명을 통해 인증이 처리되므로 비활성화됩니다.

333* 다른 프로세스에 유출되지 않도록 하려는 `AWS_PROFILE`과 같은 환경 변수에 설정 파일을 사용할 수 있습니다. 자세한 내용은 [설정](/ko/settings)을 참조하십시오.

334 

335### 4. 모델 버전 고정

336 

337<Warning>

338 여러 사용자에게 배포할 때 특정 모델 버전을 고정하십시오. 고정하지 않으면 `sonnet` 및 `opus`와 같은 모델 별칭이 최신 버전으로 확인되며, Anthropic이 업데이트를 출시할 때 Bedrock 계정에서 아직 사용할 수 없을 수 있습니다. Claude Code는 [시작 시](#startup-model-checks) 최신 버전을 사용할 수 없을 때 이전 버전으로 폴백하지만, 고정하면 사용자가 새 모델로 이동하는 시기를 제어할 수 있습니다.

339</Warning>

340 

341이러한 환경 변수를 특정 Bedrock 모델 ID로 설정하십시오.

342 

343`ANTHROPIC_DEFAULT_OPUS_MODEL`이 없으면 Bedrock의 `opus` 별칭이 Opus 4.6으로 확인됩니다. 최신 모델을 사용하려면 Opus 4.7 ID로 설정하십시오:

344 

345```bash theme={null}

346export ANTHROPIC_DEFAULT_OPUS_MODEL='us.anthropic.claude-opus-4-7'

347export ANTHROPIC_DEFAULT_SONNET_MODEL='us.anthropic.claude-sonnet-4-6'

348export ANTHROPIC_DEFAULT_HAIKU_MODEL='us.anthropic.claude-haiku-4-5-20251001-v1:0'

349```

350 

351이러한 변수는 교차 지역 추론 프로필 ID(`us.` 접두사 포함)를 사용합니다. 다른 지역 접두사 또는 애플리케이션 추론 프로필을 사용하는 경우 적절히 조정하십시오. 현재 및 레거시 모델 ID는 [모델 개요](https://platform.claude.com/docs/en/about-claude/models/overview)를 참조하십시오. 전체 환경 변수 목록은 [모델 구성](/ko/model-config#pin-models-for-third-party-deployments)을 참조하십시오.

352 

353고정 변수가 설정되지 않은 경우 Claude Code는 이러한 기본 모델을 사용합니다:

354 

355| 모델 유형 | 기본값 |

356| :------- | :--------------------------------------------- |

357| 기본 모델 | `us.anthropic.claude-sonnet-4-5-20250929-v1:0` |

358| 소형/빠른 모델 | `us.anthropic.claude-haiku-4-5-20251001-v1:0` |

359 

360모델을 추가로 사용자 정의하려면 다음 방법 중 하나를 사용하십시오:

361 

362```bash theme={null}

363# 추론 프로필 ID 사용

364export ANTHROPIC_MODEL='global.anthropic.claude-sonnet-4-6'

365export ANTHROPIC_DEFAULT_HAIKU_MODEL='us.anthropic.claude-haiku-4-5-20251001-v1:0'

366 

367# 애플리케이션 추론 프로필 ARN 사용

368export ANTHROPIC_MODEL='arn:aws:bedrock:us-east-2:your-account-id:application-inference-profile/your-model-id'

369 

370# 선택 사항: 필요한 경우 프롬프트 캐싱 비활성화

371export DISABLE_PROMPT_CACHING=1

372 

373# 선택 사항: 5분 기본값 대신 1시간 프롬프트 캐시 TTL 요청

374export ENABLE_PROMPT_CACHING_1H=1

375```

376 

377<Note>[프롬프트 캐싱](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)은 모든 지역에서 사용할 수 없을 수 있습니다. 1시간 TTL이 있는 캐시 쓰기는 5분 쓰기보다 높은 요금으로 청구됩니다.</Note>

378 

379#### 각 모델 버전을 추론 프로필에 매핑

380 

381`ANTHROPIC_DEFAULT_*_MODEL` 환경 변수는 모델 제품군당 하나의 추론 프로필을 구성합니다. 조직이 `/model` 선택기에서 동일한 제품군의 여러 버전을 노출하고 각각 자신의 애플리케이션 추론 프로필 ARN으로 라우팅해야 하는 경우 [설정 파일](/ko/settings#settings-files)에서 `modelOverrides` 설정을 대신 사용하십시오.

382 

383이 예제는 네 개의 Opus 버전을 고유한 ARN에 매핑하므로 사용자는 조직의 추론 프로필을 우회하지 않고 버전 간에 전환할 수 있습니다:

384 

385```json theme={null}

386{

387 "modelOverrides": {

388 "claude-opus-4-7": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-47-prod",

389 "claude-opus-4-6": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-46-prod",

390 "claude-opus-4-5-20251101": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-45-prod",

391 "claude-opus-4-1-20250805": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-41-prod"

392 }

393}

394```

395 

396사용자가 `/model`에서 이러한 버전 중 하나를 선택하면 Claude Code는 매핑된 ARN으로 Bedrock을 호출합니다. 재정의가 없는 버전은 기본 제공 Bedrock 모델 ID 또는 시작 시 발견된 일치하는 추론 프로필로 폴백됩니다. 재정의가 `availableModels` 및 기타 모델 설정과 상호 작용하는 방식에 대한 자세한 내용은 [버전별 모델 ID 재정의](/ko/model-config#override-model-ids-per-version)를 참조하십시오.

397 

398## 시작 모델 확인

399 

400Claude Code가 Bedrock으로 구성되어 시작되면 사용하려는 모델이 계정에서 액세스 가능한지 확인합니다. 이 확인에는 Claude Code v2.1.94 이상이 필요합니다.

401 

402현재 Claude Code 기본값보다 오래된 모델 버전을 고정했고 계정이 최신 버전을 호출할 수 있는 경우 Claude Code는 고정을 업데이트하라는 메시지를 표시합니다. 수락하면 새 모델 ID를 [사용자 설정 파일](/ko/settings)에 쓰고 Claude Code를 다시 시작합니다. 거부하면 다음 기본 버전 변경까지 기억됩니다. [애플리케이션 추론 프로필 ARN](#map-each-model-version-to-an-inference-profile)을 가리키는 고정은 관리자가 관리하므로 건너뜁니다.

403 

404모델을 고정하지 않았고 현재 기본값을 계정에서 사용할 수 없는 경우 Claude Code는 현재 세션에서 이전 버전으로 폴백하고 알림을 표시합니다. 폴백은 유지되지 않습니다. Bedrock 계정에서 최신 모델을 활성화하거나 [버전을 고정](#4-pin-model-versions)하여 선택을 영구적으로 만드십시오.

405 

406## IAM 구성

407 

408Claude Code에 필요한 권한이 있는 IAM 정책을 만드십시오:

409 

410```json theme={null}

411{

412 "Version": "2012-10-17",

413 "Statement": [

414 {

415 "Sid": "AllowModelAndInferenceProfileAccess",

416 "Effect": "Allow",

417 "Action": [

418 "bedrock:InvokeModel",

419 "bedrock:InvokeModelWithResponseStream",

420 "bedrock:ListInferenceProfiles",

421 "bedrock:GetInferenceProfile"

422 ],

423 "Resource": [

424 "arn:aws:bedrock:*:*:inference-profile/*",

425 "arn:aws:bedrock:*:*:application-inference-profile/*",

426 "arn:aws:bedrock:*:*:foundation-model/*"

427 ]

428 },

429 {

430 "Sid": "AllowMarketplaceSubscription",

431 "Effect": "Allow",

432 "Action": [

433 "aws-marketplace:ViewSubscriptions",

434 "aws-marketplace:Subscribe"

435 ],

436 "Resource": "*",

437 "Condition": {

438 "StringEquals": {

439 "aws:CalledViaLast": "bedrock.amazonaws.com"

440 }

441 }

442 }

443 ]

444}

445```

446 

447더 제한적인 권한의 경우 리소스를 특정 추론 프로필 ARN으로 제한할 수 있습니다.

448 

449`bedrock:GetInferenceProfile`을 사용하면 Claude Code가 [애플리케이션 추론 프로필 ARN](#map-each-model-version-to-an-inference-profile)을 해당 백업 기초 모델로 확인할 수 있으며, 이는 해당 모델에 대한 올바른 요청 형태를 선택하는 데 사용됩니다.

450 

451토큰에 이 권한이 없으면 Claude Code는 대체 형태로 한 번 재시도하여 자동으로 복구되므로 요청은 여전히 성공하지만 각 새로운 모델은 추가 왕복을 추가합니다. 권한을 부여하면 재시도를 피할 수 있습니다. 이는 토큰의 정책이 일반적으로 전체 IAM 역할보다 좁은 `AWS_BEARER_TOKEN_BEDROCK` 배포에 가장 자주 적용됩니다.

452 

453자세한 내용은 [Bedrock IAM 설명서](https://docs.aws.amazon.com/bedrock/latest/userguide/security-iam.html)를 참조하십시오.

454 

455<Note>

456 비용 추적 및 액세스 제어를 단순화하기 위해 Claude Code용 전용 AWS 계정을 만드십시오.

457</Note>

458 

459## 1M 토큰 컨텍스트 윈도우

460 

461Claude Opus 4.7, Opus 4.6 및 Sonnet 4.6은 Amazon Bedrock에서 [1M 토큰 컨텍스트 윈도우](https://platform.claude.com/docs/en/build-with-claude/context-windows#1m-token-context-window)를 지원합니다. Claude Code는 1M 모델 변형을 선택할 때 확장된 컨텍스트 윈도우를 자동으로 활성화합니다.

462 

463[설정 마법사](#sign-in-with-bedrock)는 모델을 고정할 때 1M 컨텍스트 옵션을 제공합니다. 수동으로 고정된 모델에 대해 대신 활성화하려면 모델 ID에 `[1m]`을 추가하십시오. 자세한 내용은 [타사 배포를 위한 모델 고정](/ko/model-config#pin-models-for-third-party-deployments)을 참조하십시오.

464 

465## AWS Guardrails

466 

467[Amazon Bedrock Guardrails](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html)를 사용하면 Claude Code에 대한 콘텐츠 필터링을 구현할 수 있습니다. [Amazon Bedrock 콘솔](https://console.aws.amazon.com/bedrock/)에서 Guardrail을 만들고 버전을 게시한 다음 Guardrail 헤더를 [설정 파일](/ko/settings)에 추가하십시오. 교차 지역 추론 프로필을 사용하는 경우 Guardrail에서 교차 지역 추론을 활성화하십시오.

468 

469예제 구성:

470 

471```json theme={null}

472{

473 "env": {

474 "ANTHROPIC_CUSTOM_HEADERS": "X-Amzn-Bedrock-GuardrailIdentifier: your-guardrail-id\nX-Amzn-Bedrock-GuardrailVersion: 1"

475 }

476}

477```

478 

479## Mantle 엔드포인트 사용

480 

481Mantle은 Bedrock Invoke API 대신 기본 Anthropic API 형태를 통해 Claude 모델을 제공하는 Amazon Bedrock 엔드포인트입니다. 이 페이지의 앞부분에서 설명한 동일한 AWS 자격 증명, IAM 권한 및 `awsAuthRefresh` 구성을 사용합니다.

482 

483<Note>

484 Mantle에는 Claude Code v2.1.94 이상이 필요합니다. `claude --version`을 실행하여 확인하십시오.

485</Note>

486 

487### Mantle 활성화

488 

489AWS 자격 증명이 이미 구성되어 있으면 `CLAUDE_CODE_USE_MANTLE`을 설정하여 요청을 Mantle 엔드포인트로 라우팅하십시오:

490 

491```bash theme={null}

492export CLAUDE_CODE_USE_MANTLE=1

493export AWS_REGION=us-east-1

494```

495 

496Claude Code는 `AWS_REGION`에서 엔드포인트 URL을 구성합니다. 사용자 정의 엔드포인트 또는 게이트웨이를 위해 재정의하려면 `ANTHROPIC_BEDROCK_MANTLE_BASE_URL`을 설정하십시오.

497 

498Claude Code 내에서 `/status`를 실행하여 확인하십시오. Mantle이 활성화되면 제공자 줄에 `Amazon Bedrock (Mantle)`이 표시됩니다.

499 

500### Mantle 모델 선택

501 

502Mantle은 `anthropic.` 접두사가 있고 버전 접미사가 없는 모델 ID를 사용합니다(예: `anthropic.claude-haiku-4-5`). 계정에서 사용 가능한 모델은 조직에 부여된 것에 따라 다르며, 추가 모델 ID는 AWS의 온보딩 자료에 나열됩니다. 허용 목록에 있는 모델에 대한 액세스를 요청하려면 AWS 계정 팀에 문의하십시오.

503 

504`--model` 플래그 또는 Claude Code 내의 `/model`로 모델을 설정하십시오:

505 

506```bash theme={null}

507claude --model anthropic.claude-haiku-4-5

508```

509 

510### Invoke API와 함께 Mantle 실행

511 

512Mantle에서 사용 가능한 모델이 현재 사용하는 모든 모델을 포함하지 않을 수 있습니다. `CLAUDE_CODE_USE_BEDROCK` 및 `CLAUDE_CODE_USE_MANTLE`을 모두 설정하면 Claude Code가 동일한 세션에서 두 엔드포인트를 모두 호출할 수 있습니다. Mantle 형식과 일치하는 모델 ID는 Mantle으로 라우팅되고 다른 모든 모델 ID는 Bedrock Invoke API로 이동합니다.

513 

514```bash theme={null}

515export CLAUDE_CODE_USE_BEDROCK=1

516export CLAUDE_CODE_USE_MANTLE=1

517```

518 

519Mantle 모델을 `/model` 선택기에 표시하려면 [설정 파일](/ko/settings)의 `availableModels`에 ID를 나열하십시오. 이 설정은 선택기를 나열된 항목으로 제한하므로 유지하려는 모든 별칭을 포함하십시오:

520 

521```json theme={null}

522{

523 "availableModels": ["opus", "sonnet", "haiku", "anthropic.claude-haiku-4-5"]

524}

525```

526 

527`anthropic.` 접두사가 있는 항목은 사용자 정의 선택기 옵션으로 추가되고 Mantle으로 라우팅됩니다. `anthropic.claude-haiku-4-5`를 계정에 부여된 모델 ID로 바꾸십시오. `availableModels`가 다른 모델 설정과 상호 작용하는 방식에 대한 자세한 내용은 [모델 선택 제한](/ko/model-config#restrict-model-selection)을 참조하십시오.

528 

529두 공급자가 모두 활성화되면 `/status`는 `Amazon Bedrock + Amazon Bedrock (Mantle)`을 표시합니다.

530 

531### 게이트웨이를 통해 Mantle 라우팅

532 

533조직이 모델 트래픽을 AWS 자격 증명을 서버 측에 주입하는 중앙 집중식 [LLM 게이트웨이](/ko/llm-gateway)를 통해 라우팅하는 경우 클라이언트 측 인증을 비활성화하여 Claude Code가 SigV4 서명 또는 `x-api-key` 헤더 없이 요청을 보내도록 하십시오:

534 

535```bash theme={null}

536export CLAUDE_CODE_USE_MANTLE=1

537export CLAUDE_CODE_SKIP_MANTLE_AUTH=1

538export ANTHROPIC_BEDROCK_MANTLE_BASE_URL=https://your-gateway.example.com

539```

540 

541### Mantle 환경 변수

542 

543이러한 변수는 Mantle 엔드포인트에만 해당됩니다. 전체 목록은 [환경 변수](/ko/env-vars)를 참조하십시오.

544 

545| 변수 | 목적 |

546| :-------------------------------------- | :------------------------------------------- |

547| `CLAUDE_CODE_USE_MANTLE` | Mantle 엔드포인트를 활성화합니다. `1` 또는 `true`로 설정하십시오. |

548| `ANTHROPIC_BEDROCK_MANTLE_BASE_URL` | 기본 Mantle 엔드포인트 URL 재정의 |

549| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | 프록시 설정을 위해 클라이언트 측 인증 건너뛰기 |

550| `ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION` | Haiku 클래스 모델의 AWS 지역 재정의(Bedrock과 공유) |

551 

552## 문제 해결

553 

554### SSO 및 회사 프록시를 사용한 인증 루프

555 

556AWS SSO를 사용할 때 브라우저 탭이 반복적으로 생성되면 [설정 파일](/ko/settings)에서 `awsAuthRefresh` 설정을 제거하십시오. 이는 회사 VPN 또는 TLS 검사 프록시가 SSO 브라우저 흐름을 중단할 때 발생할 수 있습니다. Claude Code는 중단된 연결을 인증 실패로 취급하고 `awsAuthRefresh`를 다시 실행하여 무한 루프를 발생시킵니다.

557 

558네트워크 환경이 자동 브라우저 기반 SSO 흐름을 방해하는 경우 `awsAuthRefresh`에 의존하는 대신 Claude Code를 시작하기 전에 `aws sso login`을 수동으로 사용하십시오.

559 

560### 지역 문제

561 

562지역 문제가 발생하는 경우:

563 

564* 모델 가용성 확인: `aws bedrock list-inference-profiles --region your-region`

565* 지원되는 지역으로 전환: `export AWS_REGION=us-east-1`

566* 교차 지역 액세스를 위해 추론 프로필 사용 고려

567 

568"on-demand throughput isn't supported" 오류가 발생하는 경우:

569 

570* 모델을 [추론 프로필](https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-support.html) ID로 지정하십시오

571 

572Claude Code는 Bedrock [Invoke API](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html)를 사용하며 Converse API를 지원하지 않습니다.

573 

574### Mantle 엔드포인트 오류

575 

576`CLAUDE_CODE_USE_MANTLE`을 설정한 후 `/status`에 `Amazon Bedrock (Mantle)`이 표시되지 않으면 변수가 프로세스에 도달하지 않습니다. Claude Code를 시작한 셸에서 내보내졌는지 확인하거나 [설정 파일](/ko/settings)의 `env` 블록에 설정하십시오.

577 

578유효한 자격 증명이 있는 Mantle 엔드포인트의 `403`은 AWS 계정이 요청한 모델에 대한 액세스 권한을 부여받지 않았음을 의미합니다. 액세스를 요청하려면 AWS 계정 팀에 문의하십시오.

579 

580모델 ID를 이름으로 지정하는 `400`은 해당 모델이 Mantle에서 제공되지 않음을 의미합니다. Mantle은 표준 Bedrock 카탈로그와 별개의 자체 모델 라인업을 가지고 있으므로 `us.anthropic.claude-sonnet-4-6`과 같은 추론 프로필 ID는 작동하지 않습니다. Mantle 형식 ID를 사용하거나 [두 엔드포인트를 모두 활성화](#run-mantle-alongside-the-invoke-api)하여 Claude Code가 각 요청을 모델을 사용할 수 있는 엔드포인트로 라우팅하도록 하십시오.

581 

582## 추가 리소스

583 

584* [Bedrock 설명서](https://docs.aws.amazon.com/bedrock/)

585* [Bedrock 가격](https://aws.amazon.com/bedrock/pricing/)

586* [Bedrock 추론 프로필](https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-support.html)

587* [Bedrock 토큰 번다운 및 할당량](https://docs.aws.amazon.com/bedrock/latest/userguide/quotas-token-burndown.html)

588* [Claude Code on Amazon Bedrock: Quick Setup Guide](https://community.aws/content/2tXkZKrZzlrlu0KfH8gST5Dkppq/claude-code-on-amazon-bedrock-quick-setup-guide)

589* [Claude Code Monitoring Implementation (Bedrock)](https://github.com/aws-solutions-library-samples/guidance-for-claude-code-with-amazon-bedrock/blob/main/assets/docs/MONITORING.md)

analytics.md +224 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 팀 사용량을 분석으로 추적하기

6 

7> Claude Code 사용량 지표를 확인하고, 채택 현황을 추적하며, 분석 대시보드에서 엔지니어링 속도를 측정합니다.

8 

9Claude Code는 조직이 개발자 사용 패턴을 이해하고, 기여도 지표를 추적하며, Claude Code가 엔지니어링 속도에 미치는 영향을 측정할 수 있도록 분석 대시보드를 제공합니다. 귀사의 플랜에 맞는 대시보드에 접근하세요:

10 

11| 플랜 | 대시보드 URL | 포함 사항 | 자세히 알아보기 |

12| ----------------------------- | -------------------------------------------------------------------------- | --------------------------------------------- | --------------------------------------------------- |

13| Claude for Teams / Enterprise | [claude.ai/analytics/claude-code](https://claude.ai/analytics/claude-code) | 사용량 지표, GitHub 통합을 포함한 기여도 지표, 리더보드, 데이터 내보내기 | [세부 정보](#access-analytics-for-teams-and-enterprise) |

14| API (Claude Console) | [platform.claude.com/claude-code](https://platform.claude.com/claude-code) | 사용량 지표, 지출 추적, 팀 인사이트 | [세부 정보](#access-analytics-for-api-customers) |

15 

16## Teams 및 Enterprise를 위한 분석 접근

17 

18[claude.ai/analytics/claude-code](https://claude.ai/analytics/claude-code)로 이동합니다. 관리자 및 소유자가 대시보드를 볼 수 있습니다.

19 

20Teams 및 Enterprise 대시보드에는 다음이 포함됩니다:

21 

22* **사용량 지표**: 수락된 코드 라인, 제안 수락률, 일일 활성 사용자 및 세션

23* **기여도 지표**: Claude Code 지원으로 배포된 PR 및 코드 라인([GitHub 통합](#enable-contribution-metrics) 포함)

24* **리더보드**: Claude Code 사용량으로 순위가 매겨진 상위 기여자

25* **데이터 내보내기**: 사용자 정의 보고를 위해 기여도 데이터를 CSV로 다운로드

26 

27### 기여도 지표 활성화

28 

29<Note>

30 기여도 지표는 공개 베타 상태이며 Claude for Teams 및 Claude for Enterprise 플랜에서 사용할 수 있습니다. 이러한 지표는 claude.ai 조직 내의 사용자만 포함합니다. Claude Console API 또는 타사 통합을 통한 사용량은 포함되지 않습니다.

31</Note>

32 

33사용량 및 채택 데이터는 모든 Claude for Teams 및 Claude for Enterprise 계정에서 사용할 수 있습니다. 기여도 지표는 GitHub 조직을 연결하기 위해 추가 설정이 필요합니다.

34 

35분석 설정을 구성하려면 소유자 역할이 필요합니다. GitHub 관리자가 GitHub 앱을 설치해야 합니다.

36 

37<Warning>

38 [Zero Data Retention](/ko/zero-data-retention)이 활성화된 조직에서는 기여도 지표를 사용할 수 없습니다. 분석 대시보드는 사용량 지표만 표시합니다.

39</Warning>

40 

41<Steps>

42 <Step title="GitHub 앱 설치">

43 GitHub 관리자가 [github.com/apps/claude](https://github.com/apps/claude)에서 조직의 GitHub 계정에 Claude GitHub 앱을 설치합니다.

44 </Step>

45 

46 <Step title="Claude Code 분석 활성화">

47 Claude 소유자가 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code)로 이동하여 Claude Code 분석 기능을 활성화합니다.

48 </Step>

49 

50 <Step title="GitHub 분석 활성화">

51 같은 페이지에서 "GitHub 분석" 토글을 활성화합니다.

52 </Step>

53 

54 <Step title="GitHub로 인증">

55 GitHub 인증 흐름을 완료하고 분석에 포함할 GitHub 조직을 선택합니다.

56 </Step>

57</Steps>

58 

59활성화 후 일반적으로 24시간 이내에 데이터가 나타나며, 매일 업데이트됩니다. 데이터가 나타나지 않으면 다음 메시지 중 하나가 표시될 수 있습니다:

60 

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

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

63 

64기여도 지표는 GitHub Cloud 및 GitHub Enterprise Server를 지원합니다.

65 

66### 요약 지표 검토

67 

68<Note>

69 이러한 지표는 의도적으로 보수적이며 Claude Code의 실제 영향을 과소평가합니다. Claude Code의 관여도가 높은 라인 및 PR만 계산됩니다.

70</Note>

71 

72대시보드는 상단에 다음 요약 지표를 표시합니다:

73 

74* **CC가 포함된 PR**: Claude Code로 작성된 코드 라인이 하나 이상 포함된 병합된 풀 요청의 총 개수

75* **CC가 포함된 코드 라인**: Claude Code 지원으로 작성된 모든 병합된 PR의 총 코드 라인 수입니다. "효과적인 라인"만 계산됩니다: 정규화 후 3자 이상의 라인, 빈 라인 및 괄호나 사소한 구두점만 있는 라인 제외.

76* **Claude Code가 포함된 PR (%)**: Claude Code 지원 코드를 포함하는 모든 병합된 PR의 백분율

77* **제안 수락률**: 사용자가 Claude Code의 코드 편집 제안을 수락하는 횟수의 백분율(Edit, Write, NotebookEdit 도구 사용 포함)

78* **수락된 코드 라인**: 사용자가 세션에서 수락한 Claude Code로 작성된 총 코드 라인 수입니다. 거부된 제안은 제외되며 후속 삭제는 추적하지 않습니다.

79 

80### 차트 탐색

81 

82대시보드에는 시간 경과에 따른 추세를 시각화하는 여러 차트가 포함되어 있습니다.

83 

84#### 채택 추적

85 

86채택 차트는 일일 사용 추세를 보여줍니다:

87 

88* **사용자**: 일일 활성 사용자

89* **세션**: 일일 활성 Claude Code 세션 수

90 

91#### 사용자당 PR 측정

92 

93이 차트는 시간 경과에 따른 개별 개발자 활동을 표시합니다:

94 

95* **사용자당 PR**: 일일 병합된 PR의 총 개수를 일일 활성 사용자로 나눈 값

96* **사용자**: 일일 활성 사용자

97 

98이를 사용하여 Claude Code 채택이 증가함에 따라 개별 생산성이 어떻게 변하는지 이해할 수 있습니다.

99 

100#### 풀 요청 분석 보기

101 

102풀 요청 차트는 병합된 PR의 일일 분석을 보여줍니다:

103 

104* **CC가 포함된 PR**: Claude Code 지원 코드를 포함하는 풀 요청

105* **CC가 포함되지 않은 PR**: Claude Code 지원 코드를 포함하지 않는 풀 요청

106 

107**코드 라인** 보기로 전환하여 PR 개수가 아닌 코드 라인으로 동일한 분석을 확인합니다.

108 

109#### 상위 기여자 찾기

110 

111리더보드는 기여도 볼륨으로 순위가 매겨진 상위 10명의 사용자를 보여줍니다. 다음 사이를 전환합니다:

112 

113* **풀 요청**: 각 사용자에 대해 Claude Code가 포함된 PR 대 모든 PR을 표시합니다

114* **코드 라인**: 각 사용자에 대해 Claude Code가 포함된 라인 대 모든 라인을 표시합니다

115 

116**모든 사용자 내보내기**를 클릭하여 모든 사용자의 완전한 기여도 데이터를 CSV 파일로 다운로드합니다. 내보내기에는 표시된 상위 10명뿐만 아니라 모든 사용자가 포함됩니다.

117 

118### PR 속성

119 

120기여도 지표가 활성화되면 Claude Code는 병합된 풀 요청을 분석하여 Claude Code 지원으로 작성된 코드를 결정합니다. 이는 Claude Code 세션 활동을 각 PR의 코드와 일치시켜 수행됩니다.

121 

122#### 태깅 기준

123 

124PR은 Claude Code 세션 중에 작성된 코드 라인이 하나 이상 포함되어 있으면 "Claude Code 포함"으로 태깅됩니다. 시스템은 보수적인 일치를 사용합니다: Claude Code의 관여도가 높은 코드만 지원되는 것으로 계산됩니다.

125 

126#### 속성 프로세스

127 

128풀 요청이 병합될 때:

129 

1301. 추가된 라인이 PR diff에서 추출됩니다

1312. 일치하는 파일을 편집한 Claude Code 세션이 시간 창 내에서 식별됩니다

1323. PR 라인이 여러 전략을 사용하여 Claude Code 출력과 일치합니다

1334. AI 지원 라인 및 총 라인에 대한 지표가 계산됩니다

134 

135비교 전에 라인이 정규화됩니다: 공백이 제거되고, 여러 공백이 축약되며, 따옴표가 표준화되고, 텍스트가 소문자로 변환됩니다.

136 

137Claude Code 지원 라인을 포함하는 병합된 풀 요청은 GitHub에서 `claude-code-assisted`로 레이블이 지정됩니다.

138 

139#### 시간 창

140 

141PR 병합 날짜 21일 전부터 2일 후까지의 세션이 속성 일치를 위해 고려됩니다.

142 

143#### 제외된 파일

144 

145특정 파일은 자동 생성되기 때문에 분석에서 자동으로 제외됩니다:

146 

147* 잠금 파일: package-lock.json, yarn.lock, Cargo.lock 등

148* 생성된 코드: Protobuf 출력, 빌드 아티팩트, 축소된 파일

149* 빌드 디렉토리: dist/, build/, node\_modules/, target/

150* 테스트 픽스처: 스냅샷, 카세트, 모의 데이터

151* 1,000자 이상의 라인(축소되거나 생성된 가능성이 높음)

152 

153#### 속성 참고 사항

154 

155속성 데이터를 해석할 때 다음 추가 세부 정보를 염두에 두세요:

156 

157* 개발자가 20% 이상의 차이로 실질적으로 다시 작성한 코드는 Claude Code에 속성되지 않습니다

158* 21일 창 외의 세션은 고려되지 않습니다

159* 알고리즘은 속성을 수행할 때 PR 소스 또는 대상 분기를 고려하지 않습니다

160 

161### 분석에서 최대한 활용하기

162 

163기여도 지표를 사용하여 ROI를 입증하고, 채택 패턴을 식별하며, 다른 사람이 시작하도록 도울 수 있는 팀 구성원을 찾습니다.

164 

165#### 채택 모니터링

166 

167채택 차트 및 사용자 수를 추적하여 다음을 식별합니다:

168 

169* 모범 사례를 공유할 수 있는 활성 사용자

170* 조직 전체의 전반적인 채택 추세

171* 마찰이나 문제를 나타낼 수 있는 사용량 감소

172 

173#### ROI 측정

174 

175기여도 지표는 자신의 코드베이스의 데이터로 "이 도구가 투자할 가치가 있는가?"라는 질문에 답하는 데 도움이 됩니다:

176 

177* 채택이 증가함에 따라 시간 경과에 따른 사용자당 PR의 변화를 추적합니다

178* Claude Code 포함 및 미포함으로 배포된 PR 및 코드 라인을 비교합니다

179* [DORA 지표](https://dora.dev/), 스프린트 속도 또는 기타 엔지니어링 KPI와 함께 사용하여 Claude Code 채택으로 인한 변화를 이해합니다

180 

181#### 파워 사용자 식별

182 

183리더보드는 높은 Claude Code 채택을 가진 팀 구성원을 찾는 데 도움이 되며, 이들은 다음을 수행할 수 있습니다:

184 

185* 팀과 프롬프팅 기법 및 워크플로우 공유

186* 잘 작동하는 것에 대한 피드백 제공

187* 새 사용자 온보딩 지원

188 

189#### 프로그래매틱 방식으로 데이터 접근

190 

191GitHub를 통해 이 데이터를 쿼리하려면 `claude-code-assisted` 레이블이 지정된 PR을 검색합니다.

192 

193## API 고객을 위한 분석 접근

194 

195Claude Console을 사용하는 API 고객은 [platform.claude.com/claude-code](https://platform.claude.com/claude-code)에서 분석에 접근할 수 있습니다. 대시보드에 접근하려면 UsageView 권한이 필요하며, 이는 개발자, 청구, 관리자, 소유자 및 기본 소유자 역할에 부여됩니다.

196 

197<Note>

198 GitHub 통합을 포함한 기여도 지표는 현재 API 고객에게 사용할 수 없습니다. Console 대시보드는 사용량 및 지출 지표만 표시합니다.

199</Note>

200 

201Console 대시보드는 다음을 표시합니다:

202 

203* **수락된 코드 라인**: 사용자가 세션에서 수락한 Claude Code로 작성된 총 코드 라인 수입니다. 거부된 제안은 제외되며 후속 삭제는 추적하지 않습니다.

204* **제안 수락률**: 사용자가 코드 편집 도구 사용을 수락하는 횟수의 백분율(Edit, Write, NotebookEdit 도구 포함).

205* **활동**: 차트에 표시된 일일 활성 사용자 및 세션.

206* **지출**: 사용자 수와 함께 일일 API 비용(달러).

207 

208### 팀 인사이트 보기

209 

210팀 인사이트 테이블은 사용자별 지표를 표시합니다:

211 

212* **구성원**: Claude Code에 인증한 모든 사용자. API 키 사용자는 키 식별자로 표시되고, OAuth 사용자는 이메일 주소로 표시됩니다.

213* **이번 달 지출**: 현재 달의 사용자별 총 API 비용.

214* **이번 달 라인**: 현재 달의 사용자별 수락된 코드 라인의 총합.

215 

216<Note>

217 Console 대시보드의 지출 수치는 분석 목적의 추정치입니다. 실제 비용은 청구 페이지를 참조하세요.

218</Note>

219 

220## 관련 리소스

221 

222* [OpenTelemetry를 사용한 모니터링](/ko/monitoring-usage): 실시간 지표 및 이벤트를 관찰성 스택으로 내보내기

223* [비용 효과적으로 관리하기](/ko/costs): 지출 한도 설정 및 토큰 사용량 최적화

224* [권한](/ko/permissions): 역할 및 권한 구성

authentication.md +155 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 인증

6 

7> Claude Code에 로그인하고 개인, 팀, 조직을 위한 인증을 구성합니다.

8 

9Claude Code는 설정에 따라 여러 인증 방법을 지원합니다. 개별 사용자는 Claude.ai 계정으로 로그인할 수 있으며, 팀은 Claude for Teams 또는 Enterprise, Claude Console, 또는 Amazon Bedrock, Google Vertex AI, Microsoft Foundry와 같은 클라우드 제공자를 사용할 수 있습니다.

10 

11## Claude Code에 로그인

12 

13[Claude Code를 설치](/ko/setup#install-claude-code)한 후 터미널에서 `claude`를 실행합니다. 처음 실행할 때 Claude Code는 로그인할 수 있도록 브라우저 창을 엽니다.

14 

15브라우저가 자동으로 열리지 않으면 `c`를 눌러 로그인 URL을 클립보드에 복사한 후 브라우저에 붙여넣습니다.

16 

17브라우저에서 로그인 후 리디렉션 대신 로그인 코드를 표시하면 터미널의 `Paste code here if prompted` 프롬프트에 붙여넣습니다. 이는 브라우저가 Claude Code의 로컬 콜백 서버에 도달할 수 없을 때 발생하며, WSL2, SSH 세션 및 컨테이너에서 일반적입니다.

18 

19다음 계정 유형 중 하나로 인증할 수 있습니다:

20 

21* **Claude Pro 또는 Max 구독**: Claude.ai 계정으로 로그인합니다. [claude.com/pricing](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=authentication_pro_max)에서 구독합니다.

22* **Claude for Teams 또는 Enterprise**: 팀 관리자가 초대한 Claude.ai 계정으로 로그인합니다.

23* **Claude Console**: Console 자격증명으로 로그인합니다. 관리자가 먼저 [초대](#claude-console-authentication)해야 합니다.

24* **클라우드 제공자**: 조직에서 [Amazon Bedrock](/ko/amazon-bedrock), [Google Vertex AI](/ko/google-vertex-ai), 또는 [Microsoft Foundry](/ko/microsoft-foundry)를 사용하는 경우 `claude`를 실행하기 전에 필요한 환경 변수를 설정합니다. 브라우저 로그인이 필요하지 않습니다.

25 

26Claude Code 프롬프트에서 `/logout`을 입력하여 로그아웃하고 다시 인증합니다.

27 

28로그인에 문제가 있으면 [인증 문제 해결](/ko/troubleshoot-install#login-and-authentication)을 참조합니다.

29 

30## 팀 인증 설정

31 

32팀과 조직의 경우 다음 방법 중 하나로 Claude Code 액세스를 구성할 수 있습니다:

33 

34* [Claude for Teams 또는 Enterprise](#claude-for-teams-or-enterprise), 대부분의 팀에 권장됨

35* [Claude Console](#claude-console-authentication)

36* [Amazon Bedrock](/ko/amazon-bedrock)

37* [Google Vertex AI](/ko/google-vertex-ai)

38* [Microsoft Foundry](/ko/microsoft-foundry)

39 

40### Claude for Teams 또는 Enterprise

41 

42[Claude for Teams](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=authentication_teams#team-&-enterprise)와 [Claude for Enterprise](https://anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=authentication_enterprise)는 Claude Code를 사용하는 조직에 최고의 경험을 제공합니다. 팀 멤버는 중앙 집중식 청구 및 팀 관리를 통해 Claude Code와 웹의 Claude에 모두 액세스할 수 있습니다.

43 

44* **Claude for Teams**: 협업 기능, 관리 도구, 청구 관리가 포함된 셀프 서비스 플랜입니다. 소규모 팀에 최적입니다.

45* **Claude for Enterprise**: SSO, 도메인 캡처, 역할 기반 권한, 규정 준수 API, 조직 전체 Claude Code 구성을 위한 관리형 정책 설정을 추가합니다. 보안 및 규정 준수 요구 사항이 있는 대규모 조직에 최적입니다.

46 

47<Steps>

48 <Step title="구독">

49 [Claude for Teams](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=authentication_teams_step#team-&-enterprise)를 구독하거나 [Claude for Enterprise](https://anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=authentication_enterprise_step)에 대해 영업팀에 문의합니다.

50 </Step>

51 

52 <Step title="팀 멤버 초대">

53 관리자 대시보드에서 팀 멤버를 초대합니다.

54 </Step>

55 

56 <Step title="설치 및 로그인">

57 팀 멤버는 Claude Code를 설치하고 Claude.ai 계정으로 로그인합니다.

58 </Step>

59</Steps>

60 

61### Claude Console 인증

62 

63API 기반 청구를 선호하는 조직의 경우 Claude Console을 통해 액세스를 설정할 수 있습니다.

64 

65<Steps>

66 <Step title="Console 계정 생성 또는 사용">

67 기존 Claude Console 계정을 사용하거나 새로 만듭니다.

68 </Step>

69 

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

71 다음 방법 중 하나로 사용자를 추가할 수 있습니다:

72 

73 * Console 내에서 사용자를 일괄 초대: Settings -> Members -> Invite

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

75 </Step>

76 

77 <Step title="역할 할당">

78 사용자를 초대할 때 다음 중 하나를 할당합니다:

79 

80 * **Claude Code** 역할: 사용자는 Claude Code API 키만 생성할 수 있습니다

81 * **Developer** 역할: 사용자는 모든 종류의 API 키를 생성할 수 있습니다

82 </Step>

83 

84 <Step title="사용자가 설정 완료">

85 초대된 각 사용자는 다음을 수행해야 합니다:

86 

87 * Console 초대 수락

88 * [시스템 요구 사항 확인](/ko/setup#system-requirements)

89 * [Claude Code 설치](/ko/setup#install-claude-code)

90 * Console 계정 자격증명으로 로그인

91 </Step>

92</Steps>

93 

94### 클라우드 제공자 인증

95 

96Amazon Bedrock, Google Vertex AI 또는 Microsoft Foundry를 사용하는 팀의 경우:

97 

98<Steps>

99 <Step title="제공자 설정 따르기">

100 [Bedrock 문서](/ko/amazon-bedrock), [Vertex 문서](/ko/google-vertex-ai), 또는 [Microsoft Foundry 문서](/ko/microsoft-foundry)를 따릅니다.

101 </Step>

102 

103 <Step title="구성 배포">

104 환경 변수와 클라우드 자격증명 생성 지침을 사용자에게 배포합니다. [여기에서 구성을 관리하는 방법](/ko/settings)에 대해 자세히 알아봅니다.

105 </Step>

106 

107 <Step title="Claude Code 설치">

108 사용자는 [Claude Code를 설치](/ko/setup#install-claude-code)할 수 있습니다.

109 </Step>

110</Steps>

111 

112## 자격증명 관리

113 

114Claude Code는 인증 자격증명을 안전하게 관리합니다:

115 

116* **저장 위치**: macOS에서 자격증명은 암호화된 macOS Keychain에 저장됩니다. Linux 및 Windows에서 자격증명은 `~/.claude/.credentials.json`에 저장되거나, 해당 변수가 설정된 경우 `$CLAUDE_CONFIG_DIR` 아래에 저장됩니다. Linux에서 파일은 모드 `0600`으로 작성되며, Windows에서는 사용자 프로필 디렉터리의 액세스 제어를 상속합니다.

117* **지원되는 인증 유형**: Claude.ai 자격증명, Claude API 자격증명, Azure Auth, Bedrock Auth, Vertex Auth.

118* **사용자 정의 자격증명 스크립트**: [`apiKeyHelper`](/ko/settings#available-settings) 설정을 구성하여 API 키를 반환하는 셸 스크립트를 실행할 수 있습니다.

119* **새로고침 간격**: 기본적으로 `apiKeyHelper`는 5분 후 또는 HTTP 401 응답 시 호출됩니다. 사용자 정의 새로고침 간격을 위해 `CLAUDE_CODE_API_KEY_HELPER_TTL_MS` 환경 변수를 설정합니다.

120* **느린 도우미 알림**: `apiKeyHelper`가 키를 반환하는 데 10초 이상 걸리면 Claude Code는 경과 시간을 표시하는 프롬프트 표시줄에 경고 알림을 표시합니다. 이 알림이 정기적으로 표시되면 자격증명 스크립트를 최적화할 수 있는지 확인합니다.

121 

122`apiKeyHelper`, `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`은 터미널 CLI 세션에만 적용됩니다. Claude Desktop 및 원격 세션은 OAuth를 독점적으로 사용하며 `apiKeyHelper`를 호출하거나 API 키 환경 변수를 읽지 않습니다.

123 

124### 인증 우선순위

125 

126여러 자격증명이 있을 때 Claude Code는 다음 순서로 선택합니다:

127 

1281. `CLAUDE_CODE_USE_BEDROCK`, `CLAUDE_CODE_USE_VERTEX`, 또는 `CLAUDE_CODE_USE_FOUNDRY`가 설정된 경우 클라우드 제공자 자격증명. 설정은 [타사 통합](/ko/third-party-integrations)을 참조합니다.

1292. `ANTHROPIC_AUTH_TOKEN` 환경 변수. `Authorization: Bearer` 헤더로 전송됩니다. Anthropic API 키 대신 베어러 토큰으로 인증하는 [LLM 게이트웨이 또는 프록시](/ko/llm-gateway)를 통해 라우팅할 때 사용합니다.

1303. `ANTHROPIC_API_KEY` 환경 변수. `X-Api-Key` 헤더로 전송됩니다. [Claude Console](https://platform.claude.com)의 키를 사용하여 Anthropic API에 직접 액세스할 때 사용합니다. 대화형 모드에서는 키를 승인하거나 거부하도록 한 번 프롬프트되며 선택이 기억됩니다. 나중에 변경하려면 `/config`의 "Use custom API key" 토글을 사용합니다. 비대화형 모드(`-p`)에서는 키가 있을 때 항상 사용됩니다.

1314. [`apiKeyHelper`](/ko/settings#available-settings) 스크립트 출력. 자격증명 모음에서 가져온 단기 토큰과 같은 동적 또는 회전 자격증명에 사용합니다.

1325. `CLAUDE_CODE_OAUTH_TOKEN` 환경 변수. [`claude setup-token`](#generate-a-long-lived-token)으로 생성된 장기 OAuth 토큰입니다. 브라우저 로그인을 사용할 수 없는 CI 파이프라인 및 스크립트에 사용합니다.

1336. `/login`의 구독 OAuth 자격증명. Claude Pro, Max, Team, Enterprise 사용자의 기본값입니다.

134 

135활성 Claude 구독이 있지만 환경에 `ANTHROPIC_API_KEY`도 설정되어 있으면 승인된 후 API 키가 우선합니다. 키가 비활성화되거나 만료된 조직에 속하면 인증 실패가 발생할 수 있습니다. `unset ANTHROPIC_API_KEY`를 실행하여 구독으로 돌아가고 `/status`를 확인하여 활성 방법을 확인합니다.

136 

137[Claude Code on the Web](/ko/claude-code-on-the-web)은 항상 구독 자격증명을 사용합니다. 샌드박스 환경의 `ANTHROPIC_API_KEY` 및 `ANTHROPIC_AUTH_TOKEN`은 이를 재정의하지 않습니다.

138 

139### 장기 토큰 생성

140 

141CI 파이프라인, 스크립트 또는 대화형 브라우저 로그인을 사용할 수 없는 기타 환경의 경우 `claude setup-token`으로 1년 OAuth 토큰을 생성합니다:

142 

143```bash theme={null}

144claude setup-token

145```

146 

147명령은 OAuth 인증을 안내하고 터미널에 토큰을 인쇄합니다. 토큰을 어디에도 저장하지 않으므로 복사하여 인증하려는 곳에 `CLAUDE_CODE_OAUTH_TOKEN` 환경 변수로 설정합니다:

148 

149```bash theme={null}

150export CLAUDE_CODE_OAUTH_TOKEN=your-token

151```

152 

153이 토큰은 Claude 구독으로 인증하며 Pro, Max, Team 또는 Enterprise 플랜이 필요합니다. 추론만으로 범위가 지정되며 [Remote Control](/ko/remote-control) 세션을 설정할 수 없습니다.

154 

155[Bare mode](/ko/headless#start-faster-with-bare-mode)는 `CLAUDE_CODE_OAUTH_TOKEN`을 읽지 않습니다. 스크립트가 `--bare`를 전달하면 `ANTHROPIC_API_KEY` 또는 `apiKeyHelper`로 인증합니다.

auto-mode-config.md +178 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 자동 모드 구성

6 

7> 자동 모드 분류기에 조직이 신뢰하는 저장소, 버킷 및 도메인을 알려줍니다. 환경 컨텍스트를 설정하고, 기본 차단 및 허용 규칙을 재정의하며, 자동 모드 CLI 하위 명령으로 유효한 구성을 검사합니다.

8 

9[자동 모드](/ko/permission-modes#eliminate-prompts-with-auto-mode)를 사용하면 Claude Code가 각 도구 호출을 분류기를 통해 라우팅하여 권한 프롬프트 없이 실행될 수 있습니다. 분류기는 되돌릴 수 없거나 파괴적이거나 환경 외부를 대상으로 하는 모든 것을 차단합니다. `autoMode` 설정 블록을 사용하여 분류기에 조직이 신뢰하는 저장소, 버킷 및 도메인을 알려주면, 분류기가 일상적인 내부 작업 차단을 중지합니다.

10 

11<Note>

12 자동 모드는 Anthropic API를 통해 Max, Team, Enterprise 및 API 플랜에서 사용할 수 있습니다. Pro 플랜이나 Bedrock, Vertex 또는 Foundry에서는 사용할 수 없습니다. Claude Code가 계정에서 자동 모드를 사용할 수 없다고 보고하는 경우, [전체 요구사항](/ko/permission-modes#eliminate-prompts-with-auto-mode)을 확인하세요. 여기에는 지원되는 모델과 Team 및 Enterprise 플랜의 관리자 활성화도 포함됩니다.

13</Note>

14 

15기본적으로 분류기는 작업 디렉토리와 현재 저장소의 구성된 원격 저장소만 신뢰합니다. 회사의 소스 제어 조직에 푸시하거나 팀 클라우드 버킷에 쓰기와 같은 작업은 `autoMode.environment`에 추가할 때까지 차단됩니다.

16 

17자동 모드를 활성화하는 방법과 기본적으로 차단되는 항목에 대해서는 [권한 모드](/ko/permission-modes#eliminate-prompts-with-auto-mode)를 참조하세요. 이 페이지는 구성 참조입니다.

18 

19이 페이지에서 다루는 내용:

20 

21* [규칙을 설정할 위치 선택](#where-the-classifier-reads-configuration) - CLAUDE.md, 사용자 설정 및 관리 설정 전체

22* [신뢰할 수 있는 인프라 정의](#define-trusted-infrastructure) - `autoMode.environment` 사용

23* [차단 및 허용 규칙 재정의](#override-the-block-and-allow-rules) - 기본값이 파이프라인에 맞지 않을 때

24* [유효한 구성 검사](#inspect-the-defaults-and-your-effective-config) - `claude auto-mode` 하위 명령 사용

25* [거부 검토](#review-denials) - 다음에 추가할 항목 파악

26 

27## 분류기가 구성을 읽는 위치

28 

29분류기는 Claude 자체가 로드하는 동일한 [CLAUDE.md](/ko/memory) 콘텐츠를 읽으므로, 프로젝트의 CLAUDE.md에 있는 "절대 강제 푸시하지 마세요"와 같은 지시사항은 Claude와 분류기를 동시에 제어합니다. 프로젝트 규칙과 동작 규칙은 여기서 시작하세요.

30 

31신뢰할 수 있는 인프라나 조직 전체 거부 규칙과 같이 여러 프로젝트에 적용되는 규칙의 경우 `autoMode` 설정 블록을 사용하세요. 분류기는 다음 범위에서 `autoMode`를 읽습니다:

32 

33| 범위 | 파일 | 용도 |

34| :---------------------------- | :----------------------------------- | :----------------------------------- |

35| 한 명의 개발자 | `~/.claude/settings.json` | 개인 신뢰할 수 있는 인프라 |

36| 한 프로젝트, 한 명의 개발자 | `.claude/settings.local.json` | 프로젝트별 신뢰할 수 있는 버킷 또는 서비스, gitignored |

37| 조직 전체 | [관리 설정](/ko/server-managed-settings) | 모든 개발자에게 배포된 신뢰할 수 있는 인프라 |

38| `--settings` 플래그 또는 Agent SDK | 인라인 JSON | 자동화를 위한 호출별 재정의 |

39 

40분류기는 `.claude/settings.json`의 공유 프로젝트 설정에서 `autoMode`를 읽지 않으므로, 체크인된 저장소는 자체 허용 규칙을 주입할 수 없습니다.

41 

42각 범위의 항목이 결합됩니다. 개발자는 개인 항목으로 `environment`, `allow` 및 `soft_deny`를 확장할 수 있지만 관리 설정이 제공하는 항목을 제거할 수 없습니다. 허용 규칙이 분류기 내의 차단 규칙에 대한 예외로 작동하기 때문에, 개발자가 추가한 `allow` 항목은 조직의 `soft_deny` 항목을 재정의할 수 있습니다. 조합은 가산적이며, 하드 정책 경계가 아닙니다.

43 

44<Note>

45 분류기는 [권한 시스템](/ko/permissions) 이후에 실행되는 두 번째 게이트입니다. 사용자 의도나 분류기 구성에 관계없이 절대 실행되어서는 안 되는 작업의 경우, 관리 설정에서 `permissions.deny`를 사용하세요. 이는 분류기가 참조되기 전에 작업을 차단하며 재정의될 수 없습니다.

46</Note>

47 

48## 신뢰할 수 있는 인프라 정의

49 

50대부분의 조직에서 `autoMode.environment`는 설정해야 하는 유일한 필드입니다. 분류기에 신뢰할 수 있는 저장소, 버킷 및 도메인을 알려줍니다. 분류기는 이를 사용하여 "외부"가 무엇을 의미하는지 결정하므로, 나열되지 않은 모든 대상은 잠재적 정보 유출 대상입니다.

51 

52기본 환경 목록은 작업 저장소와 그 구성된 원격 저장소를 신뢰합니다. 기본값과 함께 자신의 항목을 추가하려면 배열에 리터럴 문자열 `"$defaults"`를 포함하세요. 기본 항목은 해당 위치에 삽입되므로, 사용자 정의 항목은 기본값 앞이나 뒤에 올 수 있습니다.

53 

54```json theme={null}

55{

56 "autoMode": {

57 "environment": [

58 "$defaults",

59 "Source control: github.example.com/acme-corp and all repos under it",

60 "Trusted cloud buckets: s3://acme-build-artifacts, gs://acme-ml-datasets",

61 "Trusted internal domains: *.corp.example.com, api.internal.example.com",

62 "Key internal services: Jenkins at ci.example.com, Artifactory at artifacts.example.com"

63 ]

64 }

65}

66```

67 

68항목은 정규식이나 도구 패턴이 아닌 산문입니다. 분류기는 이를 자연어 규칙으로 읽습니다. 새로운 엔지니어에게 인프라를 설명하는 방식으로 작성하세요. 철저한 환경 섹션은 다음을 포함합니다:

69 

70* **조직**: 회사 이름 및 Claude Code가 주로 사용되는 용도(예: 소프트웨어 개발, 인프라 자동화 또는 데이터 엔지니어링)

71* **소스 제어**: 개발자가 푸시하는 모든 GitHub, GitLab 또는 Bitbucket 조직

72* **클라우드 제공자 및 신뢰할 수 있는 버킷**: Claude가 읽고 쓸 수 있어야 하는 버킷 이름 또는 접두사

73* **신뢰할 수 있는 내부 도메인**: 네트워크 내부의 API, 대시보드 및 서비스에 대한 호스트명(예: `*.internal.example.com`)

74* **주요 내부 서비스**: CI, 아티팩트 레지스트리, 내부 패키지 인덱스, 인시던트 도구

75* **추가 컨텍스트**: 규제 산업 제약, 다중 테넌트 인프라 또는 분류기가 위험으로 취급해야 할 사항에 영향을 미치는 규정 준수 요구사항

76 

77유용한 시작 템플릿: 괄호로 묶인 필드를 채우고 적용되지 않는 줄을 제거하세요.

78 

79```json theme={null}

80{

81 "autoMode": {

82 "environment": [

83 "$defaults",

84 "Organization: {COMPANY_NAME}. Primary use: {PRIMARY_USE_CASE, e.g. software development, infrastructure automation}",

85 "Source control: {SOURCE_CONTROL, e.g. GitHub org github.example.com/acme-corp}",

86 "Cloud provider(s): {CLOUD_PROVIDERS, e.g. AWS, GCP, Azure}",

87 "Trusted cloud buckets: {TRUSTED_BUCKETS, e.g. s3://acme-builds, gs://acme-datasets}",

88 "Trusted internal domains: {TRUSTED_DOMAINS, e.g. *.internal.example.com, api.example.com}",

89 "Key internal services: {SERVICES, e.g. Jenkins at ci.example.com, Artifactory at artifacts.example.com}",

90 "Additional context: {EXTRA, e.g. regulated industry, multi-tenant infrastructure, compliance requirements}"

91 ]

92 }

93}

94```

95 

96제공하는 컨텍스트가 구체적일수록 분류기가 일상적인 내부 작업과 정보 유출 시도를 더 잘 구분할 수 있습니다.

97 

98모든 것을 한 번에 채울 필요는 없습니다. 합리적인 롤아웃: 기본값으로 시작하여 소스 제어 조직과 주요 내부 서비스를 추가하세요. 이는 자신의 저장소에 푸시하는 것과 같은 가장 일반적인 거짓 양성을 해결합니다. 다음으로 신뢰할 수 있는 도메인과 클라우드 버킷을 추가하세요. 차단이 발생할 때 나머지를 채우세요.

99 

100## 차단 및 허용 규칙 재정의

101 

102두 개의 추가 필드를 사용하여 분류기의 기본 제공 규칙 목록을 바꿀 수 있습니다: `autoMode.soft_deny`는 차단되는 항목을 제어하고, `autoMode.allow`는 적용되는 예외를 제어합니다. 각각은 자연어 규칙으로 읽히는 산문 설명의 배열입니다. `autoMode.deny` 필드는 없습니다. 의도에 관계없이 작업을 하드 블록하려면 분류기 이전에 실행되는 [`permissions.deny`](/ko/permissions)를 사용하세요.

103 

104분류기 내에서 우선순위는 세 가지 계층으로 작동합니다:

105 

106* `soft_deny` 규칙이 먼저 차단합니다

107* `allow` 규칙이 일치하는 차단을 예외로 재정의합니다

108* 명시적 사용자 의도가 둘 다 재정의합니다: 사용자의 메시지가 Claude가 수행하려는 정확한 작업을 직접적이고 구체적으로 설명하면, `soft_deny` 규칙이 일치하더라도 분류기가 이를 허용합니다

109 

110일반적인 요청은 명시적 의도로 계산되지 않습니다. Claude에게 "저장소를 정리해 달라"고 요청하는 것은 강제 푸시를 승인하지 않지만, "이 브랜치를 강제 푸시해 달라"고 요청하는 것은 승인합니다.

111 

112기본 규칙을 유지하면서 자신의 규칙을 추가하려면 배열에 리터럴 문자열 `"$defaults"`를 포함하세요. 기본 규칙이 해당 위치에 삽입되므로, 사용자 정의 규칙이 앞이나 뒤에 올 수 있으며, 릴리스 전반에 걸쳐 기본 제공 목록이 변경되면서 업데이트를 계속 상속받습니다.

113 

114```json theme={null}

115{

116 "autoMode": {

117 "environment": [

118 "$defaults",

119 "Source control: github.example.com/acme-corp and all repos under it"

120 ],

121 "allow": [

122 "$defaults",

123 "Deploying to the staging namespace is allowed: staging is isolated from production and resets nightly",

124 "Writing to s3://acme-scratch/ is allowed: ephemeral bucket with a 7-day lifecycle policy"

125 ],

126 "soft_deny": [

127 "$defaults",

128 "Never run database migrations outside the migrations CLI, even against dev databases",

129 "Never modify files under infra/terraform/prod/: production infrastructure changes go through the review workflow"

130 ]

131 }

132}

133```

134 

135<Danger>

136 `environment`, `allow` 또는 `soft_deny` 중 하나를 `"$defaults"` 없이 설정하면 해당 섹션의 전체 기본 목록이 바뀝니다. 단일 항목으로 `soft_deny`를 설정하고 `"$defaults"`를 생략하면 모든 기본 제공 차단 규칙이 버려집니다: 강제 푸시, 데이터 유출, `curl | bash`, 프로덕션 배포 및 기타 모든 기본 차단 규칙이 허용됩니다. `"$defaults"`를 생략하는 것은 목록의 전체 소유권을 가질 의도가 있을 때만 하세요. 이 경우 `claude auto-mode defaults`를 실행하여 기본 제공 규칙을 인쇄하고, 설정 파일에 복사한 다음, 각 규칙을 자신의 파이프라인 및 위험 허용도와 비교하여 검토하세요.

137</Danger>

138 

139각 섹션은 독립적으로 평가되므로, `environment`만 설정하면 기본 `allow` 및 `soft_deny` 목록은 그대로 유지됩니다.

140 

141## 기본값 및 유효한 구성 검사

142 

143세 가지 CLI 하위 명령이 구성을 검사하고 유효성을 검사하는 데 도움이 됩니다.

144 

145기본 제공 `environment`, `allow` 및 `soft_deny` 규칙을 JSON으로 인쇄합니다:

146 

147```bash theme={null}

148claude auto-mode defaults

149```

150 

151분류기가 실제로 사용하는 것을 JSON으로 인쇄합니다. 설정된 경우 설정이 적용되고 그렇지 않으면 기본값입니다:

152 

153```bash theme={null}

154claude auto-mode config

155```

156 

157사용자 정의 `allow` 및 `soft_deny` 규칙에 대한 AI 피드백을 받습니다:

158 

159```bash theme={null}

160claude auto-mode critique

161```

162 

163설정을 저장한 후 `claude auto-mode config`를 실행하여 유효한 규칙이 예상한 것인지 확인하세요. `"$defaults"`가 제자리에 확장됩니다. 사용자 정의 규칙을 작성한 경우 `claude auto-mode critique`가 이를 검토하고 모호하거나 중복되거나 거짓 양성을 유발할 가능성이 있는 항목을 플래그합니다. 기본 제공 규칙을 추가하는 대신 제거하거나 다시 작성해야 하는 경우 `claude auto-mode defaults`의 출력을 파일에 저장하고, 목록을 편집한 다음, 결과를 설정 파일에 `"$defaults"` 대신 붙여넣으세요.

164 

165## 거부 검토

166 

167자동 모드가 도구 호출을 거부하면, 거부는 `/permissions` 아래의 최근 거부 탭에 기록됩니다. 거부된 작업에서 `r`을 누르면 재시도 표시됩니다: 대화 상자를 종료하면 Claude Code가 모델에 해당 도구 호출을 재시도할 수 있음을 알리는 메시지를 보내고 대화를 재개합니다.

168 

169동일한 대상에 대한 반복된 거부는 일반적으로 분류기가 컨텍스트를 놓치고 있음을 의미합니다. 해당 대상을 `autoMode.environment`에 추가한 다음 `claude auto-mode config`를 실행하여 적용되었는지 확인하세요.

170 

171거부에 프로그래밍 방식으로 반응하려면 [`PermissionDenied` 훅](/ko/hooks#permissiondenied)을 사용하세요.

172 

173## 참고 항목

174 

175* [권한 모드](/ko/permission-modes#eliminate-prompts-with-auto-mode): 자동 모드가 무엇인지, 기본적으로 차단되는 항목 및 활성화 방법

176* [관리 설정](/ko/server-managed-settings): 조직 전체에 `autoMode` 구성 배포

177* [권한](/ko/permissions): 분류기가 실행되기 전에 적용되는 허용, 요청 및 거부 규칙

178* [설정](/ko/settings): `autoMode` 키를 포함한 전체 설정 참조

best-practices.md +583 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Claude Code 모범 사례

6 

7> 환경 구성부터 병렬 세션 확장까지 Claude Code를 최대한 활용하기 위한 팁과 패턴입니다.

8 

9Claude Code는 에이전트 코딩 환경입니다. 질문에 답하고 기다리는 챗봇과 달리 Claude Code는 파일을 읽고, 명령을 실행하고, 변경을 수행하며, 당신이 지켜보거나 방향을 바꾸거나 완전히 떠나 있는 동안에도 자율적으로 문제를 해결할 수 있습니다.

10 

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

12 

13하지만 이러한 자율성에도 학습 곡선이 있습니다. Claude는 이해해야 할 특정 제약 조건 내에서 작동합니다.

14 

15이 가이드는 Anthropic의 내부 팀과 다양한 코드베이스, 언어, 환경에서 Claude Code를 사용하는 엔지니어들 사이에서 효과적으로 입증된 패턴을 다룹니다. 에이전트 루프가 내부적으로 어떻게 작동하는지에 대해서는 [Claude Code 작동 방식](/ko/how-claude-code-works)을 참조하십시오.

16 

17***

18 

19대부분의 모범 사례는 하나의 제약 조건을 기반으로 합니다: Claude의 context window가 빠르게 채워지고, 채워질수록 성능이 저하됩니다.

20 

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

22 

23LLM 성능이 context가 채워질수록 저하되기 때문에 이는 중요합니다. context window가 거의 가득 차면 Claude는 이전 지시사항을 "잊기" 시작하거나 더 많은 실수를 할 수 있습니다. context window는 관리해야 할 가장 중요한 리소스입니다. 세션이 실제로 어떻게 채워지는지 보려면 [대화형 연습](/ko/context-window)을 시청하여 시작 시 로드되는 것과 각 파일 읽기의 비용을 확인하십시오. [사용자 정의 상태 줄](/ko/statusline)로 context 사용량을 지속적으로 추적하고, [토큰 사용량 감소](/ko/costs#reduce-token-usage)에서 토큰 사용량을 줄이기 위한 전략을 참조하십시오.

24 

25***

26 

27## Claude에게 작업을 검증할 방법 제공하기

28 

29<Tip>

30 Claude가 자신의 작업을 확인할 수 있도록 테스트, 스크린샷 또는 예상 출력을 포함하십시오. 이것이 할 수 있는 가장 높은 영향력의 단일 작업입니다.

31</Tip>

32 

33Claude는 테스트를 실행하고, 스크린샷을 비교하고, 출력을 검증하는 등 자신의 작업을 검증할 수 있을 때 훨씬 더 잘 수행합니다.

34 

35명확한 성공 기준이 없으면 올바르게 보이지만 실제로는 작동하지 않는 것을 생성할 수 있습니다. 당신이 유일한 피드백 루프가 되고, 모든 실수가 당신의 주의를 필요로 합니다.

36 

37| 전략 | 이전 | 이후 |

38| ---------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

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

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

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

42 

43UI 변경 사항은 [Chrome 확장 프로그램의 Claude](/ko/chrome)를 사용하여 검증할 수 있습니다. 브라우저에서 새 탭을 열고, UI를 테스트하고, 코드가 작동할 때까지 반복합니다.

44 

45검증은 테스트 스위트, linter 또는 출력을 확인하는 Bash 명령일 수도 있습니다. 검증을 견고하게 만드는 데 투자하십시오.

46 

47***

48 

49## 먼저 탐색하고, 그 다음 계획하고, 그 다음 코드 작성하기

50 

51<Tip>

52 연구 및 계획을 구현과 분리하여 잘못된 문제를 해결하는 것을 피하십시오.

53</Tip>

54 

55Claude가 바로 코딩으로 뛰어들도록 하면 잘못된 문제를 해결하는 코드가 생성될 수 있습니다. [Plan Mode](/ko/common-workflows#use-plan-mode-for-safe-code-analysis)를 사용하여 탐색을 실행과 분리하십시오.

56 

57권장 워크플로우에는 4가지 단계가 있습니다:

58 

59<Steps>

60 <Step title="탐색">

61 Plan Mode를 입력하십시오. Claude는 파일을 읽고 변경을 수행하지 않고 질문에 답합니다.

62 

63 ```txt claude (Plan Mode) theme={null}

64 /src/auth를 읽고 세션 및 로그인을 어떻게 처리하는지 이해하세요.

65 또한 비밀에 대한 환경 변수를 어떻게 관리하는지 살펴보세요.

66 ```

67 </Step>

68 

69 <Step title="계획">

70 Claude에게 상세한 구현 계획을 작성하도록 요청하십시오.

71 

72 ```txt claude (Plan Mode) theme={null}

73 Google OAuth를 추가하고 싶습니다. 어떤 파일을 변경해야 합니까?

74 세션 흐름은 무엇입니까? 계획을 작성하세요.

75 ```

76 

77 `Ctrl+G`를 눌러 Claude가 진행하기 전에 텍스트 편집기에서 계획을 열어 직접 편집하십시오.

78 </Step>

79 

80 <Step title="구현">

81 Normal Mode로 전환하고 Claude가 코드를 작성하도록 하여 계획에 대해 검증하십시오.

82 

83 ```txt claude (Normal Mode) theme={null}

84 계획에서 OAuth 흐름을 구현하세요. 콜백 핸들러에 대한 테스트를 작성하고,

85 테스트 스위트를 실행하고 실패를 수정하세요.

86 ```

87 </Step>

88 

89 <Step title="커밋">

90 Claude에게 설명적인 메시지로 커밋하고 PR을 생성하도록 요청하십시오.

91 

92 ```txt claude (Normal Mode) theme={null}

93 설명적인 메시지로 커밋하고 PR을 열기

94 ```

95 </Step>

96</Steps>

97 

98<Callout>

99 Plan Mode는 유용하지만 오버헤드도 추가합니다.

100 

101 범위가 명확하고 수정이 작은 작업(예: 오타 수정, 로그 줄 추가 또는 변수 이름 바꾸기)의 경우 Claude에게 직접 수행하도록 요청하십시오.

102 

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

104</Callout>

105 

106***

107 

108## 프롬프트에서 구체적인 컨텍스트 제공하기

109 

110<Tip>

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

112</Tip>

113 

114Claude는 의도를 추론할 수 있지만 마음을 읽을 수는 없습니다. 특정 파일을 참조하고, 제약 조건을 언급하고, 예제 패턴을 지적하십시오.

115 

116| 전략 | 이전 | 이후 |

117| ---------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

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

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

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

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

122 

123모호한 프롬프트는 탐색 중이고 과정을 수정할 여유가 있을 때 유용할 수 있습니다. `"이 파일에서 무엇을 개선하시겠습니까?"`와 같은 프롬프트는 당신이 생각하지 못했을 것들을 드러낼 수 있습니다.

124 

125### 풍부한 콘텐츠 제공하기

126 

127<Tip>

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

129</Tip>

130 

131여러 가지 방법으로 Claude에게 풍부한 데이터를 제공할 수 있습니다:

132 

133* **`@`로 파일 참조** 코드가 어디에 있는지 설명하는 대신. Claude는 응답하기 전에 파일을 읽습니다.

134* **이미지를 직접 붙여넣기**. 프롬프트에 이미지를 복사/붙여넣기 또는 드래그 앤 드롭하십시오.

135* **문서 및 API 참조에 URL 제공**. `/permissions`를 사용하여 자주 사용되는 도메인을 허용 목록에 추가하십시오.

136* **데이터 파이프** `cat error.log | claude`를 실행하여 파일 내용을 직접 전송하십시오.

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

138 

139***

140 

141## 환경 구성하기

142 

143몇 가지 설정 단계를 통해 Claude Code를 모든 세션에서 훨씬 더 효과적으로 만들 수 있습니다. 확장 기능의 전체 개요 및 각 기능을 사용할 시기에 대해서는 [Claude Code 확장](/ko/features-overview)을 참조하십시오.

144 

145### 효과적인 CLAUDE.md 작성하기

146 

147<Tip>

148 `/init`을 실행하여 현재 프로젝트 구조를 기반으로 시작 CLAUDE.md 파일을 생성한 다음 시간이 지남에 따라 개선하십시오.

149</Tip>

150 

151CLAUDE.md는 Claude가 모든 대화의 시작 부분에서 읽는 특수 파일입니다. Bash 명령, 코드 스타일 및 워크플로우 규칙을 포함하십시오. 이는 Claude에게 코드만으로는 추론할 수 없는 지속적인 컨텍스트를 제공합니다.

152 

153`/init` 명령은 코드베이스를 분석하여 빌드 시스템, 테스트 프레임워크 및 코드 패턴을 감지하여 개선할 수 있는 견고한 기초를 제공합니다.

154 

155CLAUDE.md 파일에 필수 형식은 없지만 짧고 인간이 읽을 수 있도록 유지하십시오. 예를 들어:

156 

157```markdown CLAUDE.md theme={null}

158# 코드 스타일

159- ES 모듈(import/export) 구문을 사용하고, CommonJS(require)는 사용하지 마세요

160- 가능하면 import를 구조 분해하세요 (예: import { foo } from 'bar')

161 

162# 워크플로우

163- 일련의 코드 변경을 완료했을 때 타입 체크를 확인하세요

164- 성능상 이유로 전체 테스트 스위트가 아닌 단일 테스트를 실행하는 것을 선호하세요

165```

166 

167CLAUDE.md는 모든 세션에서 로드되므로 광범위하게 적용되는 것만 포함하십시오. 도메인 지식이나 때때만 관련된 워크플로우의 경우 대신 [skills](/ko/skills)를 사용하십시오. Claude는 필요에 따라 로드하므로 모든 대화를 복잡하게 하지 않습니다.

168 

169간결하게 유지하십시오. 각 줄에 대해 다음을 물어보십시오: *"이것을 제거하면 Claude가 실수를 할까?"* 그렇지 않으면 삭제하십시오. 부풀려진 CLAUDE.md 파일은 Claude가 실제 지시사항을 무시하게 합니다!

170 

171| ✅ 포함 | ❌ 제외 |

172| ------------------------ | -------------------------- |

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

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

175| 테스트 지시사항 및 선호하는 테스트 러너 | 상세한 API 문서(대신 문서 링크) |

176| 저장소 에티켓(분기 이름 지정, PR 규칙) | 자주 변경되는 정보 |

177| 프로젝트에 특정한 아키텍처 결정 | 긴 설명 또는 튜토리얼 |

178| 개발자 환경 특이성(필수 환경 변수) | 자명한 관행(예: "깨끗한 코드 작성") |

179| 일반적인 함정 또는 명백하지 않은 동작 | 파일별 코드베이스 설명 |

180 

181Claude가 규칙에도 불구하고 계속 원하지 않는 작업을 수행하면 파일이 너무 길어서 규칙이 손실되고 있을 가능성이 있습니다. Claude가 CLAUDE.md에서 답변된 질문을 하면 표현이 모호할 수 있습니다. CLAUDE.md를 코드처럼 취급하십시오: 문제가 발생하면 검토하고, 정기적으로 정리하고, 변경 사항을 관찰하여 Claude의 동작이 실제로 변경되는지 테스트하십시오.

182 

183강조(예: "IMPORTANT" 또는 "YOU MUST")를 추가하여 지시사항을 조정하면 준수를 개선할 수 있습니다. CLAUDE.md를 git에 체크인하여 팀이 기여할 수 있도록 하십시오. 파일은 시간이 지남에 따라 가치가 증가합니다.

184 

185CLAUDE.md 파일은 `@path/to/import` 구문을 사용하여 추가 파일을 가져올 수 있습니다:

186 

187```markdown CLAUDE.md theme={null}

188프로젝트 개요는 @README.md를 참조하고 사용 가능한 npm 명령은 @package.json을 참조하세요.

189 

190# 추가 지시사항

191- Git 워크플로우: @docs/git-instructions.md

192- 개인 재정의: @~/.claude/my-project-instructions.md

193```

194 

195CLAUDE.md 파일을 여러 위치에 배치할 수 있습니다:

196 

197* **홈 폴더(`~/.claude/CLAUDE.md`)**: 모든 Claude 세션에 적용됨

198* **프로젝트 루트(`./CLAUDE.md`)**: git에 체크인하여 팀과 공유

199* **프로젝트 루트(`./CLAUDE.local.md`)**: 개인 프로젝트 특정 노트; 팀과 공유되지 않도록 `.gitignore`에 이 파일을 추가하십시오

200* **상위 디렉토리**: 모노레포에 유용하며, `root/CLAUDE.md`와 `root/foo/CLAUDE.md` 모두 자동으로 가져와집니다

201* **하위 디렉토리**: Claude는 해당 디렉토리의 파일로 작업할 때 필요에 따라 하위 CLAUDE.md 파일을 가져옵니다

202 

203### 권한 구성하기

204 

205<Tip>

206 [auto mode](/ko/permission-modes#eliminate-prompts-with-auto-mode)를 사용하여 분류기가 승인을 처리하도록 하거나, `/permissions`를 사용하여 특정 명령을 허용 목록에 추가하거나, `/sandbox`를 사용하여 OS 수준 격리를 수행하십시오. 각각은 제어를 유지하면서 중단을 줄입니다.

207</Tip>

208 

209기본적으로 Claude Code는 시스템을 수정할 수 있는 작업에 대한 권한을 요청합니다: 파일 쓰기, Bash 명령, MCP 도구 등. 이는 안전하지만 번거롭습니다. 10번째 승인 후에는 실제로 검토하지 않고 클릭만 하고 있습니다. 이러한 중단을 줄이는 세 가지 방법이 있습니다:

210 

211* **Auto mode**: 별도의 분류기 모델이 명령을 검토하고 위험해 보이는 것만 차단합니다: 범위 확대, 알 수 없는 인프라, 또는 적대적 콘텐츠 기반 작업. 작업의 일반적인 방향을 신뢰하지만 모든 단계를 클릭하고 싶지 않을 때 최고입니다

212* **권한 허용 목록**: 안전하다고 알고 있는 특정 도구 허용(예: `npm run lint` 또는 `git commit`)

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

214 

215[권한 모드](/ko/permission-modes), [권한 규칙](/ko/permissions), [샌드박싱](/ko/sandboxing)에 대해 자세히 읽어보십시오.

216 

217### CLI 도구 사용하기

218 

219<Tip>

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

221</Tip>

222 

223CLI 도구는 외부 서비스와 상호 작용하는 가장 context 효율적인 방법입니다. GitHub를 사용하면 `gh` CLI를 설치하십시오. Claude는 이슈 생성, pull 요청 열기, 댓글 읽기에 사용하는 방법을 알고 있습니다. `gh` 없으면 Claude는 여전히 GitHub API를 사용할 수 있지만 인증되지 않은 요청은 종종 속도 제한에 도달합니다.

224 

225Claude는 또한 아직 알지 못하는 CLI 도구를 배우는 데 효과적입니다. `Use 'foo-cli-tool --help' to learn about foo tool, then use it to solve A, B, C.`와 같은 프롬프트를 시도해보십시오.

226 

227### MCP 서버 연결하기

228 

229<Tip>

230 `claude mcp add`를 실행하여 Notion, Figma 또는 데이터베이스와 같은 외부 도구를 연결하십시오.

231</Tip>

232 

233[MCP 서버](/ko/mcp)를 사용하면 이슈 추적기에서 기능을 구현하고, 데이터베이스를 쿼리하고, 모니터링 데이터를 분석하고, Figma에서 디자인을 통합하고, 워크플로우를 자동화하도록 Claude에게 요청할 수 있습니다.

234 

235### hooks 설정하기

236 

237<Tip>

238 예외 없이 매번 발생해야 하는 작업에 hooks를 사용하십시오.

239</Tip>

240 

241[Hooks](/ko/hooks-guide)는 Claude의 워크플로우의 특정 지점에서 자동으로 스크립트를 실행합니다. 권고적인 CLAUDE.md 지시사항과 달리 hooks는 결정론적이며 작업이 발생함을 보장합니다.

242 

243Claude가 hooks를 작성할 수 있습니다. *"모든 파일 편집 후 eslint를 실행하는 hook 작성"* 또는 \*"마이그레이션 폴더에 대한 쓰기를 차단하는 hook 작성"\*과 같은 프롬프트를 시도해보십시오. `.claude/settings.json`을 직접 편집하여 hooks를 구성하고, `/hooks`를 실행하여 구성된 것을 탐색하십시오.

244 

245### skills 생성하기

246 

247<Tip>

248 `.claude/skills/`에 `SKILL.md` 파일을 생성하여 Claude에게 도메인 지식과 재사용 가능한 워크플로우를 제공하십시오.

249</Tip>

250 

251[Skills](/ko/skills)는 프로젝트, 팀 또는 도메인에 특정한 정보로 Claude의 지식을 확장합니다. Claude는 관련이 있을 때 자동으로 적용하거나 `/skill-name`으로 직접 호출할 수 있습니다.

252 

253`.claude/skills/`에 `SKILL.md`가 있는 디렉토리를 추가하여 skill을 생성하십시오:

254 

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

256---

257name: api-conventions

258description: 우리 서비스의 REST API 설계 규칙

259---

260# API 규칙

261- URL 경로에 kebab-case 사용

262- JSON 속성에 camelCase 사용

263- 항상 목록 엔드포인트에 페이지 매김 포함

264- URL 경로에서 API 버전 지정 (/v1/, /v2/)

265```

266 

267Skills는 또한 직접 호출하는 반복 가능한 워크플로우를 정의할 수 있습니다:

268 

269```markdown .claude/skills/fix-issue/SKILL.md theme={null}

270---

271name: fix-issue

272description: GitHub 이슈 수정

273disable-model-invocation: true

274---

275GitHub 이슈를 분석하고 수정하세요: $ARGUMENTS.

276 

2771. `gh issue view`를 사용하여 이슈 세부 정보 가져오기

2782. 이슈에 설명된 문제 이해

2793. 관련 파일에 대한 코드베이스 검색

2804. 이슈를 수정하기 위해 필요한 변경 사항 구현

2815. 수정을 확인하기 위해 테스트 작성 및 실행

2826. 코드가 linting 및 타입 체크를 통과하는지 확인

2837. 설명적인 커밋 메시지 생성

2848. 푸시 및 PR 생성

285```

286 

287`/fix-issue 1234`를 실행하여 호출하십시오. 부작용이 있는 워크플로우의 경우 `disable-model-invocation: true`를 사용하여 수동으로 트리거하려고 합니다.

288 

289### 사용자 정의 subagents 생성하기

290 

291<Tip>

292 `.claude/agents/`에서 전문화된 어시스턴트를 정의하여 Claude가 격리된 작업에 위임할 수 있도록 하십시오.

293</Tip>

294 

295[Subagents](/ko/sub-agents)는 자신의 context와 자신의 허용된 도구 집합으로 실행됩니다. 많은 파일을 읽거나 주요 대화를 복잡하게 하지 않고 전문화된 초점이 필요한 작업에 유용합니다.

296 

297```markdown .claude/agents/security-reviewer.md theme={null}

298---

299name: security-reviewer

300description: 보안 취약점에 대한 코드 검토

301tools: Read, Grep, Glob, Bash

302model: opus

303---

304당신은 선임 보안 엔지니어입니다. 다음에 대해 코드를 검토하세요:

305- 주입 취약점(SQL, XSS, 명령 주입)

306- 인증 및 권한 부여 결함

307- 코드의 비밀 또는 자격 증명

308- 안전하지 않은 데이터 처리

309 

310특정 줄 참조 및 제안된 수정 사항을 제공하세요.

311```

312 

313Claude에게 명시적으로 subagents를 사용하도록 하십시오: *"subagent를 사용하여 이 코드를 보안 문제에 대해 검토하세요."*

314 

315### plugins 설치하기

316 

317<Tip>

318 `/plugin`을 실행하여 마켓플레이스를 탐색하십시오. Plugins는 구성 없이 skills, tools, integrations를 추가합니다.

319</Tip>

320 

321[Plugins](/ko/plugins)는 커뮤니티 및 Anthropic의 마켓플레이스에서 설치 가능한 단일 단위로 skills, hooks, subagents, MCP 서버를 번들로 제공합니다. 타입이 지정된 언어로 작업하면 [코드 인텔리전스 plugin](/ko/discover-plugins#code-intelligence)을 설치하여 Claude에게 정확한 기호 탐색 및 편집 후 자동 오류 감지를 제공하십시오.

322 

323skills, subagents, hooks, MCP 중에서 선택하는 방법에 대한 지침은 [Claude Code 확장](/ko/features-overview#match-features-to-your-goal)을 참조하십시오.

324 

325***

326 

327## 효과적으로 소통하기

328 

329Claude Code와의 소통 방식은 결과의 품질에 크게 영향을 미칩니다.

330 

331### 코드베이스 질문 하기

332 

333<Tip>

334 선임 엔지니어에게 물어볼 질문을 Claude에게 하십시오.

335</Tip>

336 

337새로운 코드베이스에 온보딩할 때 Claude Code를 학습 및 탐색에 사용하십시오. Claude에게 다른 엔지니어에게 물어볼 것과 같은 종류의 질문을 할 수 있습니다:

338 

339* 로깅은 어떻게 작동합니까?

340* 새로운 API 엔드포인트를 어떻게 만듭니까?

341* `foo.rs`의 134번 줄에서 `async move { ... }`는 무엇을 합니까?

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

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

344 

345이런 방식으로 Claude Code를 사용하는 것은 효과적인 온보딩 워크플로우이며, 램프업 시간을 개선하고 다른 엔지니어의 부담을 줄입니다. 특별한 프롬프팅이 필요하지 않습니다: 직접 질문하십시오.

346 

347### Claude가 당신을 인터뷰하도록 하기

348 

349<Tip>

350 더 큰 기능의 경우 Claude가 먼저 당신을 인터뷰하도록 하십시오. 최소한의 프롬프트로 시작하고 Claude에게 `AskUserQuestion` 도구를 사용하여 당신을 인터뷰하도록 요청하십시오.

351</Tip>

352 

353Claude는 기술 구현, UI/UX, 엣지 케이스, 트레이드오프를 포함하여 아직 고려하지 않은 것들에 대해 질문합니다.

354 

355```text theme={null}

356[간단한 설명]을 빌드하고 싶습니다. AskUserQuestion 도구를 사용하여 자세히 인터뷰해주세요.

357 

358기술 구현, UI/UX, 엣지 케이스, 우려 사항, 트레이드오프에 대해 질문하세요. 명백한 질문을 하지 마세요, 당신이 고려하지 않았을 수 있는 어려운 부분을 파고드세요.

359 

360모든 것을 다룰 때까지 인터뷰를 계속한 다음 SPEC.md에 완전한 사양을 작성하세요.

361```

362 

363사양이 완료되면 새 세션을 시작하여 실행하십시오. 새 세션은 구현에만 집중하는 깨끗한 context를 가지고 있으며, 참조할 수 있는 작성된 사양이 있습니다.

364 

365***

366 

367## 세션 관리하기

368 

369대화는 지속적이고 되돌릴 수 있습니다. 이를 활용하십시오!

370 

371### 조기에 자주 방향 수정하기

372 

373<Tip>

374 Claude가 궤도를 벗어나는 것을 알아차리면 즉시 수정하십시오.

375</Tip>

376 

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

378 

379* **`Esc`**: `Esc` 키로 Claude의 작업을 중간에 중지하십시오. Context는 보존되므로 방향을 바꿀 수 있습니다.

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

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

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

383 

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

385 

386### context 적극적으로 관리하기

387 

388<Tip>

389 관련 없는 작업 간에 `/clear`를 자주 실행하여 context window를 재설정하십시오.

390</Tip>

391 

392Claude Code는 context 제한에 접근할 때 대화 기록을 자동으로 압축하여 중요한 코드와 결정을 보존하면서 공간을 확보합니다.

393 

394긴 세션 동안 Claude의 context window는 관련 없는 대화, 파일 내용, 명령으로 채워질 수 있습니다. 이는 성능을 줄이고 때때로 Claude를 산만하게 할 수 있습니다.

395 

396* 작업 간에 자주 `/clear`를 사용하여 context window를 완전히 재설정하십시오

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

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

399* 대화의 일부만 압축하려면 `Esc + Esc` 또는 `/rewind`를 사용하고, 메시지 체크포인트를 선택하고, **Summarize from here**를 선택하십시오. 이는 해당 지점부터의 메시지를 압축하면서 이전 context를 유지합니다.

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

401* 빠른 질문의 경우 context에 들어가지 않아야 하므로 [`/btw`](/ko/interactive-mode#side-questions-with-btw)를 사용하십시오. 답변은 해제 가능한 오버레이에 나타나고 대화 기록에 들어가지 않으므로 context를 증가시키지 않고 세부 정보를 확인할 수 있습니다.

402 

403### subagents를 사용하여 조사하기

404 

405<Tip>

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

407</Tip>

408 

409context가 기본 제약 조건이므로 subagents는 사용 가능한 가장 강력한 도구 중 하나입니다. Claude가 코드베이스를 연구할 때 많은 파일을 읽으며, 모두 context를 소비합니다. Subagents는 별도의 context window에서 실행되고 요약을 보고합니다:

410 

411```text theme={null}

412subagents를 사용하여 인증 시스템이 토큰 새로 고침을 어떻게 처리하는지,

413그리고 재사용해야 할 기존 OAuth 유틸리티가 있는지 조사하세요.

414```

415 

416subagent는 코드베이스를 탐색하고, 관련 파일을 읽고, 주요 대화를 복잡하게 하지 않고 발견 사항을 보고합니다.

417 

418Claude가 구현한 후 검증을 위해 subagents를 사용할 수도 있습니다:

419 

420```text theme={null}

421subagent를 사용하여 이 코드를 엣지 케이스에 대해 검토하세요

422```

423 

424### 체크포인트로 rewind하기

425 

426<Tip>

427 Claude가 수행하는 모든 작업은 체크포인트를 생성합니다. 이전 체크포인트로 대화, 코드 또는 둘 다를 복원할 수 있습니다.

428</Tip>

429 

430Claude는 변경 전에 자동으로 체크포인트합니다. `Escape`를 두 번 누르거나 `/rewind`를 실행하여 rewind 메뉴를 열기. 대화만 복원하거나, 코드만 복원하거나, 둘 다 복원하거나, 선택한 메시지에서 요약할 수 있습니다. 자세한 내용은 [Checkpointing](/ko/checkpointing)을 참조하십시오.

431 

432모든 움직임을 신중하게 계획하는 대신 Claude에게 위험한 것을 시도하도록 할 수 있습니다. 작동하지 않으면 rewind하고 다른 접근 방식을 시도하십시오. 체크포인트는 세션 간에 유지되므로 터미널을 닫아도 나중에 rewind할 수 있습니다.

433 

434<Warning>

435 체크포인트는 Claude가 수행한 변경만 추적하며, 외부 프로세스는 추적하지 않습니다. 이는 git의 대체품이 아닙니다.

436</Warning>

437 

438### 대화 재개하기

439 

440<Tip>

441 `claude --continue`를 실행하여 중단한 곳에서 계속하거나, `--resume`을 사용하여 최근 세션에서 선택하십시오.

442</Tip>

443 

444Claude Code는 대화를 로컬로 저장합니다. 작업이 여러 세션에 걸쳐 있을 때 context를 다시 설명할 필요가 없습니다:

445 

446```bash theme={null}

447claude --continue # 가장 최근 대화 재개

448claude --resume # 최근 대화에서 선택

449```

450 

451`/rename`을 사용하여 세션에 `"oauth-migration"` 또는 `"debugging-memory-leak"`과 같은 설명적인 이름을 지정하여 나중에 찾을 수 있도록 하십시오. 세션을 분기처럼 취급하십시오: 다양한 작업 스트림은 별도의 지속적인 context를 가질 수 있습니다.

452 

453***

454 

455## 자동화 및 확장하기

456 

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

458 

459지금까지 모든 것은 한 명의 인간, 한 명의 Claude, 한 개의 대화를 가정합니다. 하지만 Claude Code는 수평으로 확장됩니다. 이 섹션의 기술은 더 많은 작업을 수행하는 방법을 보여줍니다.

460 

461### 비대화형 모드 실행하기

462 

463<Tip>

464 CI, pre-commit hooks 또는 스크립트에서 `claude -p "prompt"`를 사용하십시오. 스트리밍 JSON 출력의 경우 `--output-format stream-json`을 추가하십시오.

465</Tip>

466 

467`claude -p "your prompt"`를 사용하면 세션 없이 비대화형으로 Claude를 실행할 수 있습니다. 비대화형 모드는 Claude를 CI 파이프라인, pre-commit hooks 또는 자동화된 워크플로우에 통합하는 방법입니다. 출력 형식을 사용하면 결과를 프로그래밍 방식으로 구문 분석할 수 있습니다: 일반 텍스트, JSON 또는 스트리밍 JSON.

468 

469```bash theme={null}

470# 일회성 쿼리

471claude -p "이 프로젝트가 무엇을 하는지 설명하세요"

472 

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

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

475 

476# 실시간 처리를 위한 스트리밍

477claude -p "이 로그 파일 분석" --output-format stream-json

478```

479 

480### 여러 Claude 세션 실행하기

481 

482<Tip>

483 개발 속도를 높이거나, 격리된 실험을 실행하거나, 복잡한 워크플로우를 시작하기 위해 여러 Claude 세션을 병렬로 실행하십시오.

484</Tip>

485 

486병렬 세션을 실행하는 세 가지 주요 방법이 있습니다:

487 

488* [Claude Code 데스크톱 앱](/ko/desktop#work-in-parallel-with-sessions): 여러 로컬 세션을 시각적으로 관리하십시오. 각 세션은 자신의 격리된 worktree를 가집니다.

489* [웹의 Claude Code](/ko/claude-code-on-the-web): Anthropic의 안전한 클라우드 인프라에서 격리된 VM에서 실행하십시오.

490* [Agent teams](/ko/agent-teams): 공유 작업, 메시징, 팀 리더를 사용한 여러 세션의 자동 조정.

491 

492작업을 병렬화하는 것 외에도 여러 세션은 품질 중심 워크플로우를 활성화합니다. 새로운 context는 Claude가 방금 작성한 코드에 편향되지 않으므로 코드 검토를 개선합니다.

493 

494예를 들어 Writer/Reviewer 패턴을 사용하십시오:

495 

496| 세션 A (작성자) | 세션 B (검토자) |

497| -------------------------------------------- | ------------------------------------------------------------------------------------------ |

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

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

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

501 

502테스트로 비슷한 작업을 수행할 수 있습니다: 한 Claude가 테스트를 작성하고 다른 Claude가 테스트를 통과하는 코드를 작성합니다.

503 

504### 파일 전체에 fan out하기

505 

506<Tip>

507 각각에 대해 `claude -p`를 호출하는 루프를 통해 작업을 분배하십시오. 배치 작업의 경우 `--allowedTools`를 사용하여 권한을 범위 지정하십시오.

508</Tip>

509 

510대규모 마이그레이션 또는 분석의 경우 많은 병렬 Claude 호출 전체에 작업을 분배할 수 있습니다:

511 

512<Steps>

513 <Step title="작업 목록 생성">

514 Claude가 마이그레이션이 필요한 모든 파일을 나열하도록 하십시오(예: `마이그레이션이 필요한 모든 2,000개의 Python 파일 나열`)

515 </Step>

516 

517 <Step title="목록을 통해 루프하는 스크립트 작성">

518 ```bash theme={null}

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

520 claude -p "React에서 Vue로 $file 마이그레이션. OK 또는 FAIL 반환." \

521 --allowedTools "Edit,Bash(git commit *)"

522 done

523 ```

524 </Step>

525 

526 <Step title="몇 개 파일에서 테스트한 다음 규모에 맞게 실행">

527 처음 2-3개 파일에서 잘못된 것을 기반으로 프롬프트를 개선한 다음 전체 집합에서 실행하십시오. `--allowedTools` 플래그는 Claude가 할 수 있는 작업을 제한하며, 이는 무인 상태에서 실행할 때 중요합니다.

528 </Step>

529</Steps>

530 

531Claude를 기존 데이터/처리 파이프라인에 통합할 수도 있습니다:

532 

533```bash theme={null}

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

535```

536 

537개발 중에 디버깅을 위해 `--verbose`를 사용하고 프로덕션에서는 끄십시오.

538 

539### auto mode로 자율적으로 실행하기

540 

541중단 없는 실행과 백그라운드 안전 검사를 위해 [auto mode](/ko/permission-modes#eliminate-prompts-with-auto-mode)를 사용하십시오. 분류기 모델이 명령을 실행하기 전에 검토하여 범위 확대, 알 수 없는 인프라, 적대적 콘텐츠 기반 작업을 차단하면서 일상적인 작업이 프롬프트 없이 진행되도록 합니다.

542 

543```bash theme={null}

544claude --permission-mode auto -p "fix all lint errors"

545```

546 

547`-p` 플래그가 있는 비대화형 실행의 경우, 분류기가 반복적으로 작업을 차단하면 auto mode가 중단됩니다. 폴백할 사용자가 없기 때문입니다. [auto mode가 폴백할 때](/ko/permission-modes#when-auto-mode-falls-back)의 임계값을 참조하십시오.

548 

549***

550 

551## 일반적인 실패 패턴 피하기

552 

553이는 일반적인 실수입니다. 조기에 인식하면 시간을 절약합니다:

554 

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

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

557* **반복적으로 수정.** Claude가 뭔가 잘못하고, 당신이 수정하고, 여전히 잘못되고, 다시 수정합니다. Context는 실패한 접근 방식으로 오염됩니다.

558 > **수정**: 두 번의 실패한 수정 후 `/clear`를 하고 배운 내용을 통합하는 더 나은 초기 프롬프트를 작성하십시오.

559* **과도하게 지정된 CLAUDE.md.** CLAUDE.md가 너무 길면 Claude는 중요한 규칙이 노이즈에 손실되기 때문에 절반을 무시합니다.

560 > **수정**: 무자비하게 정리하십시오. Claude가 지시사항 없이 이미 올바르게 수행하면 삭제하거나 hook으로 변환하십시오.

561* **신뢰-검증 간격.** Claude는 그럴듯해 보이지만 엣지 케이스를 처리하지 않는 구현을 생성합니다.

562 > **수정**: 항상 검증(테스트, 스크립트, 스크린샷)을 제공하십시오. 검증할 수 없으면 배포하지 마십시오.

563* **무한 탐색.** 범위를 지정하지 않고 Claude에게 뭔가를 "조사"하도록 요청합니다. Claude는 수백 개의 파일을 읽으며 context를 채웁니다.

564 > **수정**: 조사를 좁게 범위 지정하거나 subagents를 사용하여 탐색이 주요 context를 소비하지 않도록 하십시오.

565 

566***

567 

568## 직관 개발하기

569 

570이 가이드의 패턴은 정해진 것이 아닙니다. 일반적으로 잘 작동하지만 모든 상황에 최적일 수는 없는 시작점입니다.

571 

572때로는 복잡한 문제에 깊이 있고 기록이 가치 있기 때문에 context가 누적되도록 *해야* 합니다. 때로는 작업이 탐색적이기 때문에 계획을 건너뛰고 Claude가 파악하도록 *해야* 합니다. 때로는 모호한 프롬프트가 정확히 맞기 때문에 Claude가 문제를 해석하는 방식을 보고 싶을 때입니다.

573 

574작동하는 것에 주의를 기울이십시오. Claude가 훌륭한 출력을 생성할 때 당신이 한 것을 주목하십시오: 프롬프트 구조, 제공한 context, 당신이 있던 모드. Claude가 어려움을 겪을 때 왜인지 물어보십시오. Context가 너무 시끄러웠습니까? 프롬프트가 너무 모호했습니까? 작업이 한 번에 너무 컸습니까?

575 

576시간이 지남에 따라 어떤 가이드도 포착할 수 없는 직관을 개발할 것입니다. 구체적일 때와 개방적일 때, 계획할 때와 탐색할 때, context를 지울 때와 누적하도록 할 때를 알게 될 것입니다.

577 

578## 관련 리소스

579 

580* [Claude Code 작동 방식](/ko/how-claude-code-works): 에이전트 루프, 도구, context 관리

581* [Claude Code 확장](/ko/features-overview): skills, hooks, MCP, subagents, plugins

582* [일반적인 워크플로우](/ko/common-workflows): 디버깅, 테스트, PR 등에 대한 단계별 레시피

583* [CLAUDE.md](/ko/memory): 프로젝트 규칙 및 지속적인 context 저장

champion-kit.md +193 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Champion kit

6 

7> Claude Code를 내부적으로 옹호하는 엔지니어를 위한 플레이북: 공유할 내용, 질문에 답하는 방법, 팀 내 도입 확대 방법.

8 

9이 페이지는 이미 Claude Code를 사용 중이며 팀이 이를 도입하도록 돕고 싶은 개별 엔지니어를 위한 것입니다. 공유할 내용, 받을 질문에 답하는 방법, 30일 플레이북, 그리고 일반적인 우려 사항에 대한 대응을 다룹니다.

10 

11개발자 도구의 도입은 롤아웃 공지 때문에 일어나는 경우가 거의 없습니다. 팀의 누군가가 도구를 잘 사용하기 시작하고, 이에 대해 공개적으로 이야기하며, 다른 사람들이 따라하기 쉽게 만들 때 일어납니다. 챔피언으로서 여러분이 하는 일은 팀에 불균형적인 영향을 미칩니다. 여러분이 공유하는 모든 예시는 뒤따르는 엔지니어들의 학습 곡선을 단축시키고, 여러분이 공개적으로 답변하는 모든 질문은 한 사람의 경험을 전체 팀이 구축할 수 있는 것으로 바꿉니다. 여러분은 헬프 데스크가 아니라 팀의 승수 역할을 하고 있으며, 이 가이드는 이러한 조건 하에서 역할을 지속 가능하게 유지하도록 구성되어 있습니다.

12 

13## 챔피언 역할

14 

15이 역할은 서로를 강화하는 세 가지 행동으로 구성됩니다.

16 

17| 행동 | 실제 모습 | 중요한 이유 |

18| -------------- | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |

19| 발견한 것을 공유하기 | 엔지니어링 채널, 스탠드업 스레드, 또는 풀 리퀘스트 설명과 같이 팀이 이미 읽는 장소에 자신의 작업에서 나온 프롬프트, 스크린샷, 작은 성과를 게시합니다. | 자신의 코드베이스에서 나온 예시는 외부 문서보다 더 설득력이 있습니다. 동료들이 자신들이 공유하는 문제에 도구가 어떻게 적용되는지 정확히 볼 수 있기 때문입니다. |

20| 사람들이 묻는 사람이 되기 | 동료가 어떻게 무언가를 성취했는지 묻을 때, 실제로 사용한 프롬프트로 응답하여 자신의 작업에 직접 적용할 수 있도록 합니다. | 구체적이고 실행 가능한 예시는 호기심과 첫 번째 성공적인 사용 사이의 간격을 제거하며, 이것이 대부분의 도입 노력이 정체되는 지점입니다. |

21| 원을 확대하기 | 전용 채널이나 주간 스레드와 같은 가볍고 반복적인 습관을 소수 개 확립하여 여러분의 관심이 다른 곳에 있을 때도 모멘텀이 계속되도록 합니다. | 한 사람에게 의존하는 도입은 취약합니다. 공유된 습관으로 이루어진 도입은 자체적으로 계속 복합적으로 증가합니다. |

22 

23이 중 대부분은 여러분이 이미 하고 있는 작업 내에서 자연스럽게 맞아떨어집니다. 차이점은 발견 사항이 게시되는 위치와 답변이 전파되는 방식에 대한 약간의 추가 의도입니다.

24 

25### 이것이 여러분에게 비용이 얼마나 들 것인가

26 

27자신과 리드에게 기대치를 설정합니다. 아래의 활동들은 정상적인 업무 주간 내에 맞도록 의도되었으며, 이 역할은 추가 지원 책임이 아니라 기존 작업에 대한 승수로 남아야 합니다.

28 

29| 활동 | 주당 시간 | 지침 |

30| --------------- | ------ | --------------------------------------------------------------------------- |

31| 성과 및 프롬프트 게시 | 약 15분 | 스크린샷과 한두 문장으로 이를 순간에 포착합니다. 공식적인 작성으로 바꾸지 않습니다. |

32| 공유 채널에서 질문에 답변 | 약 20분 | 공개적으로 한 번 답변한 후, 질문이 반복될 때 그 답변으로 다시 링크합니다. |

33| 주간 쇼앤텔 스레드 호스팅 | 약 5분 | 여러분이 시작 프롬프트를 게시합니다. 팀이 콘텐츠를 제공합니다. |

34| 선택적 페어링 또는 워크스루 | 0\~30분 | 이를 진정으로 막힌 동료를 위해 예약하고, 시간을 예약하기 전에 [Quickstart](/ko/quickstart) 링크를 제공합니다. |

35 

36## 발견한 것을 공유하기

37 

38여러분의 경험은 동료들이 접할 가장 설득력 있는 자료입니다. 왜냐하면 여러분이 모두 공유하는 코드베이스, 워크플로우, 문제에 특정하기 때문입니다. 문서는 사람들에게 무엇이 가능한지 알려줍니다. 여러분의 게시물은 여러분의 환경에서 실제로 작동하는 것을 보여줍니다.

39 

40### 공유할 가치가 있는 것

41 

42가장 유용한 게시물은 동료가 내일 재사용할 수 있는 기법을 설명하며, 이미 완료된 결과가 아닙니다. 기법은 팀 전체에 퍼질 때 복합적으로 증가합니다. 상태 업데이트는 그렇지 않습니다.

43 

44재사용 가능한 기법의 예:

45 

46* "디렉토리를 @-멘션하는 것이 작동한다는 것을 배웠습니다. `@src/components/`를 가리키고 어떤 것이 테스트를 놓쳤는지 묻자 두 개를 발견했습니다."

47* "Plan mode (`Shift+Tab`)는 편집이 이루어지기 전에 정확히 어떤 파일이 건드려질지 보여주므로, 공유 코드에서 이를 사용하는 것이 편합니다."

48* "Stop hook을 구성하여 긴 작업이 완료될 때 데스크톱 알림을 받습니다. 구성은 스레드에 있습니다."

49* "`/init`을 실행하면 저장소에서 `CLAUDE.md`를 생성하므로 어시스턴트가 우리의 규칙에 대해 다시 묻지 않습니다."

50 

51### 어디에 공유할 것인가

52 

53팀이 이미 읽는 곳에 게시합니다. 목표는 목적지를 만드는 것이 아니라 정상적인 작업의 경로에 예시를 배치하는 것입니다.

54 

55| 위치 | 가장 적합한 용도 | 권장 형식 |

56| ----------------------------- | ---------------------------------- | ------------------------------------------------------- |

57| `#claude-code` 또는 일반 엔지니어링 채널 | 발견, 프롬프트, "오늘 배운 것" 순간 | 한두 문장의 맥락이 동반된 스크린샷 |

58| 풀 리퀘스트 설명 | 검토자가 이미 읽고 있는 실제 코드에서 접근 방식을 시연 | "Claude와 나는 이 리팩토링을 했습니다. 접근 방식을 설명해드릴 수 있습니다."와 같은 한 줄 |

59| 스탠드업 또는 주간 서면 업데이트 | 리드 및 스킵 레벨 관리자와의 사용 정상화 | 하나의 구체적인 결과를 설명하는 한 문장 |

60| 팀 위키 또는 내부 문서 | 지속적인 패턴, 사용자 정의 스킬, `CLAUDE.md` 예시 | 짧은 페이지, 채널 주제에서 링크되어 발견 가능하게 유지 |

61 

62### 작동하는 형식

63 

64스크린샷과 한 줄의 맥락, 또는 간단한 전후 설명이 일반적으로 올바른 세부 수준입니다. 각 게시물을 충분히 짧게 유지하여 지나가는 누군가도 요점을 흡수할 수 있도록 합니다. 긴 작성은 나중을 위해 저장되고 잊혀지는 경향이 있는 반면, 스크린샷이 있는 짧은 게시물은 복사되고 시도되는 경향이 있습니다.

65 

66아래의 예시 게시물은 톤과 길이를 보여줍니다. 그대로 복사하기보다는 적응시킵니다.

67 

68```text theme={null}

69오늘 배운 것: 디렉토리를 @-멘션하는 것이 작동합니다. 나는 @src/components/를 가리키고

70어떤 컴포넌트가 테스트를 놓쳤는지 물었고, 내가 잊은 두 개를 발견했습니다.

71```

72 

73```text theme={null}

74Stop hook을 구성하여 긴 작업이 완료될 때 데스크톱 알림을 받습니다. 나는 리팩토링을

75시작하고 물러났으며, 완료되었을 때 알림을 받았습니다. 구성은 스레드에 있습니다.

76```

77 

78```text theme={null}

79Plan mode는 내가 중요한 코드에서 이를 사용하는 것이 편한 이유입니다.

80Shift+Tab을 누르면 "plan"이 보일 때까지; 변경하기 전에 정확히 어떤 파일을

81건드릴 의도인지 보여줍니다.

82```

83 

84## 사람들이 묻는 사람이 되기

85 

86몇 가지 예시를 공유한 후에는 질문이 따를 것입니다. 이것이 챔피언 역할이 가장 큰 영향력을 가지는 곳입니다. 한 사람에 대한 좋은 답변이 같은 채널을 보고 있는 여러 다른 사람들을 자주 차단 해제하기 때문입니다.

87 

88### 설명보다는 프롬프트로 답변하기

89 

90동료가 어떻게 무언가를 성취했는지 물을 때, 가장 유용한 응답은 실제로 사용한 프롬프트입니다. 그들은 자신의 문제에 대해 그 프롬프트를 실행하는 것에서 여러분이 쓸 수 있는 어떤 설명보다 더 많이 배울 것이며, 그것은 그들이 즉시 행동할 수 있는 것을 제공합니다.

91 

92```text theme={null}

93동료: 그 경쟁 조건을 어떻게 찾았어요?

94 

95챔피언: 나는 "@tests/scheduler.test.ts의 테스트가 불안정합니다. 왜인지 알아내세요"라고

96물었고, 스케줄러에서 두 개의 조인되지 않은 프로미스를 추적했습니다. 자신의 테스트에서

97같은 표현을 시도해보세요.

98```

99 

100### 문서보다는 기능을 가리키기

101 

102"Plan mode를 시도해보세요, `Shift+Tab`을 누르면 보일 때까지"와 같은 응답은 지금 당장 문서 링크보다 더 유용합니다. 나중에 더 깊이 필요하면 자신들이 찾을 것입니다. 지금 그들은 자신들을 차단 해제하는 한 가지가 필요합니다.

103 

104### 들을 가능성이 있는 질문들

105 

106| 질문 | 제안된 응답 | 후속 리소스 |

107| ------------------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------- |

108| "먼저 무엇을 시도해야 할까요?" | 실제이지만 포함된 작업, 이상적으로는 어렵기보다는 지루해서 미루고 있던 버그나 잡무를 권장합니다. | [Common workflows](/ko/common-workflows) |

109| "코드를 어떻게 신뢰할 수 있나요?" | Plan mode를 소개합니다: `Shift+Tab`을 누르면 순환하고, Claude는 정확히 변경할 의도를 제안하며, 사용자가 승인할 때까지 아무것도 수정되지 않습니다. | [Permissions](/ko/permissions) |

110| "설정이 노력할 가치가 있나요?" | 설치는 대략 2분이 걸리고, 터미널에서 실행되며, IDE 확장이 필요하지 않습니다. `/init`을 한 번 실행하는 것으로 충분합니다. | [Quickstart](/ko/quickstart) |

111| "잘못된 결과를 생성했습니다." | 실패를 Claude에게 다시 제공하도록 권장합니다. 오류 메시지나 실패한 테스트를 붙여넣는 것이 원래 요청을 다시 표현하는 것보다 훨씬 더 효과적입니다. | [Common workflows](/ko/common-workflows) |

112| "우리 코드베이스 규칙을 이해하지 못합니다." | `/init`을 실행하여 `CLAUDE.md` 파일을 생성한 후, 팀의 규칙, 테스트 명령, 그리고 수정하면 안 되는 디렉토리를 추가하도록 제안합니다. | [Memory](/ko/memory) |

113| "이것은 단지 자동완성일까요?" | Claude가 낯선 파일을 설명하거나, 서비스 전체에서 버그를 추적하거나, 마이그레이션 계획을 작성하는 간단한 시연을 제공합니다. 이러한 작업은 단일 줄을 완성하기보다는 저장소 전체에서 추론이 필요합니다. | 2분 라이브 시연 |

114| "보안 및 데이터 처리는 어떻게 되나요?" | 이 질문을 관리자에게 참조합니다. 조직의 배포 및 데이터 처리 정책은 이미 구성되어 있으며, 챔피언은 이 답변을 즉흥적으로 해서는 안 됩니다. | [Security](/ko/security) · [Data usage](/ko/data-usage) |

115 

116## 원을 확대하기

117 

118목표는 프로그램을 구축하거나 롤아웃을 소유하는 것이 아닙니다. 여러분이 적극적으로 추진을 멈춘 후에도 모멘텀이 계속될 수 있도록 가벼운 습관을 소수 개 확립하는 것입니다. 채널의 질문이 여러분 외의 다른 사람들에 의해 답변될 때, 이 역할은 그 일을 해냈습니다.

119 

120### 작동하는 경향이 있는 패턴들

121 

122| 패턴 | 실행 방법 | 필요한 노력 |

123| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- |

124| 전용 채널 | `#claude-code` 채널을 만들고 (또는 기존 채널에 반복 스레드), [Quickstart](/ko/quickstart) 링크와 하나의 강력한 예시를 고정하고, 공개적으로 질문에 답변하여 각 답변이 보고 있는 모든 사람에게 이익이 되도록 합니다. | 설정에 약 5분, 그 후 주변적 |

125| 주간 쇼앤텔 스레드 | 매주 금요일에 "이번 주 Claude가 무엇을 도와줬나요?"를 게시합니다. 준비, 슬라이드, 또는 회의가 필요하지 않습니다. 스크린샷과 짧은 설명으로 충분합니다. | 주당 약 2분 |

126| 사용자 정의 스킬 공유 | 가장 유용한 `.claude/skills/<name>/SKILL.md` 파일을 게시합니다. 예를 들어 커밋하기 전에 테스트와 린트를 실행하는 `/ship` 스킬, 한 줄 설명과 함께. 스킬은 순수 Markdown이므로 동료들이 즉시 채택할 수 있습니다. | 스킬당 약 5분 |

127| 자신의 사용에서 설정 가이드 생성 | 실제로 시간을 보낸 프로젝트에서 `/team-onboarding`을 실행합니다. Claude는 최근 세션, 명령, MCP 서버를 스캔한 후, 새로운 팀원이 자신의 첫 메시지로 설정을 재생하기 위해 붙여넣을 수 있는 가이드를 생성합니다. 채널에 고정합니다. | 약 2분 |

128| 첫 번째 작업에서 페어링 | 시작하는 누구에게나 단일 15분 페어링 세션을 제공합니다. 자신의 코드에서 하나의 성공적인 결과는 어떤 프레젠테이션보다 더 설득력이 있습니다. | 사람당 약 15분 |

129| 다음 챔피언 식별 | 여러분에게 가장 많은 질문을 하는 동료는 보통 이 역할을 맡을 준비가 되어 있습니다. 이 페이지를 그들에게 전달하고 채널 책임을 나누어 가집니다. | 무시할 수 있는 수준 |

130 

131### 30일 플레이북

132 

133느슨한 계획이 도움이 된다면, 아래의 순서는 대부분의 팀에서 작동하는 경향이 있는 것을 반영합니다. 자신의 맥락에 맞게 자유롭게 조정합니다.

134 

135<Steps>

136 <Step title="1주차: 채널 시드">

137 채널을 만들고, [Quickstart](/ko/quickstart)를 고정하고, 프롬프트가 포함된 자신의 예시 2\~3개를 게시합니다.

138 

139 **작동하는 신호:** 몇 명의 동료가 반응하거나 회신하고, 채널에서 최소 하나의 질문이 제기됩니다.

140 </Step>

141 

142 <Step title="2주차: 리듬 시작">

143 주간 쇼앤텔 스레드를 시작하고, 모든 질문에 공개적으로 답변하고, 하나의 사용자 정의 스킬 또는 `CLAUDE.md` 스니펫을 공유합니다.

144 

145 **작동하는 신호:** 여러분 외의 누군가가 자신의 예시를 게시합니다.

146 </Step>

147 

148 <Step title="3주차: 페어링 및 통합">

149 2\~3개의 짧은 페어링 세션을 제공하고 가장 일반적인 질문과 답변을 고정된 FAQ 메시지로 통합합니다.

150 

151 **작동하는 신호:** 반복 사용을 보며, 같은 동료들이 한 번 시도하고 멈추기보다는 반복적으로 돌아옵니다.

152 </Step>

153 

154 <Step title="4주차: 인계">

155 두 번째 챔피언을 식별하고 작동하는 것과 작동하지 않는 것에 대한 간단한 요약을 리드 또는 관리자와 공유합니다.

156 

157 **작동하는 신호:** 채널의 질문이 여러분 외의 다른 사람들에 의해 답변됩니다.

158 </Step>

159</Steps>

160 

161### 누군가가 더 깊이 들어가고 싶을 때

162 

163여러분은 온보딩 프로그램이 아니라 따뜻한 소개입니다. 동료가 "이것을 시도해야 할까"에서 "이것으로 효과적이 되려면 어떻게 해야 할까"로 넘어갈 때, [Quickstart](/ko/quickstart) 및 [Common workflows](/ko/common-workflows) 페이지를 가리킵니다. 이들은 진정으로 유용하지만 자신의 힘으로 발견하기 어려운 기능을 다루는 짧은 섹션을 포함합니다.

164 

165## 일반적인 우려 사항에 대응하기

166 

167건강한 회의론은 예상됩니다. 엔지니어들은 자신의 코드를 건드리는 도구에 대해 조심해야 합니다. 가장 효과적인 응답은 일반적인 경우를 주장하는 것이 거의 아닙니다. 대신, 우려를 인정하고, 간단한 재구성을 제공하고, 그 사람의 자신의 코드에 대한 하나의 구체적인 시연을 제안합니다. 대부분의 우려는 하나의 성공적인 경험으로 해결됩니다.

168 

169| 우려 | 제안된 응답 | 제공할 증거 |

170| ------------------------------------ | --------------------------------------------------------------------------------------------------------------------- | ------------------------------------- |

171| "나는 이것 없이 더 빠릅니다." | 그것은 그 사람이 일상적으로 쓰는 코드에 대해 아마도 사실일 것입니다. 레거시 파일, 낯선 서비스, 또는 테스트 스캐폴딩과 같이 레버리지가 가장 높은 피하는 경향이 있는 작업에서 시도하도록 제안합니다. | 지루한 작업 하나를 양쪽 방식으로 시간을 재고 비교합니다. |

172| "나는 AI가 프로덕션 코드를 건드리는 것을 신뢰하지 않습니다." | 변경이 읽지 않은 상태로 랜드되어서는 안 된다는 데 동의합니다. Plan mode와 정상적인 diff 검토는 엔지니어가 검사하지 않은 것이 적용되지 않음을 의미하며, 이는 모든 풀 리퀘스트와 동일한 표준입니다. | 실제 파일에서 plan mode를 시연합니다. |

173| "이것은 주니어 엔지니어를 약하게 만들 것입니다." | 잘 사용되면, 그것은 효과적인 설명자입니다. 주니어 엔지니어들이 변경을 요청하기 전에 Claude에게 파일과 그 호출 사이트를 설명하도록 요청하도록 권장합니다. | "파일을 설명하고 어디서 호출되는지 보여주세요"를 함께 실행합니다. |

174| "나는 한 번 시도했는데 환각했습니다." | 이것은 보통 모델 문제보다는 맥락 문제입니다. @-멘션 관련 파일, `/init` 실행, 그리고 실제 오류 출력 제공은 보통 이를 해결합니다. | 적절한 `@`-맥락으로 원래 프롬프트를 다시 실행합니다. |

175| "우리는 다른 도구를 배울 시간이 없습니다." | Claude Code는 플랫폼이 아니라 터미널 명령입니다. 첫 번째 세션 내에서 가치를 반환하지 않으면, 이를 옆에 두는 것이 합리적입니다. | 2분 설치 후 하나의 실제 버그. |

176 

177## 빠른 참조 시트

178 

179아래의 기법들은 누군가를 첫 번째 시도에서 일일 사용으로 이동시키는 가장 안정적으로 작동하는 것들입니다. 채널에 이 표를 고정하거나 자신의 것으로 공유합니다.

180 

181| 기법 | 적용 방법 |

182| ------------- | ----------------------------------------------------------------------------------------------------------- |

183| 올바른 맥락 제공 | `@file` 또는 `@directory/` 참조를 사용하거나, 오류 또는 로그 출력을 직접 붙여넣습니다. 관련 맥락을 제공하는 것이 정교한 프롬프팅보다 더 효과적입니다. |

184| 편집 전에 계획 검토 | `Shift+Tab`을 눌러 plan mode에 들어갑니다. Claude는 실행하기 전에 승인을 위해 의도된 변경을 설명합니다. |

185| 저장소를 가르치기 | `/init`을 실행하여 `CLAUDE.md` 파일을 생성한 후, 규칙, 테스트 명령, 그리고 수정하면 안 되는 디렉토리를 추가합니다. [Memory](/ko/memory)를 참조합니다. |

186| 워크플로우 재사용 | `.claude/skills/<name>/`에 `SKILL.md` 파일을 저장하여 전체 팀이 사용할 수 있는 `/name` 스킬을 만듭니다. [Skills](/ko/skills)를 참조합니다. |

187| 긴 작업 중에 정보 유지 | Stop hook을 구성하여 오래 실행되는 작업이 완료될 때 데스크톱 알림을 받습니다. [Hooks](/ko/hooks-guide)를 참조합니다. |

188| 잘못된 결과에서 복구 | 요청을 다시 표현하기보다는, 실패한 테스트 또는 스택 추적을 Claude에게 다시 붙여넣고 그 특정 실패를 해결하도록 요청합니다. |

189| 편집을 외과적으로 유지 | diff를 요청하거나, "X만 변경하세요"를 지정합니다. Claude는 범위가 명시될 때 범위를 존중합니다. |

190 

191<Tip>

192 Claude Code는 자주 업데이트됩니다. 이 자료를 내부적으로 배포하기 전에 [문서 홈 페이지](/ko/overview)에 대해 버전별 세부 사항을 확인합니다.

193</Tip>

channels.md +357 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 채널을 사용하여 실행 중인 세션으로 이벤트 푸시하기

6 

7> 채널을 사용하여 MCP 서버에서 실행 중인 Claude Code 세션으로 메시지, 알림 및 웹훅을 푸시합니다. CI 결과, 채팅 메시지 및 모니터링 이벤트를 전달하여 Claude가 자리를 비웠을 때 반응할 수 있도록 합니다.

8 

9<Note>

10 채널은 [연구 미리보기](#research-preview)에 있으며 Claude Code v2.1.80 이상이 필요합니다. claude.ai 로그인이 필요합니다. 콘솔 및 API 키 인증은 지원되지 않습니다. Team 및 Enterprise 조직은 [명시적으로 활성화](#enterprise-controls)해야 합니다.

11</Note>

12 

13채널은 실행 중인 Claude Code 세션으로 이벤트를 푸시하는 MCP 서버이므로 Claude는 터미널에 없을 때 발생하는 일에 반응할 수 있습니다. 채널은 양방향일 수 있습니다. Claude는 이벤트를 읽고 동일한 채널을 통해 다시 회신합니다(채팅 브리지처럼). 이벤트는 세션이 열려 있는 동안에만 도착하므로 항상 켜진 설정의 경우 Claude를 백그라운드 프로세스 또는 지속적인 터미널에서 실행합니다.

14 

15새로운 클라우드 세션을 생성하거나 폴링될 때까지 기다리는 통합과 달리 이벤트는 이미 열려 있는 세션에 도착합니다. [채널이 어떻게 비교되는지](#how-channels-compare) 참조하세요.

16 

17채널을 플러그인으로 설치하고 자신의 자격증명으로 구성합니다. Telegram, Discord 및 iMessage는 연구 미리보기에 포함되어 있습니다.

18 

19Claude가 채널을 통해 회신할 때 터미널에서 인바운드 메시지를 볼 수 있지만 회신 텍스트는 볼 수 없습니다. 터미널에는 도구 호출과 확인(예: "전송됨")이 표시되고 실제 회신은 다른 플랫폼에 나타납니다.

20 

21이 페이지에서 다루는 내용:

22 

23* [지원되는 채널](#supported-channels): Telegram, Discord 및 iMessage 설정

24* [채널 설치 및 실행](#quickstart): localhost 데모인 fakechat 사용

25* [메시지를 푸시할 수 있는 사람](#security): 발신자 허용 목록 및 페어링 방법

26* [조직에 대해 채널 활성화](#enterprise-controls): Team 및 Enterprise

27* [채널이 어떻게 비교되는지](#how-channels-compare): 웹 세션, Slack, MCP 및 Remote Control과 비교

28 

29자신의 채널을 구축하려면 [채널 참조](/ko/channels-reference)를 참조하세요.

30 

31## 지원되는 채널

32 

33각 지원되는 채널은 [Bun](https://bun.sh)이 필요한 플러그인입니다. 실제 플랫폼을 연결하기 전에 플러그인 흐름의 실습 데모를 보려면 [fakechat 빠른 시작](#quickstart)을 시도하세요.

34 

35<Tabs>

36 <Tab title="Telegram">

37 전체 [Telegram 플러그인 소스](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/telegram)를 확인하세요.

38 

39 <Steps>

40 <Step title="Telegram 봇 만들기">

41 Telegram에서 [BotFather](https://t.me/BotFather)를 열고 `/newbot`을 보냅니다. 표시 이름과 `bot`으로 끝나는 고유한 사용자 이름을 지정합니다. BotFather가 반환하는 토큰을 복사합니다.

42 </Step>

43 

44 <Step title="플러그인 설치">

45 Claude Code에서 다음을 실행합니다:

46 

47 ```

48 /plugin install telegram@claude-plugins-official

49 ```

50 

51 Claude Code가 플러그인을 어떤 마켓플레이스에서도 찾을 수 없다고 보고하면 마켓플레이스가 누락되었거나 오래되었습니다. `/plugin marketplace update claude-plugins-official`을 실행하여 새로 고치거나 이전에 추가하지 않았다면 `/plugin marketplace add anthropics/claude-plugins-official`을 실행합니다. 그런 다음 설치를 다시 시도합니다.

52 

53 설치 후 `/reload-plugins`을 실행하여 플러그인의 구성 명령을 활성화합니다.

54 </Step>

55 

56 <Step title="토큰 구성">

57 BotFather의 토큰으로 구성 명령을 실행합니다:

58 

59 ```

60 /telegram:configure <token>

61 ```

62 

63 이것은 `~/.claude/channels/telegram/.env`에 저장됩니다. Claude Code를 시작하기 전에 셸 환경에서 `TELEGRAM_BOT_TOKEN`을 설정할 수도 있습니다.

64 </Step>

65 

66 <Step title="채널이 활성화된 상태로 다시 시작">

67 Claude Code를 종료하고 채널 플래그로 다시 시작합니다. 이것은 Telegram 플러그인을 시작하여 봇에서 메시지 폴링을 시작합니다:

68 

69 ```bash theme={null}

70 claude --channels plugin:telegram@claude-plugins-official

71 ```

72 </Step>

73 

74 <Step title="계정 페어링">

75 Telegram을 열고 봇에 메시지를 보냅니다. 봇이 페어링 코드로 회신합니다.

76 

77 <Note>봇이 응답하지 않으면 Claude Code가 이전 단계에서 `--channels`로 실행 중인지 확인하세요. 봇은 채널이 활성화된 동안에만 회신할 수 있습니다.</Note>

78 

79 Claude Code로 돌아가서 다음을 실행합니다:

80 

81 ```

82 /telegram:access pair <code>

83 ```

84 

85 그런 다음 계정만 메시지를 보낼 수 있도록 액세스를 잠급니다:

86 

87 ```

88 /telegram:access policy allowlist

89 ```

90 </Step>

91 </Steps>

92 </Tab>

93 

94 <Tab title="Discord">

95 전체 [Discord 플러그인 소스](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/discord)를 확인하세요.

96 

97 <Steps>

98 <Step title="Discord 봇 만들기">

99 [Discord Developer Portal](https://discord.com/developers/applications)로 이동하여 **New Application**을 클릭하고 이름을 지정합니다. **Bot** 섹션에서 사용자 이름을 만든 다음 **Reset Token**을 클릭하고 토큰을 복사합니다.

100 </Step>

101 

102 <Step title="Message Content Intent 활성화">

103 봇의 설정에서 **Privileged Gateway Intents**로 스크롤하고 **Message Content Intent**를 활성화합니다.

104 </Step>

105 

106 <Step title="봇을 서버에 초대">

107 **OAuth2 > URL Generator**로 이동합니다. `bot` 범위를 선택하고 다음 권한을 활성화합니다:

108 

109 * View Channels

110 * Send Messages

111 * Send Messages in Threads

112 * Read Message History

113 * Attach Files

114 * Add Reactions

115 

116 생성된 URL을 열어 봇을 서버에 추가합니다.

117 </Step>

118 

119 <Step title="플러그인 설치">

120 Claude Code에서 다음을 실행합니다:

121 

122 ```

123 /plugin install discord@claude-plugins-official

124 ```

125 

126 Claude Code가 플러그인을 어떤 마켓플레이스에서도 찾을 수 없다고 보고하면 마켓플레이스가 누락되었거나 오래되었습니다. `/plugin marketplace update claude-plugins-official`을 실행하여 새로 고치거나 이전에 추가하지 않았다면 `/plugin marketplace add anthropics/claude-plugins-official`을 실행합니다. 그런 다음 설치를 다시 시도합니다.

127 

128 설치 후 `/reload-plugins`을 실행하여 플러그인의 구성 명령을 활성화합니다.

129 </Step>

130 

131 <Step title="토큰 구성">

132 복사한 봇 토큰으로 구성 명령을 실행합니다:

133 

134 ```

135 /discord:configure <token>

136 ```

137 

138 이것은 `~/.claude/channels/discord/.env`에 저장됩니다. Claude Code를 시작하기 전에 셸 환경에서 `DISCORD_BOT_TOKEN`을 설정할 수도 있습니다.

139 </Step>

140 

141 <Step title="채널이 활성화된 상태로 다시 시작">

142 Claude Code를 종료하고 채널 플래그로 다시 시작합니다. 이것은 Discord 플러그인을 연결하여 봇이 메시지를 수신하고 응답할 수 있도록 합니다:

143 

144 ```bash theme={null}

145 claude --channels plugin:discord@claude-plugins-official

146 ```

147 </Step>

148 

149 <Step title="계정 페어링">

150 Discord에서 봇에 DM을 보냅니다. 봇이 페어링 코드로 회신합니다.

151 

152 <Note>봇이 응답하지 않으면 Claude Code가 이전 단계에서 `--channels`로 실행 중인지 확인하세요. 봇은 채널이 활성화된 동안에만 회신할 수 있습니다.</Note>

153 

154 Claude Code로 돌아가서 다음을 실행합니다:

155 

156 ```

157 /discord:access pair <code>

158 ```

159 

160 그런 다음 계정만 메시지를 보낼 수 있도록 액세스를 잠급니다:

161 

162 ```

163 /discord:access policy allowlist

164 ```

165 </Step>

166 </Steps>

167 </Tab>

168 

169 <Tab title="iMessage">

170 전체 [iMessage 플러그인 소스](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/imessage)를 확인하세요.

171 

172 iMessage 채널은 Messages 데이터베이스를 직접 읽고 AppleScript를 통해 회신을 보냅니다. macOS가 필요하며 봇 토큰이나 외부 서비스가 필요하지 않습니다.

173 

174 <Steps>

175 <Step title="전체 디스크 액세스 권한 부여">

176 `~/Library/Messages/chat.db`의 Messages 데이터베이스는 macOS로 보호됩니다. 서버가 처음 읽을 때 macOS는 액세스를 요청합니다. **Allow**를 클릭합니다. 프롬프트는 Terminal, iTerm 또는 IDE와 같이 Bun을 시작한 앱의 이름을 지정합니다.

177 

178 프롬프트가 나타나지 않거나 Don't Allow를 클릭한 경우 **System Settings > Privacy & Security > Full Disk Access**에서 수동으로 액세스를 부여하고 터미널을 추가합니다. 이 없이는 서버가 `authorization denied`로 즉시 종료됩니다.

179 </Step>

180 

181 <Step title="플러그인 설치">

182 Claude Code에서 다음을 실행합니다:

183 

184 ```

185 /plugin install imessage@claude-plugins-official

186 ```

187 

188 Claude Code가 플러그인을 어떤 마켓플레이스에서도 찾을 수 없다고 보고하면 마켓플레이스가 누락되었거나 오래되었습니다. `/plugin marketplace update claude-plugins-official`을 실행하여 새로 고치거나 이전에 추가하지 않았다면 `/plugin marketplace add anthropics/claude-plugins-official`을 실행합니다. 그런 다음 설치를 다시 시도합니다.

189 </Step>

190 

191 <Step title="채널이 활성화된 상태로 다시 시작">

192 Claude Code를 종료하고 채널 플래그로 다시 시작합니다:

193 

194 ```bash theme={null}

195 claude --channels plugin:imessage@claude-plugins-official

196 ```

197 </Step>

198 

199 <Step title="자신에게 문자 보내기">

200 Apple ID로 로그인한 모든 기기에서 Messages를 열고 자신에게 메시지를 보냅니다. 즉시 Claude에 도달합니다. 자체 채팅은 설정 없이 액세스 제어를 우회합니다.

201 

202 <Note>Claude가 보내는 첫 번째 회신은 터미널이 Messages를 제어할 수 있는지 묻는 macOS Automation 프롬프트를 트리거합니다. **OK**를 클릭합니다.</Note>

203 </Step>

204 

205 <Step title="다른 발신자 허용">

206 기본적으로 자신의 메시지만 통과합니다. 다른 연락처가 Claude에 도달하도록 하려면 해당 핸들을 추가합니다:

207 

208 ```

209 /imessage:access allow +15551234567

210 ```

211 

212 핸들은 `+country` 형식의 전화번호 또는 `user@example.com`과 같은 Apple ID 이메일입니다.

213 </Step>

214 </Steps>

215 </Tab>

216</Tabs>

217 

218아직 플러그인이 없는 시스템의 경우 [자신의 채널을 구축](/ko/channels-reference)할 수도 있습니다.

219 

220## 빠른 시작

221 

222Fakechat은 localhost에서 채팅 UI를 실행하는 공식적으로 지원되는 데모 채널이며 인증할 것도 없고 구성할 외부 서비스도 없습니다.

223 

224fakechat을 설치하고 활성화한 후 브라우저에서 입력하면 메시지가 Claude Code 세션에 도착합니다. Claude가 회신하면 회신이 브라우저로 돌아옵니다. fakechat 인터페이스를 테스트한 후 [Telegram](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/telegram), [Discord](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/discord) 또는 [iMessage](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/imessage)를 시도해 보세요.

225 

226fakechat 데모를 시도하려면 다음이 필요합니다:

227 

228* Claude Code [설치 및 인증](/ko/quickstart#step-1-install-claude-code): claude.ai 계정 사용

229* [Bun](https://bun.sh) 설치됨. 사전 구축된 채널 플러그인은 Bun 스크립트입니다. `bun --version`으로 확인하세요. 실패하면 [Bun 설치](https://bun.sh/docs/installation)하세요.

230* **Team/Enterprise 사용자**: 조직 관리자가 관리 설정에서 [채널을 활성화](#enterprise-controls)해야 합니다.

231 

232<Steps>

233 <Step title="fakechat 채널 플러그인 설치">

234 Claude Code 세션을 시작하고 설치 명령을 실행합니다:

235 

236 ```text theme={null}

237 /plugin install fakechat@claude-plugins-official

238 ```

239 

240 Claude Code가 플러그인을 어떤 마켓플레이스에서도 찾을 수 없다고 보고하면 마켓플레이스가 누락되었거나 오래되었습니다. `/plugin marketplace update claude-plugins-official`을 실행하여 새로 고치거나 이전에 추가하지 않았다면 `/plugin marketplace add anthropics/claude-plugins-official`을 실행합니다. 그런 다음 설치를 다시 시도합니다.

241 </Step>

242 

243 <Step title="채널이 활성화된 상태로 다시 시작">

244 Claude Code를 종료한 다음 `--channels`로 다시 시작하고 설치한 fakechat 플러그인을 전달합니다:

245 

246 ```bash theme={null}

247 claude --channels plugin:fakechat@claude-plugins-official

248 ```

249 

250 fakechat 서버가 자동으로 시작됩니다.

251 

252 <Tip>

253 `--channels`에 여러 플러그인을 공백으로 구분하여 전달할 수 있습니다.

254 </Tip>

255 </Step>

256 

257 <Step title="메시지 푸시">

258 [http://localhost:8787](http://localhost:8787)에서 fakechat UI를 열고 메시지를 입력합니다:

259 

260 ```text theme={null}

261 hey, what's in my working directory?

262 ```

263 

264 메시지는 Claude Code 세션에 `<channel source="fakechat">` 이벤트로 도착합니다. Claude가 읽고 작업을 수행한 다음 fakechat의 `reply` 도구를 호출합니다. 답변이 채팅 UI에 나타납니다.

265 </Step>

266</Steps>

267 

268Claude가 터미널에서 멀리 있을 때 권한 프롬프트에 도달하면 세션이 응답할 때까지 일시 중지됩니다. [권한 릴레이 기능](/ko/channels-reference#relay-permission-prompts)을 선언하는 채널 서버는 이러한 프롬프트를 사용자에게 전달하여 원격으로 승인하거나 거부할 수 있습니다. 무인 사용의 경우 [`--dangerously-skip-permissions`](/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)는 프롬프트를 완전히 우회하지만 신뢰하는 환경에서만 사용하세요.

269 

270## 보안

271 

272승인된 모든 채널 플러그인은 발신자 허용 목록을 유지합니다. 추가한 ID만 메시지를 푸시할 수 있으며 다른 모든 것은 자동으로 삭제됩니다.

273 

274Telegram 및 Discord는 페어링으로 목록을 부트스트랩합니다:

275 

2761. Telegram 또는 Discord에서 봇을 찾고 메시지를 보냅니다.

2772. 봇이 페어링 코드로 회신합니다.

2783. Claude Code 세션에서 메시지가 표시될 때 코드를 승인합니다.

2794. 발신자 ID가 허용 목록에 추가됩니다.

280 

281iMessage는 다르게 작동합니다. 자신에게 문자를 보내면 자동으로 게이트를 우회하고 `/imessage:access allow`로 다른 연락처를 핸들로 추가합니다.

282 

283그 위에 `--channels`로 각 세션에서 활성화된 서버를 제어하고 Team 및 Enterprise 계획에서 조직은 [`channelsEnabled`](#enterprise-controls)로 가용성을 제어합니다.

284 

285`.mcp.json`에 있는 것만으로는 메시지를 푸시하기에 충분하지 않습니다. 서버도 `--channels`에서 명명되어야 합니다.

286 

287허용 목록은 채널이 선언하는 경우 [권한 릴레이](/ko/channels-reference#relay-permission-prompts)도 게이트합니다. 채널을 통해 회신할 수 있는 모든 사람이 세션에서 도구 사용을 승인하거나 거부할 수 있으므로 해당 권한을 신뢰하는 발신자만 허용 목록에 추가하세요.

288 

289## Enterprise 제어

290 

291Team 및 Enterprise 계획에서 채널은 기본적으로 꺼져 있습니다. 관리자는 사용자가 재정의할 수 없는 두 가지 [관리 설정](/ko/settings)을 통해 가용성을 제어합니다:

292 

293| 설정 | 목적 | 구성되지 않은 경우 |

294| :---------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------- |

295| `channelsEnabled` | 마스터 스위치. 채널이 메시지를 전달하려면 `true`여야 합니다. [claude.ai Admin 콘솔](https://claude.ai/admin-settings/claude-code) 토글을 통해 또는 관리 설정에서 직접 설정합니다. 꺼져 있을 때 개발 플래그를 포함한 모든 채널을 차단합니다. | 채널 차단됨 |

296| `allowedChannelPlugins` | 채널이 활성화되면 등록할 수 있는 플러그인. 설정되면 Anthropic 유지 관리 목록을 대체합니다. `channelsEnabled`가 `true`일 때만 적용됩니다. | Anthropic 기본 목록 적용 |

297 

298조직이 없는 Pro 및 Max 사용자는 이러한 검사를 완전히 건너뜁니다. 채널을 사용할 수 있으며 사용자는 `--channels`로 세션당 옵트인합니다.

299 

300### 조직에 대해 채널 활성화

301 

302관리자는 [**claude.ai → Admin settings → Claude Code → Channels**](https://claude.ai/admin-settings/claude-code)에서 채널을 활성화하거나 관리 설정에서 `channelsEnabled`를 `true`로 설정할 수 있습니다.

303 

304활성화되면 조직의 사용자는 `--channels`를 사용하여 개별 세션에 채널 서버를 옵트인할 수 있습니다. 설정이 비활성화되었거나 설정되지 않은 경우 MCP 서버는 여전히 연결되고 해당 도구가 작동하지만 채널 메시지는 도착하지 않습니다. 시작 경고는 사용자에게 관리자가 설정을 활성화하도록 합니다.

305 

306### 실행할 수 있는 채널 플러그인 제한

307 

308기본적으로 Anthropic 유지 관리 허용 목록의 모든 플러그인이 채널로 등록할 수 있습니다. Team 및 Enterprise 계획의 관리자는 관리 설정에서 `allowedChannelPlugins`을 설정하여 해당 허용 목록을 자신의 목록으로 바꿀 수 있습니다. 이를 사용하여 허용되는 공식 플러그인을 제한하거나 자신의 내부 마켓플레이스에서 채널을 승인하거나 둘 다 수행합니다. 각 항목은 플러그인과 그것이 나오는 마켓플레이스의 이름을 지정합니다:

309 

310```json theme={null}

311{

312 "channelsEnabled": true,

313 "allowedChannelPlugins": [

314 { "marketplace": "claude-plugins-official", "plugin": "telegram" },

315 { "marketplace": "claude-plugins-official", "plugin": "discord" },

316 { "marketplace": "acme-corp-plugins", "plugin": "internal-alerts" }

317 ]

318}

319```

320 

321`allowedChannelPlugins`이 설정되면 Anthropic 허용 목록을 완전히 대체합니다. 나열된 플러그인만 등록할 수 있습니다. 기본 Anthropic 허용 목록으로 돌아가려면 설정하지 않은 상태로 두세요. 빈 배열은 허용 목록의 모든 채널 플러그인을 차단하지만 `--dangerously-load-development-channels`는 여전히 로컬 테스트를 위해 이를 우회할 수 있습니다. 개발 플래그를 포함한 채널을 완전히 차단하려면 대신 `channelsEnabled`를 설정하지 않은 상태로 두세요.

322 

323이 설정에는 `channelsEnabled: true`가 필요합니다. 사용자가 `--channels`에 조직 목록에 없는 플러그인을 전달하면 Claude Code가 정상적으로 시작되지만 채널이 등록되지 않으며 시작 알림이 플러그인이 조직의 승인된 목록에 없음을 설명합니다.

324 

325## 연구 미리보기

326 

327채널은 연구 미리보기 기능입니다. 가용성은 점진적으로 출시되고 있으며 `--channels` 플래그 구문 및 프로토콜 계약은 피드백에 따라 변경될 수 있습니다.

328 

329미리보기 중에 `--channels`는 Anthropic 유지 관리 허용 목록의 플러그인만 허용하거나 관리자가 [`allowedChannelPlugins`](#restrict-which-channel-plugins-can-run)을 설정한 경우 조직의 허용 목록에서만 허용합니다. [claude-plugins-official](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins)의 채널 플러그인은 기본 승인된 집합입니다. 유효한 허용 목록에 없는 것을 전달하면 Claude Code가 정상적으로 시작되지만 채널이 등록되지 않으며 시작 알림이 이유를 알려줍니다.

330 

331구축 중인 채널을 테스트하려면 `--dangerously-load-development-channels`를 사용합니다. 구축하는 사용자 정의 채널 테스트에 대한 정보는 [연구 미리보기 중 테스트](/ko/channels-reference#test-during-the-research-preview)를 참조하세요.

332 

333[Claude Code GitHub 저장소](https://github.com/anthropics/claude-code/issues)에서 문제 또는 피드백을 보고합니다.

334 

335## 채널이 어떻게 비교되는지

336 

337여러 Claude Code 기능이 터미널 외부의 시스템에 연결되며 각각 다른 종류의 작업에 적합합니다:

338 

339| 기능 | 수행하는 작업 | 좋은 점 |

340| -------------------------------------------- | ----------------------------------------- | ------------------------------------- |

341| [웹의 Claude Code](/ko/claude-code-on-the-web) | GitHub에서 복제된 새로운 클라우드 샌드박스에서 작업 실행 | 나중에 확인하는 자체 포함된 비동기 작업 위임 |

342| [Slack의 Claude](/ko/slack) | 채널 또는 스레드의 `@Claude` 언급에서 웹 세션 생성 | 팀 대화 컨텍스트에서 직접 작업 시작 |

343| 표준 [MCP 서버](/ko/mcp) | Claude는 작업 중에 쿼리합니다. 세션으로 푸시되는 것은 없습니다. | Claude에게 시스템을 읽거나 쿼리하기 위한 온디맨드 액세스 제공 |

344| [Remote Control](/ko/remote-control) | claude.ai 또는 Claude 모바일 앱에서 로컬 세션을 운전합니다. | 책상에서 멀리 있을 때 진행 중인 세션 조종 |

345 

346채널은 Claude가 아닌 소스의 이벤트를 이미 실행 중인 로컬 세션으로 푸시하여 해당 목록의 간격을 채웁니다.

347 

348* **채팅 브리지**: Telegram, Discord 또는 iMessage를 통해 휴대폰에서 Claude에 무언가를 물어보고 답변이 같은 채팅으로 돌아오는 동안 작업이 기계에서 실제 파일에 대해 실행됩니다.

349* **[웹훅 수신기](/ko/channels-reference#example-build-a-webhook-receiver)**: CI, 오류 추적기, 배포 파이프라인 또는 기타 외부 서비스의 웹훅이 Claude가 이미 파일을 열고 있고 디버깅 중인 것을 기억하는 곳에 도착합니다.

350 

351## 다음 단계

352 

353채널이 실행 중이면 다음 관련 기능을 살펴보세요:

354 

355* [자신의 채널 구축](/ko/channels-reference): 아직 플러그인이 없는 시스템의 경우

356* [Remote Control](/ko/remote-control): 이벤트를 전달하는 대신 휴대폰에서 로컬 세션을 운전하기

357* [예약된 작업](/ko/scheduled-tasks): 푸시된 이벤트에 반응하는 대신 타이머에서 폴링하기

channels-reference.md +749 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 채널 참조

6 

7> 웹훅, 알림, 채팅 메시지를 Claude Code 세션으로 푸시하는 MCP 서버를 구축합니다. 채널 계약 참조: 기능 선언, 알림 이벤트, 회신 도구, 발신자 게이팅, 권한 릴레이.

8 

9<Note>

10 채널은 [연구 미리보기](/ko/channels#research-preview)에 있으며 Claude Code v2.1.80 이상이 필요합니다. claude.ai 로그인이 필요합니다. 콘솔 및 API 키 인증은 지원되지 않습니다. 팀 및 엔터프라이즈 조직은 [명시적으로 활성화](/ko/channels#enterprise-controls)해야 합니다.

11</Note>

12 

13채널은 Claude Code 세션으로 이벤트를 푸시하는 MCP 서버이므로 Claude는 터미널 외부에서 발생하는 일에 반응할 수 있습니다.

14 

15단방향 또는 양방향 채널을 구축할 수 있습니다. 단방향 채널은 Claude가 작동할 수 있도록 알림, 웹훅 또는 모니터링 이벤트를 전달합니다. 채팅 브리지와 같은 양방향 채널은 Claude가 메시지를 다시 보낼 수 있도록 [회신 도구를 노출](#expose-a-reply-tool)합니다. 신뢰할 수 있는 발신자 경로가 있는 채널은 [권한 프롬프트를 릴레이](#relay-permission-prompts)하도록 선택할 수 있으므로 원격으로 도구 사용을 승인하거나 거부할 수 있습니다.

16 

17이 페이지에서 다루는 내용:

18 

19* [개요](#overview): 채널의 작동 방식

20* [필요한 것](#what-you-need): 요구 사항 및 일반 단계

21* [예: 웹훅 수신기 구축](#example-build-a-webhook-receiver): 최소 단방향 연습

22* [서버 옵션](#server-options): 생성자 필드

23* [알림 형식](#notification-format): 이벤트 페이로드

24* [회신 도구 노출](#expose-a-reply-tool): Claude가 메시지를 다시 보낼 수 있도록 함

25* [인바운드 메시지 게이팅](#gate-inbound-messages): 프롬프트 주입을 방지하기 위한 발신자 확인

26* [권한 프롬프트 릴레이](#relay-permission-prompts): 도구 승인 프롬프트를 원격 채널로 전달

27 

28기존 채널을 사용하는 대신 구축하려면 [채널](/ko/channels)을 참조하세요. Telegram, Discord, iMessage 및 fakechat은 연구 미리보기에 포함되어 있습니다.

29 

30## 개요

31 

32채널은 Claude Code와 동일한 머신에서 실행되는 [MCP](https://modelcontextprotocol.io) 서버입니다. Claude Code는 이를 서브프로세스로 생성하고 stdio를 통해 통신합니다. 채널 서버는 외부 시스템과 Claude Code 세션 간의 브리지입니다:

33 

34* **채팅 플랫폼** (Telegram, Discord): 플러그인이 로컬에서 실행되고 플랫폼의 API를 폴링하여 새 메시지를 확인합니다. 누군가 봇에 DM을 보내면 플러그인이 메시지를 수신하고 Claude로 전달합니다. 노출할 URL이 없습니다.

35* **웹훅** (CI, 모니터링): 서버가 로컬 HTTP 포트에서 수신합니다. 외부 시스템이 해당 포트에 POST하고 서버가 페이로드를 Claude로 푸시합니다.

36 

37<img src="https://mintlify.s3.us-west-1.amazonaws.com/claude-code/ko/images/channel-architecture.svg" alt="외부 시스템이 로컬 채널 서버에 연결되고 stdio를 통해 Claude Code와 통신하는 아키텍처 다이어그램" />

38 

39## 필요한 것

40 

41유일한 하드 요구 사항은 [`@modelcontextprotocol/sdk`](https://www.npmjs.com/package/@modelcontextprotocol/sdk) 패키지와 Node.js 호환 런타임입니다. [Bun](https://bun.sh), [Node](https://nodejs.org), [Deno](https://deno.com) 모두 작동합니다. 연구 미리보기의 사전 구축된 플러그인은 Bun을 사용하지만 채널이 반드시 그럴 필요는 없습니다.

42 

43서버는 다음을 수행해야 합니다:

44 

451. `claude/channel` 기능을 선언하여 Claude Code가 알림 리스너를 등록하도록 함

462. 무언가 발생할 때 `notifications/claude/channel` 이벤트를 내보냄

473. [stdio 전송](https://modelcontextprotocol.io/docs/concepts/transports#standard-io)을 통해 연결 (Claude Code가 서버를 서브프로세스로 생성)

48 

49[서버 옵션](#server-options) 및 [알림 형식](#notification-format) 섹션에서 각각을 자세히 다룹니다. 전체 연습은 [예: 웹훅 수신기 구축](#example-build-a-webhook-receiver)을 참조하세요.

50 

51연구 미리보기 중에 사용자 정의 채널은 [승인된 허용 목록](/ko/channels#supported-channels)에 없습니다. `--dangerously-load-development-channels`를 사용하여 로컬에서 테스트합니다. 자세한 내용은 [연구 미리보기 중 테스트](#test-during-the-research-preview)를 참조하세요.

52 

53## 예: 웹훅 수신기 구축

54 

55이 연습은 HTTP 요청을 수신하고 Claude Code 세션으로 전달하는 단일 파일 서버를 구축합니다. 마지막에는 CI 파이프라인, 모니터링 알림 또는 `curl` 명령과 같이 HTTP POST를 보낼 수 있는 모든 것이 Claude로 이벤트를 푸시할 수 있습니다.

56 

57이 예제는 기본 제공 HTTP 서버 및 TypeScript 지원을 위해 [Bun](https://bun.sh)을 런타임으로 사용합니다. 대신 [Node](https://nodejs.org) 또는 [Deno](https://deno.com)를 사용할 수 있습니다. 유일한 요구 사항은 [MCP SDK](https://www.npmjs.com/package/@modelcontextprotocol/sdk)입니다.

58 

59<Steps>

60 <Step title="프로젝트 생성">

61 새 디렉토리를 생성하고 MCP SDK를 설치합니다:

62 

63 ```bash theme={null}

64 mkdir webhook-channel && cd webhook-channel

65 bun add @modelcontextprotocol/sdk

66 ```

67 </Step>

68 

69 <Step title="채널 서버 작성">

70 `webhook.ts`라는 파일을 생성합니다. 이것이 전체 채널 서버입니다: stdio를 통해 Claude Code에 연결되고 포트 8788에서 HTTP POST를 수신합니다. 요청이 도착하면 본문을 채널 이벤트로 Claude로 푸시합니다.

71 

72 ```ts title="webhook.ts" theme={null}

73 #!/usr/bin/env bun

74 import { Server } from '@modelcontextprotocol/sdk/server/index.js'

75 import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'

76 

77 // MCP 서버를 생성하고 채널로 선언합니다

78 const mcp = new Server(

79 { name: 'webhook', version: '0.0.1' },

80 {

81 // 이 키가 채널을 만드는 것입니다 — Claude Code가 이에 대한 리스너를 등록합니다

82 capabilities: { experimental: { 'claude/channel': {} } },

83 // Claude의 시스템 프롬프트에 추가되므로 이러한 이벤트를 처리하는 방법을 알 수 있습니다

84 instructions: 'Events from the webhook channel arrive as <channel source="webhook" ...>. They are one-way: read them and act, no reply expected.',

85 },

86 )

87 

88 // stdio를 통해 Claude Code에 연결합니다 (Claude Code가 이 프로세스를 생성합니다)

89 await mcp.connect(new StdioServerTransport())

90 

91 // 모든 POST를 Claude로 전달하는 HTTP 서버를 시작합니다

92 Bun.serve({

93 port: 8788, // 열려 있는 모든 포트가 작동합니다

94 // localhost 전용: 이 머신 외부의 아무것도 POST할 수 없습니다

95 hostname: '127.0.0.1',

96 async fetch(req) {

97 const body = await req.text()

98 await mcp.notification({

99 method: 'notifications/claude/channel',

100 params: {

101 content: body, // <channel> 태그의 본문이 됩니다

102 // 각 키는 태그 속성이 됩니다. 예: <channel path="/" method="POST">

103 meta: { path: new URL(req.url).pathname, method: req.method },

104 },

105 })

106 return new Response('ok')

107 },

108 })

109 ```

110 

111 파일은 순서대로 세 가지를 수행합니다:

112 

113 * **서버 구성**: 기능에 `claude/channel`이 있는 MCP 서버를 생성합니다. 이것이 Claude Code에 이것이 채널임을 알려줍니다. [`instructions`](#server-options) 문자열은 Claude의 시스템 프롬프트로 이동합니다: Claude에 예상할 이벤트, 회신 여부, 회신해야 하는 경우 사용할 도구 및 전달할 속성(예: `chat_id`)을 알려줍니다.

114 * **Stdio 연결**: stdin/stdout을 통해 Claude Code에 연결합니다. 이는 모든 [MCP 서버](https://modelcontextprotocol.io/docs/concepts/transports#standard-io)에 표준입니다: Claude Code가 이를 서브프로세스로 생성합니다.

115 * **HTTP 리스너**: 포트 8788에서 로컬 웹 서버를 시작합니다. 모든 POST 본문은 `mcp.notification()`을 통해 채널 이벤트로 Claude로 전달됩니다. `content`는 이벤트 본문이 되고 각 `meta` 항목은 `<channel>` 태그의 속성이 됩니다. 리스너는 `mcp` 인스턴스에 액세스해야 하므로 동일한 프로세스에서 실행됩니다. 더 큰 프로젝트의 경우 별도의 모듈로 분할할 수 있습니다.

116 </Step>

117 

118 <Step title="Claude Code에 서버 등록">

119 Claude Code가 시작하는 방법을 알 수 있도록 MCP 구성에 서버를 추가합니다. 동일한 디렉토리의 프로젝트 수준 `.mcp.json`의 경우 상대 경로를 사용합니다. `~/.claude.json`의 사용자 수준 구성의 경우 모든 프로젝트에서 서버를 찾을 수 있도록 전체 절대 경로를 사용합니다:

120 

121 ```json title=".mcp.json" theme={null}

122 {

123 "mcpServers": {

124 "webhook": { "command": "bun", "args": ["./webhook.ts"] }

125 }

126 }

127 ```

128 

129 Claude Code는 시작 시 MCP 구성을 읽고 각 서버를 서브프로세스로 생성합니다.

130 </Step>

131 

132 <Step title="테스트">

133 연구 미리보기 중에 사용자 정의 채널은 허용 목록에 없으므로 개발 플래그로 Claude Code를 시작합니다:

134 

135 ```bash theme={null}

136 claude --dangerously-load-development-channels server:webhook

137 ```

138 

139 Claude Code가 시작되면 MCP 구성을 읽고 `webhook.ts`를 서브프로세스로 생성하며 구성한 포트(이 예제에서는 8788)에서 HTTP 리스너가 자동으로 시작됩니다. 서버를 직접 실행할 필요가 없습니다.

140 

141 "조직 정책에 의해 차단됨"이 표시되면 팀 또는 엔터프라이즈 관리자가 먼저 [채널을 활성화](/ko/channels#enterprise-controls)해야 합니다.

142 

143 별도의 터미널에서 HTTP POST를 메시지와 함께 서버로 보내 웹훅을 시뮬레이션합니다. 이 예제는 CI 실패 알림을 포트 8788로 보냅니다 (또는 구성한 포트):

144 

145 ```bash theme={null}

146 curl -X POST localhost:8788 -d "build failed on main: https://ci.example.com/run/1234"

147 ```

148 

149 페이로드는 Claude Code 세션에 `<channel>` 태그로 도착합니다:

150 

151 ```text theme={null}

152 <channel source="webhook" path="/" method="POST">build failed on main: https://ci.example.com/run/1234</channel>

153 ```

154 

155 Claude Code 터미널에서 Claude가 메시지를 수신하고 응답을 시작하는 것을 볼 수 있습니다: 파일 읽기, 명령 실행 또는 메시지가 요구하는 모든 작업. 이것은 단방향 채널이므로 Claude는 세션에서 작동하지만 웹훅을 통해 아무것도 다시 보내지 않습니다. 회신을 추가하려면 [회신 도구 노출](#expose-a-reply-tool)을 참조하세요.

156 

157 이벤트가 도착하지 않으면 진단은 `curl`이 반환한 것에 따라 달라집니다:

158 

159 * **`curl`은 성공하지만 Claude에 도달하지 않음**: 세션에서 `/mcp`를 실행하여 서버의 상태를 확인합니다. "연결 실패"는 일반적으로 서버 파일의 종속성 또는 가져오기 오류를 의미합니다. `~/.claude/debug/<session-id>.txt`의 디버그 로그에서 stderr 추적을 확인합니다.

160 * **`curl`이 "연결 거부"로 실패함**: 포트가 아직 바인딩되지 않았거나 이전 실행의 오래된 프로세스가 포트를 보유하고 있습니다. `lsof -i :<port>`는 수신 중인 것을 표시합니다. 세션을 다시 시작하기 전에 오래된 프로세스를 `kill`합니다.

161 </Step>

162</Steps>

163 

164[fakechat 서버](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/fakechat)는 웹 UI, 파일 첨부 및 양방향 채팅을 위한 회신 도구로 이 패턴을 확장합니다.

165 

166## 연구 미리보기 중 테스트

167 

168연구 미리보기 중에 모든 채널은 등록하기 위해 [승인된 허용 목록](/ko/channels#research-preview)에 있어야 합니다. 개발 플래그는 확인 프롬프트 후 특정 항목에 대한 허용 목록을 우회합니다. 이 예제는 두 항목 유형을 모두 보여줍니다:

169 

170```bash theme={null}

171# 개발 중인 플러그인 테스트

172claude --dangerously-load-development-channels plugin:yourplugin@yourmarketplace

173 

174# 베어 .mcp.json 서버 테스트 (아직 플러그인 래퍼 없음)

175claude --dangerously-load-development-channels server:webhook

176```

177 

178우회는 항목별입니다. 이 플래그를 `--channels`와 결합하면 우회가 `--channels` 항목으로 확장되지 않습니다. 연구 미리보기 중에 승인된 허용 목록은 Anthropic에서 큐레이션되므로 채널은 구축 및 테스트하는 동안 개발 플래그에 남아 있습니다.

179 

180<Note>

181 이 플래그는 허용 목록만 건너뜁니다. `channelsEnabled` 조직 정책은 여전히 적용됩니다. 신뢰할 수 없는 소스의 채널을 실행하는 데 사용하지 마세요.

182</Note>

183 

184## 서버 옵션

185 

186채널은 [`Server`](https://modelcontextprotocol.io/docs/concepts/servers) 생성자에서 이러한 옵션을 설정합니다. `instructions` 및 `capabilities.tools` 필드는 [표준 MCP](https://modelcontextprotocol.io/docs/concepts/servers)입니다. `capabilities.experimental['claude/channel']` 및 `capabilities.experimental['claude/channel/permission']`은 채널 특정 추가 사항입니다:

187 

188| 필드 | 유형 | 설명 |

189| :------------------------------------------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- |

190| `capabilities.experimental['claude/channel']` | `object` | 필수. 항상 `{}`. 존재는 알림 리스너를 등록합니다. |

191| `capabilities.experimental['claude/channel/permission']` | `object` | 선택 사항. 항상 `{}`. 이 채널이 권한 릴레이 요청을 수신할 수 있음을 선언합니다. 선언되면 Claude Code는 도구 승인 프롬프트를 채널로 전달하므로 원격으로 승인하거나 거부할 수 있습니다. [권한 프롬프트 릴레이](#relay-permission-prompts)를 참조하세요. |

192| `capabilities.tools` | `object` | 양방향만. 항상 `{}`. 표준 MCP 도구 기능. [회신 도구 노출](#expose-a-reply-tool)을 참조하세요. |

193| `instructions` | `string` | 권장. Claude의 시스템 프롬프트에 추가됩니다. Claude에 예상할 이벤트, `<channel>` 태그 속성의 의미, 회신 여부, 회신해야 하는 경우 사용할 도구 및 전달할 속성(예: `chat_id`)을 알려줍니다. |

194 

195단방향 채널을 생성하려면 `capabilities.tools`를 생략합니다. 이 예제는 채널 기능, 도구 및 설정된 지침이 있는 양방향 설정을 보여줍니다:

196 

197```ts theme={null}

198import { Server } from '@modelcontextprotocol/sdk/server/index.js'

199 

200const mcp = new Server(

201 { name: 'your-channel', version: '0.0.1' },

202 {

203 capabilities: {

204 experimental: { 'claude/channel': {} }, // 채널 리스너를 등록합니다

205 tools: {}, // 단방향 채널의 경우 생략합니다

206 },

207 // Claude의 시스템 프롬프트에 추가되므로 이벤트를 처리하는 방법을 알 수 있습니다

208 instructions: 'Messages arrive as <channel source="your-channel" ...>. Reply with the reply tool.',

209 },

210)

211```

212 

213이벤트를 푸시하려면 메서드 `notifications/claude/channel`으로 `mcp.notification()`을 호출합니다. 매개변수는 다음 섹션에 있습니다.

214 

215## 알림 형식

216 

217서버는 두 개의 매개변수로 `notifications/claude/channel`을 내보냅니다:

218 

219| 필드 | 유형 | 설명 |

220| :-------- | :----------------------- | :------------------------------------------------------------------------------------------------------------------------------------------- |

221| `content` | `string` | 이벤트 본문. `<channel>` 태그의 본문으로 전달됩니다. |

222| `meta` | `Record<string, string>` | 선택 사항. 각 항목은 채팅 ID, 발신자 이름 또는 알림 심각도와 같은 라우팅 컨텍스트를 위해 `<channel>` 태그의 속성이 됩니다. 키는 식별자여야 합니다: 문자, 숫자 및 밑줄만. 하이픈 또는 다른 문자를 포함하는 키는 자동으로 삭제됩니다. |

223 

224서버는 `Server` 인스턴스에서 `mcp.notification()`을 호출하여 이벤트를 푸시합니다. 이 예제는 두 개의 메타 키가 있는 CI 실패 알림을 푸시합니다:

225 

226```ts theme={null}

227await mcp.notification({

228 method: 'notifications/claude/channel',

229 params: {

230 content: 'build failed on main: https://ci.example.com/run/1234',

231 meta: { severity: 'high', run_id: '1234' },

232 },

233})

234```

235 

236이벤트는 `<channel>` 태그로 래핑된 Claude의 컨텍스트에 도착합니다. `source` 속성은 서버의 구성된 이름에서 자동으로 설정됩니다:

237 

238```text theme={null}

239<channel source="your-channel" severity="high" run_id="1234">

240build failed on main: https://ci.example.com/run/1234

241</channel>

242```

243 

244## 회신 도구 노출

245 

246채널이 양방향인 경우(알림 포워더가 아닌 채팅 브리지), Claude가 메시지를 다시 보낼 수 있도록 표준 [MCP 도구](https://modelcontextprotocol.io/docs/concepts/tools)를 노출합니다. 도구 등록에 대해 채널 특정 사항은 없습니다. 회신 도구에는 세 가지 구성 요소가 있습니다:

247 

2481. `Server` 생성자 기능의 `tools: {}` 항목이므로 Claude Code가 도구를 발견합니다

2492. 도구의 스키마를 정의하고 전송 로직을 구현하는 도구 핸들러

2503. Claude에 도구를 호출할 시기와 방법을 알려주는 `Server` 생성자의 `instructions` 문자열

251 

252[위의 웹훅 수신기](#example-build-a-webhook-receiver)에 이를 추가하려면:

253 

254<Steps>

255 <Step title="도구 발견 활성화">

256 `webhook.ts`의 `Server` 생성자에서 Claude Code가 서버가 도구를 제공함을 알 수 있도록 기능에 `tools: {}`를 추가합니다:

257 

258 ```ts theme={null}

259 capabilities: {

260 experimental: { 'claude/channel': {} },

261 tools: {}, // 도구 발견을 활성화합니다

262 },

263 ```

264 </Step>

265 

266 <Step title="회신 도구 등록">

267 다음을 `webhook.ts`에 추가합니다. `import`는 다른 가져오기와 함께 파일 맨 위로 이동합니다. 두 핸들러는 `Server` 생성자와 `mcp.connect()` 사이에 있습니다. 이것은 Claude가 `chat_id` 및 `text`로 호출할 수 있는 `reply` 도구를 등록합니다:

268 

269 ```ts theme={null}

270 // webhook.ts 맨 위에 이 가져오기를 추가합니다

271 import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js'

272 

273 // Claude는 시작 시 이를 쿼리하여 서버가 제공하는 도구를 발견합니다

274 mcp.setRequestHandler(ListToolsRequestSchema, async () => ({

275 tools: [{

276 name: 'reply',

277 description: 'Send a message back over this channel',

278 // inputSchema는 Claude에 전달할 인수를 알려줍니다

279 inputSchema: {

280 type: 'object',

281 properties: {

282 chat_id: { type: 'string', description: 'The conversation to reply in' },

283 text: { type: 'string', description: 'The message to send' },

284 },

285 required: ['chat_id', 'text'],

286 },

287 }],

288 }))

289 

290 // Claude가 도구를 호출하려고 할 때 이를 호출합니다

291 mcp.setRequestHandler(CallToolRequestSchema, async req => {

292 if (req.params.name === 'reply') {

293 const { chat_id, text } = req.params.arguments as { chat_id: string; text: string }

294 // send()는 아웃바운드입니다: 채팅 플랫폼에 POST하거나 로컬

295 // 아래 전체 예제에 표시된 SSE 브로드캐스트를 테스트합니다.

296 send(`Reply to ${chat_id}: ${text}`)

297 return { content: [{ type: 'text', text: 'sent' }] }

298 }

299 throw new Error(`unknown tool: ${req.params.name}`)

300 })

301 ```

302 </Step>

303 

304 <Step title="지침 업데이트">

305 `Server` 생성자의 `instructions` 문자열을 업데이트하여 Claude가 회신을 도구를 통해 다시 라우팅하는 방법을 알 수 있도록 합니다. 이 예제는 Claude에 인바운드 태그에서 `chat_id`를 전달하도록 알려줍니다:

306 

307 ```ts theme={null}

308 instructions: 'Messages arrive as <channel source="webhook" chat_id="...">. Reply with the reply tool, passing the chat_id from the tag.'

309 ```

310 </Step>

311</Steps>

312 

313다음은 양방향 지원이 있는 완전한 `webhook.ts`입니다. 아웃바운드 회신은 [Server-Sent Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) (SSE)를 사용하여 `GET /events`를 통해 스트리밍되므로 `curl -N localhost:8788/events`는 실시간으로 볼 수 있습니다. 인바운드 채팅은 `POST /`에 도착합니다:

314 

315```ts title="회신 도구가 있는 전체 webhook.ts' expandable theme={null}

316#!/usr/bin/env bun

317import { Server } from '@modelcontextprotocol/sdk/server/index.js'

318import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'

319import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js'

320 

321// --- 아웃바운드: /events의 모든 curl -N 리스너에 쓰기 ---

322// 실제 브리지는 대신 채팅 플랫폼에 POST합니다.

323const listeners = new Set<(chunk: string) => void>()

324function send(text: string) {

325 const chunk = text.split('\n').map(l => `data: ${l}\n`).join('') + '\n'

326 for (const emit of listeners) emit(chunk)

327}

328 

329const mcp = new Server(

330 { name: 'webhook', version: '0.0.1' },

331 {

332 capabilities: {

333 experimental: { 'claude/channel': {} },

334 tools: {},

335 },

336 instructions: 'Messages arrive as <channel source="webhook" chat_id="...">. Reply with the reply tool, passing the chat_id from the tag.',

337 },

338)

339 

340mcp.setRequestHandler(ListToolsRequestSchema, async () => ({

341 tools: [{

342 name: 'reply',

343 description: 'Send a message back over this channel',

344 inputSchema: {

345 type: 'object',

346 properties: {

347 chat_id: { type: 'string', description: 'The conversation to reply in' },

348 text: { type: 'string', description: 'The message to send' },

349 },

350 required: ['chat_id', 'text'],

351 },

352 }],

353}))

354 

355mcp.setRequestHandler(CallToolRequestSchema, async req => {

356 if (req.params.name === 'reply') {

357 const { chat_id, text } = req.params.arguments as { chat_id: string; text: string }

358 send(`Reply to ${chat_id}: ${text}`)

359 return { content: [{ type: 'text', text: 'sent' }] }

360 }

361 throw new Error(`unknown tool: ${req.params.name}`)

362})

363 

364await mcp.connect(new StdioServerTransport())

365 

366let nextId = 1

367Bun.serve({

368 port: 8788,

369 hostname: '127.0.0.1',

370 idleTimeout: 0, // 유휴 SSE 스트림을 닫지 마세요

371 async fetch(req) {

372 const url = new URL(req.url)

373 

374 // GET /events: curl -N가 Claude의 회신을 실시간으로 볼 수 있도록 SSE 스트림

375 if (req.method === 'GET' && url.pathname === '/events') {

376 const stream = new ReadableStream({

377 start(ctrl) {

378 ctrl.enqueue(': connected\n\n') // curl이 즉시 무언가를 표시하도록

379 const emit = (chunk: string) => ctrl.enqueue(chunk)

380 listeners.add(emit)

381 req.signal.addEventListener('abort', () => listeners.delete(emit))

382 },

383 })

384 return new Response(stream, {

385 headers: { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache' },

386 })

387 }

388 

389 // POST: 채널 이벤트로 Claude로 전달합니다

390 const body = await req.text()

391 const chat_id = String(nextId++)

392 await mcp.notification({

393 method: 'notifications/claude/channel',

394 params: {

395 content: body,

396 meta: { chat_id, path: url.pathname, method: req.method },

397 },

398 })

399 return new Response('ok')

400 },

401})

402```

403 

404[fakechat 서버](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/fakechat)는 파일 첨부 및 메시지 편집이 있는 더 완전한 예제를 보여줍니다.

405 

406## 인바운드 메시지 게이팅

407 

408게이트되지 않은 채널은 프롬프트 주입 벡터입니다. 엔드포인트에 도달할 수 있는 모든 사람이 Claude 앞에 텍스트를 넣을 수 있습니다. 채팅 플랫폼 또는 공개 엔드포인트를 수신하는 채널은 무언가를 내보내기 전에 실제 발신자 확인이 필요합니다.

409 

410`mcp.notification()`을 호출하기 전에 발신자를 허용 목록과 비교하여 확인합니다. 이 예제는 집합에 없는 발신자의 메시지를 삭제합니다:

411 

412```ts theme={null}

413const allowed = new Set(loadAllowlist()) // access.json 또는 동등한 것에서

414 

415// 메시지 핸들러 내에서 내보내기 전에:

416if (!allowed.has(message.from.id)) { // 발신자, 방이 아님

417 return // 자동으로 삭제

418}

419await mcp.notification({ ... })

420```

421 

422채팅 또는 방 ID가 아닌 발신자의 ID에 게이트합니다: 예제에서 `message.from.id`, `message.chat.id`가 아닙니다. 그룹 채팅에서 이들은 다르며 방에 게이트하면 허용 목록에 있는 그룹의 모든 사람이 세션에 메시지를 주입할 수 있습니다.

423 

424[Telegram](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/telegram) 및 [Discord](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/discord) 채널은 동일한 방식으로 발신자 허용 목록에 게이트합니다. 페어링으로 목록을 부트스트랩합니다: 사용자가 봇에 DM을 보내면 봇이 페어링 코드로 회신하고 사용자가 Claude Code 세션에서 승인하며 플랫폼 ID가 추가됩니다. 전체 페어링 흐름은 구현 중 하나를 참조하세요. [iMessage](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/imessage) 채널은 다른 접근 방식을 취합니다: 시작 시 메시지 데이터베이스에서 사용자의 자신의 주소를 감지하고 자동으로 통과시키며 다른 발신자는 핸들로 추가됩니다.

425 

426## 권한 프롬프트 릴레이

427 

428<Note>

429 권한 릴레이는 Claude Code v2.1.81 이상이 필요합니다. 이전 버전은 `claude/channel/permission` 기능을 무시합니다.

430</Note>

431 

432Claude가 승인이 필요한 도구를 호출할 때 로컬 터미널 대화가 열리고 세션이 대기합니다. 양방향 채널은 동일한 프롬프트를 병렬로 수신하고 다른 장치의 사용자에게 릴레이하도록 선택할 수 있습니다. 둘 다 활성 상태로 유지됩니다: 터미널 또는 휴대폰에서 답변할 수 있으며 Claude Code는 먼저 도착하는 답변을 적용하고 다른 답변을 닫습니다.

433 

434릴레이는 `Bash`, `Write` 및 `Edit`과 같은 도구 사용 승인을 다룹니다. 프로젝트 신뢰 및 MCP 서버 동의 대화는 릴레이되지 않습니다. 이들은 로컬 터미널에만 나타납니다.

435 

436### 릴레이 작동 방식

437 

438권한 프롬프트가 열리면 릴레이 루프에는 네 가지 단계가 있습니다:

439 

4401. Claude Code는 짧은 요청 ID를 생성하고 서버에 알립니다

4412. 서버는 프롬프트 및 ID를 채팅 앱으로 전달합니다

4423. 원격 사용자가 예 또는 아니오로 해당 ID로 회신합니다

4434. 인바운드 핸들러는 회신을 판정으로 구문 분석하고 Claude Code는 ID가 열린 요청과 일치하는 경우에만 적용합니다

444 

445로컬 터미널 대화는 이 모든 과정을 통해 열려 있습니다. 터미널의 누군가가 원격 판정이 도착하기 전에 답변하면 해당 답변이 대신 적용되고 보류 중인 원격 요청이 삭제됩니다.

446 

447<img src="https://mintlify.s3.us-west-1.amazonaws.com/claude-code/ko/images/channel-permission-relay.svg" alt="시퀀스 다이어그램: Claude Code가 permission_request 알림을 채널 서버로 보내고, 서버가 프롬프트를 채팅 앱으로 포맷하고 보내며, 인간이 판정으로 회신하고, 서버가 해당 회신을 Claude Code로 다시 권한 알림으로 구문 분석합니다" />

448 

449### 권한 요청 필드

450 

451Claude Code의 아웃바운드 알림은 `notifications/claude/channel/permission_request`입니다. [채널 알림](#notification-format)과 같이 전송은 표준 MCP이지만 메서드 및 스키마는 Claude Code 확장입니다. `params` 객체에는 서버가 아웃바운드 프롬프트로 포맷하는 네 개의 문자열 필드가 있습니다:

452 

453| 필드 | 설명 |

454| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

455| `request_id` | `a`-`z`에서 그려진 5개의 소문자이며 `l`을 제외하므로 휴대폰에 입력할 때 `1` 또는 `I`로 읽히지 않습니다. 아웃바운드 프롬프트에 포함하여 회신에서 에코할 수 있도록 합니다. Claude Code는 발급한 ID를 가진 판정만 수락합니다. 로컬 터미널 대화는 이 ID를 표시하지 않으므로 아웃바운드 핸들러가 이를 학습하는 유일한 방법입니다. |

456| `tool_name` | Claude가 사용하려는 도구의 이름(예: `Bash` 또는 `Write`). |

457| `description` | 이 특정 도구 호출이 수행하는 작업의 인간이 읽을 수 있는 요약이며 로컬 터미널 대화가 표시하는 동일한 텍스트입니다. Bash 호출의 경우 이는 Claude의 명령 설명이거나 주어진 것이 없으면 명령 자체입니다. |

458| `input_preview` | 도구의 인수를 JSON 문자열로 200자로 잘린 것입니다. Bash의 경우 명령입니다. Write의 경우 파일 경로 및 콘텐츠의 접두사입니다. 한 줄 메시지만 공간이 있는 경우 프롬프트에서 생략합니다. 서버가 표시할 내용을 결정합니다. |

459 

460서버가 다시 보내는 판정은 `notifications/claude/channel/permission`이며 두 필드가 있습니다: 위의 ID를 에코하는 `request_id` 및 `'allow'` 또는 `'deny'`로 설정된 `behavior`. Allow는 도구 호출을 진행하도록 합니다. Deny는 이를 거부하며 로컬 대화에서 아니오로 답변하는 것과 동일합니다. 어느 판정도 향후 호출에 영향을 주지 않습니다.

461 

462### 채팅 브리지에 릴레이 추가

463 

464양방향 채널에 권한 릴레이를 추가하려면 세 가지 구성 요소가 필요합니다:

465 

4661. `Server` 생성자의 `experimental` 기능 아래 `claude/channel/permission: {}` 항목이므로 Claude Code가 프롬프트를 전달하는 방법을 알 수 있습니다

4672. `notifications/claude/channel/permission_request`에 대한 알림 핸들러가 프롬프트를 포맷하고 플랫폼 API를 통해 전송합니다

4683. 인바운드 메시지 핸들러의 확인이 `yes <id>` 또는 `no <id>`를 인식하고 텍스트를 Claude로 전달하는 대신 `notifications/claude/channel/permission` 판정을 내보냅니다

469 

470채널이 [발신자를 인증](#gate-inbound-messages)하는 경우에만 기능을 선언합니다. 채널을 통해 회신할 수 있는 모든 사람이 세션에서 도구 사용을 승인하거나 거부할 수 있기 때문입니다.

471 

472[회신 도구 노출](#expose-a-reply-tool)에서 조립된 양방향 채팅 브리지와 같은 것에 이를 추가하려면:

473 

474<Steps>

475 <Step title="권한 기능 선언">

476 `Server` 생성자에서 `experimental` 아래 `claude/channel` 옆에 `claude/channel/permission: {}`를 추가합니다:

477 

478 ```ts theme={null}

479 capabilities: {

480 experimental: {

481 'claude/channel': {},

482 'claude/channel/permission': {}, // 권한 릴레이에 옵트인합니다

483 },

484 tools: {},

485 },

486 ```

487 </Step>

488 

489 <Step title="들어오는 요청 처리">

490 `Server` 생성자와 `mcp.connect()` 사이에 알림 핸들러를 등록합니다. Claude Code는 권한 대화가 열릴 때 [4개의 요청 필드](#permission-request-fields)로 호출합니다. 핸들러는 플랫폼에 대한 프롬프트를 포맷하고 ID로 회신하기 위한 지침을 포함합니다:

491 

492 ```ts theme={null}

493 import { z } from 'zod'

494 

495 // setNotificationHandler는 메서드 필드의 z.literal로 라우팅하므로

496 // 이 스키마는 검증자이자 디스패치 키입니다

497 const PermissionRequestSchema = z.object({

498 method: z.literal('notifications/claude/channel/permission_request'),

499 params: z.object({

500 request_id: z.string(), // 5개의 소문자, 프롬프트에 그대로 포함합니다

501 tool_name: z.string(), // 예: "Bash", "Write"

502 description: z.string(), // 이 호출의 인간이 읽을 수 있는 요약

503 input_preview: z.string(), // 도구 인수를 JSON으로, ~200자로 잘림

504 }),

505 })

506 

507 mcp.setNotificationHandler(PermissionRequestSchema, async ({ params }) => {

508 // send()는 아웃바운드입니다: 채팅 플랫폼에 POST하거나 로컬

509 // 아래 전체 예제에 표시된 SSE 브로드캐스트를 테스트합니다.

510 send(

511 `Claude wants to run ${params.tool_name}: ${params.description}\n\n` +

512 // 지침의 ID는 3단계에서 인바운드 핸들러가 구문 분석하는 것입니다

513 `Reply "yes ${params.request_id}" or "no ${params.request_id}"`,

514 )

515 })

516 ```

517 </Step>

518 

519 <Step title="인바운드 핸들러에서 판정 가로채기">

520 인바운드 핸들러는 플랫폼에서 메시지를 수신하는 루프 또는 콜백입니다: [발신자에 게이트](#gate-inbound-messages)하고 `notifications/claude/channel`을 내보내 채팅을 Claude로 전달하는 동일한 위치입니다. 채팅 전달 호출 전에 판정 형식을 인식하고 대신 권한 알림을 내보내는 확인을 추가합니다.

521 

522 정규식은 Claude Code가 생성하는 ID 형식과 일치합니다: 5개 문자, `l` 없음. `/i` 플래그는 휴대폰 자동 수정이 회신을 대문자로 만드는 것을 허용합니다. 다시 보내기 전에 캡처된 ID를 소문자로 만듭니다.

523 

524 ```ts theme={null}

525 // "y abcde", "yes abcde", "n abcde", "no abcde"와 일치합니다

526 // [a-km-z]는 Claude Code가 사용하는 ID 알파벳입니다 (소문자, 'l' 건너뜀)

527 // /i는 휴대폰 자동 수정을 허용합니다. 보내기 전에 캡처를 소문자로 만듭니다

528 const PERMISSION_REPLY_RE = /^\s*(y|yes|n|no)\s+([a-km-z]{5})\s*$/i

529 

530 async function onInbound(message: PlatformMessage) {

531 if (!allowed.has(message.from.id)) return // 먼저 발신자에 게이트합니다

532 

533 const m = PERMISSION_REPLY_RE.exec(message.text)

534 if (m) {

535 // m[1]은 판정 단어, m[2]는 요청 ID입니다

536 // 채팅 대신 Claude Code로 판정 알림을 내보냅니다

537 await mcp.notification({

538 method: 'notifications/claude/channel/permission',

539 params: {

540 request_id: m[2].toLowerCase(), // 자동 수정 대문자의 경우 정규화합니다

541 behavior: m[1].toLowerCase().startsWith('y') ? 'allow' : 'deny',

542 },

543 })

544 return // 판정으로 처리됨, 채팅으로도 전달하지 마세요

545 }

546 

547 // 판정 형식과 일치하지 않음: 일반 채팅 경로로 넘어갑니다

548 await mcp.notification({

549 method: 'notifications/claude/channel',

550 params: { content: message.text, meta: { chat_id: String(message.chat.id) } },

551 })

552 }

553 ```

554 </Step>

555</Steps>

556 

557Claude Code는 로컬 터미널 대화도 열어 두므로 어느 쪽이든 답변할 수 있으며 먼저 도착하는 답변이 적용됩니다. 예상된 형식과 정확히 일치하지 않는 원격 회신은 두 가지 방식 중 하나로 실패하며 두 경우 모두 대화는 열려 있습니다:

558 

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

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

561 

562### 전체 예제

563 

564아래의 조립된 `webhook.ts`는 이 페이지의 세 가지 확장을 모두 결합합니다: 회신 도구, 발신자 게이팅 및 권한 릴레이. 여기서 시작하는 경우 초기 연습에서 [프로젝트 설정 및 `.mcp.json` 항목](#example-build-a-webhook-receiver)도 필요합니다.

565 

566curl에서 양쪽 방향을 테스트 가능하게 하려면 HTTP 리스너는 두 경로를 제공합니다:

567 

568* **`GET /events`**: SSE 스트림을 열어 두고 각 아웃바운드 메시지를 `data:` 줄로 푸시하므로 `curl -N`은 Claude의 회신 및 권한 프롬프트가 실시간으로 도착하는 것을 볼 수 있습니다.

569* **`POST /`**: 인바운드 측, 이전과 동일한 핸들러이지만 이제 채팅 전달 분기 전에 판정 형식 확인이 삽입되었습니다.

570 

571```ts title="권한 릴레이가 있는 전체 webhook.ts' expandable theme={null}

572#!/usr/bin/env bun

573import { Server } from '@modelcontextprotocol/sdk/server/index.js'

574import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'

575import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js'

576import { z } from 'zod'

577 

578// --- 아웃바운드: /events의 모든 curl -N 리스너에 쓰기 ---

579// 실제 브리지는 대신 채팅 플랫폼에 POST합니다.

580const listeners = new Set<(chunk: string) => void>()

581function send(text: string) {

582 const chunk = text.split('\n').map(l => `data: ${l}\n`).join('') + '\n'

583 for (const emit of listeners) emit(chunk)

584}

585 

586// 발신자 허용 목록. 로컬 연습의 경우 단일 X-Sender를 신뢰합니다

587// 헤더 값 "dev"; 실제 브리지는 플랫폼의 사용자 ID를 확인합니다.

588const allowed = new Set(['dev'])

589 

590const mcp = new Server(

591 { name: 'webhook', version: '0.0.1' },

592 {

593 capabilities: {

594 experimental: {

595 'claude/channel': {},

596 'claude/channel/permission': {}, // 권한 릴레이에 옵트인합니다

597 },

598 tools: {},

599 },

600 instructions:

601 'Messages arrive as <channel source="webhook" chat_id="...">. ' +

602 'Reply with the reply tool, passing the chat_id from the tag.',

603 },

604)

605 

606// --- reply 도구: Claude가 이를 호출하여 메시지를 다시 보냅니다 ---

607mcp.setRequestHandler(ListToolsRequestSchema, async () => ({

608 tools: [{

609 name: 'reply',

610 description: 'Send a message back over this channel',

611 inputSchema: {

612 type: 'object',

613 properties: {

614 chat_id: { type: 'string', description: 'The conversation to reply in' },

615 text: { type: 'string', description: 'The message to send' },

616 },

617 required: ['chat_id', 'text'],

618 },

619 }],

620}))

621 

622mcp.setRequestHandler(CallToolRequestSchema, async req => {

623 if (req.params.name === 'reply') {

624 const { chat_id, text } = req.params.arguments as { chat_id: string; text: string }

625 send(`Reply to ${chat_id}: ${text}`)

626 return { content: [{ type: 'text', text: 'sent' }] }

627 }

628 throw new Error(`unknown tool: ${req.params.name}`)

629})

630 

631// --- 권한 릴레이: Claude Code (Claude가 아님)가 대화가 열릴 때 이를 호출합니다

632const PermissionRequestSchema = z.object({

633 method: z.literal('notifications/claude/channel/permission_request'),

634 params: z.object({

635 request_id: z.string(),

636 tool_name: z.string(),

637 description: z.string(),

638 input_preview: z.string(),

639 }),

640})

641 

642mcp.setNotificationHandler(PermissionRequestSchema, async ({ params }) => {

643 send(

644 `Claude wants to run ${params.tool_name}: ${params.description}\n\n` +

645 `Reply "yes ${params.request_id}" or "no ${params.request_id}"`,

646 )

647})

648 

649await mcp.connect(new StdioServerTransport())

650 

651// --- HTTP on :8788: GET /events는 아웃바운드를 스트리밍하고, POST는 인바운드를 라우팅합니다 ---

652const PERMISSION_REPLY_RE = /^\s*(y|yes|n|no)\s+([a-km-z]{5})\s*$/i

653let nextId = 1

654 

655Bun.serve({

656 port: 8788,

657 hostname: '127.0.0.1',

658 idleTimeout: 0, // 유휴 SSE 스트림을 닫지 마세요

659 async fetch(req) {

660 const url = new URL(req.url)

661 

662 // GET /events: curl -N이 회신 및 프롬프트를 실시간으로 볼 수 있도록 SSE 스트림

663 if (req.method === 'GET' && url.pathname === '/events') {

664 const stream = new ReadableStream({

665 start(ctrl) {

666 ctrl.enqueue(': connected\n\n') // curl이 즉시 무언가를 표시하도록

667 const emit = (chunk: string) => ctrl.enqueue(chunk)

668 listeners.add(emit)

669 req.signal.addEventListener('abort', () => listeners.delete(emit))

670 },

671 })

672 return new Response(stream, {

673 headers: { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache' },

674 })

675 }

676 

677 // 다른 모든 것은 인바운드입니다: 먼저 발신자에 게이트합니다

678 const body = await req.text()

679 const sender = req.headers.get('X-Sender') ?? ''

680 if (!allowed.has(sender)) return new Response('forbidden', { status: 403 })

681 

682 // 채팅으로 취급하기 전에 판정 형식을 확인합니다

683 const m = PERMISSION_REPLY_RE.exec(body)

684 if (m) {

685 await mcp.notification({

686 method: 'notifications/claude/channel/permission',

687 params: {

688 request_id: m[2].toLowerCase(),

689 behavior: m[1].toLowerCase().startsWith('y') ? 'allow' : 'deny',

690 },

691 })

692 return new Response('verdict recorded')

693 }

694 

695 // 일반 채팅: 채널 이벤트로 Claude로 전달합니다

696 const chat_id = String(nextId++)

697 await mcp.notification({

698 method: 'notifications/claude/channel',

699 params: { content: body, meta: { chat_id, path: url.pathname } },

700 })

701 return new Response('ok')

702 },

703})

704```

705 

7063개의 터미널에서 판정 경로를 테스트합니다. 첫 번째는 Claude Code 세션이며 [개발 플래그](#test-during-the-research-preview)로 시작되어 `webhook.ts`를 생성합니다:

707 

708```bash theme={null}

709claude --dangerously-load-development-channels server:webhook

710```

711 

712두 번째에서 아웃바운드 측을 스트리밍하여 Claude의 회신 및 권한 프롬프트가 실시간으로 도착하는 것을 볼 수 있습니다:

713 

714```bash theme={null}

715curl -N localhost:8788/events

716```

717 

718세 번째에서 Claude가 명령을 실행하려고 하는 메시지를 보냅니다:

719 

720```bash theme={null}

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

722```

723 

724로컬 권한 대화가 Claude Code 터미널에서 열립니다. 잠시 후 프롬프트가 `/events` 스트림에 나타나며 5자 ID를 포함합니다. 원격 측에서 승인합니다:

725 

726```bash theme={null}

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

728```

729 

730로컬 대화가 닫히고 도구가 실행됩니다. Claude의 회신은 `reply` 도구를 통해 돌아오고 스트림에도 도착합니다.

731 

732이 파일의 3개의 채널 특정 부분:

733 

734* **`Server` 생성자의 기능**: `claude/channel`은 알림 리스너를 등록하고, `claude/channel/permission`은 권한 릴레이에 옵트인하며, `tools`는 Claude가 회신 도구를 발견하도록 합니다.

735* **아웃바운드 경로**: `reply` 도구 핸들러는 Claude가 대화형 응답을 위해 호출하는 것입니다. `PermissionRequestSchema` 알림 핸들러는 권한 대화가 열릴 때 Claude Code가 호출하는 것입니다. 둘 다 `send()`를 호출하여 `/events`를 통해 브로드캐스트하지만 시스템의 다른 부분에 의해 트리거됩니다.

736* **HTTP 핸들러**: `GET /events`는 SSE 스트림을 열어 두므로 curl이 아웃바운드를 실시간으로 볼 수 있습니다. `POST`는 인바운드이며 `X-Sender` 헤더에 게이트됩니다. `yes <id>` 또는 `no <id>` 본문은 Claude Code로 판정 알림으로 이동하며 Claude에 도달하지 않습니다. 다른 모든 것은 채널 이벤트로 Claude로 전달됩니다.

737 

738## 플러그인으로 패키징

739 

740채널을 설치 가능하고 공유 가능하게 하려면 [플러그인](/ko/plugins)으로 래핑하고 [마켓플레이스](/ko/plugin-marketplaces)에 게시합니다. 사용자는 `/plugin install`로 설치한 다음 `--channels plugin:<name>@<marketplace>`로 세션별로 활성화합니다.

741 

742자신의 마켓플레이스에 게시된 채널은 [승인된 허용 목록](/ko/channels#supported-channels)에 없으므로 여전히 `--dangerously-load-development-channels`를 실행해야 합니다. 추가되려면 [공식 마켓플레이스에 제출](/ko/plugins#submit-your-plugin-to-the-official-marketplace)합니다. 채널 플러그인은 승인되기 전에 보안 검토를 거칩니다. 팀 및 엔터프라이즈 계획에서 관리자는 대신 조직의 자신의 [`allowedChannelPlugins`](/ko/channels#restrict-which-channel-plugins-can-run) 목록에 플러그인을 포함할 수 있으며, 이는 기본 Anthropic 허용 목록을 대체합니다.

743 

744## 참고 항목

745 

746* [채널](/ko/channels)을 설치하고 Telegram, Discord, iMessage 또는 fakechat 데모를 사용하며 팀 또는 엔터프라이즈 조직에 대해 채널을 활성화합니다

747* [작동하는 채널 구현](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins)은 페어링 흐름, 회신 도구 및 파일 첨부가 있는 완전한 서버 코드입니다

748* [MCP](/ko/mcp)는 채널 서버가 구현하는 기본 프로토콜입니다

749* [플러그인](/ko/plugins)을 사용하여 채널을 패키징하면 사용자가 `/plugin install`로 설치할 수 있습니다

checkpointing.md +89 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Checkpointing

6 

7> Claude의 편집 및 대화를 추적, 되돌리기 및 요약하여 세션 상태를 관리합니다.

8 

9Claude Code는 작업하면서 Claude의 파일 편집을 자동으로 추적하므로 변경 사항을 빠르게 실행 취소하고 문제가 발생한 경우 이전 상태로 되돌릴 수 있습니다.

10 

11## Checkpointing의 작동 방식

12 

13Claude와 함께 작업할 때 checkpointing은 각 편집 전에 코드의 상태를 자동으로 캡처합니다. 이 안전장치를 통해 언제든지 이전 코드 상태로 돌아갈 수 있다는 확신을 가지고 야심 찬 대규모 작업을 수행할 수 있습니다.

14 

15### 자동 추적

16 

17Claude Code는 파일 편집 도구로 수행된 모든 변경 사항을 추적합니다:

18 

19* 모든 사용자 프롬프트는 새로운 checkpoint를 생성합니다

20* Checkpoint는 세션 전체에 걸쳐 유지되므로 재개된 대화에서 액세스할 수 있습니다

21* 30일 후 세션과 함께 자동으로 정리됩니다(구성 가능)

22 

23### 되돌리기 및 요약

24 

25`Esc` 두 번(`Esc` + `Esc`)을 누르거나 `/rewind` 명령을 사용하여 rewind 메뉴를 엽니다. 스크롤 가능한 목록에는 세션의 각 프롬프트가 표시됩니다. 작업할 지점을 선택한 다음 작업을 선택합니다:

26 

27* **코드 및 대화 복원**: 코드와 대화를 해당 지점으로 되돌립니다

28* **대화 복원**: 현재 코드를 유지하면서 해당 메시지로 되돌립니다

29* **코드 복원**: 대화를 유지하면서 파일 변경 사항을 되돌립니다

30* **여기서부터 요약**: 이 지점부터 이후의 대화를 요약으로 압축하여 context window 공간을 확보합니다

31* **취소**: 변경 사항을 적용하지 않고 메시지 목록으로 돌아갑니다

32 

33대화를 복원하거나 요약한 후 선택한 메시지의 원본 프롬프트가 입력 필드에 복원되므로 다시 보내거나 편집할 수 있습니다.

34 

35#### 복원 vs. 요약

36 

37세 가지 복원 옵션은 상태를 되돌립니다: 코드 변경 사항, 대화 기록 또는 둘 다를 실행 취소합니다. "여기서부터 요약"은 다르게 작동합니다:

38 

39* 선택한 메시지 이전의 메시지는 그대로 유지됩니다

40* 선택한 메시지와 그 이후의 모든 메시지는 컴팩트한 AI 생성 요약으로 대체됩니다

41* 디스크의 파일은 변경되지 않습니다

42* 원본 메시지는 세션 기록에 보존되므로 Claude가 필요한 경우 세부 정보를 참조할 수 있습니다

43 

44이는 `/compact`와 유사하지만 대상이 지정됩니다: 전체 대화를 요약하는 대신 초기 context를 완전한 세부 정보로 유지하고 공간을 차지하는 부분만 압축합니다. 요약이 초점을 맞출 내용을 안내하기 위해 선택적 지침을 입력할 수 있습니다.

45 

46<Note>

47 Summarize는 동일한 세션에 유지되고 context를 압축합니다. 원본 세션을 그대로 유지하면서 다른 접근 방식을 시도하고 싶다면 [fork](/ko/how-claude-code-works#resume-or-fork-sessions) 대신 사용하세요(`claude --continue --fork-session`).

48</Note>

49 

50## 일반적인 사용 사례

51 

52Checkpoint는 다음과 같은 경우에 특히 유용합니다:

53 

54* **대안 탐색**: 시작점을 잃지 않으면서 다양한 구현 접근 방식을 시도합니다

55* **실수 복구**: 버그를 도입하거나 기능을 손상시킨 변경 사항을 빠르게 실행 취소합니다

56* **기능 반복**: 작동하는 상태로 되돌릴 수 있다는 확신을 가지고 변형을 실험합니다

57* **Context 공간 확보**: 초기 지침을 그대로 유지하면서 중간 지점부터 시작하여 자세한 디버깅 세션을 요약합니다

58 

59## 제한 사항

60 

61### Bash 명령 변경 사항이 추적되지 않음

62 

63Checkpointing은 bash 명령으로 수정된 파일을 추적하지 않습니다. 예를 들어 Claude Code가 다음을 실행하는 경우:

64 

65```bash theme={null}

66rm file.txt

67mv old.txt new.txt

68cp source.txt dest.txt

69```

70 

71이러한 파일 수정 사항은 rewind를 통해 실행 취소할 수 없습니다. Claude의 파일 편집 도구를 통해 직접 수행된 파일 편집만 추적됩니다.

72 

73### 외부 변경 사항이 추적되지 않음

74 

75Checkpointing은 현재 세션 내에서 편집된 파일만 추적합니다. Claude Code 외부에서 수동으로 수행한 파일 변경 사항과 다른 동시 세션의 편집은 현재 세션과 동일한 파일을 수정하는 경우를 제외하고는 일반적으로 캡처되지 않습니다.

76 

77### 버전 관리의 대체가 아님

78 

79Checkpoint는 빠른 세션 수준의 복구를 위해 설계되었습니다. 영구적인 버전 기록 및 협업을 위해:

80 

81* 커밋, 분기 및 장기 기록을 위해 버전 관리(예: Git)를 계속 사용합니다

82* Checkpoint는 적절한 버전 관리를 보완하지만 대체하지 않습니다

83* Checkpoint를 "로컬 실행 취소"로, Git을 "영구 기록"으로 생각하세요

84 

85## 참고 항목

86 

87* [Interactive mode](/ko/interactive-mode) - 키보드 단축키 및 세션 제어

88* [Built-in commands](/ko/commands) - `/rewind`를 사용하여 checkpoint에 액세스

89* [CLI reference](/ko/cli-reference) - 명령줄 옵션

chrome.md +232 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Chrome에서 Claude Code 사용하기 (베타)

6 

7> Claude Code를 Chrome 브라우저에 연결하여 웹 앱을 테스트하고, 콘솔 로그로 디버깅하며, 양식 작성을 자동화하고, 웹 페이지에서 데이터를 추출합니다.

8 

9Claude Code는 [Claude in Chrome 브라우저 확장 프로그램](https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn)과 통합되어 CLI 또는 [VS Code 확장 프로그램](/ko/vs-code#automate-browser-tasks-with-chrome)에서 브라우저 자동화 기능을 제공합니다. 코드를 작성한 후 컨텍스트를 전환하지 않고 브라우저에서 테스트하고 디버깅합니다.

10 

11Claude는 브라우저 작업을 위해 새 탭을 열고 브라우저의 로그인 상태를 공유하므로 이미 로그인한 모든 사이트에 액세스할 수 있습니다. 브라우저 작업은 실시간으로 표시되는 Chrome 창에서 실행됩니다. Claude가 로그인 페이지나 CAPTCHA를 만나면 일시 중지하고 수동으로 처리하도록 요청합니다.

12 

13<Note>

14 Chrome 통합은 베타 버전이며 현재 Google Chrome 및 Microsoft Edge에서 작동합니다. Brave, Arc 또는 기타 Chromium 기반 브라우저에서는 아직 지원되지 않습니다. WSL(Windows Subsystem for Linux)도 지원되지 않습니다.

15</Note>

16 

17## 기능

18 

19Chrome이 연결되면 단일 워크플로우에서 브라우저 작업과 코딩 작업을 연결할 수 있습니다.

20 

21* **라이브 디버깅**: 콘솔 오류 및 DOM 상태를 직접 읽은 후 이를 유발한 코드를 수정합니다.

22* **디자인 검증**: Figma 목업에서 UI를 빌드한 후 브라우저에서 열어 일치하는지 확인합니다.

23* **웹 앱 테스트**: 양식 유효성 검사를 테스트하고, 시각적 회귀를 확인하거나, 사용자 흐름을 검증합니다.

24* **인증된 웹 앱**: API 커넥터 없이 Google Docs, Gmail, Notion 또는 로그인한 모든 앱과 상호작용합니다.

25* **데이터 추출**: 웹 페이지에서 구조화된 정보를 가져와 로컬에 저장합니다.

26* **작업 자동화**: 데이터 입력, 양식 작성 또는 다중 사이트 워크플로우와 같은 반복적인 브라우저 작업을 자동화합니다.

27* **세션 기록**: 브라우저 상호작용을 GIF로 기록하여 발생한 상황을 문서화하거나 공유합니다.

28 

29## 필수 요구사항

30 

31Chrome에서 Claude Code를 사용하기 전에 다음이 필요합니다.

32 

33* [Google Chrome](https://www.google.com/chrome/) 또는 [Microsoft Edge](https://www.microsoft.com/edge) 브라우저

34* [Claude in Chrome 확장 프로그램](https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn) 버전 1.0.36 이상(Chrome 웹 스토어에서 두 브라우저 모두에 사용 가능)

35* [Claude Code](/ko/quickstart#step-1-install-claude-code) 버전 2.0.73 이상

36* 직접 Anthropic 플랜 (Pro, Max, Team 또는 Enterprise)

37 

38<Note>

39 Chrome 통합은 Amazon Bedrock, Google Cloud Vertex AI 또는 Microsoft Foundry와 같은 타사 제공자를 통해 사용할 수 없습니다. 타사 제공자를 통해서만 Claude에 액세스하는 경우 이 기능을 사용하려면 별도의 claude.ai 계정이 필요합니다.

40</Note>

41 

42## CLI에서 시작하기

43 

44<Steps>

45 <Step title="Chrome으로 Claude Code 시작">

46 `--chrome` 플래그로 Claude Code를 시작합니다.

47 

48 ```bash theme={null}

49 claude --chrome

50 ```

51 

52 기존 세션 내에서 `/chrome`을 실행하여 Chrome을 활성화할 수도 있습니다.

53 </Step>

54 

55 <Step title="Claude에게 브라우저 사용을 요청">

56 이 예제는 페이지로 이동하고, 상호작용하며, 터미널이나 편집기에서 모두 발견한 내용을 보고합니다.

57 

58 ```text theme={null}

59 code.claude.com/docs로 이동하여 검색 상자를 클릭하고,

60 "hooks"를 입력한 후 나타나는 결과를 알려주세요.

61 ```

62 </Step>

63</Steps>

64 

65언제든지 `/chrome`을 실행하여 연결 상태를 확인하고, 권한을 관리하거나, 확장 프로그램을 다시 연결합니다.

66 

67VS Code의 경우 [VS Code에서 브라우저 자동화](/ko/vs-code#automate-browser-tasks-with-chrome)를 참조하세요.

68 

69### 기본적으로 Chrome 활성화

70 

71각 세션마다 `--chrome`을 전달하지 않으려면 `/chrome`을 실행하고 "기본적으로 활성화"를 선택합니다.

72 

73[VS Code 확장 프로그램](/ko/vs-code#automate-browser-tasks-with-chrome)에서는 Chrome 확장 프로그램이 설치되어 있으면 Chrome을 사용할 수 있습니다. 추가 플래그가 필요하지 않습니다.

74 

75<Note>

76 CLI에서 기본적으로 Chrome을 활성화하면 브라우저 도구가 항상 로드되므로 컨텍스트 사용량이 증가합니다. 컨텍스트 소비가 증가하는 것을 발견하면 이 설정을 비활성화하고 필요할 때만 `--chrome`을 사용합니다.

77</Note>

78 

79### 사이트 권한 관리

80 

81사이트 수준 권한은 Chrome 확장 프로그램에서 상속됩니다. Chrome 확장 프로그램 설정에서 권한을 관리하여 Claude가 탐색하고, 클릭하고, 입력할 수 있는 사이트를 제어합니다.

82 

83## 예제 워크플로우

84 

85이 예제들은 브라우저 작업과 코딩 작업을 결합하는 일반적인 방법을 보여줍니다. `/mcp`를 실행하고 `claude-in-chrome`을 선택하여 사용 가능한 브라우저 도구의 전체 목록을 확인합니다.

86 

87### 로컬 웹 애플리케이션 테스트

88 

89웹 앱을 개발할 때 Claude에게 변경 사항이 올바르게 작동하는지 확인하도록 요청합니다.

90 

91```text theme={null}

92방금 로그인 양식 유효성 검사를 업데이트했습니다. localhost:3000을 열고,

93잘못된 데이터로 양식을 제출해 보고, 오류 메시지가 올바르게

94나타나는지 확인해 주시겠어요?

95```

96 

97Claude는 로컬 서버로 이동하여 양식과 상호작용하고 관찰한 내용을 보고합니다.

98 

99### 콘솔 로그로 디버깅

100 

101Claude는 콘솔 출력을 읽어 문제 진단을 도울 수 있습니다. 로그가 상세할 수 있으므로 모든 콘솔 출력을 요청하는 대신 Claude에게 찾을 패턴을 알려줍니다.

102 

103```text theme={null}

104대시보드 페이지를 열고 페이지가 로드될 때 콘솔에서 오류를

105확인해 주세요.

106```

107 

108Claude는 콘솔 메시지를 읽고 특정 패턴이나 오류 유형을 필터링할 수 있습니다.

109 

110### 양식 작성 자동화

111 

112반복적인 데이터 입력 작업을 가속화합니다.

113 

114```text theme={null}

115contacts.csv에 고객 연락처 스프레드시트가 있습니다. 각 행에 대해

116crm.example.com의 CRM으로 이동하여 "연락처 추가"를 클릭하고

117이름, 이메일 및 전화 필드를 작성해 주세요.

118```

119 

120Claude는 로컬 파일을 읽고, 웹 인터페이스를 탐색하며, 각 레코드에 대한 데이터를 입력합니다.

121 

122### Google Docs에서 콘텐츠 작성

123 

124API 설정 없이 Claude를 사용하여 문서에 직접 작성합니다.

125 

126```text theme={null}

127최근 커밋을 기반으로 프로젝트 업데이트를 작성하고

128docs.google.com/document/d/abc123의 Google Doc에 추가해 주세요.

129```

130 

131Claude는 문서를 열고, 편집기를 클릭한 후 콘텐츠를 입력합니다. 이는 로그인한 모든 웹 앱에서 작동합니다. Gmail, Notion, Sheets 등입니다.

132 

133### 웹 페이지에서 데이터 추출

134 

135웹사이트에서 구조화된 정보를 가져옵니다.

136 

137```text theme={null}

138제품 목록 페이지로 이동하여 각 항목의 이름, 가격 및 가용성을

139추출합니다. 결과를 CSV 파일로 저장해 주세요.

140```

141 

142Claude는 페이지로 이동하여 콘텐츠를 읽고 데이터를 구조화된 형식으로 컴파일합니다.

143 

144### 다중 사이트 워크플로우 실행

145 

146여러 웹사이트에서 작업을 조정합니다.

147 

148```text theme={null}

149내 캘린더에서 내일의 회의를 확인한 후, 외부 참석자가 있는 각

150회의에 대해 해당 회사 웹사이트를 찾아보고 그들이 하는 일에 대한

151메모를 추가해 주세요.

152```

153 

154Claude는 탭 전체에서 작업하여 정보를 수집하고 워크플로우를 완료합니다.

155 

156### 데모 GIF 기록

157 

158브라우저 상호작용의 공유 가능한 기록을 만듭니다.

159 

160```text theme={null}

161장바구니에 항목을 추가하는 것부터 확인 페이지까지 체크아웃

162흐름을 완료하는 방법을 보여주는 GIF를 기록해 주세요.

163```

164 

165Claude는 상호작용 시퀀스를 기록하고 GIF 파일로 저장합니다.

166 

167## 문제 해결

168 

169### 확장 프로그램이 감지되지 않음

170 

171Claude Code에 "Chrome 확장 프로그램이 감지되지 않음"이 표시되는 경우:

172 

1731. Chrome 확장 프로그램이 설치되어 있고 `chrome://extensions`에서 활성화되어 있는지 확인합니다.

1742. `claude --version`을 실행하여 Claude Code가 최신 버전인지 확인합니다.

1753. Chrome이 실행 중인지 확인합니다.

1764. `/chrome`을 실행하고 "확장 프로그램 다시 연결"을 선택하여 연결을 다시 설정합니다.

1775. 문제가 지속되면 Claude Code와 Chrome을 모두 다시 시작합니다.

178 

179Chrome 통합을 처음 활성화할 때 Claude Code는 네이티브 메시징 호스트 구성 파일을 설치합니다. Chrome은 시작 시 이 파일을 읽으므로 첫 번째 시도에서 확장 프로그램이 감지되지 않으면 Chrome을 다시 시작하여 새 구성을 선택합니다.

180 

181연결이 계속 실패하면 다음 위치에 호스트 구성 파일이 있는지 확인합니다.

182 

183Chrome의 경우:

184 

185* **macOS**: `~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json`

186* **Linux**: `~/.config/google-chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json`

187* **Windows**: Windows 레지스트리에서 `HKCU\Software\Google\Chrome\NativeMessagingHosts\`를 확인합니다.

188 

189Edge의 경우:

190 

191* **macOS**: `~/Library/Application Support/Microsoft Edge/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json`

192* **Linux**: `~/.config/microsoft-edge/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json`

193* **Windows**: Windows 레지스트리에서 `HKCU\Software\Microsoft\Edge\NativeMessagingHosts\`를 확인합니다.

194 

195### 브라우저가 응답하지 않음

196 

197Claude의 브라우저 명령이 작동하지 않는 경우:

198 

1991. 모달 대화 상자(경고, 확인, 프롬프트)가 페이지를 차단하고 있는지 확인합니다. JavaScript 대화 상자는 브라우저 이벤트를 차단하고 Claude가 명령을 수신하지 못하게 합니다. 대화 상자를 수동으로 닫은 후 Claude에게 계속하도록 알립니다.

2002. Claude에게 새 탭을 만들고 다시 시도하도록 요청합니다.

2013. `chrome://extensions`에서 Chrome 확장 프로그램을 비활성화했다가 다시 활성화하여 다시 시작합니다.

202 

203### 긴 세션 중 연결 끊김

204 

205Chrome 확장 프로그램의 서비스 워커는 확장 세션 중에 유휴 상태가 될 수 있으며, 이는 연결을 끊습니다. 비활성 기간 후 브라우저 도구가 작동하지 않으면 `/chrome`을 실행하고 "확장 프로그램 다시 연결"을 선택합니다.

206 

207### Windows 관련 문제

208 

209Windows에서 다음을 만날 수 있습니다.

210 

211* **명명된 파이프 충돌 (EADDRINUSE)**: 다른 프로세스가 동일한 명명된 파이프를 사용 중인 경우 Claude Code를 다시 시작합니다. Chrome을 사용 중일 수 있는 다른 Claude Code 세션을 모두 닫습니다.

212* **네이티브 메시징 호스트 오류**: 시작 시 네이티브 메시징 호스트가 충돌하면 Claude Code를 다시 설치하여 호스트 구성을 다시 생성해 봅니다.

213 

214### 일반적인 오류 메시지

215 

216가장 자주 발생하는 오류와 해결 방법은 다음과 같습니다.

217 

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

219| ----------------------- | ------------------------------- | ------------------------------------------------------- |

220| "브라우저 확장 프로그램이 연결되지 않음" | 네이티브 메시징 호스트가 확장 프로그램에 도달할 수 없음 | Chrome과 Claude Code를 다시 시작한 후 `/chrome`을 실행하여 다시 연결합니다. |

221| "확장 프로그램이 감지되지 않음" | Chrome 확장 프로그램이 설치되지 않았거나 비활성화됨 | `chrome://extensions`에서 확장 프로그램을 설치하거나 활성화합니다. |

222| "사용 가능한 탭 없음" | Claude가 탭이 준비되기 전에 작동하려고 시도함 | Claude에게 새 탭을 만들고 다시 시도하도록 요청합니다. |

223| "수신 끝이 존재하지 않음" | 확장 프로그램 서비스 워커가 유휴 상태가 됨 | `/chrome`을 실행하고 "확장 프로그램 다시 연결"을 선택합니다. |

224 

225## 참고 항목

226 

227* [컴퓨터 사용](/ko/computer-use): 브라우저에서 작업을 수행할 수 없을 때 네이티브 macOS 앱을 제어합니다.

228* [VS Code에서 Claude Code 사용](/ko/vs-code#automate-browser-tasks-with-chrome): VS Code 확장 프로그램의 브라우저 자동화

229* [CLI 참조](/ko/cli-reference): `--chrome`을 포함한 명령줄 플래그

230* [일반적인 워크플로우](/ko/common-workflows): Claude Code를 사용하는 더 많은 방법

231* [데이터 및 개인정보](/ko/data-usage): Claude Code가 데이터를 처리하는 방법

232* [Chrome에서 Claude 시작하기](https://support.claude.com/en/articles/12012173-getting-started-with-claude-in-chrome): 바로 가기, 일정 예약 및 권한을 포함한 Chrome 확장 프로그램의 전체 문서

claude-code-on-the-web.md +773 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 웹에서 Claude Code 사용하기

6 

7> 클라우드 환경, 설정 스크립트, 네트워크 액세스 및 Docker를 Anthropic의 샌드박스에서 구성합니다. `--remote` 및 `--teleport`를 사용하여 웹과 터미널 간에 세션을 이동합니다.

8 

9<Note>

10 웹에서 Claude Code는 Pro, Max 및 Team 사용자, 그리고 프리미엄 시트 또는 Chat + Claude Code 시트가 있는 Enterprise 사용자를 위한 연구 미리보기 상태입니다.

11</Note>

12 

13웹에서 Claude Code는 [claude.ai/code](https://claude.ai/code)의 Anthropic 관리 클라우드 인프라에서 작업을 실행합니다. 세션은 브라우저를 닫아도 유지되며, Claude 모바일 앱에서 모니터링할 수 있습니다.

14 

15<Tip>

16 웹에서 Claude Code를 처음 사용하시나요? [시작하기](/ko/web-quickstart)에서 GitHub 계정을 연결하고 첫 번째 작업을 제출하세요.

17</Tip>

18 

19이 페이지에서 다루는 내용:

20 

21* [GitHub 인증 옵션](#github-authentication-options): GitHub를 연결하는 두 가지 방법

22* [클라우드 환경](#the-cloud-environment): 어떤 구성이 이월되는지, 어떤 도구가 설치되어 있는지, 환경을 구성하는 방법

23* [설정 스크립트](#setup-scripts) 및 종속성 관리

24* [네트워크 액세스](#network-access): 수준, 프록시 및 기본 허용 목록

25* [`--remote` 및 `--teleport`를 사용하여 웹과 터미널 간에 작업 이동](#move-tasks-between-web-and-terminal)

26* [세션 작업](#work-with-sessions): 검토, 공유, 보관, 삭제

27* [Pull request 자동 수정](#auto-fix-pull-requests): CI 실패 및 검토 주석에 자동으로 응답

28* [보안 및 격리](#security-and-isolation): 세션이 어떻게 격리되는지

29* [제한 사항](#limitations): 속도 제한 및 플랫폼 제한

30 

31## GitHub 인증 옵션

32 

33클라우드 세션은 코드를 복제하고 분기를 푸시하기 위해 GitHub 저장소에 액세스해야 합니다. 두 가지 방법으로 액세스 권한을 부여할 수 있습니다:

34 

35| 방법 | 작동 방식 | 최적 대상 |

36| :--------------- | :----------------------------------------------------------------------------------------- | :------------------- |

37| **GitHub App** | [웹 온보딩](/ko/web-quickstart) 중에 특정 저장소에 Claude GitHub App을 설치합니다. 액세스는 저장소별로 범위가 지정됩니다. | 저장소별 명시적 인증을 원하는 팀 |

38| **`/web-setup`** | 터미널에서 `/web-setup`을 실행하여 로컬 `gh` CLI 토큰을 Claude 계정과 동기화합니다. 액세스는 `gh` 토큰이 볼 수 있는 것과 일치합니다. | 이미 `gh`를 사용하는 개별 개발자 |

39 

40두 방법 모두 작동합니다. [`/schedule`](/ko/routines)은 두 형태의 액세스를 확인하고 구성되지 않은 경우 `/web-setup`을 실행하라는 메시지를 표시합니다. `/web-setup` 안내는 [터미널에서 연결](/ko/web-quickstart#connect-from-your-terminal)을 참조하세요.

41 

42GitHub App은 PR 웹훅을 수신하기 위해 App을 사용하는 [자동 수정](#auto-fix-pull-requests)에 필요합니다. `/web-setup`으로 연결했다가 나중에 자동 수정을 원하면 해당 저장소에 App을 설치하세요.

43 

44Team 및 Enterprise 관리자는 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code)의 Quick web setup 토글로 `/web-setup`을 비활성화할 수 있습니다.

45 

46<Note>

47 [Zero Data Retention](/ko/zero-data-retention)이 활성화된 조직은 `/web-setup` 또는 기타 클라우드 세션 기능을 사용할 수 없습니다.

48</Note>

49 

50## 클라우드 환경

51 

52각 세션은 저장소가 복제된 새로운 Anthropic 관리 VM에서 실행됩니다. 이 섹션에서는 세션이 시작될 때 사용 가능한 것과 이를 사용자 정의하는 방법을 다룹니다.

53 

54### 클라우드 세션에서 사용 가능한 것

55 

56클라우드 세션은 저장소의 새로운 복제본에서 시작됩니다. 저장소에 커밋된 모든 것이 사용 가능합니다. 자신의 머신에만 설치하거나 구성한 것은 사용할 수 없습니다.

57 

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

59| :------------------------------------------------------------- | :-------------- | :-------------------------------------------------------------------------------------------- |

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

61| 저장소의 `.claude/settings.json` hooks | 예 | 복제본의 일부 |

62| 저장소의 `.mcp.json` MCP 서버 | 예 | 복제본의 일부 |

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

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

65| `.claude/settings.json`에 선언된 플러그인 | 예 | 선언한 [마켓플레이스](/ko/plugin-marketplaces)에서 세션 시작 시 설치됩니다. 마켓플레이스 소스에 도달하려면 네트워크 액세스가 필요합니다 |

66| 사용자 `~/.claude/CLAUDE.md` | 아니오 | 저장소가 아닌 머신에 있습니다 |

67| 사용자 설정에서만 활성화된 플러그인 | 아니오 | 사용자 범위 `enabledPlugins`는 `~/.claude/settings.json`에 있습니다. 저장소의 `.claude/settings.json`에 선언하세요 |

68| `claude mcp add`로 추가한 MCP 서버 | 아니오 | 저장소가 아닌 로컬 사용자 구성에 씁니다. [`.mcp.json`](/ko/mcp#project-scope)에 서버를 선언하세요 |

69| 정적 API 토큰 및 자격 증명 | 아니오 | 아직 전용 비밀 저장소가 없습니다. 아래를 참조하세요 |

70| AWS SSO와 같은 대화형 인증 | 아니오 | 지원되지 않습니다. SSO는 클라우드 세션에서 실행할 수 없는 브라우저 기반 로그인이 필요합니다 |

71 

72클라우드 세션에서 구성을 사용 가능하게 하려면 저장소에 커밋하세요. 아직 전용 비밀 저장소가 없습니다. 환경 변수와 설정 스크립트 모두 환경 구성에 저장되며, 해당 환경을 편집할 수 있는 모든 사람이 볼 수 있습니다. 클라우드 세션에서 비밀이 필요하면 이러한 가시성을 염두에 두고 환경 변수로 추가하세요.

73 

74### 설치된 도구

75 

76클라우드 세션에는 일반적인 언어 런타임, 빌드 도구 및 데이터베이스가 사전 설치되어 있습니다. 아래 표는 카테고리별로 포함된 것을 요약합니다.

77 

78| 카테고리 | 포함됨 |

79| :---------- | :--------------------------------------------------------------------------- |

80| **Python** | pip, poetry, uv, black, mypy, pytest, ruff가 포함된 Python 3.x |

81| **Node.js** | nvm을 통한 20, 21, 22, npm, yarn, pnpm, bun¹, eslint, prettier, chromedriver 포함 |

82| **Ruby** | gem, bundler, rbenv가 포함된 3.1, 3.2, 3.3 |

83| **PHP** | Composer가 포함된 8.4 |

84| **Java** | Maven 및 Gradle이 포함된 OpenJDK 21 |

85| **Go** | 모듈 지원이 포함된 최신 안정 버전 |

86| **Rust** | rustc 및 cargo |

87| **C/C++** | GCC, Clang, cmake, ninja, conan |

88| **Docker** | docker, dockerd, docker compose |

89| **데이터베이스** | PostgreSQL 16, Redis 7.0 |

90| **유틸리티** | git, jq, yq, ripgrep, tmux, vim, nano |

91 

92¹ Bun이 설치되어 있지만 패키지 가져오기에 대해 알려진 [프록시 호환성 문제](#install-dependencies-with-a-sessionstart-hook)가 있습니다.

93 

94정확한 버전은 클라우드 세션에서 Claude에 `check-tools`를 실행하도록 요청하세요. 이 명령은 클라우드 세션에만 존재합니다.

95 

96### GitHub 이슈 및 pull request 작업

97 

98클라우드 세션에는 Claude가 이슈를 읽고, pull request를 나열하고, diff를 가져오고, 설정 없이 주석을 게시할 수 있는 기본 제공 GitHub 도구가 포함되어 있습니다. 이러한 도구는 [GitHub 프록시](#github-proxy)를 통해 인증되며, [GitHub 인증 옵션](#github-authentication-options)에서 구성한 방법을 사용하므로 토큰이 컨테이너에 들어가지 않습니다.

99 

100`gh` CLI는 사전 설치되지 않습니다. 기본 제공 도구가 다루지 않는 `gh release` 또는 `gh workflow run`과 같은 `gh` 명령이 필요하면 직접 설치하고 인증하세요:

101 

102<Steps>

103 <Step title="설정 스크립트에 gh 설치">

104 [설정 스크립트](#setup-scripts)에 `apt update && apt install -y gh`를 추가하세요.

105 </Step>

106 

107 <Step title="토큰 제공">

108 GitHub 개인 액세스 토큰으로 [환경 설정](#configure-your-environment)에 `GH_TOKEN` 환경 변수를 추가하세요. `gh`는 `GH_TOKEN`을 자동으로 읽으므로 `gh auth login` 단계가 필요하지 않습니다.

109 </Step>

110</Steps>

111 

112### 아티팩트를 세션으로 다시 연결

113 

114각 클라우드 세션에는 claude.ai의 트랜스크립트 URL이 있으며, 세션은 `CLAUDE_CODE_REMOTE_SESSION_ID` 환경 변수에서 자신의 ID를 읽을 수 있습니다. 이를 사용하여 PR 본문, 커밋 메시지, Slack 게시물 또는 생성된 보고서에 추적 가능한 링크를 넣어서 검토자가 이를 생성한 실행을 열 수 있습니다.

115 

116Claude에 환경 변수에서 링크를 구성하도록 요청하세요. 다음 명령은 URL을 인쇄합니다:

117 

118```bash theme={null}

119echo "https://claude.ai/code/${CLAUDE_CODE_REMOTE_SESSION_ID}"

120```

121 

122### 테스트 실행, 서비스 시작 및 패키지 추가

123 

124Claude는 작업을 수행하는 과정에서 테스트를 실행합니다. 프롬프트에서 요청하세요. 예: "tests/의 실패한 테스트 수정" 또는 "각 변경 후 pytest 실행". pytest, jest, cargo test와 같은 테스트 러너는 사전 설치되어 있으므로 기본적으로 작동합니다.

125 

126PostgreSQL 및 Redis는 사전 설치되어 있지만 기본적으로 실행되지 않습니다. 세션 중에 Claude에 각각을 시작하도록 요청하세요:

127 

128```bash theme={null}

129service postgresql start

130```

131 

132```bash theme={null}

133service redis-server start

134```

135 

136Docker는 컨테이너화된 서비스를 실행하는 데 사용 가능합니다. Claude에 `docker compose up`을 실행하여 프로젝트의 서비스를 시작하도록 요청하세요. 이미지를 가져오기 위한 네트워크 액세스는 환경의 [액세스 수준](#access-levels)을 따르며, [신뢰할 수 있는 기본값](#default-allowed-domains)에는 Docker Hub 및 기타 일반적인 레지스트리가 포함됩니다.

137 

138이미지가 크거나 가져오기가 느린 경우 [설정 스크립트](#setup-scripts)에 `docker compose pull` 또는 `docker compose build`를 추가하세요. 가져온 이미지는 [캐시된 환경](#environment-caching)에 저장되므로 각 새 세션에는 디스크에 이미지가 있습니다. 캐시는 파일만 저장하고 실행 중인 프로세스는 저장하지 않으므로 Claude는 여전히 각 세션에서 컨테이너를 시작합니다.

139 

140사전 설치되지 않은 패키지를 추가하려면 [설정 스크립트](#setup-scripts)를 사용하세요. 스크립트의 출력은 [캐시됨](#environment-caching)이므로 여기에 설치한 패키지는 매번 다시 설치하지 않고도 모든 세션의 시작 시 사용 가능합니다. 세션 중에 Claude에 패키지를 설치하도록 요청할 수도 있지만, 이러한 설치는 다른 세션으로 이월되지 않습니다.

141 

142### 리소스 제한

143 

144클라우드 세션은 시간이 지남에 따라 변할 수 있는 대략적인 리소스 상한선으로 실행됩니다:

145 

146* 4 vCPU

147* 16 GB RAM

148* 30 GB 디스크

149 

150대규모 빌드 작업이나 메모리 집약적 테스트와 같이 훨씬 더 많은 메모리가 필요한 작업은 실패하거나 종료될 수 있습니다. 이러한 제한을 초과하는 워크로드의 경우 [Remote Control](/ko/remote-control)을 사용하여 자신의 하드웨어에서 Claude Code를 실행하세요.

151 

152### 환경 구성

153 

154환경은 [네트워크 액세스](#network-access), 환경 변수 및 세션이 시작되기 전에 실행되는 [설정 스크립트](#setup-scripts)를 제어합니다. 구성 없이 사용 가능한 것은 [설치된 도구](#installed-tools)를 참조하세요. 웹 인터페이스 또는 터미널에서 환경을 관리할 수 있습니다:

155 

156| 작업 | 방법 |

157| :----------------- | :------------------------------------------------------------------------------------------------------------------ |

158| 환경 추가 | 현재 환경을 선택하여 선택기를 열고 **Add environment**를 선택합니다. 대화 상자에는 이름, 네트워크 액세스 수준, 환경 변수 및 설정 스크립트가 포함됩니다. |

159| 환경 편집 | 환경 이름 오른쪽의 설정 아이콘을 선택합니다. |

160| 환경 보관 | 환경을 편집하기 위해 열고 **Archive**를 선택합니다. 보관된 환경은 선택기에서 숨겨지지만 기존 세션은 계속 실행됩니다. |

161| `--remote`의 기본값 설정 | 터미널에서 `/remote-env`를 실행합니다. 단일 환경이 있으면 이 명령은 현재 구성을 표시합니다. `/remote-env`는 기본값만 선택합니다. 웹 인터페이스에서 환경을 추가, 편집 및 보관합니다. |

162 

163환경 변수는 `.env` 형식을 사용하며 한 줄에 하나의 `KEY=value` 쌍입니다. 따옴표는 값의 일부로 저장되므로 값을 따옴표로 감싸지 마세요.

164 

165```text theme={null}

166NODE_ENV=development

167LOG_LEVEL=debug

168DATABASE_URL=postgres://localhost:5432/myapp

169```

170 

171## 설정 스크립트

172 

173설정 스크립트는 새 클라우드 세션이 시작될 때, Claude Code가 시작되기 전에 실행되는 Bash 스크립트입니다. 설정 스크립트를 사용하여 종속성을 설치하고, 도구를 구성하거나, 세션이 필요하지만 사전 설치되지 않은 것을 가져오세요.

174 

175스크립트는 Ubuntu 24.04에서 root로 실행되므로 `apt install` 및 대부분의 언어 패키지 관리자가 작동합니다.

176 

177설정 스크립트를 추가하려면 환경 설정 대화 상자를 열고 **Setup script** 필드에 스크립트를 입력하세요.

178 

179이 예제는 사전 설치되지 않은 `gh` CLI를 설치합니다:

180 

181```bash theme={null}

182#!/bin/bash

183apt update && apt install -y gh

184```

185 

186스크립트가 0이 아닌 값으로 종료되면 세션이 시작되지 않습니다. 간헐적인 설치 실패로 세션을 차단하지 않으려면 중요하지 않은 명령에 `|| true`를 추가하세요.

187 

188<Note>

189 패키지를 설치하는 설정 스크립트는 레지스트리에 도달하기 위해 네트워크 액세스가 필요합니다. 기본 **Trusted** 네트워크 액세스는 npm, PyPI, RubyGems 및 crates.io를 포함한 [일반적인 패키지 레지스트리](#default-allowed-domains)에 대한 연결을 허용합니다. 환경이 **None** 네트워크 액세스를 사용하면 스크립트가 패키지 설치에 실패합니다.

190</Note>

191 

192### 환경 캐싱

193 

194설정 스크립트는 환경에서 새 세션을 시작할 때 처음 실행됩니다. 완료되면 Anthropic이 파일 시스템을 스냅샷하고 해당 스냅샷을 나중 세션의 시작점으로 재사용합니다. 새 세션은 이미 디스크에 있는 종속성, 도구 및 Docker 이미지로 시작되며, 설정 스크립트 단계는 건너뜁니다. 이렇게 하면 스크립트가 큰 도구 체인을 설치하거나 컨테이너 이미지를 가져올 때도 시작이 빠릅니다.

195 

196캐시는 파일을 캡처하고 실행 중인 프로세스는 캡처하지 않습니다. 설정 스크립트가 디스크에 쓰는 모든 것이 이월됩니다. 시작하는 서비스 또는 컨테이너는 그렇지 않으므로 Claude에 요청하거나 [SessionStart hook](#setup-scripts-vs-sessionstart-hooks)으로 세션당 이를 시작하세요.

197 

198환경의 설정 스크립트 또는 허용된 네트워크 호스트를 변경할 때, 그리고 캐시가 대략 7일 후 만료에 도달할 때 캐시를 다시 빌드하기 위해 설정 스크립트가 다시 실행됩니다. 기존 세션을 재개하면 설정 스크립트가 다시 실행되지 않습니다.

199 

200캐싱을 활성화하거나 스냅샷을 직접 관리할 필요가 없습니다.

201 

202### 설정 스크립트 vs. SessionStart hooks

203 

204클라우드가 필요하지만 노트북에 이미 있는 것(예: 언어 런타임 또는 CLI 도구)을 설치하려면 설정 스크립트를 사용합니다. 클라우드 및 로컬 모두에서 실행되어야 하는 프로젝트 설정(예: `npm install`)의 경우 [SessionStart hook](/ko/hooks#sessionstart)을 사용합니다.

205 

206둘 다 세션 시작 시 실행되지만 다른 위치에 속합니다:

207 

208| | 설정 스크립트 | SessionStart hooks |

209| ----- | ------------------------------------------------------- | ------------------------------------- |

210| 첨부 대상 | 클라우드 환경 | 저장소 |

211| 구성 위치 | 클라우드 환경 UI | 저장소의 `.claude/settings.json` |

212| 실행 | Claude Code 시작 전, [캐시된 환경](#environment-caching)이 없을 때만 | Claude Code 시작 후, 재개된 세션을 포함한 모든 세션에서 |

213| 범위 | 클라우드 환경만 | 로컬 및 클라우드 모두 |

214 

215SessionStart hooks는 로컬의 사용자 수준 `~/.claude/settings.json`에서도 정의할 수 있지만 사용자 수준 설정은 클라우드 세션으로 이월되지 않습니다. 클라우드에서는 저장소에 커밋된 hooks만 실행됩니다.

216 

217### SessionStart hook로 종속성 설치

218 

219클라우드 세션에서만 종속성을 설치하려면 저장소의 `.claude/settings.json`에 SessionStart hook을 추가하세요:

220 

221```json theme={null}

222{

223 "hooks": {

224 "SessionStart": [

225 {

226 "matcher": "startup|resume",

227 "hooks": [

228 {

229 "type": "command",

230 "command": "\"$CLAUDE_PROJECT_DIR\"/scripts/install_pkgs.sh"

231 }

232 ]

233 }

234 ]

235 }

236}

237```

238 

239`scripts/install_pkgs.sh`에 스크립트를 생성하고 `chmod +x`로 실행 가능하게 만드세요. `CLAUDE_CODE_REMOTE` 환경 변수는 클라우드 세션에서 `true`로 설정되므로 이를 사용하여 로컬 실행을 건너뛸 수 있습니다:

240 

241```bash theme={null}

242#!/bin/bash

243 

244if [ "$CLAUDE_CODE_REMOTE" != "true" ]; then

245 exit 0

246fi

247 

248npm install

249pip install -r requirements.txt

250exit 0

251```

252 

253SessionStart hooks는 클라우드 세션에서 몇 가지 제한 사항이 있습니다:

254 

255* **클라우드 전용 범위 없음**: hooks는 로컬 및 클라우드 세션 모두에서 실행됩니다. 로컬 실행을 건너뛰려면 위에 표시된 대로 `CLAUDE_CODE_REMOTE` 환경 변수를 확인하세요.

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

257* **프록시 호환성**: 모든 아웃바운드 트래픽은 [보안 프록시](#security-proxy)를 통과합니다. 일부 패키지 관리자는 이 프록시에서 제대로 작동하지 않습니다. Bun은 알려진 예입니다.

258* **시작 지연 추가**: hooks는 세션이 시작되거나 재개될 때마다 실행됩니다. 설정 스크립트와 달리 [환경 캐싱](#environment-caching)의 이점을 얻지 못합니다. 재설치하기 전에 종속성이 이미 있는지 확인하여 설치 스크립트를 빠르게 유지하세요.

259 

260후속 Bash 명령에 대한 환경 변수를 유지하려면 `$CLAUDE_ENV_FILE`의 파일에 쓰세요. 자세한 내용은 [SessionStart hooks](/ko/hooks#sessionstart)를 참조하세요.

261 

262기본 이미지를 자신의 Docker 이미지로 바꾸는 것은 아직 지원되지 않습니다. [제공된 이미지](#installed-tools) 위에 필요한 것을 설치하려면 설정 스크립트를 사용하거나, `docker compose`로 Claude와 함께 이미지를 컨테이너로 실행하세요.

263 

264## 네트워크 액세스

265 

266네트워크 액세스는 클라우드 환경에서 아웃바운드 연결을 제어합니다. 각 환경은 하나의 액세스 수준을 지정하며, 사용자 정의 허용 도메인으로 확장할 수 있습니다. 기본값은 **Trusted**이며, 패키지 레지스트리 및 기타 [허용 목록 도메인](#default-allowed-domains)을 허용합니다.

267 

268### 액세스 수준

269 

270환경을 생성하거나 편집할 때 액세스 수준을 선택하세요:

271 

272| 수준 | 아웃바운드 연결 |

273| :---------- | :------------------------------------------------------------------ |

274| **None** | 아웃바운드 네트워크 액세스 없음 |

275| **Trusted** | [허용 목록 도메인](#default-allowed-domains)만: 패키지 레지스트리, GitHub, 클라우드 SDK |

276| **Full** | 모든 도메인 |

277| **Custom** | 기본값을 선택적으로 포함하는 자신의 허용 목록 |

278 

279GitHub 작업은 이 설정과 독립적인 [별도 프록시](#github-proxy)를 사용합니다.

280 

281### 특정 도메인 허용

282 

283Trusted 목록에 없는 도메인을 허용하려면 환경의 네트워크 액세스 설정에서 **Custom**을 선택하세요. **Allowed domains** 필드가 나타납니다. 한 줄에 하나의 도메인을 입력하세요:

284 

285```text theme={null}

286api.example.com

287*.internal.example.com

288registry.example.com

289```

290 

291와일드카드 하위 도메인 일치를 위해 `*.`를 사용하세요. **Also include default list of common package managers**를 확인하여 [Trusted 도메인](#default-allowed-domains)을 사용자 정의 항목과 함께 유지하거나, 나열한 것만 허용하려면 선택 해제하세요.

292 

293### GitHub 프록시

294 

295보안을 위해 모든 GitHub 작업은 모든 git 상호 작용을 투명하게 처리하는 전용 프록시 서비스를 통해 진행됩니다. 샌드박스 내에서 git 클라이언트는 사용자 정의 빌드 범위 자격 증명을 사용하여 인증합니다. 이 프록시는:

296 

297* GitHub 인증을 안전하게 관리합니다: git 클라이언트는 샌드박스 내에서 범위 자격 증명을 사용하며, 프록시가 이를 확인하고 실제 GitHub 인증 토큰으로 변환합니다

298* 안전을 위해 git push 작업을 현재 작업 분기로 제한합니다

299* 보안 경계를 유지하면서 복제, 가져오기 및 PR 작업을 활성화합니다

300 

301### 보안 프록시

302 

303환경은 보안 및 남용 방지를 위해 HTTP/HTTPS 네트워크 프록시 뒤에서 실행됩니다. 모든 아웃바운드 인터넷 트래픽은 다음을 제공하는 이 프록시를 통과합니다:

304 

305* 악의적인 요청으로부터의 보호

306* 속도 제한 및 남용 방지

307* 향상된 보안을 위한 콘텐츠 필터링

308 

309### 기본 허용 도메인

310 

311**Trusted** 네트워크 액세스를 사용할 때 다음 도메인이 기본적으로 허용됩니다. `*`로 표시된 도메인은 와일드카드 하위 도메인 일치를 나타내므로 `*.gcr.io`는 `gcr.io`의 모든 하위 도메인을 허용합니다.

312 

313<AccordionGroup>

314 <Accordion title="Anthropic 서비스">

315 * api.anthropic.com

316 * statsig.anthropic.com

317 * docs.claude.com

318 * platform.claude.com

319 * code.claude.com

320 * claude.ai

321 </Accordion>

322 

323 <Accordion title="버전 제어">

324 * github.com

325 * [www.github.com](http://www.github.com)

326 * api.github.com

327 * npm.pkg.github.com

328 * raw\.githubusercontent.com

329 * pkg-npm.githubusercontent.com

330 * objects.githubusercontent.com

331 * release-assets.githubusercontent.com

332 * codeload.github.com

333 * avatars.githubusercontent.com

334 * camo.githubusercontent.com

335 * gist.github.com

336 * gitlab.com

337 * [www.gitlab.com](http://www.gitlab.com)

338 * registry.gitlab.com

339 * bitbucket.org

340 * [www.bitbucket.org](http://www.bitbucket.org)

341 * api.bitbucket.org

342 </Accordion>

343 

344 <Accordion title="컨테이너 레지스트리">

345 * registry-1.docker.io

346 * auth.docker.io

347 * index.docker.io

348 * hub.docker.com

349 * [www.docker.com](http://www.docker.com)

350 * production.cloudflare.docker.com

351 * download.docker.com

352 * gcr.io

353 * \*.gcr.io

354 * ghcr.io

355 * mcr.microsoft.com

356 * \*.data.mcr.microsoft.com

357 * public.ecr.aws

358 </Accordion>

359 

360 <Accordion title="클라우드 플랫폼">

361 * cloud.google.com

362 * accounts.google.com

363 * gcloud.google.com

364 * \*.googleapis.com

365 * storage.googleapis.com

366 * compute.googleapis.com

367 * container.googleapis.com

368 * azure.com

369 * portal.azure.com

370 * microsoft.com

371 * [www.microsoft.com](http://www.microsoft.com)

372 * \*.microsoftonline.com

373 * packages.microsoft.com

374 * dotnet.microsoft.com

375 * dot.net

376 * visualstudio.com

377 * dev.azure.com

378 * \*.amazonaws.com

379 * \*.api.aws

380 * oracle.com

381 * [www.oracle.com](http://www.oracle.com)

382 * java.com

383 * [www.java.com](http://www.java.com)

384 * java.net

385 * [www.java.net](http://www.java.net)

386 * download.oracle.com

387 * yum.oracle.com

388 </Accordion>

389 

390 <Accordion title="JavaScript 및 Node 패키지 관리자">

391 * registry.npmjs.org

392 * [www.npmjs.com](http://www.npmjs.com)

393 * [www.npmjs.org](http://www.npmjs.org)

394 * npmjs.com

395 * npmjs.org

396 * yarnpkg.com

397 * registry.yarnpkg.com

398 </Accordion>

399 

400 <Accordion title="Python 패키지 관리자">

401 * pypi.org

402 * [www.pypi.org](http://www.pypi.org)

403 * files.pythonhosted.org

404 * pythonhosted.org

405 * test.pypi.org

406 * pypi.python.org

407 * pypa.io

408 * [www.pypa.io](http://www.pypa.io)

409 </Accordion>

410 

411 <Accordion title="Ruby 패키지 관리자">

412 * rubygems.org

413 * [www.rubygems.org](http://www.rubygems.org)

414 * api.rubygems.org

415 * index.rubygems.org

416 * ruby-lang.org

417 * [www.ruby-lang.org](http://www.ruby-lang.org)

418 * rubyforge.org

419 * [www.rubyforge.org](http://www.rubyforge.org)

420 * rubyonrails.org

421 * [www.rubyonrails.org](http://www.rubyonrails.org)

422 * rvm.io

423 * get.rvm.io

424 </Accordion>

425 

426 <Accordion title="Rust 패키지 관리자">

427 * crates.io

428 * [www.crates.io](http://www.crates.io)

429 * index.crates.io

430 * static.crates.io

431 * rustup.rs

432 * static.rust-lang.org

433 * [www.rust-lang.org](http://www.rust-lang.org)

434 </Accordion>

435 

436 <Accordion title="Go 패키지 관리자">

437 * proxy.golang.org

438 * sum.golang.org

439 * index.golang.org

440 * golang.org

441 * [www.golang.org](http://www.golang.org)

442 * goproxy.io

443 * pkg.go.dev

444 </Accordion>

445 

446 <Accordion title="JVM 패키지 관리자">

447 * maven.org

448 * repo.maven.org

449 * central.maven.org

450 * repo1.maven.org

451 * repo.maven.apache.org

452 * jcenter.bintray.com

453 * gradle.org

454 * [www.gradle.org](http://www.gradle.org)

455 * services.gradle.org

456 * plugins.gradle.org

457 * kotlinlang.org

458 * [www.kotlinlang.org](http://www.kotlinlang.org)

459 * spring.io

460 * repo.spring.io

461 </Accordion>

462 

463 <Accordion title="기타 패키지 관리자">

464 * packagist.org (PHP Composer)

465 * [www.packagist.org](http://www.packagist.org)

466 * repo.packagist.org

467 * nuget.org (.NET NuGet)

468 * [www.nuget.org](http://www.nuget.org)

469 * api.nuget.org

470 * pub.dev (Dart/Flutter)

471 * api.pub.dev

472 * hex.pm (Elixir/Erlang)

473 * [www.hex.pm](http://www.hex.pm)

474 * cpan.org (Perl CPAN)

475 * [www.cpan.org](http://www.cpan.org)

476 * metacpan.org

477 * [www.metacpan.org](http://www.metacpan.org)

478 * api.metacpan.org

479 * cocoapods.org (iOS/macOS)

480 * [www.cocoapods.org](http://www.cocoapods.org)

481 * cdn.cocoapods.org

482 * haskell.org

483 * [www.haskell.org](http://www.haskell.org)

484 * hackage.haskell.org

485 * swift.org

486 * [www.swift.org](http://www.swift.org)

487 </Accordion>

488 

489 <Accordion title="Linux 배포판">

490 * archive.ubuntu.com

491 * security.ubuntu.com

492 * ubuntu.com

493 * [www.ubuntu.com](http://www.ubuntu.com)

494 * \*.ubuntu.com

495 * ppa.launchpad.net

496 * launchpad.net

497 * [www.launchpad.net](http://www.launchpad.net)

498 * \*.nixos.org

499 </Accordion>

500 

501 <Accordion title="개발 도구 및 플랫폼">

502 * dl.k8s.io (Kubernetes)

503 * pkgs.k8s.io

504 * k8s.io

505 * [www.k8s.io](http://www.k8s.io)

506 * releases.hashicorp.com (HashiCorp)

507 * apt.releases.hashicorp.com

508 * rpm.releases.hashicorp.com

509 * archive.releases.hashicorp.com

510 * hashicorp.com

511 * [www.hashicorp.com](http://www.hashicorp.com)

512 * repo.anaconda.com (Anaconda/Conda)

513 * conda.anaconda.org

514 * anaconda.org

515 * [www.anaconda.com](http://www.anaconda.com)

516 * anaconda.com

517 * continuum.io

518 * apache.org (Apache)

519 * [www.apache.org](http://www.apache.org)

520 * archive.apache.org

521 * downloads.apache.org

522 * eclipse.org (Eclipse)

523 * [www.eclipse.org](http://www.eclipse.org)

524 * download.eclipse.org

525 * nodejs.org (Node.js)

526 * [www.nodejs.org](http://www.nodejs.org)

527 * developer.apple.com

528 * developer.android.com

529 * pkg.stainless.com

530 * binaries.prisma.sh

531 </Accordion>

532 

533 <Accordion title="클라우드 서비스 및 모니터링">

534 * statsig.com

535 * [www.statsig.com](http://www.statsig.com)

536 * api.statsig.com

537 * sentry.io

538 * \*.sentry.io

539 * downloads.sentry-cdn.com

540 * http-intake.logs.datadoghq.com

541 * \*.datadoghq.com

542 * \*.datadoghq.eu

543 * api.honeycomb.io

544 </Accordion>

545 

546 <Accordion title="콘텐츠 전달 및 미러">

547 * sourceforge.net

548 * \*.sourceforge.net

549 * packagecloud.io

550 * \*.packagecloud.io

551 * fonts.googleapis.com

552 * fonts.gstatic.com

553 </Accordion>

554 

555 <Accordion title="스키마 및 구성">

556 * json-schema.org

557 * [www.json-schema.org](http://www.json-schema.org)

558 * json.schemastore.org

559 * [www.schemastore.org](http://www.schemastore.org)

560 </Accordion>

561 

562 <Accordion title="Model Context Protocol">

563 * \*.modelcontextprotocol.io

564 </Accordion>

565</AccordionGroup>

566 

567## 웹과 터미널 간에 작업 이동

568 

569이러한 워크플로우는 동일한 claude.ai 계정에 로그인한 [Claude Code CLI](/ko/quickstart)가 필요합니다. 터미널에서 새 클라우드 세션을 시작하거나 클라우드 세션을 터미널로 가져와 로컬에서 계속할 수 있습니다. 클라우드 세션은 노트북을 닫아도 유지되며, Claude 모바일 앱을 포함한 어디서나 모니터링할 수 있습니다.

570 

571<Note>

572 CLI에서 세션 핸드오프는 일방향입니다: `--teleport`로 클라우드 세션을 터미널로 가져올 수 있지만 기존 터미널 세션을 웹으로 푸시할 수 없습니다. `--remote` 플래그는 현재 저장소에 대한 새로운 클라우드 세션을 생성합니다. [Desktop 앱](/ko/desktop#continue-in-another-surface)은 로컬 세션을 웹으로 보낼 수 있는 Continue in 메뉴를 제공합니다.

573</Note>

574 

575### 터미널에서 웹으로

576 

577`--remote` 플래그로 명령줄에서 클라우드 세션을 시작하세요:

578 

579```bash theme={null}

580claude --remote "Fix the authentication bug in src/auth/login.ts"

581```

582 

583이렇게 하면 claude.ai에서 새 클라우드 세션이 생성됩니다. 세션은 현재 디렉토리의 GitHub 원격을 현재 분기에서 복제하므로, VM이 머신이 아닌 GitHub에서 복제하기 때문에 로컬 커밋이 있으면 먼저 푸시하세요. `--remote`는 한 번에 하나의 저장소에서 작동합니다. 작업은 클라우드에서 실행되는 동안 로컬에서 계속 작업할 수 있습니다.

584 

585<Note>

586 `--remote`는 클라우드 세션을 생성합니다. `--remote-control`은 관련이 없습니다: 로컬 CLI 세션을 노출하여 웹에서 모니터링할 수 있습니다. [Remote Control](/ko/remote-control)을 참조하세요.

587</Note>

588 

589Claude Code CLI에서 `/tasks`를 사용하여 진행 상황을 확인하거나 claude.ai 또는 Claude 모바일 앱에서 세션을 열어 직접 상호 작용하세요. 여기서 Claude를 조종하고, 피드백을 제공하거나, 다른 대화처럼 질문에 답변할 수 있습니다.

590 

591#### 클라우드 작업 팁

592 

593**로컬에서 계획하고 원격으로 실행**: 복잡한 작업의 경우 Claude를 Plan Mode에서 시작하여 접근 방식을 협력한 다음 작업을 클라우드로 보내세요:

594 

595```bash theme={null}

596claude --permission-mode plan

597```

598 

599Plan Mode에서 Claude는 파일을 읽고, 명령을 실행하여 탐색하고, 소스 코드를 편집하지 않고 계획을 제안합니다. 계획에 만족하면 저장소에 저장하고, 커밋하고, 푸시하여 클라우드 VM이 복제할 수 있도록 한 다음 자율 실행을 위해 클라우드 세션을 시작하세요:

600 

601```bash theme={null}

602claude --remote "Execute the migration plan in docs/migration-plan.md"

603```

604 

605이 패턴은 Claude가 클라우드에서 자율적으로 실행되도록 하면서 전략에 대한 제어를 제공합니다.

606 

607**ultraplan으로 클라우드에서 계획**: 웹 세션 자체에서 계획을 작성하고 검토하려면 [ultraplan](/ko/ultraplan)을 사용하세요. Claude는 웹에서 Claude Code on the web에서 계획을 생성하는 동안 계속 작업하고, 브라우저에서 섹션에 주석을 달고 원격으로 실행하거나 계획을 터미널로 다시 보낼 수 있습니다.

608 

609**작업을 병렬로 실행**: 각 `--remote` 명령은 독립적으로 실행되는 자체 클라우드 세션을 생성합니다. 여러 작업을 시작할 수 있으며 모두 별도의 세션에서 동시에 실행됩니다:

610 

611```bash theme={null}

612claude --remote "Fix the flaky test in auth.spec.ts"

613claude --remote "Update the API documentation"

614claude --remote "Refactor the logger to use structured output"

615```

616 

617Claude Code CLI에서 `/tasks`로 모든 세션을 모니터링하세요. 세션이 완료되면 웹 인터페이스에서 PR을 생성하거나 [세션을 텔레포트](#from-web-to-terminal)하여 터미널에서 계속 작업할 수 있습니다.

618 

619#### GitHub 없이 로컬 저장소 보내기

620 

621GitHub에 연결되지 않은 저장소에서 `claude --remote`를 실행하면 Claude Code가 로컬 저장소를 번들로 만들어 클라우드 세션에 직접 업로드합니다. 번들에는 모든 분기의 전체 저장소 기록과 추적된 파일에 대한 커밋되지 않은 변경 사항이 포함됩니다.

622 

623GitHub 액세스를 사용할 수 없을 때 이 폴백이 자동으로 활성화됩니다. GitHub가 연결되어 있어도 강제하려면 `CCR_FORCE_BUNDLE=1`을 설정하세요:

624 

625```bash theme={null}

626CCR_FORCE_BUNDLE=1 claude --remote "Run the test suite and fix any failures"

627```

628 

629번들된 저장소는 이러한 제한을 충족해야 합니다:

630 

631* 디렉토리는 최소 하나의 커밋이 있는 git 저장소여야 합니다

632* 번들된 저장소는 100 MB 미만이어야 합니다. 더 큰 저장소는 현재 분기만 번들로 만들기로 폴백한 다음 작업 트리의 단일 스쿼시 스냅샷으로 폴백하고, 스냅샷이 여전히 너무 크면 실패합니다

633* 추적되지 않은 파일은 포함되지 않습니다. 클라우드 세션이 보기를 원하는 파일에 대해 `git add`를 실행하세요

634* 번들에서 생성된 세션은 [GitHub 인증](#github-authentication-options)도 구성되어 있지 않으면 원격으로 다시 푸시할 수 없습니다

635 

636### 웹에서 터미널로

637 

638다음 중 하나를 사용하여 클라우드 세션을 터미널로 가져오세요:

639 

640* **`--teleport` 사용**: 명령줄에서 `claude --teleport`를 실행하여 대화형 세션 선택기를 사용하거나 `claude --teleport <session-id>`를 실행하여 특정 세션을 직접 재개합니다. 커밋되지 않은 변경 사항이 있으면 먼저 stash하라는 메시지가 표시됩니다.

641* **`/teleport` 사용**: 기존 CLI 세션 내에서 `/teleport`(또는 `/tp`)를 실행하여 Claude Code를 다시 시작하지 않고 동일한 세션 선택기를 엽니다.

642* **`/tasks`에서**: `/tasks`를 실행하여 백그라운드 세션을 보고 `t`를 눌러 하나로 텔레포트합니다

643* **웹 인터페이스에서**: **Open in CLI**를 선택하여 터미널에 붙여넣을 수 있는 명령을 복사합니다

644 

645세션을 텔레포트하면 Claude가 올바른 저장소에 있는지 확인하고, 클라우드 세션에서 분기를 가져와 체크아웃하고, 전체 대화 기록을 터미널에 로드합니다.

646 

647`--teleport`는 `--resume`과 다릅니다. `--resume`은 이 머신의 로컬 기록에서 대화를 다시 열고 클라우드 세션을 나열하지 않습니다. `--teleport`는 클라우드 세션과 해당 분기를 가져옵니다.

648 

649#### 텔레포트 요구 사항

650 

651텔레포트는 세션을 재개하기 전에 이러한 요구 사항을 확인합니다. 요구 사항이 충족되지 않으면 오류가 표시되거나 문제를 해결하라는 메시지가 표시됩니다.

652 

653| 요구 사항 | 세부 정보 |

654| --------------- | ------------------------------------------------------------------------- |

655| Clean git state | 작업 디렉토리에 커밋되지 않은 변경 사항이 없어야 합니다. 텔레포트가 필요한 경우 변경 사항을 stash하라는 메시지를 표시합니다. |

656| 올바른 저장소 | fork가 아닌 동일한 저장소의 체크아웃에서 `--teleport`를 실행해야 합니다. |

657| 분기 사용 가능 | 클라우드 세션의 분기가 원격으로 푸시되어야 합니다. 텔레포트가 자동으로 가져와 체크아웃합니다. |

658| 동일한 계정 | 클라우드 세션에서 사용한 동일한 claude.ai 계정으로 인증되어야 합니다. |

659 

660#### `--teleport`를 사용할 수 없음

661 

662텔레포트는 claude.ai 구독 인증이 필요합니다. API 키, Bedrock, Vertex AI 또는 Microsoft Foundry를 통해 인증된 경우 `/login`을 실행하여 대신 claude.ai 계정으로 로그인하세요. 이미 claude.ai를 통해 로그인했는데 `--teleport`를 여전히 사용할 수 없으면 조직이 클라우드 세션을 비활성화했을 수 있습니다.

663 

664## 세션 작업

665 

666세션은 claude.ai/code의 사이드바에 나타납니다. 여기서 변경 사항을 검토하고, 팀원과 공유하고, 완료된 작업을 보관하거나, 세션을 영구적으로 삭제할 수 있습니다.

667 

668### 컨텍스트 관리

669 

670클라우드 세션은 텍스트 출력을 생성하는 [기본 제공 명령](/ko/commands)을 지원합니다. `/model` 또는 `/config`와 같이 대화형 터미널 선택기를 여는 명령은 사용할 수 없습니다.

671 

672컨텍스트 관리 특히:

673 

674| 명령 | 클라우드 세션에서 작동 | 참고 |

675| :--------- | :----------- | :-------------------------------------------------------------------------- |

676| `/compact` | 예 | 대화를 요약하여 컨텍스트를 확보합니다. `/compact keep the test output`과 같은 선택적 포커스 지침을 허용합니다 |

677| `/context` | 예 | 현재 컨텍스트 윈도우에 있는 것을 표시합니다 |

678| `/clear` | 아니오 | 사이드바에서 새 세션을 시작하세요 |

679 

680자동 압축은 컨텍스트 윈도우가 용량에 접근할 때 자동으로 실행되며, CLI와 동일합니다. 더 일찍 트리거하려면 [환경 변수](#configure-your-environment)에서 [`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`](/ko/env-vars)를 설정하세요. 예를 들어 `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=70`은 기본값 \~95% 대신 70% 용량에서 압축합니다. 압축 계산을 위한 유효 윈도우 크기를 변경하려면 [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/ko/env-vars)를 사용하세요.

681 

682[Subagents](/ko/sub-agents)는 로컬과 동일한 방식으로 작동합니다. Claude는 Task 도구로 이들을 생성하여 연구 또는 병렬 작업을 별도의 컨텍스트 윈도우로 오프로드하여 주 대화를 더 가볍게 유지할 수 있습니다. 저장소의 `.claude/agents/`에 정의된 Subagents는 자동으로 선택됩니다. [Agent teams](/ko/agent-teams)는 기본적으로 꺼져 있지만 [환경 변수](#configure-your-environment)에 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`을 추가하여 활성화할 수 있습니다.

683 

684### 변경 사항 검토

685 

686각 세션은 추가 및 제거된 줄을 표시하는 diff 표시기를 표시합니다(예: `+42 -18`). 이를 선택하여 diff 보기를 열고, 특정 줄에 인라인 주석을 남기고, 다음 메시지로 Claude에 보내세요. 전체 안내는 PR 생성을 포함하여 [검토 및 반복](/ko/web-quickstart#review-and-iterate)을 참조하세요. Claude가 PR을 모니터링하여 CI 실패 및 검토 주석에 자동으로 응답하도록 하려면 [Pull request 자동 수정](#auto-fix-pull-requests)을 참조하세요.

687 

688### 세션 공유

689 

690세션을 공유하려면 아래 계정 유형에 따라 가시성을 전환하세요. 그 후 세션 링크를 그대로 공유합니다. 수신자는 링크를 열 때 최신 상태를 보지만 보기가 실시간으로 업데이트되지 않습니다.

691 

692#### Enterprise 또는 Team 계정에서 공유

693 

694Enterprise 및 Team 계정의 경우 두 가지 가시성 옵션은 **Private** 및 **Team**입니다. Team 가시성은 claude.ai 조직의 다른 구성원에게 세션을 표시합니다. 저장소 액세스 확인은 기본적으로 수신자의 계정에 연결된 GitHub 계정을 기반으로 활성화됩니다. 계정의 표시 이름은 액세스 권한이 있는 모든 수신자에게 표시됩니다. [Claude in Slack](/ko/slack) 세션은 자동으로 Team 가시성으로 공유됩니다.

695 

696#### Max 또는 Pro 계정에서 공유

697 

698Max 및 Pro 계정의 경우 두 가지 가시성 옵션은 **Private** 및 **Public**입니다. Public 가시성은 claude.ai에 로그인한 모든 사용자에게 세션을 표시합니다.

699 

700공유하기 전에 민감한 내용이 있는지 세션을 확인하세요. 세션에는 개인 GitHub 저장소의 코드 및 자격 증명이 포함될 수 있습니다. 저장소 액세스 확인은 기본적으로 활성화되지 않습니다.

701 

702저장소 액세스를 요구하거나 공유 세션에서 이름을 숨기려면 Settings > Claude Code > Sharing settings로 이동하세요.

703 

704### 세션 보관

705 

706세션을 보관하여 세션 목록을 정리할 수 있습니다. 보관된 세션은 기본 세션 목록에서 숨겨지지만 보관된 세션을 필터링하여 볼 수 있습니다.

707 

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

709 

710### 세션 삭제

711 

712세션을 삭제하면 세션과 해당 데이터가 영구적으로 제거됩니다. 이 작업은 실행 취소할 수 없습니다. 두 가지 방법으로 세션을 삭제할 수 있습니다:

713 

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

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

716 

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

718 

719## Pull request 자동 수정

720 

721Claude는 pull request를 감시하고 CI 실패 및 검토 주석에 자동으로 응답할 수 있습니다. Claude는 PR의 GitHub 활동을 구독하고, 검사가 실패하거나 검토자가 주석을 남기면 Claude가 조사하고 명확한 수정이 있으면 푸시합니다.

722 

723<Note>

724 자동 수정을 위해서는 Claude GitHub App이 저장소에 설치되어야 합니다. 아직 설치하지 않았으면 [GitHub App 페이지](https://github.com/apps/claude)에서 설치하거나 [설정](/ko/web-quickstart#connect-github-and-create-an-environment) 중에 메시지가 표시될 때 설치합니다.

725</Note>

726 

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

728 

729* **웹에서 Claude Code로 생성된 PR**: CI 상태 표시줄을 열고 **Auto-fix**를 선택합니다

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

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

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

733 

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

735 

736자동 수정이 활성화되면 Claude는 새 검토 주석 및 CI 검사 실패를 포함한 PR의 GitHub 이벤트를 수신합니다. 각 이벤트에 대해 Claude는 조사하고 진행 방식을 결정합니다:

737 

738* **명확한 수정**: Claude가 수정에 확신하고 이전 지침과 충돌하지 않으면 Claude가 변경을 수행하고, 푸시하고, 세션에서 수행한 작업을 설명합니다

739* **모호한 요청**: 검토자의 주석을 여러 방식으로 해석할 수 있거나 아키텍처적으로 중요한 사항이 포함되면 Claude가 행동하기 전에 확인합니다

740* **중복 또는 조치 불필요 이벤트**: 이벤트가 중복이거나 변경이 필요 없으면 Claude가 세션에서 이를 기록하고 계속합니다

741 

742Claude는 GitHub의 검토 주석 스레드에 회신할 수 있습니다. 이러한 회신은 GitHub 계정을 사용하여 게시되므로 사용자 이름 아래에 나타나지만 각 회신은 Claude Code에서 온 것으로 표시되어 검토자가 에이전트에 의해 작성되었으며 직접 작성되지 않았음을 알 수 있습니다.

743 

744<Warning>

745 저장소가 Atlantis, Terraform Cloud 또는 `issue_comment` 이벤트에서 실행되는 사용자 정의 GitHub Actions와 같은 주석 트리거 자동화를 사용하는 경우 Claude의 회신이 해당 워크플로우를 트리거할 수 있음을 알아두세요. 자동 수정을 활성화하기 전에 저장소의 자동화를 검토하고 PR 주석이 인프라를 배포하거나 권한 있는 작업을 실행할 수 있는 저장소에서는 자동 수정을 비활성화하는 것을 고려하세요.

746</Warning>

747 

748## 보안 및 격리

749 

750각 클라우드 세션은 여러 계층을 통해 머신과 다른 세션으로부터 분리됩니다:

751 

752* **격리된 가상 머신**: 각 세션은 격리된 Anthropic 관리 VM에서 실행됩니다

753* **네트워크 액세스 제어**: 네트워크 액세스는 기본적으로 제한되며 비활성화할 수 있습니다. 네트워크 액세스가 비활성화된 상태에서 실행할 때 Claude Code는 여전히 Anthropic API와 통신할 수 있으며, 이는 VM에서 데이터가 나갈 수 있습니다.

754* **자격 증명 보호**: git 자격 증명 또는 서명 키와 같은 민감한 자격 증명은 Claude Code가 있는 샌드박스 내부에 없습니다. 인증은 범위 자격 증명을 사용하는 보안 프록시를 통해 처리됩니다.

755* **안전한 분석**: 코드는 PR을 생성하기 전에 격리된 VM 내에서 분석 및 수정됩니다

756 

757## 제한 사항

758 

759클라우드 세션을 워크플로우에 사용하기 전에 이러한 제약을 고려하세요:

760 

761* **속도 제한**: Claude Code on the web은 계정 내의 다른 모든 Claude 및 Claude Code 사용과 속도 제한을 공유합니다. 여러 작업을 병렬로 실행하면 비례적으로 더 많은 속도 제한을 소비합니다. 클라우드 VM에 대한 별도의 컴퓨팅 요금은 없습니다.

762* **저장소 인증**: 웹에서 로컬로 세션을 이동할 때 동일한 계정으로 인증된 경우에만 가능합니다

763* **플랫폼 제한**: 저장소 복제 및 pull request 생성에는 GitHub가 필요합니다. 자체 호스팅 [GitHub Enterprise Server](/ko/github-enterprise-server) 인스턴스는 Team 및 Enterprise 플랜에서 지원됩니다. GitLab, Bitbucket 및 기타 비 GitHub 저장소는 [로컬 번들](#send-local-repositories-without-github)로 클라우드 세션에 보낼 수 있지만 세션이 원격으로 결과를 다시 푸시할 수 없습니다

764 

765## 관련 리소스

766 

767* [Ultraplan](/ko/ultraplan): 클라우드 세션에서 계획을 작성하고 브라우저에서 검토합니다

768* [Ultrareview](/ko/ultrareview): 클라우드 샌드박스에서 심층 다중 에이전트 코드 검토를 실행합니다

769* [Routines](/ko/routines): 일정에 따라, API 호출을 통해 또는 GitHub 이벤트에 응답하여 작업을 자동화합니다

770* [Hooks 구성](/ko/hooks): 세션 수명 주기 이벤트에서 스크립트를 실행합니다

771* [설정 참조](/ko/settings): 모든 구성 옵션

772* [보안](/ko/security): 격리 보장 및 데이터 처리

773* [데이터 사용](/ko/data-usage): Anthropic이 클라우드 세션에서 보유하는 것

claude-directory.md +1583 −0 created

Details

1> ## Documentation Index

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

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

4 

5# .claude 디렉토리 탐색

6 

7> Claude Code가 CLAUDE.md, settings.json, hooks, skills, commands, subagents, rules, auto memory를 읽는 위치입니다. 프로젝트의 .claude 디렉토리와 홈 디렉토리의 ~/.claude를 탐색합니다.

8 

9export const ClaudeExplorer = () => {

10 const A = useMemo(() => ({href, children}) => <a href={href} style={{

11 color: 'var(--ce-accent)',

12 textDecoration: 'none',

13 borderBottom: '1px dotted var(--ce-accent)'

14 }}>{children}</a>, []);

15 const C = useMemo(() => ({children}) => <code style={{

16 fontFamily: 'var(--ce-mono)',

17 fontSize: '0.92em',

18 padding: '1px 4px',

19 borderRadius: '3px',

20 background: 'var(--ce-surface)',

21 border: '0.5px solid var(--ce-border-subtle)'

22 }}>{children}</code>, []);

23 const commandsNote = useMemo(() => <>Commands and skills are now the same mechanism. For new workflows, use <A href="/en/skills">skills/</A> instead: same <C>/name</C> invocation, plus you can bundle supporting files.</>, []);

24 const FILE_TREE = useMemo(() => ({

25 project: {

26 label: 'your-project/',

27 children: [{

28 id: 'claude-md',

29 label: 'CLAUDE.md',

30 type: 'file',

31 icon: 'md',

32 color: '#6A9BCC',

33 badge: 'committed',

34 oneLiner: 'Project instructions Claude reads every session',

35 when: 'Loaded into context at the start of every session',

36 description: 'Project-specific instructions that shape how Claude works in this repository. Put your conventions, common commands, and architectural context here so Claude operates with the same assumptions your team does.',

37 tips: ['Target under 200 lines. Longer files still load in full but may reduce adherence', <>CLAUDE.md loads into every session. If something only matters for specific tasks, move it to a <A href="/en/skills">skill</A> or a path-scoped <A href="/en/memory#organize-rules-with-claude/rules/">rule</A> so it loads only when needed</>, 'List the commands you run most, like build, test, and format, so Claude knows them without you spelling them out each time', <>Run <C>/memory</C> to open and edit CLAUDE.md from within a session</>, <>Also works at <C>.claude/CLAUDE.md</C> if you prefer to keep the project root clean</>],

38 exampleIntro: 'This example is for a TypeScript and React project. It lists the build and test commands, the framework conventions Claude should follow, and project-specific rules like export style and file layout.',

39 example: `# Project conventions

40 

41## Commands

42- Build: \`npm run build\`

43- Test: \`npm test\`

44- Lint: \`npm run lint\`

45 

46## Stack

47- TypeScript with strict mode

48- React 19, functional components only

49 

50## Rules

51- Named exports, never default exports

52- Tests live next to source: \`foo.ts\` -> \`foo.test.ts\`

53- All API routes return \`{ data, error }\` shape`,

54 docsLink: '/en/memory'

55 }, {

56 id: 'mcp-json',

57 label: '.mcp.json',

58 type: 'file',

59 icon: 'json',

60 color: '#9B7BC4',

61 badge: 'committed',

62 oneLiner: 'Project-scoped MCP servers, shared with your team',

63 when: <>Servers connect when the session begins. Tool schemas are deferred by default and load on demand via <A href="/en/mcp#scale-with-mcp-tool-search">tool search</A></>,

64 description: <>Configures Model Context Protocol (MCP) servers that give Claude access to external tools: databases, APIs, browsers, and more. This file holds the project-scoped servers your whole team uses. Personal servers you want to keep to yourself go in <C>~/.claude.json</C> instead.</>,

65 tips: [<>Use environment variable references for secrets: <C>{'${GITHUB_TOKEN}'}</C></>, <>Lives at the project root, not inside <C>.claude/</C></>, <>For servers only you need, run <C>claude mcp add --scope user</C>. This writes to <C>~/.claude.json</C> instead of <C>.mcp.json</C></>],

66 exampleIntro: <>This example configures the GitHub MCP server so Claude can read issues and open pull requests. The <C>{'${GITHUB_TOKEN}'}</C> reference is read from your shell environment when Claude Code starts the server, so the token never lands in the file.</>,

67 example: `{

68 "mcpServers": {

69 "github": {

70 "command": "npx",

71 "args": ["-y", "@modelcontextprotocol/server-github"],

72 "env": {

73 "GITHUB_TOKEN": "\${GITHUB_TOKEN}"

74 }

75 }

76 }

77}`,

78 docsLink: '/en/mcp'

79 }, {

80 id: 'worktreeinclude',

81 label: '.worktreeinclude',

82 type: 'file',

83 icon: 'md',

84 color: '#8FA876',

85 badge: 'committed',

86 oneLiner: 'Gitignored files to copy into new worktrees',

87 when: <>Read when Claude creates a git worktree via <C>--worktree</C>, the <C>EnterWorktree</C> tool, or subagent <C>isolation: worktree</C></>,

88 description: <>Lists gitignored files to copy from your main repository into each new worktree. Worktrees are fresh checkouts, so untracked files like <C>.env</C> are missing by default. Patterns here use <C>.gitignore</C> syntax. Only files that match a pattern and are also gitignored get copied, so tracked files are never duplicated.</>,

89 tips: [<>Lives at the project root, not inside <C>.claude/</C></>, <>Git-only: if you configure a <A href="/en/hooks#worktreecreate">WorktreeCreate hook</A> for a different VCS, this file is not read. Copy files inside your hook script instead</>, <>Also applies to parallel sessions in the <A href="/en/desktop#work-in-parallel-with-sessions">desktop app</A></>],

90 exampleIntro: 'This example copies your local environment files and a secrets config into every worktree Claude creates. Comments start with # and blank lines are ignored, same as .gitignore.',

91 example: `# Local environment

92.env

93.env.local

94 

95# API credentials

96config/secrets.json`,

97 docsLink: '/en/worktrees#copy-gitignored-files-into-worktrees'

98 }, {

99 id: 'dot-claude',

100 label: '.claude/',

101 type: 'folder',

102 icon: 'folder',

103 color: 'var(--ce-accent)',

104 oneLiner: 'Project-level configuration, rules, and extensions',

105 description: 'Everything Claude Code reads that is specific to this project. If you use git, commit most files here so your team shares them; a few, like settings.local.json, are automatically gitignored. Each file badge shows which.',

106 children: [{

107 id: 'settings-json',

108 label: 'settings.json',

109 type: 'file',

110 icon: 'json',

111 color: 'var(--ce-text-3)',

112 badge: 'committed',

113 oneLiner: 'Permissions, hooks, and configuration',

114 when: <>Overrides global <C>~/.claude/settings.json</C>. Local settings, CLI flags, and managed settings override this</>,

115 description: 'Settings that Claude Code applies directly. Permissions control which commands and tools Claude can use; hooks run your scripts at specific points in a session. Unlike CLAUDE.md, which Claude reads as guidance, these are enforced whether Claude follows them or not.',

116 contains: [<><A href="/en/permissions">permissions</A>: allow, deny, or prompt before Claude uses specific tools or commands</>, <><A href="/en/hooks">hooks</A>: run your own scripts on events like before a tool call or after a file edit</>, <><A href="/en/statusline">statusLine</A>: customize the line shown at the bottom while Claude works</>, <><A href="/en/settings#available-settings">model</A>: pick a default model for this project</>, <><A href="/en/settings#environment-variables">env</A>: environment variables set in every session</>, <><A href="/en/output-styles">outputStyle</A>: select a custom system-prompt style from output-styles/</>],

117 tips: [<>Bash permission patterns support wildcards: <C>Bash(npm test *)</C> matches any command starting with <C>npm test</C></>, <>Array settings like <C>permissions.allow</C> combine across all scopes; scalar settings like <C>model</C> use the most specific value</>],

118 exampleIntro: <>This example allows <C>npm test</C> and <C>npm run</C> commands without prompting, blocks <C>rm -rf</C>, and runs Prettier on files after Claude edits or writes them.</>,

119 example: `{

120 "permissions": {

121 "allow": [

122 "Bash(npm test *)",

123 "Bash(npm run *)"

124 ],

125 "deny": [

126 "Bash(rm -rf *)"

127 ]

128 },

129 "hooks": {

130 "PostToolUse": [{

131 "matcher": "Edit|Write",

132 "hooks": [{

133 "type": "command",

134 "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"

135 }]

136 }]

137 }

138}`,

139 docsLink: '/en/settings'

140 }, {

141 id: 'settings-local-json',

142 label: 'settings.local.json',

143 type: 'file',

144 icon: 'json',

145 color: 'var(--ce-text-3)',

146 badge: 'gitignored',

147 oneLiner: 'Your personal settings overrides for this project',

148 when: 'Highest of the user-editable settings files; CLI flags and managed settings still take precedence',

149 description: 'Personal settings that take precedence over the project defaults. Same JSON format as settings.json, but not committed. Use this when you need different permissions or defaults than the team config.',

150 tips: [<>Same schema as settings.json. Array settings like <C>permissions.allow</C> combine across scopes; scalar settings like <C>model</C> use the local value</>, <>Claude Code adds this file to <C>~/.config/git/ignore</C> the first time it writes one. If you use a custom <C>core.excludesFile</C>, add the pattern there too. To share the ignore rule with your team, also add it to the project <C>.gitignore</C></>],

151 exampleIntro: 'This example adds Docker permissions on top of whatever the team settings.json allows.',

152 example: `{

153 "permissions": {

154 "allow": [

155 "Bash(docker *)"

156 ]

157 }

158}`,

159 docsLink: '/en/settings'

160 }, {

161 id: 'rules',

162 label: 'rules/',

163 type: 'folder',

164 icon: 'folder',

165 color: '#9B7BC4',

166 oneLiner: 'Topic-scoped instructions, optionally gated by file paths',

167 when: <>Rules without <C>paths:</C> load at session start. Rules with <C>paths:</C> load when a matching file enters context</>,

168 description: [<>Project instructions split into topic files that can load conditionally based on file paths. A rule without <C>paths:</C> frontmatter loads at session start like CLAUDE.md; a rule with <C>paths:</C> loads only when Claude reads a matching file.</>, <>Like CLAUDE.md, rules are guidance Claude reads, not configuration Claude Code enforces. For guaranteed behavior use <A href="/en/hooks">hooks</A> or <A href="/en/permissions">permissions</A>.</>],

169 tips: [<>Use <C>paths:</C> frontmatter with globs to scope rules to directories or file types</>, <>Subdirectories work: <C>.claude/rules/frontend/react.md</C> is discovered automatically</>, 'When CLAUDE.md approaches 200 lines, start splitting into rules'],

170 docsLink: '/en/memory#organize-rules-with-claude/rules/',

171 children: [{

172 id: 'rule-testing',

173 label: 'testing.md',

174 type: 'file',

175 icon: 'md',

176 color: '#9B7BC4',

177 badge: 'committed',

178 oneLiner: 'Test conventions scoped to test files',

179 when: <>Loaded when Claude reads a file matching the <C>paths:</C> globs below</>,

180 description: <>An example rule that only loads when Claude is working on test files. The <C>paths:</C> globs in the frontmatter define which files trigger it; here, anything ending in .test.ts or .test.tsx. For other files, this rule is not loaded into context.</>,

181 example: `---

182paths:

183 - "**/*.test.ts"

184 - "**/*.test.tsx"

185---

186 

187# Testing Rules

188 

189- Use descriptive test names: "should [expected] when [condition]"

190- Mock external dependencies, not internal modules

191- Clean up side effects in afterEach`

192 }, {

193 id: 'rule-api',

194 label: 'api-design.md',

195 type: 'file',

196 icon: 'md',

197 color: '#9B7BC4',

198 badge: 'committed',

199 oneLiner: 'API conventions scoped to backend code',

200 when: <>Loaded when Claude reads a file matching the <C>paths:</C> glob below</>,

201 description: <>A second example showing a rule scoped to backend code. The <C>paths:</C> glob matches files under src/api/, so these conventions load only when Claude is editing API routes.</>,

202 example: `---

203paths:

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

205---

206 

207# API Design Rules

208 

209- All endpoints must validate input with Zod schemas

210- Return shape: { data: T } | { error: string }

211- Rate limit all public endpoints`

212 }]

213 }, {

214 id: 'skills',

215 label: 'skills/',

216 type: 'folder',

217 icon: 'folder',

218 color: '#D4A843',

219 oneLiner: 'Reusable prompts you or Claude invoke by name',

220 when: <>Invoked with <C>/skill-name</C> or when Claude matches the task to a skill</>,

221 description: <>Each skill is a folder with a SKILL.md file plus any supporting files it needs. By default, both you and Claude can invoke a skill. Use frontmatter to control that: <C>disable-model-invocation: true</C> for user-only workflows like <C>/deploy</C>, or <C>user-invocable: false</C> to hide from the <C>/</C> menu while Claude can still invoke it.</>,

222 tips: [<>Skills accept arguments: <C>/deploy staging</C> passes "staging" as <C>$ARGUMENTS</C>. Use <C>$0</C>, <C>$1</C>, and so on for positional access</>, <>The <C>description</C> frontmatter determines when Claude auto-invokes the skill</>, 'Bundle reference docs alongside SKILL.md. Claude knows the skill directory path and can read supporting files when you mention them'],

223 docsLink: '/en/skills',

224 children: [{

225 id: 'skill-review',

226 label: 'security-review/',

227 type: 'folder',

228 icon: 'folder',

229 color: '#D4A843',

230 oneLiner: 'A skill bundling SKILL.md with supporting files',

231 children: [{

232 id: 'skill-review-md',

233 label: 'SKILL.md',

234 type: 'file',

235 icon: 'md',

236 color: '#D4A843',

237 badge: 'committed',

238 oneLiner: 'Entrypoint: trigger, invocability, instructions',

239 when: <>User types <C>/security-review &lt;target&gt;</C>; Claude cannot auto-invoke this skill</>,

240 description: [<>This skill uses <C>disable-model-invocation: true</C> so only you can trigger it; Claude never invokes it on its own.</>, <>The <C>!`...`</C> line runs a shell command and injects its output into the prompt. <C>$ARGUMENTS</C> substitutes whatever you typed after the skill name. Claude sees the skill directory path, so mentioning a bundled file like checklist.md lets Claude read it.</>],

241 example: `---

242description: Reviews code changes for security vulnerabilities, authentication gaps, and injection risks

243disable-model-invocation: true

244argument-hint: <branch-or-path>

245---

246 

247## Diff to review

248 

249!\`git diff $ARGUMENTS\`

250 

251Audit the changes above for:

252 

2531. Injection vulnerabilities (SQL, XSS, command)

2542. Authentication and authorization gaps

2553. Hardcoded secrets or credentials

256 

257Use checklist.md in this skill directory for the full review checklist.

258 

259Report findings with severity ratings and remediation steps.`

260 }, {

261 id: 'skill-checklist',

262 label: 'checklist.md',

263 type: 'file',

264 icon: 'md',

265 color: '#D4A843',

266 badge: 'committed',

267 oneLiner: 'Supporting file bundled with the skill',

268 when: 'Claude reads it on demand while running the skill',

269 description: <>Skills can bundle any supporting files: reference docs, templates, scripts. The skill directory path is prepended to SKILL.md, so Claude can read bundled files by name. For scripts in bash injection commands, use the <C>{'${CLAUDE_SKILL_DIR}'}</C> placeholder.</>,

270 example: `# Security Review Checklist

271 

272## Input Validation

273- [ ] All user input sanitized before DB queries

274- [ ] File upload MIME types validated

275- [ ] Path traversal prevented on file operations

276 

277## Authentication

278- [ ] JWT tokens expire after 24 hours

279- [ ] API keys stored in environment variables

280- [ ] Passwords hashed with bcrypt or argon2`

281 }]

282 }]

283 }, {

284 id: 'commands',

285 label: 'commands/',

286 type: 'folder',

287 icon: 'folder',

288 color: '#788C5D',

289 oneLiner: <>Single-file prompts invoked with <C>/name</C></>,

290 note: commandsNote,

291 when: <>User types <C>/command-name</C></>,

292 description: <>A file at <C>commands/deploy.md</C> creates <C>/deploy</C> the same way a skill at <C>skills/deploy/SKILL.md</C> does, and both can be auto-invoked by Claude. Skills use a directory with SKILL.md, letting you bundle reference docs, templates, or scripts alongside the prompt.</>,

293 tips: [<>Use <C>$ARGUMENTS</C> in the file to accept parameters: <C>/fix-issue 123</C></>, 'If a skill and command share a name, the skill takes precedence', 'New commands should usually be skills instead; commands remain supported'],

294 docsLink: '/en/skills',

295 children: [{

296 id: 'cmd-example',

297 label: 'fix-issue.md',

298 type: 'file',

299 icon: 'md',

300 color: '#788C5D',

301 badge: 'committed',

302 oneLiner: <>Invoked as <C>/fix-issue &lt;number&gt;</C></>,

303 note: commandsNote,

304 description: [<>An example command for fixing a GitHub issue. Type <C>/fix-issue 123</C> and the <C>!`...`</C> line runs <C>gh issue view 123</C> in your shell, injecting the output into the prompt before Claude sees it.</>, <><C>$ARGUMENTS</C> substitutes whatever you typed after the command name. For positional access, use <C>$0</C> <C>$1</C> and so on.</>],

305 example: `---

306argument-hint: <issue-number>

307---

308 

309!\`gh issue view $ARGUMENTS\`

310 

311Investigate and fix the issue above.

312 

3131. Trace the bug to its root cause

3142. Implement the fix

3153. Write or update tests

3164. Summarize what you changed and why`

317 }]

318 }, {

319 id: 'output-styles',

320 label: 'output-styles/',

321 type: 'folder',

322 icon: 'folder',

323 color: '#5AA7A7',

324 oneLiner: 'Project-scoped output styles, if your team shares any',

325 when: 'Applied at session start when selected via the outputStyle setting',

326 description: <>Output styles are usually personal, so most live in <C>~/.claude/output-styles/</C>. Put one here if your team shares a style, like a review mode everyone uses. See <A href="#ce-global-output-styles">the Global tab</A> for the full explanation and example.</>,

327 docsLink: '/en/output-styles',

328 children: []

329 }, {

330 id: 'agents',

331 label: 'agents/',

332 type: 'folder',

333 icon: 'folder',

334 color: '#C46686',

335 oneLiner: 'Specialized subagents with their own context window',

336 when: 'Runs in its own context window when you or Claude invoke it',

337 description: 'Each markdown file defines a subagent with its own system prompt, tool access, and optionally its own model. Subagents run in a fresh context window, keeping the main conversation clean. Useful for parallel work or isolated tasks.',

338 tips: ['Each agent gets a fresh context window, separate from your main session', <>Restrict tool access per agent with the <C>tools:</C> frontmatter field</>, 'Type @ and pick an agent from the autocomplete to delegate directly'],

339 docsLink: '/en/sub-agents',

340 children: [{

341 id: 'agent-reviewer',

342 label: 'code-reviewer.md',

343 type: 'file',

344 icon: 'md',

345 color: '#C46686',

346 badge: 'committed',

347 oneLiner: 'Subagent for isolated code review',

348 when: 'Claude spawns it for review tasks, or you @-mention it from the autocomplete',

349 description: <>An example subagent restricted to read-only tools. The <C>description</C> frontmatter tells Claude when to delegate to it automatically; <C>tools:</C> limits it to Read, Grep, and Glob so it can inspect code but never edit. The body becomes the subagent's system prompt.</>,

350 example: `---

351name: code-reviewer

352description: Reviews code for correctness, security, and maintainability

353tools: Read, Grep, Glob

354---

355 

356You are a senior code reviewer. Review for:

357 

3581. Correctness: logic errors, edge cases, null handling

3592. Security: injection, auth bypass, data exposure

3603. Maintainability: naming, complexity, duplication

361 

362Every finding must include a concrete fix.`

363 }]

364 }, {

365 id: 'agent-memory',

366 label: 'agent-memory/',

367 type: 'folder',

368 icon: 'folder',

369 color: '#C46686',

370 badge: 'committed',

371 autogen: true,

372 oneLiner: 'Subagent persistent memory, separate from your main session auto memory',

373 when: 'First 200 lines (capped at 25KB) of MEMORY.md loaded into the subagent system prompt when it runs',

374 description: <>Subagents with <C>memory: project</C> in their frontmatter get a dedicated memory directory here. This is distinct from your <A href="/en/memory#auto-memory">main session auto memory</A> at <C>~/.claude/projects/</C>: each subagent reads and writes its own MEMORY.md, not yours.</>,

375 tips: [<>Only created for subagents that set the <C>memory:</C> frontmatter field</>, <>This directory holds project-scoped subagent memory, meant to be shared with your team. To keep memory out of version control use <C>memory: local</C>, which writes to <C>.claude/agent-memory-local/</C> instead. For cross-project memory use <C>memory: user</C>, which writes to <C>~/.claude/agent-memory/</C></>, <>The main session auto memory is a different feature; see <C>~/.claude/projects/</C> in the Global tab</>],

376 docsLink: '/en/sub-agents#enable-persistent-memory',

377 children: [{

378 id: 'agent-memory-sub',

379 label: '<agent-name>/',

380 type: 'folder',

381 icon: 'folder',

382 color: '#C46686',

383 autogen: true,

384 children: [{

385 id: 'agent-memory-md',

386 label: 'MEMORY.md',

387 type: 'file',

388 icon: 'md',

389 color: '#C46686',

390 badge: 'committed',

391 autogen: true,

392 oneLiner: 'The subagent writes and maintains this file automatically',

393 when: 'Loaded into the subagent system prompt when the subagent starts',

394 description: <>Works the same as your <A href="/en/memory#auto-memory">main auto memory</A>: the subagent creates and updates this file itself. You do not write it. The subagent reads it at the start of each task and writes back what it learns.</>,

395 example: `# code-reviewer memory

396 

397## Patterns seen

398- Project uses custom Result<T, E> type, not exceptions

399- Auth middleware expects Bearer token in Authorization header

400- Tests use factory functions in test/factories/

401 

402## Recurring issues

403- Missing null checks on API responses (src/api/*)

404- Unhandled promise rejections in background jobs`

405 }]

406 }]

407 }]

408 }]

409 },

410 global: {

411 label: '~/',

412 children: [{

413 id: 'claude-json',

414 label: '.claude.json',

415 type: 'file',

416 icon: 'json',

417 color: 'var(--ce-text-3)',

418 badge: 'local',

419 oneLiner: 'App state and UI preferences',

420 when: <>Read at session start for your preferences and MCP servers. Claude Code writes back to it when you change settings in <C>/config</C> or approve trust prompts</>,

421 description: <>Holds state that does not belong in settings.json: theme, OAuth session, per-project trust decisions, your personal MCP servers, and UI toggles. Mostly managed through <C>/config</C> rather than editing directly.</>,

422 tips: [<>IDE toggles like <C>autoConnectIde</C> and <C>externalEditorContext</C> live here, not in settings.json</>, <>The <C>projects</C> key tracks per-project state like trust-dialog acceptance and last-session metrics. Permission rules you approve in-session go to <C>.claude/settings.local.json</C> instead</>, <>MCP servers here are yours only: user scope applies across all projects, local scope is per-project but not committed. Team-shared servers go in <C>.mcp.json</C> at the project root instead</>],

423 example: `{

424 "autoConnectIde": true,

425 "externalEditorContext": true,

426 "mcpServers": {

427 "my-tools": {

428 "command": "npx",

429 "args": ["-y", "@example/mcp-server"]

430 }

431 }

432}`,

433 docsLink: '/en/settings#global-config-settings'

434 }, {

435 id: 'global-dot-claude',

436 label: '.claude/',

437 type: 'folder',

438 icon: 'folder',

439 color: 'var(--ce-accent)',

440 oneLiner: 'Your personal configuration across all projects',

441 description: 'The global counterpart to your project .claude/ directory. Files here apply to every project you work in and are never committed to any repository.',

442 children: [{

443 id: 'global-claude-md',

444 label: 'CLAUDE.md',

445 type: 'file',

446 icon: 'md',

447 color: '#6A9BCC',

448 badge: 'local',

449 oneLiner: 'Personal preferences across every project',

450 when: 'Loaded at the start of every session, in every project',

451 description: 'Your global instruction file. Loaded alongside the project CLAUDE.md at session start, so both are in context together. When instructions conflict, project-level instructions take priority. Keep this to preferences that apply everywhere: response style, commit format, personal conventions.',

452 tips: ['Keep it short since it loads into context for every project, alongside that project\'s own CLAUDE.md', 'Good for response style, commit format, and personal conventions'],

453 example: `# Global preferences

454 

455- Keep explanations concise

456- Use conventional commit format

457- Show the terminal command to verify changes

458- Prefer composition over inheritance`,

459 docsLink: '/en/memory'

460 }, {

461 id: 'global-settings',

462 label: 'settings.json',

463 type: 'file',

464 icon: 'json',

465 color: 'var(--ce-text-3)',

466 badge: 'local',

467 oneLiner: 'Default settings for all projects',

468 when: 'Your defaults. Project and local settings.json override any keys you also set there',

469 description: [<>Same keys as project <C>settings.json</C>: permissions, hooks, model, environment variables, and the rest. Put settings here that you want in every project, like permissions you always allow, a preferred model, or a notification hook that runs regardless of which project you're in.</>, <>Settings follow a precedence order: project <C>settings.json</C> overrides any matching keys you set here. This is different from CLAUDE.md, where global and project files are both loaded into context rather than merged key by key.</>],

470 example: `{

471 "permissions": {

472 "allow": [

473 "Bash(git log *)",

474 "Bash(git diff *)"

475 ]

476 }

477}`,

478 docsLink: '/en/settings'

479 }, {

480 id: 'keybindings',

481 label: 'keybindings.json',

482 type: 'file',

483 icon: 'json',

484 color: 'var(--ce-text-3)',

485 badge: 'local',

486 oneLiner: 'Custom keyboard shortcuts',

487 when: 'Read at session start and hot-reloaded when you edit the file',

488 description: <>Rebind keyboard shortcuts in the interactive CLI. Run <C>/keybindings</C> to create or open this file with a schema reference. Ctrl+C, Ctrl+D, Ctrl+M, and Caps Lock are reserved and cannot be rebound.</>,

489 exampleIntro: <>This example binds <C>Ctrl+E</C> to open your external editor and unbinds <C>Ctrl+U</C> by setting it to <C>null</C>. The <C>context</C> field scopes bindings to a specific part of the CLI, here the main chat input.</>,

490 example: `{

491 "$schema": "https://www.schemastore.org/claude-code-keybindings.json",

492 "$docs": "https://code.claude.com/docs/en/keybindings",

493 "bindings": [

494 {

495 "context": "Chat",

496 "bindings": {

497 "ctrl+e": "chat:externalEditor",

498 "ctrl+u": null

499 }

500 }

501 ]

502}`,

503 docsLink: '/en/keybindings'

504 }, {

505 id: 'themes',

506 label: 'themes/',

507 type: 'folder',

508 icon: 'folder',

509 color: '#5AA7A7',

510 oneLiner: 'Custom color themes',

511 when: <>Read at session start and hot-reloaded when files change. Listed in <C>/theme</C></>,

512 description: <>Each <C>.json</C> file defines a custom color theme: a built-in <C>base</C> preset plus an <C>overrides</C> map of color tokens. Create one interactively with <C>/theme</C> or write the JSON by hand. Selecting a custom theme stores <C>custom:&lt;slug&gt;</C> as your theme preference.</>,

513 example: `{

514 "name": "Dracula",

515 "base": "dark",

516 "overrides": {

517 "claude": "#bd93f9",

518 "error": "#ff5555",

519 "success": "#50fa7b"

520 }

521}`,

522 docsLink: '/en/terminal-config#create-a-custom-theme',

523 children: []

524 }, {

525 id: 'global-projects',

526 label: 'projects/',

527 type: 'folder',

528 icon: 'folder',

529 color: '#E8A45C',

530 autogen: true,

531 oneLiner: "Auto memory: Claude's notes to itself, per project",

532 when: 'MEMORY.md loaded at session start; topic files read on demand',

533 description: 'Auto memory lets Claude accumulate knowledge across sessions without you writing anything. Claude saves notes as it works: build commands, debugging insights, architecture notes. Each project gets its own memory directory keyed by the repository path.',

534 tips: [<>On by default. Toggle with <C>/memory</C> or <C>autoMemoryEnabled</C> in settings</>, 'MEMORY.md is the index loaded each session. The first 200 lines, or 25KB, whichever comes first, are read', 'Topic files like debugging.md are read on demand, not at startup', 'These are plain markdown. Edit or delete them anytime'],

535 docsLink: '/en/memory#auto-memory',

536 children: [{

537 id: 'memory-dir',

538 label: '<project>/memory/',

539 type: 'folder',

540 icon: 'folder',

541 color: '#E8A45C',

542 autogen: true,

543 oneLiner: "Claude's accumulated knowledge for one project",

544 children: [{

545 id: 'memory-md',

546 label: 'MEMORY.md',

547 type: 'file',

548 icon: 'md',

549 color: '#E8A45C',

550 badge: 'local',

551 autogen: true,

552 oneLiner: 'Claude writes and maintains this file automatically',

553 when: 'First 200 lines (capped at 25KB) loaded at session start',

554 description: 'Claude creates and updates this file as it works; you do not write it yourself. It acts as an index that Claude reads at the start of every session, pointing to topic files for detail. You can edit or delete it, but Claude will keep updating it.',

555 example: `# Memory Index

556 

557## Project

558- [build-and-test.md](build-and-test.md): npm run build (~45s), Vitest, dev server on 3001

559- [architecture.md](architecture.md): API client singleton, refresh-token auth

560 

561## Reference

562- [debugging.md](debugging.md): auth token rotation and DB connection troubleshooting`,

563 docsLink: '/en/memory'

564 }, {

565 id: 'memory-topic',

566 label: 'debugging.md',

567 type: 'file',

568 icon: 'md',

569 color: '#E8A45C',

570 badge: 'local',

571 autogen: true,

572 oneLiner: 'Topic notes Claude writes when MEMORY.md gets long',

573 when: 'Claude reads this when a related task comes up',

574 description: 'An example of a topic file Claude creates when MEMORY.md grows too long. Claude picks the filename based on what it splits out: debugging.md, architecture.md, build-commands.md, or similar. You never create these yourself. Claude reads a topic file back only when the current task relates to it.',

575 example: `---

576name: Debugging patterns

577description: Auth token rotation and database connection troubleshooting for this project

578type: reference

579---

580 

581## Auth Token Issues

582- Refresh token rotation: old token invalidated immediately

583- If 401 after refresh: check clock skew between client and server

584 

585## Database Connection Drops

586- Connection pool: max 10 in dev, 50 in prod

587- Always check \`docker compose ps\` first`

588 }]

589 }]

590 }, {

591 id: 'global-rules',

592 label: 'rules/',

593 type: 'folder',

594 icon: 'folder',

595 color: '#9B7BC4',

596 oneLiner: 'User-level rules that apply to every project',

597 when: <>Rules without <C>paths:</C> load at session start. Rules with <C>paths:</C> load when a matching file enters context</>,

598 description: 'Same as project .claude/rules/ but applies everywhere. Use this for conventions you want across all your work, like personal code style or commit message format.',

599 docsLink: '/en/memory#organize-rules-with-claude/rules/',

600 children: []

601 }, {

602 id: 'global-skills',

603 label: 'skills/',

604 type: 'folder',

605 icon: 'folder',

606 color: '#D4A843',

607 oneLiner: 'Personal skills available in every project',

608 when: <>Invoked with <C>/skill-name</C> in any project</>,

609 description: 'Skills you built for yourself that work everywhere. Same structure as project skills: each is a folder with SKILL.md, scoped to your user account instead of a single project.',

610 docsLink: '/en/skills',

611 children: []

612 }, {

613 id: 'global-commands',

614 label: 'commands/',

615 type: 'folder',

616 icon: 'folder',

617 color: '#788C5D',

618 oneLiner: 'Personal single-file commands available in every project',

619 note: commandsNote,

620 when: <>User types <C>/command-name</C> in any project</>,

621 description: 'Same as project commands/ but scoped to your user account. Each markdown file becomes a command available everywhere.',

622 docsLink: '/en/skills',

623 children: []

624 }, {

625 id: 'global-output-styles',

626 label: 'output-styles/',

627 type: 'folder',

628 icon: 'folder',

629 color: '#5AA7A7',

630 oneLiner: 'Custom system-prompt sections that adjust how Claude works',

631 when: 'Applied at session start when selected via the outputStyle setting',

632 description: [<>Each markdown file defines an output style: a section appended to the system prompt that, by default, also drops the built-in software-engineering task instructions. Use this to adapt Claude Code for uses beyond coding, or to add teaching or review modes.</>, <>Select a built-in or custom style with <C>/config</C> or the <C>outputStyle</C> key in settings. Styles here are available in every project; project-level styles with the same name take precedence.</>],

633 tips: ['Built-in styles Explanatory and Learning are included with Claude Code; custom styles go here', <>Set <C>keep-coding-instructions: true</C> in frontmatter to keep the default task instructions alongside your additions</>, 'Changes take effect on the next session since the system prompt is fixed at startup for caching'],

634 docsLink: '/en/output-styles',

635 children: [{

636 id: 'output-style-example',

637 label: 'teaching.md',

638 type: 'file',

639 icon: 'md',

640 color: '#5AA7A7',

641 badge: 'local',

642 oneLiner: 'Example style that adds explanations and leaves small changes for you',

643 when: <>Active when <C>outputStyle</C> in settings is set to <C>teaching</C></>,

644 description: <>This style appends instructions to the system prompt: Claude adds a "Why this approach" note after each task and leaves TODO(human) markers for changes under 10 lines instead of writing them itself. Select it by setting <C>outputStyle</C> to the filename without .md, or to the <C>name</C> field if you set one in frontmatter.</>,

645 example: `---

646description: Explains reasoning and asks you to implement small pieces

647keep-coding-instructions: true

648---

649 

650After completing each task, add a brief "Why this approach" note

651explaining the key design decision.

652 

653When a change is under 10 lines, ask the user to implement it

654themselves by leaving a TODO(human) marker instead of writing it.`

655 }]

656 }, {

657 id: 'global-agents',

658 label: 'agents/',

659 type: 'folder',

660 icon: 'folder',

661 color: '#C46686',

662 oneLiner: 'Personal subagents available in every project',

663 when: 'Claude delegates or you @-mention in any project',

664 description: 'Subagents defined here are available across all your projects. Same format as project agents.',

665 docsLink: '/en/sub-agents',

666 children: []

667 }, {

668 id: 'global-agent-memory',

669 label: 'agent-memory/',

670 type: 'folder',

671 icon: 'folder',

672 color: '#C46686',

673 autogen: true,

674 oneLiner: <>Persistent memory for subagents with <C>memory: user</C></>,

675 when: 'Loaded into the subagent system prompt when the subagent starts',

676 description: <>Subagents with <C>memory: user</C> in their frontmatter store knowledge here that persists across all projects. For project-scoped subagent memory, see <C>.claude/agent-memory/</C> instead.</>,

677 docsLink: '/en/sub-agents#enable-persistent-memory',

678 children: []

679 }]

680 }]

681 }

682 }), []);

683 const BADGE_STYLES = useMemo(() => ({

684 committed: {

685 bg: 'rgba(85,138,66,0.08)',

686 color: 'var(--ce-badge-committed)',

687 border: 'rgba(85,138,66,0.15)',

688 label: 'committed'

689 },

690 gitignored: {

691 bg: 'rgba(217,119,87,0.06)',

692 color: 'var(--ce-badge-gitignored)',

693 border: 'rgba(217,119,87,0.15)',

694 label: 'gitignored'

695 },

696 local: {

697 bg: 'rgba(115,114,108,0.06)',

698 color: 'var(--ce-badge-local)',

699 border: 'rgba(115,114,108,0.12)',

700 label: 'local only'

701 },

702 autogen: {

703 bg: 'rgba(232,164,92,0.1)',

704 color: 'var(--ce-badge-autogen)',

705 border: 'rgba(232,164,92,0.2)',

706 label: 'Claude writes'

707 }

708 }), []);

709 const allNodes = useMemo(() => {

710 const flatten = (nodes, acc, path, parentId) => {

711 for (const node of nodes) {

712 const nextPath = [...path, node.label];

713 acc[node.id] = {

714 ...node,

715 path: nextPath,

716 parentId

717 };

718 if (node.children) flatten(node.children, acc, nextPath, node.id);

719 }

720 return acc;

721 };

722 const project = flatten(FILE_TREE.project.children, {}, [FILE_TREE.project.label]);

723 const global = flatten(FILE_TREE.global.children, {}, [FILE_TREE.global.label]);

724 for (const id in project) project[id].root = 'project';

725 for (const id in global) global[id].root = 'global';

726 return {

727 ...project,

728 ...global

729 };

730 }, [FILE_TREE]);

731 const allFolderIds = useMemo(() => Object.keys(allNodes).filter(id => allNodes[id].type === 'folder'), [allNodes]);

732 const DEFAULT_EXPANDED = ['dot-claude', 'rules', 'skills', 'skill-review', 'commands', 'agents', 'agent-memory', 'agent-memory-sub', 'global-dot-claude', 'global-output-styles', 'global-projects', 'memory-dir'];

733 const [mounted, setMounted] = useState(false);

734 const [activeRoot, setActiveRoot] = useState('project');

735 const [selectedId, setSelectedId] = useState('claude-md');

736 const [expandedFolders, setExpandedFolders] = useState(() => new Set(DEFAULT_EXPANDED));

737 const [forceMobile, setForceMobile] = useState(false);

738 const [copiedId, setCopiedId] = useState(null);

739 const [isFullscreen, setIsFullscreen] = useState(false);

740 const copyTimeoutRef = useRef(null);

741 const rootRef = useRef(null);

742 useEffect(() => {

743 setMounted(true);

744 const applyHash = scroll => {

745 const hash = window.location.hash.slice(1);

746 if (!hash.startsWith('ce-')) return;

747 const id = hash.slice(3);

748 const node = allNodes[id];

749 if (!node) return;

750 setActiveRoot(node.root);

751 setSelectedId(id);

752 setExpandedFolders(new Set(allFolderIds));

753 if (scroll && rootRef.current) rootRef.current.scrollIntoView({

754 behavior: 'smooth',

755 block: 'start'

756 });

757 };

758 applyHash(false);

759 const onHashChange = () => applyHash(true);

760 const onFsChange = () => setIsFullscreen(!!document.fullscreenElement);

761 window.addEventListener('hashchange', onHashChange);

762 document.addEventListener('fullscreenchange', onFsChange);

763 return () => {

764 if (copyTimeoutRef.current) clearTimeout(copyTimeoutRef.current);

765 window.removeEventListener('hashchange', onHashChange);

766 document.removeEventListener('fullscreenchange', onFsChange);

767 };

768 }, []);

769 useEffect(() => {

770 if (!mounted || !rootRef.current) return;

771 const hash = window.location.hash.slice(1);

772 if (hash.startsWith('ce-') && allNodes[hash.slice(3)]) {

773 rootRef.current.scrollIntoView({

774 behavior: 'smooth',

775 block: 'start'

776 });

777 }

778 }, [mounted]);

779 if (!mounted) return null;

780 const selected = allNodes[selectedId];

781 const tree = FILE_TREE[activeRoot];

782 const isCopied = copiedId === selected.id;

783 const toggleFolder = id => {

784 const next = new Set(expandedFolders);

785 next.has(id) ? next.delete(id) : next.add(id);

786 setExpandedFolders(next);

787 };

788 const switchRoot = root => {

789 if (root === activeRoot) return;

790 setActiveRoot(root);

791 const firstId = FILE_TREE[root].children[0].id;

792 setSelectedId(firstId);

793 try {

794 history.replaceState(null, '', '#ce-' + firstId);

795 } catch (e) {}

796 };

797 const toggleFullscreen = () => {

798 if (!rootRef.current) return;

799 if (document.fullscreenElement) document.exitFullscreen(); else rootRef.current.requestFullscreen().catch(() => {});

800 };

801 const selectNode = n => {

802 setSelectedId(n.id);

803 if (n.type === 'folder' && !expandedFolders.has(n.id)) toggleFolder(n.id);

804 try {

805 history.replaceState(null, '', '#ce-' + n.id);

806 } catch (e) {}

807 };

808 const iconBtn = {

809 width: 28,

810 flexShrink: 0,

811 borderRadius: '6px',

812 border: 'none',

813 cursor: 'pointer',

814 background: 'transparent',

815 color: 'var(--ce-text-4)',

816 display: 'flex',

817 alignItems: 'center',

818 justifyContent: 'center'

819 };

820 const visibleFolderIds = allFolderIds.filter(id => allNodes[id].root === activeRoot);

821 const allExpanded = visibleFolderIds.every(id => expandedFolders.has(id));

822 const toggleAllFolders = () => {

823 const next = new Set(expandedFolders);

824 visibleFolderIds.forEach(id => allExpanded ? next.delete(id) : next.add(id));

825 setExpandedFolders(next);

826 };

827 const onTreeKeyDown = e => {

828 if (!['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft'].includes(e.key)) return;

829 const visible = [];

830 const walk = nodes => {

831 for (const n of nodes) {

832 visible.push(n.id);

833 if (n.children && expandedFolders.has(n.id)) walk(n.children);

834 }

835 };

836 walk(tree.children);

837 const i = visible.indexOf(selectedId);

838 if (i === -1) return;

839 e.preventDefault();

840 if (e.key === 'ArrowDown' && i < visible.length - 1) selectNode(allNodes[visible[i + 1]]); else if (e.key === 'ArrowUp' && i > 0) selectNode(allNodes[visible[i - 1]]); else if (e.key === 'ArrowRight' && selected.type === 'folder') {

841 if (!expandedFolders.has(selectedId)) toggleFolder(selectedId); else if (selected.children && selected.children.length) selectNode(allNodes[selected.children[0].id]);

842 } else if (e.key === 'ArrowLeft') {

843 if (selected.type === 'folder' && expandedFolders.has(selectedId)) toggleFolder(selectedId); else if (selected.parentId) selectNode(allNodes[selected.parentId]);

844 }

845 };

846 const copyExample = (id, text) => {

847 const done = () => {

848 setCopiedId(id);

849 if (copyTimeoutRef.current) clearTimeout(copyTimeoutRef.current);

850 copyTimeoutRef.current = setTimeout(() => setCopiedId(null), 2000);

851 };

852 const fallback = () => {

853 const ta = document.createElement('textarea');

854 ta.value = text;

855 ta.style.position = 'fixed';

856 ta.style.opacity = '0';

857 document.body.appendChild(ta);

858 ta.select();

859 try {

860 if (document.execCommand('copy')) done();

861 } catch (e) {}

862 document.body.removeChild(ta);

863 };

864 if (navigator.clipboard) {

865 navigator.clipboard.writeText(text).then(done, fallback);

866 } else {

867 fallback();

868 }

869 };

870 const renderIcon = (icon, color, size) => {

871 const sz = size || 14;

872 if (icon === 'folder') {

873 return <svg width={sz} height={sz} viewBox="0 0 14 14" fill="none">

874 <path d="M1.5 3.5a1 1 0 0 1 1-1h2.6l1 1.2h5.4a1 1 0 0 1 1 1v5.8a1 1 0 0 1-1 1h-9a1 1 0 0 1-1-1V3.5z" fill={color} fillOpacity="0.15" stroke={color} strokeWidth="1" />

875 </svg>;

876 }

877 if (icon === 'json') {

878 return <svg width={sz} height={sz} viewBox="0 0 14 14" fill="none">

879 <rect x="2" y="1.5" width="10" height="11" rx="1.5" fill={color} fillOpacity="0.15" stroke={color} strokeWidth="1" />

880 <text x="7" y="9" fontSize="6" fontFamily="monospace" fill={color} textAnchor="middle" fontWeight="700">{'{}'}</text>

881 </svg>;

882 }

883 return <svg width={sz} height={sz} viewBox="0 0 14 14" fill="none">

884 <rect x="2" y="1.5" width="10" height="11" rx="1.5" fill={color} fillOpacity="0.15" stroke={color} strokeWidth="1" />

885 <line x1="4.5" y1="5" x2="9.5" y2="5" stroke={color} strokeWidth="1" />

886 <line x1="4.5" y1="7" x2="9.5" y2="7" stroke={color} strokeWidth="1" />

887 <line x1="4.5" y1="9" x2="8" y2="9" stroke={color} strokeWidth="1" />

888 </svg>;

889 };

890 const renderNode = (node, depth) => {

891 const isFolder = node.type === 'folder';

892 const isExpanded = expandedFolders.has(node.id);

893 const isSelected = selectedId === node.id;

894 return <div key={node.id}>

895 <button role="treeitem" tabIndex={-1} onClick={() => selectNode(node)} aria-selected={isSelected} aria-expanded={isFolder ? isExpanded : undefined} style={{

896 display: 'flex',

897 alignItems: 'center',

898 gap: '5px',

899 width: '100%',

900 padding: `4px 8px 4px ${8 + depth * 16}px`,

901 background: isSelected ? 'var(--ce-accent-bg)' : 'transparent',

902 borderTop: 'none',

903 borderRight: 'none',

904 borderBottom: 'none',

905 borderLeft: isSelected ? '2px solid var(--ce-accent)' : '2px solid transparent',

906 outline: 'none',

907 cursor: 'pointer',

908 textAlign: 'left',

909 fontFamily: 'var(--ce-mono)',

910 fontSize: '13.5px',

911 color: isSelected ? 'var(--ce-accent)' : 'var(--ce-text-2)',

912 fontWeight: isSelected ? 550 : 400,

913 transition: 'all 0.1s'

914 }}>

915 {isFolder ? <span onClick={e => {

916 e.stopPropagation();

917 toggleFolder(node.id);

918 }} style={{

919 fontSize: '14px',

920 color: 'var(--ce-text-4)',

921 width: '20px',

922 height: '20px',

923 display: 'inline-flex',

924 alignItems: 'center',

925 justifyContent: 'center',

926 cursor: 'pointer',

927 borderRadius: '4px',

928 marginLeft: '-6px',

929 flexShrink: 0

930 }} onMouseEnter={e => {

931 e.currentTarget.style.background = 'var(--ce-arrow-hover)';

932 e.currentTarget.style.color = 'var(--ce-text-2)';

933 }} onMouseLeave={e => {

934 e.currentTarget.style.background = 'transparent';

935 e.currentTarget.style.color = 'var(--ce-text-4)';

936 }}>{isExpanded ? '▾' : '▸'}</span> : <span style={{

937 width: '14px',

938 flexShrink: 0

939 }} />}

940 {renderIcon(node.icon, node.color)}

941 <span style={{

942 flex: 1,

943 overflow: 'hidden',

944 textOverflow: 'ellipsis',

945 whiteSpace: 'nowrap'

946 }}>{node.label}</span>

947 {node.badge && BADGE_STYLES[node.badge] && <span title={BADGE_STYLES[node.badge].label} style={{

948 width: 6,

949 height: 6,

950 borderRadius: '50%',

951 background: BADGE_STYLES[node.badge].color,

952 flexShrink: 0,

953 opacity: 0.7

954 }} />}

955 </button>

956 {isFolder && isExpanded && node.children && <div role="group">{node.children.map(child => renderNode(child, depth + 1))}</div>}

957 </div>;

958 };

959 return <>

960 <style>{`

961 .ce-root {

962 --ce-mono: var(--font-mono, ui-monospace, monospace);

963 --ce-accent: #D97757;

964 --ce-accent-bg: rgba(217,119,87,0.06);

965 --ce-accent-border: rgba(217,119,87,0.12);

966 --ce-bg: #fff;

967 --ce-surface: #FAFAF7;

968 --ce-surface-hover: #F0EEE6;

969 --ce-border: #E8E6DC;

970 --ce-border-subtle: #F0EEE6;

971 --ce-text: #141413;

972 --ce-text-2: #5E5D59;

973 --ce-text-3: #73726C;

974 --ce-text-4: #9C9A92;

975 --ce-text-5: #B8B6AE;

976 --ce-sep: #D1CFC5;

977 --ce-code-header: #F5F4ED;

978 --ce-code-bg: #1A1918;

979 --ce-arrow-hover: rgba(0,0,0,0.08);

980 --ce-badge-committed: #3d6b2e;

981 --ce-badge-gitignored: #b85c3a;

982 --ce-badge-local: #5e5d59;

983 --ce-badge-autogen: #b07520;

984 --ce-when-text: #4a7fb5;

985 }

986 .dark .ce-root {

987 --ce-bg: #1a1918;

988 --ce-surface: #232221;

989 --ce-surface-hover: #2e2d2b;

990 --ce-border: #3a3936;

991 --ce-border-subtle: #2e2d2b;

992 --ce-text: #e8e6dc;

993 --ce-text-2: #c4c2b8;

994 --ce-text-3: #9c9a92;

995 --ce-text-4: #73726c;

996 --ce-text-5: #5e5d59;

997 --ce-sep: #4a4946;

998 --ce-code-header: #2e2d2b;

999 --ce-code-bg: #0d0d0c;

1000 --ce-arrow-hover: rgba(255,255,255,0.08);

1001 --ce-badge-committed: #6fa85c;

1002 --ce-badge-gitignored: #e08a60;

1003 --ce-badge-local: #9c9a92;

1004 --ce-badge-autogen: #e8a45c;

1005 --ce-when-text: #8bb4e0;

1006 }

1007 .ce-mobile-fallback { display: none; border: 1px solid rgba(0,0,0,0.1); background: rgba(0,0,0,0.03); }

1008 .dark .ce-mobile-fallback { border-color: rgba(255,255,255,0.15); background: rgba(255,255,255,0.04); }

1009 @media (max-width: 700px) {

1010 .ce-root:not(.ce-force) { display: none !important; }

1011 .ce-mobile-fallback { display: block; }

1012 }

1013 `}</style>

1014 {!forceMobile && <div className="ce-mobile-fallback" style={{

1015 padding: '14px 16px',

1016 borderRadius: '8px',

1017 fontSize: '14px'

1018 }}>

1019 The interactive explorer works best on a larger screen. See the <a href="#file-reference" style={{

1020 color: '#D97757'

1021 }}>file reference table</a> below, or <button onClick={() => setForceMobile(true)} style={{

1022 border: 'none',

1023 background: 'none',

1024 padding: 0,

1025 color: '#D97757',

1026 textDecoration: 'underline',

1027 cursor: 'pointer',

1028 font: 'inherit'

1029 }}>show the explorer anyway</button>.

1030 </div>}

1031 <div ref={rootRef} className={forceMobile ? 'ce-root ce-force' : 'ce-root'} style={{

1032 borderRadius: isFullscreen ? 0 : '12px',

1033 border: '1px solid var(--ce-border)',

1034 background: 'var(--ce-bg)',

1035 display: 'flex',

1036 alignItems: 'stretch',

1037 overflow: 'hidden',

1038 fontFamily: 'var(--font-sans, -apple-system, sans-serif)',

1039 ...isFullscreen && ({

1040 height: '100vh'

1041 })

1042 }}>

1043 {}

1044 <div style={{

1045 width: 'min(240px, 35%)',

1046 minWidth: '180px',

1047 flexShrink: 0,

1048 borderRight: '1px solid var(--ce-border-subtle)',

1049 background: 'var(--ce-surface)',

1050 display: 'flex',

1051 flexDirection: 'column'

1052 }}>

1053 <div style={{

1054 padding: '8px 8px 4px',

1055 borderBottom: '1px solid var(--ce-border-subtle)',

1056 display: 'flex',

1057 gap: '4px'

1058 }}>

1059 {['project', 'global'].map(root => <button key={root} onClick={() => switchRoot(root)} style={{

1060 flex: 1,

1061 padding: '6px 0',

1062 borderRadius: '6px',

1063 border: 'none',

1064 cursor: 'pointer',

1065 fontFamily: 'var(--ce-mono)',

1066 fontSize: '11.5px',

1067 background: activeRoot === root ? 'var(--ce-accent-bg)' : 'transparent',

1068 color: activeRoot === root ? 'var(--ce-accent)' : 'var(--ce-text-4)',

1069 fontWeight: activeRoot === root ? 600 : 430

1070 }}>

1071 {root === 'project' ? 'Project' : 'Global (~/)'}

1072 </button>)}

1073 <button onClick={toggleAllFolders} title={allExpanded ? 'Collapse all' : 'Expand all'} style={{

1074 ...iconBtn,

1075 fontSize: 11

1076 }}>

1077 {allExpanded ? '⊟' : '⊞'}

1078 </button>

1079 <button onClick={toggleFullscreen} title={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'} style={{

1080 ...iconBtn,

1081 fontSize: 13

1082 }}>

1083 {isFullscreen ? '⤡' : '⛶'}

1084 </button>

1085 </div>

1086 <div role="tree" aria-label="Configuration files" tabIndex={0} onKeyDown={onTreeKeyDown} style={{

1087 padding: '6px 0',

1088 overflowY: 'auto',

1089 flex: 1,

1090 outline: 'none'

1091 }}>

1092 {tree.children.map(node => renderNode(node, 0))}

1093 </div>

1094 </div>

1095 

1096 {}

1097 <div style={{

1098 flex: 1,

1099 minWidth: 0,

1100 padding: '20px 24px',

1101 minHeight: '400px',

1102 overflowY: 'auto'

1103 }}>

1104 <span aria-live="polite" style={{

1105 position: 'absolute',

1106 width: 1,

1107 height: 1,

1108 overflow: 'hidden',

1109 clip: 'rect(0 0 0 0)'

1110 }}>{selected.label} selected</span>

1111 {}

1112 <div style={{

1113 fontFamily: 'var(--ce-mono)',

1114 fontSize: '11px',

1115 color: 'var(--ce-text-4)',

1116 marginBottom: '10px',

1117 cursor: 'default'

1118 }}>

1119 {selected.path.map((seg, i) => <span key={i}>

1120 <span style={{

1121 color: i === selected.path.length - 1 ? 'var(--ce-accent)' : 'var(--ce-text-4)'

1122 }}>{seg.replace(/\/$/, '')}</span>

1123 {i < selected.path.length - 1 && <span style={{

1124 color: 'var(--ce-sep)'

1125 }}> / </span>}

1126 </span>)}

1127 </div>

1128 

1129 {}

1130 <div style={{

1131 display: 'flex',

1132 alignItems: 'flex-start',

1133 gap: '10px',

1134 marginBottom: '10px'

1135 }}>

1136 <span style={{

1137 flexShrink: 0,

1138 display: 'flex'

1139 }}>{renderIcon(selected.icon, selected.color, 24)}</span>

1140 <div style={{

1141 flex: 1,

1142 minWidth: 0

1143 }}>

1144 <div style={{

1145 fontSize: '22px',

1146 fontWeight: 600,

1147 color: 'var(--ce-text)',

1148 letterSpacing: '-0.3px',

1149 lineHeight: '26px'

1150 }}>{selected.label}</div>

1151 {selected.oneLiner && <div style={{

1152 fontSize: '15px',

1153 color: 'var(--ce-text-3)',

1154 marginTop: '3px'

1155 }}>{selected.oneLiner}</div>}

1156 </div>

1157 <div style={{

1158 display: 'flex',

1159 gap: '4px',

1160 flexShrink: 0

1161 }}>

1162 {[selected.autogen && 'autogen', selected.badge].filter(Boolean).map(k => {

1163 const s = BADGE_STYLES[k];

1164 if (!s) return null;

1165 return <span key={k} style={{

1166 fontFamily: 'var(--ce-mono)',

1167 fontSize: '10px',

1168 fontWeight: 600,

1169 textTransform: 'uppercase',

1170 letterSpacing: '0.3px',

1171 padding: '2px 6px',

1172 borderRadius: '4px',

1173 background: s.bg,

1174 color: s.color,

1175 border: `0.5px solid ${s.border}`

1176 }}>{s.label}</span>;

1177 })}

1178 </div>

1179 </div>

1180 

1181 {}

1182 {selected.note && <div style={{

1183 padding: '10px 12px',

1184 borderRadius: '8px',

1185 marginBottom: '14px',

1186 background: 'rgba(217,119,87,0.06)',

1187 border: '1px solid rgba(217,119,87,0.2)',

1188 borderLeft: '3px solid var(--ce-accent)',

1189 fontSize: '15px',

1190 color: 'var(--ce-text-2)',

1191 lineHeight: 1.6

1192 }}>

1193 {selected.note}

1194 </div>}

1195 

1196 {}

1197 {selected.when && <div style={{

1198 padding: '8px 12px',

1199 borderRadius: '6px',

1200 background: 'rgba(106,155,204,0.06)',

1201 border: '0.5px solid rgba(106,155,204,0.12)',

1202 fontSize: '15px',

1203 color: 'var(--ce-when-text)',

1204 marginBottom: '16px'

1205 }}>

1206 <div style={{

1207 fontSize: '10px',

1208 fontWeight: 700,

1209 textTransform: 'uppercase',

1210 letterSpacing: '0.4px',

1211 opacity: 0.65,

1212 marginBottom: '3px'

1213 }}>When it loads</div>

1214 <div style={{

1215 fontWeight: 500

1216 }}>{selected.when}</div>

1217 </div>}

1218 

1219 {}

1220 {selected.description && <div style={{

1221 fontSize: '16px',

1222 color: 'var(--ce-text-2)',

1223 lineHeight: 1.65,

1224 marginBottom: '16px'

1225 }}>

1226 {Array.isArray(selected.description) ? selected.description.map((para, i) => <div key={i} style={{

1227 marginBottom: i < selected.description.length - 1 ? '12px' : 0

1228 }}>{para}</div>) : selected.description}

1229 </div>}

1230 

1231 {}

1232 {selected.contains && selected.contains.length > 0 && <div style={{

1233 marginBottom: '16px'

1234 }}>

1235 <div style={{

1236 fontSize: '11px',

1237 fontWeight: 700,

1238 color: 'var(--ce-text-4)',

1239 textTransform: 'uppercase',

1240 letterSpacing: '0.4px',

1241 marginBottom: '8px'

1242 }}>Common keys</div>

1243 {selected.contains.map((item, i) => <div key={i} style={{

1244 display: 'flex',

1245 gap: '7px',

1246 fontSize: '15px',

1247 color: 'var(--ce-text-2)',

1248 lineHeight: 1.5,

1249 marginBottom: '5px'

1250 }}>

1251 <span style={{

1252 fontSize: '7px',

1253 color: 'var(--ce-text-4)',

1254 marginTop: '6px'

1255 }}>●</span>

1256 <span>{item}</span>

1257 </div>)}

1258 </div>}

1259 

1260 {}

1261 {selected.tips && selected.tips.length > 0 && <div style={{

1262 padding: '12px 14px',

1263 borderRadius: '8px',

1264 background: 'var(--ce-surface)',

1265 border: '1px solid var(--ce-border-subtle)',

1266 marginBottom: '16px'

1267 }}>

1268 <div style={{

1269 fontSize: '11px',

1270 fontWeight: 700,

1271 color: 'var(--ce-accent)',

1272 textTransform: 'uppercase',

1273 letterSpacing: '0.4px',

1274 marginBottom: '6px'

1275 }}>Tips</div>

1276 {selected.tips.map((tip, i) => <div key={i} style={{

1277 display: 'flex',

1278 gap: '7px',

1279 fontSize: '14.5px',

1280 color: 'var(--ce-text-2)',

1281 marginBottom: i < selected.tips.length - 1 ? '5px' : 0

1282 }}>

1283 <span style={{

1284 fontSize: '7px',

1285 color: 'var(--ce-accent)',

1286 marginTop: '6px'

1287 }}>●</span>

1288 <span>{tip}</span>

1289 </div>)}

1290 </div>}

1291 

1292 {}

1293 {selected.example && <div style={{

1294 marginBottom: '16px'

1295 }}>

1296 {selected.exampleIntro && <div style={{

1297 fontSize: '15px',

1298 color: 'var(--ce-text-2)',

1299 lineHeight: 1.6,

1300 marginBottom: '10px'

1301 }}>

1302 {selected.exampleIntro}

1303 </div>}

1304 <div style={{

1305 display: 'flex',

1306 justifyContent: 'space-between',

1307 alignItems: 'center',

1308 padding: '6px 10px',

1309 background: 'var(--ce-code-header)',

1310 border: '1px solid var(--ce-border)',

1311 borderRadius: '8px 8px 0 0'

1312 }}>

1313 <span style={{

1314 fontFamily: 'var(--ce-mono)',

1315 fontSize: '11px',

1316 fontWeight: 600,

1317 color: 'var(--ce-text-3)'

1318 }}>{selected.label}</span>

1319 <button onClick={() => copyExample(selected.id, selected.example)} style={{

1320 padding: '3px 8px',

1321 borderRadius: '4px',

1322 fontSize: '11px',

1323 fontWeight: 600,

1324 cursor: 'pointer',

1325 transition: 'all 0.15s',

1326 background: isCopied ? 'rgba(85,138,66,0.08)' : 'var(--ce-code-header)',

1327 border: isCopied ? '0.5px solid rgba(85,138,66,0.2)' : '0.5px solid var(--ce-border)',

1328 color: isCopied ? '#558A42' : 'var(--ce-text-3)'

1329 }}>

1330 {isCopied ? '✓ Copied' : 'Copy'}

1331 </button>

1332 </div>

1333 <pre style={{

1334 margin: 0,

1335 padding: '12px 14px',

1336 background: 'var(--ce-code-bg)',

1337 color: '#E8E6DC',

1338 fontFamily: 'var(--ce-mono)',

1339 fontSize: '13px',

1340 lineHeight: 1.65,

1341 borderRadius: '0 0 8px 8px',

1342 overflowX: 'auto',

1343 whiteSpace: 'pre'

1344 }}>{selected.example}</pre>

1345 </div>}

1346 

1347 {}

1348 {selected.docsLink && <a href={selected.docsLink} style={{

1349 display: 'inline-flex',

1350 padding: '5px 12px',

1351 borderRadius: '6px',

1352 background: 'var(--ce-accent-bg)',

1353 border: '1px solid var(--ce-accent-border)',

1354 color: 'var(--ce-accent)',

1355 fontSize: '12px',

1356 fontWeight: 600,

1357 textDecoration: 'none'

1358 }}>Full docs →</a>}

1359 

1360 {}

1361 {selected.children && selected.children.length > 0 && <div style={{

1362 marginTop: '20px'

1363 }}>

1364 <div style={{

1365 fontSize: '11px',

1366 fontWeight: 700,

1367 color: 'var(--ce-text-4)',

1368 textTransform: 'uppercase',

1369 letterSpacing: '0.4px',

1370 marginBottom: '8px'

1371 }}>Contents</div>

1372 <div style={{

1373 display: 'flex',

1374 flexDirection: 'column',

1375 gap: '4px'

1376 }}>

1377 {selected.children.map(child => <button key={child.id} onClick={() => selectNode(child)} style={{

1378 display: 'flex',

1379 alignItems: 'center',

1380 gap: '8px',

1381 padding: '6px 8px',

1382 width: '100%',

1383 background: 'var(--ce-surface)',

1384 borderRadius: '6px',

1385 border: 'none',

1386 cursor: 'pointer',

1387 textAlign: 'left',

1388 transition: 'background 0.1s'

1389 }} onMouseEnter={e => e.currentTarget.style.background = 'var(--ce-surface-hover)'} onMouseLeave={e => e.currentTarget.style.background = 'var(--ce-surface)'}>

1390 {renderIcon(child.icon, child.color, 13)}

1391 <span style={{

1392 fontFamily: 'var(--ce-mono)',

1393 fontSize: '12px',

1394 color: 'var(--ce-text-2)'

1395 }}>{child.label}</span>

1396 {child.oneLiner && <span style={{

1397 fontSize: '11px',

1398 color: 'var(--ce-text-4)',

1399 overflow: 'hidden',

1400 textOverflow: 'ellipsis',

1401 whiteSpace: 'nowrap'

1402 }}>{child.oneLiner}</span>}

1403 </button>)}

1404 </div>

1405 </div>}

1406 </div>

1407 </div>

1408 </>;

1409};

1410 

1411Claude Code는 프로젝트 디렉토리와 홈 디렉토리의 `~/.claude`에서 지침, 설정, skills, subagents, 메모리를 읽습니다. 프로젝트 파일을 git에 커밋하여 팀과 공유합니다. `~/.claude`의 파일은 모든 프로젝트에 적용되는 개인 설정입니다.

1412 

1413Windows에서 `~/.claude`는 `%USERPROFILE%\.claude`로 확인됩니다. [`CLAUDE_CONFIG_DIR`](/ko/env-vars)을 설정하면, 이 페이지의 모든 `~/.claude` 경로가 대신 해당 디렉토리 아래에 있습니다.

1414 

1415대부분의 사용자는 `CLAUDE.md`와 `settings.json`만 편집합니다. 디렉토리의 나머지는 선택 사항입니다. 필요에 따라 skills, rules, subagents를 추가합니다.

1416 

1417## 디렉토리 탐색

1418 

1419트리의 파일을 클릭하여 각 파일이 무엇을 하는지, 언제 로드되는지, 예제를 확인합니다.

1420 

1421<ClaudeExplorer />

1422 

1423## 표시되지 않는 항목

1424 

1425탐색기는 작성하고 편집하는 파일을 다룹니다. 관련된 몇 가지 파일은 다른 위치에 있습니다.

1426 

1427| 파일 | 위치 | 목적 |

1428| ----------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1429| `managed-settings.json` | 시스템 수준, OS에 따라 다름 | 재정의할 수 없는 엔터프라이즈 강제 설정입니다. [서버 관리 설정](/ko/server-managed-settings)을 참조하세요. |

1430| `CLAUDE.local.md` | 프로젝트 루트 | 이 프로젝트에 대한 개인 기본 설정으로, CLAUDE.md와 함께 로드됩니다. 수동으로 생성하고 `.gitignore`에 추가합니다. |

1431| 설치된 플러그인 | `~/.claude/plugins` | 복제된 마켓플레이스, 설치된 플러그인 버전, 플러그인별 데이터로, `claude plugin` 명령으로 관리됩니다. 고아 버전은 플러그인 업데이트 또는 제거 후 7일 후에 삭제됩니다. [플러그인 캐싱](/ko/plugins-reference#plugin-caching-and-file-resolution)을 참조하세요. |

1432 

1433`~/.claude`는 또한 작업할 때 Claude Code가 작성하는 데이터를 보유합니다. 트랜스크립트, 프롬프트 기록, 파일 스냅샷, 캐시, 로그입니다. 아래의 [애플리케이션 데이터](#application-data)를 참조하세요.

1434 

1435## 올바른 파일 선택

1436 

1437다양한 종류의 사용자 정의는 다양한 파일에 있습니다. 이 표를 사용하여 변경 사항이 어디에 속하는지 찾습니다.

1438 

1439| 원하는 작업 | 편집 | 범위 | 참조 |

1440| :--------------------------- | :--------------------------------------- | :--------- | :---------------------------------------- |

1441| Claude에 프로젝트 컨텍스트 및 규칙 제공 | `CLAUDE.md` | 프로젝트 또는 전역 | [메모리](/ko/memory) |

1442| 특정 도구 호출 허용 또는 차단 | `settings.json` `permissions` 또는 `hooks` | 프로젝트 또는 전역 | [권한](/ko/permissions), [Hooks](/ko/hooks) |

1443| 도구 호출 전후에 스크립트 실행 | `settings.json` `hooks` | 프로젝트 또는 전역 | [Hooks](/ko/hooks) |

1444| 세션에 대한 환경 변수 설정 | `settings.json` `env` | 프로젝트 또는 전역 | [설정](/ko/settings#available-settings) |

1445| 개인 재정의를 git에서 제외 | `settings.local.json` | 프로젝트만 | [설정 범위](/ko/settings#settings-files) |

1446| `/name`으로 호출하는 프롬프트 또는 기능 추가 | `skills/<name>/SKILL.md` | 프로젝트 또는 전역 | [Skills](/ko/skills) |

1447| 자신의 도구가 있는 특화된 subagent 정의 | `agents/*.md` | 프로젝트 또는 전역 | [Subagents](/ko/sub-agents) |

1448| MCP를 통해 외부 도구 연결 | `.mcp.json` | 프로젝트만 | [MCP](/ko/mcp) |

1449| Claude가 응답을 포맷하는 방식 변경 | `output-styles/*.md` | 프로젝트 또는 전역 | [출력 스타일](/ko/output-styles) |

1450 

1451## 파일 참조

1452 

1453이 표는 탐색기가 다루는 모든 파일을 나열합니다. 프로젝트 범위 파일은 `.claude/` 아래의 리포지토리에 있습니다 (또는 `CLAUDE.md`, `.mcp.json`, `.worktreeinclude`의 경우 루트에 있음). 전역 범위 파일은 `~/.claude/`에 있으며 모든 프로젝트에 적용됩니다.

1454 

1455<Note>

1456 이 파일에 입력한 내용을 재정의할 수 있는 여러 가지가 있습니다.

1457 

1458 * 조직에서 배포한 [관리 설정](/ko/server-managed-settings)이 모든 것보다 우선합니다.

1459 * `--permission-mode` 또는 `--settings`와 같은 CLI 플래그는 해당 세션에 대해 `settings.json`을 재정의합니다.

1460 * 일부 환경 변수는 동등한 설정보다 우선하지만, 이는 다양합니다. 각각에 대해 [환경 변수 참조](/ko/env-vars)를 확인하세요.

1461 

1462 전체 순서는 [설정 우선순위](/ko/settings#settings-precedence)를 참조하세요.

1463</Note>

1464 

1465파일 이름을 클릭하여 위의 탐색기에서 해당 노드를 엽니다.

1466 

1467| 파일 | 범위 | 커밋 | 기능 | 참조 |

1468| --------------------------------------------------- | --------- | -- | ------------------------------------ | -------------------------------------------------------------------- |

1469| [`CLAUDE.md`](#ce-claude-md) | 프로젝트 및 전역 | ✓ | 매 세션마다 로드되는 지침 | [메모리](/ko/memory) |

1470| [`rules/*.md`](#ce-rules) | 프로젝트 및 전역 | ✓ | 주제 범위 지침, 선택적으로 경로 제한 | [규칙](/ko/memory#organize-rules-with-claude/rules/) |

1471| [`settings.json`](#ce-settings-json) | 프로젝트 및 전역 | ✓ | 권한, hooks, 환경 변수, 모델 기본값 | [설정](/ko/settings) |

1472| [`settings.local.json`](#ce-settings-local-json) | 프로젝트만 | | 개인 재정의, 자동 gitignored | [설정 범위](/ko/settings#settings-files) |

1473| [`.mcp.json`](#ce-mcp-json) | 프로젝트만 | ✓ | 팀 공유 MCP 서버 | [MCP 범위](/ko/mcp#mcp-installation-scopes) |

1474| [`.worktreeinclude`](#ce-worktreeinclude) | 프로젝트만 | ✓ | 새 worktrees로 복사할 Gitignored 파일 | [Worktrees](/ko/common-workflows#copy-gitignored-files-to-worktrees) |

1475| [`skills/<name>/SKILL.md`](#ce-skills) | 프로젝트 및 전역 | ✓ | `/name`으로 호출되거나 자동 호출되는 재사용 가능한 프롬프트 | [Skills](/ko/skills) |

1476| [`commands/*.md`](#ce-commands) | 프로젝트 및 전역 | ✓ | 단일 파일 프롬프트; skills와 동일한 메커니즘 | [Skills](/ko/skills) |

1477| [`output-styles/*.md`](#ce-output-styles) | 프로젝트 및 전역 | ✓ | 사용자 정의 시스템 프롬프트 섹션 | [출력 스타일](/ko/output-styles) |

1478| [`agents/*.md`](#ce-agents) | 프로젝트 및 전역 | ✓ | 자신의 프롬프트와 도구가 있는 subagent 정의 | [Subagents](/ko/sub-agents) |

1479| [`agent-memory/<name>/`](#ce-agent-memory) | 프로젝트 및 전역 | ✓ | Subagents의 지속적 메모리 | [지속적 메모리](/ko/sub-agents#enable-persistent-memory) |

1480| [`~/.claude.json`](#ce-claude-json) | 전역만 | | 앱 상태, OAuth, UI 토글, 개인 MCP 서버 | [전역 설정](/ko/settings#global-config-settings) |

1481| [`projects/<project>/memory/`](#ce-global-projects) | 전역만 | | 자동 메모리: Claude의 세션 간 자체 메모 | [자동 메모리](/ko/memory#auto-memory) |

1482| [`keybindings.json`](#ce-keybindings) | 전역만 | | 사용자 정의 키보드 단축키 | [키바인딩](/ko/keybindings) |

1483| [`themes/*.json`](#ce-themes) | 전역만 | | 사용자 정의 색상 테마 | [사용자 정의 테마](/ko/terminal-config#create-a-custom-theme) |

1484 

1485## 설정 문제 해결

1486 

1487설정, hook, 파일이 적용되지 않으면, [설정 디버그](/ko/debug-your-config)에서 검사 명령과 증상 우선 조회 표를 참조하세요.

1488 

1489## 애플리케이션 데이터

1490 

1491작성하는 설정 외에도 `~/.claude`는 세션 중에 Claude Code가 작성하는 데이터를 보유합니다. 이 파일은 일반 텍스트입니다. 도구를 통과하는 모든 항목은 디스크의 트랜스크립트에 저장됩니다. 파일 내용, 명령 출력, 붙여넣은 텍스트입니다.

1492 

1493### 자동으로 정리됨

1494 

1495아래 경로의 파일은 [`cleanupPeriodDays`](/ko/settings#available-settings)보다 오래되면 시작 시 삭제됩니다. 기본값은 30일입니다.

1496 

1497| `~/.claude/` 아래 경로 | 내용 |

1498| -------------------------------------------- | ------------------------------------------------------------------------------------- |

1499| `projects/<project>/<session>.jsonl` | 전체 대화 트랜스크립트: 모든 메시지, 도구 호출, 도구 결과 |

1500| `projects/<project>/<session>/tool-results/` | 별도 파일로 유출된 대형 도구 출력 |

1501| `file-history/<session>/` | Claude가 변경한 파일의 편집 전 스냅샷으로, [checkpoint 복원](/ko/checkpointing)에 사용됨 |

1502| `plans/` | [plan mode](/ko/permission-modes#analyze-before-you-edit-with-plan-mode) 중에 작성된 계획 파일 |

1503| `debug/` | 세션별 디버그 로그로, `--debug`로 시작하거나 `/debug`를 실행할 때만 작성됨 |

1504| `paste-cache/`, `image-cache/` | 대형 붙여넣기 및 첨부 이미지의 내용 |

1505| `session-env/` | 세션별 환경 메타데이터 |

1506| `tasks/` | 작업 도구로 작성된 세션별 작업 목록 |

1507| `shell-snapshots/` | Bash 도구에서 사용하는 캡처된 셸 환경입니다. 정상 종료 시 제거됩니다. 스윕은 충돌 후 남겨진 항목을 정리합니다. |

1508| `backups/` | 설정 마이그레이션 전에 `~/.claude.json`의 타임스탬프 복사본 |

1509 

1510### 삭제할 때까지 유지됨

1511 

1512다음 경로는 자동 정리 대상이 아니며 무기한 지속됩니다.

1513 

1514| `~/.claude/` 아래 경로 | 내용 |

1515| ------------------ | ------------------------------------------------- |

1516| `history.jsonl` | 입력한 모든 프롬프트로, 타임스탬프 및 프로젝트 경로 포함. 위쪽 화살표 회상에 사용됨. |

1517| `stats-cache.json` | `/usage`로 표시된 집계 토큰 및 비용 계산 |

1518| `todos/` | 레거시 세션별 작업 목록. 현재 버전에서는 더 이상 작성되지 않음. 안전하게 삭제 가능. |

1519 

1520기타 작은 캐시 및 잠금 파일은 사용하는 기능에 따라 나타나며 안전하게 삭제할 수 있습니다.

1521 

1522### 일반 텍스트 저장소

1523 

1524트랜스크립트 및 기록은 저장 시 암호화되지 않습니다. OS 파일 권한이 유일한 보호입니다. 도구가 `.env` 파일을 읽거나 명령이 자격 증명을 인쇄하면, 해당 값이 `projects/<project>/<session>.jsonl`에 작성됩니다. 노출을 줄이려면:

1525 

1526* `cleanupPeriodDays`를 낮춰 트랜스크립트를 유지하는 기간을 단축합니다.

1527* [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/ko/env-vars) 환경 변수를 설정하여 모든 모드에서 트랜스크립트 및 프롬프트 기록 작성을 건너뜁니다. 비대화형 모드에서는 대신 `-p`와 함께 `--no-session-persistence`를 전달하거나 Agent SDK에서 `persistSession: false`를 설정할 수 있습니다.

1528* [권한 규칙](/ko/permissions)을 사용하여 자격 증명 파일의 읽기를 거부합니다.

1529 

1530### 로컬 데이터 지우기

1531 

1532`claude project purge`를 실행하여 한 프로젝트에 대해 Claude Code가 보유한 상태를 삭제합니다:

1533 

1534* `projects/` 아래의 트랜스크립트 및 자동 메모리

1535* 세션별 `tasks/`, `debug/`, `file-history/` 항목

1536* `history.jsonl`의 일치하는 프롬프트 라인

1537* `~/.claude.json`의 프로젝트 항목

1538 

1539이 명령은 전체 삭제 계획을 인쇄하고 항목을 제거하기 전에 확인을 요청합니다.

1540 

1541삭제하지 않고 계획을 미리 봅니다:

1542 

1543```bash theme={null}

1544claude project purge ~/work/my-repo --dry-run

1545```

1546 

1547단일 확인 프롬프트로 삭제합니다:

1548 

1549```bash theme={null}

1550claude project purge ~/work/my-repo

1551```

1552 

1553경로를 생략하여 대화형 목록에서 프로젝트를 선택합니다.

1554 

1555스크립트에서 사용하기 위해 확인 프롬프트를 건너뜁니다:

1556 

1557```bash theme={null}

1558claude project purge ~/work/my-repo --yes

1559```

1560 

1561경로 대신 `--all`을 전달하여 한 번에 모든 프로젝트의 상태를 제거합니다. 이는 `history.jsonl`을 필터링하지 않고 완전히 삭제합니다. `-i`를 전달하여 삭제 계획을 한 번에 하나씩 단계별로 진행합니다.

1562 

1563이 명령은 프로젝트 범위가 아니므로 `shell-snapshots/` 및 `backups/`는 그대로 두고 계획 출력에서 이에 대해 경고합니다. 주어진 경로와 일치하는 상태가 없으면 상태 1로 종료됩니다.

1564 

1565위의 애플리케이션 데이터 경로를 언제든지 손으로 삭제할 수 있습니다. 새 세션은 영향을 받지 않습니다. 아래 표는 과거 세션에서 손실되는 항목을 보여줍니다.

1566 

1567| 삭제 | 손실 항목 |

1568| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |

1569| `~/.claude/projects/` | 과거 세션의 재개, 계속, 되감기 |

1570| `~/.claude/history.jsonl` | 위쪽 화살표 프롬프트 회상 |

1571| `~/.claude/file-history/` | 과거 세션의 checkpoint 복원 |

1572| `~/.claude/stats-cache.json` | `/usage`로 표시된 과거 합계 |

1573| `~/.claude/debug/`, `~/.claude/plans/`, `~/.claude/paste-cache/`, `~/.claude/image-cache/`, `~/.claude/session-env/`, `~/.claude/tasks/`, `~/.claude/shell-snapshots/`, `~/.claude/backups/` | 사용자 대면 항목 없음 |

1574| `~/.claude/todos/` | 없음. 현재 버전에서 작성되지 않는 레거시 디렉토리. |

1575 

1576`~/.claude.json`, `~/.claude/settings.json`, `~/.claude/plugins/`를 삭제하지 마세요. 이들은 인증, 기본 설정, 설치된 플러그인을 보유합니다.

1577 

1578## 관련 리소스

1579 

1580* [Claude의 메모리 관리](/ko/memory): CLAUDE.md, rules, auto memory 작성 및 구성

1581* [설정 구성](/ko/settings): 권한, hooks, 환경 변수, 모델 기본값 설정

1582* [Skills 생성](/ko/skills): 재사용 가능한 프롬프트 및 워크플로우 구축

1583* [Subagents 구성](/ko/sub-agents): 자신의 컨텍스트가 있는 특화된 에이전트 정의

cli-reference.md +129 −0 created

Details

1> ## Documentation Index

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

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

4 

5# CLI 참조

6 

7> Claude Code 명령줄 인터페이스의 완전한 참조로, 명령어와 플래그를 포함합니다.

8 

9## CLI 명령어

10 

11이러한 명령어를 사용하여 세션을 시작하고, 콘텐츠를 파이프하고, 대화를 재개하고, 업데이트를 관리할 수 있습니다:

12 

13| 명령어 | 설명 | 예시 |

14| :------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------------------------- |

15| `claude` | 대화형 세션 시작 | `claude` |

16| `claude "query"` | 초기 프롬프트로 대화형 세션 시작 | `claude "explain this project"` |

17| `claude -p "query"` | SDK를 통해 쿼리하고 종료 | `claude -p "explain this function"` |

18| `cat file \| claude -p "query"` | 파이프된 콘텐츠 처리 | `cat logs.txt \| claude -p "explain"` |

19| `claude -c` | 현재 디렉토리에서 가장 최근 대화 계속 | `claude -c` |

20| `claude -c -p "query"` | SDK를 통해 계속 | `claude -c -p "Check for type errors"` |

21| `claude -r "<session>" "query"` | ID 또는 이름으로 세션 재개 | `claude -r "auth-refactor" "Finish this PR"` |

22| `claude update` | 최신 버전으로 업데이트 | `claude update` |

23| `claude install [version]` | 네이티브 바이너리를 설치하거나 재설치합니다. `2.1.118`과 같은 버전, 또는 `stable` 또는 `latest`를 허용합니다. [특정 버전 설치](/ko/setup#install-a-specific-version) 참조 | `claude install stable` |

24| `claude auth login` | Anthropic 계정에 로그인합니다. `--email`을 사용하여 이메일 주소를 미리 입력하고, `--sso`를 사용하여 SSO 인증을 강제하고, `--console`을 사용하여 Claude 구독 대신 API 사용 청구를 위해 Anthropic Console로 로그인할 수 있습니다 | `claude auth login --console` |

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

26| `claude auth status` | 인증 상태를 JSON으로 표시합니다. 사람이 읽을 수 있는 출력을 위해 `--text`를 사용합니다. 로그인된 경우 코드 0으로 종료되고, 로그인되지 않은 경우 1로 종료됩니다 | `claude auth status` |

27| `claude agents` | 소스별로 그룹화된 모든 구성된 [subagents](/ko/sub-agents) 나열 | `claude agents` |

28| `claude auto-mode defaults` | 기본 제공 [자동 모드](/ko/permission-modes#eliminate-prompts-with-auto-mode) 분류기 규칙을 JSON으로 인쇄합니다. `claude auto-mode config`를 사용하여 설정이 적용된 유효한 구성을 확인합니다 | `claude auto-mode defaults > rules.json` |

29| `claude mcp` | Model Context Protocol (MCP) 서버 구성 | [Claude Code MCP 문서](/ko/mcp) 참조 |

30| `claude plugin` | Claude Code [plugins](/ko/plugins)를 관리합니다. 별칭: `claude plugins`. 하위 명령어는 [plugin 참조](/ko/plugins-reference#cli-commands-reference)를 참조하세요 | `claude plugin install code-review@claude-plugins-official` |

31| `claude project purge [path]` | 프로젝트의 모든 로컬 Claude Code 상태를 삭제합니다: 대화 기록, 작업 목록, 디버그 로그, 파일 편집 기록, 프롬프트 기록 라인 및 `~/.claude.json`의 프로젝트 항목. `[path]`를 생략하면 대화형 목록에서 선택할 수 있습니다. 플래그: `--dry-run`으로 미리 보기, `-y`/`--yes`로 확인 건너뛰기, `-i`/`--interactive`로 각 항목 확인, `--all`로 모든 프로젝트. [로컬 데이터 지우기](/ko/claude-directory#clear-local-data) 참조 | `claude project purge ~/work/repo --dry-run` |

32| `claude remote-control` | Claude.ai 또는 Claude 앱에서 Claude Code를 제어하기 위한 [Remote Control](/ko/remote-control) 서버를 시작합니다. 서버 모드에서 실행됩니다(로컬 대화형 세션 없음). [서버 모드 플래그](/ko/remote-control#start-a-remote-control-session) 참조 | `claude remote-control --name "My Project"` |

33| `claude setup-token` | CI 및 스크립트를 위한 장기 OAuth 토큰을 생성합니다. 토큰을 저장하지 않고 터미널에 인쇄합니다. Claude 구독이 필요합니다. [장기 토큰 생성](/ko/authentication#generate-a-long-lived-token) 참조 | `claude setup-token` |

34| `claude ultrareview [target]` | [ultrareview](/ko/ultrareview#run-ultrareview-non-interactively)를 비대화형으로 실행합니다. 결과를 stdout으로 인쇄하고 성공 시 0으로 종료되거나 실패 시 1로 종료됩니다. 원본 페이로드는 `--json`을 사용하고 30분 기본값을 재정의하려면 `--timeout <minutes>`를 사용합니다 | `claude ultrareview 1234 --json` |

35 

36하위 명령어를 잘못 입력하면 Claude Code는 가장 가까운 일치를 제안하고 세션을 시작하지 않고 종료합니다. 예를 들어, `claude udpate`는 `Did you mean claude update?`를 인쇄합니다.

37 

38## CLI 플래그

39 

40이러한 명령줄 플래그를 사용하여 Claude Code의 동작을 사용자 정의합니다. `claude --help`는 모든 플래그를 나열하지 않으므로, `--help`에 플래그가 없다고 해서 사용할 수 없다는 의미는 아닙니다.

41 

42| 플래그 | 설명 | 예시 |

43| :---------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------- |

44| `--add-dir` | Claude가 파일을 읽고 편집할 수 있는 추가 작업 디렉토리를 추가합니다. 파일 액세스를 부여합니다. 대부분의 `.claude/` 구성은 이러한 디렉토리에서 [검색되지 않습니다](/ko/permissions#additional-directories-grant-file-access-not-configuration). 각 경로가 디렉토리로 존재하는지 검증합니다 | `claude --add-dir ../apps ../lib` |

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

46| `--agents` | JSON을 통해 사용자 정의 subagents를 동적으로 정의합니다. subagent [frontmatter](/ko/sub-agents#supported-frontmatter-fields)와 동일한 필드 이름과 에이전트의 지시사항에 대한 `prompt` 필드를 사용합니다 | `claude --agents '{"reviewer":{"description":"Reviews code","prompt":"You are a code reviewer"}}'` |

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

48| `--allowedTools` | 권한 프롬프트 없이 실행되는 도구입니다. 패턴 매칭에 대해 [권한 규칙 구문](/ko/settings#permission-rule-syntax)을 참조하세요. 사용 가능한 도구를 제한하려면 `--tools`를 대신 사용하세요 | `"Bash(git log *)" "Bash(git diff *)" "Read"` |

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

50| `--append-system-prompt-file` | 파일에서 추가 시스템 프롬프트 텍스트를 로드하고 기본 프롬프트에 추가합니다 | `claude --append-system-prompt-file ./extra-rules.txt` |

51| `--bare` | 최소 모드: hooks, skills, plugins, MCP 서버, 자동 메모리 및 CLAUDE.md의 자동 검색을 건너뜁니다. 스크립트된 호출이 더 빠르게 시작됩니다. Claude는 Bash, 파일 읽기 및 파일 편집 도구에 액세스할 수 있습니다. [`CLAUDE_CODE_SIMPLE`](/ko/env-vars)을 설정합니다. [bare 모드](/ko/headless#start-faster-with-bare-mode) 참조 | `claude --bare -p "query"` |

52| `--betas` | API 요청에 포함할 베타 헤더(API 키 사용자만 해당) | `claude --betas interleaved-thinking` |

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

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

55| `--continue`, `-c` | 현재 디렉토리에서 가장 최근 대화를 로드합니다. `/add-dir`으로 이 디렉토리를 추가한 세션을 포함합니다 | `claude --continue` |

56| `--dangerously-load-development-channels` | 로컬 개발을 위해 승인된 허용 목록에 없는 [채널](/ko/channels-reference#test-during-the-research-preview)을 활성화합니다. `plugin:<name>@<marketplace>` 및 `server:<name>` 항목을 허용합니다. 확인을 요청합니다 | `claude --dangerously-load-development-channels server:webhook` |

57| `--dangerously-skip-permissions` | 권한 프롬프트를 건너뜁니다. `--permission-mode bypassPermissions`와 동일합니다. 이것이 건너뛰는 것과 건너뛰지 않는 것에 대해 [권한 모드](/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)를 참조하세요 | `claude --dangerously-skip-permissions` |

58| `--debug` | 선택적 카테고리 필터링을 사용하여 디버그 모드를 활성화합니다(예: `"api,hooks"` 또는 `"!statsig,!file"`) | `claude --debug "api,mcp"` |

59| `--debug-file <path>` | 디버그 로그를 특정 파일 경로에 씁니다. 암묵적으로 디버그 모드를 활성화합니다. `CLAUDE_CODE_DEBUG_LOGS_DIR`보다 우선합니다 | `claude --debug-file /tmp/claude-debug.log` |

60| `--disable-slash-commands` | 이 세션에 대해 모든 skills 및 명령어를 비활성화합니다 | `claude --disable-slash-commands` |

61| `--disallowedTools` | 모델의 컨텍스트에서 제거되고 사용할 수 없는 도구 | `"Bash(git log *)" "Bash(git diff *)" "Edit"` |

62| `--effort` | 현재 세션에 대한 [노력 수준](/ko/model-config#adjust-effort-level)을 설정합니다. 옵션: `low`, `medium`, `high`, `xhigh`, `max`; 사용 가능한 수준은 모델에 따라 다릅니다. 세션 범위이며 설정에 지속되지 않습니다 | `claude --effort high` |

63| `--enable-auto-mode` | {/* max-version: 2.1.110 */}v2.1.111에서 제거됨. 자동 모드는 이제 `Shift+Tab` 사이클에 기본적으로 포함됩니다. `--permission-mode auto`를 사용하여 시작합니다 | `claude --permission-mode auto` |

64| `--exclude-dynamic-system-prompt-sections` | 시스템 프롬프트의 머신별 섹션(작업 디렉토리, 환경 정보, 메모리 경로, git 상태)을 첫 번째 사용자 메시지로 이동합니다. 동일한 작업을 실행하는 다양한 사용자 및 머신 간에 프롬프트 캐시 재사용을 개선합니다. 기본 시스템 프롬프트에만 적용됩니다. `--system-prompt` 또는 `--system-prompt-file`이 설정되면 무시됩니다. 스크립트된 다중 사용자 워크로드의 경우 `-p`와 함께 사용합니다 | `claude -p --exclude-dynamic-system-prompt-sections "query"` |

65| `--fallback-model` | 기본 모델이 과부하 상태일 때 지정된 모델로 자동 폴백을 활성화합니다(인쇄 모드만 해당) | `claude -p --fallback-model sonnet "query"` |

66| `--fork-session` | 재개할 때 원본을 재사용하는 대신 새 세션 ID를 생성합니다(`--resume` 또는 `--continue`와 함께 사용) | `claude --resume abc123 --fork-session` |

67| `--from-pr` | 특정 pull request에 연결된 세션을 재개합니다. PR 번호, GitHub 또는 GitHub Enterprise PR URL, GitLab merge request URL 또는 Bitbucket pull request URL을 허용합니다. Claude가 pull request를 생성할 때 세션이 자동으로 연결됩니다 | `claude --from-pr 123` |

68| `--ide` | 정확히 하나의 유효한 IDE를 사용할 수 있는 경우 시작 시 IDE에 자동으로 연결합니다 | `claude --ide` |

69| `--init` | [Setup hooks](/ko/hooks#setup)를 `init` 매처로 실행한 후 세션을 시작합니다(인쇄 모드만 해당) | `claude -p --init "query"` |

70| `--init-only` | [Setup](/ko/hooks#setup) 및 `SessionStart` hooks를 실행한 후 대화를 시작하지 않고 종료합니다 | `claude --init-only` |

71| `--include-hook-events` | 모든 hook 라이프사이클 이벤트를 출력 스트림에 포함합니다. `--output-format stream-json`이 필요합니다 | `claude -p --output-format stream-json --include-hook-events "query"` |

72| `--include-partial-messages` | 부분 스트리밍 이벤트를 출력에 포함합니다. `--print`와 `--output-format stream-json`이 필요합니다 | `claude -p --output-format stream-json --include-partial-messages "query"` |

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

74| `--json-schema` | 에이전트가 워크플로우를 완료한 후 JSON Schema와 일치하는 검증된 JSON 출력을 가져옵니다(인쇄 모드만 해당, [구조화된 출력](/ko/agent-sdk/structured-outputs) 참조) | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |

75| `--maintenance` | [Setup hooks](/ko/hooks#setup)를 `maintenance` 매처로 실행한 후 세션을 시작합니다(인쇄 모드만 해당) | `claude -p --maintenance "query"` |

76| `--max-budget-usd` | 중지하기 전에 API 호출에 소비할 최대 달러 금액(인쇄 모드만 해당) | `claude -p --max-budget-usd 5.00 "query"` |

77| `--max-turns` | 에이전트 턴의 수를 제한합니다(인쇄 모드만 해당). 제한에 도달하면 오류로 종료됩니다. 기본적으로 제한 없음 | `claude -p --max-turns 3 "query"` |

78| `--mcp-config` | JSON 파일 또는 문자열에서 MCP 서버를 로드합니다(공백으로 구분) | `claude --mcp-config ./mcp.json` |

79| `--model` | 최신 모델의 별칭(`sonnet` 또는 `opus`) 또는 모델의 전체 이름으로 현재 세션에 대한 모델을 설정합니다 | `claude --model claude-sonnet-4-6` |

80| `--name`, `-n` | 세션의 표시 이름을 설정합니다. `/resume`과 터미널 제목에 표시됩니다. `claude --resume <name>`으로 명명된 세션을 재개할 수 있습니다. <br /><br />[`/rename`](/ko/commands)은 세션 중에 이름을 변경하고 프롬프트 표시줄에도 표시합니다 | `claude -n "my-feature-work"` |

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

82| `--no-session-persistence` | 세션 지속성을 비활성화하여 세션이 디스크에 저장되지 않고 재개할 수 없습니다(인쇄 모드만 해당) | `claude -p --no-session-persistence "query"` |

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

84| `--permission-mode` | 지정된 [권한 모드](/ko/permission-modes)에서 시작합니다. `default`, `acceptEdits`, `plan`, `auto`, `dontAsk` 또는 `bypassPermissions`를 허용합니다. 설정 파일의 `defaultMode`를 재정의합니다 | `claude --permission-mode plan` |

85| `--permission-prompt-tool` | 비대화형 모드에서 권한 프롬프트를 처리할 MCP 도구를 지정합니다 | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |

86| `--plugin-dir` | 이 세션에만 디렉토리에서 plugins를 로드합니다. 각 플래그는 하나의 경로를 사용합니다. 여러 디렉토리의 경우 플래그를 반복합니다: `--plugin-dir A --plugin-dir B` | `claude --plugin-dir ./my-plugins` |

87| `--print`, `-p` | 대화형 모드 없이 응답을 인쇄합니다([Agent SDK 문서](/ko/agent-sdk/overview)에서 프로그래밍 방식 사용 세부 정보 참조) | `claude -p "query"` |

88| `--remote` | 제공된 작업 설명으로 claude.ai에서 새 [웹 세션](/ko/claude-code-on-the-web)을 생성합니다 | `claude --remote "Fix the login bug"` |

89| `--remote-control`, `--rc` | claude.ai 또는 Claude 앱에서도 제어할 수 있도록 [Remote Control](/ko/remote-control#start-a-remote-control-session)이 활성화된 대화형 세션을 시작합니다. 선택적으로 세션의 이름을 전달할 수 있습니다 | `claude --remote-control "My Project"` |

90| `--remote-control-session-name-prefix <prefix>` | 명시적 이름이 설정되지 않은 경우 자동 생성된 [Remote Control](/ko/remote-control) 세션 이름의 접두사입니다. 기본값은 머신의 호스트명이며, `myhost-graceful-unicorn`과 같은 이름을 생성합니다. 동일한 효과를 위해 `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX`를 설정합니다 | `claude remote-control --remote-control-session-name-prefix dev-box` |

91| `--replay-user-messages` | stdin에서 사용자 메시지를 다시 내보내 stdout으로 승인합니다. `--input-format stream-json`과 `--output-format stream-json`이 필요합니다 | `claude -p --input-format stream-json --output-format stream-json --replay-user-messages` |

92| `--resume`, `-r` | ID 또는 이름으로 특정 세션을 재개하거나 세션을 선택할 수 있는 대화형 선택기를 표시합니다. `/add-dir`으로 이 디렉토리를 추가한 세션을 포함합니다 | `claude --resume auth-refactor` |

93| `--session-id` | 대화에 특정 세션 ID를 사용합니다(유효한 UUID여야 함) | `claude --session-id "550e8400-e29b-41d4-a716-446655440000"` |

94| `--setting-sources` | 로드할 설정 소스의 쉼표로 구분된 목록(`user`, `project`, `local`) | `claude --setting-sources user,project` |

95| `--settings` | 추가 설정을 로드할 설정 JSON 파일 또는 JSON 문자열의 경로 | `claude --settings ./settings.json` |

96| `--strict-mcp-config` | `--mcp-config`의 MCP 서버만 사용하고 다른 모든 MCP 구성을 무시합니다 | `claude --strict-mcp-config --mcp-config ./mcp.json` |

97| `--system-prompt` | 전체 시스템 프롬프트를 사용자 정의 텍스트로 바꿉니다 | `claude --system-prompt "You are a Python expert"` |

98| `--system-prompt-file` | 파일에서 시스템 프롬프트를 로드하여 기본 프롬프트를 바꿉니다 | `claude --system-prompt-file ./custom-prompt.txt` |

99| `--teleport` | 로컬 터미널에서 [웹 세션](/ko/claude-code-on-the-web)을 재개합니다 | `claude --teleport` |

100| `--teammate-mode` | [에이전트 팀](/ko/agent-teams) 팀원 표시 방식을 설정합니다: `auto`(기본값), `in-process` 또는 `tmux`. [디스플레이 모드 선택](/ko/agent-teams#choose-a-display-mode) 참조 | `claude --teammate-mode in-process` |

101| `--tmux` | worktree에 대한 tmux 세션을 생성합니다. `--worktree`가 필요합니다. 사용 가능한 경우 iTerm2 네이티브 창을 사용합니다. 기존 tmux의 경우 `--tmux=classic`을 전달합니다 | `claude -w feature-auth --tmux` |

102| `--tools` | Claude가 사용할 수 있는 기본 제공 도구를 제한합니다. 모두 비활성화하려면 `""`를 사용하고, 모두 사용하려면 `"default"`를 사용하거나, `"Bash,Edit,Read"`와 같은 도구 이름을 사용합니다 | `claude --tools "Bash,Edit,Read"` |

103| `--verbose` | 자세한 로깅을 활성화하고 전체 턴별 출력을 표시합니다 | `claude --verbose` |

104| `--version`, `-v` | 버전 번호를 출력합니다 | `claude -v` |

105| `--worktree`, `-w` | Claude를 `<repo>/.claude/worktrees/<name>`의 격리된 [git worktree](/ko/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees)에서 시작합니다. 이름이 지정되지 않으면 자동으로 생성됩니다 | `claude -w feature-auth` |

106 

107### 시스템 프롬프트 플래그

108 

109Claude Code는 시스템 프롬프트를 사용자 정의하기 위한 4가지 플래그를 제공합니다. 4가지 모두 대화형 및 비대화형 모드에서 작동합니다.

110 

111| 플래그 | 동작 | 예시 |

112| :---------------------------- | :-------------------- | :------------------------------------------------------ |

113| `--system-prompt` | 전체 기본 프롬프트를 바꿉니다 | `claude --system-prompt "You are a Python expert"` |

114| `--system-prompt-file` | 파일 내용으로 바꿉니다 | `claude --system-prompt-file ./prompts/review.txt` |

115| `--append-system-prompt` | 기본 프롬프트에 추가합니다 | `claude --append-system-prompt "Always use TypeScript"` |

116| `--append-system-prompt-file` | 파일 내용을 기본 프롬프트에 추가합니다 | `claude --append-system-prompt-file ./style-rules.txt` |

117 

118`--system-prompt`와 `--system-prompt-file`은 상호 배타적입니다. 추가 플래그는 바꾸기 플래그 중 하나와 결합할 수 있습니다.

119 

120대부분의 사용 사례에서는 추가 플래그를 사용합니다. 추가하면 Claude Code의 기본 제공 기능을 유지하면서 요구 사항을 추가합니다. 시스템 프롬프트를 완전히 제어해야 할 때만 바꾸기 플래그를 사용합니다.

121 

122## 참고 항목

123 

124* [Chrome 확장 프로그램](/ko/chrome) - 브라우저 자동화 및 웹 테스트

125* [대화형 모드](/ko/interactive-mode) - 바로 가기, 입력 모드 및 대화형 기능

126* [빠른 시작 가이드](/ko/quickstart) - Claude Code 시작하기

127* [일반적인 워크플로우](/ko/common-workflows) - 고급 워크플로우 및 패턴

128* [설정](/ko/settings) - 구성 옵션

129* [Agent SDK 문서](/ko/agent-sdk/overview) - 프로그래밍 방식 사용 및 통합

code-review.md +274 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Code Review

6 

7> 다중 에이전트 분석을 통해 전체 코드베이스를 검토하여 논리 오류, 보안 취약점 및 회귀를 감지하는 자동화된 PR 검토를 설정합니다

8 

9<Note>

10 Code Review는 연구 미리보기 상태이며 [Team 및 Enterprise](https://claude.ai/admin-settings/claude-code) 구독에서 사용 가능합니다. [Zero Data Retention](/ko/zero-data-retention)이 활성화된 조직에서는 사용할 수 없습니다.

11</Note>

12 

13Code Review는 GitHub 풀 요청을 분석하고 문제를 발견한 코드 라인에 인라인 댓글로 결과를 게시합니다. 전문화된 에이전트 집합이 전체 코드베이스의 맥락에서 코드 변경 사항을 검토하여 논리 오류, 보안 취약점, 손상된 엣지 케이스 및 미묘한 회귀를 찾습니다.

14 

15결과는 심각도별로 태그가 지정되며 PR을 승인하거나 차단하지 않으므로 기존 검토 워크플로우는 그대로 유지됩니다. 리포지토리에 `CLAUDE.md` 또는 `REVIEW.md` 파일을 추가하여 Claude가 플래그하는 항목을 조정할 수 있습니다.

16 

17관리되는 서비스 대신 자신의 CI 인프라에서 Claude를 실행하려면 [GitHub Actions](/ko/github-actions) 또는 [GitLab CI/CD](/ko/gitlab-ci-cd)를 참조하십시오. 자체 호스팅 GitHub 인스턴스의 리포지토리의 경우 [GitHub Enterprise Server](/ko/github-enterprise-server)를 참조하십시오.

18 

19이 페이지에서 다루는 내용:

20 

21* [검토 작동 방식](#how-reviews-work)

22* [설정](#set-up-code-review)

23* [`@claude review` 및 `@claude review once`를 사용한 수동 검토 트리거](#manually-trigger-reviews)

24* [`CLAUDE.md` 및 `REVIEW.md`를 사용한 검토 사용자 정의](#customize-reviews)

25* [가격](#pricing)

26* [실패한 실행 및 누락된 댓글 문제 해결](#troubleshooting)

27 

28## 검토 작동 방식

29 

30관리자가 조직에 대해 Code Review를 [활성화](#set-up-code-review)하면 리포지토리의 구성된 동작에 따라 PR이 열릴 때, 모든 푸시 시 또는 수동으로 요청할 때 검토가 트리거됩니다. PR에서 `@claude review`를 [댓글로 작성](#manually-trigger-reviews)하면 모든 모드에서 검토가 시작됩니다.

31 

32검토가 실행되면 여러 에이전트가 Anthropic 인프라에서 병렬로 diff 및 주변 코드를 분석합니다. 각 에이전트는 다른 클래스의 문제를 찾고, 검증 단계에서 후보를 실제 코드 동작과 비교하여 거짓 양성을 필터링합니다. 결과는 중복 제거되고 심각도별로 순위가 지정되며 문제가 발견된 특정 라인에 인라인 댓글로 게시됩니다. 문제가 발견되지 않으면 Claude는 PR에 짧은 확인 댓글을 게시합니다.

33 

34검토는 PR 크기 및 복잡도에 따라 비용이 증가하며 평균 20분 내에 완료됩니다. 관리자는 [분석 대시보드](#view-usage)를 통해 검토 활동 및 지출을 모니터링할 수 있습니다.

35 

36### 심각도 수준

37 

38각 결과는 심각도 수준으로 태그가 지정됩니다:

39 

40| 마커 | 심각도 | 의미 |

41| :- | :----------- | :----------------------------- |

42| 🔴 | Important | 병합 전에 수정해야 하는 버그 |

43| 🟡 | Nit | 경미한 문제, 수정할 가치가 있지만 차단하지는 않음 |

44| 🟣 | Pre-existing | 코드베이스에 존재하지만 이 PR에서 도입되지 않은 버그 |

45 

46결과에는 확장 가능한 확장 추론 섹션이 포함되어 있으므로 Claude가 문제를 플래그한 이유와 문제를 검증한 방법을 이해할 수 있습니다.

47 

48### 결과에 대한 평가 및 응답

49 

50Claude의 각 검토 댓글은 이미 👍 및 👎가 첨부되어 있으므로 두 버튼 모두 GitHub UI에 나타나 한 번의 클릭으로 평가할 수 있습니다. 결과가 유용했으면 👍을 클릭하고 잘못되었거나 노이즈가 많으면 👎를 클릭합니다. Anthropic은 PR이 병합된 후 반응 개수를 수집하고 이를 사용하여 검토자를 조정합니다. 반응은 재검토를 트리거하거나 PR의 어떤 것도 변경하지 않습니다.

51 

52인라인 댓글에 응답해도 Claude가 응답하거나 PR을 업데이트하도록 프롬프트하지 않습니다. 결과에 대해 조치하려면 코드를 수정하고 푸시합니다. PR이 푸시 트리거 검토에 구독되어 있으면 다음 실행이 문제가 수정되었을 때 스레드를 해결합니다. 푸시하지 않고 새로운 검토를 요청하려면 [최상위 PR 댓글](#manually-trigger-reviews)로 `@claude review once`를 댓글로 작성합니다.

53 

54### 확인 실행 출력

55 

56인라인 검토 댓글 외에도 각 검토는 CI 확인과 함께 나타나는 **Claude Code Review** 확인 실행을 채웁니다. **Details** 링크를 확장하여 심각도별로 정렬된 모든 결과의 요약을 한 곳에서 확인합니다:

57 

58| 심각도 | 파일:라인 | 문제 |

59| ------------ | ------------------------- | -------------------------------------- |

60| 🔴 Important | `src/auth/session.ts:142` | 토큰 새로고침이 로그아웃과 경쟁하여 오래된 세션이 활성 상태로 유지됨 |

61| 🟡 Nit | `src/auth/session.ts:88` | `parseExpiry`가 잘못된 입력에서 자동으로 0을 반환함 |

62 

63각 결과는 **Files changed** 탭의 주석으로도 나타나며 관련 diff 라인에 직접 표시됩니다. Important 결과는 빨간색 마커로 렌더링되고, nit은 노란색 경고로, 기존 버그는 회색 공지로 렌더링됩니다. 주석과 심각도 테이블은 인라인 검토 댓글과 독립적으로 확인 실행에 기록되므로 GitHub가 이동한 라인의 인라인 댓글을 거부하더라도 사용 가능한 상태로 유지됩니다.

64 

65확인 실행은 항상 중립적인 결론으로 완료되므로 분기 보호 규칙을 통해 병합을 차단하지 않습니다. Code Review 결과에 따라 병합을 제어하려면 자신의 CI에서 확인 실행 출력에서 심각도 분석을 읽으십시오. Details 텍스트의 마지막 라인은 워크플로우가 `gh` 및 jq로 구문 분석할 수 있는 기계 판독 가능한 댓글입니다:

66 

67```bash theme={null}

68gh api repos/OWNER/REPO/check-runs/CHECK_RUN_ID \

69 --jq '.output.text | split("bughunter-severity: ")[1] | split(" -->")[0] | fromjson'

70```

71 

72이는 심각도별 개수가 포함된 JSON 객체를 반환합니다(예: `{"normal": 2, "nit": 1, "pre_existing": 0}`). `normal` 키는 Important 결과의 개수를 보유합니다. 0이 아닌 값은 Claude가 병합 전에 수정할 가치가 있는 버그를 발견했음을 의미합니다.

73 

74### Code Review가 확인하는 항목

75 

76기본적으로 Code Review는 정확성에 중점을 두고 있습니다: 형식 기본 설정이나 누락된 테스트 범위가 아닌 프로덕션을 중단할 버그입니다. 리포지토리에 [지침 파일을 추가](#customize-reviews)하여 확인하는 항목을 확장할 수 있습니다.

77 

78## Code Review 설정

79 

80관리자는 조직에 대해 한 번 Code Review를 활성화하고 포함할 리포지토리를 선택합니다.

81 

82<Steps>

83 <Step title="Claude Code 관리자 설정 열기">

84 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code)로 이동하여 Code Review 섹션을 찾습니다. Claude 조직에 대한 관리자 액세스 권한과 GitHub 조직에 GitHub 앱을 설치할 수 있는 권한이 필요합니다.

85 </Step>

86 

87 <Step title="설정 시작">

88 **Setup**을 클릭합니다. 이렇게 하면 GitHub 앱 설치 흐름이 시작됩니다.

89 </Step>

90 

91 <Step title="Claude GitHub 앱 설치">

92 프롬프트를 따라 Claude GitHub 앱을 GitHub 조직에 설치합니다. 앱은 다음 리포지토리 권한을 요청합니다:

93 

94 * **Contents**: 읽기 및 쓰기

95 * **Issues**: 읽기 및 쓰기

96 * **Pull requests**: 읽기 및 쓰기

97 

98 Code Review는 콘텐츠에 대한 읽기 액세스와 풀 요청에 대한 쓰기 액세스를 사용합니다. 더 광범위한 권한 집합은 나중에 활성화하는 경우 [GitHub Actions](/ko/github-actions)도 지원합니다.

99 </Step>

100 

101 <Step title="리포지토리 선택">

102 Code Review를 활성화할 리포지토리를 선택합니다. 리포지토리가 보이지 않으면 설치 중에 Claude GitHub 앱에 액세스 권한을 부여했는지 확인하십시오. 나중에 더 많은 리포지토리를 추가할 수 있습니다.

103 </Step>

104 

105 <Step title="리포지토리별 검토 트리거 설정">

106 설정이 완료되면 Code Review 섹션에 리포지토리가 테이블에 표시됩니다. 각 리포지토리에 대해 **Review Behavior** 드롭다운을 사용하여 검토가 실행되는 시기를 선택합니다:

107 

108 * **Once after PR creation**: PR이 열리거나 검토 준비 완료로 표시될 때 한 번 검토가 실행됩니다

109 * **After every push**: PR 브랜치에 대한 모든 푸시에서 검토가 실행되어 PR이 진화함에 따라 새로운 문제를 감지하고 플래그된 문제를 수정할 때 스레드를 자동으로 해결합니다

110 * **Manual**: [PR에서 `@claude review` 또는 `@claude review once`를 댓글로 작성](#manually-trigger-reviews)할 때만 검토가 시작되며, `@claude review`는 또한 PR을 이후 푸시에 대한 검토에 구독합니다

111 

112 모든 푸시에서 검토하면 가장 많은 검토가 실행되고 비용이 가장 많이 듭니다. 수동 모드는 특정 PR을 검토에 옵트인하려는 트래픽이 많은 리포지토리나 PR이 준비될 때까지만 검토를 시작하려는 경우에 유용합니다.

113 </Step>

114</Steps>

115 

116리포지토리 테이블은 최근 활동을 기반으로 각 리포지토리의 평균 검토 비용도 표시합니다. 행 작업 메뉴를 사용하여 리포지토리별로 Code Review를 켜거나 끄거나 리포지토리를 완전히 제거할 수 있습니다.

117 

118설정을 확인하려면 테스트 PR을 열어보십시오. 자동 트리거를 선택한 경우 **Claude Code Review**라는 확인 실행이 몇 분 내에 나타납니다. 수동을 선택한 경우 PR에서 `@claude review`를 댓글로 작성하여 첫 번째 검토를 시작합니다. 확인 실행이 나타나지 않으면 리포지토리가 관리자 설정에 나열되어 있고 Claude GitHub 앱이 액세스할 수 있는지 확인하십시오.

119 

120## 수동으로 검토 트리거

121 

122두 개의 댓글 명령이 요청 시 검토를 시작합니다. 둘 다 리포지토리의 구성된 트리거와 관계없이 작동하므로 수동 모드에서 특정 PR을 검토에 옵트인하거나 다른 모드에서 즉시 재검토를 받을 수 있습니다.

123 

124| 명령 | 수행 작업 |

125| :-------------------- | :-------------------------------- |

126| `@claude review` | 검토를 시작하고 PR을 앞으로 푸시 트리거 검토에 구독합니다 |

127| `@claude review once` | PR을 향후 푸시에 구독하지 않고 단일 검토를 시작합니다 |

128 

129PR의 현재 상태에 대한 피드백을 원하지만 이후의 모든 푸시가 검토를 발생시키지 않기를 원할 때 `@claude review once`를 사용합니다. 이는 빈번한 푸시가 있는 장기 실행 PR이나 PR의 검토 동작을 변경하지 않고 일회성 두 번째 의견을 원할 때 유용합니다.

130 

131댓글이 검토를 트리거하려면:

132 

133* 최상위 PR 댓글로 게시하고 diff 라인의 인라인 댓글로는 게시하지 않습니다

134* 댓글의 시작 부분에 명령을 입력하고, 한 번만 형식을 사용하는 경우 `once`를 같은 라인에 입력합니다

135* 리포지토리에 대한 소유자, 멤버 또는 협력자 액세스 권한이 있어야 합니다

136* PR은 열려 있어야 합니다

137 

138자동 트리거와 달리 수동 트리거는 명시적 요청이 초안 상태와 관계없이 지금 검토를 원한다는 신호이므로 초안 PR에서 실행됩니다.

139 

140해당 PR에서 검토가 이미 실행 중인 경우 요청은 진행 중인 검토가 완료될 때까지 대기열에 추가됩니다. PR의 확인 실행을 통해 진행 상황을 모니터링할 수 있습니다.

141 

142## 검토 사용자 정의

143 

144Code Review는 리포지토리에서 두 개의 파일을 읽어 플래그할 항목을 안내합니다. 이들은 검토에 영향을 미치는 강도가 다릅니다:

145 

146* **`CLAUDE.md`**: Claude Code가 검토뿐만 아니라 모든 작업에 사용하는 공유 프로젝트 지침입니다. Code Review는 이를 프로젝트 컨텍스트로 읽고 새로 도입된 위반을 nit으로 플래그합니다.

147* **`REVIEW.md`**: 검토 전용 지침으로 검토 파이프라인의 모든 에이전트에 최우선 순위로 직접 주입됩니다. 이를 사용하여 플래그되는 항목, 심각도 및 결과 보고 방식을 변경합니다.

148 

149### CLAUDE.md

150 

151Code Review는 리포지토리의 `CLAUDE.md` 파일을 읽고 새로 도입된 위반을 [nit 수준](#severity-levels) 결과로 처리합니다. 이는 양방향으로 작동합니다: PR이 `CLAUDE.md` 문을 오래된 것으로 만드는 방식으로 코드를 변경하면 Claude는 문서도 업데이트해야 한다고 플래그합니다.

152 

153Claude는 디렉토리 계층 구조의 모든 수준에서 `CLAUDE.md` 파일을 읽으므로 하위 디렉토리의 `CLAUDE.md`의 규칙은 해당 경로 아래의 파일에만 적용됩니다. `CLAUDE.md` 작동 방식에 대한 자세한 내용은 [메모리 설명서](/ko/memory)를 참조하십시오.

154 

155일반 Claude Code 세션에 적용하지 않으려는 검토 전용 지침의 경우 대신 [`REVIEW.md`](#review-md)를 사용하십시오.

156 

157### REVIEW\.md

158 

159`REVIEW.md`는 리포지토리 루트의 파일로 Code Review가 리포지토리에서 어떻게 작동하는지를 재정의합니다. 그 내용은 검토 파이프라인의 모든 에이전트의 시스템 프롬프트에 최우선 순위 지침 블록으로 주입되어 기본 검토 지침보다 우선합니다.

160 

161그것이 그대로 붙여넣어지기 때문에 `REVIEW.md`는 일반 지침입니다: [`@` import 구문](/ko/memory#import-additional-files)은 확장되지 않으며 참조된 파일은 프롬프트로 읽혀지지 않습니다. 적용하려는 규칙을 파일에 직접 입력합니다.

162 

163#### 조정할 수 있는 항목

164 

165`REVIEW.md`는 자유 형식 마크다운이므로 검토 지침으로 표현할 수 있는 모든 것이 범위 내입니다. 아래 패턴은 실제로 가장 큰 영향을 미칩니다.

166 

167**심각도**: 리포지토리에 대해 🔴 Important가 의미하는 바를 재정의합니다. 기본 보정은 프로덕션 코드를 대상으로 합니다. 문서 리포지토리, 구성 리포지토리 또는 프로토타입은 훨씬 더 좁은 정의를 원할 수 있습니다. Important인 결과 클래스와 최대 Nit인 결과 클래스를 명시적으로 명시합니다. 다른 방향으로도 확대할 수 있습니다. 예를 들어 기본 nit이 아닌 Important로 `CLAUDE.md` 위반을 처리합니다.

168 

169**Nit 볼륨**: 단일 검토가 게시하는 🟡 Nit 댓글의 수를 제한합니다. 산문 및 구성 파일은 영원히 다듬어질 수 있습니다. "최대 5개의 nit을 보고하고 나머지를 요약에 개수로 언급"과 같은 제한은 검토를 실행 가능하게 유지합니다.

170 

171**규칙 건너뛰기**: Claude가 결과를 게시하지 않아야 하는 경로, 분기 패턴 및 결과 카테고리를 나열합니다. 일반적인 후보는 생성된 코드, lockfile, 공급된 종속성 및 기계 작성 분기이며, linting 또는 맞춤법 검사와 같이 CI가 이미 적용하는 모든 것입니다. 완전한 정밀 검사를 보장하지 않지만 일부 검토를 보장하는 경로의 경우 완전히 건너뛰는 대신 더 높은 기준을 설정합니다: "`scripts/`에서는 거의 확실하고 심각한 경우에만 보고합니다."

172 

173**리포지토리별 확인**: 모든 PR에서 플래그하려는 규칙을 추가합니다. 예: "새 API 경로에는 통합 테스트가 있어야 합니다." `REVIEW.md`가 최우선 순위로 주입되기 때문에 이들은 긴 `CLAUDE.md`의 동일한 규칙보다 더 안정적으로 도착합니다.

174 

175**검증 기준**: 결과 클래스가 게시되기 전에 증거를 요구합니다. 예를 들어 "동작 주장은 명명에서의 추론이 아닌 소스의 `file:line` 인용이 필요합니다"는 그렇지 않으면 작성자에게 왕복을 비용으로 하는 거짓 양성을 줄입니다.

176 

177**재검토 수렴**: PR이 이미 검토되었을 때 Claude가 어떻게 작동해야 하는지 알려줍니다. "첫 번째 검토 후 새로운 nit을 억제하고 Important 결과만 게시"와 같은 규칙은 한 줄 수정이 스타일만으로 7라운드에 도달하는 것을 방지합니다.

178 

179**요약 형태**: 검토 본문이 `2 factual, 4 style`과 같은 한 줄 집계로 시작하도록 요청하고 그것이 경우일 때 "factual 문제 없음"으로 시작하도록 요청합니다. 작성자는 세부 사항 전에 작업의 형태를 알고 싶어합니다.

180 

181#### 예시

182 

183이 `REVIEW.md`는 백엔드 서비스의 심각도를 재보정하고, nit을 제한하고, 생성된 파일을 건너뛰고, 리포지토리별 확인을 추가합니다.

184 

185```markdown theme={null}

186# 검토 지침

187 

188## Important가 여기서 의미하는 바

189 

190동작을 중단하거나 데이터를 유출하거나 롤백을 차단할 결과에 대해 Important를 예약합니다: 잘못된 논리, 범위가 지정되지 않은 데이터베이스 쿼리, 로그 또는 오류 메시지의 PII, 그리고 역호환되지 않는 마이그레이션입니다. 스타일, 명명 및 리팩토링 제안은 최대 Nit입니다.

191 

192## Nit 제한

193 

194검토당 최대 5개의 Nit을 보고합니다. 더 많이 발견한 경우 인라인으로 게시하는 대신 요약에서 "plus N similar items"라고 말합니다. 발견한 모든 것이 Nit인 경우 "No blocking issues"로 요약을 시작합니다.

195 

196## 보고하지 않음

197 

198- CI가 이미 적용하는 모든 것: lint, 형식, 타입 오류

199- `src/gen/` 아래의 생성된 파일 및 모든 `*.lock` 파일

200- 의도적으로 프로덕션 규칙을 위반하는 테스트 전용 코드

201 

202## 항상 확인

203 

204- 새 API 경로에는 통합 테스트가 있습니다

205- 로그 라인에 이메일 주소, 사용자 ID 또는 요청 본문이 포함되지 않습니다

206- 데이터베이스 쿼리는 호출자의 테넌트로 범위가 지정됩니다

207```

208 

209#### 초점 유지

210 

211길이는 비용이 있습니다: 긴 `REVIEW.md`는 가장 중요한 규칙을 희석합니다. 검토 동작을 변경하는 지침으로 유지하고 일반 프로젝트 컨텍스트는 `CLAUDE.md`에 남겨둡니다.

212 

213## 사용량 보기

214 

215[claude.ai/analytics/code-review](https://claude.ai/analytics/code-review)로 이동하여 조직 전체의 Code Review 활동을 확인합니다. 대시보드는 다음을 표시합니다:

216 

217| 섹션 | 표시 내용 |

218| :------------------- | :------------------------------- |

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

220| Cost weekly | Code Review의 주간 지출 |

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

222| Repository breakdown | 리포지토리별 검토된 PR 개수 및 해결된 댓글 |

223 

224관리자 설정의 리포지토리 테이블은 각 리포지토리의 검토당 평균 비용도 표시합니다. 대시보드 비용 수치는 활동 모니터링을 위한 추정치입니다. 청구서 정확한 지출의 경우 Anthropic 청구서를 참조하십시오.

225 

226## 가격

227 

228Code Review는 토큰 사용량을 기반으로 청구됩니다. 각 검토는 평균 \$15-25이며 PR 크기, 코드베이스 복잡도 및 검증이 필요한 문제 수에 따라 확장됩니다. Code Review 사용량은 [추가 사용량](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans)을 통해 별도로 청구되며 계획의 포함된 사용량에 포함되지 않습니다.

229 

230선택한 검토 트리거는 총 비용에 영향을 미칩니다:

231 

232* **Once after PR creation**: PR당 한 번 실행됩니다

233* **After every push**: 각 푸시에서 실행되어 푸시 수만큼 비용이 증가합니다

234* **Manual**: PR에서 누군가 `@claude review`를 댓글로 작성할 때까지 검토가 없습니다

235 

236모든 모드에서 `@claude review`를 [댓글로 작성](#manually-trigger-reviews)하면 PR이 푸시 트리거 검토에 옵트인되므로 해당 댓글 이후 푸시당 추가 비용이 발생합니다. 향후 푸시에 구독하지 않고 단일 검토를 실행하려면 대신 `@claude review once`를 댓글로 작성하십시오.

237 

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

239 

240[분석](#view-usage)의 주간 비용 차트 또는 관리자 설정의 리포지토리별 평균 비용 열을 통해 지출을 모니터링합니다.

241 

242## 문제 해결

243 

244검토 실행은 최선의 노력입니다. 실패한 실행은 PR을 차단하지 않지만 자동으로 재시도하지도 않습니다. 이 섹션에서는 실패한 실행에서 복구하는 방법과 확인 실행이 찾을 수 없는 문제를 보고할 때 어디를 봐야 하는지 다룹니다.

245 

246### 실패하거나 시간 초과된 검토 재트리거

247 

248검토 인프라가 내부 오류에 도달하거나 시간 제한을 초과하면 확인 실행이 **Code review encountered an error** 또는 **Code review timed out** 제목으로 완료됩니다. 결론은 여전히 중립적이므로 병합을 차단하는 것은 없지만 결과가 게시되지 않습니다.

249 

250검토를 다시 실행하려면 PR에서 `@claude review once`를 댓글로 작성하십시오. 이렇게 하면 PR을 향후 푸시에 구독하지 않고 새로운 검토를 시작합니다. PR이 이미 푸시 트리거 검토에 구독되어 있으면 새 커밋을 푸시하면 새 검토도 시작됩니다.

251 

252GitHub의 Checks 탭의 **Re-run** 버튼은 Code Review를 재트리거하지 않습니다. 댓글 명령이나 새 푸시를 대신 사용하십시오.

253 

254### 검토가 실행되지 않았고 PR이 지출 한도 메시지를 표시합니다

255 

256조직의 월간 지출 한도에 도달하면 Code Review는 검토가 건너뛰어졌음을 설명하는 단일 댓글을 PR에 게시합니다. 검토는 다음 청구 기간의 시작 시 자동으로 재개되거나 관리자가 [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage)에서 한도를 높일 때 즉시 재개됩니다.

257 

258### 인라인 댓글로 표시되지 않는 문제 찾기

259 

260확인 실행 제목이 문제가 발견되었다고 말하지만 diff에서 인라인 검토 댓글을 보지 못하면 결과가 표시되는 다른 위치를 확인하십시오:

261 

262* **Check run Details**: Checks 탭의 Claude Code Review 확인 옆에 있는 **Details**를 클릭합니다. 심각도 테이블은 인라인 댓글이 수락되었는지 여부와 관계없이 파일, 라인 및 요약과 함께 모든 결과를 나열합니다.

263* **Files changed annotations**: PR의 **Files changed** 탭을 엽니다. 결과는 검토 댓글과 별도로 diff 라인에 직접 첨부된 주석으로 렌더링됩니다.

264* **Review body**: 검토가 실행 중인 동안 PR을 푸시한 경우 일부 결과는 현재 diff에 더 이상 존재하지 않는 라인을 참조할 수 있습니다. 이들은 인라인 댓글이 아닌 검토 본문 텍스트의 **Additional findings** 제목 아래에 나타납니다.

265 

266## 관련 리소스

267 

268Code Review는 Claude Code의 나머지 부분과 함께 작동하도록 설계되었습니다. PR을 열기 전에 로컬에서 검토를 실행하거나, 자체 호스팅 설정이 필요하거나, `CLAUDE.md`가 도구 전체에서 Claude의 동작을 형성하는 방식에 대해 더 깊이 알고 싶다면 다음 페이지가 좋은 다음 단계입니다:

269 

270* [Plugins](/ko/discover-plugins): 푸시 전에 로컬에서 온디맨드 검토를 실행하기 위한 `code-review` 플러그인을 포함한 플러그인 마켓플레이스를 찾아봅니다

271* [GitHub Actions](/ko/github-actions): 코드 검토 이상의 사용자 정의 자동화를 위해 자신의 GitHub Actions 워크플로우에서 Claude를 실행합니다

272* [GitLab CI/CD](/ko/gitlab-ci-cd): GitLab 파이프라인을 위한 자체 호스팅 Claude 통합

273* [Memory](/ko/memory): Claude Code 전체에서 `CLAUDE.md` 파일이 작동하는 방식

274* [Analytics](/ko/analytics): 코드 검토 이상으로 Claude Code 사용량을 추적합니다

commands.md +113 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 명령어

6 

7> Claude Code에서 사용 가능한 명령어의 완전한 참조입니다. 기본 제공 명령어 및 번들 skills를 포함합니다.

8 

9명령어는 세션 내에서 Claude Code를 제어합니다. 모델을 전환하고, 권한을 관리하고, 컨텍스트를 지우고, 워크플로우를 실행하는 등의 빠른 방법을 제공합니다.

10 

11`/`를 입력하면 사용 가능한 모든 명령어를 볼 수 있으며, `/` 다음에 문자를 입력하여 필터링할 수 있습니다.

12 

13아래 표는 Claude Code에 포함된 모든 명령어를 나열합니다. \*\*[Skill](/ko/skills#bundled-skills)\*\*로 표시된 항목은 번들 skills입니다. 이들은 직접 작성하는 skills와 동일한 메커니즘을 사용합니다. Claude에 전달되는 프롬프트이며, Claude는 관련이 있을 때 자동으로 호출할 수도 있습니다. 그 외의 모든 것은 CLI에 코딩된 동작을 가진 기본 제공 명령어입니다. 자신만의 명령어를 추가하려면 [skills](/ko/skills)를 참조하세요.

14 

15모든 명령어가 모든 사용자에게 표시되는 것은 아닙니다. 가용성은 플랫폼, 요금제 및 환경에 따라 달라집니다. 예를 들어, `/desktop`은 macOS 및 Windows에서만 표시되고, `/upgrade`는 Pro 및 Max 요금제에서만 표시됩니다.

16 

17아래 표에서 `<arg>`는 필수 인수를 나타내고 `[arg]`는 선택적 인수를 나타냅니다.

18 

19| 명령어 | 목적 |

20| :---------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

21| `/add-dir <path>` | 현재 세션 중에 파일 액세스를 위한 작업 디렉토리를 추가합니다. 대부분의 `.claude/` 구성은 추가된 디렉토리에서 [발견되지 않습니다](/ko/permissions#additional-directories-grant-file-access-not-configuration). 나중에 `--continue` 또는 `--resume`을 사용하여 추가된 디렉토리에서 세션을 재개할 수 있습니다 |

22| `/agents` | [agent](/ko/sub-agents) 구성을 관리합니다 |

23| `/autofix-pr [prompt]` | 현재 브랜치의 PR을 감시하고 CI가 실패하거나 검토자가 댓글을 남길 때 수정 사항을 푸시하는 [Claude Code on the web](/ko/claude-code-on-the-web#auto-fix-pull-requests) 세션을 생성합니다. `gh pr view`를 사용하여 체크아웃된 브랜치에서 열린 PR을 감지합니다. 다른 PR을 감시하려면 먼저 해당 브랜치를 체크아웃하세요. 기본적으로 원격 세션은 모든 CI 실패 및 검토 댓글을 수정하도록 지시받습니다. 프롬프트를 전달하여 다른 지침을 제공합니다. 예를 들어 `/autofix-pr only fix lint and type errors`. `gh` CLI 및 [Claude Code on the web](/ko/claude-code-on-the-web#who-can-use-claude-code-on-the-web)에 대한 액세스가 필요합니다 |

24| `/batch <instruction>` | **[Skill](/ko/skills#bundled-skills).** 코드베이스 전체에서 대규모 변경 사항을 병렬로 조율합니다. 코드베이스를 연구하고, 작업을 5\~30개의 독립적인 단위로 분해하고, 계획을 제시합니다. 승인되면 격리된 [git worktree](/ko/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees)에서 단위당 하나의 백그라운드 agent를 생성합니다. 각 agent는 해당 단위를 구현하고, 테스트를 실행하고, pull request를 엽니다. git 리포지토리가 필요합니다. 예: `/batch migrate src/ from Solid to React` |

25| `/branch [name]` | 이 시점에서 현재 대화의 브랜치를 만듭니다. 브랜치로 전환하고 원본을 보존하며, `/resume`을 사용하여 돌아갈 수 있습니다. 별칭: `/fork`. [`CLAUDE_CODE_FORK_SUBAGENT`](/ko/env-vars)가 설정되면, `/fork`는 대신 [forked subagent](/ko/sub-agents#fork-the-current-conversation)를 생성하며 더 이상 이 명령어의 별칭이 아닙니다 |

26| `/btw <question>` | 대화에 추가하지 않고 빠른 [side question](/ko/interactive-mode#side-questions-with-%2Fbtw)을 합니다 |

27| `/chrome` | [Claude in Chrome](/ko/chrome) 설정을 구성합니다 |

28| `/claude-api [migrate\|managed-agents-onboard]` | **[Skill](/ko/skills#bundled-skills).** 프로젝트의 언어(Python, TypeScript, Java, Go, Ruby, C#, PHP 또는 cURL) 및 Managed Agents 참조에 대한 Claude API 참조 자료를 로드합니다. 도구 사용, 스트리밍, 배치, 구조화된 출력 및 일반적인 함정을 다룹니다. 또한 코드가 `anthropic` 또는 `@anthropic-ai/sdk`를 가져올 때 자동으로 활성화됩니다. `/claude-api migrate`를 실행하여 기존 Claude API 코드를 최신 모델로 업그레이드합니다. Claude는 스캔할 파일과 대상 모델을 묻고, 모델 ID, thinking 구성 및 버전 간에 변경된 기타 매개변수를 업데이트합니다. `/claude-api managed-agents-onboard`를 실행하여 처음부터 새로운 Managed Agent를 만드는 대화형 안내를 받습니다 |

29| `/clear` | 빈 컨텍스트로 새 대화를 시작합니다. 이전 대화는 `/resume`에서 사용 가능하게 유지됩니다. 같은 대화를 계속하면서 컨텍스트를 확보하려면 `/compact`를 대신 사용하세요. 별칭: `/reset`, `/new` |

30| `/color [color\|default]` | 현재 세션의 프롬프트 바 색상을 설정합니다. 사용 가능한 색상: `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, `cyan`. 초기화하려면 `default`를 사용합니다. [Remote Control](/ko/remote-control)이 연결되면 색상이 claude.ai/code와 동기화됩니다 |

31| `/compact [instructions]` | 지금까지의 대화를 요약하여 컨텍스트를 확보합니다. 선택적으로 요약에 대한 포커스 지침을 전달합니다. [compaction이 규칙, skills 및 메모리 파일을 처리하는 방법](/ko/context-window#what-survives-compaction)을 참조하세요 |

32| `/config` | [Settings](/ko/settings) 인터페이스를 열어 테마, 모델, [output style](/ko/output-styles) 및 기타 기본 설정을 조정합니다. 별칭: `/settings` |

33| `/context` | 현재 컨텍스트 사용량을 색상 그리드로 시각화합니다. 컨텍스트 집약적 도구, 메모리 부풀림 및 용량 경고에 대한 최적화 제안을 표시합니다 |

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

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

36| `/debug [description]` | **[Skill](/ko/skills#bundled-skills).** 현재 세션에 대해 디버그 로깅을 활성화하고 세션 디버그 로그를 읽어 문제를 해결합니다. 디버그 로깅은 `claude --debug`로 시작하지 않는 한 기본적으로 꺼져 있으므로, 세션 중간에 `/debug`를 실행하면 그 시점부터 로그 캡처를 시작합니다. 선택적으로 분석에 초점을 맞추기 위해 문제를 설명합니다 |

37| `/desktop` | 현재 세션을 Claude Code Desktop 앱에서 계속합니다. macOS 및 Windows만 해당. 별칭: `/app` |

38| `/diff` | 커밋되지 않은 변경 사항과 턴별 diff를 표시하는 대화형 diff 뷰어를 엽니다. 왼쪽/오른쪽 화살표를 사용하여 현재 git diff와 개별 Claude 턴 사이를 전환하고, 위/아래를 사용하여 파일을 탐색합니다 |

39| `/doctor` | Claude Code 설치 및 설정을 진단하고 확인합니다. 결과는 상태 아이콘과 함께 표시됩니다. `f`를 눌러 Claude가 보고된 문제를 수정하도록 합니다 |

40| `/effort [level\|auto]` | 모델 [effort level](/ko/model-config#adjust-effort-level)을 설정합니다. `low`, `medium`, `high`, `xhigh` 또는 `max`를 허용합니다. 사용 가능한 수준은 모델에 따라 다르며 `max`는 세션 전용입니다. `auto`는 모델 기본값으로 재설정합니다. 인수 없이 대화형 슬라이더를 엽니다. 왼쪽 및 오른쪽 화살표를 사용하여 수준을 선택하고 `Enter`를 눌러 적용합니다. 현재 응답이 완료될 때까지 기다리지 않고 즉시 적용됩니다 |

41| `/exit` | CLI를 종료합니다. 별칭: `/quit` |

42| `/export [filename]` | 현재 대화를 일반 텍스트로 내보냅니다. 파일 이름이 있으면 해당 파일에 직접 작성합니다. 없으면 클립보드에 복사하거나 파일에 저장할 수 있는 대화 상자를 엽니다 |

43| `/extra-usage` | 속도 제한에 도달했을 때 계속 작업할 수 있도록 추가 사용량을 구성합니다 |

44| `/fast [on\|off]` | [fast mode](/ko/fast-mode)를 켜거나 끕니다 |

45| `/feedback [report]` | Claude Code에 대한 피드백을 제출합니다. 별칭: `/bug` |

46| `/fewer-permission-prompts` | **[Skill](/ko/skills#bundled-skills).** 트랜스크립트에서 일반적인 읽기 전용 Bash 및 MCP 도구 호출을 스캔한 다음, 권한 프롬프트를 줄이기 위해 프로젝트 `.claude/settings.json`에 우선순위가 지정된 허용 목록을 추가합니다 |

47| `/focus` | 포커스 뷰를 전환합니다. 마지막 프롬프트, 편집 diffstats가 있는 한 줄 도구 호출 요약 및 최종 응답만 표시합니다. 선택 항목은 세션 전체에서 유지됩니다. [fullscreen rendering](/ko/fullscreen)에서만 사용 가능합니다 |

48| `/heapdump` | JavaScript 힙 스냅샷 및 메모리 분석을 `~/Desktop`에 작성하거나, Desktop 폴더가 없는 Linux의 경우 홈 디렉토리에 작성하여 높은 메모리 사용량을 진단합니다. [troubleshooting](/ko/troubleshooting#high-cpu-or-memory-usage)을 참조하세요 |

49| `/help` | 도움말 및 사용 가능한 명령어를 표시합니다 |

50| `/hooks` | 도구 이벤트에 대한 [hook](/ko/hooks) 구성을 봅니다 |

51| `/ide` | IDE 통합을 관리하고 상태를 표시합니다 |

52| `/init` | `CLAUDE.md` 가이드로 프로젝트를 초기화합니다. skills, hooks 및 개인 메모리 파일을 안내하는 대화형 흐름도 진행하려면 `CLAUDE_CODE_NEW_INIT=1`을 설정하세요 |

53| `/insights` | Claude Code 세션을 분석하는 보고서를 생성합니다. 프로젝트 영역, 상호 작용 패턴 및 마찰 지점을 포함합니다 |

54| `/install-github-app` | 리포지토리에 대해 [Claude GitHub Actions](/ko/github-actions) 앱을 설정합니다. 리포지토리를 선택하고 통합을 구성하는 과정을 안내합니다 |

55| `/install-slack-app` | Claude Slack 앱을 설치합니다. OAuth 흐름을 완료하기 위해 브라우저를 엽니다 |

56| `/keybindings` | 키바인딩 구성 파일을 열거나 만듭니다 |

57| `/login` | Anthropic 계정에 로그인합니다 |

58| `/logout` | Anthropic 계정에서 로그아웃합니다 |

59| `/loop [interval] [prompt]` | **[Skill](/ko/skills#bundled-skills).** 세션이 열려 있는 동안 프롬프트를 반복적으로 실행합니다. 간격을 생략하면 Claude가 반복 사이에 자동으로 속도를 조절합니다. 프롬프트를 생략하면 Claude가 자동 유지 관리 검사를 실행하거나, 있으면 `.claude/loop.md`의 프롬프트를 실행합니다. 예: `/loop 5m check if the deploy finished`. [Run prompts on a schedule](/ko/scheduled-tasks)을 참조하세요. 별칭: `/proactive` |

60| `/mcp` | MCP 서버 연결 및 OAuth 인증을 관리합니다 |

61| `/memory` | `CLAUDE.md` 메모리 파일을 편집하고, [auto-memory](/ko/memory#auto-memory)를 활성화 또는 비활성화하며, 자동 메모리 항목을 봅니다 |

62| `/mobile` | Claude 모바일 앱을 다운로드할 수 있는 QR 코드를 표시합니다. 별칭: `/ios`, `/android` |

63| `/model [model]` | AI 모델을 선택하거나 변경합니다. 이를 지원하는 모델의 경우 왼쪽/오른쪽 화살표를 사용하여 [effort level을 조정](/ko/model-config#adjust-effort-level)합니다. 인수 없이 대화에 이전 출력이 있을 때 확인을 요청하는 선택기를 엽니다. 다음 응답이 캐시된 컨텍스트 없이 전체 기록을 다시 읽기 때문입니다. 확인되면 현재 응답이 완료될 때까지 기다리지 않고 변경 사항이 적용됩니다 |

64| `/passes` | 친구들과 Claude Code의 무료 1주일을 공유합니다. 계정이 적격인 경우에만 표시됩니다 |

65| `/permissions` | 도구 권한에 대한 허용, 요청 및 거부 규칙을 관리합니다. 범위별로 규칙을 보고, 규칙을 추가 또는 제거하고, 작업 디렉토리를 관리하며, [최근 자동 모드 거부](/ko/auto-mode-config#review-denials)를 검토할 수 있는 대화형 대화 상자를 엽니다. 별칭: `/allowed-tools` |

66| `/plan [description]` | 프롬프트에서 직접 plan mode로 들어갑니다. 선택적 설명을 전달하여 plan mode로 들어가고 즉시 해당 작업으로 시작합니다. 예를 들어 `/plan fix the auth bug` |

67| `/plugin` | Claude Code [plugins](/ko/plugins)를 관리합니다 |

68| `/powerup` | 애니메이션 데모가 포함된 빠른 대화형 레슨을 통해 Claude Code 기능을 발견합니다 |

69| `/pr-comments [PR]` | {/* max-version: 2.1.90 */}v2.1.91에서 제거됨. 대신 Claude에 직접 pull request 댓글을 보도록 요청하세요. 이전 버전에서는 GitHub pull request의 댓글을 가져와 표시합니다. 현재 브랜치의 PR을 자동으로 감지하거나 PR URL 또는 번호를 전달합니다. `gh` CLI가 필요합니다 |

70| `/privacy-settings` | 개인정보 보호 설정을 보고 업데이트합니다. Pro 및 Max 요금제 구독자만 사용 가능합니다 |

71| `/recap` | 현재 세션의 한 줄 요약을 요청 시 생성합니다. 자동으로 나타나는 [Session recap](/ko/interactive-mode#session-recap)을 참조하세요. 이는 떠난 후 표시됩니다 |

72| `/release-notes` | 대화형 버전 선택기에서 변경 로그를 봅니다. 특정 버전을 선택하여 해당 릴리스 노트를 보거나, 모든 버전을 표시하도록 선택합니다 |

73| `/reload-plugins` | 모든 활성 [plugins](/ko/plugins)를 다시 로드하여 재시작하지 않고 보류 중인 변경 사항을 적용합니다. 각 다시 로드된 구성 요소의 개수를 보고하고 로드 오류를 표시합니다 |

74| `/remote-control` | 이 세션을 claude.ai에서 [remote control](/ko/remote-control)할 수 있도록 합니다. 별칭: `/rc` |

75| `/remote-env` | [`--remote`로 시작된 웹 세션](/ko/claude-code-on-the-web#configure-your-environment)에 대한 기본 원격 환경을 구성합니다 |

76| `/rename [name]` | 현재 세션의 이름을 바꾸고 프롬프트 바에 이름을 표시합니다. 이름이 없으면 대화 기록에서 자동으로 생성합니다 |

77| `/resume [session]` | ID 또는 이름으로 대화를 재개하거나 세션 선택기를 엽니다. 별칭: `/continue` |

78| `/review [PR]` | 현재 세션에서 로컬로 pull request를 검토합니다. 더 깊은 클라우드 기반 검토는 [`/ultrareview`](/ko/ultrareview)를 참조하세요 |

79| `/rewind` | 대화 및/또는 코드를 이전 지점으로 되감기하거나 선택한 메시지에서 요약합니다. [checkpointing](/ko/checkpointing)을 참조하세요. 별칭: `/checkpoint`, `/undo` |

80| `/sandbox` | [sandbox mode](/ko/sandboxing)를 전환합니다. 지원되는 플랫폼에서만 사용 가능합니다 |

81| `/schedule [description]` | [routines](/ko/routines)를 만들거나, 업데이트하거나, 나열하거나, 실행합니다. Claude가 설정 과정을 대화형으로 안내합니다. 별칭: `/routines` |

82| `/security-review` | 현재 브랜치의 보류 중인 변경 사항을 보안 취약점에 대해 분석합니다. git diff를 검토하고 주입, 인증 문제 및 데이터 노출과 같은 위험을 식별합니다 |

83| `/setup-bedrock` | [Amazon Bedrock](/ko/amazon-bedrock) 인증, 지역 및 모델 핀을 대화형 마법사를 통해 구성합니다. `CLAUDE_CODE_USE_BEDROCK=1`이 설정되어 있을 때만 표시됩니다. 처음 Bedrock을 사용하는 사용자는 로그인 화면에서도 이 마법사에 액세스할 수 있습니다 |

84| `/setup-vertex` | [Google Vertex AI](/ko/google-vertex-ai) 인증, 프로젝트, 지역 및 모델 핀을 대화형 마법사를 통해 구성합니다. `CLAUDE_CODE_USE_VERTEX=1`이 설정되어 있을 때만 표시됩니다. 처음 Vertex AI를 사용하는 사용자는 로그인 화면에서도 이 마법사에 액세스할 수 있습니다 |

85| `/simplify [focus]` | **[Skill](/ko/skills#bundled-skills).** 최근에 변경된 파일을 코드 재사용, 품질 및 효율성 문제에 대해 검토한 다음 수정합니다. 3개의 검토 agent를 병렬로 생성하고, 해당 결과를 집계하고, 수정 사항을 적용합니다. 특정 관심사에 초점을 맞추기 위해 텍스트를 전달합니다: `/simplify focus on memory efficiency` |

86| `/skills` | 사용 가능한 [skills](/ko/skills)를 나열합니다. `t`를 눌러 토큰 수로 정렬합니다 |

87| `/stats` | `/usage`의 별칭입니다. Stats 탭에서 엽니다 |

88| `/status` | 버전, 모델, 계정 및 연결성을 표시하는 Settings 인터페이스(Status 탭)를 엽니다. Claude가 응답하는 동안 현재 응답이 완료될 때까지 기다리지 않고 작동합니다 |

89| `/statusline` | Claude Code의 [status line](/ko/statusline)을 구성합니다. 원하는 내용을 설명하거나 인수 없이 실행하여 셸 프롬프트에서 자동으로 구성합니다 |

90| `/stickers` | Claude Code 스티커를 주문합니다 |

91| `/tasks` | 백그라운드 작업을 나열하고 관리합니다. `/bashes`로도 사용 가능합니다 |

92| `/team-onboarding` | Claude Code 사용 기록에서 팀 온보딩 가이드를 생성합니다. Claude는 지난 30일간의 세션, 명령어 및 MCP 서버 사용을 분석하고 팀원이 첫 메시지로 붙여넣어 빠르게 설정할 수 있는 markdown 가이드를 생성합니다 |

93| `/teleport` | [Claude Code on the web](/ko/claude-code-on-the-web#from-web-to-terminal) 세션을 이 터미널로 가져옵니다. 선택기를 열고 브랜치와 대화를 가져옵니다. `/tp`로도 사용 가능합니다. claude.ai 구독이 필요합니다 |

94| `/terminal-setup` | Shift+Enter 및 기타 바로 가기에 대한 터미널 키바인딩을 구성합니다. VS Code, Cursor, Windsurf, Alacritty 또는 Zed와 같이 필요한 터미널에서만 표시됩니다 |

95| `/theme` | 색상 테마를 변경합니다. 터미널의 어두운 또는 밝은 배경을 따르는 `auto` 옵션, 밝은 색과 어두운 색 변형, 색맹 접근 가능(daltonized) 테마, 터미널의 색상 팔레트를 사용하는 ANSI 테마 및 `~/.claude/themes/` 또는 plugins의 [custom themes](/ko/terminal-config#create-a-custom-theme)를 포함합니다. \*\*New custom theme…\*\*를 선택하여 새로 만듭니다 |

96| `/tui [default\|fullscreen]` | 터미널 UI 렌더러를 설정하고 대화를 유지하면서 다시 시작합니다. `fullscreen`은 [flicker-free alt-screen renderer](/ko/fullscreen)를 활성화합니다. 인수 없이 활성 렌더러를 인쇄합니다 |

97| `/ultraplan <prompt>` | [ultraplan](/ko/ultraplan) 세션에서 계획을 작성하고, 브라우저에서 검토한 다음, 원격으로 실행하거나 터미널로 다시 보냅니다 |

98| `/ultrareview [PR]` | [ultrareview](/ko/ultrareview)를 사용하여 클라우드 샌드박스에서 깊은 다중 agent 코드 검토를 실행합니다. Pro 및 Max에서 2026년 5월 5일까지 3회 무료 실행을 포함한 후 [extra usage](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans)가 필요합니다 |

99| `/upgrade` | 업그레이드 페이지를 열어 더 높은 요금제로 전환합니다 |

100| `/usage` | 세션 비용, 요금제 사용 제한 및 활동 통계를 표시합니다. 구독별 세부 정보는 [cost tracking guide](/ko/costs#using-the-%2Fusage-command)를 참조하세요. `/cost` 및 `/stats`는 별칭입니다 |

101| `/vim` | {/* max-version: 2.1.91 */}v2.1.92에서 제거됨. Vim과 Normal 편집 모드 사이를 전환하려면 `/config` → Editor mode를 사용하세요 |

102| `/voice [hold\|tap\|off]` | [voice dictation](/ko/voice-dictation)을 전환하거나 특정 모드에서 활성화합니다. Claude.ai 계정이 필요합니다 |

103| `/web-setup` | 로컬 `gh` CLI 자격 증명을 사용하여 GitHub 계정을 [Claude Code on the web](/ko/web-quickstart#connect-from-your-terminal)에 연결합니다. `/schedule`은 GitHub가 연결되지 않은 경우 자동으로 이를 요청합니다 |

104 

105## MCP 프롬프트

106 

107MCP 서버는 명령어로 나타나는 프롬프트를 노출할 수 있습니다. 이들은 `/mcp__<server>__<prompt>` 형식을 사용하며 연결된 서버에서 동적으로 발견됩니다. 자세한 내용은 [MCP prompts](/ko/mcp#use-mcp-prompts-as-commands)를 참조하세요.

108 

109## 참고 항목

110 

111* [Skills](/ko/skills): 자신만의 명령어 만들기

112* [대화형 모드](/ko/interactive-mode): 키보드 바로 가기, Vim 모드 및 명령어 기록

113* [CLI 참조](/ko/cli-reference): 시작 시간 플래그

common-workflows.md +1030 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 일반적인 워크플로우

6 

7> Claude Code를 사용하여 코드베이스 탐색, 버그 수정, 리팩토링, 테스트 및 기타 일상적인 작업을 위한 단계별 가이드입니다.

8 

9이 페이지는 일상적인 개발을 위한 실용적인 워크플로우를 다룹니다: 낯선 코드 탐색, 디버깅, 리팩토링, 테스트 작성, PR 생성 및 세션 관리. 각 섹션에는 자신의 프로젝트에 맞게 조정할 수 있는 예제 프롬프트가 포함되어 있습니다. 더 높은 수준의 패턴과 팁은 [모범 사례](/ko/best-practices)를 참조하십시오.

10 

11## 새로운 코드베이스 이해하기

12 

13### 코드베이스의 빠른 개요 얻기

14 

15새로운 프로젝트에 방금 참여했고 그 구조를 빠르게 이해해야 한다고 가정해봅시다.

16 

17<Steps>

18 <Step title="프로젝트 루트 디렉토리로 이동">

19 ```bash theme={null}

20 cd /path/to/project

21 ```

22 </Step>

23 

24 <Step title="Claude Code 시작">

25 ```bash theme={null}

26 claude

27 ```

28 </Step>

29 

30 <Step title="높은 수준의 개요 요청">

31 ```text theme={null}

32 give me an overview of this codebase

33 ```

34 </Step>

35 

36 <Step title="특정 구성 요소에 대해 더 깊이 있게 살펴보기">

37 ```text theme={null}

38 explain the main architecture patterns used here

39 ```

40 

41 ```text theme={null}

42 what are the key data models?

43 ```

44 

45 ```text theme={null}

46 how is authentication handled?

47 ```

48 </Step>

49</Steps>

50 

51<Tip>

52 팁:

53 

54 * 광범위한 질문으로 시작한 다음 특정 영역으로 좁혀나가기

55 * 프로젝트에서 사용되는 코딩 규칙과 패턴에 대해 질문하기

56 * 프로젝트별 용어의 용어집 요청하기

57</Tip>

58 

59### 관련 코드 찾기

60 

61특정 기능이나 기능과 관련된 코드를 찾아야 한다고 가정해봅시다.

62 

63<Steps>

64 <Step title="Claude에게 관련 파일을 찾도록 요청">

65 ```text theme={null}

66 find the files that handle user authentication

67 ```

68 </Step>

69 

70 <Step title="구성 요소가 어떻게 상호작용하는지에 대한 컨텍스트 얻기">

71 ```text theme={null}

72 how do these authentication files work together?

73 ```

74 </Step>

75 

76 <Step title="실행 흐름 이해하기">

77 ```text theme={null}

78 trace the login process from front-end to database

79 ```

80 </Step>

81</Steps>

82 

83<Tip>

84 팁:

85 

86 * 찾고 있는 것에 대해 구체적으로 설명하기

87 * 프로젝트의 도메인 언어 사용하기

88 * 언어에 대한 [코드 인텔리전스 플러그인](/ko/discover-plugins#code-intelligence)을 설치하여 Claude에게 정확한 "정의로 이동" 및 "참조 찾기" 네비게이션 제공하기

89</Tip>

90 

91***

92 

93## 효율적으로 버그 수정하기

94 

95오류 메시지가 나타났고 그 원인을 찾아 수정해야 한다고 가정해봅시다.

96 

97<Steps>

98 <Step title="Claude와 오류 공유하기">

99 ```text theme={null}

100 I'm seeing an error when I run npm test

101 ```

102 </Step>

103 

104 <Step title="수정 권장사항 요청하기">

105 ```text theme={null}

106 suggest a few ways to fix the @ts-ignore in user.ts

107 ```

108 </Step>

109 

110 <Step title="수정 적용하기">

111 ```text theme={null}

112 update user.ts to add the null check you suggested

113 ```

114 </Step>

115</Steps>

116 

117<Tip>

118 팁:

119 

120 * Claude에게 문제를 재현하는 명령과 스택 추적을 알려주기

121 * 오류를 재현하는 단계 언급하기

122 * 오류가 간헐적인지 일관적인지 Claude에게 알려주기

123</Tip>

124 

125***

126 

127## 코드 리팩토링

128 

129오래된 코드를 최신 패턴과 관행을 사용하도록 업데이트해야 한다고 가정해봅시다.

130 

131<Steps>

132 <Step title="리팩토링할 레거시 코드 식별">

133 ```text theme={null}

134 find deprecated API usage in our codebase

135 ```

136 </Step>

137 

138 <Step title="리팩토링 권장사항 얻기">

139 ```text theme={null}

140 suggest how to refactor utils.js to use modern JavaScript features

141 ```

142 </Step>

143 

144 <Step title="안전하게 변경사항 적용하기">

145 ```text theme={null}

146 refactor utils.js to use ES2024 features while maintaining the same behavior

147 ```

148 </Step>

149 

150 <Step title="리팩토링 검증하기">

151 ```text theme={null}

152 run tests for the refactored code

153 ```

154 </Step>

155</Steps>

156 

157<Tip>

158 팁:

159 

160 * Claude에게 최신 접근 방식의 이점을 설명하도록 요청하기

161 * 필요할 때 변경사항이 하위 호환성을 유지하도록 요청하기

162 * 작고 테스트 가능한 증분으로 리팩토링 수행하기

163</Tip>

164 

165***

166 

167## 특화된 subagent 사용하기

168 

169특정 작업을 더 효과적으로 처리하기 위해 특화된 AI subagent를 사용하고 싶다고 가정해봅시다.

170 

171<Steps>

172 <Step title="사용 가능한 subagent 보기">

173 ```text theme={null}

174 /agents

175 ```

176 

177 이것은 모든 사용 가능한 subagent를 표시하고 새로운 것을 만들 수 있게 해줍니다.

178 </Step>

179 

180 <Step title="자동으로 subagent 사용하기">

181 Claude Code는 자동으로 특정 작업을 특화된 subagent에게 위임합니다:

182 

183 ```text theme={null}

184 review my recent code changes for security issues

185 ```

186 

187 ```text theme={null}

188 run all tests and fix any failures

189 ```

190 </Step>

191 

192 <Step title="명시적으로 특정 subagent 요청하기">

193 ```text theme={null}

194 use the code-reviewer subagent to check the auth module

195 ```

196 

197 ```text theme={null}

198 have the debugger subagent investigate why users can't log in

199 ```

200 </Step>

201 

202 <Step title="워크플로우를 위한 사용자 정의 subagent 만들기">

203 ```text theme={null}

204 /agents

205 ```

206 

207 그런 다음 "Create New subagent"를 선택하고 프롬프트를 따라 다음을 정의합니다:

208 

209 * subagent의 목적을 설명하는 고유 식별자 (예: `code-reviewer`, `api-designer`).

210 * Claude가 이 에이전트를 사용해야 할 때

211 * 액세스할 수 있는 도구

212 * 에이전트의 역할과 동작을 설명하는 시스템 프롬프트

213 </Step>

214</Steps>

215 

216<Tip>

217 팁:

218 

219 * 팀 공유를 위해 `.claude/agents/`에 프로젝트별 subagent 만들기

220 * 자동 위임을 활성화하기 위해 설명적인 `description` 필드 사용하기

221 * 각 subagent가 실제로 필요한 것으로 도구 액세스 제한하기

222 * 자세한 예제는 [subagent 문서](/ko/sub-agents)를 확인하기

223</Tip>

224 

225***

226 

227## Plan Mode를 사용하여 안전한 코드 분석

228 

229Plan Mode는 Claude에게 읽기 전용 작업으로 코드베이스를 분석하여 계획을 세우도록 지시하며, 코드베이스 탐색, 복잡한 변경 계획 또는 코드 안전한 검토에 완벽합니다. Plan Mode에서 Claude는 [`AskUserQuestion`](/ko/tools-reference)을 사용하여 계획을 제안하기 전에 요구사항을 수집하고 목표를 명확히 합니다.

230 

231### Plan Mode를 사용할 때

232 

233* **다단계 구현**: 기능이 많은 파일을 편집해야 할 때

234* **코드 탐색**: 무엇이든 변경하기 전에 코드베이스를 철저히 조사하고 싶을 때

235* **대화형 개발**: Claude와 방향을 반복하고 싶을 때

236 

237### Plan Mode 사용 방법

238 

239**세션 중에 Plan Mode 켜기**

240 

241**Shift+Tab**을 사용하여 세션 중에 Plan Mode로 전환할 수 있습니다.

242 

243Normal Mode에 있으면 **Shift+Tab**은 먼저 Auto-Accept Mode로 전환되며, 터미널 하단에 `⏵⏵ accept edits on`으로 표시됩니다. 그 다음 **Shift+Tab**은 Plan Mode로 전환되며, `⏸ plan mode on`으로 표시됩니다.

244 

245**Plan Mode에서 새 세션 시작하기**

246 

247Plan Mode에서 새 세션을 시작하려면 `--permission-mode plan` 플래그를 사용합니다:

248 

249```bash theme={null}

250claude --permission-mode plan

251```

252 

253**Plan Mode에서 "헤드리스" 쿼리 실행하기**

254 

255`-p`를 사용하여 Plan Mode에서 직접 쿼리를 실행할 수도 있습니다 (즉, ["헤드리스 모드"](/ko/headless)에서):

256 

257```bash theme={null}

258claude --permission-mode plan -p "Analyze the authentication system and suggest improvements"

259```

260 

261### 예제: 복잡한 리팩토링 계획하기

262 

263```bash theme={null}

264claude --permission-mode plan

265```

266 

267```text theme={null}

268I need to refactor our authentication system to use OAuth2. Create a detailed migration plan.

269```

270 

271Claude는 현재 구현을 분석하고 포괄적인 계획을 만듭니다. 후속 질문으로 정제합니다:

272 

273```text theme={null}

274What about backward compatibility?

275```

276 

277```text theme={null}

278How should we handle database migration?

279```

280 

281<Tip>`Ctrl+G`를 눌러 기본 텍스트 편집기에서 계획을 열고, Claude가 진행하기 전에 직접 편집할 수 있습니다.</Tip>

282 

283계획을 수락하면 Claude는 계획 콘텐츠에서 자동으로 세션 이름을 지정합니다. 이름은 프롬프트 바와 세션 선택기에 나타납니다. 이미 `--name` 또는 `/rename`으로 이름을 설정한 경우 계획을 수락해도 덮어쓰지 않습니다.

284 

285### Plan Mode를 기본값으로 구성하기

286 

287```json theme={null}

288// .claude/settings.json

289{

290 "permissions": {

291 "defaultMode": "plan"

292 }

293}

294```

295 

296더 많은 구성 옵션은 [설정 문서](/ko/settings#available-settings)를 참조하십시오.

297 

298***

299 

300## 테스트 작업하기

301 

302적용되지 않은 코드에 대한 테스트를 추가해야 한다고 가정해봅시다.

303 

304<Steps>

305 <Step title="테스트되지 않은 코드 식별">

306 ```text theme={null}

307 find functions in NotificationsService.swift that are not covered by tests

308 ```

309 </Step>

310 

311 <Step title="테스트 스캐폴딩 생성">

312 ```text theme={null}

313 add tests for the notification service

314 ```

315 </Step>

316 

317 <Step title="의미 있는 테스트 케이스 추가">

318 ```text theme={null}

319 add test cases for edge conditions in the notification service

320 ```

321 </Step>

322 

323 <Step title="테스트 실행 및 검증">

324 ```text theme={null}

325 run the new tests and fix any failures

326 ```

327 </Step>

328</Steps>

329 

330Claude는 프로젝트의 기존 패턴과 규칙을 따르는 테스트를 생성할 수 있습니다. 테스트를 요청할 때 검증하려는 동작에 대해 구체적으로 설명하십시오. Claude는 기존 테스트 파일을 검토하여 이미 사용 중인 스타일, 프레임워크 및 어설션 패턴을 일치시킵니다.

331 

332포괄적인 적용 범위를 위해 Claude에게 놓쳤을 수 있는 엣지 케이스를 식별하도록 요청하십시오. Claude는 코드 경로를 분석하고 오류 조건, 경계값 및 쉽게 간과할 수 있는 예상치 못한 입력에 대한 테스트를 제안할 수 있습니다.

333 

334***

335 

336## 풀 요청 만들기

337 

338Claude에게 직접 풀 요청을 만들도록 요청하거나 ("create a pr for my changes"), 단계별로 Claude를 안내할 수 있습니다:

339 

340<Steps>

341 <Step title="변경사항 요약하기">

342 ```text theme={null}

343 summarize the changes I've made to the authentication module

344 ```

345 </Step>

346 

347 <Step title="풀 요청 생성하기">

348 ```text theme={null}

349 create a pr

350 ```

351 </Step>

352 

353 <Step title="검토 및 정제하기">

354 ```text theme={null}

355 enhance the PR description with more context about the security improvements

356 ```

357 </Step>

358</Steps>

359 

360`gh pr create`를 사용하여 PR을 만들면 세션이 자동으로 해당 PR에 연결됩니다. 나중에 `claude --from-pr <number>`로 재개할 수 있습니다.

361 

362<Tip>

363 Claude가 생성한 PR을 제출하기 전에 검토하고 Claude에게 잠재적 위험이나 고려사항을 강조하도록 요청하십시오.

364</Tip>

365 

366## 문서 처리하기

367 

368코드에 대한 문서를 추가하거나 업데이트해야 한다고 가정해봅시다.

369 

370<Steps>

371 <Step title="문서화되지 않은 코드 식별">

372 ```text theme={null}

373 find functions without proper JSDoc comments in the auth module

374 ```

375 </Step>

376 

377 <Step title="문서 생성하기">

378 ```text theme={null}

379 add JSDoc comments to the undocumented functions in auth.js

380 ```

381 </Step>

382 

383 <Step title="검토 및 개선하기">

384 ```text theme={null}

385 improve the generated documentation with more context and examples

386 ```

387 </Step>

388 

389 <Step title="문서 검증하기">

390 ```text theme={null}

391 check if the documentation follows our project standards

392 ```

393 </Step>

394</Steps>

395 

396<Tip>

397 팁:

398 

399 * 원하는 문서 스타일 지정하기 (JSDoc, docstring 등)

400 * 문서에 예제 요청하기

401 * 공개 API, 인터페이스 및 복잡한 로직에 대한 문서 요청하기

402</Tip>

403 

404***

405 

406## 노트 및 비코드 폴더에서 작업하기

407 

408Claude Code는 모든 디렉토리에서 작동합니다. 노트 저장소, 문서 폴더 또는 마크다운 파일의 모든 컬렉션 내에서 실행하여 코드처럼 콘텐츠를 검색, 편집 및 재구성합니다.

409 

410`.claude/` 디렉토리와 `CLAUDE.md`는 다른 도구의 구성 디렉토리와 충돌 없이 나란히 있습니다. Claude는 각 도구 호출에서 파일을 새로 읽으므로 다른 애플리케이션에서 만든 편집을 다음에 파일을 읽을 때 봅니다.

411 

412***

413 

414## 이미지 작업하기

415 

416코드베이스에서 이미지를 작업해야 하고 Claude의 이미지 콘텐츠 분석 도움을 원한다고 가정해봅시다.

417 

418<Steps>

419 <Step title="대화에 이미지 추가하기">

420 다음 방법 중 하나를 사용할 수 있습니다:

421 

422 1. Claude Code 창으로 이미지를 드래그 앤 드롭하기

423 2. 이미지를 복사하고 ctrl+v로 CLI에 붙여넣기 (cmd+v 사용하지 않기)

424 3. Claude에 이미지 경로 제공하기. 예: "Analyze this image: /path/to/your/image.png"

425 </Step>

426 

427 <Step title="Claude에게 이미지 분석 요청하기">

428 ```text theme={null}

429 What does this image show?

430 ```

431 

432 ```text theme={null}

433 Describe the UI elements in this screenshot

434 ```

435 

436 ```text theme={null}

437 Are there any problematic elements in this diagram?

438 ```

439 </Step>

440 

441 <Step title="컨텍스트를 위해 이미지 사용하기">

442 ```text theme={null}

443 Here's a screenshot of the error. What's causing it?

444 ```

445 

446 ```text theme={null}

447 This is our current database schema. How should we modify it for the new feature?

448 ```

449 </Step>

450 

451 <Step title="시각적 콘텐츠에서 코드 제안 얻기">

452 ```text theme={null}

453 Generate CSS to match this design mockup

454 ```

455 

456 ```text theme={null}

457 What HTML structure would recreate this component?

458 ```

459 </Step>

460</Steps>

461 

462<Tip>

463 팁:

464 

465 * 텍스트 설명이 불명확하거나 번거로울 때 이미지 사용하기

466 * 더 나은 컨텍스트를 위해 오류, UI 디자인 또는 다이어그램의 스크린샷 포함하기

467 * 대화에서 여러 이미지를 작업할 수 있습니다

468 * 이미지 분석은 다이어그램, 스크린샷, 목업 등과 함께 작동합니다

469 * Claude가 이미지를 참조할 때 (예: `[Image #1]`), `Cmd+Click` (Mac) 또는 `Ctrl+Click` (Windows/Linux)을 클릭하여 기본 뷰어에서 이미지를 엽니다

470</Tip>

471 

472***

473 

474## 파일 및 디렉토리 참조하기

475 

476@를 사용하여 Claude가 읽을 때까지 기다리지 않고 파일이나 디렉토리를 빠르게 포함합니다.

477 

478<Steps>

479 <Step title="단일 파일 참조하기">

480 ```text theme={null}

481 Explain the logic in @src/utils/auth.js

482 ```

483 

484 이것은 대화에 파일의 전체 내용을 포함합니다.

485 </Step>

486 

487 <Step title="디렉토리 참조하기">

488 ```text theme={null}

489 What's the structure of @src/components?

490 ```

491 

492 이것은 파일 정보가 있는 디렉토리 목록을 제공합니다.

493 </Step>

494 

495 <Step title="MCP 리소스 참조하기">

496 ```text theme={null}

497 Show me the data from @github:repos/owner/repo/issues

498 ```

499 

500 이것은 @server:resource 형식을 사용하여 연결된 MCP 서버에서 데이터를 가져옵니다. 자세한 내용은 [MCP 리소스](/ko/mcp#use-mcp-resources)를 참조하십시오.

501 </Step>

502</Steps>

503 

504<Tip>

505 팁:

506 

507 * 파일 경로는 상대 또는 절대 경로일 수 있습니다

508 * @ 파일 참조는 파일의 디렉토리 및 상위 디렉토리에 `CLAUDE.md`를 추가합니다

509 * 디렉토리 참조는 내용이 아닌 파일 목록을 표시합니다

510 * 단일 메시지에서 여러 파일을 참조할 수 있습니다 (예: "@file1.js and @file2.js")

511</Tip>

512 

513***

514 

515## 확장된 사고 사용하기 (thinking mode)

516 

517[확장된 사고](https://platform.claude.com/docs/en/build-with-claude/extended-thinking)는 기본적으로 활성화되어 있으며, Claude가 복잡한 문제를 단계별로 추론할 수 있는 공간을 제공합니다. 이 추론은 `Ctrl+O`로 전환할 수 있는 자세한 모드에서 볼 수 있습니다. 확장된 사고 중에 진행 상황 힌트가 표시기 아래에 나타나 Claude가 적극적으로 작업 중임을 보여줍니다.

518 

519또한 [노력을 지원하는 모델](/ko/model-config#adjust-effort-level)은 적응형 추론을 사용합니다: 고정된 사고 토큰 예산 대신 모델은 노력 수준 설정과 작업에 따라 동적으로 사고할지 여부와 얼마나 많이 사고할지 결정합니다. 적응형 추론을 통해 Claude는 일상적인 프롬프트에 더 빠르게 응답하고 이점을 얻을 수 있는 단계를 위해 더 깊은 사고를 예약할 수 있습니다.

520 

521확장된 사고는 복잡한 아키텍처 결정, 어려운 버그, 다단계 구현 계획 및 다양한 접근 방식 간의 트레이드오프 평가에 특히 유용합니다.

522 

523<Note>

524 "think", "think hard", "think more"와 같은 구문은 일반 프롬프트 지시로 해석되며 사고 토큰을 할당하지 않습니다.

525</Note>

526 

527### thinking mode 구성하기

528 

529사고는 기본적으로 활성화되어 있지만 조정하거나 비활성화할 수 있습니다.

530 

531| 범위 | 구성 방법 | 세부 정보 |

532| -------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |

533| **노력 수준** | `/effort` 실행, `/model`에서 조정, 또는 [`CLAUDE_CODE_EFFORT_LEVEL`](/ko/env-vars) 설정 | [지원되는 모델](/ko/model-config#adjust-effort-level)에서 사고 깊이 제어 |

534| **`ultrathink` 키워드** | 프롬프트의 어디든 "ultrathink" 포함 | 해당 턴에 대해 더 많이 추론하도록 모델에 지시하는 컨텍스트 내 지시를 추가합니다. 노력 수준 자체를 변경하지 않습니다. [노력 수준 조정](/ko/model-config#adjust-effort-level) 참조 |

535| **토글 단축키** | `Option+T` (macOS) 또는 `Alt+T` (Windows/Linux) 누르기 | 현재 세션에 대해 사고 켜기/끄기 (모든 모델). [터미널 구성](/ko/terminal-config)이 필요할 수 있습니다 |

536| **전역 기본값** | `/config`를 사용하여 thinking mode 토글 | 모든 프로젝트에서 기본값 설정 (모든 모델).<br />`~/.claude/settings.json`에 `alwaysThinkingEnabled`로 저장됩니다 |

537| **토큰 예산 제한** | [`MAX_THINKING_TOKENS`](/ko/env-vars) 환경 변수 설정 | 사고 예산을 특정 토큰 수로 제한합니다. 적응형 추론이 있는 모델에서는 적응형 추론이 비활성화되지 않으면 `0`만 적용됩니다. 예: `export MAX_THINKING_TOKENS=10000` |

538 

539Claude의 사고 과정을 보려면 `Ctrl+O`를 눌러 자세한 모드를 전환하고 회색 이탤릭 텍스트로 표시된 내부 추론을 확인하십시오.

540 

541### 확장된 사고 작동 방식

542 

543확장된 사고는 Claude가 응답하기 전에 수행하는 내부 추론의 양을 제어합니다. 더 많은 사고는 솔루션을 탐색하고, 엣지 케이스를 분석하고, 실수를 자체 수정할 수 있는 더 많은 공간을 제공합니다.

544 

545[노력을 지원하는 모델](/ko/model-config#adjust-effort-level)에서 사고는 적응형 추론을 사용합니다: 모델은 선택한 노력 수준에 따라 동적으로 사고 토큰을 할당합니다. 이것은 속도와 추론 깊이 간의 트레이드오프를 조정하는 권장 방법입니다. 노력 수준이 그렇지 않으면 생성할 것보다 Claude가 더 많거나 적게 사고하기를 원하면 프롬프트나 `CLAUDE.md`에서 직접 그렇게 말할 수도 있습니다.

546 

547이전 모델에서 사고는 출력 할당에서 최대 31,999개 토큰의 고정 예산을 사용합니다. [`MAX_THINKING_TOKENS`](/ko/env-vars) 환경 변수로 이를 제한하거나 `/config` 또는 `Option+T`/`Alt+T` 토글을 통해 사고를 완전히 비활성화할 수 있습니다.

548 

549적응형 추론이 있는 모델에서 `MAX_THINKING_TOKENS`는 `0`으로 설정하여 사고를 비활성화하거나 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1`이 모델을 고정 예산으로 되돌릴 때만 적용됩니다. `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING`은 Opus 4.6 및 Sonnet 4.6에만 적용됩니다. Opus 4.7은 항상 적응형 추론을 사용하며 고정 사고 예산을 지원하지 않습니다. [환경 변수](/ko/env-vars)를 참조하십시오.

550 

551<Warning>

552 사고 요약이 편집되더라도 사용된 모든 사고 토큰에 대해 요금이 청구됩니다. 대화형 모드에서 사고는 기본적으로 축소된 스텁으로 나타납니다. `settings.json`에서 `showThinkingSummaries: true`를 설정하여 전체 요약을 표시합니다.

553</Warning>

554 

555***

556 

557## 이전 대화 재개하기

558 

559Claude Code를 시작할 때 이전 세션을 재개할 수 있습니다:

560 

561* `claude --continue`는 현재 디렉토리에서 가장 최근 대화를 계속합니다

562* `claude --resume`은 대화 선택기를 열거나 이름으로 재개합니다

563* `claude --from-pr 123`은 특정 풀 요청에 연결된 세션을 재개합니다

564 

565활성 세션 내에서 `/resume`을 사용하여 다른 대화로 전환합니다.

566 

567선택한 세션이 오래되고 충분히 커서 다시 읽으면 사용 한도의 상당한 부분을 소비할 경우, `--resume`, `--continue` 및 `/resume`은 전체 기록을 로드하는 대신 요약에서 재개할 것을 제안합니다. 이 프롬프트는 Amazon Bedrock, Google Cloud Vertex AI 또는 Microsoft Foundry에서 사용할 수 없습니다.

568 

569세션은 프로젝트 디렉토리별로 저장됩니다. 기본적으로 `/resume` 선택기는 현재 worktree의 대화형 세션을 표시하며, 다른 worktree 또는 프로젝트로 목록을 확대하고, 검색하고, 미리보고, 이름을 바꾸는 키보드 단축키가 있습니다. `/add-dir`으로 현재 디렉토리를 추가한 다른 곳에서 시작된 세션도 기본적으로 포함됩니다. 전체 단축키 참조는 아래의 [세션 선택기 사용하기](#use-the-session-picker)를 참조하십시오.

570 

571다른 worktree의 세션을 선택하면 Claude Code는 먼저 디렉토리를 전환할 필요 없이 직접 재개합니다. 관련 없는 프로젝트의 세션을 선택하면 `cd` 및 재개 명령을 클립보드에 복사합니다.

572 

573이름으로 재개하면 현재 저장소 및 해당 worktree 전체에서 해결됩니다. `claude --resume <name>` 및 `/resume <name>` 모두 정확한 일치를 찾고 세션이 다른 worktree에 있더라도 직접 재개합니다.

574 

575이름이 모호하면 `claude --resume <name>`은 이름을 검색 용어로 미리 채운 선택기를 엽니다. 세션 내에서 `/resume <name>`은 대신 오류를 보고하므로 `/resume`을 인수 없이 실행하여 선택기를 열고 선택합니다.

576 

577`claude -p` 또는 SDK 호출로 생성된 세션은 선택기에 나타나지 않지만 세션 ID를 `claude --resume <session-id>`에 직접 전달하여 재개할 수 있습니다.

578 

579### 세션 이름 지정하기

580 

581나중에 찾기 위해 세션에 설명적인 이름을 지정합니다. 이것은 여러 작업이나 기능을 작업할 때 모범 사례입니다.

582 

583<Steps>

584 <Step title="세션 이름 지정하기">

585 시작 시 `-n`으로 세션 이름을 지정합니다:

586 

587 ```bash theme={null}

588 claude -n auth-refactor

589 ```

590 

591 또는 세션 중에 `/rename`을 사용하며, 이는 프롬프트 바에도 이름을 표시합니다:

592 

593 ```text theme={null}

594 /rename auth-refactor

595 ```

596 

597 선택기에서 세션 이름을 바꿀 수도 있습니다: `/resume`을 실행하고, 세션으로 이동한 다음 `Ctrl+R`을 누릅니다.

598 </Step>

599 

600 <Step title="나중에 이름으로 재개하기">

601 명령줄에서:

602 

603 ```bash theme={null}

604 claude --resume auth-refactor

605 ```

606 

607 또는 활성 세션 내에서:

608 

609 ```text theme={null}

610 /resume auth-refactor

611 ```

612 </Step>

613</Steps>

614 

615### 세션 선택기 사용하기

616 

617`/resume` 명령 (또는 인수 없이 `claude --resume`)은 다음 기능이 있는 대화형 세션 선택기를 엽니다:

618 

619**선택기의 키보드 단축키:**

620 

621| 단축키 | 작업 |

622| :--------------------------- | :------------------------------------------------------------------------- |

623| `↑` / `↓` | 세션 간 이동 |

624| `→` / `←` | 그룹화된 세션 확장 또는 축소 |

625| `Enter` | 강조 표시된 세션 선택 및 재개 |

626| `Space` | 세션 콘텐츠 미리보기. `Ctrl+V`도 이를 캡처하지 않는 터미널에서 작동합니다 |

627| `Ctrl+R` | 강조 표시된 세션 이름 바꾸기 |

628| `/` 또는 `Space` 이외의 인쇄 가능한 문자 | 검색 모드 진입 및 세션 필터링 |

629| `Ctrl+A` | 이 컴퓨터의 모든 프로젝트에서 세션 표시. 다시 누르면 현재 저장소 복원 |

630| `Ctrl+W` | 현재 저장소의 모든 worktree에서 세션 표시. 다시 누르면 현재 worktree 복원. 다중 worktree 저장소에서만 표시됨 |

631| `Ctrl+B` | 현재 git 분기의 세션으로 필터링. 다시 누르면 모든 분기의 세션 표시 |

632| `Esc` | 선택기 또는 검색 모드 종료 |

633 

634**세션 구성:**

635 

636선택기는 유용한 메타데이터가 있는 세션을 표시합니다:

637 

638* 세션 이름 (설정된 경우), 그렇지 않으면 대화 요약 또는 첫 번째 사용자 프롬프트

639* 마지막 활동 이후 경과 시간

640* 메시지 수

641* Git 분기 (해당하는 경우)

642* `Ctrl+A`로 모든 프로젝트로 확대한 후 표시되는 프로젝트 경로

643 

644포크된 세션 (`/branch`, `/rewind` 또는 `--fork-session`으로 생성됨)은 루트 세션 아래에 그룹화되어 관련 대화를 더 쉽게 찾을 수 있습니다.

645 

646<Tip>

647 팁:

648 

649 * **세션 조기 이름 지정**: 고유한 작업을 시작할 때 `/rename`을 사용합니다—나중에 "payment-integration"을 찾기가 "explain this function"보다 훨씬 쉽습니다

650 * 현재 디렉토리에서 가장 최근 대화에 빠르게 액세스하려면 `--continue` 사용

651 * 필요한 세션을 알 때 `--resume session-name` 사용

652 * 검색하고 선택해야 할 때 `--resume` (이름 없이) 사용

653 * 스크립트의 경우 `claude --continue --print "prompt"`를 사용하여 비대화형 모드에서 재개

654 * 선택기에서 `Space`를 눌러 재개하기 전에 세션을 미리봅니다

655 * 재개된 대화는 원본과 동일한 모델 및 구성으로 시작됩니다

656 

657 작동 방식:

658 

659 1. **대화 저장소**: 모든 대화는 전체 메시지 기록과 함께 로컬에 자동으로 저장됩니다

660 2. **메시지 역직렬화**: 재개할 때 전체 메시지 기록이 복원되어 컨텍스트를 유지합니다

661 3. **도구 상태**: 이전 대화의 도구 사용 및 결과가 보존됩니다

662 4. **컨텍스트 복원**: 대화는 모든 이전 컨텍스트와 함께 재개됩니다

663</Tip>

664 

665***

666 

667## Git worktree를 사용하여 병렬 Claude Code 세션 실행하기

668 

669여러 작업을 동시에 수행할 때 각 Claude 세션이 변경사항이 충돌하지 않도록 코드베이스의 자체 복사본을 가져야 합니다. Git worktree는 각각 자체 파일과 분기를 가지면서 동일한 저장소 기록 및 원격 연결을 공유하는 별도의 작업 디렉토리를 만들어 이를 해결합니다. 이는 한 worktree에서 기능을 작업하는 동안 Claude가 다른 worktree에서 버그를 수정할 수 있으며, 어느 세션도 다른 세션을 방해하지 않음을 의미합니다.

670 

671`--worktree` (`-w`) 플래그를 사용하여 격리된 worktree를 만들고 Claude를 시작합니다. 전달하는 값은 worktree 디렉토리 이름과 분기 이름이 됩니다:

672 

673```bash theme={null}

674# "feature-auth"라는 worktree에서 Claude 시작

675# 새 분기를 사용하여 .claude/worktrees/feature-auth/ 생성

676claude --worktree feature-auth

677 

678# 별도의 worktree에서 다른 세션 시작

679claude --worktree bugfix-123

680```

681 

682이름을 생략하면 Claude가 자동으로 임의의 이름을 생성합니다:

683 

684```bash theme={null}

685# "bright-running-fox"와 같은 이름 자동 생성

686claude --worktree

687```

688 

689Worktree는 `<repo>/.claude/worktrees/<name>`에 생성되고 기본 원격 분기에서 분기됩니다. worktree 분기는 `worktree-<name>`으로 이름이 지정됩니다.

690 

691기본 분기는 Claude Code 플래그 또는 설정을 통해 구성할 수 없습니다. `origin/HEAD`는 복제할 때 Git이 설정한 로컬 `.git` 디렉토리에 저장된 참조입니다. 저장소의 기본 분기가 나중에 GitHub 또는 GitLab에서 변경되면 로컬 `origin/HEAD`는 이전 분기를 계속 가리키며, worktree는 거기에서 분기됩니다. 로컬 참조를 원격이 현재 기본값으로 간주하는 것과 다시 동기화하려면:

692 

693```bash theme={null}

694git remote set-head origin -a

695```

696 

697이것은 로컬 `.git` 디렉토리만 업데이트하는 표준 Git 명령입니다. 원격 서버에서는 아무것도 변경되지 않습니다. worktree가 원격의 기본값이 아닌 특정 분기에서 기반하도록 하려면 `git remote set-head origin your-branch-name`으로 명시적으로 설정합니다.

698 

699worktree 생성 방식을 완전히 제어하려면 호출당 다른 기반을 선택하는 것을 포함하여 [WorktreeCreate hook](/ko/hooks#worktreecreate)을 구성합니다. hook은 Claude Code의 기본 `git worktree` 로직을 완전히 대체하므로 필요한 모든 ref에서 가져오고 분기할 수 있습니다.

700 

701세션 중에 Claude에게 "work in a worktree" 또는 "start a worktree"를 요청할 수도 있으며, 자동으로 하나를 만듭니다.

702 

703### Subagent worktree

704 

705Subagent도 worktree 격리를 사용하여 충돌 없이 병렬로 작업할 수 있습니다. Claude에게 "use worktrees for your agents"를 요청하거나 [사용자 정의 subagent](/ko/sub-agents#supported-frontmatter-fields)에서 에이전트의 frontmatter에 `isolation: worktree`를 추가하여 구성합니다. 각 subagent는 변경사항 없이 완료될 때 자동으로 정리되는 자체 worktree를 가져옵니다.

706 

707### Worktree 정리

708 

709worktree 세션을 종료할 때 Claude는 변경사항이 있는지 여부에 따라 정리를 처리합니다:

710 

711* **변경사항 없음**: worktree 및 해당 분기가 자동으로 제거됩니다

712* **변경사항 또는 커밋 존재**: Claude는 worktree를 유지할지 제거할지 묻습니다. 유지하면 디렉토리와 분기가 보존되어 나중에 돌아올 수 있습니다. 제거하면 worktree 디렉토리와 해당 분기가 삭제되어 모든 커밋되지 않은 변경사항과 커밋이 버려집니다

713 

714Subagent worktree는 충돌이나 중단된 병렬 실행으로 인해 고아가 되면 시작 시 [`cleanupPeriodDays`](/ko/settings#available-settings) 설정보다 오래되면 자동으로 제거됩니다. 단, 커밋되지 않은 변경사항, 추적되지 않은 파일 및 푸시되지 않은 커밋이 없는 경우입니다. `--worktree`로 만든 Worktree는 이 정리 과정에서 절대 제거되지 않습니다.

715 

716Claude 세션 외부에서 worktree를 정리하려면 [수동 worktree 관리](#manage-worktrees-manually)를 사용합니다.

717 

718<Tip>

719 `.claude/worktrees/`를 `.gitignore`에 추가하여 worktree 콘텐츠가 주 저장소에 추적되지 않은 파일로 나타나지 않도록 합니다.

720</Tip>

721 

722### Worktree에 gitignored 파일 복사하기

723 

724Git worktree는 새로운 체크아웃이므로 주 저장소의 `.env` 또는 `.env.local`과 같은 추적되지 않은 파일을 포함하지 않습니다. Claude가 worktree를 만들 때 이러한 파일을 자동으로 복사하려면 프로젝트 루트에 `.worktreeinclude` 파일을 추가합니다.

725 

726파일은 `.gitignore` 구문을 사용하여 복사할 파일을 나열합니다. 패턴과 일치하고 gitignored인 파일만 복사되므로 추적된 파일은 절대 복제되지 않습니다.

727 

728```text .worktreeinclude theme={null}

729.env

730.env.local

731config/secrets.json

732```

733 

734이것은 `--worktree`, subagent worktree 및 [데스크톱 앱](/ko/desktop#work-in-parallel-with-sessions)의 병렬 세션으로 생성된 worktree에 적용됩니다.

735 

736### 수동으로 worktree 관리하기

737 

738worktree 위치 및 분기 구성을 더 제어하려면 Git을 사용하여 직접 worktree를 만듭니다. 특정 기존 분기를 체크아웃하거나 worktree를 저장소 외부에 배치해야 할 때 유용합니다.

739 

740```bash theme={null}

741# 새 분기를 사용하여 worktree 만들기

742git worktree add ../project-feature-a -b feature-a

743 

744# 기존 분기를 사용하여 worktree 만들기

745git worktree add ../project-bugfix bugfix-123

746 

747# worktree에서 Claude 시작

748cd ../project-feature-a && claude

749 

750# 완료되면 정리

751git worktree list

752git worktree remove ../project-feature-a

753```

754 

755[공식 Git worktree 문서](https://git-scm.com/docs/git-worktree)에서 자세히 알아봅니다.

756 

757<Tip>

758 프로젝트의 설정에 따라 각 새 worktree에서 개발 환경을 초기화해야 합니다. 스택에 따라 여기에는 종속성 설치 (`npm install`, `yarn`), 가상 환경 설정 또는 프로젝트의 표준 설정 프로세스 따르기가 포함될 수 있습니다.

759</Tip>

760 

761### 비 git 버전 제어

762 

763Worktree 격리는 기본적으로 git과 함께 작동합니다. SVN, Perforce 또는 Mercurial과 같은 다른 버전 제어 시스템의 경우 [WorktreeCreate 및 WorktreeRemove hook](/ko/hooks#worktreecreate)을 구성하여 사용자 정의 worktree 생성 및 정리 로직을 제공합니다. 구성되면 이러한 hook은 `--worktree`를 사용할 때 기본 git 동작을 대체하므로 [`.worktreeinclude`](#copy-gitignored-files-to-worktrees)는 처리되지 않습니다. hook 스크립트 내에서 대신 로컬 구성 파일을 복사합니다.

764 

765공유 작업 및 메시징을 사용한 병렬 세션의 자동 조정을 위해 [에이전트 팀](/ko/agent-teams)을 참조하십시오.

766 

767***

768 

769## Claude가 주의가 필요할 때 알림 받기

770 

771장기 실행 작업을 시작하고 다른 창으로 전환할 때 Claude가 완료되거나 입력이 필요할 때 알 수 있도록 데스크톱 알림을 설정할 수 있습니다. 이것은 Claude가 권한을 기다리거나, 유휴 상태이고 새 프롬프트를 기다리거나, 인증을 완료할 때마다 발생하는 `Notification` [hook 이벤트](/ko/hooks-guide#get-notified-when-claude-needs-input)를 사용합니다.

772 

773<Steps>

774 <Step title="설정에 hook 추가하기">

775 `~/.claude/settings.json`을 열고 플랫폼의 기본 알림 명령을 호출하는 `Notification` hook을 추가합니다:

776 

777 <Tabs>

778 <Tab title="macOS">

779 ```json theme={null}

780 {

781 "hooks": {

782 "Notification": [

783 {

784 "matcher": "",

785 "hooks": [

786 {

787 "type": "command",

788 "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"

789 }

790 ]

791 }

792 ]

793 }

794 }

795 ```

796 </Tab>

797 

798 <Tab title="Linux">

799 ```json theme={null}

800 {

801 "hooks": {

802 "Notification": [

803 {

804 "matcher": "",

805 "hooks": [

806 {

807 "type": "command",

808 "command": "notify-send 'Claude Code' 'Claude Code needs your attention'"

809 }

810 ]

811 }

812 ]

813 }

814 }

815 ```

816 </Tab>

817 

818 <Tab title="Windows">

819 ```json theme={null}

820 {

821 "hooks": {

822 "Notification": [

823 {

824 "matcher": "",

825 "hooks": [

826 {

827 "type": "command",

828 "command": "powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Claude Code needs your attention', 'Claude Code')\""

829 }

830 ]

831 }

832 ]

833 }

834 }

835 ```

836 </Tab>

837 </Tabs>

838 

839 설정 파일에 이미 `hooks` 키가 있으면 덮어쓰지 말고 `Notification` 항목을 병합합니다. CLI에서 원하는 것을 설명하여 Claude에게 hook을 작성하도록 요청할 수도 있습니다.

840 </Step>

841 

842 <Step title="선택적으로 matcher 좁히기">

843 기본적으로 hook은 모든 알림 유형에 대해 발생합니다. 특정 이벤트에만 발생하도록 하려면 `matcher` 필드를 다음 값 중 하나로 설정합니다:

844 

845 | Matcher | 발생 시기 |

846 | :--------------------- | :-------------------------- |

847 | `permission_prompt` | Claude가 도구 사용을 승인하도록 요청할 때 |

848 | `idle_prompt` | Claude가 완료되고 다음 프롬프트를 기다릴 때 |

849 | `auth_success` | 인증이 완료될 때 |

850 | `elicitation_dialog` | MCP 서버가 질문 양식을 열 때 |

851 | `elicitation_complete` | MCP 질문 양식이 제출되거나 닫힐 때 |

852 | `elicitation_response` | MCP 질문 응답이 서버로 다시 전송될 때 |

853 </Step>

854 

855 <Step title="hook 검증하기">

856 `/hooks`를 입력하고 `Notification`을 선택하여 hook이 나타나는지 확인합니다. 선택하면 실행될 명령이 표시됩니다. 종단 간 테스트하려면 Claude에게 권한이 필요한 명령을 실행하도록 요청하고 터미널에서 전환하거나, Claude에게 직접 알림을 트리거하도록 요청합니다.

857 </Step>

858</Steps>

859 

860전체 이벤트 스키마 및 알림 유형은 [알림 참조](/ko/hooks#notification)를 참조하십시오.

861 

862***

863 

864## Claude를 unix 스타일 유틸리티로 사용하기

865 

866### 검증 프로세스에 Claude 추가하기

867 

868Claude Code를 linter 또는 코드 검토자로 사용하고 싶다고 가정해봅시다.

869 

870**빌드 스크립트에 Claude 추가하기:**

871 

872```json theme={null}

873// package.json

874{

875 ...

876 "scripts": {

877 ...

878 "lint:claude": "claude -p 'you are a linter. please look at the changes vs. main and report any issues related to typos. report the filename and line number on one line, and a description of the issue on the second line. do not return any other text.'"

879 }

880}

881```

882 

883<Tip>

884 팁:

885 

886 * CI/CD 파이프라인에서 자동 코드 검토를 위해 Claude 사용

887 * 프로젝트와 관련된 특정 문제를 확인하도록 프롬프트 사용자 정의

888 * 다양한 유형의 검증을 위해 여러 스크립트 만들기 고려

889</Tip>

890 

891### 파이프 인, 파이프 아웃

892 

893Claude로 데이터를 파이프하고 구조화된 형식으로 데이터를 다시 받고 싶다고 가정해봅시다.

894 

895**Claude를 통해 데이터 파이프하기:**

896 

897```bash theme={null}

898cat build-error.txt | claude -p 'concisely explain the root cause of this build error' > output.txt

899```

900 

901<Tip>

902 팁:

903 

904 * 기존 셸 스크립트에 Claude를 통합하기 위해 파이프 사용

905 * 강력한 워크플로우를 위해 다른 Unix 도구와 결합

906 * 스크립트나 다른 도구에 Claude Code를 통합할 때 `--output-format` 사용 고려

907</Tip>

908 

909### 출력 형식 제어하기

910 

911특히 Claude Code를 스크립트나 다른 도구에 통합할 때 특정 형식의 Claude 출력이 필요하다고 가정해봅시다.

912 

913<Steps>

914 <Step title="텍스트 형식 사용 (기본값)">

915 ```bash theme={null}

916 cat data.txt | claude -p 'summarize this data' --output-format text > summary.txt

917 ```

918 

919 이것은 Claude의 일반 텍스트 응답만 출력합니다 (기본 동작).

920 </Step>

921 

922 <Step title="JSON 형식 사용">

923 ```bash theme={null}

924 cat code.py | claude -p 'analyze this code for bugs' --output-format json > analysis.json

925 ```

926 

927 이것은 비용 및 기간을 포함한 메타데이터가 있는 메시지의 JSON 배열을 출력합니다.

928 </Step>

929 

930 <Step title="스트리밍 JSON 형식 사용">

931 ```bash theme={null}

932 cat log.txt | claude -p 'parse this log file for errors' --output-format stream-json

933 ```

934 

935 이것은 Claude가 요청을 처리할 때 실시간으로 일련의 JSON 객체를 출력합니다. 각 메시지는 유효한 JSON 객체이지만 연결된 전체 출력은 유효한 JSON이 아닙니다.

936 </Step>

937</Steps>

938 

939<Tip>

940 팁:

941 

942 * Claude의 응답만 필요한 간단한 통합을 위해 `--output-format text` 사용

943 * 전체 대화 로그가 필요할 때 `--output-format json` 사용

944 * 각 대화 턴의 실시간 출력을 위해 `--output-format stream-json` 사용

945</Tip>

946 

947***

948 

949## Claude를 일정에 따라 실행하기

950 

951Claude가 정기적으로 작업을 자동으로 처리하도록 하고 싶다고 가정해봅시다. 예를 들어 매일 아침 열린 PR을 검토하거나, 매주 종속성을 감사하거나, 밤새 CI 실패를 확인합니다.

952 

953작업을 실행할 위치에 따라 일정 옵션을 선택합니다:

954 

955| 옵션 | 실행 위치 | 최적 사용 |

956| :---------------------------------------- | :--------------- | :---------------------------------------------------------------------------------------------------------------------------------------- |

957| [Routines](/ko/routines) | Anthropic 관리 인프라 | 컴퓨터가 꺼져 있어도 실행되어야 하는 작업. API 호출 또는 GitHub 이벤트 외에도 일정에 따라 트리거될 수 있습니다. [claude.ai/code/routines](https://claude.ai/code/routines)에서 구성합니다. |

958| [데스크톱 예약 작업](/ko/desktop-scheduled-tasks) | 데스크톱 앱을 통한 컴퓨터 | 로컬 파일, 도구 또는 커밋되지 않은 변경사항에 직접 액세스해야 하는 작업. |

959| [GitHub Actions](/ko/github-actions) | CI 파이프라인 | 열린 PR 또는 cron 일정과 같은 저장소 이벤트와 연결된 작업. 워크플로우 구성과 함께 있어야 합니다. |

960| [`/loop`](/ko/scheduled-tasks) | 현재 CLI 세션 | 세션이 열려 있는 동안 빠른 폴링. 새 대화를 시작하면 작업이 중지됩니다. `--resume` 및 `--continue`는 만료되지 않은 것을 복원합니다. |

961 

962<Tip>

963 예약된 작업을 위한 프롬프트를 작성할 때 성공이 무엇인지, 결과를 어떻게 처리할지 명시적으로 설명하십시오. 작업이 자동으로 실행되므로 명확한 질문을 할 수 없습니다. 예를 들어: "Review open PRs labeled `needs-review`, leave inline comments on any issues, and post a summary in the `#eng-reviews` Slack channel."

964</Tip>

965 

966***

967 

968## Claude의 기능에 대해 Claude에게 물어보기

969 

970Claude는 자신의 문서에 대한 기본 제공 액세스 권한을 가지고 있으며 자신의 기능과 제한사항에 대한 질문에 답할 수 있습니다.

971 

972### 예제 질문

973 

974```text theme={null}

975can Claude Code create pull requests?

976```

977 

978```text theme={null}

979how does Claude Code handle permissions?

980```

981 

982```text theme={null}

983what skills are available?

984```

985 

986```text theme={null}

987how do I use MCP with Claude Code?

988```

989 

990```text theme={null}

991how do I configure Claude Code for Amazon Bedrock?

992```

993 

994```text theme={null}

995what are the limitations of Claude Code?

996```

997 

998<Note>

999 Claude는 이러한 질문에 대해 문서 기반 답변을 제공합니다. 실행 가능한 예제 및 실습 시연을 위해 `/powerup`을 실행하여 애니메이션 데모가 있는 대화형 수업을 받거나 위의 특정 워크플로우 섹션을 참조하십시오.

1000</Note>

1001 

1002<Tip>

1003 팁:

1004 

1005 * Claude는 사용 중인 버전에 관계없이 항상 최신 Claude Code 문서에 액세스할 수 있습니다

1006 * 자세한 답변을 얻으려면 구체적인 질문을 하십시오

1007 * Claude는 MCP 통합, 엔터프라이즈 구성 및 고급 워크플로우와 같은 복잡한 기능을 설명할 수 있습니다

1008</Tip>

1009 

1010***

1011 

1012## 다음 단계

1013 

1014<CardGroup cols={2}>

1015 <Card title="모범 사례" icon="lightbulb" href="/ko/best-practices">

1016 Claude Code에서 최대한 활용하기 위한 패턴

1017 </Card>

1018 

1019 <Card title="Claude Code 작동 방식" icon="gear" href="/ko/how-claude-code-works">

1020 에이전트 루프 및 컨텍스트 관리 이해하기

1021 </Card>

1022 

1023 <Card title="Claude Code 확장하기" icon="puzzle-piece" href="/ko/features-overview">

1024 skill, hook, MCP, subagent 및 플러그인 추가하기

1025 </Card>

1026 

1027 <Card title="참조 구현" icon="code" href="https://github.com/anthropics/claude-code/tree/main/.devcontainer">

1028 개발 컨테이너 참조 구현 복제하기

1029 </Card>

1030</CardGroup>

communications-kit.md +433 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 커뮤니케이션 키트

6 

7> 엔지니어링 조직에 Claude Code를 배포할 때 사용할 수 있는 출시 공지, 드립 캠페인 메시지, FAQ 응답입니다.

8 

9이 페이지는 Claude Code를 팀에 배포하는 관리자 및 엔지니어링 리더를 위한 것입니다. 바로 사용할 수 있는 출시 공지, 팁과 트릭 드립 캠페인, 가장 자주 받을 질문에 대한 한 줄 FAQ 응답을 제공합니다.

10 

11<Note>

12 여기의 모든 내용을 완성된 사본이 아닌 초안 사본으로 취급하십시오. 각 메시지를 조직의 목소리로 다시 작성하고, 예제 작업을 자신의 코드베이스의 실제 버그 및 모듈로 바꾸고, 보내기 전에 `[대괄호로 표시된 자리 표시자]`를 바꾸십시오. 채택을 유도하는 공지는 회사의 누군가가 작성한 것처럼 읽히는 것입니다.

13</Note>

14 

15## 출시 커뮤니케이션

16 

17두 가지 형식의 한 가지 공지와 두 가지 선택적 변형입니다. 롤아웃에 맞는 것을 선택하고 거기서부터 다시 작성하십시오.

18 

19### 보내기 전에

20 

21공지를 보내기 전에 이 체크리스트를 작성하십시오. 각 항목은 출시 당일 지원 스레드로 변하는 격차를 해결합니다.

22 

23| 항목 | 중요한 이유 |

24| ------------------------------------------------------- | --------------------------------------------------- |

25| `#claude-code` 채널이 생성되고 메시지에 링크됨 | 질문이 한 곳에 모이도록 함 |

26| 환경의 최소 한 대 머신에서 설치 명령어 테스트됨 | 모든 사람이 동시에 프록시 또는 방화벽 문제에 부딪히기 전에 문제를 포착함 |

27| 보안 및 데이터 처리 링크 준비됨 ([데이터 사용](/ko/data-usage) 또는 내부 동등물) | "내 코드는 어디로 가나요?"가 첫 번째 답변이 될 것임 |

28| 구체적인 첫 번째 작업 선택됨, 코드베이스의 실제 버그 또는 파일 | 일반적인 예제는 변환되지 않음; "auth\_test.go의 불안정한 테스트 수정"은 변환됨 |

29| 처음 48시간 동안 채널의 지정된 소유자 | 답변되지 않은 출시 당일 질문은 모멘텀을 죽임 |

30| C-suite 스폰서가 공지를 보내거나 공동 서명하도록 준비됨 | 임원이 보낸 출시는 관리자 또는 도구 팀이 보낸 것보다 일관되게 더 높은 첫 주 채택률을 봄 |

31 

32### 공지

33 

34이것을 표준 조직 전체 롤아웃 메시지로 사용하십시오. Claude Code가 무엇인지 다루고, 2분 설치 경로를 제공하고, 독자에게 시도할 구체적인 작업을 제공하고, "내 코드는 어디로 가나요?"에 답변합니다.

35 

36<Tabs>

37 <Tab title="이메일">

38 ```text theme={null}

39 제목: Claude Code가 [엔지니어링 / 팀]에 대해 활성화됨

40 

41 팀,

42 

43 오늘부터 Claude Code에 액세스할 수 있습니다. Claude Code는 터미널에서 실행되고, 실제 코드베이스를 읽고, 실제 작업을 끝까지 처리하는 AI 코딩 에이전트입니다: 디버깅, 리팩토링, 테스트, PR. 자동 완성이 아니고 채팅 창도 아닙니다. 파일을 편집하고, 명령어를 실행하고, 위험한 작업 전에 권한을 요청합니다.

44 

45 2분 안에 실행하기:

46 

47 curl -fsSL https://claude.ai/install.sh | bash

48 cd <your-repo>

49 claude

50 

51 그런 다음 /init를 한 번 실행하십시오. Claude는 프로젝트를 읽고 빌드 명령어와 규칙을 포함한 CLAUDE.md를 작성하므로 기본 사항을 다시 설명할 필요가 없습니다.

52 

53 그런 다음 이미 있는 리포지토리에서 다음 중 하나를 시도하십시오:

54 

55 - "[파일]의 테스트가 불안정합니다. 이유를 파악하고 수정하세요"

56 - "[모듈]이 [X]를 어떻게 처리하는지 설명해주세요"

57 - "작동하는 diff를 보고 푸시하기 전에 위험한 것이 무엇인지 알려주세요"

58 

59 코드가 가는 곳: Claude Code는 터미널에서 실행되고 Anthropic의 API와 직접 통신하며, 루프에 제3자 서버가 없습니다. 파일을 편집하거나 명령어를 실행하기 전에 요청합니다. Enterprise 계약에 따라 Anthropic은 모델 학습을 위해 코드나 프롬프트를 사용하지 않습니다.

60 세부 정보: https://code.claude.com/docs/en/data-usage

61 https://code.claude.com/docs/en/security

62 

63 질문할 곳: #claude-code. [소유자 이름]이 이번 주에 모니터링하고 있습니다.

64 

65 - [이름]

66 

67 P.S. 편집기를 선호하시나요? VS Code 확장 프로그램과 JetBrains 플러그인이 있습니다. 같은 에이전트, 터미널 필요 없음.

68 ```

69 </Tab>

70 

71 <Tab title="Slack 또는 Teams">

72 ```markdown theme={null}

73 🚀 *Claude Code가 [팀]에 대해 활성화됨*

74 

75 AI 코딩 에이전트, 터미널에서 실행, 리포지토리 읽음, 실제 작업 수행: 버그, 리팩토링, 테스트, PR. 무엇이든 건드리기 전에 요청합니다.

76 

77 `curl -fsSL https://claude.ai/install.sh | bash` → `cd your-repo` → `claude`

78 

79 *먼저 시도할 것* → `/init`를 실행한 다음: "[파일]의 테스트가 불안정합니다, 이유를 파악하고 수정하세요."

80 

81 🔒 터미널에서 실행, Anthropic의 API와만 통신합니다. Enterprise 계획에 따라 코드와 프롬프트는 모델 학습에 사용되지 않습니다.

82 데이터 사용 → https://code.claude.com/docs/en/data-usage

83 

84 📚 빠른 시작 · VS Code · 무료 1시간 과정

85 https://code.claude.com/docs/en/quickstart

86 https://code.claude.com/docs/en/vs-code

87 https://anthropic.skilljar.com/claude-code-in-action

88 

89 질문 → 이 스레드. [소유자]가 담당합니다.

90 ```

91 </Tab>

92</Tabs>

93 

94### 임원 스폰서 변형

95 

96CTO, CIO 또는 SVP Engineering과 같은 스폰서 임원으로부터 자신의 이름과 계정으로 이를 보내십시오. 임원 이름으로 나가는 출시는 관리자 또는 도구 팀의 같은 메시지보다 일관되게 더 높은 오픈율과 더 빠른 첫 주 활성화를 봅니다. 선택적 실험이 아닌 회사 우선순위를 신호합니다.

97 

98이 버전은 의도적으로 한 가지 요청으로 축소됩니다: 설치하고 한 가지 실제 작업에서 실행하십시오. 임원의 역할은 요청을 전달하는 것입니다; 표준 공지와 `#claude-code`가 방법을 처리합니다.

99 

100<Tabs>

101 <Tab title="이메일">

102 ```text theme={null}

103 제목: 이번 주에 모든 엔지니어가 시도했으면 하는 한 가지

104 

105 팀,

106 

107 모든 엔지니어링을 위해 Claude Code를 켰습니다. 터미널에서 직접 작동하고, 실제 코드베이스에서 작동하는 AI 에이전트이며, 이미 사용 중인 팀의 초기 결과가 충분히 강력해서 이번 주에 모두가 사용하기를 원합니다.

108 

109 10분을 요청합니다:

110 

111 curl -fsSL https://claude.ai/install.sh | bash

112 cd <your-repo>

113 claude

114 

115 그런 다음 한 가지 실제 작업을 제공하십시오: 미루고 있던 버그, 또는 "[모듈]이 어떻게 작동하는지 설명해주세요."

116 

117 그것이 전부입니다. [소유자 이름]과 팀이 #claude-code에 있으니 문제가 생기면 연락하세요.

118 

119 - [임원 이름]

120 [직책]

121 ```

122 </Tab>

123 

124 <Tab title="Slack 또는 Teams">

125 ```markdown theme={null}

126 📣 *[임원 이름]으로부터: 이번 주에 시도할 한 가지*

127 

128 모든 엔지니어링을 위해 *Claude Code*를 켰습니다. 초기 결과가 충분히 강력해서 모두가 이번 주에 실제 작업에 10분을 투자해주기를 요청합니다.

129 

130 `curl -fsSL https://claude.ai/install.sh | bash` → `cd your-repo` →

131 `claude` → 한 가지 실제 작업을 제공하세요.

132 

133 그것이 전부입니다. 질문 → #claude-code.

134 ```

135 </Tab>

136</Tabs>

137 

138### 파일럿 그룹 변형

139 

140단계적 롤아웃에 사용하십시오. 파일럿 코호트에만 보내십시오.

141 

142```text theme={null}

143제목: Claude Code 파일럿에 참여하셨습니다

144 

145[이름 / 팀],

146 

147[회사]에서 Claude Code의 첫 번째 물결에 참여하셨습니다. 실제 문제에 사용하고 솔직한 피드백을 줄 그룹을 선택했습니다.

148 

149요청: 이번 주에 최소한 한 가지 실제 작업에 사용한 다음, #claude-code-pilot에 메모를 남겨 작동한 것, 짜증난 것, 놀라운 것을 다루십시오. 그 피드백이 모두에게 롤아웃하는 방법을 결정합니다.

150 

151[표준 공지에서 "2분 안에 실행하기" 계속]

152 

153파일럿을 위한 한 가지 추가: 첫 번째 다중 파일 변경에서 Shift+Tab를 누르면 "plan"이 표시될 때까지 누르십시오. Claude는 파일을 건드리기 전에 정확히 무엇을 할 의도인지 설명합니다. 신뢰할 수 있는 정도를 조정하는 가장 빠른 방법입니다.

154```

155 

156### 챔피언 모집 DM

157 

158출시 후, `#claude-code`에서 가장 활동적인 2-3명에게 DM을 보내십시오.

159 

160```text theme={null}

161안녕하세요 [이름], 당신의 #claude-code 게시물이 내 공지보다 채택을 더 많이 유도하고 있습니다. 몇몇 사람이 당신의 [스레드 / 스크린샷]이 실제로 시도하게 한 이유라고 말했습니다.

162 

163이것을 반공식적으로 만들고 싶으신가요? 낮은 수고: 주로 지금 게시하고 있는 것을 계속 게시하고, 새로운 기능에 먼저 접근하고, Anthropic 팀과의 직접 연결. 관심이 있으시면 짧은 플레이북을 공유할 수 있습니다.

164```

165 

166## 팁과 트릭 캠페인

167 

168출시 후 기능 활성화를 유도하도록 설계된 바로 붙여넣을 수 있는 Slack 또는 Teams 메시지입니다. 각각은 같은 패턴을 따릅니다: 훅, 보상, "지금 시도" 프롬프트, 문서 링크. `#claude-code`에서 주에 한두 개씩 드립하거나, 팀의 격차와 일치하는 몇 가지를 선택하십시오. 필수 순서 없이 독립적으로 작동합니다.

169 

170각 블록에서 메시지 본문을 Slack 또는 Teams에 직접 복사하십시오. 보내기 전에 `[대괄호로 표시된 자리 표시자]`를 바꾸십시오.

171 

172### 시작하기

173 

174**올바른 모델 선택**

175 

176```markdown theme={null}

177🎯 *팁: 모델을 순간에 맞추기*

178 

179오타를 수정하기 위해 Opus를 사용하면 계산을 낭비합니다. 12파일 리팩토링에 Haiku를 사용하는 것은 다시 하도록 요청하는 것입니다.

180 

181Claude Code는 Claude 앱과 같은 모델에서 실행되며, 세션 중에 전환할 수 있습니다. *Sonnet*은 일상적인 기능 작업, 버그, 테스트, 검토를 위한 기본 워크호스입니다. 대규모 리팩토링, 복잡한 디버깅 또는 높은 위험의 작업에는 *Opus*를 사용하십시오. 빠른 질문, 포맷팅, 속도가 중요한 기계적 편집에는 *Haiku*로 내려가십시오.

182 

183*지금 시도하기:* `/model`을 입력하고 아직 하지 않았다면 Sonnet을 선택하십시오. 대부분의 작업에 올바른 기본값입니다.

184 

185📖 모델 구성 → https://code.claude.com/docs/en/model-config

186```

187 

188| 모델 | 최적 용도 |

189| ------ | ------------------------------------------ |

190| Opus | 대규모 리팩토링, 복잡한 디버깅, 아키텍처 결정, 높은 위험 변경 |

191| Sonnet | 일상적인 기능 작업, 버그 수정, 테스트, 문서, 코드 검토. 권장 기본값. |

192| Haiku | 빠른 질문, 포맷팅, 기계적 편집, 빠른 반복 |

193 

194**먼저 시도할 빠른 승리**

195 

196```markdown theme={null}

197🚀 *팁: 처음 10분 안에 시도할 세 가지*

198 

199Claude Code를 설치했지만 실제로 무엇을 요청해야 할지 확실하지 않으신가요? 지난 주 내내 당신을 괴롭혔던 것부터 시작하십시오.

200 

201 - 짜증나는 것 수정: "[파일]의 테스트가 불안정합니다, 이유를 파악하세요"

202 - 작성하지 않은 코드에서 방향 잡기: "[모듈]이 어떻게 작동하는지 설명해주세요"

203 - 푸시하기 전에 건전성 확인: "작동하는 diff를 보고 위험해 보이는 것이 무엇인지 알려주세요"

204 

205이 중 어느 것도 설정이 필요하지 않습니다. 리포지토리로 `cd`하고 `claude`를 실행하십시오.

206 

207*지금 시도하기:* 피해온 버그를 선택하고 오류 메시지를 붙여넣으십시오.

208 

209📖 빠른 시작 → https://code.claude.com/docs/en/quickstart

210```

211 

212### 프로젝트 메모리

213 

214**`/init` 및 CLAUDE.md**

215 

216```markdown theme={null}

217📁 *팁: 매 세션마다 리포지토리를 다시 설명하지 마세요*

218 

219다섯 번째로 Claude에게 "우리는 npm이 아닌 pnpm을 사용합니다"라고 말하고 있나요? 일회성 수정이 있습니다.

220 

221리포지토리당 한 번 `/init`를 실행하십시오. Claude는 프로젝트 구조를 읽고 빌드 명령어, 아키텍처, 규칙을 포함한 CLAUDE.md 파일을 작성합니다. 해당 리포지토리의 모든 향후 세션은 이 파일에서 자동으로 시작됩니다. 두 화면 이하로 유지하십시오. 문서가 아닌 치트 시트입니다.

222 

223*지금 시도하기:* 주 리포지토리를 열고, `claude`를 실행하고, `/init`를 입력하십시오. 30초, 그 이후 모든 세션에서 보상됩니다.

224 

225📖 CLAUDE.md 및 프로젝트 메모리 → https://code.claude.com/docs/en/memory

226```

227 

228**@-참조**

229 

230```markdown theme={null}

231📎 *팁: 채팅에 파일 내용을 붙여넣지 마세요*

232 

233Claude가 "볼 수 있도록" 프롬프트에 컴포넌트의 200줄을 복사하고 있나요? 할 필요가 없습니다.

234 

235`@`를 입력한 다음 파일 경로를 입력하십시오. Claude는 파일을 컨텍스트에 직접 가져옵니다. 전체 디렉토리에도 작동합니다.

236 

237> @src/components/Button.tsx의 스타일이 이상해 보입니다, @docs/design-system.md와 비교해주세요

238 

239*지금 시도하기:* `@`를 입력한 다음 Tab을 누르십시오. 자동 완성은 도달 범위 내의 모든 파일을 표시합니다.

240 

241📖 파일 참조 → https://code.claude.com/docs/en/common-workflows

242```

243 

244### 제어 및 안전

245 

246**권한 모드**

247 

248```markdown theme={null}

249🛡️ *팁: "보기만 하고 건드리지 마세요"와 "그냥 하세요" 사이의 한 번의 키 입력*

250 

251때로는 Claude가 모든 편집 전에 요청하기를 원합니다. 때로는 그냥 배포하기를 원합니다. 영원히 하나를 선택할 필요는 없습니다.

252 

253*Shift+Tab*은 Claude가 얻는 자유도를 순환합니다: *default*는 위험한 것 전에 요청하고, *acceptEdits*는 파일 편집과 일반적인 파일 시스템 명령어가 흐르도록 하면서도 다른 셸 명령어 전에 확인하고, *plan*은 무엇이든 건드리기 전에 승인을 위해 변경 사항을 제안합니다. Plan 모드는 신뢰 구축자이므로 여러 파일을 건드리는 모든 것에 대해 거기서 시작하십시오.

254 

255*지금 시도하기:* 다음 리팩토링에서 Shift+Tab을 누르면 "plan"이 표시될 때까지 누른 다음 변경 사항을 설명하십시오. 단일 파일이 움직이기 전에 전체 제안을 받을 것입니다.

256 

257📖 권한 모드 → https://code.claude.com/docs/en/permissions

258```

259 

260**체크포인팅 및 `/rewind`**

261 

262```markdown theme={null}

263⏪ *팁: 전체 대화에 대한 실행 취소 버튼이 있습니다*

264 

265Claude가 3턴 전에 잘못된 경로로 내려갔고 이제 그것을 풀고 있나요? 앞으로 수정할 필요가 없습니다.

266 

267`/rewind`는 대화의 이전 지점으로 롤백하며, Claude가 만든 파일 변경 사항을 포함합니다. 체크포인팅은 자동입니다; 아무것도 설정할 필요가 없습니다.

268 

269*지금 시도하기:* *Esc*를 두 번 눌러 rewind 메뉴를 열거나 `/rewind`를 입력하십시오. 상황이 잘못되기 전의 지점을 선택하십시오.

270 

271📖 체크포인팅 → https://code.claude.com/docs/en/checkpointing

272```

273 

274### 도구 연결

275 

276**MCP 커넥터**

277 

278```markdown theme={null}

279🔌 *팁: Claude가 이슈 추적기를 읽도록 하여 티켓을 붙여넣을 필요가 없도록 하기*

280 

281Jira 티켓을 터미널에 붙여넣는 것은 한 걸음 뒤로 물러나는 것처럼 느껴집니다. 맞습니다.

282 

283한 개의 구성 파일(프로젝트 루트의 `.mcp.json`)이 Claude를 GitHub, Jira, Linear 또는 사용하는 추적기에 연결합니다. 그러면 "내게 할당된 최우선 이슈는 무엇입니까?"와 "계속 진행하고 수정하세요"가 같은 대화에서 발생합니다.

284 

285*지금 시도하기:* Claude에게 "이 리포지토리에서 [GitHub/Jira/Linear]에 대한 MCP 커넥터를 설정하세요"라고 요청하십시오. 구성을 작성할 것입니다.

286 

287📖 MCP 커넥터 → https://code.claude.com/docs/en/mcp

288```

289 

290### 워크플로우 자동화

291 

292**Skills**

293 

294```markdown theme={null}

295⚡ *팁: 계속 다시 입력하는 프롬프트를 명령어로 바꾸기*

296 

297이번 주에 "git log에서 오늘 작업한 내용을 요약하고 standup 형식으로 포맷하세요"를 세 번 입력했나요? 그것은 슬래시 명령어가 되기를 기다리고 있습니다.

298 

299`.claude/skills/<name>/`의 SKILL.md 파일은 재사용 가능한 프롬프트가 되고; `/name`을 입력하여 실행하십시오. 다시 입력한 다중 단계 프롬프트를 두 번째로 입력할 때 하나를 만드십시오. 가장 쉬운 경로: Claude에게 만들도록 요청하십시오.

300 

301*지금 시도하기:* "git log에서 오늘 작업한 내용을 요약하는 /standup skill을 만들어주세요"를 입력한 다음 내일 아침 `/standup`을 실행하십시오.

302 

303📖 Skills → https://code.claude.com/docs/en/skills

304```

305 

306**Hooks**

307 

308```markdown theme={null}

309🔔 *팁: 리팩토링이 완료되면 핑을 받으세요*

310 

311책상에 앉아 Claude가 긴 작업을 처리하는 것을 보고 있나요? 그 8분 동안 더 나은 일을 할 수 있습니다.

312 

313Hooks는 Claude Code 이벤트에서 실행되는 셸 명령어입니다. 완료되면 데스크톱 알림을 보내는 Stop hook는 긴 리팩토링을 시작하고, 떠나고, 완료되는 순간 핑을 받을 수 있다는 의미입니다.

314 

315*지금 시도하기:* Claude에게 "완료되면 데스크톱 알림을 보내는 Stop hook를 추가하세요"라고 요청하십시오. 스크립트를 작성하고 연결할 것입니다.

316 

317📖 Hooks 가이드 → https://code.claude.com/docs/en/hooks-guide

318```

319 

320### 일상적인 개발

321 

322**스크린샷 및 이미지**

323 

324```markdown theme={null}

325📸 *팁: 오류 대화 상자를 설명하지 마세요. 그냥 보여주세요.*

326 

327"null 참조에 대해 뭔가 말하는 빨간 상자가 있고 47줄 정도를 가리키고 있습니다"라고 입력하고 있나요? 스크린샷을 찍으세요.

328 

329스크린샷을 터미널에 직접 드래그하면 Claude가 봅니다: 오류 대화 상자, UI 목업, 화이트보드 사진, Figma 내보내기. *Ctrl+V*는 클립보드에서 붙여넣습니다(macOS에서도 Cmd+V가 아닌 Ctrl+V 사용).

330 

331*지금 시도하기:* 다음에 뭔가 시각적으로 깨지면, 스크린샷을 찍고 프롬프트에 직접 붙여넣으십시오. 그런 다음 "여기서 뭐가 잘못됐어요?"라고 입력하십시오.

332 

333📖 이미지 작업 → https://code.claude.com/docs/en/common-workflows

334```

335 

336**Git 워크플로우**

337 

338```markdown theme={null}

339🌿 *팁: 전체 git 의식을 넘기기*

340 

341수정에 5분이 걸렸습니다. 커밋 메시지, 브랜치, PR 설명에 15분이 걸렸습니다. 그 비율은 잘못되었습니다.

342 

343Claude는 전체 git 흐름을 처리합니다: 기존 메시지가 있는 커밋, 브랜치, 적절한 요약이 있는 PR. 한 가지 요청: "off-by-one을 수정하고, 기존 커밋 메시지로 커밋하고, PR을 열어주세요." 다른 사람의 작업을 검토하고 있나요? PR URL을 붙여넣고 Claude에게 diff를 설명해달라고 요청하십시오.

344 

345*지금 시도하기:* 다음 수정 후, git 클라이언트로 전환하는 대신, "좋은 메시지로 커밋하고 PR을 열어주세요"라고 입력하십시오.

346 

347📖 풀 요청 생성 → https://code.claude.com/docs/en/common-workflows

348```

349 

350### 공유 및 확장

351 

352**Plugins**

353 

354```markdown theme={null}

355📦 *팁: 누군가 아마도 이미 그 skill을 만들었습니다*

356 

357`/deploy` 명령어를 만드는 데 1시간을 보내려고 하나요? 이미 존재하는지 확인하십시오.

358 

359Skills는 플러그인으로 번들되고 공유됩니다. `/plugin`은 사용 가능한 것을 찾아보고 한 단계로 설치합니다. 5분의 탐색은 1시간의 구축을 절약할 수 있습니다.

360 

361*지금 시도하기:* `/plugin`을 입력하고 스크롤하십시오. 알지 못했던 적어도 한 가지를 찾을 것입니다.

362 

363📖 Plugins → https://code.claude.com/docs/en/plugins

364```

365 

366### 보안 및 관리

367 

368**보안 아키텍처**

369 

370```markdown theme={null}

371🔐 *팁: 다음에 물어볼 때 "이것이 안전한가요?"에 대한 답변*

372 

373팀의 누군가가 "잠깐, 내 코드는 어디로 가나요?"라고 물어볼 것입니다.

374여기 붙여넣을 수 있는 짧은 버전입니다.

375 

376설계상 권한 우선. 모든 파일 편집, 셸 명령어, 외부 호출은 승인으로 제어됩니다. CLI는 터미널에서 실행되고 Anthropic의 API와 직접 통신하며, 제3자 서버가 없고, 셸 명령어에 대한 선택적 OS 수준 샌드박싱을 지원합니다. Enterprise 계획에 따라 Anthropic은 모델 학습을 위해 코드나 프롬프트를 사용하지 않습니다.

377 

378*지금 시도하기:* 다음에 질문이 나올 때를 위해 이 두 링크를 저장하십시오. 대부분의 보안 검토 질문에 답변합니다.

379 

380📖 https://code.claude.com/docs/en/security

381📖 https://code.claude.com/docs/en/data-usage

382```

383 

384**모범 사례**

385 

386```markdown theme={null}

387✅ *팁: "한 번 시도했습니다"와 "매일 사용합니다" 사이를 구분하는 4가지 습관*

388 

389Claude Code에서 튕겨나간 대부분의 사람들은 이 중 하나를 건너뛰었습니다. 계속한 대부분의 사람들은 첫 주에 모두 네 가지를 했습니다.

390 

391 - 여러 파일을 건드리는 모든 것에 대해 plan 모드에서 시작

392 - /init를 일찍 실행; 컨텍스트는 복합됨

393 - 커밋하기 전에 diff 검토; Claude는 자신감 있게 틀릴 수 있음

394 - 중요한 경로를 건드리는 변경 사항 확인; 오라클이 아닌 날카로운 주니어처럼 취급

395 

396*지금 시도하기:* 이 중 하나 또는 두 개만 했다면, 누락된 것을 선택하고 다음 작업에서 하십시오. #claude-code에 변경 사항을 게시하십시오.

397 

398📖 모범 사례 → https://code.claude.com/docs/en/best-practices

399```

400 

401## 빠른 참조

402 

403### FAQ 응답

404 

405가장 자주 받을 질문에 대한 한 줄 답변입니다.

406 

407| 질문 | 응답 |

408| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- |

409| "VS Code에서 작동하나요?" | 예. VS Code 확장 프로그램과 JetBrains 플러그인이 있으며 같은 기능을 가지고 있고 편집기에 포함되어 있습니다. [VS Code →](/ko/vs-code) |

410| "먼저 뭔가 구성해야 하나요?" | 아니요. 설치한 다음 모든 리포지토리에서 `claude`를 실행하십시오. `/init`를 한 번 실행하면 설정됩니다. [빠른 시작 →](/ko/quickstart) |

411| "내 코드는 어디로 가나요?" | CLI는 터미널에서 실행되고 컨텍스트를 Anthropic의 API로 보내 추론하며, 제3자 서버가 없습니다. Enterprise 계획에 따라 코드와 프롬프트는 모델 학습에 사용되지 않습니다. [데이터 사용 →](/ko/data-usage) |

412| "전체 리포지토리를 볼 수 있나요?" | 액세스 권한을 부여한 것을 읽습니다. 작업 디렉토리 내의 파일 읽기는 프롬프트하지 않습니다; 권한 프롬프트는 편집, 셸 명령어, 그 디렉토리 외부의 모든 것을 제어합니다. [권한 →](/ko/permissions) |

413| "이것이 Copilot과 어떻게 다른가요?" | Copilot은 줄을 자동 완성합니다. Claude Code는 파일을 읽고, 명령어를 실행하고, 다중 파일 편집을 하는 에이전트입니다. [개요 →](/ko/overview) |

414| "먼저 뭘 시도해야 하나요?" | 지루해서 미루고 있던 버그. "\[파일]의 테스트가 불안정합니다, 이유를 파악하세요." [빠른 시작 →](/ko/quickstart) |

415 

416### 프롬프트 템플릿

417 

418설치했지만 무엇을 요청해야 할지 확실하지 않은 엔지니어와 공유할 스타터 프롬프트입니다. 각각은 실제 세션에 입력되는 방식으로 표현됩니다; 대괄호로 표시된 부분을 자신의 리포지토리의 파일로 바꾸십시오.

419 

420| 작업 | 프롬프트 |

421| --------- | ------------------------------------------------------- |

422| 버그 수정 | "\[파일]의 테스트가 실패하고 있습니다, 이유를 파악하고 수정하세요" |

423| 코드 이해 | "\[모듈]이 어떻게 작동하는지 설명해주세요, 그런 다음 진입점이 어디인지 알려주세요" |

424| 안전한 리팩토링 | "\[모듈]을 \[목표]로 리팩토링하세요, plan 모드를 사용하여 먼저 검토할 수 있도록 하세요" |

425| 테스트 작성 | "\[파일]에 대한 테스트를 작성하세요, \[시나리오] 주변의 엣지 케이스를 다루세요" |

426| 커밋 전 검토 | "작동하는 diff를 보고 위험해 보이는 것이 무엇인지 알려주세요" |

427| PR 열기 | "\[이슈]를 수정하고, 기존 커밋을 작성하고, 요약과 함께 PR을 열어주세요" |

428| Skill 만들기 | "테스트와 lint를 실행한 후 커밋하는 /ship skill을 만들어주세요" |

429| 스택 추적 디버깅 | "스택 추적이 있습니다, 근본 원인을 찾으세요, 그냥 덮지 마세요" |

430 

431<Tip>

432 Claude Code는 자주 배포됩니다. 내부적으로 배포하기 전에 [문서 홈 페이지](/ko/overview)에 대해 버전별 세부 정보를 확인하십시오.

433</Tip>

computer-use.md +207 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Claude가 CLI에서 컴퓨터를 사용하도록 설정

6 

7> Claude Code CLI에서 컴퓨터 사용을 활성화하여 Claude가 macOS에서 앱을 열고, 클릭하고, 입력하고, 화면을 볼 수 있도록 합니다. 터미널을 떠나지 않고 네이티브 앱을 테스트하고, 시각적 문제를 디버깅하고, GUI 전용 도구를 자동화합니다.

8 

9<Note>

10 {/* plan-availability: feature=computer-use plans=pro,max */}

11 

12 컴퓨터 사용은 Pro 또는 Max 플랜이 필요한 macOS의 연구 미리보기입니다. Team 또는 Enterprise 플랜에서는 사용할 수 없습니다. Claude Code v2.1.85 이상이 필요하며 대화형 세션이 필요하므로 `-p` 플래그를 사용한 비대화형 모드에서는 사용할 수 없습니다.

13</Note>

14 

15컴퓨터 사용을 통해 Claude는 앱을 열고, 화면을 제어하고, 사용자가 하는 방식으로 컴퓨터에서 작업할 수 있습니다. CLI에서 Claude는 Swift 앱을 컴파일하고, 실행하고, 모든 버튼을 클릭하고, 결과를 스크린샷하는 모든 작업을 코드를 작성한 동일한 대화에서 수행할 수 있습니다.

16 

17이 페이지에서는 CLI에서 컴퓨터 사용이 어떻게 작동하는지 설명합니다. Desktop 앱의 경우 [Desktop의 컴퓨터 사용](/ko/desktop#let-claude-use-your-computer)을 참조하세요.

18 

19## 컴퓨터 사용으로 할 수 있는 작업

20 

21컴퓨터 사용은 GUI가 필요한 작업을 처리합니다. 일반적으로 터미널을 떠나 손으로 직접 해야 하는 모든 작업입니다.

22 

23* **네이티브 앱 빌드 및 검증**: Claude에게 macOS 메뉴 바 앱을 빌드하도록 요청합니다. Claude는 Swift를 작성하고, 컴파일하고, 실행하고, 모든 컨트롤을 클릭하여 사용자가 열기 전에 작동하는지 확인합니다.

24* **엔드투엔드 UI 테스트**: Claude에게 로컬 Electron 앱을 가리키고 "온보딩 흐름을 테스트해"라고 말합니다. Claude는 앱을 열고, 가입 과정을 클릭하고, 각 단계를 스크린샷합니다. Playwright 설정이나 테스트 하네스가 필요 없습니다.

25* **시각적 및 레이아웃 문제 디버깅**: Claude에게 "모달이 작은 창에서 잘려 있어"라고 말합니다. Claude는 창 크기를 조정하고, 버그를 재현하고, 스크린샷을 찍고, CSS를 패치하고, 수정 사항을 확인합니다. Claude는 사용자가 보는 것을 봅니다.

26* **GUI 전용 도구 제어**: 디자인 도구, 하드웨어 제어판, iOS Simulator 또는 CLI나 API가 없는 독점 앱과 상호작용합니다.

27 

28## 컴퓨터 사용이 적용되는 경우

29 

30Claude는 앱이나 서비스와 상호작용하는 여러 방법을 가지고 있습니다. 컴퓨터 사용은 가장 광범위하고 가장 느리므로 Claude는 가장 정확한 도구를 먼저 시도합니다.

31 

32* [MCP 서버](/ko/mcp)가 서비스에 있으면 Claude가 그것을 사용합니다.

33* 작업이 셸 명령이면 Claude는 Bash를 사용합니다.

34* 작업이 브라우저 작업이고 [Claude in Chrome](/ko/chrome)이 설정되어 있으면 Claude가 그것을 사용합니다.

35* 위의 어느 것도 적용되지 않으면 Claude는 컴퓨터 사용을 사용합니다.

36 

37화면 제어는 다른 것이 도달할 수 없는 것들을 위해 예약되어 있습니다. 네이티브 앱, 시뮬레이터, API가 없는 도구입니다.

38 

39## 컴퓨터 사용 활성화

40 

41컴퓨터 사용은 `computer-use`라는 기본 제공 MCP 서버로 사용할 수 있습니다. 활성화할 때까지 기본적으로 꺼져 있습니다.

42 

43<Steps>

44 <Step title="MCP 메뉴 열기">

45 대화형 Claude Code 세션에서 다음을 실행합니다.

46 

47 ```text theme={null}

48 /mcp

49 ```

50 

51 서버 목록에서 `computer-use`를 찾습니다. 비활성화된 것으로 표시됩니다.

52 </Step>

53 

54 <Step title="서버 활성화">

55 `computer-use`를 선택하고 **활성화**를 선택합니다. 설정은 프로젝트별로 유지되므로 컴퓨터 사용을 원하는 각 프로젝트에 대해 한 번만 수행하면 됩니다.

56 </Step>

57 

58 <Step title="macOS 권한 부여">

59 Claude가 처음으로 컴퓨터를 사용하려고 할 때 두 가지 macOS 권한을 부여하라는 프롬프트가 표시됩니다.

60 

61 * **접근성**: Claude가 클릭, 입력 및 스크롤할 수 있도록 합니다.

62 * **화면 녹화**: Claude가 화면에 있는 것을 볼 수 있도록 합니다.

63 

64 프롬프트에는 관련 시스템 설정 창을 열 수 있는 링크가 포함되어 있습니다. 둘 다 부여한 다음 프롬프트에서 **다시 시도**를 선택합니다. macOS는 화면 녹화를 부여한 후 Claude Code를 다시 시작하도록 요구할 수 있습니다.

65 </Step>

66</Steps>

67 

68설정 후 Claude에게 GUI가 필요한 작업을 수행하도록 요청합니다.

69 

70```text theme={null}

71앱 대상을 빌드하고, 실행하고, 각 탭을 클릭하여 아무것도

72충돌하지 않는지 확인합니다. 발견한 오류 상태를 스크린샷합니다.

73```

74 

75## 세션별 앱 승인

76 

77`computer-use` 서버를 활성화해도 Claude에게 컴퓨터의 모든 앱에 대한 액세스 권한이 부여되지는 않습니다. Claude가 세션에서 특정 앱이 필요한 첫 번째 시간에 터미널에 프롬프트가 나타나며 다음을 표시합니다.

78 

79* Claude가 제어하려는 앱

80* 클립보드 액세스와 같은 요청된 추가 권한

81* Claude가 작업하는 동안 숨겨질 다른 앱의 수

82 

83**이 세션에 대해 허용** 또는 **거부**를 선택합니다. 승인은 현재 세션 동안 지속됩니다. Claude가 함께 요청할 때 여러 앱을 한 번에 승인할 수 있습니다.

84 

85광범위한 도달 범위를 가진 앱은 프롬프트에 추가 경고를 표시하므로 승인이 부여하는 것을 알 수 있습니다.

86 

87| 경고 | 적용 대상 |

88| :---------------- | :-------------------------------------------- |

89| 셸 액세스와 동등 | Terminal, iTerm, VS Code, Warp 및 기타 터미널 및 IDE |

90| 모든 파일을 읽거나 쓸 수 있음 | Finder |

91| 시스템 설정을 변경할 수 있음 | 시스템 설정 |

92 

93이러한 앱은 차단되지 않습니다. 경고를 통해 작업이 해당 수준의 액세스를 보장하는지 결정할 수 있습니다.

94 

95Claude의 제어 수준은 앱 카테고리에 따라 다릅니다. 브라우저와 거래 플랫폼은 보기 전용이고, 터미널과 IDE는 클릭 전용이며, 다른 모든 것은 전체 제어를 얻습니다. 전체 계층 분석은 [Desktop의 앱 권한](/ko/desktop#app-permissions)을 참조하세요.

96 

97## Claude가 화면에서 작동하는 방식

98 

99흐름을 이해하면 Claude가 무엇을 할 것인지 예상하고 개입하는 방법을 알 수 있습니다.

100 

101### 한 번에 한 세션

102 

103컴퓨터 사용은 활성 상태일 때 머신 전체 잠금을 유지합니다. 다른 Claude Code 세션이 이미 컴퓨터를 사용 중이면 새로운 시도는 어느 세션이 잠금을 유지하는지 알려주는 메시지와 함께 실패합니다. 먼저 해당 세션을 완료하거나 종료합니다.

104 

105### Claude가 작업하는 동안 앱이 숨겨집니다.

106 

107Claude가 화면 제어를 시작하면 다른 표시되는 앱이 숨겨져 Claude가 승인된 앱하고만 상호작용합니다. 터미널 창은 표시된 상태로 유지되고 스크린샷에서 제외되므로 세션을 볼 수 있고 Claude는 자신의 출력을 절대 보지 않습니다.

108 

109Claude가 턴을 완료하면 숨겨진 앱이 자동으로 복원됩니다.

110 

111### 언제든지 중지

112 

113Claude가 잠금을 획득하면 macOS 알림이 나타납니다. "Claude가 컴퓨터를 사용 중입니다 · Esc를 눌러 중지하세요." 어디서나 `Esc`를 눌러 현재 작업을 즉시 중단하거나 터미널에서 `Ctrl+C`를 누릅니다. 어느 쪽이든 Claude는 잠금을 해제하고, 앱을 표시하고, 제어를 사용자에게 반환합니다.

114 

115Claude가 완료되면 두 번째 알림이 나타납니다.

116 

117## 안전 및 신뢰 경계

118 

119<Warning>

120 [샌드박스된 Bash 도구](/ko/sandboxing)와 달리 컴퓨터 사용은 승인한 앱에 액세스할 수 있는 실제 데스크톱에서 실행됩니다. Claude는 각 작업을 확인하고 화면 콘텐츠에서 잠재적 프롬프트 주입을 플래그하지만 신뢰 경계는 다릅니다. 모범 사례는 [컴퓨터 사용 안전 가이드](https://support.claude.com/en/articles/14128542)를 참조하세요.

121</Warning>

122 

123기본 제공 가드레일은 구성 없이 위험을 줄입니다.

124 

125* **앱별 승인**: Claude는 현재 세션에서 승인한 앱만 제어할 수 있습니다.

126* **센티널 경고**: 셸, 파일 시스템 또는 시스템 설정 액세스를 부여하는 앱은 승인 전에 플래그됩니다.

127* **스크린샷에서 터미널 제외**: Claude는 터미널 창을 절대 보지 않으므로 세션의 화면 프롬프트가 모델로 다시 피드될 수 없습니다.

128* **전역 이스케이프**: `Esc` 키는 어디서나 컴퓨터 사용을 중단하고 키 누름이 소비되므로 프롬프트 주입이 대화 상자를 닫는 데 사용할 수 없습니다.

129* **잠금 파일**: 한 번에 한 세션만 컴퓨터를 제어할 수 있습니다.

130 

131## 예제 워크플로우

132 

133이 예제는 컴퓨터 사용을 코딩 작업과 결합하는 일반적인 방법을 보여줍니다.

134 

135### 네이티브 빌드 검증

136 

137macOS 또는 iOS 앱을 변경한 후 Claude에게 한 번에 컴파일하고 확인하도록 합니다.

138 

139```text theme={null}

140MenuBarStats 대상을 빌드하고, 실행하고, 기본 설정 창을 열고,

141간격 슬라이더가 레이블을 업데이트하는지 확인합니다. 완료되면

142기본 설정 창을 스크린샷합니다.

143```

144 

145Claude는 `xcodebuild`를 실행하고, 앱을 실행하고, UI와 상호작용하고, 발견한 내용을 보고합니다.

146 

147### 레이아웃 버그 재현

148 

149시각적 버그가 특정 창 크기에서만 나타날 때 Claude에게 찾도록 합니다.

150 

151```text theme={null}

152설정 모달이 좁은 창에서 바닥글을 자릅니다. 앱 창 크기를 줄여서

153재현할 수 있을 때까지 조정하고, 잘린 상태를 스크린샷한 다음,

154모달 컨테이너의 CSS를 확인합니다.

155```

156 

157Claude는 창 크기를 조정하고, 손상된 상태를 캡처하고, 관련 스타일시트를 읽습니다.

158 

159### 시뮬레이터 흐름 테스트

160 

161XCTest를 작성하지 않고 iOS Simulator를 제어합니다.

162 

163```text theme={null}

164iOS Simulator를 열고, 앱을 실행하고, 온보딩 화면을 탭하고,

165어떤 화면이 로드하는 데 1초 이상 걸리는지 알려줍니다.

166```

167 

168Claude는 마우스를 사용하는 것처럼 시뮬레이터를 제어합니다.

169 

170## Desktop 앱과의 차이점

171 

172CLI 및 Desktop 표면은 동일한 컴퓨터 사용 엔진을 공유합니다. 몇 가지 Desktop 특정 컨트롤은 아직 CLI에 없습니다.

173 

174| 기능 | Desktop | CLI |

175| :---------- | :---------------------------------- | :-------------------------- |

176| 활성화 | **설정 > 일반**의 토글 (**Desktop 앱** 아래) | `/mcp`에서 `computer-use` 활성화 |

177| 거부된 앱 목록 | 설정에서 구성 가능 | 아직 사용할 수 없음 |

178| 자동 표시 토글 | 선택 사항 | 항상 켜짐 |

179| Dispatch 통합 | Dispatch에서 생성된 세션이 컴퓨터 사용을 사용할 수 있음 | 해당 없음 |

180 

181## 문제 해결

182 

183### "컴퓨터 사용이 다른 Claude 세션에서 사용 중입니다"

184 

185다른 Claude Code 세션이 잠금을 유지합니다. 해당 세션에서 작업을 완료하거나 종료합니다. 다른 세션이 충돌한 경우 Claude가 프로세스가 더 이상 실행 중이 아님을 감지하면 잠금이 자동으로 해제됩니다.

186 

187### macOS 권한 프롬프트가 계속 다시 나타남

188 

189macOS는 화면 녹화를 부여한 후 요청 프로세스를 다시 시작해야 할 수 있습니다. Claude Code를 완전히 종료하고 새 세션을 시작합니다. 프롬프트가 계속되면 **시스템 설정 > 개인 정보 보호 및 보안 > 화면 녹화**를 열고 터미널 앱이 나열되고 활성화되어 있는지 확인합니다.

190 

191### `computer-use`가 `/mcp`에 나타나지 않음

192 

193서버는 적격 설정에서만 나타납니다. 다음을 확인합니다.

194 

195* macOS를 사용 중입니다. 컴퓨터 사용은 Linux 또는 Windows에서 사용할 수 없습니다.

196* Claude Code v2.1.85 이상을 실행 중입니다. `claude --version`을 실행하여 확인합니다.

197* Pro 또는 Max 플랜을 사용 중입니다. `/status`를 실행하여 구독을 확인합니다.

198* claude.ai를 통해 인증되었습니다. 컴퓨터 사용은 Amazon Bedrock, Google Cloud Vertex AI 또는 Microsoft Foundry와 같은 타사 제공자에서 사용할 수 없습니다. 타사 제공자를 통해서만 Claude에 액세스하는 경우 이 기능을 사용하려면 별도의 claude.ai 계정이 필요합니다.

199* 대화형 세션에 있습니다. 컴퓨터 사용은 `-p` 플래그를 사용한 비대화형 모드에서 사용할 수 없습니다.

200 

201## 참고 항목

202 

203* [Desktop의 컴퓨터 사용](/ko/desktop#let-claude-use-your-computer): 그래픽 설정 페이지가 있는 동일한 기능

204* [Claude in Chrome](/ko/chrome): 웹 기반 작업을 위한 브라우저 자동화

205* [MCP](/ko/mcp): Claude를 구조화된 도구 및 API에 연결

206* [샌드박싱](/ko/sandboxing): Claude의 Bash 도구가 파일 시스템 및 네트워크 액세스를 격리하는 방법

207* [컴퓨터 사용 안전 가이드](https://support.claude.com/en/articles/14128542): 안전한 컴퓨터 사용을 위한 모범 사례

costs.md +203 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 비용을 효과적으로 관리하기

6 

7> 토큰 사용량을 추적하고, 팀 지출 한도를 설정하며, 컨텍스트 관리, 모델 선택, 확장 사고 설정 및 전처리 hooks를 통해 Claude Code 비용을 절감합니다.

8 

9Claude Code는 API 토큰 소비량으로 청구됩니다. 구독 요금제 가격(Pro, Max, Team, Enterprise)은 [claude.com/pricing](https://claude.com/pricing)을 참조하십시오. 개발자당 비용은 모델 선택, 코드베이스 크기, 여러 인스턴스 실행 또는 자동화와 같은 사용 패턴에 따라 크게 달라집니다.

10 

11엔터프라이즈 배포 전반에 걸쳐 평균 비용은 개발자당 활성 일일 약 $13이며, 개발자당 월 $150-250이고, 90%의 사용자는 활성 일일 비용이 \$30 이하로 유지됩니다. 팀의 지출을 추정하려면 작은 파일럿 그룹으로 시작하고 아래의 추적 도구를 사용하여 더 광범위한 롤아웃 전에 기준선을 설정하십시오.

12 

13이 페이지에서는 [비용 추적 방법](#track-your-costs), [팀 비용 관리](#managing-costs-for-teams), [토큰 사용량 감소](#reduce-token-usage) 방법을 다룹니다.

14 

15## 비용 추적

16 

17### `/usage` 명령 사용

18 

19<Note>

20 `/usage`의 Session 블록은 API 토큰 사용량을 표시하며 API 사용자를 위한 것입니다. Claude Max 및 Pro 구독자는 구독에 사용량이 포함되어 있으므로 세션 비용 수치는 청구 목적으로 관련이 없습니다. 구독자는 동일한 화면에서 요금제 사용량 막대 및 활동 통계를 볼 수 있습니다.

21</Note>

22 

23`/usage` 명령은 현재 세션에 대한 자세한 토큰 사용량 통계를 제공합니다. 달러 수치는 토큰 수에서 로컬로 계산된 추정치이며 실제 청구서와 다를 수 있습니다. 권위 있는 청구를 위해 [Claude Console](https://platform.claude.com/usage)의 사용량 페이지를 참조하십시오.

24 

25```text theme={null}

26Total cost: $0.55

27Total duration (API): 6m 19.7s

28Total duration (wall): 6h 33m 10.2s

29Total code changes: 0 lines added, 0 lines removed

30```

31 

32## 팀 비용 관리

33 

34Claude API를 사용할 때, 전체 Claude Code 워크스페이스 지출에 대해 [워크스페이스 지출 한도를 설정](https://platform.claude.com/docs/en/build-with-claude/workspaces#workspace-limits)할 수 있습니다. 관리자는 Console에서 [비용 및 사용량 보고서를 볼 수 있습니다](https://platform.claude.com/docs/en/build-with-claude/workspaces#usage-and-cost-tracking).

35 

36<Note>

37 Claude Code를 Claude Console 계정으로 처음 인증할 때, "Claude Code"라는 워크스페이스가 자동으로 생성됩니다. 이 워크스페이스는 조직의 모든 Claude Code 사용에 대한 중앙 집중식 비용 추적 및 관리를 제공합니다. 이 워크스페이스에 대해 API 키를 생성할 수 없습니다. 이는 Claude Code 인증 및 사용 전용입니다.

38 

39 사용자 정의 속도 제한이 있는 조직의 경우, 이 워크스페이스의 Claude Code 트래픽은 조직의 전체 API 속도 제한에 포함됩니다. Claude Console의 이 워크스페이스의 한도 페이지에서 [워크스페이스 속도 제한](https://platform.claude.com/docs/en/api/rate-limits#setting-lower-limits-for-workspaces)을 설정하여 Claude Code의 할당량을 제한하고 다른 프로덕션 워크로드를 보호할 수 있습니다.

40</Note>

41 

42Bedrock, Vertex 및 Foundry에서 Claude Code는 클라우드에서 메트릭을 전송하지 않습니다. 비용 메트릭을 얻으려면 여러 대규모 엔터프라이즈에서 [LiteLLM](/ko/llm-gateway#litellm-configuration)을 사용한다고 보고했으며, 이는 회사가 [키별 지출을 추적](https://docs.litellm.ai/docs/proxy/virtual_keys#tracking-spend)하는 데 도움이 되는 오픈소스 도구입니다. 이 프로젝트는 Anthropic과 무관하며 보안 감사를 받지 않았습니다.

43 

44### 속도 제한 권장사항

45 

46팀을 위해 Claude Code를 설정할 때, 조직 규모에 따른 다음 분당 토큰(TPM) 및 분당 요청(RPM) 사용자당 권장사항을 고려하십시오:

47 

48| 팀 규모 | 사용자당 TPM | 사용자당 RPM |

49| ----------- | --------- | --------- |

50| 1-5 사용자 | 200k-300k | 5-7 |

51| 5-20 사용자 | 100k-150k | 2.5-3.5 |

52| 20-50 사용자 | 50k-75k | 1.25-1.75 |

53| 50-100 사용자 | 25k-35k | 0.62-0.87 |

54| 100-500 사용자 | 15k-20k | 0.37-0.47 |

55| 500+ 사용자 | 10k-15k | 0.25-0.35 |

56 

57예를 들어, 200명의 사용자가 있는 경우, 각 사용자에 대해 20k TPM을 요청하거나 총 400만 TPM(200\*20,000 = 400만)을 요청할 수 있습니다.

58 

59팀 규모가 커질수록 사용자당 TPM이 감소하는 이유는 더 큰 조직에서 더 적은 수의 사용자가 Claude Code를 동시에 사용하는 경향이 있기 때문입니다. 이러한 속도 제한은 개별 사용자별이 아닌 조직 수준에서 적용되므로, 다른 사용자가 적극적으로 서비스를 사용하지 않을 때 개별 사용자는 일시적으로 계산된 할당량보다 더 많이 소비할 수 있습니다.

60 

61<Note>

62 대규모 그룹과의 라이브 교육 세션과 같이 비정상적으로 높은 동시 사용 시나리오를 예상하는 경우, 사용자당 더 높은 TPM 할당이 필요할 수 있습니다.

63</Note>

64 

65### 에이전트 팀 토큰 비용

66 

67[에이전트 팀](/ko/agent-teams)은 각각 자체 컨텍스트 윈도우를 가진 여러 Claude Code 인스턴스를 생성합니다. 토큰 사용량은 활성 팀원의 수와 각 팀원이 실행되는 시간에 따라 확장됩니다.

68 

69에이전트 팀 비용을 관리 가능하게 유지하려면:

70 

71* 팀원에게 Sonnet을 사용하십시오. 조정 작업을 위해 기능과 비용의 균형을 맞춥니다.

72* 팀을 작게 유지하십시오. 각 팀원은 자체 컨텍스트 윈도우를 실행하므로 토큰 사용량은 대략 팀 규모에 비례합니다.

73* spawn 프롬프트를 집중적으로 유지하십시오. 팀원은 CLAUDE.md, MCP servers 및 skills를 자동으로 로드하지만, spawn 프롬프트의 모든 것이 처음부터 컨텍스트에 추가됩니다.

74* 작업이 완료되면 팀을 정리하십시오. 활성 팀원은 유휴 상태에서도 계속 토큰을 소비합니다.

75* 에이전트 팀은 기본적으로 비활성화되어 있습니다. [settings.json](/ko/settings)에서 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`을 설정하거나 환경에서 설정하여 활성화하십시오. [에이전트 팀 활성화](/ko/agent-teams#enable-agent-teams)를 참조하십시오.

76 

77## 토큰 사용량 감소

78 

79토큰 비용은 컨텍스트 크기에 따라 확장됩니다. Claude가 처리하는 컨텍스트가 많을수록 더 많은 토큰을 사용합니다. Claude Code는 prompt caching(시스템 프롬프트와 같은 반복되는 콘텐츠의 비용을 줄임)과 auto-compaction(컨텍스트 한도에 접근할 때 대화 기록을 요약함)을 통해 비용을 자동으로 최적화합니다.

80 

81다음 전략은 컨텍스트를 작게 유지하고 메시지당 비용을 줄이는 데 도움이 됩니다.

82 

83### 컨텍스트를 사전에 관리하기

84 

85`/usage`를 사용하여 현재 토큰 사용량을 확인하거나, [상태 줄을 구성](/ko/statusline#context-window-usage)하여 지속적으로 표시하십시오.

86 

87* **작업 간 지우기**: 관련 없는 작업으로 전환할 때 `/clear`를 사용하여 새로 시작하십시오. 오래된 컨텍스트는 이후의 모든 메시지에서 토큰을 낭비합니다. 지우기 전에 `/rename`을 사용하여 나중에 세션을 쉽게 찾을 수 있도록 한 다음, `/resume`을 사용하여 돌아가십시오.

88* **사용자 정의 compaction 지침 추가**: `/compact Focus on code samples and API usage`는 Claude에게 요약 중에 보존할 내용을 알려줍니다.

89 

90CLAUDE.md에서 compaction 동작을 사용자 정의할 수도 있습니다:

91 

92```markdown theme={null}

93# Compact instructions

94 

95When you are using compact, please focus on test output and code changes

96```

97 

98### 올바른 모델 선택

99 

100Sonnet은 대부분의 코딩 작업을 잘 처리하며 Opus보다 비용이 적습니다. 복잡한 아키텍처 결정이나 다단계 추론을 위해 Opus를 예약하십시오. `/model`을 사용하여 세션 중간에 모델을 전환하거나, `/config`에서 기본값을 설정하십시오. 간단한 subagent 작업의 경우, [subagent 구성](/ko/sub-agents#choose-a-model)에서 `model: haiku`를 지정하십시오.

101 

102### MCP server 오버헤드 감소

103 

104MCP 도구 정의는 [기본적으로 연기됩니다](/ko/mcp#scale-with-mcp-tool-search). 따라서 Claude가 특정 도구를 사용할 때까지 도구 이름만 컨텍스트에 들어갑니다. `/context`를 실행하여 공간을 소비하는 것을 확인하십시오.

105 

106* **사용 가능한 경우 CLI 도구 선호**: `gh`, `aws`, `gcloud`, `sentry-cli`와 같은 도구는 도구별 목록을 추가하지 않기 때문에 MCP server보다 컨텍스트 효율적입니다. Claude는 CLI 명령을 직접 실행할 수 있습니다.

107* **사용하지 않는 server 비활성화**: `/mcp`를 실행하여 구성된 server를 확인하고 적극적으로 사용하지 않는 것을 비활성화하십시오.

108 

109### 타입 언어를 위한 코드 인텔리전스 플러그인 설치

110 

111[코드 인텔리전스 플러그인](/ko/discover-plugins#code-intelligence)은 Claude에게 텍스트 기반 검색 대신 정확한 기호 탐색을 제공하여 낯선 코드를 탐색할 때 불필요한 파일 읽기를 줄입니다. 단일 "정의로 이동" 호출은 grep 다음에 여러 후보 파일을 읽는 것을 대체합니다. 설치된 언어 서버는 편집 후 자동으로 타입 오류를 보고하므로 Claude는 컴파일러를 실행하지 않고도 실수를 포착합니다.

112 

113### hooks 및 skills로 처리 오프로드

114 

115사용자 정의 [hooks](/ko/hooks)는 Claude가 보기 전에 데이터를 전처리할 수 있습니다. Claude가 10,000줄 로그 파일을 읽어 오류를 찾는 대신, hook은 `ERROR`를 grep하고 일치하는 줄만 반환하여 컨텍스트를 수만 개의 토큰에서 수백 개로 줄일 수 있습니다.

116 

117[skill](/ko/skills)은 Claude에게 도메인 지식을 제공하여 탐색할 필요가 없도록 할 수 있습니다. 예를 들어, "codebase-overview" skill은 프로젝트의 아키텍처, 주요 디렉토리 및 명명 규칙을 설명할 수 있습니다. Claude가 skill을 호출하면, 구조를 이해하기 위해 여러 파일을 읽는 데 토큰을 소비하는 대신 즉시 이 컨텍스트를 얻습니다.

118 

119예를 들어, 이 PreToolUse hook은 테스트 출력을 필터링하여 실패만 표시합니다:

120 

121<Tabs>

122 <Tab title="settings.json">

123 이를 [settings.json](/ko/settings#settings-files)에 추가하여 모든 Bash 명령 전에 hook을 실행하십시오:

124 

125 ```json theme={null}

126 {

127 "hooks": {

128 "PreToolUse": [

129 {

130 "matcher": "Bash",

131 "hooks": [

132 {

133 "type": "command",

134 "command": "~/.claude/hooks/filter-test-output.sh"

135 }

136 ]

137 }

138 ]

139 }

140 }

141 ```

142 </Tab>

143 

144 <Tab title="filter-test-output.sh">

145 hook은 이 스크립트를 호출하며, 이는 명령이 테스트 러너인지 확인하고 실패만 표시하도록 수정합니다:

146 

147 ```bash theme={null}

148 #!/bin/bash

149 input=$(cat)

150 cmd=$(echo "$input" | jq -r '.tool_input.command')

151 

152 # If running tests, filter to show only failures

153 if [[ "$cmd" =~ ^(npm test|pytest|go test) ]]; then

154 filtered_cmd="$cmd 2>&1 | grep -A 5 -E '(FAIL|ERROR|error:)' | head -100"

155 echo "{\"hookSpecificOutput\":{\"hookEventName\":\"PreToolUse\",\"permissionDecision\":\"allow\",\"updatedInput\":{\"command\":\"$filtered_cmd\"}}}"

156 else

157 echo "{}"

158 fi

159 ```

160 </Tab>

161</Tabs>

162 

163### CLAUDE.md에서 skills로 지침 이동

164 

165[CLAUDE.md](/ko/memory) 파일은 세션 시작 시 컨텍스트에 로드됩니다. PR 검토 또는 데이터베이스 마이그레이션과 같은 특정 워크플로우에 대한 자세한 지침이 포함되어 있으면, 관련 없는 작업을 수행할 때도 해당 토큰이 존재합니다. [Skills](/ko/skills)는 호출될 때만 필요에 따라 로드되므로, 특화된 지침을 skills로 이동하면 기본 컨텍스트를 더 작게 유지합니다. CLAUDE.md를 필수 항목만 포함하여 약 200줄 이하로 유지하십시오.

166 

167### 확장 사고 조정

168 

169확장 사고는 기본적으로 활성화되어 있습니다. 복잡한 계획 및 추론 작업의 성능을 크게 향상시키기 때문입니다. 사고 토큰은 출력 토큰으로 청구되며, 기본 예산은 모델에 따라 수만 개의 토큰이 될 수 있습니다. 깊은 추론이 필요하지 않은 더 간단한 작업의 경우, `/effort`를 사용하거나 `/model`에서 [노력 수준](/ko/model-config#adjust-effort-level)을 낮추거나, `/config`에서 사고를 비활성화하거나, `MAX_THINKING_TOKENS=8000`으로 예산을 낮춤으로써 비용을 줄일 수 있습니다.

170 

171### 자세한 작업을 subagents에 위임

172 

173테스트 실행, 문서 가져오기 또는 로그 파일 처리는 상당한 컨텍스트를 소비할 수 있습니다. 이를 [subagents](/ko/sub-agents#isolate-high-volume-operations)에 위임하여 자세한 출력이 subagent의 컨텍스트에 유지되는 동안 요약만 주 대화로 반환되도록 하십시오.

174 

175### 에이전트 팀 비용 관리

176 

177에이전트 팀은 팀원이 plan mode에서 실행될 때 표준 세션보다 약 7배 더 많은 토큰을 사용합니다. 각 팀원은 자체 컨텍스트 윈도우를 유지하고 별도의 Claude 인스턴스로 실행되기 때문입니다. 팀 작업을 작고 자체 포함되도록 유지하여 팀원당 토큰 사용량을 제한하십시오. 자세한 내용은 [에이전트 팀](/ko/agent-teams)을 참조하십시오.

178 

179### 구체적인 프롬프트 작성

180 

181"이 코드베이스 개선"과 같은 모호한 요청은 광범위한 스캔을 트리거합니다. "auth.ts의 로그인 함수에 입력 검증 추가"와 같은 구체적인 요청은 Claude가 최소한의 파일 읽기로 효율적으로 작업하도록 합니다.

182 

183### 복잡한 작업을 효율적으로 수행

184 

185더 길거나 복잡한 작업의 경우, 이러한 습관은 잘못된 경로로 인한 낭비된 토큰을 피하는 데 도움이 됩니다:

186 

187* **복잡한 작업에 plan mode 사용**: Shift+Tab을 눌러 구현 전에 [plan mode](/ko/common-workflows#use-plan-mode-for-safe-code-analysis)에 들어가십시오. Claude는 코드베이스를 탐색하고 승인을 위한 접근 방식을 제안하여, 초기 방향이 잘못되었을 때 비용이 많이 드는 재작업을 방지합니다.

188* **조기에 방향 수정**: Claude가 잘못된 방향으로 가기 시작하면, Escape를 눌러 즉시 중지하십시오. `/rewind`를 사용하거나 Escape를 두 번 눌러 대화 및 코드를 이전 checkpoint로 복원하십시오.

189* **검증 대상 제공**: 테스트 케이스를 포함하고, 스크린샷을 붙여넣거나, 프롬프트에서 예상 출력을 정의하십시오. Claude가 자신의 작업을 검증할 수 있으면, 수정을 요청해야 하기 전에 문제를 포착합니다.

190* **증분적으로 테스트**: 한 파일을 작성하고, 테스트한 다음, 계속하십시오. 이는 문제가 저렴하게 수정될 수 있을 때 조기에 포착합니다.

191 

192## 백그라운드 토큰 사용량

193 

194Claude Code는 유휴 상태에서도 일부 백그라운드 기능에 토큰을 사용합니다:

195 

196* **대화 요약**: `claude --resume` 기능을 위해 이전 대화를 요약하는 백그라운드 작업

197* **명령 처리**: `/usage`와 같은 일부 명령은 상태를 확인하기 위해 요청을 생성할 수 있습니다

198 

199이러한 백그라운드 프로세스는 활성 상호작용 없이도 세션당 적은 양의 토큰(일반적으로 \$0.04 미만)을 소비합니다.

200 

201## Claude Code 동작 변경 이해

202 

203Claude Code는 비용 보고를 포함한 기능 작동 방식을 변경할 수 있는 정기적인 업데이트를 받습니다. `claude --version`을 실행하여 현재 버전을 확인하십시오. 특정 청구 질문의 경우, [Console 계정](https://platform.claude.com/login)을 통해 Anthropic 지원에 문의하십시오.

data-usage.md +124 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 데이터 사용

6 

7> Anthropic의 Claude 데이터 사용 정책에 대해 알아봅니다

8 

9## 데이터 정책

10 

11### 데이터 학습 정책

12 

13**소비자 사용자(Free, Pro, Max 플랜)**:

14향후 Claude 모델 개선을 위해 데이터 사용을 허용할 수 있는 선택권을 제공합니다. 이 설정이 켜져 있을 때 Free, Pro, Max 계정의 데이터를 사용하여 새로운 모델을 학습합니다(이러한 계정에서 Claude Code를 사용할 때 포함).

15 

16**상업용 사용자**: (Team 및 Enterprise 플랜, API, 타사 플랫폼, Claude Gov)는 기존 정책을 유지합니다: Anthropic은 상업 약관에 따라 Claude Code로 전송된 코드 또는 프롬프트를 사용하여 생성형 모델을 학습하지 않습니다. 단, 고객이 모델 개선을 위해 데이터를 제공하기로 선택한 경우는 예외입니다(예: [Developer Partner Program](https://support.claude.com/ko/articles/11174108-about-the-development-partner-program)).

17 

18### Development Partner Program

19 

20[Development Partner Program](https://support.claude.com/ko/articles/11174108-about-the-development-partner-program)을 통해 학습할 자료를 제공하는 방법에 명시적으로 옵트인하는 경우, 제공된 자료를 사용하여 모델을 학습할 수 있습니다. 조직 관리자는 조직에 대해 Development Partner Program에 명시적으로 옵트인할 수 있습니다. 이 프로그램은 Anthropic 자체 API에만 사용 가능하며 Bedrock 또는 Vertex 사용자는 이용할 수 없습니다.

21 

22### `/feedback` 명령을 사용한 피드백

23 

24`/feedback` 명령을 사용하여 Claude Code에 대한 피드백을 보내기로 선택한 경우, 피드백을 사용하여 제품 및 서비스를 개선할 수 있습니다. `/feedback`을 통해 공유된 대화 기록은 5년 동안 보관됩니다.

25 

26### 세션 품질 설문조사

27 

28Claude Code에서 "Claude가 이 세션을 어떻게 수행하고 있나요?"라는 메시지가 표시될 때, 이 설문조사에 응답하면("Dismiss" 선택 포함) 숫자 등급만 기록됩니다. 이 설문조사의 일부로 대화 기록, 입력, 출력 또는 기타 세션 데이터를 수집하거나 저장하지 않습니다. 엄지손가락 위/아래 피드백이나 `/feedback` 보고서와 달리, 이 세션 품질 설문조사는 간단한 제품 만족도 지표입니다.

29 

30등급 메시지 이후에 "Anthropic이 세션 기록을 확인하여 Claude Code를 개선하는 데 도움을 줄 수 있나요?"라는 별도의 후속 질문이 표시될 수 있습니다. 이는 등급과 구별되는 선택적 두 번째 단계입니다:

31 

32* **예**: 대화 기록, 모든 서브에이전트 기록, 디스크의 원본 세션 로그 파일을 Anthropic에 업로드합니다. 알려진 API 키 및 토큰 패턴은 업로드 전에 제거됩니다. 소스 코드, 파일 내용 및 기타 대화 내용은 그대로 업로드됩니다. 공유된 기록은 최대 6개월 동안 보관됩니다.

33* **아니오**: 아무것도 보내지 않고 거절합니다.

34* **다시 묻지 않기**: 거절하고 향후 세션에서 이 후속 질문이 표시되지 않도록 합니다.

35 

36**예**를 명시적으로 선택하지 않으면 아무것도 업로드되지 않습니다. [Zero data retention](/ko/zero-data-retention)이 있는 조직이거나 조직 정책에 의해 제품 피드백이 비활성화된 조직은 이 후속 질문을 볼 수 없습니다. 등급 메시지 이후 제출된 세션 기록을 포함한 이 설문조사에 대한 응답은 데이터 학습 선호도에 영향을 주지 않으며 AI 모델을 학습하는 데 사용될 수 없습니다.

37 

38이러한 설문조사를 비활성화하려면 `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1`을 설정합니다. `DISABLE_TELEMETRY` 또는 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`이 설정되면 설문조사도 비활성화됩니다. 빈도를 제어하려면 설정 파일에서 [`feedbackSurveyRate`](/ko/settings#available-settings)를 `0`과 `1` 사이의 확률로 설정합니다.

39 

40### 데이터 보관

41 

42Anthropic은 계정 유형 및 선호도에 따라 Claude Code 데이터를 보관합니다.

43 

44**소비자 사용자(Free, Pro, Max 플랜)**:

45 

46* 모델 개선을 위한 데이터 사용을 허용하는 사용자: 모델 개발 및 안전 개선을 지원하기 위한 5년 보관 기간

47* 모델 개선을 위한 데이터 사용을 허용하지 않는 사용자: 30일 보관 기간

48* 개인정보 보호 설정은 [claude.ai/settings/data-privacy-controls](https://claude.ai/settings/data-privacy-controls)에서 언제든지 변경할 수 있습니다.

49 

50**상업용 사용자(Team, Enterprise, API)**:

51 

52* 표준: 30일 보관 기간

53* [Zero data retention](/ko/zero-data-retention): Claude for Enterprise의 Claude Code에서 사용 가능합니다. ZDR은 조직별로 활성화되며, 각 새로운 조직은 계정 팀에서 별도로 ZDR을 활성화해야 합니다.

54* 로컬 캐싱: Claude Code 클라이언트는 세션 재개를 활성화하기 위해 `~/.claude/projects/` 아래의 일반 텍스트로 세션 기록을 로컬에 저장합니다(기본값 30일). `cleanupPeriodDays`로 기간을 조정합니다. 저장되는 내용 및 삭제 방법은 [application data](/ko/claude-directory#application-data)를 참조하세요.

55 

56웹에서 개별 Claude Code 세션을 언제든지 삭제할 수 있습니다. 세션을 삭제하면 세션의 이벤트 데이터가 영구적으로 제거됩니다. 세션 삭제 방법에 대한 지침은 [Delete sessions](/ko/claude-code-on-the-web#delete-sessions)를 참조하세요.

57 

58[Privacy Center](https://privacy.anthropic.com/)에서 데이터 보관 관행에 대해 자세히 알아보세요.

59 

60전체 세부 사항은 [Commercial Terms of Service](https://www.anthropic.com/legal/commercial-terms)(Team, Enterprise, API 사용자용) 또는 [Consumer Terms](https://www.anthropic.com/legal/consumer-terms)(Free, Pro, Max 사용자용) 및 [Privacy Policy](https://www.anthropic.com/legal/privacy)를 검토하세요.

61 

62## 데이터 액세스

63 

64모든 자체 플랫폼 사용자의 경우, [로컬 Claude Code](#local-claude-code-data-flow-and-dependencies) 및 [원격 Claude Code](#cloud-execution-data-flow-and-dependencies)에 대해 기록되는 데이터에 대해 자세히 알아볼 수 있습니다. [Remote Control](/ko/remote-control) 세션은 모든 실행이 사용자의 머신에서 발생하므로 로컬 데이터 흐름을 따릅니다. 원격 Claude Code의 경우 Claude는 Claude Code 세션을 시작한 저장소에 액세스합니다. Claude는 연결했지만 세션을 시작하지 않은 저장소에는 액세스하지 않습니다.

65 

66## 로컬 Claude Code: 데이터 흐름 및 종속성

67 

68아래 다이어그램은 설치 및 정상 작동 중에 Claude Code가 외부 서비스에 어떻게 연결되는지 보여줍니다. 실선은 필수 연결을 나타내고, 점선은 선택적 또는 사용자가 시작한 데이터 흐름을 나타냅니다.

69 

70<img src="https://mintcdn.com/claude-code/YcBW2H7CArGcduPb/images/claude-code-data-flow.svg?fit=max&auto=format&n=YcBW2H7CArGcduPb&q=85&s=b600a89f84fc86f9ff7be00a466c0635" alt="Claude Code의 외부 연결을 보여주는 다이어그램: 설치/업데이트는 배포 서버에 연결되고, 사용자 요청은 Console auth, public-api, 그리고 선택적으로 Statsig, Sentry, 버그 보고를 포함한 Anthropic 서비스에 연결됩니다" width="720" height="520" data-path="images/claude-code-data-flow.svg" />

71 

72Claude Code는 로컬에서 실행됩니다. LLM과 상호작용하기 위해 Claude Code는 네트워크를 통해 데이터를 전송합니다. 이 데이터에는 모든 사용자 프롬프트 및 모델 출력이 포함되며, TLS 1.2+ 이상을 통해 전송 중에 암호화됩니다. Claude Code는 대부분의 인기 있는 VPN 및 LLM 프록시와 호환됩니다.

73 

74저장 시 암호화는 모델 제공자에 따라 달라집니다:

75 

76| 제공자 | 저장 시 암호화 |

77| ---------------------- | ------------------------------------------------------------------------------------------------- |

78| Anthropic API | 인프라 수준 디스크 암호화(AES-256). [Zero Data Retention](/ko/zero-data-retention)을 활성화하여 서버 측 지속성이 없도록 합니다. |

79| Amazon Bedrock | AWS 관리 키를 사용한 AES-256. AWS KMS를 통해 고객 관리 키를 사용할 수 있습니다. |

80| Google Cloud Vertex AI | Google 관리 암호화 키. CMEK를 사용할 수 있습니다. |

81| Microsoft Foundry | 요청은 AES-256 디스크 암호화를 사용하는 Anthropic 인프라로 라우팅됩니다. |

82 

83Claude Code는 Anthropic의 API를 기반으로 구축되었습니다. API 로깅 절차를 포함한 API 보안 제어에 대한 자세한 내용은 [Anthropic Trust Center](https://trust.anthropic.com)의 규정 준수 아티팩트를 참조하세요.

84 

85### 클라우드 실행: 데이터 흐름 및 종속성

86 

87[Claude Code on the web](/ko/claude-code-on-the-web)을 사용할 때, 세션은 로컬이 아닌 Anthropic 관리 가상 머신에서 실행됩니다. 클라우드 환경에서:

88 

89* **코드 및 데이터 저장소:** 저장소가 격리된 VM으로 복제됩니다. 코드 및 세션 데이터는 계정 유형에 대한 보관 및 사용 정책의 적용을 받습니다(위의 데이터 보관 섹션 참조).

90* **자격 증명:** GitHub 인증은 보안 프록시를 통해 처리되며, GitHub 자격 증명은 샌드박스에 절대 입력되지 않습니다.

91* **네트워크 트래픽:** 모든 아웃바운드 트래픽은 감사 로깅 및 악용 방지를 위해 보안 프록시를 통해 이동합니다.

92* **세션 데이터:** 프롬프트, 코드 변경 및 출력은 로컬 Claude Code 사용과 동일한 데이터 정책을 따릅니다.

93 

94클라우드 실행의 보안 세부 사항은 [Security](/ko/security#cloud-execution-security)를 참조하세요.

95 

96## 원격 측정 서비스

97 

98Claude Code는 사용자의 머신에서 Statsig 서비스에 연결하여 지연 시간, 안정성 및 사용 패턴과 같은 운영 메트릭을 기록합니다. 이 로깅에는 코드 또는 파일 경로가 포함되지 않습니다. 데이터는 TLS를 사용하여 전송 중에 암호화되고 256비트 AES 암호화를 사용하여 저장 시에 암호화됩니다. [Statsig 보안 문서](https://www.statsig.com/trust/security)에서 자세히 알아보세요. Statsig 원격 측정을 거부하려면 `DISABLE_TELEMETRY` 환경 변수를 설정합니다.

99 

100Claude Code는 사용자의 머신에서 Sentry에 연결하여 운영 오류 로깅을 수행합니다. 데이터는 TLS를 사용하여 전송 중에 암호화되고 256비트 AES 암호화를 사용하여 저장 시에 암호화됩니다. [Sentry 보안 문서](https://sentry.io/security/)에서 자세히 알아보세요. 오류 로깅을 거부하려면 `DISABLE_ERROR_REPORTING` 환경 변수를 설정합니다.

101 

102사용자가 `/feedback` 명령을 실행하면 코드를 포함한 전체 대화 기록의 복사본이 Anthropic으로 전송됩니다. 데이터는 전송 중 TLS를 통해 암호화됩니다. 선택적으로 공개 저장소에 GitHub 이슈가 생성됩니다. 거부하려면 `DISABLE_FEEDBACK_COMMAND` 환경 변수를 `1`로 설정합니다.

103 

104## API 제공자별 기본 동작

105 

106기본적으로 Bedrock, Vertex 또는 Foundry를 사용할 때 오류 보고, 원격 측정 및 버그 보고가 비활성화됩니다. 세션 품질 설문조사 및 WebFetch 도메인 안전 검사는 예외이며 제공자와 관계없이 실행됩니다. `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`을 설정하여 설문조사를 포함한 모든 필수가 아닌 트래픽을 한 번에 거부할 수 있습니다. 이 변수는 WebFetch 검사에 영향을 주지 않으며, WebFetch 검사는 자체 거부 옵션이 있습니다. 다음은 전체 기본 동작입니다:

107 

108| 서비스 | Claude API | Vertex API | Bedrock API | Foundry API |

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

110| **Statsig (메트릭)** | 기본 켜짐.<br />`DISABLE_TELEMETRY=1`로 비활성화합니다. | 기본 꺼짐.<br />`CLAUDE_CODE_USE_VERTEX`는 1이어야 합니다. | 기본 꺼짐.<br />`CLAUDE_CODE_USE_BEDROCK`은 1이어야 합니다. | 기본 꺼짐.<br />`CLAUDE_CODE_USE_FOUNDRY`는 1이어야 합니다. |

111| **Sentry (오류)** | 기본 켜짐.<br />`DISABLE_ERROR_REPORTING=1`로 비활성화합니다. | 기본 꺼짐.<br />`CLAUDE_CODE_USE_VERTEX`는 1이어야 합니다. | 기본 꺼짐.<br />`CLAUDE_CODE_USE_BEDROCK`은 1이어야 합니다. | 기본 꺼짐.<br />`CLAUDE_CODE_USE_FOUNDRY`는 1이어야 합니다. |

112| **Claude API (`/feedback` 보고)** | 기본 켜짐.<br />`DISABLE_FEEDBACK_COMMAND=1`로 비활성화합니다. | 기본 꺼짐.<br />`CLAUDE_CODE_USE_VERTEX`는 1이어야 합니다. | 기본 꺼짐.<br />`CLAUDE_CODE_USE_BEDROCK`은 1이어야 합니다. | 기본 꺼짐.<br />`CLAUDE_CODE_USE_FOUNDRY`는 1이어야 합니다. |

113| **세션 품질 설문조사** | 기본 켜짐.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1`로 비활성화합니다. | 기본 켜짐.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1`로 비활성화합니다. | 기본 켜짐.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1`로 비활성화합니다. | 기본 켜짐.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1`로 비활성화합니다. |

114| **WebFetch 도메인 안전 검사** | 기본 켜짐.<br />[settings](/ko/settings)에서 `skipWebFetchPreflight: true`로 비활성화합니다. | 기본 켜짐.<br />[settings](/ko/settings)에서 `skipWebFetchPreflight: true`로 비활성화합니다. | 기본 켜짐.<br />[settings](/ko/settings)에서 `skipWebFetchPreflight: true`로 비활성화합니다. | 기본 켜짐.<br />[settings](/ko/settings)에서 `skipWebFetchPreflight: true`로 비활성화합니다. |

115 

116모든 환경 변수는 `settings.json`에 체크인할 수 있습니다([settings reference](/ko/settings) 참조).

117 

118v2.1.126부터 호스트 플랫폼이 `CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`를 설정하면, Statsig 메트릭은 Vertex, Bedrock 및 Foundry에서 기본적으로 켜지며 표준 `DISABLE_TELEMETRY` 거부 옵션을 따릅니다. Sentry 오류 보고 및 `/feedback` 보고는 해당 제공자에서 기본적으로 꺼진 상태로 유지됩니다.

119 

120### WebFetch 도메인 안전 검사

121 

122URL을 가져오기 전에 WebFetch 도구는 요청된 호스트명을 `api.anthropic.com`으로 전송하여 Anthropic에서 유지 관리하는 안전 차단 목록에 대해 확인합니다. 전체 URL, 경로 또는 페이지 내용이 아닌 호스트명만 전송됩니다. 결과는 호스트명당 5분 동안 캐시됩니다.

123 

124이 검사는 사용하는 모델 제공자와 관계없이 실행되며 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`의 영향을 받지 않습니다. 네트워크가 `api.anthropic.com`을 차단하는 경우, WebFetch 요청은 도메인을 허용 목록에 추가하거나 [settings](/ko/settings)에서 `skipWebFetchPreflight: true`를 설정할 때까지 실패합니다. 검사를 비활성화하면 WebFetch가 차단 목록을 참조하지 않고 모든 URL을 검색하려고 시도하므로, Claude가 도달할 수 있는 도메인을 제한해야 하는 경우 [`WebFetch` permission rules](/ko/permissions#webfetch)와 함께 사용합니다.

debug-your-config.md +97 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 구성 디버깅하기

6 

7> CLAUDE.md, 설정, 훅, MCP 서버 또는 스킬이 적용되지 않는 이유를 진단합니다. /context, /doctor, /hooks, /mcp를 사용하여 실제로 로드된 항목을 확인합니다.

8 

9Claude가 명령을 무시하거나 구성한 기능이 나타나지 않을 때, 원인은 보통 파일이 로드되지 않았거나, 예상과 다른 위치에서 로드되었거나, 다른 파일이 이를 재정의했기 때문입니다. 이 가이드는 Claude Code가 실제로 로드한 항목을 검사하여 어느 경우에 해당하는지 좁혀나가는 방법을 보여줍니다.

10 

11설치, 인증 및 연결 문제의 경우 대신 [문제 해결](/ko/troubleshoot-install)을 참조하십시오.

12 

13## 컨텍스트에 로드된 항목 확인

14 

15`/context` 명령은 현재 세션의 컨텍스트 윈도우를 차지하는 모든 항목을 시스템 프롬프트, 메모리 파일, 스킬, MCP 도구 및 대화 메시지로 분류하여 표시합니다. 먼저 이를 실행하여 `CLAUDE.md`, 규칙 또는 스킬 설명이 실제로 존재하는지 확인합니다.

16 

17특정 카테고리에 대한 세부 정보는 전용 명령으로 팔로우업합니다:

18 

19| 명령 | 표시 내용 |

20| :------------- | :--------------------------------- |

21| `/memory` | 로드된 `CLAUDE.md` 및 규칙 파일, 자동 메모리 항목 |

22| `/skills` | 프로젝트, 사용자 및 플러그인 소스의 사용 가능한 스킬 |

23| `/agents` | 구성된 서브에이전트 및 해당 설정 |

24| `/hooks` | 활성 훅 구성 |

25| `/mcp` | 연결된 MCP 서버 및 해당 상태 |

26| `/permissions` | 현재 적용 중인 허용 및 거부 규칙 |

27| `/doctor` | 구성 진단: 잘못된 키, 스키마 오류, 설치 상태 |

28| `/status` | 활성 설정 소스, 관리 설정이 적용 중인지 여부 포함 |

29 

30메모리 파일이 `/memory`에서 누락된 경우, [CLAUDE.md 파일이 로드되는 방식](/ko/memory#how-claude-md-files-load)에 대해 해당 위치를 확인합니다. 하위 디렉토리 `CLAUDE.md` 파일은 Claude가 Read 도구로 해당 디렉토리의 파일을 읽을 때 요청 시 로드되며, 세션 시작 시가 아닙니다.

31 

32`/memory`가 파일이 로드되었음을 확인했지만 Claude가 여전히 특정 명령을 따르지 않는 경우, 문제는 파일이 로드되었는지 여부가 아니라 명령이 작성된 방식일 가능성이 높습니다. CLAUDE.md는 새로운 팀원에게 제공할 지침(예: 프로젝트 규칙, 빌드 명령 및 파일 위치)에 적합합니다.

33 

34명령이 여러 방식으로 해석될 수 있을 정도로 모호할 때, 두 파일이 상충하는 지시를 제공할 때, 또는 파일이 충분히 길어서 개별 규칙이 덜 주목받을 때 준수가 감소합니다. [효과적인 명령 작성](/ko/memory#write-effective-instructions)은 준수를 높게 유지하는 특이성, 크기 및 구조 패턴을 다룹니다.

35 

36<Note>

37 CLAUDE.md와 권한은 서로 다른 문제를 해결합니다. CLAUDE.md는 Claude에게 프로젝트가 어떻게 작동하는지 알려주어 좋은 결정을 내리도록 합니다. [권한](/ko/permissions) 및 [훅](/ko/hooks)은 Claude가 무엇을 결정하든 제한을 강제합니다. CLAUDE.md는 "우리는 여기서 이렇게 합니다"에 사용합니다. 권한 또는 훅은 보안 경계 및 절대 발생해서는 안 되는 모든 것에 사용하며, 지침 대신 보장이 필요합니다.

38</Note>

39 

40## 해결된 설정 확인

41 

42설정은 관리, 사용자, 프로젝트 및 로컬 범위에 걸쳐 병합됩니다. 관리 설정은 존재할 때 항상 우선합니다. 나머지 중에서는 더 가까운 범위가 로컬, 프로젝트, 사용자 순서로 더 넓은 범위를 재정의합니다. 일부 설정은 또한 명령줄 플래그 또는 [환경 변수](/ko/env-vars)로 설정할 수 있으며, 이는 또 다른 재정의 계층으로 작동합니다. 설정이 적용되지 않는 것처럼 보일 때, 설정한 값은 보통 다른 범위 또는 환경 변수에 의해 재정의되고 있습니다.

43 

44`/doctor`를 실행하여 구성 파일을 검증하고 잘못된 키 또는 스키마 오류를 표시합니다. `/status`를 실행하여 관리 설정이 적용 중인지 여부를 포함하여 활성 설정 소스를 확인합니다. 주어진 키에 대해 어느 범위가 우선하는지 이해하려면 [범위가 상호작용하는 방식](/ko/settings#how-scopes-interact)을 참조합니다.

45 

46## MCP 서버 확인

47 

48`/mcp`를 실행하여 모든 구성된 서버, 해당 연결 상태 및 현재 프로젝트에 대해 승인했는지 여부를 확인합니다. 서버가 올바르게 정의되었지만 여전히 몇 가지 일반적인 이유로 도구를 제공하지 않을 수 있습니다:

49 

50* `.mcp.json`의 프로젝트 범위 서버는 일회성 승인이 필요합니다. 프롬프트가 해제된 경우, 서버는 `/mcp`에서 승인할 때까지 비활성화된 상태로 유지됩니다.

51* 시작에 실패한 서버는 `/mcp`에서 실패로 표시됩니다. `command` 또는 `args`의 상대 파일 경로는 `.mcp.json`의 위치가 아니라 Claude Code를 시작한 디렉토리에 대해 해석되므로 빈번한 원인입니다.

52* 연결된 것으로 표시되지만 도구가 0개인 서버는 성공적으로 시작되었지만 도구 목록을 반환하지 않습니다. `/mcp`에서 **다시 연결**을 선택합니다. 개수가 0으로 유지되면 `claude --debug mcp`를 실행하여 서버의 stderr 출력을 확인합니다.

53 

54구성 위치 및 범위 규칙은 [MCP](/ko/mcp)를 참조합니다.

55 

56## 훅 확인

57 

58`/hooks`를 실행하여 현재 세션에 등록된 모든 훅을 이벤트별로 그룹화하여 나열합니다. 정의한 훅이 나타나지 않으면 읽혀지지 않는 것입니다: 훅은 독립 실행형 파일이 아니라 설정 파일의 `"hooks"` 키 아래에 있습니다.

59 

60훅이 나타나지만 실행되지 않으면, 매처가 보통 원인입니다. `matcher` 필드는 여러 도구 이름을 일치시키기 위해 `|`를 사용하는 단일 문자열입니다(예: `"Edit|Write"`). 잘못된 도구 이름은 매처가 일치하지 않기 때문에 자동으로 실패합니다. 배열 값은 스키마 오류입니다: Claude Code는 설정 오류 알림을 표시하고, `/doctor`는 검증 실패를 보고하며, 훅 항목은 `/hooks`에 나타나지 않도록 삭제됩니다.

61 

62`settings.json`에 대한 편집은 짧은 파일 안정성 지연 후 실행 중인 세션에서 적용됩니다. 다시 시작할 필요가 없습니다. 저장 후 몇 초가 지났는데도 `/hooks`가 여전히 이전 정의를 표시하면 `/hooks`를 다시 실행하여 보기를 새로 고칩니다.

63 

64`/hooks`가 훅을 표시하지만 여전히 실행되지 않으면, 다음 단계는 훅 평가를 실시간으로 감시하는 것입니다. `claude --debug hooks`로 세션을 시작하고 도구 호출을 트리거합니다. 디버그 로그는 각 이벤트, 확인된 매처 및 훅의 종료 코드와 출력을 기록합니다. 로그 형식은 [훅 디버깅](/ko/hooks#debug-hooks)을 참조하고 일반적인 실패 패턴은 [훅 문제 해결](/ko/hooks-guide#limitations-and-troubleshooting)을 참조합니다.

65 

66## 일반적인 원인

67 

68대부분의 구성 놀라움은 작은 위치 및 구문 규칙 집합으로 추적됩니다. 버그라고 가정하기 전에 다음을 확인합니다:

69 

70| 증상 | 원인 | 해결 |

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

72| 훅이 절대 실행되지 않음 | `matcher`가 문자열 대신 JSON 배열입니다 | 여러 도구를 일치시키기 위해 `\|`를 사용하는 단일 문자열을 사용합니다(예: `"Edit\|Write"`). [매처 패턴](/ko/hooks#matcher-patterns)을 참조합니다. |

73| 훅이 절대 실행되지 않음 | `matcher` 값이 소문자입니다(예: `"bash"`) | 일치는 대소문자를 구분합니다. 도구 이름은 대문자입니다: `Bash`, `Edit`, `Write`, `Read`. |

74| 훅이 절대 실행되지 않음 | 훅이 독립 실행형 `.claude/hooks.json` 파일에 있습니다 | 독립 실행형 훅 파일이 없습니다. `settings.json`의 `"hooks"` 키 아래에 훅을 정의합니다. [훅 구성](/ko/hooks)을 참조합니다. |

75| 전역으로 설정된 권한, 훅 또는 env가 무시됩니다 | 구성이 `~/.claude.json`에 추가되었습니다 | `~/.claude.json`은 앱 상태 및 UI 토글을 보유합니다. `permissions`, `hooks` 및 `env`는 `~/.claude/settings.json`에 속합니다. 이는 두 개의 다른 파일입니다. |

76| `settings.json` 값이 무시되는 것처럼 보입니다 | 동일한 키가 `settings.local.json`에 설정되어 있습니다 | `settings.local.json`은 `settings.json`을 재정의하고, 둘 다 `~/.claude/settings.json`을 재정의합니다. [설정 우선순위](/ko/settings#how-scopes-interact)를 참조합니다. |

77| 스킬이 `/skills`에 나타나지 않습니다 | 스킬 파일이 폴더 대신 `.claude/skills/name.md`에 있습니다 | 내부에 `SKILL.md`가 있는 폴더를 사용합니다: `.claude/skills/name/SKILL.md`. |

78| 스킬이 `/skills`에 나타나지만 Claude가 절대 호출하지 않습니다 | 스킬의 프론트매터에 `disable-model-invocation: true`가 있거나, 해당 설명이 요청을 표현하는 방식과 일치하지 않습니다 | `/skills`의 배지를 확인합니다: "user-only" 레이블은 Claude가 자동으로 트리거하지 않음을 의미합니다. [스킬 호출](/ko/skills)을 참조합니다. |

79| 하위 디렉토리 `CLAUDE.md` 명령이 무시되는 것처럼 보입니다 | 하위 디렉토리 파일은 세션 시작 시가 아니라 요청 시 로드됩니다 | Claude가 Read 도구로 해당 디렉토리의 파일을 읽을 때 로드되며, 시작 시가 아니고 파일을 작성하거나 생성할 때도 아닙니다. [CLAUDE.md 파일이 로드되는 방식](/ko/memory#how-claude-md-files-load)을 참조합니다. |

80| 서브에이전트가 `CLAUDE.md` 명령을 무시합니다 | 서브에이전트는 항상 프로젝트 메모리를 상속하지 않습니다 | 중요한 규칙을 에이전트 파일 본문에 넣습니다. 이는 서브에이전트의 시스템 프롬프트가 됩니다. [서브에이전트 구성](/ko/sub-agents)을 참조합니다. |

81| 정리 로직이 세션 종료 시 절대 실행되지 않습니다 | `SessionEnd` 훅이 구성되지 않았습니다 | `settings.json`에 `SessionEnd` 훅을 추가합니다. [훅 이벤트 목록](/ko/hooks#hook-events)을 참조합니다. |

82| `.mcp.json`의 MCP 서버가 절대 로드되지 않습니다 | 파일이 `.claude/` 아래에 있거나 Claude Desktop의 구성 형식을 사용합니다 | 프로젝트 MCP 구성은 `.claude/` 내부가 아니라 저장소 루트에 `.mcp.json`으로 이동합니다. [MCP 구성](/ko/mcp)을 참조합니다. |

83| 프로젝트 MCP 서버가 추가되었지만 나타나지 않습니다 | 일회성 승인 프롬프트가 해제되었습니다 | 프로젝트 범위 서버는 승인이 필요합니다. `/mcp`를 실행하여 상태를 확인하고 승인합니다. |

84| MCP 서버가 일부 디렉토리에서 시작하지 못합니다 | `command` 또는 `args`가 상대 파일 경로를 사용합니다 | 로컬 스크립트에 절대 경로를 사용합니다. `npx` 또는 `uvx`와 같은 `PATH`의 실행 파일은 그대로 작동합니다. |

85| MCP 서버가 예상 환경 변수 없이 시작됩니다 | 변수가 `settings.json` `env`에 있으며, MCP 자식 프로세스로 전파되지 않습니다 | 대신 `.mcp.json` 내부에 서버별 `env`를 설정합니다. |

86| `Bash(rm *)` 거부 규칙이 `/bin/rm` 또는 `find -delete`를 차단하지 않습니다 | 접두사 규칙은 기본 실행 파일이 아니라 리터럴 명령 문자열과 일치합니다 | 각 변형에 대해 명시적 패턴을 추가하거나, [PreToolUse 훅](/ko/hooks-guide) 또는 [샌드박스](/ko/sandboxing)를 사용하여 하드 보장을 얻습니다. |

87 

88## 관련 리소스

89 

90각 구성 표면에 대한 전체 참조는 전용 페이지를 참조합니다:

91 

92* **[`.claude` 디렉토리 참조](/ko/claude-directory)**: 모든 구성 파일 위치 및 읽는 항목

93* **[설정](/ko/settings)**: 우선순위 순서 및 전체 키 목록

94* **[훅 참조](/ko/hooks)**: 이벤트 이름, 페이로드 및 `--debug hooks` 출력 형식

95* **[MCP](/ko/mcp)**: 서버 구성, 승인 및 `/mcp` 출력

96* **[설치 및 로그인 문제 해결](/ko/troubleshoot-install)**: `command not found`, PATH 및 인증 문제

97* **[문제 해결](/ko/troubleshooting)**: 성능, 응답 중단 및 검색 문제

desktop.md +767 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Claude Code Desktop 사용하기

6 

7> Claude Code Desktop을 더 활용하기: Git 격리를 통한 병렬 세션, 드래그 앤 드롭 패널 레이아웃, 통합 터미널 및 파일 편집기, 사이드 채팅, 컴퓨터 사용, 휴대폰에서 Dispatch 세션 전송, 시각적 diff 검토, 앱 미리보기, PR 모니터링, 커넥터, 엔터프라이즈 구성.

8 

9Claude Desktop 앱에는 세 개의 탭이 있습니다: 대화를 위한 **Chat**, [Dispatch 및 더 긴 에이전트 작업](https://claude.com/product/cowork)을 위한 **Cowork**, 소프트웨어 개발을 위한 **Code**입니다. 이 페이지는 Code 탭에 대한 참고 자료입니다.

10 

11<CardGroup cols={2}>

12 <Card title="Download for macOS" icon="apple" href="https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code&utm_medium=docs">

13 Universal build for Intel and Apple Silicon

14 </Card>

15 

16 <Card title="Download for Windows" icon="windows" href="https://claude.ai/api/desktop/win32/x64/setup/latest/redirect?utm_source=claude_code&utm_medium=docs">

17 For x64 processors

18 </Card>

19</CardGroup>

20 

21For Windows ARM64, download the [ARM64 installer](https://claude.ai/api/desktop/win32/arm64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs). The desktop app is not available on Linux; use the [CLI](/en/quickstart) instead.

22 

23설치 후 Claude를 실행하고, 로그인한 다음 **Code** 탭을 클릭합니다. Windows에서 처음 열 때는 [Git for Windows](https://git-scm.com/downloads/win)가 설치되어 있어야 하며, 설치 후 앱을 다시 시작합니다. 첫 번째 세션의 전체 안내는 [시작하기 가이드](/ko/desktop-quickstart)를 참조하세요.

24 

25Code 탭에서 각 대화는 **세션**입니다: 자신의 채팅 기록, 프로젝트 폴더, 코드 변경 사항을 가지고 있으며, 다른 세션과는 독립적입니다. 사이드바에는 세션이 나열되어 있으며 여러 세션을 병렬로 실행할 수 있습니다. 세션 내에서 다음을 수행할 수 있습니다:

26 

27* [diff를 검토하고 댓글 달기](#review-changes-with-diff-view), 그 다음 [CI를 통해 결과 PR 모니터링](#monitor-pull-request-status)

28* [실행 중인 앱 미리보기](#preview-your-app) (Claude가 자신의 변경 사항을 확인하는 동안 내장 브라우저에서)

29* [패널 정렬](#arrange-your-workspace) (채팅, diff, 미리보기, 터미널, 파일 편집기를 나란히 배치)

30* [세션을 벗어나지 않고 부가 질문 하기](#ask-a-side-question-without-derailing-the-session) (세션의 컨텍스트를 사용하되 벗어나지 않음)

31* [외부 도구 연결](#connect-external-tools) (GitHub, Slack, Linear 등)

32* Claude가 [앱을 열고 화면을 제어](#let-claude-use-your-computer)하도록 허용

33* 머신에서, [클라우드](#run-long-running-tasks-remotely)에서, 또는 [SSH](#ssh-sessions)를 통해 실행

34 

35[예약된 반복 작업](/ko/desktop-scheduled-tasks), [키보드 단축키](#keyboard-shortcuts), 또는 [휴대폰에서 작업 전송](#sessions-from-dispatch)에 대해서는 연결된 페이지 및 섹션을 참조하세요. 이미 터미널 기반 CLI를 사용 중이라면, [CLI 비교](#coming-from-the-cli)에서 어떤 것이 이월되는지 확인하세요.

36 

37## 세션 시작하기

38 

39첫 번째 메시지를 보내기 전에 프롬프트 영역에서 네 가지를 구성하세요:

40 

41* **환경**: Claude가 실행되는 위치를 선택합니다. 자신의 머신의 경우 **Local**, Anthropic 호스팅 클라우드 세션의 경우 **Remote**, 관리하는 원격 머신의 경우 [**SSH 연결**](#ssh-sessions)을 선택합니다. [환경 구성](#environment-configuration)을 참조하세요.

42* **프로젝트 폴더**: Claude가 작업할 폴더 또는 저장소를 선택합니다. 원격 세션의 경우 [여러 저장소](#run-long-running-tasks-remotely)를 추가할 수 있습니다.

43* **모델**: 전송 버튼 옆의 드롭다운에서 [모델](/ko/model-config#available-models)을 선택합니다. 세션 중에 이를 변경할 수 있습니다.

44* **권한 모드**: [모드 선택기](#choose-a-permission-mode)에서 Claude가 가질 자율성을 선택합니다. 세션 중에 이를 변경할 수 있습니다.

45 

46작업을 입력하고 **Enter**를 눌러 시작합니다. 각 세션은 자신의 컨텍스트와 변경 사항을 독립적으로 추적합니다.

47 

48## 코드 작업하기

49 

50Claude에게 올바른 컨텍스트를 제공하고, 자동으로 수행할 작업의 양을 제어하고, 변경 사항을 검토합니다.

51 

52### 프롬프트 상자 사용하기

53 

54Claude가 수행할 작업을 입력하고 **Enter**를 눌러 보냅니다. Claude는 프로젝트 파일을 읽고, 변경 사항을 만들고, [권한 모드](#choose-a-permission-mode)에 따라 명령을 실행합니다. 언제든지 Claude를 중단할 수 있습니다: 중지 버튼을 클릭하거나 수정 사항을 입력하고 **Enter**를 누릅니다. Claude는 작업을 중지하고 입력에 따라 조정합니다.

55 

56프롬프트 상자 옆의 **+** 버튼을 클릭하면 파일 첨부, [skills](#use-skills), [커넥터](#connect-external-tools), [플러그인](#install-plugins)에 액세스할 수 있습니다.

57 

58### 프롬프트에 파일 및 컨텍스트 추가하기

59 

60프롬프트 상자는 외부 컨텍스트를 가져오는 두 가지 방법을 지원합니다:

61 

62* **@mention 파일**: `@` 다음에 파일 이름을 입력하여 파일을 대화 컨텍스트에 추가합니다. Claude는 그 파일을 읽고 참조할 수 있습니다. @mention은 원격 세션에서 사용할 수 없습니다.

63* **파일 첨부**: 첨부 버튼을 사용하여 이미지, PDF 및 기타 파일을 프롬프트에 첨부하거나, 파일을 프롬프트에 직접 드래그 앤 드롭합니다. 이는 버그 스크린샷, 디자인 목업 또는 참고 문서를 공유하는 데 유용합니다.

64 

65### 권한 모드 선택하기

66 

67권한 모드는 세션 중에 Claude가 가질 자율성을 제어합니다: 파일 편집, 명령 실행 또는 둘 다 전에 묻는지 여부입니다. 전송 버튼 옆의 모드 선택기를 사용하여 언제든지 모드를 전환할 수 있습니다. Claude가 수행하는 작업을 정확히 보기 위해 권한 요청으로 시작한 다음, 편하면 자동 수락 편집 또는 Plan mode로 이동합니다.

68 

69| 모드 | 설정 키 | 동작 |

70| ------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

71| **권한 요청** | `default` | Claude는 파일을 편집하거나 명령을 실행하기 전에 요청합니다. diff를 보고 각 변경 사항을 수락하거나 거부할 수 있습니다. 새 사용자에게 권장됩니다. |

72| **자동 수락 편집** | `acceptEdits` | Claude는 파일 편집을 자동으로 수락하고 `mkdir`, `touch`, `mv`와 같은 일반적인 파일시스템 명령을 자동으로 수락하지만 다른 터미널 명령 실행 전에는 여전히 요청합니다. 파일 변경을 신뢰하고 더 빠른 반복을 원할 때 사용합니다. |

73| **Plan mode** | `plan` | Claude는 파일을 읽고 명령을 실행하여 탐색한 다음 소스 코드를 편집하지 않고 계획을 제안합니다. 먼저 접근 방식을 검토하려는 복잡한 작업에 좋습니다. |

74| **Auto** | `auto` | Claude는 요청과의 정렬을 확인하는 백그라운드 안전 검사를 통해 모든 작업을 실행합니다. 감시를 유지하면서 권한 프롬프트를 줄입니다. Settings → Claude Code에서 활성화합니다. [가용성 요구 사항](#auto-mode-availability)을 아래에서 참조하세요. |

75| **권한 무시** | `bypassPermissions` | Claude는 권한 프롬프트 없이 실행되며, CLI의 `--dangerously-skip-permissions`와 동일합니다. Settings → Claude Code의 "권한 무시 모드 허용"에서 활성화합니다. 샌드박스 컨테이너 또는 VM에서만 사용합니다. 엔터프라이즈 관리자는 이 옵션을 비활성화할 수 있습니다. |

76 

77`dontAsk` 권한 모드는 [CLI](/ko/permission-modes#allow-only-pre-approved-tools-with-dontask-mode)에서만 사용 가능합니다.

78 

79<span id="auto-mode-availability" />

80 

81Auto mode는 Max, Team, Enterprise, API 계획에서 사용 가능한 연구 미리보기입니다. Pro 계획 또는 타사 공급자에서는 사용할 수 없습니다. Team, Enterprise, API 계획에서는 Claude Sonnet 4.6, Opus 4.6, Opus 4.7이 필요합니다. Max 계획에서는 Claude Opus 4.7이 필요합니다.

82 

83<Tip title="모범 사례">

84 복잡한 작업을 Plan mode에서 시작하여 Claude가 변경하기 전에 접근 방식을 매핑하도록 합니다. 계획을 승인한 후 자동 수락 편집 또는 권한 요청으로 전환하여 실행합니다. 이 워크플로우에 대한 자세한 내용은 [먼저 탐색, 그 다음 계획, 그 다음 코드](/ko/best-practices#explore-first-then-plan-then-code)를 참조하세요.

85</Tip>

86 

87원격 세션은 자동 수락 편집 및 Plan mode를 지원합니다. 권한 요청은 원격 세션이 기본적으로 파일 편집을 자동으로 수락하기 때문에 사용할 수 없으며, 권한 무시는 원격 환경이 이미 샌드박스되어 있기 때문에 사용할 수 없습니다.

88 

89엔터프라이즈 관리자는 사용 가능한 권한 모드를 제한할 수 있습니다. 자세한 내용은 [엔터프라이즈 구성](#enterprise-configuration)을 참조하세요.

90 

91### 앱 미리보기

92 

93Claude는 개발 서버를 시작하고 임베드된 브라우저를 열어 변경 사항을 확인할 수 있습니다. 이는 프론트엔드 웹 앱뿐만 아니라 백엔드 서버에도 작동합니다: Claude는 API 엔드포인트를 테스트하고, 서버 로그를 보고, 발견한 문제를 반복할 수 있습니다. 대부분의 경우 Claude는 프로젝트 파일을 편집한 후 자동으로 서버를 시작합니다. 언제든지 Claude에게 미리보기를 요청할 수도 있습니다. 기본적으로 Claude는 모든 편집 후 [자동으로 변경 사항을 확인](#auto-verify-changes)합니다.

94 

95미리보기 패널은 프로젝트의 정적 HTML 파일, PDF, 이미지 및 비디오도 열 수 있습니다. 채팅에서 HTML, PDF, 이미지 또는 비디오 경로를 클릭하여 미리보기에서 엽니다.

96 

97미리보기 패널에서 다음을 수행할 수 있습니다:

98 

99* 임베드된 브라우저에서 실행 중인 앱과 직접 상호작용

100* Claude가 자동으로 자신의 변경 사항을 확인하는 것을 봅니다: 스크린샷을 찍고, DOM을 검사하고, 요소를 클릭하고, 양식을 채우고, 발견한 문제를 수정합니다

101* 세션 도구 모음의 **Preview** 드롭다운에서 서버 시작 또는 중지

102* **Persist sessions**을 드롭다운에서 선택하여 서버 재시작 시 쿠키 및 로컬 스토리지를 유지하므로 개발 중에 다시 로그인할 필요가 없습니다

103* 서버 구성을 편집하거나 모든 서버를 한 번에 중지

104 

105Claude는 프로젝트를 기반으로 초기 서버 구성을 만듭니다. 앱이 사용자 정의 개발 명령을 사용하는 경우 `.claude/launch.json`을 편집하여 설정과 일치시킵니다. 전체 참조는 [미리보기 서버 구성](#configure-preview-servers)을 참조하세요.

106 

107저장된 세션 데이터를 지우려면 Settings → Claude Code에서 **Persist preview sessions**을 토글 해제합니다. 미리보기를 완전히 비활성화하려면 Settings → Claude Code에서 **Preview**를 토글 해제합니다.

108 

109### diff 보기로 변경 사항 검토하기

110 

111Claude가 코드를 변경한 후 diff 보기를 사용하면 pull request를 만들기 전에 파일별로 수정 사항을 검토할 수 있습니다.

112 

113Claude가 파일을 변경하면 `+12 -1`과 같이 추가 및 제거된 줄 수를 표시하는 diff 통계 표시기가 나타납니다. 이 표시기를 클릭하여 diff 뷰어를 열면 왼쪽에 파일 목록이 표시되고 오른쪽에 각 파일의 변경 사항이 표시됩니다.

114 

115특정 줄에 댓글을 달려면 diff의 모든 줄을 클릭하여 댓글 상자를 엽니다. 피드백을 입력하고 **Enter**를 눌러 댓글을 추가합니다. 여러 줄에 댓글을 추가한 후 모든 댓글을 한 번에 제출합니다:

116 

117* **macOS**: **Cmd+Enter** 누르기

118* **Windows**: **Ctrl+Enter** 누르기

119 

120Claude는 댓글을 읽고 요청된 변경 사항을 만들며, 이는 검토할 수 있는 새로운 diff로 나타납니다.

121 

122### 코드 검토하기

123 

124diff 보기에서 오른쪽 상단 도구 모음의 **Review code**를 클릭하여 Claude에게 커밋하기 전에 변경 사항을 평가하도록 요청합니다. Claude는 현재 diff를 검토하고 diff 보기에 직접 댓글을 남깁니다. 모든 댓글에 응답하거나 Claude에게 수정을 요청할 수 있습니다.

125 

126검토는 높은 신호 문제에 중점을 둡니다: 컴파일 오류, 명확한 논리 오류, 보안 취약점, 명백한 버그입니다. 스타일, 형식, 기존 문제 또는 linter가 포착할 수 있는 것은 플래그하지 않습니다.

127 

128### pull request 상태 모니터링하기

129 

130pull request를 연 후 CI 상태 표시줄이 세션에 나타납니다. Claude Code는 GitHub CLI를 사용하여 확인 결과를 폴링하고 실패를 표시합니다.

131 

132* **자동 수정**: 활성화되면 Claude는 실패 출력을 읽고 반복하여 실패한 CI 확인을 자동으로 수정하려고 시도합니다.

133* **자동 병합**: 활성화되면 모든 확인이 통과하면 Claude가 PR을 병합합니다. 병합 방법은 squash입니다. 자동 병합은 이 작업을 수행하기 위해 [GitHub 저장소 설정에서 활성화](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-auto-merge-for-pull-requests-in-your-repository)되어야 합니다.

134 

135CI 상태 표시줄의 **Auto-fix** 및 **Auto-merge** 토글을 사용하여 옵션을 활성화합니다. Claude Code는 CI가 완료되면 데스크톱 알림도 보냅니다. 세션이 PR을 병합하거나 닫은 후 자동으로 아카이브되도록 하려면 Settings → Claude Code에서 [auto-archive](#work-in-parallel-with-sessions)를 켭니다.

136 

137<Note>

138 PR 모니터링에는 [GitHub CLI (`gh`)](https://cli.github.com/)가 머신에 설치되고 인증되어야 합니다. `gh`가 설치되지 않은 경우 Desktop은 처음으로 PR을 만들려고 할 때 설치하도록 요청합니다.

139</Note>

140 

141## 워크스페이스 정렬하기

142 

143Code 탭은 모든 레이아웃으로 정렬할 수 있는 패널을 중심으로 구축되어 있습니다: 채팅, diff, 미리보기, 터미널, 파일, 계획, 작업, 서브에이전트. 패널을 헤더로 드래그하여 위치를 변경하거나 패널 가장자리를 드래그하여 크기를 조정합니다. macOS에서 \*\*Cmd+\\\*\*를 누르거나 Windows에서 \*\*Ctrl+\\\*\*를 눌러 포커스된 패널을 닫습니다. 세션 도구 모음의 **Views** 메뉴에서 추가 패널을 엽니다.

144 

145<Note>

146 이 섹션의 패널 레이아웃, 터미널, 파일 편집기, 보기 모드는 Claude Desktop v1.2581.0 이상이 필요합니다. macOS에서 **Claude → Check for Updates**를 열거나 Windows에서 **Help → Check for Updates**를 열어 업데이트합니다.

147</Note>

148 

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

150 

151통합 터미널을 사용하면 다른 앱으로 전환하지 않고 세션과 함께 명령을 실행할 수 있습니다. **Views** 메뉴에서 열거나 macOS 또는 Windows에서 \*\*Ctrl+\`\*\*를 누릅니다. 터미널은 세션의 작업 디렉토리에서 열리고 Claude와 동일한 환경을 공유하므로 `npm test` 또는 `git status`와 같은 명령은 Claude가 편집하는 것과 동일한 파일을 봅니다. 터미널은 로컬 세션에서만 사용 가능합니다.

152 

153### 파일 열기 및 편집하기

154 

155채팅 또는 diff 뷰어의 파일 경로를 클릭하여 파일 패널에서 엽니다. HTML, PDF, 이미지, 비디오 경로는 대신 [미리보기 패널](#preview-your-app)에서 열립니다. 스팟 편집을 하고 **Save**를 클릭하여 다시 작성합니다. 파일이 열린 이후 디스크에서 변경되었으면 패널이 경고하고 재정의하거나 버립니다. **Discard**를 클릭하여 편집을 되돌리거나 패널 헤더의 경로를 클릭하여 절대 경로를 복사합니다.

156 

157파일 패널은 로컬 및 SSH 세션에서 사용 가능합니다. 원격 세션의 경우 Claude에게 변경을 요청합니다.

158 

159### 다른 앱에서 파일 열기

160 

161채팅, diff 뷰어 또는 파일 패널의 모든 파일 경로를 마우스 오른쪽 버튼으로 클릭하여 컨텍스트 메뉴를 엽니다:

162 

163* **Attach as context**: 파일을 다음 프롬프트에 추가

164* **Open in**: VS Code, Cursor, Zed와 같은 설치된 편집기에서 파일 열기

165* **Show in Finder** (macOS), **Show in Explorer** (Windows): 포함된 폴더 열기

166* **Copy path**: 절대 경로를 클립보드에 복사

167 

168### 보기 모드 전환하기

169 

170보기 모드는 채팅 기록에 나타나는 세부 정보의 양을 제어합니다. 전송 버튼 옆의 **Transcript view** 드롭다운에서 모드를 전환하거나 macOS 또는 Windows에서 **Ctrl+O**를 눌러 모드를 순환합니다.

171 

172| 모드 | 표시되는 것 |

173| ----------- | ----------------------------------- |

174| **Normal** | 도구 호출이 요약으로 축소되고 전체 텍스트 응답 |

175| **Verbose** | 모든 도구 호출, 파일 읽기, Claude가 수행하는 중간 단계 |

176| **Summary** | Claude의 최종 응답과 변경 사항만 |

177 

178Claude가 특정 작업을 수행한 이유를 디버깅할 때 Verbose를 사용합니다. 여러 세션을 실행하고 결과를 빠르게 스캔하려고 할 때 Summary를 사용합니다.

179 

180### 키보드 단축키

181 

182macOS에서 \*\*Cmd+/\*\*를 누르거나 Windows에서 \*\*Ctrl+/\*\*를 눌러 Code 탭에서 사용 가능한 모든 단축키를 봅니다. Windows에서는 아래 단축키에 대해 **Cmd** 대신 **Ctrl**을 사용합니다. 세션 순환, 터미널 토글, 보기 모드 토글은 모든 플랫폼에서 **Ctrl**을 사용합니다.

183 

184| 단축키 | 작업 |

185| ------------------------------------- | ------------- |

186| `Cmd` `/` | 키보드 단축키 표시 |

187| `Cmd` `N` | 새 세션 |

188| `Cmd` `W` | 세션 닫기 |

189| `Ctrl` `Tab` / `Ctrl` `Shift` `Tab` | 다음 또는 이전 세션 |

190| `Cmd` `Shift` `]` / `Cmd` `Shift` `[` | 다음 또는 이전 세션 |

191| `Esc` | Claude의 응답 중지 |

192| `Cmd` `Shift` `D` | diff 패널 토글 |

193| `Cmd` `Shift` `P` | 미리보기 패널 토글 |

194| `Cmd` `Shift` `S` | 미리보기에서 요소 선택 |

195| `Ctrl` `` ` `` | 터미널 패널 토글 |

196| `Cmd` `\` | 포커스된 패널 닫기 |

197| `Cmd` `;` | 사이드 채팅 열기 |

198| `Ctrl` `O` | 보기 모드 순환 |

199| `Cmd` `Shift` `M` | 권한 모드 메뉴 열기 |

200| `Cmd` `Shift` `I` | 모델 메뉴 열기 |

201| `Cmd` `Shift` `E` | 노력 메뉴 열기 |

202| `1`–`9` | 열린 메뉴에서 항목 선택 |

203 

204이러한 단축키는 Code 탭에만 적용됩니다. 터미널 기반 [대화형 모드 단축키](/ko/interactive-mode#keyboard-shortcuts) (예: 모드를 순환하는 Shift+Tab)는 Desktop에 적용되지 않습니다.

205 

206### 사용량 확인하기

207 

208모델 선택기 옆의 사용량 링을 클릭하여 현재 컨텍스트 윈도우 사용량과 기간에 대한 계획 사용량을 봅니다. 컨텍스트 사용량은 세션별입니다. 계획 사용량은 모든 Claude Code 표면에서 공유됩니다.

209 

210## Claude가 컴퓨터를 사용하도록 하기

211 

212컴퓨터 사용을 통해 Claude는 앱을 열고, 화면을 제어하고, 사용자가 하는 방식으로 머신에서 직접 작업할 수 있습니다. Claude에게 모바일 시뮬레이터에서 네이티브 앱을 테스트하거나, CLI가 없는 데스크톱 도구와 상호작용하거나, GUI를 통해서만 작동하는 것을 자동화하도록 요청합니다.

213 

214<Note>

215 컴퓨터 사용은 Pro 또는 Max 계획이 필요한 macOS 및 Windows의 연구 미리보기입니다. Team 또는 Enterprise 계획에서는 사용할 수 없습니다. Claude Desktop 앱이 실행 중이어야 합니다.

216</Note>

217 

218컴퓨터 사용은 기본적으로 꺼져 있습니다. [Settings에서 활성화](#enable-computer-use)하기 전에 Claude가 화면을 제어할 수 있습니다. macOS에서는 Accessibility 및 Screen Recording 권한도 부여해야 합니다.

219 

220<Warning>

221 [샌드박스 Bash 도구](/ko/sandboxing)와 달리 컴퓨터 사용은 승인한 모든 것에 액세스할 수 있는 실제 데스크톱에서 실행됩니다. Claude는 각 작업을 확인하고 화면 콘텐츠에서 잠재적 프롬프트 주입을 플래그하지만 신뢰 경계가 다릅니다. 모범 사례는 [컴퓨터 사용 안전 가이드](https://support.claude.com/en/articles/14128542)를 참조하세요.

222</Warning>

223 

224### 컴퓨터 사용이 적용되는 경우

225 

226Claude는 앱 또는 서비스와 상호작용하는 여러 방법을 가지고 있으며 컴퓨터 사용이 가장 광범위하고 느립니다. 가장 정확한 도구를 먼저 시도합니다:

227 

228* 서비스에 대한 [커넥터](#connect-external-tools)가 있으면 Claude는 커넥터를 사용합니다.

229* 작업이 셸 명령이면 Claude는 Bash를 사용합니다.

230* 작업이 브라우저 작업이고 [Claude in Chrome](/ko/chrome)이 설정되어 있으면 Claude는 그것을 사용합니다.

231* 위의 어느 것도 적용되지 않으면 Claude는 컴퓨터 사용을 사용합니다.

232 

233[앱별 액세스 계층](#app-permissions)은 이를 강화합니다: 브라우저는 보기 전용으로 제한되고, 터미널 및 IDE는 클릭 전용으로 제한되어 컴퓨터 사용이 활성화되어 있어도 Claude를 전용 도구로 유도합니다. 화면 제어는 네이티브 앱, 하드웨어 제어판, 모바일 시뮬레이터 또는 API가 없는 독점 도구와 같이 다른 것이 도달할 수 없는 것을 위해 예약되어 있습니다.

234 

235### 컴퓨터 사용 활성화하기

236 

237컴퓨터 사용은 기본적으로 꺼져 있습니다. Claude가 필요한 작업을 하도록 요청하는데 꺼져 있으면 Claude는 Settings에서 컴퓨터 사용을 활성화하면 작업을 수행할 수 있다고 알려줍니다.

238 

239<Steps>

240 <Step title="데스크톱 앱 업데이트">

241 최신 버전의 Claude Desktop이 있는지 확인합니다. [claude.com/download](https://claude.com/download)에서 다운로드하거나 업데이트한 다음 앱을 다시 시작합니다.

242 </Step>

243 

244 <Step title="토글 켜기">

245 데스크톱 앱에서 **Settings > General** (**Desktop app** 아래)로 이동합니다. **Computer use** 토글을 찾아 켭니다. Windows에서는 토글이 즉시 적용되고 설정이 완료됩니다. macOS에서는 다음 단계로 계속합니다.

246 

247 토글이 보이지 않으면 macOS 또는 Windows에서 Pro 또는 Max 계획을 사용하고 있는지 확인한 다음 업데이트하고 앱을 다시 시작합니다.

248 </Step>

249 

250 <Step title="macOS 권한 부여">

251 macOS에서는 토글이 적용되기 전에 두 가지 시스템 권한을 부여합니다:

252 

253 * **Accessibility**: Claude가 클릭, 입력, 스크롤할 수 있게 합니다

254 * **Screen Recording**: Claude가 화면에 있는 것을 볼 수 있게 합니다

255 

256 Settings 페이지는 각 권한의 현재 상태를 표시합니다. 둘 중 하나가 거부되면 배지를 클릭하여 관련 System Settings 창을 엽니다.

257 </Step>

258</Steps>

259 

260### 앱 권한

261 

262Claude가 처음 앱을 사용해야 할 때 세션에 프롬프트가 나타납니다. **Allow for this session** 또는 **Deny**를 클릭합니다. 승인은 현재 세션 또는 [Dispatch 생성 세션](#sessions-from-dispatch)에서 30분 동안 지속됩니다.

263 

264프롬프트는 또한 Claude가 해당 앱에 대해 얻는 제어 수준을 표시합니다. 이러한 계층은 앱 카테고리별로 고정되며 변경할 수 없습니다:

265 

266| 계층 | Claude가 할 수 있는 것 | 적용 대상 |

267| :---- | :------------------------------ | :----------- |

268| 보기 전용 | 스크린샷에서 앱 보기 | 브라우저, 거래 플랫폼 |

269| 클릭 전용 | 클릭 및 스크롤하지만 입력 또는 키보드 단축키 사용 불가 | 터미널, IDE |

270| 전체 제어 | 클릭, 입력, 드래그, 키보드 단축키 사용 | 기타 모든 것 |

271 

272Terminal, Finder 또는 File Explorer, System Settings 또는 Settings와 같이 광범위한 영향을 미치는 앱은 승인이 부여하는 것을 알 수 있도록 프롬프트에 추가 경고를 표시합니다.

273 

274**Settings > General** (**Desktop app** 아래)에서 두 가지 설정을 구성할 수 있습니다:

275 

276* **Denied apps**: 프롬프트 없이 거부하려면 여기에 앱을 추가합니다. Claude는 허용된 앱의 작업을 통해 거부된 앱에 간접적으로 영향을 미칠 수 있지만 거부된 앱과 직접 상호작용할 수 없습니다.

277* **Unhide apps when Claude finishes**: Claude가 작업하는 동안 다른 창이 숨겨져 승인된 앱하고만 상호작용합니다. Claude가 완료되면 이 설정을 끄지 않는 한 숨겨진 창이 복원됩니다.

278 

279## 세션 관리하기

280 

281각 세션은 자신의 컨텍스트와 변경 사항을 가진 독립적인 대화입니다. 여러 세션을 병렬로 실행하거나, 사이드 채팅을 분기하거나, 작업을 클라우드로 보내거나, Dispatch가 휴대폰에서 세션을 시작하도록 할 수 있습니다.

282 

283### 세션으로 병렬 작업하기

284 

285사이드바에서 **+ New session**을 클릭하거나 macOS에서 **Cmd+N**을 누르거나 Windows에서 **Ctrl+N**을 눌러 여러 작업을 병렬로 작업합니다. **Ctrl+Tab** 및 **Ctrl+Shift+Tab**을 눌러 사이드바의 세션을 순환합니다. Git 저장소의 경우 각 세션은 [Git worktrees](/ko/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees)를 사용하여 프로젝트의 자신의 격리된 복사본을 가져오므로 한 세션의 변경 사항이 커밋할 때까지 다른 세션에 영향을 주지 않습니다.

286 

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

288 

289gitignored 파일 (예: `.env`)을 새 worktrees에 포함하려면 프로젝트 루트에 [`.worktreeinclude` 파일](/ko/common-workflows#copy-gitignored-files-to-worktrees)을 만듭니다.

290 

291<Note>

292 세션 격리에는 [Git](https://git-scm.com/downloads)이 필요합니다. 대부분의 Mac에는 기본적으로 Git이 포함되어 있습니다. Terminal에서 `git --version`을 실행하여 확인합니다. Windows에서는 Code 탭이 작동하려면 Git이 필요합니다: [Windows용 Git 다운로드](https://git-scm.com/downloads/win), 설치 및 앱 재시작. Git 오류가 발생하면 [Cowork 탭](https://claude.com/product/cowork)에서 Claude에게 설정을 문제 해결하도록 요청하세요.

293</Note>

294 

295사이드바 상단의 컨트롤을 사용하여 상태, 프로젝트 또는 환경별로 세션을 필터링하고 프로젝트별로 세션을 그룹화합니다. 세션 이름을 바꾸려면 활성 세션 상단의 도구 모음에서 세션 제목을 클릭합니다. 컨텍스트 사용량을 확인하려면 [사용량 확인](#check-usage)을 참조하세요. 컨텍스트가 가득 차면 Claude는 자동으로 대화를 요약하고 계속 작업합니다. `/compact`를 입력하여 요약을 더 일찍 트리거하고 컨텍스트 공간을 확보할 수도 있습니다. [컨텍스트 윈도우](/ko/how-claude-code-works#the-context-window)에서 압축이 작동하는 방식에 대한 자세한 내용을 참조하세요.

296 

297### 세션을 벗어나지 않고 옆 질문 하기

298 

299사이드 채팅을 사용하면 세션의 컨텍스트를 사용하지만 메인 대화에 아무것도 추가하지 않고 Claude에게 질문할 수 있습니다. 코드 조각을 이해하거나, 가정을 확인하거나, 세션을 벗어나지 않고 아이디어를 탐색하려고 할 때 사용합니다.

300 

301macOS에서 \*\*Cmd+;\*\*를 누르거나 Windows에서 \*\*Ctrl+;\*\*를 누르거나 프롬프트 상자에 `/btw`를 입력하여 사이드 채팅을 엽니다. 사이드 채팅은 그 지점까지 메인 스레드의 모든 것을 읽을 수 있습니다. 완료되면 사이드 채팅을 닫고 중단한 곳에서 메인 세션을 계속합니다. 사이드 채팅은 로컬 및 SSH 세션에서 사용 가능합니다.

302 

303### 백그라운드 작업 보기

304 

305작업 패널은 현재 세션 내에서 실행 중인 백그라운드 작업을 표시합니다: 서브에이전트, 백그라운드 셸 명령, 워크플로우. **Views** 메뉴에서 열거나 레이아웃으로 드래그합니다.

306 

307모든 항목을 클릭하여 서브에이전트 패널에서 출력을 보거나 중지합니다. 다른 세션이 수행하는 작업을 보려면 [사이드바](#work-in-parallel-with-sessions)를 사용합니다.

308 

309### 원격으로 장기 실행 작업 실행하기

310 

311대규모 리팩토링, 테스트 스위트, 마이그레이션 또는 기타 장기 실행 작업의 경우 세션을 시작할 때 **Local** 대신 **Remote**를 선택합니다. 원격 세션은 Anthropic의 클라우드 인프라에서 실행되며 앱을 닫거나 컴퓨터를 종료해도 계속됩니다. 언제든지 돌아와서 진행 상황을 보거나 Claude를 다른 방향으로 조종할 수 있습니다. [claude.ai/code](https://claude.ai/code)에서 또는 Claude iOS 앱에서 원격 세션을 모니터링할 수도 있습니다.

312 

313원격 세션은 또한 여러 저장소를 지원합니다. 클라우드 환경을 선택한 후 저장소 pill 옆의 **+** 버튼을 클릭하여 세션에 추가 저장소를 추가합니다. 각 저장소는 자신의 브랜치 선택기를 가집니다. 이는 공유 라이브러리와 그 소비자를 업데이트하는 것과 같이 여러 코드베이스에 걸친 작업에 유용합니다.

314 

315원격 세션이 작동하는 방식에 대한 자세한 내용은 [웹의 Claude Code](/ko/claude-code-on-the-web)를 참조하세요.

316 

317### 다른 표면에서 계속하기

318 

319세션 도구 모음의 오른쪽 아래에 있는 VS Code 아이콘에서 액세스할 수 있는 **Continue in** 메뉴를 사용하면 세션을 다른 표면으로 이동할 수 있습니다:

320 

321* **Claude Code on the Web**: 로컬 세션을 원격으로 계속 실행하도록 보냅니다. Desktop은 브랜치를 푸시하고, 대화 요약을 생성하고, 전체 컨텍스트를 사용하여 새 원격 세션을 만듭니다. 그 후 로컬 세션을 아카이브하거나 유지하도록 선택할 수 있습니다. 이는 깨끗한 작업 트리가 필요하며 SSH 세션에는 사용할 수 없습니다.

322* **Your IDE**: 현재 작업 디렉토리에서 지원되는 IDE에서 프로젝트를 엽니다.

323 

324### Dispatch에서 세션

325 

326[Dispatch](https://support.claude.com/en/articles/13947068)는 [Cowork](https://claude.com/product/cowork#dispatch-and-computer-use) 탭에 있는 Claude와의 지속적인 대화입니다. Dispatch에 작업을 메시지하면 처리 방법을 결정합니다.

327 

328작업은 두 가지 방법으로 Code 세션이 될 수 있습니다: 직접 요청하는 경우 (예: "Claude Code 세션을 열고 로그인 버그를 수정하세요") 또는 Dispatch가 작업이 개발 작업이라고 결정하고 자동으로 하나를 생성하는 경우입니다. 일반적으로 Code로 라우팅되는 작업에는 버그 수정, 종속성 업데이트, 테스트 실행 또는 pull request 열기가 포함됩니다. 연구, 문서 편집, 스프레드시트 작업은 Cowork에 남아 있습니다.

329 

330어느 쪽이든 Code 세션은 **Dispatch** 배지가 있는 Code 탭의 사이드바에 나타납니다. 완료되거나 승인이 필요할 때 휴대폰에서 푸시 알림을 받습니다.

331 

332[컴퓨터 사용](#let-claude-use-your-computer)이 활성화되어 있으면 Dispatch 생성 Code 세션도 사용할 수 있습니다. 이러한 세션의 앱 승인은 30분 후 만료되고 다시 프롬프트하며, 일반 Code 세션처럼 전체 세션 동안 지속되지 않습니다.

333 

334설정, 페어링, Dispatch 설정은 [Dispatch 도움말 문서](https://support.claude.com/en/articles/13947068)를 참조하세요. Dispatch는 Pro 또는 Max 계획이 필요하며 Team 또는 Enterprise 계획에서는 사용할 수 없습니다.

335 

336Dispatch는 터미널에서 멀리 떨어져 있을 때 Claude와 작업하는 여러 방법 중 하나입니다. [플랫폼 및 통합](/ko/platforms#work-when-you-are-away-from-your-terminal)을 참조하여 Remote Control, Channels, Slack, 예약된 작업과 비교하세요.

337 

338***

339 

340title: "Claude Code 확장하기"

341description: "외부 서비스를 연결하고, 재사용 가능한 워크플로우를 추가하고, Claude의 동작을 사용자 정의하고, 미리보기 서버를 구성합니다."

342---------------------------------------------------------------------------------------

343 

344## Claude Code 확장하기

345 

346외부 서비스를 연결하고, 재사용 가능한 워크플로우를 추가하고, Claude의 동작을 사용자 정의하고, 미리보기 서버를 구성합니다. 한 곳에서 커넥터, skills, 플러그인을 관리하려면 사이드바에서 **Customize**를 클릭합니다.

347 

348### 외부 도구 연결하기

349 

350로컬 및 [SSH](#ssh-sessions) 세션의 경우 프롬프트 상자 옆의 **+** 버튼을 클릭하고 **Connectors**를 선택하여 Google Calendar, Slack, GitHub, Linear, Notion 등과 같은 통합을 추가합니다. 세션 전이나 중에 커넥터를 추가할 수 있습니다. **+** 버튼은 원격 세션에서 사용할 수 없지만 [루틴](/ko/routines)은 루틴 생성 시 커넥터를 구성합니다.

351 

352커넥터를 관리하거나 연결을 해제하려면 데스크톱 앱의 Settings → Connectors로 이동하거나 프롬프트 상자의 Connectors 메뉴에서 **Manage connectors**를 선택합니다.

353 

354연결되면 Claude는 캘린더를 읽고, 메시지를 보내고, 문제를 만들고, 도구와 직접 상호작용할 수 있습니다. Claude에게 세션에 구성된 커넥터가 무엇인지 물어볼 수 있습니다.

355 

356커넥터는 그래픽 설정 흐름이 있는 [MCP servers](/ko/mcp)입니다. 지원되는 서비스와의 빠른 통합을 위해 사용합니다. Connectors에 나열되지 않은 통합의 경우 [설정 파일](/ko/mcp#installing-mcp-servers)을 통해 MCP 서버를 수동으로 추가합니다. [사용자 정의 커넥터를 만들](https://support.claude.com/en/articles/11175166-getting-started-with-custom-connectors-using-remote-mcp) 수도 있습니다.

357 

358### skills 사용하기

359 

360[Skills](/ko/skills)는 Claude가 할 수 있는 것을 확장합니다. Claude는 관련이 있을 때 자동으로 로드하거나 직접 호출할 수 있습니다: 프롬프트 상자에서 `/`를 입력하거나 **+** 버튼을 클릭하고 **Slash commands**를 선택하여 사용 가능한 것을 찾아봅니다. 여기에는 [내장 명령](/ko/commands), [사용자 정의 skills](/ko/skills#create-your-first-skill), 코드베이스의 프로젝트 skills, [설치된 플러그인](/ko/plugins)의 skills가 포함됩니다. 하나를 선택하면 입력 필드에 강조 표시됩니다. 그 후 작업을 입력하고 평소대로 보냅니다.

361 

362### 플러그인 설치하기

363 

364[Plugins](/ko/plugins)는 Claude Code에 skills, agents, hooks, MCP servers, LSP 구성을 추가하는 재사용 가능한 패키지입니다. 터미널을 사용하지 않고 데스크톱 앱에서 플러그인을 설치할 수 있습니다.

365 

366로컬 및 [SSH](#ssh-sessions) 세션의 경우 프롬프트 상자 옆의 **+** 버튼을 클릭하고 **Plugins**를 선택하여 설치된 플러그인과 해당 skills를 봅니다. 플러그인을 추가하려면 서브메뉴에서 **Add plugin**을 선택하여 플러그인 브라우저를 열면 공식 Anthropic marketplace를 포함한 구성된 [marketplaces](/ko/plugin-marketplaces)의 사용 가능한 플러그인이 표시됩니다. **Manage plugins**를 선택하여 플러그인을 활성화, 비활성화 또는 제거합니다.

367 

368플러그인은 사용자 계정, 특정 프로젝트 또는 로컬 전용으로 범위를 지정할 수 있습니다. 조직이 플러그인을 중앙에서 관리하는 경우 해당 플러그인은 CLI에서와 동일한 방식으로 데스크톱 세션에서 사용 가능합니다. 플러그인은 원격 세션에는 사용할 수 없습니다. 자신의 플러그인을 만드는 것을 포함한 전체 플러그인 참조는 [plugins](/ko/plugins)를 참조하세요.

369 

370### 미리보기 서버 구성하기

371 

372Claude는 개발 서버 설정을 자동으로 감지하고 세션을 시작할 때 선택한 폴더의 루트에 있는 `.claude/launch.json`에 구성을 저장합니다. Preview는 이 폴더를 작업 디렉토리로 사용하므로 부모 폴더를 선택한 경우 자신의 개발 서버가 있는 하위 폴더는 자동으로 감지되지 않습니다. 하위 폴더의 서버로 작업하려면 해당 폴더에서 직접 세션을 시작하거나 구성을 수동으로 추가합니다.

373 

374예를 들어 `npm run dev` 대신 `yarn dev`를 사용하거나 포트를 변경하도록 서버가 시작되는 방식을 사용자 정의하려면 파일을 수동으로 편집하거나 Preview 드롭다운에서 **Edit configuration**을 클릭하여 코드 편집기에서 엽니다. 파일은 주석이 있는 JSON을 지원합니다.

375 

376```json theme={null}

377{

378 "version": "0.0.1",

379 "configurations": [

380 {

381 "name": "my-app",

382 "runtimeExecutable": "npm",

383 "runtimeArgs": ["run", "dev"],

384 "port": 3000

385 }

386 ]

387}

388```

389 

390동일한 프로젝트에서 프론트엔드 및 API와 같은 다양한 서버를 실행하도록 여러 구성을 정의할 수 있습니다. 아래의 [예제](#examples)를 참조하세요.

391 

392#### 자동 변경 사항 확인

393 

394`autoVerify`가 활성화되면 Claude는 파일을 편집한 후 자동으로 코드 변경 사항을 확인합니다. 스크린샷을 찍고, 오류를 확인하고, 응답을 완료하기 전에 변경 사항이 작동하는지 확인합니다.

395 

396자동 확인은 기본적으로 켜져 있습니다. `.claude/launch.json`에 `"autoVerify": false`를 추가하여 프로젝트별로 비활성화하거나 **Preview** 드롭다운 메뉴에서 토글합니다.

397 

398```json theme={null}

399{

400 "version": "0.0.1",

401 "autoVerify": false,

402 "configurations": [...]

403}

404```

405 

406비활성화되면 미리보기 도구는 여전히 사용 가능하며 언제든지 Claude에게 확인을 요청할 수 있습니다. 자동 확인은 모든 편집 후 자동으로 만듭니다.

407 

408#### 구성 필드

409 

410`configurations` 배열의 각 항목은 다음 필드를 허용합니다:

411 

412| 필드 | 유형 | 설명 |

413| ------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------- |

414| `name` | string | 이 서버의 고유 식별자 |

415| `runtimeExecutable` | string | 실행할 명령 (예: `npm`, `yarn`, `node`) |

416| `runtimeArgs` | string\[] | `runtimeExecutable`에 전달되는 인수 (예: `["run", "dev"]`) |

417| `port` | number | 서버가 수신하는 포트. 기본값은 3000 |

418| `cwd` | string | 프로젝트 루트에 상대적인 작업 디렉토리. 기본값은 프로젝트 루트입니다. 프로젝트 루트를 명시적으로 참조하려면 `${workspaceFolder}`를 사용합니다 |

419| `env` | object | `{ "NODE_ENV": "development" }`와 같은 키-값 쌍으로 추가 환경 변수. 이 파일이 저장소에 커밋되므로 여기에 비밀을 넣지 마세요. 비밀을 개발 서버에 전달하려면 [로컬 환경 편집기](#local-sessions)에서 설정합니다. |

420| `autoPort` | boolean | 포트 충돌을 처리하는 방법. 아래를 참조하세요 |

421| `program` | string | `node`로 실행할 스크립트. [언제 `program` vs `runtimeExecutable`을 사용할지](#when-to-use-program-vs-runtimeexecutable) 참조 |

422| `args` | string\[] | `program`에 전달되는 인수. `program`이 설정된 경우에만 사용됨 |

423 

424##### `program` vs `runtimeExecutable` 사용 시기

425 

426패키지 관리자를 통해 개발 서버를 시작하려면 `runtimeExecutable`을 `runtimeArgs`와 함께 사용합니다. 예를 들어 `"runtimeExecutable": "npm"`과 `"runtimeArgs": ["run", "dev"]`는 `npm run dev`를 실행합니다.

427 

428`node`로 직접 실행하려는 독립 실행형 스크립트가 있을 때 `program`을 사용합니다. 예를 들어 `"program": "server.js"`는 `node server.js`를 실행합니다. `args`로 추가 플래그를 전달합니다.

429 

430#### 포트 충돌

431 

432`autoPort` 필드는 선호하는 포트가 이미 사용 중일 때 발생하는 상황을 제어합니다:

433 

434* **`true`**: Claude는 자동으로 사용 가능한 포트를 찾아 사용합니다. 대부분의 개발 서버에 적합합니다.

435* **`false`**: Claude는 오류로 실패합니다. OAuth 콜백 또는 CORS allowlists와 같이 서버가 특정 포트를 사용해야 할 때 사용합니다.

436* **설정되지 않음 (기본값)**: Claude는 서버가 정확한 포트가 필요한지 묻고 답변을 저장합니다.

437 

438Claude가 다른 포트를 선택하면 할당된 포트를 `PORT` 환경 변수를 통해 서버에 전달합니다.

439 

440#### 예제

441 

442이러한 구성은 다양한 프로젝트 유형에 대한 일반적인 설정을 보여줍니다:

443 

444<Tabs>

445 <Tab title="Next.js">

446 이 구성은 Yarn을 사용하여 포트 3000에서 Next.js 앱을 실행합니다:

447 

448 ```json theme={null}

449 {

450 "version": "0.0.1",

451 "configurations": [

452 {

453 "name": "web",

454 "runtimeExecutable": "yarn",

455 "runtimeArgs": ["dev"],

456 "port": 3000

457 }

458 ]

459 }

460 ```

461 </Tab>

462 

463 <Tab title="Multiple servers">

464 프론트엔드 및 API 서버가 있는 monorepo의 경우 여러 구성을 정의합니다. 프론트엔드는 `autoPort: true`를 사용하므로 3000이 사용 중이면 사용 가능한 포트를 선택하고, API 서버는 포트 8080을 정확히 요구합니다:

465 

466 ```json theme={null}

467 {

468 "version": "0.0.1",

469 "configurations": [

470 {

471 "name": "frontend",

472 "runtimeExecutable": "npm",

473 "runtimeArgs": ["run", "dev"],

474 "cwd": "apps/web",

475 "port": 3000,

476 "autoPort": true

477 },

478 {

479 "name": "api",

480 "runtimeExecutable": "npm",

481 "runtimeArgs": ["run", "start"],

482 "cwd": "server",

483 "port": 8080,

484 "env": { "NODE_ENV": "development" },

485 "autoPort": false

486 }

487 ]

488 }

489 ```

490 </Tab>

491 

492 <Tab title="Node.js script">

493 패키지 관리자 명령 대신 Node.js 스크립트를 직접 실행하려면 `program` 필드를 사용합니다:

494 

495 ```json theme={null}

496 {

497 "version": "0.0.1",

498 "configurations": [

499 {

500 "name": "server",

501 "program": "server.js",

502 "args": ["--verbose"],

503 "port": 4000

504 }

505 ]

506 }

507 ```

508 </Tab>

509</Tabs>

510 

511## 환경 구성

512 

513[세션을 시작](#start-a-session)할 때 선택하는 환경은 Claude가 실행되는 위치와 연결 방식을 결정합니다:

514 

515* **Local**: 머신에서 실행되며 파일에 직접 액세스합니다

516* **Remote**: Anthropic의 클라우드 인프라에서 실행됩니다. 앱을 닫아도 세션이 계속됩니다.

517* **SSH**: SSH를 통해 연결하는 원격 머신 (예: 자신의 서버, 클라우드 VM 또는 개발 컨테이너)에서 실행됩니다

518 

519### 로컬 세션

520 

521데스크톱 앱이 항상 전체 셸 환경을 상속하지는 않습니다. macOS에서 Dock 또는 Finder에서 앱을 실행하면 `~/.zshrc` 또는 `~/.bashrc`와 같은 셸 프로필을 읽어 `PATH` 및 고정된 Claude Code 변수 집합을 추출하지만 거기에 내보낸 다른 변수는 선택되지 않습니다. Windows에서 앱은 사용자 및 시스템 환경 변수를 상속하지만 PowerShell 프로필을 읽지 않습니다.

522 

523로컬 세션 및 개발 서버에 대한 환경 변수를 설정하려면 프롬프트 상자의 환경 드롭다운을 열고 **Local** 위에 마우스를 올린 다음 기어 아이콘을 클릭하여 로컬 환경 편집기를 엽니다. 여기에 저장한 변수는 머신에 암호화되어 저장되며 시작하는 모든 로컬 세션 및 미리보기 서버에 적용됩니다. `~/.claude/settings.json` 파일의 `env` 키에 변수를 추가할 수도 있습니다. 단, 이는 Claude 세션에만 도달하고 개발 서버에는 도달하지 않습니다. 지원되는 변수의 전체 목록은 [환경 변수](/ko/env-vars)를 참조하세요.

524 

525[Extended thinking](/ko/common-workflows#use-extended-thinking-thinking-mode)은 기본적으로 활성화되어 있으며, 복잡한 추론 작업의 성능을 향상시키지만 추가 토큰을 사용합니다. 생각을 완전히 비활성화하려면 로컬 환경 편집기에서 `MAX_THINKING_TOKENS`을 `0`으로 설정합니다. [적응형 추론](/ko/model-config#adjust-effort-level)이 있는 모델에서는 적응형 추론이 생각 깊이를 제어하기 때문에 다른 `MAX_THINKING_TOKENS` 값은 무시됩니다. Opus 4.6 및 Sonnet 4.6에서는 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING`을 `1`로 설정하여 고정 생각 예산을 사용합니다. Opus 4.7은 항상 적응형 추론을 사용하며 고정 예산 모드가 없습니다.

526 

527### 원격 세션

528 

529원격 세션은 앱을 닫아도 백그라운드에서 계속됩니다. 사용량은 별도의 컴퓨팅 요금 없이 [구독 계획 한도](/ko/costs)에 포함됩니다.

530 

531다양한 네트워크 액세스 수준 및 환경 변수를 가진 사용자 정의 클라우드 환경을 만들 수 있습니다. 원격 세션을 시작할 때 환경 드롭다운을 선택하고 **환경 추가**를 선택합니다. 네트워크 액세스 및 환경 변수 구성에 대한 자세한 내용은 [클라우드 환경](/ko/claude-code-on-the-web#the-cloud-environment)을 참조하세요.

532 

533### SSH 세션

534 

535SSH 세션을 사용하면 데스크톱 앱을 인터페이스로 사용하면서 원격 머신에서 Claude Code를 실행할 수 있습니다. 이는 클라우드 VM, 개발 컨테이너 또는 특정 하드웨어 또는 종속성이 있는 서버에 있는 코드베이스로 작업할 때 유용합니다.

536 

537SSH 연결을 추가하려면 세션을 시작하기 전에 환경 드롭다운을 클릭하고 **+ SSH 연결 추가**를 선택합니다. 대화 상자는 다음을 요청합니다:

538 

539* **Name**: 이 연결의 친화적인 레이블

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

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

542* **Identity File**: `~/.ssh/id_rsa`와 같은 개인 키의 경로. 기본 키 또는 SSH 구성을 사용하려면 비워둡니다.

543 

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

545 

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

547 

548#### 팀을 위해 SSH 연결을 미리 구성합니다

549 

550관리자는 [관리되는 설정](/ko/settings#settings-precedence) 파일에 `sshConfigs`를 추가하여 팀 멤버에게 SSH 연결을 배포할 수 있습니다. 이러한 방식으로 정의된 연결은 각 사용자의 환경 드롭다운에 자동으로 나타나며 관리되는 것으로 표시되므로 사용자는 이를 선택할 수 있지만 앱에서 편집하거나 삭제할 수 없습니다.

551 

552다음 예제는 원격 호스트의 `~/projects`에서 열리는 단일 연결을 미리 구성합니다:

553 

554```json theme={null}

555{

556 "sshConfigs": [

557 {

558 "id": "shared-dev-vm",

559 "name": "Shared Dev VM",

560 "sshHost": "user@dev.example.com",

561 "sshPort": 22,

562 "sshIdentityFile": "~/.ssh/id_ed25519",

563 "startDirectory": "~/projects"

564 }

565 ]

566}

567```

568 

569각 항목에는 `id`, `name`, `sshHost`가 필요합니다. `sshPort`, `sshIdentityFile`, `startDirectory` 필드는 선택 사항입니다. 사용자는 자신의 `~/.claude/settings.json`에 `sshConfigs`를 추가할 수도 있습니다. 이는 대화 상자를 통해 추가된 연결이 저장되는 위치입니다.

570 

571## 엔터프라이즈 구성

572 

573Team 또는 Enterprise 계획의 조직은 관리 콘솔 컨트롤, 관리 설정 파일, 장치 관리 정책을 통해 데스크톱 앱 동작을 관리할 수 있습니다.

574 

575### 관리 콘솔 컨트롤

576 

577이러한 설정은 [관리 설정 콘솔](https://claude.ai/admin-settings/claude-code)을 통해 구성됩니다:

578 

579* **데스크톱의 Code**: 조직의 사용자가 데스크톱 앱에서 Claude Code에 액세스할 수 있는지 제어합니다

580* **웹의 Code**: 조직의 [웹 세션](/ko/claude-code-on-the-web)을 활성화 또는 비활성화합니다

581* **Remote Control**: 조직의 [Remote Control](/ko/remote-control)을 활성화 또는 비활성화합니다

582* **권한 무시 모드 비활성화**: 조직의 사용자가 권한 무시 모드를 활성화하지 못하도록 방지합니다

583 

584### 관리 설정

585 

586관리 설정은 프로젝트 및 사용자 설정을 재정의하고 Desktop이 CLI 세션을 생성할 때 적용됩니다. 조직의 [관리 설정](/ko/settings#settings-precedence) 파일에서 이러한 키를 설정하거나 관리 콘솔을 통해 원격으로 푸시할 수 있습니다.

587 

588| 키 | 설명 |

589| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |

590| `permissions.disableBypassPermissionsMode` | 사용자가 권한 무시 모드를 활성화하지 못하도록 하려면 `"disable"`로 설정합니다. |

591| `disableAutoMode` | 사용자가 [Auto](/ko/permission-modes#eliminate-prompts-with-auto-mode) 모드를 활성화하지 못하도록 하려면 `"disable"`로 설정합니다. 모드 선택기에서 Auto를 제거합니다. `permissions` 아래에서도 허용됩니다. |

592| `autoMode` | 조직 전체에서 auto mode 분류기가 신뢰하고 차단하는 것을 사용자 정의합니다. [auto mode 구성](/ko/auto-mode-config)을 참조하세요. |

593| `sshConfigs` | 환경 드롭다운에 나타나는 [SSH 연결](#pre-configure-ssh-connections-for-your-team)을 사전 구성합니다. 사용자는 관리 연결을 편집하거나 삭제할 수 없습니다. |

594 

595각 머신의 디스크에 배포된 관리 설정 파일은 Desktop 세션에 적용됩니다. 관리 콘솔을 통해 원격으로 푸시된 관리 설정은 현재 CLI 및 IDE 세션에만 도달하므로, Desktop 배포의 경우 MDM을 통해 파일을 배포하거나 위의 [관리 콘솔 컨트롤](#admin-console-controls)을 사용합니다.

596 

597`permissions.disableBypassPermissionsMode` 및 `disableAutoMode`는 사용자 및 프로젝트 설정에서도 작동하지만 관리 설정에 배치하면 사용자가 재정의하지 못하도록 방지합니다. `autoMode`는 사용자 설정, `.claude/settings.local.json`, 관리 설정에서 읽혀지지만 체크인된 `.claude/settings.json`에서는 읽혀지지 않습니다: 복제된 저장소는 자신의 분류기 규칙을 주입할 수 없습니다. `allowManagedPermissionRulesOnly` 및 `allowManagedHooksOnly`를 포함한 관리 전용 설정의 전체 목록은 [관리 전용 설정](/ko/permissions#managed-only-settings)을 참조하세요.

598 

599### 장치 관리 정책

600 

601IT 팀은 macOS의 MDM 또는 Windows의 그룹 정책을 통해 데스크톱 앱을 관리할 수 있습니다. 사용 가능한 정책에는 Claude Code 기능 활성화 또는 비활성화, 자동 업데이트 제어, 사용자 정의 배포 URL 설정이 포함됩니다.

602 

603* **macOS**: Jamf 또는 Kandji와 같은 도구를 사용하여 `com.anthropic.Claude` 기본 설정 도메인을 통해 구성합니다

604* **Windows**: `SOFTWARE\Policies\Claude`의 레지스트리를 통해 구성합니다

605 

606### 인증 및 SSO

607 

608엔터프라이즈 조직은 모든 사용자에게 SSO를 요구할 수 있습니다. 계획 수준 세부 정보는 [인증](/ko/authentication)을 참조하고 SAML 및 OIDC 구성은 [SSO 설정](https://support.claude.com/en/articles/13132885-setting-up-single-sign-on-sso)을 참조하세요.

609 

610### 데이터 처리

611 

612Claude Code는 로컬 세션에서 코드를 로컬로 처리하거나 원격 세션에서 Anthropic의 클라우드 인프라에서 처리합니다. 대화 및 코드 컨텍스트는 처리를 위해 Anthropic의 API로 전송됩니다. 데이터 보존, 개인 정보 보호, 규정 준수에 대한 자세한 내용은 [데이터 처리](/ko/data-usage)를 참조하세요.

613 

614### 배포

615 

616Desktop은 엔터프라이즈 배포 도구를 통해 배포할 수 있습니다:

617 

618* **macOS**: Jamf 또는 Kandji와 같은 MDM을 통해 `.dmg` 설치 프로그램을 사용하여 배포합니다

619* **Windows**: MSIX 패키지 또는 `.exe` 설치 프로그램을 통해 배포합니다. 자동 설치를 포함한 엔터프라이즈 배포 옵션은 [Windows용 Claude Desktop 배포](https://support.claude.com/en/articles/12622703-deploy-claude-desktop-for-windows)를 참조하세요

620 

621프록시 설정, 방화벽 허용 목록, LLM 게이트웨이와 같은 네트워크 구성은 [네트워크 구성](/ko/network-config)을 참조하세요.

622 

623전체 엔터프라이즈 구성 참조는 [엔터프라이즈 구성 가이드](https://support.claude.com/en/articles/12622667-enterprise-configuration)를 참조하세요.

624 

625## CLI에서 오셨나요?

626 

627이미 Claude Code CLI를 사용하는 경우 Desktop은 그래픽 인터페이스를 사용하여 동일한 기본 엔진을 실행합니다. 동일한 머신에서 동일한 프로젝트에서도 동시에 둘 다 실행할 수 있습니다. 각각은 별도의 세션 기록을 유지하지만 CLAUDE.md 파일을 통해 구성 및 프로젝트 메모리를 공유합니다.

628 

629CLI 세션을 Desktop으로 이동하려면 터미널에서 `/desktop`을 실행합니다. Claude는 세션을 저장하고 데스크톱 앱에서 열고 CLI를 종료합니다. 이 명령은 macOS 및 Windows에서만 사용 가능합니다.

630 

631<Tip>

632 Desktop vs CLI를 사용할 때: 병렬 세션을 한 창에서 관리하거나, 패널을 나란히 정렬하거나, 변경 사항을 시각적으로 검토하려고 할 때 Desktop을 사용합니다. 스크립팅, 자동화, 터미널 워크플로우를 선호할 때 CLI를 사용합니다.

633</Tip>

634 

635### CLI 플래그 동등물

636 

637이 표는 일반적인 CLI 플래그에 대한 데스크톱 앱 동등물을 보여줍니다. 나열되지 않은 플래그는 스크립팅 또는 자동화를 위해 설계되었기 때문에 데스크톱 동등물이 없습니다.

638 

639| CLI | Desktop 동등물 |

640| ------------------------------------- | ------------------------------------------------------------------------------------------ |

641| `--model sonnet` | 전송 버튼 옆의 모델 드롭다운 |

642| `--resume`, `--continue` | 사이드바의 세션을 클릭합니다 |

643| `--permission-mode` | 전송 버튼 옆의 모드 선택기 |

644| `--dangerously-skip-permissions` | 권한 무시 모드. Settings → Claude Code → "권한 무시 모드 허용"에서 활성화합니다. 엔터프라이즈 관리자는 이 설정을 비활성화할 수 있습니다. |

645| `--add-dir` | 원격 세션에서 **+** 버튼으로 여러 저장소 추가 |

646| `--allowedTools`, `--disallowedTools` | [설정 파일](/ko/settings)의 권한 규칙이 여전히 적용됩니다. Desktop 세션별 동등물이 없습니다. |

647| `--verbose` | [Verbose 보기 모드](#switch-view-modes) (Transcript 보기 드롭다운) |

648| `--print`, `--output-format` | 사용할 수 없습니다. Desktop은 대화형만 가능합니다. |

649| `ANTHROPIC_MODEL` env var | 전송 버튼 옆의 모델 드롭다운 |

650| `MAX_THINKING_TOKENS` env var | 로컬 환경 편집기에서 설정합니다. [환경 구성](#environment-configuration)을 참조하세요. |

651 

652### 공유 구성

653 

654Desktop과 CLI는 동일한 구성 파일을 읽으므로 설정이 이월됩니다:

655 

656* **[CLAUDE.md](/ko/memory)** 및 `CLAUDE.local.md` 파일 (프로젝트)은 둘 다에서 사용됩니다

657* **[MCP servers](/ko/mcp)** `~/.claude.json` 또는 `.mcp.json`에 구성된 것은 둘 다에서 작동합니다

658* **[Hooks](/ko/hooks)** 및 **[skills](/ko/skills)** 설정에 정의된 것은 둘 다에 적용됩니다

659* **[Settings](/ko/settings)** `~/.claude.json` 및 `~/.claude/settings.json`에서 공유됩니다. `settings.json`의 권한 규칙, 허용된 도구 및 기타 설정은 Desktop 세션에 적용됩니다.

660* **Models**: Sonnet, Opus, Haiku는 둘 다에서 사용 가능합니다. Desktop에서 전송 버튼 옆의 드롭다운에서 모델을 선택합니다. 세션 중에 동일한 드롭다운에서 모델을 변경할 수 있습니다.

661 

662<Note>

663 **MCP servers: desktop chat app vs Claude Code**: Claude Desktop chat 앱의 `claude_desktop_config.json`에 구성된 MCP 서버는 Claude Code와 별개이며 Code 탭에 나타나지 않습니다. Claude Code에서 MCP 서버를 사용하려면 `~/.claude.json` 또는 프로젝트의 `.mcp.json` 파일에 구성합니다. 자세한 내용은 [MCP 구성](/ko/mcp#installing-mcp-servers)을 참조하세요.

664</Note>

665 

666### 기능 비교

667 

668이 표는 CLI와 Desktop 간의 핵심 기능을 비교합니다. CLI 플래그의 전체 목록은 [CLI 참조](/ko/cli-reference)를 참조하세요.

669 

670| 기능 | CLI | Desktop |

671| ----------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

672| 권한 모드 | `dontAsk`를 포함한 모든 모드 | 권한 요청, 자동 수락 편집, Plan mode, Auto, Settings를 통한 권한 무시 |

673| `--dangerously-skip-permissions` | CLI 플래그 | 권한 무시 모드. Settings → Claude Code → "권한 무시 모드 허용"에서 활성화합니다 |

674| [Third-party providers](/ko/third-party-integrations) | Bedrock, Vertex, Foundry | Anthropic의 API (기본값). 엔터프라이즈 배포는 Vertex AI 및 게이트웨이 공급자를 구성할 수 있습니다. [엔터프라이즈 구성 가이드](https://support.claude.com/en/articles/12622667-enterprise-configuration)를 참조하세요. |

675| [MCP servers](/ko/mcp) | 설정 파일에 구성 | 로컬 및 SSH 세션의 Connectors UI 또는 설정 파일 |

676| [Plugins](/ko/plugins) | `/plugin` 명령 | 플러그인 관리자 UI |

677| @mention 파일 | 텍스트 기반 | 자동 완성 포함; 로컬 및 SSH 세션만 |

678| 파일 첨부 | 사용할 수 없음 | 이미지, PDF |

679| 세션 격리 | [`--worktree`](/ko/cli-reference) 플래그 | 자동 worktrees |

680| 여러 세션 | 별도 터미널 | 사이드바 탭 |

681| 반복 작업 | Cron 작업, CI 파이프라인 | [예약된 작업](/ko/desktop-scheduled-tasks) |

682| 컴퓨터 사용 | [macOS에서 `/mcp`를 통해 활성화](/ko/computer-use) | [macOS 및 Windows에서 앱 및 화면 제어](#let-claude-use-your-computer) |

683| Dispatch 통합 | 사용할 수 없음 | [사이드바의 Dispatch 세션](#sessions-from-dispatch) |

684| 스크립팅 및 자동화 | [`--print`](/ko/cli-reference), [Agent SDK](/ko/headless) | 사용할 수 없음 |

685 

686### Desktop에서 사용할 수 없는 것

687 

688다음 기능은 CLI 또는 VS Code 확장에서만 사용 가능합니다:

689 

690* **Third-party providers**: Desktop은 Anthropic의 API에 기본적으로 연결됩니다. 엔터프라이즈 배포는 [관리 설정](https://support.claude.com/en/articles/12622667-enterprise-configuration)을 통해 Vertex AI 및 게이트웨이 공급자를 구성할 수 있습니다. Bedrock 또는 Foundry의 경우 [CLI](/ko/quickstart)를 사용합니다.

691* **Linux**: 데스크톱 앱은 macOS 및 Windows에서만 사용 가능합니다. Linux에서는 [CLI](/ko/quickstart)를 사용합니다.

692* **Inline code suggestions**: Desktop은 자동 완성 스타일 제안을 제공하지 않습니다. 대화형 프롬프트 및 명시적 코드 변경을 통해 작동합니다.

693* **Agent teams**: 다중 에이전트 오케스트레이션은 [CLI](/ko/agent-teams) 및 [Agent SDK](/ko/headless)를 통해 사용 가능하며 Desktop에서는 사용할 수 없습니다.

694 

695## 문제 해결

696 

697아래 섹션은 데스크톱 앱에 특정한 문제를 다룹니다. `API Error: 500`, `529 Overloaded`, `429`, `Prompt is too long`과 같이 채팅에 나타나는 런타임 API 오류의 경우 [오류 참조](/ko/errors)를 참조하세요. 이러한 오류와 수정 사항은 CLI, 데스크톱, 웹에서 동일합니다.

698 

699### 버전 확인하기

700 

701실행 중인 데스크톱 앱의 버전을 보려면:

702 

703* **macOS**: 메뉴 모음에서 **Claude**를 클릭한 다음 **About Claude**를 클릭합니다

704* **Windows**: **Help**를 클릭한 다음 **About**을 클릭합니다

705 

706버전 번호를 클릭하여 클립보드에 복사합니다.

707 

708### Code 탭의 403 또는 인증 오류

709 

710Code 탭을 사용할 때 `Error 403: Forbidden` 또는 기타 인증 실패가 표시되면:

711 

7121. 앱 메뉴에서 로그아웃했다가 다시 로그인합니다. 이것이 가장 일반적인 수정입니다.

7132. 활성 유료 구독이 있는지 확인합니다: Pro, Max, Team 또는 Enterprise.

7143. CLI는 작동하지만 Desktop은 작동하지 않으면 데스크톱 앱을 완전히 종료하고 (창만 닫지 말고) 다시 열고 로그인합니다.

7154. 인터넷 연결 및 프록시 설정을 확인합니다.

716 

717### 시작 시 빈 화면 또는 정지된 화면

718 

719앱이 열리지만 빈 화면이나 응답하지 않는 화면이 표시되면:

720 

7211. 앱을 다시 시작합니다.

7222. 보류 중인 업데이트를 확인합니다. 앱은 시작 시 자동으로 업데이트됩니다.

7233. Windows에서 Event Viewer의 **Windows Logs → Application** 아래에서 충돌 로그를 확인합니다.

724 

725### "Failed to load session"

726 

727`Failed to load session`이 표시되면 선택한 폴더가 더 이상 존재하지 않거나, Git 저장소에 설치되지 않은 Git LFS가 필요하거나, 파일 권한이 액세스를 방지할 수 있습니다. 다른 폴더를 선택하거나 앱을 다시 시작해 보세요.

728 

729### 세션이 설치된 도구를 찾지 못함

730 

731Claude가 `npm`, `node` 또는 기타 CLI 명령과 같은 도구를 찾을 수 없으면 도구가 일반 터미널에서 작동하는지 확인하고, 셸 프로필이 PATH를 올바르게 설정하는지 확인하고, 데스크톱 앱을 다시 시작하여 환경 변수를 다시 로드합니다.

732 

733### Git 및 Git LFS 오류

734 

735Windows에서 Git은 로컬 세션을 시작하기 위해 Code 탭에 필요합니다. "Git is required"가 표시되면 [Windows용 Git](https://git-scm.com/downloads/win)을 설치하고 앱을 다시 시작합니다.

736 

737"Git LFS is required by this repository but is not installed"가 표시되면 [git-lfs.com](https://git-lfs.com/)에서 Git LFS를 설치하고 `git lfs install`을 실행한 다음 앱을 다시 시작합니다.

738 

739### Windows에서 MCP 서버가 작동하지 않음

740 

741MCP 서버 토글이 응답하지 않거나 Windows에서 서버가 연결되지 않으면 서버가 설정에 올바르게 구성되었는지 확인하고, 앱을 다시 시작하고, Task Manager에서 서버 프로세스가 실행 중인지 확인하고, 연결 오류에 대한 서버 로그를 검토합니다.

742 

743### 앱이 종료되지 않음

744 

745* **macOS**: Cmd+Q를 누릅니다. 앱이 응답하지 않으면 Cmd+Option+Esc로 강제 종료를 사용하고 Claude를 선택한 다음 Force Quit를 클릭합니다.

746* **Windows**: Ctrl+Shift+Esc로 Task Manager를 사용하여 Claude 프로세스를 종료합니다.

747 

748### Windows 특정 문제

749 

750* **설치 후 PATH가 업데이트되지 않음**: 새 터미널 창을 엽니다. PATH 업데이트는 새 터미널 세션에만 적용됩니다.

751* **동시 설치 오류**: 진행 중인 다른 설치에 대한 오류가 표시되지만 없으면 관리자로 설치 프로그램을 실행해 보세요.

752 

753### CLI에서 열 때 "Branch doesn't exist yet"

754 

755원격 세션은 로컬 머신에 존재하지 않는 브랜치를 만들 수 있습니다. 세션 도구 모음의 브랜치 이름을 클릭하여 복사한 다음 로컬로 가져옵니다:

756 

757```bash theme={null}

758git fetch origin <branch-name>

759git checkout <branch-name>

760```

761 

762### 여전히 막혔나요?

763 

764* [GitHub Issues](https://github.com/anthropics/claude-code/issues)에서 검색하거나 버그를 제출합니다

765* [Claude 지원 센터](https://support.claude.com/)를 방문합니다

766 

767버그를 제출할 때 데스크톱 앱 버전, 운영 체제, 정확한 오류 메시지, 관련 로그를 포함합니다. macOS에서는 Console.app을 확인합니다. Windows에서는 Event Viewer → Windows Logs → Application을 확인합니다.

desktop-quickstart.md +127 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 데스크톱 앱 시작하기

6 

7> 데스크톱에 Claude Code를 설치하고 첫 번째 코딩 세션을 시작합니다

8 

9데스크톱 앱은 여러 세션을 나란히 실행하도록 구축된 그래픽 인터페이스를 갖춘 Claude Code를 제공합니다: 병렬 작업을 관리하기 위한 사이드바, 통합 터미널 및 파일 편집기가 있는 드래그 앤 드롭 레이아웃, 시각적 diff 검토, 라이브 앱 미리보기, GitHub PR 모니터링 및 자동 병합, 그리고 예약된 작업입니다. 터미널이 필요하지 않습니다.

10 

11<CardGroup cols={2}>

12 <Card title="Download for macOS" icon="apple" href="https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code&utm_medium=docs">

13 Universal build for Intel and Apple Silicon

14 </Card>

15 

16 <Card title="Download for Windows" icon="windows" href="https://claude.ai/api/desktop/win32/x64/setup/latest/redirect?utm_source=claude_code&utm_medium=docs">

17 For x64 processors

18 </Card>

19</CardGroup>

20 

21For Windows ARM64, download the [ARM64 installer](https://claude.ai/api/desktop/win32/arm64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs). The desktop app is not available on Linux; use the [CLI](/en/quickstart) instead.

22 

23<Note>

24 Claude Code는 [Pro, Max, Team, 또는 Enterprise 구독](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=desktop_quickstart_pricing)이 필요합니다.

25</Note>

26 

27이 페이지는 앱 설치 및 첫 번째 세션 시작을 안내합니다. 이미 설정되어 있다면 전체 참조는 [Claude Code Desktop 사용](/ko/desktop)을 참조하세요.

28 

29데스크톱 앱에는 세 개의 탭이 있습니다:

30 

31* **Chat**: 파일 접근이 없는 일반 대화로, claude.ai와 유사합니다.

32* **Cowork**: 자신의 환경을 가진 클라우드 VM에서 작업을 수행하는 자율 백그라운드 에이전트입니다. 사용자가 다른 작업을 하는 동안 독립적으로 실행될 수 있습니다.

33* **Code**: 로컬 파일에 직접 접근할 수 있는 대화형 코딩 어시스턴트입니다. 실시간으로 각 변경 사항을 검토하고 승인합니다.

34 

35Chat과 Cowork는 [Claude Desktop 지원 문서](https://support.claude.com/en/collections/16163169-claude-desktop)에서 다룹니다. 이 페이지는 **Code** 탭에 중점을 둡니다.

36 

37## 설치

38 

39<Steps>

40 <Step title="설치 및 로그인">

41 위의 링크에서 플랫폼에 맞는 설치 프로그램을 다운로드하고 실행합니다. macOS의 Applications 폴더 또는 Windows의 Start 메뉴에서 Claude를 실행한 다음 Anthropic 계정으로 로그인합니다.

42 </Step>

43 

44 <Step title="Code 탭 열기">

45 상단 중앙의 **Code** 탭을 클릭합니다. Code를 클릭할 때 업그레이드를 요청하는 메시지가 나타나면 먼저 [유료 요금제를 구독](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=desktop_quickstart_upgrade)해야 합니다. 온라인 로그인을 요청하는 메시지가 나타나면 로그인을 완료하고 앱을 다시 시작합니다. 403 오류가 표시되면 [인증 문제 해결](/ko/desktop#403-or-authentication-errors-in-the-code-tab)을 참조하세요.

46 </Step>

47</Steps>

48 

49데스크톱 앱에는 Claude Code가 포함되어 있습니다. Node.js나 CLI를 별도로 설치할 필요가 없습니다. 터미널에서 `claude`를 사용하려면 CLI를 별도로 설치하세요. [CLI 시작하기](/ko/quickstart)를 참조하세요.

50 

51## 첫 번째 세션 시작

52 

53Code 탭이 열려 있으면 프로젝트를 선택하고 Claude에게 할 일을 지시합니다.

54 

55<Steps>

56 <Step title="환경 및 폴더 선택">

57 **Local**을 선택하여 파일을 직접 사용하여 머신에서 Claude를 실행합니다. **Select folder**를 클릭하고 프로젝트 디렉토리를 선택합니다.

58 

59 <Tip>

60 잘 알고 있는 작은 프로젝트부터 시작하세요. Claude Code가 할 수 있는 일을 보는 가장 빠른 방법입니다. Windows에서는 로컬 세션이 작동하려면 [Git](https://git-scm.com/downloads/win)이 설치되어 있어야 합니다. 대부분의 Mac에는 기본적으로 Git이 포함되어 있습니다.

61 </Tip>

62 

63 다음을 선택할 수도 있습니다:

64 

65 * **Remote**: Anthropic의 클라우드 인프라에서 세션을 실행하며, 앱을 닫아도 계속됩니다. 원격 세션은 [웹의 Claude Code](/ko/claude-code-on-the-web)와 동일한 인프라를 사용합니다.

66 * **SSH**: SSH를 통해 원격 머신(자신의 서버, 클라우드 VM 또는 dev 컨테이너)에 연결합니다. Claude Code는 원격 머신에 설치되어야 합니다.

67 </Step>

68 

69 <Step title="모델 선택">

70 전송 버튼 옆의 드롭다운에서 모델을 선택합니다. Opus, Sonnet, Haiku의 비교는 [모델](/ko/model-config#available-models)을 참조하세요. 나중에 동일한 드롭다운에서 모델을 변경할 수 있습니다.

71 </Step>

72 

73 <Step title="Claude에게 할 일 지시">

74 Claude가 할 일을 입력합니다:

75 

76 * `Find a TODO comment and fix it`

77 * `Add tests for the main function`

78 * `Create a CLAUDE.md with instructions for this codebase`

79 

80 [세션](/ko/desktop#work-in-parallel-with-sessions)은 코드에 대한 Claude와의 대화입니다. 각 세션은 자신의 컨텍스트와 변경 사항을 추적하므로 여러 작업을 동시에 수행할 수 있으며 서로 간섭하지 않습니다.

81 </Step>

82 

83 <Step title="변경 사항 검토 및 수락">

84 기본적으로 Code 탭은 [Ask permissions 모드](/ko/desktop#choose-a-permission-mode)에서 시작되며, Claude는 변경 사항을 제안하고 적용하기 전에 승인을 기다립니다. 다음을 볼 수 있습니다:

85 

86 1. 각 파일에서 정확히 무엇이 변경될지 보여주는 [diff 보기](/ko/desktop#review-changes-with-diff-view)

87 2. 각 변경 사항을 승인하거나 거부하는 Accept/Reject 버튼

88 3. Claude가 요청을 처리하면서 실시간 업데이트

89 

90 변경 사항을 거부하면 Claude는 다르게 진행하고 싶은 방법을 묻습니다. 승인할 때까지 파일이 수정되지 않습니다.

91 </Step>

92</Steps>

93 

94## 이제 뭘 할까요?

95 

96첫 번째 편집을 완료했습니다. Desktop이 할 수 있는 모든 것에 대한 전체 참조는 [Claude Code Desktop 사용](/ko/desktop)을 참조하세요. 다음으로 시도할 수 있는 몇 가지 사항입니다.

97 

98**중단 및 조정.** 언제든지 Claude를 중단할 수 있습니다. 잘못된 방향으로 가고 있다면 중지 버튼을 클릭하거나 수정 사항을 입력하고 **Enter**를 누릅니다. Claude는 작업을 중단하고 입력에 따라 조정합니다. 완료될 때까지 기다리거나 다시 시작할 필요가 없습니다.

99 

100**Claude에게 더 많은 컨텍스트 제공.** 프롬프트 상자에 `@filename`을 입력하여 특정 파일을 대화에 가져오거나, 첨부 버튼을 사용하여 이미지 및 PDF를 첨부하거나, 파일을 프롬프트에 직접 드래그 앤 드롭합니다. Claude가 더 많은 컨텍스트를 가질수록 결과가 더 좋습니다. [파일 및 컨텍스트 추가](/ko/desktop#add-files-and-context-to-prompts)를 참조하세요.

101 

102**반복 가능한 작업에 skills 사용.** `/`를 입력하거나 **+** → **Slash commands**를 클릭하여 [내장 명령](/ko/commands), [사용자 정의 skills](/ko/skills), 플러그인 skills를 찾아봅니다. Skills는 코드 검토 체크리스트나 배포 단계와 같이 필요할 때마다 호출할 수 있는 재사용 가능한 프롬프트입니다.

103 

104**커밋하기 전에 변경 사항 검토.** Claude가 파일을 편집한 후 `+12 -1` 표시기가 나타납니다. 이를 클릭하여 [diff 보기](/ko/desktop#review-changes-with-diff-view)를 열고, 파일별로 수정 사항을 검토하고, 특정 줄에 대해 댓글을 달 수 있습니다. Claude는 댓글을 읽고 수정합니다. **Review code**를 클릭하여 Claude가 diff를 평가하고 인라인 제안을 남기도록 합니다.

105 

106**제어 수준 조정.** [권한 모드](/ko/desktop#choose-a-permission-mode)는 균형을 제어합니다. Ask permissions(기본값)는 모든 편집 전에 승인이 필요합니다. Auto accept edits는 파일 편집을 자동으로 수락하여 더 빠른 반복을 가능하게 합니다. Plan mode는 Claude가 파일을 건드리지 않고 접근 방식을 계획하도록 하며, 이는 큰 리팩토링 전에 유용합니다.

107 

108**더 많은 기능을 위해 플러그인 추가.** 프롬프트 상자 옆의 **+** 버튼을 클릭하고 **Plugins**를 선택하여 skills, 에이전트, MCP servers 등을 추가하는 [플러그인](/ko/desktop#install-plugins)을 찾아보고 설치합니다.

109 

110**앱 미리보기.** **Preview** 드롭다운을 클릭하여 dev 서버를 데스크톱에서 직접 실행합니다. Claude는 실행 중인 앱을 보고, 엔드포인트를 테스트하고, 로그를 검사하고, 보는 것에 대해 반복할 수 있습니다. [앱 미리보기](/ko/desktop#preview-your-app)를 참조하세요.

111 

112**pull request 추적.** PR을 연 후 Claude Code는 CI 확인 결과를 모니터링하고 실패를 자동으로 수정하거나 모든 확인이 통과되면 PR을 자동으로 병합할 수 있습니다. [pull request 상태 모니터링](/ko/desktop#monitor-pull-request-status)을 참조하세요.

113 

114**Claude를 일정에 따라 실행.** [예약된 작업](/ko/desktop-scheduled-tasks)을 설정하여 Claude를 정기적으로 자동으로 실행합니다: 매일 아침 일일 코드 검토, 주간 종속성 감사, 또는 연결된 도구에서 정보를 가져오는 브리핑입니다.

115 

116**준비가 되면 확장.** 사이드바에서 [병렬 세션](/ko/desktop#work-in-parallel-with-sessions)을 열어 여러 작업을 동시에 수행하며, 각각 자신의 Git worktree에서 실행하고, [작업 창](/ko/desktop#watch-background-tasks)을 열어 세션이 실행 중인 subagents 및 백그라운드 명령을 봅니다. [side chat](/ko/desktop#ask-a-side-question-without-derailing-the-session)을 열어 메인 스레드를 방해하지 않고 질문을 합니다. [장기 실행 작업을 클라우드로 보내](/ko/desktop#run-long-running-tasks-remotely) 앱을 닫아도 계속되도록 하거나, 작업이 예상보다 오래 걸리면 [웹 또는 IDE에서 세션을 계속](/ko/desktop#continue-in-another-surface)합니다. [GitHub, Slack, Linear와 같은 외부 도구를 연결](/ko/desktop#extend-claude-code)하여 워크플로우를 통합합니다.

117 

118## CLI에서 오셨나요?

119 

120Desktop은 그래픽 인터페이스를 갖춘 CLI와 동일한 엔진을 실행합니다. 동일한 프로젝트에서 둘 다 동시에 실행할 수 있으며, 구성(CLAUDE.md 파일, MCP servers, hooks, skills, 설정)을 공유합니다. 기능, 플래그 동등물, Desktop에서 사용할 수 없는 것의 전체 비교는 [CLI 비교](/ko/desktop#coming-from-the-cli)를 참조하세요.

121 

122## 다음 단계

123 

124* [Claude Code Desktop 사용](/ko/desktop): 권한 모드, 병렬 세션, diff 보기, 커넥터, 엔터프라이즈 구성

125* [문제 해결](/ko/desktop#troubleshooting): 일반적인 오류 및 설정 문제에 대한 해결책

126* [모범 사례](/ko/best-practices): 효과적인 프롬프트 작성 및 Claude Code 활용을 위한 팁

127* [일반적인 워크플로우](/ko/common-workflows): 디버깅, 리팩토링, 테스트 등에 대한 튜토리얼

devcontainer.md +194 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 개발 컨테이너

6 

7> 팀 전체에서 일관되고 격리된 환경을 위해 Claude Code를 개발 컨테이너 내에서 실행합니다.

8 

9[개발 컨테이너](https://containers.dev/)(또는 dev container)를 사용하면 팀의 모든 엔지니어가 실행할 수 있는 동일하고 격리된 환경을 정의할 수 있습니다. Claude Code가 해당 컨테이너에 설치되면 Claude가 실행하는 명령은 호스트 머신이 아닌 컨테이너 내에서 실행되며, 프로젝트 파일에 대한 편집 사항은 작업할 때 로컬 저장소에 나타납니다.

10 

11이 페이지는 [개발 컨테이너에 Claude Code 설치](#add-claude-code-to-your-dev-container)와 다음 구성 항목을 다룹니다. 각 항목은 독립적이므로 설정해야 할 항목으로 이동하세요:

12 

13* [재구축 시 인증 및 설정 유지](#persist-authentication-and-settings-across-rebuilds)

14* [조직 정책 적용](#enforce-organization-policy)

15* [네트워크 송신 제한](#restrict-network-egress)

16* [권한 프롬프트 없이 실행](#run-without-permission-prompts)

17 

18<Warning>

19 개발 컨테이너가 상당한 보호를 제공하지만, 모든 공격에 완전히 면역인 시스템은 없습니다.

20 `--dangerously-skip-permissions`으로 실행할 때, 개발 컨테이너는 [`~/.claude`](/ko/claude-directory)에 저장된 Claude Code 자격 증명을 포함하여 컨테이너 내에서 접근 가능한 모든 것을 악의적인 프로젝트가 유출하는 것을 방지하지 않습니다.

21 신뢰할 수 있는 저장소로 개발할 때만 개발 컨테이너를 사용하고 Claude의 활동을 모니터링하세요.

22 호스트 시크릿(예: `~/.ssh` 또는 클라우드 자격 증명 파일)을 컨테이너에 마운트하지 마세요. 대신 저장소 범위 또는 단기 토큰을 사용하세요.

23</Warning>

24 

25<Accordion title="개발 컨테이너가 편집기와 어떻게 작동하는지">

26 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=9017b1d16a446c6cc37ba562f35b9aae" className="dark:hidden" alt="호스트의 편집기가 Docker 개발 컨테이너에 연결되는 것을 보여주는 다이어그램입니다. Claude Code, 터미널 및 빌드 도구는 컨테이너 내에서 실행됩니다. 호스트 저장소는 컨테이너에 바인드 마운트되어 작업 공간으로 사용됩니다." width="640" height="300" data-path="images/devcontainer-architecture.svg" />

27 

28 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture-dark.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=ef00c8e25b1ea7a3a152895f1488831b" className="hidden dark:block" alt="호스트의 편집기가 Docker 개발 컨테이너에 연결되는 것을 보여주는 다이어그램입니다. Claude Code, 터미널 및 빌드 도구는 컨테이너 내에서 실행됩니다. 호스트 저장소는 컨테이너에 바인드 마운트되어 작업 공간으로 사용됩니다." width="640" height="300" data-path="images/devcontainer-architecture-dark.svg" />

29 

30 개발 컨테이너는 Docker 컨테이너로 실행되며, 머신 또는 GitHub Codespaces와 같은 클라우드 호스트에서 실행될 수 있습니다. Dev Containers 사양을 지원하는 편집기(예: VS Code, GitHub Codespaces, JetBrains IDE 또는 Cursor)가 해당 컨테이너에 연결됩니다. 편집기에서 파일을 평소대로 탐색하고 편집하지만, 통합 터미널, 언어 서버 및 빌드 도구는 모두 호스트가 아닌 컨테이너 내에서 실행됩니다. 일반 Vim과 같이 개발 컨테이너를 지원하지 않는 편집기는 이 워크플로우에 포함되지 않습니다.

31 

32 Claude Code는 컨테이너 내에서 실행되므로 프로젝트의 나머지 도구 체인과 동일한 파일, 종속성 및 도구를 봅니다. VS Code에서는 [Claude Code 확장 패널](/ko/vs-code)을 사용하거나 통합 터미널에서 `claude`를 실행할 수 있습니다. 둘 다 컨테이너 내에서 실행되며 동일한 `~/.claude` 구성을 공유합니다.

33</Accordion>

34 

35## 개발 컨테이너에 Claude Code 추가

36 

37Claude Code는 [Claude Code Dev Container Feature](https://github.com/anthropics/devcontainer-features/tree/main/src/claude-code)를 통해 모든 개발 컨테이너에 설치됩니다.

38 

39설정은 VS Code, GitHub Codespaces 또는 JetBrains IDE와 같이 Dev Containers 사양을 지원하는 모든 도구와 함께 작동합니다. 아래 단계는 VS Code를 예로 사용합니다.

40 

41VS Code 또는 Codespaces에서 컨테이너를 열면 기능이 Claude Code VS Code 확장도 추가합니다. 다른 편집기는 해당 부분을 무시합니다.

42 

43<Tip>

44 개발 컨테이너를 처음 사용하시나요? [VS Code Dev Containers 튜토리얼](https://code.visualstudio.com/docs/devcontainers/tutorial)은 Docker, 확장 및 첫 번째 컨테이너 열기를 안내합니다. 방화벽 및 지속적 볼륨이 있는 더 완전한 강화된 예제는 [참조 컨테이너 시도](#try-the-reference-container)를 참조하세요.

45</Tip>

46 

47<Steps>

48 <Step title="devcontainer.json 생성 또는 업데이트">

49 다음을 저장소에 `.devcontainer/devcontainer.json`으로 저장하거나 기존 파일에 `features` 블록을 추가합니다.

50 

51 끝의 버전 태그(예: `:1.0`)는 기능의 설치 스크립트를 고정하며, Claude Code 릴리스가 아닙니다. 기능은 최신 Claude Code를 설치하며, Claude Code는 기본적으로 컨테이너 내에서 자동으로 업데이트됩니다.

52 

53 CLI 버전을 고정하거나 자동 업데이트를 비활성화하려면 [조직 정책 적용](#enforce-organization-policy)을 참조하세요.

54 

55 ```json .devcontainer/devcontainer.json theme={null}

56 {

57 "image": "mcr.microsoft.com/devcontainers/base:ubuntu",

58 "features": {

59 "ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}

60 }

61 }

62 ```

63 

64 `image` 줄을 프로젝트의 기본 이미지로 바꾸거나 기존 파일이 Dockerfile을 사용하는 경우 제거합니다.

65 </Step>

66 

67 <Step title="컨테이너 재구축">

68 Mac에서는 `Cmd+Shift+P`를 사용하거나 Windows 및 Linux에서는 `Ctrl+Shift+P`를 사용하여 VS Code 명령 팔레트를 열고 **Dev Containers: Rebuild Container**를 실행합니다.

69 

70 다른 도구의 경우 해당 도구의 재구축 작업을 따르세요. [GitHub Codespaces에서 재구축](https://docs.github.com/en/codespaces/developing-in-a-codespace/rebuilding-the-container-in-a-codespace), [Dev Containers CLI](https://github.com/devcontainers/cli) 또는 IDE의 개발 컨테이너 문서를 참조하세요.

71 </Step>

72 

73 <Step title="Claude Code에 로그인">

74 재구축된 컨테이너에서 터미널을 열고 `claude`를 실행한 다음 인증 프롬프트를 따릅니다.

75 </Step>

76</Steps>

77 

78인증 프롬프트에서 보는 내용은 제공자에 따라 다릅니다:

79 

80* **Anthropic**: Claude 또는 Anthropic Console 계정으로 브라우저를 통해 로그인

81* **[Amazon Bedrock, Google Vertex AI 또는 Microsoft Foundry](/ko/third-party-integrations)**: Claude Code는 클라우드 제공자 자격 증명을 사용하며 브라우저 프롬프트가 없습니다.

82 

83클라우드 제공자의 경우 호스트에서 자격 증명 파일을 마운트하는 대신 `containerEnv`, Codespaces 시크릿 또는 클라우드의 워크로드 ID를 통해 자격 증명을 컨테이너에 전달합니다. Claude Code가 읽는 자격 증명 체인은 [Amazon Bedrock](/ko/amazon-bedrock), [Google Vertex AI](/ko/google-vertex-ai) 또는 [Microsoft Foundry](/ko/microsoft-foundry)를 참조하세요.

84 

85조직에 맞는 경로를 결정하려면 [API 제공자 선택](/ko/admin-setup#choose-your-api-provider)을 참조하세요.

86 

87<Note>

88 브라우저 로그인이 완료되었지만 콜백이 컨테이너에 도달하지 않으면 브라우저에 표시된 코드를 복사하여 터미널의 `Paste code here if prompted` 프롬프트에 붙여넣습니다. 이는 편집기의 포트 포워딩이 localhost 콜백을 라우팅하지 않을 때 발생할 수 있습니다.

89</Note>

90 

91## 재구축 시 인증 및 설정 유지

92 

93기본적으로 컨테이너의 홈 디렉토리는 재구축 시 삭제되므로 엔지니어는 매번 다시 로그인해야 합니다. Claude Code는 인증 토큰, 사용자 설정 및 세션 기록을 [`~/.claude`](/ko/claude-directory) 아래에 저장합니다. 해당 경로에 명명된 볼륨을 마운트하여 재구축 시 이 상태를 유지합니다.

94 

95다음 예제는 `node` 사용자의 홈 디렉토리에 볼륨을 마운트합니다:

96 

97```json devcontainer.json theme={null}

98"mounts": [

99 "source=claude-code-config,target=/home/node/.claude,type=volume"

100]

101```

102 

103`/home/node`를 컨테이너의 `remoteUser`의 홈 디렉토리로 바꿉니다. 볼륨을 `~/.claude` 이외의 위치에 마운트하는 경우 [`CLAUDE_CONFIG_DIR`](/ko/env-vars)을 마운트 경로로 설정하여 Claude Code가 해당 위치에서 읽고 쓰도록 합니다.

104 

105모든 저장소에서 하나의 볼륨을 공유하는 대신 프로젝트별로 상태를 격리하려면 소스 이름에 `${devcontainerId}` 변수를 포함합니다. [참조 구성](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json)은 이 목적을 위해 `source=claude-code-config-${devcontainerId}`를 사용합니다.

106 

107GitHub Codespaces에서 `~/.claude`는 codespace를 중지하고 시작할 때 유지되지만 컨테이너를 재구축할 때는 여전히 지워지므로 위의 볼륨 마운트가 여기에도 적용됩니다. codespace 간에 인증을 유지하려면 [`claude setup-token`](/ko/authentication#generate-a-long-lived-token)에서 `ANTHROPIC_API_KEY` 또는 `CLAUDE_CODE_OAUTH_TOKEN`을 [Codespaces 시크릿](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces)으로 저장합니다. Codespaces는 시크릿을 컨테이너 내에서 자동으로 환경 변수로 사용 가능하게 합니다.

108 

109## 조직 정책 적용

110 

111개발 컨테이너는 동일한 이미지와 구성이 모든 엔지니어의 머신에서 실행되므로 조직 정책을 적용하기에 편리한 장소입니다.

112 

113Claude Code는 Linux에서 `/etc/claude-code/managed-settings.json`을 읽고 [설정 계층](/ko/settings#how-scopes-interact)에서 가장 높은 우선순위로 적용하므로 해당 값은 엔지니어가 `~/.claude` 또는 프로젝트의 `.claude/` 디렉토리에서 설정한 모든 것을 재정의합니다. Dockerfile에서 파일을 제자리에 복사합니다:

114 

115```dockerfile Dockerfile theme={null}

116RUN mkdir -p /etc/claude-code

117COPY managed-settings.json /etc/claude-code/managed-settings.json

118```

119 

120Dockerfile이 저장소에 있으므로 쓰기 액세스 권한이 있는 모든 사람이 이 단계를 변경하거나 제거할 수 있습니다. 엔지니어가 저장소 파일을 편집하여 우회할 수 없는 정책의 경우 [서버 관리 설정](/ko/server-managed-settings) 또는 MDM을 통해 관리 설정을 제공합니다. 사용 가능한 키 및 기타 전달 경로는 [관리 설정 파일](/ko/settings#settings-files)을 참조하세요.

121 

122컨테이너의 모든 Claude Code 세션에 적용되는 [환경 변수](/ko/env-vars)를 설정하려면 `devcontainer.json`의 `containerEnv`에 추가합니다. 다음 예제는 원격 분석 및 오류 보고를 거부하고 Claude Code가 설치 후 자동으로 업데이트되는 것을 방지합니다:

123 

124```json devcontainer.json theme={null}

125"containerEnv": {

126 "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",

127 "DISABLE_AUTOUPDATER": "1"

128}

129```

130 

131Dev Container Feature는 항상 최신 Claude Code 릴리스를 설치합니다. 재현 가능한 빌드를 위해 특정 Claude Code 버전을 고정하려면 기능을 사용하는 대신 Dockerfile에서 `npm install -g @anthropic-ai/claude-code@X.Y.Z`로 설치하고 위와 같이 `DISABLE_AUTOUPDATER`를 설정합니다.

132 

133권한 규칙, 도구 제한 및 MCP 서버 허용 목록을 포함한 정책 제어의 전체 목록은 [조직을 위한 Claude Code 설정](/ko/admin-setup)을 참조하세요.

134 

135[MCP 서버](/ko/mcp)를 컨테이너 내에서 사용 가능하게 하려면 저장소 루트의 `.mcp.json` 파일에서 [프로젝트 범위](/ko/mcp#mcp-installation-scopes)로 정의하여 개발 컨테이너 구성과 함께 체크인됩니다. 로컬 stdio 서버가 의존하는 모든 바이너리를 Dockerfile에 설치하고 원격 서버 도메인을 네트워크 허용 목록에 추가합니다.

136 

137## 네트워크 송신 제한

138 

139컨테이너의 아웃바운드 트래픽을 Claude Code가 필요로 하는 도메인으로만 제한할 수 있습니다. 추론 및 인증 도메인은 [네트워크 액세스 요구 사항](/ko/network-config#network-access-requirements)을 참조하고, 선택적 원격 분석 및 오류 보고 연결 및 비활성화 방법은 [원격 분석 서비스](/ko/data-usage#telemetry-services)를 참조하세요.

140 

141참조 컨테이너에는 Claude Code 및 개발 도구가 필요로 하는 도메인을 제외한 모든 아웃바운드 트래픽을 차단하는 [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) 스크립트가 포함되어 있습니다. 컨테이너 내에서 방화벽을 실행하려면 추가 권한이 필요하므로 참조는 `runArgs`를 통해 `NET_ADMIN` 및 `NET_RAW` 기능을 추가합니다. 방화벽 스크립트 및 이러한 기능은 Claude Code 자체에는 필요하지 않습니다. 이를 제외하고 대신 자신의 네트워크 제어에 의존할 수 있습니다.

142 

143## 권한 프롬프트 없이 실행

144 

145컨테이너가 Claude Code를 비루트 사용자로 실행하고 명령 실행을 컨테이너로 제한하므로 무인 작동을 위해 `--dangerously-skip-permissions`을 전달할 수 있습니다. CLI는 루트로 시작될 때 이 플래그를 거부하므로 `remoteUser`가 비루트 계정으로 설정되어 있는지 확인합니다.

146 

147권한 프롬프트를 건너뛰면 도구 호출을 실행하기 전에 검토할 기회가 제거됩니다. Claude는 여전히 바인드 마운트된 작업 공간의 모든 파일을 수정할 수 있으며, 이는 호스트에 직접 나타나고 컨테이너의 네트워크 정책이 허용하는 모든 것에 도달할 수 있습니다. 이 플래그를 [위의 네트워크 송신 제한](#restrict-network-egress)과 쌍으로 사용하여 우회된 세션이 도달할 수 있는 것을 제한합니다.

148 

149안전 검사를 비활성화하지 않고 더 적은 프롬프트를 원하면 대신 [자동 모드](/ko/permission-modes#eliminate-prompts-with-auto-mode)를 고려하세요. 이는 분류기가 실행 전에 작업을 검토합니다. 엔지니어가 `--dangerously-skip-permissions`을 전혀 사용하지 못하도록 하려면 [관리 설정](/ko/settings#permission-settings)에서 `permissions.disableBypassPermissionsMode`를 `"disable"`로 설정합니다.

150 

151## 참조 컨테이너 시도

152 

153[`anthropics/claude-code`](https://github.com/anthropics/claude-code/tree/main/.devcontainer) 저장소에는 CLI, 송신 방화벽, 지속적 볼륨 및 Zsh 기반 셸을 결합하는 예제 개발 컨테이너가 포함되어 있습니다. 이는 유지 관리되는 기본 이미지가 아닌 작동 예제로 제공됩니다. 이를 사용하여 자신의 구성에 적용하기 전에 조각들이 어떻게 맞는지 확인하세요.

154 

155<Steps>

156 <Step title="필수 구성 요소 설치">

157 VS Code 및 [Dev Containers 확장](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)을 설치합니다.

158 </Step>

159 

160 <Step title="참조 복제">

161 [Claude Code 저장소](https://github.com/anthropics/claude-code)를 복제하고 VS Code에서 엽니다.

162 </Step>

163 

164 <Step title="컨테이너에서 다시 열기">

165 메시지가 표시되면 **Reopen in Container**를 클릭하거나 명령 팔레트에서 **Dev Containers: Reopen in Container**를 실행합니다.

166 </Step>

167 

168 <Step title="Claude Code 시작">

169 컨테이너 빌드가 완료되면 `` Ctrl+` ``로 터미널을 열고 `claude`를 실행하여 로그인하고 첫 번째 세션을 시작합니다.

170 </Step>

171</Steps>

172 

173이 구성을 자신의 프로젝트와 함께 사용하려면 `.devcontainer/` 디렉토리를 저장소에 복사하고 도구 체인에 맞게 Dockerfile을 조정하거나 [개발 컨테이너에 Claude Code 추가](#add-claude-code-to-your-dev-container)로 돌아가 이미 있는 설정에만 기능을 추가합니다.

174 

175참조 구성은 세 개의 파일로 구성됩니다. 기능을 통해 자신의 개발 컨테이너에 Claude Code를 추가할 때 이들 중 어느 것도 필요하지 않지만 조각들을 결합하는 한 가지 방법을 보여줍니다.

176 

177| 파일 | 목적 |

178| ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |

179| [`devcontainer.json`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json) | 볼륨 마운트, `runArgs` 기능, VS Code 확장 및 `containerEnv` |

180| [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/Dockerfile) | 기본 이미지, 개발 도구 및 Claude Code 설치 |

181| [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) | 허용된 도메인을 제외한 모든 아웃바운드 네트워크 트래픽 차단 |

182 

183## 다음 단계

184 

185Claude Code가 개발 컨테이너에서 실행되면 아래 페이지는 조직 롤아웃의 나머지 부분을 다룹니다. 인증 경로 선택, 저장소 외부에서 관리 정책 제공, 사용량 모니터링 및 Claude Code가 저장하고 전송하는 것 이해:

186 

187* [조직을 위한 Claude Code 설정](/ko/admin-setup): 인증 제공자 선택, 정책이 장치에 도달하는 방법 결정 및 롤아웃 계획

188* [서버 관리 설정](/ko/server-managed-settings): Claude.ai 관리 콘솔에서 관리 정책을 제공하여 엔지니어가 저장소 파일을 편집하여 우회할 수 없도록 합니다.

189* [사용량 모니터링 및 활동 감사](/ko/monitoring-usage): OpenTelemetry 메트릭을 내보내고 팀이 실행 중인 것을 검토합니다.

190* [네트워크 액세스 요구 사항](/ko/network-config#network-access-requirements): 프록시 및 방화벽을 위한 전체 도메인 허용 목록

191* [원격 분석 서비스 및 거부](/ko/data-usage#telemetry-services): Claude Code가 기본적으로 전송하는 것 및 비활성화하는 환경 변수

192* [`.claude` 디렉토리 탐색](/ko/claude-directory): 볼륨 마운트가 보유하는 것(자격 증명, 설정 및 세션 기록 포함)

193* [보안 모델](/ko/security): Claude Code의 권한 시스템, 샌드박싱 및 프롬프트 주입 보호가 어떻게 맞는지

194* [권한 모드](/ko/permission-modes): 계획 모드에서 자동 모드에서 우회까지의 전체 범위 및 각각을 사용할 때

discover-plugins.md +427 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 마켓플레이스를 통해 미리 빌드된 플러그인 발견 및 설치

6 

7> 마켓플레이스에서 플러그인을 찾아 설치하여 Claude Code를 새로운 명령어, 에이전트 및 기능으로 확장합니다.

8 

9플러그인은 Claude Code를 skills, agents, hooks 및 MCP servers로 확장합니다. 플러그인 마켓플레이스는 직접 빌드하지 않고도 이러한 확장 기능을 발견하고 설치할 수 있도록 도와주는 카탈로그입니다.

10 

11자신의 마켓플레이스를 만들고 배포하려고 하시나요? [플러그인 마켓플레이스 만들기 및 배포](/ko/plugin-marketplaces)를 참조하세요.

12 

13## 마켓플레이스 작동 방식

14 

15마켓플레이스는 다른 사람이 만들어 공유한 플러그인의 카탈로그입니다. 마켓플레이스를 사용하는 것은 두 단계의 프로세스입니다:

16 

17<Steps>

18 <Step title="마켓플레이스 추가">

19 이는 카탈로그를 Claude Code에 등록하여 사용 가능한 항목을 검색할 수 있도록 합니다. 아직 플러그인이 설치되지 않습니다.

20 </Step>

21 

22 <Step title="개별 플러그인 설치">

23 카탈로그를 검색하고 원하는 플러그인을 설치합니다.

24 </Step>

25</Steps>

26 

27앱 스토어를 추가하는 것과 같다고 생각하면 됩니다. 스토어를 추가하면 해당 컬렉션을 검색할 수 있지만, 여전히 개별적으로 다운로드할 앱을 선택합니다.

28 

29## 공식 Anthropic 마켓플레이스

30 

31공식 Anthropic 마켓플레이스(`claude-plugins-official`)는 Claude Code를 시작할 때 자동으로 사용 가능합니다. `/plugin`을 실행하고 **Discover** 탭으로 이동하여 사용 가능한 항목을 검색하거나 [claude.com/plugins](https://claude.com/plugins)에서 카탈로그를 확인합니다.

32 

33공식 마켓플레이스에서 플러그인을 설치하려면 `/plugin install <name>@claude-plugins-official`을 사용합니다. 예를 들어 GitHub 통합을 설치하려면:

34 

35```shell theme={null}

36/plugin install github@claude-plugins-official

37```

38 

39<Note>

40 공식 마켓플레이스는 Anthropic에서 유지 관리합니다. 공식 마켓플레이스에 플러그인을 제출하려면 다음 앱 내 제출 양식 중 하나를 사용하세요:

41 

42 * **Claude.ai**: [claude.ai/settings/plugins/submit](https://claude.ai/settings/plugins/submit)

43 * **Console**: [platform.claude.com/plugins/submit](https://platform.claude.com/plugins/submit)

44 

45 플러그인을 독립적으로 배포하려면 [자신의 마켓플레이스를 만들고](/ko/plugin-marketplaces) 사용자와 공유하세요.

46</Note>

47 

48공식 마켓플레이스에는 여러 카테고리의 플러그인이 포함되어 있습니다:

49 

50### 코드 인텔리전스

51 

52코드 인텔리전스 플러그인은 Claude Code의 기본 제공 LSP 도구를 활성화하여 Claude가 정의로 이동하고, 참조를 찾으며, 편집 직후 타입 오류를 볼 수 있도록 합니다. 이러한 플러그인은 [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) 연결을 구성하며, 이는 VS Code의 코드 인텔리전스를 지원하는 동일한 기술입니다.

53 

54이러한 플러그인은 언어 서버 바이너리가 시스템에 설치되어 있어야 합니다. 이미 언어 서버가 설치되어 있으면 프로젝트를 열 때 Claude가 해당 플러그인을 설치하도록 요청할 수 있습니다.

55 

56| 언어 | 플러그인 | 필요한 바이너리 |

57| :--------- | :------------------ | :--------------------------- |

58| C/C++ | `clangd-lsp` | `clangd` |

59| C# | `csharp-lsp` | `csharp-ls` |

60| Go | `gopls-lsp` | `gopls` |

61| Java | `jdtls-lsp` | `jdtls` |

62| Kotlin | `kotlin-lsp` | `kotlin-language-server` |

63| Lua | `lua-lsp` | `lua-language-server` |

64| PHP | `php-lsp` | `intelephense` |

65| Python | `pyright-lsp` | `pyright-langserver` |

66| Rust | `rust-analyzer-lsp` | `rust-analyzer` |

67| Swift | `swift-lsp` | `sourcekit-lsp` |

68| TypeScript | `typescript-lsp` | `typescript-language-server` |

69 

70[다른 언어를 위한 자신의 LSP 플러그인을 만들](/ko/plugins-reference#lsp-servers) 수도 있습니다.

71 

72<Note>

73 플러그인을 설치한 후 `/plugin` Errors 탭에서 `Executable not found in $PATH`를 보면 위 표에서 필요한 바이너리를 설치하세요.

74</Note>

75 

76#### 코드 인텔리전스 플러그인이 Claude에 제공하는 것

77 

78코드 인텔리전스 플러그인이 설치되고 해당 언어 서버 바이너리를 사용할 수 있으면 Claude는 두 가지 기능을 얻습니다:

79 

80* **자동 진단**: Claude가 파일을 편집할 때마다 언어 서버는 변경 사항을 분석하고 오류 및 경고를 자동으로 보고합니다. Claude는 컴파일러나 린터를 실행할 필요 없이 타입 오류, 누락된 import 및 구문 문제를 봅니다. Claude가 오류를 도입하면 같은 턴에서 문제를 알아차리고 수정합니다. 이는 플러그인 설치 이상의 구성이 필요하지 않습니다. "진단 발견됨" 표시기가 나타날 때 **Ctrl+O**를 눌러 진단을 인라인으로 볼 수 있습니다.

81* **코드 네비게이션**: Claude는 언어 서버를 사용하여 정의로 이동하고, 참조를 찾으며, 호버 시 타입 정보를 얻고, 기호를 나열하고, 구현을 찾으며, 호출 계층을 추적할 수 있습니다. 이러한 작업은 Claude에게 grep 기반 검색보다 더 정확한 네비게이션을 제공하지만, 가용성은 언어 및 환경에 따라 다를 수 있습니다.

82 

83문제가 발생하면 [코드 인텔리전스 문제 해결](#code-intelligence-issues)을 참조하세요.

84 

85### 외부 통합

86 

87이러한 플러그인은 미리 구성된 [MCP servers](/ko/mcp)를 번들로 제공하므로 수동 설정 없이 Claude를 외부 서비스에 연결할 수 있습니다:

88 

89* **소스 제어**: `github`, `gitlab`

90* **프로젝트 관리**: `atlassian` (Jira/Confluence), `asana`, `linear`, `notion`

91* **디자인**: `figma`

92* **인프라**: `vercel`, `firebase`, `supabase`

93* **커뮤니케이션**: `slack`

94* **모니터링**: `sentry`

95 

96### 개발 워크플로우

97 

98일반적인 개발 작업을 위한 명령어 및 에이전트를 추가하는 플러그인:

99 

100* **commit-commands**: commit, push 및 PR 생성을 포함한 Git commit 워크플로우

101* **pr-review-toolkit**: pull request 검토를 위한 특화된 에이전트

102* **agent-sdk-dev**: Claude Agent SDK로 빌드하기 위한 도구

103* **plugin-dev**: 자신의 플러그인을 만들기 위한 도구 모음

104 

105### 출력 스타일

106 

107Claude가 응답하는 방식을 사용자 정의합니다:

108 

109* **explanatory-output-style**: 구현 선택에 대한 교육적 통찰력

110* **learning-output-style**: 기술 습득을 위한 대화형 학습 모드

111 

112## 시도해보기: 데모 마켓플레이스 추가

113 

114Anthropic은 또한 플러그인 시스템으로 가능한 것을 보여주는 예제 플러그인이 있는 [데모 플러그인 마켓플레이스](https://github.com/anthropics/claude-code/tree/main/plugins)(`claude-code-plugins`)를 유지 관리합니다. 공식 마켓플레이스와 달리 이 마켓플레이스는 수동으로 추가해야 합니다.

115 

116<Steps>

117 <Step title="마켓플레이스 추가">

118 Claude Code 내에서 `anthropics/claude-code` 마켓플레이스에 대해 `plugin marketplace add` 명령어를 실행합니다:

119 

120 ```shell theme={null}

121 /plugin marketplace add anthropics/claude-code

122 ```

123 

124 이는 마켓플레이스 카탈로그를 다운로드하고 해당 플러그인을 사용 가능하게 합니다.

125 </Step>

126 

127 <Step title="사용 가능한 플러그인 검색">

128 `/plugin`을 실행하여 플러그인 관리자를 엽니다. 이는 **Tab**(또는 뒤로 가려면 **Shift+Tab**)을 사용하여 순환할 수 있는 네 개의 탭이 있는 탭 인터페이스를 엽니다:

129 

130 * **Discover**: 모든 마켓플레이스에서 사용 가능한 플러그인 검색

131 * **Installed**: 설치된 플러그인 보기 및 관리

132 * **Marketplaces**: 추가된 마켓플레이스 추가, 제거 또는 업데이트

133 * **Errors**: 플러그인 로딩 오류 보기

134 

135 방금 추가한 마켓플레이스의 플러그인을 보려면 **Discover** 탭으로 이동합니다.

136 </Step>

137 

138 <Step title="플러그인 설치">

139 플러그인을 선택하여 세부 정보를 보고 설치 범위를 선택합니다:

140 

141 * **User scope**: 모든 프로젝트에서 자신을 위해 설치

142 * **Project scope**: 이 저장소의 모든 협력자를 위해 설치

143 * **Local scope**: 이 저장소에서만 자신을 위해 설치

144 

145 예를 들어 **commit-commands**(git 워크플로우 명령어를 추가하는 플러그인)를 선택하고 사용자 범위에 설치합니다.

146 

147 명령줄에서 직접 설치할 수도 있습니다:

148 

149 ```shell theme={null}

150 /plugin install commit-commands@anthropics-claude-code

151 ```

152 

153 범위에 대해 자세히 알아보려면 [구성 범위](/ko/settings#configuration-scopes)를 참조하세요.

154 </Step>

155 

156 <Step title="새 플러그인 사용">

157 설치 후 `/reload-plugins`를 실행하여 플러그인을 활성화합니다. 플러그인 명령어는 플러그인 이름으로 네임스페이스되므로 **commit-commands**는 `/commit-commands:commit`과 같은 명령어를 제공합니다.

158 

159 파일을 변경하고 다음을 실행하여 시도해보세요:

160 

161 ```shell theme={null}

162 /commit-commands:commit

163 ```

164 

165 이는 변경 사항을 스테이징하고, commit 메시지를 생성하며, commit을 만듭니다.

166 

167 각 플러그인은 다르게 작동합니다. **Discover** 탭의 플러그인 설명이나 해당 홈페이지를 확인하여 제공하는 명령어 및 기능을 알아보세요.

168 </Step>

169</Steps>

170 

171이 가이드의 나머지 부분에서는 마켓플레이스를 추가하고, 플러그인을 설치하며, 구성을 관리하는 모든 방법을 다룹니다.

172 

173## 마켓플레이스 추가

174 

175`/plugin marketplace add` 명령어를 사용하여 다양한 소스에서 마켓플레이스를 추가합니다.

176 

177<Tip>

178 **바로가기**: `/plugin marketplace` 대신 `/plugin market`을 사용할 수 있으며, `remove` 대신 `rm`을 사용할 수 있습니다.

179</Tip>

180 

181* **GitHub 저장소**: `owner/repo` 형식(예: `anthropics/claude-code`)

182* **Git URL**: 모든 git 저장소 URL(GitLab, Bitbucket, 자체 호스팅)

183* **로컬 경로**: 디렉토리 또는 `marketplace.json` 파일에 대한 직접 경로

184* **원격 URL**: 호스팅된 `marketplace.json` 파일에 대한 직접 URL

185 

186### GitHub에서 추가

187 

188`.claude-plugin/marketplace.json` 파일을 포함하는 GitHub 저장소를 `owner/repo` 형식을 사용하여 추가합니다. 여기서 `owner`는 GitHub 사용자 이름 또는 조직이고 `repo`는 저장소 이름입니다.

189 

190예를 들어 `anthropics/claude-code`는 `anthropics`가 소유한 `claude-code` 저장소를 나타냅니다:

191 

192```shell theme={null}

193/plugin marketplace add anthropics/claude-code

194```

195 

196### 다른 Git 호스트에서 추가

197 

198전체 URL을 제공하여 모든 git 저장소를 추가합니다. 이는 GitLab, Bitbucket 및 자체 호스팅 서버를 포함한 모든 Git 호스트에서 작동합니다:

199 

200HTTPS 사용:

201 

202```shell theme={null}

203/plugin marketplace add https://gitlab.com/company/plugins.git

204```

205 

206SSH 사용:

207 

208```shell theme={null}

209/plugin marketplace add git@gitlab.com:company/plugins.git

210```

211 

212특정 브랜치 또는 태그를 추가하려면 `#` 뒤에 ref를 추가합니다:

213 

214```shell theme={null}

215/plugin marketplace add https://gitlab.com/company/plugins.git#v1.0.0

216```

217 

218### 로컬 경로에서 추가

219 

220`.claude-plugin/marketplace.json` 파일을 포함하는 로컬 디렉토리를 추가합니다:

221 

222```shell theme={null}

223/plugin marketplace add ./my-marketplace

224```

225 

226`marketplace.json` 파일에 대한 직접 경로를 추가할 수도 있습니다:

227 

228```shell theme={null}

229/plugin marketplace add ./path/to/marketplace.json

230```

231 

232### 원격 URL에서 추가

233 

234URL을 통해 원격 `marketplace.json` 파일을 추가합니다:

235 

236```shell theme={null}

237/plugin marketplace add https://example.com/marketplace.json

238```

239 

240<Note>

241 URL 기반 마켓플레이스는 Git 기반 마켓플레이스에 비해 몇 가지 제한 사항이 있습니다. 플러그인 설치 시 "경로를 찾을 수 없음" 오류가 발생하면 [문제 해결](/ko/plugin-marketplaces#plugins-with-relative-paths-fail-in-url-based-marketplaces)을 참조하세요.

242</Note>

243 

244## 플러그인 설치

245 

246마켓플레이스를 추가한 후 플러그인을 직접 설치할 수 있습니다(기본적으로 사용자 범위에 설치됨):

247 

248```shell theme={null}

249/plugin install plugin-name@marketplace-name

250```

251 

252다른 [설치 범위](/ko/settings#configuration-scopes)를 선택하려면 대화형 UI를 사용합니다: `/plugin`을 실행하고 **Discover** 탭으로 이동한 후 플러그인에서 **Enter**를 누릅니다. 다음 옵션이 표시됩니다:

253 

254* **User scope**(기본값): 모든 프로젝트에서 자신을 위해 설치

255* **Project scope**: 이 저장소의 모든 협력자를 위해 설치(`.claude/settings.json`에 추가)

256* **Local scope**: 이 저장소에서만 자신을 위해 설치(협력자와 공유되지 않음)

257 

258**managed** 범위의 플러그인도 볼 수 있습니다. 이는 관리자가 [관리되는 설정](/ko/settings#settings-files)을 통해 설치하며 수정할 수 없습니다.

259 

260`/plugin`을 실행하고 **Installed** 탭으로 이동하여 범위별로 그룹화된 플러그인을 확인합니다.

261 

262<Warning>

263 플러그인을 설치하기 전에 신뢰할 수 있는지 확인하세요. Anthropic은 플러그인에 포함된 MCP servers, 파일 또는 기타 소프트웨어를 제어하지 않으며 의도한 대로 작동하는지 확인할 수 없습니다. 자세한 내용은 각 플러그인의 홈페이지를 확인하세요.

264</Warning>

265 

266## 설치된 플러그인 관리

267 

268`/plugin`을 실행하고 **Installed** 탭으로 이동하여 플러그인을 보고, 활성화하고, 비활성화하거나, 제거합니다. 플러그인 이름 또는 설명으로 목록을 필터링하려면 입력합니다.

269 

270직접 명령어로 플러그인을 관리할 수도 있습니다.

271 

272플러그인을 제거하지 않고 비활성화합니다:

273 

274```shell theme={null}

275/plugin disable plugin-name@marketplace-name

276```

277 

278비활성화된 플러그인을 다시 활성화합니다:

279 

280```shell theme={null}

281/plugin enable plugin-name@marketplace-name

282```

283 

284플러그인을 완전히 제거합니다:

285 

286```shell theme={null}

287/plugin uninstall plugin-name@marketplace-name

288```

289 

290`--scope` 옵션을 사용하면 CLI 명령어로 특정 범위를 대상으로 할 수 있습니다:

291 

292```shell theme={null}

293claude plugin install formatter@your-org --scope project

294claude plugin uninstall formatter@your-org --scope project

295```

296 

297### 재시작 없이 플러그인 변경 사항 적용

298 

299세션 중에 플러그인을 설치, 활성화 또는 비활성화할 때 `/reload-plugins`를 실행하여 재시작 없이 모든 변경 사항을 선택합니다:

300 

301```shell theme={null}

302/reload-plugins

303```

304 

305Claude Code는 모든 활성 플러그인을 다시 로드하고 플러그인, skills, agents, hooks, 플러그인 MCP servers 및 플러그인 LSP servers의 개수를 표시합니다.

306 

307## 마켓플레이스 관리

308 

309대화형 `/plugin` 인터페이스 또는 CLI 명령어를 통해 마켓플레이스를 관리할 수 있습니다.

310 

311### 대화형 인터페이스 사용

312 

313`/plugin`을 실행하고 **Marketplaces** 탭으로 이동하여:

314 

315* 소스 및 상태와 함께 추가된 모든 마켓플레이스 보기

316* 새 마켓플레이스 추가

317* 마켓플레이스 목록을 업데이트하여 최신 플러그인 가져오기

318* 더 이상 필요하지 않은 마켓플레이스 제거

319 

320### CLI 명령어 사용

321 

322직접 명령어로 마켓플레이스를 관리할 수도 있습니다.

323 

324구성된 모든 마켓플레이스 나열:

325 

326```shell theme={null}

327/plugin marketplace list

328```

329 

330마켓플레이스에서 플러그인 목록 새로 고침:

331 

332```shell theme={null}

333/plugin marketplace update marketplace-name

334```

335 

336마켓플레이스 제거:

337 

338```shell theme={null}

339/plugin marketplace remove marketplace-name

340```

341 

342<Warning>

343 마켓플레이스를 제거하면 해당 마켓플레이스에서 설치한 모든 플러그인이 제거됩니다.

344</Warning>

345 

346### 자동 업데이트 구성

347 

348Claude Code는 시작 시 마켓플레이스 및 설치된 플러그인을 자동으로 업데이트할 수 있습니다. 마켓플레이스에 대해 자동 업데이트가 활성화되면 Claude Code는 마켓플레이스 데이터를 새로 고치고 설치된 플러그인을 최신 버전으로 업데이트합니다. 플러그인이 업데이트된 경우 `/reload-plugins`를 실행하도록 요청하는 알림이 표시됩니다.

349 

350UI를 통해 개별 마켓플레이스에 대한 자동 업데이트를 전환합니다:

351 

3521. `/plugin`을 실행하여 플러그인 관리자 열기

3532. **Marketplaces** 선택

3543. 목록에서 마켓플레이스 선택

3554. **자동 업데이트 활성화** 또는 **자동 업데이트 비활성화** 선택

356 

357공식 Anthropic 마켓플레이스는 기본적으로 자동 업데이트가 활성화되어 있습니다. 타사 및 로컬 개발 마켓플레이스는 기본적으로 자동 업데이트가 비활성화되어 있습니다.

358 

359Claude Code 및 모든 플러그인에 대해 모든 자동 업데이트를 완전히 비활성화하려면 `DISABLE_AUTOUPDATER` 환경 변수를 설정합니다. 자세한 내용은 [자동 업데이트](/ko/setup#auto-updates)를 참조하세요.

360 

361Claude Code 자동 업데이트를 비활성화하면서 플러그인 자동 업데이트를 활성화된 상태로 유지하려면 `DISABLE_AUTOUPDATER`와 함께 `FORCE_AUTOUPDATE_PLUGINS=1`을 설정합니다:

362 

363```bash theme={null}

364export DISABLE_AUTOUPDATER=1

365export FORCE_AUTOUPDATE_PLUGINS=1

366```

367 

368Claude Code 업데이트를 수동으로 관리하지만 여전히 자동 플러그인 업데이트를 받으려는 경우에 유용합니다.

369 

370## 팀 마켓플레이스 구성

371 

372팀 관리자는 `.claude/settings.json`에 마켓플레이스 구성을 추가하여 프로젝트에 대한 자동 마켓플레이스 설치를 설정할 수 있습니다. 팀 멤버가 저장소 폴더를 신뢰하면 Claude Code는 이러한 마켓플레이스 및 플러그인을 설치하도록 요청합니다.

373 

374프로젝트의 `.claude/settings.json`에 `extraKnownMarketplaces`를 추가합니다:

375 

376```json theme={null}

377{

378 "extraKnownMarketplaces": {

379 "my-team-tools": {

380 "source": {

381 "source": "github",

382 "repo": "your-org/claude-plugins"

383 }

384 }

385 }

386}

387```

388 

389`extraKnownMarketplaces` 및 `enabledPlugins`를 포함한 전체 구성 옵션은 [플러그인 설정](/ko/settings#plugin-settings)을 참조하세요.

390 

391## 보안

392 

393플러그인 및 마켓플레이스는 사용자 권한으로 머신에서 임의의 코드를 실행할 수 있는 매우 신뢰할 수 있는 구성 요소입니다. 신뢰할 수 있는 소스에서만 플러그인을 설치하고 마켓플레이스를 추가합니다. 조직은 [관리되는 마켓플레이스 제한](/ko/plugin-marketplaces#managed-marketplace-restrictions)을 사용하여 사용자가 추가할 수 있는 마켓플레이스를 제한할 수 있습니다.

394 

395## 문제 해결

396 

397### /plugin 명령어를 인식하지 못함

398 

399"알 수 없는 명령어" 또는 `/plugin` 명령어가 나타나지 않으면:

400 

4011. **버전 확인**: `claude --version`을 실행하여 설치된 항목을 확인합니다.

4022. **Claude Code 업데이트**:

403 * **Homebrew**: `brew upgrade claude-code`

404 * **npm**: `npm update -g @anthropic-ai/claude-code`

405 * **네이티브 설치 프로그램**: [설정](/ko/setup)에서 설치 명령어를 다시 실행합니다.

4063. **Claude Code 재시작**: 업데이트 후 터미널을 재시작하고 `claude`를 다시 실행합니다.

407 

408### 일반적인 문제

409 

410* **마켓플레이스가 로드되지 않음**: URL에 액세스할 수 있고 `.claude-plugin/marketplace.json`이 경로에 있는지 확인합니다.

411* **플러그인 설치 실패**: 플러그인 소스 URL에 액세스할 수 있고 저장소가 공개되어 있거나(또는 액세스 권한이 있는지) 확인합니다.

412* **설치 후 파일을 찾을 수 없음**: 플러그인은 캐시에 복사되므로 플러그인 디렉토리 외부의 파일을 참조하는 경로는 작동하지 않습니다.

413* **플러그인 skills가 나타나지 않음**: `rm -rf ~/.claude/plugins/cache`로 캐시를 지우고, Claude Code를 재시작한 후 플러그인을 다시 설치합니다.

414 

415자세한 문제 해결 및 솔루션은 마켓플레이스 가이드의 [문제 해결](/ko/plugin-marketplaces#troubleshooting)을 참조하세요. 디버깅 도구는 [디버깅 및 개발 도구](/ko/plugins-reference#debugging-and-development-tools)를 참조하세요.

416 

417### 코드 인텔리전스 문제

418 

419* **언어 서버가 시작되지 않음**: 바이너리가 설치되어 있고 `$PATH`에서 사용 가능한지 확인합니다. `/plugin` Errors 탭에서 세부 정보를 확인합니다.

420* **높은 메모리 사용량**: `rust-analyzer` 및 `pyright`와 같은 언어 서버는 대규모 프로젝트에서 상당한 메모리를 소비할 수 있습니다. 메모리 문제가 발생하면 `/plugin disable <plugin-name>`으로 플러그인을 비활성화하고 대신 Claude의 기본 제공 검색 도구를 사용합니다.

421* **모노레포에서 거짓 양성 진단**: 작업 공간이 올바르게 구성되지 않으면 언어 서버가 내부 패키지에 대해 해결되지 않은 import 오류를 보고할 수 있습니다. 이는 Claude의 코드 편집 능력에 영향을 주지 않습니다.

422 

423## 다음 단계

424 

425* **자신의 플러그인 빌드**: [플러그인](/ko/plugins)을 참조하여 skills, agents 및 hooks를 만듭니다.

426* **마켓플레이스 만들기**: [플러그인 마켓플레이스 만들기](/ko/plugin-marketplaces)를 참조하여 팀 또는 커뮤니티에 플러그인을 배포합니다.

427* **기술 참조**: [플러그인 참조](/ko/plugins-reference)를 참조하여 완전한 사양을 확인합니다.

env-vars.md +238 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 환경 변수

6 

7> Claude Code 동작을 제어하는 환경 변수에 대한 완전한 참조입니다.

8 

9Claude Code는 다음 환경 변수를 지원하여 동작을 제어합니다. `claude`를 실행하기 전에 셸에서 설정하거나, [`settings.json`](/ko/settings#available-settings)의 `env` 키 아래에서 구성하여 모든 세션에 적용하거나 팀 전체에 배포할 수 있습니다.

10 

11| 변수 | 목적 |

12| :------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

13| `ANTHROPIC_API_KEY` | `X-Api-Key` 헤더로 전송되는 API 키입니다. 설정하면 로그인되어 있더라도 Claude Pro, Max, Team 또는 Enterprise 구독 대신 이 키가 사용됩니다. 비대화형 모드(`-p`)에서는 키가 있을 때 항상 사용됩니다. 대화형 모드에서는 키가 구독을 재정의하기 전에 한 번 승인하도록 프롬프트됩니다. 구독을 대신 사용하려면 `unset ANTHROPIC_API_KEY`를 실행합니다. |

14| `ANTHROPIC_AUTH_TOKEN` | `Authorization` 헤더의 사용자 정의 값(여기서 설정한 값 앞에 `Bearer `가 붙습니다). |

15| `ANTHROPIC_BASE_URL` | API 엔드포인트를 재정의하여 프록시 또는 게이트웨이를 통해 요청을 라우팅합니다. 비자사 호스트로 설정하면 [MCP 도구 검색](/ko/mcp#scale-with-mcp-tool-search)이 기본적으로 비활성화됩니다. 프록시가 `tool_reference` 블록을 전달하면 `ENABLE_TOOL_SEARCH=true`로 설정합니다. |

16| `ANTHROPIC_BEDROCK_BASE_URL` | Bedrock 엔드포인트 URL을 재정의합니다. 사용자 정의 Bedrock 엔드포인트 또는 [LLM 게이트웨이](/ko/llm-gateway)를 통해 라우팅할 때 사용합니다. [Amazon Bedrock](/ko/amazon-bedrock) 참조 |

17| `ANTHROPIC_BEDROCK_MANTLE_BASE_URL` | Bedrock Mantle 엔드포인트 URL을 재정의합니다. [Mantle 엔드포인트](/ko/amazon-bedrock#use-the-mantle-endpoint) 참조 |

18| `ANTHROPIC_BEDROCK_SERVICE_TIER` | Bedrock [서비스 계층](https://docs.aws.amazon.com/bedrock/latest/userguide/service-tiers-inference.html)(`default`, `flex`, 또는 `priority`). `X-Amzn-Bedrock-Service-Tier` 헤더로 전송됩니다. [Amazon Bedrock](/ko/amazon-bedrock#service-tiers) 참조 |

19| `ANTHROPIC_BETAS` | API 요청에 포함할 추가 `anthropic-beta` 헤더 값의 쉼표로 구분된 목록입니다. Claude Code는 이미 필요한 베타 헤더를 전송합니다. Claude Code가 기본 지원을 추가하기 전에 [Anthropic API 베타](https://platform.claude.com/docs/en/api/beta-headers)에 옵트인하려면 이를 사용합니다. API 키 인증이 필요한 [`--betas` 플래그](/ko/cli-reference#cli-flags)와 달리 이 변수는 Claude.ai 구독을 포함한 모든 인증 방법에서 작동합니다. |

20| `ANTHROPIC_CUSTOM_HEADERS` | 요청에 추가할 사용자 정의 헤더(`Name: Value` 형식, 여러 헤더의 경우 줄바꿈으로 구분) |

21| `ANTHROPIC_CUSTOM_MODEL_OPTION` | `/model` 선택기에 사용자 정의 항목으로 추가할 모델 ID입니다. 기본 제공 별칭을 대체하지 않고 비표준 또는 게이트웨이 특정 모델을 선택 가능하게 만드는 데 사용합니다. [모델 구성](/ko/model-config#add-a-custom-model-option) 참조 |

22| `ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION` | `/model` 선택기의 사용자 정의 모델 항목에 대한 표시 설명입니다. 설정하지 않으면 `Custom model (<model-id>)`로 기본값이 설정됩니다. |

23| `ANTHROPIC_CUSTOM_MODEL_OPTION_NAME` | `/model` 선택기의 사용자 정의 모델 항목에 대한 표시 이름입니다. 설정하지 않으면 모델 ID로 기본값이 설정됩니다. |

24| `ANTHROPIC_CUSTOM_MODEL_OPTION_SUPPORTED_CAPABILITIES` | [모델 구성](/ko/model-config#customize-pinned-model-display-and-capabilities) 참조 |

25| `ANTHROPIC_DEFAULT_HAIKU_MODEL` | [모델 구성](/ko/model-config#environment-variables) 참조 |

26| `ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION` | [모델 구성](/ko/model-config#customize-pinned-model-display-and-capabilities) 참조 |

27| `ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME` | [모델 구성](/ko/model-config#customize-pinned-model-display-and-capabilities) 참조 |

28| `ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES` | [모델 구성](/ko/model-config#customize-pinned-model-display-and-capabilities) 참조 |

29| `ANTHROPIC_DEFAULT_OPUS_MODEL` | [모델 구성](/ko/model-config#environment-variables) 참조 |

30| `ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION` | [모델 구성](/ko/model-config#customize-pinned-model-display-and-capabilities) 참조 |

31| `ANTHROPIC_DEFAULT_OPUS_MODEL_NAME` | [모델 구성](/ko/model-config#customize-pinned-model-display-and-capabilities) 참조 |

32| `ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES` | [모델 구성](/ko/model-config#customize-pinned-model-display-and-capabilities) 참조 |

33| `ANTHROPIC_DEFAULT_SONNET_MODEL` | [모델 구성](/ko/model-config#environment-variables) 참조 |

34| `ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION` | [모델 구성](/ko/model-config#customize-pinned-model-display-and-capabilities) 참조 |

35| `ANTHROPIC_DEFAULT_SONNET_MODEL_NAME` | [모델 구성](/ko/model-config#customize-pinned-model-display-and-capabilities) 참조 |

36| `ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES` | [모델 구성](/ko/model-config#customize-pinned-model-display-and-capabilities) 참조 |

37| `ANTHROPIC_FOUNDRY_API_KEY` | Microsoft Foundry 인증용 API 키([Microsoft Foundry](/ko/microsoft-foundry) 참조) |

38| `ANTHROPIC_FOUNDRY_BASE_URL` | Foundry 리소스의 전체 기본 URL(예: `https://my-resource.services.ai.azure.com/anthropic`). `ANTHROPIC_FOUNDRY_RESOURCE`의 대안([Microsoft Foundry](/ko/microsoft-foundry) 참조) |

39| `ANTHROPIC_FOUNDRY_RESOURCE` | Foundry 리소스 이름(예: `my-resource`). `ANTHROPIC_FOUNDRY_BASE_URL`이 설정되지 않은 경우 필수([Microsoft Foundry](/ko/microsoft-foundry) 참조) |

40| `ANTHROPIC_MODEL` | 사용할 모델 설정의 이름([모델 구성](/ko/model-config#environment-variables) 참조) |

41| `ANTHROPIC_SMALL_FAST_MODEL` | \[더 이상 사용되지 않음] 백그라운드 작업용 [Haiku 클래스 모델](/ko/costs)의 이름 |

42| `ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION` | Bedrock 또는 Bedrock Mantle 사용 시 Haiku 클래스 모델의 AWS 리전 재정의 |

43| `ANTHROPIC_VERTEX_BASE_URL` | Vertex AI 엔드포인트 URL을 재정의합니다. 사용자 정의 Vertex 엔드포인트 또는 [LLM 게이트웨이](/ko/llm-gateway)를 통해 라우팅할 때 사용합니다. [Google Vertex AI](/ko/google-vertex-ai) 참조 |

44| `ANTHROPIC_VERTEX_PROJECT_ID` | Vertex AI용 GCP 프로젝트 ID입니다. [Google Vertex AI](/ko/google-vertex-ai) 사용 시 필수입니다. |

45| `API_TIMEOUT_MS` | API 요청의 타임아웃(밀리초)(기본값: 600000, 또는 10분; 최대: 2147483647). 느린 네트워크에서 요청이 시간 초과되거나 프록시를 통해 라우팅할 때 이를 증가시킵니다. 최대값을 초과하는 값은 기본 타이머를 오버플로우하여 요청이 즉시 실패하게 합니다. |

46| `AWS_BEARER_TOKEN_BEDROCK` | 인증용 Bedrock API 키([Bedrock API 키](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/) 참조) |

47| `BASH_DEFAULT_TIMEOUT_MS` | 장시간 실행되는 bash 명령의 기본 타임아웃(기본값: 120000, 또는 2분) |

48| `BASH_MAX_OUTPUT_LENGTH` | bash 출력이 중간 잘림되기 전의 최대 문자 수 |

49| `BASH_MAX_TIMEOUT_MS` | 모델이 장시간 실행되는 bash 명령에 대해 설정할 수 있는 최대 타임아웃(기본값: 600000, 또는 10분) |

50| `CCR_FORCE_BUNDLE` | GitHub 액세스가 가능한 경우에도 [`claude --remote`](/ko/claude-code-on-the-web#send-local-repositories-without-github)가 로컬 리포지토리를 번들로 제공하고 업로드하도록 강제하려면 `1`로 설정합니다. |

51| `CLAUDECODE` | Claude Code가 생성하는 셸 환경(Bash 도구, tmux 세션)에서 `1`로 설정합니다. [훅](/ko/hooks) 또는 [상태 줄](/ko/statusline) 명령에서는 설정되지 않습니다. Claude Code가 생성한 셸 내에서 스크립트가 실행 중인지 감지하는 데 사용합니다. |

52| `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` | 모든 기본 제공 [subagent](/ko/sub-agents) 유형(예: Explore 및 Plan)을 비활성화하려면 `1`로 설정합니다. 비대화형 모드(`-p` 플래그)에만 적용됩니다. SDK 사용자가 백지 상태를 원할 때 유용합니다. |

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

54| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | 자동 압축이 트리거되는 컨텍스트 용량의 백분율(1-100)을 설정합니다. 기본적으로 자동 압축은 약 95% 용량에서 트리거됩니다. `50`과 같은 낮은 값을 사용하여 더 일찍 압축합니다. 기본 임계값보다 높은 값은 효과가 없습니다. 주 대화와 subagent 모두에 적용됩니다. 이 백분율은 [상태 줄](/ko/statusline)에서 사용 가능한 `context_window.used_percentage` 필드와 일치합니다. |

55| `CLAUDE_AUTO_BACKGROUND_TASKS` | 장시간 실행되는 에이전트 작업의 자동 백그라운드 처리를 강제로 활성화하려면 `1`로 설정합니다. 활성화되면 subagent는 약 2분 동안 실행한 후 백그라운드로 이동합니다. |

56| `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR` | 주 세션에서 각 Bash 또는 PowerShell 명령 후 원래 작업 디렉토리로 돌아갑니다. |

57| `CLAUDE_CODE_ACCESSIBILITY` | 기본 터미널 커서를 표시하고 반전된 텍스트 커서 표시기를 비활성화하려면 `1`로 설정합니다. macOS Zoom과 같은 화면 확대기가 커서 위치를 추적할 수 있습니다. |

58| `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD` | `--add-dir`로 지정된 디렉토리에서 메모리 파일을 로드하려면 `1`로 설정합니다. `CLAUDE.md`, `.claude/CLAUDE.md`, `.claude/rules/*.md`, `CLAUDE.local.md`를 로드합니다. 기본적으로 추가 디렉토리는 메모리 파일을 로드하지 않습니다. |

59| `CLAUDE_CODE_API_KEY_HELPER_TTL_MS` | 자격 증명을 새로 고쳐야 하는 간격(밀리초)([`apiKeyHelper`](/ko/settings#available-settings) 사용 시) |

60| `CLAUDE_CODE_ATTRIBUTION_HEADER` | 시스템 프롬프트의 시작 부분에서 속성 블록(클라이언트 버전 및 프롬프트 지문)을 생략하려면 `0`으로 설정합니다. 비활성화하면 [LLM 게이트웨이](/ko/llm-gateway)를 통해 라우팅할 때 프롬프트 캐시 히트율이 향상됩니다. Anthropic API 캐싱은 영향을 받지 않습니다. |

61| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | 자동 압축 계산에 사용되는 컨텍스트 용량을 토큰 단위로 설정합니다. 기본값은 모델의 컨텍스트 윈도우입니다: 표준 모델의 경우 200K 또는 [확장 컨텍스트](/ko/model-config#extended-context) 모델의 경우 1M입니다. 1M 모델에서 `500000`과 같은 낮은 값을 사용하여 압축 목적상 윈도우를 500K로 취급합니다. 값은 모델의 실제 컨텍스트 윈도우로 제한됩니다. `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`는 이 값의 백분율로 적용됩니다. 이 변수를 설정하면 압축 임계값이 상태 줄의 `used_percentage`에서 분리되며, 이는 항상 모델의 전체 컨텍스트 윈도우를 사용합니다. |

62| `CLAUDE_CODE_AUTO_CONNECT_IDE` | 자동 [IDE 연결](/ko/vs-code)을 재정의합니다. 기본적으로 Claude Code는 지원되는 IDE의 통합 터미널 내에서 실행될 때 자동으로 연결됩니다. 이를 방지하려면 `false`로 설정합니다. tmux가 부모 터미널을 가리는 경우와 같이 자동 감지가 실패할 때 연결을 강제하려면 `true`로 설정합니다. |

63| `CLAUDE_CODE_CERT_STORE` | TLS 연결을 위한 CA 인증서 소스의 쉼표로 구분된 목록입니다. `bundled`는 Claude Code와 함께 제공되는 Mozilla CA 세트입니다. `system`은 운영 체제 신뢰 저장소입니다. 기본값은 `bundled,system`입니다. 시스템 저장소 통합을 위해서는 기본 바이너리 배포가 필요합니다. Node.js 런타임에서는 이 값과 관계없이 번들 세트만 사용됩니다. |

64| `CLAUDE_CODE_CLIENT_CERT` | mTLS 인증용 클라이언트 인증서 파일의 경로 |

65| `CLAUDE_CODE_CLIENT_KEY` | mTLS 인증용 클라이언트 개인 키 파일의 경로 |

66| `CLAUDE_CODE_CLIENT_KEY_PASSPHRASE` | 암호화된 CLAUDE\_CODE\_CLIENT\_KEY의 암호(선택 사항) |

67| `CLAUDE_CODE_DEBUG_LOGS_DIR` | 디버그 로그 파일 경로를 재정의합니다. 이름과 달리 이는 디렉토리가 아닌 파일 경로입니다. 디버그 모드를 `--debug` 또는 `/debug`를 통해 별도로 활성화해야 합니다. 이 변수만 설정해도 로깅이 활성화되지 않습니다. [`--debug-file`](/ko/cli-reference#cli-flags) 플래그는 둘 다 한 번에 수행합니다. 기본값은 `~/.claude/debug/<session-id>.txt`입니다. |

68| `CLAUDE_CODE_DEBUG_LOG_LEVEL` | 디버그 로그 파일에 기록되는 최소 로그 수준입니다. 값: `verbose`, `debug`(기본값), `info`, `warn`, `error`. 전체 상태 줄 명령 출력과 같은 대용량 진단을 포함하려면 `verbose`로 설정하거나, 노이즈를 줄이려면 `error`로 올립니다. |

69| `CLAUDE_CODE_DISABLE_1M_CONTEXT` | [1M 컨텍스트 윈도우](/ko/model-config#extended-context) 지원을 비활성화하려면 `1`로 설정합니다. 설정하면 1M 모델 변형을 모델 선택기에서 사용할 수 없습니다. 규정 준수 요구 사항이 있는 엔터프라이즈 환경에 유용합니다. |

70| `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` | Opus 4.6 및 Sonnet 4.6에 대해 [적응형 추론](/ko/model-config#adjust-effort-level)을 비활성화하려면 `1`로 설정합니다. `MAX_THINKING_TOKENS`로 제어되는 고정 사고 예산으로 돌아갑니다. Opus 4.7에는 효과가 없으며, 항상 적응형 추론을 사용합니다. |

71| `CLAUDE_CODE_DISABLE_ATTACHMENTS` | 첨부 파일 처리를 비활성화하려면 `1`로 설정합니다. `@` 구문이 있는 파일 언급은 파일 내용으로 확장되지 않고 일반 텍스트로 전송됩니다. |

72| `CLAUDE_CODE_DISABLE_AUTO_MEMORY` | [자동 메모리](/ko/memory#auto-memory)를 비활성화하려면 `1`로 설정합니다. 점진적 롤아웃 중에 자동 메모리를 강제로 켜려면 `0`으로 설정합니다. 비활성화되면 Claude는 자동 메모리 파일을 생성하거나 로드하지 않습니다. |

73| `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` | Bash 및 subagent 도구의 `run_in_background` 매개변수, 자동 백그라운드 처리, Ctrl+B 단축키를 포함한 모든 백그라운드 작업 기능을 비활성화하려면 `1`로 설정합니다. |

74| `CLAUDE_CODE_DISABLE_CLAUDE_MDS` | 사용자, 프로젝트, 자동 메모리 파일을 포함한 모든 CLAUDE.md 메모리 파일을 컨텍스트에 로드하지 않으려면 `1`로 설정합니다. |

75| `CLAUDE_CODE_DISABLE_CRON` | [예약된 작업](/ko/scheduled-tasks)을 비활성화하려면 `1`로 설정합니다. `/loop` skill과 cron 도구를 사용할 수 없게 되고 이미 예약된 모든 작업이 중지되며, 세션 중에 이미 실행 중인 작업을 포함한 모든 작업이 실행되지 않습니다. |

76| `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` | Anthropic 특정 `anthropic-beta` 요청 헤더 및 베타 도구 스키마 필드(`defer_loading` 및 `eager_input_streaming` 등)를 API 요청에서 제거하려면 `1`로 설정합니다. 프록시 게이트웨이가 "Unexpected value(s) for the `anthropic-beta` header" 또는 "Extra inputs are not permitted"와 같은 오류로 요청을 거부할 때 사용합니다. 표준 필드(`name`, `description`, `input_schema`, `cache_control`)는 유지됩니다. |

77| `CLAUDE_CODE_DISABLE_FAST_MODE` | [빠른 모드](/ko/fast-mode)를 비활성화하려면 `1`로 설정합니다. |

78| `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` | "Claude가 어떻게 하고 있나요?" 세션 품질 설문조사를 비활성화하려면 `1`로 설정합니다. `DISABLE_TELEMETRY` 또는 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`이 설정되면 설문조사도 비활성화됩니다. [세션 품질 설문조사](/ko/data-usage#session-quality-surveys) 참조 |

79| `CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING` | 파일 [체크포인팅](/ko/checkpointing)을 비활성화하려면 `1`로 설정합니다. `/rewind` 명령이 코드 변경 사항을 복원할 수 없습니다. |

80| `CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` | Claude의 시스템 프롬프트에서 기본 제공 커밋 및 PR 워크플로우 지침과 git 상태 스냅샷을 제거하려면 `1`로 설정합니다. 자신의 git 워크플로우 skill을 사용할 때 유용합니다. 설정하면 [`includeGitInstructions`](/ko/settings#available-settings) 설정보다 우선합니다. |

81| `CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP` | Anthropic API에서 Opus 4.0 및 4.1을 현재 Opus 버전으로 자동 재매핑하지 않으려면 `1`로 설정합니다. 의도적으로 이전 모델을 고정하려는 경우 사용합니다. 재매핑은 Bedrock, Vertex 또는 Foundry에서 실행되지 않습니다. |

82| `CLAUDE_CODE_DISABLE_MOUSE` | [전체 화면 렌더링](/ko/fullscreen)에서 마우스 추적을 비활성화하려면 `1`로 설정합니다. `PgUp` 및 `PgDn`을 사용한 키보드 스크롤은 계속 작동합니다. 터미널의 기본 선택 시 복사 동작을 유지하려면 이를 사용합니다. |

83| `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` | `DISABLE_AUTOUPDATER`, `DISABLE_FEEDBACK_COMMAND`, `DISABLE_ERROR_REPORTING`, `DISABLE_TELEMETRY` 설정과 동일합니다. |

84| `CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK` | 스트리밍 요청이 중간에 실패할 때 비스트리밍 폴백을 비활성화하려면 `1`로 설정합니다. 스트리밍 오류는 재시도 계층으로 전파됩니다. 프록시 또는 게이트웨이가 폴백으로 인해 중복 도구 실행을 생성할 때 유용합니다. |

85| `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` | 첫 실행 시 공식 플러그인 마켓플레이스의 자동 추가를 건너뛰려면 `1`로 설정합니다. |

86| `CLAUDE_CODE_DISABLE_POLICY_SKILLS` | 시스템 전체 관리 skill 디렉토리에서 skill을 로드하지 않으려면 `1`로 설정합니다. 운영자가 프로비저닝한 skill을 로드하지 않아야 하는 컨테이너 또는 CI 세션에 유용합니다. |

87| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | 대화 컨텍스트를 기반으로 자동 터미널 제목 업데이트를 비활성화하려면 `1`로 설정합니다. |

88| `CLAUDE_CODE_DISABLE_THINKING` | 모델 지원 또는 기타 설정과 관계없이 [확장 사고](https://platform.claude.com/docs/en/build-with-claude/extended-thinking)를 강제로 비활성화하려면 `1`로 설정합니다. `MAX_THINKING_TOKENS=0`보다 더 직접적입니다. |

89| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | [전체 화면 렌더링](/ko/fullscreen)에서 가상 스크롤을 비활성화하려면 `1`로 설정합니다. 전체 화면 모드에서 스크롤이 메시지가 나타나야 할 위치에 빈 영역을 표시하면 이를 사용합니다. |

90| `CLAUDE_CODE_EFFORT_LEVEL` | 지원되는 모델의 노력 수준을 설정합니다. 값: `low`, `medium`, `high`, `xhigh`, `max`, 또는 `auto`(모델 기본값 사용). 사용 가능한 수준은 모델에 따라 다릅니다. `/effort` 및 `effortLevel` 설정보다 우선합니다. [노력 수준 조정](/ko/model-config#adjust-effort-level) 참조 |

91| `CLAUDE_CODE_ENABLE_AWAY_SUMMARY` | [세션 요약](/ko/interactive-mode#session-recap) 가용성을 재정의합니다. 재개를 강제로 끄려면 `0`으로 설정합니다. [`awaySummaryEnabled`](/ko/settings#available-settings)가 `false`일 때 재개를 강제로 켜려면 `1`로 설정합니다. 설정 및 `/config` 토글보다 우선합니다. |

92| `CLAUDE_CODE_ENABLE_BACKGROUND_PLUGIN_REFRESH` | [비대화형 모드](/ko/headless)에서 백그라운드 설치가 완료된 후 턴 경계에서 플러그인 상태를 새로 고치려면 `1`로 설정합니다. 새로 고침이 세션 중간에 시스템 프롬프트를 변경하여 해당 턴의 [프롬프트 캐싱](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)을 무효화하므로 기본적으로 꺼져 있습니다. |

93| `CLAUDE_CODE_ENABLE_FINE_GRAINED_TOOL_STREAMING` | 세밀한 도구 입력 스트리밍을 강제로 활성화하려면 `1`로 설정합니다. 이 없으면 API는 도구 입력 매개변수를 완전히 버퍼링한 후 델타 이벤트를 전송하므로 큰 도구 입력에서 표시가 지연될 수 있습니다. Anthropic API만 해당: Bedrock, Vertex 또는 Foundry에는 효과가 없습니다. |

94| `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` | 프롬프트 제안을 비활성화하려면 `false`로 설정합니다(`/config`의 "프롬프트 제안" 토글). 이는 Claude가 응답한 후 프롬프트 입력에 나타나는 회색으로 표시된 예측입니다. [프롬프트 제안](/ko/interactive-mode#prompt-suggestions) 참조 |

95| `CLAUDE_CODE_ENABLE_TASKS` | 비대화형 모드(`-p` 플래그)에서 작업 추적 시스템을 활성화하려면 `1`로 설정합니다. 작업은 대화형 모드에서 기본적으로 켜져 있습니다. [작업 목록](/ko/interactive-mode#task-list) 참조 |

96| `CLAUDE_CODE_ENABLE_TELEMETRY` | 메트릭 및 로깅을 위한 OpenTelemetry 데이터 수집을 활성화하려면 `1`로 설정합니다. OTel 내보내기를 구성하기 전에 필수입니다. [모니터링](/ko/monitoring-usage) 참조 |

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

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

99| `CLAUDE_CODE_EXTRA_BODY` | 모든 API 요청 본문의 최상위 수준으로 병합할 JSON 객체입니다. Claude Code가 직접 노출하지 않는 공급자 특정 매개변수를 전달하는 데 유용합니다. |

100| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | 파일 읽기의 기본 토큰 제한을 재정의합니다. 전체 파일을 읽어야 할 때 유용합니다. |

101| `CLAUDE_CODE_FORK_SUBAGENT` | [포크된 subagent](/ko/sub-agents#fork-the-current-conversation)를 활성화하려면 `1`로 설정합니다. 포크된 subagent는 새로 시작하는 대신 주 세션에서 전체 대화 컨텍스트를 상속합니다. 활성화되면 `/fork`는 [`/branch`](/ko/commands)의 별칭으로 작동하는 대신 포크된 subagent를 생성하며, 모든 subagent 생성은 백그라운드에서 실행됩니다. 대화형 모드와 SDK 또는 `claude -p`를 통해 작동합니다. |

102| `CLAUDE_CODE_GIT_BASH_PATH` | Windows 전용: Git Bash 실행 파일(`bash.exe`)의 경로입니다. Git Bash가 설치되었지만 PATH에 없을 때 사용합니다. [Windows 설정](/ko/setup#set-up-on-windows) 참조 |

103| `CLAUDE_CODE_GLOB_HIDDEN` | Claude가 [Glob 도구](/ko/tools-reference)를 호출할 때 결과에서 dotfile을 제외하려면 `false`로 설정합니다. 기본적으로 포함됩니다. `@` 파일 자동 완성, `ls`, Grep 또는 Read에는 영향을 주지 않습니다. |

104| `CLAUDE_CODE_GLOB_NO_IGNORE` | [Glob 도구](/ko/tools-reference)가 `.gitignore` 패턴을 존중하도록 하려면 `false`로 설정합니다. 기본적으로 Glob은 gitignored된 파일을 포함한 모든 일치하는 파일을 반환합니다. `@` 파일 자동 완성에는 영향을 주지 않으며, 이는 자체 [`respectGitignore` 설정](/ko/settings#available-settings)을 가집니다. |

105| `CLAUDE_CODE_GLOB_TIMEOUT_SECONDS` | Glob 도구 파일 검색의 타임아웃(초). 대부분의 플랫폼에서 기본값은 20초이고 WSL에서는 60초입니다. |

106| `CLAUDE_CODE_HIDE_CWD` | 시작 로고에서 작업 디렉토리를 숨기려면 `1`로 설정합니다. 경로가 OS 사용자명을 노출하는 화면 공유 또는 녹화에 유용합니다. |

107| `CLAUDE_CODE_IDE_HOST_OVERRIDE` | IDE 확장에 연결하는 데 사용되는 호스트 주소를 재정의합니다. 기본적으로 Claude Code는 WSL-to-Windows 라우팅을 포함한 올바른 주소를 자동 감지합니다. |

108| `CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL` | IDE 확장의 자동 설치를 건너뜁니다. [`autoInstallIdeExtension`](/ko/settings#global-config-settings)을 `false`로 설정하는 것과 동일합니다. |

109| `CLAUDE_CODE_IDE_SKIP_VALID_CHECK` | 연결 중 IDE 잠금 파일 항목의 유효성 검사를 건너뛰려면 `1`로 설정합니다. 자동 연결이 실행 중인 IDE를 찾지 못할 때 사용합니다. |

110| `CLAUDE_CODE_MAX_CONTEXT_TOKENS` | Claude Code가 활성 모델에 대해 가정하는 컨텍스트 윈도우 크기를 재정의합니다. `DISABLE_COMPACT`도 설정되어 있을 때만 적용됩니다. `ANTHROPIC_BASE_URL`을 통해 이름의 기본 제공 크기와 일치하지 않는 컨텍스트 윈도우를 가진 모델로 라우팅할 때 사용합니다. |

111| `CLAUDE_CODE_MAX_OUTPUT_TOKENS` | 대부분의 요청에 대한 최대 출력 토큰 수를 설정합니다. 기본값 및 상한은 모델에 따라 다릅니다. [최대 출력 토큰](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison) 참조. 이 값을 증가시키면 [자동 압축](/ko/costs#reduce-token-usage)이 트리거되기 전에 사용 가능한 효과적인 컨텍스트 윈도우가 감소합니다. |

112| `CLAUDE_CODE_MAX_RETRIES` | 실패한 API 요청을 재시도할 횟수를 재정의합니다(기본값: 10) |

113| `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` | 병렬로 실행할 수 있는 읽기 전용 도구 및 subagent의 최대 수(기본값: 10). 더 높은 값은 병렬 처리를 증가시키지만 더 많은 리소스를 소비합니다. |

114| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | stdio MCP 서버를 안전한 기본 환경과 서버의 구성된 `env`만으로 생성하려면 `1`로 설정합니다. 셸 환경을 상속하지 않습니다. |

115| `CLAUDE_CODE_NEW_INIT` | `/init`이 대화형 설정 흐름을 실행하도록 하려면 `1`로 설정합니다. 흐름은 코드베이스를 탐색하고 작성하기 전에 CLAUDE.md, skill 및 훅을 포함하여 생성할 파일을 묻습니다. 이 변수가 없으면 `/init`은 프롬프트 없이 자동으로 CLAUDE.md를 생성합니다. |

116| `CLAUDE_CODE_NO_FLICKER` | [전체 화면 렌더링](/ko/fullscreen)을 활성화하려면 `1`로 설정합니다. 이는 깜박임을 줄이고 긴 대화에서 메모리를 평탄하게 유지하는 연구 미리보기입니다. [`tui`](/ko/settings#available-settings) 설정과 동일합니다. `/tui fullscreen`으로도 전환할 수 있습니다. |

117| `CLAUDE_CODE_OAUTH_REFRESH_TOKEN` | Claude.ai 인증용 OAuth 새로 고침 토큰입니다. 설정하면 `claude auth login`이 브라우저를 열지 않고 이 토큰을 직접 교환합니다. `CLAUDE_CODE_OAUTH_SCOPES`가 필요합니다. 자동화된 환경에서 인증을 프로비저닝하는 데 유용합니다. |

118| `CLAUDE_CODE_OAUTH_SCOPES` | 새로 고침 토큰이 발급된 공백으로 구분된 OAuth 범위(예: `"user:profile user:inference user:sessions:claude_code"`). `CLAUDE_CODE_OAUTH_REFRESH_TOKEN`이 설정되면 필수입니다. |

119| `CLAUDE_CODE_OAUTH_TOKEN` | Claude.ai 인증용 OAuth 액세스 토큰입니다. `/login`의 대안으로 SDK 및 자동화된 환경에 사용됩니다. 키체인 저장 자격 증명보다 우선합니다. [`claude setup-token`](/ko/authentication#generate-a-long-lived-token)으로 생성합니다. |

120| `CLAUDE_CODE_OTEL_FLUSH_TIMEOUT_MS` | 보류 중인 OpenTelemetry 스팬을 플러시하는 타임아웃(밀리초)(기본값: 5000). [모니터링](/ko/monitoring-usage) 참조 |

121| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | 동적 OpenTelemetry 헤더를 새로 고치는 간격(밀리초)(기본값: 1740000 / 29분). [동적 헤더](/ko/monitoring-usage#dynamic-headers) 참조 |

122| `CLAUDE_CODE_OTEL_SHUTDOWN_TIMEOUT_MS` | 종료 시 OpenTelemetry 내보내기가 완료되는 타임아웃(밀리초)(기본값: 2000). 메트릭이 종료 시 삭제되면 증가시킵니다. [모니터링](/ko/monitoring-usage) 참조 |

123| `CLAUDE_CODE_PERFORCE_MODE` | Perforce 인식 쓰기 보호를 활성화하려면 `1`로 설정합니다. 설정하면 대상 파일이 소유자 쓰기 비트가 없으면 Edit, Write, NotebookEdit이 `p4 edit <file>` 힌트와 함께 실패합니다. Perforce는 `p4 edit`이 파일을 열 때까지 동기화된 파일에서 이를 지웁니다. 이는 Claude Code가 Perforce 변경 추적을 우회하지 않도록 방지합니다. |

124| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | 플러그인 루트 디렉토리를 재정의합니다. 이름과 달리 이는 캐시 자체가 아닌 부모 디렉토리를 설정합니다: 마켓플레이스 및 플러그인 캐시는 이 경로 아래의 하위 디렉토리에 있습니다. 기본값은 `~/.claude/plugins`입니다. |

125| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | 플러그인을 설치하거나 업데이트할 때 git 작업의 타임아웃(밀리초)(기본값: 120000). 큰 리포지토리 또는 느린 네트워크 연결의 경우 이 값을 증가시킵니다. [Git 작업 시간 초과](/ko/plugin-marketplaces#git-operations-time-out) 참조 |

126| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | `git pull`이 실패할 때 기존 마켓플레이스 캐시를 유지하려면 `1`로 설정합니다. 다시 복제하면 같은 방식으로 실패할 오프라인 또는 에어갭 환경에서 유용합니다. [오프라인 환경에서 마켓플레이스 업데이트 실패](/ko/plugin-marketplaces#marketplace-updates-fail-in-offline-environments) 참조 |

127| `CLAUDE_CODE_PLUGIN_SEED_DIR` | 하나 이상의 읽기 전용 플러그인 시드 디렉토리의 경로이며, Unix에서는 `:`로, Windows에서는 `;`로 구분됩니다. 이를 사용하여 사전 채워진 플러그인 디렉토리를 컨테이너 이미지에 번들로 제공합니다. Claude Code는 시작 시 이러한 디렉토리에서 마켓플레이스를 등록하고 다시 복제하지 않고 사전 캐시된 플러그인을 사용합니다. [컨테이너용 플러그인 사전 채우기](/ko/plugin-marketplaces#pre-populate-plugins-for-containers) 참조 |

128| `CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST` | Claude Code를 포함하고 대신 모델 공급자 라우팅을 관리하는 호스트 플랫폼에서 설정합니다. 설정하면 설정 파일의 `CLAUDE_CODE_USE_BEDROCK`, `ANTHROPIC_BASE_URL`, `ANTHROPIC_API_KEY`와 같은 공급자 선택, 엔드포인트, 인증 변수가 무시되므로 사용자 설정이 호스트의 라우팅을 재정의할 수 없습니다. Bedrock, Vertex, Foundry에 대한 자동 원격 분석 옵트아웃도 건너뛰므로 원격 분석은 표준 `DISABLE_TELEMETRY` 옵트아웃을 따릅니다. [API 공급자별 기본 동작](/ko/data-usage#default-behaviors-by-api-provider) 참조 |

129| `CLAUDE_CODE_PROXY_RESOLVES_HOSTS` | 호출자 대신 프록시가 DNS 해석을 수행하도록 허용하려면 `1`로 설정합니다. 프록시가 호스트명 해석을 처리해야 하는 환경에 대해 옵트인합니다. |

130| `CLAUDE_CODE_REMOTE` | Claude Code가 [클라우드 세션](/ko/claude-code-on-the-web)으로 실행 중일 때 자동으로 `true`로 설정됩니다. 훅 또는 설정 스크립트에서 이를 읽어 클라우드 환경에 있는지 감지합니다. |

131| `CLAUDE_CODE_REMOTE_SESSION_ID` | [클라우드 세션](/ko/claude-code-on-the-web)에서 현재 세션의 ID로 자동으로 설정됩니다. 세션 트랜스크립트로 다시 연결하는 링크를 구성하려면 이를 읽습니다. [세션으로 아티팩트 다시 연결](/ko/claude-code-on-the-web#link-artifacts-back-to-the-session) 참조 |

132| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | 이전 세션이 중간에 끝난 경우 자동으로 재개하려면 `1`로 설정합니다. SDK 모드에서 사용되므로 모델이 SDK가 프롬프트를 다시 전송할 필요 없이 계속됩니다. |

133| `CLAUDE_CODE_SCRIPT_CAPS` | `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`이 설정되었을 때 세션당 특정 스크립트를 호출할 수 있는 횟수를 제한하는 JSON 객체입니다. 키는 명령 텍스트에 대해 일치하는 부분 문자열입니다. 값은 정수 호출 제한입니다. 예를 들어 `{"deploy.sh": 2}`는 `deploy.sh`를 최대 2번 호출할 수 있습니다. 일치는 부분 문자열 기반이므로 `./scripts/deploy.sh $(evil)`과 같은 셸 확장 트릭도 여전히 제한에 포함됩니다. `xargs` 또는 `find -exec`을 통한 런타임 팬아웃은 감지되지 않습니다. 이는 심층 방어 제어입니다. |

134| `CLAUDE_CODE_SCROLL_SPEED` | [전체 화면 렌더링](/ko/fullscreen#mouse-wheel-scrolling)에서 마우스 휠 스크롤 배수를 설정합니다. 1부터 20까지의 값을 허용합니다. 터미널이 증폭 없이 노치당 하나의 휠 이벤트를 보내는 경우 `vim`과 일치하도록 `3`으로 설정합니다. |

135| `CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` | [SessionEnd](/ko/hooks#sessionend) 훅의 시간 예산(밀리초)을 재정의합니다. 세션 종료, `/clear`, 대화형 `/resume`을 통한 세션 전환에 적용됩니다. 기본적으로 예산은 1.5초이며, 설정 파일에서 구성된 가장 높은 훅별 `timeout`으로 자동으로 올라가며, 최대 60초입니다. 플러그인 제공 훅의 타임아웃은 예산을 올리지 않습니다. |

136| `CLAUDE_CODE_SHELL` | 자동 셸 감지를 재정의합니다. 로그인 셸이 선호하는 작업 셸과 다를 때 유용합니다(예: `bash` vs `zsh`). |

137| `CLAUDE_CODE_SHELL_PREFIX` | Claude Code가 생성하는 모든 셸 명령을 래핑할 명령 접두사: Bash 도구 호출, [훅](/ko/hooks) 명령, stdio [MCP 서버](/ko/mcp) 시작 명령. 로깅 또는 감사에 유용합니다. 예: `/path/to/logger.sh`를 설정하면 각 명령을 `/path/to/logger.sh <command>`로 실행합니다. |

138| `CLAUDE_CODE_SIMPLE` | 최소 시스템 프롬프트 및 Bash, 파일 읽기, 파일 편집 도구만으로 실행하려면 `1`로 설정합니다. `--mcp-config`의 MCP 도구는 계속 사용 가능합니다. 훅, skill, 플러그인, MCP 서버, 자동 메모리, CLAUDE.md의 자동 검색을 비활성화합니다. [`--bare`](/ko/headless#start-faster-with-bare-mode) CLI 플래그가 이를 설정합니다. |

139| `CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT` | Opus 4.7에서 최소 시스템 프롬프트 및 축소된 도구 설명을 사용하려면 `1`로 설정합니다. 다른 모델에는 효과가 없습니다. 전체 도구 세트, 훅, MCP 서버, CLAUDE.md 검색은 계속 활성화됩니다. |

140| `CLAUDE_CODE_SKIP_BEDROCK_AUTH` | Bedrock에 대한 AWS 인증을 건너뜁니다(예: LLM 게이트웨이를 사용할 때). |

141| `CLAUDE_CODE_SKIP_FOUNDRY_AUTH` | Microsoft Foundry에 대한 Azure 인증을 건너뜁니다(예: LLM 게이트웨이를 사용할 때). |

142| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | Bedrock Mantle에 대한 AWS 인증을 건너뜁니다(예: LLM 게이트웨이를 사용할 때). |

143| `CLAUDE_CODE_SKIP_PROMPT_HISTORY` | 프롬프트 기록 및 세션 트랜스크립트를 디스크에 쓰지 않으려면 `1`로 설정합니다. 이 변수로 시작된 세션은 `--resume`, `--continue` 또는 위쪽 화살표 기록에 나타나지 않습니다. 임시 스크립트 세션에 유용합니다. |

144| `CLAUDE_CODE_SKIP_VERTEX_AUTH` | Vertex에 대한 Google 인증을 건너뜁니다(예: LLM 게이트웨이를 사용할 때). |

145| `CLAUDE_CODE_SUBAGENT_MODEL` | [모델 구성](/ko/model-config) 참조 |

146| `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` | Anthropic 및 클라우드 공급자 자격 증명을 subprocess 환경(Bash 도구, 훅, MCP stdio 서버)에서 제거하려면 `1`로 설정합니다. 부모 Claude 프로세스는 API 호출을 위해 이러한 자격 증명을 유지하지만 자식 프로세스는 이를 읽을 수 없으므로 셸 확장을 통해 비밀을 유출하려는 프롬프트 주입 공격에 대한 노출을 줄입니다. Linux에서는 Bash subprocess를 격리된 PID 네임스페이스에서도 실행하므로 `/proc`을 통해 호스트 프로세스 환경을 읽을 수 없습니다. 부작용으로 `ps`, `pgrep`, `kill`은 호스트 프로세스를 보거나 신호할 수 없습니다. `allowed_non_write_users`가 구성되면 `claude-code-action`이 자동으로 이를 설정합니다. |

147| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL` | 비대화형 모드(`-p` 플래그)에서 첫 번째 쿼리 전에 플러그인 설치가 완료될 때까지 대기하려면 `1`로 설정합니다. 이 없으면 플러그인이 백그라운드에서 설치되고 첫 번째 턴에서 사용하지 못할 수 있습니다. `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS`와 결합하여 대기를 제한합니다. |

148| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` | 동기 플러그인 설치의 타임아웃(밀리초). 초과되면 Claude Code는 플러그인 없이 진행하고 오류를 기록합니다. 기본값 없음: 이 변수가 없으면 동기 설치는 완료될 때까지 대기합니다. |

149| `CLAUDE_CODE_SYNTAX_HIGHLIGHT` | diff 출력에서 구문 강조를 비활성화하려면 `false`로 설정합니다. 색상이 터미널 설정을 방해할 때 유용합니다. |

150| `CLAUDE_CODE_TASK_LIST_ID` | 세션 간에 작업 목록을 공유합니다. 여러 Claude Code 인스턴스에서 동일한 ID를 설정하여 공유 작업 목록에서 조정합니다. [작업 목록](/ko/interactive-mode#task-list) 참조 |

151| `CLAUDE_CODE_TEAM_NAME` | 이 팀원이 속한 에이전트 팀의 이름입니다. [에이전트 팀](/ko/agent-teams) 멤버에서 자동으로 설정됩니다. |

152| `CLAUDE_CODE_TMPDIR` | 내부 임시 파일에 사용되는 임시 디렉토리를 재정의합니다. Claude Code는 이 경로에 `/claude-{uid}/`(Unix) 또는 `/claude/`(Windows)를 추가합니다. 기본값: macOS의 경우 `/tmp`, Linux/Windows의 경우 `os.tmpdir()` |

153| `CLAUDE_CODE_TMUX_TRUECOLOR` | tmux 내에서 24비트 truecolor 출력을 허용하려면 `1`로 설정합니다. 기본적으로 `$TMUX`가 설정되면 Claude Code는 256색으로 제한합니다. tmux는 구성되지 않으면 truecolor 이스케이프 시퀀스를 통과하지 않기 때문입니다. `~/.tmux.conf`에 `set -ga terminal-overrides ',*:Tc'`를 추가한 후 이를 설정합니다. [터미널 구성](/ko/terminal-config)에서 다른 tmux 설정을 참조합니다. |

154| `CLAUDE_CODE_USE_BEDROCK` | [Bedrock](/ko/amazon-bedrock) 사용 |

155| `CLAUDE_CODE_USE_FOUNDRY` | [Microsoft Foundry](/ko/microsoft-foundry) 사용 |

156| `CLAUDE_CODE_USE_MANTLE` | Bedrock [Mantle 엔드포인트](/ko/amazon-bedrock#use-the-mantle-endpoint) 사용 |

157| `CLAUDE_CODE_USE_NATIVE_FILE_SEARCH` | Node.js 파일 API를 사용하여 사용자 정의 명령, subagent, 출력 스타일을 검색하려면 `1`로 설정합니다. 번들 ripgrep 바이너리를 사용할 수 없거나 환경에서 차단된 경우 이를 설정합니다. Grep 또는 파일 검색 도구에는 영향을 주지 않습니다. |

158| `CLAUDE_CODE_USE_POWERSHELL_TOOL` | PowerShell 도구를 제어합니다. Windows에서 Git Bash가 없으면 도구가 자동으로 활성화됩니다. `0`으로 설정하여 비활성화합니다. Windows에 Git Bash가 설치되어 있으면 도구가 점진적으로 롤아웃됩니다: 옵트인하려면 `1`로 설정하거나 옵트아웃하려면 `0`으로 설정합니다. Linux, macOS, WSL에서는 `1`로 설정하여 활성화합니다. PATH에 `pwsh`가 필요합니다. Windows에서 활성화되면 Claude는 Git Bash를 통해 라우팅하는 대신 PowerShell 명령을 기본적으로 실행할 수 있습니다. [PowerShell 도구](/ko/tools-reference#powershell-tool) 참조 |

159| `CLAUDE_CODE_USE_VERTEX` | [Vertex](/ko/google-vertex-ai) 사용 |

160| `CLAUDE_CONFIG_DIR` | 구성 디렉토리를 재정의합니다(기본값: `~/.claude`). 모든 설정, 자격 증명, 세션 기록 및 플러그인이 이 경로 아래에 저장됩니다. 여러 계정을 나란히 실행하는 데 유용합니다: 예를 들어 `alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'` |

161| `CLAUDE_ENABLE_BYTE_WATCHDOG` | 바이트 수준 스트리밍 유휴 감시견을 강제로 활성화하려면 `1`로 설정하거나, 강제로 비활성화하려면 `0`으로 설정합니다. 설정하지 않으면 감시견은 Anthropic API 연결에 대해 기본적으로 활성화됩니다. 바이트 감시견은 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`로 설정된 기간 동안 와이어에 바이트가 도착하지 않으면 연결을 중단합니다. 최소 5분이며 이벤트 수준 감시견과 독립적입니다. |

162| `CLAUDE_ENABLE_STREAM_WATCHDOG` | 이벤트 수준 스트리밍 유휴 감시견을 활성화하려면 `1`로 설정합니다. 기본적으로 꺼져 있습니다. Bedrock, Vertex, Foundry의 경우 이것이 유일한 유휴 감시견입니다. `CLAUDE_STREAM_IDLE_TIMEOUT_MS`로 타임아웃을 구성합니다. |

163| `CLAUDE_ENV_FILE` | Claude Code가 각 Bash 명령 전에 같은 셸 프로세스에서 실행하는 셸 스크립트의 경로이므로 파일의 내보내기가 명령에 표시됩니다. virtualenv 또는 conda 활성화를 명령 간에 유지하는 데 사용합니다. [SessionStart](/ko/hooks#persist-environment-variables), [Setup](/ko/hooks#setup), [CwdChanged](/ko/hooks#cwdchanged), [FileChanged](/ko/hooks#filechanged) 훅으로도 동적으로 채워집니다. |

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

165| `CLAUDE_STREAM_IDLE_TIMEOUT_MS` | 스트리밍 유휴 감시견이 정체된 연결을 닫기 전의 타임아웃(밀리초). 바이트 수준 및 이벤트 수준 감시견 모두에 대해 기본값 및 최소 `300000`(5분). 낮은 값은 확장 사고 일시 중지 및 프록시 버퍼링을 흡수하도록 자동으로 제한됩니다. 타사 공급자의 경우 `CLAUDE_ENABLE_STREAM_WATCHDOG=1`이 필요합니다. |

166| `DISABLE_AUTOUPDATER` | 자동 업데이트를 비활성화하려면 `1`로 설정합니다. 수동 `claude update`는 계속 작동합니다. `DISABLE_UPDATES`를 사용하여 둘 다 차단합니다. |

167| `DISABLE_AUTO_COMPACT` | 컨텍스트 제한에 접근할 때 자동 압축을 비활성화하려면 `1`로 설정합니다. 수동 `/compact` 명령은 계속 사용 가능합니다. 압축이 발생하는 시기를 명시적으로 제어하려는 경우 사용합니다. |

168| `DISABLE_COMPACT` | 자동 압축과 수동 `/compact` 명령을 포함한 모든 압축을 비활성화하려면 `1`로 설정합니다. |

169| `DISABLE_COST_WARNINGS` | 비용 경고 메시지를 비활성화하려면 `1`로 설정합니다. |

170| `DISABLE_DOCTOR_COMMAND` | `/doctor` 명령을 숨기려면 `1`로 설정합니다. 사용자가 설치 진단을 실행하지 않아야 하는 관리형 배포에 유용합니다. |

171| `DISABLE_ERROR_REPORTING` | Sentry 오류 보고를 거부하려면 `1`로 설정합니다. |

172| `DISABLE_EXTRA_USAGE_COMMAND` | 사용자가 속도 제한을 초과하여 추가 사용량을 구매할 수 있는 `/extra-usage` 명령을 숨기려면 `1`로 설정합니다. |

173| `DISABLE_FEEDBACK_COMMAND` | `/feedback` 명령을 비활성화하려면 `1`로 설정합니다. 이전 이름 `DISABLE_BUG_COMMAND`도 허용됩니다. |

174| `DISABLE_GROWTHBOOK` | GrowthBook 기능 플래그 가져오기를 비활성화하려면 `1`로 설정합니다. 모든 플래그에 대해 코드 기본값을 사용합니다. 원격 분석 이벤트 로깅은 `DISABLE_TELEMETRY`도 설정되지 않으면 계속됩니다. |

175| `DISABLE_INSTALLATION_CHECKS` | 설치 경고를 비활성화하려면 `1`로 설정합니다. 표준 설치의 문제를 숨길 수 있으므로 설치 위치를 수동으로 관리할 때만 사용합니다. |

176| `DISABLE_INSTALL_GITHUB_APP_COMMAND` | `/install-github-app` 명령을 숨기려면 `1`로 설정합니다. 타사 공급자(Bedrock, Vertex 또는 Foundry)를 사용할 때 이미 숨겨집니다. |

177| `DISABLE_INTERLEAVED_THINKING` | interleaved-thinking 베타 헤더 전송을 방지하려면 `1`로 설정합니다. LLM 게이트웨이 또는 공급자가 [interleaved thinking](https://platform.claude.com/docs/en/build-with-claude/extended-thinking#interleaved-thinking)을 지원하지 않을 때 유용합니다. |

178| `DISABLE_LOGIN_COMMAND` | `/login` 명령을 숨기려면 `1`로 설정합니다. API 키 또는 `apiKeyHelper`를 통해 인증이 외부에서 처리될 때 유용합니다. |

179| `DISABLE_LOGOUT_COMMAND` | `/logout` 명령을 숨기려면 `1`로 설정합니다. |

180| `DISABLE_PROMPT_CACHING` | 모든 모델에 대해 프롬프트 캐싱을 비활성화하려면 `1`로 설정합니다(모델별 설정보다 우선). |

181| `DISABLE_PROMPT_CACHING_HAIKU` | Haiku 모델에 대해 프롬프트 캐싱을 비활성화하려면 `1`로 설정합니다. |

182| `DISABLE_PROMPT_CACHING_OPUS` | Opus 모델에 대해 프롬프트 캐싱을 비활성화하려면 `1`로 설정합니다. |

183| `DISABLE_PROMPT_CACHING_SONNET` | Sonnet 모델에 대해 프롬프트 캐싱을 비활성화하려면 `1`로 설정합니다. |

184| `DISABLE_TELEMETRY` | Statsig 원격 분석을 거부하려면 `1`로 설정합니다(Statsig 이벤트에는 코드, 파일 경로 또는 bash 명령과 같은 사용자 데이터가 포함되지 않음). |

185| `DISABLE_UPDATES` | 수동 `claude update` 및 `claude install`을 포함한 모든 업데이트를 차단하려면 `1`로 설정합니다. `DISABLE_AUTOUPDATER`보다 더 엄격합니다. 자신의 채널을 통해 Claude Code를 배포하고 사용자가 자체 업데이트하지 않아야 할 때 사용합니다. |

186| `DISABLE_UPGRADE_COMMAND` | `/upgrade` 명령을 숨기려면 `1`로 설정합니다. |

187| `ENABLE_CLAUDEAI_MCP_SERVERS` | Claude Code에서 [claude.ai MCP 서버](/ko/mcp#use-mcp-servers-from-claude-ai)를 비활성화하려면 `false`로 설정합니다. 로그인한 사용자의 경우 기본적으로 활성화됩니다. |

188| `ENABLE_PROMPT_CACHING_1H` | API 키, [Bedrock](/ko/amazon-bedrock), [Vertex](/ko/google-vertex-ai), [Foundry](/ko/microsoft-foundry) 사용자를 위해 기본 5분 대신 1시간 프롬프트 캐시 TTL을 요청하려면 `1`로 설정합니다. 구독 사용자는 자동으로 1시간 TTL을 받습니다. 1시간 캐시 쓰기는 더 높은 요금으로 청구됩니다. |

189| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | 더 이상 사용되지 않음. 대신 `ENABLE_PROMPT_CACHING_1H` 사용 |

190| `ENABLE_TOOL_SEARCH` | [MCP 도구 검색](/ko/mcp#scale-with-mcp-tool-search)을 제어합니다. 설정 해제: 모든 MCP 도구는 기본적으로 연기되지만 Vertex AI에서 또는 `ANTHROPIC_BASE_URL`이 비자사 호스트를 가리킬 때 미리 로드됩니다. 값: `true`(프록시 포함 항상 연기), `auto`(임계값 모드: 도구가 컨텍스트의 10% 이내에 맞으면 미리 로드), `auto:N`(사용자 정의 임계값, 예: 5%의 경우 `auto:5`), `false`(모두 미리 로드) |

191| `FALLBACK_FOR_ALL_PRIMARY_MODELS` | 모든 기본 모델에서 반복된 과부하 오류 후 [`--fallback-model`](/ko/cli-reference#cli-flags)로 폴백을 트리거하려면 비어 있지 않은 값으로 설정합니다. 기본적으로 Opus 모델만 폴백을 트리거합니다. |

192| `FORCE_AUTOUPDATE_PLUGINS` | `DISABLE_AUTOUPDATER`를 통해 주 자동 업데이터가 비활성화된 경우에도 플러그인 자동 업데이트를 강제하려면 `1`로 설정합니다. |

193| `FORCE_PROMPT_CACHING_5M` | 1시간 TTL이 적용되는 경우에도 5분 프롬프트 캐시 TTL을 강제하려면 `1`로 설정합니다. `ENABLE_PROMPT_CACHING_1H` 재정의 |

194| `HTTP_PROXY` | 네트워크 연결을 위한 HTTP 프록시 서버를 지정합니다. |

195| `HTTPS_PROXY` | 네트워크 연결을 위한 HTTPS 프록시 서버를 지정합니다. |

196| `IS_DEMO` | 데모 모드를 활성화하려면 `1`로 설정합니다: 헤더 및 `/status` 출력에서 이메일 및 조직 이름을 숨기고 온보딩을 건너뜁니다. 세션을 스트리밍하거나 녹화할 때 유용합니다. |

197| `MAX_MCP_OUTPUT_TOKENS` | MCP 도구 응답에서 허용되는 최대 토큰 수입니다. Claude Code는 출력이 10,000 토큰을 초과할 때 경고를 표시합니다. 도구가 [`anthropic/maxResultSizeChars`](/ko/mcp#raise-the-limit-for-a-specific-tool)를 선언하면 텍스트 내용에 대해 해당 문자 제한을 사용하지만, 해당 도구의 이미지 내용은 여전히 이 변수의 영향을 받습니다(기본값: 25000). |

198| `MAX_STRUCTURED_OUTPUT_RETRIES` | 비대화형 모드(`-p` 플래그)에서 모델의 응답이 [`--json-schema`](/ko/cli-reference#cli-flags)에 대한 유효성 검사에 실패할 때 재시도할 횟수입니다. 기본값은 5입니다. |

199| `MAX_THINKING_TOKENS` | [확장 사고](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) 토큰 예산을 재정의합니다. 상한은 모델의 [최대 출력 토큰](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison)에서 1을 뺀 값입니다. 사고를 완전히 비활성화하려면 `0`으로 설정합니다. [적응형 추론](/ko/model-config#adjust-effort-level)이 있는 모델에서는 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING`을 통해 적응형 추론이 비활성화되지 않으면 예산이 무시됩니다. |

200| `MCP_CLIENT_SECRET` | [사전 구성된 자격 증명](/ko/mcp#use-pre-configured-oauth-credentials)이 필요한 MCP 서버의 OAuth 클라이언트 시크릿입니다. `--client-secret`으로 서버를 추가할 때 대화형 프롬프트를 방지합니다. |

201| `MCP_CONNECTION_NONBLOCKING` | 비대화형 모드(`-p`)에서 MCP 연결 대기를 완전히 건너뛰려면 `true`로 설정합니다. MCP 도구가 필요하지 않은 스크립트 파이프라인에 유용합니다. 이 변수가 없으면 첫 번째 쿼리는 `--mcp-config` 서버 연결을 위해 최대 5초 동안 대기합니다. |

202| `MCP_OAUTH_CALLBACK_PORT` | [사전 구성된 자격 증명](/ko/mcp#use-pre-configured-oauth-credentials)으로 MCP 서버를 추가할 때 `--callback-port`의 대안으로 OAuth 리디렉션 콜백의 고정 포트입니다. |

203| `MCP_REMOTE_SERVER_CONNECTION_BATCH_SIZE` | 시작 중에 병렬로 연결할 원격 MCP 서버(HTTP/SSE)의 최대 수(기본값: 20) |

204| `MCP_SERVER_CONNECTION_BATCH_SIZE` | 시작 중에 병렬로 연결할 로컬 MCP 서버(stdio)의 최대 수(기본값: 3) |

205| `MCP_TIMEOUT` | MCP 서버 시작의 타임아웃(밀리초)(기본값: 30000, 또는 30초) |

206| `MCP_TOOL_TIMEOUT` | MCP 도구 실행의 타임아웃(밀리초)(기본값: 100000000, 약 28시간) |

207| `NO_PROXY` | 프록시를 우회하여 직접 발급될 요청의 도메인 및 IP 목록 |

208| `OTEL_LOG_RAW_API_BODIES` | 전체 Anthropic Messages API 요청 및 응답 JSON을 OpenTelemetry 로그 이벤트(`api_request_body`, `api_response_body`)로 내보냅니다. 60KB에서 잘린 인라인 본문의 경우 `1`로 설정하거나, 잘리지 않은 본문을 디스크에 쓰고 `body_ref` 경로를 내보내려면 `file:<dir>`로 설정합니다. 기본적으로 비활성화됩니다. 본문에는 전체 대화 기록이 포함됩니다. [모니터링](/ko/monitoring-usage#api-request-body-event) 참조 |

209| `OTEL_LOG_TOOL_CONTENT` | 도구 입력 및 출력 내용을 OpenTelemetry 스팬 이벤트에 포함하려면 `1`로 설정합니다. 민감한 데이터를 보호하기 위해 기본적으로 비활성화됩니다. [모니터링](/ko/monitoring-usage) 참조 |

210| `OTEL_LOG_TOOL_DETAILS` | 도구 입력 인수, MCP 서버 이름, 도구 세부 정보를 OpenTelemetry 추적 및 로그에 포함하려면 `1`로 설정합니다. PII를 보호하기 위해 기본적으로 비활성화됩니다. [모니터링](/ko/monitoring-usage) 참조 |

211| `OTEL_LOG_USER_PROMPTS` | 사용자 프롬프트 텍스트를 OpenTelemetry 추적 및 로그에 포함하려면 `1`로 설정합니다. 기본적으로 비활성화됩니다(프롬프트는 수정됨). [모니터링](/ko/monitoring-usage) 참조 |

212| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 메트릭 속성에서 계정 UUID를 제외하려면 `false`로 설정합니다(기본값: 포함). [모니터링](/ko/monitoring-usage) 참조 |

213| `OTEL_METRICS_INCLUDE_SESSION_ID` | 메트릭 속성에서 세션 ID를 제외하려면 `false`로 설정합니다(기본값: 포함). [모니터링](/ko/monitoring-usage) 참조 |

214| `OTEL_METRICS_INCLUDE_VERSION` | 메트릭 속성에 Claude Code 버전을 포함하려면 `true`로 설정합니다(기본값: 제외). [모니터링](/ko/monitoring-usage) 참조 |

215| `SLASH_COMMAND_TOOL_CHAR_BUDGET` | [Skill 도구](/ko/skills#control-who-invokes-a-skill)에 표시되는 skill 메타데이터의 문자 예산을 재정의합니다. 예산은 컨텍스트 윈도우의 1%에서 동적으로 확장되며, 8,000자의 폴백이 있습니다. 이전 버전과의 호환성을 위해 레거시 이름이 유지됩니다. |

216| `TASK_MAX_OUTPUT_LENGTH` | 잘림 전 [subagent](/ko/sub-agents) 출력의 최대 문자 수(기본값: 32000, 최대: 160000). 잘림 시 전체 출력이 디스크에 저장되고 경로가 잘린 응답에 포함됩니다. |

217| `USE_BUILTIN_RIPGREP` | Claude Code에 포함된 `rg` 대신 시스템 설치 `rg`를 사용하려면 `0`으로 설정합니다. |

218| `VERTEX_REGION_CLAUDE_3_5_HAIKU` | Vertex AI 사용 시 Claude 3.5 Haiku의 리전을 재정의합니다. |

219| `VERTEX_REGION_CLAUDE_3_5_SONNET` | Vertex AI 사용 시 Claude 3.5 Sonnet의 리전을 재정의합니다. |

220| `VERTEX_REGION_CLAUDE_3_7_SONNET` | Vertex AI 사용 시 Claude 3.7 Sonnet의 리전을 재정의합니다. |

221| `VERTEX_REGION_CLAUDE_4_0_OPUS` | Vertex AI 사용 시 Claude 4.0 Opus의 리전을 재정의합니다. |

222| `VERTEX_REGION_CLAUDE_4_0_SONNET` | Vertex AI 사용 시 Claude 4.0 Sonnet의 리전을 재정의합니다. |

223| `VERTEX_REGION_CLAUDE_4_1_OPUS` | Vertex AI 사용 시 Claude 4.1 Opus의 리전을 재정의합니다. |

224| `VERTEX_REGION_CLAUDE_4_5_OPUS` | Vertex AI 사용 시 Claude Opus 4.5의 리전을 재정의합니다. |

225| `VERTEX_REGION_CLAUDE_4_5_SONNET` | Vertex AI 사용 시 Claude Sonnet 4.5의 리전을 재정의합니다. |

226| `VERTEX_REGION_CLAUDE_4_6_OPUS` | Vertex AI 사용 시 Claude Opus 4.6의 리전을 재정의합니다. |

227| `VERTEX_REGION_CLAUDE_4_6_SONNET` | Vertex AI 사용 시 Claude Sonnet 4.6의 리전을 재정의합니다. |

228| `VERTEX_REGION_CLAUDE_4_7_OPUS` | Vertex AI 사용 시 Claude Opus 4.7의 리전을 재정의합니다. |

229| `VERTEX_REGION_CLAUDE_HAIKU_4_5` | Vertex AI 사용 시 Claude Haiku 4.5의 리전을 재정의합니다. |

230 

231표준 OpenTelemetry 내보내기 변수(`OTEL_METRICS_EXPORTER`, `OTEL_LOGS_EXPORTER`, `OTEL_EXPORTER_OTLP_ENDPOINT`, `OTEL_EXPORTER_OTLP_PROTOCOL`, `OTEL_EXPORTER_OTLP_HEADERS`, `OTEL_METRIC_EXPORT_INTERVAL`, `OTEL_RESOURCE_ATTRIBUTES` 및 신호별 변형)도 지원됩니다. 구성 세부 정보는 [모니터링](/ko/monitoring-usage)을 참조합니다.

232 

233## 참고 항목

234 

235* [설정](/ko/settings): 모든 세션에 적용되도록 `settings.json`에서 환경 변수를 구성합니다.

236* [CLI 참조](/ko/cli-reference): 실행 시간 플래그

237* [네트워크 구성](/ko/network-config): 프록시 및 TLS 설정

238* [모니터링](/ko/monitoring-usage): OpenTelemetry 구성

errors.md +536 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 오류 참조

6 

7> Claude Code 런타임 오류 메시지를 조회하고 각 오류의 의미와 해결 방법을 확인합니다.

8 

9이 페이지에는 Claude Code가 표시하는 런타임 오류와 각 오류에서 복구하는 방법, 그리고 오류 없이 응답이 이상해 보일 때 확인할 사항이 나열되어 있습니다. `command not found` 또는 설정 중 TLS 오류와 같은 설치 오류는 [문제 해결](/ko/troubleshoot-install)을 참조하십시오.

10 

11이러한 오류 및 복구 명령은 CLI, [데스크톱 앱](/ko/desktop), [웹의 Claude Code](/ko/claude-code-on-the-web)에 모두 적용됩니다. 세 가지 모두 동일한 Claude Code CLI를 래핑하기 때문입니다. 표면별 문제는 해당 표면의 페이지에 있는 문제 해결 섹션을 참조하십시오.

12 

13<Note>

14 Claude Code는 모델 응답을 위해 Claude API를 호출하므로 대부분의 런타임 오류는 기본 API 오류 코드에 매핑됩니다. 이 페이지에서는 Claude Code 내에서 각 오류의 의미와 복구 방법을 다룹니다. 원본 HTTP 상태 코드 정의는 [Claude Platform 오류 참조](https://platform.claude.com/docs/en/api/errors)를 참조하십시오.

15</Note>

16 

17## 오류 찾기

18 

19터미널에 표시되는 메시지를 아래 섹션과 일치시킵니다.

20 

21| 메시지 | 섹션 |

22| :----------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------- |

23| `API Error: 500 ... Internal server error` | [서버 오류](#api-error-500-internal-server-error) |

24| `API Error: Repeated 529 Overloaded errors` | [서버 오류](#api-error-repeated-529-overloaded-errors) |

25| `Request timed out` | [서버 오류](#request-timed-out) 또는 메시지에 인터넷 연결이 언급된 경우 [네트워크](#unable-to-connect-to-api) |

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

27| `You've hit your session limit` / `You've hit your weekly limit` | [사용 제한](#youve-hit-your-session-limit) |

28| `Server is temporarily limiting requests` | [사용 제한](#server-is-temporarily-limiting-requests) |

29| `Request rejected (429)` | [사용 제한](#request-rejected-429) |

30| `Credit balance is too low` | [사용 제한](#credit-balance-is-too-low) |

31| `Not logged in · Please run /login` | [인증](#not-logged-in) |

32| `Invalid API key` | [인증](#invalid-api-key) |

33| `This organization has been disabled` | [인증](#this-organization-has-been-disabled) |

34| `OAuth token revoked` / `OAuth token has expired` | [인증](#oauth-token-revoked-or-expired) |

35| `does not meet scope requirement user:profile` | [인증](#oauth-scope-requirement) |

36| `Unable to connect to API` | [네트워크](#unable-to-connect-to-api) |

37| `SSL certificate verification failed` | [네트워크](#ssl-certificate-errors) |

38| `Prompt is too long` | [요청 오류](#prompt-is-too-long) |

39| `Error during compaction: Conversation too long` | [요청 오류](#error-during-compaction-conversation-too-long) |

40| `Request too large` | [요청 오류](#request-too-large) |

41| `Image was too large` | [요청 오류](#image-was-too-large) |

42| `PDF too large` / `PDF is password protected` | [요청 오류](#pdf-errors) |

43| `Extra inputs are not permitted` | [요청 오류](#extra-inputs-are-not-permitted) |

44| `There's an issue with the selected model` | [요청 오류](#theres-an-issue-with-the-selected-model) |

45| `Claude Opus is not available with the Claude Pro plan` | [요청 오류](#claude-opus-is-not-available-with-the-claude-pro-plan) |

46| `thinking.type.enabled is not supported for this model` | [요청 오류](#thinking-type-enabled-is-not-supported-for-this-model) |

47| `max_tokens must be greater than thinking.budget_tokens` | [요청 오류](#thinking-budget-exceeds-output-limit) |

48| `API Error: 400 due to tool use concurrency issues` | [요청 오류](#tool-use-or-thinking-block-mismatch) |

49| 응답 품질이 평소보다 낮아 보임 | [응답 품질](#responses-seem-lower-quality-than-usual) |

50 

51## 자동 재시도

52 

53Claude Code는 오류를 표시하기 전에 일시적 오류를 재시도합니다. 서버 오류, 과부하 응답, 요청 시간 초과, 임시 429 스로틀, 끊어진 연결은 모두 지수 백오프를 사용하여 최대 10회 재시도됩니다. 재시도하는 동안 스피너는 `Retrying in Ns · attempt x/y` 카운트다운을 표시합니다.

54 

55이 페이지의 오류 중 하나를 보면 해당 재시도가 이미 소진되었습니다. 두 가지 환경 변수로 동작을 조정할 수 있습니다.

56 

57| 변수 | 기본값 | 효과 |

58| :---------------------------------------- | :----- | :---------------------------------------------------------- |

59| [`CLAUDE_CODE_MAX_RETRIES`](/ko/env-vars) | 10 | 재시도 횟수입니다. 스크립트에서 오류를 더 빨리 표시하려면 낮추고, 더 긴 인시던트를 기다리려면 높입니다. |

60| [`API_TIMEOUT_MS`](/ko/env-vars) | 600000 | 요청당 시간 초과(밀리초)입니다. 느린 네트워크 또는 프록시의 경우 높입니다. |

61 

62## 서버 오류

63 

64이러한 오류는 계정이나 요청이 아닌 Anthropic 인프라에서 발생합니다.

65 

66### API Error: 500 Internal server error

67 

68Claude Code는 모든 5xx 상태에 대해 원본 API 응답 본문을 표시합니다. 아래 예제는 500 응답을 보여줍니다.

69 

70```text theme={null}

71API Error: 500 {"type":"error","error":{"type":"api_error","message":"Internal server error"}} · check status.claude.com

72```

73 

74이는 API 내부의 예기치 않은 오류를 나타냅니다. 프롬프트, 설정 또는 계정으로 인한 것이 아닙니다.

75 

76**할 일:**

77 

78* [status.claude.com](https://status.claude.com)에서 활성 인시던트 확인

79* 1분 기다린 후 메시지를 다시 보냅니다. 원본 메시지는 여전히 대화에 있으므로 긴 프롬프트의 경우 전체를 다시 붙여넣는 대신 `try again`을 입력할 수 있습니다.

80* 게시된 인시던트가 없는데도 오류가 지속되면 `/feedback`을 실행하여 Anthropic이 요청 세부 정보로 조사할 수 있도록 합니다. 제공자에서 `/feedback`을 사용할 수 없는 경우 [오류 보고](#report-an-error)를 참조하십시오.

81 

82### API Error: Repeated 529 Overloaded errors

83 

84API가 모든 사용자에게 일시적으로 용량이 가득 찼습니다. Claude Code는 이 메시지를 표시하기 전에 이미 여러 번 재시도했습니다.

85 

86```text theme={null}

87API Error: Repeated 529 Overloaded errors · check status.claude.com

88```

89 

90529는 사용 제한이 아니며 할당량에 대해 계산되지 않습니다.

91 

92**할 일:**

93 

94* [status.claude.com](https://status.claude.com)에서 용량 공지 확인

95* 몇 분 후 다시 시도

96* `/model`을 실행하고 다른 모델로 전환하여 계속 작업합니다. 용량은 모델별로 추적되기 때문입니다. Claude Code는 한 모델이 특히 높은 부하를 받을 때 이를 수행하도록 프롬프트합니다. 예를 들어 `Opus is experiencing high load, please use /model to switch to Sonnet`.

97 

98### Request timed out

99 

100API가 연결 기한 전에 응답하지 않았습니다.

101 

102```text theme={null}

103Request timed out

104```

105 

106이는 높은 부하 기간 또는 매우 큰 응답이 생성될 때 발생할 수 있습니다. 기본 요청 시간 초과는 10분입니다.

107 

108**할 일:**

109 

110* 요청 재시도

111* 장기 실행 작업의 경우 작업을 더 작은 프롬프트로 나눕니다.

112* 느린 네트워크 또는 프록시가 원인인 경우 [자동 재시도](#automatic-retries)에 설명된 대로 `API_TIMEOUT_MS`를 높입니다.

113* 시간 초과가 자주 발생하고 네트워크가 정상인 경우 아래 [네트워크 및 연결 오류](#network-and-connection-errors)를 참조하십시오.

114 

115### Auto mode cannot determine the safety of an action

116 

117[자동 모드](/ko/permission-modes#eliminate-prompts-with-auto-mode)가 작업을 분류하는 데 사용하는 모델이 과부하 상태이므로 자동 모드가 확인 없이 승인하는 대신 작업을 차단했습니다.

118 

119```text theme={null}

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

121```

122 

123작업 디렉토리 내의 읽기, 검색 및 편집은 분류기를 건너뛰므로 중단 중에도 계속 작동합니다.

124 

125**할 일:**

126 

127* 몇 초 후 재시도합니다. Claude는 동일한 메시지를 보고 일반적으로 자동으로 재시도합니다.

128* 재시도가 계속 실패하면 읽기 전용 작업을 계속하고 나중에 차단된 작업으로 돌아갑니다.

129* 이는 일시적이며 [자동 모드 적격성](/ko/permission-modes#eliminate-prompts-with-auto-mode)과 무관합니다. 설정을 변경할 필요가 없습니다.

130 

131## 사용 제한

132 

133이러한 오류는 계정 또는 플랜에 연결된 할당량에 도달했음을 의미합니다. 이는 모든 사람에게 영향을 미치는 [서버 오류](#server-errors)와는 다릅니다.

134 

135### You've hit your session limit

136 

137구독 플랜에는 롤링 사용 허용량이 포함됩니다. 소진되면 다음 메시지 중 하나가 표시됩니다.

138 

139```text theme={null}

140You've hit your session limit · resets 3:45pm

141You've hit your weekly limit · resets Mon 12:00am

142You've hit your Opus limit · resets 3:45pm

143```

144 

145Claude Code는 메시지에 표시된 재설정 시간까지 추가 요청을 차단합니다.

146 

147**할 일:**

148 

149* 오류에 표시된 재설정 시간을 기다립니다.

150* `/usage`를 실행하여 플랜 제한 및 재설정 시간을 확인합니다.

151* `/extra-usage`를 실행하여 Pro 및 Max에서 추가 사용을 구매하거나 Team 및 Enterprise에서 관리자에게 요청합니다. [유료 플랜에 대한 추가 사용](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans)을 참조하여 청구 방식을 확인하십시오.

152* 더 높은 기본 제한을 위해 플랜을 업그레이드하려면 [claude.com/pricing](https://claude.com/pricing)을 참조하십시오.

153 

154제한에 도달하기 전에 남은 허용량을 확인하려면 `rate_limits` 필드를 [사용자 정의 상태 줄](/ko/statusline#rate-limit-usage)에 추가하거나 데스크톱 앱에서 모델 선택기 옆의 [사용 링](/ko/desktop#check-usage)을 클릭합니다.

155 

156### Server is temporarily limiting requests

157 

158API가 플랜 할당량과 무관한 단기 스로틀을 적용했습니다.

159 

160```text theme={null}

161API Error: Server is temporarily limiting requests (not your usage limit)

162```

163 

164이는 표시되기 전에 [자동으로 재시도](#automatic-retries)됩니다.

165 

166**할 일:**

167 

168* 잠시 기다린 후 다시 시도합니다.

169* 지속되면 [status.claude.com](https://status.claude.com)을 확인합니다.

170 

171### Request rejected (429)

172 

173API 키, Amazon Bedrock 프로젝트 또는 Google Vertex AI 프로젝트에 대해 구성된 속도 제한에 도달했습니다.

174 

175```text theme={null}

176API Error: Request rejected (429) · this may be a temporary capacity issue

177```

178 

179**할 일:**

180 

181* `/status`를 실행하고 활성 자격 증명이 예상한 것인지 확인합니다. 환경의 잘못된 `ANTHROPIC_API_KEY`가 구독 대신 저가형 키를 통해 요청을 라우팅할 수 있습니다.

182* 제공자 콘솔에서 활성 제한을 확인하고 필요한 경우 더 높은 계층을 요청합니다.

183* Anthropic API 키의 경우 [속도 제한 참조](https://platform.claude.com/docs/en/api/rate-limits)에서 계층이 작동하는 방식과 워크스페이스별 상한을 설정하는 방법을 참조하십시오.

184* 동시성 감소: [`CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY`](/ko/env-vars)를 낮추고, 많은 병렬 서브에이전트 실행을 피하거나, 대량 스크립팅 실행을 위해 `/model`로 더 작은 모델로 전환합니다.

185 

186### Credit balance is too low

187 

188Console 조직이 선불 크레딧을 모두 사용했습니다.

189 

190```text theme={null}

191Credit balance is too low

192```

193 

194**할 일:**

195 

196* [platform.claude.com/settings/billing](https://platform.claude.com/settings/billing)에서 크레딧을 추가하고 자동 재로드를 활성화하여 잔액이 0에 도달하기 전에 자동으로 충전되도록 합니다.

197* Pro, Max, Team 또는 Enterprise 플랜이 있는 경우 `/login`으로 구독 인증으로 전환합니다.

198* Console에서 워크스페이스별 지출 상한을 설정하여 단일 프로젝트가 조직 잔액을 소진하지 않도록 합니다. [비용 효율적으로 관리](/ko/costs)를 참조하십시오.

199 

200## 인증 오류

201 

202이러한 오류는 Claude Code가 API에 대한 신원을 증명할 수 없음을 의미합니다. 언제든지 `/status`를 실행하여 현재 활성 자격 증명을 확인합니다.

203 

204### Not logged in

205 

206이 세션에 유효한 자격 증명이 없습니다.

207 

208```text theme={null}

209Not logged in · Please run /login

210```

211 

212**할 일:**

213 

214* `/login`을 실행하여 Claude 구독 또는 Console 계정으로 인증합니다.

215* 환경 변수가 인증할 것으로 예상한 경우 `ANTHROPIC_API_KEY`가 설정되어 있고 `claude`를 시작한 셸에서 내보내졌는지 확인합니다.

216* 대화형 로그인이 불가능한 CI 또는 자동화의 경우 시작 시 키를 가져오는 [`apiKeyHelper`](/ko/settings#available-settings) 스크립트를 구성합니다.

217* [인증 우선순위](/ko/authentication#authentication-precedence)를 참조하여 여러 자격 증명이 있을 때 어느 것이 우선하는지 이해합니다.

218 

219반복적으로 로그인하라는 메시지가 표시되면 시스템 시계 및 macOS Keychain 수정을 위해 [로그인되지 않음 또는 토큰 만료](/ko/troubleshoot-install#not-logged-in-or-token-expired)를 참조하십시오.

220 

221### Invalid API key

222 

223`ANTHROPIC_API_KEY` 환경 변수 또는 `apiKeyHelper` 스크립트가 API가 거부한 키를 반환했습니다.

224 

225```text theme={null}

226Invalid API key · Fix external API key

227```

228 

229**할 일:**

230 

231* 오타를 확인하고 [Console](https://platform.claude.com/settings/keys)에서 키가 취소되지 않았는지 확인합니다.

232* 동일한 셸에서 `env | grep ANTHROPIC`을 실행합니다. direnv, dotenv 셸 플러그인, IDE 터미널과 같은 도구는 명시적으로 설정하지 않고도 프로젝트의 `.env` 파일에서 오래된 키를 로드할 수 있습니다.

233* `ANTHROPIC_API_KEY`를 설정 해제하고 `/login`을 실행하여 대신 구독 인증을 사용합니다.

234* 키가 [`apiKeyHelper`](/ko/settings#available-settings) 스크립트에서 오는 경우 스크립트를 직접 실행하여 stdout에 유효한 키를 인쇄하는지 확인합니다.

235* `/status`를 실행하여 Claude Code가 실제로 사용 중인 자격 증명 소스를 확인합니다.

236 

237### This organization has been disabled

238 

239비활성화된 Console 조직의 오래된 `ANTHROPIC_API_KEY`가 구독 로그인을 재정의하고 있습니다.

240 

241```text theme={null}

242Your ANTHROPIC_API_KEY belongs to a disabled organization · Unset the environment variable to use your other credentials

243API Error: 400 ... This organization has been disabled.

244```

245 

246환경 변수는 `/login`보다 우선하므로 셸 프로필에서 내보내거나 `.env` 파일에서 로드된 키는 작동하는 Pro 또는 Max 구독이 있어도 사용됩니다. 비대화형 모드(`-p`)에서는 키가 있을 때 항상 사용됩니다.

247 

248**할 일:**

249 

250* 현재 셸에서 `ANTHROPIC_API_KEY`를 설정 해제하고 셸 프로필에서 제거한 후 `claude`를 다시 시작합니다.

251* 그 후 `/status`를 실행하여 활성 자격 증명이 구독인지 확인합니다.

252* 환경 변수가 설정되지 않았는데도 오류가 지속되면 비활성화된 조직이 `/login`에 연결된 것입니다. 지원팀에 문의하거나 다른 계정으로 로그인합니다.

253 

254### OAuth token revoked or expired

255 

256저장된 로그인이 더 이상 유효하지 않습니다. 취소된 토큰은 어디서나 로그아웃했거나 관리자가 액세스를 제거했음을 의미합니다. 만료된 토큰은 자동 새로 고침이 세션 중에 실패했음을 의미합니다.

257 

258```text theme={null}

259OAuth token revoked · Please run /login

260OAuth token has expired · Please run /login

261API Error: 401 ... authentication_error

262```

263 

264**할 일:**

265 

266* `/login`을 실행하여 다시 로그인합니다.

267* 동일한 세션 내에서 재인증 후 오류가 반환되면 먼저 `/logout`을 실행하여 저장된 토큰을 완전히 지운 후 `/login`을 실행합니다.

268* 시작 간 반복적인 로그인 프롬프트의 경우 [문제 해결](/ko/troubleshoot-install#not-logged-in-or-token-expired)의 시스템 시계 및 macOS Keychain 확인을 참조하십시오.

269* `403 Forbidden` 및 OAuth 브라우저 문제를 포함한 기타 오류는 [로그인 및 인증](/ko/troubleshoot-install#login-and-authentication)을 참조하십시오.

270 

271### OAuth scope requirement

272 

273저장된 토큰은 최신 기능이 필요한 권한 범위보다 앞서 있습니다. 이는 `/usage` 및 상태 줄 사용 표시기에서 가장 자주 표시됩니다.

274 

275```text theme={null}

276OAuth token does not meet scope requirement: user:profile

277```

278 

279**할 일:**

280 

281* `/login`을 실행하여 현재 범위로 새 토큰을 발급합니다. 먼저 로그아웃할 필요가 없습니다.

282 

283## 네트워크 및 연결 오류

284 

285이러한 오류는 Claude Code가 API에 전혀 도달할 수 없음을 의미합니다. 거의 항상 Anthropic 인프라가 아닌 로컬 네트워크, 프록시 또는 방화벽에서 발생합니다.

286 

287### Unable to connect to API

288 

289API에 대한 TCP 연결이 실패했거나 완료되지 않았습니다.

290 

291```text theme={null}

292Unable to connect to API. Check your internet connection

293Unable to connect to API (ECONNREFUSED)

294Unable to connect to API (ECONNRESET)

295Unable to connect to API (ETIMEDOUT)

296fetch failed

297Request timed out. Check your internet connection and proxy settings

298```

299 

300일반적인 원인으로는 인터넷 액세스 없음, `api.anthropic.com`을 차단하는 VPN, 또는 구성되지 않은 필수 회사 프록시가 있습니다.

301 

302**할 일:**

303 

304* 동일한 셸에서 `curl -I https://api.anthropic.com`을 실행하여 API 호스트에 도달할 수 있는지 확인합니다. Windows PowerShell에서는 `curl.exe -I https://api.anthropic.com`을 사용하여 기본 제공 `Invoke-WebRequest` 별칭이 사용되지 않도록 합니다.

305* 회사 프록시 뒤에 있는 경우 Claude Code를 시작하기 전에 `HTTPS_PROXY`를 설정하고 [네트워크 구성](/ko/network-config)을 참조하십시오.

306* LLM 게이트웨이 또는 릴레이를 통해 라우팅하는 경우 [`ANTHROPIC_BASE_URL`](/ko/env-vars)을 해당 주소로 설정합니다. 설정은 [LLM 게이트웨이 구성](/ko/llm-gateway)을 참조하십시오.

307* 방화벽이 [네트워크 액세스 요구 사항](/ko/network-config#network-access-requirements)에 나열된 호스트를 허용하는지 확인합니다.

308* 간헐적 오류는 [자동으로 재시도](#automatic-retries)됩니다. 지속적인 오류는 로컬 네트워크 문제를 나타냅니다.

309 

310`curl`이 성공하지만 Claude Code가 여전히 실패하면 원인은 일반적으로 네트워크 자체가 아닌 Node.js와 네트워크 사이의 무언가입니다.

311 

312* Linux 및 WSL에서 `/etc/resolv.conf`에서 도달할 수 없는 네임서버를 확인합니다. 특히 WSL은 호스트에서 손상된 리졸버를 상속할 수 있습니다.

313* macOS에서 연결이 끊어지거나 제거된 VPN 클라이언트는 터널 인터페이스 또는 라우팅 규칙을 남길 수 있습니다. `ifconfig`에서 오래된 `utun` 인터페이스를 확인하고 시스템 설정에서 VPN의 네트워크 확장을 제거합니다.

314* Docker Desktop 및 유사한 컨테이너 런타임은 아웃바운드 트래픽을 가로챌 수 있습니다. 이를 종료하고 재시도하여 이를 배제합니다.

315 

316### SSL certificate errors

317 

318네트워크의 프록시 또는 보안 어플라이언스가 자체 인증서로 TLS 트래픽을 가로채고 있으며 Node.js가 이를 신뢰하지 않습니다.

319 

320```text theme={null}

321Unable to connect to API: SSL certificate verification failed. Check your proxy or corporate SSL certificates

322Unable to connect to API: Self-signed certificate detected

323```

324 

325**할 일:**

326 

327* 조직의 CA 번들을 내보내고 `NODE_EXTRA_CA_CERTS=/path/to/ca-bundle.pem`으로 Node를 가리킵니다.

328* 전체 설정 지침은 [네트워크 구성](/ko/network-config#custom-ca-certificates)을 참조하십시오.

329* 인증서 검증을 완전히 비활성화하는 `NODE_TLS_REJECT_UNAUTHORIZED=0`을 설정하지 마십시오.

330 

331## 요청 오류

332 

333이러한 오류는 API가 요청을 수신했지만 내용을 거부했음을 의미합니다.

334 

335### Prompt is too long

336 

337대화 및 첨부 파일이 모델의 컨텍스트 윈도우를 초과합니다.

338 

339```text theme={null}

340Prompt is too long

341```

342 

343**할 일:**

344 

345* `/compact`를 실행하여 이전 턴을 요약하고 공간을 확보하거나 `/clear`를 실행하여 새로 시작합니다.

346* `/context`를 실행하여 윈도우를 소비하는 것의 분석을 확인합니다. 시스템 프롬프트, 도구, 메모리 파일, 메시지입니다.

347* `/mcp disable <name>`으로 사용하지 않는 MCP 서버를 비활성화하여 컨텍스트에서 도구 정의를 제거합니다.

348* 큰 `CLAUDE.md` 메모리 파일을 자르거나 지침을 [경로 범위 규칙](/ko/memory#path-specific-rules)으로 이동하여 관련이 있을 때만 로드합니다.

349* 서브에이전트는 부모 세션에서 모든 MCP 도구 정의를 상속하므로 첫 번째 턴 전에 컨텍스트 윈도우를 채울 수 있습니다. 서브에이전트를 생성하기 전에 사용하지 않는 MCP 서버를 비활성화합니다.

350* 자동 압축은 기본적으로 켜져 있으며 일반적으로 이 오류를 방지합니다. [`DISABLE_AUTO_COMPACT`](/ko/env-vars)를 설정한 경우 다시 활성화하거나 윈도우가 가득 차기 전에 `/compact`를 수동으로 실행합니다.

351 

352[컨텍스트 윈도우 탐색](/ko/context-window)을 참조하여 컨텍스트가 어떻게 채워지는지 대화형으로 확인합니다.

353 

354### Error during compaction: Conversation too long

355 

356`/compact` 자체가 실패했습니다. 생성하는 요약을 보유할 충분한 여유 컨텍스트가 없기 때문입니다.

357 

358```text theme={null}

359Error during compaction: Conversation too long. Press esc twice to go up a few messages and try again.

360```

361 

362이는 윈도우가 자동 압축이 트리거되는 순간 이미 가득 차 있거나 `Prompt is too long`을 본 후 `/compact`를 실행할 때 발생할 수 있습니다.

363 

364**할 일:**

365 

366* Esc를 두 번 눌러 메시지 목록을 열고 몇 턴 뒤로 이동합니다. 이는 컨텍스트에서 가장 최근 메시지를 제거합니다. 그런 다음 `/compact`를 다시 실행합니다.

367* 뒤로 이동해도 충분한 공간이 확보되지 않으면 `/clear`를 실행하여 새 세션을 시작합니다. 이전 대화는 보존되며 `/resume`으로 다시 열 수 있습니다.

368 

369### Request too large

370 

371원본 요청 본문이 토큰화 전에 API의 바이트 제한을 초과했습니다. 일반적으로 큰 붙여넣은 파일 또는 첨부 파일 때문입니다.

372 

373```text theme={null}

374Request too large (max 30 MB). Double press esc to go back and remove or shrink the attached content.

375```

376 

377이는 [컨텍스트 윈도우 제한](#prompt-is-too-long)과 별개인 HTTP 요청의 크기 제한입니다.

378 

379**할 일:**

380 

381* Esc를 두 번 눌러 뒤로 이동하고 과도한 크기의 콘텐츠를 추가한 턴을 지나갑니다.

382* 콘텐츠를 붙여넣는 대신 경로로 큰 파일을 참조하여 Claude가 청크 단위로 읽을 수 있도록 합니다.

383* 이미지의 경우 아래 [Image was too large](#image-was-too-large)를 참조하십시오.

384 

385### Image was too large

386 

387붙여넣거나 첨부한 이미지가 API의 크기 또는 치수 제한을 초과합니다.

388 

389```text theme={null}

390Image was too large. Double press esc to go back and try again with a smaller image.

391API Error: 400 ... image dimensions exceed max allowed size

392```

393 

394이미지는 오류 후 대화 기록에 남아 있으므로 제거할 때까지 모든 후속 메시지가 동일한 오류로 실패합니다.

395 

396**할 일:**

397 

398* Esc를 두 번 눌러 뒤로 이동하고 이미지가 추가된 턴을 지나갑니다.

399* 붙여넣기 전에 이미지 크기를 조정합니다. API는 단일 이미지의 경우 가장 긴 가장자리에서 최대 8000픽셀을 허용하거나 많은 이미지가 컨텍스트에 있을 때 2000픽셀을 허용합니다.

400* 전체 화면 대신 관련 영역의 더 타이트한 스크린샷을 찍습니다.

401 

402### PDF errors

403 

404첨부한 PDF를 처리할 수 없습니다.

405 

406```text theme={null}

407PDF too large (max 100 pages, 32 MB). Try splitting it or extracting text first.

408PDF is password protected. Try removing protection or extracting text first.

409The PDF file was not valid. Try converting to a different format first.

410```

411 

412**할 일:**

413 

414* 과도한 크기의 PDF의 경우 Claude에게 전체 파일을 첨부하는 대신 Read 도구로 페이지 범위를 읽도록 요청하거나 `pdftotext`와 같은 도구로 텍스트를 추출하고 경로로 출력 파일을 참조합니다.

415* 보호되거나 유효하지 않은 PDF의 경우 암호를 제거하거나 소스 애플리케이션에서 파일을 다시 내보낸 후 다시 시도합니다.

416 

417### Extra inputs are not permitted

418 

419Claude Code와 API 사이의 프록시 또는 LLM 게이트웨이가 `anthropic-beta` 요청 헤더를 제거했으므로 API가 이에 따라 달라지는 필드를 거부했습니다.

420 

421```text theme={null}

422API Error: 400 ... Extra inputs are not permitted ... context_management

423API Error: 400 ... Extra inputs are not permitted ... tools.0.custom.input_examples

424API Error: 400 ... Unexpected value(s) for the `anthropic-beta` header

425```

426 

427Claude Code는 `context_management`, `effort`, 도구 `input_examples`와 같은 베타 전용 필드를 이를 활성화하는 `anthropic-beta` 헤더와 함께 보냅니다. 게이트웨이가 본문을 전달하지만 헤더를 제거하면 API는 인식하지 못하는 필드를 봅니다.

428 

429**할 일:**

430 

431* `anthropic-beta` 헤더를 전달하도록 게이트웨이를 구성합니다. [LLM 게이트웨이 구성](/ko/llm-gateway)을 참조하십시오.

432* 대체로 시작하기 전에 [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](/ko/env-vars)을 설정합니다. 이는 베타 헤더가 필요한 기능을 비활성화하여 헤더를 전달할 수 없는 게이트웨이를 통해 요청이 성공하도록 합니다.

433 

434### There's an issue with the selected model

435 

436구성된 모델 이름이 인식되지 않았거나 계정이 이에 액세스할 수 없습니다.

437 

438```text theme={null}

439There's an issue with the selected model (claude-...). It may not exist or you may not have access to it. Run /model to select a different one.

440```

441 

442**할 일:**

443 

444* `/model`을 실행하여 계정에서 사용 가능한 모델 중에서 선택합니다.

445* 전체 버전 ID 대신 `sonnet` 또는 `opus`와 같은 별칭을 사용합니다. 별칭은 최신 릴리스를 추적하므로 오래되지 않습니다. [모델 구성](/ko/model-config)을 참조하십시오.

446* 잘못된 모델이 계속 돌아오면 오래된 ID가 어딘가에 설정되어 있습니다. [우선순위 순서](/ko/model-config#setting-your-model)로 확인합니다. `--model` 플래그, `ANTHROPIC_MODEL` 환경 변수, 그 다음 `.claude/settings.local.json`의 `model` 필드, 프로젝트의 `.claude/settings.json`, 그리고 `~/.claude/settings.json`입니다. 오래된 값을 제거하면 Claude Code는 계정 기본값으로 폴백합니다.

447* Vertex AI 배포의 경우 [Vertex AI 문제 해결](/ko/google-vertex-ai#troubleshooting)을 참조하십시오.

448 

449### Claude Opus is not available with the Claude Pro plan

450 

451활성 구독 플랜에 선택한 모델이 포함되지 않습니다.

452 

453```text theme={null}

454Claude Opus is not available with the Claude Pro plan · Select a different model in /model

455```

456 

457**할 일:**

458 

459* `/model`을 실행하고 플랜에 포함된 모델을 선택합니다.

460* 최근에 플랜을 업그레이드했는데도 여전히 이를 보면 `/logout`을 실행한 후 `/login`을 실행합니다. 저장된 토큰은 로그인 시 플랜을 반영하므로 웹에서 업그레이드해도 기존 세션에서 적용되지 않을 때까지 적용되지 않습니다.

461* 각 플랜에 포함된 모델은 [claude.com/pricing](https://claude.com/pricing)을 참조하십시오.

462 

463### thinking.type.enabled is not supported for this model

464 

465Claude Code 버전이 Opus 4.7의 최소값보다 오래되었습니다. CLI가 모델이 더 이상 허용하지 않는 생각 구성을 보냈습니다.

466 

467```text theme={null}

468API Error: 400 ... "thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.

469```

470 

471**할 일:**

472 

473* `claude update`를 실행하여 v2.1.111 이상으로 업그레이드한 후 Claude Code를 다시 시작합니다.

474* 업그레이드할 수 없으면 `/model`을 실행하고 Opus 4.6 또는 Sonnet을 선택합니다.

475* Agent SDK에서 이를 맞으면 [SDK 문제 해결](/ko/agent-sdk/quickstart#troubleshooting)을 참조하십시오.

476 

477### Thinking budget exceeds output limit

478 

479구성된 확장 생각 예산이 최대 응답 길이를 초과하므로 실제 답변을 위한 공간이 남지 않습니다.

480 

481```text theme={null}

482API Error: 400 ... max_tokens must be greater than thinking.budget_tokens

483```

484 

485Claude Code는 Anthropic API에서 이러한 값을 자동으로 조정합니다. 일반적으로 [`MAX_THINKING_TOKENS`](/ko/env-vars)이 제공자의 출력 제한보다 높게 설정되었거나 플랜 모드가 생각 예산을 높일 때 Amazon Bedrock 또는 Google Vertex AI에서 이 오류를 봅니다.

486 

487**할 일:**

488 

489* `MAX_THINKING_TOKENS`를 낮추거나 [`CLAUDE_CODE_MAX_OUTPUT_TOKENS`](/ko/env-vars)를 생각 예산 위로 높입니다.

490* [확장 생각](/ko/common-workflows#use-extended-thinking-thinking-mode)을 참조하여 예산이 출력 길이와 어떻게 상호 작용하는지 확인합니다.

491 

492### Tool use or thinking block mismatch

493 

494대화 기록이 일관성 없는 상태로 API에 도달했습니다. 일반적으로 도구 호출이 중단되거나 턴이 스트림 중간에 편집된 후입니다.

495 

496```text theme={null}

497API Error: 400 due to tool use concurrency issues. Run /rewind to recover the conversation.

498API Error: 400 ... unexpected `tool_use_id` found in `tool_result` blocks

499API Error: 400 ... thinking blocks ... cannot be modified

500```

501 

502세 가지 변형 모두 동일한 의미입니다. 기록의 `tool_use`, `tool_result`, `thinking` 블록 시퀀스가 더 이상 API가 예상하는 것과 일치하지 않습니다.

503 

504**할 일:**

505 

506* `/rewind`를 실행하거나 Esc를 두 번 눌러 손상된 턴 전의 체크포인트로 뒤로 이동하고 거기서 계속합니다. [체크포인팅](/ko/checkpointing)을 참조하여 체크포인트가 생성되고 복원되는 방식을 확인합니다.

507 

508## 응답 품질이 평소보다 낮아 보임

509 

510Claude의 답변이 오류 없이 예상보다 덜 유능해 보이면 원인은 일반적으로 모델 자체가 아닌 대화 상태입니다. Claude Code는 모델 버전을 자동으로 변경하지 않습니다. Opus 할당량에 도달하거나 Bedrock 또는 Vertex AI 지역이 모델이 없는 경우와 같은 특정 경우에 대체 모델로 전환할 수 있습니다. 아래의 모델 선택 확인이 둘 다 포착하고 [모델 구성](/ko/model-config)은 대체가 적용되는 시기를 설명합니다.

511 

512먼저 다음을 확인합니다.

513 

514* **모델 선택**: `/model`을 실행하여 예상한 모델에 있는지 확인합니다. 이전 `/model` 선택 또는 `ANTHROPIC_MODEL` 환경 변수가 의도한 것보다 더 작은 모델에 있을 수 있습니다.

515* **노력 수준**: `/effort`를 실행하여 현재 추론 수준을 확인하고 어려운 디버깅 또는 설계 작업을 위해 높입니다. 기본값은 모델에 따라 다르므로 최대값 아래에 있다고 가정하기 전에 확인합니다. [노력 수준 조정](/ko/model-config#adjust-effort-level)을 참조하여 모델별 기본값 및 `ultrathink` 바로가기를 확인합니다.

516* **컨텍스트 압력**: `/context`를 실행하여 윈도우가 얼마나 가득 찼는지 확인합니다. 용량에 가까우면 자연스러운 중단점에서 `/compact`를 실행하거나 새로 시작하려면 `/clear`를 실행합니다. [컨텍스트 윈도우 탐색](/ko/context-window)을 참조하여 자동 압축이 이전 턴에 어떻게 영향을 미치는지 확인합니다.

517* **오래된 지침**: 크거나 오래된 `CLAUDE.md` 파일 및 MCP 도구 정의는 컨텍스트를 소비하고 응답을 조종할 수 있습니다. `/doctor`는 과도한 크기의 메모리 파일 및 서브에이전트 정의를 플래그합니다. `/context`는 MCP 도구 토큰 사용을 표시합니다.

518 

519응답이 잘못되면 수정으로 회신하는 것보다 일반적으로 되감기가 더 잘 작동합니다. Esc를 두 번 누르거나 `/rewind`를 실행하여 나쁜 턴 전으로 뒤로 이동한 후 더 구체적으로 프롬프트를 다시 표현합니다. 스레드 내에서 수정하면 잘못된 시도가 컨텍스트에 남아 있어 나중의 답변을 이에 고정할 수 있습니다. [체크포인팅](/ko/checkpointing)을 참조하십시오.

520 

521위의 확인 후에도 품질이 여전히 이상해 보이면 `/feedback`을 실행하고 예상한 것과 얻은 것을 설명합니다. 이 방식으로 제출된 피드백에는 대화 기록이 포함되어 있으므로 Anthropic이 실제 회귀를 진단하는 가장 빠른 방법입니다. 제공자에서 `/feedback`을 사용할 수 없는 경우 [오류 보고](#report-an-error)를 참조하십시오.

522 

523## 오류 보고

524 

525이 페이지는 Claude API의 오류를 다룹니다. Claude Code의 다른 구성 요소의 오류는 관련 가이드를 참조하십시오.

526 

527* MCP 서버가 연결 또는 인증에 실패함: [MCP](/ko/mcp)

528* 훅 스크립트가 실패했거나 도구를 차단함: [훅 디버그](/ko/hooks#debug-hooks)

529* 설치 중 권한 거부 또는 파일 시스템 오류: [설치 및 로그인 문제 해결](/ko/troubleshoot-install)

530 

531오류가 여기에 나열되지 않았거나 제안된 수정이 도움이 되지 않으면:

532 

533* Claude Code 내에서 `/feedback`을 실행하여 기록 및 설명을 Anthropic에 보냅니다. 명령은 미리 채워진 GitHub 문제를 열 수도 있습니다. 피드백은 Bedrock, Vertex AI, Foundry 배포에서 사용할 수 없습니다.

534* `/doctor`를 실행하여 로컬 구성 문제를 확인합니다.

535* [status.claude.com](https://status.claude.com)에서 활성 인시던트를 확인합니다.

536* GitHub의 [기존 문제](https://github.com/anthropics/claude-code/issues)를 검색합니다.

fast-mode.md +151 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 빠른 모드로 응답 속도 향상

6 

7> Claude Code에서 빠른 모드를 전환하여 더 빠른 Opus 4.6 응답을 받습니다.

8 

9<Note>

10 빠른 모드는 [연구 미리보기](#research-preview)입니다. 피드백에 따라 기능, 가격 책정 및 가용성이 변경될 수 있습니다.

11</Note>

12 

13빠른 모드는 Claude Opus 4.6을 위한 고속 구성으로, 토큰당 더 높은 비용으로 모델을 2.5배 빠르게 만듭니다. 빠른 반복이나 라이브 디버깅과 같은 대화형 작업에서 속도가 필요할 때 `/fast`로 켜고, 비용이 지연 시간보다 중요할 때 끕니다.

14 

15빠른 모드는 다른 모델이 아닙니다. 비용 효율성보다 속도를 우선시하는 다른 API 구성을 사용하는 동일한 Opus 4.6을 사용합니다. 동일한 품질과 기능을 얻으며, 응답만 더 빠릅니다.

16 

17<Note>

18 빠른 모드는 Claude Code v2.1.36 이상이 필요합니다. `claude --version`으로 버전을 확인합니다.

19</Note>

20 

21알아야 할 사항:

22 

23* Claude Code CLI에서 `/fast`를 사용하여 빠른 모드를 전환합니다. Claude Code VS Code 확장 프로그램에서도 `/fast`를 통해 사용할 수 있습니다.

24* Opus 4.6의 빠른 모드 가격은 \$30/150 MTok부터 시작합니다. 빠른 모드는 2월 16일 오후 11:59(PT)까지 모든 요금제에 대해 50% 할인으로 제공됩니다.

25* 구독 요금제(Pro/Max/Team/Enterprise)의 모든 Claude Code 사용자 및 Claude Console에서 사용할 수 있습니다.

26* 구독 요금제(Pro/Max/Team/Enterprise)의 Claude Code 사용자의 경우, 빠른 모드는 추가 사용을 통해서만 사용 가능하며 구독 요금제 사용량 제한에 포함되지 않습니다.

27 

28이 페이지에서는 [빠른 모드 전환](#toggle-fast-mode), [비용 트레이드오프](#understand-the-cost-tradeoff), [빠른 모드 사용 시기](#decide-when-to-use-fast-mode), [요구사항](#requirements), [세션별 옵트인](#require-per-session-opt-in) 및 [속도 제한 처리](#handle-rate-limits)를 다룹니다.

29 

30## 빠른 모드 전환

31 

32다음 중 한 가지 방법으로 빠른 모드를 전환합니다:

33 

34* `/fast`를 입력하고 Tab을 눌러 켜거나 끕니다

35* [사용자 설정 파일](/ko/settings)에서 `"fastMode": true`를 설정합니다

36 

37기본적으로 빠른 모드는 세션 간에 유지됩니다. 관리자는 빠른 모드를 각 세션마다 재설정하도록 구성할 수 있습니다. 자세한 내용은 [세션별 옵트인 필요](#require-per-session-opt-in)를 참조합니다.

38 

39최상의 비용 효율성을 위해 대화 중간에 전환하기보다는 세션 시작 시 빠른 모드를 활성화합니다. 자세한 내용은 [비용 트레이드오프 이해](#understand-the-cost-tradeoff)를 참조합니다.

40 

41빠른 모드를 활성화하면:

42 

43* 다른 모델을 사용 중인 경우 Claude Code가 자동으로 Opus 4.6으로 전환됩니다

44* 확인 메시지가 표시됩니다: "Fast mode ON"

45* 빠른 모드가 활성화되어 있는 동안 프롬프트 옆에 작은 `↯` 아이콘이 나타납니다

46* 언제든지 `/fast`를 다시 실행하여 빠른 모드가 켜져 있는지 꺼져 있는지 확인합니다

47 

48`/fast`를 다시 실행하여 빠른 모드를 비활성화하면 Opus 4.6에 유지됩니다. 모델이 이전 모델로 되돌아가지 않습니다. 다른 모델로 전환하려면 `/model`을 사용합니다.

49 

50## 비용 트레이드오프 이해

51 

52빠른 모드는 표준 Opus 4.6보다 토큰당 가격이 높습니다:

53 

54| 모드 | 입력 (MTok) | 출력 (MTok) |

55| ------------------------ | --------- | --------- |

56| Opus 4.6의 빠른 모드 (\<200K) | \$30 | \$150 |

57| Opus 4.6의 빠른 모드 (>200K) | \$60 | \$225 |

58 

59빠른 모드는 1M 토큰 확장 컨텍스트 윈도우와 호환됩니다.

60 

61대화 중간에 빠른 모드로 전환하면 전체 대화 컨텍스트에 대해 전체 빠른 모드 캐시되지 않은 입력 토큰 가격을 지불합니다. 이는 처음부터 빠른 모드를 활성화했을 경우보다 더 많은 비용이 듭니다.

62 

63## 빠른 모드 사용 시기 결정

64 

65빠른 모드는 응답 지연 시간이 비용보다 중요한 대화형 작업에 가장 적합합니다:

66 

67* 코드 변경에 대한 빠른 반복

68* 라이브 디버깅 세션

69* 긴급 마감이 있는 시간에 민감한 작업

70 

71표준 모드는 다음에 더 적합합니다:

72 

73* 속도가 덜 중요한 장기 자동 작업

74* 배치 처리 또는 CI/CD 파이프라인

75* 비용에 민감한 워크로드

76 

77### 빠른 모드 대 노력 수준

78 

79빠른 모드와 노력 수준 모두 응답 속도에 영향을 미치지만 방식이 다릅니다:

80 

81| 설정 | 효과 |

82| ------------ | ----------------------------------------- |

83| **빠른 모드** | 동일한 모델 품질, 낮은 지연 시간, 높은 비용 |

84| **낮은 노력 수준** | 더 적은 생각 시간, 더 빠른 응답, 복잡한 작업에서 잠재적으로 낮은 품질 |

85 

86둘 다 결합할 수 있습니다: 간단한 작업에서 최대 속도를 위해 낮은 [노력 수준](/ko/model-config#adjust-effort-level)과 함께 빠른 모드를 사용합니다.

87 

88## 요구사항

89 

90빠른 모드는 다음 모두를 필요로 합니다:

91 

92* **타사 클라우드 제공자에서 사용 불가**: 빠른 모드는 Amazon Bedrock, Google Vertex AI 또는 Microsoft Azure Foundry에서 사용할 수 없습니다. 빠른 모드는 Anthropic Console API 및 추가 사용을 사용하는 Claude 구독 요금제를 통해 사용할 수 있습니다.

93* **추가 사용 활성화**: 계정에 추가 사용이 활성화되어 있어야 하며, 이를 통해 요금제의 포함된 사용량을 초과하여 청구할 수 있습니다. 개인 계정의 경우 [Console 청구 설정](https://platform.claude.com/settings/organization/billing)에서 활성화합니다. Teams 및 Enterprise의 경우 관리자가 조직에 대해 추가 사용을 활성화해야 합니다.

94 

95<Note>

96 빠른 모드 사용량은 요금제에 남은 사용량이 있더라도 추가 사용으로 직접 청구됩니다. 이는 빠른 모드 토큰이 요금제의 포함된 사용량에 포함되지 않으며 첫 번째 토큰부터 빠른 모드 요금으로 청구됨을 의미합니다.

97</Note>

98 

99* **Teams 및 Enterprise의 관리자 활성화**: 빠른 모드는 Teams 및 Enterprise 조직에 대해 기본적으로 비활성화됩니다. 사용자가 액세스할 수 있으려면 관리자가 명시적으로 [빠른 모드를 활성화](#enable-fast-mode-for-your-organization)해야 합니다.

100 

101<Note>

102 관리자가 조직에 대해 빠른 모드를 활성화하지 않은 경우 `/fast` 명령은 "Fast mode has been disabled by your organization."을 표시합니다.

103</Note>

104 

105### 조직에 대해 빠른 모드 활성화

106 

107관리자는 다음에서 빠른 모드를 활성화할 수 있습니다:

108 

109* **Console** (API 고객): [Claude Code 기본 설정](https://platform.claude.com/claude-code/preferences)

110* **Claude AI** (Teams 및 Enterprise): [관리자 설정 > Claude Code](https://claude.ai/admin-settings/claude-code)

111 

112빠른 모드를 완전히 비활성화하는 또 다른 옵션은 `CLAUDE_CODE_DISABLE_FAST_MODE=1`을 설정하는 것입니다. [환경 변수](/ko/env-vars)를 참조합니다.

113 

114### 세션별 옵트인 필요

115 

116기본적으로 빠른 모드는 세션 간에 유지됩니다: 사용자가 빠른 모드를 활성화하면 향후 세션에서도 켜져 있습니다. [Teams](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=fast_mode_teams#team-&-enterprise) 또는 [Enterprise](https://anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=fast_mode_enterprise) 요금제의 관리자는 [관리되는 설정](/ko/settings#settings-files) 또는 [서버 관리 설정](/ko/server-managed-settings)에서 `fastModePerSessionOptIn`을 `true`로 설정하여 이를 방지할 수 있습니다. 이로 인해 각 세션이 빠른 모드가 꺼진 상태로 시작되며, 사용자가 `/fast`로 명시적으로 활성화해야 합니다.

117 

118```json theme={null}

119{

120 "fastModePerSessionOptIn": true

121}

122```

123 

124이는 사용자가 여러 동시 세션을 실행하는 조직에서 비용을 제어하는 데 유용합니다. 사용자는 속도가 필요할 때 `/fast`로 빠른 모드를 활성화할 수 있지만 새 세션이 시작될 때마다 재설정됩니다. 사용자의 빠른 모드 기본 설정은 여전히 저장되므로 이 설정을 제거하면 기본 지속 동작이 복원됩니다.

125 

126## 속도 제한 처리

127 

128빠른 모드는 표준 Opus 4.6과 별도의 속도 제한을 가집니다. 빠른 모드 속도 제한에 도달하거나 추가 사용 크레딧이 부족할 때:

129 

1301. 빠른 모드가 자동으로 표준 Opus 4.6으로 폴백됩니다

1312. `↯` 아이콘이 회색으로 변하여 쿨다운을 나타냅니다

1323. 표준 속도 및 가격으로 계속 작업합니다

1334. 쿨다운이 만료되면 빠른 모드가 자동으로 다시 활성화됩니다

134 

135쿨다운을 기다리지 않고 빠른 모드를 수동으로 비활성화하려면 `/fast`를 다시 실행합니다.

136 

137## 연구 미리보기

138 

139빠른 모드는 연구 미리보기 기능입니다. 이는 다음을 의미합니다:

140 

141* 기능은 피드백에 따라 변경될 수 있습니다

142* 가용성 및 가격 책정은 변경될 수 있습니다

143* 기본 API 구성이 진화할 수 있습니다

144 

145일반적인 Anthropic 지원 채널을 통해 문제 또는 피드백을 보고합니다.

146 

147## 참고 항목

148 

149* [모델 구성](/ko/model-config): 모델 전환 및 노력 수준 조정

150* [비용 효과적으로 관리](/ko/costs): 토큰 사용량 추적 및 비용 감소

151* [상태 줄 구성](/ko/statusline): 모델 및 컨텍스트 정보 표시

features-overview.md +294 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Claude Code 확장하기

6 

7> CLAUDE.md, Skills, subagents, hooks, MCP, 플러그인을 언제 사용할지 이해합니다.

8 

9Claude Code는 코드를 추론하는 모델과 파일 작업, 검색, 실행 및 웹 접근을 위한 [내장 도구](/ko/how-claude-code-works#tools)를 결합합니다. 내장 도구는 대부분의 코딩 작업을 다룹니다. 이 가이드는 확장 계층을 다룹니다. Claude가 알아야 할 내용을 사용자 정의하고, 외부 서비스에 연결하고, 워크플로우를 자동화하기 위해 추가하는 기능입니다.

10 

11<Note>

12 핵심 에이전트 루프가 어떻게 작동하는지 알아보려면 [Claude Code 작동 방식](/ko/how-claude-code-works)을 참조하세요.

13</Note>

14 

15**Claude Code를 처음 사용하시나요?** 프로젝트 규칙을 위해 [CLAUDE.md](/ko/memory)로 시작하세요. 필요에 따라 다른 확장을 추가하세요.

16 

17## 개요

18 

19확장은 에이전트 루프의 다양한 부분에 연결됩니다.

20 

21* \*\*[CLAUDE.md](/ko/memory)\*\*는 Claude가 모든 세션에서 보는 지속적인 컨텍스트를 추가합니다.

22* \*\*[Skills](/ko/skills)\*\*는 재사용 가능한 지식과 호출 가능한 워크플로우를 추가합니다.

23* \*\*[MCP](/ko/mcp)\*\*는 Claude를 외부 서비스 및 도구에 연결합니다.

24* \*\*[Subagents](/ko/sub-agents)\*\*는 격리된 컨텍스트에서 자신의 루프를 실행하고 요약을 반환합니다.

25* \*\*[Agent teams](/ko/agent-teams)\*\*는 공유 작업 및 피어 투 피어 메시징으로 여러 독립적인 세션을 조정합니다.

26* \*\*[Hooks](/ko/hooks)\*\*는 결정론적 스크립트로 루프 외부에서 완전히 실행됩니다.

27* **[Plugins](/ko/plugins)** 및 \*\*[marketplaces](/ko/plugin-marketplaces)\*\*는 이러한 기능을 패키징하고 배포합니다.

28 

29[Skills](/ko/skills)는 가장 유연한 확장입니다. Skill은 지식, 워크플로우 또는 지침을 포함하는 마크다운 파일입니다. `/deploy`와 같은 명령으로 skill을 호출하거나, Claude가 관련이 있을 때 자동으로 로드할 수 있습니다. Skill은 현재 대화에서 실행되거나 subagents를 통해 격리된 컨텍스트에서 실행될 수 있습니다.

30 

31## 기능을 목표에 맞추기

32 

33기능은 Claude가 모든 세션에서 보는 항상 켜진 컨텍스트부터 사용자나 Claude가 호출할 수 있는 온디맨드 기능, 특정 이벤트에서 실행되는 백그라운드 자동화까지 다양합니다. 아래 표는 사용 가능한 기능과 각 기능이 언제 적절한지 보여줍니다.

34 

35| 기능 | 수행 작업 | 사용 시기 | 예시 |

36| ---------------------------------- | ------------------------------- | ------------------------------ | ----------------------------------------------------- |

37| **CLAUDE.md** | 모든 대화에서 로드되는 지속적인 컨텍스트 | 프로젝트 규칙, "항상 X를 수행" 규칙 | "npm이 아닌 pnpm을 사용하세요. 커밋하기 전에 테스트를 실행하세요." |

38| **Skill** | Claude가 사용할 수 있는 지침, 지식 및 워크플로우 | 재사용 가능한 콘텐츠, 참조 문서, 반복 가능한 작업 | `/deploy`는 배포 체크리스트를 실행합니다. 엔드포인트 패턴이 있는 API 문서 skill |

39| **Subagent** | 요약된 결과를 반환하는 격리된 실행 컨텍스트 | 컨텍스트 격리, 병렬 작업, 특화된 워커 | 많은 파일을 읽지만 주요 결과만 반환하는 연구 작업 |

40| **[Agent teams](/ko/agent-teams)** | 여러 독립적인 Claude Code 세션 조정 | 병렬 연구, 새로운 기능 개발, 경쟁하는 가설로 디버깅 | 보안, 성능 및 테스트를 동시에 확인하는 검토자 생성 |

41| **MCP** | 외부 서비스에 연결 | 외부 데이터 또는 작업 | 데이터베이스 쿼리, Slack에 게시, 브라우저 제어 |

42| **Hook** | 이벤트에서 실행되는 결정론적 스크립트 | 예측 가능한 자동화, LLM 없음 | 모든 파일 편집 후 ESLint 실행 |

43 

44\*\*[Plugins](/ko/plugins)\*\*는 패키징 계층입니다. 플러그인은 skill, hook, subagent 및 MCP 서버를 단일 설치 가능한 단위로 번들합니다. 플러그인 skill은 네임스페이스됩니다(예: `/my-plugin:review`). 따라서 여러 플러그인이 공존할 수 있습니다. 여러 저장소에서 동일한 설정을 재사용하거나 \*\*[marketplace](/ko/plugin-marketplaces)\*\*를 통해 다른 사용자에게 배포하려는 경우 플러그인을 사용하세요.

45 

46### 유사한 기능 비교

47 

48일부 기능은 유사해 보일 수 있습니다. 구별하는 방법은 다음과 같습니다.

49 

50<Tabs>

51 <Tab title="Skill vs Subagent">

52 Skill과 subagent는 다양한 문제를 해결합니다.

53 

54 * **Skills**는 모든 컨텍스트에 로드할 수 있는 재사용 가능한 콘텐츠입니다.

55 * **Subagents**는 주 대화와 별도로 실행되는 격리된 워커입니다.

56 

57 | 측면 | Skill | Subagent |

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

59 | **정의** | 재사용 가능한 지침, 지식 또는 워크플로우 | 자신의 컨텍스트를 가진 격리된 워커 |

60 | **주요 이점** | 컨텍스트 간 콘텐츠 공유 | 컨텍스트 격리. 작업은 별도로 발생하고 요약만 반환됩니다. |

61 | **최적 용도** | 참조 자료, 호출 가능한 워크플로우 | 많은 파일을 읽는 작업, 병렬 작업, 특화된 워커 |

62 

63 **Skill은 참조 또는 작업일 수 있습니다.** 참조 skill은 Claude가 세션 전체에서 사용하는 지식을 제공합니다(API 스타일 가이드처럼). 작업 skill은 Claude에게 특정 작업을 수행하도록 지시합니다(배포 워크플로우를 실행하는 `/deploy`처럼).

64 

65 **컨텍스트 격리가 필요하거나 컨텍스트 윈도우가 가득 찰 때 subagent를 사용하세요.** Subagent는 수십 개의 파일을 읽거나 광범위한 검색을 실행할 수 있지만, 주 대화는 요약만 받습니다. Subagent 작업이 주 컨텍스트를 소비하지 않으므로, 중간 작업이 표시되어야 할 필요가 없을 때도 유용합니다. 사용자 정의 subagent는 자신의 지침을 가질 수 있고 skill을 미리 로드할 수 있습니다.

66 

67 **결합할 수 있습니다.** Subagent는 특정 skill을 미리 로드할 수 있습니다(`skills:` 필드). Skill은 `context: fork`를 사용하여 격리된 컨텍스트에서 실행될 수 있습니다. 자세한 내용은 [Skills](/ko/skills)를 참조하세요.

68 </Tab>

69 

70 <Tab title="CLAUDE.md vs Skill">

71 둘 다 지침을 저장하지만 로드 방식과 목적이 다릅니다.

72 

73 | 측면 | CLAUDE.md | Skill |

74 | ---------------- | ------------------ | ------------------- |

75 | **로드** | 모든 세션, 자동으로 | 온디맨드 |

76 | **파일 포함 가능** | 예, `@path` 가져오기 사용 | 예, `@path` 가져오기 사용 |

77 | **워크플로우 트리거 가능** | 아니요 | 예, `/<name>` 사용 |

78 | **최적 용도** | "항상 X를 수행" 규칙 | 참조 자료, 호출 가능한 워크플로우 |

79 

80 **CLAUDE.md에 넣으세요.** Claude가 항상 알아야 할 경우: 코딩 규칙, 빌드 명령, 프로젝트 구조, "X를 하지 마세요" 규칙.

81 

82 **Skill에 넣으세요.** 참조 자료인 경우 Claude가 때때로 필요합니다(API 문서, 스타일 가이드) 또는 `/<name>`으로 트리거하는 워크플로우입니다(배포, 검토, 릴리스).

83 

84 **경험 법칙:** CLAUDE.md를 200줄 이하로 유지하세요. 증가하면 참조 콘텐츠를 skill로 이동하거나 [`.claude/rules/`](/ko/memory#organize-rules-with-clauderules) 파일로 분할하세요.

85 </Tab>

86 

87 <Tab title="CLAUDE.md vs Rules vs Skills">

88 세 가지 모두 지침을 저장하지만 로드 방식이 다릅니다.

89 

90 | 측면 | CLAUDE.md | `.claude/rules/` | Skill |

91 | --------- | ------------- | ----------------------- | -------------------- |

92 | **로드** | 모든 세션 | 모든 세션, 또는 일치하는 파일이 열릴 때 | 온디맨드, 호출되거나 관련이 있을 때 |

93 | **범위** | 전체 프로젝트 | 파일 경로로 범위 지정 가능 | 작업별 |

94 | **최적 용도** | 핵심 규칙 및 빌드 명령 | 언어별 또는 디렉토리별 가이드라인 | 참조 자료, 반복 가능한 워크플로우 |

95 

96 **CLAUDE.md를 사용하세요.** 모든 세션이 필요한 지침: 빌드 명령, 테스트 규칙, 프로젝트 아키텍처.

97 

98 **규칙을 사용하세요.** CLAUDE.md를 집중시키기 위해. [`paths` frontmatter](/ko/memory#path-specific-rules)가 있는 규칙은 Claude가 일치하는 파일로 작업할 때만 로드되어 컨텍스트를 절약합니다.

99 

100 **Skill을 사용하세요.** Claude가 때때로만 필요한 콘텐츠, API 문서 또는 `/<name>`으로 트리거하는 배포 체크리스트.

101 </Tab>

102 

103 <Tab title="Subagent vs Agent team">

104 둘 다 작업을 병렬화하지만 아키텍처가 다릅니다.

105 

106 * **Subagents**는 세션 내에서 실행되고 결과를 주 컨텍스트에 보고합니다.

107 * **Agent teams**는 서로 통신하는 독립적인 Claude Code 세션입니다.

108 

109 | 측면 | Subagent | Agent team |

110 | --------- | --------------------------- | ------------------------- |

111 | **컨텍스트** | 자신의 컨텍스트 윈도우; 결과는 호출자에게 반환됨 | 자신의 컨텍스트 윈도우; 완전히 독립적 |

112 | **통신** | 주 에이전트에게만 결과 보고 | 팀원이 서로 직접 메시지 |

113 | **조정** | 주 에이전트가 모든 작업 관리 | 공유 작업 목록과 자체 조정 |

114 | **최적 용도** | 결과만 중요한 집중된 작업 | 논의 및 협력이 필요한 복잡한 작업 |

115 | **토큰 비용** | 낮음: 결과가 주 컨텍스트로 요약됨 | 높음: 각 팀원은 별도의 Claude 인스턴스 |

116 

117 **빠르고 집중된 워커가 필요할 때 subagent를 사용하세요.** 질문을 연구하고, 주장을 확인하고, 파일을 검토하세요. Subagent는 작업을 수행하고 요약을 반환합니다. 주 대화는 깔끔하게 유지됩니다.

118 

119 **팀원이 결과를 공유하고, 서로 도전하고, 독립적으로 조정해야 할 때 agent team을 사용하세요.** Agent team은 경쟁하는 가설이 있는 연구, 병렬 코드 검토, 각 팀원이 별도의 부분을 소유하는 새로운 기능 개발에 최적입니다.

120 

121 **전환점:** 병렬 subagent를 실행하지만 컨텍스트 제한에 도달하거나, subagent가 서로 통신해야 할 경우, agent team이 자연스러운 다음 단계입니다.

122 

123 <Note>

124 Agent team은 실험적이며 기본적으로 비활성화됩니다. 설정 및 현재 제한 사항은 [agent teams](/ko/agent-teams)를 참조하세요.

125 </Note>

126 </Tab>

127 

128 <Tab title="MCP vs Skill">

129 MCP는 Claude를 외부 서비스에 연결합니다. Skill은 Claude가 알아야 할 내용을 확장하며, 이러한 서비스를 효과적으로 사용하는 방법도 포함합니다.

130 

131 | 측면 | MCP | Skill |

132 | ------ | ---------------------------- | ---------------------------------- |

133 | **정의** | 외부 서비스 연결 프로토콜 | 지식, 워크플로우 및 참조 자료 |

134 | **제공** | 도구 및 데이터 접근 | 지식, 워크플로우, 참조 자료 |

135 | **예시** | Slack 통합, 데이터베이스 쿼리, 브라우저 제어 | 코드 검토 체크리스트, 배포 워크플로우, API 스타일 가이드 |

136 

137 이들은 다양한 문제를 해결하며 함께 잘 작동합니다.

138 

139 **MCP**는 Claude에게 외부 시스템과 상호 작용할 수 있는 능력을 제공합니다. MCP 없이는 Claude가 데이터베이스를 쿼리하거나 Slack에 게시할 수 없습니다.

140 

141 **Skill**은 Claude에게 이러한 도구를 효과적으로 사용하는 방법에 대한 지식을 제공하며, `/<name>`으로 트리거할 수 있는 워크플로우도 포함합니다. Skill에는 팀의 데이터베이스 스키마 및 쿼리 패턴, 또는 팀의 메시지 형식 규칙이 있는 `/post-to-slack` 워크플로우가 포함될 수 있습니다.

142 

143 예: MCP 서버는 Claude를 데이터베이스에 연결합니다. Skill은 Claude에게 데이터 모델, 일반적인 쿼리 패턴, 다양한 작업에 사용할 테이블을 가르칩니다.

144 </Tab>

145</Tabs>

146 

147### 기능이 어떻게 계층화되는지 이해하기

148 

149기능은 여러 수준에서 정의될 수 있습니다. 사용자 전체, 프로젝트별, 플러그인을 통해, 또는 관리 정책을 통해. 또한 CLAUDE.md 파일을 하위 디렉토리에 중첩하거나 monorepo의 특정 패키지에 skill을 배치할 수 있습니다. 동일한 기능이 여러 수준에 존재할 때, 계층화 방식은 다음과 같습니다.

150 

151* **CLAUDE.md 파일**은 추가적입니다. 모든 수준이 동시에 Claude의 컨텍스트에 콘텐츠를 제공합니다. 작업 디렉토리 및 위의 파일은 시작 시 로드되고, 하위 디렉토리는 작업할 때 로드됩니다. 지침이 충돌할 때, Claude는 판단을 사용하여 조정하며, 더 구체적인 지침이 일반적으로 우선합니다. [CLAUDE.md 파일이 로드되는 방식](/ko/memory#how-claudemd-files-load)을 참조하세요.

152* **Skill과 subagent**는 이름으로 재정의됩니다. 동일한 이름이 여러 수준에 존재할 때, 우선순위에 따라 하나의 정의가 승리합니다(skill의 경우 관리 > 사용자 > 프로젝트; subagent의 경우 관리 > CLI 플래그 > 프로젝트 > 사용자 > 플러그인). 플러그인 skill은 [네임스페이스됩니다](/ko/plugins#add-skills-to-your-plugin). 충돌을 피하기 위해. [Skill 검색](/ko/skills#where-skills-live) 및 [subagent 범위](/ko/sub-agents#choose-the-subagent-scope)를 참조하세요.

153* **MCP 서버**는 이름으로 재정의됩니다. 로컬 > 프로젝트 > 사용자. [MCP 범위](/ko/mcp#scope-hierarchy-and-precedence)를 참조하세요.

154* **Hooks**는 병합됩니다. 모든 등록된 hook은 소스에 관계없이 일치하는 이벤트에 대해 실행됩니다. [Hooks](/ko/hooks)를 참조하세요.

155 

156### 기능 결합하기

157 

158각 확장은 다양한 문제를 해결합니다. CLAUDE.md는 항상 켜진 컨텍스트를 처리하고, skill은 온디맨드 지식과 워크플로우를 처리하고, MCP는 외부 연결을 처리하고, subagent는 격리를 처리하고, hook은 자동화를 처리합니다. 실제 설정은 워크플로우에 따라 이들을 결합합니다.

159 

160예를 들어, CLAUDE.md를 프로젝트 규칙에 사용하고, skill을 배포 워크플로우에 사용하고, MCP를 데이터베이스에 연결하고, hook을 모든 편집 후 린팅을 실행하는 데 사용할 수 있습니다. 각 기능은 최적의 작업을 처리합니다.

161 

162| 패턴 | 작동 방식 | 예시 |

163| --------------------- | ---------------------------------------------------------- | -------------------------------------------------------------- |

164| **Skill + MCP** | MCP는 연결을 제공하고, skill은 Claude에게 잘 사용하는 방법을 가르칩니다. | MCP는 데이터베이스에 연결하고, skill은 스키마 및 쿼리 패턴을 문서화합니다. |

165| **Skill + Subagent** | Skill은 병렬 작업을 위해 subagent를 생성합니다. | `/audit` skill은 보안, 성능 및 스타일 subagent를 시작하여 격리된 컨텍스트에서 작동합니다. |

166| **CLAUDE.md + Skill** | CLAUDE.md는 항상 켜진 규칙을 보유하고, skill은 온디맨드로 로드되는 참조 자료를 보유합니다. | CLAUDE.md는 "API 규칙을 따르세요"라고 말하고, skill은 전체 API 스타일 가이드를 포함합니다. |

167| **Hook + MCP** | Hook은 MCP를 통해 외부 작업을 트리거합니다. | 편집 후 hook은 Claude가 중요한 파일을 수정할 때 Slack 알림을 보냅니다. |

168 

169## 컨텍스트 비용 이해하기

170 

171추가하는 모든 기능은 Claude의 컨텍스트를 소비합니다. 너무 많으면 컨텍스트 윈도우를 채울 수 있지만, 노이즈를 추가하여 Claude를 덜 효과적으로 만들 수도 있습니다. Skill이 올바르게 트리거되지 않거나 Claude가 규칙을 잃을 수 있습니다. 이러한 트레이드오프를 이해하면 효과적인 설정을 구축하는 데 도움이 됩니다.

172 

173### 기능별 컨텍스트 비용

174 

175각 기능은 다양한 로딩 전략과 컨텍스트 비용을 가집니다.

176 

177| 기능 | 로드 시기 | 로드되는 내용 | 컨텍스트 비용 |

178| ------------- | ------------ | ---------------------- | --------------------------- |

179| **CLAUDE.md** | 세션 시작 | 전체 콘텐츠 | 모든 요청 |

180| **Skill** | 세션 시작 + 사용 시 | 시작 시 설명, 사용 시 전체 콘텐츠 | 낮음(모든 요청마다 설명)\* |

181| **MCP 서버** | 세션 시작 | 모든 도구 정의 및 스키마 | 모든 요청 |

182| **Subagent** | 생성 시 | 지정된 skill이 있는 신선한 컨텍스트 | 주 세션에서 격리됨 |

183| **Hooks** | 트리거 시 | 없음(외부에서 실행) | 0, hook이 추가 컨텍스트를 반환하지 않는 한 |

184 

185\*기본적으로 skill 설명은 세션 시작 시 로드되므로 Claude가 사용할 시기를 결정할 수 있습니다. Skill의 frontmatter에서 `disable-model-invocation: true`를 설정하여 수동으로 호출할 때까지 Claude에서 완전히 숨깁니다. 이는 skill의 컨텍스트 비용을 0으로 줄입니다.

186 

187### 기능이 어떻게 로드되는지 이해하기

188 

189각 기능은 세션의 다양한 지점에서 로드됩니다. 아래 탭은 각 기능이 언제 로드되고 무엇이 컨텍스트에 들어가는지 설명합니다.

190 

191<img src="https://mintcdn.com/claude-code/6yTCYq1p37ZB8-CQ/images/context-loading.svg?fit=max&auto=format&n=6yTCYq1p37ZB8-CQ&q=85&s=5a58ce953a35a2412892015e2ad6cb67" alt="컨텍스트 로딩: CLAUDE.md와 MCP는 세션 시작 시 로드되고 모든 요청에 유지됩니다. Skill은 시작 시 설명을 로드하고 호출 시 전체 콘텐츠를 로드합니다. Subagent는 격리된 컨텍스트를 받습니다. Hook은 외부에서 실행됩니다." width="720" height="410" data-path="images/context-loading.svg" />

192 

193<Tabs>

194 <Tab title="CLAUDE.md">

195 **시기:** 세션 시작

196 

197 **로드되는 내용:** 모든 CLAUDE.md 파일의 전체 콘텐츠(관리, 사용자 및 프로젝트 수준).

198 

199 **상속:** Claude는 작업 디렉토리에서 루트까지 CLAUDE.md 파일을 읽고, 해당 파일에 접근할 때 하위 디렉토리에서 중첩된 파일을 검색합니다. 자세한 내용은 [CLAUDE.md 파일이 로드되는 방식](/ko/memory#how-claudemd-files-load)을 참조하세요.

200 

201 <Tip>CLAUDE.md를 200줄 이하로 유지하세요. 참조 자료를 skill로 이동하면 온디맨드로 로드됩니다.</Tip>

202 </Tab>

203 

204 <Tab title="Skills">

205 Skill은 Claude의 도구 키트에 있는 추가 기능입니다. 참조 자료(API 스타일 가이드처럼) 또는 `/<name>`으로 트리거하는 호출 가능한 워크플로우(배포처럼)일 수 있습니다. Claude Code는 기본적으로 작동하는 `/simplify`, `/batch`, `/debug`와 같은 [번들 skill](/ko/skills#bundled-skills)과 함께 제공됩니다. 자신의 것을 만들 수도 있습니다. Claude는 적절할 때 skill을 사용하거나 직접 호출할 수 있습니다.

206 

207 **시기:** Skill의 구성에 따라 다릅니다. 기본적으로 설명은 세션 시작 시 로드되고 전체 콘텐츠는 사용 시 로드됩니다. 사용자 전용 skill(`disable-model-invocation: true`)의 경우, 호출할 때까지 아무것도 로드되지 않습니다.

208 

209 **로드되는 내용:** 모델 호출 가능 skill의 경우, Claude는 모든 요청에서 이름과 설명을 봅니다. `/<name>`으로 skill을 호출하거나 Claude가 자동으로 로드할 때, 전체 콘텐츠가 대화에 로드됩니다.

210 

211 **Claude가 skill을 선택하는 방식:** Claude는 작업을 skill 설명과 비교하여 관련성이 있는지 결정합니다. 설명이 모호하거나 겹치면, Claude가 잘못된 skill을 로드하거나 도움이 될 skill을 놓칠 수 있습니다. Claude에게 특정 skill을 사용하도록 지시하려면 `/<name>`으로 호출하세요. `disable-model-invocation: true`가 있는 Skill은 호출할 때까지 Claude에게 보이지 않습니다.

212 

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

214 

215 **Subagent에서:** Skill은 subagent에서 다르게 작동합니다. 온디맨드 로딩 대신, subagent에 전달된 skill은 시작 시 컨텍스트에 완전히 미리 로드됩니다. Subagent는 주 세션에서 skill을 상속하지 않습니다. 명시적으로 지정해야 합니다.

216 

217 <Tip>부작용이 있는 skill에 `disable-model-invocation: true`를 사용하세요. 이는 컨텍스트를 절약하고 오직 사용자만 트리거하도록 보장합니다.</Tip>

218 </Tab>

219 

220 <Tab title="MCP servers">

221 **시기:** 세션 시작.

222 

223 **로드되는 내용:** 연결된 서버의 모든 도구 정의 및 JSON 스키마.

224 

225 **컨텍스트 비용:** [도구 검색](/ko/mcp#scale-with-mcp-tool-search)(기본적으로 활성화)은 MCP 도구를 컨텍스트의 최대 10%까지 로드하고 나머지는 필요할 때까지 연기합니다.

226 

227 **신뢰성 참고:** MCP 연결은 세션 중간에 조용히 실패할 수 있습니다. 서버가 연결 해제되면 도구가 경고 없이 사라집니다. Claude가 이전에 접근할 수 있었던 MCP 도구를 사용하지 못하는 경우, `/mcp`로 연결을 확인하세요.

228 

229 <Tip>서버당 토큰 비용을 보려면 `/mcp`를 실행하세요. 적극적으로 사용하지 않는 서버를 연결 해제하세요.</Tip>

230 </Tab>

231 

232 <Tab title="Subagents">

233 **시기:** 온디맨드, 작업을 위해 사용자나 Claude가 생성할 때.

234 

235 **로드되는 내용:** 신선한, 격리된 컨텍스트 포함:

236 

237 * 시스템 프롬프트(캐시 효율성을 위해 부모와 공유)

238 * 에이전트의 `skills:` 필드에 나열된 skill의 전체 콘텐츠

239 * CLAUDE.md 및 git 상태(부모에서 상속)

240 * 리드 에이전트가 프롬프트에서 전달하는 모든 컨텍스트

241 

242 **컨텍스트 비용:** 주 세션에서 격리됨. Subagent는 대화 기록이나 호출된 skill을 상속하지 않습니다.

243 

244 <Tip>전체 대화 컨텍스트가 필요하지 않은 작업에 subagent를 사용하세요. 격리는 주 세션이 부풀어지는 것을 방지합니다.</Tip>

245 </Tab>

246 

247 <Tab title="Hooks">

248 **시기:** 트리거 시. Hook은 도구 실행, 세션 경계, 프롬프트 제출, 권한 요청 및 압축과 같은 특정 라이프사이클 이벤트에서 실행됩니다. 전체 목록은 [Hooks](/ko/hooks)를 참조하세요.

249 

250 **로드되는 내용:** 기본적으로 없음. Hook은 외부 스크립트로 실행됩니다.

251 

252 **컨텍스트 비용:** 0, hook이 대화에 메시지로 추가되는 출력을 반환하지 않는 한.

253 

254 <Tip>Hook은 Claude의 컨텍스트에 영향을 주지 않아야 하는 부작용(린팅, 로깅)에 이상적입니다.</Tip>

255 </Tab>

256</Tabs>

257 

258## 더 알아보기

259 

260각 기능에는 설정 지침, 예시 및 구성 옵션이 있는 자신의 가이드가 있습니다.

261 

262<CardGroup cols={2}>

263 <Card title="CLAUDE.md" icon="file-lines" href="/ko/memory">

264 프로젝트 컨텍스트, 규칙 및 지침 저장

265 </Card>

266 

267 <Card title="Skills" icon="brain" href="/ko/skills">

268 Claude에게 도메인 전문성 및 재사용 가능한 워크플로우 제공

269 </Card>

270 

271 <Card title="Subagents" icon="users" href="/ko/sub-agents">

272 격리된 컨텍스트로 작업 오프로드

273 </Card>

274 

275 <Card title="Agent teams" icon="network" href="/ko/agent-teams">

276 병렬로 작동하는 여러 세션 조정

277 </Card>

278 

279 <Card title="MCP" icon="plug" href="/ko/mcp">

280 Claude를 외부 서비스에 연결

281 </Card>

282 

283 <Card title="Hooks" icon="bolt" href="/ko/hooks-guide">

284 Hook으로 워크플로우 자동화

285 </Card>

286 

287 <Card title="Plugins" icon="puzzle-piece" href="/ko/plugins">

288 기능 세트 번들 및 공유

289 </Card>

290 

291 <Card title="Marketplaces" icon="store" href="/ko/plugin-marketplaces">

292 플러그인 컬렉션 호스트 및 배포

293 </Card>

294</CardGroup>

fullscreen.md +159 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 전체 화면 렌더링

6 

7> 마우스 지원과 안정적인 메모리 사용으로 더 부드럽고 깜빡임 없는 렌더링 모드를 활성화합니다.

8 

9<Note>

10 전체 화면 렌더링은 선택적 [연구 미리보기](#research-preview)이며 Claude Code v2.1.89 이상이 필요합니다. 현재 대화에서 `/tui fullscreen`을 실행하여 전환하거나, v2.1.110 이전 버전에서 `CLAUDE_CODE_NO_FLICKER=1`을 설정합니다. 피드백에 따라 동작이 변경될 수 있습니다.

11</Note>

12 

13전체 화면 렌더링은 Claude Code CLI의 대체 렌더링 경로로, 깜빡임을 제거하고 긴 대화에서 메모리 사용량을 일정하게 유지하며 마우스 지원을 추가합니다. `vim` 또는 `htop`처럼 터미널의 대체 화면 버퍼에 인터페이스를 그리고 현재 표시되는 메시지만 렌더링합니다. 이렇게 하면 각 업데이트 시 터미널로 전송되는 데이터의 양이 줄어듭니다.

14 

15차이는 VS Code 통합 터미널, tmux, iTerm2와 같이 렌더링 처리량이 병목인 터미널 에뮬레이터에서 가장 두드러집니다. Claude가 작업 중일 때 터미널 스크롤 위치가 맨 위로 점프하거나 도구 출력이 스트리밍될 때 화면이 깜빡인다면, 이 모드가 이를 해결합니다.

16 

17<Note>

18 전체 화면이라는 용어는 Claude Code가 `vim`처럼 터미널의 그리기 표면을 차지하는 방식을 설명합니다. 터미널 창을 최대화하는 것과는 관계가 없으며 모든 창 크기에서 작동합니다.

19</Note>

20 

21## 전체 화면 렌더링 활성화

22 

23Claude Code 대화 내에서 `/tui fullscreen`을 실행합니다. CLI는 [`tui` 설정](/ko/settings#available-settings)을 저장하고 대화를 유지한 채로 전체 화면으로 다시 시작하므로 컨텍스트를 잃지 않고 세션 중간에 전환할 수 있습니다. 인수 없이 `/tui`를 실행하여 활성 렌더러를 확인합니다.

24 

25Claude Code를 시작하기 전에 `CLAUDE_CODE_NO_FLICKER` 환경 변수를 설정할 수도 있습니다:

26 

27```bash theme={null}

28CLAUDE_CODE_NO_FLICKER=1 claude

29```

30 

31`tui` 설정과 환경 변수는 동등합니다. `/tui` 명령은 다시 시작된 프로세스에서 `CLAUDE_CODE_NO_FLICKER`를 지우므로 작성한 설정이 적용됩니다.

32 

33## 변경 사항

34 

35전체 화면 렌더링은 CLI가 터미널에 그리는 방식을 변경합니다. 입력 상자는 출력이 스트리밍될 때 이동하는 대신 화면 하단에 고정됩니다. Claude가 작업 중일 때 입력이 제자리에 있으면 전체 화면 렌더링이 활성화된 것입니다. 렌더 트리에는 표시되는 메시지만 유지되므로 대화 길이에 관계없이 메모리가 일정하게 유지됩니다.

36 

37대화가 터미널의 스크롤백 대신 대체 화면 버퍼에 있기 때문에 몇 가지가 다르게 작동합니다:

38 

39| 이전 | 현재 | 세부 정보 |

40| :-------------------------- | :---------------------------------------------------- | :------------------------------------------------ |

41| `Cmd+f` 또는 tmux 검색으로 텍스트 찾기 | 트랜스크립트 모드의 경우 `Ctrl+o`, 그 다음 `/`로 검색하거나 `[`로 스크롤백에 작성 | [대화 검색 및 검토](#search-and-review-the-conversation) |

42| 터미널의 기본 클릭 및 드래그로 선택 및 복사 | 앱 내 선택, 마우스 릴리스 시 자동 복사 | [마우스 사용](#use-the-mouse) |

43| `Cmd`-클릭으로 URL 열기 | URL 클릭 | [마우스 사용](#use-the-mouse) |

44 

45마우스 캡처가 워크플로우를 방해하는 경우 깜빡임 없는 렌더링을 유지하면서 [이를 끌 수 있습니다](#keep-native-text-selection).

46 

47## 마우스 사용

48 

49전체 화면 렌더링은 마우스 이벤트를 캡처하고 Claude Code 내에서 처리합니다:

50 

51* **프롬프트 입력에서 클릭**하여 입력 중인 텍스트의 어디든지 커서를 배치합니다.

52* **축소된 도구 결과를 클릭**하여 확장하고 전체 출력을 봅니다. 다시 클릭하면 축소됩니다. 도구 호출과 그 결과가 함께 확장됩니다. 표시할 내용이 더 있는 메시지만 클릭 가능합니다.

53* **URL 또는 파일 경로를 클릭**하여 엽니다. Edit 또는 Write 후 인쇄된 것과 같은 도구 출력의 파일 경로는 기본 애플리케이션에서 열립니다. 일반 `http://` 및 `https://` URL은 브라우저에서 열립니다. 대부분의 터미널에서 이는 마우스 캡처가 가로채는 기본 `Cmd`-클릭 또는 `Ctrl`-클릭을 대체합니다. VS Code 통합 터미널 및 유사한 xterm.js 기반 터미널에서는 `Cmd`-클릭을 계속 사용합니다. Claude Code는 링크가 두 번 열리는 것을 피하기 위해 터미널의 자체 링크 핸들러로 연기합니다.

54* **클릭 및 드래그**하여 대화의 어디든지 텍스트를 선택합니다. 더블 클릭하면 단어를 선택하며, iTerm2의 단어 경계와 일치하므로 파일 경로가 하나의 단위로 선택됩니다. 트리플 클릭하면 줄을 선택합니다.

55* **마우스 휠로 스크롤**하여 대화를 이동합니다.

56 

57선택된 텍스트는 마우스 릴리스 시 자동으로 클립보드에 복사됩니다. 이를 끄려면 `/config`에서 선택 시 복사를 토글합니다. 끄면 `Ctrl+Shift+c`를 눌러 수동으로 복사합니다. kitty, WezTerm, Ghostty, iTerm2와 같은 kitty 키보드 프로토콜을 지원하는 터미널에서는 `Cmd+c`도 작동합니다. 활성 선택이 있으면 `Ctrl+c`는 취소하는 대신 복사합니다.

58 

59활성 선택이 있으면 `Shift`를 누르고 화살표 키를 눌러 키보드에서 확장합니다. `Shift+↑` 및 `Shift+↓`는 선택이 위쪽 또는 아래쪽 가장자리에 도달할 때 뷰포트를 스크롤합니다. `Shift+Home` 및 `Shift+End`는 현재 줄의 시작 또는 끝으로 확장합니다.

60 

61## 대화 스크롤

62 

63전체 화면 렌더링은 앱 내에서 스크롤을 처리합니다. 다음 단축키를 사용하여 탐색합니다:

64 

65| 단축키 | 작업 |

66| :-------------- | :------------------------- |

67| `PgUp` / `PgDn` | 화면의 절반만큼 위 또는 아래로 스크롤 |

68| `Ctrl+Home` | 대화의 시작으로 이동 |

69| `Ctrl+End` | 최신 메시지로 이동하고 자동 팔로우 다시 활성화 |

70| 마우스 휠 | 한 번에 몇 줄씩 스크롤 |

71 

72MacBook 키보드와 같이 전용 `PgUp`, `PgDn`, `Home` 또는 `End` 키가 없는 키보드에서는 화살표 키와 함께 `Fn`을 누릅니다: `Fn+↑`는 `PgUp`을 보내고, `Fn+↓`는 `PgDn`을 보내고, `Fn+←`는 `Home`을 보내고, `Fn+→`는 `End`를 보냅니다. 이렇게 하면 `Ctrl+Fn+→`가 맨 아래로 이동하는 단축키가 됩니다. 이것이 어색하게 느껴지면 마우스 휠로 맨 아래로 스크롤하여 팔로우를 재개하거나 `scroll:bottom`을 도달 가능한 것으로 다시 바인딩합니다.

73 

74이러한 작업은 다시 바인딩할 수 있습니다. 기본 바인딩이 없는 절반 페이지 및 전체 페이지 변형을 포함한 전체 작업 이름 목록은 [스크롤 작업](/ko/keybindings#scroll-actions)을 참조하십시오.

75 

76### 자동 팔로우

77 

78위로 스크롤하면 자동 팔로우가 일시 중지되므로 새 출력이 사용자를 맨 아래로 끌어당기지 않습니다. `Ctrl+End`를 누르거나 맨 아래로 스크롤하여 팔로우를 재개합니다.

79 

80자동 팔로우를 완전히 끄려면 뷰가 남겨진 위치에 머물도록 `/config`를 열고 자동 스크롤을 끔으로 설정합니다. 자동 스크롤이 비활성화되면 뷰가 자체적으로 맨 아래로 점프하지 않습니다. 응답이 필요한 권한 프롬프트 및 기타 대화는 이 설정에 관계없이 여전히 뷰로 스크롤됩니다.

81 

82### 마우스 휠 스크롤

83 

84마우스 휠 스크롤에는 터미널이 Claude Code에 마우스 이벤트를 전달해야 합니다. 대부분의 터미널은 애플리케이션이 요청할 때마다 이를 수행합니다. iTerm2는 이를 프로필별 설정으로 만듭니다: 휠이 작동하지 않지만 `PgUp` 및 `PgDn`이 작동하면 설정 → 프로필 → 터미널을 열고 마우스 보고 활성화를 켭니다. 클릭하여 확장 및 텍스트 선택이 작동하려면 동일한 설정도 필요합니다.

85 

86마우스 휠 스크롤이 느리게 느껴지면 터미널이 배수 없이 물리적 노치당 하나의 스크롤 이벤트를 보낼 수 있습니다. Ghostty 및 더 빠른 스크롤이 활성화된 iTerm2와 같은 일부 터미널은 이미 휠 이벤트를 증폭합니다. VS Code 통합 터미널을 포함한 다른 터미널은 노치당 정확히 하나의 이벤트를 보냅니다. Claude Code는 어느 것인지 감지할 수 없습니다.

87 

88기본 스크롤 거리를 곱하려면 `CLAUDE_CODE_SCROLL_SPEED`를 설정합니다:

89 

90```bash theme={null}

91export CLAUDE_CODE_SCROLL_SPEED=3

92```

93 

94`3` 값은 `vim` 및 유사한 애플리케이션의 기본값과 일치합니다. 설정은 1에서 20 사이의 값을 허용합니다.

95 

96## 대화 검색 및 검토

97 

98`Ctrl+o`는 일반 프롬프트와 트랜스크립트 모드 사이를 전환합니다. 마지막 프롬프트, 편집 diffstat가 있는 도구 호출의 한 줄 요약, 최종 응답만 표시하는 더 조용한 보기의 경우 `/focus`를 실행합니다. 설정은 세션 전체에 유지됩니다. 끄려면 `/focus`를 다시 실행합니다.

99 

100트랜스크립트 모드는 `less` 스타일 탐색 및 검색을 얻습니다:

101 

102| 키 | 작업 |

103| :----------------------------------- | :---------------------------------------------------------------- |

104| `/` | 검색을 엽니다. 입력하여 일치 항목을 찾고, `Enter`로 수락하고, `Esc`로 취소하고 스크롤 위치를 복원합니다 |

105| `n` / `N` | 다음 또는 이전 일치 항목으로 이동합니다. 검색 표시줄을 닫은 후 작동합니다 |

106| `j` / `k` 또는 `↑` / `↓` | 한 줄 스크롤 |

107| `g` / `G` 또는 `Home` / `End` | 맨 위 또는 맨 아래로 이동 |

108| `Ctrl+u` / `Ctrl+d` | 절반 페이지 스크롤 |

109| `Ctrl+b` / `Ctrl+f` 또는 `Space` / `b` | 전체 페이지 스크롤 |

110| `Ctrl+o`, `Esc`, 또는 `q` | 트랜스크립트 모드 종료 및 프롬프트로 돌아가기 |

111 

112터미널의 `Cmd+f`와 tmux 검색은 대화가 기본 스크롤백이 아닌 대체 화면 버퍼에 있기 때문에 대화를 볼 수 없습니다. 콘텐츠를 터미널로 돌려주려면 먼저 `Ctrl+o`를 눌러 트랜스크립트 모드로 들어간 다음:

113 

114* **`[`**: 모든 도구 출력이 확장된 전체 대화를 터미널의 기본 스크롤백 버퍼에 작성합니다. 대화는 이제 터미널의 일반 텍스트이므로 `Cmd+f`, tmux 복사 모드 및 기타 기본 도구가 검색하거나 선택할 수 있습니다. 긴 세션은 이 작업이 진행되는 동안 잠시 일시 중지될 수 있습니다. 이는 `Esc` 또는 `q`로 트랜스크립트 모드를 종료할 때까지 지속되며, 이는 전체 화면 렌더링으로 돌아갑니다. 다음 `Ctrl+o`는 새로 시작합니다.

115* **`v`**: 대화를 임시 파일에 작성하고 `$VISUAL` 또는 `$EDITOR`에서 엽니다.

116 

117`Esc` 또는 `q`를 눌러 프롬프트로 돌아갑니다.

118 

119## 대화 지우기

120 

1212초 이내에 `Ctrl+L`을 두 번 눌러 `/clear`를 실행하고 새 대화를 시작합니다. 첫 번째 누르기는 화면을 다시 그리고 힌트를 표시합니다. 두 번째 누르기는 대화를 지웁니다. macOS에서는 `Cmd+K`를 두 번 눌러도 `/clear`를 실행합니다.

122 

123## tmux와 함께 사용

124 

125전체 화면 렌더링은 tmux 내에서 작동하며 두 가지 주의 사항이 있습니다.

126 

127마우스 휠 스크롤에는 tmux의 마우스 모드가 필요합니다. `~/.tmux.conf`가 아직 활성화하지 않은 경우 이 줄을 추가하고 구성을 다시 로드합니다:

128 

129```bash theme={null}

130set -g mouse on

131```

132 

133마우스 모드가 없으면 휠 이벤트가 Claude Code 대신 tmux로 이동합니다. `PgUp` 및 `PgDn`을 사용한 키보드 스크롤은 어느 쪽이든 작동합니다. Claude Code는 마우스 모드가 꺼진 tmux를 감지하면 시작 시 일회성 힌트를 인쇄합니다.

134 

135전체 화면 렌더링은 iTerm2의 tmux 통합 모드와 호환되지 않습니다. 이는 `tmux -CC`로 들어가는 모드입니다. 통합 모드에서 iTerm2는 각 tmux 창을 tmux가 터미널에 그리도록 하는 대신 기본 분할로 렌더링합니다. 대체 화면 버퍼와 마우스 추적이 제대로 작동하지 않습니다: 마우스 휠이 작동하지 않고 더블 클릭이 터미널 상태를 손상시킬 수 있습니다. `tmux -CC` 세션에서 전체 화면 렌더링을 활성화하지 마십시오. `-CC` 없이 iTerm2 내부의 일반 tmux는 정상적으로 작동합니다.

136 

137## 기본 텍스트 선택 유지

138 

139마우스 캡처는 가장 일반적인 마찰 지점이며, 특히 SSH 또는 tmux 내에서 그렇습니다. Claude Code가 마우스 이벤트를 캡처하면 터미널의 기본 선택 시 복사가 작동하지 않습니다. 클릭 및 드래그로 만든 선택은 Claude Code 내부에 있으므로 터미널의 선택 버퍼에 없어서 tmux 복사 모드, Kitty 힌트 및 유사한 도구가 이를 볼 수 없습니다.

140 

141Claude Code는 선택을 클립보드에 작성하려고 시도하지만 사용하는 경로는 설정에 따라 다릅니다. tmux 내에서는 tmux 붙여넣기 버퍼에 작성합니다. SSH를 통해서는 일부 터미널이 기본적으로 차단하는 OSC 52 이스케이프 시퀀스로 폴백합니다. iTerm2는 설정 → 일반 → 선택 → 터미널의 애플리케이션이 클립보드에 액세스할 수 있음을 켤 때까지 차단합니다. Claude Code는 각 복사 후 사용한 경로를 알려주는 토스트를 인쇄합니다.

142 

143일회성 기본 선택의 경우 터미널의 바이패스 수정자를 누른 상태에서 클릭 및 드래그합니다: iTerm2에서는 `Option`, 대부분의 Linux 및 Windows 터미널에서는 `Shift`. 수정자는 마우스 이벤트를 Claude Code로 전달하는 대신 터미널이 선택을 직접 처리하도록 지시하므로 `Cmd+C`와 터미널의 다른 복사 단축키가 작동합니다.

144 

145기본 선택에 항상 의존하는 경우 `CLAUDE_CODE_DISABLE_MOUSE=1`을 설정하여 깜빡임 없는 렌더링과 평면 메모리를 유지하면서 마우스 캡처를 거부합니다:

146 

147```bash theme={null}

148CLAUDE_CODE_NO_FLICKER=1 CLAUDE_CODE_DISABLE_MOUSE=1 claude

149```

150 

151마우스 캡처가 비활성화되면 `PgUp`, `PgDn`, `Ctrl+Home`, `Ctrl+End`를 사용한 키보드 스크롤이 여전히 작동하고 터미널이 기본적으로 선택을 처리합니다. Claude Code 내에서 클릭하여 커서 위치 지정, 클릭하여 도구 출력 확장, URL 클릭, 휠 스크롤을 잃습니다.

152 

153## 연구 미리보기

154 

155전체 화면 렌더링은 연구 미리보기 기능입니다. 일반적인 터미널 에뮬레이터에서 테스트되었지만 덜 일반적인 터미널이나 비정상적인 구성에서 렌더링 문제가 발생할 수 있습니다.

156 

157문제가 발생하면 Claude Code 내에서 `/feedback`을 실행하여 보고하거나 [claude-code GitHub 저장소](https://github.com/anthropics/claude-code/issues)에서 문제를 엽니다. 터미널 에뮬레이터 이름과 버전을 포함합니다.

158 

159전체 화면 렌더링을 끄려면 `/tui default`를 실행하거나 그 방식으로 활성화한 경우 환경 변수를 설정 해제합니다.

github-actions.md +670 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Claude Code GitHub Actions

6 

7> Claude Code를 GitHub 워크플로우에 통합하는 방법에 대해 알아봅니다

8 

9Claude Code GitHub Actions는 GitHub 워크플로우에 AI 기반 자동화를 제공합니다. PR이나 이슈에서 간단한 `@claude` 멘션으로 Claude가 코드를 분석하고, 풀 리퀘스트를 생성하고, 기능을 구현하고, 버그를 수정할 수 있습니다. 모두 프로젝트의 표준을 따르면서 말입니다. 트리거 없이 모든 PR에 자동으로 게시되는 리뷰의 경우 [GitHub Code Review](/ko/code-review)를 참조하십시오.

10 

11<Note>

12 Claude Code GitHub Actions는 [Claude Agent SDK](/ko/agent-sdk/overview)를 기반으로 구축되어 있으며, 이를 통해 Claude Code를 애플리케이션에 프로그래밍 방식으로 통합할 수 있습니다. SDK를 사용하여 GitHub Actions를 넘어서는 사용자 정의 자동화 워크플로우를 구축할 수 있습니다.

13</Note>

14 

15<Info>

16 **Claude Opus 4.7을 이제 사용할 수 있습니다.** Claude Code GitHub Actions는 기본적으로 Sonnet을 사용합니다. Opus 4.7을 사용하려면 [모델 파라미터](#breaking-changes-reference)를 `claude-opus-4-7`을 사용하도록 구성하십시오.

17</Info>

18 

19## Claude Code GitHub Actions를 사용하는 이유는 무엇입니까?

20 

21* **즉시 PR 생성**: 필요한 사항을 설명하면 Claude가 모든 필요한 변경 사항이 포함된 완전한 PR을 생성합니다

22* **자동화된 코드 구현**: 이슈를 단일 명령으로 작동하는 코드로 변환합니다

23* **표준 준수**: Claude는 `CLAUDE.md` 지침과 기존 코드 패턴을 존중합니다

24* **간단한 설정**: 설치 프로그램과 API 키로 몇 분 안에 시작할 수 있습니다

25* **기본적으로 안전**: 코드는 Github의 러너에 유지됩니다

26 

27## Claude가 할 수 있는 것은 무엇입니까?

28 

29Claude Code는 코드 작업 방식을 변환하는 강력한 GitHub Action을 제공합니다:

30 

31### Claude Code Action

32 

33이 GitHub Action을 사용하면 GitHub Actions 워크플로우 내에서 Claude Code를 실행할 수 있습니다. 이를 사용하여 Claude Code 위에 사용자 정의 워크플로우를 구축할 수 있습니다.

34 

35[저장소 보기 →](https://github.com/anthropics/claude-code-action)

36 

37## 설정

38 

39## 빠른 설정

40 

41이 작업을 설정하는 가장 쉬운 방법은 터미널에서 Claude Code를 통하는 것입니다. claude를 열고 `/install-github-app`을 실행하면 됩니다.

42 

43이 명령은 GitHub 앱 및 필수 시크릿 설정을 안내합니다.

44 

45<Note>

46 * GitHub 앱을 설치하고 시크릿을 추가하려면 저장소 관리자여야 합니다

47 * GitHub 앱은 Contents, Issues 및 Pull requests에 대한 읽기 및 쓰기 권한을 요청합니다

48 * 이 빠른 시작 방법은 직접 Claude API 사용자만 사용할 수 있습니다. Amazon Bedrock 또는 Google Vertex AI를 사용 중인 경우 [Amazon Bedrock & Google Vertex AI 사용](#using-with-amazon-bedrock-%26-google-vertex-ai) 섹션을 참조하십시오.

49</Note>

50 

51## 수동 설정

52 

53`/install-github-app` 명령이 실패하거나 수동 설정을 선호하는 경우 다음 수동 설정 지침을 따르십시오:

54 

551. **Claude GitHub 앱을 저장소에 설치합니다**: [https://github.com/apps/claude](https://github.com/apps/claude)

56 

57 Claude GitHub 앱에는 다음 저장소 권한이 필요합니다:

58 

59 * **Contents**: 읽기 및 쓰기 (저장소 파일 수정)

60 * **Issues**: 읽기 및 쓰기 (이슈에 응답)

61 * **Pull requests**: 읽기 및 쓰기 (PR 생성 및 변경 사항 푸시)

62 

63 보안 및 권한에 대한 자세한 내용은 [보안 설명서](https://github.com/anthropics/claude-code-action/blob/main/docs/security.md)를 참조하십시오.

642. **ANTHROPIC\_API\_KEY를 저장소 시크릿에 추가합니다** ([GitHub Actions에서 시크릿을 사용하는 방법 알아보기](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions))

653. **워크플로우 파일을 복사합니다** [examples/claude.yml](https://github.com/anthropics/claude-code-action/blob/main/examples/claude.yml)에서 저장소의 `.github/workflows/`로

66 

67<Tip>

68 빠른 시작 또는 수동 설정을 완료한 후 이슈 또는 PR 댓글에서 `@claude`를 태그하여 작업을 테스트합니다.

69</Tip>

70 

71## 베타에서 업그레이드

72 

73<Warning>

74 Claude Code GitHub Actions v1.0은 베타 버전에서 v1.0으로 업그레이드하기 위해 워크플로우 파일을 업데이트해야 하는 주요 변경 사항을 도입합니다.

75</Warning>

76 

77현재 Claude Code GitHub Actions의 베타 버전을 사용 중인 경우 워크플로우를 GA 버전을 사용하도록 업데이트하는 것이 좋습니다. 새 버전은 자동 모드 감지와 같은 강력한 새 기능을 추가하면서 구성을 단순화합니다.

78 

79### 필수 변경 사항

80 

81모든 베타 사용자는 업그레이드하기 위해 워크플로우 파일에서 다음 변경 사항을 수행해야 합니다:

82 

831. **작업 버전 업데이트**: `@beta`를 `@v1`로 변경합니다

842. **모드 구성 제거**: `mode: "tag"` 또는 `mode: "agent"` 삭제 (이제 자동 감지됨)

853. **프롬프트 입력 업데이트**: `direct_prompt`를 `prompt`로 바꿉니다

864. **CLI 옵션 이동**: `max_turns`, `model`, `custom_instructions` 등을 `claude_args`로 변환합니다

87 

88### 주요 변경 사항 참조

89 

90| 이전 베타 입력 | 새 v1.0 입력 |

91| --------------------- | ------------------------------------- |

92| `mode` | *(제거됨 - 자동 감지됨)* |

93| `direct_prompt` | `prompt` |

94| `override_prompt` | GitHub 변수가 있는 `prompt` |

95| `custom_instructions` | `claude_args: --append-system-prompt` |

96| `max_turns` | `claude_args: --max-turns` |

97| `model` | `claude_args: --model` |

98| `allowed_tools` | `claude_args: --allowedTools` |

99| `disallowed_tools` | `claude_args: --disallowedTools` |

100| `claude_env` | `settings` JSON 형식 |

101 

102### 이전 및 이후 예제

103 

104**베타 버전:**

105 

106```yaml theme={null}

107- uses: anthropics/claude-code-action@beta

108 with:

109 mode: "tag"

110 direct_prompt: "Review this PR for security issues"

111 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

112 custom_instructions: "Follow our coding standards"

113 max_turns: "10"

114 model: "claude-sonnet-4-6"

115```

116 

117**GA 버전 (v1.0):**

118 

119```yaml theme={null}

120- uses: anthropics/claude-code-action@v1

121 with:

122 prompt: "Review this PR for security issues"

123 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

124 claude_args: |

125 --append-system-prompt "Follow our coding standards"

126 --max-turns 10

127 --model claude-sonnet-4-6

128```

129 

130<Tip>

131 작업은 이제 구성에 따라 대화형 모드(`@claude` 멘션에 응답) 또는 자동화 모드(프롬프트로 즉시 실행)에서 실행할지 여부를 자동으로 감지합니다.

132</Tip>

133 

134## 예제 사용 사례

135 

136Claude Code GitHub Actions는 다양한 작업에 도움이 될 수 있습니다. [examples 디렉토리](https://github.com/anthropics/claude-code-action/tree/main/examples)에는 다양한 시나리오에 대한 즉시 사용 가능한 워크플로우가 포함되어 있습니다.

137 

138### 기본 워크플로우

139 

140```yaml theme={null}

141name: Claude Code

142on:

143 issue_comment:

144 types: [created]

145 pull_request_review_comment:

146 types: [created]

147jobs:

148 claude:

149 runs-on: ubuntu-latest

150 steps:

151 - uses: anthropics/claude-code-action@v1

152 with:

153 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

154 # Responds to @claude mentions in comments

155```

156 

157### skills 사용

158 

159```yaml theme={null}

160name: Code Review

161on:

162 pull_request:

163 types: [opened, synchronize]

164jobs:

165 review:

166 runs-on: ubuntu-latest

167 steps:

168 - uses: anthropics/claude-code-action@v1

169 with:

170 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

171 prompt: "Review this pull request for code quality, correctness, and security. Analyze the diff, then post your findings as review comments."

172 claude_args: "--max-turns 5"

173```

174 

175### 프롬프트를 사용한 사용자 정의 자동화

176 

177```yaml theme={null}

178name: Daily Report

179on:

180 schedule:

181 - cron: "0 9 * * *"

182jobs:

183 report:

184 runs-on: ubuntu-latest

185 steps:

186 - uses: anthropics/claude-code-action@v1

187 with:

188 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

189 prompt: "Generate a summary of yesterday's commits and open issues"

190 claude_args: "--model opus"

191```

192 

193### 일반적인 사용 사례

194 

195이슈 또는 PR 댓글에서:

196 

197```text theme={null}

198@claude implement this feature based on the issue description

199@claude how should I implement user authentication for this endpoint?

200@claude fix the TypeError in the user dashboard component

201```

202 

203Claude는 자동으로 컨텍스트를 분석하고 적절하게 응답합니다.

204 

205## 모범 사례

206 

207### CLAUDE.md 구성

208 

209저장소 루트에 `CLAUDE.md` 파일을 생성하여 코드 스타일 지침, 리뷰 기준, 프로젝트별 규칙 및 선호하는 패턴을 정의합니다. 이 파일은 Claude의 프로젝트 표준 이해를 안내합니다.

210 

211### 보안 고려 사항

212 

213<Warning>API 키를 저장소에 직접 커밋하지 마십시오.</Warning>

214 

215권한, 인증 및 모범 사례를 포함한 포괄적인 보안 지침은 [Claude Code Action 보안 설명서](https://github.com/anthropics/claude-code-action/blob/main/docs/security.md)를 참조하십시오.

216 

217항상 GitHub Secrets를 API 키에 사용합니다:

218 

219* API 키를 `ANTHROPIC_API_KEY`라는 저장소 시크릿으로 추가합니다

220* 워크플로우에서 참조합니다: `anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}`

221* 작업 권한을 필요한 것으로만 제한합니다

222* 병합하기 전에 Claude의 제안을 검토합니다

223 

224API 키를 워크플로우 파일에 직접 하드코딩하는 대신 항상 GitHub Secrets(예: `${{ secrets.ANTHROPIC_API_KEY }}`)를 사용합니다.

225 

226### 성능 최적화

227 

228이슈 템플릿을 사용하여 컨텍스트를 제공하고, `CLAUDE.md`를 간결하고 집중적으로 유지하고, 워크플로우에 적절한 타임아웃을 구성합니다.

229 

230### CI 비용

231 

232Claude Code GitHub Actions를 사용할 때 관련 비용을 인식합니다:

233 

234**GitHub Actions 비용:**

235 

236* Claude Code는 GitHub 호스팅 러너에서 실행되며, 이는 GitHub Actions 분을 소비합니다

237* 자세한 가격 책정 및 분 제한은 [GitHub의 청구 설명서](https://docs.github.com/en/billing/managing-billing-for-your-products/managing-billing-for-github-actions/about-billing-for-github-actions)를 참조하십시오

238 

239**API 비용:**

240 

241* 각 Claude 상호 작용은 프롬프트 및 응답의 길이에 따라 API 토큰을 소비합니다

242* 토큰 사용량은 작업 복잡도 및 코드베이스 크기에 따라 다릅니다

243* 현재 토큰 요금은 [Claude의 가격 책정 페이지](https://claude.com/platform/api)를 참조하십시오

244 

245**비용 최적화 팁:**

246 

247* 특정 `@claude` 명령을 사용하여 불필요한 API 호출을 줄입니다

248* `claude_args`에서 적절한 `--max-turns`를 구성하여 과도한 반복을 방지합니다

249* 워크플로우 수준 타임아웃을 설정하여 실행 중인 작업을 방지합니다

250* GitHub의 동시성 제어를 사용하여 병렬 실행을 제한하는 것을 고려합니다

251 

252## 구성 예제

253 

254Claude Code Action v1은 통합 파라미터로 구성을 단순화합니다:

255 

256```yaml theme={null}

257- uses: anthropics/claude-code-action@v1

258 with:

259 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

260 prompt: "Your instructions here" # Optional

261 claude_args: "--max-turns 5" # Optional CLI arguments

262```

263 

264주요 기능:

265 

266* **통합 프롬프트 인터페이스** - 모든 지침에 `prompt` 사용

267* **skills** - 프롬프트에서 설치된 [skills](/ko/skills)를 직접 호출합니다

268* **CLI 통과** - `claude_args`를 통한 모든 Claude Code CLI 인수

269* **유연한 트리거** - 모든 GitHub 이벤트와 함께 작동합니다

270 

271완전한 워크플로우 파일은 [examples 디렉토리](https://github.com/anthropics/claude-code-action/tree/main/examples)를 방문하십시오.

272 

273<Tip>

274 이슈 또는 PR 댓글에 응답할 때 Claude는 자동으로 @claude 멘션에 응답합니다. 다른 이벤트의 경우 `prompt` 파라미터를 사용하여 지침을 제공합니다.

275</Tip>

276 

277## Amazon Bedrock & Google Vertex AI 사용

278 

279엔터프라이즈 환경의 경우 자신의 클라우드 인프라와 함께 Claude Code GitHub Actions를 사용할 수 있습니다. 이 접근 방식은 동일한 기능을 유지하면서 데이터 거주지 및 청구에 대한 제어를 제공합니다.

280 

281### 필수 조건

282 

283클라우드 공급자와 함께 Claude Code GitHub Actions를 설정하기 전에 다음이 필요합니다:

284 

285#### Google Cloud Vertex AI의 경우:

286 

2871. Vertex AI가 활성화된 Google Cloud 프로젝트

2882. GitHub Actions에 대해 구성된 Workload Identity Federation

2893. 필요한 권한이 있는 서비스 계정

2904. GitHub 앱(권장) 또는 기본 GITHUB\_TOKEN 사용

291 

292#### Amazon Bedrock의 경우:

293 

2941. Amazon Bedrock이 활성화된 AWS 계정

2952. AWS에서 구성된 GitHub OIDC Identity Provider

2963. Bedrock 권한이 있는 IAM 역할

2974. GitHub 앱(권장) 또는 기본 GITHUB\_TOKEN 사용

298 

299<Steps>

300 <Step title="사용자 정의 GitHub 앱 생성 (3P 공급자에 권장)">

301 Vertex AI 또는 Bedrock과 같은 3P 공급자를 사용할 때 최상의 제어 및 보안을 위해 자신의 GitHub 앱을 생성하는 것이 좋습니다:

302 

303 1. [https://github.com/settings/apps/new로](https://github.com/settings/apps/new로) 이동합니다

304 2. 기본 정보를 입력합니다:

305 * **GitHub 앱 이름**: 고유한 이름을 선택합니다 (예: "YourOrg Claude Assistant")

306 * **홈페이지 URL**: 조직의 웹사이트 또는 저장소 URL

307 3. 앱 설정을 구성합니다:

308 * **Webhooks**: "Active" 선택 해제 (이 통합에는 필요하지 않음)

309 4. 필수 권한을 설정합니다:

310 * **저장소 권한**:

311 * Contents: 읽기 및 쓰기

312 * Issues: 읽기 및 쓰기

313 * Pull requests: 읽기 및 쓰기

314 5. "GitHub 앱 생성"을 클릭합니다

315 6. 생성 후 "개인 키 생성"을 클릭하고 다운로드한 `.pem` 파일을 저장합니다

316 7. 앱 설정 페이지에서 앱 ID를 기록합니다

317 8. 저장소에 앱을 설치합니다:

318 * 앱의 설정 페이지에서 왼쪽 사이드바의 "앱 설치"를 클릭합니다

319 * 계정 또는 조직을 선택합니다

320 * "선택한 저장소만"을 선택하고 특정 저장소를 선택합니다

321 * "설치"를 클릭합니다

322 9. 개인 키를 저장소 시크릿으로 추가합니다:

323 * 저장소의 설정 → 시크릿 및 변수 → Actions로 이동합니다

324 * `.pem` 파일의 내용으로 `APP_PRIVATE_KEY`라는 새 시크릿을 생성합니다

325 10. 앱 ID를 시크릿으로 추가합니다:

326 

327 * GitHub 앱의 ID로 `APP_ID`라는 새 시크릿을 생성합니다

328 

329 <Note>

330 이 앱은 [actions/create-github-app-token](https://github.com/actions/create-github-app-token) 작업과 함께 사용되어 워크플로우에서 인증 토큰을 생성합니다.

331 </Note>

332 

333 **Claude API의 경우 또는 자신의 Github 앱을 설정하지 않으려는 경우 대안**: 공식 Anthropic 앱을 사용합니다:

334 

335 1. 다음에서 설치합니다: [https://github.com/apps/claude](https://github.com/apps/claude)

336 2. 인증을 위한 추가 구성이 필요하지 않습니다

337 </Step>

338 

339 <Step title="클라우드 공급자 인증 구성">

340 클라우드 공급자를 선택하고 안전한 인증을 설정합니다:

341 

342 <AccordionGroup>

343 <Accordion title="Amazon Bedrock">

344 **자격 증명을 저장하지 않고 GitHub Actions가 안전하게 인증할 수 있도록 AWS를 구성합니다.**

345 

346 > **보안 참고**: 저장소별 구성을 사용하고 최소 필요 권한만 부여합니다.

347 

348 **필수 설정**:

349 

350 1. **Amazon Bedrock 활성화**:

351 * Amazon Bedrock에서 Claude 모델에 대한 액세스 요청

352 * 교차 지역 모델의 경우 모든 필요한 지역에서 액세스 요청

353 

354 2. **GitHub OIDC Identity Provider 설정**:

355 * 공급자 URL: `https://token.actions.githubusercontent.com`

356 * 대상: `sts.amazonaws.com`

357 

358 3. **GitHub Actions용 IAM 역할 생성**:

359 * 신뢰할 수 있는 엔티티 유형: 웹 ID

360 * ID 공급자: `token.actions.githubusercontent.com`

361 * 권한: `AmazonBedrockFullAccess` 정책

362 * 특정 저장소에 대한 신뢰 정책 구성

363 

364 **필수 값**:

365 

366 설정 후 다음이 필요합니다:

367 

368 * **AWS\_ROLE\_TO\_ASSUME**: 생성한 IAM 역할의 ARN

369 

370 <Tip>

371 OIDC는 자격 증명이 임시이고 자동으로 회전되기 때문에 정적 AWS 액세스 키를 사용하는 것보다 더 안전합니다.

372 </Tip>

373 

374 자세한 OIDC 설정 지침은 [AWS 설명서](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html)를 참조하십시오.

375 </Accordion>

376 

377 <Accordion title="Google Vertex AI">

378 **자격 증명을 저장하지 않고 GitHub Actions가 안전하게 인증할 수 있도록 Google Cloud를 구성합니다.**

379 

380 > **보안 참고**: 저장소별 구성을 사용하고 최소 필요 권한만 부여합니다.

381 

382 **필수 설정**:

383 

384 1. **Google Cloud 프로젝트에서 API 활성화**:

385 * IAM Credentials API

386 * Security Token Service (STS) API

387 * Vertex AI API

388 

389 2. **Workload Identity Federation 리소스 생성**:

390 * Workload Identity Pool 생성

391 * 다음을 사용하여 GitHub OIDC 공급자 추가:

392 * 발급자: `https://token.actions.githubusercontent.com`

393 * 저장소 및 소유자에 대한 속성 매핑

394 * **보안 권장**: 저장소별 속성 조건 사용

395 

396 3. **서비스 계정 생성**:

397 * `Vertex AI User` 역할만 부여

398 * **보안 권장**: 저장소당 전용 서비스 계정 생성

399 

400 4. **IAM 바인딩 구성**:

401 * Workload Identity Pool이 서비스 계정을 가장하도록 허용

402 * **보안 권장**: 저장소별 주체 집합 사용

403 

404 **필수 값**:

405 

406 설정 후 다음이 필요합니다:

407 

408 * **GCP\_WORKLOAD\_IDENTITY\_PROVIDER**: 전체 공급자 리소스 이름

409 * **GCP\_SERVICE\_ACCOUNT**: 서비스 계정 이메일 주소

410 

411 <Tip>

412 Workload Identity Federation은 다운로드 가능한 서비스 계정 키의 필요성을 제거하여 보안을 개선합니다.

413 </Tip>

414 

415 자세한 설정 지침은 [Google Cloud Workload Identity Federation 설명서](https://cloud.google.com/iam/docs/workload-identity-federation)를 참조하십시오.

416 </Accordion>

417 </AccordionGroup>

418 </Step>

419 

420 <Step title="필수 시크릿 추가">

421 저장소에 다음 시크릿을 추가합니다 (설정 → 시크릿 및 변수 → Actions):

422 

423 #### Claude API의 경우 (직접):

424 

425 1. **API 인증의 경우**:

426 * `ANTHROPIC_API_KEY`: [console.anthropic.com](https://console.anthropic.com)의 Claude API 키

427 

428 2. **GitHub 앱의 경우 (자신의 앱을 사용하는 경우)**:

429 * `APP_ID`: GitHub 앱의 ID

430 * `APP_PRIVATE_KEY`: 개인 키 (.pem) 내용

431 

432 #### Google Cloud Vertex AI의 경우

433 

434 1. **GCP 인증의 경우**:

435 * `GCP_WORKLOAD_IDENTITY_PROVIDER`

436 * `GCP_SERVICE_ACCOUNT`

437 

438 2. **GitHub 앱의 경우 (자신의 앱을 사용하는 경우)**:

439 * `APP_ID`: GitHub 앱의 ID

440 * `APP_PRIVATE_KEY`: 개인 키 (.pem) 내용

441 

442 #### Amazon Bedrock의 경우

443 

444 1. **AWS 인증의 경우**:

445 * `AWS_ROLE_TO_ASSUME`

446 

447 2. **GitHub 앱의 경우 (자신의 앱을 사용하는 경우)**:

448 * `APP_ID`: GitHub 앱의 ID

449 * `APP_PRIVATE_KEY`: 개인 키 (.pem) 내용

450 </Step>

451 

452 <Step title="워크플로우 파일 생성">

453 클라우드 공급자와 통합되는 GitHub Actions 워크플로우 파일을 생성합니다. 아래 예제는 Amazon Bedrock 및 Google Vertex AI 모두에 대한 완전한 구성을 보여줍니다:

454 

455 <AccordionGroup>

456 <Accordion title="Amazon Bedrock 워크플로우">

457 **필수 조건:**

458 

459 * Amazon Bedrock 액세스가 Claude 모델 권한으로 활성화됨

460 * GitHub가 AWS에서 OIDC ID 공급자로 구성됨

461 * GitHub Actions를 신뢰하는 Bedrock 권한이 있는 IAM 역할

462 

463 **필수 GitHub 시크릿:**

464 

465 | 시크릿 이름 | 설명 |

466 | -------------------- | ------------------------ |

467 | `AWS_ROLE_TO_ASSUME` | Bedrock 액세스용 IAM 역할의 ARN |

468 | `APP_ID` | GitHub 앱 ID (앱 설정에서) |

469 | `APP_PRIVATE_KEY` | GitHub 앱에 대해 생성한 개인 키 |

470 

471 ```yaml theme={null}

472 name: Claude PR Action

473 

474 permissions:

475 contents: write

476 pull-requests: write

477 issues: write

478 id-token: write

479 

480 on:

481 issue_comment:

482 types: [created]

483 pull_request_review_comment:

484 types: [created]

485 issues:

486 types: [opened, assigned]

487 

488 jobs:

489 claude-pr:

490 if: |

491 (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||

492 (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||

493 (github.event_name == 'issues' && contains(github.event.issue.body, '@claude'))

494 runs-on: ubuntu-latest

495 env:

496 AWS_REGION: us-west-2

497 steps:

498 - name: Checkout repository

499 uses: actions/checkout@v4

500 

501 - name: Generate GitHub App token

502 id: app-token

503 uses: actions/create-github-app-token@v2

504 with:

505 app-id: ${{ secrets.APP_ID }}

506 private-key: ${{ secrets.APP_PRIVATE_KEY }}

507 

508 - name: Configure AWS Credentials (OIDC)

509 uses: aws-actions/configure-aws-credentials@v4

510 with:

511 role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}

512 aws-region: us-west-2

513 

514 - uses: anthropics/claude-code-action@v1

515 with:

516 github_token: ${{ steps.app-token.outputs.token }}

517 use_bedrock: "true"

518 claude_args: '--model us.anthropic.claude-sonnet-4-6 --max-turns 10'

519 ```

520 

521 <Tip>

522 Bedrock의 모델 ID 형식에는 지역 접두사가 포함됩니다 (예: `us.anthropic.claude-sonnet-4-6`).

523 </Tip>

524 </Accordion>

525 

526 <Accordion title="Google Vertex AI 워크플로우">

527 **필수 조건:**

528 

529 * GCP 프로젝트에서 Vertex AI API 활성화됨

530 * GitHub에 대해 구성된 Workload Identity Federation

531 * Vertex AI 권한이 있는 서비스 계정

532 

533 **필수 GitHub 시크릿:**

534 

535 | 시크릿 이름 | 설명 |

536 | -------------------------------- | --------------------------------- |

537 | `GCP_WORKLOAD_IDENTITY_PROVIDER` | Workload Identity Provider 리소스 이름 |

538 | `GCP_SERVICE_ACCOUNT` | Vertex AI 액세스 권한이 있는 서비스 계정 이메일 |

539 | `APP_ID` | GitHub 앱 ID (앱 설정에서) |

540 | `APP_PRIVATE_KEY` | GitHub 앱에 대해 생성한 개인 키 |

541 

542 ```yaml theme={null}

543 name: Claude PR Action

544 

545 permissions:

546 contents: write

547 pull-requests: write

548 issues: write

549 id-token: write

550 

551 on:

552 issue_comment:

553 types: [created]

554 pull_request_review_comment:

555 types: [created]

556 issues:

557 types: [opened, assigned]

558 

559 jobs:

560 claude-pr:

561 if: |

562 (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||

563 (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||

564 (github.event_name == 'issues' && contains(github.event.issue.body, '@claude'))

565 runs-on: ubuntu-latest

566 steps:

567 - name: Checkout repository

568 uses: actions/checkout@v4

569 

570 - name: Generate GitHub App token

571 id: app-token

572 uses: actions/create-github-app-token@v2

573 with:

574 app-id: ${{ secrets.APP_ID }}

575 private-key: ${{ secrets.APP_PRIVATE_KEY }}

576 

577 - name: Authenticate to Google Cloud

578 id: auth

579 uses: google-github-actions/auth@v2

580 with:

581 workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}

582 service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}

583 

584 - uses: anthropics/claude-code-action@v1

585 with:

586 github_token: ${{ steps.app-token.outputs.token }}

587 trigger_phrase: "@claude"

588 use_vertex: "true"

589 claude_args: '--model claude-sonnet-4-5@20250929 --max-turns 10'

590 env:

591 ANTHROPIC_VERTEX_PROJECT_ID: ${{ steps.auth.outputs.project_id }}

592 CLOUD_ML_REGION: us-east5

593 VERTEX_REGION_CLAUDE_4_5_SONNET: us-east5

594 ```

595 

596 <Tip>

597 프로젝트 ID는 Google Cloud 인증 단계에서 자동으로 검색되므로 하드코딩할 필요가 없습니다.

598 </Tip>

599 </Accordion>

600 </AccordionGroup>

601 </Step>

602</Steps>

603 

604## 문제 해결

605 

606### Claude가 @claude 명령에 응답하지 않음

607 

608GitHub 앱이 올바르게 설치되었는지 확인하고, 워크플로우가 활성화되었는지 확인하고, API 키가 저장소 시크릿에 설정되었는지 확인하고, 댓글에 `@claude`가 포함되어 있는지 확인합니다 (`/claude` 아님).

609 

610### Claude의 커밋에서 CI가 실행되지 않음

611 

612GitHub 앱 또는 사용자 정의 앱을 사용 중인지 확인합니다 (Actions 사용자 아님), 워크플로우 트리거에 필요한 이벤트가 포함되어 있는지 확인하고, 앱 권한에 CI 트리거가 포함되어 있는지 확인합니다.

613 

614### 인증 오류

615 

616API 키가 유효하고 충분한 권한이 있는지 확인합니다. Bedrock/Vertex의 경우 자격 증명 구성을 확인하고 시크릿이 워크플로우에서 올바르게 명명되었는지 확인합니다.

617 

618## 고급 구성

619 

620### 작업 파라미터

621 

622Claude Code Action v1은 단순화된 구성을 사용합니다:

623 

624| 파라미터 | 설명 | 필수 |

625| ------------------- | ------------------------------------------------ | ----- |

626| `prompt` | Claude에 대한 지침 (일반 텍스트 또는 [skill](/ko/skills) 이름) | 아니오\* |

627| `claude_args` | Claude Code에 전달된 CLI 인수 | 아니오 |

628| `anthropic_api_key` | Claude API 키 | 예\*\* |

629| `github_token` | API 액세스용 GitHub 토큰 | 아니오 |

630| `trigger_phrase` | 사용자 정의 트리거 구문 (기본값: "@claude") | 아니오 |

631| `use_bedrock` | Claude API 대신 Amazon Bedrock 사용 | 아니오 |

632| `use_vertex` | Claude API 대신 Google Vertex AI 사용 | 아니오 |

633 

634\*프롬프트는 선택 사항입니다. 이슈/PR 댓글에서 생략하면 Claude는 트리거 구문에 응답합니다\

635\*\*직접 Claude API에 필수이며, Bedrock/Vertex에는 필수가 아닙니다

636 

637#### CLI 인수 전달

638 

639`claude_args` 파라미터는 모든 Claude Code CLI 인수를 허용합니다:

640 

641```yaml theme={null}

642claude_args: "--max-turns 5 --model claude-sonnet-4-6 --mcp-config /path/to/config.json"

643```

644 

645일반적인 인수:

646 

647* `--max-turns`: 최대 대화 턴 (기본값: 10)

648* `--model`: 사용할 모델 (예: `claude-sonnet-4-6`)

649* `--mcp-config`: MCP 구성 경로

650* `--allowedTools`: 허용된 도구의 쉼표로 구분된 목록. `--allowed-tools` 별칭도 작동합니다.

651* `--debug`: 디버그 출력 활성화

652 

653### 대체 통합 방법

654 

655`/install-github-app` 명령이 권장되는 접근 방식이지만 다음을 수행할 수도 있습니다:

656 

657* **사용자 정의 GitHub 앱**: 브랜드 사용자 이름 또는 사용자 정의 인증 흐름이 필요한 조직의 경우. 필요한 권한(contents, issues, pull requests)으로 자신의 GitHub 앱을 생성하고 actions/create-github-app-token 작업을 사용하여 워크플로우에서 토큰을 생성합니다.

658* **수동 GitHub Actions**: 최대 유연성을 위한 직접 워크플로우 구성

659* **MCP 구성**: Model Context Protocol 서버의 동적 로딩

660 

661자세한 인증, 보안 및 고급 구성 가이드는 [Claude Code Action 설명서](https://github.com/anthropics/claude-code-action/blob/main/docs)를 참조하십시오.

662 

663### Claude의 동작 사용자 정의

664 

665두 가지 방법으로 Claude의 동작을 구성할 수 있습니다:

666 

6671. **CLAUDE.md**: 저장소의 루트에 `CLAUDE.md` 파일에서 코딩 표준, 리뷰 기준 및 프로젝트별 규칙을 정의합니다. Claude는 PR을 생성하고 요청에 응답할 때 이러한 지침을 따릅니다. 자세한 내용은 [Memory 설명서](/ko/memory)를 확인하십시오.

6682. **사용자 정의 프롬프트**: 워크플로우 파일의 `prompt` 파라미터를 사용하여 워크플로우별 지침을 제공합니다. 이를 통해 다양한 워크플로우 또는 작업에 대해 Claude의 동작을 사용자 정의할 수 있습니다.

669 

670Claude는 PR을 생성하고 요청에 응답할 때 이러한 지침을 따릅니다.

gitlab-ci-cd.md +466 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Claude Code GitLab CI/CD

6 

7> Claude Code를 GitLab CI/CD와 함께 개발 워크플로우에 통합하는 방법을 알아봅니다

8 

9<Info>

10 Claude Code for GitLab CI/CD는 현재 베타 버전입니다. 경험을 개선하면서 기능과 기능성이 진화할 수 있습니다.

11 

12 이 통합은 GitLab에서 유지 관리합니다. 지원을 받으려면 다음 [GitLab 이슈](https://gitlab.com/gitlab-org/gitlab/-/issues/573776)를 참조하세요.

13</Info>

14 

15<Note>

16 이 통합은 [Claude Code CLI and Agent SDK](/ko/agent-sdk/overview) 위에 구축되어 있으며, CI/CD 작업 및 사용자 정의 자동화 워크플로우에서 Claude를 프로그래밍 방식으로 사용할 수 있습니다.

17</Note>

18 

19## GitLab에서 Claude Code를 사용하는 이유

20 

21* **즉시 MR 생성**: 필요한 사항을 설명하면 Claude가 변경 사항과 설명이 포함된 완전한 MR을 제안합니다

22* **자동화된 구현**: 단일 명령 또는 언급으로 이슈를 작동하는 코드로 변환합니다

23* **프로젝트 인식**: Claude는 `CLAUDE.md` 지침과 기존 코드 패턴을 따릅니다

24* **간단한 설정**: `.gitlab-ci.yml`에 하나의 작업과 마스킹된 CI/CD 변수를 추가합니다

25* **엔터프라이즈 준비**: Claude API, Amazon Bedrock 또는 Google Vertex AI를 선택하여 데이터 거주지 및 조달 요구 사항을 충족합니다

26* **기본적으로 안전**: GitLab 러너에서 실행되며 브랜치 보호 및 승인이 적용됩니다

27 

28## 작동 방식

29 

30Claude Code는 GitLab CI/CD를 사용하여 격리된 작업에서 AI 작업을 실행하고 MR을 통해 결과를 다시 커밋합니다:

31 

321. **이벤트 기반 오케스트레이션**: GitLab은 선택한 트리거(예: 이슈, MR 또는 검토 스레드에서 `@claude`를 언급하는 댓글)를 수신합니다. 작업은 스레드 및 저장소에서 컨텍스트를 수집하고, 해당 입력에서 프롬프트를 작성하고, Claude Code를 실행합니다.

33 

342. **공급자 추상화**: 환경에 맞는 공급자를 사용합니다:

35 * Claude API (SaaS)

36 * Amazon Bedrock (IAM 기반 액세스, 교차 지역 옵션)

37 * Google Vertex AI (GCP 네이티브, Workload Identity Federation)

38 

393. **샌드박스 실행**: 각 상호 작용은 엄격한 네트워크 및 파일 시스템 규칙이 있는 컨테이너에서 실행됩니다. Claude Code는 쓰기를 제한하기 위해 작업 공간 범위 권한을 적용합니다. 모든 변경 사항은 MR을 통해 흐르므로 검토자가 diff를 보고 승인이 여전히 적용됩니다.

40 

41지역 엔드포인트를 선택하여 지연 시간을 줄이고 기존 클라우드 계약을 사용하면서 데이터 주권 요구 사항을 충족합니다.

42 

43## Claude가 할 수 있는 것

44 

45Claude Code는 코드 작업 방식을 변환하는 강력한 CI/CD 워크플로우를 활성화합니다:

46 

47* 이슈 설명 또는 댓글에서 MR 생성 및 업데이트

48* 성능 회귀 분석 및 최적화 제안

49* 브랜치에 직접 기능 구현 후 MR 열기

50* 테스트 또는 댓글로 식별된 버그 및 회귀 수정

51* 후속 댓글에 응답하여 요청된 변경 사항에 대해 반복

52 

53## 설정

54 

55### 빠른 설정

56 

57가장 빠른 시작 방법은 `.gitlab-ci.yml`에 최소 작업을 추가하고 API 키를 마스킹된 변수로 설정하는 것입니다.

58 

591. **마스킹된 CI/CD 변수 추가**

60 * **설정** → **CI/CD** → **변수**로 이동합니다

61 * `ANTHROPIC_API_KEY` 추가 (마스킹됨, 필요에 따라 보호됨)

62 

632. **`.gitlab-ci.yml`에 Claude 작업 추가**

64 

65```yaml theme={null}

66stages:

67 - ai

68 

69claude:

70 stage: ai

71 image: node:24-alpine3.21

72 # 작업을 트리거하는 방법에 맞게 규칙을 조정합니다:

73 # - 수동 실행

74 # - 병합 요청 이벤트

75 # - '@claude'를 포함하는 댓글이 있을 때 웹/API 트리거

76 rules:

77 - if: '$CI_PIPELINE_SOURCE == "web"'

78 - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

79 variables:

80 GIT_STRATEGY: fetch

81 before_script:

82 - apk update

83 - apk add --no-cache git curl bash

84 - curl -fsSL https://claude.ai/install.sh | bash

85 script:

86 # 선택 사항: 설정에서 제공하는 경우 GitLab MCP 서버 시작

87 - /bin/gitlab-mcp-server || true

88 # 웹/API 트리거를 통해 컨텍스트 페이로드로 호출할 때 AI_FLOW_* 변수 사용

89 - echo "$AI_FLOW_INPUT for $AI_FLOW_CONTEXT on $AI_FLOW_EVENT"

90 - >

91 claude

92 -p "${AI_FLOW_INPUT:-'Review this MR and implement the requested changes'}"

93 --permission-mode acceptEdits

94 --allowedTools "Bash Read Edit Write mcp__gitlab"

95 --debug

96```

97 

98작업과 `ANTHROPIC_API_KEY` 변수를 추가한 후 **CI/CD** → **파이프라인**에서 작업을 수동으로 실행하여 테스트하거나, MR에서 트리거하여 Claude가 브랜치에서 업데이트를 제안하고 필요한 경우 MR을 열도록 합니다.

99 

100<Note>

101 Claude API 대신 Amazon Bedrock 또는 Google Vertex AI에서 실행하려면 아래의 [Amazon Bedrock & Google Vertex AI 사용](#amazon-bedrock--google-vertex-ai-사용) 섹션을 참조하여 인증 및 환경 설정을 확인하세요.

102</Note>

103 

104### 수동 설정 (프로덕션에 권장)

105 

106더 제어된 설정을 선호하거나 엔터프라이즈 공급자가 필요한 경우:

107 

1081. **공급자 액세스 구성**:

109 * **Claude API**: `ANTHROPIC_API_KEY`를 생성하고 마스킹된 CI/CD 변수로 저장합니다

110 * **Amazon Bedrock**: **GitLab 구성** → **AWS OIDC**를 구성하고 Bedrock용 IAM 역할을 생성합니다

111 * **Google Vertex AI**: **GitLab용 Workload Identity Federation 구성** → **GCP**

112 

1132. **GitLab API 작업을 위한 프로젝트 자격 증명 추가**:

114 * 기본적으로 `CI_JOB_TOKEN`을 사용하거나 `api` 범위가 있는 프로젝트 액세스 토큰을 생성합니다

115 * PAT를 사용하는 경우 `GITLAB_ACCESS_TOKEN` (마스킹됨)으로 저장합니다

116 

1173. **Claude 작업을 `.gitlab-ci.yml`에 추가** (아래 예제 참조)

118 

1194. **(선택 사항) 언급 기반 트리거 활성화**:

120 * 이벤트 리스너에 "댓글 (노트)"에 대한 프로젝트 웹훅을 추가합니다 (사용하는 경우)

121 * 댓글에 `@claude`가 포함될 때 `AI_FLOW_INPUT` 및 `AI_FLOW_CONTEXT`와 같은 변수로 파이프라인 트리거 API를 호출하도록 리스너를 설정합니다

122 

123## 예제 사용 사례

124 

125### 이슈를 MR로 변환

126 

127이슈 댓글에서:

128 

129```text theme={null}

130@claude implement this feature based on the issue description

131```

132 

133Claude는 이슈 및 코드베이스를 분석하고, 브랜치에서 변경 사항을 작성하고, 검토를 위해 MR을 엽니다.

134 

135### 구현 도움 받기

136 

137MR 토론에서:

138 

139```text theme={null}

140@claude suggest a concrete approach to cache the results of this API call

141```

142 

143Claude는 변경 사항을 제안하고, 적절한 캐싱으로 코드를 추가하고, MR을 업데이트합니다.

144 

145### 버그 빠르게 수정

146 

147이슈 또는 MR 댓글에서:

148 

149```text theme={null}

150@claude fix the TypeError in the user dashboard component

151```

152 

153Claude는 버그를 찾고, 수정을 구현하고, 브랜치를 업데이트하거나 새 MR을 엽니다.

154 

155## Amazon Bedrock & Google Vertex AI 사용

156 

157엔터프라이즈 환경의 경우 동일한 개발자 경험으로 클라우드 인프라에서 완전히 Claude Code를 실행할 수 있습니다.

158 

159<Tabs>

160 <Tab title="Amazon Bedrock">

161 ### 필수 조건

162 

163 Amazon Bedrock으로 Claude Code를 설정하기 전에 다음이 필요합니다:

164 

165 1. 원하는 Claude 모델에 대한 Amazon Bedrock 액세스가 있는 AWS 계정

166 2. AWS IAM에서 OIDC 자격 증명 공급자로 구성된 GitLab

167 3. Bedrock 권한이 있는 IAM 역할 및 GitLab 프로젝트/참조로 제한된 신뢰 정책

168 4. 역할 가정을 위한 GitLab CI/CD 변수:

169 * `AWS_ROLE_TO_ASSUME` (역할 ARN)

170 * `AWS_REGION` (Bedrock 지역)

171 

172 ### 설정 지침

173 

174 OIDC를 통해 GitLab CI 작업이 IAM 역할을 가정하도록 AWS를 구성합니다 (정적 키 없음).

175 

176 **필수 설정:**

177 

178 1. Amazon Bedrock을 활성화하고 대상 Claude 모델에 대한 액세스를 요청합니다

179 2. 아직 없는 경우 GitLab용 IAM OIDC 공급자를 생성합니다

180 3. GitLab OIDC 공급자를 신뢰하고 프로젝트 및 보호된 참조로 제한된 IAM 역할을 생성합니다

181 4. Bedrock 호출 API에 대한 최소 권한 권한을 연결합니다

182 

183 **CI/CD 변수에 저장할 필수 값:**

184 

185 * `AWS_ROLE_TO_ASSUME`

186 * `AWS_REGION`

187 

188 설정 → CI/CD → 변수에서 변수를 추가합니다:

189 

190 ```yaml theme={null}

191 # Amazon Bedrock의 경우:

192 - AWS_ROLE_TO_ASSUME

193 - AWS_REGION

194 ```

195 

196 위의 Amazon Bedrock 작업 예제를 사용하여 런타임에 GitLab 작업 토큰을 임시 AWS 자격 증명으로 교환합니다.

197 </Tab>

198 

199 <Tab title="Google Vertex AI">

200 ### 필수 조건

201 

202 Google Vertex AI로 Claude Code를 설정하기 전에 다음이 필요합니다:

203 

204 1. 다음이 포함된 Google Cloud 프로젝트:

205 * Vertex AI API 활성화됨

206 * GitLab OIDC를 신뢰하도록 구성된 Workload Identity Federation

207 2. 필요한 Vertex AI 역할만 있는 전용 서비스 계정

208 3. WIF용 GitLab CI/CD 변수:

209 * `GCP_WORKLOAD_IDENTITY_PROVIDER` (전체 리소스 이름)

210 * `GCP_SERVICE_ACCOUNT` (서비스 계정 이메일)

211 

212 ### 설정 지침

213 

214 Workload Identity Federation을 통해 GitLab CI 작업이 서비스 계정을 가장하도록 Google Cloud를 구성합니다.

215 

216 **필수 설정:**

217 

218 1. IAM Credentials API, STS API 및 Vertex AI API 활성화

219 2. GitLab OIDC용 Workload Identity Pool 및 공급자 생성

220 3. Vertex AI 역할이 있는 전용 서비스 계정 생성

221 4. WIF 주체에 서비스 계정을 가장할 수 있는 권한 부여

222 

223 **CI/CD 변수에 저장할 필수 값:**

224 

225 * `GCP_WORKLOAD_IDENTITY_PROVIDER`

226 * `GCP_SERVICE_ACCOUNT`

227 

228 설정 → CI/CD → 변수에서 변수를 추가합니다:

229 

230 ```yaml theme={null}

231 # Google Vertex AI의 경우:

232 - GCP_WORKLOAD_IDENTITY_PROVIDER

233 - GCP_SERVICE_ACCOUNT

234 - CLOUD_ML_REGION (예: us-east5)

235 ```

236 

237 위의 Google Vertex AI 작업 예제를 사용하여 키를 저장하지 않고 인증합니다.

238 </Tab>

239</Tabs>

240 

241## 구성 예제

242 

243파이프라인에 맞게 조정할 수 있는 즉시 사용 가능한 스니펫입니다.

244 

245### 기본 .gitlab-ci.yml (Claude API)

246 

247```yaml theme={null}

248stages:

249 - ai

250 

251claude:

252 stage: ai

253 image: node:24-alpine3.21

254 rules:

255 - if: '$CI_PIPELINE_SOURCE == "web"'

256 - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

257 variables:

258 GIT_STRATEGY: fetch

259 before_script:

260 - apk update

261 - apk add --no-cache git curl bash

262 - curl -fsSL https://claude.ai/install.sh | bash

263 script:

264 - /bin/gitlab-mcp-server || true

265 - >

266 claude

267 -p "${AI_FLOW_INPUT:-'Summarize recent changes and suggest improvements'}"

268 --permission-mode acceptEdits

269 --allowedTools "Bash Read Edit Write mcp__gitlab"

270 --debug

271 # Claude Code는 CI/CD 변수에서 ANTHROPIC_API_KEY를 사용합니다

272```

273 

274### Amazon Bedrock 작업 예제 (OIDC)

275 

276**필수 조건:**

277 

278* Amazon Bedrock이 활성화되고 선택한 Claude 모델에 액세스 가능

279* GitLab OIDC가 AWS에 구성되고 GitLab 프로젝트 및 참조를 신뢰하는 역할

280* Bedrock 권한이 있는 IAM 역할 (최소 권한 권장)

281 

282**필수 CI/CD 변수:**

283 

284* `AWS_ROLE_TO_ASSUME`: Bedrock 액세스용 IAM 역할의 ARN

285* `AWS_REGION`: Bedrock 지역 (예: `us-west-2`)

286 

287```yaml theme={null}

288claude-bedrock:

289 stage: ai

290 image: node:24-alpine3.21

291 rules:

292 - if: '$CI_PIPELINE_SOURCE == "web"'

293 before_script:

294 - apk add --no-cache bash curl jq git python3 py3-pip

295 - pip install --no-cache-dir awscli

296 - curl -fsSL https://claude.ai/install.sh | bash

297 # GitLab OIDC 토큰을 AWS 자격 증명으로 교환

298 - export AWS_WEB_IDENTITY_TOKEN_FILE="${CI_JOB_JWT_FILE:-/tmp/oidc_token}"

299 - if [ -n "${CI_JOB_JWT_V2}" ]; then printf "%s" "$CI_JOB_JWT_V2" > "$AWS_WEB_IDENTITY_TOKEN_FILE"; fi

300 - >

301 aws sts assume-role-with-web-identity

302 --role-arn "$AWS_ROLE_TO_ASSUME"

303 --role-session-name "gitlab-claude-$(date +%s)"

304 --web-identity-token "file://$AWS_WEB_IDENTITY_TOKEN_FILE"

305 --duration-seconds 3600 > /tmp/aws_creds.json

306 - export AWS_ACCESS_KEY_ID="$(jq -r .Credentials.AccessKeyId /tmp/aws_creds.json)"

307 - export AWS_SECRET_ACCESS_KEY="$(jq -r .Credentials.SecretAccessKey /tmp/aws_creds.json)"

308 - export AWS_SESSION_TOKEN="$(jq -r .Credentials.SessionToken /tmp/aws_creds.json)"

309 script:

310 - /bin/gitlab-mcp-server || true

311 - >

312 claude

313 -p "${AI_FLOW_INPUT:-'Implement the requested changes and open an MR'}"

314 --permission-mode acceptEdits

315 --allowedTools "Bash Read Edit Write mcp__gitlab"

316 --debug

317 variables:

318 AWS_REGION: "us-west-2"

319```

320 

321<Note>

322 Bedrock의 모델 ID에는 지역별 접두사가 포함됩니다 (예: `us.anthropic.claude-sonnet-4-6`). 워크플로우에서 지원하는 경우 작업 구성 또는 프롬프트를 통해 원하는 모델을 전달합니다.

323</Note>

324 

325### Google Vertex AI 작업 예제 (Workload Identity Federation)

326 

327**필수 조건:**

328 

329* GCP 프로젝트에서 Vertex AI API 활성화됨

330* GitLab OIDC를 신뢰하도록 구성된 Workload Identity Federation

331* Vertex AI 권한이 있는 서비스 계정

332 

333**필수 CI/CD 변수:**

334 

335* `GCP_WORKLOAD_IDENTITY_PROVIDER`: 전체 공급자 리소스 이름

336* `GCP_SERVICE_ACCOUNT`: 서비스 계정 이메일

337* `CLOUD_ML_REGION`: Vertex 지역 (예: `us-east5`)

338 

339```yaml theme={null}

340claude-vertex:

341 stage: ai

342 image: gcr.io/google.com/cloudsdktool/google-cloud-cli:slim

343 rules:

344 - if: '$CI_PIPELINE_SOURCE == "web"'

345 before_script:

346 - apt-get update && apt-get install -y git && apt-get clean

347 - curl -fsSL https://claude.ai/install.sh | bash

348 # WIF를 통해 Google Cloud에 인증 (다운로드된 키 없음)

349 - >

350 gcloud auth login --cred-file=<(cat <<EOF

351 {

352 "type": "external_account",

353 "audience": "${GCP_WORKLOAD_IDENTITY_PROVIDER}",

354 "subject_token_type": "urn:ietf:params:oauth:token-type:jwt",

355 "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/${GCP_SERVICE_ACCOUNT}:generateAccessToken",

356 "token_url": "https://sts.googleapis.com/v1/token"

357 }

358 EOF

359 )

360 - gcloud config set project "$(gcloud projects list --format='value(projectId)' --filter="name:${CI_PROJECT_NAMESPACE}" | head -n1)" || true

361 script:

362 - /bin/gitlab-mcp-server || true

363 - >

364 CLOUD_ML_REGION="${CLOUD_ML_REGION:-us-east5}"

365 claude

366 -p "${AI_FLOW_INPUT:-'Review and update code as requested'}"

367 --permission-mode acceptEdits

368 --allowedTools "Bash Read Edit Write mcp__gitlab"

369 --debug

370 variables:

371 CLOUD_ML_REGION: "us-east5"

372```

373 

374<Note>

375 Workload Identity Federation을 사용하면 서비스 계정 키를 저장할 필요가 없습니다. 저장소별 신뢰 조건 및 최소 권한 서비스 계정을 사용합니다.

376</Note>

377 

378## 모범 사례

379 

380### CLAUDE.md 구성

381 

382저장소 루트에 `CLAUDE.md` 파일을 생성하여 코딩 표준, 검토 기준 및 프로젝트별 규칙을 정의합니다. Claude는 실행 중에 이 파일을 읽고 변경 사항을 제안할 때 규칙을 따릅니다.

383 

384### 보안 고려 사항

385 

386**API 키 또는 클라우드 자격 증명을 저장소에 커밋하지 마세요**. 항상 GitLab CI/CD 변수를 사용합니다:

387 

388* `ANTHROPIC_API_KEY`를 마스킹된 변수로 추가합니다 (필요한 경우 보호)

389* 가능한 경우 공급자별 OIDC를 사용합니다 (장기 키 없음)

390* 작업 권한 및 네트워크 송신 제한

391* 다른 기여자처럼 Claude의 MR을 검토합니다

392 

393### 성능 최적화

394 

395* `CLAUDE.md`를 집중적이고 간결하게 유지합니다

396* 명확한 이슈/MR 설명을 제공하여 반복을 줄입니다

397* 작업 시간 초과를 구성하여 실행 중단을 방지합니다

398* 가능한 경우 러너에서 npm 및 패키지 설치를 캐시합니다

399 

400### CI 비용

401 

402GitLab CI/CD와 함께 Claude Code를 사용할 때 관련 비용을 인식합니다:

403 

404* **GitLab Runner 시간**:

405 * Claude는 GitLab 러너에서 실행되고 컴퓨팅 분을 소비합니다

406 * GitLab 플랜의 러너 청구 세부 정보를 참조하세요

407 

408* **API 비용**:

409 * 각 Claude 상호 작용은 프롬프트 및 응답 크기에 따라 토큰을 소비합니다

410 * 토큰 사용량은 작업 복잡도 및 코드베이스 크기에 따라 다릅니다

411 * [Anthropic 가격 책정](https://platform.claude.com/docs/ko/about-claude/pricing) 세부 정보를 참조하세요

412 

413* **비용 최적화 팁**:

414 * 특정 `@claude` 명령을 사용하여 불필요한 턴을 줄입니다

415 * 적절한 `max_turns` 및 작업 시간 초과 값을 설정합니다

416 * 동시성을 제한하여 병렬 실행을 제어합니다

417 

418## 보안 및 거버넌스

419 

420* 각 작업은 제한된 네트워크 액세스가 있는 격리된 컨테이너에서 실행됩니다

421* Claude의 변경 사항은 MR을 통해 흐르므로 검토자가 모든 diff를 봅니다

422* 브랜치 보호 및 승인 규칙이 AI 생성 코드에 적용됩니다

423* Claude Code는 쓰기를 제한하기 위해 작업 공간 범위 권한을 사용합니다

424* 자신의 공급자 자격 증명을 가져오기 때문에 비용이 제어됩니다

425 

426## 문제 해결

427 

428### Claude가 @claude 명령에 응답하지 않음

429 

430* 파이프라인이 트리거되고 있는지 확인합니다 (수동, MR 이벤트 또는 노트 이벤트 리스너/웹훅을 통해)

431* CI/CD 변수 (`ANTHROPIC_API_KEY` 또는 클라우드 공급자 설정)가 있고 마스킹 해제되어 있는지 확인합니다

432* 댓글에 `@claude` (not `/claude`)가 포함되어 있고 언급 트리거가 구성되어 있는지 확인합니다

433 

434### 작업이 댓글을 쓰거나 MR을 열 수 없음

435 

436* `CI_JOB_TOKEN`이 프로젝트에 대한 충분한 권한이 있거나 `api` 범위가 있는 프로젝트 액세스 토큰을 사용하는지 확인합니다

437* `mcp__gitlab` 도구가 `--allowedTools`에서 활성화되어 있는지 확인합니다

438* 작업이 MR의 컨텍스트에서 실행되거나 `AI_FLOW_*` 변수를 통해 충분한 컨텍스트가 있는지 확인합니다

439 

440### 인증 오류

441 

442* **Claude API의 경우**: `ANTHROPIC_API_KEY`가 유효하고 만료되지 않았는지 확인합니다

443* **Bedrock/Vertex의 경우**: OIDC/WIF 구성, 역할 가장 및 비밀 이름을 확인합니다. 지역 및 모델 가용성을 확인합니다

444 

445## 고급 구성

446 

447### 일반적인 매개변수 및 변수

448 

449Claude Code는 다음과 같이 일반적으로 사용되는 입력을 지원합니다:

450 

451* `prompt` / `prompt_file`: 인라인 (`-p`) 또는 파일을 통해 지침을 제공합니다

452* `max_turns`: 왕복 반복 횟수를 제한합니다

453* `timeout_minutes`: 총 실행 시간을 제한합니다

454* `ANTHROPIC_API_KEY`: Claude API에 필요합니다 (Bedrock/Vertex에는 사용되지 않음)

455* 공급자별 환경: `AWS_REGION`, Vertex용 프로젝트/지역 변수

456 

457<Note>

458 정확한 플래그 및 매개변수는 `@anthropic-ai/claude-code` 버전에 따라 다를 수 있습니다. 작업에서 `claude --help`를 실행하여 지원되는 옵션을 확인합니다.

459</Note>

460 

461### Claude의 동작 사용자 정의

462 

463두 가지 주요 방법으로 Claude를 안내할 수 있습니다:

464 

4651. **CLAUDE.md**: 코딩 표준, 보안 요구 사항 및 프로젝트 규칙을 정의합니다. Claude는 실행 중에 이를 읽고 규칙을 따릅니다.

4662. **사용자 정의 프롬프트**: 작업에서 `prompt`/`prompt_file`을 통해 작업별 지침을 전달합니다. 다양한 작업에 다양한 프롬프트를 사용합니다 (예: 검토, 구현, 리팩토링).

glossary.md +307 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 용어집

6 

7> Claude Code 용어 정의. 에이전트 루프, 컴팩션, CLAUDE.md, 훅, 서브에이전트, MCP 및 기타 핵심 개념의 의미를 알아봅니다.

8 

9이 용어집은 Claude Code 용어를 정의합니다. 각 항목은 개념이 심층적으로 다루어지는 페이지로 연결됩니다. 토큰, 온도, RAG와 같은 모델 수준의 개념은 [플랫폼 용어집](https://platform.claude.com/docs/ko/about-claude/glossary)을 참조하십시오.

10 

11## A

12 

13### Agent teams

14 

15여러 개의 독립적인 Claude Code 세션이 팀 리더에 의해 조정되며, 공유 작업 목록과 피어 투 피어 메시징을 갖춘 구성입니다. 단일 세션 내에서 실행되고 부모에게만 보고하는 [서브에이전트](#subagent)와 달리, 팀원들은 각각 자신의 컨텍스트 윈도우를 가지며 어느 팀원과도 직접 상호작용할 수 있습니다. Agent teams는 실험적이며 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`을 설정하여 활성화해야 합니다.

16 

17자세히 알아보기: [에이전트 팀 실행](/ko/agent-teams)

18 

19### Agentic coding

20 

21AI가 파일을 읽고, 명령을 실행하고, 변경 사항을 자율적으로 만들 수 있는 워크플로우입니다. 사용자가 직접 적용해야 하는 텍스트만 응답하는 채팅 기반 어시스턴트와 달리, 사용자가 지켜보거나, 리디렉션하거나, 떠날 수 있습니다. Claude Code는 조언만 하는 것이 아니라 행동할 수 있게 해주는 [도구](#tool)를 가지고 있기 때문에 에이전트입니다.

22 

23자세히 알아보기: [Claude Code 작동 방식](/ko/how-claude-code-works)

24 

25### Agentic harness

26 

27언어 모델을 능력 있는 코딩 에이전트로 변환하는 도구, 컨텍스트 관리 및 실행 환경입니다. Claude Code는 하네스이고, Claude는 그 안의 모델입니다. 하네스는 파일 액세스, 셸 실행, 권한 게이팅, 메모리 로딩 및 작업을 함께 연결하는 루프를 제공합니다.

28 

29자세히 알아보기: [Claude Code 작동 방식](/ko/how-claude-code-works)

30 

31### Agentic loop

32 

33Claude가 모든 작업을 수행하는 사이클입니다: 컨텍스트 수집, 작업 수행, 결과 확인 및 완료될 때까지 반복합니다. 각 도구 사용은 다음 단계를 알려주는 정보를 반환합니다. 언제든지 루프를 중단하여 리디렉션할 수 있습니다. [훅](#hook), [스킬](#skill), [MCP](#mcp-model-context-protocol)을 포함한 대부분의 확장 포인트는 이 루프의 특정 단계에 연결됩니다.

34 

35자세히 알아보기: [Claude Code 작동 방식](/ko/how-claude-code-works#the-agentic-loop)

36 

37### Auto memory

38 

39Claude가 사용자의 수정 및 선호도를 기반으로 자신을 위해 작성한 노트이며, `~/.claude/projects/` 아래 git 저장소별로 저장됩니다. 동일한 저장소의 모든 worktree는 하나의 auto memory 디렉토리를 공유합니다. `MEMORY.md` 인덱스의 처음 200줄 또는 25KB가 모든 세션의 시작 시 로드됩니다. Auto memory는 사용자가 작성하는 [CLAUDE.md](#claude-md)의 Claude 작성 대응물입니다.

40 

41자세히 알아보기: [Auto memory](/ko/memory#auto-memory)

42 

43### Auto mode

44 

45백그라운드에서 별도의 분류기 모델이 각 작업을 검토하는 [권한 모드](#permission-mode)이며, 승인 프롬프트를 표시하는 대신입니다. 분류기는 범위 확대, 신뢰할 수 없는 인프라 및 [프롬프트 주입](#prompt-injection)을 차단합니다. 도구 결과를 보지 않으므로 주입된 지침이 결정에 영향을 미칠 수 없습니다. Auto mode는 Max, Team, Enterprise 및 API 플랜에서 사용 가능한 연구 미리보기입니다.

46 

47자세히 알아보기: [프롬프트 제거 및 auto mode](/ko/permission-modes#eliminate-prompts-with-auto-mode)

48 

49## B

50 

51### Bare mode

52 

53자동 발견을 건너뛰는 시작 플래그 `--bare`입니다. 훅, 스킬, 플러그인, MCP 서버, auto memory 및 CLAUDE.md의 자동 발견을 건너뜁니다. 명시적으로 전달하는 플래그만 적용됩니다. CI 및 스크립트된 호출에 권장되며, 로컬 구성에 관계없이 머신 간에 동일한 동작이 필요합니다.

54 

55자세히 알아보기: [bare mode로 더 빠르게 시작](/ko/headless#start-faster-with-bare-mode)

56 

57### Bundled skills

58 

59Claude Code에 포함된 프롬프트 기반 플레이북입니다. `/batch`, `/simplify`, `/debug`, `/loop` 등이 있습니다. 고정 로직을 실행하는 기본 제공 명령과 달리, 번들 스킬은 Claude에 상세한 프롬프트를 제공하고 작업을 조율하도록 하므로 에이전트를 생성하고, 파일을 읽고, 코드베이스에 적응할 수 있습니다.

60 

61자세히 알아보기: [번들 스킬](/ko/skills#bundled-skills)

62 

63## C

64 

65### Channel

66 

67실행 중인 세션에 이벤트를 푸시하는 [MCP 서버](#mcp-model-context-protocol)이므로 Claude는 터미널에서 떨어져 있을 때 발생하는 일에 반응할 수 있습니다. 채널은 양방향일 수 있습니다: Claude는 인바운드 이벤트를 읽고 동일한 채널을 통해 다시 응답합니다. Telegram, Discord 및 iMessage는 연구 미리보기에 포함됩니다.

68 

69자세히 알아보기: [채널](/ko/channels)

70 

71### Checkpoint

72 

73Claude가 각 편집을 수행하기 전에 캡처된 코드의 자동 스냅샷입니다. `Esc`를 두 번 누르거나 `/rewind`를 실행하여 코드, 대화 또는 둘 다를 이전 지점으로 복원합니다. 체크포인트는 세션에 로컬이며, git과 별개이고, Bash 도구를 통해 수행된 변경 사항을 추적하지 않습니다.

74 

75자세히 알아보기: [체크포인팅](/ko/checkpointing)

76 

77### `.claude` directory

78 

79Claude Code가 프로젝트 범위 구성을 읽는 디렉토리입니다: 설정, 훅, 스킬, 서브에이전트, 규칙 및 auto memory. 프로젝트는 루트에 `.claude/`를 가지며, 사용자 수준 기본값은 `~/.claude/`에 있습니다.

80 

81자세히 알아보기: [`.claude` 디렉토리](/ko/claude-directory)

82 

83### CLAUDE.md

84 

85Claude를 위해 작성하는 지속적인 지침의 마크다운 파일이며, 시스템 프롬프트 이후 사용자 메시지로 모든 세션의 시작 시 로드됩니다. 프로젝트 규칙, 아키텍처 노트 및 "항상 X를 수행" 규칙을 여기에 넣습니다. CLAUDE.md는 [컴팩션](#compaction)을 견디고 이후 디스크에서 새로 다시 읽습니다.

86 

87CLAUDE.md를 프로젝트 범위에서 `./CLAUDE.md` 또는 `./.claude/CLAUDE.md`에, 사용자 범위에서 `~/.claude/CLAUDE.md`에, 또는 조직의 [관리 정책](#managed-settings)으로 배치할 수 있습니다. 더 구체적인 위치가 우선합니다.

88 

89자세히 알아보기: [CLAUDE.md 파일](/ko/memory#claude-md-files)

90 

91### Command

92 

93프롬프트에 `/name`을 입력하여 호출하는 재사용 가능한 지침입니다. `/clear`, `/model`, `/compact`와 같은 기본 제공 명령은 세션을 제어합니다. `.claude/commands/`의 파일로 자신의 명령을 정의하거나 [플러그인](#plugin)에서 설치할 수 있습니다. [스킬](#skill)은 다단계 명령을 패키징하는 권장 방법입니다.

94 

95자세히 알아보기: [명령](/ko/commands) · [스킬](/ko/skills)

96 

97### Compaction

98 

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

100 

101자세히 알아보기: [컴팩션에서 생존하는 것](/ko/context-window#what-survives-compaction) · [컨텍스트가 가득 찰 때](/ko/how-claude-code-works#when-context-fills-up)

102 

103### Context window

104 

105세션의 작업 메모리이며, 대화 기록, 파일 내용, 명령 출력, CLAUDE.md, auto memory, 로드된 스킬 및 시스템 지침을 보유합니다. 작업하면서 컨텍스트가 가득 찰 때까지 채워지고 [컴팩션](#compaction)이 요약합니다. `/context`를 실행하여 공간을 사용하는 것을 확인합니다. 기본 모델 개념은 [플랫폼 용어집](https://platform.claude.com/docs/ko/about-claude/glossary#context-window)을 참조하십시오.

106 

107자세히 알아보기: [컨텍스트 윈도우 탐색](/ko/context-window)

108 

109## D

110 

111### Dispatch

112 

113Claude 모바일 앱에서 코딩 작업을 보낼 때 Desktop 앱에서 Claude Code 세션을 생성하는 휴대폰 시작 작업 라우터입니다. 프롬프트가 올바른 도구로 자동으로 라우팅됩니다. Pro 및 Max 플랜에서 사용 가능합니다.

114 

115자세히 알아보기: [Dispatch의 세션](/ko/desktop#sessions-from-dispatch)

116 

117## E

118 

119### Effort level

120 

121각 턴에서 Claude가 적응형 추론 사고 예산을 얼마나 사용할지 제어하는 설정입니다. 더 높은 노력은 더 많은 사고 토큰과 더 깊은 추론을 의미합니다. 더 낮은 노력은 더 빠르고 저렴합니다. Effort는 Opus 4.7, Opus 4.6 및 Sonnet 4.6에서 지원됩니다.

122 

123자세히 알아보기: [노력 수준 조정](/ko/model-config#adjust-effort-level)

124 

125### Extended thinking

126 

127모델이 응답하기 전에 수행하는 가시적인 단계별 추론입니다. `MAX_THINKING_TOKENS`로 사고 토큰을 제한하거나 [노력 수준](#effort-level)을 조정할 수 있습니다. 사고는 터미널에서 회색 이탤릭 텍스트로 나타납니다.

128 

129자세히 알아보기: [확장 사고 사용](/ko/common-workflows#use-extended-thinking-thinking-mode)

130 

131## H

132 

133### Hook

134 

135Claude Code의 라이프사이클의 특정 지점에서 자동으로 실행되는 사용자 정의 핸들러입니다. 도구 실행 전, 파일 편집 후 또는 세션 시작 시 등입니다. 핸들러는 셸 명령, HTTP 엔드포인트, MCP 도구, LLM 프롬프트 또는 서브에이전트일 수 있습니다. 훅은 결정론적입니다: 모델의 재량이 아니라 고정된 라이프사이클 포인트에서 발생합니다.

136 

137훅 구성에는 세 가지 수준이 있습니다:

138 

139* **Hook event**: 라이프사이클 포인트

140* **Matcher**: 어떤 이벤트가 발생하는지 필터링합니다

141* **Hook handler**: 실행되는 것

142 

143자세히 알아보기: [훅 시작하기](/ko/hooks-guide) · [훅 참조](/ko/hooks)

144 

145## M

146 

147### Managed settings

148 

149IT 또는 DevOps에 의해 조직 전체에 적용되는 설정 파일이며, `~/.claude` 외부의 OS 수준 경로에 배치됩니다. 사용자는 관리 설정을 재정의하거나 제외할 수 없습니다. 보안 정책, 규정 준수 요구 사항 또는 플릿 전체의 표준화된 도구에 사용합니다.

150 

151자세히 알아보기: [서버 관리 설정](/ko/server-managed-settings)

152 

153### MCP (Model Context Protocol)

154 

155AI 도구를 외부 데이터 소스 및 서비스에 연결하기 위한 개방형 표준입니다. MCP 서버는 Claude에 Slack, Jira, 데이터베이스, 브라우저 및 수백 개의 다른 통합을 위한 새로운 도구를 제공합니다. `/mcp`를 통해 또는 `.mcp.json`에 추가하여 서버를 연결합니다. 프로토콜 자체는 [플랫폼 용어집](https://platform.claude.com/docs/ko/about-claude/glossary#mcp-model-context-protocol)을 참조하십시오.

156 

157자세히 알아보기: [Model Context Protocol](/ko/mcp)

158 

159### MCP Tool Search

160 

161필요할 때까지 MCP 도구 스키마를 연기하는 컨텍스트 절약 메커니즘입니다. 시작 시 도구 이름만 로드됩니다. Claude는 특정 도구를 사용하기로 결정할 때 전체 스키마를 요청합니다. 이렇게 하면 유휴 MCP 서버가 많은 컨텍스트를 소비하지 않습니다.

162 

163자세히 알아보기: [MCP Tool Search로 확장](/ko/mcp#scale-with-mcp-tool-search)

164 

165## N

166 

167### Non-interactive mode

168 

169`-p` 또는 `--print`로 호출되는 단일 프롬프트를 실행하고 대화형 세션 없이 종료하는 모드입니다. CI, 스크립트 및 파이핑에 사용됩니다. [Agent SDK](/ko/agent-sdk/overview)는 Python 및 TypeScript 동등물입니다. 이전에는 headless mode라고 불렸습니다.

170 

171자세히 알아보기: [Claude Code를 프로그래밍 방식으로 실행](/ko/headless)

172 

173## O

174 

175### Output style

176 

177Claude의 시스템 프롬프트를 수정하여 응답 동작, 톤 또는 형식을 변경하는 구성입니다. 출력 스타일은 사용자 메시지로 전달되는 [CLAUDE.md](#claude-md)와 달리 기본 시스템 프롬프트의 소프트웨어 엔지니어링 관련 부분을 끕니다. 기본 제공 스타일에는 Default, Explanatory 및 Learning이 포함됩니다.

178 

179자세히 알아보기: [출력 스타일](/ko/output-styles)

180 

181## P

182 

183### Permission mode

184 

185세션의 기본 승인 동작입니다. CLI에서 `Shift+Tab`으로 순환하거나 VS Code, Desktop 및 claude.ai의 모드 선택기를 사용합니다. 사용 가능한 모드는 `default`, `acceptEdits`, `plan`, `auto`, `dontAsk` 및 `bypassPermissions`입니다.

186 

187자세히 알아보기: [권한 모드 선택](/ko/permission-modes)

188 

189### Permission rule

190 

191도구 이름 및 인수 패턴을 기반으로 도구 호출을 허용, 질문 또는 거부하는 설정 항목입니다. 규칙은 deny→ask→allow로 평가되며, 첫 번째 일치가 우선합니다. 권한 규칙은 더 광범위한 [권한 모드](#permission-mode) 위에 계층화된 세밀한 제어입니다.

192 

193자세히 알아보기: [권한 구성](/ko/permissions)

194 

195### Plan mode

196 

197Claude가 소스 파일을 편집하지 않고 변경 사항을 연구하고 제안하는 [권한 모드](#permission-mode)입니다. 읽고, 검색하고, 탐색 명령을 실행할 수 있으며, 아무것도 건드리기 전에 승인을 위한 계획을 제시합니다. `/plan`을 입력하거나 `Shift+Tab`을 눌러 plan mode에 들어갑니다.

198 

199자세히 알아보기: [plan mode로 편집 전에 분석](/ko/permission-modes#analyze-before-you-edit-with-plan-mode)

200 

201### Plugin

202 

203스킬, 훅, 서브에이전트 및 MCP 서버의 번들이며, 단일 설치 가능한 단위로 패키징됩니다. 플러그인 스킬은 `plugin-name:skill-name`으로 네임스페이스되므로 여러 플러그인이 공존합니다. [마켓플레이스](/ko/plugin-marketplaces)를 통해 팀 전체에 플러그인을 배포합니다.

204 

205자세히 알아보기: [플러그인](/ko/plugins)

206 

207### Project trust

208 

209Claude Code가 구성을 로드하기 전에 디렉토리를 수락하는 일회성 대화입니다. 신뢰는 마켓플레이스 플러그인의 자동 설치 및 프로젝트 정의 훅의 실행을 게이팅합니다. 디렉토리를 신뢰하면 `.claude/settings.json`, `.mcp.json` 및 기타 구성 파일이 적용됩니다.

210 

211자세히 알아보기: [`.claude` 디렉토리](/ko/claude-directory)

212 

213### Prompt injection

214 

215파일, 웹 페이지 또는 도구 결과에 포함된 적대적 지침이며, Claude를 요청하지 않은 작업으로 리디렉션하려고 시도합니다. Claude Code의 방어에는 권한 시스템, 명령 차단 목록 및 신뢰 확인이 포함됩니다. [Auto mode](#auto-mode)는 도구 결과에서 의심스러운 내용을 스캔하는 서버 측 프로브와 도구 결과를 보지 않는 분류기를 추가하므로 주입된 텍스트가 승인 결정에 영향을 미칠 수 없습니다.

216 

217자세히 알아보기: [프롬프트 주입으로부터 보호](/ko/security#protect-against-prompt-injection)

218 

219## R

220 

221### Remote Control

222 

223claude.ai를 통해 휴대폰 또는 브라우저에서 로컬 Claude Code 세션을 계속하는 방법입니다. 코드는 머신에 남아 있습니다. UI만 원격입니다. 클라우드 샌드박스에서 실행되는 웹의 Claude Code와 다릅니다.

224 

225자세히 알아보기: [Remote Control](/ko/remote-control)

226 

227### Rules

228 

229CLAUDE.md와 함께 로드되는 `.claude/rules/`의 모듈식 지침 파일입니다. 규칙은 YAML `paths:` frontmatter로 경로 범위를 지정할 수 있으므로 Claude가 일치하는 파일을 읽을 때만 로드되어 관련될 때까지 컨텍스트를 유지합니다.

230 

231자세히 알아보기: [`.claude/rules/`로 규칙 구성](/ko/memory#organize-rules-with-claude/rules/)

232 

233## S

234 

235### Sandboxing

236 

237Bash 도구에 대한 OS 수준 파일 시스템 및 네트워크 격리입니다. 명령은 미리 정의한 경계 내에서 실행되므로 Claude는 명령별 승인 프롬프트 없이 자유롭게 작업할 수 있습니다. 샌드박싱은 [권한 규칙](#permission-rule)과 별개의 계층입니다.

238 

239자세히 알아보기: [샌드박싱](/ko/sandboxing)

240 

241### Session

242 

243현재 디렉토리에 연결된 대화이며, 자신의 독립적인 [컨텍스트 윈도우](#context-window)를 가집니다. 세션은 `claude -c`로 재개할 수 있고, `--fork-session`으로 포크하여 새 세션 ID 아래에 기록을 보존하거나, 터미널 전체에서 병렬로 실행할 수 있습니다. `/clear`를 실행하면 새 세션이 시작됩니다. 이전 세션은 저장된 상태로 유지되며 `/resume`을 통해 사용 가능합니다. 각 세션의 기록은 `~/.claude/projects/` 아래에 저장됩니다.

244 

245자세히 알아보기: [세션으로 작업](/ko/how-claude-code-works#work-with-sessions)

246 

247### Settings layers

248 

249Claude Code가 구성을 읽는 계층 구조이며, 우선 순위 순서는 높음에서 낮음입니다: [관리 정책](#managed-settings), 명령줄 인수, `.claude/settings.local.json`의 로컬 설정, `.claude/settings.json`의 프로젝트 설정, 그 다음 `~/.claude/settings.json`의 사용자 설정. 배열은 계층 전체에서 병합됩니다. 스칼라는 더 높은 계층에서 더 낮은 계층을 재정의합니다.

250 

251자세히 알아보기: [설정 파일](/ko/settings#settings-files)

252 

253### Skill

254 

255지침, 지식 또는 Claude가 도구 키트에 추가하는 워크플로우를 포함하는 `SKILL.md` 파일입니다. Claude는 관련이 있을 때 스킬을 자동으로 로드하거나 `/skill-name`으로 직접 호출합니다. 스킬은 Agent Skills 개방형 표준을 따릅니다. Claude Code는 호출 제어 및 서브에이전트 실행으로 확장합니다.

256 

257스킬은 사용자 정의 명령의 권장 후속입니다. `.claude/commands/deploy.md`의 파일과 `.claude/skills/deploy/SKILL.md`의 파일은 모두 `/deploy`를 생성하고 동일하게 작동합니다. 기존 명령 파일은 계속 작동합니다.

258 

259자세히 알아보기: [스킬로 Claude 확장](/ko/skills)

260 

261### Subagent

262 

263자신의 컨텍스트 윈도우, 사용자 정의 시스템 프롬프트, 특정 도구 액세스 및 독립적인 권한으로 실행되는 특화된 AI 어시스턴트입니다. 위임된 작업을 수행하고 주 대화에 요약을 반환합니다. 서브에이전트를 사용하여 큰 탐색을 기본 컨텍스트 밖으로 유지하거나 병렬 연구를 실행합니다. 각 에이전트가 직접 대화할 수 있는 완전한 독립적인 세션인 [agent teams](#agent-teams)와 다릅니다.

264 

265기본 제공 서브에이전트에는 Explore, Plan 및 범용이 포함됩니다.

266 

267자세히 알아보기: [사용자 정의 서브에이전트 생성](/ko/sub-agents)

268 

269### Surface

270 

271Claude Code에 액세스하는 모든 장소입니다: CLI, VS Code, JetBrains, Desktop 또는 claude.ai. 모든 표면은 동일한 엔진을 공유하므로 CLAUDE.md, 설정 및 스킬이 모든 표면에서 동일하게 작동합니다. Slack 및 Chrome 확장 프로그램은 표면 자체가 아니라 표면에 연결하는 통합입니다.

272 

273자세히 알아보기: [플랫폼 및 통합](/ko/platforms)

274 

275## T

276 

277### Teleport

278 

279클라우드 Claude Code 세션을 로컬 터미널로 가져오는 명령 `/teleport`입니다. Claude는 분기를 가져오고, 대화 기록을 로드하고, 웹 세션의 마지막 상태에서 재개합니다. 역방향은 `--remote`이며, 로컬 작업을 웹에서 실행하도록 보냅니다.

280 

281자세히 알아보기: [웹에서 터미널로](/ko/claude-code-on-the-web#from-web-to-terminal)

282 

283### Tool

284 

285Claude가 수행할 수 있는 작업입니다: 파일 읽기, 코드 편집, 셸 명령 실행, 웹 검색, 서브에이전트 생성. 도구는 Claude Code를 에이전트로 만드는 것입니다. 도구 없이 Claude는 텍스트로만 응답할 수 있습니다. 각 도구 사용은 [에이전트 루프](#agentic-loop)에서 Claude의 다음 결정을 알려주는 결과를 반환합니다.

286 

287자세히 알아보기: [Claude에서 사용 가능한 도구](/ko/tools-reference)

288 

289## W

290 

291### Worktree isolation

292 

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

294 

295자세히 알아보기: [git worktrees로 병렬 세션 실행](/ko/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees)

296 

297***

298 

299## 더 이상 사용되지 않는 용어 및 이름이 변경된 용어

300 

301이 용어는 이전 문서, 블로그 게시물 및 커뮤니티 콘텐츠에 나타납니다. 이 사이트를 검색할 때 현재 이름을 사용합니다.

302 

303| 이전 용어 | 현재 이름 | 참고 |

304| --------------- | --------------------------------------------- | -------------------------------- |

305| Headless mode | [Non-interactive mode](#non-interactive-mode) | 동일한 `-p` 플래그, 동일한 동작 |

306| Custom commands | [Skills](#skill) | `.claude/commands/` 파일은 계속 작동합니다 |

307| Slash commands | Commands | 제품 복사본에서 "Slash" 제거됨 |

google-vertex-ai.md +387 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Google Vertex AI에서 Claude Code 사용하기

6 

7> Google Vertex AI를 통해 Claude Code를 구성하는 방법을 알아봅니다. 설정, IAM 구성 및 문제 해결을 포함합니다.

8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

79export const Experiment = ({flag, treatment, children}) => {

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="vertex" />} />

190 

191## 필수 요구사항

192 

193Vertex AI를 사용하여 Claude Code를 구성하기 전에 다음을 확인하십시오:

194 

195* 청구가 활성화된 Google Cloud Platform(GCP) 계정

196* Vertex AI API가 활성화된 GCP 프로젝트

197* 원하는 Claude 모델에 대한 액세스(예: Claude Sonnet 4.6)

198* Google Cloud SDK(`gcloud`) 설치 및 구성

199* 원하는 GCP 지역에 할당된 할당량

200 

201자신의 Vertex AI 자격증명으로 로그인하려면 아래의 [Vertex AI로 로그인](#sign-in-with-vertex-ai)을 따르십시오. 팀 전체에 Claude Code를 배포하려면 [수동 설정](#set-up-manually) 단계를 사용하고 롤아웃 전에 [모델 버전을 고정](#5-pin-model-versions)하십시오.

202 

203## Vertex AI로 로그인

204 

205Google Cloud 자격증명이 있고 Vertex AI를 통해 Claude Code 사용을 시작하려면 로그인 마법사가 이를 안내합니다. GCP 측 필수 요구사항을 프로젝트당 한 번 완료하면 마법사가 Claude Code 측을 처리합니다.

206 

207<Note>

208 Vertex AI 설정 마법사는 Claude Code v2.1.98 이상이 필요합니다. `claude --version`을 실행하여 확인하십시오.

209</Note>

210 

211<Steps>

212 <Step title="GCP 프로젝트에서 Claude 모델 활성화">

213 프로젝트에 대해 [Vertex AI API를 활성화](#1-enable-vertex-ai-api)한 다음 [Vertex AI Model Garden](https://console.cloud.google.com/vertex-ai/model-garden)에서 원하는 Claude 모델에 대한 액세스를 요청합니다. 계정에 필요한 권한은 [IAM 구성](#iam-configuration)을 참조하십시오.

214 </Step>

215 

216 <Step title="Claude Code를 시작하고 Vertex AI 선택">

217 `claude`를 실행합니다. 로그인 프롬프트에서 **3rd-party platform**을 선택한 다음 **Google Vertex AI**를 선택합니다.

218 </Step>

219 

220 <Step title="마법사 프롬프트 따르기">

221 Google Cloud에 인증하는 방법을 선택합니다: `gcloud`의 Application Default Credentials, 서비스 계정 키 파일 또는 환경에 이미 있는 자격증명. 마법사는 프로젝트와 지역을 감지하고, 프로젝트가 호출할 수 있는 Claude 모델을 확인하며, 이를 고정할 수 있게 합니다. 결과를 [사용자 설정 파일](/ko/settings)의 `env` 블록에 저장하므로 환경 변수를 직접 내보낼 필요가 없습니다.

222 </Step>

223</Steps>

224 

225로그인한 후 언제든지 `/setup-vertex`를 실행하여 마법사를 다시 열고 자격증명, 프로젝트, 지역 또는 모델 고정을 변경할 수 있습니다.

226 

227## 지역 구성

228 

229Claude Code는 Vertex AI [전역](https://cloud.google.com/blog/products/ai-machine-learning/global-endpoint-for-claude-models-generally-available-on-vertex-ai), 다중 지역 및 지역 엔드포인트를 지원합니다. `CLOUD_ML_REGION`을 `global`, `eu` 또는 `us`와 같은 다중 지역 위치 또는 `us-east5`와 같은 특정 지역으로 설정합니다. Claude Code는 `aiplatform.eu.rep.googleapis.com` 및 `aiplatform.us.rep.googleapis.com` 호스트를 포함한 다중 지역 위치에 대해 각 형식에 맞는 올바른 Vertex AI 호스트명을 선택합니다.

230 

231<Note>

232 Vertex AI는 모든 엔드포인트 유형에서 Claude Code 기본 모델을 지원하지 않을 수 있습니다. 모델 가용성은 [특정 지역](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/locations#genai-partner-models), 다중 지역 위치 및 [전역 엔드포인트](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#supported_models)에 따라 다릅니다. 지원되는 위치로 전환하거나 지원되는 모델을 지정해야 할 수 있습니다.

233</Note>

234 

235## 수동 설정

236 

237마법사 대신 환경 변수를 통해 Vertex AI를 구성하려면(예: CI 또는 스크립트된 엔터프라이즈 롤아웃의 경우) 아래 단계를 따르십시오.

238 

239### 1. Vertex AI API 활성화

240 

241GCP 프로젝트에서 Vertex AI API를 활성화합니다:

242 

243```bash theme={null}

244# 프로젝트 ID 설정

245gcloud config set project YOUR-PROJECT-ID

246 

247# Vertex AI API 활성화

248gcloud services enable aiplatform.googleapis.com

249```

250 

251### 2. 모델 액세스 요청

252 

253Vertex AI에서 Claude 모델에 대한 액세스를 요청합니다:

254 

2551. [Vertex AI Model Garden](https://console.cloud.google.com/vertex-ai/model-garden)으로 이동합니다

2562. "Claude" 모델을 검색합니다

2573. 원하는 Claude 모델에 대한 액세스를 요청합니다(예: Claude Sonnet 4.6)

2584. 승인을 기다립니다(24-48시간이 소요될 수 있습니다)

259 

260### 3. GCP 자격증명 구성

261 

262Claude Code는 표준 Google Cloud 인증을 사용합니다.

263 

264자세한 내용은 [Google Cloud 인증 설명서](https://cloud.google.com/docs/authentication)를 참조하십시오.

265 

266Claude Code v2.1.121 이상은 동일한 Application Default Credentials 체인을 통해 [X.509 인증서 기반 Workload Identity Federation](https://cloud.google.com/iam/docs/workload-identity-federation-with-x509-certificates)을 지원합니다. `GOOGLE_APPLICATION_CREDENTIALS`를 자격증명 구성 파일의 경로로 설정합니다.

267 

268<Note>

269 인증할 때 Claude Code는 `ANTHROPIC_VERTEX_PROJECT_ID` 환경 변수에서 프로젝트 ID를 자동으로 사용합니다. 이를 재정의하려면 다음 환경 변수 중 하나를 설정하십시오: `GCLOUD_PROJECT`, `GOOGLE_CLOUD_PROJECT` 또는 `GOOGLE_APPLICATION_CREDENTIALS`.

270</Note>

271 

272### 4. Claude Code 구성

273 

274다음 환경 변수를 설정합니다:

275 

276```bash theme={null}

277# Vertex AI 통합 활성화

278export CLAUDE_CODE_USE_VERTEX=1

279export CLOUD_ML_REGION=global

280export ANTHROPIC_VERTEX_PROJECT_ID=YOUR-PROJECT-ID

281 

282# 선택사항: 사용자 정의 엔드포인트 또는 게이트웨이를 위해 Vertex 엔드포인트 URL 재정의

283# export ANTHROPIC_VERTEX_BASE_URL=https://aiplatform.googleapis.com

284 

285# 선택사항: 필요한 경우 prompt caching 비활성화

286export DISABLE_PROMPT_CACHING=1

287 

288# 선택사항: 기본 5분 대신 1시간 prompt cache TTL 요청

289export ENABLE_PROMPT_CACHING_1H=1

290 

291# CLOUD_ML_REGION=global일 때, 전역 엔드포인트를 지원하지 않는 모델의 지역 재정의

292export VERTEX_REGION_CLAUDE_HAIKU_4_5=us-east5

293export VERTEX_REGION_CLAUDE_4_6_SONNET=europe-west1

294```

295 

296대부분의 모델 버전에는 해당하는 `VERTEX_REGION_CLAUDE_*` 변수가 있습니다. 전체 목록은 [환경 변수 참조](/ko/env-vars)를 참조하십시오. [Vertex Model Garden](https://console.cloud.google.com/vertex-ai/model-garden)에서 어떤 모델이 전역 엔드포인트를 지원하는지 또는 지역 전용인지 확인하십시오.

297 

298[Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)은 자동으로 활성화됩니다. 이를 비활성화하려면 `DISABLE_PROMPT_CACHING=1`을 설정하십시오. 기본 5분 대신 1시간 캐시 TTL을 요청하려면 `ENABLE_PROMPT_CACHING_1H=1`을 설정하십시오. 1시간 TTL을 사용한 캐시 쓰기는 더 높은 요금으로 청구됩니다. 높은 속도 제한을 위해 Google Cloud 지원팀에 문의하십시오. Vertex AI를 사용할 때 `/login` 및 `/logout` 명령은 Google Cloud 자격증명을 통해 인증이 처리되므로 비활성화됩니다.

299 

300[MCP tool search](/ko/mcp#scale-with-mcp-tool-search)는 엔드포인트가 필요한 베타 헤더를 허용하지 않으므로 Vertex AI에서 기본적으로 비활성화됩니다. 모든 MCP 도구 정의는 대신 미리 로드됩니다. 옵트인하려면 `ENABLE_TOOL_SEARCH=true`를 설정하십시오.

301 

302### 5. 모델 버전 고정

303 

304<Warning>

305 여러 사용자에게 배포할 때 특정 모델 버전을 고정합니다. 고정하지 않으면 `sonnet` 및 `opus`와 같은 모델 별칭이 최신 버전으로 확인되며, Anthropic이 업데이트를 출시할 때 Vertex AI 프로젝트에서 아직 활성화되지 않았을 수 있습니다. Claude Code는 최신 버전을 사용할 수 없을 때 시작 시 [이전 버전으로 폴백](#startup-model-checks)하지만, 고정하면 사용자가 새 모델로 이동하는 시기를 제어할 수 있습니다.

306</Warning>

307 

308이러한 환경 변수를 특정 Vertex AI 모델 ID로 설정합니다.

309 

310`ANTHROPIC_DEFAULT_OPUS_MODEL`이 없으면 Vertex의 `opus` 별칭이 Opus 4.6으로 확인됩니다. 최신 모델을 사용하려면 Opus 4.7 ID로 설정합니다:

311 

312```bash theme={null}

313export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-7'

314export ANTHROPIC_DEFAULT_SONNET_MODEL='claude-sonnet-4-6'

315export ANTHROPIC_DEFAULT_HAIKU_MODEL='claude-haiku-4-5@20251001'

316```

317 

318현재 및 레거시 모델 ID는 [모델 개요](https://platform.claude.com/docs/en/about-claude/models/overview)를 참조하십시오. 환경 변수의 전체 목록은 [모델 구성](/ko/model-config#pin-models-for-third-party-deployments)을 참조하십시오.

319 

320Claude Code는 고정 변수가 설정되지 않았을 때 이러한 기본 모델을 사용합니다:

321 

322| 모델 유형 | 기본값 |

323| :------- | :--------------------------- |

324| 주 모델 | `claude-sonnet-4-5@20250929` |

325| 소형/빠른 모델 | `claude-haiku-4-5@20251001` |

326 

327모델을 추가로 사용자 정의하려면:

328 

329```bash theme={null}

330export ANTHROPIC_MODEL='claude-opus-4-7'

331export ANTHROPIC_DEFAULT_HAIKU_MODEL='claude-haiku-4-5@20251001'

332```

333 

334## 시작 모델 확인

335 

336Claude Code가 Vertex AI로 구성되어 시작할 때 사용하려는 모델이 프로젝트에서 액세스 가능한지 확인합니다. 이 확인에는 Claude Code v2.1.98 이상이 필요합니다.

337 

338현재 Claude Code 기본값보다 오래된 모델 버전을 고정했고 프로젝트가 최신 버전을 호출할 수 있으면 Claude Code는 고정을 업데이트하라는 메시지를 표시합니다. 수락하면 새 모델 ID를 [사용자 설정 파일](/ko/settings)에 쓰고 Claude Code를 다시 시작합니다. 거절하면 다음 기본 버전 변경까지 기억됩니다.

339 

340모델을 고정하지 않았고 현재 기본값을 프로젝트에서 사용할 수 없으면 Claude Code는 현재 세션에 대해 이전 버전으로 폴백하고 알림을 표시합니다. 폴백은 유지되지 않습니다. [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden)에서 최신 모델을 활성화하거나 [버전을 고정](#5-pin-model-versions)하여 선택을 영구적으로 만듭니다.

341 

342## IAM 구성

343 

344필요한 IAM 권한을 할당합니다:

345 

346`roles/aiplatform.user` 역할에는 필요한 권한이 포함됩니다:

347 

348* `aiplatform.endpoints.predict` - 모델 호출 및 토큰 계산에 필요

349 

350더 제한적인 권한의 경우 위의 권한만 포함하는 사용자 정의 역할을 만듭니다.

351 

352자세한 내용은 [Vertex IAM 설명서](https://cloud.google.com/vertex-ai/docs/general/access-control)를 참조하십시오.

353 

354<Note>

355 비용 추적 및 액세스 제어를 단순화하기 위해 Claude Code용 전용 GCP 프로젝트를 만듭니다.

356</Note>

357 

358## 1M 토큰 context window

359 

360Claude Opus 4.7, Opus 4.6 및 Sonnet 4.6은 Vertex AI에서 [1M 토큰 context window](https://platform.claude.com/docs/en/build-with-claude/context-windows#1m-token-context-window)를 지원합니다. Claude Code는 1M 모델 변형을 선택할 때 확장된 context window를 자동으로 활성화합니다.

361 

362[설정 마법사](#sign-in-with-vertex-ai)는 모델을 고정할 때 1M context 옵션을 제공합니다. 수동으로 고정된 모델에 대해 대신 활성화하려면 모델 ID에 `[1m]`을 추가합니다. 자세한 내용은 [타사 배포를 위한 모델 고정](/ko/model-config#pin-models-for-third-party-deployments)을 참조하십시오.

363 

364## 문제 해결

365 

366할당량 문제가 발생하는 경우:

367 

368* [Cloud Console](https://cloud.google.com/docs/quotas/view-manage)을 통해 현재 할당량을 확인하거나 할당량 증가를 요청합니다

369 

370"모델을 찾을 수 없음" 404 오류가 발생하는 경우:

371 

372* [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden)에서 모델이 활성화되어 있는지 확인합니다

373* 지정된 위치에서 모델을 사용할 수 있는지 확인합니다. 일부 모델은 특정 지역이 아닌 `global` 또는 `eu` 및 `us`와 같은 다중 지역 위치에서만 제공됩니다

374* `CLOUD_ML_REGION=global`을 사용하는 경우 [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden)의 "지원되는 기능" 아래에서 모델이 전역 엔드포인트를 지원하는지 확인합니다. 전역 엔드포인트를 지원하지 않는 모델의 경우:

375 * `ANTHROPIC_MODEL` 또는 `ANTHROPIC_DEFAULT_HAIKU_MODEL`을 통해 지원되는 모델을 지정하거나,

376 * `VERTEX_REGION_<MODEL_NAME>` 환경 변수를 사용하여 지역 또는 다중 지역 위치를 설정합니다

377 

378429 오류가 발생하는 경우:

379 

380* 지역 엔드포인트의 경우 주 모델과 소형/빠른 모델이 선택한 지역에서 지원되는지 확인합니다

381* `CLOUD_ML_REGION=global`로 전환하여 더 나은 가용성을 고려합니다

382 

383## 추가 리소스

384 

385* [Vertex AI 설명서](https://cloud.google.com/vertex-ai/docs)

386* [Vertex AI 가격](https://cloud.google.com/vertex-ai/pricing)

387* [Vertex AI 할당량 및 제한](https://cloud.google.com/vertex-ai/docs/quotas)

headless.md +225 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Claude Code를 프로그래밍 방식으로 실행하기

6 

7> Agent SDK를 사용하여 CLI, Python 또는 TypeScript에서 Claude Code를 프로그래밍 방식으로 실행합니다.

8 

9[Agent SDK](/ko/agent-sdk/overview)는 Claude Code를 구동하는 동일한 도구, 에이전트 루프 및 컨텍스트 관리를 제공합니다. 스크립트 및 CI/CD용 CLI로 사용하거나 완전한 프로그래밍 방식 제어를 위한 [Python](/ko/agent-sdk/python) 및 [TypeScript](/ko/agent-sdk/typescript) 패키지로 사용할 수 있습니다.

10 

11<Note>

12 CLI는 이전에 "헤드리스 모드"라고 불렸습니다. `-p` 플래그 및 모든 CLI 옵션은 동일한 방식으로 작동합니다.

13</Note>

14 

15CLI에서 Claude Code를 프로그래밍 방식으로 실행하려면 프롬프트와 함께 `-p`를 전달하고 [CLI 옵션](/ko/cli-reference)을 사용합니다:

16 

17```bash theme={null}

18claude -p "Find and fix the bug in auth.py" --allowedTools "Read,Edit,Bash"

19```

20 

21이 페이지는 CLI(`claude -p`)를 통한 Agent SDK 사용을 다룹니다. 구조화된 출력, 도구 승인 콜백 및 기본 메시지 객체가 있는 Python 및 TypeScript SDK 패키지의 경우 [전체 Agent SDK 문서](/ko/agent-sdk/overview)를 참조하십시오.

22 

23## 기본 사용법

24 

25`-p`(또는 `--print`) 플래그를 모든 `claude` 명령에 추가하여 비대화형으로 실행합니다. 모든 [CLI 옵션](/ko/cli-reference)은 `-p`와 함께 작동합니다:

26 

27* `--continue`는 [대화 계속하기](#continue-conversations)용

28* `--allowedTools`는 [도구 자동 승인](#auto-approve-tools)용

29* `--output-format`은 [구조화된 출력](#get-structured-output)용

30 

31이 예제는 코드베이스에 대해 Claude에 질문하고 응답을 출력합니다:

32 

33```bash theme={null}

34claude -p "What does the auth module do?"

35```

36 

37### 베어 모드로 더 빠르게 시작하기

38 

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

40 

41베어 모드는 모든 머신에서 동일한 결과가 필요한 CI 및 스크립트에 유용합니다. 팀원의 `~/.claude`에 있는 hook이나 프로젝트의 `.mcp.json`에 있는 MCP 서버는 베어 모드가 이들을 읽지 않기 때문에 실행되지 않습니다. 명시적으로 전달하는 플래그만 적용됩니다.

42 

43이 예제는 베어 모드에서 일회성 요약 작업을 실행하고 Read 도구를 사전 승인하여 권한 프롬프트 없이 호출이 완료되도록 합니다:

44 

45```bash theme={null}

46claude --bare -p "Summarize this file" --allowedTools "Read"

47```

48 

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

50 

51| 로드할 항목 | 사용 |

52| ----------- | ------------------------------------------------------- |

53| 시스템 프롬프트 추가 | `--append-system-prompt`, `--append-system-prompt-file` |

54| 설정 | `--settings <file-or-json>` |

55| MCP 서버 | `--mcp-config <file-or-json>` |

56| 사용자 정의 에이전트 | `--agents <json>` |

57| 플러그인 디렉토리 | `--plugin-dir <path>` |

58 

59베어 모드는 OAuth 및 키체인 읽기를 건너뜁니다. Anthropic 인증은 `ANTHROPIC_API_KEY` 또는 `--settings`에 전달된 JSON의 `apiKeyHelper`에서 가져와야 합니다. Bedrock, Vertex 및 Foundry는 일반적인 공급자 자격 증명을 사용합니다.

60 

61<Note>

62 `--bare`는 스크립트 및 SDK 호출에 권장되는 모드이며 향후 릴리스에서 `-p`의 기본값이 될 것입니다.

63</Note>

64 

65## 예제

66 

67이 예제들은 일반적인 CLI 패턴을 강조합니다. CI 및 기타 스크립트 호출의 경우 로컬에 구성된 항목을 선택하지 않도록 [`--bare`](#start-faster-with-bare-mode)를 추가합니다.

68 

69### 구조화된 출력 가져오기

70 

71`--output-format`을 사용하여 응답이 반환되는 방식을 제어합니다:

72 

73* `text`(기본값): 일반 텍스트 출력

74* `json`: 결과, 세션 ID 및 메타데이터가 포함된 구조화된 JSON

75* `stream-json`: 실시간 스트리밍을 위한 줄 구분 JSON

76 

77이 예제는 세션 메타데이터와 함께 프로젝트 요약을 JSON으로 반환하며, 텍스트 결과는 `result` 필드에 있습니다:

78 

79```bash theme={null}

80claude -p "Summarize this project" --output-format json

81```

82 

83특정 스키마를 준수하는 출력을 얻으려면 `--output-format json`을 `--json-schema` 및 [JSON Schema](https://json-schema.org/) 정의와 함께 사용합니다. 응답에는 요청에 대한 메타데이터(세션 ID, 사용량 등)가 포함되며 구조화된 출력은 `structured_output` 필드에 있습니다.

84 

85이 예제는 함수 이름을 추출하고 문자열 배열로 반환합니다:

86 

87```bash theme={null}

88claude -p "Extract the main function names from auth.py" \

89 --output-format json \

90 --json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}'

91```

92 

93<Tip>

94 [jq](https://jqlang.github.io/jq/)와 같은 도구를 사용하여 응답을 구문 분석하고 특정 필드를 추출합니다:

95 

96 ```bash theme={null}

97 # 텍스트 결과 추출

98 claude -p "Summarize this project" --output-format json | jq -r '.result'

99 

100 # 구조화된 출력 추출

101 claude -p "Extract function names from auth.py" \

102 --output-format json \

103 --json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}' \

104 | jq '.structured_output'

105 ```

106</Tip>

107 

108### 응답 스트리밍

109 

110`--output-format stream-json`을 `--verbose` 및 `--include-partial-messages`와 함께 사용하여 생성되는 토큰을 수신합니다. 각 줄은 이벤트를 나타내는 JSON 객체입니다:

111 

112```bash theme={null}

113claude -p "Explain recursion" --output-format stream-json --verbose --include-partial-messages

114```

115 

116다음 예제는 [jq](https://jqlang.github.io/jq/)를 사용하여 텍스트 델타를 필터링하고 스트리밍 텍스트만 표시합니다. `-r` 플래그는 원본 문자열(따옴표 없음)을 출력하고 `-j`는 줄 바꿈 없이 조인하므로 토큰이 계속 스트리밍됩니다:

117 

118```bash theme={null}

119claude -p "Write a poem" --output-format stream-json --verbose --include-partial-messages | \

120 jq -rj 'select(.type == "stream_event" and .event.delta.type? == "text_delta") | .event.delta.text'

121```

122 

123API 요청이 재시도 가능한 오류로 실패하면 Claude Code는 재시도하기 전에 `system/api_retry` 이벤트를 내보냅니다. 이를 사용하여 재시도 진행 상황을 표시하거나 사용자 정의 백오프 로직을 구현할 수 있습니다.

124 

125| 필드 | 유형 | 설명 |

126| ---------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |

127| `type` | `"system"` | 메시지 유형 |

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

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

130| `max_retries` | 정수 | 허용된 총 재시도 횟수 |

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

132| `error_status` | 정수 또는 null | HTTP 상태 코드, 또는 HTTP 응답이 없는 연결 오류의 경우 `null` |

133| `error` | 문자열 | 오류 범주: `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `rate_limit`, `invalid_request`, `server_error`, `max_output_tokens` 또는 `unknown` |

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

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

136 

137`system/init` 이벤트는 모델, 도구, MCP 서버 및 로드된 플러그인을 포함한 세션 메타데이터를 보고합니다. [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/ko/env-vars)이 설정되지 않은 경우 스트림의 첫 번째 이벤트이며, 이 경우 `plugin_install` 이벤트가 앞에 옵니다. 플러그인 필드를 사용하여 플러그인이 로드되지 않았을 때 CI를 실패하게 합니다:

138 

139| 필드 | 유형 | 설명 |

140| --------------- | -- | ---------------------------------------------------------------------------------------------------------------------------- |

141| `plugins` | 배열 | 성공적으로 로드된 플러그인, 각각 `name` 및 `path` 포함 |

142| `plugin_errors` | 배열 | 만족하지 않은 종속성 버전과 같은 플러그인 로드 시간 오류, 각각 `plugin`, `type` 및 `message` 포함. 영향을 받는 플러그인은 강등되고 `plugins`에서 제외됩니다. 오류가 없을 때 키는 생략됩니다 |

143 

144[`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/ko/env-vars)이 설정되면 Claude Code는 첫 번째 턴 전에 마켓플레이스 플러그인이 설치되는 동안 `system/plugin_install` 이벤트를 내보냅니다. 이를 사용하여 자신의 UI에서 설치 진행 상황을 표시합니다.

145 

146| 필드 | 유형 | 설명 |

147| ------------ | ------------------------------------------------------- | ----------------------------------------------------------------------------- |

148| `type` | `"system"` | 메시지 유형 |

149| `subtype` | `"plugin_install"` | 이를 플러그인 설치 이벤트로 식별 |

150| `status` | `"started"`, `"installed"`, `"failed"` 또는 `"completed"` | `started` 및 `completed`는 전체 설치를 괄호로 묶음; `installed` 및 `failed`는 개별 마켓플레이스를 보고 |

151| `name` | 문자열, 선택 사항 | 마켓플레이스 이름, `installed` 및 `failed`에 표시 |

152| `error` | 문자열, 선택 사항 | 실패 메시지, `failed`에 표시 |

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

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

155 

156콜백 및 메시지 객체를 사용한 프로그래밍 방식 스트리밍의 경우 Agent SDK 문서의 [실시간 응답 스트리밍](/ko/agent-sdk/streaming-output)을 참조하십시오.

157 

158### 도구 자동 승인

159 

160`--allowedTools`를 사용하여 Claude가 프롬프트 없이 특정 도구를 사용하도록 합니다. 이 예제는 테스트 스위트를 실행하고 실패를 수정하며, Claude가 권한을 요청하지 않고 Bash 명령을 실행하고 파일을 읽고 편집할 수 있도록 합니다:

161 

162```bash theme={null}

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

164 --allowedTools "Bash,Read,Edit"

165```

166 

167전체 세션에 대한 기준선을 설정하려면 개별 도구를 나열하는 대신 [권한 모드](/ko/permission-modes)를 전달합니다. `dontAsk`는 `permissions.allow` 규칙이나 [읽기 전용 명령 집합](/ko/permissions#read-only-commands)에 없는 모든 항목을 거부하며, 이는 잠긴 CI 실행에 유용합니다. `acceptEdits`는 Claude가 프롬프트 없이 파일을 쓸 수 있도록 하고 `mkdir`, `touch`, `mv` 및 `cp`와 같은 일반적인 파일 시스템 명령을 자동 승인합니다. 다른 셸 명령 및 네트워크 요청은 여전히 `--allowedTools` 항목이나 `permissions.allow` 규칙이 필요하며, 그렇지 않으면 시도될 때 실행이 중단됩니다:

168 

169```bash theme={null}

170claude -p "Apply the lint fixes" --permission-mode acceptEdits

171```

172 

173### 커밋 생성

174 

175이 예제는 스테이징된 변경 사항을 검토하고 적절한 메시지로 커밋을 생성합니다:

176 

177```bash theme={null}

178claude -p "Look at my staged changes and create an appropriate commit" \

179 --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"

180```

181 

182`--allowedTools` 플래그는 [권한 규칙 구문](/ko/settings#permission-rule-syntax)을 사용합니다. 뒤의 ` *`는 접두사 일치를 활성화하므로 `Bash(git diff *)`는 `git diff`로 시작하는 모든 명령을 허용합니다. 공백이 중요합니다: 없으면 `Bash(git diff*)`도 `git diff-index`와 일치합니다.

183 

184<Note>

185 사용자가 호출한 [skills](/ko/skills)(`/commit` 등) 및 [기본 제공 명령](/ko/commands)은 대화형 모드에서만 사용할 수 있습니다. `-p` 모드에서는 대신 수행하려는 작업을 설명합니다.

186</Note>

187 

188### 시스템 프롬프트 사용자 정의

189 

190`--append-system-prompt`를 사용하여 Claude Code의 기본 동작을 유지하면서 지침을 추가합니다. 이 예제는 PR diff를 Claude에 파이프하고 보안 취약점을 검토하도록 지시합니다:

191 

192```bash theme={null}

193gh pr diff "$1" | claude -p \

194 --append-system-prompt "You are a security engineer. Review for vulnerabilities." \

195 --output-format json

196```

197 

198기본 프롬프트를 완전히 바꾸는 `--system-prompt`를 포함한 더 많은 옵션은 [시스템 프롬프트 플래그](/ko/cli-reference#system-prompt-flags)를 참조하십시오.

199 

200### 대화 계속하기

201 

202`--continue`를 사용하여 가장 최근 대화를 계속하거나 `--resume`을 세션 ID와 함께 사용하여 특정 대화를 계속합니다. 이 예제는 검토를 실행한 다음 후속 프롬프트를 보냅니다:

203 

204```bash theme={null}

205# 첫 번째 요청

206claude -p "Review this codebase for performance issues"

207 

208# 가장 최근 대화 계속

209claude -p "Now focus on the database queries" --continue

210claude -p "Generate a summary of all issues found" --continue

211```

212 

213여러 대화를 실행 중인 경우 세션 ID를 캡처하여 특정 대화를 재개합니다:

214 

215```bash theme={null}

216session_id=$(claude -p "Start a review" --output-format json | jq -r '.session_id')

217claude -p "Continue that review" --resume "$session_id"

218```

219 

220## 다음 단계

221 

222* [Agent SDK 빠른 시작](/ko/agent-sdk/quickstart): Python 또는 TypeScript로 첫 번째 에이전트 구축

223* [CLI 참조](/ko/cli-reference): 모든 CLI 플래그 및 옵션

224* [GitHub Actions](/ko/github-actions): GitHub 워크플로우에서 Agent SDK 사용

225* [GitLab CI/CD](/ko/gitlab-ci-cd): GitLab 파이프라인에서 Agent SDK 사용

hooks.md +2651 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Hooks 참조

6 

7> Claude Code hook 이벤트, 구성 스키마, JSON 입출력 형식, 종료 코드, 비동기 hook, HTTP hook, 프롬프트 hook, MCP 도구 hook에 대한 참조입니다.

8 

9<Tip>

10 예제가 포함된 빠른 시작 가이드는 [hook으로 워크플로우 자동화](/ko/hooks-guide)를 참조하세요.

11</Tip>

12 

13Hook은 Claude Code의 수명 주기에서 특정 지점에 자동으로 실행되는 사용자 정의 셸 명령, HTTP 엔드포인트 또는 LLM 프롬프트입니다. 이 참조를 사용하여 이벤트 스키마, 구성 옵션, JSON 입출력 형식, 비동기 hook, HTTP hook, MCP 도구 hook과 같은 고급 기능을 조회할 수 있습니다. 처음으로 hook을 설정하는 경우 대신 [가이드](/ko/hooks-guide)부터 시작하세요.

14 

15## Hook 수명 주기

16 

17Hook은 Claude Code 세션 중 특정 지점에서 실행됩니다. 이벤트가 발생하고 matcher가 일치하면 Claude Code는 이벤트에 대한 JSON 컨텍스트를 hook 핸들러에 전달합니다. 명령 hook의 경우 입력은 stdin에 도착합니다. HTTP hook의 경우 POST 요청 본문으로 도착합니다. 그러면 핸들러는 입력을 검사하고 조치를 취한 후 선택적으로 결정을 반환할 수 있습니다. 이벤트는 세 가지 주기로 발생합니다: 세션당 한 번 (`SessionStart`, `SessionEnd`), 턴당 한 번 (`UserPromptSubmit`, `Stop`, `StopFailure`), 에이전트 루프 내의 모든 도구 호출에서 (`PreToolUse`, `PostToolUse`):

18 

19<div style={{maxWidth: "500px", margin: "0 auto"}}>

20 <Frame>

21 <img src="https://mintcdn.com/claude-code/ZIW26Z9pnpsXLhbS/images/hooks-lifecycle.svg?fit=max&auto=format&n=ZIW26Z9pnpsXLhbS&q=85&s=ee23691324deb6501df09bfdae560b64" alt="선택적 Setup에서 SessionStart로 시작하여 턴당 루프(UserPromptSubmit, 슬래시 명령에 대한 UserPromptExpansion, 중첩된 에이전트 루프(PreToolUse, PermissionRequest, PostToolUse, PostToolUseFailure, PostToolBatch, SubagentStart/Stop, TaskCreated, TaskCompleted), Stop 또는 StopFailure), TeammateIdle, PreCompact, PostCompact, SessionEnd를 거쳐 진행되는 hook 수명 주기 다이어그램. Elicitation 및 ElicitationResult는 MCP 도구 실행 내에 중첩되고, PermissionDenied는 PermissionRequest의 부분 분기(자동 모드 거부용), WorktreeCreate, WorktreeRemove, Notification, ConfigChange, InstructionsLoaded, CwdChanged, FileChanged는 독립적인 비동기 이벤트" width="520" height="1228" data-path="images/hooks-lifecycle.svg" />

22 </Frame>

23</div>

24 

25아래 표는 각 이벤트가 언제 발생하는지 요약합니다. [Hook 이벤트](#hook-events) 섹션에서는 각 이벤트의 전체 입력 스키마와 결정 제어 옵션을 문서화합니다.

26 

27| Event | When it fires |

28| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

29| `SessionStart` | When a session begins or resumes |

30| `Setup` | When you start Claude Code with `--init-only`, or with `--init` or `--maintenance` in `-p` mode. For one-time preparation in CI or scripts |

31| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |

32| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |

33| `PreToolUse` | Before a tool call executes. Can block it |

34| `PermissionRequest` | When a permission dialog appears |

35| `PermissionDenied` | When a tool call is denied by the auto mode classifier. Return `{retry: true}` to tell the model it may retry the denied tool call |

36| `PostToolUse` | After a tool call succeeds |

37| `PostToolUseFailure` | After a tool call fails |

38| `PostToolBatch` | After a full batch of parallel tool calls resolves, before the next model call |

39| `Notification` | When Claude Code sends a notification |

40| `SubagentStart` | When a subagent is spawned |

41| `SubagentStop` | When a subagent finishes |

42| `TaskCreated` | When a task is being created via `TaskCreate` |

43| `TaskCompleted` | When a task is being marked as completed |

44| `Stop` | When Claude finishes responding |

45| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |

46| `TeammateIdle` | When an [agent team](/en/agent-teams) teammate is about to go idle |

47| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |

48| `ConfigChange` | When a configuration file changes during a session |

49| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |

50| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |

51| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |

52| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |

53| `PreCompact` | Before context compaction |

54| `PostCompact` | After context compaction completes |

55| `Elicitation` | When an MCP server requests user input during a tool call |

56| `ElicitationResult` | After a user responds to an MCP elicitation, before the response is sent back to the server |

57| `SessionEnd` | When a session terminates |

58 

59### Hook이 어떻게 해결되는지

60 

61이러한 부분들이 어떻게 함께 작동하는지 보려면 파괴적인 셸 명령을 차단하는 이 `PreToolUse` hook을 고려하세요. `matcher`는 Bash 도구 호출로 좁혀지고 `if` 조건은 `rm *`과 일치하는 Bash 부명령으로 더 좁혀지므로 `block-rm.sh`는 두 필터가 모두 일치할 때만 생성됩니다:

62 

63```json theme={null}

64{

65 "hooks": {

66 "PreToolUse": [

67 {

68 "matcher": "Bash",

69 "hooks": [

70 {

71 "type": "command",

72 "if": "Bash(rm *)",

73 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-rm.sh"

74 }

75 ]

76 }

77 ]

78 }

79}

80```

81 

82스크립트는 stdin에서 JSON 입력을 읽고 명령을 추출한 후 `rm -rf`를 포함하면 `permissionDecision`을 `"deny"`로 반환합니다:

83 

84```bash theme={null}

85#!/bin/bash

86# .claude/hooks/block-rm.sh

87COMMAND=$(jq -r '.tool_input.command')

88 

89if echo "$COMMAND" | grep -q 'rm -rf'; then

90 jq -n '{

91 hookSpecificOutput: {

92 hookEventName: "PreToolUse",

93 permissionDecision: "deny",

94 permissionDecisionReason: "Destructive command blocked by hook"

95 }

96 }'

97else

98 exit 0 # allow the command

99fi

100```

101 

102이제 Claude Code가 `Bash "rm -rf /tmp/build"`를 실행하기로 결정했다고 가정합니다. 다음은 발생하는 일입니다:

103 

104<Frame>

105 <img src="https://mintcdn.com/claude-code/-tYw1BD_DEqfyyOZ/images/hook-resolution.svg?fit=max&auto=format&n=-tYw1BD_DEqfyyOZ&q=85&s=c73ebc1eeda2037570427d7af1e0a891" alt="Hook 해결 흐름: PreToolUse 이벤트 발생, matcher가 Bash 일치 확인, if 조건이 Bash(rm *) 일치 확인, hook 핸들러 실행, 결과가 Claude Code로 반환" width="930" height="290" data-path="images/hook-resolution.svg" />

106</Frame>

107 

108<Steps>

109 <Step title="이벤트 발생">

110 `PreToolUse` 이벤트가 발생합니다. Claude Code는 도구 입력을 stdin의 hook에 JSON으로 전송합니다:

111 

112 ```json theme={null}

113 { "tool_name": "Bash", "tool_input": { "command": "rm -rf /tmp/build" }, ... }

114 ```

115 </Step>

116 

117 <Step title="Matcher 확인">

118 matcher `"Bash"`가 도구 이름과 일치하므로 이 hook 그룹이 활성화됩니다. matcher를 생략하거나 `"*"`를 사용하면 이벤트의 모든 발생에서 그룹이 활성화됩니다.

119 </Step>

120 

121 <Step title="If 조건 확인">

122 `if` 조건 `"Bash(rm *)"`은 `rm -rf /tmp/build`가 `rm *`과 일치하는 부명령이므로 일치하여 이 핸들러가 생성됩니다. 명령이 `npm test`였다면 `if` 검사가 실패하고 `block-rm.sh`는 절대 실행되지 않아 프로세스 생성 오버헤드를 피합니다. `if` 필드는 선택 사항입니다. 없으면 일치한 그룹의 모든 핸들러가 실행됩니다.

123 </Step>

124 

125 <Step title="Hook 핸들러 실행">

126 스크립트는 전체 명령을 검사하고 `rm -rf`를 찾으므로 stdout에 결정을 인쇄합니다:

127 

128 ```json theme={null}

129 {

130 "hookSpecificOutput": {

131 "hookEventName": "PreToolUse",

132 "permissionDecision": "deny",

133 "permissionDecisionReason": "Destructive command blocked by hook"

134 }

135 }

136 ```

137 

138 명령이 `rm file.txt`와 같은 더 안전한 `rm` 변형이었다면 스크립트는 대신 `exit 0`을 실행하여 Claude Code에 도구 호출을 허용하고 추가 조치를 취하지 않도록 알립니다.

139 </Step>

140 

141 <Step title="Claude Code가 결과에 따라 행동">

142 Claude Code는 JSON 결정을 읽고 도구 호출을 차단하며 Claude에 이유를 표시합니다.

143 </Step>

144</Steps>

145 

146아래 [구성](#configuration) 섹션에서는 전체 스키마를 문서화하고, 각 [hook 이벤트](#hook-events) 섹션에서는 명령이 받는 입력과 반환할 수 있는 출력을 문서화합니다.

147 

148## 구성

149 

150Hook은 JSON 설정 파일에서 정의됩니다. 구성에는 세 가지 중첩 수준이 있습니다:

151 

1521. 응답할 [hook 이벤트](#hook-events)를 선택합니다 (예: `PreToolUse` 또는 `Stop`)

1532. 발생 시기를 필터링할 [matcher 그룹](#matcher-patterns)을 추가합니다 (예: "Bash 도구에만")

1543. 일치할 때 실행할 하나 이상의 [hook 핸들러](#hook-handler-fields)를 정의합니다

155 

156주석이 달린 예제를 포함한 완전한 설명은 위의 [Hook이 어떻게 해결되는지](#how-a-hook-resolves)를 참조하세요.

157 

158<Note>

159 이 페이지는 각 수준에 대해 특정 용어를 사용합니다: 수명 주기 지점에 대해 **hook 이벤트**, 필터에 대해 **matcher 그룹**, 실행되는 셸 명령, HTTP 엔드포인트, MCP 도구, 프롬프트 또는 에이전트에 대해 **hook 핸들러**. "Hook"은 일반 기능을 나타냅니다.

160</Note>

161 

162### Hook 위치

163 

164hook을 정의하는 위치는 그 범위를 결정합니다:

165 

166| 위치 | 범위 | 공유 가능 |

167| :--------------------------------------------------------- | :---------------- | :---------------- |

168| `~/.claude/settings.json` | 모든 프로젝트 | 아니오, 머신에 로컬 |

169| `.claude/settings.json` | 단일 프로젝트 | 예, 리포지토리에 커밋 가능 |

170| `.claude/settings.local.json` | 단일 프로젝트 | 아니오, gitignored |

171| 관리형 정책 설정 | 조직 전체 | 예, 관리자 제어 |

172| [Plugin](/ko/plugins) `hooks/hooks.json` | plugin이 활성화되었을 때 | 예, plugin과 함께 번들됨 |

173| [Skill](/ko/skills) 또는 [agent](/ko/sub-agents) frontmatter | 컴포넌트가 활성화되어 있는 동안 | 예, 컴포넌트 파일에서 정의됨 |

174 

175설정 파일 해결에 대한 자세한 내용은 [설정](/ko/settings)을 참조하세요. 엔터프라이즈 관리자는 `allowManagedHooksOnly`를 사용하여 사용자, 프로젝트 및 plugin hook을 차단할 수 있습니다. 관리형 설정 `enabledPlugins`에서 강제 활성화된 plugin의 hook은 면제되므로 관리자는 조직 마켓플레이스를 통해 검증된 hook을 배포할 수 있습니다. [Hook 구성](/ko/settings#hook-configuration)을 참조하세요.

176 

177### Matcher 패턴

178 

179`matcher` 필드는 hook이 발생할 때를 필터링합니다. matcher가 평가되는 방식은 포함된 문자에 따라 다릅니다:

180 

181| Matcher 값 | 평가 대상 | 예제 |

182| :-------------------- | :------------------------------ | :-------------------------------------------------------------------------------- |

183| `"*"`, `""` 또는 생략됨 | 모두 일치 | 이벤트의 모든 발생에서 발생 |

184| 문자, 숫자, `_`, `\|`만 포함 | 정확한 문자열 또는 `\|`로 구분된 정확한 문자열 목록 | `Bash`는 Bash 도구만 일치; `Edit\|Write`는 두 도구 중 하나와 정확히 일치 |

185| 다른 문자 포함 | JavaScript 정규식 | `^Notebook`은 Notebook으로 시작하는 모든 도구와 일치; `mcp__memory__.*`는 `memory` 서버의 모든 도구와 일치 |

186 

187`FileChanged` 이벤트는 감시 목록을 구축할 때 이러한 규칙을 따르지 않습니다. [FileChanged](#filechanged)를 참조하세요.

188 

189각 이벤트 유형은 다른 필드에서 일치합니다:

190 

191| 이벤트 | Matcher가 필터링하는 것 | 예제 matcher 값 |

192| :------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- |

193| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | 도구 이름 | `Bash`, `Edit\|Write`, `mcp__.*` |

194| `SessionStart` | 세션이 시작된 방식 | `startup`, `resume`, `clear`, `compact` |

195| `Setup` | 설정을 트리거한 CLI 플래그 | `init`, `maintenance` |

196| `SessionEnd` | 세션이 종료된 이유 | `clear`, `resume`, `logout`, `prompt_input_exit`, `bypass_permissions_disabled`, `other` |

197| `Notification` | 알림 유형 | `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog`, `elicitation_complete`, `elicitation_response` |

198| `SubagentStart` | 에이전트 유형 | `general-purpose`, `Explore`, `Plan` 또는 사용자 정의 에이전트 이름 |

199| `PreCompact`, `PostCompact` | 압축을 트리거한 것 | `manual`, `auto` |

200| `SubagentStop` | 에이전트 유형 | `SubagentStart`와 동일한 값 |

201| `ConfigChange` | 구성 소스 | `user_settings`, `project_settings`, `local_settings`, `policy_settings`, `skills` |

202| `CwdChanged` | matcher 지원 없음 | 모든 디렉토리 변경에서 항상 발생 |

203| `FileChanged` | 감시할 리터럴 파일명 ([FileChanged](#filechanged) 참조) | `.envrc\|.env` |

204| `StopFailure` | 오류 유형 | `rate_limit`, `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `invalid_request`, `server_error`, `max_output_tokens`, `unknown` |

205| `InstructionsLoaded` | 로드 이유 | `session_start`, `nested_traversal`, `path_glob_match`, `include`, `compact` |

206| `UserPromptExpansion` | 명령 이름 | skill 또는 명령 이름 |

207| `Elicitation` | MCP 서버 이름 | 구성된 MCP 서버 이름 |

208| `ElicitationResult` | MCP 서버 이름 | `Elicitation`과 동일한 값 |

209| `UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove` | matcher 지원 없음 | 모든 발생에서 항상 발생 |

210 

211matcher는 Claude Code가 stdin의 hook에 전송하는 [JSON 입력](#hook-input-and-output)의 필드에 대해 실행됩니다. 도구 이벤트의 경우 해당 필드는 `tool_name`입니다. 각 [hook 이벤트](#hook-events) 섹션에서는 해당 이벤트의 전체 matcher 값 집합과 입력 스키마를 나열합니다.

212 

213이 예제는 Claude가 파일을 쓰거나 편집할 때만 linting 스크립트를 실행합니다:

214 

215```json theme={null}

216{

217 "hooks": {

218 "PostToolUse": [

219 {

220 "matcher": "Edit|Write",

221 "hooks": [

222 {

223 "type": "command",

224 "command": "/path/to/lint-check.sh"

225 }

226 ]

227 }

228 ]

229 }

230}

231```

232 

233`UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, `CwdChanged`는 matcher를 지원하지 않으며 모든 발생에서 항상 발생합니다. 이러한 이벤트에 `matcher` 필드를 추가하면 자동으로 무시됩니다.

234 

235도구 이벤트의 경우 개별 hook 핸들러에서 [`if` 필드](#common-fields)를 설정하여 더 좁게 필터링할 수 있습니다. `if`는 [권한 규칙 구문](/ko/permissions)을 사용하여 도구 이름과 인수를 함께 일치시키므로 `"Bash(git *)"` 는 `git *` 패턴과 일치하는 모든 하위 명령에서 실행되고 `"Edit(*.ts)"`는 TypeScript 파일에만 실행됩니다.

236 

237#### MCP 도구 일치

238 

239[MCP](/ko/mcp) 서버 도구는 도구 이벤트 (`PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied`)에서 일반 도구로 나타나므로 다른 도구 이름과 동일한 방식으로 일치시킬 수 있습니다.

240 

241MCP 도구는 `mcp__<server>__<tool>` 명명 패턴을 따릅니다. 예를 들어:

242 

243* `mcp__memory__create_entities`: Memory 서버의 create entities 도구

244* `mcp__filesystem__read_file`: Filesystem 서버의 read file 도구

245* `mcp__github__search_repositories`: GitHub 서버의 search 도구

246 

247서버의 모든 도구와 일치하려면 서버 접두사에 `.*`를 추가합니다. `.*`는 필수입니다: `mcp__memory`와 같은 matcher는 문자와 밑줄만 포함하므로 정확한 문자열로 비교되고 도구와 일치하지 않습니다.

248 

249* `mcp__memory__.*`는 `memory` 서버의 모든 도구와 일치합니다

250* `mcp__.*__write.*`는 모든 서버의 이름이 `write`로 시작하는 모든 도구와 일치합니다

251 

252이 예제는 모든 memory 서버 작업을 기록하고 모든 MCP 서버의 쓰기 작업을 검증합니다:

253 

254```json theme={null}

255{

256 "hooks": {

257 "PreToolUse": [

258 {

259 "matcher": "mcp__memory__.*",

260 "hooks": [

261 {

262 "type": "command",

263 "command": "echo 'Memory operation initiated' >> ~/mcp-operations.log"

264 }

265 ]

266 },

267 {

268 "matcher": "mcp__.*__write.*",

269 "hooks": [

270 {

271 "type": "command",

272 "command": "/home/user/scripts/validate-mcp-write.py"

273 }

274 ]

275 }

276 ]

277 }

278}

279```

280 

281### Hook 핸들러 필드

282 

283내부 `hooks` 배열의 각 객체는 hook 핸들러입니다: matcher가 일치할 때 실행되는 셸 명령, HTTP 엔드포인트, MCP 도구, LLM 프롬프트 또는 에이전트입니다. 다섯 가지 유형이 있습니다:

284 

285* **[명령 hook](#command-hook-fields)** (`type: "command"`): 셸 명령을 실행합니다. 스크립트는 이벤트의 [JSON 입력](#hook-input-and-output)을 stdin에서 받고 종료 코드와 stdout을 통해 결과를 다시 전달합니다.

286* **[HTTP hook](#http-hook-fields)** (`type: "http"`): 이벤트의 JSON 입력을 HTTP POST 요청으로 URL에 전송합니다. 엔드포인트는 명령 hook과 동일한 [JSON 출력 형식](#json-output)을 사용하여 응답 본문을 통해 결과를 다시 전달합니다.

287* **[MCP 도구 hook](#mcp-tool-hook-fields)** (`type: "mcp_tool"`): 이미 연결된 [MCP 서버](/ko/mcp)의 도구를 호출합니다. 도구의 텍스트 출력은 명령 hook stdout처럼 처리됩니다.

288* **[프롬프트 hook](#prompt-and-agent-hook-fields)** (`type: "prompt"`): Claude 모델에 단일 턴 평가를 위한 프롬프트를 전송합니다. 모델은 yes/no 결정을 JSON으로 반환합니다. [프롬프트 기반 hook](#prompt-based-hooks)을 참조하세요.

289* **[에이전트 hook](#prompt-and-agent-hook-fields)** (`type: "agent"`): Read, Grep, Glob과 같은 도구를 사용하여 결정을 반환하기 전에 조건을 확인할 수 있는 subagent를 생성합니다. 에이전트 hook은 실험적이며 변경될 수 있습니다. [에이전트 기반 hook](#agent-based-hooks)을 참조하세요.

290 

291#### 공통 필드

292 

293이러한 필드는 모든 hook 유형에 적용됩니다:

294 

295| 필드 | 필수 | 설명 |

296| :-------------- | :-- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

297| `type` | 예 | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"` 또는 `"agent"` |

298| `if` | 아니오 | `"Bash(git *)"` 또는 `"Edit(*.ts)"`와 같은 권한 규칙 구문을 사용하여 이 hook이 실행될 때를 필터링합니다. hook은 도구 호출이 패턴과 일치할 때만 생성되거나 Bash 명령이 너무 복잡하여 구문 분석할 수 없을 때 생성됩니다. 도구 이벤트에서만 평가됩니다: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied`. 다른 이벤트에서는 `if`가 설정된 hook이 절대 실행되지 않습니다. [권한 규칙](/ko/permissions)과 동일한 구문을 사용합니다 |

299| `timeout` | 아니오 | 취소하기 전 초 단위. 기본값: 명령의 경우 600, 프롬프트의 경우 30, 에이전트의 경우 60 |

300| `statusMessage` | 아니오 | hook이 실행되는 동안 표시되는 사용자 정의 스피너 메시지 |

301| `once` | 아니오 | `true`인 경우 세션당 한 번만 실행된 후 제거됩니다. [Skill 및 에이전트의 Hook](#hooks-in-skills-and-agents)에서 선언된 hook에만 적용됨; 설정 파일 및 에이전트 frontmatter에서는 무시됨 |

302 

303`if` 필드는 정확히 하나의 권한 규칙을 보유합니다. 규칙을 결합하기 위한 `&&`, `||` 또는 목록 구문이 없습니다. 여러 조건을 적용하려면 각각에 대해 별도의 hook 핸들러를 정의합니다. Bash의 경우 규칙은 선행 `VAR=value` 할당이 제거된 후 도구 입력의 각 하위 명령에 대해 일치하므로 `if: "Bash(git push *)"` 는 `FOO=bar git push` 및 `npm test && git push` 모두와 일치합니다. hook은 모든 하위 명령이 일치할 때 실행되며 명령이 너무 복잡하여 구문 분석할 수 없을 때 항상 실행됩니다.

304 

305#### 명령 hook 필드

306 

307[공통 필드](#common-fields) 외에도 명령 hook은 이러한 필드를 허용합니다:

308 

309| 필드 | 필수 | 설명 |

310| :------------ | :-- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

311| `command` | 예 | 실행할 셸 명령 |

312| `async` | 아니오 | `true`인 경우 차단하지 않고 백그라운드에서 실행됩니다. [백그라운드에서 hook 실행](#run-hooks-in-the-background) 참조 |

313| `asyncRewake` | 아니오 | `true`인 경우 백그라운드에서 실행되고 종료 코드 2에서 Claude를 깨웁니다. `async`를 의미합니다. hook의 stderr 또는 stderr이 비어 있으면 stdout이 Claude에 시스템 알림으로 표시되므로 장기 실행 백그라운드 실패에 반응할 수 있습니다 |

314| `shell` | 아니오 | 이 hook에 사용할 셸. `"bash"` (기본값) 또는 `"powershell"`을 허용합니다. `"powershell"`을 설정하면 Windows에서 PowerShell을 통해 명령을 실행합니다. `CLAUDE_CODE_USE_POWERSHELL_TOOL`이 필요하지 않습니다. hook이 PowerShell을 직접 생성하기 때문입니다 |

315 

316#### HTTP hook 필드

317 

318[공통 필드](#common-fields) 외에도 HTTP hook은 이러한 필드를 허용합니다:

319 

320| 필드 | 필수 | 설명 |

321| :--------------- | :-- | :------------------------------------------------------------------------------------------------------------- |

322| `url` | 예 | POST 요청을 전송할 URL |

323| `headers` | 아니오 | 키-값 쌍으로 된 추가 HTTP 헤더. 값은 `$VAR_NAME` 또는 `${VAR_NAME}` 구문을 사용한 환경 변수 보간을 지원합니다. `allowedEnvVars`에 나열된 변수만 해결됩니다 |

324| `allowedEnvVars` | 아니오 | 헤더 값으로 보간될 수 있는 환경 변수 이름 목록. 나열되지 않은 변수에 대한 참조는 빈 문자열로 바뀝니다. 환경 변수 보간이 작동하려면 필수입니다 |

325 

326Claude Code는 hook의 [JSON 입력](#hook-input-and-output)을 `Content-Type: application/json`과 함께 POST 요청 본문으로 전송합니다. 응답 본문은 명령 hook과 동일한 [JSON 출력 형식](#json-output)을 사용합니다.

327 

328오류 처리는 명령 hook과 다릅니다: 2xx가 아닌 응답, 연결 실패, 시간 초과는 모두 실행을 계속하도록 허용하는 차단하지 않는 오류를 생성합니다. 도구 호출을 차단하거나 권한을 거부하려면 `decision: "block"` 또는 `hookSpecificOutput`이 `permissionDecision: "deny"`를 포함하는 JSON 본문이 있는 2xx 응답을 반환합니다.

329 

330이 예제는 `PreToolUse` 이벤트를 로컬 검증 서비스로 전송하고 `MY_TOKEN` 환경 변수의 토큰으로 인증합니다:

331 

332```json theme={null}

333{

334 "hooks": {

335 "PreToolUse": [

336 {

337 "matcher": "Bash",

338 "hooks": [

339 {

340 "type": "http",

341 "url": "http://localhost:8080/hooks/pre-tool-use",

342 "timeout": 30,

343 "headers": {

344 "Authorization": "Bearer $MY_TOKEN"

345 },

346 "allowedEnvVars": ["MY_TOKEN"]

347 }

348 ]

349 }

350 ]

351 }

352}

353```

354 

355#### MCP 도구 hook 필드

356 

357[공통 필드](#common-fields) 외에도 MCP 도구 hook은 이러한 필드를 허용합니다:

358 

359| 필드 | 필수 | 설명 |

360| :------- | :-- | :----------------------------------------------------------------------------------------------------------------- |

361| `server` | 예 | 구성된 MCP 서버의 이름. 서버는 이미 연결되어 있어야 합니다. hook은 OAuth 또는 연결 흐름을 트리거하지 않습니다 |

362| `tool` | 예 | 해당 서버에서 호출할 도구의 이름 |

363| `input` | 아니오 | 도구에 전달되는 인수. 문자열 값은 hook의 [JSON 입력](#hook-input-and-output)에서 `${path}` 치환을 지원합니다 (예: `"${tool_input.file_path}"`) |

364 

365도구의 텍스트 콘텐츠는 명령 hook stdout처럼 처리됩니다: 유효한 [JSON 출력](#json-output)으로 구문 분석되면 결정으로 처리되고, 그렇지 않으면 일반 텍스트로 표시됩니다. 명명된 서버가 연결되지 않았거나 도구가 `isError: true`를 반환하면 hook은 차단하지 않는 오류를 생성하고 실행이 계속됩니다.

366 

367MCP 도구 hook은 Claude Code가 MCP 서버에 연결한 후 모든 hook 이벤트에서 사용 가능합니다. `SessionStart` 및 `Setup`은 일반적으로 서버가 연결을 완료하기 전에 발생하므로 이러한 이벤트의 hook은 첫 실행 시 "not connected" 오류를 예상해야 합니다.

368 

369이 예제는 각 `Write` 또는 `Edit` 후에 `my_server` MCP 서버의 `security_scan` 도구를 호출하고 편집된 파일의 경로를 전달합니다:

370 

371```json theme={null}

372{

373 "hooks": {

374 "PostToolUse": [

375 {

376 "matcher": "Write|Edit",

377 "hooks": [

378 {

379 "type": "mcp_tool",

380 "server": "my_server",

381 "tool": "security_scan",

382 "input": { "file_path": "${tool_input.file_path}" }

383 }

384 ]

385 }

386 ]

387 }

388}

389```

390 

391#### 프롬프트 및 에이전트 hook 필드

392 

393[공통 필드](#common-fields) 외에도 프롬프트 및 에이전트 hook은 이러한 필드를 허용합니다:

394 

395| 필드 | 필수 | 설명 |

396| :------- | :-- | :--------------------------------------------------------- |

397| `prompt` | 예 | 모델에 전송할 프롬프트 텍스트. hook 입력 JSON에 대한 자리 표시자로 `$ARGUMENTS` 사용 |

398| `model` | 아니오 | 평가에 사용할 모델. 기본값은 빠른 모델 |

399 

400일치하는 모든 hook은 병렬로 실행되며 동일한 핸들러는 자동으로 중복 제거됩니다. 명령 hook은 명령 문자열로 중복 제거되고 HTTP hook은 URL로 중복 제거됩니다. 핸들러는 현재 디렉토리에서 Claude Code의 환경으로 실행됩니다. `$CLAUDE_CODE_REMOTE` 환경 변수는 원격 웹 환경에서 `"true"`로 설정되고 로컬 CLI에서는 설정되지 않습니다.

401 

402### 경로별로 스크립트 참조

403 

404프로젝트 또는 plugin 루트를 기준으로 hook 스크립트를 참조하려면 환경 변수를 사용하세요. hook이 실행될 때의 작업 디렉토리와 관계없이:

405 

406* `$CLAUDE_PROJECT_DIR`: 프로젝트 루트. 공백이 있는 경로를 처리하려면 따옴표로 감싸세요.

407* `${CLAUDE_PLUGIN_ROOT}`: plugin의 설치 디렉토리, [plugin](/ko/plugins)과 함께 번들된 스크립트의 경우. plugin 업데이트 시마다 변경됩니다.

408* `${CLAUDE_PLUGIN_DATA}`: plugin의 [지속적 데이터 디렉토리](/ko/plugins-reference#persistent-data-directory), plugin 업데이트를 거쳐 유지되어야 하는 종속성 및 상태의 경우.

409 

410<Tabs>

411 <Tab title="프로젝트 스크립트">

412 이 예제는 `$CLAUDE_PROJECT_DIR`을 사용하여 `Write` 또는 `Edit` 도구 호출 후 프로젝트의 `.claude/hooks/` 디렉토리에서 스타일 검사기를 실행합니다:

413 

414 ```json theme={null}

415 {

416 "hooks": {

417 "PostToolUse": [

418 {

419 "matcher": "Write|Edit",

420 "hooks": [

421 {

422 "type": "command",

423 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/check-style.sh"

424 }

425 ]

426 }

427 ]

428 }

429 }

430 ```

431 </Tab>

432 

433 <Tab title="Plugin 스크립트">

434 `hooks/hooks.json`에서 plugin hook을 정의하고 선택적 최상위 `description` 필드를 포함합니다. plugin이 활성화되면 해당 hook이 사용자 및 프로젝트 hook과 병합됩니다.

435 

436 이 예제는 plugin과 함께 번들된 형식 지정 스크립트를 실행합니다:

437 

438 ```json theme={null}

439 {

440 "description": "Automatic code formatting",

441 "hooks": {

442 "PostToolUse": [

443 {

444 "matcher": "Write|Edit",

445 "hooks": [

446 {

447 "type": "command",

448 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/format.sh",

449 "timeout": 30

450 }

451 ]

452 }

453 ]

454 }

455 }

456 ```

457 

458 plugin hook 생성에 대한 자세한 내용은 [plugin 컴포넌트 참조](/ko/plugins-reference#hooks)를 참조하세요.

459 </Tab>

460</Tabs>

461 

462### Skill 및 에이전트의 Hook

463 

464설정 파일 및 plugin 외에도 hook은 frontmatter를 사용하여 [skill](/ko/skills) 및 [subagent](/ko/sub-agents)에서 직접 정의할 수 있습니다. 이러한 hook은 컴포넌트의 수명 주기로 범위가 지정되며 해당 컴포넌트가 활성화되어 있을 때만 실행됩니다.

465 

466모든 hook 이벤트가 지원됩니다. subagent의 경우 `Stop` hook은 subagent가 완료될 때 발생하는 이벤트이므로 자동으로 `SubagentStop`으로 변환됩니다.

467 

468Hook은 설정 기반 hook과 동일한 구성 형식을 사용하지만 컴포넌트의 수명으로 범위가 지정되고 완료될 때 정리됩니다.

469 

470이 skill은 각 `Bash` 명령 전에 보안 검증 스크립트를 실행하는 `PreToolUse` hook을 정의합니다:

471 

472```yaml theme={null}

473---

474name: secure-operations

475description: Perform operations with security checks

476hooks:

477 PreToolUse:

478 - matcher: "Bash"

479 hooks:

480 - type: command

481 command: "./scripts/security-check.sh"

482---

483```

484 

485에이전트는 YAML frontmatter에서 동일한 형식을 사용합니다.

486 

487### `/hooks` 메뉴

488 

489Claude Code에서 `/hooks`를 입력하여 구성된 hook의 읽기 전용 브라우저를 엽니다. 메뉴는 구성된 hook 수가 있는 모든 hook 이벤트를 표시하고, matcher로 드릴다운할 수 있으며, 각 hook 핸들러의 전체 세부 정보를 표시합니다. 구성을 확인하거나, hook이 어느 설정 파일에서 왔는지 확인하거나, hook의 명령, 프롬프트 또는 URL을 검사하는 데 사용합니다.

490 

491메뉴는 다섯 가지 hook 유형을 표시합니다: `command`, `prompt`, `agent`, `http`, `mcp_tool`. 각 hook은 소스를 나타내는 `[type]` 접두사와 레이블이 지정됩니다:

492 

493* `User`: `~/.claude/settings.json`에서

494* `Project`: `.claude/settings.json`에서

495* `Local`: `.claude/settings.local.json`에서

496* `Plugin`: plugin의 `hooks/hooks.json`에서

497* `Session`: 현재 세션을 위해 메모리에 등록됨

498* `Built-in`: Claude Code에 의해 내부적으로 등록됨

499 

500hook을 선택하면 이벤트, matcher, 유형, 소스 파일, 전체 명령, 프롬프트 또는 URL을 표시하는 세부 정보 보기가 열립니다. 메뉴는 읽기 전용입니다: hook을 추가, 수정 또는 제거하려면 설정 JSON을 직접 편집하거나 Claude에 변경을 요청하세요.

501 

502### Hook 비활성화 또는 제거

503 

504hook을 제거하려면 설정 JSON 파일에서 해당 항목을 삭제합니다.

505 

506모든 hook을 제거하지 않고 임시로 비활성화하려면 설정 파일에서 `"disableAllHooks": true`를 설정합니다. 구성에 유지하면서 개별 hook을 비활성화할 수 있는 방법은 없습니다.

507 

508`disableAllHooks` 설정은 관리형 설정 계층을 준수합니다. 관리자가 관리형 정책 설정을 통해 hook을 구성한 경우 사용자, 프로젝트 또는 로컬 설정에서 설정된 `disableAllHooks`는 해당 관리형 hook을 비활성화할 수 없습니다. 관리형 설정 수준에서 설정된 `disableAllHooks`만 관리형 hook을 비활성화할 수 있습니다.

509 

510설정 파일의 hook에 대한 직접 편집은 일반적으로 파일 감시자에 의해 자동으로 선택됩니다.

511 

512## Hook 입출력

513 

514명령 hook은 stdin을 통해 JSON 데이터를 받고 종료 코드, stdout, stderr를 통해 결과를 전달합니다. HTTP hook은 POST 요청 본문으로 동일한 JSON을 받고 HTTP 응답 본문을 통해 결과를 전달합니다. 이 섹션에서는 모든 이벤트에 공통적인 필드와 동작을 다룹니다. [Hook 이벤트](#hook-events) 아래의 각 이벤트 섹션에는 특정 입력 스키마와 결정 제어 옵션이 포함됩니다.

515 

516### 공통 입력 필드

517 

518Hook 이벤트는 각 [hook 이벤트](#hook-events) 섹션에서 문서화된 이벤트 특정 필드 외에 이러한 필드를 JSON으로 받습니다. 명령 hook의 경우 이 JSON은 stdin을 통해 도착합니다. HTTP hook의 경우 POST 요청 본문으로 도착합니다.

519 

520| 필드 | 설명 |

521| :---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

522| `session_id` | 현재 세션 식별자 |

523| `transcript_path` | 대화 JSON 경로 |

524| `cwd` | hook이 호출될 때의 현재 작업 디렉토리 |

525| `permission_mode` | 현재 [권한 모드](/ko/permissions#permission-modes): `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"` 또는 `"bypassPermissions"`. 모든 이벤트가 이 필드를 받는 것은 아닙니다: 각 이벤트의 JSON 예제를 확인하세요 |

526| `hook_event_name` | 발생한 이벤트의 이름 |

527 

528`--agent`로 실행하거나 subagent 내부에서 실행할 때 두 개의 추가 필드가 포함됩니다:

529 

530| 필드 | 설명 |

531| :----------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |

532| `agent_id` | subagent의 고유 식별자. hook이 subagent 호출 내부에서 발생할 때만 존재합니다. 이를 사용하여 subagent hook 호출을 메인 스레드 호출과 구별합니다. |

533| `agent_type` | 에이전트 이름 (예: `"Explore"` 또는 `"security-reviewer"`). 세션이 `--agent`를 사용하거나 hook이 subagent 내부에서 발생할 때 존재합니다. subagent의 경우 subagent의 유형이 세션의 `--agent` 값보다 우선합니다. |

534 

535예를 들어 Bash 명령에 대한 `PreToolUse` hook은 stdin에서 다음을 받습니다:

536 

537```json theme={null}

538{

539 "session_id": "abc123",

540 "transcript_path": "/home/user/.claude/projects/.../transcript.jsonl",

541 "cwd": "/home/user/my-project",

542 "permission_mode": "default",

543 "hook_event_name": "PreToolUse",

544 "tool_name": "Bash",

545 "tool_input": {

546 "command": "npm test"

547 }

548}

549```

550 

551`tool_name` 및 `tool_input` 필드는 이벤트 특정입니다. 각 [hook 이벤트](#hook-events) 섹션에서는 해당 이벤트의 추가 필드를 문서화합니다.

552 

553### 종료 코드 출력

554 

555hook 명령의 종료 코드는 Claude Code에 작업을 진행할지, 차단할지 또는 무시할지를 알려줍니다.

556 

557**종료 0**은 성공을 의미합니다. Claude Code는 [JSON 출력 필드](#json-output)에 대해 stdout을 구문 분석합니다. JSON 출력은 종료 0에서만 처리됩니다. 대부분의 이벤트에서 stdout은 디버그 로그에 기록되지만 트랜스크립트에는 표시되지 않습니다. 예외는 `UserPromptSubmit`, `UserPromptExpansion`, 및 `SessionStart`이며, 여기서 stdout은 Claude가 보고 작용할 수 있는 컨텍스트로 추가됩니다.

558 

559**종료 2**는 차단 오류를 의미합니다. Claude Code는 stdout과 그 안의 JSON을 무시합니다. 대신 stderr 텍스트가 Claude에 오류 메시지로 피드백됩니다. 효과는 이벤트에 따라 다릅니다: `PreToolUse`는 도구 호출을 차단하고 `UserPromptSubmit`은 프롬프트를 거부합니다. 전체 목록은 [이벤트별 종료 코드 2 동작](#exit-code-2-behavior-per-event)을 참조하세요.

560 

561**다른 종료 코드**는 대부분의 hook 이벤트에 대한 차단하지 않는 오류입니다. 트랜스크립트는 `<hook name> hook error` 알림을 표시하고 stderr의 첫 번째 줄을 표시하므로 `--debug` 없이도 원인을 식별할 수 있습니다. 실행이 계속되고 전체 stderr은 디버그 로그에 기록됩니다.

562 

563예를 들어 위험한 Bash 명령을 차단하는 hook 명령 스크립트:

564 

565```bash theme={null}

566#!/bin/bash

567# stdin에서 JSON 입력을 읽고 명령을 확인합니다

568command=$(jq -r '.tool_input.command' < /dev/stdin)

569 

570if [[ "$command" == rm* ]]; then

571 echo "Blocked: rm commands are not allowed" >&2

572 exit 2 # 차단 오류: 도구 호출이 방지됨

573fi

574 

575exit 0 # 성공: 도구 호출이 진행됨

576```

577 

578<Warning>

579 대부분의 hook 이벤트에서 종료 코드 2만 작업을 차단합니다. Claude Code는 종료 코드 1을 차단하지 않는 오류로 취급하고 작업을 진행합니다. 1이 기존 Unix 실패 코드이지만 말입니다. hook이 정책을 적용하려면 `exit 2`를 사용합니다. 예외는 `WorktreeCreate`이며, 0이 아닌 종료 코드는 worktree 생성을 중단합니다.

580</Warning>

581 

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

583 

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

585 

586| Hook 이벤트 | 차단 가능? | 종료 코드 2에서 발생하는 것 |

587| :-------------------- | :----- | :------------------------------------------------------------------------------------------------- |

588| `PreToolUse` | 예 | 도구 호출을 차단합니다 |

589| `PermissionRequest` | 예 | 권한을 거부합니다 |

590| `UserPromptSubmit` | 예 | 프롬프트 처리를 차단하고 프롬프트를 지웁니다 |

591| `UserPromptExpansion` | 예 | 확장을 차단합니다 |

592| `Stop` | 예 | Claude가 중지되는 것을 방지하고 대화를 계속합니다 |

593| `SubagentStop` | 예 | subagent가 중지되는 것을 방지합니다 |

594| `TeammateIdle` | 예 | 팀원이 유휴 상태가 되는 것을 방지합니다 (팀원이 계속 작업함) |

595| `TaskCreated` | 예 | 작업 생성을 롤백합니다 |

596| `TaskCompleted` | 예 | 작업이 완료로 표시되는 것을 방지합니다 |

597| `ConfigChange` | 예 | 구성 변경이 적용되는 것을 차단합니다 (`policy_settings` 제외) |

598| `StopFailure` | 아니오 | 출력과 종료 코드는 무시됩니다 |

599| `PostToolUse` | 아니오 | Claude에 stderr을 표시합니다 (도구가 이미 실행됨) |

600| `PostToolUseFailure` | 아니오 | Claude에 stderr을 표시합니다 (도구가 이미 실패함) |

601| `PostToolBatch` | 예 | 다음 모델 호출 전에 에이전트 루프를 중지합니다 |

602| `PermissionDenied` | 아니오 | 종료 코드와 stderr은 무시됩니다 (거부가 이미 발생함). JSON `hookSpecificOutput.retry: true`를 사용하여 모델이 재시도할 수 있음을 알립니다 |

603| `Notification` | 아니오 | 사용자에게만 stderr을 표시합니다 |

604| `SubagentStart` | 아니오 | 사용자에게만 stderr을 표시합니다 |

605| `SessionStart` | 아니오 | 사용자에게만 stderr을 표시합니다 |

606| `Setup` | 아니오 | 사용자에게만 stderr을 표시합니다 |

607| `SessionEnd` | 아니오 | 사용자에게만 stderr을 표시합니다 |

608| `CwdChanged` | 아니오 | 사용자에게만 stderr을 표시합니다 |

609| `FileChanged` | 아니오 | 사용자에게만 stderr을 표시합니다 |

610| `PreCompact` | 예 | 압축을 차단합니다 |

611| `PostCompact` | 아니오 | 사용자에게만 stderr을 표시합니다 |

612| `Elicitation` | 예 | elicitation을 거부합니다 |

613| `ElicitationResult` | 예 | 응답을 차단합니다 (작업이 거부됨) |

614| `WorktreeCreate` | 예 | 0이 아닌 종료 코드로 인해 worktree 생성이 실패합니다 |

615| `WorktreeRemove` | 아니오 | 실패는 디버그 모드에서만 기록됩니다 |

616| `InstructionsLoaded` | 아니오 | 종료 코드는 무시됩니다 |

617 

618### HTTP 응답 처리

619 

620HTTP hook은 종료 코드와 stdout 대신 HTTP 상태 코드와 응답 본문을 사용합니다:

621 

622* **2xx 빈 본문**: 성공, 종료 코드 0과 출력 없음과 동등

623* **2xx 일반 텍스트 본문**: 성공, 텍스트가 컨텍스트로 추가됨

624* **2xx JSON 본문**: 성공, 명령 hook과 동일한 [JSON 출력](#json-output) 스키마를 사용하여 구문 분석됨

625* **2xx가 아닌 상태**: 차단하지 않는 오류, 실행이 계속됨

626* **연결 실패 또는 시간 초과**: 차단하지 않는 오류, 실행이 계속됨

627 

628명령 hook과 달리 HTTP hook은 상태 코드만으로 차단 오류를 신호할 수 없습니다. 도구 호출을 차단하거나 권한을 거부하려면 적절한 결정 필드를 포함하는 JSON 본문이 있는 2xx 응답을 반환합니다.

629 

630### JSON 출력

631 

632종료 코드를 사용하면 허용 또는 차단할 수 있지만 JSON 출력은 더 세밀한 제어를 제공합니다. 종료 코드 2로 차단하는 대신 종료 0으로 JSON 객체를 stdout에 인쇄합니다. Claude Code는 해당 JSON에서 특정 필드를 읽어 차단, 허용 또는 사용자에게 에스컬레이션을 포함한 동작을 제어합니다.

633 

634<Note>

635 hook당 하나의 접근 방식을 선택해야 합니다. 둘 다 선택하지 마세요: 종료 코드만 사용하여 신호하거나 종료 0으로 JSON을 인쇄하여 구조화된 제어를 합니다. Claude Code는 종료 0에서만 JSON을 처리합니다. 종료 2로 나가면 JSON은 무시됩니다.

636</Note>

637 

638hook의 stdout은 JSON 객체만 포함해야 합니다. 셸 프로필이 시작 시 텍스트를 인쇄하면 JSON 구문 분석을 방해할 수 있습니다. 문제 해결 가이드의 [JSON 검증 실패](/ko/hooks-guide#json-validation-failed)를 참조하세요.

639 

640컨텍스트에 주입된 hook 출력 (`additionalContext`, `systemMessage` 또는 일반 stdout)은 10,000자로 제한됩니다. 이 제한을 초과하는 출력은 파일에 저장되고 미리보기 및 파일 경로로 바뀌며, 큰 도구 결과가 처리되는 방식과 동일합니다.

641 

642JSON 객체는 세 가지 종류의 필드를 지원합니다:

643 

644* **`continue`와 같은 범용 필드**는 모든 이벤트에서 작동합니다. 이들은 아래 표에 나열되어 있습니다.

645* \*\*최상위 `decision` 및 `reason`\*\*은 일부 이벤트에서 차단하거나 피드백을 제공하는 데 사용됩니다.

646* \*\*`hookSpecificOutput`\*\*은 더 풍부한 제어가 필요한 이벤트를 위한 중첩 객체입니다. 이벤트 이름으로 설정된 `hookEventName` 필드가 필요합니다.

647 

648| 필드 | 기본값 | 설명 |

649| :--------------- | :------ | :----------------------------------------------------------------- |

650| `continue` | `true` | `false`인 경우 hook이 실행된 후 Claude가 완전히 중지됩니다. 모든 이벤트 특정 결정 필드보다 우선합니다 |

651| `stopReason` | 없음 | `continue`가 `false`일 때 사용자에게 표시되는 메시지. Claude에는 표시되지 않음 |

652| `suppressOutput` | `false` | `true`인 경우 디버그 로그에서 stdout을 숨깁니다 |

653| `systemMessage` | 없음 | 사용자에게 표시되는 경고 메시지 |

654 

655Claude를 이벤트 유형과 관계없이 완전히 중지하려면:

656 

657```json theme={null}

658{ "continue": false, "stopReason": "Build failed, fix errors before continuing" }

659```

660 

661#### Claude를 위한 컨텍스트 추가

662 

663`additionalContext` 필드는 hook에서 Claude의 컨텍스트 윈도우로 문자열을 전달합니다. Claude Code는 문자열을 시스템 미리 알림으로 래핑하고 hook이 발생한 지점에서 대화에 삽입합니다. Claude는 다음 모델 요청에서 미리 알림을 읽지만 인터페이스에 채팅 메시지로 나타나지 않습니다.

664 

665이벤트 이름과 함께 `hookSpecificOutput` 내에 `additionalContext`를 반환합니다:

666 

667```json theme={null}

668{

669 "hookSpecificOutput": {

670 "hookEventName": "PostToolUse",

671 "additionalContext": "This file is generated. Edit src/schema.ts and run `bun generate` instead."

672 }

673}

674```

675 

676미리 알림이 나타나는 위치는 이벤트에 따라 다릅니다:

677 

678* [SessionStart](#sessionstart), [Setup](#setup), 및 [SubagentStart](#subagentstart): 대화 시작, 첫 번째 프롬프트 전

679* [UserPromptSubmit](#userpromptsubmit) 및 [UserPromptExpansion](#userpromptexpansion): 제출된 프롬프트 옆

680* [PreToolUse](#pretooluse), [PostToolUse](#posttooluse), [PostToolUseFailure](#posttoolusefailure), 및 [PostToolBatch](#posttoolbatch): 도구 결과 옆

681 

682여러 hook이 동일한 이벤트에 대해 `additionalContext`를 반환하면 Claude는 모든 값을 받습니다. 값이 10,000자를 초과하면 Claude Code는 전체 텍스트를 세션 디렉토리의 파일에 쓰고 짧은 미리보기와 함께 파일 경로를 Claude에 전달합니다.

683 

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

685 

686* **환경 상태**: 현재 분기, 배포 대상 또는 활성 기능 플래그

687* **조건부 프로젝트 규칙**: 방금 편집한 파일에 적용되는 테스트 명령, 이 worktree에서 읽기 전용인 디렉토리

688* **외부 데이터**: 사용자에게 할당된 열린 문제, 최근 CI 결과, 내부 서비스에서 가져온 콘텐츠

689 

690변경되지 않는 지침의 경우 [CLAUDE.md](/ko/memory)를 선호합니다. 스크립트를 실행하지 않고 로드되며 정적 프로젝트 규칙의 표준 위치입니다.

691 

692명령형 시스템 지침이 아닌 사실 진술로 텍스트를 작성합니다. "배포 대상은 프로덕션입니다" 또는 "이 리포지토리는 `bun test`를 사용합니다"와 같은 표현은 프로젝트 정보로 읽힙니다. 대역 외 시스템 명령으로 표현된 텍스트는 Claude의 프롬프트 주입 방어를 트리거할 수 있으며, 이로 인해 Claude가 텍스트를 컨텍스트로 취급하는 대신 사용자에게 표시합니다.

693 

694주입되면 텍스트는 세션 트랜스크립트에 저장됩니다. `PostToolUse` 또는 `UserPromptSubmit`과 같은 중간 세션 이벤트의 경우 `--continue` 또는 `--resume`으로 재개하면 과거 턴에 대해 hook을 다시 실행하는 대신 저장된 텍스트를 재생하므로 타임스탬프 또는 커밋 SHA와 같은 값이 재개 시 오래됩니다. `SessionStart` hook은 `source`가 `"resume"`으로 설정된 재개 시 다시 실행되므로 컨텍스트를 새로 고칠 수 있습니다.

695 

696#### 결정 제어

697 

698모든 이벤트가 JSON을 통해 동작을 차단하거나 제어하는 것을 지원하는 것은 아닙니다. 그렇게 하는 이벤트는 각각 다른 필드 집합을 사용하여 해당 결정을 표현합니다. hook을 작성하기 전에 이 표를 빠른 참조로 사용하세요:

699 

700| 이벤트 | 결정 패턴 | 주요 필드 |

701| :---------------------------------------------------------------------------------------------------------------------------------- | :------------------------- | :--------------------------------------------------------------------------------------------------------------------- |

702| UserPromptSubmit, UserPromptExpansion, PostToolUse, PostToolUseFailure, PostToolBatch, Stop, SubagentStop, ConfigChange, PreCompact | 최상위 `decision` | `decision: "block"`, `reason` |

703| TeammateIdle, TaskCreated, TaskCompleted | 종료 코드 또는 `continue: false` | 종료 코드 2는 stderr 피드백으로 작업을 차단합니다. JSON `{"continue": false, "stopReason": "..."}` 또한 팀원을 완전히 중지하여 `Stop` hook 동작과 일치합니다 |

704| PreToolUse | `hookSpecificOutput` | `permissionDecision` (allow/deny/ask/defer), `permissionDecisionReason` |

705| PermissionRequest | `hookSpecificOutput` | `decision.behavior` (allow/deny) |

706| PermissionDenied | `hookSpecificOutput` | `retry: true`는 모델이 거부된 도구 호출을 재시도할 수 있음을 알립니다 |

707| WorktreeCreate | 경로 반환 | 명령 hook은 stdout에 경로를 인쇄합니다; HTTP hook은 `hookSpecificOutput.worktreePath`를 반환합니다. hook 실패 또는 누락된 경로는 생성을 실패합니다 |

708| Elicitation | `hookSpecificOutput` | `action` (accept/decline/cancel), `content` (form field values for accept) |

709| ElicitationResult | `hookSpecificOutput` | `action` (accept/decline/cancel), `content` (form field values override) |

710| WorktreeRemove, Notification, SessionEnd, PostCompact, InstructionsLoaded, StopFailure, CwdChanged, FileChanged | 없음 | 결정 제어 없음. 로깅 또는 정리와 같은 부작용에 사용됨 |

711 

712다음은 각 패턴의 실제 예입니다:

713 

714<Tabs>

715 <Tab title="최상위 결정">

716 `UserPromptSubmit`, `UserPromptExpansion`, `PostToolUse`, `PostToolUseFailure`, `PostToolBatch`, `Stop`, `SubagentStop`, `ConfigChange`, `PreCompact`에서 사용됩니다. 유일한 값은 `"block"`입니다. 작업을 진행하도록 허용하려면 JSON에서 `decision`을 생략하거나 JSON 없이 종료 0으로 나갑니다:

717 

718 ```json theme={null}

719 {

720 "decision": "block",

721 "reason": "Test suite must pass before proceeding"

722 }

723 ```

724 </Tab>

725 

726 <Tab title="PreToolUse">

727 더 풍부한 제어를 위해 `hookSpecificOutput`을 사용합니다: 허용, 거부, 요청 또는 연기. 실행 전에 도구 입력을 수정하거나 Claude를 위한 추가 컨텍스트를 주입할 수도 있습니다. 전체 옵션 집합은 [PreToolUse 결정 제어](#pretooluse-decision-control)를 참조하세요.

728 

729 ```json theme={null}

730 {

731 "hookSpecificOutput": {

732 "hookEventName": "PreToolUse",

733 "permissionDecision": "deny",

734 "permissionDecisionReason": "Database writes are not allowed"

735 }

736 }

737 ```

738 </Tab>

739 

740 <Tab title="PermissionRequest">

741 `hookSpecificOutput`을 사용하여 사용자를 대신하여 권한 요청을 허용하거나 거부합니다. 허용할 때 도구의 입력을 수정하거나 권한 규칙을 적용하여 사용자가 다시 프롬프트되지 않도록 할 수 있습니다. 전체 옵션 집합은 [PermissionRequest 결정 제어](#permissionrequest-decision-control)를 참조하세요.

742 

743 ```json theme={null}

744 {

745 "hookSpecificOutput": {

746 "hookEventName": "PermissionRequest",

747 "decision": {

748 "behavior": "allow",

749 "updatedInput": {

750 "command": "npm run lint"

751 }

752 }

753 }

754 }

755 ```

756 </Tab>

757</Tabs>

758 

759Bash 명령 검증, 프롬프트 필터링, 자동 승인 스크립트를 포함한 확장 예제는 가이드의 [자동화할 수 있는 것](/ko/hooks-guide#what-you-can-automate)과 [Bash 명령 검증기 참조 구현](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py)을 참조하세요.

760 

761## Hook 이벤트

762 

763각 이벤트는 hook이 실행될 수 있는 Claude Code의 수명 주기의 지점에 해당합니다. 아래 섹션은 수명 주기와 일치하도록 정렬됩니다: 세션 설정에서 에이전트 루프를 거쳐 세션 종료까지. 각 섹션에서는 이벤트가 언제 발생하는지, 지원하는 matcher, 받는 JSON 입력, 출력을 통해 동작을 제어하는 방법을 설명합니다.

764 

765### SessionStart

766 

767Claude Code가 새 세션을 시작하거나 기존 세션을 재개할 때 실행됩니다. 기존 문제나 코드베이스의 최근 변경 사항과 같은 개발 컨텍스트를 로드하거나 환경 변수를 설정하는 데 유용합니다. 스크립트가 필요하지 않은 정적 컨텍스트의 경우 [CLAUDE.md](/ko/memory)를 사용하세요.

768 

769SessionStart는 모든 세션에서 실행되므로 이러한 hook을 빠르게 유지하세요. `type: "command"` 및 `type: "mcp_tool"` hook만 지원됩니다.

770 

771matcher 값은 세션이 시작된 방식에 해당합니다:

772 

773| Matcher | 언제 발생하는지 |

774| :-------- | :------------------------------------ |

775| `startup` | 새 세션 |

776| `resume` | `--resume`, `--continue` 또는 `/resume` |

777| `clear` | `/clear` |

778| `compact` | 자동 또는 수동 압축 |

779 

780#### SessionStart 입력

781 

782[공통 입력 필드](#common-input-fields) 외에도 SessionStart hook은 `source`, `model`, 선택적으로 `agent_type`을 받습니다. `source` 필드는 세션이 시작된 방식을 나타냅니다: 새 세션의 경우 `"startup"`, 재개된 세션의 경우 `"resume"`, `/clear` 후 `"clear"`, 압축 후 `"compact"`. `model` 필드는 모델 식별자를 포함합니다. `claude --agent <name>`으로 Claude Code를 시작하면 `agent_type` 필드에 에이전트 이름이 포함됩니다.

783 

784```json theme={null}

785{

786 "session_id": "abc123",

787 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

788 "cwd": "/Users/...",

789 "hook_event_name": "SessionStart",

790 "source": "startup",

791 "model": "claude-sonnet-4-6"

792}

793```

794 

795#### SessionStart 결정 제어

796 

797hook 스크립트가 stdout에 인쇄하는 모든 텍스트는 Claude의 컨텍스트로 추가됩니다. 모든 hook에 사용 가능한 [JSON 출력 필드](#json-output) 외에도 이러한 이벤트 특정 필드를 반환할 수 있습니다:

798 

799| 필드 | 설명 |

800| :------------------ | :-------------------------------------------------------------------------------------------------------------------------------- |

801| `additionalContext` | Claude의 컨텍스트 시작 부분에 추가되는 문자열. 첫 번째 프롬프트 전에 추가됩니다. [Claude를 위한 컨텍스트 추가](#add-context-for-claude)를 참조하여 텍스트가 전달되는 방식과 포함할 내용을 확인하세요 |

802 

803```json theme={null}

804{

805 "hookSpecificOutput": {

806 "hookEventName": "SessionStart",

807 "additionalContext": "Current branch: feat/auth-refactor\nUncommitted changes: src/auth.ts, src/login.tsx\nActive issue: #4211 Migrate to OAuth2"

808 }

809}

810```

811 

812이 이벤트에 대해 일반 stdout이 이미 Claude에 도달하므로 컨텍스트만 로드하는 hook은 JSON을 구축하지 않고 stdout에 직접 인쇄할 수 있습니다. `suppressOutput`과 같은 다른 필드와 컨텍스트를 결합해야 할 때 JSON 형식을 사용합니다.

813 

814#### 환경 변수 유지

815 

816SessionStart hook은 `CLAUDE_ENV_FILE` 환경 변수에 액세스할 수 있으며, 이는 후속 Bash 명령에 대한 환경 변수를 유지할 수 있는 파일 경로를 제공합니다.

817 

818개별 환경 변수를 설정하려면 `CLAUDE_ENV_FILE`에 `export` 문을 작성합니다. 다른 hook에서 설정한 변수를 유지하려면 추가 (`>>`)를 사용합니다:

819 

820```bash theme={null}

821#!/bin/bash

822 

823if [ -n "$CLAUDE_ENV_FILE" ]; then

824 echo 'export NODE_ENV=production' >> "$CLAUDE_ENV_FILE"

825 echo 'export DEBUG_LOG=true' >> "$CLAUDE_ENV_FILE"

826 echo 'export PATH="$PATH:./node_modules/.bin"' >> "$CLAUDE_ENV_FILE"

827fi

828 

829exit 0

830```

831 

832설정 명령의 환경 변경을 모두 캡처하려면 내보낸 변수를 이전과 이후에 비교합니다:

833 

834```bash theme={null}

835#!/bin/bash

836 

837ENV_BEFORE=$(export -p | sort)

838 

839# 환경을 수정하는 설정 명령을 실행합니다

840source ~/.nvm/nvm.sh

841nvm use 20

842 

843if [ -n "$CLAUDE_ENV_FILE" ]; then

844 ENV_AFTER=$(export -p | sort)

845 comm -13 <(echo "$ENV_BEFORE") <(echo "$ENV_AFTER") >> "$CLAUDE_ENV_FILE"

846fi

847 

848exit 0

849```

850 

851이 파일에 작성된 모든 변수는 세션 중에 Claude Code가 실행하는 모든 후속 Bash 명령에서 사용 가능합니다.

852 

853<Note>

854 `CLAUDE_ENV_FILE`은 SessionStart, [Setup](#setup), [CwdChanged](#cwdchanged), [FileChanged](#filechanged) hook에 사용 가능합니다. 다른 hook 유형은 이 변수에 액세스할 수 없습니다.

855</Note>

856 

857### Setup

858 

859`--init-only`로 Claude Code를 시작하거나 print 모드 (`-p`)에서 `--init` 또는 `--maintenance`로 시작할 때만 발생합니다. 일반 시작 시에는 발생하지 않습니다. 일회성 종속성 설치 또는 CI 또는 스크립트에서 명시적으로 트리거하는 예약된 정리에 사용합니다. 일반 세션 시작과 별도입니다. 세션별 초기화의 경우 [SessionStart](#sessionstart)를 대신 사용합니다.

860 

861matcher 값은 hook을 트리거한 CLI 플래그에 해당합니다:

862 

863| Matcher | 언제 발생하는지 |

864| :------------ | :----------------------------------------- |

865| `init` | `claude --init-only` 또는 `claude -p --init` |

866| `maintenance` | `claude -p --maintenance` |

867 

868`--init-only`는 Setup hook과 `startup` matcher가 있는 SessionStart hook을 실행한 다음 대화를 시작하지 않고 종료합니다. `--init` 및 `--maintenance`는 `-p` (print 모드)와 결합할 때만 Setup hook을 발생시킵니다; 대화형 세션에서 이 두 플래그는 현재 Setup hook을 발생시키지 않습니다.

869 

870Setup은 모든 시작 시 발생하지 않으므로 종속성이 설치된 plugin은 Setup만으로는 의존할 수 없습니다. 실제 패턴은 첫 사용 시 종속성을 확인하고 누락되면 설치하는 것입니다. 예를 들어 `${CLAUDE_PLUGIN_DATA}/node_modules`를 테스트하고 없으면 `npm install`을 실행하는 hook 또는 skill입니다. 설치된 종속성을 저장할 위치는 [지속적 데이터 디렉토리](/ko/plugins-reference#persistent-data-directory)를 참조하세요.

871 

872#### Setup 입력

873 

874[공통 입력 필드](#common-input-fields) 외에도 Setup hook은 `trigger` 필드를 받으며, 이는 `"init"` 또는 `"maintenance"`로 설정됩니다:

875 

876```json theme={null}

877{

878 "session_id": "abc123",

879 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

880 "cwd": "/Users/...",

881 "hook_event_name": "Setup",

882 "trigger": "init"

883}

884```

885 

886#### Setup 결정 제어

887 

888Setup hook은 차단할 수 없습니다. 종료 코드 2에서 stderr이 사용자에게 표시됩니다; 다른 0이 아닌 종료 코드에서 stderr은 `--verbose`로 시작할 때만 나타납니다. 두 경우 모두 실행이 계속됩니다. Claude의 컨텍스트에 정보를 전달하려면 JSON 출력에서 `additionalContext`를 반환합니다; 일반 stdout은 디버그 로그에만 작성됩니다. 모든 hook에 사용 가능한 [JSON 출력 필드](#json-output) 외에도 이러한 이벤트 특정 필드를 반환할 수 있습니다:

889 

890| 필드 | 설명 |

891| :------------------ | :-------------------------------------- |

892| `additionalContext` | Claude의 컨텍스트에 추가되는 문자열. 여러 hook의 값이 연결됨 |

893 

894```json theme={null}

895{

896 "hookSpecificOutput": {

897 "hookEventName": "Setup",

898 "additionalContext": "Dependencies installed: node_modules, .venv"

899 }

900}

901```

902 

903Setup hook은 `CLAUDE_ENV_FILE`에 액세스할 수 있습니다. 해당 파일에 작성된 변수는 [SessionStart hook](#persist-environment-variables)과 마찬가지로 세션의 후속 Bash 명령에 유지됩니다. `type: "command"` 및 `type: "mcp_tool"` hook만 지원됩니다.

904 

905### InstructionsLoaded

906 

907`CLAUDE.md` 또는 `.claude/rules/*.md` 파일이 컨텍스트에 로드될 때 발생합니다. 이 이벤트는 세션 시작 시 즉시 로드된 파일에 대해 발생하고 나중에 파일이 지연 로드될 때 다시 발생합니다. 예를 들어 Claude가 중첩된 `CLAUDE.md`를 포함하는 하위 디렉토리에 액세스할 때 또는 `paths:` frontmatter가 있는 조건부 규칙이 일치할 때입니다. hook은 차단 또는 결정 제어를 지원하지 않습니다. 관찰성 목적으로 비동기적으로 실행됩니다.

908 

909matcher는 `load_reason`에 대해 실행됩니다. 예를 들어 `"matcher": "session_start"`를 사용하여 세션 시작 시에만 로드된 파일에 대해 발생하거나 `"matcher": "path_glob_match|nested_traversal"`을 사용하여 지연 로드에만 발생합니다.

910 

911#### InstructionsLoaded 입력

912 

913[공통 입력 필드](#common-input-fields) 외에도 InstructionsLoaded hook은 이러한 필드를 받습니다:

914 

915| 필드 | 설명 |

916| :------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------- |

917| `file_path` | 로드된 명령 파일의 절대 경로 |

918| `memory_type` | 파일의 범위: `"User"`, `"Project"`, `"Local"` 또는 `"Managed"` |

919| `load_reason` | 파일이 로드된 이유: `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"` 또는 `"compact"`. `"compact"` 값은 압축 이벤트 후 명령 파일이 다시 로드될 때 발생합니다 |

920| `globs` | 파일의 `paths:` frontmatter의 경로 glob 패턴 (있는 경우). `path_glob_match` 로드에만 존재 |

921| `trigger_file_path` | 지연 로드를 트리거한 파일의 경로 |

922| `parent_file_path` | 이 파일을 포함한 부모 명령 파일의 경로, `include` 로드의 경우 |

923 

924```json theme={null}

925{

926 "session_id": "abc123",

927 "transcript_path": "/Users/.../.claude/projects/.../transcript.jsonl",

928 "cwd": "/Users/my-project",

929 "hook_event_name": "InstructionsLoaded",

930 "file_path": "/Users/my-project/CLAUDE.md",

931 "memory_type": "Project",

932 "load_reason": "session_start"

933}

934```

935 

936#### InstructionsLoaded 결정 제어

937 

938InstructionsLoaded hook은 결정 제어가 없습니다. 명령 로드를 차단하거나 수정할 수 없습니다. 감사 로깅, 규정 준수 추적 또는 관찰성을 위해 이 이벤트를 사용합니다.

939 

940### UserPromptSubmit

941 

942사용자가 프롬프트를 제출할 때, Claude가 처리하기 전에 실행됩니다. 이를 통해 프롬프트/대화를 기반으로 추가 컨텍스트를 추가하거나, 프롬프트를 검증하거나, 특정 유형의 프롬프트를 차단할 수 있습니다.

943 

944#### UserPromptSubmit 입력

945 

946[공통 입력 필드](#common-input-fields) 외에도 UserPromptSubmit hook은 사용자가 제출한 텍스트를 포함하는 `prompt` 필드를 받습니다.

947 

948```json theme={null}

949{

950 "session_id": "abc123",

951 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

952 "cwd": "/Users/...",

953 "permission_mode": "default",

954 "hook_event_name": "UserPromptSubmit",

955 "prompt": "Write a function to calculate the factorial of a number"

956}

957```

958 

959#### UserPromptSubmit 결정 제어

960 

961`UserPromptSubmit` hook은 사용자 프롬프트 처리 여부를 제어하고 컨텍스트를 추가할 수 있습니다. 모든 [JSON 출력 필드](#json-output)를 사용할 수 있습니다.

962 

963종료 코드 0에서 대화에 컨텍스트를 추가하는 두 가지 방법이 있습니다:

964 

965* **일반 텍스트 stdout**: stdout에 작성된 JSON이 아닌 텍스트는 컨텍스트로 추가됩니다

966* **`additionalContext`가 있는 JSON**: 더 많은 제어를 위해 아래 JSON 형식을 사용합니다. `additionalContext` 필드는 컨텍스트로 추가됩니다

967 

968일반 stdout은 트랜스크립트에 hook 출력으로 표시됩니다. `additionalContext` 필드는 더 신중하게 추가됩니다.

969 

970프롬프트를 차단하려면 `decision`을 `"block"`으로 설정한 JSON 객체를 반환합니다:

971 

972| 필드 | 설명 |

973| :------------------ | :--------------------------------------------------------------------------- |

974| `decision` | `"block"`은 프롬프트가 처리되는 것을 방지하고 컨텍스트에서 지웁니다. 생략하여 프롬프트를 진행하도록 허용 |

975| `reason` | `decision`이 `"block"`일 때 사용자에게 표시됩니다. 컨텍스트에 추가되지 않음 |

976| `additionalContext` | Claude의 컨텍스트에 추가되는 문자열. [Claude를 위한 컨텍스트 추가](#add-context-for-claude)를 참조하세요 |

977| `sessionTitle` | 세션 제목을 설정합니다. `/rename`과 동일한 효과입니다. 프롬프트 내용을 기반으로 세션을 자동으로 이름 지정하는 데 사용합니다 |

978 

979```json theme={null}

980{

981 "decision": "block",

982 "reason": "Explanation for decision",

983 "hookSpecificOutput": {

984 "hookEventName": "UserPromptSubmit",

985 "additionalContext": "My additional context here",

986 "sessionTitle": "My session title"

987 }

988}

989```

990 

991<Note>

992 JSON 형식은 간단한 사용 사례에는 필요하지 않습니다. 컨텍스트를 추가하려면 종료 코드 0으로 stdout에 일반 텍스트를 인쇄할 수 있습니다. 프롬프트를 차단하거나 더 구조화된 제어가 필요할 때 JSON을 사용합니다.

993</Note>

994 

995### UserPromptExpansion

996 

997사용자가 입력한 slash 명령이 Claude에 도달하기 전에 프롬프트로 확장될 때 실행됩니다. 이를 사용하여 특정 명령이 직접 호출되는 것을 차단하거나, 특정 skill에 대한 컨텍스트를 주입하거나, 사용자가 호출하는 명령을 기록합니다. 예를 들어 `deploy`와 일치하는 hook은 승인 파일이 없으면 `/deploy`를 차단할 수 있고, review skill과 일치하는 hook은 팀의 review 체크리스트를 `additionalContext`로 추가할 수 있습니다.

998 

999이 이벤트는 `PreToolUse`가 다루지 않는 경로를 다룹니다: `PreToolUse` hook이 `Skill` 도구와 일치하면 Claude가 도구를 호출할 때만 발생하지만, `/skillname`을 직접 입력하면 `PreToolUse`를 우회합니다. `UserPromptExpansion`은 그 직접 경로에서 발생합니다.

1000 

1001`command_name`에서 일치합니다. matcher를 비워두어 모든 prompt 유형 slash 명령에서 발생하도록 합니다.

1002 

1003#### UserPromptExpansion 입력

1004 

1005[공통 입력 필드](#common-input-fields) 외에도 UserPromptExpansion hook은 `expansion_type`, `command_name`, `command_args`, `command_source`, 원본 `prompt` 문자열을 받습니다. `expansion_type` 필드는 skill 및 사용자 정의 명령의 경우 `slash_command`이거나 MCP 서버 프롬프트의 경우 `mcp_prompt`입니다.

1006 

1007```json theme={null}

1008{

1009 "session_id": "abc123",

1010 "transcript_path": "/Users/.../00893aaf.jsonl",

1011 "cwd": "/Users/...",

1012 "permission_mode": "default",

1013 "hook_event_name": "UserPromptExpansion",

1014 "expansion_type": "slash_command",

1015 "command_name": "example-skill",

1016 "command_args": "arg1 arg2",

1017 "command_source": "plugin",

1018 "prompt": "/example-skill arg1 arg2"

1019}

1020```

1021 

1022#### UserPromptExpansion 결정 제어

1023 

1024`UserPromptExpansion` hook은 확장을 차단하거나 컨텍스트를 추가할 수 있습니다. 모든 [JSON 출력 필드](#json-output)를 사용할 수 있습니다.

1025 

1026| 필드 | 설명 |

1027| :------------------ | :---------------------------------------------------------------------------------------- |

1028| `decision` | `"block"`은 slash 명령이 확장되는 것을 방지합니다. 생략하여 진행하도록 허용 |

1029| `reason` | `decision`이 `"block"`일 때 사용자에게 표시됩니다 |

1030| `additionalContext` | 확장된 프롬프트와 함께 Claude의 컨텍스트에 추가되는 문자열. [Claude를 위한 컨텍스트 추가](#add-context-for-claude)를 참조하세요 |

1031 

1032```json theme={null}

1033{

1034 "decision": "block",

1035 "reason": "This slash command is not available",

1036 "hookSpecificOutput": {

1037 "hookEventName": "UserPromptExpansion",

1038 "additionalContext": "Additional context for this expansion"

1039 }

1040}

1041```

1042 

1043### PreToolUse

1044 

1045Claude가 도구 매개변수를 생성한 후 도구 호출을 처리하기 전에 실행됩니다. 도구 이름에서 일치합니다: `Bash`, `Edit`, `Write`, `Read`, `Glob`, `Grep`, `Agent`, `WebFetch`, `WebSearch`, `AskUserQuestion`, `ExitPlanMode`, 모든 [MCP 도구 이름](#match-mcp-tools).

1046 

1047[PreToolUse 결정 제어](#pretooluse-decision-control)를 사용하여 도구 사용을 허용, 거부, 요청 또는 연기합니다.

1048 

1049#### PreToolUse 입력

1050 

1051[공통 입력 필드](#common-input-fields) 외에도 PreToolUse hook은 `tool_name`, `tool_input`, `tool_use_id`를 받습니다. `tool_input` 필드는 도구에 따라 다릅니다:

1052 

1053##### Bash

1054 

1055셸 명령을 실행합니다.

1056 

1057| 필드 | 유형 | 예제 | 설명 |

1058| :------------------ | :-- | :----------------- | :------------------ |

1059| `command` | 문자열 | `"npm test"` | 실행할 셸 명령 |

1060| `description` | 문자열 | `"Run test suite"` | 명령이 수행하는 작업의 선택적 설명 |

1061| `timeout` | 숫자 | `120000` | 선택적 시간 초과 (밀리초) |

1062| `run_in_background` | 부울 | `false` | 명령을 백그라운드에서 실행할지 여부 |

1063 

1064##### Write

1065 

1066파일을 생성하거나 덮어씁니다.

1067 

1068| 필드 | 유형 | 예제 | 설명 |

1069| :---------- | :-- | :-------------------- | :---------- |

1070| `file_path` | 문자열 | `"/path/to/file.txt"` | 쓸 파일의 절대 경로 |

1071| `content` | 문자열 | `"file content"` | 파일에 쓸 내용 |

1072 

1073##### Edit

1074 

1075기존 파일의 문자열을 바꿉니다.

1076 

1077| 필드 | 유형 | 예제 | 설명 |

1078| :------------ | :-- | :-------------------- | :------------ |

1079| `file_path` | 문자열 | `"/path/to/file.txt"` | 편집할 파일의 절대 경로 |

1080| `old_string` | 문자열 | `"original text"` | 찾아 바꿀 텍스트 |

1081| `new_string` | 문자열 | `"replacement text"` | 대체 텍스트 |

1082| `replace_all` | 부울 | `false` | 모든 발생을 바꿀지 여부 |

1083 

1084##### Read

1085 

1086파일 내용을 읽습니다.

1087 

1088| 필드 | 유형 | 예제 | 설명 |

1089| :---------- | :-- | :-------------------- | :--------------- |

1090| `file_path` | 문자열 | `"/path/to/file.txt"` | 읽을 파일의 절대 경로 |

1091| `offset` | 숫자 | `10` | 읽기를 시작할 선택적 줄 번호 |

1092| `limit` | 숫자 | `50` | 읽을 선택적 줄 수 |

1093 

1094##### Glob

1095 

1096glob 패턴과 일치하는 파일을 찾습니다.

1097 

1098| 필드 | 유형 | 예제 | 설명 |

1099| :-------- | :-- | :--------------- | :---------------------------- |

1100| `pattern` | 문자열 | `"**/*.ts"` | 파일과 일치시킬 glob 패턴 |

1101| `path` | 문자열 | `"/path/to/dir"` | 검색할 선택적 디렉토리. 기본값은 현재 작업 디렉토리 |

1102 

1103##### Grep

1104 

1105정규식으로 파일 내용을 검색합니다.

1106 

1107| 필드 | 유형 | 예제 | 설명 |

1108| :------------ | :-- | :--------------- | :---------------------------------------------------------------------------- |

1109| `pattern` | 문자열 | `"TODO.*fix"` | 검색할 정규식 패턴 |

1110| `path` | 문자열 | `"/path/to/dir"` | 검색할 선택적 파일 또는 디렉토리 |

1111| `glob` | 문자열 | `"*.ts"` | 파일을 필터링할 선택적 glob 패턴 |

1112| `output_mode` | 문자열 | `"content"` | `"content"`, `"files_with_matches"` 또는 `"count"`. 기본값은 `"files_with_matches"` |

1113| `-i` | 부울 | `true` | 대소문자를 구분하지 않는 검색 |

1114| `multiline` | 부울 | `false` | 다중 줄 일치 활성화 |

1115 

1116##### WebFetch

1117 

1118웹 콘텐츠를 가져오고 처리합니다.

1119 

1120| 필드 | 유형 | 예제 | 설명 |

1121| :------- | :-- | :---------------------------- | :----------------- |

1122| `url` | 문자열 | `"https://example.com/api"` | 콘텐츠를 가져올 URL |

1123| `prompt` | 문자열 | `"Extract the API endpoints"` | 가져온 콘텐츠에서 실행할 프롬프트 |

1124 

1125##### WebSearch

1126 

1127웹을 검색합니다.

1128 

1129| 필드 | 유형 | 예제 | 설명 |

1130| :---------------- | :-- | :----------------------------- | :------------------- |

1131| `query` | 문자열 | `"react hooks best practices"` | 검색 쿼리 |

1132| `allowed_domains` | 배열 | `["docs.example.com"]` | 선택적: 이러한 도메인의 결과만 포함 |

1133| `blocked_domains` | 배열 | `["spam.example.com"]` | 선택적: 이러한 도메인의 결과 제외 |

1134 

1135##### Agent

1136 

1137[subagent](/ko/sub-agents)를 생성합니다.

1138 

1139| 필드 | 유형 | 예제 | 설명 |

1140| :-------------- | :-- | :------------------------- | :------------------ |

1141| `prompt` | 문자열 | `"Find all API endpoints"` | 에이전트가 수행할 작업 |

1142| `description` | 문자열 | `"Find API endpoints"` | 작업의 짧은 설명 |

1143| `subagent_type` | 문자열 | `"Explore"` | 사용할 특화된 에이전트의 유형 |

1144| `model` | 문자열 | `"sonnet"` | 기본값을 재정의할 선택적 모델 별칭 |

1145 

1146##### AskUserQuestion

1147 

1148사용자에게 1\~4개의 객관식 질문을 합니다.

1149 

1150| 필드 | 유형 | 예제 | 설명 |

1151| :---------- | :- | :----------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------- |

1152| `questions` | 배열 | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}]` | 제시할 질문, 각각 `question` 문자열, 짧은 `header`, `options` 배열, 선택적 `multiSelect` 플래그 |

1153| `answers` | 객체 | `{"Which framework?": "React"}` | 선택적. 질문 텍스트를 선택한 옵션 레이블로 매핑합니다. 다중 선택 답변은 쉼표로 레이블을 결합합니다. Claude는 이 필드를 설정하지 않습니다. `updatedInput`을 통해 프로그래밍 방식으로 답변을 제공하세요 |

1154 

1155#### PreToolUse 결정 제어

1156 

1157`PreToolUse` hook은 도구 호출 진행 여부를 제어할 수 있습니다. 최상위 `decision` 필드를 사용하는 다른 hook과 달리 PreToolUse는 `hookSpecificOutput` 객체 내에 결정을 반환합니다. 이는 더 풍부한 제어를 제공합니다: 네 가지 결과 (허용, 거부, 요청 또는 연기) 및 실행 전에 도구 입력을 수정하는 기능.

1158 

1159| 필드 | 설명 |

1160| :------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1161| `permissionDecision` | `"allow"`는 권한 시스템을 우회합니다. `"deny"`는 도구 호출을 방지합니다. `"ask"`는 사용자에게 확인을 요청합니다. `"defer"`는 나중에 재개하도록 연기합니다. [권한 거부 및 요청 규칙](/ko/permissions#manage-permissions)은 hook이 반환하는 것과 관계없이 여전히 평가됩니다 |

1162| `permissionDecisionReason` | `"allow"` 및 `"ask"`의 경우 사용자에게 표시되지만 Claude에는 표시되지 않습니다. `"deny"`의 경우 Claude에 표시됩니다. `"defer"`의 경우 무시됩니다 |

1163| `updatedInput` | 실행 전에 도구의 입력 매개변수를 수정합니다. 전체 입력 객체를 바꾸므로 변경되지 않은 필드를 수정된 필드와 함께 포함합니다. `"allow"`와 결합하여 자동 승인하거나 `"ask"`와 결합하여 수정된 입력을 사용자에게 표시합니다. `"defer"`의 경우 무시됩니다 |

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

1165 

1166여러 PreToolUse hook이 다른 결정을 반환할 때 우선순위는 `deny` > `defer` > `ask` > `allow`입니다.

1167 

1168hook이 `"ask"`를 반환하면 사용자에게 표시되는 권한 프롬프트에는 hook이 어디에서 왔는지를 나타내는 레이블이 포함됩니다: 예를 들어 `[User]`, `[Project]`, `[Plugin]` 또는 `[Local]`. 이는 사용자가 어느 구성 소스가 확인을 요청하는지 이해하는 데 도움이 됩니다.

1169 

1170```json theme={null}

1171{

1172 "hookSpecificOutput": {

1173 "hookEventName": "PreToolUse",

1174 "permissionDecision": "allow",

1175 "permissionDecisionReason": "My reason here",

1176 "updatedInput": {

1177 "field_to_modify": "new value"

1178 },

1179 "additionalContext": "Current environment: production. Proceed with caution."

1180 }

1181}

1182```

1183 

1184`AskUserQuestion` 및 `ExitPlanMode`는 사용자 상호 작용이 필요하며 일반적으로 [비대화형 모드](/ko/headless)에서 `-p` 플래그로 차단합니다. `permissionDecision: "allow"`를 `updatedInput`과 함께 반환하면 해당 요구 사항을 충족합니다: hook은 stdin에서 도구의 입력을 읽고 자신의 UI를 통해 답변을 수집하고 `updatedInput`에서 반환하여 도구가 프롬프트 없이 실행되도록 합니다. `"allow"`만 반환하는 것은 이러한 도구에 충분하지 않습니다. `AskUserQuestion`의 경우 원본 `questions` 배열을 에코백하고 각 질문의 텍스트를 선택한 답변으로 매핑하는 [`answers`](#askuserquestion) 객체를 추가합니다.

1185 

1186<Note>

1187 PreToolUse는 이전에 최상위 `decision` 및 `reason` 필드를 사용했지만 이 이벤트에는 더 이상 사용되지 않습니다. 대신 `hookSpecificOutput.permissionDecision` 및 `hookSpecificOutput.permissionDecisionReason`을 사용합니다. 더 이상 사용되지 않는 값 `"approve"` 및 `"block"`은 각각 `"allow"` 및 `"deny"`로 매핑됩니다. PostToolUse 및 Stop과 같은 다른 이벤트는 계속 최상위 `decision` 및 `reason`을 현재 형식으로 사용합니다.

1188</Note>

1189 

1190#### 도구 호출을 나중에 재개하도록 연기

1191 

1192`"defer"`는 Claude Code를 subprocess로 실행하고 JSON 출력을 읽는 Agent SDK 앱 또는 Claude Code 위에 구축된 사용자 정의 UI와 같은 통합을 위한 것입니다. 이를 통해 호출 프로세스가 Claude를 도구 호출에서 일시 중지하고 자신의 인터페이스를 통해 입력을 수집하고 중단된 위치에서 재개할 수 있습니다. Claude Code는 [비대화형 모드](/ko/headless)에서 `-p` 플래그를 사용할 때만 이 값을 준수합니다. 대화형 세션에서는 경고를 기록하고 hook 결과를 무시합니다.

1193 

1194<Note>

1195 `defer` 값은 Claude Code v2.1.89 이상이 필요합니다. 이전 버전은 이를 인식하지 못하고 도구는 일반 권한 흐름을 통해 진행됩니다.

1196</Note>

1197 

1198일반적인 경우는 `AskUserQuestion` 도구입니다: Claude가 사용자에게 뭔가를 묻고 싶지만 답변할 터미널이 없습니다. 왕복은 다음과 같이 작동합니다:

1199 

12001. Claude가 `AskUserQuestion`을 호출합니다. `PreToolUse` hook이 발생합니다.

12012. hook이 `permissionDecision: "defer"`를 반환합니다. 도구가 실행되지 않습니다. 프로세스는 `stop_reason: "tool_deferred"`로 종료되고 보류 중인 도구 호출이 트랜스크립트에 유지됩니다.

12023. 호출 프로세스는 SDK 결과에서 `deferred_tool_use`를 읽고 자신의 UI에서 질문을 표시하고 답변을 기다립니다.

12034. 호출 프로세스는 `claude -p --resume <session-id>`를 실행합니다. 동일한 도구 호출이 `PreToolUse`를 다시 발생시킵니다.

12045. hook이 `permissionDecision: "allow"`를 `updatedInput`의 답변과 함께 반환합니다. 도구가 실행되고 Claude가 계속됩니다.

1205 

1206`deferred_tool_use` 필드는 도구의 `id`, `name`, `input`을 전달합니다. `input`은 실행 전에 캡처된 도구 호출을 위해 Claude가 생성한 매개변수입니다:

1207 

1208```json theme={null}

1209{

1210 "type": "result",

1211 "subtype": "success",

1212 "stop_reason": "tool_deferred",

1213 "session_id": "abc123",

1214 "deferred_tool_use": {

1215 "id": "toolu_01abc",

1216 "name": "AskUserQuestion",

1217 "input": { "questions": [{ "question": "Which framework?", "header": "Framework", "options": [{"label": "React"}, {"label": "Vue"}], "multiSelect": false }] }

1218 }

1219}

1220```

1221 

1222시간 초과 또는 재시도 제한이 없습니다. 세션은 재개할 때까지 디스크에 유지됩니다. 재개할 때 답변이 준비되지 않으면 hook이 `"defer"`를 다시 반환할 수 있고 프로세스는 동일한 방식으로 종료됩니다. 호출 프로세스는 결국 `"allow"` 또는 `"deny"`를 반환하여 루프를 끝낼 시기를 제어합니다.

1223 

1224`"defer"`는 Claude가 한 번에 단일 도구 호출을 만들 때만 작동합니다. Claude가 여러 도구 호출을 한 번에 만들면 `"defer"`는 경고와 함께 무시되고 도구는 일반 권한 흐름을 통해 진행됩니다. 제약이 존재하는 이유는 재개가 하나의 도구만 다시 실행할 수 있기 때문입니다: 다른 도구를 미해결 상태로 두지 않고 배치에서 하나의 호출을 연기할 방법이 없습니다.

1225 

1226연기된 도구가 재개할 때 더 이상 사용 가능하지 않으면 프로세스는 `stop_reason: "tool_deferred_unavailable"`과 `is_error: true`로 종료되고 hook이 발생하기 전에 종료됩니다. 이는 도구를 제공한 MCP 서버가 재개된 세션에 연결되지 않을 때 발생합니다. `deferred_tool_use` 페이로드는 여전히 포함되므로 어느 도구가 누락되었는지 식별할 수 있습니다.

1227 

1228<Warning>

1229 `--resume`은 이전 세션의 권한 모드를 복원하지 않습니다. 도구가 연기되었을 때 활성화된 것과 동일한 `--permission-mode` 플래그를 재개할 때 전달합니다. Claude Code는 모드가 다르면 경고를 기록합니다.

1230</Warning>

1231 

1232### PermissionRequest

1233 

1234사용자에게 권한 대화 상자가 표시될 때 실행됩니다.

1235[PermissionRequest 결정 제어](#permissionrequest-decision-control)를 사용하여 사용자를 대신하여 허용하거나 거부합니다.

1236 

1237도구 이름에서 일치합니다. PreToolUse와 동일한 값입니다.

1238 

1239#### PermissionRequest 입력

1240 

1241PermissionRequest hook은 PreToolUse hook과 같은 `tool_name` 및 `tool_input` 필드를 받지만 `tool_use_id`는 없습니다. 선택적 `permission_suggestions` 배열에는 사용자가 권한 대화 상자에서 일반적으로 볼 수 있는 "항상 허용" 옵션이 포함됩니다. 차이점은 hook이 발생할 때입니다: PermissionRequest hook은 권한 대화 상자가 사용자에게 표시되려고 할 때 실행되고, PreToolUse hook은 권한 상태와 관계없이 도구 실행 전에 실행됩니다.

1242 

1243```json theme={null}

1244{

1245 "session_id": "abc123",

1246 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1247 "cwd": "/Users/...",

1248 "permission_mode": "default",

1249 "hook_event_name": "PermissionRequest",

1250 "tool_name": "Bash",

1251 "tool_input": {

1252 "command": "rm -rf node_modules",

1253 "description": "Remove node_modules directory"

1254 },

1255 "permission_suggestions": [

1256 {

1257 "type": "addRules",

1258 "rules": [{ "toolName": "Bash", "ruleContent": "rm -rf node_modules" }],

1259 "behavior": "allow",

1260 "destination": "localSettings"

1261 }

1262 ]

1263}

1264```

1265 

1266#### PermissionRequest 결정 제어

1267 

1268`PermissionRequest` hook은 권한 요청을 허용하거나 거부할 수 있습니다. 모든 hook에 사용 가능한 [JSON 출력 필드](#json-output) 외에도 hook 스크립트는 이러한 이벤트 특정 필드가 있는 `decision` 객체를 반환할 수 있습니다:

1269 

1270| 필드 | 설명 |

1271| :------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------ |

1272| `behavior` | `"allow"`는 권한을 부여하고, `"deny"`는 거부합니다. [권한 거부 및 요청 규칙](/ko/permissions#manage-permissions)은 여전히 평가되므로 hook이 `"allow"`를 반환해도 일치하는 거부 규칙을 재정의하지 않습니다 |

1273| `updatedInput` | `"allow"`만 해당: 실행 전에 도구의 입력 매개변수를 수정합니다. 전체 입력 객체를 바꾸므로 변경되지 않은 필드를 수정된 필드와 함께 포함합니다. 수정된 입력은 거부 및 요청 규칙에 대해 다시 평가됩니다 |

1274| `updatedPermissions` | `"allow"`만 해당: 적용할 [권한 업데이트 항목](#permission-update-entries) 배열, 예를 들어 허용 규칙 추가 또는 세션 권한 모드 변경 |

1275| `message` | `"deny"`만 해당: Claude에 권한이 거부된 이유를 알립니다 |

1276| `interrupt` | `"deny"`만 해당: `true`인 경우 Claude를 중지합니다 |

1277 

1278```json theme={null}

1279{

1280 "hookSpecificOutput": {

1281 "hookEventName": "PermissionRequest",

1282 "decision": {

1283 "behavior": "allow",

1284 "updatedInput": {

1285 "command": "npm run lint"

1286 }

1287 }

1288 }

1289}

1290```

1291 

1292#### 권한 업데이트 항목

1293 

1294`updatedPermissions` 출력 필드와 [`permission_suggestions` 입력 필드](#permissionrequest-input) 모두 동일한 항목 객체 배열을 사용합니다. 각 항목에는 다른 필드를 결정하는 `type`과 변경이 작성되는 위치를 제어하는 `destination`이 있습니다.

1295 

1296| `type` | 필드 | 효과 |

1297| :------------------ | :--------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------- |

1298| `addRules` | `rules`, `behavior`, `destination` | 권한 규칙을 추가합니다. `rules`는 `{toolName, ruleContent?}` 객체의 배열입니다. 전체 도구와 일치하려면 `ruleContent`를 생략합니다. `behavior`는 `"allow"`, `"deny"` 또는 `"ask"`입니다 |

1299| `replaceRules` | `rules`, `behavior`, `destination` | 주어진 `behavior`의 모든 규칙을 `destination`에서 제공된 `rules`로 바꿉니다 |

1300| `removeRules` | `rules`, `behavior`, `destination` | 주어진 `behavior`의 일치하는 규칙을 제거합니다 |

1301| `setMode` | `mode`, `destination` | 권한 모드를 변경합니다. 유효한 모드는 `default`, `acceptEdits`, `dontAsk`, `bypassPermissions`, `plan`입니다 |

1302| `addDirectories` | `directories`, `destination` | 작업 디렉토리를 추가합니다. `directories`는 경로 문자열의 배열입니다 |

1303| `removeDirectories` | `directories`, `destination` | 작업 디렉토리를 제거합니다 |

1304 

1305<Note>

1306 `setMode`와 `bypassPermissions`는 세션이 이미 bypass 모드를 사용 가능하게 시작된 경우에만 적용됩니다: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions`, 또는 설정의 `permissions.defaultMode: "bypassPermissions"`, 그리고 모드가 [`permissions.disableBypassPermissionsMode`](/ko/permissions#managed-settings)에 의해 비활성화되지 않은 경우입니다. 그렇지 않으면 업데이트는 작동하지 않습니다. `bypassPermissions`는 `destination`과 관계없이 `defaultMode`로 절대 유지되지 않습니다.

1307</Note>

1308 

1309모든 항목의 `destination` 필드는 변경이 메모리에만 유지되는지 또는 설정 파일에 유지되는지를 결정합니다.

1310 

1311| `destination` | 쓰기 대상 |

1312| :---------------- | :---------------------------- |

1313| `session` | 메모리 전용, 세션이 끝나면 삭제됨 |

1314| `localSettings` | `.claude/settings.local.json` |

1315| `projectSettings` | `.claude/settings.json` |

1316| `userSettings` | `~/.claude/settings.json` |

1317 

1318hook은 받은 `permission_suggestions` 중 하나를 자신의 `updatedPermissions` 출력으로 에코할 수 있으며, 이는 사용자가 대화 상자에서 해당 "항상 허용" 옵션을 선택하는 것과 동등합니다.

1319 

1320### PostToolUse

1321 

1322도구가 성공적으로 완료된 직후 실행됩니다.

1323 

1324도구 이름에서 일치합니다. PreToolUse와 동일한 값입니다.

1325 

1326#### PostToolUse 입력

1327 

1328`PostToolUse` hook은 도구가 이미 성공적으로 실행된 후에 발생합니다. 입력에는 도구에 전송된 인수인 `tool_input`과 반환한 결과인 `tool_response`가 모두 포함됩니다. 둘 다의 정확한 스키마는 도구에 따라 다릅니다.

1329 

1330```json theme={null}

1331{

1332 "session_id": "abc123",

1333 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1334 "cwd": "/Users/...",

1335 "permission_mode": "default",

1336 "hook_event_name": "PostToolUse",

1337 "tool_name": "Write",

1338 "tool_input": {

1339 "file_path": "/path/to/file.txt",

1340 "content": "file content"

1341 },

1342 "tool_response": {

1343 "filePath": "/path/to/file.txt",

1344 "success": true

1345 },

1346 "tool_use_id": "toolu_01ABC123...",

1347 "duration_ms": 12

1348}

1349```

1350 

1351| 필드 | 설명 |

1352| :------------ | :-------------------------------------------------------- |

1353| `duration_ms` | 선택적. 도구 실행 시간 (밀리초). 권한 프롬프트 및 PreToolUse hook에 소요된 시간 제외 |

1354 

1355#### PostToolUse 결정 제어

1356 

1357`PostToolUse` hook은 도구 실행 후 Claude에 피드백을 제공할 수 있습니다. 모든 hook에 사용 가능한 [JSON 출력 필드](#json-output) 외에도 hook 스크립트는 이러한 이벤트 특정 필드를 반환할 수 있습니다:

1358 

1359| 필드 | 설명 |

1360| :--------------------- | :------------------------------------------------------------------------------------- |

1361| `decision` | `"block"`은 Claude에 `reason`을 표시합니다. 생략하여 작업을 진행하도록 허용 |

1362| `reason` | `decision`이 `"block"`일 때 Claude에 표시되는 설명 |

1363| `additionalContext` | Claude의 컨텍스트에 도구 결과와 함께 추가되는 문자열. [Claude를 위한 컨텍스트 추가](#add-context-for-claude)를 참조하세요 |

1364| `updatedToolOutput` | 도구의 출력을 제공된 값으로 바꿉니다. 값은 도구의 출력 형태와 일치해야 합니다 |

1365| `updatedMCPToolOutput` | [MCP 도구](#match-mcp-tools)만 해당: 도구의 출력을 제공된 값으로 바꿉니다 |

1366 

1367아래 예제는 `Bash` 호출의 출력을 바꿉니다. 대체 값은 `Bash` 도구의 출력 형태와 일치합니다:

1368 

1369```json theme={null}

1370{

1371 "hookSpecificOutput": {

1372 "hookEventName": "PostToolUse",

1373 "additionalContext": "Additional information for Claude",

1374 "updatedToolOutput": {

1375 "stdout": "[redacted]",

1376 "stderr": "",

1377 "interrupted": false,

1378 "isImage": false

1379 }

1380 }

1381}

1382```

1383 

1384<Warning>

1385 `updatedToolOutput`은 Claude가 보는 것만 변경합니다. 도구는 hook이 발생할 때까지 이미 실행되었으므로 작성된 파일, 실행된 명령 또는 전송된 네트워크 요청은 이미 적용되었습니다. OpenTelemetry 도구 span 및 분석 이벤트와 같은 원격 측정도 hook이 실행되기 전에 원본 출력을 캡처합니다. 도구 호출을 실행 전에 방지하거나 수정하려면 [PreToolUse](#pretooluse) hook을 대신 사용합니다.

1386 

1387 대체 값은 도구의 출력 형태와 일치해야 합니다. 기본 제공 도구는 일반 문자열이 아닌 구조화된 객체를 반환합니다. 예를 들어 `Bash`는 `stdout`, `stderr`, `interrupted`, `isImage` 필드가 있는 객체를 반환합니다. 기본 제공 도구의 경우 도구의 출력 스키마와 일치하지 않는 값은 무시되고 원본 출력이 사용됩니다. MCP 도구 출력은 스키마 검증 없이 통과됩니다. Claude가 필요한 오류 세부 정보를 제거하면 잘못된 가정으로 진행할 수 있습니다.

1388</Warning>

1389 

1390### PostToolUseFailure

1391 

1392도구 실행이 실패할 때 실행됩니다. 이 이벤트는 오류를 throw하거나 실패 결과를 반환하는 도구 호출에 대해 발생합니다. 이를 사용하여 실패를 기록하고, 경고를 보내거나, Claude에 수정 피드백을 제공합니다.

1393 

1394도구 이름에서 일치합니다. PreToolUse와 동일한 값입니다.

1395 

1396#### PostToolUseFailure 입력

1397 

1398PostToolUseFailure hook은 PostToolUse와 동일한 `tool_name` 및 `tool_input` 필드를 받으며, 오류 정보는 최상위 필드로 받습니다:

1399 

1400```json theme={null}

1401{

1402 "session_id": "abc123",

1403 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1404 "cwd": "/Users/...",

1405 "permission_mode": "default",

1406 "hook_event_name": "PostToolUseFailure",

1407 "tool_name": "Bash",

1408 "tool_input": {

1409 "command": "npm test",

1410 "description": "Run test suite"

1411 },

1412 "tool_use_id": "toolu_01ABC123...",

1413 "error": "Command exited with non-zero status code 1",

1414 "is_interrupt": false,

1415 "duration_ms": 4187

1416}

1417```

1418 

1419| 필드 | 설명 |

1420| :------------- | :-------------------------------------------------------- |

1421| `error` | 무엇이 잘못되었는지 설명하는 문자열 |

1422| `is_interrupt` | 선택적 부울로 실패가 사용자 중단으로 인한 것인지 여부를 나타냅니다 |

1423| `duration_ms` | 선택적. 도구 실행 시간 (밀리초). 권한 프롬프트 및 PreToolUse hook에 소요된 시간 제외 |

1424 

1425#### PostToolUseFailure 결정 제어

1426 

1427`PostToolUseFailure` hook은 도구 실패 후 Claude에 컨텍스트를 제공할 수 있습니다. 모든 hook에 사용 가능한 [JSON 출력 필드](#json-output) 외에도 hook 스크립트는 이러한 이벤트 특정 필드를 반환할 수 있습니다:

1428 

1429| 필드 | 설명 |

1430| :------------------ | :---------------------------------------------------------------------------------- |

1431| `additionalContext` | Claude의 컨텍스트에 오류와 함께 추가되는 문자열. [Claude를 위한 컨텍스트 추가](#add-context-for-claude)를 참조하세요 |

1432 

1433```json theme={null}

1434{

1435 "hookSpecificOutput": {

1436 "hookEventName": "PostToolUseFailure",

1437 "additionalContext": "Additional information about the failure for Claude"

1438 }

1439}

1440```

1441 

1442### PostToolBatch

1443 

1444배치의 모든 도구 호출이 해결된 후, Claude Code가 모델에 다음 요청을 보내기 전에 한 번 실행됩니다. `PostToolUse`는 도구당 한 번 발생하므로 Claude가 병렬 도구 호출을 만들 때 동시에 발생합니다. `PostToolBatch`는 전체 배치와 함께 정확히 한 번 발생하므로 단일 도구가 아닌 실행된 도구 집합에 따라 달라지는 컨텍스트를 주입하기에 적합한 위치입니다. 이 이벤트에는 matcher가 없습니다.

1445 

1446#### PostToolBatch 입력

1447 

1448[공통 입력 필드](#common-input-fields) 외에도 PostToolBatch hook은 배치의 모든 도구 호출을 설명하는 배열인 `tool_calls`를 받습니다:

1449 

1450```json theme={null}

1451{

1452 "session_id": "abc123",

1453 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1454 "cwd": "/Users/...",

1455 "permission_mode": "default",

1456 "hook_event_name": "PostToolBatch",

1457 "tool_calls": [

1458 {

1459 "tool_name": "Read",

1460 "tool_input": {"file_path": "/.../ledger/accounts.py"},

1461 "tool_use_id": "toolu_01...",

1462 "tool_response": " 1\tfrom __future__ import annotations\n 2\t..."

1463 },

1464 {

1465 "tool_name": "Read",

1466 "tool_input": {"file_path": "/.../ledger/transactions.py"},

1467 "tool_use_id": "toolu_02...",

1468 "tool_response": " 1\tfrom __future__ import annotations\n 2\t..."

1469 }

1470 ]

1471}

1472```

1473 

1474`tool_response`는 모델이 해당 `tool_result` 블록에서 받는 것과 동일한 내용을 포함합니다. 값은 도구가 내보낸 것과 정확히 같은 직렬화된 문자열 또는 콘텐츠 블록 배열입니다. `Read`의 경우 원본 파일 내용이 아닌 줄 번호가 접두사로 붙은 텍스트를 의미합니다. 응답이 클 수 있으므로 필요한 필드만 구문 분석합니다.

1475 

1476<Note>

1477 `tool_response` 형태는 `PostToolUse`와 다릅니다. `PostToolUse`는 도구의 구조화된 `Output` 객체를 전달합니다 (예: `Write`의 경우 `{filePath: "...", success: true}`). `PostToolBatch`는 모델이 보는 직렬화된 `tool_result` 콘텐츠를 전달합니다.

1478</Note>

1479 

1480#### PostToolBatch 결정 제어

1481 

1482`PostToolBatch` hook은 Claude에 대한 컨텍스트를 주입할 수 있습니다. 모든 hook에 사용 가능한 [JSON 출력 필드](#json-output) 외에도 hook 스크립트는 이러한 이벤트 특정 필드를 반환할 수 있습니다:

1483 

1484| 필드 | 설명 |

1485| :------------------ | :-------------------------------------------------------------------------------------------------------------------------------- |

1486| `additionalContext` | 다음 모델 호출 전에 한 번 주입되는 컨텍스트 문자열. [Claude를 위한 컨텍스트 추가](#add-context-for-claude)를 참조하여 전달 세부 정보, 포함할 내용, 재개된 세션이 과거 값을 처리하는 방식을 확인하세요 |

1487 

1488```json theme={null}

1489{

1490 "hookSpecificOutput": {

1491 "hookEventName": "PostToolBatch",

1492 "additionalContext": "These files are part of the ledger module. Run pytest before marking the task complete."

1493 }

1494}

1495```

1496 

1497`decision: "block"` 또는 `continue: false`를 반환하면 다음 모델 호출 전에 에이전트 루프가 중지됩니다.

1498 

1499### PermissionDenied

1500 

1501[자동 모드](/ko/permission-modes#eliminate-prompts-with-auto-mode) 분류기가 도구 호출을 거부할 때 실행됩니다. 이 hook은 자동 모드에서만 발생합니다: 권한 대화 상자를 수동으로 거부할 때, `PreToolUse` hook이 호출을 차단할 때, 또는 `deny` 규칙이 일치할 때 실행되지 않습니다. 이를 사용하여 분류기 거부를 기록하고, 구성을 조정하거나, 모델이 도구 호출을 재시도할 수 있음을 알립니다.

1502 

1503도구 이름에서 일치합니다. PreToolUse와 동일한 값입니다.

1504 

1505#### PermissionDenied 입력

1506 

1507[공통 입력 필드](#common-input-fields) 외에도 PermissionDenied hook은 `tool_name`, `tool_input`, `tool_use_id`, `reason`을 받습니다.

1508 

1509```json theme={null}

1510{

1511 "session_id": "abc123",

1512 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1513 "cwd": "/Users/...",

1514 "permission_mode": "auto",

1515 "hook_event_name": "PermissionDenied",

1516 "tool_name": "Bash",

1517 "tool_input": {

1518 "command": "rm -rf /tmp/build",

1519 "description": "Clean build directory"

1520 },

1521 "tool_use_id": "toolu_01ABC123...",

1522 "reason": "Auto mode denied: command targets a path outside the project"

1523}

1524```

1525 

1526| 필드 | 설명 |

1527| :------- | :------------------------ |

1528| `reason` | 분류기가 도구 호출을 거부한 이유에 대한 설명 |

1529 

1530#### PermissionDenied 결정 제어

1531 

1532PermissionDenied hook은 모델이 거부된 도구 호출을 재시도할 수 있음을 알릴 수 있습니다. `hookSpecificOutput.retry`를 `true`로 설정한 JSON 객체를 반환합니다:

1533 

1534```json theme={null}

1535{

1536 "hookSpecificOutput": {

1537 "hookEventName": "PermissionDenied",

1538 "retry": true

1539 }

1540}

1541```

1542 

1543`retry`가 `true`일 때 Claude Code는 모델이 도구 호출을 재시도할 수 있음을 알리는 메시지를 대화에 추가합니다. 거부 자체는 역전되지 않습니다. hook이 JSON을 반환하지 않거나 `retry: false`를 반환하면 거부가 유지되고 모델은 원래 거부 메시지를 받습니다.

1544 

1545### Notification

1546 

1547Claude Code가 알림을 보낼 때 실행됩니다. 알림 유형에서 일치합니다: `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog`, `elicitation_complete`, `elicitation_response`. matcher를 생략하여 모든 알림 유형에 대해 hook을 실행합니다.

1548 

1549별도의 matcher를 사용하여 알림 유형에 따라 다른 핸들러를 실행합니다. 이 구성은 Claude가 권한 승인이 필요할 때 권한 특정 경고 스크립트를 트리거하고 Claude가 유휴 상태일 때 다른 알림을 트리거합니다:

1550 

1551```json theme={null}

1552{

1553 "hooks": {

1554 "Notification": [

1555 {

1556 "matcher": "permission_prompt",

1557 "hooks": [

1558 {

1559 "type": "command",

1560 "command": "/path/to/permission-alert.sh"

1561 }

1562 ]

1563 },

1564 {

1565 "matcher": "idle_prompt",

1566 "hooks": [

1567 {

1568 "type": "command",

1569 "command": "/path/to/idle-notification.sh"

1570 }

1571 ]

1572 }

1573 ]

1574 }

1575}

1576```

1577 

1578#### Notification 입력

1579 

1580[공통 입력 필드](#common-input-fields) 외에도 Notification hook은 알림 텍스트가 있는 `message`, 선택적 `title`, 발생한 유형을 나타내는 `notification_type`을 받습니다.

1581 

1582```json theme={null}

1583{

1584 "session_id": "abc123",

1585 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1586 "cwd": "/Users/...",

1587 "hook_event_name": "Notification",

1588 "message": "Claude needs your permission to use Bash",

1589 "title": "Permission needed",

1590 "notification_type": "permission_prompt"

1591}

1592```

1593 

1594Notification hook은 알림을 차단하거나 수정할 수 없습니다. 이들은 외부 서비스로 알림을 전달하는 것과 같은 부작용을 위한 것입니다. 모든 hook에 사용 가능한 [JSON 출력 필드](#json-output)가 적용됩니다.

1595 

1596### SubagentStart

1597 

1598Agent 도구를 통해 Claude Code subagent가 생성될 때 실행됩니다. 에이전트 유형 이름으로 필터링할 matcher를 지원합니다 (Bash, Explore, Plan과 같은 기본 제공 에이전트 또는 `.claude/agents/`의 사용자 정의 에이전트 이름).

1599 

1600#### SubagentStart 입력

1601 

1602[공통 입력 필드](#common-input-fields) 외에도 SubagentStart hook은 subagent의 고유 식별자가 있는 `agent_id`와 에이전트 이름이 있는 `agent_type` (Bash, Explore, Plan과 같은 기본 제공 에이전트 또는 사용자 정의 에이전트 이름)을 받습니다.

1603 

1604```json theme={null}

1605{

1606 "session_id": "abc123",

1607 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1608 "cwd": "/Users/...",

1609 "hook_event_name": "SubagentStart",

1610 "agent_id": "agent-abc123",

1611 "agent_type": "Explore"

1612}

1613```

1614 

1615SubagentStart hook은 subagent 생성을 차단할 수 없지만 subagent에 컨텍스트를 주입할 수 있습니다. 모든 hook에 사용 가능한 [JSON 출력 필드](#json-output) 외에도 다음을 반환할 수 있습니다:

1616 

1617| 필드 | 설명 |

1618| :------------------ | :----------------------------------------------------------------------------------------------------- |

1619| `additionalContext` | subagent의 대화 시작 부분에 추가되는 문자열. 첫 번째 프롬프트 전에 추가됩니다. [Claude를 위한 컨텍스트 추가](#add-context-for-claude)를 참조하세요 |

1620 

1621```json theme={null}

1622{

1623 "hookSpecificOutput": {

1624 "hookEventName": "SubagentStart",

1625 "additionalContext": "Follow security guidelines for this task"

1626 }

1627}

1628```

1629 

1630### SubagentStop

1631 

1632Claude Code subagent가 응답을 마쳤을 때 실행됩니다. 에이전트 유형에서 일치합니다. SubagentStart와 동일한 값입니다.

1633 

1634#### SubagentStop 입력

1635 

1636[공통 입력 필드](#common-input-fields) 외에도 SubagentStop hook은 `stop_hook_active`, `agent_id`, `agent_type`, `agent_transcript_path`, `last_assistant_message`를 받습니다. `agent_type` 필드는 matcher 필터링에 사용되는 값입니다. `transcript_path`는 메인 세션의 트랜스크립트이고 `agent_transcript_path`는 중첩된 `subagents/` 폴더에 저장된 subagent의 자체 트랜스크립트입니다. `last_assistant_message` 필드는 subagent의 최종 응답의 텍스트 내용을 포함하므로 hook은 트랜스크립트 파일을 구문 분석하지 않고도 액세스할 수 있습니다.

1637 

1638```json theme={null}

1639{

1640 "session_id": "abc123",

1641 "transcript_path": "~/.claude/projects/.../abc123.jsonl",

1642 "cwd": "/Users/...",

1643 "permission_mode": "default",

1644 "hook_event_name": "SubagentStop",

1645 "stop_hook_active": false,

1646 "agent_id": "def456",

1647 "agent_type": "Explore",

1648 "agent_transcript_path": "~/.claude/projects/.../abc123/subagents/agent-def456.jsonl",

1649 "last_assistant_message": "Analysis complete. Found 3 potential issues..."

1650}

1651```

1652 

1653SubagentStop hook은 [Stop hook](#stop-decision-control)과 동일한 결정 제어 형식을 사용합니다.

1654 

1655### TaskCreated

1656 

1657작업이 `TaskCreate` 도구를 통해 생성될 때 실행됩니다. 이를 사용하여 명명 규칙을 적용하거나, 작업 설명을 요구하거나, 특정 작업이 생성되는 것을 방지합니다.

1658 

1659`TaskCreated` hook이 코드 2로 종료되면 작업이 생성되지 않고 stderr 메시지가 모델에 피드백으로 피드백됩니다. 팀원을 다시 실행하는 대신 완전히 중지하려면 `{"continue": false, "stopReason": "..."}`이 있는 JSON을 반환합니다. TaskCreated hook은 matcher를 지원하지 않으며 모든 발생에서 발생합니다.

1660 

1661#### TaskCreated 입력

1662 

1663[공통 입력 필드](#common-input-fields) 외에도 TaskCreated hook은 `task_id`, `task_subject`, 선택적으로 `task_description`, `teammate_name`, `team_name`을 받습니다.

1664 

1665```json theme={null}

1666{

1667 "session_id": "abc123",

1668 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1669 "cwd": "/Users/...",

1670 "permission_mode": "default",

1671 "hook_event_name": "TaskCreated",

1672 "task_id": "task-001",

1673 "task_subject": "Implement user authentication",

1674 "task_description": "Add login and signup endpoints",

1675 "teammate_name": "implementer",

1676 "team_name": "my-project"

1677}

1678```

1679 

1680| 필드 | 설명 |

1681| :----------------- | :----------------------- |

1682| `task_id` | 생성되는 작업의 식별자 |

1683| `task_subject` | 작업의 제목 |

1684| `task_description` | 작업의 자세한 설명. 없을 수 있음 |

1685| `teammate_name` | 작업을 생성하는 팀원의 이름. 없을 수 있음 |

1686| `team_name` | 팀의 이름. 없을 수 있음 |

1687 

1688#### TaskCreated 결정 제어

1689 

1690TaskCreated hook은 작업 생성을 제어하는 두 가지 방법을 지원합니다:

1691 

1692* **종료 코드 2**: 작업이 생성되지 않고 stderr 메시지가 모델에 피드백으로 피드백됩니다.

1693* **JSON `{"continue": false, "stopReason": "..."}`**: 팀원을 완전히 중지하여 `Stop` hook 동작과 일치합니다. `stopReason`은 사용자에게 표시됩니다.

1694 

1695이 예제는 제목이 필수 형식을 따르지 않는 작업을 차단합니다:

1696 

1697```bash theme={null}

1698#!/bin/bash

1699INPUT=$(cat)

1700TASK_SUBJECT=$(echo "$INPUT" | jq -r '.task_subject')

1701 

1702if [[ ! "$TASK_SUBJECT" =~ ^\[TICKET-[0-9]+\] ]]; then

1703 echo "Task subject must start with a ticket number, e.g. '[TICKET-123] Add feature'" >&2

1704 exit 2

1705fi

1706 

1707exit 0

1708```

1709 

1710### TaskCompleted

1711 

1712작업이 완료로 표시될 때 실행됩니다. 이는 두 가지 상황에서 발생합니다: 모든 에이전트가 TaskUpdate 도구를 통해 명시적으로 작업을 완료로 표시할 때 또는 [에이전트 팀](/ko/agent-teams) 팀원이 진행 중인 작업으로 자신의 턴을 마칠 때입니다. 이를 사용하여 테스트 통과 또는 lint 검사와 같은 완료 기준을 적용하기 전에 작업을 닫을 수 있습니다.

1713 

1714`TaskCompleted` hook이 코드 2로 종료되면 작업이 완료로 표시되지 않고 stderr 메시지가 모델에 피드백으로 피드백됩니다. 팀원을 다시 실행하는 대신 완전히 중지하려면 `{"continue": false, "stopReason": "..."}`이 있는 JSON을 반환합니다. TaskCompleted hook은 matcher를 지원하지 않으며 모든 발생에서 발생합니다.

1715 

1716#### TaskCompleted 입력

1717 

1718[공통 입력 필드](#common-input-fields) 외에도 TaskCompleted hook은 `task_id`, `task_subject`, 선택적으로 `task_description`, `teammate_name`, `team_name`을 받습니다.

1719 

1720```json theme={null}

1721{

1722 "session_id": "abc123",

1723 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1724 "cwd": "/Users/...",

1725 "permission_mode": "default",

1726 "hook_event_name": "TaskCompleted",

1727 "task_id": "task-001",

1728 "task_subject": "Implement user authentication",

1729 "task_description": "Add login and signup endpoints",

1730 "teammate_name": "implementer",

1731 "team_name": "my-project"

1732}

1733```

1734 

1735| 필드 | 설명 |

1736| :----------------- | :----------------------- |

1737| `task_id` | 완료되는 작업의 식별자 |

1738| `task_subject` | 작업의 제목 |

1739| `task_description` | 작업의 자세한 설명. 없을 수 있음 |

1740| `teammate_name` | 작업을 완료하는 팀원의 이름. 없을 수 있음 |

1741| `team_name` | 팀의 이름. 없을 수 있음 |

1742 

1743#### TaskCompleted 결정 제어

1744 

1745TaskCompleted hook은 작업 완료를 제어하는 두 가지 방법을 지원합니다:

1746 

1747* **종료 코드 2**: 작업이 완료로 표시되지 않고 stderr 메시지가 모델에 피드백으로 피드백됩니다.

1748* **JSON `{"continue": false, "stopReason": "..."}`**: 팀원을 완전히 중지하여 `Stop` hook 동작과 일치합니다. `stopReason`은 사용자에게 표시됩니다.

1749 

1750이 예제는 테스트를 실행하고 실패하면 작업 완료를 차단합니다:

1751 

1752```bash theme={null}

1753#!/bin/bash

1754INPUT=$(cat)

1755TASK_SUBJECT=$(echo "$INPUT" | jq -r '.task_subject')

1756 

1757# 테스트 스위트를 실행합니다

1758if ! npm test 2>&1; then

1759 echo "Tests not passing. Fix failing tests before completing: $TASK_SUBJECT" >&2

1760 exit 2

1761fi

1762 

1763exit 0

1764```

1765 

1766### Stop

1767 

1768메인 Claude Code 에이전트가 응답을 마쳤을 때 실행됩니다. 중지가 사용자 중단으로 인해 발생한 경우 실행되지 않습니다. API 오류는 [StopFailure](#stopfailure) 대신 발생합니다.

1769 

1770#### Stop 입력

1771 

1772[공통 입력 필드](#common-input-fields) 외에도 Stop hook은 `stop_hook_active` 및 `last_assistant_message`를 받습니다. `stop_hook_active` 필드는 Claude Code가 이미 stop hook의 결과로 계속되고 있을 때 `true`입니다. 이 값을 확인하거나 트랜스크립트를 처리하여 Claude Code가 무한정 실행되는 것을 방지합니다. `last_assistant_message` 필드는 Claude의 최종 응답의 텍스트 내용을 포함하므로 hook은 트랜스크립트 파일을 구문 분석하지 않고도 액세스할 수 있습니다.

1773 

1774```json theme={null}

1775{

1776 "session_id": "abc123",

1777 "transcript_path": "~/.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1778 "cwd": "/Users/...",

1779 "permission_mode": "default",

1780 "hook_event_name": "Stop",

1781 "stop_hook_active": true,

1782 "last_assistant_message": "I've completed the refactoring. Here's a summary..."

1783}

1784```

1785 

1786#### Stop 결정 제어

1787 

1788`Stop` 및 `SubagentStop` hook은 Claude가 계속할지 여부를 제어할 수 있습니다. 모든 hook에 사용 가능한 [JSON 출력 필드](#json-output) 외에도 hook 스크립트는 이러한 이벤트 특정 필드를 반환할 수 있습니다:

1789 

1790| 필드 | 설명 |

1791| :--------- | :------------------------------------------------------ |

1792| `decision` | `"block"`은 Claude가 중지되는 것을 방지합니다. 생략하여 Claude가 중지하도록 허용 |

1793| `reason` | Claude가 중지되는 것이 차단될 때 필수입니다. Claude에 계속해야 하는 이유를 알립니다 |

1794 

1795```json theme={null}

1796{

1797 "decision": "block",

1798 "reason": "Must be provided when Claude is blocked from stopping"

1799}

1800```

1801 

1802### StopFailure

1803 

1804[Stop](#stop) 대신 턴이 API 오류로 인해 종료될 때 실행됩니다. 출력과 종료 코드는 무시됩니다. 이를 사용하여 실패를 기록하고, 경고를 보내거나, Claude가 API 오류로 인해 응답을 완료할 수 없을 때 복구 조치를 취합니다.

1805 

1806#### StopFailure 입력

1807 

1808[공통 입력 필드](#common-input-fields) 외에도 StopFailure hook은 `error`, 선택적 `error_details`, 선택적 `last_assistant_message`를 받습니다. `error` 필드는 오류 유형을 식별하며 matcher 필터링에 사용됩니다.

1809 

1810| 필드 | 설명 |

1811| :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |

1812| `error` | 오류 유형: `rate_limit`, `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `invalid_request`, `server_error`, `max_output_tokens` 또는 `unknown` |

1813| `error_details` | 사용 가능한 경우 오류에 대한 추가 세부 정보 |

1814| `last_assistant_message` | 대화에 표시되는 렌더링된 오류 텍스트. `Stop` 및 `SubagentStop`과 달리 이 필드는 Claude의 대화형 출력을 보유하고 `StopFailure`의 경우 `"API Error: Rate limit reached"`와 같은 API 오류 문자열 자체를 포함합니다 |

1815 

1816```json theme={null}

1817{

1818 "session_id": "abc123",

1819 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1820 "cwd": "/Users/...",

1821 "hook_event_name": "StopFailure",

1822 "error": "rate_limit",

1823 "error_details": "429 Too Many Requests",

1824 "last_assistant_message": "API Error: Rate limit reached"

1825}

1826```

1827 

1828StopFailure hook은 결정 제어가 없습니다. 이들은 알림 및 로깅 목적으로만 실행됩니다.

1829 

1830### TeammateIdle

1831 

1832[에이전트 팀](/ko/agent-teams) 팀원이 자신의 턴을 마친 후 유휴 상태가 되려고 할 때 실행됩니다. 이를 사용하여 lint 검사 통과 또는 출력 파일 존재 확인과 같은 팀원이 작업을 중지하기 전에 품질 게이트를 적용합니다.

1833 

1834`TeammateIdle` hook이 코드 2로 종료되면 팀원은 stderr 메시지를 피드백으로 받고 유휴 상태가 되는 대신 계속 작업합니다. 팀원을 다시 실행하는 대신 완전히 중지하려면 `{"continue": false, "stopReason": "..."}`이 있는 JSON을 반환합니다. TeammateIdle hook은 matcher를 지원하지 않으며 모든 발생에서 발생합니다.

1835 

1836#### TeammateIdle 입력

1837 

1838[공통 입력 필드](#common-input-fields) 외에도 TeammateIdle hook은 `teammate_name` 및 `team_name`을 받습니다.

1839 

1840```json theme={null}

1841{

1842 "session_id": "abc123",

1843 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1844 "cwd": "/Users/...",

1845 "permission_mode": "default",

1846 "hook_event_name": "TeammateIdle",

1847 "teammate_name": "researcher",

1848 "team_name": "my-project"

1849}

1850```

1851 

1852| 필드 | 설명 |

1853| :-------------- | :------------------- |

1854| `teammate_name` | 유휴 상태가 되려고 하는 팀원의 이름 |

1855| `team_name` | 팀의 이름 |

1856 

1857#### TeammateIdle 결정 제어

1858 

1859TeammateIdle hook은 팀원 동작을 제어하는 두 가지 방법을 지원합니다:

1860 

1861* **종료 코드 2**: 팀원은 stderr 메시지를 피드백으로 받고 유휴 상태가 되는 대신 계속 작업합니다.

1862* **JSON `{"continue": false, "stopReason": "..."}`**: 팀원을 완전히 중지하여 `Stop` hook 동작과 일치합니다. `stopReason`은 사용자에게 표시됩니다.

1863 

1864이 예제는 팀원이 유휴 상태가 되도록 허용하기 전에 빌드 아티팩트가 존재하는지 확인합니다:

1865 

1866```bash theme={null}

1867#!/bin/bash

1868 

1869if [ ! -f "./dist/output.js" ]; then

1870 echo "Build artifact missing. Run the build before stopping." >&2

1871 exit 2

1872fi

1873 

1874exit 0

1875```

1876 

1877### ConfigChange

1878 

1879세션 중에 구성 파일이 변경될 때 실행됩니다. 이를 사용하여 설정 변경을 감사하고, 보안 정책을 적용하거나, 구성 파일에 대한 무단 수정을 차단합니다.

1880 

1881ConfigChange hook은 설정 파일, 관리형 정책 설정, skill 파일의 변경에 대해 발생합니다. 입력의 `source` 필드는 어떤 유형의 구성이 변경되었는지 알려주고, 선택적 `file_path` 필드는 변경된 파일의 경로를 제공합니다.

1882 

1883matcher는 구성 소스에서 필터링합니다:

1884 

1885| Matcher | 언제 발생하는지 |

1886| :----------------- | :------------------------------- |

1887| `user_settings` | `~/.claude/settings.json` 변경 |

1888| `project_settings` | `.claude/settings.json` 변경 |

1889| `local_settings` | `.claude/settings.local.json` 변경 |

1890| `policy_settings` | 관리형 정책 설정 변경 |

1891| `skills` | `.claude/skills/`의 skill 파일 변경 |

1892 

1893이 예제는 보안 감사를 위해 모든 구성 변경을 기록합니다:

1894 

1895```json theme={null}

1896{

1897 "hooks": {

1898 "ConfigChange": [

1899 {

1900 "hooks": [

1901 {

1902 "type": "command",

1903 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/audit-config-change.sh"

1904 }

1905 ]

1906 }

1907 ]

1908 }

1909}

1910```

1911 

1912#### ConfigChange 입력

1913 

1914[공통 입력 필드](#common-input-fields) 외에도 ConfigChange hook은 `source` 및 선택적으로 `file_path`를 받습니다. `source` 필드는 어떤 구성 유형이 변경되었는지 나타내고 `file_path`는 수정된 특정 파일의 경로를 제공합니다.

1915 

1916```json theme={null}

1917{

1918 "session_id": "abc123",

1919 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1920 "cwd": "/Users/...",

1921 "hook_event_name": "ConfigChange",

1922 "source": "project_settings",

1923 "file_path": "/Users/.../my-project/.claude/settings.json"

1924}

1925```

1926 

1927#### ConfigChange 결정 제어

1928 

1929ConfigChange hook은 구성 변경이 적용되는 것을 차단할 수 있습니다. 종료 코드 2 또는 JSON `decision`을 사용하여 변경을 방지합니다. 차단되면 새 설정이 실행 중인 세션에 적용되지 않습니다.

1930 

1931| 필드 | 설명 |

1932| :--------- | :------------------------------------------- |

1933| `decision` | `"block"`은 구성 변경이 적용되는 것을 방지합니다. 생략하여 변경을 허용 |

1934| `reason` | `decision`이 `"block"`일 때 사용자에게 표시되는 설명 |

1935 

1936```json theme={null}

1937{

1938 "decision": "block",

1939 "reason": "Configuration changes to project settings require admin approval"

1940}

1941```

1942 

1943`policy_settings` 변경은 차단할 수 없습니다. Hook은 여전히 `policy_settings` 소스에 대해 발생하므로 감사 로깅에 사용할 수 있지만 모든 차단 결정은 무시됩니다. 이는 엔터프라이즈 관리 설정이 항상 적용되도록 보장합니다.

1944 

1945### CwdChanged

1946 

1947세션 중에 작업 디렉토리가 변경될 때 실행됩니다. 예를 들어 Claude가 `cd` 명령을 실행할 때입니다. 이를 사용하여 디렉토리 변경에 반응합니다: 환경 변수를 다시 로드하고, 프로젝트 특정 도구 체인을 활성화하거나, 설정 스크립트를 자동으로 실행합니다. [FileChanged](#filechanged)와 쌍을 이루어 [direnv](https://direnv.net/)와 같은 디렉토리별 환경을 관리하는 도구를 사용합니다.

1948 

1949CwdChanged hook은 `CLAUDE_ENV_FILE`에 액세스할 수 있습니다. 해당 파일에 작성된 변수는 [SessionStart hook](#persist-environment-variables)과 마찬가지로 세션의 후속 Bash 명령에 유지됩니다.

1950 

1951CwdChanged는 matcher를 지원하지 않으며 모든 디렉토리 변경에서 발생합니다.

1952 

1953#### CwdChanged 입력

1954 

1955[공통 입력 필드](#common-input-fields) 외에도 CwdChanged hook은 `old_cwd` 및 `new_cwd`를 받습니다.

1956 

1957```json theme={null}

1958{

1959 "session_id": "abc123",

1960 "transcript_path": "/Users/.../.claude/projects/.../transcript.jsonl",

1961 "cwd": "/Users/my-project/src",

1962 "hook_event_name": "CwdChanged",

1963 "old_cwd": "/Users/my-project",

1964 "new_cwd": "/Users/my-project/src"

1965}

1966```

1967 

1968#### CwdChanged 출력

1969 

1970모든 hook에 사용 가능한 [JSON 출력 필드](#json-output) 외에도 CwdChanged hook은 `watchPaths`를 반환하여 [FileChanged](#filechanged)가 감시하는 파일 경로를 동적으로 설정할 수 있습니다:

1971 

1972| 필드 | 설명 |

1973| :----------- | :---------------------------------------------------------------------------------------- |

1974| `watchPaths` | 절대 경로의 배열. 현재 동적 감시 목록을 바꿉니다 (matcher 구성의 경로는 항상 감시됨). 새 디렉토리에 들어갈 때 빈 배열을 반환하는 것이 일반적입니다 |

1975 

1976CwdChanged hook은 결정 제어가 없습니다. 디렉토리 변경을 차단할 수 없습니다.

1977 

1978### FileChanged

1979 

1980감시된 파일이 디스크에서 변경될 때 실행됩니다. 프로젝트 구성 파일이 수정될 때 환경 변수를 다시 로드하는 데 유용합니다.

1981 

1982`matcher`는 이 이벤트에 대해 두 가지 역할을 합니다:

1983 

1984* **감시 목록 구축**: 값은 `|`로 분할되고 각 세그먼트는 작업 디렉토리의 리터럴 파일명으로 등록되므로 `".envrc|.env"`는 정확히 이 두 파일을 감시합니다. 정규식 패턴은 여기서 유용하지 않습니다: `^\.env`와 같은 값은 `^\.env`라는 리터럴 이름의 파일을 감시합니다.

1985* **hook 실행 필터링**: 감시된 파일이 변경되면 동일한 값이 표준 [matcher 규칙](#matcher-patterns)을 사용하여 변경된 파일의 basename에 대해 실행할 hook 그룹을 필터링합니다.

1986 

1987FileChanged hook은 `CLAUDE_ENV_FILE`에 액세스할 수 있습니다. 해당 파일에 작성된 변수는 [SessionStart hook](#persist-environment-variables)과 마찬가지로 세션의 후속 Bash 명령에 유지됩니다.

1988 

1989#### FileChanged 입력

1990 

1991[공통 입력 필드](#common-input-fields) 외에도 FileChanged hook은 `file_path` 및 `event`를 받습니다.

1992 

1993| 필드 | 설명 |

1994| :---------- | :--------------------------------------------------------------- |

1995| `file_path` | 변경된 파일의 절대 경로 |

1996| `event` | 발생한 일: `"change"` (파일 수정), `"add"` (파일 생성) 또는 `"unlink"` (파일 삭제) |

1997 

1998```json theme={null}

1999{

2000 "session_id": "abc123",

2001 "transcript_path": "/Users/.../.claude/projects/.../transcript.jsonl",

2002 "cwd": "/Users/my-project",

2003 "hook_event_name": "FileChanged",

2004 "file_path": "/Users/my-project/.envrc",

2005 "event": "change"

2006}

2007```

2008 

2009#### FileChanged 출력

2010 

2011모든 hook에 사용 가능한 [JSON 출력 필드](#json-output) 외에도 FileChanged hook은 `watchPaths`를 반환하여 감시되는 파일 경로를 동적으로 업데이트할 수 있습니다:

2012 

2013| 필드 | 설명 |

2014| :----------- | :---------------------------------------------------------------------------------------------------- |

2015| `watchPaths` | 절대 경로의 배열. 현재 동적 감시 목록을 바꿉니다 (matcher 구성의 경로는 항상 감시됨). hook 스크립트가 변경된 파일을 기반으로 감시할 추가 파일을 발견할 때 사용합니다 |

2016 

2017FileChanged hook은 결정 제어가 없습니다. 파일 변경을 차단할 수 없습니다.

2018 

2019### WorktreeCreate

2020 

2021`claude --worktree`를 실행하거나 [subagent가 `isolation: "worktree"`를 사용](/ko/sub-agents#choose-the-subagent-scope)할 때 Claude Code는 `git worktree`를 사용하여 격리된 작업 복사본을 생성합니다. WorktreeCreate hook을 구성하면 기본 git 동작을 대체하여 SVN, Perforce 또는 Mercurial과 같은 다른 버전 제어 시스템을 사용할 수 있습니다.

2022 

2023hook은 생성된 worktree 디렉토리의 절대 경로를 반환해야 합니다. Claude Code는 이 경로를 격리된 세션의 작업 디렉토리로 사용합니다. 명령 hook은 stdout에 경로를 인쇄합니다; HTTP hook은 `hookSpecificOutput.worktreePath`를 반환합니다.

2024 

2025이 예제는 SVN 작업 복사본을 생성하고 Claude Code가 사용할 경로를 인쇄합니다. 리포지토리 URL을 자신의 것으로 바꾸세요:

2026 

2027```json theme={null}

2028{

2029 "hooks": {

2030 "WorktreeCreate": [

2031 {

2032 "hooks": [

2033 {

2034 "type": "command",

2035 "command": "bash -c 'NAME=$(jq -r .name); DIR=\"$HOME/.claude/worktrees/$NAME\"; svn checkout https://svn.example.com/repo/trunk \"$DIR\" >&2 && echo \"$DIR\"'"

2036 }

2037 ]

2038 }

2039 ]

2040 }

2041}

2042```

2043 

2044hook은 stdin의 JSON 입력에서 worktree `name`을 읽고, 새 디렉토리로 신선한 복사본을 체크아웃하고, 디렉토리 경로를 인쇄합니다. 마지막 줄의 `echo`는 Claude Code가 worktree 경로로 읽는 것입니다. 다른 모든 출력을 stderr로 리디렉션하여 경로를 방해하지 않도록 합니다.

2045 

2046#### WorktreeCreate 입력

2047 

2048[공통 입력 필드](#common-input-fields) 외에도 WorktreeCreate hook은 `name` 필드를 받습니다. 이는 새 worktree의 slug 식별자이며, 사용자가 지정하거나 자동 생성됩니다 (예: `bold-oak-a3f2`).

2049 

2050```json theme={null}

2051{

2052 "session_id": "abc123",

2053 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2054 "cwd": "/Users/...",

2055 "hook_event_name": "WorktreeCreate",

2056 "name": "feature-auth"

2057}

2058```

2059 

2060#### WorktreeCreate 출력

2061 

2062WorktreeCreate hook은 표준 허용/차단 결정 모델을 사용하지 않습니다. 대신 hook의 성공 또는 실패가 결과를 결정합니다. hook은 생성된 worktree 디렉토리의 절대 경로를 반환해야 합니다:

2063 

2064* **명령 hook** (`type: "command"`): stdout에 경로를 인쇄합니다.

2065* **HTTP hook** (`type: "http"`): 응답 본문에서 `{ "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } }`를 반환합니다.

2066 

2067hook이 실패하거나 경로를 생성하지 않으면 worktree 생성이 오류로 실패합니다.

2068 

2069### WorktreeRemove

2070 

2071[WorktreeCreate](#worktreecreate)의 정리 대응. 이 hook은 worktree가 제거될 때 발생합니다. `--worktree` 세션을 종료하고 제거하도록 선택하거나 `isolation: "worktree"`를 가진 subagent가 완료될 때입니다. git 기반 worktree의 경우 Claude는 `git worktree remove`로 정리를 자동으로 처리합니다. git이 아닌 버전 제어 시스템에 대해 WorktreeCreate hook을 구성한 경우 정리를 처리하려면 WorktreeRemove hook과 쌍을 이루세요. 없으면 worktree 디렉토리가 디스크에 남아 있습니다.

2072 

2073Claude Code는 WorktreeCreate가 stdout에 인쇄한 경로를 hook 입력의 `worktree_path`로 전달합니다. 이 예제는 해당 경로를 읽고 디렉토리를 제거합니다:

2074 

2075```json theme={null}

2076{

2077 "hooks": {

2078 "WorktreeRemove": [

2079 {

2080 "hooks": [

2081 {

2082 "type": "command",

2083 "command": "bash -c 'jq -r .worktree_path | xargs rm -rf'"

2084 }

2085 ]

2086 }

2087 ]

2088 }

2089}

2090```

2091 

2092#### WorktreeRemove 입력

2093 

2094[공통 입력 필드](#common-input-fields) 외에도 WorktreeRemove hook은 제거되는 worktree의 절대 경로인 `worktree_path` 필드를 받습니다.

2095 

2096```json theme={null}

2097{

2098 "session_id": "abc123",

2099 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2100 "cwd": "/Users/...",

2101 "hook_event_name": "WorktreeRemove",

2102 "worktree_path": "/Users/.../my-project/.claude/worktrees/feature-auth"

2103}

2104```

2105 

2106WorktreeRemove hook은 결정 제어가 없습니다. worktree 제거를 차단할 수 없지만 버전 제어 상태 제거 또는 변경 아카이빙과 같은 정리 작업을 수행할 수 있습니다. hook 실패는 디버그 모드에서만 기록됩니다.

2107 

2108### PreCompact

2109 

2110Claude Code가 압축 작업을 실행하려고 하기 전에 실행됩니다.

2111 

2112matcher 값은 압축이 수동으로 또는 자동으로 트리거되었는지 나타냅니다:

2113 

2114| Matcher | 언제 발생하는지 |

2115| :------- | :---------------------- |

2116| `manual` | `/compact` |

2117| `auto` | 컨텍스트 윈도우가 가득 찼을 때 자동 압축 |

2118 

2119종료 코드 2로 압축을 차단합니다. 수동 `/compact`의 경우 stderr 메시지가 사용자에게 표시됩니다. JSON `"decision": "block"`을 사용하여 차단할 수도 있습니다.

2120 

2121자동 압축 차단은 발생 시기에 따라 다른 효과를 가집니다. 컨텍스트 제한 전에 압축이 사전에 트리거된 경우 Claude Code는 이를 건너뛰고 대화가 압축되지 않은 상태로 계속됩니다. 컨텍스트 제한 오류를 복구하기 위해 압축이 트리거된 경우 기본 오류가 표시되고 현재 요청이 실패합니다.

2122 

2123#### PreCompact 입력

2124 

2125[공통 입력 필드](#common-input-fields) 외에도 PreCompact hook은 `trigger` 및 `custom_instructions`를 받습니다. `manual`의 경우 `custom_instructions`는 사용자가 `/compact`에 전달하는 것을 포함합니다. `auto`의 경우 `custom_instructions`는 비어 있습니다.

2126 

2127```json theme={null}

2128{

2129 "session_id": "abc123",

2130 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2131 "cwd": "/Users/...",

2132 "hook_event_name": "PreCompact",

2133 "trigger": "manual",

2134 "custom_instructions": ""

2135}

2136```

2137 

2138### PostCompact

2139 

2140Claude Code가 압축 작업을 완료한 후 실행됩니다. 이 이벤트를 사용하여 새로운 압축된 상태에 반응합니다. 예를 들어 생성된 요약을 기록하거나 외부 상태를 업데이트합니다.

2141 

2142`PreCompact`와 동일한 matcher 값이 적용됩니다:

2143 

2144| Matcher | 언제 발생하는지 |

2145| :------- | :------------------------ |

2146| `manual` | `/compact` 후 |

2147| `auto` | 컨텍스트 윈도우가 가득 찼을 때 자동 압축 후 |

2148 

2149#### PostCompact 입력

2150 

2151[공통 입력 필드](#common-input-fields) 외에도 PostCompact hook은 `trigger` 및 `compact_summary`를 받습니다. `compact_summary` 필드는 압축 작업에서 생성된 대화 요약을 포함합니다.

2152 

2153```json theme={null}

2154{

2155 "session_id": "abc123",

2156 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2157 "cwd": "/Users/...",

2158 "hook_event_name": "PostCompact",

2159 "trigger": "manual",

2160 "compact_summary": "Summary of the compacted conversation..."

2161}

2162```

2163 

2164PostCompact hook은 결정 제어가 없습니다. 압축 결과에 영향을 미칠 수 없지만 후속 작업을 수행할 수 있습니다.

2165 

2166### SessionEnd

2167 

2168Claude Code 세션이 종료될 때 실행됩니다. 정리 작업, 세션 통계 로깅 또는 세션 상태 저장에 유용합니다. 종료 이유별로 필터링할 matcher를 지원합니다.

2169 

2170hook 입력의 `reason` 필드는 세션이 종료된 이유를 나타냅니다:

2171 

2172| 이유 | 설명 |

2173| :---------------------------- | :----------------------- |

2174| `clear` | `/clear` 명령으로 세션 지워짐 |

2175| `resume` | 대화형 `/resume`을 통해 세션 전환됨 |

2176| `logout` | 사용자 로그아웃 |

2177| `prompt_input_exit` | 프롬프트 입력이 표시되는 동안 사용자 종료 |

2178| `bypass_permissions_disabled` | 권한 우회 모드 비활성화됨 |

2179| `other` | 기타 종료 이유 |

2180 

2181#### SessionEnd 입력

2182 

2183[공통 입력 필드](#common-input-fields) 외에도 SessionEnd hook은 세션이 종료된 이유를 나타내는 `reason` 필드를 받습니다. 모든 값은 위의 [이유 표](#sessionend)를 참조하세요.

2184 

2185```json theme={null}

2186{

2187 "session_id": "abc123",

2188 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2189 "cwd": "/Users/...",

2190 "hook_event_name": "SessionEnd",

2191 "reason": "other"

2192}

2193```

2194 

2195SessionEnd hook은 결정 제어가 없습니다. 세션 종료를 차단할 수 없지만 정리 작업을 수행할 수 있습니다.

2196 

2197SessionEnd hook의 기본 시간 초과는 1.5초입니다. 이는 세션 종료, `/clear`, 대화형 `/resume`을 통한 세션 전환 모두에 적용됩니다. hook에 더 많은 시간이 필요하면 hook 구성에서 `timeout`을 설정합니다. 전체 예산은 설정 파일의 가장 높은 hook별 `timeout`으로 자동으로 올라가며, 최대 60초입니다. plugin 제공 hook에 설정된 시간 초과는 예산을 올리지 않습니다. 예산을 명시적으로 재정의하려면 `CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` 환경 변수를 밀리초 단위로 설정합니다.

2198 

2199```bash theme={null}

2200CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS=5000 claude

2201```

2202 

2203### Elicitation

2204 

2205MCP 서버가 작업 중 사용자 입력을 요청할 때 실행됩니다. 기본적으로 Claude Code는 사용자가 응답할 수 있는 대화형 대화 상자를 표시합니다. Hook은 이 요청을 가로채고 프로그래밍 방식으로 응답하여 대화 상자를 완전히 건너뛸 수 있습니다.

2206 

2207matcher 필드는 MCP 서버 이름과 일치합니다.

2208 

2209#### Elicitation 입력

2210 

2211[공통 입력 필드](#common-input-fields) 외에도 Elicitation hook은 `mcp_server_name`, `message`, 선택적으로 `mode`, `url`, `elicitation_id`, `requested_schema` 필드를 받습니다.

2212 

2213form 모드 elicitation (가장 일반적인 경우):

2214 

2215```json theme={null}

2216{

2217 "session_id": "abc123",

2218 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2219 "cwd": "/Users/...",

2220 "permission_mode": "default",

2221 "hook_event_name": "Elicitation",

2222 "mcp_server_name": "my-mcp-server",

2223 "message": "Please provide your credentials",

2224 "mode": "form",

2225 "requested_schema": {

2226 "type": "object",

2227 "properties": {

2228 "username": { "type": "string", "title": "Username" }

2229 }

2230 }

2231}

2232```

2233 

2234URL 모드 elicitation (브라우저 기반 인증):

2235 

2236```json theme={null}

2237{

2238 "session_id": "abc123",

2239 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2240 "cwd": "/Users/...",

2241 "permission_mode": "default",

2242 "hook_event_name": "Elicitation",

2243 "mcp_server_name": "my-mcp-server",

2244 "message": "Please authenticate",

2245 "mode": "url",

2246 "url": "https://auth.example.com/login"

2247}

2248```

2249 

2250#### Elicitation 출력

2251 

2252대화 상자를 표시하지 않고 프로그래밍 방식으로 응답하려면 `hookSpecificOutput`이 있는 JSON 객체를 반환합니다:

2253 

2254```json theme={null}

2255{

2256 "hookSpecificOutput": {

2257 "hookEventName": "Elicitation",

2258 "action": "accept",

2259 "content": {

2260 "username": "alice"

2261 }

2262 }

2263}

2264```

2265 

2266| 필드 | 값 | 설명 |

2267| :-------- | :---------------------------- | :---------------------------------------- |

2268| `action` | `accept`, `decline`, `cancel` | 요청을 수락, 거부 또는 취소할지 여부 |

2269| `content` | 객체 | 제출할 form 필드 값. `action`이 `accept`일 때만 사용됨 |

2270 

2271종료 코드 2는 elicitation을 거부하고 stderr을 사용자에게 표시합니다.

2272 

2273### ElicitationResult

2274 

2275사용자가 MCP elicitation에 응답한 후 실행됩니다. Hook은 응답을 관찰하고, 수정하거나, MCP 서버로 다시 전송되기 전에 차단할 수 있습니다.

2276 

2277matcher 필드는 MCP 서버 이름과 일치합니다.

2278 

2279#### ElicitationResult 입력

2280 

2281[공통 입력 필드](#common-input-fields) 외에도 ElicitationResult hook은 `mcp_server_name`, `action`, 선택적으로 `mode`, `elicitation_id`, `content` 필드를 받습니다.

2282 

2283```json theme={null}

2284{

2285 "session_id": "abc123",

2286 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2287 "cwd": "/Users/...",

2288 "permission_mode": "default",

2289 "hook_event_name": "ElicitationResult",

2290 "mcp_server_name": "my-mcp-server",

2291 "action": "accept",

2292 "content": { "username": "alice" },

2293 "mode": "form",

2294 "elicitation_id": "elicit-123"

2295}

2296```

2297 

2298#### ElicitationResult 출력

2299 

2300사용자의 응답을 재정의하려면 `hookSpecificOutput`이 있는 JSON 객체를 반환합니다:

2301 

2302```json theme={null}

2303{

2304 "hookSpecificOutput": {

2305 "hookEventName": "ElicitationResult",

2306 "action": "decline",

2307 "content": {}

2308 }

2309}

2310```

2311 

2312| 필드 | 값 | 설명 |

2313| :-------- | :---------------------------- | :---------------------------------------------- |

2314| `action` | `accept`, `decline`, `cancel` | 사용자의 작업을 재정의합니다 |

2315| `content` | 객체 | form 필드 값을 재정의합니다. `action`이 `accept`일 때만 의미 있음 |

2316 

2317종료 코드 2는 응답을 차단하여 효과적인 작업을 `decline`으로 변경합니다.

2318 

2319## 프롬프트 기반 hook

2320 

2321명령, HTTP 및 MCP tool hook 외에도 Claude Code는 LLM을 사용하여 작업을 허용할지 차단할지 평가하는 프롬프트 기반 hook (`type: "prompt"`)과 도구 액세스가 있는 에이전트 검증자를 생성하는 에이전트 hook (`type: "agent"`)을 지원합니다. 모든 이벤트가 모든 hook 유형을 지원하는 것은 아닙니다.

2322 

2323다섯 가지 hook 유형 모두 (`command`, `http`, `mcp_tool`, `prompt`, `agent`)를 지원하는 이벤트:

2324 

2325* `PermissionRequest`

2326* `PostToolBatch`

2327* `PostToolUse`

2328* `PostToolUseFailure`

2329* `PreToolUse`

2330* `Stop`

2331* `SubagentStop`

2332* `TaskCompleted`

2333* `TaskCreated`

2334* `UserPromptExpansion`

2335* `UserPromptSubmit`

2336 

2337`command`, `http` 및 `mcp_tool` hook을 지원하지만 `prompt` 또는 `agent`는 지원하지 않는 이벤트:

2338 

2339* `ConfigChange`

2340* `CwdChanged`

2341* `Elicitation`

2342* `ElicitationResult`

2343* `FileChanged`

2344* `InstructionsLoaded`

2345* `Notification`

2346* `PermissionDenied`

2347* `PostCompact`

2348* `PreCompact`

2349* `SessionEnd`

2350* `StopFailure`

2351* `SubagentStart`

2352* `TeammateIdle`

2353* `WorktreeCreate`

2354* `WorktreeRemove`

2355 

2356`SessionStart` 및 `Setup`은 `command` 및 `mcp_tool` hook을 지원합니다. `http`, `prompt` 또는 `agent` hook은 지원하지 않습니다.

2357 

2358### 프롬프트 기반 hook이 어떻게 작동하는지

2359 

2360프롬프트 기반 hook은 Bash 명령을 실행하는 대신:

2361 

23621. hook 입력과 프롬프트를 Claude 모델 (기본값 Haiku)로 전송합니다

23632. LLM은 결정을 포함하는 구조화된 JSON으로 응답합니다

23643. Claude Code는 결정을 자동으로 처리합니다

2365 

2366### 프롬프트 hook 구성

2367 

2368`type`을 `"prompt"`로 설정하고 `command` 대신 `prompt` 문자열을 제공합니다. `$ARGUMENTS` 자리 표시자를 사용하여 hook의 JSON 입력 데이터를 프롬프트 텍스트에 주입합니다. Claude Code는 결합된 프롬프트와 입력을 빠른 Claude 모델로 전송하며, 이는 JSON 결정을 반환합니다.

2369 

2370이 `Stop` hook은 Claude가 완료되기 전에 모든 작업이 완료되었는지 평가하도록 LLM에 요청합니다:

2371 

2372```json theme={null}

2373{

2374 "hooks": {

2375 "Stop": [

2376 {

2377 "hooks": [

2378 {

2379 "type": "prompt",

2380 "prompt": "Evaluate if Claude should stop: $ARGUMENTS. Check if all tasks are complete."

2381 }

2382 ]

2383 }

2384 ]

2385 }

2386}

2387```

2388 

2389| 필드 | 필수 | 설명 |

2390| :-------- | :-- | :--------------------------------------------------------------------------------------------------- |

2391| `type` | 예 | `"prompt"`여야 합니다 |

2392| `prompt` | 예 | LLM으로 전송할 프롬프트 텍스트. hook 입력 JSON에 대한 자리 표시자로 `$ARGUMENTS` 사용. `$ARGUMENTS`가 없으면 입력 JSON이 프롬프트에 추가됩니다 |

2393| `model` | 아니오 | 평가에 사용할 모델. 기본값은 빠른 모델 |

2394| `timeout` | 아니오 | 초 단위 시간 초과. 기본값: 30 |

2395 

2396### 응답 스키마

2397 

2398LLM은 다음을 포함하는 JSON으로 응답해야 합니다:

2399 

2400```json theme={null}

2401{

2402 "ok": true | false,

2403 "reason": "Explanation for the decision"

2404}

2405```

2406 

2407| 필드 | 설명 |

2408| :------- | :-------------------------------- |

2409| `ok` | `true`는 작업을 허용하고 `false`는 방지합니다 |

2410| `reason` | `ok`가 `false`일 때 필수입니다. 차단에 대한 설명 |

2411 

2412`ok: false`에서 발생하는 상황은 이벤트에 따라 다릅니다:

2413 

2414* `Stop` 및 `SubagentStop`: 이유는 Claude의 다음 명령으로 피드백되며 턴이 계속됩니다

2415* `PreToolUse`: tool 호출이 거부되고 이유는 Claude에 tool 오류로 반환되며, 이는 명령 hook의 `permissionDecision: "deny"`와 동일합니다

2416* `PostToolUse`, `PostToolBatch`, `UserPromptSubmit` 및 `UserPromptExpansion`: 턴이 끝나고 이유는 채팅에 경고 줄로 나타나며, 이는 명령 hook에서 `"continue": false`를 반환하는 것과 동일합니다

2417* `PostToolUseFailure`, `TaskCreated` 및 `TaskCompleted`: 이유는 Claude에 tool 오류로 반환되며, `PreToolUse`와 유사합니다

2418* `PermissionRequest`: `ok: false`는 효과가 없습니다. hook에서 승인을 거부하려면 `hookSpecificOutput.decision.behavior: "deny"`를 반환하는 [명령 hook](#command-hook-fields)을 사용합니다

2419 

2420이벤트에 대해 더 세밀한 제어가 필요한 경우 [결정 제어](#decision-control)에 설명된 이벤트별 필드가 있는 [명령 hook](#command-hook-fields)을 사용합니다.

2421 

2422### 예제: 다중 기준 Stop hook

2423 

2424이 `Stop` hook은 Claude가 중지하기 전에 세 가지 조건을 확인하는 자세한 프롬프트를 사용합니다. `"ok"`가 `false`이면 Claude는 제공된 이유를 다음 명령으로 받으며 계속 작업합니다. `SubagentStop` hook은 [subagent](/ko/sub-agents)가 중지해야 하는지 평가하는 동일한 형식을 사용합니다:

2425 

2426```json theme={null}

2427{

2428 "hooks": {

2429 "Stop": [

2430 {

2431 "hooks": [

2432 {

2433 "type": "prompt",

2434 "prompt": "You are evaluating whether Claude should stop working. Context: $ARGUMENTS\n\nAnalyze the conversation and determine if:\n1. All user-requested tasks are complete\n2. Any errors need to be addressed\n3. Follow-up work is needed\n\nRespond with JSON: {\"ok\": true} to allow stopping, or {\"ok\": false, \"reason\": \"your explanation\"} to continue working.",

2435 "timeout": 30

2436 }

2437 ]

2438 }

2439 ]

2440 }

2441}

2442```

2443 

2444## 에이전트 기반 hook

2445 

2446<Warning>

2447 에이전트 hook은 실험적입니다. 동작 및 구성은 향후 릴리스에서 변경될 수 있습니다. 프로덕션 워크플로우의 경우 [명령 hook](#command-hook-fields)을 선호합니다.

2448</Warning>

2449 

2450에이전트 기반 hook (`type: "agent"`)은 프롬프트 기반 hook과 유사하지만 다중 턴 도구 액세스가 있습니다. 단일 LLM 호출 대신 에이전트 hook은 파일을 읽고, 코드를 검색하고, 코드베이스를 검사하여 조건을 확인할 수 있는 subagent를 생성합니다. 에이전트 hook은 프롬프트 기반 hook과 동일한 이벤트를 지원합니다.

2451 

2452### 에이전트 hook이 어떻게 작동하는지

2453 

2454에이전트 hook이 발생할 때:

2455 

24561. Claude Code는 프롬프트와 hook의 JSON 입력을 가진 subagent를 생성합니다

24572. subagent는 Read, Grep, Glob과 같은 도구를 사용하여 조사할 수 있습니다

24583. 최대 50턴 후 subagent는 구조화된 `{ "ok": true/false }` 결정을 반환합니다

24594. Claude Code는 프롬프트 hook과 동일한 방식으로 결정을 처리합니다

2460 

2461에이전트 hook은 검증이 hook 입력 데이터만으로 평가하는 것이 아니라 실제 파일이나 테스트 출력을 검사해야 할 때 유용합니다.

2462 

2463### 에이전트 hook 구성

2464 

2465`type`을 `"agent"`로 설정하고 `prompt` 문자열을 제공합니다. 구성 필드는 [프롬프트 hook](#prompt-hook-configuration)과 동일하지만 더 긴 기본 시간 초과가 있습니다:

2466 

2467| 필드 | 필수 | 설명 |

2468| :-------- | :-- | :---------------------------------------------------------- |

2469| `type` | 예 | `"agent"`여야 합니다 |

2470| `prompt` | 예 | 확인할 내용을 설명하는 프롬프트. hook 입력 JSON에 대한 자리 표시자로 `$ARGUMENTS` 사용 |

2471| `model` | 아니오 | 사용할 모델. 기본값은 빠른 모델 |

2472| `timeout` | 아니오 | 초 단위 시간 초과. 기본값: 60 |

2473 

2474응답 스키마는 프롬프트 hook과 동일합니다: 허용하려면 `{ "ok": true }` 또는 차단하려면 `{ "ok": false, "reason": "..." }`.

2475 

2476이 `Stop` hook은 Claude가 완료되기 전에 모든 단위 테스트가 통과하는지 확인합니다:

2477 

2478```json theme={null}

2479{

2480 "hooks": {

2481 "Stop": [

2482 {

2483 "hooks": [

2484 {

2485 "type": "agent",

2486 "prompt": "Verify that all unit tests pass. Run the test suite and check the results. $ARGUMENTS",

2487 "timeout": 120

2488 }

2489 ]

2490 }

2491 ]

2492 }

2493}

2494```

2495 

2496## 백그라운드에서 hook 실행

2497 

2498기본적으로 hook은 완료될 때까지 Claude의 실행을 차단합니다. 배포, 테스트 스위트 또는 외부 API 호출과 같은 장기 실행 작업의 경우 `"async": true`를 설정하여 Claude가 계속 작업하는 동안 백그라운드에서 hook을 실행합니다. 비동기 hook은 차단하거나 Claude의 동작을 제어할 수 없습니다: `decision`, `permissionDecision`, `continue`와 같은 응답 필드는 효과가 없습니다. 제어했을 작업이 이미 완료되었기 때문입니다.

2499 

2500### 비동기 hook 구성

2501 

2502hook 구성에 `"async": true`를 추가하여 Claude를 차단하지 않고 백그라운드에서 실행합니다. 이 필드는 `type: "command"` hook에서만 사용 가능합니다.

2503 

2504이 hook은 모든 `Write` 도구 호출 후 테스트 스크립트를 실행합니다. Claude는 `run-tests.sh`가 최대 120초 동안 실행되는 동안 즉시 계속 작업합니다. 스크립트가 완료되면 출력이 다음 대화 턴에 전달됩니다:

2505 

2506```json theme={null}

2507{

2508 "hooks": {

2509 "PostToolUse": [

2510 {

2511 "matcher": "Write",

2512 "hooks": [

2513 {

2514 "type": "command",

2515 "command": "/path/to/run-tests.sh",

2516 "async": true,

2517 "timeout": 120

2518 }

2519 ]

2520 }

2521 ]

2522 }

2523}

2524```

2525 

2526`timeout` 필드는 백그라운드 프로세스의 최대 시간을 초 단위로 설정합니다. 지정하지 않으면 비동기 hook은 동기 hook과 동일한 10분 기본값을 사용합니다.

2527 

2528### 비동기 hook이 어떻게 실행되는지

2529 

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

2531 

2532백그라운드 프로세스가 종료된 후 hook이 `systemMessage` 또는 `additionalContext` 필드가 있는 JSON 응답을 생성한 경우 해당 콘텐츠는 다음 대화 턴에서 Claude에 컨텍스트로 전달됩니다.

2533 

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

2535 

2536### 예제: 파일 변경 후 테스트 실행

2537 

2538이 hook은 Claude가 파일을 쓸 때마다 백그라운드에서 테스트 스위트를 시작한 후 테스트가 완료되면 결과를 Claude에 보고합니다. 이 스크립트를 프로젝트의 `.claude/hooks/run-tests-async.sh`에 저장하고 `chmod +x`로 실행 가능하게 만듭니다:

2539 

2540```bash theme={null}

2541#!/bin/bash

2542# run-tests-async.sh

2543 

2544# stdin에서 hook 입력을 읽습니다

2545INPUT=$(cat)

2546FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

2547 

2548# 소스 파일에 대해서만 테스트를 실행합니다

2549if [[ "$FILE_PATH" != *.ts && "$FILE_PATH" != *.js ]]; then

2550 exit 0

2551fi

2552 

2553# 테스트를 실행하고 systemMessage를 통해 결과를 보고합니다

2554RESULT=$(npm test 2>&1)

2555EXIT_CODE=$?

2556 

2557if [ $EXIT_CODE -eq 0 ]; then

2558 echo "{\"systemMessage\": \"Tests passed after editing $FILE_PATH\"}"

2559else

2560 echo "{\"systemMessage\": \"Tests failed after editing $FILE_PATH: $RESULT\"}"

2561fi

2562```

2563 

2564그런 다음 프로젝트 루트의 `.claude/settings.json`에 이 구성을 추가합니다. `async: true` 플래그를 사용하면 Claude가 테스트 실행 중에 계속 작업할 수 있습니다:

2565 

2566```json theme={null}

2567{

2568 "hooks": {

2569 "PostToolUse": [

2570 {

2571 "matcher": "Write|Edit",

2572 "hooks": [

2573 {

2574 "type": "command",

2575 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/run-tests-async.sh",

2576 "async": true,

2577 "timeout": 300

2578 }

2579 ]

2580 }

2581 ]

2582 }

2583}

2584```

2585 

2586### 제한 사항

2587 

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

2589 

2590* `type: "command"` hook만 `async`를 지원합니다. 프롬프트 기반 hook은 비동기적으로 실행될 수 없습니다.

2591* 비동기 hook은 도구 호출을 차단하거나 결정을 반환할 수 없습니다. hook이 완료될 때까지 트리거 작업이 이미 진행되었습니다.

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

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

2594 

2595## 보안 고려 사항

2596 

2597### 면책 조항

2598 

2599명령 hook은 시스템 사용자의 전체 권한으로 실행됩니다.

2600 

2601<Warning>

2602 명령 hook은 전체 사용자 권한으로 셸 명령을 실행합니다. 사용자 계정이 액세스할 수 있는 모든 파일을 수정, 삭제 또는 액세스할 수 있습니다. 구성에 추가하기 전에 모든 hook 명령을 검토하고 테스트하세요.

2603</Warning>

2604 

2605### 보안 모범 사례

2606 

2607hook을 작성할 때 이러한 사례를 염두에 두세요:

2608 

2609* **입력 검증 및 살균**: 입력 데이터를 맹목적으로 신뢰하지 마세요

2610* **항상 셸 변수를 따옴표로 감싸세요**: `$VAR` 대신 `"$VAR"` 사용

2611* **경로 순회 차단**: 파일 경로에서 `..` 확인

2612* **절대 경로 사용**: `"$CLAUDE_PROJECT_DIR"`을 사용하여 프로젝트 루트에 대한 전체 경로를 지정합니다

2613* **민감한 파일 건너뛰기**: `.env`, `.git/`, 키 등을 피합니다

2614 

2615## Windows PowerShell 도구

2616 

2617Windows에서 개별 hook을 PowerShell에서 실행할 수 있습니다. 명령 hook에서 `"shell": "powershell"`을 설정합니다. Hook은 PowerShell을 직접 생성하므로 `CLAUDE_CODE_USE_POWERSHELL_TOOL`이 설정되어 있는지 여부와 관계없이 작동합니다. Claude Code는 `pwsh.exe` (PowerShell 7+)를 자동 감지하고 `powershell.exe` (5.1)로 폴백합니다.

2618 

2619```json theme={null}

2620{

2621 "hooks": {

2622 "PostToolUse": [

2623 {

2624 "matcher": "Write",

2625 "hooks": [

2626 {

2627 "type": "command",

2628 "shell": "powershell",

2629 "command": "Write-Host 'File written'"

2630 }

2631 ]

2632 }

2633 ]

2634 }

2635}

2636```

2637 

2638## Hook 디버그

2639 

2640Hook 실행 세부 정보, 일치한 hook, 종료 코드, 전체 stdout 및 stderr은 디버그 로그 파일에 기록됩니다. `claude --debug-file <path>`로 Claude Code를 시작하여 로그를 알려진 위치에 작성하거나 `claude --debug`를 실행하고 `~/.claude/debug/<session-id>.txt`에서 로그를 읽습니다. `--debug` 플래그는 터미널에 인쇄하지 않습니다.

2641 

2642```text theme={null}

2643[DEBUG] Executing hooks for PostToolUse:Write

2644[DEBUG] Found 1 hook commands to execute

2645[DEBUG] Executing hook command: <Your command> with timeout 600000ms

2646[DEBUG] Hook command completed with status 0: <Your stdout>

2647```

2648 

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

2650 

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

hooks-guide.md +924 −0 created

Details

1> ## Documentation Index

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

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

4 

5# hooks를 사용하여 워크플로우 자동화

6 

7> Claude Code가 파일을 편집하거나 작업을 완료하거나 입력이 필요할 때 자동으로 셸 명령을 실행합니다. 코드 형식 지정, 알림 전송, 명령 검증 및 프로젝트 규칙 적용합니다.

8 

9Hooks는 Claude Code의 라이프사이클의 특정 지점에서 실행되는 사용자 정의 셸 명령입니다. 이들은 Claude Code의 동작에 대한 결정론적 제어를 제공하여 LLM이 실행하도록 선택하는 것에 의존하기보다는 특정 작업이 항상 발생하도록 보장합니다. Hooks를 사용하여 프로젝트 규칙을 적용하고, 반복적인 작업을 자동화하며, Claude Code를 기존 도구와 통합합니다.

10 

11판단이 필요한 결정의 경우 결정론적 규칙이 아닌 경우, [프롬프트 기반 hooks](#prompt-based-hooks) 또는 [에이전트 기반 hooks](#agent-based-hooks)를 사용할 수도 있습니다. 이들은 Claude 모델을 사용하여 조건을 평가합니다.

12 

13Claude Code를 확장하는 다른 방법은 [skills](/ko/skills)를 참조하여 Claude에 추가 지침과 실행 가능한 명령을 제공하고, [subagents](/ko/sub-agents)를 사용하여 격리된 컨텍스트에서 작업을 실행하며, [plugins](/ko/plugins)를 사용하여 프로젝트 전체에서 공유할 확장을 패키징합니다.

14 

15<Tip>

16 이 가이드는 일반적인 사용 사례와 시작 방법을 다룹니다. 전체 이벤트 스키마, JSON 입출력 형식 및 비동기 hooks 및 MCP 도구 hooks와 같은 고급 기능은 [Hooks 참조](/ko/hooks)를 참조하세요.

17</Tip>

18 

19## 첫 번째 hook 설정

20 

21Hook을 만들려면 [설정 파일](#configure-hook-location)에 `hooks` 블록을 추가합니다. 이 연습은 데스크톱 알림 hook을 만들므로 Claude가 터미널을 보는 대신 입력을 기다릴 때마다 알림을 받습니다.

22 

23<Steps>

24 <Step title="설정에 hook 추가">

25 `~/.claude/settings.json`을 열고 `Notification` hook을 추가합니다. 아래 예제는 macOS용 `osascript`를 사용합니다. Linux 및 Windows 명령은 [Claude가 입력이 필요할 때 알림 받기](#get-notified-when-claude-needs-input)를 참조하세요.

26 

27 ```json theme={null}

28 {

29 "hooks": {

30 "Notification": [

31 {

32 "matcher": "",

33 "hooks": [

34 {

35 "type": "command",

36 "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"

37 }

38 ]

39 }

40 ]

41 }

42 }

43 ```

44 

45 설정 파일에 이미 `hooks` 키가 있으면 전체 객체를 바꾸는 대신 `Notification`을 기존 이벤트 키의 형제로 추가합니다. 각 이벤트 이름은 단일 `hooks` 객체 내의 키입니다:

46 

47 ```json theme={null}

48 {

49 "hooks": {

50 "PostToolUse": [

51 {

52 "matcher": "Edit|Write",

53 "hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write" }]

54 }

55 ],

56 "Notification": [

57 {

58 "matcher": "",

59 "hooks": [{ "type": "command", "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'" }]

60 }

61 ]

62 }

63 }

64 ```

65 

66 CLI에서 원하는 것을 설명하여 Claude에게 hook을 작성하도록 요청할 수도 있습니다.

67 </Step>

68 

69 <Step title="구성 확인">

70 `/hooks`를 입력하여 hooks 브라우저를 엽니다. 구성된 hooks가 있는 각 이벤트 옆에 개수가 있는 사용 가능한 모든 hook 이벤트 목록이 표시됩니다. `Notification`을 선택하여 새 hook이 목록에 나타나는지 확인합니다. Hook을 선택하면 세부 정보가 표시됩니다: 이벤트, matcher, 유형, 소스 파일 및 명령.

71 </Step>

72 

73 <Step title="hook 테스트">

74 `Esc`를 눌러 CLI로 돌아갑니다. Claude에게 권한이 필요한 작업을 수행하도록 요청한 다음 터미널에서 전환합니다. 데스크톱 알림을 받아야 합니다.

75 </Step>

76</Steps>

77 

78<Tip>

79 `/hooks` 메뉴는 읽기 전용입니다. Hooks를 추가, 수정 또는 제거하려면 설정 JSON을 직접 편집하거나 Claude에게 변경을 요청합니다.

80</Tip>

81 

82## 자동화할 수 있는 것

83 

84Hooks를 사용하면 Claude Code의 라이프사이클의 주요 지점에서 코드를 실행할 수 있습니다: 편집 후 파일 형식 지정, 실행 전 명령 차단, Claude가 입력이 필요할 때 알림 전송, 세션 시작 시 컨텍스트 주입 등. 전체 hook 이벤트 목록은 [Hooks 참조](/ko/hooks#hook-lifecycle)를 참조하세요.

85 

86각 예제에는 [설정 파일](#configure-hook-location)에 추가하는 즉시 사용 가능한 구성 블록이 포함되어 있습니다. 가장 일반적인 패턴:

87 

88* [Claude가 입력이 필요할 때 알림 받기](#get-notified-when-claude-needs-input)

89* [편집 후 코드 자동 형식 지정](#auto-format-code-after-edits)

90* [보호된 파일에 대한 편집 차단](#block-edits-to-protected-files)

91* [압축 후 컨텍스트 다시 주입](#re-inject-context-after-compaction)

92* [구성 변경 감사](#audit-configuration-changes)

93* [디렉토리 또는 파일이 변경될 때 환경 다시 로드](#reload-environment-when-directory-or-files-change)

94* [특정 권한 프롬프트 자동 승인](#auto-approve-specific-permission-prompts)

95 

96### Claude가 입력이 필요할 때 알림 받기

97 

98Claude가 작업을 완료하고 입력이 필요할 때마다 데스크톱 알림을 받으므로 터미널을 확인하지 않고 다른 작업으로 전환할 수 있습니다.

99 

100이 hook은 Claude가 입력 또는 권한을 기다릴 때 발생하는 `Notification` 이벤트를 사용합니다. 각 탭은 플랫폼의 기본 알림 명령을 사용합니다. `~/.claude/settings.json`에 추가합니다:

101 

102<Tabs>

103 <Tab title="macOS">

104 ```json theme={null}

105 {

106 "hooks": {

107 "Notification": [

108 {

109 "matcher": "",

110 "hooks": [

111 {

112 "type": "command",

113 "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"

114 }

115 ]

116 }

117 ]

118 }

119 }

120 ```

121 

122 <Accordion title="알림이 나타나지 않으면">

123 `osascript`는 기본 제공 Script Editor 앱을 통해 알림을 라우팅합니다. Script Editor에 알림 권한이 없으면 명령이 자동으로 실패하고 macOS는 권한을 부여하도록 프롬프트하지 않습니다. Terminal에서 이를 한 번 실행하여 Script Editor가 알림 설정에 나타나도록 합니다:

124 

125 ```bash theme={null}

126 osascript -e 'display notification "test"'

127 ```

128 

129 아직 아무것도 나타나지 않습니다. **시스템 설정 > 알림**을 열고 목록에서 **Script Editor**를 찾은 다음 **알림 허용**을 켭니다. 명령을 다시 실행하여 테스트 알림이 나타나는지 확인합니다.

130 </Accordion>

131 </Tab>

132 

133 <Tab title="Linux">

134 ```json theme={null}

135 {

136 "hooks": {

137 "Notification": [

138 {

139 "matcher": "",

140 "hooks": [

141 {

142 "type": "command",

143 "command": "notify-send 'Claude Code' 'Claude Code needs your attention'"

144 }

145 ]

146 }

147 ]

148 }

149 }

150 ```

151 </Tab>

152 

153 <Tab title="Windows (PowerShell)">

154 ```json theme={null}

155 {

156 "hooks": {

157 "Notification": [

158 {

159 "matcher": "",

160 "hooks": [

161 {

162 "type": "command",

163 "command": "powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Claude Code needs your attention', 'Claude Code')\""

164 }

165 ]

166 }

167 ]

168 }

169 }

170 ```

171 </Tab>

172</Tabs>

173 

174빈 `matcher`는 모든 알림 유형에서 발생합니다. 특정 이벤트에서만 발생하도록 하려면 다음 값 중 하나로 설정합니다:

175 

176| Matcher | 발생 시점 |

177| :--------------------- | :-------------------------- |

178| `permission_prompt` | Claude가 도구 사용을 승인하도록 요청할 때 |

179| `idle_prompt` | Claude가 완료되고 다음 프롬프트를 기다릴 때 |

180| `auth_success` | 인증이 완료될 때 |

181| `elicitation_dialog` | MCP 서버가 유도 양식을 열 때 |

182| `elicitation_complete` | MCP 유도 양식이 제출되거나 닫힐 때 |

183| `elicitation_response` | MCP 유도 응답이 서버로 다시 전송될 때 |

184 

185`/hooks`를 입력하고 `Notification`을 선택하여 hook이 등록되었는지 확인합니다. 전체 이벤트 스키마는 [Notification 참조](/ko/hooks#notification)를 참조하세요.

186 

187### 편집 후 코드 자동 형식 지정

188 

189Claude가 편집하는 모든 파일에서 [Prettier](https://prettier.io/)를 자동으로 실행하여 수동 개입 없이 형식이 일관되게 유지되도록 합니다.

190 

191이 hook은 `PostToolUse` 이벤트를 `Edit|Write` matcher와 함께 사용하므로 파일 편집 도구 후에만 실행됩니다. 명령은 [`jq`](https://jqlang.github.io/jq/)를 사용하여 편집된 파일 경로를 추출하고 Prettier에 전달합니다. 프로젝트 루트의 `.claude/settings.json`에 추가합니다:

192 

193```json theme={null}

194{

195 "hooks": {

196 "PostToolUse": [

197 {

198 "matcher": "Edit|Write",

199 "hooks": [

200 {

201 "type": "command",

202 "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"

203 }

204 ]

205 }

206 ]

207 }

208}

209```

210 

211<Note>

212 이 페이지의 Bash 예제는 JSON 구문 분석을 위해 `jq`를 사용합니다. `brew install jq` (macOS), `apt-get install jq` (Debian/Ubuntu)로 설치하거나 [`jq` 다운로드](https://jqlang.github.io/jq/download/)를 참조하세요.

213</Note>

214 

215### 보호된 파일에 대한 편집 차단

216 

217Claude가 `.env`, `package-lock.json` 또는 `.git/`의 모든 항목과 같은 민감한 파일을 수정하지 못하도록 방지합니다. Claude는 편집이 차단된 이유를 설명하는 피드백을 받으므로 접근 방식을 조정할 수 있습니다.

218 

219이 예제는 hook이 호출하는 별도의 스크립트 파일을 사용합니다. 스크립트는 대상 파일 경로를 보호된 패턴 목록과 비교하고 종료 코드 2로 종료하여 편집을 차단합니다.

220 

221<Steps>

222 <Step title="hook 스크립트 만들기">

223 이를 `.claude/hooks/protect-files.sh`에 저장합니다:

224 

225 ```bash theme={null}

226 #!/bin/bash

227 # protect-files.sh

228 

229 INPUT=$(cat)

230 FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

231 

232 PROTECTED_PATTERNS=(".env" "package-lock.json" ".git/")

233 

234 for pattern in "${PROTECTED_PATTERNS[@]}"; do

235 if [[ "$FILE_PATH" == *"$pattern"* ]]; then

236 echo "Blocked: $FILE_PATH matches protected pattern '$pattern'" >&2

237 exit 2

238 fi

239 done

240 

241 exit 0

242 ```

243 </Step>

244 

245 <Step title="스크립트를 실행 가능하게 만들기 (macOS/Linux)">

246 Hook 스크립트는 Claude Code가 실행하려면 실행 가능해야 합니다:

247 

248 ```bash theme={null}

249 chmod +x .claude/hooks/protect-files.sh

250 ```

251 </Step>

252 

253 <Step title="hook 등록">

254 모든 `Edit` 또는 `Write` 도구 호출 전에 스크립트를 실행하는 `PreToolUse` hook을 `.claude/settings.json`에 추가합니다:

255 

256 ```json theme={null}

257 {

258 "hooks": {

259 "PreToolUse": [

260 {

261 "matcher": "Edit|Write",

262 "hooks": [

263 {

264 "type": "command",

265 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/protect-files.sh"

266 }

267 ]

268 }

269 ]

270 }

271 }

272 ```

273 </Step>

274</Steps>

275 

276### 압축 후 컨텍스트 다시 주입

277 

278Claude의 컨텍스트 윈도우가 가득 차면 압축은 대화를 요약하여 공간을 확보합니다. 이는 중요한 세부 정보를 잃을 수 있습니다. `compact` matcher와 함께 `SessionStart` hook을 사용하여 모든 압축 후 중요한 컨텍스트를 다시 주입합니다.

279 

280명령이 stdout에 쓰는 모든 텍스트는 Claude의 컨텍스트에 추가됩니다. 이 예제는 Claude에게 프로젝트 규칙과 최근 작업을 상기시킵니다. 프로젝트 루트의 `.claude/settings.json`에 추가합니다:

281 

282```json theme={null}

283{

284 "hooks": {

285 "SessionStart": [

286 {

287 "matcher": "compact",

288 "hooks": [

289 {

290 "type": "command",

291 "command": "echo 'Reminder: use Bun, not npm. Run bun test before committing. Current sprint: auth refactor.'"

292 }

293 ]

294 }

295 ]

296 }

297}

298```

299 

300`echo`를 `git log --oneline -5`와 같이 동적 출력을 생성하는 모든 명령으로 바꿀 수 있습니다. 모든 세션 시작 시 컨텍스트를 주입하려면 [CLAUDE.md](/ko/memory) 사용을 고려하세요. 환경 변수는 [`CLAUDE_ENV_FILE`](/ko/hooks#persist-environment-variables)을 참조하세요.

301 

302### 구성 변경 감사

303 

304세션 중에 설정 또는 skills 파일이 변경될 때를 추적합니다. `ConfigChange` 이벤트는 외부 프로세스 또는 편집기가 구성 파일을 수정할 때 발생하므로 규정 준수를 위해 변경 사항을 기록하거나 무단 수정을 차단할 수 있습니다.

305 

306이 예제는 각 변경을 감사 로그에 추가합니다. `~/.claude/settings.json`에 추가합니다:

307 

308```json theme={null}

309{

310 "hooks": {

311 "ConfigChange": [

312 {

313 "matcher": "",

314 "hooks": [

315 {

316 "type": "command",

317 "command": "jq -c '{timestamp: now | todate, source: .source, file: .file_path}' >> ~/claude-config-audit.log"

318 }

319 ]

320 }

321 ]

322 }

323}

324```

325 

326Matcher는 구성 유형으로 필터링합니다: `user_settings`, `project_settings`, `local_settings`, `policy_settings` 또는 `skills`. 변경이 적용되지 않도록 차단하려면 종료 코드 2로 종료하거나 `{"decision": "block"}`을 반환합니다. 전체 입력 스키마는 [ConfigChange 참조](/ko/hooks#configchange)를 참조하세요.

327 

328### 디렉토리 또는 파일이 변경될 때 환경 다시 로드

329 

330일부 프로젝트는 어느 디렉토리에 있는지에 따라 다른 환경 변수를 설정합니다. [direnv](https://direnv.net/)와 같은 도구는 셸에서 자동으로 이를 수행하지만 Claude의 Bash 도구는 자체적으로 해당 변경 사항을 선택하지 않습니다.

331 

332`SessionStart` hook을 `CwdChanged` hook과 쌍으로 사용하면 이를 해결합니다. `SessionStart`는 시작한 디렉토리에 대한 변수를 로드하고 `CwdChanged`는 Claude가 디렉토리를 변경할 때마다 이를 다시 로드합니다. 둘 다 `CLAUDE_ENV_FILE`에 쓰며, Claude Code는 각 Bash 명령 전에 이를 스크립트 프리앰블로 실행합니다. `~/.claude/settings.json`에 추가합니다:

333 

334```json theme={null}

335{

336 "hooks": {

337 "SessionStart": [

338 {

339 "hooks": [

340 {

341 "type": "command",

342 "command": "direnv export bash > \"$CLAUDE_ENV_FILE\""

343 }

344 ]

345 }

346 ],

347 "CwdChanged": [

348 {

349 "hooks": [

350 {

351 "type": "command",

352 "command": "direnv export bash > \"$CLAUDE_ENV_FILE\""

353 }

354 ]

355 }

356 ]

357 }

358}

359```

360 

361`direnv allow`를 `.envrc`가 있는 각 디렉토리에서 한 번 실행하여 direnv가 이를 로드할 수 있도록 허용합니다. direnv 대신 devbox 또는 nix를 사용하는 경우 `direnv export bash` 대신 `devbox shellenv` 또는 `devbox global shellenv`를 사용하면 동일한 패턴이 작동합니다.

362 

363모든 디렉토리 변경이 아닌 특정 파일에 반응하려면 `FileChanged`를 `matcher`와 함께 사용하여 감시할 파일 이름을 나열합니다 (파이프로 구분). 감시 목록을 구성하기 위해 이 값은 정규식으로 평가되지 않고 리터럴 파일 이름으로 분할됩니다. [FileChanged](/ko/hooks#filechanged)를 참조하여 파일이 변경될 때 어떤 hook 그룹이 실행되는지 필터링하는 방법도 확인하세요. 이 예제는 작업 디렉토리에서 `.envrc` 및 `.env`를 감시합니다:

364 

365```json theme={null}

366{

367 "hooks": {

368 "FileChanged": [

369 {

370 "matcher": ".envrc|.env",

371 "hooks": [

372 {

373 "type": "command",

374 "command": "direnv export bash > \"$CLAUDE_ENV_FILE\""

375 }

376 ]

377 }

378 ]

379 }

380}

381```

382 

383입력 스키마, `watchPaths` 출력 및 `CLAUDE_ENV_FILE` 세부 정보는 [CwdChanged](/ko/hooks#cwdchanged) 및 [FileChanged](/ko/hooks#filechanged) 참조 항목을 참조하세요.

384 

385### 특정 권한 프롬프트 자동 승인

386 

387항상 허용하는 도구 호출에 대한 승인 대화를 건너뜁니다. 이 예제는 `ExitPlanMode`를 자동 승인합니다. 이는 Claude가 계획 제시를 완료하고 진행을 요청할 때 호출하는 도구이므로 계획이 준비될 때마다 프롬프트가 표시되지 않습니다.

388 

389위의 종료 코드 예제와 달리 자동 승인을 위해서는 hook이 JSON 결정을 stdout에 작성해야 합니다. `PermissionRequest` hook은 Claude Code가 권한 대화를 표시하려고 할 때 발생하며 `"behavior": "allow"`를 반환하면 사용자 대신 답변합니다.

390 

391Matcher는 hook을 `ExitPlanMode`로만 범위를 지정하므로 다른 프롬프트는 영향을 받지 않습니다. `~/.claude/settings.json`에 추가합니다:

392 

393```json theme={null}

394{

395 "hooks": {

396 "PermissionRequest": [

397 {

398 "matcher": "ExitPlanMode",

399 "hooks": [

400 {

401 "type": "command",

402 "command": "echo '{\"hookSpecificOutput\": {\"hookEventName\": \"PermissionRequest\", \"decision\": {\"behavior\": \"allow\"}}}'"

403 }

404 ]

405 }

406 ]

407 }

408}

409```

410 

411Hook이 승인하면 Claude Code는 계획 모드를 종료하고 계획 모드에 들어가기 전에 활성화되었던 권한 모드를 복원합니다. 트랜스크립트는 대화가 나타났을 위치에 "Allowed by PermissionRequest hook"을 표시합니다. Hook 경로는 항상 현재 대화를 유지합니다: 대화가 할 수 있는 방식으로 컨텍스트를 지우고 새로운 구현 세션을 시작할 수 없습니다.

412 

413대신 특정 권한 모드를 설정하려면 hook의 출력에 `setMode` 항목이 있는 `updatedPermissions` 배열이 포함될 수 있습니다. `mode` 값은 `default`, `acceptEdits` 또는 `bypassPermissions`과 같은 모든 권한 모드이며 `destination: "session"`은 현재 세션에만 적용합니다.

414 

415<Note>

416 `bypassPermissions`은 세션이 이미 bypass 모드로 시작된 경우에만 적용됩니다: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions` 또는 설정의 `permissions.defaultMode: "bypassPermissions"`이며 [`permissions.disableBypassPermissionsMode`](/ko/permissions#managed-settings)로 비활성화되지 않습니다. 이는 `defaultMode`로 절대 지속되지 않습니다.

417</Note>

418 

419세션을 `acceptEdits`로 전환하려면 hook이 이 JSON을 stdout에 작성합니다:

420 

421```json theme={null}

422{

423 "hookSpecificOutput": {

424 "hookEventName": "PermissionRequest",

425 "decision": {

426 "behavior": "allow",

427 "updatedPermissions": [

428 { "type": "setMode", "mode": "acceptEdits", "destination": "session" }

429 ]

430 }

431 }

432}

433```

434 

435Matcher를 가능한 한 좁게 유지합니다. `.*`와 일치하거나 matcher를 비워두면 파일 쓰기 및 셸 명령을 포함한 모든 권한 프롬프트를 자동 승인합니다. 전체 결정 필드 집합은 [PermissionRequest 참조](/ko/hooks#permissionrequest-decision-control)를 참조하세요.

436 

437## Hooks 작동 방식

438 

439Hook 이벤트는 Claude Code의 라이프사이클의 특정 지점에서 발생합니다. 이벤트가 발생하면 일치하는 모든 hooks가 병렬로 실행되고 동일한 hook 명령은 자동으로 중복 제거됩니다. 아래 표는 각 이벤트와 발생 시기를 보여줍니다:

440 

441| Event | When it fires |

442| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

443| `SessionStart` | When a session begins or resumes |

444| `Setup` | When you start Claude Code with `--init-only`, or with `--init` or `--maintenance` in `-p` mode. For one-time preparation in CI or scripts |

445| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |

446| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |

447| `PreToolUse` | Before a tool call executes. Can block it |

448| `PermissionRequest` | When a permission dialog appears |

449| `PermissionDenied` | When a tool call is denied by the auto mode classifier. Return `{retry: true}` to tell the model it may retry the denied tool call |

450| `PostToolUse` | After a tool call succeeds |

451| `PostToolUseFailure` | After a tool call fails |

452| `PostToolBatch` | After a full batch of parallel tool calls resolves, before the next model call |

453| `Notification` | When Claude Code sends a notification |

454| `SubagentStart` | When a subagent is spawned |

455| `SubagentStop` | When a subagent finishes |

456| `TaskCreated` | When a task is being created via `TaskCreate` |

457| `TaskCompleted` | When a task is being marked as completed |

458| `Stop` | When Claude finishes responding |

459| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |

460| `TeammateIdle` | When an [agent team](/en/agent-teams) teammate is about to go idle |

461| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |

462| `ConfigChange` | When a configuration file changes during a session |

463| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |

464| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |

465| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |

466| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |

467| `PreCompact` | Before context compaction |

468| `PostCompact` | After context compaction completes |

469| `Elicitation` | When an MCP server requests user input during a tool call |

470| `ElicitationResult` | After a user responds to an MCP elicitation, before the response is sent back to the server |

471| `SessionEnd` | When a session terminates |

472 

473여러 hooks가 일치하면 각각 자신의 결과를 반환합니다. 결정의 경우 Claude Code는 가장 제한적인 답변을 선택합니다. `PreToolUse` hook이 `deny`를 반환하면 다른 것이 반환하는 것과 관계없이 도구 호출이 취소됩니다. 하나의 hook이 `ask`를 반환하면 나머지가 `allow`를 반환하더라도 권한 프롬프트가 강제됩니다. `additionalContext`의 텍스트는 모든 hook에서 유지되고 Claude와 함께 전달됩니다.

474 

475각 hook에는 실행 방식을 결정하는 `type`이 있습니다. 대부분의 hooks는 `"type": "command"`를 사용하여 셸 명령을 실행합니다. 네 가지 다른 유형을 사용할 수 있습니다:

476 

477* `"type": "http"`: 이벤트 데이터를 URL에 POST합니다. [HTTP hooks](#http-hooks)를 참조하세요.

478* `"type": "mcp_tool"`: 이미 연결된 MCP 서버에서 도구를 호출합니다. [MCP tool hooks](/ko/hooks#mcp-tool-hook-fields)를 참조하세요.

479* `"type": "prompt"`: 단일 턴 LLM 평가. [프롬프트 기반 hooks](#prompt-based-hooks)를 참조하세요.

480* `"type": "agent"`: 도구 액세스를 통한 다중 턴 검증. 에이전트 hooks는 실험적이며 변경될 수 있습니다. [에이전트 기반 hooks](#agent-based-hooks)를 참조하세요.

481 

482### 입력 읽기 및 출력 반환

483 

484Hooks는 stdin, stdout, stderr 및 종료 코드를 통해 Claude Code와 통신합니다. 이벤트가 발생하면 Claude Code는 이벤트별 데이터를 JSON으로 스크립트의 stdin에 전달합니다. 스크립트는 해당 데이터를 읽고 작업을 수행한 다음 종료 코드를 통해 Claude Code에 다음 작업을 알립니다.

485 

486#### Hook 입력

487 

488모든 이벤트에는 `session_id` 및 `cwd`와 같은 공통 필드가 포함되지만 각 이벤트 유형은 다른 데이터를 추가합니다. 예를 들어 Claude가 Bash 명령을 실행할 때 `PreToolUse` hook은 stdin에서 다음과 같은 것을 받습니다:

489 

490```json theme={null}

491{

492 "session_id": "abc123", // 이 세션의 고유 ID

493 "cwd": "/Users/sarah/myproject", // 이벤트가 발생했을 때의 작업 디렉토리

494 "hook_event_name": "PreToolUse", // 이 hook을 트리거한 이벤트

495 "tool_name": "Bash", // Claude가 사용하려는 도구

496 "tool_input": { // Claude가 도구에 전달한 인수

497 "command": "npm test" // Bash의 경우 이것은 셸 명령입니다

498 }

499}

500```

501 

502스크립트는 해당 JSON을 구문 분석하고 해당 필드에 대해 작동할 수 있습니다. `UserPromptSubmit` hooks는 `prompt` 텍스트를 대신 받고, `SessionStart` hooks는 `source` (startup, resume, clear, compact)를 받으며, 등등입니다. 공유 필드는 참조의 [공통 입력 필드](/ko/hooks#common-input-fields)를 참조하고 각 이벤트별 섹션에서 이벤트별 스키마를 참조하세요.

503 

504#### Hook 출력

505 

506스크립트는 stdout 또는 stderr에 쓰고 특정 코드로 종료하여 Claude Code에 다음 작업을 알립니다. 예를 들어 명령을 차단하려는 `PreToolUse` hook:

507 

508```bash theme={null}

509#!/bin/bash

510INPUT=$(cat)

511COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command')

512 

513if echo "$COMMAND" | grep -q "drop table"; then

514 echo "Blocked: dropping tables is not allowed" >&2 # stderr는 Claude의 피드백이 됩니다

515 exit 2 # exit 2 = 작업 차단

516fi

517 

518exit 0 # exit 0 = 진행 허용

519```

520 

521종료 코드는 다음에 일어날 일을 결정합니다:

522 

523* **Exit 0**: 작업이 진행됩니다. `UserPromptSubmit`, `UserPromptExpansion` 및 `SessionStart` hooks의 경우 stdout에 쓰는 모든 것이 Claude의 컨텍스트에 추가됩니다.

524* **Exit 2**: 작업이 차단됩니다. stderr에 이유를 쓰면 Claude가 피드백으로 받아 조정할 수 있습니다. 일부 이벤트는 차단될 수 없습니다: `SessionStart`, `Setup`, `Notification` 및 기타의 경우 exit 2는 stderr를 사용자에게 표시하고 실행이 계속됩니다. 이벤트별 전체 목록은 [이벤트별 exit 코드 2 동작](/ko/hooks#exit-code-2-behavior-per-event)을 참조하세요.

525* **다른 종료 코드**: 작업이 진행됩니다. 트랜스크립트는 `<hook name> hook error` 공지를 표시한 후 stderr의 첫 번째 줄을 표시합니다. 전체 stderr는 [디버그 로그](/ko/hooks#debug-hooks)로 이동합니다.

526 

527#### 구조화된 JSON 출력

528 

529종료 코드는 두 가지 옵션을 제공합니다: 허용 또는 차단. 더 많은 제어를 위해 exit 0을 하고 stdout에 JSON 객체를 인쇄합니다.

530 

531<Note>

532 Exit 2를 사용하여 stderr 메시지로 차단하거나 exit 0을 사용하여 구조화된 제어를 위해 JSON을 사용합니다. 혼합하지 마세요: Claude Code는 exit 2일 때 JSON을 무시합니다.

533</Note>

534 

535예를 들어 `PreToolUse` hook은 도구 호출을 거부하고 이유를 알리거나 사용자 승인을 위해 에스컬레이션할 수 있습니다:

536 

537```json theme={null}

538{

539 "hookSpecificOutput": {

540 "hookEventName": "PreToolUse",

541 "permissionDecision": "deny",

542 "permissionDecisionReason": "Use rg instead of grep for better performance"

543 }

544}

545```

546 

547`"deny"`를 사용하면 Claude Code는 도구 호출을 취소하고 `permissionDecisionReason`을 Claude에게 피드백으로 전달합니다. 이 `permissionDecision` 값은 `PreToolUse`에만 해당합니다:

548 

549* `"allow"`: 대화형 권한 프롬프트를 건너뜁니다. 거부 및 요청 규칙을 포함한 엔터프라이즈 관리형 거부 목록은 여전히 적용됩니다

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

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

552 

553네 번째 값인 `"defer"`는 `-p` 플래그가 있는 [비대화형 모드](/ko/headless)에서 사용 가능합니다. 도구 호출을 보존하여 프로세스를 종료하므로 Agent SDK 래퍼가 입력을 수집하고 재개할 수 있습니다. 참조의 [나중에 도구 호출 연기](/ko/hooks#defer-a-tool-call-for-later)를 참조하세요.

554 

555`"allow"`를 반환하면 대화형 프롬프트를 건너뜁니다. 하지만 [권한 규칙](/ko/permissions#manage-permissions)은 적용되지 않습니다. 거부 규칙이 도구 호출과 일치하면 hook이 `"allow"`를 반환하더라도 호출이 차단됩니다. 요청 규칙이 일치하면 사용자가 여전히 프롬프트됩니다. 이는 [관리형 설정](/ko/settings#settings-files)을 포함한 모든 설정 범위의 거부 규칙이 hook 승인보다 항상 우선한다는 의미입니다.

556 

557다른 이벤트는 다른 결정 패턴을 사용합니다. 예를 들어 `PostToolUse` 및 `Stop` hooks는 최상위 `decision: "block"` 필드를 사용하고 `PermissionRequest`는 `hookSpecificOutput.decision.behavior`를 사용합니다. 이벤트별 전체 분석은 참조의 [요약 표](/ko/hooks#decision-control)를 참조하세요.

558 

559`UserPromptSubmit` hooks의 경우 `additionalContext`를 대신 사용하여 Claude의 컨텍스트에 텍스트를 주입합니다. 프롬프트 기반 hooks (`type: "prompt"`)는 출력을 다르게 처리합니다: [프롬프트 기반 hooks](#prompt-based-hooks)를 참조하세요.

560 

561### Matchers로 hooks 필터링

562 

563Matcher가 없으면 hook은 이벤트의 모든 발생에서 발생합니다. Matchers를 사용하면 범위를 좁힐 수 있습니다. 예를 들어 모든 도구 호출 후가 아닌 파일 편집 후에만 포매터를 실행하려면 `PostToolUse` hook에 matcher를 추가합니다:

564 

565```json theme={null}

566{

567 "hooks": {

568 "PostToolUse": [

569 {

570 "matcher": "Edit|Write",

571 "hooks": [

572 { "type": "command", "command": "prettier --write ..." }

573 ]

574 }

575 ]

576 }

577}

578```

579 

580`"Edit|Write"` matcher는 Claude가 `Edit` 또는 `Write` 도구를 사용할 때만 발생하고 `Bash`, `Read` 또는 다른 도구를 사용할 때는 발생하지 않습니다. [Matcher 패턴](/ko/hooks#matcher-patterns)을 참조하여 일반 이름과 정규식이 평가되는 방식을 확인하세요.

581 

582<Note>

583 Claude는 또한 `Bash` 도구를 통해 셸 명령을 실행하여 파일을 생성하거나 수정할 수 있습니다. Hook이 규정 준수 스캔 또는 감사 로깅과 같이 모든 파일 변경을 확인해야 하는 경우 턴당 한 번 작업 트리를 스캔하는 [`Stop`](/ko/hooks#stop) hook을 추가합니다. 호출당 범위를 대신 원하면 `Bash`도 일치시키고 스크립트가 `git status --porcelain`으로 수정되고 추적되지 않은 파일을 나열하도록 합니다.

584</Note>

585 

586각 이벤트 유형은 특정 필드에서 일치합니다:

587 

588| 이벤트 | Matcher가 필터링하는 것 | 예제 matcher 값 |

589| :-------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------- |

590| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | 도구 이름 | `Bash`, `Edit\|Write`, `mcp__.*` |

591| `SessionStart` | 세션이 시작된 방식 | `startup`, `resume`, `clear`, `compact` |

592| `Setup` | 어떤 CLI 플래그가 설정을 트리거했는지 | `init`, `maintenance` |

593| `SessionEnd` | 세션이 종료된 이유 | `clear`, `resume`, `logout`, `prompt_input_exit`, `bypass_permissions_disabled`, `other` |

594| `Notification` | 알림 유형 | `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog`, `elicitation_complete`, `elicitation_response` |

595| `SubagentStart` | 에이전트 유형 | `general-purpose`, `Explore`, `Plan` 또는 사용자 정의 에이전트 이름 |

596| `PreCompact`, `PostCompact` | 압축을 트리거한 것 | `manual`, `auto` |

597| `SubagentStop` | 에이전트 유형 | `SubagentStart`와 동일한 값 |

598| `ConfigChange` | 구성 소스 | `user_settings`, `project_settings`, `local_settings`, `policy_settings`, `skills` |

599| `StopFailure` | 오류 유형 | `rate_limit`, `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `invalid_request`, `server_error`, `max_output_tokens`, `unknown` |

600| `InstructionsLoaded` | 로드 이유 | `session_start`, `nested_traversal`, `path_glob_match`, `include`, `compact` |

601| `Elicitation` | MCP 서버 이름 | 구성된 MCP 서버 이름 |

602| `ElicitationResult` | MCP 서버 이름 | `Elicitation`과 동일한 값 |

603| `FileChanged` | 감시할 리터럴 파일 이름 ([FileChanged](/ko/hooks#filechanged) 참조) | `.envrc\|.env` |

604| `UserPromptExpansion` | 명령 이름 | skill 또는 명령 이름 |

605| `UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, `CwdChanged` | matcher 지원 없음 | 모든 발생에서 항상 발생 |

606 

607다양한 이벤트 유형에서 matchers를 보여주는 몇 가지 추가 예제:

608 

609<Tabs>

610 <Tab title="모든 Bash 명령 기록">

611 `Bash` 도구 호출만 일치시키고 각 명령을 파일에 기록합니다. `PostToolUse` 이벤트는 명령이 완료된 후 발생하므로 `tool_input.command`는 실행된 내용을 포함합니다. Hook은 stdin에서 이벤트 데이터를 JSON으로 받고 `jq -r '.tool_input.command'`는 명령 문자열만 추출하며 `>>`는 로그 파일에 추가합니다:

612 

613 ```json theme={null}

614 {

615 "hooks": {

616 "PostToolUse": [

617 {

618 "matcher": "Bash",

619 "hooks": [

620 {

621 "type": "command",

622 "command": "jq -r '.tool_input.command' >> ~/.claude/command-log.txt"

623 }

624 ]

625 }

626 ]

627 }

628 }

629 ```

630 </Tab>

631 

632 <Tab title="MCP 도구 일치">

633 MCP 도구는 기본 제공 도구와 다른 명명 규칙을 사용합니다: `mcp__<server>__<tool>`. 여기서 `<server>`는 MCP 서버 이름이고 `<tool>`은 제공하는 도구입니다. 예를 들어 `mcp__github__search_repositories` 또는 `mcp__filesystem__read_file`. 정규식 matcher를 사용하여 특정 서버의 모든 도구를 대상으로 하거나 `mcp__.*__write.*`와 같은 패턴으로 서버 전체에서 일치합니다. 참조의 [MCP 도구 일치](/ko/hooks#match-mcp-tools)를 참조하여 전체 예제 목록을 확인하세요.

634 

635 아래 명령은 hook의 JSON 입력에서 `jq`를 사용하여 도구 이름을 추출하고 stderr에 씁니다. stderr는 stdout을 깨끗하게 유지하고 메시지를 [디버그 로그](/ko/hooks#debug-hooks)로 보냅니다:

636 

637 ```json theme={null}

638 {

639 "hooks": {

640 "PreToolUse": [

641 {

642 "matcher": "mcp__github__.*",

643 "hooks": [

644 {

645 "type": "command",

646 "command": "echo \"GitHub tool called: $(jq -r '.tool_name')\" >&2"

647 }

648 ]

649 }

650 ]

651 }

652 }

653 ```

654 </Tab>

655 

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

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

658 

659 ```json theme={null}

660 {

661 "hooks": {

662 "SessionEnd": [

663 {

664 "matcher": "clear",

665 "hooks": [

666 {

667 "type": "command",

668 "command": "rm -f /tmp/claude-scratch-*.txt"

669 }

670 ]

671 }

672 ]

673 }

674 }

675 ```

676 </Tab>

677</Tabs>

678 

679전체 matcher 구문은 [Hooks 참조](/ko/hooks#configuration)를 참조하세요.

680 

681#### 도구 이름 및 인수로 `if` 필드를 사용하여 필터링

682 

683<Note>

684 `if` 필드는 Claude Code v2.1.85 이상이 필요합니다. 이전 버전은 이를 무시하고 일치하는 모든 호출에서 hook을 실행합니다.

685</Note>

686 

687`if` 필드는 [권한 규칙 구문](/ko/permissions)을 사용하여 도구 이름과 인수를 함께 사용하여 hooks를 필터링하므로 hook 프로세스는 도구 호출이 일치할 때만 생성되거나 Bash 명령이 구문 분석하기에 너무 복잡할 때 생성됩니다. 이는 도구 이름만으로 그룹 수준에서 필터링하는 `matcher`를 초과합니다.

688 

689예를 들어 모든 Bash 명령이 아닌 `git` 명령을 사용할 때만 hook을 실행하려면:

690 

691```json theme={null}

692{

693 "hooks": {

694 "PreToolUse": [

695 {

696 "matcher": "Bash",

697 "hooks": [

698 {

699 "type": "command",

700 "if": "Bash(git *)",

701 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/check-git-policy.sh"

702 }

703 ]

704 }

705 ]

706 }

707}

708```

709 

710Hook 프로세스는 Bash 명령의 서브명령이 `git *`과 일치할 때만 생성되거나 명령이 서브명령으로 구문 분석하기에 너무 복잡할 때 생성됩니다. `npm test && git push`와 같은 복합 명령의 경우 Claude Code는 각 서브명령을 평가하고 `git push`가 일치하기 때문에 hook을 발생시킵니다. `if` 필드는 권한 규칙과 동일한 패턴을 허용합니다: `"Bash(git *)"`, `"Edit(*.ts)"` 등. 여러 도구 이름을 일치시키려면 각각 자신의 `if` 값을 가진 별도의 핸들러를 사용하거나 파이프 교대가 지원되는 `matcher` 수준에서 일치합니다.

711 

712`if`는 도구 이벤트에서만 작동합니다: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` 및 `PermissionDenied`. 다른 이벤트에 추가하면 hook이 실행되지 않습니다.

713 

714### Hook 위치 구성

715 

716Hook을 추가하는 위치는 범위를 결정합니다:

717 

718| 위치 | 범위 | 공유 가능 |

719| :--------------------------------------------------------- | :------------------------- | :-------------- |

720| `~/.claude/settings.json` | 모든 프로젝트 | 아니오, 컴퓨터에 로컬 |

721| `.claude/settings.json` | 단일 프로젝트 | 예, 리포지토리에 커밋 가능 |

722| `.claude/settings.local.json` | 단일 프로젝트 | 아니오, gitignored |

723| 관리형 정책 설정 | 조직 전체 | 예, 관리자 제어 |

724| [Plugin](/ko/plugins) `hooks/hooks.json` | 플러그인이 활성화되었을 때 | 예, 플러그인과 함께 번들됨 |

725| [Skill](/ko/skills) 또는 [agent](/ko/sub-agents) frontmatter | Skill 또는 에이전트가 활성화되어 있는 동안 | 예, 컴포넌트 파일에 정의됨 |

726 

727Claude Code에서 [`/hooks`](/ko/hooks#the-hooks-menu)를 실행하여 이벤트별로 그룹화된 모든 구성된 hooks를 찾아봅니다. 모든 hooks를 한 번에 비활성화하려면 설정 파일에서 `"disableAllHooks": true`를 설정합니다.

728 

729Claude Code가 실행 중인 동안 설정 파일을 직접 편집하면 파일 감시자가 일반적으로 hook 변경을 자동으로 선택합니다.

730 

731## 프롬프트 기반 hooks

732 

733결정론적 규칙이 아닌 판단이 필요한 결정의 경우 `type: "prompt"` hooks를 사용합니다. 셸 명령을 실행하는 대신 Claude Code는 프롬프트와 hook의 입력 데이터를 Claude 모델(기본적으로 Haiku)에 전송하여 결정을 내립니다. 더 많은 기능이 필요한 경우 `model` 필드로 다른 모델을 지정할 수 있습니다.

734 

735모델의 유일한 작업은 yes/no 결정을 JSON으로 반환하는 것입니다:

736 

737* `"ok": true`: 작업이 진행됩니다

738* `"ok": false`: 작업이 차단됩니다. `Stop` 및 `SubagentStop` hooks의 경우 `reason`이 Claude에게 피드백으로 전달되어 계속 작업합니다. 다른 이벤트의 경우 턴이 종료되고 `reason`이 경고 줄로 채팅에 나타납니다. Claude는 이를 보지 못합니다.

739 

740이 예제는 `Stop` hook을 사용하여 모든 요청된 작업이 완료되었는지 모델에 묻습니다. 모델이 `"ok": false`를 반환하면 Claude는 계속 작업하고 `reason`을 다음 지침으로 사용합니다:

741 

742```json theme={null}

743{

744 "hooks": {

745 "Stop": [

746 {

747 "hooks": [

748 {

749 "type": "prompt",

750 "prompt": "Check if all tasks are complete. If not, respond with {\"ok\": false, \"reason\": \"what remains to be done\"}."

751 }

752 ]

753 }

754 ]

755 }

756}

757```

758 

759전체 구성 옵션은 참조의 [프롬프트 기반 hooks](/ko/hooks#prompt-based-hooks)를 참조하세요.

760 

761## 에이전트 기반 hooks

762 

763<Warning>

764 에이전트 hooks는 실험적입니다. 동작 및 구성은 향후 릴리스에서 변경될 수 있습니다. 프로덕션 워크플로우의 경우 [명령 hooks](/ko/hooks#command-hook-fields)를 선호합니다.

765</Warning>

766 

767검증에 파일 검사 또는 명령 실행이 필요한 경우 `type: "agent"` hooks를 사용합니다. 단일 LLM 호출을 수행하는 프롬프트 hooks와 달리 에이전트 hooks는 파일을 읽고 코드를 검색하며 결정을 반환하기 전에 다른 도구를 사용할 수 있는 subagent를 생성합니다.

768 

769에이전트 hooks는 프롬프트 hooks와 동일한 `"ok"` / `"reason"` 응답 형식을 사용하지만 기본 타임아웃이 60초이고 최대 50개의 도구 사용 턴입니다.

770 

771이 예제는 Claude가 중지되기 전에 테스트가 통과하는지 확인합니다:

772 

773```json theme={null}

774{

775 "hooks": {

776 "Stop": [

777 {

778 "hooks": [

779 {

780 "type": "agent",

781 "prompt": "Verify that all unit tests pass. Run the test suite and check the results. $ARGUMENTS",

782 "timeout": 120

783 }

784 ]

785 }

786 ]

787 }

788}

789```

790 

791Hook 입력 데이터만으로 결정을 내릴 수 있을 때 프롬프트 hooks를 사용합니다. 코드베이스의 실제 상태에 대해 무언가를 확인해야 할 때 에이전트 hooks를 사용합니다.

792 

793전체 구성 옵션은 참조의 [에이전트 기반 hooks](/ko/hooks#agent-based-hooks)를 참조하세요.

794 

795## HTTP hooks

796 

797`type: "http"` hooks를 사용하여 셸 명령을 실행하는 대신 이벤트 데이터를 HTTP 엔드포인트에 POST합니다. 엔드포인트는 명령 hook이 stdin에서 받을 것과 동일한 JSON을 받고 동일한 JSON 형식을 사용하여 HTTP 응답 본문을 통해 결과를 반환합니다.

798 

799HTTP hooks는 웹 서버, 클라우드 함수 또는 외부 서비스가 hook 로직을 처리하기를 원할 때 유용합니다: 예를 들어 팀 전체에서 도구 사용 이벤트를 기록하는 공유 감사 서비스입니다.

800 

801이 예제는 모든 도구 사용을 로컬 로깅 서비스에 게시합니다:

802 

803```json theme={null}

804{

805 "hooks": {

806 "PostToolUse": [

807 {

808 "hooks": [

809 {

810 "type": "http",

811 "url": "http://localhost:8080/hooks/tool-use",

812 "headers": {

813 "Authorization": "Bearer $MY_TOKEN"

814 },

815 "allowedEnvVars": ["MY_TOKEN"]

816 }

817 ]

818 }

819 ]

820 }

821}

822```

823 

824엔드포인트는 명령 hooks와 동일한 [출력 형식](/ko/hooks#json-output)을 사용하여 JSON 응답 본문을 반환해야 합니다. 도구 호출을 차단하려면 적절한 `hookSpecificOutput` 필드와 함께 2xx 응답을 반환합니다. HTTP 상태 코드만으로는 작업을 차단할 수 없습니다.

825 

826헤더 값은 `$VAR_NAME` 또는 `${VAR_NAME}` 구문을 사용한 환경 변수 보간을 지원합니다. `allowedEnvVars` 배열에 나열된 변수만 해결됩니다. 다른 모든 `$VAR` 참조는 비어 있습니다.

827 

828전체 구성 옵션 및 응답 처리는 참조의 [HTTP hooks](/ko/hooks#http-hook-fields)를 참조하세요.

829 

830## 제한 사항 및 문제 해결

831 

832### 제한 사항

833 

834* 명령 hooks는 stdout, stderr 및 종료 코드를 통해서만 통신합니다. 직접 `/` 명령이나 도구 호출을 트리거할 수 없습니다. `additionalContext`를 통해 반환된 텍스트는 Claude가 일반 텍스트로 읽는 시스템 알림으로 주입됩니다. HTTP hooks는 응답 본문을 통해 통신합니다.

835* Hook 타임아웃은 기본적으로 10분이며 `timeout` 필드 (초 단위)로 hook당 구성 가능합니다.

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

837* `PermissionRequest` hooks는 [비대화형 모드](/ko/headless) (`-p`)에서 발생하지 않습니다. 자동화된 권한 결정을 위해 `PreToolUse` hooks를 사용합니다.

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

839* 여러 PreToolUse hooks가 [`updatedInput`](/ko/hooks#pretooluse)을 반환하여 도구의 인수를 다시 쓸 때 마지막으로 완료된 것이 우승합니다. Hooks는 병렬로 실행되므로 순서는 비결정적입니다. 동일한 도구의 입력을 수정하는 hook이 두 개 이상 있는 것을 피합니다.

840 

841### Hooks 및 권한 모드

842 

843PreToolUse hooks는 모든 권한 모드 확인 전에 발생합니다. `permissionDecision: "deny"`를 반환하는 hook은 `bypassPermissions` 모드 또는 `--dangerously-skip-permissions`에서도 도구를 차단합니다. 이를 통해 사용자가 권한 모드를 변경하여 우회할 수 없는 정책을 적용할 수 있습니다.

844 

845반대는 사실이 아닙니다: `"allow"`를 반환하는 hook은 설정의 거부 규칙을 우회하지 않습니다. Hooks는 제한을 강화할 수 있지만 권한 규칙이 허용하는 것을 초과하여 완화할 수 없습니다.

846 

847### Hook이 발생하지 않음

848 

849Hook이 구성되었지만 실행되지 않습니다.

850 

851* `/hooks`를 실행하고 hook이 올바른 이벤트 아래에 나타나는지 확인합니다

852* Matcher 패턴이 도구 이름과 정확히 일치하는지 확인합니다 (matchers는 대소문자 구분)

853* 올바른 이벤트 유형을 트리거하는지 확인합니다 (예: `PreToolUse`는 도구 실행 전에 발생하고 `PostToolUse`는 후에 발생)

854* 비대화형 모드 (`-p`)에서 `PermissionRequest` hooks를 사용하는 경우 대신 `PreToolUse`로 전환합니다

855 

856### 출력에 Hook 오류

857 

858트랜스크립트에 "PreToolUse hook error: ..." 같은 메시지가 표시됩니다.

859 

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

861 ```bash theme={null}

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

863 echo $? // 종료 코드 확인

864 ```

865* "command not found"가 표시되면 절대 경로를 사용하거나 `$CLAUDE_PROJECT_DIR`을 사용하여 스크립트를 참조합니다

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

867* 스크립트가 실행되지 않으면 실행 가능하게 만듭니다: `chmod +x ./my-hook.sh`

868 

869### `/hooks`에 구성된 hooks가 없음

870 

871설정 파일을 편집했지만 hooks가 메뉴에 나타나지 않습니다.

872 

873* 파일 편집은 일반적으로 자동으로 선택됩니다. 몇 초 후에 나타나지 않으면 파일 감시자가 변경을 놓쳤을 수 있습니다: 세션을 다시 시작하여 강제로 다시 로드합니다.

874* JSON이 유효한지 확인합니다 (후행 쉼표 및 주석은 허용되지 않음)

875* 설정 파일이 올바른 위치에 있는지 확인합니다: 프로젝트 hooks의 경우 `.claude/settings.json`, 전역 hooks의 경우 `~/.claude/settings.json`

876 

877### Stop hook이 무한 실행됨

878 

879Claude가 무한 루프에서 계속 작업하는 대신 중지합니다.

880 

881Stop hook 스크립트는 이미 트리거되었는지 확인해야 합니다. JSON 입력에서 `stop_hook_active` 필드를 구문 분석하고 `true`인 경우 조기에 종료합니다:

882 

883```bash theme={null}

884#!/bin/bash

885INPUT=$(cat)

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

887 exit 0 // Claude가 중지되도록 허용

888fi

889// ... hook 로직의 나머지

890```

891 

892### JSON 검증 실패

893 

894Hook 스크립트가 유효한 JSON을 출력하더라도 Claude Code에 JSON 구문 분석 오류가 표시됩니다.

895 

896Claude Code가 hook을 실행할 때 프로필 (`~/.zshrc` 또는 `~/.bashrc`)을 소싱하는 셸을 생성합니다. 프로필에 무조건적인 `echo` 문이 포함되어 있으면 해당 출력이 hook의 JSON에 앞에 붙습니다:

897 

898```text theme={null}

899Shell ready on arm64

900{"decision": "block", "reason": "Not allowed"}

901```

902 

903Claude Code는 이를 JSON으로 구문 분석하려고 하고 실패합니다. 이를 수정하려면 셸 프로필의 echo 문을 래핑하여 대화형 셸에서만 실행되도록 합니다:

904 

905```bash theme={null}

906// ~/.zshrc 또는 ~/.bashrc에서

907if [[ $- == *i* ]]; then

908 echo "Shell ready"

909fi

910```

911 

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

913 

914### 디버그 기법

915 

916트랜스크립트 보기는 `Ctrl+O`로 전환되며 발생한 각 hook에 대해 한 줄 요약을 표시합니다: 성공은 자동으로 표시되고, 차단 오류는 stderr를 표시하며, 차단하지 않는 오류는 `<hook name> hook error` 공지를 표시한 후 stderr의 첫 번째 줄을 표시합니다.

917 

918전체 실행 세부 정보 (일치한 hooks, 종료 코드, stdout 및 stderr 포함)는 디버그 로그를 읽습니다. `claude --debug-file /tmp/claude.log`로 Claude Code를 시작하여 알려진 경로에 쓰거나 다른 터미널에서 `tail -f /tmp/claude.log`를 실행합니다. 해당 플래그 없이 시작한 경우 세션 중에 `/debug`를 실행하여 로깅을 활성화하고 로그 경로를 찾습니다.

919 

920## 자세히 알아보기

921 

922* [Hooks 참조](/ko/hooks): 전체 이벤트 스키마, JSON 출력 형식, 비동기 hooks 및 MCP 도구 hooks

923* [보안 고려 사항](/ko/hooks#security-considerations): 공유 또는 프로덕션 환경에서 hooks를 배포하기 전에 검토합니다

924* [Bash 명령 검증기 예제](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py): 완전한 참조 구현

how-claude-code-works.md +263 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Claude Code의 작동 방식

6 

7> 에이전트 루프, 내장 도구, Claude Code가 프로젝트와 상호작용하는 방식을 이해합니다.

8 

9Claude Code는 터미널에서 실행되는 에이전트 어시스턴트입니다. 코딩에 탁월하지만 명령줄에서 할 수 있는 모든 작업을 도와줄 수 있습니다: 문서 작성, 빌드 실행, 파일 검색, 주제 조사 등.

10 

11이 가이드는 핵심 아키텍처, 내장 기능, 그리고 [Claude Code를 효과적으로 사용하기 위한 팁](#work-effectively-with-claude-code)을 다룹니다. 단계별 설명서는 [일반적인 워크플로우](/ko/common-workflows)를 참조하세요. skills, MCP, hooks와 같은 확장 기능은 [Claude Code 확장](/ko/features-overview)을 참조하세요.

12 

13## 에이전트 루프

14 

15Claude에게 작업을 주면 세 가지 단계를 거칩니다: **컨텍스트 수집**, **작업 수행**, **결과 검증**. 이 단계들은 함께 진행됩니다. Claude는 파일을 검색하여 코드를 이해하든, 변경을 위해 편집하든, 작업을 확인하기 위해 테스트를 실행하든 전체적으로 도구를 사용합니다.

16 

17<img src="https://mintcdn.com/claude-code/c5r9_6tjPMzFdDDT/images/agentic-loop.svg?fit=max&auto=format&n=c5r9_6tjPMzFdDDT&q=85&s=5f1827dec8539f38adee90ead3a85a38" alt="에이전트 루프: 프롬프트가 Claude가 컨텍스트를 수집하고, 작업을 수행하고, 결과를 검증하고, 작업이 완료될 때까지 반복하도록 합니다. 언제든지 중단할 수 있습니다." width="720" height="280" data-path="images/agentic-loop.svg" />

18 

19루프는 사용자가 요청한 내용에 맞게 조정됩니다. 코드베이스에 대한 질문은 컨텍스트 수집만 필요할 수 있습니다. 버그 수정은 세 단계를 반복적으로 거칩니다. 리팩토링은 광범위한 검증을 포함할 수 있습니다. Claude는 이전 단계에서 배운 내용을 바탕으로 각 단계에서 필요한 것을 결정하고, 수십 개의 작업을 연결하며 그 과정에서 방향을 수정합니다.

20 

21사용자도 이 루프의 일부입니다. 언제든지 중단하여 Claude를 다른 방향으로 유도하거나, 추가 컨텍스트를 제공하거나, 다른 접근 방식을 시도하도록 요청할 수 있습니다. Claude는 자율적으로 작동하지만 사용자의 입력에 반응합니다.

22 

23에이전트 루프는 두 가지 구성 요소로 구동됩니다: 추론하는 [모델](#models)과 작용하는 [도구](#tools). Claude Code는 Claude 주변의 **에이전트 하네스** 역할을 합니다: 언어 모델을 능력 있는 코딩 에이전트로 변환하는 도구, 컨텍스트 관리, 실행 환경을 제공합니다.

24 

25### 모델

26 

27Claude Code는 Claude 모델을 사용하여 코드를 이해하고 작업에 대해 추론합니다. Claude는 모든 언어의 코드를 읽을 수 있고, 구성 요소가 어떻게 연결되는지 이해하며, 목표를 달성하기 위해 무엇을 변경해야 하는지 파악할 수 있습니다. 복잡한 작업의 경우 작업을 단계로 나누고, 실행하고, 배운 내용을 바탕으로 조정합니다.

28 

29[여러 모델](/ko/model-config)을 사용할 수 있으며 각각 다른 장단점이 있습니다. Sonnet은 대부분의 코딩 작업을 잘 처리합니다. Opus는 복잡한 아키텍처 결정을 위한 더 강력한 추론을 제공합니다. 세션 중에 `/model`로 전환하거나 `claude --model <name>`으로 시작하세요.

30 

31이 가이드에서 "Claude가 선택한다" 또는 "Claude가 결정한다"고 할 때, 모델이 추론을 수행하는 것입니다.

32 

33### 도구

34 

35도구는 Claude Code를 에이전트로 만드는 것입니다. 도구가 없으면 Claude는 텍스트로만 응답할 수 있습니다. 도구가 있으면 Claude는 작용할 수 있습니다: 코드를 읽고, 파일을 편집하고, 명령을 실행하고, 웹을 검색하고, 외부 서비스와 상호작용합니다. 각 도구 사용은 루프에 다시 피드백되는 정보를 반환하여 Claude의 다음 결정을 알립니다.

36 

37내장 도구는 일반적으로 다섯 가지 범주로 나뉘며, 각각은 다른 종류의 에이전시를 나타냅니다.

38 

39| 범주 | Claude가 할 수 있는 것 |

40| ------------ | ---------------------------------------------------------------------------------------------- |

41| **파일 작업** | 파일 읽기, 코드 편집, 새 파일 생성, 이름 변경 및 재구성 |

42| **검색** | 패턴으로 파일 찾기, 정규식으로 콘텐츠 검색, 코드베이스 탐색 |

43| **실행** | 셸 명령 실행, 서버 시작, 테스트 실행, git 사용 |

44| **웹** | 웹 검색, 문서 가져오기, 오류 메시지 조회 |

45| **코드 인텔리전스** | 편집 후 타입 오류 및 경고 확인, 정의로 이동, 참조 찾기 ([코드 인텔리전스 플러그인](/ko/discover-plugins#code-intelligence) 필요) |

46 

47이것이 주요 기능입니다. Claude는 또한 subagents를 생성하고, 질문을 하고, 다른 오케스트레이션 작업을 위한 도구를 가지고 있습니다. 전체 목록은 [Claude가 사용할 수 있는 도구](/ko/tools-reference)를 참조하세요.

48 

49Claude는 프롬프트와 그 과정에서 배운 내용을 바탕으로 사용할 도구를 선택합니다. "실패한 테스트를 수정해"라고 말하면 Claude는 다음을 수행할 수 있습니다:

50 

511. 테스트 스위트를 실행하여 무엇이 실패하는지 확인

522. 오류 출력 읽기

533. 관련 소스 파일 검색

544. 해당 파일을 읽어 코드 이해

555. 파일을 편집하여 문제 수정

566. 테스트를 다시 실행하여 검증

57 

58각 도구 사용은 Claude에게 다음 단계를 알리는 새로운 정보를 제공합니다. 이것이 에이전트 루프의 작동입니다.

59 

60**기본 기능 확장:** 내장 도구는 기초입니다. [skills](/ko/skills)로 Claude가 알 수 있는 것을 확장하고, [MCP](/ko/mcp)로 외부 서비스에 연결하고, [hooks](/ko/hooks)로 워크플로우를 자동화하고, [subagents](/ko/sub-agents)로 작업을 위임할 수 있습니다. 이러한 확장은 핵심 에이전트 루프 위에 계층을 형성합니다. 필요에 맞는 확장을 선택하는 방법은 [Claude Code 확장](/ko/features-overview)을 참조하세요.

61 

62## Claude가 접근할 수 있는 것

63 

64이 가이드는 터미널에 중점을 둡니다. Claude Code는 또한 [VS Code](/ko/vs-code), [JetBrains IDE](/ko/jetbrains), 및 기타 환경에서 실행됩니다.

65 

66디렉토리에서 `claude`를 실행하면 Claude Code는 다음에 접근할 수 있습니다:

67 

68* **프로젝트.** 디렉토리 및 하위 디렉토리의 파일, 그리고 허가를 받은 다른 곳의 파일.

69* **터미널.** 실행할 수 있는 모든 명령: 빌드 도구, git, 패키지 관리자, 시스템 유틸리티, 스크립트. 명령줄에서 할 수 있는 것이면 Claude도 할 수 있습니다.

70* **git 상태.** 현재 브랜치, 커밋되지 않은 변경 사항, 최근 커밋 기록.

71* **[CLAUDE.md](/ko/memory).** 프로젝트별 지침, 규칙, Claude가 매 세션마다 알아야 할 컨텍스트를 저장하는 마크다운 파일.

72* **[자동 메모리](/ko/memory#auto-memory).** Claude가 작업하면서 자동으로 저장하는 학습 내용(프로젝트 패턴 및 사용자 선호도 등). MEMORY.md의 처음 200줄 또는 25KB 중 먼저 도달하는 것이 각 세션 시작 시 로드됩니다.

73* **구성한 확장.** 외부 서비스를 위한 [MCP servers](/ko/mcp), 워크플로우를 위한 [skills](/ko/skills), 위임된 작업을 위한 [subagents](/ko/sub-agents), 브라우저 상호작용을 위한 [Claude in Chrome](/ko/chrome).

74 

75Claude가 전체 프로젝트를 보기 때문에 전체 프로젝트에서 작업할 수 있습니다. "인증 버그를 수정해"라고 Claude에게 요청하면 관련 파일을 검색하고, 컨텍스트를 이해하기 위해 여러 파일을 읽고, 여러 파일에 걸쳐 조정된 편집을 수행하고, 수정을 검증하기 위해 테스트를 실행하고, 요청하면 변경 사항을 커밋합니다. 이는 현재 파일만 보는 인라인 코드 어시스턴트와 다릅니다.

76 

77## 환경 및 인터페이스

78 

79위에서 설명한 에이전트 루프, 도구, 기능은 Claude Code를 사용하는 모든 곳에서 동일합니다. 변하는 것은 코드가 실행되는 위치와 상호작용하는 방식입니다.

80 

81### 실행 환경

82 

83Claude Code는 세 가지 환경에서 실행되며, 각각은 코드가 실행되는 위치에 대해 다른 장단점이 있습니다.

84 

85| 환경 | 코드 실행 위치 | 사용 사례 |

86| --------- | ----------------- | -------------------------- |

87| **로컬** | 사용자 머신 | 기본값. 파일, 도구, 환경에 대한 전체 접근 |

88| **클라우드** | Anthropic 관리 VM | 작업 오프로드, 로컬에 없는 리포지토리에서 작업 |

89| **원격 제어** | 사용자 머신, 브라우저에서 제어 | 웹 UI를 사용하면서 모든 것을 로컬로 유지 |

90 

91### 인터페이스

92 

93터미널, [데스크톱 앱](/ko/desktop), [IDE 확장](/ko/vs-code), [claude.ai/code](https://claude.ai/code), [원격 제어](/ko/remote-control), [Slack](/ko/slack), [CI/CD 파이프라인](/ko/github-actions)을 통해 Claude Code에 접근할 수 있습니다. 인터페이스는 Claude를 보고 상호작용하는 방식을 결정하지만, 기본 에이전트 루프는 동일합니다. 전체 목록은 [Claude Code를 어디서나 사용](/ko/overview#use-claude-code-everywhere)을 참조하세요.

94 

95## 세션으로 작업

96 

97Claude Code는 작업하면서 대화를 로컬에 저장합니다. 각 메시지, 도구 사용, 결과가 저장되어 [되돌리기](#undo-changes-with-checkpoints), [재개 및 포크](#resume-or-fork-sessions) 세션을 활성화합니다. Claude가 코드를 변경하기 전에 영향을 받는 파일을 스냅샷하므로 필요하면 되돌릴 수 있습니다.

98 

99**세션은 독립적입니다.** 각 새 세션은 이전 세션의 대화 기록 없이 새로운 컨텍스트 윈도우로 시작합니다. Claude는 [자동 메모리](/ko/memory#auto-memory)를 사용하여 세션 간에 학습을 유지할 수 있으며, [CLAUDE.md](/ko/memory)에 자신의 지속적인 지침을 추가할 수 있습니다.

100 

101### 브랜치 간 작업

102 

103각 Claude Code 대화는 현재 디렉토리에 연결된 세션입니다. 재개할 때 해당 디렉토리의 세션만 표시됩니다.

104 

105Claude는 현재 브랜치의 파일을 봅니다. 브랜치를 전환하면 Claude는 새 브랜치의 파일을 보지만 대화 기록은 동일하게 유지됩니다. Claude는 전환 후에도 논의한 내용을 기억합니다.

106 

107세션이 디렉토리에 연결되어 있으므로 [git worktrees](/ko/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees)를 사용하여 병렬 Claude 세션을 실행할 수 있으며, 이는 개별 브랜치에 대한 별도 디렉토리를 생성합니다.

108 

109### 세션 재개 또는 포크

110 

111`claude --continue` 또는 `claude --resume`으로 세션을 재개하면 동일한 세션 ID를 사용하여 중단한 지점부터 시작합니다. 새 메시지는 기존 대화에 추가됩니다. 전체 대화 기록이 복원되지만 세션 범위 권한은 복원되지 않습니다. 다시 승인해야 합니다.

112 

113<img src="https://mintcdn.com/claude-code/c5r9_6tjPMzFdDDT/images/session-continuity.svg?fit=max&auto=format&n=c5r9_6tjPMzFdDDT&q=85&s=fa41d12bfb57579cabfeece907151d30" alt="세션 연속성: 재개는 동일한 세션을 계속하고, 포크는 새 ID로 새 브랜치를 생성합니다." width="560" height="280" data-path="images/session-continuity.svg" />

114 

115원본 세션에 영향을 주지 않고 다른 접근 방식을 시도하려면 `--fork-session` 플래그를 사용하세요:

116 

117```bash theme={null}

118claude --continue --fork-session

119```

120 

121이는 그 시점까지의 대화 기록을 유지하면서 새 세션 ID를 생성합니다. 원본 세션은 변경되지 않습니다. 재개와 마찬가지로 포크된 세션은 세션 범위 권한을 상속하지 않습니다.

122 

123**여러 터미널에서 동일한 세션**: 여러 터미널에서 동일한 세션을 재개하면 두 터미널 모두 동일한 세션 파일에 쓰기를 수행합니다. 두 터미널의 메시지가 같은 노트북에 두 사람이 쓰는 것처럼 인터리브됩니다. 아무것도 손상되지 않지만 대화가 뒤섞입니다. 각 터미널은 세션 중에 자신의 메시지만 보지만, 나중에 해당 세션을 재개하면 모든 것이 인터리브된 것을 볼 수 있습니다. 동일한 시작점에서 병렬 작업을 하려면 `--fork-session`을 사용하여 각 터미널에 자신의 깨끗한 세션을 제공하세요.

124 

125### 컨텍스트 윈도우

126 

127Claude의 컨텍스트 윈도우는 대화 기록, 파일 콘텐츠, 명령 출력, [CLAUDE.md](/ko/memory), [자동 메모리](/ko/memory#auto-memory), 로드된 skills, 시스템 지침을 보유합니다. 작업하면서 컨텍스트가 채워집니다. Claude는 자동으로 압축하지만 대화 초반의 지침이 손실될 수 있습니다. 지속적인 규칙을 CLAUDE.md에 넣고 `/context`를 실행하여 공간을 사용하는 것을 확인하세요.

128 

129대화형 설명을 보려면 [컨텍스트 윈도우 탐색](/ko/context-window)을 참조하세요.

130 

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

132 

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

134 

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

136 

137`/context`를 실행하여 공간을 사용하는 것을 확인하세요. MCP 도구 정의는 기본적으로 지연되며 [도구 검색](/ko/mcp#scale-with-mcp-tool-search)을 통해 요청 시 로드되므로 Claude가 특정 도구를 사용할 때까지 도구 이름만 컨텍스트를 소비합니다. `/mcp`를 실행하여 서버별 비용을 확인하세요.

138 

139#### skills 및 subagents로 컨텍스트 관리

140 

141압축 외에도 다른 기능을 사용하여 컨텍스트에 로드되는 것을 제어할 수 있습니다.

142 

143[Skills](/ko/skills)는 요청 시 로드됩니다. Claude는 세션 시작 시 skill 설명을 보지만 전체 콘텐츠는 skill이 사용될 때만 로드됩니다. 수동으로 호출하는 skills의 경우 `disable-model-invocation: true`를 설정하여 필요할 때까지 설명을 컨텍스트 밖으로 유지하세요.

144 

145[Subagents](/ko/sub-agents)는 주 대화와 완전히 분리된 자신의 새로운 컨텍스트를 얻습니다. 그들의 작업은 컨텍스트를 부풀리지 않습니다. 완료되면 요약을 반환합니다. 이 격리가 긴 세션에서 subagents가 도움이 되는 이유입니다.

146 

147각 기능의 비용은 [컨텍스트 비용](/ko/features-overview#understand-context-costs)을 참조하고, 컨텍스트 관리 팁은 [토큰 사용 감소](/ko/costs#reduce-token-usage)를 참조하세요.

148 

149## 체크포인트 및 권한으로 안전 유지

150 

151Claude는 두 가지 안전 메커니즘을 가지고 있습니다: 체크포인트는 파일 변경을 취소할 수 있게 하고, 권한은 Claude가 요청 없이 할 수 있는 것을 제어합니다.

152 

153### 체크포인트로 변경 취소

154 

155**모든 파일 편집은 되돌릴 수 있습니다.** Claude가 파일을 편집하기 전에 현재 콘텐츠를 스냅샷합니다. 문제가 발생하면 `Esc`를 두 번 눌러 이전 상태로 되돌리거나 Claude에게 취소하도록 요청하세요.

156 

157체크포인트는 세션에 로컬이며 git과 분리되어 있습니다. 파일 변경만 다룹니다. 원격 시스템(데이터베이스, API, 배포)에 영향을 주는 작업은 체크포인트할 수 없으므로 Claude는 외부 부작용이 있는 명령을 실행하기 전에 요청합니다.

158 

159### Claude가 할 수 있는 것 제어

160 

161`Shift+Tab`을 눌러 권한 모드를 순환하세요:

162 

163* **기본값**: Claude는 파일 편집 및 셸 명령 전에 요청

164* **자동 수락 편집**: Claude는 파일을 편집하지만 명령은 여전히 요청

165* **계획 모드**: Claude는 읽기 전용 도구만 사용하여 실행 전에 승인할 수 있는 계획을 생성

166* **자동 모드**: Claude는 백그라운드 안전 검사로 모든 작업을 평가합니다. 현재 연구 미리보기입니다

167 

168`.claude/settings.json`에서 특정 명령을 허용하여 Claude가 매번 요청하지 않도록 할 수 있습니다. 이는 `npm test` 또는 `git status`와 같은 신뢰할 수 있는 명령에 유용합니다. 설정은 조직 전체 정책에서 개인 선호도까지 범위를 지정할 수 있습니다. 자세한 내용은 [권한](/ko/permissions)을 참조하세요.

169 

170***

171 

172## Claude Code를 효과적으로 사용

173 

174이 팁은 Claude Code에서 더 나은 결과를 얻는 데 도움이 됩니다.

175 

176### Claude Code에 도움을 요청

177 

178Claude Code는 사용 방법을 가르칠 수 있습니다. "hooks를 설정하려면 어떻게 하나요?" 또는 "CLAUDE.md를 구조화하는 최선의 방법은 무엇인가요?"와 같은 질문을 하면 Claude가 설명합니다.

179 

180내장 명령도 설정을 안내합니다:

181 

182* `/init`은 프로젝트를 위한 CLAUDE.md 생성을 안내합니다

183* `/agents`는 사용자 정의 subagents 구성을 도와줍니다

184* `/doctor`는 설치의 일반적인 문제를 진단합니다

185 

186### 대화입니다

187 

188Claude Code는 대화형입니다. 완벽한 프롬프트가 필요하지 않습니다. 원하는 것으로 시작한 다음 개선하세요:

189 

190```text theme={null}

191로그인 버그 수정

192```

193 

194\[Claude가 조사하고 시도]

195 

196```text theme={null}

197정확하지 않습니다. 문제는 세션 처리에 있습니다.

198```

199 

200\[Claude가 접근 방식 조정]

201 

202첫 번째 시도가 맞지 않으면 다시 시작할 필요가 없습니다. 반복합니다.

203 

204#### 중단 및 조종

205 

206언제든지 Claude를 중단할 수 있습니다. 잘못된 경로로 가고 있으면 수정 사항을 입력하고 Enter를 누르세요. Claude는 작업을 중지하고 입력을 바탕으로 접근 방식을 조정합니다. 완료될 때까지 기다리거나 다시 시작할 필요가 없습니다.

207 

208### 처음부터 구체적으로

209 

210초기 프롬프트가 정확할수록 필요한 수정이 적습니다. 특정 파일을 참조하고, 제약 조건을 언급하고, 예제 패턴을 지적하세요.

211 

212```text theme={null}

213체크아웃 흐름이 만료된 카드를 가진 사용자에게 손상되었습니다.

214문제를 찾기 위해 src/payments/를 확인하세요. 특히 토큰 새로고침.

215먼저 실패하는 테스트를 작성한 다음 수정하세요.

216```

217 

218모호한 프롬프트는 작동하지만 더 많은 시간을 조종하는 데 소비합니다. 위와 같은 구체적인 프롬프트는 종종 첫 번째 시도에서 성공합니다.

219 

220### Claude가 검증할 수 있는 것을 제공

221 

222Claude는 자신의 작업을 확인할 수 있을 때 더 잘 수행합니다. 테스트 케이스를 포함하고, 예상 UI의 스크린샷을 붙여넣거나, 원하는 출력을 정의하세요.

223 

224```text theme={null}

225validateEmail을 구현하세요. 테스트 케이스: 'user@example.com' → true,

226'invalid' → false, 'user@.com' → false. 후에 테스트를 실행하세요.

227```

228 

229시각적 작업의 경우 디자인의 스크린샷을 붙여넣고 Claude에게 구현을 비교하도록 요청하세요.

230 

231### 구현 전에 탐색

232 

233복잡한 문제의 경우 연구와 코딩을 분리하세요. 계획 모드(`Shift+Tab` 두 번)를 사용하여 먼저 코드베이스를 분석하세요:

234 

235```text theme={null}

236src/auth/를 읽고 세션을 처리하는 방법을 이해하세요.

237그런 다음 OAuth 지원 추가를 위한 계획을 생성하세요.

238```

239 

240계획을 검토하고 대화를 통해 개선한 다음 Claude가 구현하도록 하세요. 이 2단계 접근 방식은 코드로 바로 뛰어드는 것보다 더 나은 결과를 생성합니다.

241 

242### 지시하지 말고 위임

243 

244능력 있는 동료에게 위임하는 것처럼 생각하세요. 컨텍스트와 방향을 제공한 다음 Claude가 세부 사항을 파악하도록 신뢰하세요:

245 

246```text theme={null}

247체크아웃 흐름이 만료된 카드를 가진 사용자에게 손상되었습니다.

248관련 코드는 src/payments/에 있습니다. 조사하고 수정할 수 있나요?

249```

250 

251읽을 파일이나 실행할 명령을 지정할 필요가 없습니다. Claude가 파악합니다.

252 

253## 다음 단계

254 

255<CardGroup cols={2}>

256 <Card title="기능으로 확장" icon="puzzle-piece" href="/ko/features-overview">

257 Skills, MCP 연결, 사용자 정의 명령 추가

258 </Card>

259 

260 <Card title="일반적인 워크플로우" icon="graduation-cap" href="/ko/common-workflows">

261 일반적인 작업을 위한 단계별 가이드

262 </Card>

263</CardGroup>

interactive-mode.md +362 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 대화형 모드

6 

7> Claude Code 세션의 키보드 단축키, 입력 모드 및 대화형 기능에 대한 완전한 참조입니다.

8 

9## 키보드 단축키

10 

11<Note>

12 키보드 단축키는 플랫폼 및 터미널에 따라 다를 수 있습니다. `?`를 눌러 사용자 환경에서 사용 가능한 단축키를 확인하세요.

13 

14 **macOS 사용자**: Option/Alt 키 단축키(`Alt+B`, `Alt+F`, `Alt+Y`, `Alt+M`, `Alt+P`, `Alt+T`)를 사용하려면 터미널에서 Option을 Meta로 구성해야 합니다:

15 

16 * **iTerm2**: 설정 → 프로필 → 키 → 일반 → Left/Right Option 키를 "Esc+"로 설정

17 * **Apple Terminal**: 설정 → 프로필 → 키보드 → "Option을 Meta 키로 사용" 확인

18 * **VS Code**: VS Code 설정에서 `"terminal.integrated.macOptionIsMeta": true`로 설정

19 

20 자세한 내용은 [터미널 구성](/ko/terminal-config)을 참조하세요.

21</Note>

22 

23### 일반 제어

24 

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

26| :------------------------------------------------ | :---------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

27| `Ctrl+C` | 현재 입력 또는 생성 취소 | 표준 중단 |

28| `Ctrl+X Ctrl+K` | 모든 백그라운드 에이전트 종료. 3초 이내에 두 번 누르면 확인 | 백그라운드 에이전트 제어 |

29| `Ctrl+D` | Claude Code 세션 종료 | EOF 신호 |

30| `Ctrl+G` 또는 `Ctrl+X Ctrl+E` | 기본 텍스트 편집기에서 열기 | 기본 텍스트 편집기에서 프롬프트 또는 사용자 정의 응답을 편집합니다. `Ctrl+X Ctrl+E`는 readline 기본 바인딩입니다. `/config`에서 외부 편집기에서 마지막 응답 표시를 켜면 Claude의 이전 응답을 `#`-주석 처리된 컨텍스트로 프롬프트 위에 앞에 붙입니다. 저장할 때 주석 블록이 제거됩니다 |

31| `Ctrl+L` | 화면 다시 그리기 | 전체 터미널 다시 그리기를 강제합니다. 입력 및 대화 기록은 유지됩니다. 디스플레이가 손상되거나 부분적으로 공백이 되면 이를 사용하여 복구하세요 |

32| `Ctrl+O` | 트랜스크립트 뷰어 토글 | 자세한 도구 사용 및 실행을 표시합니다. MCP 호출도 확장하며, 기본적으로 "Slack 3회 호출됨"과 같은 단일 줄로 축소됩니다 |

33| `Ctrl+R` | 역방향 검색 명령 기록 | 이전 명령을 대화형으로 검색 |

34| `Ctrl+V` 또는 `Cmd+V` (iTerm2) 또는 `Alt+V` (Windows) | 클립보드에서 이미지 붙여넣기 | 커서에 `[Image #N]` 칩을 삽입하여 프롬프트에서 위치별로 참조할 수 있습니다 |

35| `Ctrl+B` | 백그라운드 실행 작업 | bash 명령 및 에이전트를 백그라운드로 실행합니다. Tmux 사용자는 두 번 누르기 |

36| `Ctrl+T` | 작업 목록 토글 | 터미널 상태 영역에서 [작업 목록](#task-list) 표시 또는 숨기기 |

37| `Left/Right 화살표` | 대화 상자 탭 순환 | 권한 대화 상자 및 메뉴의 탭 간 탐색 |

38| `Up/Down 화살표` 또는 `Ctrl+P`/`Ctrl+N` | 커서 이동 또는 명령 기록 탐색 | 여러 줄 입력에서 먼저 프롬프트 내에서 커서를 이동합니다. 커서가 이미 위쪽 또는 아래쪽 가장자리에 있으면 다시 누르면 명령 기록을 탐색합니다 |

39| `Esc` + `Esc` | 되돌리기 또는 요약 | 코드 및/또는 대화를 이전 지점으로 복원하거나 선택한 메시지에서 요약 |

40| `Shift+Tab` 또는 `Alt+M` (일부 구성) | 권한 모드 순환 | `default`, `acceptEdits`, `plan` 및 `auto` 또는 `bypassPermissions`와 같이 활성화한 모든 모드를 순환합니다. [권한 모드](/ko/permission-modes)를 참조하세요. |

41| `Option+P` (macOS) 또는 `Alt+P` (Windows/Linux) | 모델 전환 | 프롬프트를 지우지 않고 모델 전환 |

42| `Option+T` (macOS) 또는 `Alt+T` (Windows/Linux) | 확장 사고 토글 | 확장 사고 모드를 활성화 또는 비활성화합니다. macOS에서 이 단축키가 작동하려면 터미널에서 Option을 Meta로 보내도록 구성하세요 |

43| `Option+O` (macOS) 또는 `Alt+O` (Windows/Linux) | 빠른 모드 토글 | [빠른 모드](/ko/fast-mode) 활성화 또는 비활성화 |

44 

45### 텍스트 편집

46 

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

48| :-------------------- | :--------------- | :----------------------------------------------------------------------------------------------------------------------------- |

49| `Ctrl+A` | 현재 줄의 시작으로 커서 이동 | 여러 줄 입력에서 현재 논리 줄의 시작으로 이동합니다 |

50| `Ctrl+E` | 현재 줄의 끝으로 커서 이동 | 여러 줄 입력에서 현재 논리 줄의 끝으로 이동합니다 |

51| `Ctrl+K` | 줄 끝까지 삭제 | 삭제된 텍스트를 붙여넣기용으로 저장 |

52| `Ctrl+U` | 커서에서 줄 시작까지 삭제 | 삭제된 텍스트를 붙여넣기용으로 저장합니다. 여러 줄 입력에서 반복하여 여러 줄을 지웁니다. macOS에서 iTerm2 및 Terminal.app을 포함한 터미널 에뮬레이터는 `Cmd+Backspace`를 이 단축키로 매핑합니다 |

53| `Ctrl+W` | 이전 단어 삭제 | 삭제된 텍스트를 붙여넣기용으로 저장합니다. Windows에서 `Ctrl+Backspace`도 이전 단어를 삭제합니다 |

54| `Ctrl+Y` | 삭제된 텍스트 붙여넣기 | `Ctrl+K`, `Ctrl+U` 또는 `Ctrl+W`로 삭제한 텍스트 붙여넣기 |

55| `Alt+Y` (`Ctrl+Y` 이후) | 붙여넣기 기록 순환 | 붙여넣기 후 이전에 삭제한 텍스트를 순환합니다. macOS에서 [Option을 Meta로](#keyboard-shortcuts) 설정 필요 |

56| `Alt+B` | 커서를 한 단어 뒤로 이동 | 단어 탐색. macOS에서 [Option을 Meta로](#keyboard-shortcuts) 설정 필요 |

57| `Alt+F` | 커서를 한 단어 앞으로 이동 | 단어 탐색. macOS에서 [Option을 Meta로](#keyboard-shortcuts) 설정 필요 |

58 

59### 테마 및 표시

60 

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

62| :------- | :-------------- | :------------------------------------------------------------------ |

63| `Ctrl+T` | 코드 블록의 구문 강조 토글 | `/theme` 선택기 메뉴 내에서만 작동합니다. Claude의 응답에서 코드가 구문 색상을 사용하는지 여부를 제어합니다 |

64 

65### 여러 줄 입력

66 

67| 방법 | 단축키 | 컨텍스트 |

68| :---------- | :------------- | :--------------------------------------------------------------------------------------- |

69| 빠른 이스케이프 | `\` + `Enter` | 모든 터미널에서 작동 |

70| Option 키 | `Option+Enter` | macOS에서 [Option을 Meta로](/ko/terminal-config#enable-option-key-shortcuts-on-macos) 활성화한 후 |

71| Shift+Enter | `Shift+Enter` | iTerm2, WezTerm, Ghostty, Kitty, Warp, Apple Terminal에서 기본적으로 작동 |

72| 제어 시퀀스 | `Ctrl+J` | 구성 없이 모든 터미널에서 작동 |

73| 붙여넣기 모드 | 직접 붙여넣기 | 코드 블록, 로그의 경우 |

74 

75<Tip>

76 Shift+Enter는 iTerm2, WezTerm, Ghostty, Kitty, Warp 및 Apple Terminal에서 구성 없이 작동합니다. VS Code, Cursor, Windsurf, Alacritty 및 Zed의 경우 `/terminal-setup`을 실행하여 바인딩을 설치하세요.

77</Tip>

78 

79### 빠른 명령

80 

81| 단축키 | 설명 | 참고 |

82| :----- | :---------- | :---------------------------------------- |

83| `/` 시작 | 명령 또는 skill | [명령](#commands) 및 [skills](/ko/skills) 참조 |

84| `!` 시작 | Bash 모드 | 명령을 직접 실행하고 실행 출력을 세션에 추가 |

85| `@` | 파일 경로 언급 | 파일 경로 자동 완성 트리거 |

86 

87### 트랜스크립트 뷰어

88 

89트랜스크립트 뷰어가 열려 있을 때(`Ctrl+O`로 토글), 이 단축키를 사용할 수 있습니다. `Ctrl+E`는 [`transcript:toggleShowAll`](/ko/keybindings)을 통해 재바인딩할 수 있습니다.

90 

91| 단축키 | 설명 |

92| :------------------- | :----------------------------------------------------------------------------------------------------------------------------------------- |

93| `Ctrl+E` | 모든 콘텐츠 표시 토글 |

94| `[` | 전체 대화를 터미널의 기본 스크롤백에 작성하여 `Cmd+F`, tmux 복사 모드 및 기타 기본 도구가 검색할 수 있도록 합니다. [전체 화면 렌더링](/ko/fullscreen#search-and-review-the-conversation) 필요 |

95| `v` | 대화를 임시 파일에 작성하고 `$VISUAL` 또는 `$EDITOR`에서 엽니다. [전체 화면 렌더링](/ko/fullscreen) 필요 |

96| `q`, `Ctrl+C`, `Esc` | 트랜스크립트 보기 종료. 세 가지 모두 [`transcript:exit`](/ko/keybindings)를 통해 재바인딩할 수 있습니다 |

97 

98### 음성 입력

99 

100| 단축키 | 설명 | 참고 |

101| :------------------ | :------ | :----------------------------------------------------------------------------------------------------------------------------------------------- |

102| `Space` 길게 누르기 또는 탭 | 음성 받아쓰기 | [음성 받아쓰기](/ko/voice-dictation)가 활성화되어야 합니다. 길게 누르면 녹음하거나 `/voice tap`을 실행하여 탭-토글을 사용합니다. [재바인딩 가능](/ko/voice-dictation#rebind-the-dictation-key) |

103 

104## 명령

105 

106Claude Code에서 `/`를 입력하여 사용 가능한 모든 명령을 보거나, `/` 다음에 문자를 입력하여 필터링하세요. `/` 메뉴는 호출할 수 있는 모든 것을 표시합니다: 기본 제공 명령, 번들 및 사용자 작성 [skills](/ko/skills), 그리고 [plugins](/ko/plugins) 및 [MCP servers](/ko/mcp#use-mcp-prompts-as-commands)에서 제공하는 명령. 플랫폼 또는 요금제에 따라 달라지므로 모든 명령이 모든 사용자에게 표시되지는 않습니다.

107 

108Claude Code에 포함된 명령의 전체 목록은 [명령 참조](/ko/commands)를 참조하세요.

109 

110## Vim 편집기 모드

111 

112`/config` → 편집기 모드를 통해 vim 스타일 편집을 활성화합니다.

113 

114### 모드 전환

115 

116| 명령 | 작업 | 모드에서 |

117| :---- | :-------------- | :------------- |

118| `Esc` | NORMAL 모드 진입 | INSERT, VISUAL |

119| `i` | 커서 앞에 삽입 | NORMAL |

120| `I` | 줄 시작에 삽입 | NORMAL |

121| `a` | 커서 뒤에 삽입 | NORMAL |

122| `A` | 줄 끝에 삽입 | NORMAL |

123| `o` | 아래 줄 열기 | NORMAL |

124| `O` | 위 줄 열기 | NORMAL |

125| `v` | 문자 단위 시각적 선택 시작 | NORMAL |

126| `V` | 줄 단위 시각적 선택 시작 | NORMAL |

127 

128### 탐색 (NORMAL 모드)

129 

130| 명령 | 작업 |

131| :-------------- | :---------------------- |

132| `h`/`j`/`k`/`l` | 왼쪽/아래/위/오른쪽 이동 |

133| `w` | 다음 단어 |

134| `e` | 단어 끝 |

135| `b` | 이전 단어 |

136| `0` | 줄 시작 |

137| `$` | 줄 끝 |

138| `^` | 첫 번째 공백이 아닌 문자 |

139| `gg` | 입력 시작 |

140| `G` | 입력 끝 |

141| `f{char}` | 다음 문자 발생으로 점프 |

142| `F{char}` | 이전 문자 발생으로 점프 |

143| `t{char}` | 다음 문자 발생 직전으로 점프 |

144| `T{char}` | 이전 문자 발생 직후로 점프 |

145| `;` | 마지막 f/F/t/T 동작 반복 |

146| `,` | 마지막 f/F/t/T 동작을 역순으로 반복 |

147 

148<Note>

149 vim 일반 모드에서 커서가 입력의 시작 또는 끝에 있고 더 이상 이동할 수 없으면 `j`/`k` 및 화살표 키가 명령 기록을 탐색합니다.

150</Note>

151 

152### 편집 (NORMAL 모드)

153 

154| 명령 | 작업 |

155| :------------- | :----------- |

156| `x` | 문자 삭제 |

157| `dd` | 줄 삭제 |

158| `D` | 줄 끝까지 삭제 |

159| `dw`/`de`/`db` | 단어 삭제/끝까지/뒤로 |

160| `cc` | 줄 변경 |

161| `C` | 줄 끝까지 변경 |

162| `cw`/`ce`/`cb` | 단어 변경/끝까지/뒤로 |

163| `yy`/`Y` | 줄 복사 |

164| `yw`/`ye`/`yb` | 단어 복사/끝까지/뒤로 |

165| `p` | 커서 뒤에 붙여넣기 |

166| `P` | 커서 앞에 붙여넣기 |

167| `>>` | 줄 들여쓰기 |

168| `<<` | 줄 내어쓰기 |

169| `J` | 줄 결합 |

170| `u` | 실행 취소 |

171| `.` | 마지막 변경 반복 |

172 

173### 텍스트 객체 (NORMAL 모드)

174 

175텍스트 객체는 `d`, `c`, `y`와 같은 연산자와 함께 작동합니다:

176 

177| 명령 | 작업 |

178| :-------- | :------------------- |

179| `iw`/`aw` | 내부/주변 단어 |

180| `iW`/`aW` | 내부/주변 WORD (공백으로 구분) |

181| `i"`/`a"` | 내부/주변 큰따옴표 |

182| `i'`/`a'` | 내부/주변 작은따옴표 |

183| `i(`/`a(` | 내부/주변 괄호 |

184| `i[`/`a[` | 내부/주변 대괄호 |

185| `i{`/`a{` | 내부/주변 중괄호 |

186 

187### 시각적 모드

188 

189문자 단위 선택을 위해 `v`를 누르거나 줄 단위 선택을 위해 `V`를 누릅니다. 동작은 선택을 확장하고 연산자는 이에 직접 작용합니다.

190 

191| 명령 | 작업 |

192| :--------------- | :----------------------- |

193| `d`/`x` | 선택 삭제 |

194| `y` | 선택 복사 |

195| `c`/`s` | 선택 변경 |

196| `p` | 선택을 레지스터 내용으로 바꾸기 |

197| `r{char}` | 선택된 모든 문자를 `{char}`로 바꾸기 |

198| `~`/`u`/`U` | 선택 토글, 소문자 또는 대문자 |

199| `>`/`<` | 선택된 줄 들여쓰기 또는 내어쓰기 |

200| `J` | 선택된 줄 결합 |

201| `o` | 커서와 앵커 교환 |

202| `iw`/`aw`/`i"`/… | 텍스트 객체 선택 |

203| `v`/`V` | 문자 단위와 줄 단위 간 토글 또는 종료 |

204 

205`Ctrl+V`를 사용한 블록 단위 시각적 모드는 지원되지 않습니다.

206 

207## 명령 기록

208 

209Claude Code는 현재 세션의 명령 기록을 유지합니다:

210 

211* 입력 기록은 작업 디렉토리별로 저장됩니다

212* 입력 기록은 `/clear`를 실행하여 새 세션을 시작할 때 재설정됩니다. 이전 세션의 대화는 보존되며 재개할 수 있습니다.

213* Up/Down 화살표를 사용하여 탐색하세요 (위의 키보드 단축키 참조)

214* **참고**: 기록 확장(`!`)은 기본적으로 비활성화됩니다

215 

216### Ctrl+R을 사용한 역방향 검색

217 

218`Ctrl+R`을 눌러 명령 기록을 대화형으로 검색하세요:

219 

2201. **검색 시작**: `Ctrl+R`을 눌러 역방향 기록 검색 활성화

2212. **쿼리 입력**: 이전 명령에서 검색할 텍스트를 입력하세요. 검색어는 일치하는 결과에서 강조됩니다

2223. **일치 탐색**: `Ctrl+R`을 다시 눌러 더 오래된 일치를 순환하세요

2234. **범위 변경**: `Ctrl+S`를 눌러 이 세션, 이 프로젝트, 모든 프로젝트 간에 순환하세요

2245. **일치 수락**:

225 * `Tab` 또는 `Esc`를 눌러 현재 일치를 수락하고 편집 계속

226 * `Enter`를 눌러 명령을 수락하고 즉시 실행

2276. **검색 취소**:

228 * `Ctrl+C`를 눌러 취소하고 원래 입력 복원

229 * 빈 검색에서 `Backspace`를 눌러 취소

230 

231검색은 검색어가 강조된 일치하는 명령을 표시하므로 이전 입력을 찾아 재사용할 수 있습니다.

232 

233## 백그라운드 bash 명령

234 

235Claude Code는 bash 명령을 백그라운드에서 실행하도록 지원하여 장시간 실행되는 프로세스가 실행되는 동안 계속 작업할 수 있습니다.

236 

237### 백그라운드 실행 방식

238 

239Claude Code가 명령을 백그라운드에서 실행하면 명령을 비동기적으로 실행하고 즉시 백그라운드 작업 ID를 반환합니다. Claude Code는 명령이 백그라운드에서 계속 실행되는 동안 새 프롬프트에 응답할 수 있습니다.

240 

241명령을 백그라운드에서 실행하려면 다음 중 하나를 수행할 수 있습니다:

242 

243* Claude Code에 명령을 백그라운드에서 실행하도록 프롬프트

244* Ctrl+B를 눌러 일반 Bash 도구 호출을 백그라운드로 이동합니다. (Tmux 사용자는 tmux의 접두사 키로 인해 Ctrl+B를 두 번 눌러야 합니다.)

245 

246**주요 기능:**

247 

248* 출력은 파일에 기록되며 Claude는 Read 도구를 사용하여 검색할 수 있습니다

249* 백그라운드 작업에는 추적 및 출력 검색을 위한 고유 ID가 있습니다

250* 백그라운드 작업은 Claude Code가 종료될 때 자동으로 정리됩니다

251* 백그라운드 작업은 출력이 5GB를 초과하면 자동으로 종료되며, stderr에 이유를 설명하는 메모가 있습니다

252 

253모든 백그라운드 작업 기능을 비활성화하려면 `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` 환경 변수를 `1`로 설정하세요. 자세한 내용은 [환경 변수](/ko/env-vars)를 참조하세요.

254 

255**일반적인 백그라운드 명령:**

256 

257* 빌드 도구 (webpack, vite, make)

258* 패키지 관리자 (npm, yarn, pnpm)

259* 테스트 러너 (jest, pytest)

260* 개발 서버

261* 장시간 실행 프로세스 (docker, terraform)

262 

263### `!` 접두사를 사용한 Shell 모드

264 

265입력 앞에 `!`를 붙여 Claude를 거치지 않고 bash 명령을 직접 실행하세요:

266 

267```bash theme={null}

268! npm test

269! git status

270! ls -la

271```

272 

273Shell 모드:

274 

275* 명령 및 출력을 대화 컨텍스트에 추가합니다

276* 실시간 진행 상황 및 출력을 표시합니다

277* 장시간 실행 명령에 대해 동일한 `Ctrl+B` 백그라운드 실행을 지원합니다

278* Claude가 명령을 해석하거나 승인할 필요가 없습니다

279* 기록 기반 자동 완성을 지원합니다: 부분 명령을 입력하고 **Tab**을 눌러 현재 프로젝트의 이전 `!` 명령에서 완성합니다

280* 빈 프롬프트에서 `Escape`, `Backspace` 또는 `Ctrl+U`로 종료합니다

281* 빈 프롬프트에 `!`로 시작하는 텍스트를 붙여넣으면 입력된 `!` 동작과 일치하여 shell 모드에 자동으로 진입합니다

282 

283이는 대화 컨텍스트를 유지하면서 빠른 셸 작업에 유용합니다.

284 

285## 프롬프트 제안

286 

287세션을 처음 열 때 시작하는 데 도움이 되는 회색으로 표시된 예제 명령이 프롬프트 입력에 나타납니다. Claude Code는 프로젝트의 git 기록에서 이를 선택하므로 최근에 작업한 파일을 반영합니다.

288 

289Claude가 응답한 후 다중 부분 요청의 후속 단계 또는 워크플로우의 자연스러운 계속과 같은 대화 기록을 기반으로 제안이 계속 나타납니다.

290 

291* **Tab** 또는 **Right 화살표**를 눌러 제안을 수락하거나 **Enter**를 눌러 수락하고 제출

292* 입력을 시작하여 제안 해제

293 

294제안은 부모 대화의 프롬프트 캐시를 재사용하는 백그라운드 요청으로 실행되므로 추가 비용은 최소입니다. Claude Code는 불필요한 비용을 피하기 위해 캐시가 콜드일 때 제안 생성을 건너뜁니다.

295 

296제안은 대화의 첫 번째 턴 이후, 비대화형 모드에서, 그리고 Plan Mode에서 자동으로 건너뜁니다.

297 

298프롬프트 제안을 완전히 비활성화하려면 환경 변수를 설정하거나 `/config`에서 설정을 토글하세요:

299 

300```bash theme={null}

301export CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION=false

302```

303 

304## /btw를 사용한 측면 질문

305 

306`/btw`를 사용하여 현재 작업에 대한 빠른 질문을 하되 대화 기록에 추가하지 않으세요. 이는 빠른 답변을 원하지만 주 컨텍스트를 복잡하게 하거나 Claude의 장시간 실행 작업을 방해하고 싶지 않을 때 유용합니다.

307 

308```

309/btw what was the name of that config file again?

310```

311 

312측면 질문은 현재 대화에 완전히 표시되므로 Claude가 이미 읽은 코드, 이전에 내린 결정 또는 세션의 다른 모든 것에 대해 질문할 수 있습니다. 질문과 답변은 임시적입니다: 해제 가능한 오버레이에 나타나며 대화 기록에 절대 입력되지 않습니다.

313 

314* **Claude가 작업하는 동안 사용 가능**: Claude가 응답을 처리하는 동안에도 `/btw`를 실행할 수 있습니다. 측면 질문은 독립적으로 실행되며 주 턴을 중단하지 않습니다.

315* **도구 액세스 없음**: 측면 질문은 이미 컨텍스트에 있는 것에서만 답변합니다. Claude는 측면 질문에 답할 때 파일을 읽거나, 명령을 실행하거나, 검색할 수 없습니다.

316* **단일 응답**: 후속 턴이 없습니다. 왕복이 필요하면 대신 일반 프롬프트를 사용하세요.

317* **낮은 비용**: 측면 질문은 부모 대화의 프롬프트 캐시를 재사용하므로 추가 비용은 최소입니다.

318 

319**Space**, **Enter** 또는 **Escape**를 눌러 답변을 해제하고 프롬프트로 돌아가세요.

320 

321`/btw`는 [subagent](/ko/sub-agents)의 역입니다: 전체 대화를 보지만 도구가 없는 반면, subagent는 전체 도구를 가지지만 빈 컨텍스트로 시작합니다. `/btw`를 사용하여 Claude가 이 세션에서 이미 알고 있는 것에 대해 질문하세요; subagent를 사용하여 새로운 것을 찾아내세요.

322 

323## 작업 목록

324 

325복잡한 다단계 작업을 수행할 때 Claude는 진행 상황을 추적하기 위해 작업 목록을 만듭니다. 작업은 터미널의 상태 영역에 표시되며 보류 중, 진행 중 또는 완료된 항목을 나타내는 표시기가 있습니다.

326 

327* `Ctrl+T`를 눌러 작업 목록 보기를 토글하세요. 디스플레이는 한 번에 최대 5개의 작업을 표시합니다

328* 모든 작업을 보거나 지우려면 Claude에 직접 요청하세요: "show me all tasks" 또는 "clear all tasks"

329* 작업은 컨텍스트 압축 전체에서 지속되어 Claude가 더 큰 프로젝트에서 조직화된 상태를 유지하도록 도와줍니다

330* 세션 간에 작업 목록을 공유하려면 `CLAUDE_CODE_TASK_LIST_ID`를 `~/.claude/tasks/`의 명명된 디렉토리로 사용하도록 설정하세요: `CLAUDE_CODE_TASK_LIST_ID=my-project claude`

331 

332## 세션 요약

333 

334터미널에서 떠난 후 돌아오면 Claude Code는 지금까지 세션에서 일어난 일에 대한 한 줄 요약을 표시합니다. 요약은 마지막 완료된 턴 이후 최소 3분이 경과하고 터미널이 포커스를 잃으면 백그라운드에서 생성되므로 다시 전환할 때 준비됩니다. 요약은 세션에 최소 3개의 턴이 있을 때만 나타나며 연속으로 두 번 나타나지 않습니다.

335 

336`/recap`을 실행하여 요약을 요청 시 생성합니다. 자동 요약을 끄려면 `/config`를 열고 **세션 요약**을 비활성화하세요.

337 

338세션 요약은 모든 요금제 및 제공자에 대해 기본적으로 켜져 있습니다. 요약은 항상 비대화형 모드에서 건너뜁니다.

339 

340## PR 검토 상태

341 

342열린 풀 요청이 있는 브랜치에서 작업할 때 Claude Code는 바닥글에 클릭 가능한 PR 링크를 표시합니다 (예: "PR #446"). 링크에는 검토 상태를 나타내는 색상 있는 밑줄이 있습니다:

343 

344* 녹색: 승인됨

345* 노란색: 검토 대기 중

346* 빨간색: 변경 요청됨

347* 회색: 초안

348* 보라색: 병합됨

349 

350`Cmd+click` (Mac) 또는 `Ctrl+click` (Windows/Linux)으로 링크를 클릭하여 브라우저에서 풀 요청을 열 수 있습니다. 상태는 60초마다 자동으로 업데이트됩니다.

351 

352<Note>

353 PR 상태는 `gh` CLI가 설치되고 인증되어야 합니다 (`gh auth login`).

354</Note>

355 

356## 참고 항목

357 

358* [Skills](/ko/skills) - 사용자 정의 프롬프트 및 워크플로우

359* [Checkpointing](/ko/checkpointing) - Claude의 편집 되돌리기 및 이전 상태 복원

360* [CLI 참조](/ko/cli-reference) - 명령줄 플래그 및 옵션

361* [설정](/ko/settings) - 구성 옵션

362* [메모리 관리](/ko/memory) - CLAUDE.md 파일 관리

jetbrains.md +192 −0 created

Details

1> ## Documentation Index

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

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

4 

5# JetBrains IDEs

6 

7> Claude Code를 IntelliJ, PyCharm, WebStorm 등 JetBrains IDE와 함께 사용합니다

8 

9Claude Code는 전용 플러그인을 통해 JetBrains IDE와 통합되며, 대화형 diff 보기, 선택 영역 컨텍스트 공유 등의 기능을 제공합니다.

10 

11## 지원되는 IDE

12 

13Claude Code 플러그인은 다음을 포함한 대부분의 JetBrains IDE와 호환됩니다:

14 

15* IntelliJ IDEA

16* PyCharm

17* Android Studio

18* WebStorm

19* PhpStorm

20* GoLand

21 

22## 기능

23 

24* **빠른 실행**: `Cmd+Esc` (Mac) 또는 `Ctrl+Esc` (Windows/Linux)를 사용하여 편집기에서 직접 Claude Code를 열거나, UI의 Claude Code 버튼을 클릭합니다

25* **Diff 보기**: 코드 변경 사항을 터미널 대신 IDE diff 뷰어에 직접 표시할 수 있습니다

26* **선택 영역 컨텍스트**: IDE의 현재 선택 영역 또는 탭이 Claude Code와 자동으로 공유됩니다

27* **파일 참조 바로가기**: `Cmd+Option+K` (Mac) 또는 `Alt+Ctrl+K` (Linux/Windows)를 사용하여 `@src/auth.ts#L1-99`와 같은 파일 참조를 삽입합니다

28* **진단 공유**: IDE의 진단 오류 (lint 및 구문 오류 등)가 작업할 때 Claude와 자동으로 공유됩니다

29 

30## 설치

31 

32### 마켓플레이스 설치

33 

34JetBrains 마켓플레이스에서 [Claude Code 플러그인](https://plugins.jetbrains.com/plugin/27310-claude-code-beta-)을 찾아 설치하고 IDE를 다시 시작합니다.

35 

36Claude Code를 아직 설치하지 않았다면, [빠른 시작 가이드](/ko/quickstart)에서 설치 지침을 참조하세요.

37 

38<Note>

39 플러그인을 설치한 후 IDE를 완전히 다시 시작해야 적용될 수 있습니다.

40</Note>

41 

42## 사용법

43 

44### IDE에서

45 

46IDE의 통합 터미널에서 `claude`를 실행하면 모든 통합 기능이 활성화됩니다.

47 

48### 외부 터미널에서

49 

50모든 외부 터미널에서 `/ide` 명령을 사용하여 Claude Code를 JetBrains IDE에 연결하고 모든 기능을 활성화합니다:

51 

52```bash theme={null}

53claude

54```

55 

56```text theme={null}

57/ide

58```

59 

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

61 

62## 구성

63 

64### Claude Code 설정

65 

66Claude Code의 설정을 통해 IDE 통합을 구성합니다:

67 

681. `claude` 실행

692. `/config` 명령 입력

703. diff 도구를 `auto`로 설정하여 IDE에서 diff를 표시하거나, `terminal`로 설정하여 터미널에 유지합니다

71 

72### 플러그인 설정

73 

74\*\*설정 → 도구 → Claude Code \[Beta]\*\*로 이동하여 Claude Code 플러그인을 구성합니다:

75 

76#### 일반 설정

77 

78* **Claude 명령**: Claude를 실행할 사용자 정의 명령을 지정합니다 (예: `claude`, `/usr/local/bin/claude`, 또는 `npx @anthropic-ai/claude-code`)

79* **Claude 명령을 찾을 수 없음에 대한 알림 표시 안 함**: Claude 명령을 찾을 수 없다는 알림을 건너뜁니다

80* **다중 줄 프롬프트에 Option+Enter 사용 활성화**: macOS만 해당합니다. 활성화되면 Option+Enter가 Claude Code 프롬프트에 새 줄을 삽입합니다. Option 키가 예기치 않게 캡처되는 문제가 발생하면 비활성화합니다. 터미널 다시 시작이 필요합니다.

81* **자동 업데이트 활성화**: 플러그인 업데이트를 자동으로 확인하고 설치합니다. 다시 시작 시 적용됩니다.

82 

83<Tip>

84 WSL 사용자의 경우: Claude 명령으로 `wsl -d Ubuntu -- bash -lic "claude"`를 설정합니다 (`Ubuntu`를 WSL 배포판 이름으로 바꿉니다)

85</Tip>

86 

87#### ESC 키 구성

88 

89ESC 키가 JetBrains 터미널에서 Claude Code 작업을 중단하지 않는 경우:

90 

911. **설정 → 도구 → 터미널**로 이동합니다

922. 다음 중 하나를 수행합니다:

93 * "Escape로 편집기에 포커스 이동" 선택 해제, 또는

94 * "터미널 키 바인딩 구성"을 클릭하고 "편집기로 포커스 전환" 바로가기 삭제

953. 변경 사항을 적용합니다

96 

97이렇게 하면 ESC 키가 Claude Code 작업을 제대로 중단할 수 있습니다.

98 

99## 특수 구성

100 

101### 원격 개발

102 

103<Warning>

104 JetBrains 원격 개발을 사용할 때는 \*\*설정 → 플러그인 (호스트)\*\*를 통해 원격 호스트에 플러그인을 설치해야 합니다.

105</Warning>

106 

107플러그인은 로컬 클라이언트 머신이 아닌 원격 호스트에 설치해야 합니다.

108 

109### WSL 구성

110 

111Claude Code를 WSL2의 JetBrains IDE와 함께 사용하고 "사용 가능한 IDE가 감지되지 않음"이 표시되는 경우, 원인은 일반적으로 WSL2의 NAT 네트워킹 또는 Windows 방화벽이 WSL2와 Windows 호스트에서 실행 중인 IDE 간의 연결을 차단하기 때문입니다. WSL1은 호스트의 네트워크를 직접 사용하므로 영향을 받지 않습니다.

112 

113#### Windows 방화벽을 통해 WSL2 트래픽 허용

114 

115이것이 권장되는 해결책입니다. 기존 WSL2 네트워킹 모드를 유지하기 때문입니다.

116 

117<Steps>

118 <Step title="WSL2 IP 주소 찾기">

119 WSL 셸 내에서 다음을 실행합니다:

120 

121 ```bash theme={null}

122 hostname -I

123 ```

124 

125 서브넷을 기록합니다. 예를 들어 `172.21.123.45`는 `172.21.0.0/16`에 있습니다.

126 </Step>

127 

128 <Step title="방화벽 규칙 만들기">

129 PowerShell을 관리자로 열고 다음을 실행합니다. IP 범위를 서브넷과 일치하도록 조정합니다:

130 

131 ```powershell theme={null}

132 New-NetFirewallRule -DisplayName "Allow WSL2 Internal Traffic" -Direction Inbound -Protocol TCP -Action Allow -RemoteAddress 172.21.0.0/16 -LocalAddress 172.21.0.0/16

133 ```

134 </Step>

135 

136 <Step title="IDE 및 Claude Code 다시 시작">

137 새 규칙이 적용되도록 둘 다 닫았다가 다시 엽니다.

138 </Step>

139</Steps>

140 

141#### WSL2를 미러링된 네트워킹으로 전환

142 

143미러링된 네트워킹에는 Windows 11 22H2 이상이 필요합니다. Windows 10을 사용 중이면 대신 위의 방화벽 규칙을 사용합니다.

144 

145Windows 사용자 디렉터리의 `.wslconfig`에 다음을 추가합니다:

146 

147```ini theme={null}

148[wsl2]

149networkingMode=mirrored

150```

151 

152그런 다음 PowerShell에서 `wsl --shutdown`으로 WSL을 다시 시작합니다.

153 

154## 문제 해결

155 

156### 플러그인이 작동하지 않음

157 

158플러그인이 설치되었지만 Claude Code 기능이 IDE에 나타나지 않는 경우:

159 

160* 프로젝트 루트 디렉터리에서 Claude Code를 실행 중인지 확인합니다

161* JetBrains 플러그인이 IDE 설정에서 활성화되어 있는지 확인합니다

162* IDE를 완전히 다시 시작합니다 (여러 번 수행해야 할 수 있습니다)

163* 원격 개발의 경우 플러그인이 원격 호스트에 설치되어 있는지 확인합니다

164 

165### IDE가 감지되지 않음

166 

167`claude` 실행 시 "사용 가능한 IDE가 감지되지 않음"이 표시되는 경우:

168 

169* 플러그인이 설치되고 활성화되어 있는지 확인합니다

170* IDE를 완전히 다시 시작합니다

171* 통합 터미널에서 Claude Code를 실행 중인지 확인합니다

172* WSL 사용자의 경우 위의 [WSL 구성](#wsl-구성)을 참조하세요

173 

174### 명령을 찾을 수 없음

175 

176Claude 아이콘을 클릭하면 "명령을 찾을 수 없음"이 표시되는 경우:

177 

1781. Claude Code가 설치되어 있는지 확인합니다: `claude --version`을 터미널에서 실행합니다

1792. 플러그인 설정에서 Claude 명령 경로를 구성합니다

1803. WSL 사용자의 경우 구성 섹션에서 언급한 WSL 명령 형식을 사용합니다

181 

182## 보안 고려 사항

183 

184Claude Code가 자동 편집 권한이 활성화된 JetBrains IDE에서 실행될 때, IDE에서 자동으로 실행될 수 있는 IDE 구성 파일을 수정할 수 있습니다. 이는 자동 편집 모드에서 Claude Code를 실행하는 위험을 증가시킬 수 있으며 bash 실행에 대한 Claude Code의 권한 프롬프트를 우회할 수 있습니다.

185 

186JetBrains IDE에서 실행할 때 다음을 고려합니다:

187 

188* 편집에 대한 수동 승인 모드 사용

189* Claude가 신뢰할 수 있는 프롬프트로만 사용되도록 각별히 주의

190* Claude Code가 수정할 수 있는 파일이 무엇인지 인식

191 

192Claude Code 설치 또는 로그인 문제가 IDE 외부에서 발생하는 경우 [설치 및 로그인 문제 해결](/ko/troubleshoot-install)을 참조하세요.

keybindings.md +463 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 키보드 단축키 사용자 정의

6 

7> keybindings 구성 파일을 사용하여 Claude Code에서 키보드 단축키를 사용자 정의합니다.

8 

9<Note>

10 사용자 정의 가능한 키보드 단축키는 Claude Code v2.1.18 이상이 필요합니다. `claude --version`으로 버전을 확인하세요.

11</Note>

12 

13Claude Code는 사용자 정의 가능한 키보드 단축키를 지원합니다. `/keybindings`를 실행하여 `~/.claude/keybindings.json`에서 구성 파일을 만들거나 열 수 있습니다.

14 

15## 구성 파일

16 

17keybindings 구성 파일은 `bindings` 배열이 있는 객체입니다. 각 블록은 컨텍스트와 키 입력을 작업에 매핑하는 맵을 지정합니다.

18 

19<Note>keybindings 파일의 변경 사항은 자동으로 감지되고 Claude Code를 다시 시작하지 않고도 적용됩니다.</Note>

20 

21| 필드 | 설명 |

22| :--------- | :-------------------------------- |

23| `$schema` | 편집기 자동 완성을 위한 선택적 JSON Schema URL |

24| `$docs` | 선택적 설명서 URL |

25| `bindings` | 컨텍스트별 바인딩 블록 배열 |

26 

27이 예제는 채팅 컨텍스트에서 `Ctrl+E`를 외부 편집기를 열기에 바인딩하고 `Ctrl+U`를 바인딩 해제합니다:

28 

29```json theme={null}

30{

31 "$schema": "https://www.schemastore.org/claude-code-keybindings.json",

32 "$docs": "https://code.claude.com/docs/ko/keybindings",

33 "bindings": [

34 {

35 "context": "Chat",

36 "bindings": {

37 "ctrl+e": "chat:externalEditor",

38 "ctrl+u": null

39 }

40 }

41 ]

42}

43```

44 

45## 컨텍스트

46 

47각 바인딩 블록은 바인딩이 적용되는 **컨텍스트**를 지정합니다:

48 

49| 컨텍스트 | 설명 |

50| :---------------- | :------------------------- |

51| `Global` | 앱의 모든 곳에 적용됨 |

52| `Chat` | 주 채팅 입력 영역 |

53| `Autocomplete` | 자동 완성 메뉴가 열려 있음 |

54| `Settings` | 설정 메뉴 |

55| `Confirmation` | 권한 및 확인 대화 상자 |

56| `Tabs` | 탭 네비게이션 구성 요소 |

57| `Help` | 도움말 메뉴가 표시됨 |

58| `Transcript` | 트랜스크립트 뷰어 |

59| `HistorySearch` | 기록 검색 모드(Ctrl+R) |

60| `Task` | 백그라운드 작업이 실행 중 |

61| `ThemePicker` | 테마 선택기 대화 상자 |

62| `Attachments` | 이미지 첨부 파일 네비게이션 선택 대화 상자 |

63| `Footer` | 바닥글 표시기 네비게이션(작업, 팀, diff) |

64| `MessageSelector` | 되돌리기 및 요약 대화 상자 메시지 선택 |

65| `DiffDialog` | Diff 뷰어 네비게이션 |

66| `ModelPicker` | 모델 선택기 노력 수준 |

67| `Select` | 일반 선택/목록 구성 요소 |

68| `Plugin` | 플러그인 대화 상자(찾아보기, 발견, 관리) |

69| `Scroll` | 전체 화면 모드에서 대화 스크롤 및 텍스트 선택 |

70| `Doctor` | `/doctor` 진단 화면 |

71 

72## 사용 가능한 작업

73 

74작업은 `namespace:action` 형식을 따릅니다. 예를 들어 `chat:submit`은 메시지를 보내고 `app:toggleTodos`는 작업 목록을 표시합니다. 각 컨텍스트에는 사용 가능한 특정 작업이 있습니다.

75 

76### 앱 작업

77 

78`Global` 컨텍스트에서 사용 가능한 작업:

79 

80| 작업 | 기본값 | 설명 |

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

82| `app:interrupt` | Ctrl+C | 현재 작업 취소 |

83| `app:exit` | Ctrl+D | Claude Code 종료 |

84| `app:redraw` | (바인딩 해제됨) | 터미널 다시 그리기 강제 |

85| `app:toggleTodos` | Ctrl+T | 작업 목록 표시 여부 전환 |

86| `app:toggleTranscript` | Ctrl+O | 상세 트랜스크립트 전환 |

87 

88### 기록 작업

89 

90명령 기록을 탐색하기 위한 작업:

91 

92| 작업 | 기본값 | 설명 |

93| :----------------- | :----- | :------- |

94| `history:search` | Ctrl+R | 기록 검색 열기 |

95| `history:previous` | Up | 이전 기록 항목 |

96| `history:next` | Down | 다음 기록 항목 |

97 

98### 채팅 작업

99 

100`Chat` 컨텍스트에서 사용 가능한 작업:

101 

102| 작업 | 기본값 | 설명 |

103| :-------------------- | :----------------------- | :------------------------------------------------------------------------------------------------------------- |

104| `chat:cancel` | Escape | 현재 입력 취소 |

105| `chat:clearInput` | Ctrl+L | 입력을 유지하면서 전체 화면을 다시 그리기 강제합니다. [전체 화면 렌더링](/ko/fullscreen#clear-the-conversation)에서 2초 이내에 두 번 누르면 `/clear` 실행 |

106| `chat:clearScreen` | Cmd+K | [전체 화면 렌더링](/ko/fullscreen#clear-the-conversation)에서 2초 이내에 두 번 누르면 `/clear` 실행 |

107| `chat:killAgents` | Ctrl+X Ctrl+K | 모든 백그라운드 에이전트 종료 |

108| `chat:cycleMode` | Shift+Tab\* | 권한 모드 순환 |

109| `chat:modelPicker` | Meta+P | 모델 선택기 열기 |

110| `chat:fastMode` | Meta+O | 빠른 모드 전환 |

111| `chat:thinkingToggle` | Meta+T | 확장 사고 전환 |

112| `chat:submit` | Enter | 메시지 제출 |

113| `chat:newline` | Ctrl+J | 제출하지 않고 줄 바꿈 삽입 |

114| `chat:undo` | Ctrl+\_, Ctrl+Shift+- | 마지막 작업 실행 취소 |

115| `chat:externalEditor` | Ctrl+G, Ctrl+X Ctrl+E | 외부 편집기에서 열기 |

116| `chat:stash` | Ctrl+S | 현재 프롬프트 숨기기 |

117| `chat:imagePaste` | Ctrl+V (Windows에서 Alt+V) | 이미지 붙여넣기 |

118 

119\*VT 모드가 없는 Windows에서(Node \<24.2.0/\<22.17.0, Bun \<1.2.23), 기본값은 Meta+M입니다.

120 

121### 자동 완성 작업

122 

123`Autocomplete` 컨텍스트에서 사용 가능한 작업:

124 

125| 작업 | 기본값 | 설명 |

126| :---------------------- | :----- | :---- |

127| `autocomplete:accept` | Tab | 제안 수락 |

128| `autocomplete:dismiss` | Escape | 메뉴 닫기 |

129| `autocomplete:previous` | Up | 이전 제안 |

130| `autocomplete:next` | Down | 다음 제안 |

131 

132### 확인 작업

133 

134`Confirmation` 컨텍스트에서 사용 가능한 작업:

135 

136| 작업 | 기본값 | 설명 |

137| :-------------------------- | :-------- | :------- |

138| `confirm:yes` | Y, Enter | 작업 확인 |

139| `confirm:no` | N, Escape | 작업 거부 |

140| `confirm:previous` | Up | 이전 옵션 |

141| `confirm:next` | Down | 다음 옵션 |

142| `confirm:nextField` | Tab | 다음 필드 |

143| `confirm:previousField` | (바인딩 해제됨) | 이전 필드 |

144| `confirm:toggle` | Space | 선택 전환 |

145| `confirm:cycleMode` | Shift+Tab | 권한 모드 순환 |

146| `confirm:toggleExplanation` | Ctrl+E | 권한 설명 전환 |

147 

148### 권한 작업

149 

150권한 대화 상자의 `Confirmation` 컨텍스트에서 사용 가능한 작업:

151 

152| 작업 | 기본값 | 설명 |

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

154| `permission:toggleDebug` | Ctrl+D | 권한 디버그 정보 전환 |

155 

156### 트랜스크립트 작업

157 

158`Transcript` 컨텍스트에서 사용 가능한 작업:

159 

160| 작업 | 기본값 | 설명 |

161| :------------------------- | :---------------- | :----------- |

162| `transcript:toggleShowAll` | Ctrl+E | 모든 콘텐츠 표시 전환 |

163| `transcript:exit` | q, Ctrl+C, Escape | 트랜스크립트 보기 종료 |

164 

165### 기록 검색 작업

166 

167`HistorySearch` 컨텍스트에서 사용 가능한 작업:

168 

169| 작업 | 기본값 | 설명 |

170| :------------------------- | :---------- | :-------------------- |

171| `historySearch:next` | Ctrl+R | 다음 일치 항목 |

172| `historySearch:accept` | Escape, Tab | 선택 수락 |

173| `historySearch:cancel` | Ctrl+C | 검색 취소 |

174| `historySearch:execute` | Enter | 선택한 명령 실행 |

175| `historySearch:cycleScope` | Ctrl+S | 범위 순환: 세션, 프로젝트, 모든 곳 |

176 

177### 작업 작업

178 

179`Task` 컨텍스트에서 사용 가능한 작업:

180 

181| 작업 | 기본값 | 설명 |

182| :---------------- | :----- | :--------------- |

183| `task:background` | Ctrl+B | 현재 작업을 백그라운드로 이동 |

184 

185### 테마 작업

186 

187`ThemePicker` 컨텍스트에서 사용 가능한 작업:

188 

189| 작업 | 기본값 | 설명 |

190| :------------------------------- | :----- | :------- |

191| `theme:toggleSyntaxHighlighting` | Ctrl+T | 구문 강조 전환 |

192 

193### 도움말 작업

194 

195`Help` 컨텍스트에서 사용 가능한 작업:

196 

197| 작업 | 기본값 | 설명 |

198| :------------- | :----- | :-------- |

199| `help:dismiss` | Escape | 도움말 메뉴 닫기 |

200 

201### 탭 작업

202 

203`Tabs` 컨텍스트에서 사용 가능한 작업:

204 

205| 작업 | 기본값 | 설명 |

206| :-------------- | :-------------- | :--- |

207| `tabs:next` | Tab, Right | 다음 탭 |

208| `tabs:previous` | Shift+Tab, Left | 이전 탭 |

209 

210### 첨부 파일 작업

211 

212`Attachments` 컨텍스트에서 사용 가능한 작업:

213 

214| 작업 | 기본값 | 설명 |

215| :--------------------- | :---------------- | :------------- |

216| `attachments:next` | Right | 다음 첨부 파일 |

217| `attachments:previous` | Left | 이전 첨부 파일 |

218| `attachments:remove` | Backspace, Delete | 선택한 첨부 파일 제거 |

219| `attachments:exit` | Down, Escape | 첨부 파일 네비게이션 종료 |

220 

221### 바닥글 작업

222 

223`Footer` 컨텍스트에서 사용 가능한 작업:

224 

225| 작업 | 기본값 | 설명 |

226| :---------------------- | :----- | :-------------------------- |

227| `footer:next` | Right | 다음 바닥글 항목 |

228| `footer:previous` | Left | 이전 바닥글 항목 |

229| `footer:up` | Up | 바닥글에서 위로 네비게이션(맨 위에서 선택 해제) |

230| `footer:down` | Down | 바닥글에서 아래로 네비게이션 |

231| `footer:openSelected` | Enter | 선택한 바닥글 항목 열기 |

232| `footer:clearSelection` | Escape | 바닥글 선택 지우기 |

233 

234### 메시지 선택기 작업

235 

236`MessageSelector` 컨텍스트에서 사용 가능한 작업:

237 

238| 작업 | 기본값 | 설명 |

239| :----------------------- | :---------------------------------------- | :---------- |

240| `messageSelector:up` | Up, K, Ctrl+P | 목록에서 위로 이동 |

241| `messageSelector:down` | Down, J, Ctrl+N | 목록에서 아래로 이동 |

242| `messageSelector:top` | Ctrl+Up, Shift+Up, Meta+Up, Shift+K | 맨 위로 이동 |

243| `messageSelector:bottom` | Ctrl+Down, Shift+Down, Meta+Down, Shift+J | 맨 아래로 이동 |

244| `messageSelector:select` | Enter | 메시지 선택 |

245 

246### Diff 작업

247 

248`DiffDialog` 컨텍스트에서 사용 가능한 작업:

249 

250| 작업 | 기본값 | 설명 |

251| :-------------------- | :------ | :-------------- |

252| `diff:dismiss` | Escape | Diff 뷰어 닫기 |

253| `diff:previousSource` | Left | 이전 diff 소스 |

254| `diff:nextSource` | Right | 다음 diff 소스 |

255| `diff:previousFile` | Up | Diff의 이전 파일 |

256| `diff:nextFile` | Down | Diff의 다음 파일 |

257| `diff:viewDetails` | Enter | Diff 세부 정보 보기 |

258| `diff:back` | (컨텍스트별) | Diff 뷰어에서 뒤로 이동 |

259 

260### 모델 선택기 작업

261 

262`ModelPicker` 컨텍스트에서 사용 가능한 작업:

263 

264| 작업 | 기본값 | 설명 |

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

266| `modelPicker:decreaseEffort` | Left | 노력 수준 감소 |

267| `modelPicker:increaseEffort` | Right | 노력 수준 증가 |

268 

269### 선택 작업

270 

271`Select` 컨텍스트에서 사용 가능한 작업:

272 

273| 작업 | 기본값 | 설명 |

274| :---------------- | :-------------- | :---- |

275| `select:next` | Down, J, Ctrl+N | 다음 옵션 |

276| `select:previous` | Up, K, Ctrl+P | 이전 옵션 |

277| `select:accept` | Enter | 선택 수락 |

278| `select:cancel` | Escape | 선택 취소 |

279 

280### 플러그인 작업

281 

282`Plugin` 컨텍스트에서 사용 가능한 작업:

283 

284| 작업 | 기본값 | 설명 |

285| :---------------- | :---- | :---------------------------------------- |

286| `plugin:toggle` | Space | 플러그인 선택 전환 |

287| `plugin:install` | I | 선택한 플러그인 설치 |

288| `plugin:favorite` | F | 선택한 플러그인을 즐겨찾기로 설정하여 설치된 탭 상단 근처에 정렬되도록 함 |

289 

290### 설정 작업

291 

292`Settings` 컨텍스트에서 사용 가능한 작업:

293 

294| 작업 | 기본값 | 설명 |

295| :---------------- | :---- | :----------------------------------------------- |

296| `settings:search` | / | 검색 모드 진입 |

297| `settings:retry` | R | 사용량 데이터 다시 로드(오류 시) |

298| `settings:close` | Enter | 변경 사항을 저장하고 구성 패널을 닫습니다. Escape는 변경 사항을 버리고 닫습니다 |

299 

300### Doctor 작업

301 

302`Doctor` 컨텍스트에서 사용 가능한 작업:

303 

304| 작업 | 기본값 | 설명 |

305| :----------- | :-- | :-------------------------------------------------- |

306| `doctor:fix` | F | 진단 보고서를 Claude에 보내 보고된 문제를 해결합니다. 문제가 발견되었을 때만 활성화됨 |

307 

308### 음성 작업

309 

310[음성 받아쓰기](/ko/voice-dictation)가 활성화되었을 때 `Chat` 컨텍스트에서 사용 가능한 작업:

311 

312| 작업 | 기본값 | 설명 |

313| :----------------- | :---- | :------------------- |

314| `voice:pushToTalk` | Space | 프롬프트를 받아쓰기 위해 누르고 있기 |

315 

316### 스크롤 작업

317 

318[전체 화면 렌더링](/ko/fullscreen)이 활성화되었을 때 `Scroll` 컨텍스트에서 사용 가능한 작업:

319 

320| 작업 | 기본값 | 설명 |

321| :-------------------------- | :------------------- | :----------------------------------------------------------------------- |

322| `scroll:lineUp` | (바인딩 해제됨) | 한 줄 위로 스크롤합니다. 마우스 휠 스크롤이 이 작업을 트리거합니다 |

323| `scroll:lineDown` | (바인딩 해제됨) | 한 줄 아래로 스크롤합니다. 마우스 휠 스크롤이 이 작업을 트리거합니다 |

324| `scroll:pageUp` | PageUp | 뷰포트 높이의 절반만큼 위로 스크롤 |

325| `scroll:pageDown` | PageDown | 뷰포트 높이의 절반만큼 아래로 스크롤 |

326| `scroll:top` | Ctrl+Home | 대화의 시작으로 이동 |

327| `scroll:bottom` | Ctrl+End | 최신 메시지로 이동하고 자동 팔로우 다시 활성화 |

328| `scroll:halfPageUp` | (바인딩 해제됨) | 뷰포트 높이의 절반만큼 위로 스크롤합니다. `scroll:pageUp`과 동일한 동작이며 vi 스타일 재바인딩을 위해 제공됨 |

329| `scroll:halfPageDown` | (바인딩 해제됨) | 뷰포트 높이의 절반만큼 아래로 스크롤합니다. `scroll:pageDown`과 동일한 동작이며 vi 스타일 재바인딩을 위해 제공됨 |

330| `scroll:fullPageUp` | (바인딩 해제됨) | 전체 뷰포트 높이만큼 위로 스크롤 |

331| `scroll:fullPageDown` | (바인딩 해제됨) | 전체 뷰포트 높이만큼 아래로 스크롤 |

332| `selection:copy` | Ctrl+Shift+C / Cmd+C | 선택한 텍스트를 클립보드에 복사 |

333| `selection:clear` | (바인딩 해제됨) | 활성 텍스트 선택 지우기 |

334| `selection:extendLeft` | Shift+Left | 활성 선택을 한 열 왼쪽으로 확장 |

335| `selection:extendRight` | Shift+Right | 활성 선택을 한 열 오른쪽으로 확장 |

336| `selection:extendUp` | Shift+Up | 활성 선택을 한 행 위로 확장합니다. 선택이 상단 가장자리에 도달하면 뷰포트를 스크롤합니다 |

337| `selection:extendDown` | Shift+Down | 활성 선택을 한 행 아래로 확장합니다. 선택이 하단 가장자리에 도달하면 뷰포트를 스크롤합니다 |

338| `selection:extendLineStart` | Shift+Home | 활성 선택을 줄의 시작으로 확장 |

339| `selection:extendLineEnd` | Shift+End | 활성 선택을 줄의 끝으로 확장 |

340 

341## 키 입력 구문

342 

343### 수정자

344 

345`+` 구분자로 수정자 키를 사용합니다:

346 

347* `ctrl` 또는 `control` - Control 키

348* `shift` - Shift 키

349* `alt`, `opt`, `option`, 또는 `meta` - Windows 및 Linux의 Alt 키, macOS의 Option 키

350* `cmd`, `command`, `super`, 또는 `win` - macOS의 Command 키, Windows의 Windows 키, Linux의 Super 키

351 

352`cmd` 그룹은 Kitty 키보드 프로토콜 또는 xterm의 `modifyOtherKeys` 모드를 지원하는 것과 같이 Super 수정자를 보고하는 터미널에서만 감지됩니다. 대부분의 터미널은 이를 전송하지 않으므로 모든 곳에서 작동하기를 원하는 바인딩에는 `ctrl` 또는 `meta`를 사용합니다.

353 

354예를 들어:

355 

356```text theme={null}

357ctrl+k Ctrl + K

358shift+tab Shift + Tab

359meta+p macOS의 Option + P, 다른 곳의 Alt + P

360ctrl+shift+c 여러 수정자

361```

362 

363### 대문자

364 

365독립 실행형 대문자는 Shift를 의미합니다. 예를 들어 `K`는 `shift+k`와 동일합니다. 이는 대문자와 소문자 키가 다른 의미를 갖는 vim 스타일 바인딩에 유용합니다.

366 

367수정자가 있는 대문자(예: `ctrl+K`)는 스타일 지정으로 처리되며 Shift를 의미하지 **않습니다**: `ctrl+K`는 `ctrl+k`와 동일합니다.

368 

369### 코드

370 

371코드는 공백으로 구분된 키 입력 시퀀스입니다:

372 

373```text theme={null}

374ctrl+k ctrl+s Ctrl+K를 누르고 놓은 다음 Ctrl+S를 누릅니다

375```

376 

377### 특수 키

378 

379* `escape` 또는 `esc` - Escape 키

380* `enter` 또는 `return` - Enter 키

381* `tab` - Tab 키

382* `space` - 스페이스바

383* `up`, `down`, `left`, `right` - 화살표 키

384* `backspace`, `delete` - Delete 키

385 

386## 기본 단축키 바인딩 해제

387 

388작업을 `null`로 설정하여 기본 단축키를 바인딩 해제합니다:

389 

390```json theme={null}

391{

392 "bindings": [

393 {

394 "context": "Chat",

395 "bindings": {

396 "ctrl+s": null

397 }

398 }

399 ]

400}

401```

402 

403이는 코드 바인딩에도 작동합니다. 접두사를 공유하는 모든 코드를 바인딩 해제하면 해당 접두사를 단일 키 바인딩으로 사용할 수 있습니다:

404 

405```json theme={null}

406{

407 "bindings": [

408 {

409 "context": "Chat",

410 "bindings": {

411 "ctrl+x ctrl+k": null,

412 "ctrl+x ctrl+e": null,

413 "ctrl+x": "chat:newline"

414 }

415 }

416 ]

417}

418```

419 

420접두사의 일부 코드만 바인딩 해제하고 다른 코드는 바인딩 해제하지 않으면 접두사를 누르면 여전히 남은 바인딩에 대해 코드 대기 모드로 진입합니다.

421 

422## 예약된 단축키

423 

424이러한 단축키는 다시 바인딩할 수 없습니다:

425 

426| 단축키 | 이유 |

427| :-------- | :------------------------ |

428| Ctrl+C | 하드코딩된 중단/취소 |

429| Ctrl+D | 하드코딩된 종료 |

430| Ctrl+M | 터미널의 Enter와 동일(둘 다 CR 전송) |

431| Caps Lock | 터미널 애플리케이션에 전달되지 않음 |

432 

433## 터미널 충돌

434 

435일부 단축키는 터미널 멀티플렉서와 충돌할 수 있습니다:

436 

437| 단축키 | 충돌 |

438| :----- | :----------------------- |

439| Ctrl+B | tmux 접두사(두 번 눌러서 보내기) |

440| Ctrl+A | GNU screen 접두사 |

441| Ctrl+Z | Unix 프로세스 일시 중단(SIGTSTP) |

442 

443## Vim 모드 상호 작용

444 

445vim 모드가 `/config` → 편집기 모드를 통해 활성화되면 키바인딩과 vim 모드는 독립적으로 작동합니다:

446 

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

448* **키바인딩**은 구성 요소 수준에서 작업을 처리합니다(작업 전환, 제출 등).

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

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

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

452 

453## 유효성 검사

454 

455Claude Code는 키바인딩을 검증하고 다음에 대한 경고를 표시합니다:

456 

457* 구문 분석 오류(잘못된 JSON 또는 구조)

458* 잘못된 컨텍스트 이름

459* 예약된 단축키 충돌

460* 터미널 멀티플렉서 충돌

461* 동일한 컨텍스트의 중복 바인딩

462 

463`/doctor`를 실행하여 키바인딩 경고를 확인합니다.

llm-gateway.md +196 −0 created

Details

1> ## Documentation Index

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

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

4 

5# LLM gateway 구성

6 

7> Claude Code를 LLM gateway 솔루션과 함께 작동하도록 구성하는 방법을 알아봅니다. Gateway 요구사항, 인증 구성, 모델 선택 및 공급자별 엔드포인트 설정을 다룹니다.

8 

9LLM gateway는 Claude Code와 모델 공급자 간의 중앙 집중식 프록시 계층을 제공하며, 종종 다음을 제공합니다:

10 

11* **중앙 집중식 인증** - API 키 관리를 위한 단일 지점

12* **사용량 추적** - 팀 및 프로젝트 전체의 사용량 모니터링

13* **비용 제어** - 예산 및 속도 제한 구현

14* **감사 로깅** - 규정 준수를 위한 모든 모델 상호작용 추적

15* **모델 라우팅** - 코드 변경 없이 공급자 간 전환

16 

17## Gateway 요구사항

18 

19LLM gateway가 Claude Code와 함께 작동하려면 다음 요구사항을 충족해야 합니다:

20 

21**API 형식**

22 

23Gateway는 클라이언트에 다음 API 형식 중 최소 하나를 노출해야 합니다:

24 

251. **Anthropic Messages**: `/v1/messages`, `/v1/messages/count_tokens`

26 * 요청 헤더를 전달해야 함: `anthropic-beta`, `anthropic-version`

27 

282. **Bedrock InvokeModel**: `/invoke`, `/invoke-with-response-stream`

29 * 요청 본문 필드를 보존해야 함: `anthropic_beta`, `anthropic_version`

30 

313. **Vertex rawPredict**: `:rawPredict`, `:streamRawPredict`, `/count-tokens:rawPredict`

32 * 요청 헤더를 전달해야 함: `anthropic-beta`, `anthropic-version`

33 

34헤더를 전달하지 않거나 본문 필드를 보존하지 않으면 기능이 감소하거나 Claude Code 기능을 사용할 수 없을 수 있습니다.

35 

36<Note>

37 Claude Code는 API 형식을 기반으로 활성화할 기능을 결정합니다. Bedrock 또는 Vertex와 함께 Anthropic Messages 형식을 사용할 때 환경 변수 `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`을 설정해야 할 수 있습니다.

38</Note>

39 

40**요청 헤더**

41 

42Claude Code는 모든 API 요청에 다음 헤더를 포함합니다:

43 

44| 헤더 | 설명 |

45| :------------------------- | :----------------------------------------------------------------------------------------- |

46| `X-Claude-Code-Session-Id` | 현재 Claude Code 세션의 고유 식별자입니다. 프록시는 이를 사용하여 요청 본문을 구문 분석하지 않고 단일 세션의 모든 API 요청을 집계할 수 있습니다. |

47 

48Claude Code는 또한 클라이언트 버전과 대화에서 파생된 지문을 포함하는 짧은 속성 블록을 시스템 프롬프트 앞에 추가합니다. Anthropic API는 처리 전에 이 블록을 제거하므로 자사 프롬프트 캐싱에 영향을 주지 않습니다. Gateway가 전체 요청 본문을 기반으로 키가 지정된 자체 프롬프트 캐시를 구현하는 경우 [`CLAUDE_CODE_ATTRIBUTION_HEADER=0`](/ko/env-vars)을 설정하여 이를 생략합니다.

49 

50## 구성

51 

52### 모델 선택

53 

54기본적으로 Claude Code는 선택한 API 형식에 대해 표준 모델 이름을 사용합니다.

55 

56`ANTHROPIC_BASE_URL`이 Anthropic Messages 형식을 노출하는 게이트웨이를 가리킬 때, Claude Code는 시작 시 게이트웨이의 `/v1/models` 엔드포인트를 쿼리하고 반환된 모델을 `/model` 선택기에 추가합니다. 발견된 각 항목은 "From gateway"로 레이블이 지정되며, 응답에서 제공될 때 `display_name` 필드를 사용합니다. 이는 Claude Code v2.1.126 이상이 필요합니다.

57 

58발견은 Anthropic Messages 형식에만 적용됩니다. Bedrock 또는 Vertex 통과 엔드포인트에서는 실행되지 않으며, `ANTHROPIC_BASE_URL`이 설정되지 않았거나 `api.anthropic.com`을 가리킬 때도 실행되지 않습니다.

59 

60발견 요청은 추론 요청과 동일한 방식으로 인증됩니다. 인증 토큰이 설정되지 않았을 때 `ANTHROPIC_AUTH_TOKEN`을 베어러 토큰으로 또는 `ANTHROPIC_API_KEY`를 `x-api-key` 헤더로 보내며, `ANTHROPIC_CUSTOM_HEADERS`의 모든 헤더와 함께 보냅니다. ID가 `claude` 또는 `anthropic`으로 시작하는 모델만 선택기에 추가됩니다. 결과는 `~/.claude/cache/gateway-models.json`에 캐시되며 각 시작 시 새로고침됩니다. 요청이 실패하거나 게이트웨이가 `/v1/models`을 구현하지 않으면, 선택기는 이전 시작의 캐시된 목록 또는 기본 제공 모델 목록으로 폴백됩니다.

61 

62게이트웨이가 발견 필터와 일치하지 않는 모델 이름을 사용하는 경우, [모델 구성](/ko/model-config)에 문서화된 환경 변수를 사용하여 수동으로 추가합니다.

63 

64## LiteLLM 구성

65 

66<Warning>

67 LiteLLM PyPI 버전 1.82.7 및 1.82.8은 자격 증명 탈취 악성코드로 손상되었습니다. 이 버전들을 설치하지 마십시오. 이미 설치한 경우:

68 

69 * 패키지 제거

70 * 영향을 받은 시스템의 모든 자격 증명 회전

71 * [BerriAI/litellm#24518](https://github.com/BerriAI/litellm/issues/24518)의 복구 단계 따르기

72 

73 LiteLLM은 제3자 프록시 서비스입니다. Anthropic은 LiteLLM의 보안 또는 기능을 보증, 유지 관리 또는 감사하지 않습니다. 이 가이드는 정보 제공 목적으로 제공되며 오래될 수 있습니다. 자신의 판단에 따라 사용하십시오.

74</Warning>

75 

76### 필수 조건

77 

78* 최신 버전으로 업데이트된 Claude Code

79* 배포되고 액세스 가능한 LiteLLM Proxy Server

80* 선택한 공급자를 통한 Claude 모델 액세스

81 

82### 기본 LiteLLM 설정

83 

84**Claude Code 구성**:

85 

86#### 인증 방법

87 

88##### 정적 API 키

89 

90고정 API 키를 사용한 가장 간단한 방법:

91 

92```bash theme={null}

93# 환경에서 설정

94export ANTHROPIC_AUTH_TOKEN=sk-litellm-static-key

95 

96# 또는 Claude Code 설정에서

97{

98 "env": {

99 "ANTHROPIC_AUTH_TOKEN": "sk-litellm-static-key"

100 }

101}

102```

103 

104이 값은 `Authorization` 헤더로 전송됩니다.

105 

106##### 헬퍼를 사용한 동적 API 키

107 

108회전하는 키 또는 사용자별 인증의 경우:

109 

1101. API 키 헬퍼 스크립트를 만듭니다:

111 

112```bash theme={null}

113#!/bin/bash

114# ~/bin/get-litellm-key.sh

115 

116# 예: 자격 증명 모음에서 키 가져오기

117vault kv get -field=api_key secret/litellm/claude-code

118 

119# 예: JWT 토큰 생성

120jwt encode \

121 --secret="${JWT_SECRET}" \

122 --exp="+1h" \

123 '{"user":"'${USER}'","team":"engineering"}'

124```

125 

1262. 헬퍼를 사용하도록 Claude Code 설정을 구성합니다:

127 

128```json theme={null}

129{

130 "apiKeyHelper": "~/bin/get-litellm-key.sh"

131}

132```

133 

1343. 토큰 새로고침 간격을 설정합니다:

135 

136```bash theme={null}

137# 1시간마다 새로고침 (3600000 ms)

138export CLAUDE_CODE_API_KEY_HELPER_TTL_MS=3600000

139```

140 

141이 값은 `Authorization` 및 `X-Api-Key` 헤더로 전송됩니다. `apiKeyHelper`는 `ANTHROPIC_AUTH_TOKEN` 또는 `ANTHROPIC_API_KEY`보다 우선순위가 낮습니다.

142 

143#### 통합 엔드포인트 (권장)

144 

145LiteLLM의 [Anthropic 형식 엔드포인트](https://docs.litellm.ai/docs/anthropic_unified) 사용:

146 

147```bash theme={null}

148export ANTHROPIC_BASE_URL=https://litellm-server:4000

149```

150 

151**통합 엔드포인트의 통과 엔드포인트 대비 이점:**

152 

153* 로드 밸런싱

154* 폴백

155* 비용 추적 및 최종 사용자 추적에 대한 일관된 지원

156 

157#### 공급자별 통과 엔드포인트 (대안)

158 

159##### LiteLLM을 통한 Claude API

160 

161[통과 엔드포인트](https://docs.litellm.ai/docs/pass_through/anthropic_completion) 사용:

162 

163```bash theme={null}

164export ANTHROPIC_BASE_URL=https://litellm-server:4000/anthropic

165```

166 

167##### LiteLLM을 통한 Amazon Bedrock

168 

169[통과 엔드포인트](https://docs.litellm.ai/docs/pass_through/bedrock) 사용:

170 

171```bash theme={null}

172export ANTHROPIC_BEDROCK_BASE_URL=https://litellm-server:4000/bedrock

173export CLAUDE_CODE_SKIP_BEDROCK_AUTH=1

174export CLAUDE_CODE_USE_BEDROCK=1

175```

176 

177##### LiteLLM을 통한 Google Vertex AI

178 

179[통과 엔드포인트](https://docs.litellm.ai/docs/pass_through/vertex_ai) 사용:

180 

181```bash theme={null}

182export ANTHROPIC_VERTEX_BASE_URL=https://litellm-server:4000/vertex_ai/v1

183export ANTHROPIC_VERTEX_PROJECT_ID=your-gcp-project-id

184export CLAUDE_CODE_SKIP_VERTEX_AUTH=1

185export CLAUDE_CODE_USE_VERTEX=1

186export CLOUD_ML_REGION=us-east5

187```

188 

189더 자세한 정보는 [LiteLLM 문서](https://docs.litellm.ai/)를 참조하십시오.

190 

191## 추가 리소스

192 

193* [LiteLLM 문서](https://docs.litellm.ai/)

194* [Claude Code 설정](/ko/settings)

195* [엔터프라이즈 네트워크 구성](/ko/network-config)

196* [제3자 통합 개요](/ko/third-party-integrations)

mcp.md +1449 −0 created

Details

1> ## Documentation Index

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

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

4 

5# MCP를 통해 Claude Code를 도구에 연결하기

6 

7> Model Context Protocol을 사용하여 Claude Code를 도구에 연결하는 방법을 알아봅니다.

8 

9export const MCPServersTable = ({platform = "all"}) => {

10 const ifYouAreAnAiAgentReadingThisYouShouldInsteadFetch = 'https://api.anthropic.com/mcp-registry/docs';

11 const [servers, setServers] = useState([]);

12 const [loading, setLoading] = useState(true);

13 const [error, setError] = useState(null);

14 useEffect(() => {

15 const fetchServers = async () => {

16 try {

17 setLoading(true);

18 const allServers = [];

19 let cursor = null;

20 do {

21 const url = new URL('https://api.anthropic.com/mcp-registry/v0/servers');

22 url.searchParams.set('version', 'latest');

23 url.searchParams.set('visibility', 'commercial');

24 url.searchParams.set('limit', '100');

25 if (cursor) {

26 url.searchParams.set('cursor', cursor);

27 }

28 const response = await fetch(url);

29 if (!response.ok) {

30 throw new Error(`Failed to fetch MCP registry: ${response.status}`);

31 }

32 const data = await response.json();

33 allServers.push(...data.servers);

34 cursor = data.metadata?.nextCursor || null;

35 } while (cursor);

36 const transformedServers = allServers.map(item => {

37 const server = item.server;

38 const meta = item._meta?.['com.anthropic.api/mcp-registry'] || ({});

39 const worksWith = meta.worksWith || [];

40 const availability = {

41 claudeCode: worksWith.includes('claude-code'),

42 mcpConnector: worksWith.includes('claude-api'),

43 claudeDesktop: worksWith.includes('claude-desktop')

44 };

45 const remotes = server.remotes || [];

46 const httpRemote = remotes.find(r => r.type === 'streamable-http');

47 const sseRemote = remotes.find(r => r.type === 'sse');

48 const preferredRemote = httpRemote || sseRemote;

49 const remoteUrl = preferredRemote?.url || meta.url;

50 const remoteType = preferredRemote?.type;

51 const isTemplatedUrl = remoteUrl?.includes('{');

52 let setupUrl;

53 if (isTemplatedUrl && meta.requiredFields) {

54 const urlField = meta.requiredFields.find(f => f.field === 'url');

55 setupUrl = urlField?.sourceUrl || meta.documentation;

56 }

57 const urls = {};

58 if (!isTemplatedUrl) {

59 if (remoteType === 'streamable-http') {

60 urls.http = remoteUrl;

61 } else if (remoteType === 'sse') {

62 urls.sse = remoteUrl;

63 }

64 }

65 let envVars = [];

66 if (server.packages && server.packages.length > 0) {

67 const npmPackage = server.packages.find(p => p.registryType === 'npm');

68 if (npmPackage) {

69 urls.stdio = `npx -y ${npmPackage.identifier}`;

70 if (npmPackage.environmentVariables) {

71 envVars = npmPackage.environmentVariables;

72 }

73 }

74 }

75 return {

76 name: meta.displayName || server.title || server.name,

77 description: meta.oneLiner || server.description,

78 documentation: meta.documentation,

79 urls: urls,

80 envVars: envVars,

81 availability: availability,

82 customCommands: meta.claudeCodeCopyText ? {

83 claudeCode: meta.claudeCodeCopyText

84 } : undefined,

85 setupUrl: setupUrl

86 };

87 });

88 setServers(transformedServers);

89 setError(null);

90 } catch (err) {

91 setError(err.message);

92 console.error('Error fetching MCP registry:', err);

93 } finally {

94 setLoading(false);

95 }

96 };

97 fetchServers();

98 }, []);

99 const generateClaudeCodeCommand = server => {

100 if (server.customCommands && server.customCommands.claudeCode) {

101 return server.customCommands.claudeCode.replace('--transport streamable-http', '--transport http');

102 }

103 const serverSlug = server.name.toLowerCase().replace(/[^a-z0-9]/g, '-');

104 if (server.urls.http) {

105 return `claude mcp add ${serverSlug} --transport http ${server.urls.http}`;

106 }

107 if (server.urls.sse) {

108 return `claude mcp add ${serverSlug} --transport sse ${server.urls.sse}`;

109 }

110 if (server.urls.stdio) {

111 const envFlags = server.envVars && server.envVars.length > 0 ? server.envVars.map(v => `--env ${v.name}=YOUR_${v.name}`).join(' ') : '';

112 const baseCommand = `claude mcp add ${serverSlug} --transport stdio`;

113 return envFlags ? `${baseCommand} ${envFlags} -- ${server.urls.stdio}` : `${baseCommand} -- ${server.urls.stdio}`;

114 }

115 return null;

116 };

117 if (loading) {

118 return <div>Loading MCP servers...</div>;

119 }

120 if (error) {

121 return <div>Error loading MCP servers: {error}</div>;

122 }

123 const filteredServers = servers.filter(server => {

124 if (platform === "claudeCode") {

125 return server.availability.claudeCode;

126 } else if (platform === "mcpConnector") {

127 return server.availability.mcpConnector;

128 } else if (platform === "claudeDesktop") {

129 return server.availability.claudeDesktop;

130 } else if (platform === "all") {

131 return true;

132 } else {

133 throw new Error(`Unknown platform: ${platform}`);

134 }

135 });

136 return <>

137 <style jsx>{`

138 .cards-container {

139 display: grid;

140 gap: 1rem;

141 margin-bottom: 2rem;

142 }

143 .server-card {

144 border: 1px solid var(--border-color, #e5e7eb);

145 border-radius: 6px;

146 padding: 1rem;

147 }

148 .command-row {

149 display: flex;

150 align-items: center;

151 gap: 0.25rem;

152 }

153 .command-row code {

154 font-size: 0.75rem;

155 overflow-x: auto;

156 }

157 `}</style>

158 

159 <div className="cards-container">

160 {filteredServers.map(server => {

161 const claudeCodeCommand = generateClaudeCodeCommand(server);

162 const mcpUrl = server.urls.http || server.urls.sse;

163 const commandToShow = platform === "claudeCode" ? claudeCodeCommand : mcpUrl;

164 return <div key={server.name} className="server-card">

165 <div>

166 {server.documentation ? <a href={server.documentation}>

167 <strong>{server.name}</strong>

168 </a> : <strong>{server.name}</strong>}

169 </div>

170 

171 <p style={{

172 margin: '0.5rem 0',

173 fontSize: '0.9rem'

174 }}>

175 {server.description}

176 </p>

177 

178 {server.setupUrl && <p style={{

179 margin: '0.25rem 0',

180 fontSize: '0.8rem',

181 fontStyle: 'italic',

182 opacity: 0.7

183 }}>

184 Requires user-specific URL.{' '}

185 <a href={server.setupUrl} style={{

186 textDecoration: 'underline'

187 }}>

188 Get your URL here

189 </a>.

190 </p>}

191 

192 {commandToShow && !server.setupUrl && <>

193 <p style={{

194 display: 'block',

195 fontSize: '0.75rem',

196 fontWeight: 500,

197 minWidth: 'fit-content',

198 marginTop: '0.5rem',

199 marginBottom: 0

200 }}>

201 {platform === "claudeCode" ? "Command" : "URL"}

202 </p>

203 <div className="command-row">

204 <code>

205 {commandToShow}

206 </code>

207 </div>

208 </>}

209 </div>;

210 })}

211 </div>

212 </>;

213};

214 

215Claude Code는 AI 도구 통합을 위한 오픈 소스 표준인 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction)를 통해 수백 개의 외부 도구 및 데이터 소스에 연결할 수 있습니다. MCP 서버는 Claude Code에 도구, 데이터베이스 및 API에 대한 액세스를 제공합니다.

216 

217다른 도구(예: 이슈 추적기 또는 모니터링 대시보드)에서 채팅으로 데이터를 복사하는 자신을 발견할 때 서버를 연결하세요. 연결되면 Claude는 붙여넣은 내용에서 작업하는 대신 해당 시스템을 직접 읽고 작동할 수 있습니다.

218 

219## MCP로 할 수 있는 것

220 

221MCP 서버가 연결되면 Claude Code에 다음을 요청할 수 있습니다:

222 

223* **이슈 추적기에서 기능 구현**: "JIRA 이슈 ENG-4521에 설명된 기능을 추가하고 GitHub에서 PR을 생성하세요."

224* **모니터링 데이터 분석**: "Sentry와 Statsig을 확인하여 ENG-4521에 설명된 기능의 사용량을 확인하세요."

225* **데이터베이스 쿼리**: "PostgreSQL 데이터베이스를 기반으로 기능 ENG-4521을 사용한 무작위 사용자 10명의 이메일을 찾으세요."

226* **디자인 통합**: "Slack에 게시된 새로운 Figma 디자인을 기반으로 표준 이메일 템플릿을 업데이트하세요."

227* **워크플로우 자동화**: "이 10명의 사용자를 새로운 기능에 대한 피드백 세션에 초대하는 Gmail 초안을 생성하세요."

228* **외부 이벤트에 반응**: MCP 서버는 [채널](/ko/channels)로도 작동할 수 있으며, 세션에 메시지를 푸시하므로 Claude는 자리를 비운 동안 Telegram 메시지, Discord 채팅 또는 webhook 이벤트에 반응할 수 있습니다.

229 

230## 인기 있는 MCP 서버

231 

232Claude Code에 연결할 수 있는 일반적으로 사용되는 MCP 서버는 다음과 같습니다:

233 

234<Warning>

235 타사 MCP 서버를 사용할 때는 자신의 책임하에 사용하십시오 - Anthropic은 이러한 모든 서버의 정확성이나 보안을 검증하지 않았습니다.

236 설치하는 MCP 서버를 신뢰하는지 확인하세요.

237 신뢰할 수 없는 콘텐츠를 가져올 수 있는 MCP 서버를 사용할 때는 특히 주의하세요. 이러한 서버는 프롬프트 주입 위험에 노출될 수 있습니다.

238</Warning>

239 

240<MCPServersTable platform="claudeCode" />

241 

242<Note>

243 **특정 통합이 필요하신가요?** [GitHub에서 수백 개 이상의 MCP 서버를 찾거나](https://github.com/modelcontextprotocol/servers), [MCP SDK](https://modelcontextprotocol.io/quickstart/server)를 사용하여 자신만의 서버를 구축하세요.

244</Note>

245 

246## MCP 서버 설치

247 

248MCP 서버는 필요에 따라 세 가지 방식으로 구성할 수 있습니다:

249 

250### 옵션 1: 원격 HTTP 서버 추가

251 

252HTTP 서버는 원격 MCP 서버에 연결하기 위한 권장 옵션입니다. 이는 클라우드 기반 서비스에 가장 널리 지원되는 전송 방식입니다.

253 

254```bash theme={null}

255# 기본 구문

256claude mcp add --transport http <name> <url>

257 

258# 실제 예: Notion에 연결

259claude mcp add --transport http notion https://mcp.notion.com/mcp

260 

261# Bearer 토큰을 사용한 예

262claude mcp add --transport http secure-api https://api.example.com/mcp \

263 --header "Authorization: Bearer your-token"

264```

265 

266### 옵션 2: 원격 SSE 서버 추가

267 

268<Warning>

269 SSE (Server-Sent Events) 전송은 더 이상 사용되지 않습니다. 가능한 경우 HTTP 서버를 사용하세요.

270</Warning>

271 

272```bash theme={null}

273# 기본 구문

274claude mcp add --transport sse <name> <url>

275 

276# 실제 예: Asana에 연결

277claude mcp add --transport sse asana https://mcp.asana.com/sse

278 

279# 인증 헤더를 사용한 예

280claude mcp add --transport sse private-api https://api.company.com/sse \

281 --header "X-API-Key: your-key-here"

282```

283 

284### 옵션 3: 로컬 stdio 서버 추가

285 

286Stdio 서버는 컴퓨터에서 로컬 프로세스로 실행됩니다. 시스템에 직접 액세스하거나 사용자 정의 스크립트가 필요한 도구에 이상적입니다.

287 

288```bash theme={null}

289# 기본 구문

290claude mcp add [options] <name> -- <command> [args...]

291 

292# 실제 예: Airtable 서버 추가

293claude mcp add --transport stdio --env AIRTABLE_API_KEY=YOUR_KEY airtable \

294 -- npx -y airtable-mcp-server

295```

296 

297<Note>

298 **중요: 옵션 순서**

299 

300 모든 옵션(`--transport`, `--env`, `--scope`, `--header`)은 서버 이름 **앞에** 와야 합니다. `--` (이중 대시)는 서버 이름과 MCP 서버에 전달되는 명령 및 인수를 구분합니다.

301 

302 예를 들어:

303 

304 * `claude mcp add --transport stdio myserver -- npx server` → `npx server` 실행

305 * `claude mcp add --transport stdio --env KEY=value myserver -- python server.py --port 8080` → `KEY=value`를 환경에서 `python server.py --port 8080` 실행

306 

307 이는 Claude의 플래그와 서버의 플래그 간의 충돌을 방지합니다.

308</Note>

309 

310### 서버 관리

311 

312구성한 후에는 다음 명령으로 MCP 서버를 관리할 수 있습니다:

313 

314```bash theme={null}

315# 구성된 모든 서버 나열

316claude mcp list

317 

318# 특정 서버의 세부 정보 가져오기

319claude mcp get github

320 

321# 서버 제거

322claude mcp remove github

323 

324# (Claude Code 내에서) 서버 상태 확인

325/mcp

326```

327 

328### 동적 도구 업데이트

329 

330Claude Code는 MCP `list_changed` 알림을 지원하므로 MCP 서버가 연결을 끊었다가 다시 연결할 필요 없이 사용 가능한 도구, 프롬프트 및 리소스를 동적으로 업데이트할 수 있습니다. MCP 서버가 `list_changed` 알림을 보내면 Claude Code는 해당 서버에서 사용 가능한 기능을 자동으로 새로 고칩니다.

331 

332### 자동 재연결

333 

334HTTP 또는 SSE 서버가 세션 중에 연결이 끊어지면 Claude Code는 지수 백오프를 사용하여 자동으로 재연결합니다: 최대 5번의 시도, 1초 지연으로 시작하여 매번 두 배씩 증가합니다. 서버는 재연결이 진행 중인 동안 `/mcp`에서 보류 중으로 나타납니다. 5번의 실패 시도 후 서버는 실패로 표시되며 `/mcp`에서 수동으로 다시 시도할 수 있습니다. Stdio 서버는 로컬 프로세스이며 자동으로 재연결되지 않습니다.

335 

336HTTP 또는 SSE 서버가 시작 시 초기 연결에 실패할 때도 동일한 백오프가 적용됩니다. v2.1.121부터 Claude Code는 5xx 응답, 연결 거부 또는 시간 초과와 같은 일시적 오류에 대해 초기 연결을 최대 3번 재시도한 후, 여전히 연결할 수 없으면 서버를 실패로 표시합니다. 인증 및 찾을 수 없음 오류는 해결하기 위해 구성 변경이 필요하므로 재시도되지 않습니다.

337 

338### 채널을 사용한 메시지 푸시

339 

340MCP 서버는 또한 메시지를 세션에 직접 푸시할 수 있으므로 Claude는 CI 결과, 모니터링 경고 또는 채팅 메시지와 같은 외부 이벤트에 반응할 수 있습니다. 이를 활성화하려면 서버가 `claude/channel` 기능을 선언하고 시작 시 `--channels` 플래그로 옵트인합니다. 공식적으로 지원되는 채널을 사용하려면 [채널](/ko/channels)을 참조하거나, 자신만의 채널을 구축하려면 [채널 참조](/ko/channels-reference)를 참조하세요.

341 

342<Tip>

343 팁:

344 

345 * `--scope` 플래그를 사용하여 구성이 저장되는 위치를 지정하세요:

346 * `local` (기본값): 현재 프로젝트에서만 사용자에게만 사용 가능 (이전 버전에서는 `project`라고 불렸음)

347 * `project`: `.mcp.json` 파일을 통해 프로젝트의 모든 사람과 공유

348 * `user`: 모든 프로젝트에서 사용자에게 사용 가능 (이전 버전에서는 `global`이라고 불렸음)

349 * `--env` 플래그로 환경 변수를 설정하세요 (예: `--env KEY=value`)

350 * `MCP_TIMEOUT` 환경 변수를 사용하여 MCP 서버 시작 시간 초과를 구성하세요 (예: `MCP_TIMEOUT=10000 claude`는 10초 시간 초과를 설정)

351 * Claude Code는 MCP 도구 출력이 10,000 토큰을 초과할 때 경고를 표시합니다. 이 제한을 늘리려면 `MAX_MCP_OUTPUT_TOKENS` 환경 변수를 설정하세요 (예: `MAX_MCP_OUTPUT_TOKENS=50000`)

352 * OAuth 2.0 인증이 필요한 원격 서버로 인증하려면 `/mcp`를 사용하세요

353</Tip>

354 

355### 플러그인 제공 MCP 서버

356 

357[플러그인](/ko/plugins)은 MCP 서버를 번들로 제공할 수 있으며, 플러그인이 활성화되면 도구 및 통합을 자동으로 제공합니다. 플러그인 MCP 서버는 사용자 구성 서버와 동일하게 작동합니다.

358 

359**플러그인 MCP 서버의 작동 방식**:

360 

361* 플러그인은 플러그인 루트의 `.mcp.json` 또는 `plugin.json`에 인라인으로 MCP 서버를 정의합니다

362* 플러그인이 활성화되면 MCP 서버가 자동으로 시작됩니다

363* 플러그인 MCP 도구는 수동으로 구성된 MCP 도구와 함께 나타납니다

364* 플러그인 서버는 플러그인 설치를 통해 관리됩니다 (`/mcp` 명령이 아님)

365 

366**플러그인 MCP 구성 예**:

367 

368플러그인 루트의 `.mcp.json`:

369 

370```json theme={null}

371{

372 "mcpServers": {

373 "database-tools": {

374 "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",

375 "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],

376 "env": {

377 "DB_URL": "${DB_URL}"

378 }

379 }

380 }

381}

382```

383 

384또는 `plugin.json`에 인라인:

385 

386```json theme={null}

387{

388 "name": "my-plugin",

389 "mcpServers": {

390 "plugin-api": {

391 "command": "${CLAUDE_PLUGIN_ROOT}/servers/api-server",

392 "args": ["--port", "8080"]

393 }

394 }

395}

396```

397 

398**플러그인 MCP 기능**:

399 

400* **자동 라이프사이클**: 세션 시작 시 활성화된 플러그인의 서버가 자동으로 연결됩니다. 세션 중에 플러그인을 활성화하거나 비활성화하면 `/reload-plugins`를 실행하여 MCP 서버를 연결하거나 연결 해제합니다

401* **환경 변수**: 번들된 플러그인 파일에 `${CLAUDE_PLUGIN_ROOT}` 사용 및 플러그인 업데이트를 유지하는 [지속적인 상태](/ko/plugins-reference#persistent-data-directory)에 `${CLAUDE_PLUGIN_DATA}` 사용

402* **사용자 환경 액세스**: 수동으로 구성된 서버와 동일한 환경 변수에 액세스

403* **여러 전송 유형**: stdio, SSE 및 HTTP 전송 지원 (전송 지원은 서버에 따라 다를 수 있음)

404 

405**플러그인 MCP 서버 보기**:

406 

407```bash theme={null}

408# Claude Code 내에서 플러그인 서버를 포함한 모든 MCP 서버 보기

409/mcp

410```

411 

412플러그인 서버는 플러그인에서 온 것을 나타내는 표시기와 함께 목록에 나타납니다.

413 

414**플러그인 MCP 서버의 이점**:

415 

416* **번들 배포**: 도구 및 서버가 함께 패키징됨

417* **자동 설정**: 수동 MCP 구성이 필요 없음

418* **팀 일관성**: 플러그인이 설치되면 모든 사람이 동일한 도구를 얻음

419 

420플러그인과 함께 MCP 서버를 번들로 제공하는 방법에 대한 자세한 내용은 [플러그인 구성 요소 참조](/ko/plugins-reference#mcp-servers)를 참조하세요.

421 

422## MCP 설치 범위

423 

424MCP 서버는 세 가지 범위에서 구성할 수 있습니다. 선택한 범위는 서버가 로드되는 프로젝트와 구성이 팀과 공유되는지 여부를 제어합니다.

425 

426| 범위 | 로드 위치 | 팀과 공유 | 저장 위치 |

427| ---------------------- | -------- | ------------ | -------------------- |

428| [로컬](#local-scope) | 현재 프로젝트만 | 아니오 | `~/.claude.json` |

429| [프로젝트](#project-scope) | 현재 프로젝트만 | 예, 버전 제어를 통해 | 프로젝트 루트의 `.mcp.json` |

430| [사용자](#user-scope) | 모든 프로젝트 | 아니오 | `~/.claude.json` |

431 

432### 로컬 범위

433 

434로컬 범위는 기본값입니다. 로컬 범위 서버는 추가한 프로젝트에서만 로드되며 사용자에게만 비공개입니다. Claude Code는 해당 프로젝트의 경로 아래 `~/.claude.json`에 저장하므로 다른 프로젝트에는 동일한 서버가 나타나지 않습니다. 개인 개발 서버, 실험적 구성 또는 버전 제어에 포함하고 싶지 않은 자격 증명이 있는 서버에 로컬 범위를 사용하세요.

435 

436<Note>

437 MCP 서버의 "로컬 범위"라는 용어는 일반 로컬 설정과 다릅니다. MCP 로컬 범위 서버는 `~/.claude.json` (홈 디렉토리)에 저장되고, 일반 로컬 설정은 `.claude/settings.local.json` (프로젝트 디렉토리)을 사용합니다. 설정 파일 위치에 대한 자세한 내용은 [설정](/ko/settings#settings-files)을 참조하세요.

438</Note>

439 

440```bash theme={null}

441# 로컬 범위 서버 추가 (기본값)

442claude mcp add --transport http stripe https://mcp.stripe.com

443 

444# 명시적으로 로컬 범위 지정

445claude mcp add --transport http stripe --scope local https://mcp.stripe.com

446```

447 

448`/path/to/your/project`에서 실행할 때 명령은 `~/.claude.json` 내의 현재 프로젝트 항목에 서버를 작성합니다. 아래 예는 결과를 보여줍니다:

449 

450```json theme={null}

451{

452 "projects": {

453 "/path/to/your/project": {

454 "mcpServers": {

455 "stripe": {

456 "type": "http",

457 "url": "https://mcp.stripe.com"

458 }

459 }

460 }

461 }

462}

463```

464 

465### 프로젝트 범위

466 

467프로젝트 범위 서버는 프로젝트 루트 디렉토리의 `.mcp.json` 파일에 구성을 저장하여 팀 협업을 가능하게 합니다. 이 파일은 버전 제어에 체크인되도록 설계되어 모든 팀 멤버가 동일한 MCP 도구 및 서비스에 액세스할 수 있도록 합니다. 프로젝트 범위 서버를 추가하면 Claude Code는 자동으로 이 파일을 생성하거나 적절한 구성 구조로 업데이트합니다.

468 

469```bash theme={null}

470# 프로젝트 범위 서버 추가

471claude mcp add --transport http paypal --scope project https://mcp.paypal.com/mcp

472```

473 

474결과 `.mcp.json` 파일은 표준화된 형식을 따릅니다:

475 

476```json theme={null}

477{

478 "mcpServers": {

479 "shared-server": {

480 "command": "/path/to/server",

481 "args": [],

482 "env": {}

483 }

484 }

485}

486```

487 

488보안상의 이유로 Claude Code는 `.mcp.json` 파일의 프로젝트 범위 서버를 사용하기 전에 승인을 요청합니다. 이러한 승인 선택을 재설정해야 하는 경우 `claude mcp reset-project-choices` 명령을 사용하세요.

489 

490### 사용자 범위

491 

492사용자 범위 서버는 `~/.claude.json`에 저장되며 교차 프로젝트 접근성을 제공하므로 컴퓨터의 모든 프로젝트에서 사용할 수 있으면서 사용자 계정에만 비공개입니다. 이 범위는 개인 유틸리티 서버, 개발 도구 또는 다양한 프로젝트에서 자주 사용하는 서비스에 적합합니다.

493 

494```bash theme={null}

495# 사용자 서버 추가

496claude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic

497```

498 

499### 범위 계층 및 우선순위

500 

501동일한 이름의 서버가 둘 이상의 위치에 정의되면 Claude Code는 가장 높은 우선순위 소스의 정의를 사용하여 한 번 연결합니다:

502 

5031. 로컬 범위

5042. 프로젝트 범위

5053. 사용자 범위

5064. [플러그인 제공 서버](/ko/plugins)

5075. [Claude.ai 커넥터](#use-mcp-servers-from-claude-ai)

508 

509세 범위는 이름으로 중복을 일치시킵니다. 플러그인과 커넥터는 엔드포인트로 일치하므로 위의 서버와 동일한 URL 또는 명령을 가리키는 것은 중복으로 처리됩니다.

510 

511### `.mcp.json`의 환경 변수 확장

512 

513Claude Code는 `.mcp.json` 파일의 환경 변수 확장을 지원하므로 팀이 구성을 공유하면서 머신 특정 경로 및 API 키와 같은 민감한 값에 대한 유연성을 유지할 수 있습니다.

514 

515**지원되는 구문:**

516 

517* `${VAR}` - 환경 변수 `VAR`의 값으로 확장

518* `${VAR:-default}` - `VAR`이 설정되면 확장, 그렇지 않으면 `default` 사용

519 

520**확장 위치:**

521환경 변수는 다음에서 확장할 수 있습니다:

522 

523* `command` - 서버 실행 파일 경로

524* `args` - 명령줄 인수

525* `env` - 서버에 전달되는 환경 변수

526* `url` - HTTP 서버 유형의 경우

527* `headers` - HTTP 서버 인증의 경우

528 

529**변수 확장을 사용한 예**:

530 

531```json theme={null}

532{

533 "mcpServers": {

534 "api-server": {

535 "type": "http",

536 "url": "${API_BASE_URL:-https://api.example.com}/mcp",

537 "headers": {

538 "Authorization": "Bearer ${API_KEY}"

539 }

540 }

541 }

542}

543```

544 

545필수 환경 변수가 설정되지 않았고 기본값이 없으면 Claude Code는 구성을 구문 분석하지 못합니다.

546 

547## 실제 예

548 

549{/* ### 예: Playwright로 브라우저 테스트 자동화

550 

551```bash

552claude mcp add --transport stdio playwright -- npx -y @playwright/mcp@latest

553```

554 

555그런 다음 브라우저 테스트를 작성하고 실행합니다:

556 

557```text

558test@example.com으로 로그인 흐름이 작동하는지 테스트

559```

560```text

561모바일에서 체크아웃 페이지의 스크린샷 촬영

562```

563```text

564검색 기능이 결과를 반환하는지 확인

565``` */}

566 

567### 예: Sentry로 오류 모니터링

568 

569```bash theme={null}

570claude mcp add --transport http sentry https://mcp.sentry.dev/mcp

571```

572 

573Sentry 계정으로 인증합니다:

574 

575```text theme={null}

576/mcp

577```

578 

579그런 다음 프로덕션 문제를 디버깅합니다:

580 

581```text theme={null}

582지난 24시간 동안 가장 일반적인 오류는 무엇입니까?

583```

584 

585```text theme={null}

586오류 ID abc123의 스택 추적을 보여주세요

587```

588 

589```text theme={null}

590어떤 배포가 이러한 새로운 오류를 도입했습니까?

591```

592 

593### 예: 코드 검토를 위해 GitHub에 연결

594 

595GitHub의 원격 MCP 서버는 헤더로 전달된 GitHub 개인 액세스 토큰으로 인증합니다. 하나를 얻으려면 [GitHub 토큰 설정](https://github.com/settings/personal-access-tokens)을 열고, Claude가 작업하려는 리포지토리에 액세스할 수 있는 새로운 세분화된 토큰을 생성한 다음 서버를 추가하세요:

596 

597```bash theme={null}

598claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \

599 --header "Authorization: Bearer YOUR_GITHUB_PAT"

600```

601 

602그런 다음 GitHub로 작업합니다:

603 

604```text theme={null}

605PR #456을 검토하고 개선 사항을 제안하세요

606```

607 

608```text theme={null}

609방금 발견한 버그에 대한 새 이슈를 생성하세요

610```

611 

612```text theme={null}

613나에게 할당된 모든 열린 PR을 보여주세요

614```

615 

616### 예: PostgreSQL 데이터베이스 쿼리

617 

618```bash theme={null}

619claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \

620 --dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"

621```

622 

623그런 다음 자연스럽게 데이터베이스를 쿼리합니다:

624 

625```text theme={null}

626이번 달 총 수익은 얼마입니까?

627```

628 

629```text theme={null}

630주문 테이블의 스키마를 보여주세요

631```

632 

633```text theme={null}

634지난 90일 동안 구매하지 않은 고객을 찾으세요

635```

636 

637## 원격 MCP 서버로 인증

638 

639많은 클라우드 기반 MCP 서버는 인증이 필요합니다. Claude Code는 보안 연결을 위해 OAuth 2.0을 지원합니다.

640 

641<Steps>

642 <Step title="인증이 필요한 서버 추가">

643 예를 들어:

644 

645 ```bash theme={null}

646 claude mcp add --transport http sentry https://mcp.sentry.dev/mcp

647 ```

648 </Step>

649 

650 <Step title="Claude Code 내에서 /mcp 명령 사용">

651 Claude Code에서 다음 명령을 사용합니다:

652 

653 ```text theme={null}

654 /mcp

655 ```

656 

657 그런 다음 브라우저에서 로그인 단계를 따릅니다.

658 </Step>

659</Steps>

660 

661<Tip>

662 팁:

663 

664 * 인증 토큰은 안전하게 저장되고 자동으로 새로 고쳐집니다

665 * `/mcp` 메뉴에서 "Clear authentication"을 사용하여 액세스를 취소합니다

666 * 브라우저가 자동으로 열리지 않으면 제공된 URL을 복사하여 수동으로 엽니다

667 * 인증 후 브라우저 리디렉션이 연결 오류로 실패하면 브라우저의 주소 표시줄에서 전체 콜백 URL을 복사하여 Claude Code에 나타나는 URL 프롬프트에 붙여넣습니다

668 * OAuth 인증은 HTTP 서버에서 작동합니다

669</Tip>

670 

671### 고정 OAuth 콜백 포트 사용

672 

673일부 MCP 서버는 미리 등록된 특정 리디렉션 URI가 필요합니다. 기본적으로 Claude Code는 OAuth 콜백을 위해 무작위로 사용 가능한 포트를 선택합니다. `--callback-port`를 사용하여 포트를 고정하여 `http://localhost:PORT/callback` 형식의 사전 등록된 리디렉션 URI와 일치하도록 합니다.

674 

675`--callback-port`를 단독으로 사용할 수 있습니다 (동적 클라이언트 등록 포함) 또는 `--client-id`와 함께 사용할 수 있습니다 (사전 구성된 자격 증명 포함).

676 

677```bash theme={null}

678# 동적 클라이언트 등록을 사용한 고정 콜백 포트

679claude mcp add --transport http \

680 --callback-port 8080 \

681 my-server https://mcp.example.com/mcp

682```

683 

684### 사전 구성된 OAuth 자격 증명 사용

685 

686일부 MCP 서버는 자동 OAuth 설정을 지원하지 않습니다. "Incompatible auth server: does not support dynamic client registration"과 같은 오류가 표시되면 서버에 사전 구성된 자격 증명이 필요합니다. Claude Code는 또한 동적 클라이언트 등록 대신 클라이언트 ID 메타데이터 문서 (CIMD)를 사용하는 서버를 지원하며 자동으로 검색합니다. 자동 검색이 실패하면 먼저 서버의 개발자 포털을 통해 OAuth 앱을 등록한 다음 서버를 추가할 때 자격 증명을 제공합니다.

687 

688<Steps>

689 <Step title="서버로 OAuth 앱 등록">

690 서버의 개발자 포털을 통해 앱을 생성하고 클라이언트 ID와 클라이언트 시크릿을 기록합니다.

691 

692 많은 서버는 리디렉션 URI도 필요합니다. 그렇다면 포트를 선택하고 `http://localhost:PORT/callback` 형식으로 리디렉션 URI를 등록합니다. 다음 단계에서 `--callback-port`와 함께 동일한 포트를 사용합니다.

693 </Step>

694 

695 <Step title="자격 증명으로 서버 추가">

696 다음 방법 중 하나를 선택합니다. `--callback-port`에 사용되는 포트는 사용 가능한 모든 포트일 수 있습니다. 이전 단계에서 등록한 리디렉션 URI와 일치하기만 하면 됩니다.

697 

698 <Tabs>

699 <Tab title="claude mcp add">

700 `--client-id`를 사용하여 앱의 클라이언트 ID를 전달합니다. `--client-secret` 플래그는 마스킹된 입력으로 시크릿을 요청합니다:

701 

702 ```bash theme={null}

703 claude mcp add --transport http \

704 --client-id your-client-id --client-secret --callback-port 8080 \

705 my-server https://mcp.example.com/mcp

706 ```

707 </Tab>

708 

709 <Tab title="claude mcp add-json">

710 JSON 구성에 `oauth` 객체를 포함하고 `--client-secret`을 별도의 플래그로 전달합니다:

711 

712 ```bash theme={null}

713 claude mcp add-json my-server \

714 '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"clientId":"your-client-id","callbackPort":8080}}' \

715 --client-secret

716 ```

717 </Tab>

718 

719 <Tab title="claude mcp add-json (콜백 포트만)">

720 동적 클라이언트 등록을 사용하면서 포트를 고정하려면 클라이언트 ID 없이 `--callback-port`를 사용합니다:

721 

722 ```bash theme={null}

723 claude mcp add-json my-server \

724 '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"callbackPort":8080}}'

725 ```

726 </Tab>

727 

728 <Tab title="CI / 환경 변수">

729 환경 변수를 통해 시크릿을 설정하여 대화형 프롬프트를 건너뜁니다:

730 

731 ```bash theme={null}

732 MCP_CLIENT_SECRET=your-secret claude mcp add --transport http \

733 --client-id your-client-id --client-secret --callback-port 8080 \

734 my-server https://mcp.example.com/mcp

735 ```

736 </Tab>

737 </Tabs>

738 </Step>

739 

740 <Step title="Claude Code에서 인증">

741 Claude Code에서 `/mcp`를 실행하고 브라우저 로그인 흐름을 따릅니다.

742 </Step>

743</Steps>

744 

745<Tip>

746 팁:

747 

748 * 클라이언트 시크릿은 구성에 저장되지 않고 시스템 키체인 (macOS) 또는 자격 증명 파일에 안전하게 저장됩니다

749 * 서버가 시크릿이 없는 공개 OAuth 클라이언트를 사용하는 경우 `--client-secret` 없이 `--client-id`만 사용합니다

750 * `--callback-port`는 `--client-id`와 함께 또는 없이 사용할 수 있습니다

751 * 이러한 플래그는 HTTP 및 SSE 전송에만 적용됩니다. stdio 서버에는 영향을 주지 않습니다

752 * `claude mcp get <name>`을 사용하여 OAuth 자격 증명이 서버에 대해 구성되었는지 확인합니다

753</Tip>

754 

755### OAuth 메타데이터 검색 재정의

756 

757특정 OAuth 인증 서버 메타데이터 URL을 가리켜 기본 검색 체인을 우회하도록 Claude Code를 설정합니다. MCP 서버의 표준 엔드포인트가 오류를 반환하거나 내부 프록시를 통해 검색을 라우팅하려는 경우에 설정합니다. 기본적으로 Claude Code는 먼저 `/.well-known/oauth-protected-resource`에서 RFC 9728 보호된 리소스 메타데이터를 확인한 다음 `/.well-known/oauth-authorization-server`에서 RFC 8414 인증 서버 메타데이터로 돌아갑니다.

758 

759`.mcp.json`의 서버 구성의 `oauth` 객체에 `authServerMetadataUrl`을 설정합니다:

760 

761```json theme={null}

762{

763 "mcpServers": {

764 "my-server": {

765 "type": "http",

766 "url": "https://mcp.example.com/mcp",

767 "oauth": {

768 "authServerMetadataUrl": "https://auth.example.com/.well-known/openid-configuration"

769 }

770 }

771 }

772}

773```

774 

775URL은 `https://`를 사용해야 합니다. `authServerMetadataUrl`은 Claude Code v2.1.64 이상이 필요합니다. 메타데이터 URL의 `scopes_supported`는 업스트림 서버가 광고하는 범위를 재정의합니다.

776 

777### OAuth 범위 제한

778 

779`oauth.scopes`를 설정하여 인증 흐름 중에 Claude Code가 요청하는 범위를 고정합니다. 이는 업스트림 인증 서버가 광고하는 것보다 더 많은 범위를 부여하고 싶지 않을 때 MCP 서버를 보안 팀이 승인한 부분 집합으로 제한하는 지원되는 방법입니다. 값은 RFC 6749 §3.3의 `scope` 매개변수 형식과 일치하는 단일 공백으로 구분된 문자열입니다.

780 

781```json theme={null}

782{

783 "mcpServers": {

784 "slack": {

785 "type": "http",

786 "url": "https://mcp.slack.com/mcp",

787 "oauth": {

788 "scopes": "channels:read chat:write search:read"

789 }

790 }

791 }

792}

793```

794 

795`oauth.scopes`는 `authServerMetadataUrl`과 서버가 `/.well-known`에서 검색하는 범위 모두보다 우선합니다. 설정하지 않으면 MCP 서버가 요청된 범위 집합을 결정합니다.

796 

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

798 

799서버가 나중에 도구 호출에 대해 403 `insufficient_scope`을 반환하면 Claude Code는 동일한 고정된 범위로 다시 인증합니다. 필요한 도구가 고정된 범위 외의 범위를 요구할 때 `oauth.scopes`를 확대합니다.

800 

801### 사용자 정의 인증을 위한 동적 헤더 사용

802 

803MCP 서버가 OAuth (예: Kerberos, 단기 토큰 또는 내부 SSO)가 아닌 다른 인증 체계를 사용하는 경우 `headersHelper`를 사용하여 연결 시간에 요청 헤더를 생성합니다. Claude Code는 명령을 실행하고 출력을 연결 헤더에 병합합니다.

804 

805```json theme={null}

806{

807 "mcpServers": {

808 "internal-api": {

809 "type": "http",

810 "url": "https://mcp.internal.example.com",

811 "headersHelper": "/opt/bin/get-mcp-auth-headers.sh"

812 }

813 }

814}

815```

816 

817명령은 인라인일 수도 있습니다:

818 

819```json theme={null}

820{

821 "mcpServers": {

822 "internal-api": {

823 "type": "http",

824 "url": "https://mcp.internal.example.com",

825 "headersHelper": "echo '{\"Authorization\": \"Bearer '\"$(get-token)\"'\"}'"

826 }

827 }

828}

829```

830 

831**요구 사항:**

832 

833* 명령은 JSON 객체의 문자열 키-값 쌍을 stdout에 작성해야 합니다

834* 명령은 10초 시간 초과를 사용하여 셸에서 실행됩니다

835* 동적 헤더는 동일한 이름의 정적 `headers`를 재정의합니다

836 

837헬퍼는 각 연결 (세션 시작 및 재연결 시)에서 새로 실행됩니다. 캐싱이 없으므로 스크립트는 토큰 재사용을 담당합니다.

838 

839Claude Code는 헬퍼를 실행할 때 다음 환경 변수를 설정합니다:

840 

841| 변수 | 값 |

842| :---------------------------- | :---------- |

843| `CLAUDE_CODE_MCP_SERVER_NAME` | MCP 서버의 이름 |

844| `CLAUDE_CODE_MCP_SERVER_URL` | MCP 서버의 URL |

845 

846이를 사용하여 여러 MCP 서버를 제공하는 단일 헬퍼 스크립트를 작성합니다.

847 

848<Note>

849 `headersHelper`는 임의의 셸 명령을 실행합니다. 프로젝트 또는 로컬 범위에서 정의될 때 작업 공간 신뢰 대화 상자를 수락한 후에만 실행됩니다.

850</Note>

851 

852## JSON 구성에서 MCP 서버 추가

853 

854MCP 서버에 대한 JSON 구성이 있는 경우 직접 추가할 수 있습니다:

855 

856<Steps>

857 <Step title="JSON에서 MCP 서버 추가">

858 ```bash theme={null}

859 # 기본 구문

860 claude mcp add-json <name> '<json>'

861 

862 # 예: JSON 구성으로 HTTP 서버 추가

863 claude mcp add-json weather-api '{"type":"http","url":"https://api.weather.com/mcp","headers":{"Authorization":"Bearer token"}}'

864 

865 # 예: JSON 구성으로 stdio 서버 추가

866 claude mcp add-json local-weather '{"type":"stdio","command":"/path/to/weather-cli","args":["--api-key","abc123"],"env":{"CACHE_DIR":"/tmp"}}'

867 

868 # 예: 사전 구성된 OAuth 자격 증명으로 HTTP 서버 추가

869 claude mcp add-json my-server '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"clientId":"your-client-id","callbackPort":8080}}' --client-secret

870 ```

871 </Step>

872 

873 <Step title="서버가 추가되었는지 확인">

874 ```bash theme={null}

875 claude mcp get weather-api

876 ```

877 </Step>

878</Steps>

879 

880<Tip>

881 팁:

882 

883 * JSON이 셸에서 올바르게 이스케이프되었는지 확인합니다

884 * JSON은 MCP 서버 구성 스키마를 준수해야 합니다

885 * `--scope user`를 사용하여 프로젝트 특정 구성 대신 사용자 구성에 서버를 추가할 수 있습니다

886</Tip>

887 

888## Claude Desktop에서 MCP 서버 가져오기

889 

890Claude Desktop에서 MCP 서버를 이미 구성한 경우 가져올 수 있습니다:

891 

892<Steps>

893 <Step title="Claude Desktop에서 서버 가져오기">

894 ```bash theme={null}

895 # 기본 구문

896 claude mcp add-from-claude-desktop

897 ```

898 </Step>

899 

900 <Step title="가져올 서버 선택">

901 명령을 실행한 후 가져올 서버를 선택할 수 있는 대화형 대화 상자가 표시됩니다.

902 </Step>

903 

904 <Step title="서버가 가져와졌는지 확인">

905 ```bash theme={null}

906 claude mcp list

907 ```

908 </Step>

909</Steps>

910 

911<Tip>

912 팁:

913 

914 * 이 기능은 macOS 및 Windows Subsystem for Linux (WSL)에서만 작동합니다

915 * 이러한 플랫폼의 표준 위치에서 Claude Desktop 구성 파일을 읽습니다

916 * `--scope user` 플래그를 사용하여 사용자 구성에 서버를 추가합니다

917 * 가져온 서버는 Claude Desktop과 동일한 이름을 갖습니다

918 * 동일한 이름의 서버가 이미 존재하면 숫자 접미사가 붙습니다 (예: `server_1`)

919</Tip>

920 

921## Claude.ai에서 MCP 서버 사용

922 

923[Claude.ai](https://claude.ai) 계정으로 Claude Code에 로그인한 경우 Claude.ai에서 추가한 MCP 서버는 Claude Code에서 자동으로 사용 가능합니다:

924 

925<Steps>

926 <Step title="Claude.ai에서 MCP 서버 구성">

927 [claude.ai/customize/connectors](https://claude.ai/customize/connectors)에서 서버를 추가합니다. Team 및 Enterprise 플랜에서는 관리자만 서버를 추가할 수 있습니다.

928 </Step>

929 

930 <Step title="MCP 서버 인증">

931 Claude.ai에서 필요한 인증 단계를 완료합니다.

932 </Step>

933 

934 <Step title="Claude Code에서 서버 보기 및 관리">

935 Claude Code에서 다음 명령을 사용합니다:

936 

937 ```text theme={null}

938 /mcp

939 ```

940 

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

942 </Step>

943</Steps>

944 

945Claude Code에서 claude.ai MCP 서버를 비활성화하려면 `ENABLE_CLAUDEAI_MCP_SERVERS` 환경 변수를 `false`로 설정합니다:

946 

947```bash theme={null}

948ENABLE_CLAUDEAI_MCP_SERVERS=false claude

949```

950 

951## Claude Code를 MCP 서버로 사용

952 

953Claude Code 자체를 다른 애플리케이션이 연결할 수 있는 MCP 서버로 사용할 수 있습니다:

954 

955```bash theme={null}

956# Claude를 stdio MCP 서버로 시작

957claude mcp serve

958```

959 

960claude\_desktop\_config.json에 이 구성을 추가하여 Claude Desktop에서 사용할 수 있습니다:

961 

962```json theme={null}

963{

964 "mcpServers": {

965 "claude-code": {

966 "type": "stdio",

967 "command": "claude",

968 "args": ["mcp", "serve"],

969 "env": {}

970 }

971 }

972}

973```

974 

975<Warning>

976 **실행 파일 경로 구성**: `command` 필드는 Claude Code 실행 파일을 참조해야 합니다. `claude` 명령이 시스템의 PATH에 없으면 실행 파일의 전체 경로를 지정해야 합니다.

977 

978 전체 경로를 찾으려면:

979 

980 ```bash theme={null}

981 which claude

982 ```

983 

984 그런 다음 구성에서 전체 경로를 사용합니다:

985 

986 ```json theme={null}

987 {

988 "mcpServers": {

989 "claude-code": {

990 "type": "stdio",

991 "command": "/full/path/to/claude",

992 "args": ["mcp", "serve"],

993 "env": {}

994 }

995 }

996 }

997 ```

998 

999 올바른 실행 파일 경로가 없으면 `spawn claude ENOENT`와 같은 오류가 발생합니다.

1000</Warning>

1001 

1002<Tip>

1003 팁:

1004 

1005 * 서버는 View, Edit, LS 등과 같은 Claude의 도구에 대한 액세스를 제공합니다

1006 * Claude Desktop에서 Claude에게 디렉토리의 파일을 읽고, 편집하는 등을 요청해 보세요

1007 * 이 MCP 서버는 Claude Code의 도구만 MCP 클라이언트에 노출하므로 클라이언트는 개별 도구 호출에 대한 사용자 확인을 구현할 책임이 있습니다.

1008</Tip>

1009 

1010## MCP 출력 제한 및 경고

1011 

1012MCP 도구가 큰 출력을 생성할 때 Claude Code는 토큰 사용량을 관리하여 대화 컨텍스트가 압도되지 않도록 합니다:

1013 

1014* **출력 경고 임계값**: Claude Code는 MCP 도구 출력이 10,000 토큰을 초과할 때 경고를 표시합니다

1015* **구성 가능한 제한**: `MAX_MCP_OUTPUT_TOKENS` 환경 변수를 사용하여 최대 허용 MCP 출력 토큰을 조정할 수 있습니다

1016* **기본 제한**: 기본 최대값은 25,000 토큰입니다

1017* **범위**: 환경 변수는 자신의 제한을 선언하지 않는 도구에 적용됩니다. [`anthropic/maxResultSizeChars`](#raise-the-limit-for-a-specific-tool)를 설정하는 도구는 `MAX_MCP_OUTPUT_TOKENS`이 설정된 것과 관계없이 텍스트 콘텐츠에 대해 해당 값을 사용합니다. 이미지 데이터를 반환하는 도구는 여전히 `MAX_MCP_OUTPUT_TOKENS`의 영향을 받습니다

1018 

1019큰 출력을 생성하는 도구의 제한을 늘리려면:

1020 

1021```bash theme={null}

1022export MAX_MCP_OUTPUT_TOKENS=50000

1023claude

1024```

1025 

1026이는 다음을 수행하는 MCP 서버로 작업할 때 특히 유용합니다:

1027 

1028* 대규모 데이터 세트 또는 데이터베이스 쿼리

1029* 상세한 보고서 또는 문서 생성

1030* 광범위한 로그 파일 또는 디버깅 정보 처리

1031 

1032### 특정 도구의 제한 늘리기

1033 

1034MCP 서버를 구축하는 경우 도구의 `tools/list` 응답 항목에서 `_meta["anthropic/maxResultSizeChars"]`를 설정하여 개별 도구가 기본 디스크 유지 임계값보다 큰 결과를 반환할 수 있습니다. Claude Code는 해당 도구의 임계값을 주석 처리된 값으로 올립니다 (최대 500,000자의 하드 상한까지).

1035 

1036이는 데이터베이스 스키마 또는 전체 파일 트리와 같이 본질적으로 크지만 필요한 출력을 반환하는 도구에 유용합니다. 주석 처리 없이 기본 임계값을 초과하는 결과는 디스크에 유지되고 대화에서 파일 참조로 대체됩니다.

1037 

1038```json theme={null}

1039{

1040 "name": "get_schema",

1041 "description": "Returns the full database schema",

1042 "_meta": {

1043 "anthropic/maxResultSizeChars": 200000

1044 }

1045}

1046```

1047 

1048주석 처리는 텍스트 콘텐츠에 대해 `MAX_MCP_OUTPUT_TOKENS`과 독립적으로 적용되므로 사용자는 도구가 선언하는 도구에 대해 환경 변수를 올릴 필요가 없습니다. 이미지 데이터를 반환하는 도구는 여전히 토큰 제한의 영향을 받습니다.

1049 

1050<Warning>

1051 특정 MCP 서버에서 자주 출력 경고가 발생하면 `MAX_MCP_OUTPUT_TOKENS` 제한을 늘리는 것을 고려하세요. 또한 서버 작성자에게 `anthropic/maxResultSizeChars` 주석을 추가하거나 응답을 페이지 매김하도록 요청할 수 있습니다. 주석은 이미지 콘텐츠를 반환하는 도구에는 영향을 주지 않습니다. 이러한 경우 `MAX_MCP_OUTPUT_TOKENS`을 올리는 것이 유일한 옵션입니다.

1052</Warning>

1053 

1054## MCP 리소스 요청에 응답

1055 

1056MCP 서버는 작업 중에 구조화된 입력을 요청할 수 있습니다. 서버가 자체적으로 얻을 수 없는 정보가 필요할 때 Claude Code는 대화형 대화 상자를 표시하고 응답을 서버에 다시 전달합니다. 사용자 측에서 구성이 필요하지 않습니다: 서버가 요청할 때 리소스 요청 대화 상자가 자동으로 나타납니다.

1057 

1058서버는 두 가지 방식으로 입력을 요청할 수 있습니다:

1059 

1060* **양식 모드**: Claude Code는 서버에서 정의한 양식 필드가 있는 대화 상자를 표시합니다 (예: 사용자 이름 및 암호 프롬프트). 필드를 입력하고 제출합니다.

1061* **URL 모드**: Claude Code는 인증 또는 승인을 위해 브라우저 URL을 엽니다. 브라우저에서 흐름을 완료한 다음 CLI에서 확인합니다.

1062 

1063리소스 요청에 자동으로 응답하려면 [`Elicitation` 훅](/ko/hooks#Elicitation)을 사용하세요.

1064 

1065리소스 요청을 사용하는 MCP 서버를 구축하는 경우 [MCP 리소스 요청 사양](https://modelcontextprotocol.io/docs/learn/client-concepts#elicitation)에서 프로토콜 세부 정보 및 스키마 예를 참조하세요.

1066 

1067## MCP 리소스 사용

1068 

1069MCP 서버는 파일을 참조하는 방식과 유사하게 @ 멘션을 사용하여 참조할 수 있는 리소스를 노출할 수 있습니다.

1070 

1071### MCP 리소스 참조

1072 

1073<Steps>

1074 <Step title="사용 가능한 리소스 나열">

1075 프롬프트에 `@`를 입력하여 연결된 모든 MCP 서버의 사용 가능한 리소스를 확인합니다. 리소스는 자동 완성 메뉴의 파일과 함께 나타납니다.

1076 </Step>

1077 

1078 <Step title="특정 리소스 참조">

1079 `@server:protocol://resource/path` 형식을 사용하여 리소스를 참조합니다:

1080 

1081 ```text theme={null}

1082 @github:issue://123을 분석하고 수정 사항을 제안할 수 있나요?

1083 ```

1084 

1085 ```text theme={null}

1086 @docs:file://api/authentication의 API 문서를 검토해 주세요

1087 ```

1088 </Step>

1089 

1090 <Step title="여러 리소스 참조">

1091 단일 프롬프트에서 여러 리소스를 참조할 수 있습니다:

1092 

1093 ```text theme={null}

1094 @postgres:schema://users와 @docs:file://database/user-model을 비교하세요

1095 ```

1096 </Step>

1097</Steps>

1098 

1099<Tip>

1100 팁:

1101 

1102 * 리소스는 참조될 때 자동으로 가져와지고 첨부 파일로 포함됩니다

1103 * 리소스 경로는 @ 멘션 자동 완성에서 퍼지 검색 가능합니다

1104 * Claude Code는 서버가 지원할 때 MCP 리소스를 나열하고 읽을 수 있는 도구를 자동으로 제공합니다

1105 * 리소스는 MCP 서버가 제공하는 모든 유형의 콘텐츠를 포함할 수 있습니다 (텍스트, JSON, 구조화된 데이터 등)

1106</Tip>

1107 

1108## MCP Tool Search로 확장

1109 

1110Tool Search는 MCP 컨텍스트 사용량을 낮게 유지하여 도구 정의를 Claude가 필요할 때까지 연기합니다. 세션 시작 시 도구 이름만 로드되므로 더 많은 MCP 서버를 추가해도 컨텍스트 윈도우에 미치는 영향이 최소화됩니다.

1111 

1112### 작동 방식

1113 

1114Tool Search는 기본적으로 활성화됩니다. MCP 도구는 미리 로드되지 않고 연기되며, Claude는 검색 도구를 사용하여 작업에 필요할 때 관련 도구를 검색합니다. Claude가 실제로 사용하는 도구만 컨텍스트에 들어갑니다. 사용자 관점에서 MCP 도구는 이전과 정확히 동일하게 작동합니다.

1115 

1116임계값 기반 로딩을 선호하는 경우 `ENABLE_TOOL_SEARCH=auto`를 설정하여 컨텍스트 윈도우의 10% 이내에 맞을 때 스키마를 미리 로드하고 오버플로우만 연기합니다. 모든 옵션은 [Tool Search 구성](#configure-tool-search)을 참조하세요.

1117 

1118### MCP 서버 작성자용

1119 

1120MCP 서버를 구축하는 경우 Tool Search가 활성화되면 서버 지침 필드가 더 유용해집니다. 서버 지침은 Claude가 [skills](/ko/skills)의 작동 방식과 유사하게 도구를 검색할 시기를 이해하는 데 도움이 됩니다.

1121 

1122다음을 설명하는 명확하고 설명적인 서버 지침을 추가합니다:

1123 

1124* 도구가 처리하는 작업의 범주

1125* Claude가 도구를 검색해야 할 때

1126* 서버가 제공하는 주요 기능

1127 

1128Claude Code는 도구 설명 및 서버 지침을 각각 2KB에서 자릅니다. 자르기를 피하려면 간결하게 유지하고 중요한 세부 정보를 시작 부분에 배치합니다.

1129 

1130### Tool Search 구성

1131 

1132Tool Search는 기본적으로 활성화됩니다: MCP 도구는 연기되고 필요에 따라 검색됩니다. Vertex AI에서는 기본적으로 비활성화되어 있습니다(도구 검색 베타 헤더를 허용하지 않음). `ANTHROPIC_BASE_URL`이 비 자사 호스트를 가리킬 때도 비활성화됩니다(대부분의 프록시가 `tool_reference` 블록을 전달하지 않기 때문). 명시적으로 `ENABLE_TOOL_SEARCH`를 설정하여 옵트인합니다. 이 기능은 `tool_reference` 블록을 지원하는 모델이 필요합니다: Sonnet 4 이상 또는 Opus 4 이상. Haiku 모델은 Tool Search를 지원하지 않습니다.

1133 

1134`ENABLE_TOOL_SEARCH` 환경 변수로 Tool Search 동작을 제어합니다:

1135 

1136| 값 | 동작 |

1137| :--------- | :----------------------------------------------------------------------------------- |

1138| (설정되지 않음) | 모든 MCP 도구 연기되고 필요에 따라 로드됨. Vertex AI 또는 `ANTHROPIC_BASE_URL`이 비 자사 호스트일 때 미리 로드로 돌아감 |

1139| `true` | 모든 MCP 도구 연기, Vertex AI 및 비 자사 `ANTHROPIC_BASE_URL` 포함 |

1140| `auto` | 임계값 모드: 도구가 컨텍스트 윈도우의 10% 이내에 맞으면 미리 로드, 그렇지 않으면 연기 |

1141| `auto:<N>` | 사용자 정의 백분율을 사용한 임계값 모드, `<N>`은 0-100 (예: `auto:5`는 5%) |

1142| `false` | 모든 MCP 도구 미리 로드, 연기 없음 |

1143 

1144```bash theme={null}

1145# 사용자 정의 5% 임계값 사용

1146ENABLE_TOOL_SEARCH=auto:5 claude

1147 

1148# Tool Search 완전히 비활성화

1149ENABLE_TOOL_SEARCH=false claude

1150```

1151 

1152또는 [settings.json `env` 필드](/ko/settings#available-settings)에서 값을 설정합니다.

1153 

1154`ToolSearch` 도구를 특별히 비활성화할 수도 있습니다:

1155 

1156```json theme={null}

1157{

1158 "permissions": {

1159 "deny": ["ToolSearch"]

1160 }

1161}

1162```

1163 

1164### 서버를 연기에서 제외

1165 

1166서버의 도구가 검색 단계 없이 항상 Claude에게 표시되어야 하는 경우 해당 서버의 구성에서 `alwaysLoad`를 `true`로 설정합니다. 그러면 `ENABLE_TOOL_SEARCH` 설정에 관계없이 해당 서버의 모든 도구가 세션 시작 시 컨텍스트에 로드됩니다. 매 턴마다 Claude가 필요로 하는 소수의 도구에 이를 사용합니다. 각 미리 로드된 도구는 대화에 사용할 수 있는 컨텍스트를 소비하기 때문입니다.

1167 

1168다음 `.mcp.json` 항목은 한 HTTP 서버를 제외하면서 다른 서버는 연기된 상태로 유지합니다:

1169 

1170```json theme={null}

1171{

1172 "mcpServers": {

1173 "core-tools": {

1174 "type": "http",

1175 "url": "https://mcp.example.com/mcp",

1176 "alwaysLoad": true

1177 }

1178 }

1179}

1180```

1181 

1182`alwaysLoad` 필드는 모든 서버 유형에서 사용 가능하며 Claude Code v2.1.121 이상이 필요합니다. MCP 서버는 도구의 `_meta` 객체에 `"anthropic/alwaysLoad": true`를 포함하여 개별 도구를 항상 로드되도록 표시할 수도 있으며, 이는 해당 도구에만 동일한 효과를 갖습니다.

1183 

1184## MCP 프롬프트를 명령으로 사용

1185 

1186MCP 서버는 Claude Code에서 명령으로 사용 가능하게 되는 프롬프트를 노출할 수 있습니다.

1187 

1188### MCP 프롬프트 실행

1189 

1190<Steps>

1191 <Step title="사용 가능한 프롬프트 검색">

1192 `/`를 입력하여 MCP 서버의 프롬프트를 포함한 모든 사용 가능한 명령을 확인합니다. MCP 프롬프트는 `/mcp__servername__promptname` 형식으로 나타납니다.

1193 </Step>

1194 

1195 <Step title="인수 없이 프롬프트 실행">

1196 ```text theme={null}

1197 /mcp__github__list_prs

1198 ```

1199 </Step>

1200 

1201 <Step title="인수를 사용하여 프롬프트 실행">

1202 많은 프롬프트는 인수를 허용합니다. 명령 뒤에 공백으로 구분하여 전달합니다:

1203 

1204 ```text theme={null}

1205 /mcp__github__pr_review 456

1206 ```

1207 

1208 ```text theme={null}

1209 /mcp__jira__create_issue "로그인 흐름의 버그" high

1210 ```

1211 </Step>

1212</Steps>

1213 

1214<Tip>

1215 팁:

1216 

1217 * MCP 프롬프트는 연결된 서버에서 동적으로 검색됩니다

1218 * 인수는 프롬프트의 정의된 매개변수를 기반으로 구문 분석됩니다

1219 * 프롬프트 결과는 대화에 직접 주입됩니다

1220 * 서버 및 프롬프트 이름은 정규화됩니다 (공백은 밑줄이 됨)

1221</Tip>

1222 

1223## 관리되는 MCP 구성

1224 

1225MCP 서버에 대한 중앙 집중식 제어가 필요한 조직의 경우 Claude Code는 두 가지 구성 옵션을 지원합니다:

1226 

12271. **`managed-mcp.json`을 사용한 독점 제어**: 사용자가 수정하거나 확장할 수 없는 고정된 MCP 서버 세트 배포

12282. **허용 목록/거부 목록을 사용한 정책 기반 제어**: 사용자가 자신의 서버를 추가할 수 있지만 허용되는 서버를 제한

1229 

1230이러한 옵션을 통해 IT 관리자는 다음을 수행할 수 있습니다:

1231 

1232* **직원이 액세스할 수 있는 MCP 서버 제어**: 조직 전체에 표준화된 승인된 MCP 서버 세트 배포

1233* **승인되지 않은 MCP 서버 방지**: 사용자가 승인되지 않은 MCP 서버를 추가하지 못하도록 제한

1234* **MCP 완전히 비활성화**: 필요한 경우 MCP 기능을 완전히 제거

1235 

1236### 옵션 1: managed-mcp.json을 사용한 독점 제어

1237 

1238`managed-mcp.json` 파일을 배포하면 모든 MCP 서버에 대한 **독점 제어**를 갖습니다. 사용자는 이 파일에 정의된 서버 이외의 MCP 서버를 추가, 수정 또는 사용할 수 없습니다. 이는 완전한 제어를 원하는 조직에 가장 간단한 방법입니다.

1239 

1240시스템 관리자는 구성 파일을 시스템 전체 디렉토리에 배포합니다:

1241 

1242* macOS: `/Library/Application Support/ClaudeCode/managed-mcp.json`

1243* Linux 및 WSL: `/etc/claude-code/managed-mcp.json`

1244* Windows: `C:\Program Files\ClaudeCode\managed-mcp.json`

1245 

1246<Note>

1247 이는 시스템 전체 경로입니다 (`~/Library/...`와 같은 사용자 홈 디렉토리가 아님). IT 관리자가 배포하기 위해 관리자 권한이 필요합니다.

1248</Note>

1249 

1250`managed-mcp.json` 파일은 표준 `.mcp.json` 파일과 동일한 형식을 사용합니다:

1251 

1252```json theme={null}

1253{

1254 "mcpServers": {

1255 "github": {

1256 "type": "http",

1257 "url": "https://api.githubcopilot.com/mcp/"

1258 },

1259 "sentry": {

1260 "type": "http",

1261 "url": "https://mcp.sentry.dev/mcp"

1262 },

1263 "company-internal": {

1264 "type": "stdio",

1265 "command": "/usr/local/bin/company-mcp-server",

1266 "args": ["--config", "/etc/company/mcp-config.json"],

1267 "env": {

1268 "COMPANY_API_URL": "https://internal.company.com"

1269 }

1270 }

1271 }

1272}

1273```

1274 

1275### 옵션 2: 허용 목록 및 거부 목록을 사용한 정책 기반 제어

1276 

1277독점 제어를 하는 대신 관리자는 사용자가 자신의 MCP 서버를 구성할 수 있도록 허용하면서 허용되는 서버에 제한을 적용할 수 있습니다. 이 방법은 [관리되는 설정 파일](/ko/settings#settings-files)의 `allowedMcpServers` 및 `deniedMcpServers`를 사용합니다.

1278 

1279<Note>

1280 **옵션 선택**: 사용자 사용자 정의 없이 고정된 서버 세트를 배포하려면 옵션 1 (`managed-mcp.json`)을 사용합니다. 사용자가 정책 제약 내에서 자신의 서버를 추가할 수 있도록 하려면 옵션 2 (허용 목록/거부 목록)를 사용합니다.

1281</Note>

1282 

1283#### 제한 옵션

1284 

1285허용 목록 또는 거부 목록의 각 항목은 세 가지 방식으로 서버를 제한할 수 있습니다:

1286 

12871. **서버 이름으로** (`serverName`): 서버의 구성된 이름과 일치

12882. **명령으로** (`serverCommand`): stdio 서버를 시작하는 데 사용되는 정확한 명령 및 인수와 일치

12893. **URL 패턴으로** (`serverUrl`): 와일드카드 지원을 사용하여 원격 서버 URL과 일치

1290 

1291**중요**: 각 항목은 `serverName`, `serverCommand` 또는 `serverUrl` 중 정확히 하나를 가져야 합니다.

1292 

1293#### 구성 예

1294 

1295```json theme={null}

1296{

1297 "allowedMcpServers": [

1298 // 서버 이름으로 허용

1299 { "serverName": "github" },

1300 { "serverName": "sentry" },

1301 

1302 // 정확한 명령으로 허용 (stdio 서버의 경우)

1303 { "serverCommand": ["npx", "-y", "@modelcontextprotocol/server-filesystem"] },

1304 { "serverCommand": ["python", "/usr/local/bin/approved-server.py"] },

1305 

1306 // URL 패턴으로 허용 (원격 서버의 경우)

1307 { "serverUrl": "https://mcp.company.com/*" },

1308 { "serverUrl": "https://*.internal.corp/*" }

1309 ],

1310 "deniedMcpServers": [

1311 // 서버 이름으로 차단

1312 { "serverName": "dangerous-server" },

1313 

1314 // 정확한 명령으로 차단 (stdio 서버의 경우)

1315 { "serverCommand": ["npx", "-y", "unapproved-package"] },

1316 

1317 // URL 패턴으로 차단 (원격 서버의 경우)

1318 { "serverUrl": "https://*.untrusted.com/*" }

1319 ]

1320}

1321```

1322 

1323#### 명령 기반 제한의 작동 방식

1324 

1325**정확한 일치**:

1326 

1327* 명령 배열은 **정확히** 일치해야 합니다 - 명령과 올바른 순서의 모든 인수

1328* 예: `["npx", "-y", "server"]`는 `["npx", "server"]` 또는 `["npx", "-y", "server", "--flag"]`와 일치하지 않습니다

1329 

1330**Stdio 서버 동작**:

1331 

1332* 허용 목록에 **모든** `serverCommand` 항목이 포함되면 stdio 서버는 해당 명령 중 하나와 일치해야 합니다

1333* Stdio 서버는 명령 제한이 있을 때 이름만으로는 통과할 수 없습니다

1334* 이는 관리자가 실행할 수 있는 명령을 적용할 수 있도록 합니다

1335 

1336**비 stdio 서버 동작**:

1337 

1338* 원격 서버 (HTTP, SSE, WebSocket)는 허용 목록에 `serverUrl` 항목이 있을 때 URL 기반 일치를 사용합니다

1339* URL 항목이 없으면 원격 서버는 이름 기반 일치로 돌아갑니다

1340* 명령 제한은 원격 서버에 적용되지 않습니다

1341 

1342#### URL 기반 제한의 작동 방식

1343 

1344URL 패턴은 `*`를 사용하여 와일드카드를 지원하여 모든 문자 시퀀스와 일치합니다. 이는 전체 도메인 또는 하위 도메인을 허용하는 데 유용합니다.

1345 

1346**와일드카드 예**:

1347 

1348* `https://mcp.company.com/*` - 특정 도메인의 모든 경로 허용

1349* `https://*.example.com/*` - example.com의 모든 하위 도메인 허용

1350* `http://localhost:*/*` - localhost의 모든 포트 허용

1351 

1352**원격 서버 동작**:

1353 

1354* 허용 목록에 **모든** `serverUrl` 항목이 포함되면 원격 서버는 해당 URL 패턴 중 하나와 일치해야 합니다

1355* 원격 서버는 URL 제한이 있을 때 이름만으로는 통과할 수 없습니다

1356* 이는 관리자가 허용되는 원격 엔드포인트를 적용할 수 있도록 합니다

1357 

1358<Accordion title="예: URL 전용 허용 목록">

1359 ```json theme={null}

1360 {

1361 "allowedMcpServers": [

1362 { "serverUrl": "https://mcp.company.com/*" },

1363 { "serverUrl": "https://*.internal.corp/*" }

1364 ]

1365 }

1366 ```

1367 

1368 **결과**:

1369 

1370 * `https://mcp.company.com/api`의 HTTP 서버: ✅ 허용됨 (URL 패턴과 일치)

1371 * `https://api.internal.corp/mcp`의 HTTP 서버: ✅ 허용됨 (와일드카드 하위 도메인과 일치)

1372 * `https://external.com/mcp`의 HTTP 서버: ❌ 차단됨 (URL 패턴과 일치하지 않음)

1373 * 모든 명령의 Stdio 서버: ❌ 차단됨 (일치할 이름 또는 명령 항목 없음)

1374</Accordion>

1375 

1376<Accordion title="예: 명령 전용 허용 목록">

1377 ```json theme={null}

1378 {

1379 "allowedMcpServers": [

1380 { "serverCommand": ["npx", "-y", "approved-package"] }

1381 ]

1382 }

1383 ```

1384 

1385 **결과**:

1386 

1387 * `["npx", "-y", "approved-package"]`를 사용한 Stdio 서버: ✅ 허용됨 (명령과 일치)

1388 * `["node", "server.js"]`를 사용한 Stdio 서버: ❌ 차단됨 (명령과 일치하지 않음)

1389 * "my-api"라는 이름의 HTTP 서버: ❌ 차단됨 (일치할 이름 항목 없음)

1390</Accordion>

1391 

1392<Accordion title="예: 혼합 이름 및 명령 허용 목록">

1393 ```json theme={null}

1394 {

1395 "allowedMcpServers": [

1396 { "serverName": "github" },

1397 { "serverCommand": ["npx", "-y", "approved-package"] }

1398 ]

1399 }

1400 ```

1401 

1402 **결과**:

1403 

1404 * `["npx", "-y", "approved-package"]`를 사용한 "local-tool"이라는 Stdio 서버: ✅ 허용됨 (명령과 일치)

1405 * `["node", "server.js"]`를 사용한 "local-tool"이라는 Stdio 서버: ❌ 차단됨 (명령 항목이 있지만 일치하지 않음)

1406 * `["node", "server.js"]`를 사용한 "github"라는 Stdio 서버: ❌ 차단됨 (명령 항목이 있을 때 stdio 서버는 명령과 일치해야 함)

1407 * "github"라는 이름의 HTTP 서버: ✅ 허용됨 (이름과 일치)

1408 * "other-api"라는 이름의 HTTP 서버: ❌ 차단됨 (이름과 일치하지 않음)

1409</Accordion>

1410 

1411<Accordion title="예: 이름 전용 허용 목록">

1412 ```json theme={null}

1413 {

1414 "allowedMcpServers": [

1415 { "serverName": "github" },

1416 { "serverName": "internal-tool" }

1417 ]

1418 }

1419 ```

1420 

1421 **결과**:

1422 

1423 * 모든 명령을 사용한 "github"라는 Stdio 서버: ✅ 허용됨 (명령 제한 없음)

1424 * 모든 명령을 사용한 "internal-tool"이라는 Stdio 서버: ✅ 허용됨 (명령 제한 없음)

1425 * "github"라는 이름의 HTTP 서버: ✅ 허용됨 (이름과 일치)

1426 * "other"라는 이름의 모든 서버: ❌ 차단됨 (이름과 일치하지 않음)

1427</Accordion>

1428 

1429#### 허용 목록 동작 (`allowedMcpServers`)

1430 

1431* `undefined` (기본값): 제한 없음 - 사용자는 모든 MCP 서버를 구성할 수 있습니다

1432* 빈 배열 `[]`: 완전한 잠금 - 사용자는 MCP 서버를 구성할 수 없습니다

1433* 항목 목록: 사용자는 이름, 명령 또는 URL 패턴과 일치하는 서버만 구성할 수 있습니다

1434 

1435#### 거부 목록 동작 (`deniedMcpServers`)

1436 

1437* `undefined` (기본값): 차단된 서버 없음

1438* 빈 배열 `[]`: 차단된 서버 없음

1439* 항목 목록: 지정된 서버는 모든 범위에서 명시적으로 차단됩니다

1440 

1441#### 중요한 참고 사항

1442 

1443* **옵션 1과 옵션 2를 결합할 수 있습니다**: `managed-mcp.json`이 존재하면 독점 제어를 가지며 사용자는 서버를 추가할 수 없습니다. 허용 목록/거부 목록은 여전히 관리되는 서버 자체에 적용됩니다.

1444* **거부 목록이 절대 우선순위를 갖습니다**: 서버가 거부 목록 항목과 일치하면 (이름, 명령 또는 URL로) 허용 목록에 있어도 차단됩니다

1445* 이름 기반, 명령 기반 및 URL 기반 제한이 함께 작동합니다: 서버는 이름 항목, 명령 항목 또는 URL 패턴과 일치하면 통과합니다 (거부 목록으로 차단되지 않는 한)

1446 

1447<Note>

1448 **`managed-mcp.json` 사용 시**: 사용자는 `claude mcp add` 또는 구성 파일을 통해 MCP 서버를 추가할 수 없습니다. `allowedMcpServers` 및 `deniedMcpServers` 설정은 여전히 실제로 로드되는 관리되는 서버를 필터링하기 위해 적용됩니다.

1449</Note>

memory.md +408 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Claude가 프로젝트를 기억하는 방법

6 

7> CLAUDE.md 파일로 Claude에 지속적인 지침을 제공하고, 자동 메모리를 통해 Claude가 자동으로 학습을 축적하도록 합니다.

8 

9각 Claude Code 세션은 새로운 컨텍스트 윈도우로 시작됩니다. 두 가지 메커니즘이 세션 간에 지식을 전달합니다:

10 

11* **CLAUDE.md 파일**: Claude에 지속적인 컨텍스트를 제공하기 위해 작성하는 지침

12* **자동 메모리**: 수정 및 선호도에 따라 Claude가 자신을 위해 작성하는 노트

13 

14이 페이지에서는 다음을 다룹니다:

15 

16* [CLAUDE.md 파일 작성 및 구성](#claude-md-files)

17* [`.claude/rules/`를 사용하여 특정 파일 유형에 규칙 범위 지정](#organize-rules-with-clauderules)

18* [자동 메모리 구성](#auto-memory)하여 Claude가 자동으로 노트를 작성하도록 함

19* [지침이 따라지지 않을 때 문제 해결](#troubleshoot-memory-issues)

20 

21## CLAUDE.md vs 자동 메모리

22 

23Claude Code에는 두 가지 상호 보완적인 메모리 시스템이 있습니다. 둘 다 모든 대화의 시작 시 로드됩니다. Claude는 이들을 강제된 구성이 아닌 컨텍스트로 취급합니다. 지침이 더 구체적이고 간결할수록 Claude가 더 일관되게 따릅니다.

24 

25| | CLAUDE.md 파일 | 자동 메모리 |

26| :-------- | :---------------------- | :------------------------------- |

27| **작성자** | 사용자 | Claude |

28| **포함 내용** | 지침 및 규칙 | 학습 및 패턴 |

29| **범위** | 프로젝트, 사용자 또는 조직 | 작업 트리당 |

30| **로드 대상** | 모든 세션 | 모든 세션(처음 200줄 또는 25KB) |

31| **사용 목적** | 코딩 표준, 워크플로우, 프로젝트 아키텍처 | 빌드 명령, 디버깅 인사이트, Claude가 발견한 선호도 |

32 

33Claude의 동작을 안내하려면 CLAUDE.md 파일을 사용합니다. 자동 메모리를 통해 Claude는 수동 작업 없이 수정 사항에서 학습할 수 있습니다.

34 

35Subagent도 자신의 자동 메모리를 유지할 수 있습니다. 자세한 내용은 [subagent 구성](/ko/sub-agents#enable-persistent-memory)을 참조하세요.

36 

37## CLAUDE.md 파일

38 

39CLAUDE.md 파일은 프로젝트, 개인 워크플로우 또는 전체 조직에 대해 Claude에 지속적인 지침을 제공하는 마크다운 파일입니다. 이러한 파일을 일반 텍스트로 작성하면 Claude가 모든 세션의 시작 시 읽습니다.

40 

41### CLAUDE.md에 추가할 시기

42 

43CLAUDE.md를 다시 설명해야 할 내용을 적어두는 장소로 취급합니다. 다음과 같은 경우에 추가합니다:

44 

45* Claude가 같은 실수를 두 번째로 합니다

46* 코드 리뷰에서 Claude가 이 코드베이스에 대해 알아야 할 것을 발견합니다

47* 지난 세션에 입력한 것과 같은 수정 또는 설명을 채팅에 입력합니다

48* 새로운 팀원이 생산성을 높이기 위해 같은 컨텍스트가 필요합니다

49 

50모든 세션에서 Claude가 보유해야 할 사실로 유지합니다: 빌드 명령, 규칙, 프로젝트 레이아웃, "항상 X를 수행합니다" 규칙. 항목이 다단계 절차이거나 코드베이스의 한 부분에만 중요한 경우 대신 [skill](/ko/skills) 또는 [경로 범위 규칙](#organize-rules-with-claude/rules/)으로 이동합니다. [확장 개요](/ko/features-overview#build-your-setup-over-time)에서 각 메커니즘을 사용할 시기를 다룹니다.

51 

52### CLAUDE.md 파일을 어디에 배치할지 선택

53 

54CLAUDE.md 파일은 여러 위치에 있을 수 있으며, 각각 다른 범위를 가집니다. 더 구체적인 위치가 더 광범위한 위치보다 우선합니다.

55 

56| 범위 | 위치 | 목적 | 사용 사례 | 공유 대상 |

57| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | ---------------------------- | -------------- |

58| **관리 정책** | • macOS: `/Library/Application Support/ClaudeCode/CLAUDE.md`<br />• Linux 및 WSL: `/etc/claude-code/CLAUDE.md`<br />• Windows: `C:\Program Files\ClaudeCode\CLAUDE.md` | IT/DevOps에서 관리하는 조직 전체 지침 | 회사 코딩 표준, 보안 정책, 규정 준수 요구사항 | 조직의 모든 사용자 |

59| **프로젝트 지침** | `./CLAUDE.md` 또는 `./.claude/CLAUDE.md` | 프로젝트에 대한 팀 공유 지침 | 프로젝트 아키텍처, 코딩 표준, 일반적인 워크플로우 | 소스 제어를 통한 팀 멤버 |

60| **사용자 지침** | `~/.claude/CLAUDE.md` | 모든 프로젝트에 대한 개인 선호도 | 코드 스타일 선호도, 개인 도구 단축키 | 본인만(모든 프로젝트) |

61| **로컬 지침** | `./CLAUDE.local.md` | 개인 프로젝트별 선호도; `.gitignore`에 추가 | 샌드박스 URL, 선호하는 테스트 데이터 | 본인만(현재 프로젝트) |

62 

63작업 디렉토리 위의 디렉토리 계층 구조에 있는 CLAUDE.md 및 CLAUDE.local.md 파일은 시작 시 전체 로드됩니다. 하위 디렉토리의 파일은 Claude가 해당 디렉토리의 파일을 읽을 때 필요에 따라 로드됩니다. [CLAUDE.md 파일이 로드되는 방식](#how-claude-md-files-load)에서 전체 해석 순서를 참조하세요.

64 

65대규모 프로젝트의 경우 [프로젝트 규칙](#organize-rules-with-claude/rules/)을 사용하여 지침을 주제별 파일로 나눌 수 있습니다. 규칙을 통해 특정 파일 유형 또는 하위 디렉토리에 지침의 범위를 지정할 수 있습니다.

66 

67### 프로젝트 CLAUDE.md 설정

68 

69프로젝트 CLAUDE.md는 `./CLAUDE.md` 또는 `./.claude/CLAUDE.md`에 저장할 수 있습니다. 이 파일을 만들고 프로젝트에서 작업하는 모든 사람에게 적용되는 지침을 추가합니다: 빌드 및 테스트 명령, 코딩 표준, 아키텍처 결정, 명명 규칙 및 일반적인 워크플로우. 이러한 지침은 버전 제어를 통해 팀과 공유되므로 개인 선호도보다는 프로젝트 수준의 표준에 중점을 두세요.

70 

71<Tip>

72 `/init`을 실행하여 시작 CLAUDE.md를 자동으로 생성합니다. Claude는 코드베이스를 분석하고 발견한 빌드 명령, 테스트 지침 및 프로젝트 규칙이 포함된 파일을 만듭니다. CLAUDE.md가 이미 존재하면 `/init`은 덮어쓰지 않고 개선 사항을 제안합니다. Claude가 자신에게 발견하지 못할 지침으로 그곳에서 개선합니다.

73 

74 `CLAUDE_CODE_NEW_INIT=1`을 설정하여 대화형 다단계 흐름을 활성화합니다. `/init`은 설정할 아티팩트를 묻습니다: CLAUDE.md 파일, skills 및 hooks. 그런 다음 subagent로 코드베이스를 탐색하고 후속 질문을 통해 간격을 채우며 파일을 작성하기 전에 검토 가능한 제안을 제시합니다.

75</Tip>

76 

77### 효과적인 지침 작성

78 

79CLAUDE.md 파일은 모든 세션의 시작 시 컨텍스트 윈도우에 로드되어 대화와 함께 토큰을 소비합니다. [컨텍스트 윈도우 시각화](/ko/context-window)는 CLAUDE.md가 나머지 시작 컨텍스트를 기준으로 어디에 로드되는지 보여줍니다. 강제된 구성이 아닌 컨텍스트이기 때문에 지침을 작성하는 방식이 Claude가 얼마나 안정적으로 따르는지에 영향을 미칩니다. 구체적이고 간결하며 잘 구조화된 지침이 가장 잘 작동합니다.

80 

81**크기**: CLAUDE.md 파일당 200줄 이하를 목표로 합니다. 더 긴 파일은 더 많은 컨텍스트를 소비하고 준수를 줄입니다. 지침이 커지면 [경로 범위 규칙](#path-specific-rules)을 사용하여 Claude가 일치하는 파일로 작업할 때만 지침이 로드되도록 하여 노이즈를 줄이고 컨텍스트 공간을 절약할 수 있습니다. [가져오기](#import-additional-files)를 사용하여 조직을 위해 콘텐츠를 분할할 수도 있지만, 가져온 파일은 여전히 로드되고 시작 시 컨텍스트 윈도우에 들어갑니다.

82 

83**구조**: 마크다운 헤더와 글머리 기호를 사용하여 관련 지침을 그룹화합니다. Claude는 독자와 같은 방식으로 구조를 스캔합니다: 구성된 섹션이 조밀한 단락보다 따르기 쉽습니다.

84 

85**구체성**: 검증할 수 있을 정도로 구체적인 지침을 작성합니다. 예를 들어:

86 

87* "코드를 제대로 포맷합니다"보다는 "2칸 들여쓰기 사용"

88* "변경 사항을 테스트합니다"보다는 "커밋하기 전에 `npm test` 실행"

89* "파일을 정리된 상태로 유지합니다"보다는 "API 핸들러는 `src/api/handlers/`에 있습니다"

90 

91**일관성**: 두 규칙이 서로 모순되면 Claude가 하나를 임의로 선택할 수 있습니다. CLAUDE.md 파일, 하위 디렉토리의 중첩된 CLAUDE.md 파일 및 [`.claude/rules/`](#organize-rules-with-claude/rules/)을 정기적으로 검토하여 오래되었거나 충돌하는 지침을 제거합니다. 모노레포에서는 [`claudeMdExcludes`](#exclude-specific-claude-md-files)를 사용하여 작업과 관련이 없는 다른 팀의 CLAUDE.md 파일을 건너뜁니다.

92 

93### 추가 파일 가져오기

94 

95CLAUDE.md 파일은 `@path/to/import` 구문을 사용하여 추가 파일을 가져올 수 있습니다. 가져온 파일은 확장되어 참조하는 CLAUDE.md와 함께 시작 시 컨텍스트에 로드됩니다.

96 

97상대 경로와 절대 경로 모두 허용됩니다. 상대 경로는 작업 디렉토리가 아닌 가져오기를 포함하는 파일을 기준으로 해석됩니다. 가져온 파일은 최대 5개 홉의 깊이로 다른 파일을 재귀적으로 가져올 수 있습니다.

98 

99README, package.json 및 워크플로우 가이드를 가져오려면 CLAUDE.md의 어디든지 `@` 구문으로 참조합니다:

100 

101```text theme={null}

102프로젝트 개요는 @README를 참조하고 이 프로젝트의 사용 가능한 npm 명령은 @package.json을 참조합니다.

103 

104# 추가 지침

105- git 워크플로우 @docs/git-instructions.md

106```

107 

108개인 프로젝트별 선호도의 경우 프로젝트 루트에서 `CLAUDE.local.md`를 만듭니다. 이는 `CLAUDE.md`와 함께 로드되고 같은 방식으로 취급됩니다. 버전 제어에 커밋되지 않도록 `.gitignore`에 `CLAUDE.local.md`를 추가합니다. `/init`을 실행하고 개인 옵션을 선택하면 자동으로 수행됩니다.

109 

110동일한 저장소의 여러 git worktree에서 작업하는 경우 gitignored `CLAUDE.local.md`는 생성한 worktree에만 존재합니다. worktree 간에 개인 지침을 공유하려면 대신 홈 디렉토리에서 파일을 가져옵니다:

111 

112```text theme={null}

113# 개인 선호도

114- @~/.claude/my-project-instructions.md

115```

116 

117<Warning>

118 Claude Code가 프로젝트에서 외부 가져오기를 처음 만날 때 파일을 나열하는 승인 대화를 표시합니다. 거부하면 가져오기가 비활성화된 상태로 유지되고 대화가 다시 나타나지 않습니다.

119</Warning>

120 

121지침을 구성하는 더 구조화된 접근 방식은 [`.claude/rules/`](#organize-rules-with-claude/rules/)을 참조하세요.

122 

123### AGENTS.md

124 

125Claude Code는 `CLAUDE.md`를 읽으며 `AGENTS.md`를 읽지 않습니다. 저장소가 이미 다른 코딩 에이전트에 `AGENTS.md`를 사용하는 경우 `CLAUDE.md`를 만들어 이를 가져오면 두 도구가 중복 없이 동일한 지침을 읽을 수 있습니다. Claude 특정 지침을 가져오기 아래에 추가할 수도 있습니다. Claude는 가져온 파일을 세션 시작 시 로드한 다음 나머지를 추가합니다:

126 

127```markdown CLAUDE.md theme={null}

128@AGENTS.md

129 

130## Claude Code

131 

132`src/billing/` 아래의 변경 사항에 대해 Plan Mode를 사용합니다.

133```

134 

135### CLAUDE.md 파일이 로드되는 방식

136 

137Claude Code는 현재 작업 디렉토리에서 디렉토리 트리를 따라 올라가며 CLAUDE.md 파일을 읽고 각 디렉토리를 확인합니다. 즉, `foo/bar/`에서 Claude Code를 실행하면 `foo/bar/CLAUDE.md`, `foo/CLAUDE.md` 및 그 옆의 모든 `CLAUDE.local.md` 파일에서 지침을 로드합니다.

138 

139발견된 모든 파일은 서로를 재정의하지 않고 컨텍스트에 연결됩니다. 디렉토리 트리 전체에서 콘텐츠는 파일 시스템 루트에서 작업 디렉토리까지 순서대로 정렬됩니다. `foo/bar/` 예제의 경우 `foo/CLAUDE.md`가 `foo/bar/CLAUDE.md`보다 먼저 컨텍스트에 나타나므로 Claude를 시작한 위치에 더 가까운 지침이 마지막에 읽힙니다. 각 디렉토리 내에서 `CLAUDE.local.md`는 `CLAUDE.md` 후에 추가되므로 개인 노트가 해당 수준에서 Claude가 읽는 마지막 것입니다.

140 

141Claude는 또한 현재 작업 디렉토리 아래의 하위 디렉토리에서 `CLAUDE.md` 및 `CLAUDE.local.md` 파일을 발견합니다. 시작 시 로드하는 대신 Claude가 해당 하위 디렉토리의 파일을 읽을 때 포함됩니다.

142 

143대규모 모노레포에서 작업하고 다른 팀의 CLAUDE.md 파일이 선택되는 경우 [`claudeMdExcludes`](#exclude-specific-claude-md-files)를 사용하여 건너뜁니다.

144 

145CLAUDE.md 파일의 블록 수준 HTML 주석(`<!-- maintainer notes -->`)은 콘텐츠가 Claude의 컨텍스트에 주입되기 전에 제거됩니다. 컨텍스트 토큰을 소비하지 않고 인간 유지보수자를 위한 노트를 남기는 데 사용합니다. 코드 블록 내의 주석은 보존됩니다. Read 도구로 CLAUDE.md 파일을 직접 열 때 주석이 표시된 상태로 유지됩니다.

146 

147#### 추가 디렉토리에서 로드

148 

149`--add-dir` 플래그는 Claude에 주 작업 디렉토리 외부의 추가 디렉토리에 대한 액세스를 제공합니다. 기본적으로 이러한 디렉토리의 CLAUDE.md 파일은 로드되지 않습니다.

150 

151추가 디렉토리에서 메모리 파일을 로드하려면 `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD` 환경 변수를 설정합니다:

152 

153```bash theme={null}

154CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude --add-dir ../shared-config

155```

156 

157이는 추가 디렉토리에서 `CLAUDE.md`, `.claude/CLAUDE.md`, `.claude/rules/*.md` 및 `CLAUDE.local.md`를 로드합니다. [`--setting-sources`](/ko/cli-reference)에서 `local`을 제외하면 `CLAUDE.local.md`는 건너뜁니다.

158 

159### `.claude/rules/`로 규칙 구성

160 

161대규모 프로젝트의 경우 `.claude/rules/` 디렉토리를 사용하여 지침을 여러 파일로 구성할 수 있습니다. 이렇게 하면 지침이 모듈식이 되고 팀이 유지 관리하기 쉬워집니다. 규칙을 [특정 파일 경로로 범위 지정](#path-specific-rules)할 수도 있으므로 Claude가 일치하는 파일로 작업할 때만 컨텍스트에 로드되어 노이즈를 줄이고 컨텍스트 공간을 절약합니다.

162 

163<Note>

164 규칙은 모든 세션 또는 일치하는 파일이 열릴 때 컨텍스트에 로드됩니다. 항상 컨텍스트에 있을 필요가 없는 작업별 지침의 경우 대신 [skills](/ko/skills)를 사용하세요. 이는 호출할 때 또는 Claude가 프롬프트와 관련이 있다고 판단할 때만 로드됩니다.

165</Note>

166 

167#### 규칙 설정

168 

169프로젝트의 `.claude/rules/` 디렉토리에 마크다운 파일을 배치합니다. 각 파일은 `testing.md` 또는 `api-design.md`와 같은 설명적인 파일명으로 한 가지 주제를 다루어야 합니다. 모든 `.md` 파일은 재귀적으로 발견되므로 `frontend/` 또는 `backend/`와 같은 하위 디렉토리로 규칙을 구성할 수 있습니다:

170 

171```text theme={null}

172your-project/

173├── .claude/

174│ ├── CLAUDE.md # 주 프로젝트 지침

175│ └── rules/

176│ ├── code-style.md # 코드 스타일 가이드라인

177│ ├── testing.md # 테스트 규칙

178│ └── security.md # 보안 요구사항

179```

180 

181[`paths` frontmatter](#path-specific-rules)가 없는 규칙은 `.claude/CLAUDE.md`와 동일한 우선순위로 시작 시 로드됩니다.

182 

183#### 경로별 규칙

184 

185규칙은 `paths` 필드가 있는 YAML frontmatter를 사용하여 특정 파일로 범위를 지정할 수 있습니다. 이러한 조건부 규칙은 Claude가 지정된 패턴과 일치하는 파일로 작업할 때만 적용됩니다.

186 

187```markdown theme={null}

188---

189paths:

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

191---

192 

193# API 개발 규칙

194 

195- 모든 API 엔드포인트는 입력 검증을 포함해야 합니다

196- 표준 오류 응답 형식을 사용합니다

197- OpenAPI 문서 주석을 포함합니다

198```

199 

200`paths` 필드가 없는 규칙은 무조건 로드되며 모든 파일에 적용됩니다. 경로 범위 규칙은 모든 도구 사용 시가 아니라 Claude가 패턴과 일치하는 파일을 읽을 때 트리거됩니다.

201 

202`paths` 필드에서 glob 패턴을 사용하여 확장명, 디렉토리 또는 조합으로 파일을 일치시킵니다:

203 

204| 패턴 | 일치 |

205| ---------------------- | ------------------------- |

206| `**/*.ts` | 모든 디렉토리의 모든 TypeScript 파일 |

207| `src/**/*` | `src/` 디렉토리 아래의 모든 파일 |

208| `*.md` | 프로젝트 루트의 마크다운 파일 |

209| `src/components/*.tsx` | 특정 디렉토리의 React 컴포넌트 |

210 

211여러 패턴을 지정하고 중괄호 확장을 사용하여 한 패턴에서 여러 확장명을 일치시킬 수 있습니다:

212 

213```markdown theme={null}

214---

215paths:

216 - "src/**/*.{ts,tsx}"

217 - "lib/**/*.ts"

218 - "tests/**/*.test.ts"

219---

220```

221 

222#### 심볼릭 링크로 프로젝트 간 규칙 공유

223 

224`.claude/rules/` 디렉토리는 심볼릭 링크를 지원하므로 공유 규칙 세트를 유지하고 여러 프로젝트에 링크할 수 있습니다. 심볼릭 링크는 해석되어 정상적으로 로드되며 순환 심볼릭 링크는 감지되고 우아하게 처리됩니다.

225 

226이 예제는 공유 디렉토리와 개별 파일을 모두 링크합니다:

227 

228```bash theme={null}

229ln -s ~/shared-claude-rules .claude/rules/shared

230ln -s ~/company-standards/security.md .claude/rules/security.md

231```

232 

233#### 사용자 수준 규칙

234 

235`~/.claude/rules/`의 개인 규칙은 컴퓨터의 모든 프로젝트에 적용됩니다. 프로젝트별이 아닌 선호도에 사용합니다:

236 

237```text theme={null}

238~/.claude/rules/

239├── preferences.md # 개인 코딩 선호도

240└── workflows.md # 선호하는 워크플로우

241```

242 

243사용자 수준 규칙은 프로젝트 규칙 전에 로드되어 프로젝트 규칙에 더 높은 우선순위를 제공합니다.

244 

245### 대규모 팀을 위한 CLAUDE.md 관리

246 

247조직에서 Claude Code를 팀 전체에 배포하는 경우 지침을 중앙 집중식으로 관리하고 로드되는 CLAUDE.md 파일을 제어할 수 있습니다.

248 

249#### 조직 전체 CLAUDE.md 배포

250 

251조직은 컴퓨터의 모든 사용자에게 적용되는 중앙 집중식으로 관리되는 CLAUDE.md를 배포할 수 있습니다. 이 파일은 개별 설정으로 제외될 수 없습니다.

252 

253<Steps>

254 <Step title="관리 정책 위치에서 파일 만들기">

255 * macOS: `/Library/Application Support/ClaudeCode/CLAUDE.md`

256 * Linux 및 WSL: `/etc/claude-code/CLAUDE.md`

257 * Windows: `C:\Program Files\ClaudeCode\CLAUDE.md`

258 </Step>

259 

260 <Step title="구성 관리 시스템으로 배포">

261 MDM, 그룹 정책, Ansible 또는 유사한 도구를 사용하여 개발자 컴퓨터 전체에 파일을 배포합니다. 다른 조직 전체 구성 옵션은 [관리 설정](/ko/permissions#managed-settings)을 참조하세요.

262 </Step>

263</Steps>

264 

265관리 CLAUDE.md와 [관리 설정](/ko/settings#settings-files)은 다른 목적을 제공합니다. 기술적 강제를 위해 설정을 사용하고 CLAUDE.md를 행동 지침으로 사용합니다:

266 

267| 관심사 | 구성 대상 |

268| :-------------------- | :--------------------------------------------- |

269| 특정 도구, 명령 또는 파일 경로 차단 | 관리 설정: `permissions.deny` |

270| 샌드박스 격리 강제 | 관리 설정: `sandbox.enabled` |

271| 환경 변수 및 API 공급자 라우팅 | 관리 설정: `env` |

272| 인증 방법 및 조직 잠금 | 관리 설정: `forceLoginMethod`, `forceLoginOrgUUID` |

273| 코드 스타일 및 품질 가이드라인 | 관리 CLAUDE.md |

274| 데이터 처리 및 규정 준수 알림 | 관리 CLAUDE.md |

275| Claude의 행동 지침 | 관리 CLAUDE.md |

276 

277설정 규칙은 Claude가 무엇을 하기로 결정하든 클라이언트에 의해 강제됩니다. CLAUDE.md 지침은 Claude의 행동을 형성하지만 하드 강제 레이어가 아닙니다.

278 

279#### 특정 CLAUDE.md 파일 제외

280 

281대규모 모노레포에서 상위 CLAUDE.md 파일에는 작업과 관련이 없는 지침이 포함될 수 있습니다. `claudeMdExcludes` 설정을 통해 경로 또는 glob 패턴으로 특정 파일을 건너뛸 수 있습니다.

282 

283이 예제는 상위 폴더의 최상위 CLAUDE.md 및 규칙 디렉토리를 제외합니다. 제외가 컴퓨터에 로컬로 유지되도록 `.claude/settings.local.json`에 추가합니다:

284 

285```json theme={null}

286{

287 "claudeMdExcludes": [

288 "**/monorepo/CLAUDE.md",

289 "/home/user/monorepo/other-team/.claude/rules/**"

290 ]

291}

292```

293 

294패턴은 glob 구문을 사용하여 절대 파일 경로와 일치합니다. `claudeMdExcludes`를 [설정 레이어](/ko/settings#settings-files): 사용자, 프로젝트, 로컬 또는 관리 정책에서 구성할 수 있습니다. 배열은 레이어 전체에서 병합됩니다.

295 

296관리 정책 CLAUDE.md 파일은 제외될 수 없습니다. 이렇게 하면 개별 설정에 관계없이 조직 전체 지침이 항상 적용됩니다.

297 

298## 자동 메모리

299 

300자동 메모리를 통해 Claude는 아무것도 작성하지 않고도 세션 간에 지식을 축적할 수 있습니다. Claude는 작업할 때 자신을 위해 노트를 저장합니다: 빌드 명령, 디버깅 인사이트, 아키텍처 노트, 코드 스타일 선호도 및 워크플로우 습관. Claude는 모든 세션마다 뭔가를 저장하지 않습니다. 정보가 향후 대화에서 유용할지 여부에 따라 기억할 가치가 있는지 결정합니다.

301 

302<Note>

303 자동 메모리는 Claude Code v2.1.59 이상이 필요합니다. `claude --version`으로 버전을 확인합니다.

304</Note>

305 

306### 자동 메모리 활성화 또는 비활성화

307 

308자동 메모리는 기본적으로 켜져 있습니다. 토글하려면 세션에서 `/memory`를 열고 자동 메모리 토글을 사용하거나 프로젝트 설정에서 `autoMemoryEnabled`를 설정합니다:

309 

310```json theme={null}

311{

312 "autoMemoryEnabled": false

313}

314```

315 

316환경 변수를 통해 자동 메모리를 비활성화하려면 `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1`을 설정합니다.

317 

318### 저장소 위치

319 

320각 프로젝트는 `~/.claude/projects/<project>/memory/`에서 자신의 메모리 디렉토리를 가집니다. `<project>` 경로는 git 저장소에서 파생되므로 동일한 저장소 내의 모든 worktree 및 하위 디렉토리는 하나의 자동 메모리 디렉토리를 공유합니다. git 저장소 외부에서는 프로젝트 루트가 대신 사용됩니다.

321 

322자동 메모리를 다른 위치에 저장하려면 사용자 설정의 `~/.claude/settings.json`에서 `autoMemoryDirectory`를 설정합니다:

323 

324```json theme={null}

325{

326 "autoMemoryDirectory": "~/my-custom-memory-dir"

327}

328```

329 

330값은 절대 경로이거나 `~/`로 시작해야 합니다. 이 설정은 정책 및 사용자 설정과 `--settings` 플래그에서 허용됩니다. 프로젝트 디렉토리 내에 있는 두 파일 모두 복제된 저장소가 자동 메모리 쓰기를 민감한 위치로 리디렉션하는 것을 방지하기 위해 프로젝트 또는 로컬 설정에서는 허용되지 않습니다.

331 

332디렉토리에는 `MEMORY.md` 진입점과 선택적 주제 파일이 포함됩니다:

333 

334```text theme={null}

335~/.claude/projects/<project>/memory/

336├── MEMORY.md # 간결한 인덱스, 모든 세션에 로드됨

337├── debugging.md # 디버깅 패턴에 대한 자세한 노트

338├── api-conventions.md # API 설계 결정

339└── ... # Claude가 만드는 다른 주제 파일

340```

341 

342`MEMORY.md`는 메모리 디렉토리의 인덱스 역할을 합니다. Claude는 세션 전체에서 이 디렉토리의 파일을 읽고 쓰며 `MEMORY.md`를 사용하여 저장된 내용을 추적합니다.

343 

344자동 메모리는 컴퓨터 로컬입니다. 동일한 git 저장소 내의 모든 worktree 및 하위 디렉토리는 하나의 자동 메모리 디렉토리를 공유합니다. 파일은 컴퓨터 또는 클라우드 환경 간에 공유되지 않습니다.

345 

346### 작동 방식

347 

348`MEMORY.md`의 처음 200줄 또는 처음 25KB(둘 중 먼저 오는 것)는 모든 대화의 시작 시 로드됩니다. 해당 임계값을 초과하는 콘텐츠는 세션 시작 시 로드되지 않습니다. Claude는 자세한 노트를 별도의 주제 파일로 이동하여 `MEMORY.md`를 간결하게 유지합니다.

349 

350이 제한은 `MEMORY.md`에만 적용됩니다. CLAUDE.md 파일은 길이에 관계없이 전체 로드되지만 더 짧은 파일이 더 나은 준수를 생성합니다.

351 

352`debugging.md` 또는 `patterns.md`와 같은 주제 파일은 시작 시 로드되지 않습니다. Claude는 필요한 정보가 필요할 때 표준 파일 도구를 사용하여 필요에 따라 읽습니다.

353 

354Claude는 세션 중에 메모리 파일을 읽고 씁니다. Claude Code 인터페이스에서 "Writing memory" 또는 "Recalled memory"를 보면 Claude가 `~/.claude/projects/<project>/memory/`에서 활발히 업데이트하거나 읽고 있습니다.

355 

356### 메모리 감사 및 편집

357 

358자동 메모리 파일은 언제든지 편집하거나 삭제할 수 있는 일반 마크다운입니다. [`/memory`](#view-and-edit-with-memory)를 실행하여 세션 내에서 메모리 파일을 찾아보고 엽니다.

359 

360## `/memory`로 보기 및 편집

361 

362`/memory` 명령은 현재 세션에 로드된 모든 CLAUDE.md, CLAUDE.local.md 및 규칙 파일을 나열하고, 자동 메모리를 켜거나 끌 수 있으며, 자동 메모리 폴더를 열 수 있는 링크를 제공합니다. 파일을 선택하여 편집기에서 엽니다.

363 

364Claude에게 "항상 npm이 아닌 pnpm을 사용합니다" 또는 "API 테스트에 로컬 Redis 인스턴스가 필요하다는 것을 기억합니다"와 같이 뭔가를 기억하도록 요청하면 Claude는 자동 메모리에 저장합니다. 대신 CLAUDE.md에 지침을 추가하려면 Claude에게 직접 "이것을 CLAUDE.md에 추가합니다"라고 요청하거나 `/memory`를 통해 파일을 직접 편집합니다.

365 

366## 메모리 문제 해결

367 

368이들은 CLAUDE.md 및 자동 메모리의 가장 일반적인 문제와 디버깅 단계입니다.

369 

370### Claude가 CLAUDE.md를 따르지 않습니다

371 

372CLAUDE.md 콘텐츠는 시스템 프롬프트의 일부가 아니라 시스템 프롬프트 후 사용자 메시지로 전달됩니다. Claude는 이를 읽고 따르려고 하지만 특히 모호하거나 충돌하는 지침의 경우 엄격한 준수를 보장하지 않습니다.

373 

374디버깅하려면:

375 

376* `/memory`를 실행하여 CLAUDE.md 및 CLAUDE.local.md 파일이 로드되는지 확인합니다. 파일이 나열되지 않으면 Claude가 볼 수 없습니다.

377* 관련 CLAUDE.md가 세션에 대해 로드되는 위치에 있는지 확인합니다([CLAUDE.md 파일을 어디에 배치할지 선택](#choose-where-to-put-claude-md-files) 참조).

378* 지침을 더 구체적으로 만듭니다. "2칸 들여쓰기 사용"이 "코드를 제대로 포맷합니다"보다 더 잘 작동합니다.

379* CLAUDE.md 파일 전체에서 충돌하는 지침을 찾습니다. 두 파일이 동일한 동작에 대해 다른 지침을 제공하면 Claude가 하나를 임의로 선택할 수 있습니다.

380 

381시스템 프롬프트 수준의 지침의 경우 [`--append-system-prompt`](/ko/cli-reference#system-prompt-flags)를 사용합니다. 이는 모든 호출 시 전달되어야 하므로 대화형 사용보다는 스크립트 및 자동화에 더 적합합니다.

382 

383<Tip>

384 [`InstructionsLoaded` hook](/ko/hooks#instructionsloaded)을 사용하여 로드된 지침 파일, 로드 시기 및 이유를 정확히 기록합니다. 이는 경로별 규칙 또는 하위 디렉토리의 지연 로드 파일을 디버깅하는 데 유용합니다.

385</Tip>

386 

387### 자동 메모리가 저장한 내용을 모릅니다

388 

389`/memory`를 실행하고 자동 메모리 폴더를 선택하여 Claude가 저장한 내용을 찾아봅니다. 모든 것이 읽고, 편집하거나 삭제할 수 있는 일반 마크다운입니다.

390 

391### CLAUDE.md가 너무 큽니다

392 

393200줄을 초과하는 파일은 더 많은 컨텍스트를 소비하고 준수를 줄일 수 있습니다. [경로별 규칙](#path-specific-rules)을 사용하여 Claude가 일치하는 파일로 작업할 때만 지침을 로드하거나 모든 세션에서 필요하지 않은 콘텐츠를 정리합니다. [`@path` 가져오기](#import-additional-files)로 분할하면 조직화에 도움이 되지만 가져온 파일이 시작 시 로드되므로 컨텍스트를 줄이지는 않습니다.

394 

395### `/compact` 후 지침이 손실된 것 같습니다

396 

397프로젝트 루트 CLAUDE.md는 압축을 완전히 생존합니다: `/compact` 후 Claude는 디스크에서 CLAUDE.md를 다시 읽고 세션에 새로 다시 주입합니다. 하위 디렉토리의 중첩된 CLAUDE.md 파일은 자동으로 다시 주입되지 않습니다. 해당 하위 디렉토리의 파일을 다시 읽을 때 다음에 다시 로드됩니다.

398 

399압축 후 지침이 사라진 경우 CLAUDE.md에 작성되지 않고 대화에서만 제공되었거나 아직 다시 로드되지 않은 중첩된 CLAUDE.md에 있습니다. 세션 간에 지속되도록 CLAUDE.md에 대화 전용 지침을 추가합니다. 압축 후 생존하는 항목의 전체 분석은 [압축 후 생존하는 항목](/ko/context-window#what-survives-compaction)을 참조하세요.

400 

401[효과적인 지침 작성](#write-effective-instructions)을 참조하여 크기, 구조 및 구체성에 대한 지침을 확인합니다.

402 

403## 관련 리소스

404 

405* [구성 디버깅](/ko/debug-your-config): CLAUDE.md 또는 설정이 적용되지 않는 이유 진단

406* [Skills](/ko/skills): 필요에 따라 로드되는 반복 가능한 워크플로우 패키지

407* [설정](/ko/settings): 설정 파일로 Claude Code 동작 구성

408* [Subagent 메모리](/ko/sub-agents#enable-persistent-memory): subagent가 자신의 자동 메모리를 유지하도록 허용

microsoft-foundry.md +314 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Microsoft Foundry의 Claude Code

6 

7> 설정, 구성 및 문제 해결을 포함하여 Microsoft Foundry를 통해 Claude Code를 구성하는 방법을 알아봅니다.

8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

79export const Experiment = ({flag, treatment, children}) => {

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="foundry" />} />

190 

191## 필수 조건

192 

193Microsoft Foundry로 Claude Code를 구성하기 전에 다음을 확인하세요:

194 

195* Microsoft Foundry에 액세스할 수 있는 Azure 구독

196* Microsoft Foundry 리소스 및 배포를 만들 수 있는 RBAC 권한

197* Azure CLI 설치 및 구성(선택 사항 - 자격 증명을 얻을 다른 메커니즘이 없는 경우에만 필요)

198 

199<Note>

200 Claude Code를 여러 사용자에게 배포하는 경우 Anthropic이 새 모델을 출시할 때 중단을 방지하기 위해 [모델 버전을 고정](#4-pin-model-versions)하세요.

201</Note>

202 

203## 설정

204 

205### 1. Microsoft Foundry 리소스 프로비저닝

206 

207먼저 Azure에서 Claude 리소스를 만듭니다:

208 

2091. [Microsoft Foundry 포털](https://ai.azure.com/)로 이동합니다

2102. 새 리소스를 만들고 리소스 이름을 기록합니다

2113. Claude 모델에 대한 배포를 만듭니다:

212 * Claude Opus

213 * Claude Sonnet

214 * Claude Haiku

215 

216### 2. Azure 자격 증명 구성

217 

218Claude Code는 Microsoft Foundry에 대해 두 가지 인증 방법을 지원합니다. 보안 요구 사항에 가장 적합한 방법을 선택하세요.

219 

220**옵션 A: API 키 인증**

221 

2221. Microsoft Foundry 포털에서 리소스로 이동합니다

2232. **엔드포인트 및 키** 섹션으로 이동합니다

2243. **API 키**를 복사합니다

2254. 환경 변수를 설정합니다:

226 

227```bash theme={null}

228export ANTHROPIC_FOUNDRY_API_KEY=your-azure-api-key

229```

230 

231**옵션 B: Microsoft Entra ID 인증**

232 

233`ANTHROPIC_FOUNDRY_API_KEY`가 설정되지 않으면 Claude Code는 자동으로 Azure SDK [기본 자격 증명 체인](https://learn.microsoft.com/en-us/azure/developer/javascript/sdk/authentication/credential-chains#defaultazurecredential-overview)을 사용합니다.

234이는 로컬 및 원격 워크로드를 인증하기 위한 다양한 방법을 지원합니다.

235 

236로컬 환경에서는 일반적으로 Azure CLI를 사용할 수 있습니다:

237 

238```bash theme={null}

239az login

240```

241 

242<Note>

243 Microsoft Foundry를 사용할 때 `/login` 및 `/logout` 명령은 Azure 자격 증명을 통해 인증이 처리되므로 비활성화됩니다.

244</Note>

245 

246### 3. Claude Code 구성

247 

248Microsoft Foundry를 활성화하려면 다음 환경 변수를 설정합니다:

249 

250```bash theme={null}

251# Microsoft Foundry 통합 활성화

252export CLAUDE_CODE_USE_FOUNDRY=1

253 

254# Azure 리소스 이름 ({resource}를 리소스 이름으로 바꾸기)

255export ANTHROPIC_FOUNDRY_RESOURCE={resource}

256# 또는 전체 기본 URL 제공:

257# export ANTHROPIC_FOUNDRY_BASE_URL=https://{resource}.services.ai.azure.com/anthropic

258```

259 

260### 4. 모델 버전 고정

261 

262<Warning>

263 모든 배포에 대해 특정 모델 버전을 고정합니다. 고정하지 않고 모델 별칭(`sonnet`, `opus`, `haiku`)을 사용하면 Claude Code가 Foundry 계정에서 사용할 수 없는 최신 모델 버전을 사용하려고 시도하여 Anthropic이 업데이트를 출시할 때 기존 사용자가 중단될 수 있습니다. Azure 배포를 만들 때 "최신으로 자동 업데이트" 대신 특정 모델 버전을 선택합니다.

264</Warning>

265 

266모델 변수를 1단계에서 만든 배포 이름과 일치하도록 설정합니다.

267 

268`ANTHROPIC_DEFAULT_OPUS_MODEL`이 없으면 Foundry의 `opus` 별칭은 Opus 4.6으로 확인됩니다. 최신 모델을 사용하려면 Opus 4.7 ID로 설정합니다:

269 

270```bash theme={null}

271export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-7'

272export ANTHROPIC_DEFAULT_SONNET_MODEL='claude-sonnet-4-6'

273export ANTHROPIC_DEFAULT_HAIKU_MODEL='claude-haiku-4-5'

274```

275 

276현재 및 레거시 모델 ID는 [모델 개요](https://platform.claude.com/docs/en/about-claude/models/overview)를 참조하세요. 전체 환경 변수 목록은 [모델 구성](/ko/model-config#pin-models-for-third-party-deployments)을 참조하세요.

277 

278[Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)은 자동으로 활성화됩니다. 기본 5분 대신 1시간 캐시 TTL을 요청하려면 다음 변수를 설정합니다. 1시간 TTL로 캐시 쓰기는 더 높은 요금으로 청구됩니다:

279 

280```bash theme={null}

281export ENABLE_PROMPT_CACHING_1H=1

282```

283 

284## Azure RBAC 구성

285 

286`Azure AI User` 및 `Cognitive Services User` 기본 역할에는 Claude 모델을 호출하는 데 필요한 모든 권한이 포함됩니다.

287 

288더 제한적인 권한의 경우 다음을 포함하는 사용자 지정 역할을 만듭니다:

289 

290```json theme={null}

291{

292 "permissions": [

293 {

294 "dataActions": [

295 "Microsoft.CognitiveServices/accounts/providers/*"

296 ]

297 }

298 ]

299}

300```

301 

302자세한 내용은 [Microsoft Foundry RBAC 설명서](https://learn.microsoft.com/en-us/azure/ai-foundry/concepts/rbac-azure-ai-foundry)를 참조하세요.

303 

304## 문제 해결

305 

306"Failed to get token from azureADTokenProvider: ChainedTokenCredential authentication failed" 오류가 발생하면:

307 

308* 환경에서 Entra ID를 구성하거나 `ANTHROPIC_FOUNDRY_API_KEY`를 설정합니다.

309 

310## 추가 리소스

311 

312* [Microsoft Foundry 설명서](https://learn.microsoft.com/en-us/azure/ai-foundry/what-is-azure-ai-foundry)

313* [Microsoft Foundry 모델](https://ai.azure.com/explore/models)

314* [Microsoft Foundry 가격](https://azure.microsoft.com/en-us/pricing/details/ai-foundry/)

model-config.md +382 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 모델 구성

6 

7> Claude Code 모델 구성에 대해 알아보기, opusplan과 같은 모델 별칭 포함

8 

9## 사용 가능한 모델

10 

11Claude Code의 `model` 설정에서 다음 중 하나를 구성할 수 있습니다:

12 

13* **모델 별칭**

14* **모델 이름**

15 * Anthropic API: 전체 **[모델 이름](https://platform.claude.com/docs/ko/about-claude/models/overview)**

16 * Bedrock: 추론 프로필 ARN

17 * Foundry: 배포 이름

18 * Vertex: 버전 이름

19 

20### 모델 별칭

21 

22모델 별칭은 정확한 버전 번호를 기억할 필요 없이 모델 설정을 선택하는 편리한 방법을 제공합니다:

23 

24| 모델 별칭 | 동작 |

25| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |

26| **`default`** | 모델 재정의를 제거하고 계정 유형에 따른 권장 모델로 되돌리는 특수 값입니다. 자체로는 모델 별칭이 아닙니다 |

27| **`best`** | 현재 사용 가능한 가장 강력한 모델을 사용하며, 현재 `opus`와 동일합니다 |

28| **`sonnet`** | 일일 코딩 작업을 위해 최신 Sonnet 모델 사용 |

29| **`opus`** | 복잡한 추론 작업을 위해 최신 Opus 모델 사용 |

30| **`haiku`** | 간단한 작업을 위해 빠르고 효율적인 Haiku 모델 사용 |

31| **`sonnet[1m]`** | 긴 세션을 위해 [100만 토큰 컨텍스트 윈도우](https://platform.claude.com/docs/ko/build-with-claude/context-windows#1m-token-context-window)를 사용하는 Sonnet 사용 |

32| **`opus[1m]`** | 긴 세션을 위해 [100만 토큰 컨텍스트 윈도우](https://platform.claude.com/docs/ko/build-with-claude/context-windows#1m-token-context-window)를 사용하는 Opus 사용 |

33| **`opusplan`** | Plan Mode 중에 `opus`를 사용한 후 실행을 위해 `sonnet`으로 전환하는 특수 모드 |

34 

35Anthropic API에서 `opus`는 Opus 4.7로, `sonnet`은 Sonnet 4.6으로 확인됩니다. Bedrock, Vertex 및 Foundry에서 `opus`는 Opus 4.6으로, `sonnet`은 Sonnet 4.5로 확인됩니다. 더 새로운 모델은 전체 모델 이름을 명시적으로 선택하거나 `ANTHROPIC_DEFAULT_OPUS_MODEL` 또는 `ANTHROPIC_DEFAULT_SONNET_MODEL`을 설정하여 해당 제공자에서 사용할 수 있습니다.

36 

37별칭은 제공자에 대한 권장 버전을 가리키며 시간이 지남에 따라 업데이트됩니다. 특정 버전으로 고정하려면 전체 모델 이름(예: `claude-opus-4-7`)을 사용하거나 `ANTHROPIC_DEFAULT_OPUS_MODEL`과 같은 해당 환경 변수를 설정합니다.

38 

39<Note>

40 Opus 4.7은 Claude Code v2.1.111 이상이 필요합니다. `claude update`를 실행하여 업그레이드하세요.

41</Note>

42 

43### 모델 설정

44 

45다음과 같은 여러 방법으로 모델을 구성할 수 있으며, 우선순위 순서대로 나열되어 있습니다:

46 

471. **세션 중** - `/model <alias|name>`을 사용하여 즉시 전환하거나, 인수 없이 `/model`을 실행하여 선택기를 엽니다. 선택기는 대화에 이전 출력이 있을 때 확인을 요청합니다. 다음 응답이 캐시된 컨텍스트 없이 전체 기록을 다시 읽기 때문입니다.

482. **시작 시** - `claude --model <alias|name>`으로 실행

493. **환경 변수** - `ANTHROPIC_MODEL=<alias|name>` 설정

504. **설정** - `model` 필드를 사용하여 설정 파일에서 영구적으로 구성합니다.

51 

52`/model` 선택은 사용자 설정에 저장되며 재시작 후에도 유지됩니다. v2.1.117부터 프로젝트의 `.claude/settings.json`이 다른 모델을 고정하는 경우, Claude Code는 선택 항목을 `.claude/settings.local.json`에도 작성하므로 재시작 후 해당 프로젝트에서 계속 적용됩니다. 관리되는 설정이 우선순위를 가지며 다음 실행 시 다시 적용됩니다.

53 

54시작 시 활성 모델이 자신의 선택이 아닌 프로젝트 또는 관리되는 설정에서 나온 경우, 시작 헤더는 어느 설정 파일이 이를 설정했는지 표시합니다. `/model`을 실행하여 현재 세션에 대해 재정의합니다.

55 

56사용 예시:

57 

58```bash theme={null}

59# Opus로 시작

60claude --model opus

61 

62# 세션 중에 Sonnet으로 전환

63/model sonnet

64```

65 

66설정 파일 예시:

67 

68```json theme={null}

69{

70 "permissions": {

71 ...

72 },

73 "model": "opus"

74}

75```

76 

77## 모델 선택 제한

78 

79엔터프라이즈 관리자는 [관리 또는 정책 설정](/ko/settings#settings-files)에서 `availableModels`을 사용하여 사용자가 선택할 수 있는 모델을 제한할 수 있습니다.

80 

81`availableModels`이 설정되면 사용자는 `/model`, `--model` 플래그 또는 `ANTHROPIC_MODEL` 환경 변수를 통해 목록에 없는 모델로 전환할 수 없습니다.

82 

83```json theme={null}

84{

85 "availableModels": ["sonnet", "haiku"]

86}

87```

88 

89### 기본 모델 동작

90 

91모델 선택기의 Default 옵션은 `availableModels`의 영향을 받지 않습니다. 항상 사용 가능하며 [사용자의 구독 계층을 기반으로 한](#default-model-setting) 시스템의 런타임 기본값을 나타냅니다.

92 

93`availableModels: []`인 경우에도 사용자는 자신의 계층에 대한 Default 모델로 Claude Code를 사용할 수 있습니다.

94 

95### 사용자가 실행하는 모델 제어

96 

97`model` 설정은 초기 선택이지 강제가 아닙니다. 세션이 시작될 때 활성화되는 모델을 설정하지만 사용자는 여전히 `/model`을 열고 Default를 선택할 수 있으며, 이는 `model`이 설정된 것과 관계없이 계층에 대한 시스템 기본값으로 확인됩니다.

98 

99모델 경험을 완전히 제어하려면 세 가지 설정을 함께 사용합니다:

100 

101* **`availableModels`**: 사용자가 전환할 수 있는 명명된 모델을 제한합니다

102* **`model`**: 세션이 시작될 때 활성화되는 초기 모델 선택을 설정합니다

103* **`ANTHROPIC_DEFAULT_SONNET_MODEL`** / **`ANTHROPIC_DEFAULT_OPUS_MODEL`** / **`ANTHROPIC_DEFAULT_HAIKU_MODEL`**: Default 옵션과 `sonnet`, `opus`, `haiku` 별칭이 확인되는 대상을 제어합니다

104 

105이 예시는 사용자를 Sonnet 4.5에서 시작하고, 선택기를 Sonnet과 Haiku로 제한하며, Default가 최신 릴리스가 아닌 Sonnet 4.5로 확인되도록 고정합니다:

106 

107```json theme={null}

108{

109 "model": "claude-sonnet-4-5",

110 "availableModels": ["claude-sonnet-4-5", "haiku"],

111 "env": {

112 "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-4-5"

113 }

114}

115```

116 

117`env` 블록이 없으면 선택기에서 Default를 선택하는 사용자는 최신 Sonnet 릴리스를 받게 되어 `model` 및 `availableModels`의 버전 고정을 우회합니다.

118 

119### 병합 동작

120 

121`availableModels`이 사용자 설정 및 프로젝트 설정과 같은 여러 수준에서 설정되면 배열이 병합되고 중복이 제거됩니다. 엄격한 허용 목록을 적용하려면 가장 높은 우선순위를 가지는 관리 또는 정책 설정에서 `availableModels`을 설정합니다.

122 

123### Mantle 모델 ID

124 

125[Bedrock Mantle 엔드포인트](/ko/amazon-bedrock#use-the-mantle-endpoint)가 활성화되면 `availableModels`의 `anthropic.`으로 시작하는 항목이 `/model` 선택기에 사용자 정의 옵션으로 추가되고 Mantle 엔드포인트로 라우팅됩니다. 이는 [타사 배포를 위한 모델 고정](#pin-models-for-third-party-deployments)에 설명된 별칭 전용 일치에 대한 예외입니다. 설정은 여전히 선택기를 나열된 항목으로 제한하므로 표준 별칭과 함께 모든 Mantle ID를 포함합니다.

126 

127## 특수 모델 동작

128 

129### `default` 모델 설정

130 

131`default`의 동작은 계정 유형에 따라 다릅니다:

132 

133* **Max 및 Team Premium**: Opus 4.7로 기본값 설정

134* **Pro, Team Standard, Enterprise 및 Anthropic API**: Sonnet 4.6으로 기본값 설정

135* **Bedrock, Vertex 및 Foundry**: Sonnet 4.5로 기본값 설정

136 

137Claude Code는 Opus의 사용 임계값에 도달하면 자동으로 Sonnet으로 폴백할 수 있습니다.

138 

139<Note>

140 2026년 4월 23일에 Enterprise 종량제 및 Anthropic API 사용자의 기본 모델이 Opus 4.7로 변경됩니다. 다른 기본값을 유지하려면 [서버 관리 설정](/ko/server-managed-settings)에서 `ANTHROPIC_MODEL` 또는 `model` 필드를 설정하세요.

141</Note>

142 

143### `opusplan` 모델 설정

144 

145`opusplan` 모델 별칭은 자동화된 하이브리드 접근 방식을 제공합니다:

146 

147* **Plan Mode에서** - 복잡한 추론 및 아키텍처 결정을 위해 `opus` 사용

148* **실행 모드에서** - 코드 생성 및 구현을 위해 자동으로 `sonnet`으로 전환

149 

150이는 계획을 위한 Opus의 우수한 추론과 실행을 위한 Sonnet의 효율성이라는 두 가지 장점을 모두 제공합니다.

151 

152Plan Mode Opus 단계는 표준 200K 컨텍스트 윈도우로 실행됩니다. [확장 컨텍스트](#extended-context)에 설명된 자동 1M 업그레이드는 `opus` 모델 설정에 적용되며 `opusplan`으로 확장되지 않습니다.

153 

154### 노력 수준 조정

155 

156[노력 수준](https://platform.claude.com/docs/ko/build-with-claude/effort)은 적응형 추론을 제어하며, 작업 복잡도에 따라 모델이 각 단계에서 생각할지 여부와 얼마나 생각할지를 결정하도록 합니다. 낮은 노력은 간단한 작업의 경우 더 빠르고 저렴하며, 높은 노력은 복잡한 문제에 대해 더 깊은 추론을 제공합니다.

157 

158노력은 Opus 4.7, Opus 4.6 및 Sonnet 4.6에서 지원됩니다. 사용 가능한 수준은 모델에 따라 다릅니다:

159 

160| 모델 | 수준 |

161| :-------------------- | :-------------------------------------- |

162| Opus 4.7 | `low`, `medium`, `high`, `xhigh`, `max` |

163| Opus 4.6 및 Sonnet 4.6 | `low`, `medium`, `high`, `max` |

164 

165활성 모델이 지원하지 않는 수준을 설정하면 Claude Code는 설정한 수준 이하의 가장 높은 지원 수준으로 폴백합니다. 예를 들어 `xhigh`는 Opus 4.6에서 `high`로 실행됩니다.

166 

167v2.1.117부터 기본 노력은 Opus 4.7에서 `xhigh`이고 Opus 4.6 및 Sonnet 4.6에서 `high`입니다.

168 

169Opus 4.7을 처음 실행할 때 Claude Code는 이전에 Opus 4.6 또는 Sonnet 4.6에 대해 다른 노력 수준을 설정했더라도 `xhigh`를 적용합니다. 전환 후 다른 수준을 선택하려면 `/effort`를 다시 실행하세요.

170 

171`low`, `medium`, `high` 및 `xhigh`는 세션 전체에 유지됩니다. `max`는 토큰 지출에 제약이 없어 가장 깊은 추론을 제공하며 현재 세션에만 적용됩니다. 단, `CLAUDE_CODE_EFFORT_LEVEL` 환경 변수를 통해 설정된 경우는 예외입니다.

172 

173#### 노력 수준 선택

174 

175각 수준은 토큰 지출과 기능을 절충합니다. 기본값은 대부분의 코딩 작업에 적합합니다. 다른 균형을 원할 때 조정하세요.

176 

177| 수준 | 사용 시기 |

178| :------- | :------------------------------------------------------------------------- |

179| `low` | 지능 민감도가 낮은 짧고 범위가 지정된 지연 시간 민감 작업을 위해 예약 |

180| `medium` | 일부 지능을 절충할 수 있는 비용 민감 작업의 토큰 사용량 감소 |

181| `high` | 토큰 사용량과 지능의 균형을 맞춥니다. 지능 민감 작업의 최소값으로 사용하거나 `xhigh`에 비해 토큰 지출을 줄이기 위해 사용 |

182| `xhigh` | 대부분의 코딩 및 에이전트 작업에 최고의 결과. Opus 4.7에서 권장 기본값 |

183| `max` | 까다로운 작업의 성능을 개선할 수 있지만 수익 감소를 보일 수 있으며 과도한 생각에 취약합니다. 광범위하게 채택하기 전에 테스트하세요 |

184 

185노력 척도는 모델별로 보정되므로 동일한 수준 이름이 모델 전체에서 동일한 기본 값을 나타내지 않습니다.

186 

187세션 설정을 변경하지 않고 일회성 깊은 추론을 위해 프롬프트에 "ultrathink"를 포함하세요. 이는 모델에 해당 턴에서 더 많이 추론하도록 지시하는 컨텍스트 내 지시를 추가합니다. 노력 수준을 변경하지 않습니다.

188 

189#### 노력 수준 설정

190 

191다음 중 하나를 통해 노력을 변경할 수 있습니다:

192 

193* **`/effort`**: 인수 없이 `/effort`를 실행하여 대화형 슬라이더를 열거나, 수준 이름 뒤에 `/effort`를 실행하여 직접 설정하거나, `/effort auto`를 실행하여 모델 기본값으로 재설정

194* **`/model`에서**: 모델을 선택할 때 좌우 화살표 키를 사용하여 노력 슬라이더 조정

195* **`--effort` 플래그**: Claude Code를 시작할 때 단일 세션에 대한 수준 이름을 전달

196* **환경 변수**: `CLAUDE_CODE_EFFORT_LEVEL`을 수준 이름 또는 `auto`로 설정

197* **설정**: 설정 파일에서 `effortLevel`을 설정

198* **Skill 및 subagent frontmatter**: [skill](/ko/skills#frontmatter-reference) 또는 [subagent](/ko/sub-agents#supported-frontmatter-fields) markdown 파일에서 `effort`를 설정하여 해당 skill 또는 subagent가 실행될 때 노력 수준을 재정의

199 

200환경 변수가 모든 다른 방법보다 우선하고, 그 다음 구성된 수준, 그 다음 모델 기본값입니다. Frontmatter 노력은 해당 skill 또는 subagent가 활성화될 때 적용되어 세션 수준을 재정의하지만 환경 변수는 재정의하지 않습니다.

201 

202노력 슬라이더는 지원되는 모델이 선택되면 `/model`에 나타납니다. 현재 노력 수준은 로고 및 스피너 옆에도 표시되므로(예: "with low effort"), `/model`을 열지 않고도 어떤 설정이 활성화되어 있는지 확인할 수 있습니다.

203 

204#### 적응형 추론 및 고정 사고 예산

205 

206적응형 추론은 각 단계에서 사고를 선택 사항으로 만들므로 Claude는 일상적인 프롬프트에 더 빠르게 응답하고 이점을 얻는 단계를 위해 더 깊은 사고를 예약할 수 있습니다. Claude가 현재 수준이 생성하는 것보다 더 자주 또는 덜 자주 생각하기를 원하면 프롬프트 또는 `CLAUDE.md`에서 직접 말할 수 있습니다. 모델은 노력 설정 내에서 해당 지침에 응답합니다.

207 

208Opus 4.7은 항상 적응형 추론을 사용합니다. 고정 사고 예산 모드 및 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING`은 이에 적용되지 않습니다.

209 

210Opus 4.6 및 Sonnet 4.6에서 `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1`을 설정하여 `MAX_THINKING_TOKENS`로 제어되는 이전의 고정 사고 예산으로 되돌릴 수 있습니다. [환경 변수](/ko/env-vars)를 참조하세요.

211 

212### 확장 컨텍스트

213 

214Opus 4.7, Opus 4.6 및 Sonnet 4.6은 대규모 코드베이스를 사용한 긴 세션을 위해 [100만 토큰 컨텍스트 윈도우](https://platform.claude.com/docs/ko/build-with-claude/context-windows#1m-token-context-window)를 지원합니다.

215 

216가용성은 모델 및 플랜에 따라 다릅니다. Max, Team 및 Enterprise 플랜에서 Opus는 추가 구성 없이 자동으로 1M 컨텍스트로 업그레이드됩니다. 이는 Team Standard 및 Team Premium 시트 모두에 적용됩니다.

217 

218| 플랜 | 1M 컨텍스트를 사용하는 Opus | 1M 컨텍스트를 사용하는 Sonnet |

219| ---------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |

220| Max, Team 및 Enterprise | 구독에 포함됨 | [추가 사용](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) 필요 |

221| Pro | [추가 사용](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) 필요 | [추가 사용](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) 필요 |

222| API 및 종량제 | 전체 액세스 | 전체 액세스 |

223 

2241M 컨텍스트를 완전히 비활성화하려면 `CLAUDE_CODE_DISABLE_1M_CONTEXT=1`을 설정합니다. 이는 모델 선택기에서 1M 모델 변형을 제거합니다. [환경 변수](/ko/env-vars)를 참조하세요.

225 

2261M 컨텍스트 윈도우는 200K를 초과하는 토큰에 대한 프리미엄 없이 표준 모델 가격을 사용합니다. 확장 컨텍스트가 구독에 포함된 플랜의 경우 사용량은 구독으로 계속 적용됩니다. 추가 사용을 통해 확장 컨텍스트에 액세스하는 플랜의 경우 토큰은 추가 사용으로 청구됩니다.

227 

228계정이 1M 컨텍스트를 지원하면 최신 버전의 Claude Code에서 모델 선택기(`/model`)에 옵션이 나타납니다. 표시되지 않으면 세션을 다시 시작해 보세요.

229 

230모델 별칭 또는 전체 모델 이름과 함께 `[1m]` 접미사를 사용할 수도 있습니다:

231 

232```bash theme={null}

233# opus[1m] 또는 sonnet[1m] 별칭 사용

234/model opus[1m]

235/model sonnet[1m]

236 

237# 또는 전체 모델 이름에 [1m] 추가

238/model claude-opus-4-7[1m]

239```

240 

241## 현재 모델 확인

242 

243현재 사용 중인 모델을 여러 방법으로 확인할 수 있습니다:

244 

2451. [상태 줄](/ko/statusline)에서(구성된 경우)

2462. `/status`에서, 계정 정보도 표시합니다.

247 

248## 사용자 정의 모델 옵션 추가

249 

250`ANTHROPIC_CUSTOM_MODEL_OPTION`을 사용하여 기본 제공 별칭을 대체하지 않고 `/model` 선택기에 단일 사용자 정의 항목을 추가합니다. 이는 Claude Code가 기본적으로 나열하지 않는 모델 ID를 테스트하는 데 유용합니다. LLM 게이트웨이 배포의 경우, Claude Code는 게이트웨이의 `/v1/models` 엔드포인트에서 선택기를 자동으로 채우므로, 이 변수는 검색에서 원하는 모델을 반환하지 않을 때만 필요합니다. [LLM 게이트웨이 모델 선택](/ko/llm-gateway#model-selection)을 참조하십시오.

251 

252이 예시는 게이트웨이 라우팅된 Opus 배포를 선택 가능하게 하기 위해 세 가지 변수를 모두 설정합니다:

253 

254```bash theme={null}

255export ANTHROPIC_CUSTOM_MODEL_OPTION="my-gateway/claude-opus-4-7"

256export ANTHROPIC_CUSTOM_MODEL_OPTION_NAME="Opus via Gateway"

257export ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION="Custom deployment routed through the internal LLM gateway"

258```

259 

260사용자 정의 항목은 `/model` 선택기의 맨 아래에 나타납니다. `ANTHROPIC_CUSTOM_MODEL_OPTION_NAME` 및 `ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION`은 선택 사항입니다. 생략하면 모델 ID가 이름으로 사용되고 설명은 기본값으로 `Custom model (<model-id>)`입니다.

261 

262Claude Code는 `ANTHROPIC_CUSTOM_MODEL_OPTION`에 설정된 모델 ID에 대한 유효성 검사를 건너뜁니다. 따라서 API 엔드포인트가 허용하는 모든 문자열을 사용할 수 있습니다.

263 

264## 환경 변수

265 

266다음 환경 변수를 사용할 수 있으며, 이는 별칭이 매핑되는 모델 이름을 제어하기 위해 전체 **모델 이름**(또는 API 제공자에 해당하는 이름)이어야 합니다.

267 

268| 환경 변수 | 설명 |

269| -------------------------------- | --------------------------------------------------------------- |

270| `ANTHROPIC_DEFAULT_OPUS_MODEL` | `opus`에 사용할 모델 또는 Plan Mode가 활성화되었을 때 `opusplan`에 사용할 모델 |

271| `ANTHROPIC_DEFAULT_SONNET_MODEL` | `sonnet`에 사용할 모델 또는 Plan Mode가 활성화되지 않았을 때 `opusplan`에 사용할 모델 |

272| `ANTHROPIC_DEFAULT_HAIKU_MODEL` | `haiku`에 사용할 모델 또는 [백그라운드 기능](/ko/costs#background-token-usage) |

273| `CLAUDE_CODE_SUBAGENT_MODEL` | [subagents](/ko/sub-agents)에 사용할 모델 |

274 

275참고: `ANTHROPIC_SMALL_FAST_MODEL`은 `ANTHROPIC_DEFAULT_HAIKU_MODEL`을 위해 더 이상 사용되지 않습니다.

276 

277### 타사 배포를 위한 모델 고정

278 

279[Bedrock](/ko/amazon-bedrock), [Vertex AI](/ko/google-vertex-ai) 또는 [Foundry](/ko/microsoft-foundry)를 통해 Claude Code를 배포할 때 사용자에게 롤아웃하기 전에 모델 버전을 고정합니다.

280 

281고정하지 않으면 Claude Code는 최신 버전으로 확인되는 모델 별칭(`sonnet`, `opus`, `haiku`)을 사용합니다. Anthropic이 새 모델을 출시할 때 새 버전이 활성화되지 않은 계정의 사용자는 공지 없이 이전 버전으로 폴백되며, Foundry 사용자는 Foundry에 동등한 시작 확인이 없기 때문에 오류를 봅니다.

282 

283<Warning>

284 초기 설정의 일부로 세 가지 모델 환경 변수를 모두 특정 버전 ID로 설정합니다. 고정하면 사용자가 새 모델로 이동할 시기를 제어할 수 있습니다.

285</Warning>

286 

287제공자에 대한 버전별 모델 ID와 함께 다음 환경 변수를 사용합니다:

288 

289| 제공자 | 예시 |

290| :-------- | :------------------------------------------------------------------- |

291| Bedrock | `export ANTHROPIC_DEFAULT_OPUS_MODEL='us.anthropic.claude-opus-4-7'` |

292| Vertex AI | `export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-7'` |

293| Foundry | `export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-7'` |

294 

295`ANTHROPIC_DEFAULT_SONNET_MODEL` 및 `ANTHROPIC_DEFAULT_HAIKU_MODEL`에 대해 동일한 패턴을 적용합니다. 모든 제공자의 현재 및 레거시 모델 ID는 [모델 개요](https://platform.claude.com/docs/ko/about-claude/models/overview)를 참조하세요. 사용자를 새 모델 버전으로 업그레이드하려면 이러한 환경 변수를 업데이트하고 다시 배포합니다.

296 

297고정된 모델에 대해 [확장 컨텍스트](#extended-context)를 활성화하려면 `ANTHROPIC_DEFAULT_OPUS_MODEL` 또는 `ANTHROPIC_DEFAULT_SONNET_MODEL`의 모델 ID에 `[1m]`을 추가합니다:

298 

299```bash theme={null}

300export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-7[1m]'

301```

302 

303`[1m]` 접미사는 `opusplan`을 포함한 해당 별칭의 모든 사용에 1M 컨텍스트 윈도우를 적용합니다. Claude Code는 모델 ID를 제공자에게 보내기 전에 접미사를 제거합니다. Opus 4.7 또는 Sonnet 4.6과 같이 기본 모델이 1M 컨텍스트를 지원할 때만 `[1m]`을 추가합니다.

304 

305<Note>

306 `settings.availableModels` 허용 목록은 타사 제공자를 사용할 때도 적용됩니다. 필터링은 제공자별 모델 ID가 아닌 모델 별칭(`opus`, `sonnet`, `haiku`)과 일치합니다.

307</Note>

308 

309### 고정된 모델 표시 및 기능 사용자 정의

310 

311타사 제공자에서 모델을 고정하면 제공자별 ID가 `/model` 선택기에 그대로 나타나고 Claude Code는 모델이 지원하는 기능을 인식하지 못할 수 있습니다. 각 고정된 모델에 대한 동반 환경 변수로 표시 이름과 기능을 선언할 수 있습니다.

312 

313이러한 변수는 Bedrock, Vertex AI 및 Foundry와 같은 타사 제공자에서 적용됩니다. `_NAME` 및 `_DESCRIPTION` 변수는 `ANTHROPIC_BASE_URL`이 [LLM gateway](/ko/llm-gateway)를 가리킬 때도 적용됩니다. `api.anthropic.com`에 직접 연결할 때는 영향을 주지 않습니다.

314 

315| 환경 변수 | 설명 |

316| ----------------------------------------------------- | -------------------------------------------------------------------------- |

317| `ANTHROPIC_DEFAULT_OPUS_MODEL_NAME` | `/model` 선택기에서 고정된 Opus 모델의 표시 이름입니다. 설정되지 않으면 모델 ID로 기본값 설정 |

318| `ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION` | `/model` 선택기에서 고정된 Opus 모델의 표시 설명입니다. 설정되지 않으면 `Custom Opus model`로 기본값 설정 |

319| `ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES` | 고정된 Opus 모델이 지원하는 기능의 쉼표로 구분된 목록 |

320 

321동일한 `_NAME`, `_DESCRIPTION` 및 `_SUPPORTED_CAPABILITIES` 접미사는 `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_HAIKU_MODEL` 및 `ANTHROPIC_CUSTOM_MODEL_OPTION`에 사용 가능합니다.

322 

323Claude Code는 모델 ID를 알려진 패턴과 비교하여 [노력 수준](#adjust-effort-level) 및 [확장 사고](/ko/common-workflows#use-extended-thinking-thinking-mode)와 같은 기능을 활성화합니다. Bedrock ARN 또는 사용자 정의 배포 이름과 같은 제공자별 ID는 종종 이러한 패턴과 일치하지 않아 지원되는 기능이 비활성화됩니다. `_SUPPORTED_CAPABILITIES`를 설정하여 Claude Code에 모델이 실제로 지원하는 기능을 알립니다:

324 

325| 기능 값 | 활성화 |

326| ---------------------- | ----------------------------------------------------------------- |

327| `effort` | [노력 수준](#adjust-effort-level) 및 `/effort` 명령 |

328| `xhigh_effort` | {/* min-version: 2.1.111 */}`xhigh` 노력 수준 |

329| `max_effort` | `max` 노력 수준 |

330| `thinking` | [확장 사고](/ko/common-workflows#use-extended-thinking-thinking-mode) |

331| `adaptive_thinking` | 작업 복잡도에 따라 동적으로 사고를 할당하는 적응형 추론 |

332| `interleaved_thinking` | 도구 호출 간의 사고 |

333 

334`_SUPPORTED_CAPABILITIES`가 설정되면 나열된 기능이 활성화되고 나열되지 않은 기능은 일치하는 고정된 모델에 대해 비활성화됩니다. 변수가 설정되지 않으면 Claude Code는 모델 ID를 기반으로 한 기본 제공 감지로 폴백합니다.

335 

336이 예시는 Opus를 Bedrock 사용자 정의 모델 ARN에 고정하고, 친화적인 이름을 설정하며, 기능을 선언합니다:

337 

338```bash theme={null}

339export ANTHROPIC_DEFAULT_OPUS_MODEL='arn:aws:bedrock:us-east-1:123456789012:custom-model/abc'

340export ANTHROPIC_DEFAULT_OPUS_MODEL_NAME='Opus via Bedrock'

341export ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION='Opus 4.7 routed through a Bedrock custom endpoint'

342export ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES='effort,xhigh_effort,max_effort,thinking,adaptive_thinking,interleaved_thinking'

343```

344 

345### 버전별 모델 ID 재정의

346 

347위의 패밀리 수준 환경 변수는 패밀리 별칭당 하나의 모델 ID를 구성합니다. 동일한 패밀리 내의 여러 버전을 서로 다른 제공자 ID에 매핑해야 하는 경우 대신 `modelOverrides` 설정을 사용합니다.

348 

349`modelOverrides`는 개별 Anthropic 모델 ID를 Claude Code가 제공자의 API에 보내는 제공자별 문자열에 매핑합니다. 사용자가 `/model` 선택기에서 매핑된 모델을 선택하면 Claude Code는 기본 제공 기본값 대신 구성된 값을 사용합니다.

350 

351이를 통해 엔터프라이즈 관리자는 거버넌스, 비용 할당 또는 지역 라우팅을 위해 각 모델 버전을 특정 Bedrock 추론 프로필 ARN, Vertex AI 버전 이름 또는 Foundry 배포 이름으로 라우팅할 수 있습니다.

352 

353[설정 파일](/ko/settings#settings-files)에서 `modelOverrides`를 설정합니다:

354 

355```json theme={null}

356{

357 "modelOverrides": {

358 "claude-opus-4-7": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-prod",

359 "claude-opus-4-6": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-46-prod",

360 "claude-sonnet-4-6": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/sonnet-prod"

361 }

362}

363```

364 

365키는 [모델 개요](https://platform.claude.com/docs/ko/about-claude/models/overview)에 나열된 Anthropic 모델 ID여야 합니다. 날짜가 지정된 모델 ID의 경우 날짜 접미사를 정확히 표시된 대로 포함합니다. 알 수 없는 키는 무시됩니다.

366 

367재정의는 `/model` 선택기의 각 항목을 지원하는 기본 제공 모델 ID를 대체합니다. Bedrock에서 재정의는 Claude Code가 시작 시 자동으로 발견하는 모든 추론 프로필보다 우선합니다. `ANTHROPIC_MODEL`, `--model` 또는 `ANTHROPIC_DEFAULT_*_MODEL` 환경 변수를 통해 직접 제공하는 값은 제공자에게 그대로 전달되며 `modelOverrides`로 변환되지 않습니다.

368 

369`modelOverrides`는 `availableModels`과 함께 작동합니다. 허용 목록은 재정의 값이 아닌 Anthropic 모델 ID에 대해 평가되므로 `availableModels`의 `"opus"`와 같은 항목은 Opus 버전이 ARN에 매핑되어도 계속 일치합니다.

370 

371### Prompt caching 구성

372 

373Claude Code는 성능을 최적화하고 비용을 절감하기 위해 [prompt caching](https://platform.claude.com/docs/ko/build-with-claude/prompt-caching)을 자동으로 사용합니다. 전역적으로 또는 특정 모델 계층에 대해 prompt caching을 비활성화할 수 있습니다:

374 

375| 환경 변수 | 설명 |

376| ------------------------------- | ------------------------------------------------------ |

377| `DISABLE_PROMPT_CACHING` | 모든 모델에 대해 prompt caching을 비활성화하려면 `1`로 설정(모델별 설정보다 우선) |

378| `DISABLE_PROMPT_CACHING_HAIKU` | Haiku 모델에 대해서만 prompt caching을 비활성화하려면 `1`로 설정 |

379| `DISABLE_PROMPT_CACHING_SONNET` | Sonnet 모델에 대해서만 prompt caching을 비활성화하려면 `1`로 설정 |

380| `DISABLE_PROMPT_CACHING_OPUS` | Opus 모델에 대해서만 prompt caching을 비활성화하려면 `1`로 설정 |

381 

382이러한 환경 변수는 prompt caching 동작에 대한 세밀한 제어를 제공합니다. 전역 `DISABLE_PROMPT_CACHING` 설정은 모델별 설정보다 우선하므로 필요할 때 모든 캐싱을 빠르게 비활성화할 수 있습니다. 모델별 설정은 특정 모델 디버깅 또는 다양한 캐싱 구현을 가질 수 있는 클라우드 제공자와 작업할 때와 같이 선택적 제어에 유용합니다.

monitoring-usage.md +955 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 모니터링

6 

7> Claude Code에 대한 OpenTelemetry를 활성화하고 구성하는 방법을 알아봅니다.

8 

9OpenTelemetry(OTel)를 통해 원격 측정 데이터를 내보내 조직 전체에서 Claude Code 사용, 비용 및 도구 활동을 추적합니다. Claude Code는 표준 메트릭 프로토콜을 통해 메트릭을 시계열 데이터로 내보내고, 로그/이벤트 프로토콜을 통해 이벤트를 내보내며, 선택적으로 [추적 프로토콜](#traces-beta)을 통해 분산 추적을 내보냅니다. 메트릭, 로그 및 추적 백엔드를 구성하여 모니터링 요구 사항과 일치하도록 합니다.

10 

11## 빠른 시작

12 

13환경 변수를 사용하여 OpenTelemetry를 구성합니다:

14 

15```bash theme={null}

16# 1. 원격 측정 활성화

17export CLAUDE_CODE_ENABLE_TELEMETRY=1

18 

19# 2. 내보내기 선택 (둘 다 선택 사항 - 필요한 것만 구성)

20export OTEL_METRICS_EXPORTER=otlp # 옵션: otlp, prometheus, console, none

21export OTEL_LOGS_EXPORTER=otlp # 옵션: otlp, console, none

22 

23# 3. OTLP 엔드포인트 구성 (OTLP 내보내기용)

24export OTEL_EXPORTER_OTLP_PROTOCOL=grpc

25export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

26 

27# 4. 인증 설정 (필요한 경우)

28export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer your-token"

29 

30# 5. 디버깅용: 내보내기 간격 단축

31export OTEL_METRIC_EXPORT_INTERVAL=10000 # 10초 (기본값: 60000ms)

32export OTEL_LOGS_EXPORT_INTERVAL=5000 # 5초 (기본값: 5000ms)

33 

34# 6. Claude Code 실행

35claude

36```

37 

38<Note>

39 기본 내보내기 간격은 메트릭의 경우 60초, 로그의 경우 5초입니다. 설정 중에 디버깅 목적으로 더 짧은 간격을 사용할 수 있습니다. 프로덕션 사용을 위해 이를 재설정하는 것을 잊지 마세요.

40</Note>

41 

42전체 구성 옵션은 [OpenTelemetry 사양](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options)을 참조하세요.

43 

44## 관리자 구성

45 

46관리자는 [관리 설정 파일](/ko/settings#settings-files)을 통해 모든 사용자에 대한 OpenTelemetry 설정을 구성할 수 있습니다. 이를 통해 조직 전체에서 원격 측정 설정을 중앙에서 제어할 수 있습니다. 설정이 적용되는 방식에 대한 자세한 내용은 [설정 우선순위](/ko/settings#settings-precedence)를 참조하세요.

47 

48관리 설정 구성 예:

49 

50```json theme={null}

51{

52 "env": {

53 "CLAUDE_CODE_ENABLE_TELEMETRY": "1",

54 "OTEL_METRICS_EXPORTER": "otlp",

55 "OTEL_LOGS_EXPORTER": "otlp",

56 "OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",

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

58 "OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Bearer example-token"

59 }

60}

61```

62 

63<Note>

64 관리 설정은 MDM(Mobile Device Management) 또는 기타 장치 관리 솔루션을 통해 배포할 수 있습니다. 관리 설정 파일에 정의된 환경 변수는 높은 우선순위를 가지며 사용자가 재정의할 수 없습니다.

65</Note>

66 

67## 구성 세부 정보

68 

69### 일반적인 구성 변수

70 

71| 환경 변수 | 설명 | 예제 값 |

72| --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |

73| `CLAUDE_CODE_ENABLE_TELEMETRY` | 원격 측정 수집 활성화 (필수) | `1` |

74| `OTEL_METRICS_EXPORTER` | 메트릭 내보내기 유형 (쉼표로 구분). `none`을 사용하여 비활성화 | `console`, `otlp`, `prometheus`, `none` |

75| `OTEL_LOGS_EXPORTER` | 로그/이벤트 내보내기 유형 (쉼표로 구분). `none`을 사용하여 비활성화 | `console`, `otlp`, `none` |

76| `OTEL_EXPORTER_OTLP_PROTOCOL` | OTLP 내보내기 프로토콜 (모든 신호에 적용) | `grpc`, `http/json`, `http/protobuf` |

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

78| `OTEL_EXPORTER_OTLP_METRICS_PROTOCOL` | 메트릭 프로토콜 (일반 설정 재정의) | `grpc`, `http/json`, `http/protobuf` |

79| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | OTLP 메트릭 엔드포인트 (일반 설정 재정의) | `http://localhost:4318/v1/metrics` |

80| `OTEL_EXPORTER_OTLP_LOGS_PROTOCOL` | 로그 프로토콜 (일반 설정 재정의) | `grpc`, `http/json`, `http/protobuf` |

81| `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` | OTLP 로그 엔드포인트 (일반 설정 재정의) | `http://localhost:4318/v1/logs` |

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

83| `OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY` | mTLS 인증용 클라이언트 키 | 클라이언트 키 파일 경로 |

84| `OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE` | mTLS 인증용 클라이언트 인증서 | 클라이언트 인증서 파일 경로 |

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

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

87| `OTEL_LOG_USER_PROMPTS` | 사용자 프롬프트 콘텐츠 로깅 활성화 (기본값: 비활성화) | `1`로 활성화 |

88| `OTEL_LOG_TOOL_DETAILS` | 도구 이벤트 및 추적 스팬 속성에서 도구 매개변수 및 입력 인수 로깅 활성화: Bash 명령, MCP 서버 및 도구 이름, 스킬 이름 및 도구 입력. 또한 `user_prompt` 이벤트에서 사용자 정의, 플러그인 및 MCP 명령 이름을 활성화합니다 (기본값: 비활성화) | `1`로 활성화 |

89| `OTEL_LOG_TOOL_CONTENT` | 스팬 이벤트에서 도구 입력 및 출력 콘텐츠 로깅 활성화 (기본값: 비활성화). [추적](#traces-beta)이 필요합니다. 콘텐츠는 60KB에서 잘립니다 | `1`로 활성화 |

90| `OTEL_LOG_RAW_API_BODIES` | 전체 Anthropic Messages API 요청 및 응답 JSON을 `api_request_body` / `api_response_body` 로그 이벤트로 내보냅니다 (기본값: 비활성화). 본문에는 전체 대화 기록이 포함됩니다. 이를 활성화하면 `OTEL_LOG_USER_PROMPTS`, `OTEL_LOG_TOOL_DETAILS` 및 `OTEL_LOG_TOOL_CONTENT`가 공개할 모든 것에 동의하는 것을 의미합니다 | `1`로 60KB에서 잘린 인라인 본문, 또는 `file:<dir>`로 디스크의 잘리지 않은 본문과 이벤트의 `body_ref` 포인터 |

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

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

93 

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

95 

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

97 

98| 환경 변수 | 설명 | 기본값 | 비활성화 예 |

99| ----------------------------------- | ------------------------------------------------ | ------- | ------- |

100| `OTEL_METRICS_INCLUDE_SESSION_ID` | 메트릭에 session.id 속성 포함 | `true` | `false` |

101| `OTEL_METRICS_INCLUDE_VERSION` | 메트릭에 app.version 속성 포함 | `false` | `true` |

102| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | 메트릭에 user.account\_uuid 및 user.account\_id 속성 포함 | `true` | `false` |

103 

104이러한 변수는 메트릭의 카디널리티를 제어하는 데 도움이 되며, 이는 메트릭 백엔드의 저장소 요구 사항 및 쿼리 성능에 영향을 미칩니다. 낮은 카디널리티는 일반적으로 더 나은 성능과 낮은 저장소 비용을 의미하지만 분석을 위한 세분화된 데이터는 적습니다.

105 

106### 추적 (베타)

107 

108분산 추적은 각 사용자 프롬프트를 해당 프롬프트가 트리거하는 API 요청 및 도구 실행에 연결하는 스팬을 내보내므로 추적 백엔드에서 전체 요청을 단일 추적으로 볼 수 있습니다.

109 

110추적은 기본적으로 꺼져 있습니다. 활성화하려면 `CLAUDE_CODE_ENABLE_TELEMETRY=1` 및 `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`을 모두 설정한 다음 `OTEL_TRACES_EXPORTER`를 설정하여 스팬을 보낼 위치를 선택합니다. 추적은 엔드포인트, 프로토콜 및 헤더에 대해 [일반적인 OTLP 구성](#common-configuration-variables)을 재사용합니다.

111 

112| 환경 변수 | 설명 | 예제 값 |

113| ------------------------------------- | ----------------------------------------------------- | ------------------------------------ |

114| `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` | 스팬 추적 활성화 (필수). `ENABLE_ENHANCED_TELEMETRY_BETA`도 허용됨 | `1` |

115| `OTEL_TRACES_EXPORTER` | 추적 내보내기 유형 (쉼표로 구분). `none`을 사용하여 비활성화 | `console`, `otlp`, `none` |

116| `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` | 추적 프로토콜 (`OTEL_EXPORTER_OTLP_PROTOCOL` 재정의) | `grpc`, `http/json`, `http/protobuf` |

117| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | OTLP 추적 엔드포인트 (`OTEL_EXPORTER_OTLP_ENDPOINT` 재정의) | `http://localhost:4318/v1/traces` |

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

119 

120스팬은 기본적으로 사용자 프롬프트 텍스트, 도구 입력 세부 정보 및 도구 콘텐츠를 수정합니다. `OTEL_LOG_USER_PROMPTS=1`, `OTEL_LOG_TOOL_DETAILS=1` 및 `OTEL_LOG_TOOL_CONTENT=1`을 설정하여 포함합니다.

121 

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

123 

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

125 

126#### 스팬 계층 구조

127 

128각 사용자 프롬프트는 `claude_code.interaction` 루트 스팬을 시작합니다. API 호출, 도구 호출 및 훅 실행은 자식으로 기록됩니다. 도구 스팬에는 권한 결정 대기 시간과 실행 자체에 대한 두 개의 자식 스팬이 있습니다. Task 도구가 하위 에이전트를 생성하면 하위 에이전트의 API 및 도구 스팬은 부모의 `claude_code.tool` 스팬 아래에 중첩됩니다.

129 

130```text theme={null}

131claude_code.interaction

132├── claude_code.llm_request

133├── claude_code.hook (상세 베타 추적 필요)

134└── claude_code.tool

135 ├── claude_code.tool.blocked_on_user

136 ├── claude_code.tool.execution

137 └── (Task 도구) 하위 에이전트 claude_code.llm_request / claude_code.tool 스팬

138```

139 

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

141 

142#### 스팬 속성

143 

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

145 

146**`claude_code.interaction`**

147 

148| 속성 | 설명 | 게이트 대상 |

149| ------------------------- | ------------------------------------------ | ----------------------- |

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

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

152| `interaction.sequence` | 이 세션의 상호 작용 1 기반 카운터 | |

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

154 

155**`claude_code.llm_request`**

156 

157| 속성 | 설명 | 게이트 대상 |

158| -------------------------------- | ---------------------------------------------------------------------------------------------------------- | ------ |

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

160| `gen_ai.system` | 항상 `anthropic`. OpenTelemetry GenAI 의미론적 규칙 | |

161| `gen_ai.request.model` | `model`과 동일한 값. OpenTelemetry GenAI 의미론적 규칙 | |

162| `query_source` | 요청을 발급한 하위 시스템 (예: `repl_main_thread` 또는 하위 에이전트 이름) | |

163| `speed` | `fast` 또는 `normal` | |

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

165| `duration_ms` | 재시도를 포함한 벽시계 지속 시간 | |

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

167| `input_tokens` | API 사용 블록의 입력 토큰 수 | |

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

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

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

171| `request_id` | `request-id` 응답 헤더의 Anthropic API 요청 ID | |

172| `gen_ai.response.id` | `request_id`와 동일한 값. OpenTelemetry GenAI 의미론적 규칙 | |

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

174| `attempt` | 이 요청에 대해 수행된 총 시도 | |

175| `success` | `true` 또는 `false` | |

176| `status_code` | 요청이 실패했을 때 HTTP 상태 코드 | |

177| `error` | 요청이 실패했을 때 오류 메시지 | |

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

179| `stop_reason` | API 응답 `stop_reason` (예: `end_turn`, `tool_use`, `max_tokens`, `stop_sequence`, `pause_turn` 또는 `refusal`) | |

180| `gen_ai.response.finish_reasons` | `stop_reason`과 동일한 값 (문자열 배열로 래핑됨). OpenTelemetry GenAI 의미론적 규칙 | |

181 

182각 재시도 시도는 `attempt` 및 `client_request_id` 속성이 있는 `gen_ai.request.attempt` 스팬 이벤트로도 기록됩니다.

183 

184**`claude_code.tool`**

185 

186| 속성 | 설명 | 게이트 대상 |

187| --------------- | ------------------------------- | ----------------------- |

188| `tool_name` | 도구 이름 | |

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

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

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

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

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

194| `subagent_type` | Task 도구의 하위 에이전트 유형 | `OTEL_LOG_TOOL_DETAILS` |

195 

196`OTEL_LOG_TOOL_CONTENT=1`일 때 이 스팬은 속성에 도구의 입력 및 출력 본문을 포함하는 `tool.output` 스팬 이벤트도 기록합니다 (속성당 60KB에서 잘림).

197 

198**`claude_code.tool.blocked_on_user`**

199 

200| 속성 | 설명 | 게이트 대상 |

201| ------------- | ------------------------------------------------------- | ------ |

202| `duration_ms` | 권한 결정 대기 시간 | |

203| `decision` | `accept` 또는 `reject` | |

204| `source` | 결정 출처 ([Tool decision event](#tool-decision-event)와 일치) | |

205 

206**`claude_code.tool.execution`**

207 

208| 속성 | 설명 | 게이트 대상 |

209| ------------- | ------------------------------------------------------------------------------------ | ----------------------- |

210| `duration_ms` | 도구 본문 실행 시간 | |

211| `success` | `true` 또는 `false` | |

212| `error` | 실행이 실패했을 때 오류 범주 문자열 (예: `Error:ENOENT` 또는 `ShellError`). 게이트가 설정되면 전체 오류 메시지를 포함합니다 | `OTEL_LOG_TOOL_DETAILS` |

213 

214**`claude_code.hook`**

215 

216이 스팬은 상세 베타 추적이 활성화되어 있을 때만 내보내지며, 이는 위의 추적 내보내기 구성 외에 `ENABLE_BETA_TRACING_DETAILED=1` 및 `BETA_TRACING_ENDPOINT`가 필요합니다. 대화형 CLI 세션에서는 조직이 이 기능에 대해 허용 목록에 있어야 합니다. Agent SDK 및 비대화형 `-p` 세션은 게이트되지 않습니다. `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA`만 설정되어 있을 때는 내보내지지 않습니다.

217 

218| 속성 | 설명 | 게이트 대상 |

219| ------------------------ | ------------------------------- | ----------------------- |

220| `hook_event` | 훅 이벤트 유형 (예: `PreToolUse`) | |

221| `hook_name` | 전체 훅 이름 (예: `PreToolUse:Write`) | |

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

223| `hook_definitions` | JSON 직렬화된 훅 구성 | `OTEL_LOG_TOOL_DETAILS` |

224| `duration_ms` | 모든 일치하는 훅의 벽시계 지속 시간 | |

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

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

227| `num_non_blocking_error` | 차단 없이 실패한 훅 수 | |

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

229 

230<Note>

231 `new_context`, `system_prompt_preview`, `user_system_prompt`, `tool_input` 및 `response.model_output`과 같은 추가 콘텐츠 포함 속성은 상세 베타 추적이 활성화되어 있을 때만 내보내집니다. 이들은 안정적인 스팬 스키마의 일부가 아닙니다. `user_system_prompt`는 추가로 `OTEL_LOG_USER_PROMPTS=1`이 필요합니다. 이는 `systemPrompt` SDK 옵션 또는 `--system-prompt` 및 `--append-system-prompt` 플래그를 통해 제공하는 시스템 프롬프트 텍스트만 포함하며 60KB에서 잘리고 요청당이 아닌 세션당 한 번 내보내집니다.

232</Note>

233 

234### 동적 헤더

235 

236동적 인증이 필요한 엔터프라이즈 환경의 경우 스크립트를 구성하여 헤더를 동적으로 생성할 수 있습니다:

237 

238#### 설정 구성

239 

240`.claude/settings.json`에 추가:

241 

242```json theme={null}

243{

244 "otelHeadersHelper": "/bin/generate_opentelemetry_headers.sh"

245}

246```

247 

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

249 

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

251 

252```bash theme={null}

253#!/bin/bash

254# 예: 여러 헤더

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

256```

257 

258#### 새로 고침 동작

259 

260헤더 도우미 스크립트는 시작 시 그리고 그 이후 주기적으로 실행되어 토큰 새로 고침을 지원합니다. 기본적으로 스크립트는 29분마다 실행됩니다. `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` 환경 변수로 간격을 사용자 정의합니다.

261 

262### 다중 팀 조직 지원

263 

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

265 

266```bash theme={null}

267# 팀 식별을 위한 사용자 정의 속성 추가

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

269```

270 

271이러한 사용자 정의 속성은 모든 메트릭 및 이벤트에 포함되어 다음을 수행할 수 있습니다:

272 

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

274* 비용 센터별 비용 추적

275* 팀별 대시보드 생성

276* 특정 팀에 대한 경고 설정

277 

278<Warning>

279 **OTEL\_RESOURCE\_ATTRIBUTES에 대한 중요한 형식 요구 사항:**

280 

281 `OTEL_RESOURCE_ATTRIBUTES` 환경 변수는 쉼표로 구분된 key=value 쌍을 사용하며 엄격한 형식 요구 사항이 있습니다:

282 

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

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

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

286 * **특수 문자**: 허용된 범위 외의 문자는 퍼센트 인코딩되어야 합니다

287 

288 **예:**

289 

290 ```bash theme={null}

291 # ❌ 유효하지 않음 - 공백 포함

292 export OTEL_RESOURCE_ATTRIBUTES="org.name=John's Organization"

293 

294 # ✅ 유효함 - 대신 언더스코어 또는 camelCase 사용

295 export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"

296 export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"

297 

298 # ✅ 유효함 - 필요한 경우 특수 문자를 퍼센트 인코딩

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

300 ```

301 

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

303</Warning>

304 

305### 예제 구성

306 

307`claude`를 실행하기 전에 이러한 환경 변수를 설정합니다. 각 블록은 다양한 내보내기 또는 배포 시나리오에 대한 완전한 구성을 보여줍니다:

308 

309```bash theme={null}

310# 콘솔 디버깅 (1초 간격)

311export CLAUDE_CODE_ENABLE_TELEMETRY=1

312export OTEL_METRICS_EXPORTER=console

313export OTEL_METRIC_EXPORT_INTERVAL=1000

314 

315# OTLP/gRPC

316export CLAUDE_CODE_ENABLE_TELEMETRY=1

317export OTEL_METRICS_EXPORTER=otlp

318export OTEL_EXPORTER_OTLP_PROTOCOL=grpc

319export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

320 

321# Prometheus

322export CLAUDE_CODE_ENABLE_TELEMETRY=1

323export OTEL_METRICS_EXPORTER=prometheus

324 

325# 여러 내보내기

326export CLAUDE_CODE_ENABLE_TELEMETRY=1

327export OTEL_METRICS_EXPORTER=console,otlp

328export OTEL_EXPORTER_OTLP_PROTOCOL=http/json

329 

330# 메트릭 및 로그에 대한 다양한 엔드포인트/백엔드

331export CLAUDE_CODE_ENABLE_TELEMETRY=1

332export OTEL_METRICS_EXPORTER=otlp

333export OTEL_LOGS_EXPORTER=otlp

334export OTEL_EXPORTER_OTLP_METRICS_PROTOCOL=http/protobuf

335export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://metrics.example.com:4318

336export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=grpc

337export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317

338 

339# 메트릭만 (이벤트/로그 없음)

340export CLAUDE_CODE_ENABLE_TELEMETRY=1

341export OTEL_METRICS_EXPORTER=otlp

342export OTEL_EXPORTER_OTLP_PROTOCOL=grpc

343export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

344 

345# 이벤트/로그만 (메트릭 없음)

346export CLAUDE_CODE_ENABLE_TELEMETRY=1

347export OTEL_LOGS_EXPORTER=otlp

348export OTEL_EXPORTER_OTLP_PROTOCOL=grpc

349export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

350```

351 

352## 사용 가능한 메트릭 및 이벤트

353 

354### 표준 속성

355 

356모든 메트릭 및 이벤트는 다음 표준 속성을 공유합니다:

357 

358| 속성 | 설명 | 제어 대상 |

359| ------------------- | --------------------------------------------------------------------- | ----------------------------------------------- |

360| `session.id` | 고유 세션 식별자 | `OTEL_METRICS_INCLUDE_SESSION_ID` (기본값: true) |

361| `app.version` | 현재 Claude Code 버전 | `OTEL_METRICS_INCLUDE_VERSION` (기본값: false) |

362| `organization.id` | 조직 UUID (인증된 경우) | 사용 가능할 때 항상 포함됨 |

363| `user.account_uuid` | 계정 UUID (인증된 경우) | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` (기본값: true) |

364| `user.account_id` | Anthropic 관리 API와 일치하는 태그 형식의 계정 ID (인증된 경우) (예: `user_01BWBeN28...`) | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` (기본값: true) |

365| `user.id` | 익명 장치/설치 식별자 (Claude Code 설치당 생성됨) | 항상 포함됨 |

366| `user.email` | 사용자 이메일 주소 (OAuth를 통해 인증된 경우) | 사용 가능할 때 항상 포함됨 |

367| `terminal.type` | 터미널 유형 (예: `iTerm.app`, `vscode`, `cursor`, `tmux`) | 감지될 때 항상 포함됨 |

368 

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

370 

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

372* `workspace.host_paths`: 데스크톱 앱에서 선택한 호스트 작업 공간 디렉토리 (문자열 배열)

373 

374### 메트릭

375 

376Claude Code는 다음 메트릭을 내보냅니다:

377 

378| 메트릭 이름 | 설명 | 단위 |

379| ------------------------------------- | ------------------ | ------ |

380| `claude_code.session.count` | 시작된 CLI 세션 수 | count |

381| `claude_code.lines_of_code.count` | 수정된 코드 라인 수 | count |

382| `claude_code.pull_request.count` | 생성된 풀 요청 수 | count |

383| `claude_code.commit.count` | 생성된 git 커밋 수 | count |

384| `claude_code.cost.usage` | Claude Code 세션의 비용 | USD |

385| `claude_code.token.usage` | 사용된 토큰 수 | tokens |

386| `claude_code.code_edit_tool.decision` | 코드 편집 도구 권한 결정 수 | count |

387| `claude_code.active_time.total` | 총 활성 시간 (초) | s |

388 

389### 메트릭 세부 정보

390 

391각 메트릭은 위에 나열된 표준 속성을 포함합니다. 추가 컨텍스트별 속성이 있는 메트릭은 아래에 표시됩니다.

392 

393#### 세션 카운터

394 

395각 세션 시작 시 증가합니다.

396 

397**속성**:

398 

399* 모든 [표준 속성](#standard-attributes)

400* `start_type`: 세션이 시작된 방식. `"fresh"`, `"resume"` 또는 `"continue"` 중 하나

401 

402#### 코드 라인 카운터

403 

404코드가 추가되거나 제거될 때 증가합니다.

405 

406**속성**:

407 

408* 모든 [표준 속성](#standard-attributes)

409* `type`: (`"added"`, `"removed"`)

410 

411#### 풀 요청 카운터

412 

413Claude Code를 통해 풀 요청을 생성할 때 증가합니다.

414 

415**속성**:

416 

417* 모든 [표준 속성](#standard-attributes)

418 

419#### 커밋 카운터

420 

421Claude Code를 통해 git 커밋을 생성할 때 증가합니다.

422 

423**속성**:

424 

425* 모든 [표준 속성](#standard-attributes)

426 

427#### 비용 카운터

428 

429각 API 요청 후 증가합니다.

430 

431**속성**:

432 

433* 모든 [표준 속성](#standard-attributes)

434* `model`: 모델 식별자 (예: "claude-sonnet-4-6")

435* `query_source`: 요청을 발급한 하위 시스템의 범주. `"main"`, `"subagent"` 또는 `"auxiliary"` 중 하나

436* `speed`: 요청이 빠른 모드를 사용했을 때 `"fast"`. 그 외에는 없음

437* `effort`: 요청에 적용된 [노력 수준](/ko/model-config#adjust-effort-level): `"low"`, `"medium"`, `"high"`, `"xhigh"` 또는 `"max"`. 모델이 노력을 지원하지 않을 때는 없음

438 

439#### 토큰 카운터

440 

441각 API 요청 후 증가합니다.

442 

443**속성**:

444 

445* 모든 [표준 속성](#standard-attributes)

446* `type`: (`"input"`, `"output"`, `"cacheRead"`, `"cacheCreation"`)

447* `model`: 모델 식별자 (예: "claude-sonnet-4-6")

448* `query_source`: 요청을 발급한 하위 시스템의 범주. `"main"`, `"subagent"` 또는 `"auxiliary"` 중 하나

449* `speed`: 요청이 빠른 모드를 사용했을 때 `"fast"`. 그 외에는 없음

450* `effort`: 요청에 적용된 [노력 수준](/ko/model-config#adjust-effort-level). [비용 카운터](#cost-counter)의 세부 정보를 참조하세요.

451 

452#### 코드 편집 도구 결정 카운터

453 

454사용자가 Edit, Write 또는 NotebookEdit 도구 사용을 수락하거나 거부할 때 증가합니다.

455 

456**속성**:

457 

458* 모든 [표준 속성](#standard-attributes)

459* `tool_name`: 도구 이름 (`"Edit"`, `"Write"`, `"NotebookEdit"`)

460* `decision`: 사용자 결정 (`"accept"`, `"reject"`)

461* `source`: 결정 출처. `"config"`, `"hook"`, `"user_permanent"`, `"user_temporary"`, `"user_abort"` 또는 `"user_reject"` 중 하나. [도구 결정 이벤트](#tool-decision-event)를 참조하여 각 값의 의미를 확인하세요.

462* `language`: 편집된 파일의 프로그래밍 언어 (예: `"TypeScript"`, `"Python"`, `"JavaScript"`, `"Markdown"`). 인식되지 않는 파일 확장자의 경우 `"unknown"`을 반환합니다.

463 

464#### 활성 시간 카운터

465 

466Claude Code를 적극적으로 사용하는 실제 시간을 추적합니다 (유휴 시간 제외). 이 메트릭은 사용자 상호 작용 (입력, 응답 읽기) 중 및 CLI 처리 (도구 실행, AI 응답 생성) 중에 증가합니다.

467 

468**속성**:

469 

470* 모든 [표준 속성](#standard-attributes)

471* `type`: 키보드 상호 작용의 경우 `"user"`, 도구 실행 및 AI 응답의 경우 `"cli"`

472 

473### 이벤트

474 

475Claude Code는 OpenTelemetry 로그/이벤트를 통해 다음 이벤트를 내보냅니다 (`OTEL_LOGS_EXPORTER`가 구성된 경우):

476 

477#### 이벤트 상관 속성

478 

479사용자가 프롬프트를 제출하면 Claude Code는 여러 API 호출을 수행하고 여러 도구를 실행할 수 있습니다. `prompt.id` 속성을 사용하면 이러한 모든 이벤트를 해당 이벤트를 트리거한 단일 프롬프트에 연결할 수 있습니다.

480 

481| 속성 | 설명 |

482| ----------- | ---------------------------------------------- |

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

484 

485단일 프롬프트로 트리거된 모든 활동을 추적하려면 특정 `prompt.id` 값으로 이벤트를 필터링합니다. 이는 user\_prompt 이벤트, 모든 api\_request 이벤트 및 해당 프롬프트 처리 중에 발생한 모든 tool\_result 이벤트를 반환합니다.

486 

487<Note>

488 `prompt.id`는 각 프롬프트가 고유 ID를 생성하여 계속 증가하는 시계열 수를 만들기 때문에 의도적으로 메트릭에서 제외됩니다. 이벤트 수준 분석 및 감사 추적에만 사용합니다.

489</Note>

490 

491#### 사용자 프롬프트 이벤트

492 

493사용자가 프롬프트를 제출할 때 기록됩니다.

494 

495**이벤트 이름**: `claude_code.user_prompt`

496 

497**속성**:

498 

499* 모든 [표준 속성](#standard-attributes)

500* `event.name`: `"user_prompt"`

501* `event.timestamp`: ISO 8601 타임스탬프

502* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

503* `prompt_length`: 프롬프트의 길이

504* `prompt`: 프롬프트 콘텐츠 (기본적으로 수정됨, `OTEL_LOG_USER_PROMPTS=1`로 활성화)

505* `command_name`: 프롬프트가 명령을 호출할 때 명령 이름. `compact` 또는 `debug`와 같은 기본 제공 및 번들 명령 이름은 그대로 내보내집니다. `reset`과 같은 별칭은 정규 이름이 아닌 입력한 대로 내보냅니다. 사용자 정의, 플러그인 및 MCP 명령 이름은 `OTEL_LOG_TOOL_DETAILS=1`이 설정되지 않으면 `custom` 또는 `mcp`로 축소됩니다

506* `command_source`: 명령이 있을 때 명령의 출처: `builtin`, `custom` 또는 `mcp`. 플러그인 제공 명령은 `custom`으로 보고합니다

507 

508#### 도구 결과 이벤트

509 

510도구가 실행을 완료할 때 기록됩니다.

511 

512**이벤트 이름**: `claude_code.tool_result`

513 

514**속성**:

515 

516* 모든 [표준 속성](#standard-attributes)

517* `event.name`: `"tool_result"`

518* `event.timestamp`: ISO 8601 타임스탬프

519* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

520* `tool_name`: 도구의 이름

521* `tool_use_id`: 이 도구 호출의 고유 식별자. 훅에 전달된 `tool_use_id`와 일치하여 OTel 이벤트와 훅 캡처 데이터 간의 상관관계를 허용합니다.

522* `success`: `"true"` 또는 `"false"`

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

524* `error_type`: 도구가 실패했을 때 오류 범주 문자열 (예: `"Error:ENOENT"` 또는 `"ShellError"`)

525* `error` (`OTEL_LOG_TOOL_DETAILS=1`일 때): 도구가 실패했을 때 전체 오류 메시지

526* `decision_type`: `"accept"` 또는 `"reject"`

527* `decision_source`: 결정 출처. `"config"`, `"hook"`, `"user_permanent"`, `"user_temporary"`, `"user_abort"` 또는 `"user_reject"` 중 하나. [도구 결정 이벤트](#tool-decision-event)를 참조하여 각 값의 의미를 확인하세요.

528* `tool_input_size_bytes`: JSON 직렬화된 도구 입력의 크기 (바이트)

529* `tool_result_size_bytes`: 도구 결과의 크기 (바이트)

530* `mcp_server_scope`: MCP 서버 범위 식별자 (MCP 도구의 경우)

531* `tool_parameters` (`OTEL_LOG_TOOL_DETAILS=1`일 때): 도구별 매개변수를 포함하는 JSON 문자열:

532 * Bash 도구의 경우: `bash_command`, `full_command`, `timeout`, `description`, `dangerouslyDisableSandbox` 및 `git_commit_id` (git commit 명령이 성공할 때 커밋 SHA) 포함

533 * MCP 도구의 경우: `mcp_server_name`, `mcp_tool_name` 포함

534 * Skill 도구의 경우: `skill_name` 포함

535 * Task 도구의 경우: `subagent_type` 포함

536* `tool_input` (`OTEL_LOG_TOOL_DETAILS=1`일 때): JSON 직렬화된 도구 인수입니다. 512자를 초과하는 개별 값은 잘리고, 전체 페이로드는 약 4K 문자로 제한됩니다. MCP 도구를 포함한 모든 도구에 적용됩니다.

537 

538#### API 요청 이벤트

539 

540Claude에 대한 각 API 요청에 대해 기록됩니다.

541 

542**이벤트 이름**: `claude_code.api_request`

543 

544**속성**:

545 

546* 모든 [표준 속성](#standard-attributes)

547* `event.name`: `"api_request"`

548* `event.timestamp`: ISO 8601 타임스탬프

549* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

550* `model`: 사용된 모델 (예: "claude-sonnet-4-6")

551* `cost_usd`: USD 단위의 예상 비용

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

553* `input_tokens`: 입력 토큰 수

554* `output_tokens`: 출력 토큰 수

555* `cache_read_tokens`: 캐시에서 읽은 토큰 수

556* `cache_creation_tokens`: 캐시 생성에 사용된 토큰 수

557* `request_id`: 응답의 `request-id` 헤더의 Anthropic API 요청 ID (예: `"req_011..."`). API가 반환할 때만 표시됩니다.

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

559* `query_source`: 요청을 발급한 하위 시스템 (예: `"repl_main_thread"`, `"compact"` 또는 하위 에이전트 이름)

560* `effort`: 요청에 적용된 [노력 수준](/ko/model-config#adjust-effort-level): `"low"`, `"medium"`, `"high"`, `"xhigh"` 또는 `"max"`. 모델이 노력을 지원하지 않을 때는 없음

561 

562#### API 오류 이벤트

563 

564Claude에 대한 API 요청이 실패할 때 기록됩니다.

565 

566**이벤트 이름**: `claude_code.api_error`

567 

568**속성**:

569 

570* 모든 [표준 속성](#standard-attributes)

571* `event.name`: `"api_error"`

572* `event.timestamp`: ISO 8601 타임스탬프

573* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

574* `model`: 사용된 모델 (예: "claude-sonnet-4-6")

575* `error`: 오류 메시지

576* `status_code`: HTTP 상태 코드 (숫자). HTTP가 아닌 오류 (예: 연결 실패)의 경우 없음

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

578* `attempt`: 초기 요청을 포함한 총 시도 횟수 (`1`은 재시도가 발생하지 않았음을 의미)

579* `request_id`: 응답의 `request-id` 헤더의 Anthropic API 요청 ID (예: `"req_011..."`). API가 반환할 때만 표시됩니다.

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

581* `query_source`: 요청을 발급한 하위 시스템 (예: `"repl_main_thread"`, `"compact"` 또는 하위 에이전트 이름)

582* `effort`: 요청에 적용된 [노력 수준](/ko/model-config#adjust-effort-level). 모델이 노력을 지원하지 않을 때는 없음

583 

584#### API 요청 본문 이벤트

585 

586`OTEL_LOG_RAW_API_BODIES`가 설정되어 있을 때 각 API 요청 시도에 대해 기록됩니다. 조정된 매개변수를 사용한 재시도는 각각 자신의 이벤트를 생성하므로 시도당 하나의 이벤트가 내보내집니다.

587 

588**이벤트 이름**: `claude_code.api_request_body`

589 

590**속성**:

591 

592* 모든 [표준 속성](#standard-attributes)

593* `event.name`: `"api_request_body"`

594* `event.timestamp`: ISO 8601 타임스탬프

595* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

596* `body`: JSON 직렬화된 Messages API 요청 매개변수 (시스템 프롬프트, 메시지, 도구 등) (60KB에서 잘림). 이전 어시스턴트 턴의 확장 사고 콘텐츠는 수정됩니다. 인라인 모드 (`OTEL_LOG_RAW_API_BODIES=1`)에서만 내보내집니다.

597* `body_ref`: 잘리지 않은 본문을 포함하는 `<dir>/<uuid>.request.json` 파일의 절대 경로. 파일 모드 (`OTEL_LOG_RAW_API_BODIES=file:<dir>`)에서만 내보내집니다.

598* `body_length`: 잘리지 않은 본문 길이. `OTEL_LOG_RAW_API_BODIES=file:<dir>`일 때 UTF-8 바이트, `=1`일 때 UTF-16 코드 단위

599* `body_truncated`: 인라인 잘림이 발생했을 때 `"true"`. 파일 모드 및 잘림이 발생하지 않았을 때는 없음

600* `model`: 요청 매개변수의 모델 식별자

601* `query_source`: 요청을 발급한 하위 시스템 (예: `"compact"`)

602 

603#### API 응답 본문 이벤트

604 

605`OTEL_LOG_RAW_API_BODIES`가 설정되어 있을 때 각 성공적인 API 응답에 대해 기록됩니다.

606 

607**이벤트 이름**: `claude_code.api_response_body`

608 

609**속성**:

610 

611* 모든 [표준 속성](#standard-attributes)

612* `event.name`: `"api_response_body"`

613* `event.timestamp`: ISO 8601 타임스탬프

614* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

615* `body`: JSON 직렬화된 Messages API 응답 (id, 콘텐츠 블록, 사용, 중지 이유) (60KB에서 잘림). 확장 사고 콘텐츠는 수정됩니다. 인라인 모드 (`OTEL_LOG_RAW_API_BODIES=1`)에서만 내보내집니다.

616* `body_ref`: 잘리지 않은 본문을 포함하는 `<dir>/<request_id>.response.json` 파일의 절대 경로. 파일 모드 (`OTEL_LOG_RAW_API_BODIES=file:<dir>`)에서만 내보내집니다.

617* `body_length`: 잘리지 않은 본문 길이. `OTEL_LOG_RAW_API_BODIES=file:<dir>`일 때 UTF-8 바이트, `=1`일 때 UTF-16 코드 단위

618* `body_truncated`: 인라인 잘림이 발생했을 때 `"true"`. 파일 모드 및 잘림이 발생하지 않았을 때는 없음

619* `model`: 모델 식별자

620* `query_source`: 요청을 발급한 하위 시스템

621* `request_id`: 응답의 `request-id` 헤더의 Anthropic API 요청 ID (예: `"req_011..."`). API가 반환할 때만 표시됩니다.

622 

623#### 도구 결정 이벤트

624 

625도구 권한 결정이 내려질 때 기록됩니다 (수락/거부).

626 

627**이벤트 이름**: `claude_code.tool_decision`

628 

629**속성**:

630 

631* 모든 [표준 속성](#standard-attributes)

632* `event.name`: `"tool_decision"`

633* `event.timestamp`: ISO 8601 타임스탬프

634* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

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

636* `tool_use_id`: 이 도구 호출의 고유 식별자. 훅에 전달된 `tool_use_id`와 일치하여 OTel 이벤트와 훅 캡처 데이터 간의 상관관계를 허용합니다.

637* `decision`: `"accept"` 또는 `"reject"`

638* `source`: 결정 출처:

639 * `"config"`: 프로젝트 설정, 엔터프라이즈 관리 정책, `--allowedTools` 또는 `--disallowedTools` 플래그, 활성 권한 모드 또는 도구가 본질적으로 안전하기 때문에 프롬프트 없이 자동으로 결정됨.

640 * `"hook"`: `PreToolUse` 또는 `PermissionRequest` 훅이 결정을 반환함.

641 * `"user_permanent"`: 사용자가 프롬프트될 때 "항상 허용"을 선택하여 개인 설정에 규칙을 저장했을 때 내보내집니다. 또한 해당 저장된 규칙과 일치하는 이후 호출에 대해서도 내보내집니다. 수락으로 처리됨.

642 * `"user_temporary"`: 사용자가 프롬프트될 때 "예" 또는 "이 세션에만"을 선택했지만 규칙을 저장하지 않았을 때 내보내집니다. 또한 해당 세션 범위 허용과 일치하는 같은 세션의 이후 호출에 대해서도 내보내집니다. 수락으로 처리됨.

643 * `"user_abort"`: 사용자가 답변 없이 권한 프롬프트를 닫았을 때 내보내집니다. 거부로 처리됨.

644 * `"user_reject"`: 사용자가 프롬프트될 때 "아니오"를 선택했거나 호출이 개인 설정의 거부 규칙과 일치했을 때 내보내집니다. 거부로 처리됨.

645 

646#### 권한 모드 변경 이벤트

647 

648권한 모드가 변경될 때 기록됩니다 (예: `Shift+Tab` 순환, 계획 모드 종료 또는 자동 모드 게이트 확인).

649 

650**이벤트 이름**: `claude_code.permission_mode_changed`

651 

652**속성**:

653 

654* 모든 [표준 속성](#standard-attributes)

655* `event.name`: `"permission_mode_changed"`

656* `event.timestamp`: ISO 8601 타임스탬프

657* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

658* `from_mode`: 이전 권한 모드 (예: `"default"`, `"plan"`, `"acceptEdits"`, `"auto"` 또는 `"bypassPermissions"`)

659* `to_mode`: 새 권한 모드

660* `trigger`: 변경을 야기한 것. `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"` 또는 `"auto_opt_in"` 중 하나. SDK 또는 브리지에서 전환이 시작될 때는 없음

661 

662#### 인증 이벤트

663 

664`/login` 또는 `/logout`이 완료될 때 기록됩니다.

665 

666**이벤트 이름**: `claude_code.auth`

667 

668**속성**:

669 

670* 모든 [표준 속성](#standard-attributes)

671* `event.name`: `"auth"`

672* `event.timestamp`: ISO 8601 타임스탬프

673* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

674* `action`: `"login"` 또는 `"logout"`

675* `success`: `"true"` 또는 `"false"`

676* `auth_method`: 인증 방법 (예: `"oauth"`)

677* `error_category`: 작업이 실패했을 때 범주별 오류 종류. 원본 오류 메시지는 포함되지 않습니다

678* `status_code`: 작업이 HTTP 오류로 실패했을 때 HTTP 상태 코드 (문자열)

679 

680#### MCP 서버 연결 이벤트

681 

682MCP 서버가 연결, 연결 해제 또는 연결 실패할 때 기록됩니다.

683 

684**이벤트 이름**: `claude_code.mcp_server_connection`

685 

686**속성**:

687 

688* 모든 [표준 속성](#standard-attributes)

689* `event.name`: `"mcp_server_connection"`

690* `event.timestamp`: ISO 8601 타임스탬프

691* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

692* `status`: `"connected"`, `"failed"` 또는 `"disconnected"`

693* `transport_type`: 서버 전송 (예: `"stdio"`, `"sse"` 또는 `"http"`)

694* `server_scope`: 서버가 구성된 범위 (예: `"user"`, `"project"` 또는 `"local"`)

695* `duration_ms`: 연결 시도 지속 시간 (밀리초)

696* `error_code`: 연결이 실패했을 때 오류 코드

697* `server_name` (`OTEL_LOG_TOOL_DETAILS=1`일 때): 구성된 서버 이름

698* `error` (`OTEL_LOG_TOOL_DETAILS=1`일 때): 연결이 실패했을 때 전체 오류 메시지

699 

700#### 내부 오류 이벤트

701 

702Claude Code가 예상치 못한 내부 오류를 포착할 때 기록됩니다. 오류 클래스 이름과 errno 스타일 코드만 기록됩니다. 오류 메시지 및 스택 추적은 포함되지 않습니다. 이 이벤트는 Bedrock, Vertex 또는 Foundry에 대해 실행하거나 `DISABLE_ERROR_REPORTING`이 설정되어 있을 때는 내보내지지 않습니다.

703 

704**이벤트 이름**: `claude_code.internal_error`

705 

706**속성**:

707 

708* 모든 [표준 속성](#standard-attributes)

709* `event.name`: `"internal_error"`

710* `event.timestamp`: ISO 8601 타임스탬프

711* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

712* `error_name`: 오류 클래스 이름 (예: `"TypeError"` 또는 `"SyntaxError"`)

713* `error_code`: 오류에 있을 때 Node.js errno 코드 (예: `"ENOENT"`)

714 

715#### 플러그인 설치됨 이벤트

716 

717플러그인이 설치를 완료할 때 기록됩니다 (`claude plugin install` CLI 명령 및 대화형 `/plugin` UI 모두).

718 

719**이벤트 이름**: `claude_code.plugin_installed`

720 

721**속성**:

722 

723* 모든 [표준 속성](#standard-attributes)

724* `event.name`: `"plugin_installed"`

725* `event.timestamp`: ISO 8601 타임스탬프

726* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

727* `marketplace.is_official`: 마켓플레이스가 공식 Anthropic 마켓플레이스인 경우 `"true"`, 그 외에는 `"false"`

728* `install.trigger`: `"cli"` 또는 `"ui"`

729* `plugin.name`: 설치된 플러그인의 이름. 타사 마켓플레이스의 경우 `OTEL_LOG_TOOL_DETAILS=1`일 때만 포함됩니다

730* `plugin.version`: 마켓플레이스 항목에 선언된 경우 플러그인 버전. 타사 마켓플레이스의 경우 `OTEL_LOG_TOOL_DETAILS=1`일 때만 포함됩니다

731* `marketplace.name`: 플러그인이 설치된 마켓플레이스. 타사 마켓플레이스의 경우 `OTEL_LOG_TOOL_DETAILS=1`일 때만 포함됩니다

732 

733#### 스킬 활성화됨 이벤트

734 

735스킬이 호출될 때 기록됩니다. Claude가 Skill 도구를 통해 호출하든 `/` 명령으로 실행하든 상관없습니다.

736 

737**이벤트 이름**: `claude_code.skill_activated`

738 

739**속성**:

740 

741* 모든 [표준 속성](#standard-attributes)

742* `event.name`: `"skill_activated"`

743* `event.timestamp`: ISO 8601 타임스탬프

744* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

745* `skill.name`: 스킬의 이름. 사용자 정의 및 타사 플러그인 스킬의 경우 `OTEL_LOG_TOOL_DETAILS=1`이 아니면 값은 자리 표시자 `"custom_skill"`입니다

746* `invocation_trigger`: 스킬이 트리거된 방식 (`"user-slash"`, `"claude-proactive"` 또는 `"nested-skill"`)

747* `skill.source`: 스킬이 로드된 위치 (예: `"bundled"`, `"userSettings"`, `"projectSettings"`, `"plugin"`)

748* `plugin.name` (`OTEL_LOG_TOOL_DETAILS=1`이거나 플러그인이 공식 마켓플레이스에서 온 경우): 스킬이 플러그인에서 제공될 때 소유 플러그인의 이름

749* `marketplace.name` (`OTEL_LOG_TOOL_DETAILS=1`이거나 플러그인이 공식 마켓플레이스에서 온 경우): 스킬이 플러그인에서 제공될 때 소유 플러그인이 설치된 마켓플레이스

750 

751#### @ 멘션 이벤트

752 

753Claude Code가 프롬프트에서 `@`-멘션을 해석할 때 기록됩니다. 모든 멘션이 이벤트를 내보내는 것은 아닙니다: 권한 거부, 파일 크기 초과, PDF 참조 첨부, 디렉토리 목록 실패와 같은 조기 종료 경로는 로깅 없이 반환됩니다.

754 

755**이벤트 이름**: `claude_code.at_mention`

756 

757**속성**:

758 

759* 모든 [표준 속성](#standard-attributes)

760* `event.name`: `"at_mention"`

761* `event.timestamp`: ISO 8601 타임스탬프

762* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

763* `mention_type`: 멘션의 유형 (`"file"`, `"directory"`, `"agent"`, `"mcp_resource"`)

764* `success`: 멘션이 성공적으로 해석되었는지 여부 (`"true"` 또는 `"false"`)

765 

766#### API 재시도 소진됨 이벤트

767 

768API 요청이 두 번 이상 시도 후 실패할 때 한 번 기록됩니다. 최종 `api_error` 이벤트와 함께 내보내집니다.

769 

770**이벤트 이름**: `claude_code.api_retries_exhausted`

771 

772**속성**:

773 

774* 모든 [표준 속성](#standard-attributes)

775* `event.name`: `"api_retries_exhausted"`

776* `event.timestamp`: ISO 8601 타임스탬프

777* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

778* `model`: 사용된 모델

779* `error`: 최종 오류 메시지

780* `status_code`: HTTP 상태 코드 (숫자). HTTP가 아닌 오류의 경우 없음

781* `total_attempts`: 수행된 총 시도 횟수

782* `total_retry_duration_ms`: 모든 시도에 걸친 총 벽시계 시간

783* `speed`: `"fast"` 또는 `"normal"`

784 

785#### 훅 실행 시작 이벤트

786 

787하나 이상의 훅이 훅 이벤트에 대해 실행을 시작할 때 기록됩니다.

788 

789**이벤트 이름**: `claude_code.hook_execution_start`

790 

791**속성**:

792 

793* 모든 [표준 속성](#standard-attributes)

794* `event.name`: `"hook_execution_start"`

795* `event.timestamp`: ISO 8601 타임스탬프

796* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

797* `hook_event`: 훅 이벤트 유형 (예: `"PreToolUse"` 또는 `"PostToolUse"`)

798* `hook_name`: 매처를 포함한 전체 훅 이름 (예: `"PreToolUse:Write"`)

799* `num_hooks`: 일치하는 훅 명령 수

800* `managed_only`: 관리 정책 훅만 허용될 때 `"true"`

801* `hook_source`: `"policySettings"` 또는 `"merged"`

802* `hook_definitions`: JSON 직렬화된 훅 구성. 상세 베타 추적과 `OTEL_LOG_TOOL_DETAILS=1`이 모두 활성화되어 있을 때만 포함됨

803 

804#### 훅 실행 완료 이벤트

805 

806훅 이벤트의 모든 훅이 완료되었을 때 기록됩니다.

807 

808**이벤트 이름**: `claude_code.hook_execution_complete`

809 

810**속성**:

811 

812* 모든 [표준 속성](#standard-attributes)

813* `event.name`: `"hook_execution_complete"`

814* `event.timestamp`: ISO 8601 타임스탬프

815* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

816* `hook_event`: 훅 이벤트 유형

817* `hook_name`: 매처를 포함한 전체 훅 이름

818* `num_hooks`: 일치하는 훅 명령 수

819* `num_success`: 성공적으로 완료된 수

820* `num_blocking`: 차단 결정을 반환한 수

821* `num_non_blocking_error`: 차단 없이 실패한 수

822* `num_cancelled`: 완료 전에 취소된 수

823* `total_duration_ms`: 모든 일치하는 훅의 벽시계 지속 시간

824* `managed_only`: 관리 정책 훅만 허용될 때 `"true"`

825* `hook_source`: `"policySettings"` 또는 `"merged"`

826* `hook_definitions`: JSON 직렬화된 훅 구성. 상세 베타 추적과 `OTEL_LOG_TOOL_DETAILS=1`이 모두 활성화되어 있을 때만 포함됨

827 

828#### 압축 이벤트

829 

830대화 압축이 완료될 때 기록됩니다.

831 

832**이벤트 이름**: `claude_code.compaction`

833 

834**속성**:

835 

836* 모든 [표준 속성](#standard-attributes)

837* `event.name`: `"compaction"`

838* `event.timestamp`: ISO 8601 타임스탬프

839* `event.sequence`: 세션 내 이벤트 순서 지정을 위한 단조 증가 카운터

840* `trigger`: `"auto"` 또는 `"manual"`

841* `success`: `"true"` 또는 `"false"`

842* `duration_ms`: 압축 지속 시간

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

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

845* `error`: 압축이 실패했을 때 오류 메시지

846 

847## 메트릭 및 이벤트 데이터 해석

848 

849내보낸 메트릭 및 이벤트는 다양한 분석을 지원합니다:

850 

851### 사용 모니터링

852 

853| 메트릭 | 분석 기회 |

854| ------------------------------------------------------------- | --------------------------------- |

855| `claude_code.token.usage` | `type` (입력/출력), 사용자, 팀 또는 모델별로 분류 |

856| `claude_code.session.count` | 시간 경과에 따른 채택 및 참여 추적 |

857| `claude_code.lines_of_code.count` | 코드 추가/제거를 추적하여 생산성 측정 |

858| `claude_code.commit.count` & `claude_code.pull_request.count` | 개발 워크플로우에 미치는 영향 이해 |

859 

860### 비용 모니터링

861 

862`claude_code.cost.usage` 메트릭은 다음에 도움이 됩니다:

863 

864* 팀 또는 개인 전체의 사용 추세 추적

865* 최적화를 위한 높은 사용 세션 식별

866 

867<Note>

868 비용 메트릭은 근사값입니다. 공식 청구 데이터는 API 제공자 (Claude Console, Amazon Bedrock 또는 Google Cloud Vertex)를 참조하세요.

869</Note>

870 

871### 경고 및 세분화

872 

873고려할 일반적인 경고:

874 

875* 비용 급증

876* 비정상적인 토큰 소비

877* 특정 사용자의 높은 세션 볼륨

878 

879모든 메트릭은 `user.account_uuid`, `user.account_id`, `organization.id`, `session.id`, `model` 및 `app.version`으로 세분화할 수 있습니다.

880 

881### 재시도 소진 감지

882 

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

884 

885이벤트의 `attempt` 속성은 총 시도 횟수를 기록합니다. `CLAUDE_CODE_MAX_RETRIES` (기본값 `10`)보다 큰 값은 요청이 일시적 오류에 대한 모든 재시도를 소진했음을 나타냅니다. 더 낮은 값은 `400` 응답과 같은 재시도 불가능한 오류를 나타냅니다.

886 

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

888 

889### 이벤트 분석

890 

891이벤트 데이터는 Claude Code 상호 작용에 대한 자세한 통찰력을 제공합니다:

892 

893**도구 사용 패턴**: 도구 결과 이벤트를 분석하여 다음을 식별합니다:

894 

895* 가장 자주 사용되는 도구

896* 도구 성공률

897* 평균 도구 실행 시간

898* 도구 유형별 오류 패턴

899 

900**성능 모니터링**: API 요청 지속 시간 및 도구 실행 시간을 추적하여 성능 병목 현상을 식별합니다.

901 

902## 백엔드 고려 사항

903 

904메트릭, 로그 및 추적 백엔드 선택은 수행할 수 있는 분석 유형을 결정합니다:

905 

906### 메트릭의 경우

907 

908* **시계열 데이터베이스 (예: Prometheus)**: 비율 계산, 집계된 메트릭

909* **컬럼형 저장소 (예: ClickHouse)**: 복잡한 쿼리, 고유 사용자 분석

910* **완전한 기능의 관찰성 플랫폼 (예: Honeycomb, Datadog)**: 고급 쿼리, 시각화, 경고

911 

912### 이벤트/로그의 경우

913 

914* **로그 집계 시스템 (예: Elasticsearch, Loki)**: 전체 텍스트 검색, 로그 분석

915* **컬럼형 저장소 (예: ClickHouse)**: 구조화된 이벤트 분석

916* **완전한 기능의 관찰성 플랫폼 (예: Honeycomb, Datadog)**: 메트릭과 이벤트 간의 상관 관계

917 

918### 추적의 경우

919 

920분산 추적 저장소 및 스팬 상관 관계를 지원하는 백엔드를 선택합니다:

921 

922* **분산 추적 시스템 (예: Jaeger, Zipkin, Grafana Tempo)**: 스팬 시각화, 요청 워터폴, 지연 시간 분석

923* **완전한 기능의 관찰성 플랫폼 (예: Honeycomb, Datadog)**: 추적 검색 및 메트릭과 로그와의 상관 관계

924 

925일일/주간/월간 활성 사용자 (DAU/WAU/MAU) 메트릭이 필요한 조직의 경우 효율적인 고유 값 쿼리를 지원하는 백엔드를 고려하세요.

926 

927## 서비스 정보

928 

929모든 메트릭 및 이벤트는 다음 리소스 속성과 함께 내보내집니다:

930 

931* `service.name`: `claude-code`

932* `service.version`: 현재 Claude Code 버전

933* `os.type`: 운영 체제 유형 (예: `linux`, `darwin`, `windows`)

934* `os.version`: 운영 체제 버전 문자열

935* `host.arch`: 호스트 아키텍처 (예: `amd64`, `arm64`)

936* `wsl.version`: WSL 버전 번호 (Windows Subsystem for Linux에서 실행할 때만 표시)

937* 미터 이름: `com.anthropic.claude_code`

938 

939## ROI 측정 리소스

940 

941원격 측정 설정, 비용 분석, 생산성 메트릭 및 자동화된 보고를 포함하여 Claude Code의 투자 수익률 측정에 대한 포괄적인 가이드는 [Claude Code ROI 측정 가이드](https://github.com/anthropics/claude-code-monitoring-guide)를 참조하세요. 이 저장소는 즉시 사용 가능한 Docker Compose 구성, Prometheus 및 OpenTelemetry 설정, Linear와 같은 도구와 통합된 생산성 보고서 생성 템플릿을 제공합니다.

942 

943## 보안 및 개인 정보 보호

944 

945* OpenTelemetry 내보내기는 선택 사항이며 명시적 구성이 필요합니다. Anthropic의 별도 운영 원격 측정 및 이를 비활성화하는 방법에 대해서는 [데이터 사용](/ko/data-usage#telemetry-services)을 참조하세요

946* 원본 파일 콘텐츠 및 코드 스니펫은 메트릭 또는 이벤트에 포함되지 않습니다. 추적 스팬은 별도의 데이터 경로입니다: 아래의 `OTEL_LOG_TOOL_CONTENT` 항목을 참조하세요

947* OAuth를 통해 인증된 경우 `user.email`이 원격 측정 속성에 포함됩니다. 조직에서 이것이 우려 사항인 경우 원격 측정 백엔드와 함께 작업하여 이 필드를 필터링하거나 수정합니다

948* 사용자 프롬프트 콘텐츠는 기본적으로 수집되지 않습니다. 프롬프트 길이만 기록됩니다. 프롬프트 콘텐츠를 포함하려면 `OTEL_LOG_USER_PROMPTS=1`을 설정합니다

949* 도구 입력 인수 및 매개변수는 기본적으로 기록되지 않습니다. 이를 포함하려면 `OTEL_LOG_TOOL_DETAILS=1`을 설정합니다. 활성화되면 `tool_result` 이벤트는 Bash 명령, MCP 서버 및 도구 이름, 스킬 이름이 포함된 `tool_parameters` 속성과 파일 경로, URL, 검색 패턴 및 기타 인수가 포함된 `tool_input` 속성을 포함합니다. `user_prompt` 이벤트는 사용자 정의, 플러그인 및 MCP 명령의 축자 `command_name`을 포함합니다. 추적 스팬은 동일한 `tool_input` 속성 및 `file_path`와 같은 입력 파생 속성을 포함합니다. 512자를 초과하는 개별 값은 잘리고 전체는 약 4K 문자로 제한되지만 인수에는 여전히 민감한 값이 포함될 수 있습니다. 필요에 따라 이러한 속성을 필터링하거나 수정하도록 원격 측정 백엔드를 구성합니다

950* 도구 입력 및 출력 콘텐츠는 기본적으로 추적 스팬에 기록되지 않습니다. 이를 포함하려면 `OTEL_LOG_TOOL_CONTENT=1`을 설정합니다. 활성화되면 스팬 이벤트는 스팬당 60KB에서 잘린 전체 도구 입력 및 출력 콘텐츠를 포함합니다. 여기에는 Read 도구 결과의 원본 파일 콘텐츠 및 Bash 명령 출력이 포함될 수 있습니다. 필요에 따라 이러한 속성을 필터링하거나 수정하도록 원격 측정 백엔드를 구성합니다

951* 원본 Anthropic Messages API 요청 및 응답 본문은 기본적으로 기록되지 않습니다. 이를 포함하려면 `OTEL_LOG_RAW_API_BODIES`를 설정합니다. `=1`일 때 각 API 호출은 `body` 속성이 JSON 직렬화된 페이로드(60KB에서 잘림)인 `api_request_body` 및 `api_response_body` 로그 이벤트를 내보냅니다. `=file:<dir>`일 때 잘리지 않은 본문은 해당 디렉토리 아래의 `.request.json` 및 `.response.json` 파일에 기록되고 이벤트는 인라인 본문 대신 `body_ref` 경로를 전달합니다. 로그 수집기 또는 사이드카와 함께 디렉토리를 배포하되 원격 측정 스트림을 통해서는 배포하지 마세요. 두 모드 모두에서 본문에는 전체 대화 기록(시스템 프롬프트, 모든 이전 사용자 및 어시스턴트 턴, 도구 결과)이 포함되므로 이를 활성화하면 다른 `OTEL_LOG_*` 콘텐츠 플래그가 공개할 모든 것에 동의하는 것을 의미합니다. Claude의 확장 사고 콘텐츠는 다른 설정에 관계없이 항상 이러한 본문에서 수정됩니다

952 

953## Amazon Bedrock에서 Claude Code 모니터링

954 

955Amazon Bedrock의 Claude Code 사용 모니터링에 대한 자세한 지침은 [Claude Code 모니터링 구현 (Bedrock)](https://github.com/aws-solutions-library-samples/guidance-for-claude-code-with-amazon-bedrock/blob/main/assets/docs/MONITORING.md)을 참조하세요.

network-config.md +132 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 엔터프라이즈 네트워크 구성

6 

7> 프록시 서버, 사용자 정의 인증 기관(CA), 상호 전송 계층 보안(mTLS) 인증을 통해 엔터프라이즈 환경에서 Claude Code를 구성합니다.

8 

9Claude Code는 환경 변수를 통해 다양한 엔터프라이즈 네트워크 및 보안 구성을 지원합니다. 여기에는 회사 프록시 서버를 통한 트래픽 라우팅, 사용자 정의 인증 기관(CA) 신뢰, 향상된 보안을 위한 상호 전송 계층 보안(mTLS) 인증서를 사용한 인증이 포함됩니다.

10 

11<Note>

12 이 페이지에 표시된 모든 환경 변수는 [`settings.json`](/ko/settings)에서도 구성할 수 있습니다.

13</Note>

14 

15## 프록시 구성

16 

17### 환경 변수

18 

19Claude Code는 표준 프록시 환경 변수를 준수합니다:

20 

21```bash theme={null}

22# HTTPS 프록시 (권장)

23export HTTPS_PROXY=https://proxy.example.com:8080

24 

25# HTTP 프록시 (HTTPS를 사용할 수 없는 경우)

26export HTTP_PROXY=http://proxy.example.com:8080

27 

28# 특정 요청에 대해 프록시 우회 - 공백으로 구분된 형식

29export NO_PROXY="localhost 192.168.1.1 example.com .example.com"

30# 특정 요청에 대해 프록시 우회 - 쉼표로 구분된 형식

31export NO_PROXY="localhost,192.168.1.1,example.com,.example.com"

32# 모든 요청에 대해 프록시 우회

33export NO_PROXY="*"

34```

35 

36<Note>

37 Claude Code는 SOCKS 프록시를 지원하지 않습니다.

38</Note>

39 

40### 기본 인증

41 

42프록시에 기본 인증이 필요한 경우 프록시 URL에 자격 증명을 포함합니다:

43 

44```bash theme={null}

45export HTTPS_PROXY=http://username:password@proxy.example.com:8080

46```

47 

48<Warning>

49 스크립트에 암호를 하드코딩하지 마십시오. 대신 환경 변수 또는 보안 자격 증명 저장소를 사용하십시오.

50</Warning>

51 

52<Tip>

53 고급 인증(NTLM, Kerberos 등)이 필요한 프록시의 경우 인증 방법을 지원하는 LLM Gateway 서비스 사용을 고려하십시오.

54</Tip>

55 

56## CA 인증서 저장소

57 

58기본적으로 Claude Code는 번들로 제공되는 Mozilla CA 인증서와 운영 체제의 인증서 저장소를 모두 신뢰합니다. CrowdStrike Falcon 및 Zscaler와 같은 엔터프라이즈 TLS 검사 프록시는 루트 인증서가 OS 신뢰 저장소에 설치되어 있으면 추가 구성 없이 작동합니다.

59 

60<Note>

61 시스템 CA 저장소 통합에는 네이티브 Claude Code 바이너리 배포가 필요합니다. Node.js 런타임에서 실행할 때는 시스템 CA 저장소가 자동으로 병합되지 않습니다. 이 경우 `NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem`을 설정하여 엔터프라이즈 루트 CA를 신뢰합니다.

62</Note>

63 

64`CLAUDE_CODE_CERT_STORE`는 쉼표로 구분된 소스 목록을 허용합니다. 인식되는 값은 Claude Code와 함께 제공되는 Mozilla CA 세트의 경우 `bundled`, 운영 체제 신뢰 저장소의 경우 `system`입니다. 기본값은 `bundled,system`입니다.

65 

66번들로 제공되는 Mozilla CA 세트만 신뢰하려면:

67 

68```bash theme={null}

69export CLAUDE_CODE_CERT_STORE=bundled

70```

71 

72OS 인증서 저장소만 신뢰하려면:

73 

74```bash theme={null}

75export CLAUDE_CODE_CERT_STORE=system

76```

77 

78<Note>

79 `CLAUDE_CODE_CERT_STORE`에는 전용 `settings.json` 스키마 키가 없습니다. `~/.claude/settings.json`의 `env` 블록에서 또는 프로세스 환경에서 직접 설정합니다.

80</Note>

81 

82## 사용자 정의 CA 인증서

83 

84엔터프라이즈 환경에서 사용자 정의 CA를 사용하는 경우 Claude Code를 구성하여 이를 직접 신뢰하도록 합니다:

85 

86```bash theme={null}

87export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem

88```

89 

90## mTLS 인증

91 

92클라이언트 인증서 인증이 필요한 엔터프라이즈 환경의 경우:

93 

94```bash theme={null}

95# 인증용 클라이언트 인증서

96export CLAUDE_CODE_CLIENT_CERT=/path/to/client-cert.pem

97 

98# 클라이언트 개인 키

99export CLAUDE_CODE_CLIENT_KEY=/path/to/client-key.pem

100 

101# 선택 사항: 암호화된 개인 키의 암호

102export CLAUDE_CODE_CLIENT_KEY_PASSPHRASE="your-passphrase"

103```

104 

105## 네트워크 액세스 요구 사항

106 

107Claude Code는 다음 URL에 대한 액세스가 필요합니다. 특히 컨테이너화되거나 제한된 네트워크 환경에서 프록시 구성 및 방화벽 규칙에 이러한 URL을 허용 목록에 추가하십시오.

108 

109| URL | 필요한 용도 |

110| ------------------------------ | --------------------------------------------------------------------- |

111| `api.anthropic.com` | Claude API 요청 |

112| `claude.ai` | claude.ai 계정 인증 |

113| `platform.claude.com` | Anthropic Console 계정 인증 |

114| `downloads.claude.ai` | 플러그인 실행 파일 다운로드; 네이티브 설치 관리자 및 네이티브 자동 업데이터 |

115| `storage.googleapis.com` | {/* max-version: 2.1.115 */}2.1.116 이전 버전의 네이티브 설치 관리자 및 네이티브 자동 업데이터 |

116| `bridge.claudeusercontent.com` | [Chrome의 Claude](/ko/chrome) 확장 프로그램 WebSocket 브리지 |

117 

118npm을 통해 Claude Code를 설치하거나 자신의 바이너리 배포를 관리하는 경우 최종 사용자는 `downloads.claude.ai` 또는 `storage.googleapis.com`에 대한 액세스가 필요하지 않을 수 있습니다.

119 

120Claude Code는 기본적으로 선택적 운영 원격 분석을 전송하며, 환경 변수를 사용하여 이를 비활성화할 수 있습니다. 허용 목록을 최종 확정하기 전에 원격 분석을 비활성화하는 방법은 [원격 분석 서비스](/ko/data-usage#telemetry-services)를 참조하십시오.

121 

122[Amazon Bedrock](/ko/amazon-bedrock), [Google Vertex AI](/ko/google-vertex-ai) 또는 [Microsoft Foundry](/ko/microsoft-foundry)를 사용할 때 모델 트래픽 및 인증은 `api.anthropic.com`, `claude.ai` 또는 `platform.claude.com` 대신 공급자로 이동합니다. WebFetch 도구는 [설정](/ko/settings)에서 `skipWebFetchPreflight: true`를 설정하지 않는 한 [도메인 안전 검사](/ko/data-usage#webfetch-domain-safety-check)를 위해 여전히 `api.anthropic.com`을 호출합니다.

123 

124[웹의 Claude Code](/ko/claude-code-on-the-web) 및 [Code Review](/ko/code-review)는 Anthropic 관리 인프라에서 리포지토리에 연결합니다. GitHub Enterprise Cloud 조직이 IP 주소로 액세스를 제한하는 경우 [설치된 GitHub Apps에 대한 IP 허용 목록 상속 활성화](https://docs.github.com/en/enterprise-cloud@latest/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-allowed-ip-addresses-for-your-organization#allowing-access-by-github-apps)를 수행하십시오. Claude GitHub App은 IP 범위를 등록하므로 이 설정을 활성화하면 수동 구성 없이 액세스할 수 있습니다. 대신 [범위를 허용 목록에 수동으로 추가](https://docs.github.com/en/enterprise-cloud@latest/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-allowed-ip-addresses-for-your-organization#adding-an-allowed-ip-address)하거나 다른 방화벽을 구성하려면 [Anthropic API IP 주소](https://platform.claude.com/docs/en/api/ip-addresses)를 참조하십시오.

125 

126자체 호스팅 [GitHub Enterprise Server](/ko/github-enterprise-server) 인스턴스가 방화벽 뒤에 있는 경우 동일한 [Anthropic API IP 주소](https://platform.claude.com/docs/en/api/ip-addresses)를 허용 목록에 추가하여 Anthropic 인프라가 GHES 호스트에 도달하여 리포지토리를 복제하고 검토 의견을 게시할 수 있도록 합니다.

127 

128## 추가 리소스

129 

130* [Claude Code 설정](/ko/settings)

131* [환경 변수 참조](/ko/env-vars)

132* [문제 해결 가이드](/ko/troubleshooting)

output-styles.md +90 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 출력 스타일

6 

7> 소프트웨어 엔지니어링 이상의 용도로 Claude Code 적응시키기

8 

9출력 스타일을 사용하면 Claude Code의 로컬 스크립트 실행, 파일 읽기/쓰기, TODO 추적과 같은 핵심 기능을 유지하면서 모든 유형의 에이전트로 사용할 수 있습니다.

10 

11## 기본 제공 출력 스타일

12 

13Claude Code의 **Default** 출력 스타일은 기존 시스템 프롬프트이며, 소프트웨어 엔지니어링 작업을 효율적으로 완료하도록 설계되었습니다.

14 

15코드베이스와 Claude의 작동 방식을 가르치는 데 중점을 두는 두 가지 추가 기본 제공 출력 스타일이 있습니다:

16 

17* **Explanatory**: 소프트웨어 엔지니어링 작업을 완료하는 동안 교육용 "Insights"를 제공합니다. 구현 선택 사항과 코드베이스 패턴을 이해하는 데 도움이 됩니다.

18 

19* **Learning**: 협업 방식의 학습 모드로, Claude는 코딩하면서 "Insights"를 공유할 뿐만 아니라 사용자가 작은 전략적 코드 조각을 직접 작성하도록 요청합니다. Claude Code는 구현할 코드에 `TODO(human)` 마커를 추가합니다.

20 

21## 출력 스타일의 작동 방식

22 

23출력 스타일은 Claude Code의 시스템 프롬프트를 직접 수정합니다.

24 

25* 사용자 정의 출력 스타일은 `keep-coding-instructions`가 true가 아닌 한 코딩 관련 지침(테스트를 통한 코드 검증 등)을 제외합니다.

26* 모든 출력 스타일은 시스템 프롬프트 끝에 추가된 자체 사용자 정의 지침을 가집니다.

27* 모든 출력 스타일은 대화 중에 Claude가 출력 스타일 지침을 준수하도록 상기시키는 알림을 트리거합니다.

28 

29토큰 사용량은 스타일에 따라 다릅니다. 시스템 프롬프트에 지침을 추가하면 입력 토큰이 증가하지만, 프롬프트 캐싱은 세션의 첫 번째 요청 이후 이 비용을 줄입니다. 기본 제공 Explanatory 및 Learning 스타일은 설계상 Default보다 더 긴 응답을 생성하므로 출력 토큰이 증가합니다. 사용자 정의 스타일의 경우, 출력 토큰 사용량은 지침이 Claude에게 생성하도록 지시하는 내용에 따라 달라집니다.

30 

31## 출력 스타일 변경

32 

33`/config`를 실행하고 **Output style**을 선택하여 메뉴에서 스타일을 선택합니다. 선택 사항은 [로컬 프로젝트 수준](/ko/settings)의 `.claude/settings.local.json`에 저장됩니다.

34 

35메뉴 없이 스타일을 설정하려면 설정 파일에서 `outputStyle` 필드를 직접 편집합니다:

36 

37```json theme={null}

38{

39 "outputStyle": "Explanatory"

40}

41```

42 

43출력 스타일은 세션 시작 시 시스템 프롬프트에 설정되므로, 변경 사항은 새 세션을 시작할 때 적용됩니다. 이렇게 하면 시스템 프롬프트가 대화 전체에서 안정적으로 유지되어 프롬프트 캐싱이 지연 시간과 비용을 줄일 수 있습니다.

44 

45## 사용자 정의 출력 스타일 만들기

46 

47사용자 정의 출력 스타일은 frontmatter와 시스템 프롬프트에 추가될 텍스트가 포함된 Markdown 파일입니다:

48 

49```markdown theme={null}

50---

51name: My Custom Style

52description:

53 A brief description of what this style does, to be displayed to the user

54---

55 

56# Custom Style Instructions

57 

58You are an interactive CLI tool that helps users with software engineering

59tasks. [Your custom instructions here...]

60 

61## Specific Behaviors

62 

63[Define how the assistant should behave in this style...]

64```

65 

66이러한 파일은 사용자 수준(`~/.claude/output-styles`) 또는 프로젝트 수준(`.claude/output-styles`)에 저장할 수 있습니다.

67 

68### Frontmatter

69 

70출력 스타일 파일은 메타데이터 지정을 위한 frontmatter를 지원합니다:

71 

72| Frontmatter | 목적 | 기본값 |

73| :------------------------- | :--------------------------------------- | :--------- |

74| `name` | 출력 스타일의 이름(파일 이름이 아닌 경우) | 파일 이름에서 상속 |

75| `description` | `/config` 선택기에 표시되는 출력 스타일의 설명 | 없음 |

76| `keep-coding-instructions` | Claude Code의 시스템 프롬프트의 코딩 관련 부분을 유지할지 여부 | false |

77 

78## 관련 기능과의 비교

79 

80### 출력 스타일 vs. CLAUDE.md vs. --append-system-prompt

81 

82출력 스타일은 소프트웨어 엔지니어링에 특정한 Claude Code의 기본 시스템 프롬프트 부분을 완전히 "끕니다". CLAUDE.md와 `--append-system-prompt`는 Claude Code의 기본 시스템 프롬프트를 편집하지 않습니다. CLAUDE.md는 내용을 Claude Code의 기본 시스템 프롬프트 *다음에* 사용자 메시지로 추가합니다. `--append-system-prompt`는 내용을 시스템 프롬프트에 추가합니다.

83 

84### 출력 스타일 vs. [Agents](/ko/sub-agents)

85 

86출력 스타일은 주 에이전트 루프에 직접 영향을 미치며 시스템 프롬프트에만 영향을 줍니다. 에이전트는 특정 작업을 처리하기 위해 호출되며 사용할 모델, 사용 가능한 도구, 에이전트 사용 시기에 대한 일부 컨텍스트와 같은 추가 설정을 포함할 수 있습니다.

87 

88### 출력 스타일 vs. [Skills](/ko/skills)

89 

90출력 스타일은 Claude가 응답하는 방식(형식, 톤, 구조)을 수정하며 선택되면 항상 활성화됩니다. Skills는 `/skill-name`으로 호출하거나 관련성이 있을 때 Claude가 자동으로 로드하는 작업별 프롬프트입니다. 일관된 형식 지정 기본 설정에는 출력 스타일을 사용하고, 재사용 가능한 워크플로우 및 작업에는 skills를 사용합니다.

overview.md +875 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Claude Code 개요

6 

7> Claude Code는 코드베이스를 읽고, 파일을 편집하고, 명령을 실행하고, 개발 도구와 통합하는 에이전트 코딩 도구입니다. 터미널, IDE, 데스크톱 앱 및 브라우저에서 사용할 수 있습니다.

8 

9export const InstallConfigurator = ({defaultSurface = 'terminal'}) => {

10 const TERM = {

11 mac: {

12 label: 'macOS / Linux',

13 cmd: 'curl -fsSL https://claude.ai/install.sh | bash'

14 },

15 win: {

16 label: 'Windows'

17 },

18 brew: {

19 label: 'Homebrew',

20 cmd: 'brew install --cask claude-code'

21 },

22 winget: {

23 label: 'WinGet',

24 cmd: 'winget install Anthropic.ClaudeCode'

25 }

26 };

27 const WIN_VARIANTS = {

28 ps: 'irm https://claude.ai/install.ps1 | iex',

29 cmd: 'curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd'

30 };

31 const TABS = [{

32 key: 'terminal',

33 label: 'Terminal'

34 }, {

35 key: 'desktop',

36 label: 'Desktop'

37 }, {

38 key: 'vscode',

39 label: 'VS Code'

40 }, {

41 key: 'jetbrains',

42 label: 'JetBrains'

43 }];

44 const ALT_TARGETS = {

45 desktop: {

46 name: 'Desktop',

47 tagline: 'The full agent in a native app for macOS and Windows.',

48 installLabel: 'Download the app',

49 installHref: 'https://claude.com/download?utm_source=claude_code&utm_medium=docs&utm_content=configurator_desktop_download',

50 guideHref: '/en/desktop-quickstart'

51 },

52 vscode: {

53 name: 'VS Code',

54 tagline: 'Review diffs, manage context, and chat without leaving your editor.',

55 installLabel: 'Install from Marketplace',

56 installHref: 'https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code',

57 altCmd: 'code --install-extension anthropic.claude-code',

58 guideHref: '/en/vs-code'

59 },

60 jetbrains: {

61 name: 'JetBrains',

62 tagline: 'Native plugin for IntelliJ, PyCharm, WebStorm, and other JetBrains IDEs.',

63 installLabel: 'Install from Marketplace',

64 installHref: 'https://plugins.jetbrains.com/plugin/27310-claude-code-beta-',

65 guideHref: '/en/jetbrains'

66 }

67 };

68 const PROVIDERS = [{

69 key: 'anthropic',

70 label: 'Anthropic'

71 }, {

72 key: 'bedrock',

73 label: 'Amazon Bedrock'

74 }, {

75 key: 'foundry',

76 label: 'Microsoft Foundry'

77 }, {

78 key: 'vertex',

79 label: 'Google Vertex AI'

80 }];

81 const PROVIDER_NOTICE = {

82 bedrock: <>

83 <strong>Configure your AWS account first.</strong> Running on Bedrock

84 requires model access enabled in the AWS console and IAM credentials.{' '}

85 <a href="/en/amazon-bedrock">Bedrock setup guide →</a>

86 </>,

87 vertex: <>

88 <strong>Configure your GCP project first.</strong> Running on Vertex AI

89 requires the Vertex API enabled and a service account with the right

90 permissions.{' '}

91 <a href="/en/google-vertex-ai">Vertex setup guide →</a>

92 </>,

93 foundry: <>

94 <strong>Configure your Azure resources first.</strong> Running on

95 Microsoft Foundry requires an Azure subscription with a Foundry resource

96 and model deployments provisioned.{' '}

97 <a href="/en/microsoft-foundry">Foundry setup guide →</a>

98 </>

99 };

100 const iconCheck = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

101 <polyline points="20 6 9 17 4 12" />

102 </svg>;

103 const iconCopy = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

104 <rect x="9" y="9" width="13" height="13" rx="2" />

105 <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />

106 </svg>;

107 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

108 <line x1="5" y1="12" x2="19" y2="12" />

109 <polyline points="12 5 19 12 12 19" />

110 </svg>;

111 const iconArrowUpRight = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

112 <line x1="7" y1="17" x2="17" y2="7" />

113 <polyline points="7 7 17 7 17 17" />

114 </svg>;

115 const iconInfo = (size = 16) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

116 <circle cx="12" cy="12" r="10" />

117 <line x1="12" y1="16" x2="12" y2="12" />

118 <line x1="12" y1="8" x2="12.01" y2="8" />

119 </svg>;

120 const [target, setTarget] = useState(defaultSurface);

121 const [team, setTeam] = useState(false);

122 const [provider, setProvider] = useState('anthropic');

123 const [pkg, setPkg] = useState(() => (/Win/).test(navigator.userAgent) ? 'win' : 'mac');

124 const [winCmd, setWinCmd] = useState(false);

125 const [copied, setCopied] = useState(null);

126 const copyTimer = useRef(null);

127 const handleCopy = async (text, key) => {

128 try {

129 await navigator.clipboard.writeText(text);

130 } catch {

131 const ta = document.createElement('textarea');

132 ta.value = text;

133 document.body.appendChild(ta);

134 ta.select();

135 document.execCommand('copy');

136 document.body.removeChild(ta);

137 }

138 clearTimeout(copyTimer.current);

139 setCopied(key);

140 copyTimer.current = setTimeout(() => setCopied(null), 1800);

141 };

142 const cardBodyCmd = (cmd, prompt) => {

143 const on = copied === 'term';

144 return <div className="cc-ic-card-body">

145 <span className="cc-ic-prompt">{prompt || '$'}</span>

146 <div className="cc-ic-cmd">{cmd}</div>

147 <button type="button" className={'cc-ic-copy' + (on ? ' cc-ic-copied' : '')} onClick={() => handleCopy(cmd, 'term')}>

148 {on ? iconCheck(13) : iconCopy(13)}

149 <span>{on ? 'Copied' : 'Copy'}</span>

150 </button>

151 </div>;

152 };

153 const isWinInstaller = pkg === 'win';

154 const isWinPrompt = pkg === 'win' || pkg === 'winget';

155 const terminalCmd = isWinInstaller ? WIN_VARIANTS[winCmd ? 'cmd' : 'ps'] : TERM[pkg].cmd;

156 const alt = ALT_TARGETS[target];

157 const showNotice = team && provider !== 'anthropic';

158 const STYLES = `

159.cc-ic {

160 --ic-slate: #141413;

161 --ic-clay: #d97757;

162 --ic-clay-deep: #c6613f;

163 --ic-gray-000: #ffffff;

164 --ic-gray-150: #f0eee6;

165 --ic-gray-550: #73726c;

166 --ic-gray-700: #3d3d3a;

167 --ic-border-subtle: rgba(31, 30, 29, 0.08);

168 --ic-border-default: rgba(31, 30, 29, 0.15);

169 --ic-border-strong: rgba(31, 30, 29, 0.3);

170 --ic-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Courier New', monospace;

171 font-family: 'Anthropic Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

172 font-size: 14px; line-height: 1.5; color: var(--ic-slate);

173 margin: 8px 0 32px;

174}

175.dark .cc-ic {

176 --ic-slate: #f0eee6;

177 --ic-gray-000: #262624;

178 --ic-gray-150: #1f1e1d;

179 --ic-gray-550: #91908a;

180 --ic-gray-700: #bfbdb4;

181 --ic-border-subtle: rgba(240, 238, 230, 0.08);

182 --ic-border-default: rgba(240, 238, 230, 0.14);

183 --ic-border-strong: rgba(240, 238, 230, 0.28);

184}

185.dark .cc-ic-check { background: transparent; }

186.dark .cc-ic-card { border: 0.5px solid var(--ic-border-subtle); }

187.dark .cc-ic-p-pill.cc-ic-active { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); }

188.cc-ic *, .cc-ic *::before, .cc-ic *::after { box-sizing: border-box; }

189.cc-ic a { text-decoration: none; }

190.cc-ic a:not([class]) { color: inherit; }

191.cc-ic button { font-family: inherit; cursor: pointer; }

192 

193.cc-ic-tab-strip {

194 display: inline-flex; gap: 2px;

195 padding: 4px; background: var(--ic-gray-150);

196 border-radius: 10px; overflow-x: auto;

197 max-width: 100%;

198}

199.cc-ic-tab {

200 appearance: none; background: none; border: none;

201 padding: 10px 18px; font-size: 15px; font-weight: 430;

202 color: var(--ic-gray-550); border-radius: 7px;

203 white-space: nowrap;

204 transition: color 0.12s, background-color 0.12s;

205}

206.cc-ic-tab:hover { color: var(--ic-gray-700); }

207.cc-ic-tab.cc-ic-active {

208 color: var(--ic-slate); font-weight: 500;

209 background: var(--ic-gray-000);

210 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);

211}

212.dark .cc-ic-tab.cc-ic-active { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); }

213 

214.cc-ic-team-wrap { padding: 16px 0 20px; }

215.cc-ic-team-toggle {

216 display: flex; align-items: center; gap: 12px; font-family: inherit;

217 padding: 12px 16px; font-size: 14px; font-weight: 430;

218 color: var(--ic-gray-700); cursor: pointer; user-select: none;

219 width: fit-content; background: var(--ic-gray-150);

220 border: 0.5px solid var(--ic-border-subtle); border-radius: 8px;

221 transition: border-color 0.15s;

222}

223.cc-ic-team-toggle:hover { border-color: var(--ic-border-default); }

224.cc-ic-team-toggle.cc-ic-checked {

225 background: rgba(217, 119, 87, 0.08);

226 border-color: rgba(217, 119, 87, 0.25);

227}

228.cc-ic-check {

229 width: 16px; height: 16px;

230 border: 1px solid var(--ic-border-strong); border-radius: 4px;

231 background: var(--ic-gray-000);

232 display: flex; align-items: center; justify-content: center;

233 flex-shrink: 0;

234}

235.cc-ic-check svg { color: #fff; display: none; }

236.cc-ic-team-toggle.cc-ic-checked .cc-ic-check { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); }

237.cc-ic-team-toggle.cc-ic-checked .cc-ic-check svg { display: block; }

238 

239.cc-ic-team-reveal { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; }

240.cc-ic-sales {

241 display: flex; align-items: center; justify-content: space-between;

242 gap: 16px; padding: 14px 16px;

243 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

244 border-radius: 8px; flex-wrap: wrap;

245}

246.cc-ic-sales-text { font-size: 13px; color: var(--ic-gray-700); line-height: 1.5; flex: 1; min-width: 200px; }

247.cc-ic-sales-text strong { font-weight: 550; color: var(--ic-slate); }

248.cc-ic-sales-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

249.cc-ic-btn-clay {

250 display: inline-flex; align-items: center; gap: 8px;

251 background: var(--ic-clay-deep); color: #fff; border: none;

252 border-radius: 8px; padding: 8px 14px;

253 font-size: 13px; font-weight: 500;

254 transition: background-color 0.15s; white-space: nowrap;

255}

256.cc-ic-btn-clay:hover { background: var(--ic-clay); }

257.cc-ic-btn-ghost {

258 display: inline-flex; align-items: center; gap: 8px;

259 background: transparent; color: var(--ic-gray-700);

260 border: 0.5px solid var(--ic-border-default);

261 border-radius: 8px; padding: 8px 14px;

262 font-size: 13px; font-weight: 500;

263}

264.cc-ic-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

265 

266.cc-ic-provider-bar {

267 display: flex; align-items: center; gap: 12px;

268 padding: 14px 16px; background: var(--ic-gray-150);

269 border-radius: 8px; font-size: 13px; flex-wrap: wrap;

270}

271.cc-ic-provider-bar .cc-ic-label { color: var(--ic-gray-550); flex-shrink: 0; }

272.cc-ic-provider-pills { display: flex; gap: 4px; flex-wrap: wrap; }

273.cc-ic-p-pill {

274 appearance: none; border: none; background: transparent;

275 padding: 6px 12px; border-radius: 6px;

276 font-size: 13px; font-weight: 430; color: var(--ic-gray-700);

277 white-space: nowrap;

278}

279.cc-ic-p-pill:hover { background: rgba(0, 0, 0, 0.04); }

280.cc-ic-p-pill.cc-ic-active {

281 background: var(--ic-gray-000); color: var(--ic-slate);

282 font-weight: 500; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);

283}

284.cc-ic-provider-notice {

285 display: flex; padding: 16px 18px;

286 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

287 border-radius: 8px; gap: 14px; align-items: flex-start;

288}

289.cc-ic-provider-notice > svg { color: var(--ic-gray-550); margin-top: 2px; flex-shrink: 0; }

290.cc-ic-provider-notice-body { font-size: 14px; line-height: 1.55; color: var(--ic-gray-700); }

291.cc-ic-provider-notice-body strong { font-weight: 550; color: var(--ic-slate); }

292.cc-ic-provider-notice-body a { color: var(--ic-clay-deep); font-weight: 500; }

293.cc-ic-provider-notice-body a:hover { text-decoration: underline; }

294 

295.cc-ic-card { background: #141413; border-radius: 12px; overflow: hidden; }

296.cc-ic-subtabs {

297 display: flex; align-items: center;

298 background: #1a1918;

299 border-bottom: 0.5px solid rgba(255, 255, 255, 0.08);

300 padding: 0 8px; overflow-x: auto;

301}

302.cc-ic-subtab {

303 appearance: none; background: none; border: none;

304 padding: 12px 16px; font-size: 12px;

305 color: rgba(255, 255, 255, 0.5);

306 position: relative; white-space: nowrap;

307}

308.cc-ic-subtab:hover { color: rgba(255, 255, 255, 0.75); }

309.cc-ic-subtab.cc-ic-active { color: #fff; }

310.cc-ic-subtab.cc-ic-active::after {

311 content: ''; position: absolute;

312 left: 12px; right: 12px; bottom: -0.5px;

313 height: 2px; background: var(--ic-clay);

314}

315.cc-ic-shell-switch {

316 display: inline-flex; gap: 2px;

317 margin: 14px 26px 0; padding: 3px;

318 background: rgba(255, 255, 255, 0.06);

319 border: 0.5px solid rgba(255, 255, 255, 0.08);

320 border-radius: 8px;

321 font-family: inherit;

322}

323.cc-ic-shell-option {

324 font: inherit; font-size: 12px; font-weight: 500;

325 padding: 5px 12px; border-radius: 6px;

326 background: transparent; border: none;

327 color: rgba(255, 255, 255, 0.55);

328 cursor: pointer; user-select: none; white-space: nowrap;

329 transition: color 120ms ease, background-color 120ms ease;

330}

331.cc-ic-shell-option:hover { color: rgba(255, 255, 255, 0.85); }

332.cc-ic-shell-option.cc-ic-active {

333 background: rgba(255, 255, 255, 0.12);

334 color: #fff;

335 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);

336}

337 

338.cc-ic-card-body { padding: 24px 26px; display: flex; align-items: flex-start; gap: 14px; }

339.cc-ic-prompt {

340 color: var(--ic-clay); font-family: var(--ic-font-mono);

341 font-size: 17px; user-select: none; padding-top: 2px;

342}

343.cc-ic-cmd {

344 flex: 1; font-family: var(--ic-font-mono);

345 font-size: 17px; color: #f0eee6;

346 line-height: 1.55; white-space: pre-wrap; word-break: break-word;

347}

348.cc-ic-copy {

349 display: inline-flex; align-items: center; gap: 6px;

350 background: rgba(255, 255, 255, 0.08);

351 border: 0.5px solid rgba(255, 255, 255, 0.12);

352 color: rgba(255, 255, 255, 0.85);

353 padding: 7px 13px; border-radius: 8px;

354 font-size: 13px; font-weight: 500; flex-shrink: 0;

355}

356.cc-ic-copy:hover { background: rgba(255, 255, 255, 0.14); }

357.cc-ic-copy.cc-ic-copied { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); color: #fff; }

358 

359.cc-ic-below {

360 margin-top: 12px; font-size: 13px; color: var(--ic-gray-550);

361 display: flex; gap: 16px; flex-wrap: wrap; align-items: baseline;

362}

363.cc-ic-below a { color: var(--ic-gray-700); border-bottom: 0.5px solid var(--ic-border-default); }

364.cc-ic-below a:hover { color: var(--ic-clay-deep); border-bottom-color: var(--ic-clay-deep); }

365.cc-ic-handoff {

366 padding: 22px 24px;

367 background: linear-gradient(180deg, #faf9f4 0%, #f3f1e9 100%);

368 border: 0.5px solid var(--ic-border-default);

369 border-radius: 12px;

370 box-shadow: 0 1px 2px rgba(31, 30, 29, 0.04), 0 6px 16px -4px rgba(31, 30, 29, 0.06);

371}

372.dark .cc-ic-handoff {

373 background: linear-gradient(180deg, #262624 0%, #1f1e1d 100%);

374 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3), 0 6px 16px -4px rgba(0, 0, 0, 0.4);

375}

376.cc-ic-handoff-title {

377 font-size: 16px; font-weight: 550; color: var(--ic-slate);

378 letter-spacing: -0.01em; margin-bottom: 4px;

379}

380.cc-ic-handoff-sub {

381 font-size: 14px; line-height: 1.5; color: var(--ic-gray-700);

382 margin-bottom: 18px;

383}

384.cc-ic-handoff-actions { display: flex; gap: 10px; flex-wrap: wrap; }

385.cc-ic-handoff-alt {

386 margin-top: 12px; font-size: 12px; color: var(--ic-gray-550);

387}

388.cc-ic-handoff-alt code {

389 font-family: var(--ic-font-mono); font-size: 11px;

390 background: var(--ic-gray-150); padding: 2px 6px;

391 border-radius: 4px; color: var(--ic-gray-700);

392}

393.cc-ic-copy-sm {

394 appearance: none; border: none;

395 display: inline-flex; align-items: center; justify-content: center;

396 width: 22px; height: 22px;

397 margin-left: 4px; vertical-align: middle;

398 background: var(--ic-gray-150); color: var(--ic-gray-550);

399 border-radius: 4px;

400 transition: color 0.1s, background-color 0.1s;

401}

402.cc-ic-copy-sm:hover { color: var(--ic-gray-700); background: var(--ic-border-default); }

403.cc-ic-copy-sm.cc-ic-copied { background: var(--ic-clay-deep); color: #fff; }

404 

405@media (max-width: 720px) {

406 .cc-ic-tab { padding: 12px 14px; font-size: 14px; }

407 .cc-ic-sales-actions { width: 100%; }

408 .cc-ic-card-body { padding: 20px; }

409 .cc-ic-cmd { font-size: 15px; }

410}

411`;

412 return <div className="cc-ic not-prose">

413 <style>{STYLES}</style>

414 

415 {}

416 <div className="cc-ic-tab-strip" role="tablist">

417 {TABS.map(t => <button key={t.key} type="button" role="tab" aria-selected={target === t.key} className={'cc-ic-tab' + (target === t.key ? ' cc-ic-active' : '')} onClick={() => setTarget(t.key)}>

418 {t.label}

419 </button>)}

420 </div>

421 

422 {}

423 <div className="cc-ic-team-wrap">

424 <button type="button" role="switch" aria-checked={team} className={'cc-ic-team-toggle' + (team ? ' cc-ic-checked' : '')} onClick={() => setTeam(!team)}>

425 <span className="cc-ic-check">{iconCheck(11)}</span>

426 <span>

427 I’m buying for a team or company (SSO, AWS/Azure/GCP, central billing)

428 </span>

429 </button>

430 </div>

431 

432 {}

433 {team && <div className="cc-ic-team-reveal">

434 <div className="cc-ic-sales">

435 <div className="cc-ic-sales-text">

436 <strong>Set up your team:</strong> self-serve or talk to sales.

437 </div>

438 <div className="cc-ic-sales-actions">

439 <a href="https://claude.ai/upgrade?initialPlanType=team&amp;utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_get_started" className="cc-ic-btn-ghost">

440 Get started

441 </a>

442 <a href="https://www.anthropic.com/contact-sales?utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_contact_sales" className="cc-ic-btn-clay">

443 Contact sales {iconArrowRight()}

444 </a>

445 </div>

446 </div>

447 

448 <div className="cc-ic-provider-bar">

449 <span className="cc-ic-label">Run on</span>

450 <div className="cc-ic-provider-pills" role="radiogroup" aria-label="Provider">

451 {PROVIDERS.map(p => <button key={p.key} type="button" role="radio" aria-checked={provider === p.key} className={'cc-ic-p-pill' + (provider === p.key ? ' cc-ic-active' : '')} onClick={() => setProvider(p.key)}>

452 {p.label}

453 </button>)}

454 </div>

455 </div>

456 

457 {showNotice && <div className="cc-ic-provider-notice">

458 {iconInfo()}

459 <div className="cc-ic-provider-notice-body">

460 {PROVIDER_NOTICE[provider]}

461 </div>

462 </div>}

463 </div>}

464 

465 {}

466 {target === 'terminal' && <div className="cc-ic-card">

467 <div className="cc-ic-subtabs" role="tablist" aria-label="Install method">

468 {Object.keys(TERM).map(k => <button key={k} type="button" role="tab" aria-selected={pkg === k} className={'cc-ic-subtab' + (pkg === k ? ' cc-ic-active' : '')} onClick={() => setPkg(k)}>

469 {TERM[k].label}

470 </button>)}

471 </div>

472 {isWinInstaller && <div className="cc-ic-shell-switch" role="tablist" aria-label="Shell">

473 {[{

474 k: 'ps',

475 label: 'PowerShell'

476 }, {

477 k: 'cmd',

478 label: 'CMD'

479 }].map(({k, label}) => {

480 const active = k === 'cmd' === winCmd;

481 return <button key={k} type="button" role="tab" aria-selected={active} className={'cc-ic-shell-option' + (active ? ' cc-ic-active' : '')} onClick={() => setWinCmd(k === 'cmd')}>

482 {label}

483 </button>;

484 })}

485 </div>}

486 {cardBodyCmd(terminalCmd, isWinPrompt ? '>' : '$')}

487 </div>}

488 

489 {}

490 {target === 'terminal' && <div className="cc-ic-below">

491 {isWinInstaller && <span>

492 <a href="https://git-scm.com/downloads/win" target="_blank" rel="noopener">

493 Git for Windows

494 </a>{' '}

495 recommended. PowerShell is used if Git Bash is absent.

496 </span>}

497 {(pkg === 'brew' || pkg === 'winget') && <span>

498 Does not auto-update. Run{' '}

499 <code>{pkg === 'brew' ? 'brew upgrade claude-code' : 'winget upgrade Anthropic.ClaudeCode'}</code>{' '}

500 periodically.

501 </span>}

502 <a href="/en/troubleshoot-install">Installation troubleshooting</a>

503 </div>}

504 

505 {alt && <div className="cc-ic-handoff">

506 <div className="cc-ic-handoff-title">Claude Code for {alt.name}</div>

507 <div className="cc-ic-handoff-sub">{alt.tagline}</div>

508 <div className="cc-ic-handoff-actions">

509 <a href={alt.installHref} className="cc-ic-btn-clay" {...alt.installHref.startsWith('http') ? {

510 target: '_blank',

511 rel: 'noopener'

512 } : {}}>

513 {alt.installLabel} {iconArrowUpRight(13)}

514 </a>

515 <a href={alt.guideHref} className="cc-ic-btn-ghost">

516 {alt.name} guide {iconArrowRight(12)}

517 </a>

518 </div>

519 {alt.altCmd && <div className="cc-ic-handoff-alt">

520 or run <code>{alt.altCmd}</code>

521 <button type="button" className={'cc-ic-copy-sm' + (copied === 'alt' ? ' cc-ic-copied' : '')} onClick={() => handleCopy(alt.altCmd, 'alt')} aria-label="Copy command">

522 {copied === 'alt' ? iconCheck(11) : iconCopy(11)}

523 </button>

524 </div>}

525 </div>}

526 </div>;

527};

528 

529export const Experiment = ({flag, treatment, children}) => {

530 const VID_KEY = 'exp_vid';

531 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

532 const fnv1a = s => {

533 let h = 0x811c9dc5;

534 for (let i = 0; i < s.length; i++) {

535 h ^= s.charCodeAt(i);

536 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

537 }

538 return h >>> 0;

539 };

540 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

541 const [decision] = useState(() => {

542 const params = new URLSearchParams(location.search);

543 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

544 const force = params.get('gb-force');

545 if (force) {

546 for (const p of force.split(',')) {

547 const [k, v] = p.split(':');

548 if (k === flag) return {

549 variant: v || 'treatment',

550 track: false

551 };

552 }

553 }

554 if (navigator.globalPrivacyControl) {

555 return {

556 variant: 'control',

557 track: false

558 };

559 }

560 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

561 if (prefsMatch) {

562 try {

563 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

564 return {

565 variant: 'control',

566 track: false

567 };

568 }

569 } catch {

570 return {

571 variant: 'control',

572 track: false

573 };

574 }

575 } else {

576 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

577 if (!country || CONSENT_COUNTRIES.has(country)) {

578 return {

579 variant: 'control',

580 track: false

581 };

582 }

583 }

584 let vid;

585 try {

586 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

587 if (ajsMatch) {

588 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

589 } else {

590 vid = localStorage.getItem(VID_KEY);

591 if (!vid) {

592 vid = crypto.randomUUID();

593 }

594 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

595 }

596 try {

597 localStorage.setItem(VID_KEY, vid);

598 } catch {}

599 } catch {

600 return {

601 variant: 'control',

602 track: false

603 };

604 }

605 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

606 return {

607 variant,

608 track: true,

609 vid

610 };

611 });

612 useEffect(() => {

613 if (!decision.track) return;

614 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

615 method: 'POST',

616 headers: {

617 'Content-Type': 'application/json',

618 'x-service-name': 'claude_code_docs'

619 },

620 body: JSON.stringify({

621 events: [{

622 event_type: 'GrowthbookExperimentEvent',

623 event_data: {

624 device_id: decision.vid,

625 anonymous_id: decision.vid,

626 timestamp: new Date().toISOString(),

627 experiment_id: flag,

628 variation_id: decision.variant === 'treatment' ? 1 : 0,

629 environment: 'production'

630 }

631 }]

632 }),

633 keepalive: true

634 }).catch(() => {});

635 }, []);

636 return decision.variant === 'treatment' ? treatment : children;

637};

638 

639Claude Code는 기능을 구축하고, 버그를 수정하고, 개발 작업을 자동화하는 데 도움이 되는 AI 기반 코딩 어시스턴트입니다. 전체 코드베이스를 이해하고 여러 파일과 도구에 걸쳐 작업할 수 있습니다.

640 

641<div data-gb-slot="overview-install-configurator">

642 <Experiment flag="overview-install-configurator" treatment={<InstallConfigurator />} />

643</div>

644 

645## 시작하기

646 

647환경을 선택하여 시작하세요. 대부분의 환경에는 [Claude 구독](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=overview_pricing) 또는 [Anthropic Console](https://console.anthropic.com/) 계정이 필요합니다. Terminal CLI 및 VS Code는 [타사 제공자](/ko/third-party-integrations)도 지원합니다.

648 

649<Tabs>

650 <Tab title="Terminal">

651 터미널에서 Claude Code로 직접 작업하기 위한 모든 기능을 갖춘 CLI입니다. 파일을 편집하고, 명령을 실행하고, 명령줄에서 전체 프로젝트를 관리할 수 있습니다.

652 

653 To install Claude Code, use one of the following methods:

654 

655 <Tabs>

656 <Tab title="Native Install (Recommended)">

657 **macOS, Linux, WSL:**

658 

659 ```bash theme={null}

660 curl -fsSL https://claude.ai/install.sh | bash

661 ```

662 

663 **Windows PowerShell:**

664 

665 ```powershell theme={null}

666 irm https://claude.ai/install.ps1 | iex

667 ```

668 

669 **Windows CMD:**

670 

671 ```batch theme={null}

672 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

673 ```

674 

675 If you see `The token '&&' is not a valid statement separator`, you're in PowerShell, not CMD. If you see `'irm' is not recognized as an internal or external command`, you're in CMD, not PowerShell. Your prompt shows `PS C:\` when you're in PowerShell and `C:\` without the `PS` when you're in CMD.

676 

677 [Git for Windows](https://git-scm.com/downloads/win) is recommended on native Windows so Claude Code can use the Bash tool. If Git for Windows is not installed, Claude Code uses PowerShell as the shell tool instead. WSL setups do not need Git for Windows.

678 

679 <Info>

680 Native installations automatically update in the background to keep you on the latest version.

681 </Info>

682 </Tab>

683 

684 <Tab title="Homebrew">

685 ```bash theme={null}

686 brew install --cask claude-code

687 ```

688 

689 Homebrew offers two casks. `claude-code` tracks the stable release channel, which is typically about a week behind and skips releases with major regressions. `claude-code@latest` tracks the latest channel and receives new versions as soon as they ship.

690 

691 <Info>

692 Homebrew installations do not auto-update. Run `brew upgrade claude-code` or `brew upgrade claude-code@latest`, depending on which cask you installed, to get the latest features and security fixes.

693 </Info>

694 </Tab>

695 

696 <Tab title="WinGet">

697 ```powershell theme={null}

698 winget install Anthropic.ClaudeCode

699 ```

700 

701 <Info>

702 WinGet installations do not auto-update. Run `winget upgrade Anthropic.ClaudeCode` periodically to get the latest features and security fixes.

703 </Info>

704 </Tab>

705 </Tabs>

706 

707 You can also install with [apt, dnf, or apk](/en/setup#install-with-linux-package-managers) on Debian, Fedora, RHEL, and Alpine.

708 

709 그런 다음 모든 프로젝트에서 Claude Code를 시작합니다:

710 

711 ```bash theme={null}

712 cd your-project

713 claude

714 ```

715 

716 처음 사용할 때 로그인하라는 메시지가 표시됩니다. 이제 끝입니다! [빠른 시작으로 계속하기 →](/ko/quickstart)

717 

718 <Tip>

719 [고급 설정](/ko/setup)에서 설치 옵션, 수동 업데이트 또는 제거 지침을 참조하세요. 문제가 발생하면 [설치 문제 해결](/ko/troubleshoot-install)을 방문하세요.

720 </Tip>

721 </Tab>

722 

723 <Tab title="VS Code">

724 VS Code 확장 프로그램은 인라인 diff, @-mentions, 계획 검토 및 대화 기록을 편집기에서 직접 제공합니다.

725 

726 * [VS Code용 설치](vscode:extension/anthropic.claude-code)

727 * [Cursor용 설치](cursor:extension/anthropic.claude-code)

728 

729 또는 확장 프로그램 보기(`Mac에서 Cmd+Shift+X`, `Windows/Linux에서 Ctrl+Shift+X`)에서 "Claude Code"를 검색합니다. 설치 후 명령 팔레트(`Cmd+Shift+P` / `Ctrl+Shift+P`)를 열고 "Claude Code"를 입력한 다음 **새 탭에서 열기**를 선택합니다.

730 

731 [VS Code 시작하기 →](/ko/vs-code#get-started)

732 </Tab>

733 

734 <Tab title="Desktop app">

735 IDE 또는 터미널 외부에서 Claude Code를 실행하기 위한 독립 실행형 앱입니다. diff를 시각적으로 검토하고, 여러 세션을 나란히 실행하고, 반복되는 작업을 예약하고, 클라우드 세션을 시작할 수 있습니다.

736 

737 다운로드 및 설치:

738 

739 * [macOS](https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code\&utm_medium=docs) (Intel 및 Apple Silicon)

740 * [Windows](https://claude.ai/api/desktop/win32/x64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs) (x64)

741 * [Windows ARM64](https://claude.ai/api/desktop/win32/arm64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs)

742 

743 설치 후 Claude를 실행하고, 로그인한 다음 **Code** 탭을 클릭하여 코딩을 시작합니다. [유료 구독](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=overview_desktop_pricing)이 필요합니다.

744 

745 [데스크톱 앱에 대해 자세히 알아보기 →](/ko/desktop-quickstart)

746 </Tab>

747 

748 <Tab title="Web">

749 로컬 설정 없이 브라우저에서 Claude Code를 실행합니다. 오래 실행되는 작업을 시작하고 완료되면 다시 확인하거나, 로컬에 없는 리포지토리에서 작업하거나, 여러 작업을 병렬로 실행할 수 있습니다. 데스크톱 브라우저 및 Claude iOS 앱에서 사용할 수 있습니다.

750 

751 [claude.ai/code](https://claude.ai/code)에서 코딩을 시작합니다.

752 

753 [웹에서 시작하기 →](/ko/web-quickstart)

754 </Tab>

755 

756 <Tab title="JetBrains">

757 IntelliJ IDEA, PyCharm, WebStorm 및 기타 JetBrains IDE용 플러그인으로 대화형 diff 보기 및 선택 컨텍스트 공유 기능이 있습니다.

758 

759 JetBrains Marketplace에서 [Claude Code 플러그인](https://plugins.jetbrains.com/plugin/27310-claude-code-beta-)을 설치하고 IDE를 다시 시작합니다.

760 

761 [JetBrains 시작하기 →](/ko/jetbrains)

762 </Tab>

763</Tabs>

764 

765## 할 수 있는 것

766 

767Claude Code를 사용할 수 있는 몇 가지 방법은 다음과 같습니다:

768 

769<AccordionGroup>

770 <Accordion title="계속 미루고 있는 작업 자동화" icon="wand-magic-sparkles">

771 Claude Code는 하루를 낭비하는 지루한 작업을 처리합니다: 테스트되지 않은 코드에 대한 테스트 작성, 프로젝트 전체의 lint 오류 수정, 병합 충돌 해결, 종속성 업데이트 및 릴리스 노트 작성.

772 

773 ```bash theme={null}

774 claude "write tests for the auth module, run them, and fix any failures"

775 ```

776 </Accordion>

777 

778 <Accordion title="기능 구축 및 버그 수정" icon="hammer">

779 원하는 것을 일반 언어로 설명합니다. Claude Code는 접근 방식을 계획하고, 여러 파일에 걸쳐 코드를 작성하고, 작동하는지 확인합니다.

780 

781 버그의 경우 오류 메시지를 붙여넣거나 증상을 설명합니다. Claude Code는 코드베이스를 통해 문제를 추적하고, 근본 원인을 파악하고, 수정을 구현합니다. 더 많은 예제는 [일반적인 워크플로우](/ko/common-workflows)를 참조하세요.

782 </Accordion>

783 

784 <Accordion title="커밋 및 풀 요청 생성" icon="code-branch">

785 Claude Code는 git과 직접 작동합니다. 변경 사항을 스테이징하고, 커밋 메시지를 작성하고, 브랜치를 생성하고, 풀 요청을 엽니다.

786 

787 ```bash theme={null}

788 claude "commit my changes with a descriptive message"

789 ```

790 

791 CI에서 [GitHub Actions](/ko/github-actions) 또는 [GitLab CI/CD](/ko/gitlab-ci-cd)를 사용하여 코드 검토 및 이슈 분류를 자동화할 수 있습니다.

792 </Accordion>

793 

794 <Accordion title="MCP로 도구 연결" icon="plug">

795 [Model Context Protocol (MCP)](/ko/mcp)는 AI 도구를 외부 데이터 소스에 연결하기 위한 개방형 표준입니다. MCP를 사용하면 Claude Code는 Google Drive에서 설계 문서를 읽고, Jira에서 티켓을 업데이트하고, Slack에서 데이터를 가져오거나, 자신의 커스텀 도구를 사용할 수 있습니다.

796 </Accordion>

797 

798 <Accordion title="지침, skills 및 hooks로 사용자 정의" icon="sliders">

799 [`CLAUDE.md`](/ko/memory)는 프로젝트 루트에 추가하는 마크다운 파일로 Claude Code가 모든 세션의 시작 부분에서 읽습니다. 이를 사용하여 코딩 표준, 아키텍처 결정, 선호하는 라이브러리 및 검토 체크리스트를 설정합니다. Claude는 또한 작업할 때 [자동 메모리](/ko/memory#auto-memory)를 구축하여 빌드 명령 및 디버깅 인사이트와 같은 학습 내용을 저장하므로 아무것도 작성할 필요가 없습니다.

800 

801 [커스텀 명령](/ko/skills)을 생성하여 팀이 공유할 수 있는 반복 가능한 워크플로우를 패키징합니다(예: `/review-pr` 또는 `/deploy-staging`).

802 

803 [Hooks](/ko/hooks)를 사용하면 Claude Code 작업 전후에 셸 명령을 실행할 수 있습니다(예: 모든 파일 편집 후 자동 포맷팅 또는 커밋 전 lint 실행).

804 </Accordion>

805 

806 <Accordion title="에이전트 팀 실행 및 커스텀 에이전트 구축" icon="users">

807 작업의 다른 부분에서 동시에 작동하는 [여러 Claude Code 에이전트](/ko/sub-agents)를 생성합니다. 리드 에이전트가 작업을 조정하고, 하위 작업을 할당하고, 결과를 병합합니다.

808 

809 완전히 커스텀 워크플로우의 경우 [Agent SDK](/ko/agent-sdk/overview)를 사용하면 Claude Code의 도구 및 기능으로 구동되는 자신의 에이전트를 구축할 수 있으며, 오케스트레이션, 도구 액세스 및 권한에 대한 완전한 제어가 가능합니다.

810 </Accordion>

811 

812 <Accordion title="CLI로 파이프, 스크립트 및 자동화" icon="terminal">

813 Claude Code는 구성 가능하며 Unix 철학을 따릅니다. 로그를 파이프하고, CI에서 실행하거나, 다른 도구와 연결합니다:

814 

815 ```bash theme={null}

816 # 최근 로그 출력 분석

817 tail -200 app.log | claude -p "Slack me if you see any anomalies"

818 

819 # CI에서 번역 자동화

820 claude -p "translate new strings into French and raise a PR for review"

821 

822 # 파일 전체에 걸친 대량 작업

823 git diff main --name-only | claude -p "review these changed files for security issues"

824 ```

825 

826 전체 명령 및 플래그 세트는 [CLI 참조](/ko/cli-reference)를 참조하세요.

827 </Accordion>

828 

829 <Accordion title="반복되는 작업 예약" icon="clock">

830 Claude를 일정에 따라 실행하여 반복되는 작업을 자동화합니다: 아침 PR 검토, 야간 CI 실패 분석, 주간 종속성 감사 또는 PR 병합 후 문서 동기화.

831 

832 * [Routines](/ko/routines)는 Anthropic 관리 인프라에서 실행되므로 컴퓨터가 꺼져 있어도 계속 실행됩니다. API 호출 또는 GitHub 이벤트에서도 트리거될 수 있습니다. 웹, 데스크톱 앱에서 생성하거나 CLI에서 `/schedule`을 실행하여 생성합니다.

833 * [데스크톱 예약된 작업](/ko/desktop-scheduled-tasks)은 머신에서 실행되며 로컬 파일 및 도구에 직접 액세스할 수 있습니다

834 * [`/loop`](/ko/scheduled-tasks)는 빠른 폴링을 위해 CLI 세션 내에서 프롬프트를 반복합니다

835 </Accordion>

836 

837 <Accordion title="어디서나 작업" icon="globe">

838 세션은 단일 환경에 연결되지 않습니다. 컨텍스트가 변경되면 환경 간에 작업을 이동합니다:

839 

840 * 책상에서 떠나 [원격 제어](/ko/remote-control)를 사용하여 휴대폰이나 모든 브라우저에서 계속 작업합니다

841 * [Dispatch](/ko/desktop#sessions-from-dispatch)에 휴대폰에서 작업을 메시지로 보내고 생성되는 데스크톱 세션을 엽니다

842 * [웹](/ko/claude-code-on-the-web) 또는 [iOS 앱](https://apps.apple.com/app/claude-by-anthropic/id6473753684)에서 오래 실행되는 작업을 시작한 다음 `claude --teleport`를 사용하여 터미널로 가져옵니다

843 * 터미널 세션을 [데스크톱 앱](/ko/desktop)으로 `/desktop`을 사용하여 시각적 diff 검토를 위해 전달합니다

844 * 팀 채팅에서 작업을 라우팅합니다: [Slack](/ko/slack)에서 `@Claude`를 언급하고 버그 보고서를 포함하면 풀 요청을 다시 받습니다

845 </Accordion>

846</AccordionGroup>

847 

848## 모든 곳에서 Claude Code 사용

849 

850각 환경은 동일한 기본 Claude Code 엔진에 연결되므로 CLAUDE.md 파일, 설정 및 MCP 서버가 모든 환경에서 작동합니다.

851 

852위의 [Terminal](/ko/quickstart), [VS Code](/ko/vs-code), [JetBrains](/ko/jetbrains), [Desktop](/ko/desktop) 및 [Web](/ko/claude-code-on-the-web) 환경 외에도 Claude Code는 CI/CD, 채팅 및 브라우저 워크플로우와 통합됩니다:

853 

854| 원하는 것 | 최적의 옵션 |

855| --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |

856| 휴대폰이나 다른 기기에서 로컬 세션 계속하기 | [원격 제어](/ko/remote-control) |

857| Telegram, Discord, iMessage 또는 자신의 웹훅에서 세션으로 이벤트 푸시 | [Channels](/ko/channels) |

858| 로컬에서 작업 시작, 모바일에서 계속 | [웹](/ko/claude-code-on-the-web) 또는 [Claude iOS 앱](https://apps.apple.com/app/claude-by-anthropic/id6473753684) |

859| Claude를 반복 일정에 따라 실행 | [Routines](/ko/routines) 또는 [데스크톱 예약된 작업](/ko/desktop-scheduled-tasks) |

860| PR 검토 및 이슈 분류 자동화 | [GitHub Actions](/ko/github-actions) 또는 [GitLab CI/CD](/ko/gitlab-ci-cd) |

861| 모든 PR에서 자동 코드 검토 받기 | [GitHub Code Review](/ko/code-review) |

862| Slack의 버그 보고서를 풀 요청으로 라우팅 | [Slack](/ko/slack) |

863| 라이브 웹 애플리케이션 디버깅 | [Chrome](/ko/chrome) |

864| 자신의 워크플로우를 위한 커스텀 에이전트 구축 | [Agent SDK](/ko/agent-sdk/overview) |

865 

866## 다음 단계

867 

868Claude Code를 설치한 후 이 가이드를 통해 더 깊이 있게 알아볼 수 있습니다.

869 

870* [빠른 시작](/ko/quickstart): 코드베이스 탐색에서 수정 커밋까지 첫 번째 실제 작업을 진행합니다

871* [지침 및 메모리 저장](/ko/memory): CLAUDE.md 파일 및 자동 메모리를 사용하여 Claude에 지속적인 지침을 제공합니다

872* [일반적인 워크플로우](/ko/common-workflows) 및 [모범 사례](/ko/best-practices): Claude Code에서 최대한 활용하기 위한 패턴

873* [설정](/ko/settings): Claude Code를 워크플로우에 맞게 사용자 정의합니다

874* [문제 해결](/ko/troubleshooting): 일반적인 문제에 대한 솔루션

875* [code.claude.com](https://code.claude.com/): 데모, 가격 책정 및 제품 세부 정보

permission-modes.md +290 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 권한 모드 선택

6 

7> Claude가 파일을 편집하거나 명령을 실행하기 전에 승인을 요청하는지 여부를 제어합니다. CLI에서 Shift+Tab으로 모드를 순환하거나 VS Code, Desktop, claude.ai의 모드 선택기를 사용합니다.

8 

9Claude가 파일을 편집하거나 셸 명령을 실행하거나 네트워크 요청을 할 때, 작업을 승인하도록 일시 중지하고 요청합니다. 권한 모드는 해당 일시 중지가 얼마나 자주 발생하는지를 제어합니다. 선택한 모드는 세션의 흐름을 형성합니다. 기본 모드는 각 작업을 검토하도록 하는 반면, 더 느슨한 모드는 Claude가 더 길게 중단 없이 작업하고 완료되면 보고하도록 합니다. 민감한 작업에는 더 많은 감시를 선택하거나, 방향을 신뢰할 때는 더 적은 중단을 선택합니다.

10 

11## 사용 가능한 모드

12 

13각 모드는 편의성과 감시 사이에서 다른 절충을 합니다. 아래 표는 각 모드에서 Claude가 권한 프롬프트 없이 수행할 수 있는 작업을 보여줍니다.

14 

15| 모드 | 묻지 않고 실행되는 작업 | 최적 사용 사례 |

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

17| `default` | 읽기만 | 시작, 민감한 작업 |

18| [`acceptEdits`](#auto-approve-file-edits-with-acceptedits-mode) | 읽기, 파일 편집, 일반적인 파일 시스템 명령(`mkdir`, `touch`, `mv`, `cp` 등) | 검토 중인 코드 반복 |

19| [`plan`](#analyze-before-you-edit-with-plan-mode) | 읽기만 | 변경하기 전에 코드베이스 탐색 |

20| [`auto`](#eliminate-prompts-with-auto-mode) | 백그라운드 안전 검사를 포함한 모든 작업 | 장시간 작업, 프롬프트 피로 감소 |

21| [`dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode) | 사전 승인된 도구만 | 잠금된 CI 및 스크립트 |

22| [`bypassPermissions`](#skip-all-checks-with-bypasspermissions-mode) | 모든 작업 | 격리된 컨테이너 및 VM만 |

23 

24`bypassPermissions`를 제외한 모든 모드에서 [보호된 경로](#protected-paths)에 대한 쓰기는 절대 자동 승인되지 않으며, 리포지토리 상태와 Claude의 자체 구성을 우발적인 손상으로부터 보호합니다.

25 

26모드는 기본선을 설정합니다. `bypassPermissions`를 제외한 모든 모드에서 특정 도구를 사전 승인하거나 차단하기 위해 [권한 규칙](/ko/permissions#manage-permissions)을 위에 계층화합니다. `bypassPermissions`는 권한 계층을 완전히 건너뜁니다.

27 

28## 권한 모드 전환

29 

30세션 중, 시작 시 또는 지속적인 기본값으로 모드를 전환할 수 있습니다. 모드는 채팅에서 Claude에게 요청하는 것이 아니라 이러한 제어를 통해 설정됩니다. 아래에서 인터페이스를 선택하여 변경 방법을 확인합니다.

31 

32<Tabs>

33 <Tab title="CLI">

34 **세션 중**: `Shift+Tab`을 눌러 `default` → `acceptEdits` → `plan`을 순환합니다. 현재 모드는 상태 표시줄에 나타납니다. 모든 모드가 기본 순환에 있는 것은 아닙니다:

35 

36 * `auto`: 계정이 [자동 모드 요구 사항](#eliminate-prompts-with-auto-mode)을 충족할 때 나타나며, 자동 모드로 순환하면 수락할 때까지 또는 **아니요, 다시 묻지 마세요**를 선택하여 순환에서 자동을 제거할 때까지 옵트인 프롬프트가 표시됩니다

37 * `bypassPermissions`: `--permission-mode bypassPermissions`, `--dangerously-skip-permissions` 또는 `--allow-dangerously-skip-permissions`로 시작한 후 나타나며, `--allow-` 변형은 활성화하지 않고 순환에 모드를 추가합니다

38 * `dontAsk`: 순환에 절대 나타나지 않습니다. `--permission-mode dontAsk`로 설정합니다

39 

40 활성화된 선택적 모드는 `plan` 후에 슬롯되며, `bypassPermissions`가 먼저이고 `auto`가 마지막입니다. 둘 다 활성화된 경우, `auto`로 가는 길에 `bypassPermissions`를 순환합니다.

41 

42 **시작 시**: 플래그로 모드를 전달합니다.

43 

44 ```bash theme={null}

45 claude --permission-mode plan

46 ```

47 

48 **기본값으로**: [설정](/ko/settings#settings-files)에서 `defaultMode`를 설정합니다.

49 

50 ```json theme={null}

51 {

52 "permissions": {

53 "defaultMode": "acceptEdits"

54 }

55 }

56 ```

57 

58 동일한 `--permission-mode` 플래그는 [비대화형 실행](/ko/headless)을 위해 `-p`와 함께 작동합니다.

59 </Tab>

60 

61 <Tab title="VS Code">

62 **세션 중**: 프롬프트 상자 하단의 모드 표시기를 클릭합니다.

63 

64 **기본값으로**: VS Code 설정에서 `claudeCode.initialPermissionMode`를 설정하거나 Claude Code 확장 설정 패널을 사용합니다.

65 

66 모드 표시기는 이러한 레이블을 표시하며, 각각이 적용되는 모드에 매핑됩니다:

67 

68 | UI 레이블 | 모드 |

69 | :------- | :------------------ |

70 | 편집 전에 요청 | `default` |

71 | 자동으로 편집 | `acceptEdits` |

72 | 계획 모드 | `plan` |

73 | 자동 모드 | `auto` |

74 | 권한 무시 | `bypassPermissions` |

75 

76 자동 모드는 확장 설정에서 **위험하게 권한 건너뛰기 허용**을 활성화한 후 모드 표시기에 나타나지만, 계정이 [자동 모드 섹션](#eliminate-prompts-with-auto-mode)에 나열된 모든 요구 사항을 충족할 때까지 사용 불가능한 상태로 유지됩니다. `claudeCode.initialPermissionMode` 설정은 `auto`를 허용하지 않습니다. 기본적으로 자동 모드로 시작하려면 대신 Claude Code [`settings.json`](/ko/settings#settings-files)에서 `defaultMode`를 설정합니다.

77 

78 권한 무시도 모드 표시기에 나타나기 전에 **위험하게 권한 건너뛰기 허용** 토글이 필요합니다.

79 

80 확장 관련 세부 정보는 [VS Code 가이드](/ko/vs-code)를 참조합니다.

81 </Tab>

82 

83 <Tab title="JetBrains">

84 JetBrains 플러그인은 IDE 터미널에서 Claude Code를 실행하므로, 모드 전환은 CLI와 동일하게 작동합니다: `Shift+Tab`을 눌러 순환하거나 시작할 때 `--permission-mode`를 전달합니다.

85 </Tab>

86 

87 <Tab title="Desktop">

88 전송 버튼 옆의 모드 선택기를 사용합니다. 자동 및 권한 무시는 Desktop 설정에서 활성화한 후에만 나타납니다. [Desktop 가이드](/ko/desktop#choose-a-permission-mode)를 참조합니다.

89 </Tab>

90 

91 <Tab title="Web and mobile">

92 [claude.ai/code](https://claude.ai/code)의 프롬프트 상자 옆 모드 드롭다운 또는 모바일 앱을 사용합니다. 권한 프롬프트는 승인을 위해 claude.ai에 나타납니다. 어떤 모드가 나타나는지는 세션이 실행되는 위치에 따라 다릅니다:

93 

94 * **[Claude Code on the web](/ko/claude-code-on-the-web)의 클라우드 세션**: 편집 자동 수락 및 계획 모드. 권한 요청, 자동 및 권한 무시는 사용할 수 없습니다.

95 * **로컬 머신의 [원격 제어](/ko/remote-control) 세션**: 권한 요청, 편집 자동 수락, 계획 모드. 자동 및 권한 무시는 사용할 수 없습니다.

96 

97 원격 제어의 경우, 호스트를 시작할 때 시작 모드를 설정할 수도 있습니다:

98 

99 ```bash theme={null}

100 claude remote-control --permission-mode acceptEdits

101 ```

102 </Tab>

103</Tabs>

104 

105## acceptEdits 모드로 파일 편집 자동 승인

106 

107`acceptEdits` 모드는 Claude가 프롬프트 없이 작업 디렉토리의 파일을 생성하고 편집할 수 있게 합니다. 상태 표시줄은 이 모드가 활성화되어 있는 동안 `⏵⏵ accept edits on`을 표시합니다.

108 

109파일 편집 외에도, `acceptEdits` 모드는 일반적인 파일 시스템 Bash 명령을 자동 승인합니다: `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp`, `sed`. 이러한 명령은 `LANG=C` 또는 `NO_COLOR=1`과 같은 안전한 환경 변수로 접두사가 붙거나 `timeout`, `nice`, `nohup`과 같은 프로세스 래퍼로 접두사가 붙을 때도 자동 승인됩니다. 파일 편집과 마찬가지로, 자동 승인은 작업 디렉토리 또는 `additionalDirectories` 내의 경로에만 적용됩니다. 해당 범위 외의 경로, [보호된 경로](#protected-paths)에 대한 쓰기, 기타 모든 Bash 명령은 여전히 프롬프트합니다.

110 

111[PowerShell 도구](/ko/tools-reference#powershell-tool)가 활성화되면, `acceptEdits` 모드는 범위 내 경로에서 `Set-Content`, `Add-Content`, `Clear-Content`, `Remove-Item`을 자동 승인하며, 이들의 일반적인 별칭도 함께 자동 승인됩니다. 동일한 범위 및 보호된 경로 규칙이 적용됩니다.

112 

113변경 사항을 인라인으로 각각 승인하는 대신 편집기에서 또는 `git diff`를 통해 사후에 검토하려는 경우 `acceptEdits`를 사용합니다. 기본 모드에서 `Shift+Tab`을 한 번 눌러 입력하거나 직접 시작합니다:

114 

115```bash theme={null}

116claude --permission-mode acceptEdits

117```

118 

119## 계획 모드로 편집 전에 분석

120 

121계획 모드는 Claude에게 변경 사항을 연구하고 제안하도록 지시하지만 변경하지는 않습니다. Claude는 파일을 읽고, 셸 명령을 실행하여 탐색하고, 계획을 작성하지만 소스를 편집하지는 않습니다. 권한 프롬프트는 기본 모드와 동일하게 적용됩니다.

122 

123`Shift+Tab`을 눌러 계획 모드에 들어가거나 단일 프롬프트 앞에 `/plan`을 붙입니다. CLI에서 계획 모드로 시작할 수도 있습니다:

124 

125```bash theme={null}

126claude --permission-mode plan

127```

128 

129계획을 승인하지 않고 계획 모드를 떠나려면 `Shift+Tab`을 다시 누릅니다.

130 

131계획이 준비되면, Claude는 이를 제시하고 진행 방법을 묻습니다. 해당 프롬프트에서 다음을 수행할 수 있습니다:

132 

133* 승인하고 자동 모드로 시작

134* 승인하고 편집 수락

135* 승인하고 각 편집을 수동으로 검토

136* 피드백으로 계획 유지

137* [Ultraplan](/ko/ultraplan)으로 브라우저 기반 검토를 위해 개선

138 

139각 승인 옵션은 먼저 계획 컨텍스트를 지우도록 제안합니다.

140 

141## 자동 모드로 프롬프트 제거

142 

143<Note>

144 자동 모드는 Claude Code v2.1.83 이상이 필요합니다.

145</Note>

146 

147자동 모드는 Claude가 권한 프롬프트 없이 실행되도록 합니다. 별도의 분류기 모델이 실행 전에 작업을 검토하여, 요청을 초과하여 확대되거나, 인식되지 않은 인프라를 대상으로 하거나, Claude가 읽은 적대적 콘텐츠에 의해 주도되는 것으로 보이는 모든 것을 차단합니다.

148 

149<Warning>

150 자동 모드는 연구 미리보기입니다. 프롬프트를 줄이지만 안전을 보장하지는 않습니다. 일반적인 방향을 신뢰하는 작업에 사용하고, 민감한 작업에 대한 검토 대체로 사용하지 마세요.

151</Warning>

152 

153자동 모드는 계정이 다음의 모든 요구 사항을 충족할 때만 사용 가능합니다:

154 

155* **플랜**: Max, Team, Enterprise, 또는 API. Pro에서는 사용할 수 없습니다.

156* **관리자**: Team 및 Enterprise에서, 관리자는 사용자가 켜기 전에 [Claude Code 관리자 설정](https://claude.ai/admin-settings/claude-code)에서 이를 활성화해야 합니다. 관리자는 [관리 설정](/ko/permissions#managed-settings)에서 `permissions.disableAutoMode`를 `"disable"`로 설정하여 이를 잠금할 수도 있습니다.

157* **모델**: Team, Enterprise, API 플랜에서 Claude Sonnet 4.6, Opus 4.6, 또는 Opus 4.7. Max 플랜에서는 Claude Opus 4.7만. Haiku 및 claude-3 모델을 포함한 다른 모델은 지원되지 않습니다.

158* **제공자**: Anthropic API만. Bedrock, Vertex, Foundry에서는 사용할 수 없습니다.

159 

160Claude Code가 자동 모드를 사용할 수 없다고 보고하면, 이러한 요구 사항 중 하나가 충족되지 않은 것입니다. 이는 일시적인 중단이 아닙니다. 모델을 이름으로 지정하고 자동 모드가 작업의 안전을 "결정할 수 없다"고 말하는 별도의 메시지는 일시적인 분류기 중단입니다. [오류 참조](/ko/errors#auto-mode-cannot-determine-the-safety-of-an-action)를 참조합니다.

161 

162### 분류기가 기본적으로 차단하는 항목

163 

164분류기는 작업 디렉토리와 리포지토리의 구성된 원격을 신뢰합니다. 다른 모든 것은 [신뢰할 수 있는 인프라를 구성](/ko/auto-mode-config)할 때까지 외부로 취급됩니다.

165 

166**기본적으로 차단됨**:

167 

168* `curl | bash`와 같은 코드 다운로드 및 실행

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

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

171* 클라우드 스토리지의 대량 삭제

172* IAM 또는 리포지토리 권한 부여

173* 공유 인프라 수정

174* 세션 시작 전에 존재했던 파일을 되돌릴 수 없게 삭제

175* 강제 푸시 또는 `main`에 직접 푸시

176 

177**기본적으로 허용됨**:

178 

179* 작업 디렉토리의 로컬 파일 작업

180* 잠금 파일 또는 매니페스트에 선언된 종속성 설치

181* `.env` 읽기 및 자격 증명을 일치하는 API로 전송

182* 읽기 전용 HTTP 요청

183* 시작한 분기 또는 Claude가 생성한 분기로 푸시

184 

185샌드박스 네트워크 액세스 요청은 기본적으로 허용되는 대신 분류기를 통해 라우팅됩니다. `claude auto-mode defaults`를 실행하여 전체 규칙 목록을 확인합니다. 일상적인 작업이 차단되면, 관리자는 `autoMode.environment` 설정을 통해 신뢰할 수 있는 리포지토리, 버킷, 서비스를 추가할 수 있습니다: [자동 모드 구성](/ko/auto-mode-config)을 참조합니다.

186 

187### 대화에서 명시한 경계

188 

189분류기는 대화에서 명시한 경계를 차단 신호로 취급합니다. Claude에게 "푸시하지 마"라고 말하거나 "배포하기 전에 검토할 때까지 기다려"라고 말하면, 분류기는 기본 규칙이 허용하더라도 일치하는 작업을 차단합니다. 경계는 나중 메시지에서 해제할 때까지 유효합니다. Claude의 조건이 충족되었다는 자체 판단은 이를 해제하지 않습니다.

190 

191경계는 규칙으로 저장되지 않습니다. 분류기는 각 검사에서 기록에서 이를 다시 읽으므로, [컨텍스트 압축](/ko/costs#reduce-token-usage)이 경계를 명시한 메시지를 제거하면 경계가 손실될 수 있습니다. 하드 보장을 위해 대신 [거부 규칙](/ko/permissions#permission-rule-syntax)을 추가합니다.

192 

193### 자동 모드가 폴백할 때

194 

195각 거부된 작업은 알림을 표시하고 `/permissions` 아래의 최근 거부됨 탭에 나타나며, 여기서 `r`을 눌러 수동 승인으로 재시도할 수 있습니다.

196 

197분류기가 한 행에서 3번 또는 총 20번 작업을 차단하면, 자동 모드가 일시 중지되고 Claude Code는 프롬프트를 재개합니다. 프롬프트된 작업을 승인하면 자동 모드가 재개됩니다. 이러한 임계값은 구성할 수 없습니다. 모든 허용된 작업은 연속 카운터를 재설정하는 반면, 총 카운터는 세션 동안 유지되고 자체 제한이 폴백을 트리거할 때만 재설정됩니다.

198 

199[비대화형 모드](/ko/headless)에서 `-p` 플래그를 사용하면, 프롬프트할 사용자가 없으므로 반복된 차단이 세션을 중단합니다.

200 

201반복된 차단은 일반적으로 분류기가 인프라에 대한 컨텍스트가 부족함을 의미합니다. `/feedback`을 사용하여 거짓 긍정을 보고하거나, 관리자가 [신뢰할 수 있는 인프라를 구성](/ko/auto-mode-config)하도록 합니다.

202 

203<AccordionGroup>

204 <Accordion title="분류기가 작업을 평가하는 방식">

205 각 작업은 고정된 결정 순서를 거칩니다. 첫 번째 일치 단계가 승리합니다:

206 

207 1. [허용 또는 거부 규칙](/ko/permissions#manage-permissions)과 일치하는 작업은 즉시 해결됩니다

208 2. 읽기 전용 작업 및 작업 디렉토리의 파일 편집은 자동 승인됩니다. [보호된 경로](#protected-paths)에 대한 쓰기는 제외됩니다

209 3. 다른 모든 것은 분류기로 이동합니다

210 4. 분류기가 차단하면, Claude는 이유를 받고 대체 방법을 시도합니다

211 

212 자동 모드에 들어가면, 임의의 코드 실행을 부여하는 광범위한 허용 규칙이 삭제됩니다:

213 

214 * 무제한 `Bash(*)`

215 * `Bash(python*)`과 같은 와일드카드 인터프리터

216 * 패키지 관리자 실행 명령

217 * `Agent` 허용 규칙

218 

219 `Bash(npm test)`과 같은 좁은 규칙은 유지됩니다. 삭제된 규칙은 자동 모드를 떠날 때 복원됩니다.

220 

221 분류기는 사용자 메시지, 도구 호출, CLAUDE.md 콘텐츠를 봅니다. 도구 결과는 제거되므로, 파일이나 웹 페이지의 적대적 콘텐츠는 이를 직접 조작할 수 없습니다. 별도의 서버 측 프로브가 들어오는 도구 결과를 스캔하고 Claude가 읽기 전에 의심스러운 콘텐츠에 플래그를 지정합니다. 이러한 계층이 함께 작동하는 방식에 대한 자세한 내용은 [자동 모드 공지](https://claude.com/blog/auto-mode) 및 [엔지니어링 심층 분석](https://www.anthropic.com/engineering/claude-code-auto-mode)을 참조합니다.

222 </Accordion>

223 

224 <Accordion title="자동 모드가 서브에이전트를 처리하는 방식">

225 분류기는 [서브에이전트](/ko/sub-agents) 작업을 세 지점에서 확인합니다:

226 

227 1. 서브에이전트가 시작되기 전에, 위임된 작업 설명이 평가되므로, 위험해 보이는 작업은 생성 시점에 차단됩니다.

228 2. 서브에이전트가 실행되는 동안, 각 작업은 부모 세션과 동일한 규칙으로 분류기를 통해 이동하며, 서브에이전트의 프론트매터의 모든 `permissionMode`는 무시됩니다.

229 3. 서브에이전트가 완료되면, 분류기는 전체 작업 기록을 검토합니다. 반환 검사가 우려 사항에 플래그를 지정하면, 보안 경고가 서브에이전트의 결과에 앞에 붙습니다.

230 </Accordion>

231 

232 <Accordion title="비용 및 지연">

233 분류기는 `/model` 선택과 독립적인 서버 구성 모델에서 실행되므로, 모델을 전환해도 분류기 가용성이 변경되지 않습니다. 분류기 호출은 토큰 사용량으로 계산됩니다. 각 검사는 기록의 일부와 보류 중인 작업을 전송하여 실행 전에 왕복을 추가합니다. 읽기 및 보호된 경로 외의 작업 디렉토리 편집은 분류기를 건너뛰므로, 오버헤드는 주로 셸 명령 및 네트워크 작업에서 발생합니다.

234 </Accordion>

235</AccordionGroup>

236 

237## dontAsk 모드로 사전 승인된 도구만 허용

238 

239`dontAsk` 모드는 그렇지 않으면 프롬프트할 모든 도구 호출을 자동 거부합니다. `permissions.allow` 규칙과 일치하는 작업 및 [읽기 전용 Bash 명령](/ko/permissions#read-only-commands)만 실행할 수 있습니다. 명시적 `ask` 규칙은 프롬프트하는 대신 거부됩니다. 이는 모드를 완전히 비대화형으로 만들어 CI 파이프라인 또는 Claude가 정확히 수행할 수 있는 작업을 사전 정의하는 제한된 환경에 적합합니다.

240 

241플래그로 시작 시 설정합니다:

242 

243```bash theme={null}

244claude --permission-mode dontAsk

245```

246 

247## bypassPermissions 모드로 모든 검사 건너뛰기

248 

249`bypassPermissions` 모드는 권한 프롬프트 및 안전 검사를 비활성화하여 도구 호출이 즉시 실행되도록 합니다. v2.1.126부터 이는 [보호된 경로](#protected-paths)에 대한 쓰기를 포함하며, 이전 버전은 여전히 프롬프트를 표시합니다. 파일 시스템 루트 또는 홈 디렉터리를 대상으로 하는 제거(예: `rm -rf /` 및 `rm -rf ~`)는 모델 오류에 대한 차단기로서 여전히 프롬프트를 표시합니다. 인터넷 액세스가 없는 컨테이너, VM 또는 개발 컨테이너와 같은 격리된 환경에서만 이 모드를 사용하십시오. 여기서 Claude Code는 호스트 시스템에 손상을 줄 수 없습니다.

250 

251활성화 플래그 중 하나로 시작한 세션에서 `bypassPermissions`에 들어갈 수 없습니다. 활성화하려면 다시 시작하십시오:

252 

253```bash theme={null}

254claude --permission-mode bypassPermissions

255```

256 

257`--dangerously-skip-permissions` 플래그는 동등합니다.

258 

259<Warning>

260 `bypassPermissions`는 프롬프트 주입 또는 의도하지 않은 작업에 대한 보호를 제공하지 않습니다. 프롬프트 없이 백그라운드 안전 검사를 위해 [자동 모드](#eliminate-prompts-with-auto-mode)를 대신 사용하십시오. 관리자는 [관리 설정](/ko/permissions#managed-settings)에서 `permissions.disableBypassPermissionsMode`를 `"disable"`로 설정하여 이 모드를 차단할 수 있습니다.

261</Warning>

262 

263## 보호된 경로

264 

265경로의 작은 집합에 대한 쓰기는 `bypassPermissions`을 제외한 모든 모드에서 절대 자동 승인되지 않습니다. 이는 리포지토리 상태와 Claude의 자체 구성의 우발적인 손상을 방지합니다. `default`, `acceptEdits`, `plan`에서 이러한 쓰기는 프롬프트를 표시합니다. `auto`에서는 분류기로 라우팅됩니다. `dontAsk`에서는 거부됩니다. `bypassPermissions`에서는 허용됩니다.

266 

267보호된 디렉토리:

268 

269* `.git`

270* `.vscode`

271* `.idea`

272* `.husky`

273* `.claude`, `.claude/commands`, `.claude/agents`, `.claude/skills`, `.claude/worktrees` 제외. Claude는 이러한 위치에서 정기적으로 콘텐츠를 생성합니다

274 

275보호된 파일:

276 

277* `.gitconfig`, `.gitmodules`

278* `.bashrc`, `.bash_profile`, `.zshrc`, `.zprofile`, `.profile`

279* `.ripgreprc`

280* `.mcp.json`, `.claude.json`

281 

282## 참고 항목

283 

284* [권한](/ko/permissions): 허용, 요청, 거부 규칙. 관리 정책

285* [자동 모드 구성](/ko/auto-mode-config): 분류기에 조직이 신뢰하는 인프라를 알립니다

286* [Hooks](/ko/hooks): `PreToolUse` 및 `PermissionRequest` 훅을 통한 사용자 정의 권한 논리

287* [Ultraplan](/ko/ultraplan): 브라우저 기반 검토를 통해 Claude Code on the web 세션에서 계획 모드 실행

288* [보안](/ko/security): 보안 조치 및 모범 사례

289* [샌드박싱](/ko/sandboxing): Bash 명령에 대한 파일 시스템 및 네트워크 격리

290* [비대화형 모드](/ko/headless): `-p` 플래그로 Claude Code 실행

permissions.md +357 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 권한 구성

6 

7> 세분화된 권한 규칙, 모드 및 관리형 정책을 통해 Claude Code가 액세스하고 수행할 수 있는 작업을 제어합니다.

8 

9Claude Code는 에이전트가 수행할 수 있는 작업과 수행할 수 없는 작업을 정확하게 지정할 수 있도록 세분화된 권한을 지원합니다. 권한 설정은 버전 제어에 체크인할 수 있으며 조직의 모든 개발자에게 배포할 수 있을 뿐만 아니라 개별 개발자가 사용자 정의할 수 있습니다.

10 

11## 권한 시스템

12 

13Claude Code는 강력함과 안전성의 균형을 맞추기 위해 계층화된 권한 시스템을 사용합니다:

14 

15| 도구 유형 | 예시 | 승인 필요 | "예, 다시 묻지 않기" 동작 |

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

17| 읽기 전용 | 파일 읽기, Grep | 아니오 | 해당 없음 |

18| Bash 명령 | 셸 실행 | 예 | 프로젝트 디렉토리 및 명령당 영구적 |

19| 파일 수정 | Edit/Write 파일 | 예 | 세션 종료까지 |

20 

21## 권한 관리

22 

23`/permissions`를 사용하여 Claude Code의 도구 권한을 보고 관리할 수 있습니다. 이 UI는 모든 권한 규칙과 이들이 출처한 settings.json 파일을 나열합니다.

24 

25* **Allow** 규칙을 사용하면 Claude Code가 수동 승인 없이 지정된 도구를 사용할 수 있습니다.

26* **Ask** 규칙은 Claude Code가 지정된 도구를 사용하려고 할 때마다 확인을 요청합니다.

27* **Deny** 규칙은 Claude Code가 지정된 도구를 사용하지 못하도록 방지합니다.

28 

29규칙은 순서대로 평가됩니다: **deny -> ask -> allow**. 첫 번째 일치하는 규칙이 우선이므로 deny 규칙이 항상 우선합니다.

30 

31## 권한 모드

32 

33Claude Code는 도구 승인 방식을 제어하는 여러 권한 모드를 지원합니다. [권한 모드](/ko/permission-modes)에서 각 모드를 사용할 시기를 확인합니다. [설정 파일](/ko/settings#settings-files)에서 `defaultMode`를 설정합니다:

34 

35| 모드 | 설명 |

36| :------------------ | :------------------------------------------------------------------------------------------------------------ |

37| `default` | 표준 동작: 각 도구를 처음 사용할 때 권한을 요청합니다 |

38| `acceptEdits` | 작업 디렉토리 또는 `additionalDirectories`의 경로에 대해 파일 편집 및 일반적인 파일 시스템 명령(`mkdir`, `touch`, `mv`, `cp` 등)을 자동으로 수락합니다 |

39| `plan` | Plan Mode: Claude는 파일을 분석할 수 있지만 수정하거나 명령을 실행할 수 없습니다 |

40| `auto` | 배경 안전 검사를 통해 도구 호출을 자동으로 승인하여 작업이 요청과 일치하는지 확인합니다. 현재 연구 미리보기입니다 |

41| `dontAsk` | `/permissions` 또는 `permissions.allow` 규칙을 통해 사전 승인되지 않은 한 도구를 자동으로 거부합니다 |

42| `bypassPermissions` | 모든 권한 프롬프트를 건너뜁니다. 파일 시스템 루트 또는 홈 디렉토리 제거(예: `rm -rf /` 및 `rm -rf ~`)는 모델 오류에 대한 회로 차단기로 여전히 프롬프트합니다 |

43 

44<Warning>

45 `bypassPermissions` 모드는 `.git`, `.claude`, `.vscode`, `.idea` 및 `.husky`에 대한 쓰기를 포함한 모든 권한 프롬프트를 건너뜁니다. 파일 시스템 루트 또는 홈 디렉토리를 대상으로 하는 제거(예: `rm -rf /` 및 `rm -rf ~`)는 모델 오류에 대한 회로 차단기로 여전히 프롬프트합니다. 이 모드는 Claude Code가 손상을 일으킬 수 없는 컨테이너 또는 VM과 같은 격리된 환경에서만 사용합니다. 관리자는 [관리형 설정](#managed-settings)에서 `permissions.disableBypassPermissionsMode`를 `"disable"`로 설정하여 이 모드를 방지할 수 있습니다.

46</Warning>

47 

48`bypassPermissions` 또는 `auto` 모드가 사용되는 것을 방지하려면 [설정 파일](/ko/settings#settings-files)에서 `permissions.disableBypassPermissionsMode` 또는 `permissions.disableAutoMode`를 `"disable"`로 설정합니다. 이들은 재정의될 수 없는 [관리형 설정](#managed-settings)에서 가장 유용합니다.

49 

50## 권한 규칙 구문

51 

52권한 규칙은 `Tool` 또는 `Tool(specifier)` 형식을 따릅니다.

53 

54### 도구의 모든 사용 일치

55 

56도구의 모든 사용을 일치시키려면 괄호 없이 도구 이름만 사용합니다:

57 

58| 규칙 | 효과 |

59| :--------- | :------------------ |

60| `Bash` | 모든 Bash 명령과 일치합니다 |

61| `WebFetch` | 모든 웹 가져오기 요청과 일치합니다 |

62| `Read` | 모든 파일 읽기와 일치합니다 |

63 

64`Bash(*)`는 `Bash`와 동등하며 모든 Bash 명령과 일치합니다.

65 

66### 세분화된 제어를 위해 지정자 사용

67 

68괄호 안에 지정자를 추가하여 특정 도구 사용과 일치시킵니다:

69 

70| 규칙 | 효과 |

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

72| `Bash(npm run build)` | 정확한 명령 `npm run build`와 일치합니다 |

73| `Read(./.env)` | 현재 디렉토리의 `.env` 파일 읽기와 일치합니다 |

74| `WebFetch(domain:example.com)` | example.com으로의 가져오기 요청과 일치합니다 |

75 

76### 와일드카드 패턴

77 

78Bash 규칙은 `*`를 사용한 glob 패턴을 지원합니다. 와일드카드는 명령의 어느 위치에나 나타날 수 있습니다. 이 구성은 npm 및 git commit 명령을 허용하면서 git push를 차단합니다:

79 

80```json theme={null}

81{

82 "permissions": {

83 "allow": [

84 "Bash(npm run *)",

85 "Bash(git commit *)",

86 "Bash(git * main)",

87 "Bash(* --version)",

88 "Bash(* --help *)"

89 ],

90 "deny": [

91 "Bash(git push *)"

92 ]

93 }

94}

95```

96 

97`*` 앞의 공백이 중요합니다: `Bash(ls *)`는 `ls -la`와 일치하지만 `lsof`와는 일치하지 않으며, `Bash(ls*)`는 둘 다 일치합니다. `:*` 접미사는 뒤에 오는 와일드카드를 작성하는 동등한 방법이므로 `Bash(ls:*)`는 `Bash(ls *)`와 동일한 명령과 일치합니다.

98 

99권한 대화 상자는 명령 접두사에 대해 "예, 다시 묻지 않기"를 선택할 때 공백으로 구분된 형식을 작성합니다. `:*` 형식은 패턴의 끝에서만 인식됩니다. `Bash(git:* push)`와 같은 패턴에서 콜론은 리터럴 문자로 취급되며 git 명령과 일치하지 않습니다.

100 

101## 도구별 권한 규칙

102 

103### Bash

104 

105Bash 권한 규칙은 `*`를 사용한 와일드카드 일치를 지원합니다. 와일드카드는 명령의 시작, 중간 또는 끝을 포함하여 어느 위치에나 나타날 수 있습니다:

106 

107* `Bash(npm run build)`는 정확한 Bash 명령 `npm run build`와 일치합니다

108* `Bash(npm run test *)`는 `npm run test`로 시작하는 Bash 명령과 일치합니다

109* `Bash(npm *)`는 `npm `로 시작하는 모든 명령과 일치합니다

110* `Bash(* install)`은 ` install`로 끝나는 모든 명령과 일치합니다

111* `Bash(git * main)`은 `git checkout main` 및 `git log --oneline main`과 같은 명령과 일치합니다

112 

113단일 `*`는 공백을 포함한 모든 문자 시퀀스와 일치하므로 하나의 와일드카드가 여러 인수에 걸칠 수 있습니다. `Bash(git *)`는 `git log --oneline --all`과 일치하며, `Bash(git * main)`은 `git push origin main` 및 `git merge main`과 일치합니다.

114 

115`*`가 앞에 공백이 있는 끝에 나타날 때(예: `Bash(ls *)`), 단어 경계를 적용하여 접두사 뒤에 공백이나 문자열 끝이 필요합니다. 예를 들어, `Bash(ls *)`는 `ls -la`와 일치하지만 `lsof`와는 일치하지 않습니다. 반대로, 공백이 없는 `Bash(ls*)`는 단어 경계 제약이 없으므로 `ls -la`와 `lsof` 모두와 일치합니다.

116 

117#### 복합 명령

118 

119<Tip>

120 Claude Code는 셸 연산자를 인식하므로 `Bash(safe-cmd *)`와 같은 규칙은 `safe-cmd && other-cmd` 명령을 실행할 권한을 부여하지 않습니다. 인식되는 명령 구분자는 `&&`, `||`, `;`, `|`, `|&`, `&` 및 줄바꿈입니다. 규칙은 각 서브명령과 독립적으로 일치해야 합니다.

121</Tip>

122 

123"예, 다시 묻지 않기"로 복합 명령을 승인하면 Claude Code는 전체 복합 문자열에 대한 단일 규칙이 아니라 승인이 필요한 각 서브명령에 대해 별도의 규칙을 저장합니다. 예를 들어, `git status && npm test`를 승인하면 `npm test`에 대한 규칙을 저장하므로 향후 `npm test` 호출은 `&&` 앞에 무엇이 있든 인식됩니다. `cd`를 서브디렉토리로 이동하는 것과 같은 서브명령은 해당 경로에 대한 자체 Read 규칙을 생성합니다. 단일 복합 명령에 대해 최대 5개의 규칙이 저장될 수 있습니다.

124 

125#### 프로세스 래퍼

126 

127Bash 규칙을 일치시키기 전에 Claude Code는 고정된 프로세스 래퍼 집합을 제거하므로 `Bash(npm test *)`와 같은 규칙은 `timeout 30 npm test`도 일치합니다. 인식되는 래퍼는 `timeout`, `time`, `nice`, `nohup` 및 `stdbuf`입니다.

128 

129베어 `xargs`도 제거되므로 `Bash(grep *)`는 `xargs grep pattern`과 일치합니다. 제거는 `xargs`에 플래그가 없을 때만 적용됩니다: `xargs -n1 grep pattern`과 같은 호출은 `xargs` 명령으로 일치되므로 내부 명령에 대해 작성된 규칙은 이를 포함하지 않습니다.

130 

131이 래퍼 목록은 기본 제공되며 구성할 수 없습니다. `direnv exec`, `devbox run`, `mise exec`, `npx` 및 `docker exec`과 같은 개발 환경 러너는 목록에 없습니다. 이러한 도구는 인수를 명령으로 실행하므로 `Bash(devbox run *)`와 같은 규칙은 `devbox run rm -rf .`를 포함하여 `run` 뒤에 오는 모든 것과 일치합니다. 환경 러너 내에서 작업을 승인하려면 `Bash(devbox run npm test)`와 같이 러너와 내부 명령을 모두 포함하는 특정 규칙을 작성합니다. 허용하려는 각 내부 명령에 대해 하나의 규칙을 추가합니다.

132 

133`watch`, `setsid`, `ionice` 및 `flock`과 같은 Exec 래퍼는 항상 프롬프트하며 `Bash(watch *)`와 같은 접두사 규칙으로 자동 승인될 수 없습니다. 동일한 사항이 `-exec` 또는 `-delete`를 사용하는 `find`에 적용됩니다: `Bash(find *)` 규칙은 이러한 형식을 포함하지 않습니다. 특정 호출을 승인하려면 전체 명령 문자열에 대한 정확한 일치 규칙을 작성합니다.

134 

135#### 읽기 전용 명령

136 

137Claude Code는 기본 제공 Bash 명령 집합을 읽기 전용으로 인식하고 모든 모드에서 권한 프롬프트 없이 실행합니다. 여기에는 `ls`, `cat`, `head`, `tail`, `grep`, `find`, `wc`, `diff`, `stat`, `du`, `cd` 및 `git`의 읽기 전용 형식이 포함됩니다. 집합은 구성할 수 없습니다. 이러한 명령 중 하나에 대해 프롬프트를 요구하려면 `ask` 또는 `deny` 규칙을 추가합니다.

138 

139따옴표 없는 glob 패턴은 모든 플래그가 읽기 전용인 명령에 대해 허용되므로 `ls *.ts` 및 `wc -l src/*.py`는 프롬프트 없이 실행됩니다. `find`, `sort`, `sed` 및 `git`과 같이 쓰기 가능하거나 실행 가능한 플래그가 있는 명령은 glob이 `-delete`와 같은 플래그로 확장될 수 있으므로 따옴표 없는 glob이 있을 때 여전히 프롬프트합니다.

140 

141작업 디렉토리 또는 [추가 디렉토리](#working-directories) 내의 경로로의 `cd`도 읽기 전용입니다. `cd packages/api && ls`와 같은 복합 명령은 각 부분이 자체적으로 적격일 때 프롬프트 없이 실행됩니다. 하나의 복합 명령에서 `cd`와 `git`을 결합하면 대상 디렉토리와 관계없이 항상 프롬프트합니다.

142 

143<Warning>

144 명령 인수를 제약하려고 시도하는 Bash 권한 패턴은 취약합니다. 예를 들어, `Bash(curl http://github.com/ *)`는 curl을 GitHub URL로 제한하려고 하지만 다음과 같은 변형과는 일치하지 않습니다:

145 

146 * URL 앞의 옵션: `curl -X GET http://github.com/...`

147 * 다른 프로토콜: `curl https://github.com/...`

148 * 리다이렉트: `curl -L http://bit.ly/xyz` (github로 리다이렉트)

149 * 변수: `URL=http://github.com && curl $URL`

150 * 추가 공백: `curl http://github.com`

151 

152 더 안정적인 URL 필터링을 위해 다음을 고려합니다:

153 

154 * **Bash 네트워크 도구 제한**: deny 규칙을 사용하여 `curl`, `wget` 및 유사한 명령을 차단한 다음 허용된 도메인에 대해 `WebFetch(domain:github.com)` 권한으로 WebFetch 도구를 사용합니다

155 * **PreToolUse 훅 사용**: Bash 명령의 URL을 검증하고 허용되지 않은 도메인을 차단하는 훅을 구현합니다

156 * CLAUDE.md를 통해 Claude Code에 허용된 curl 패턴에 대해 지시합니다

157 

158 WebFetch만 사용하는 것은 네트워크 액세스를 방지하지 않습니다. Bash가 허용되면 Claude는 여전히 `curl`, `wget` 또는 다른 도구를 사용하여 모든 URL에 도달할 수 있습니다.

159</Warning>

160 

161### PowerShell

162 

163PowerShell 권한 규칙은 Bash 규칙과 동일한 형태를 사용합니다. `*`를 사용한 와일드카드는 어느 위치에나 일치하고, `:*` 접미사는 후행 ` *`와 동등하며, 베어 `PowerShell` 또는 `PowerShell(*)`는 모든 명령과 일치합니다. 이 구성은 `Get-ChildItem` 및 `git commit` 명령을 허용하면서 `Remove-Item`을 차단합니다:

164 

165```json theme={null}

166{

167 "permissions": {

168 "allow": [

169 "PowerShell(Get-ChildItem *)",

170 "PowerShell(git commit *)"

171 ],

172 "deny": [

173 "PowerShell(Remove-Item *)"

174 ]

175 }

176}

177```

178 

179일반적인 별칭은 일치하기 전에 정규화됩니다. cmdlet 이름에 대해 작성된 규칙은 해당 별칭과도 일치하므로 `PowerShell(Get-ChildItem *)`는 `gci`, `ls` 및 `dir`과도 일치합니다. 일치는 대소문자를 구분하지 않습니다.

180 

181Claude Code는 PowerShell AST를 구문 분석하고 복합 명령의 각 명령을 독립적으로 확인합니다. 파이프라인 연산자 `|`, 문 구분자 `;` 및 PowerShell 7+ 이상의 체인 연산자 `&&` 및 `||`는 복합 명령을 서브명령으로 분할합니다. 복합 명령이 허용되려면 규칙이 모든 서브명령과 일치해야 합니다.

182 

183### Read 및 Edit

184 

185`Edit` 규칙은 파일을 편집하는 모든 기본 제공 도구에 적용됩니다. Claude는 Grep 및 Glob과 같이 파일을 읽는 모든 기본 제공 도구에 `Read` 규칙을 적용하기 위해 최선을 다합니다.

186 

187<Warning>

188 Read 및 Edit deny 규칙은 Claude의 기본 제공 파일 도구에 적용되며, Bash 서브프로세스에는 적용되지 않습니다. `Read(./.env)` deny 규칙은 Read 도구를 차단하지만 Bash에서 `cat .env`를 방지하지 않습니다. 경로에 대한 모든 프로세스의 액세스를 차단하는 OS 수준 적용을 위해 [샌드박싱을 활성화합니다](/ko/sandboxing).

189</Warning>

190 

191Read 및 Edit 규칙은 모두 [gitignore](https://git-scm.com/docs/gitignore) 사양을 따르며 4가지 고유한 패턴 유형이 있습니다:

192 

193| 패턴 | 의미 | 예시 | 일치 |

194| ------------------ | -------------------- | -------------------------------- | ------------------------------ |

195| `//path` | 파일 시스템 루트의 **절대** 경로 | `Read(//Users/alice/secrets/**)` | `/Users/alice/secrets/**` |

196| `~/path` | **홈** 디렉토리의 경로 | `Read(~/Documents/*.pdf)` | `/Users/alice/Documents/*.pdf` |

197| `/path` | 프로젝트 루트에 **상대적인** 경로 | `Edit(/src/**/*.ts)` | `<project root>/src/**/*.ts` |

198| `path` 또는 `./path` | 현재 디렉토리에 **상대적인** 경로 | `Read(*.env)` | `<cwd>/*.env` |

199 

200<Warning>

201 `/Users/alice/file`과 같은 패턴은 절대 경로가 아닙니다. 프로젝트 루트에 상대적입니다. 절대 경로의 경우 `//Users/alice/file`을 사용합니다.

202</Warning>

203 

204Windows에서 경로는 일치하기 전에 POSIX 형식으로 정규화됩니다. `C:\Users\alice`는 `/c/Users/alice`가 되므로 `//c/**/.env`를 사용하여 해당 드라이브의 어디든 `.env` 파일과 일치시킵니다. 모든 드라이브에서 일치시키려면 `//**/.env`를 사용합니다.

205 

206예시:

207 

208* `Edit(/docs/**)`: `<project>/docs/`의 편집 (NOT `/docs/` and NOT `<project>/.claude/docs/`)

209* `Read(~/.zshrc)`: 홈 디렉토리의 `.zshrc` 읽기

210* `Edit(//tmp/scratch.txt)`: 절대 경로 `/tmp/scratch.txt` 편집

211* `Read(src/**)`: `<current-directory>/src/`에서 읽기

212 

213<Note>

214 gitignore 패턴에서 `*`는 단일 디렉토리의 파일과 일치하고 `**`는 디렉토리 전체에서 재귀적으로 일치합니다. 모든 파일 액세스를 허용하려면 괄호 없이 도구 이름만 사용합니다: `Read`, `Edit` 또는 `Write`.

215</Note>

216 

217Claude가 심볼릭 링크에 액세스할 때 권한 규칙은 두 경로를 확인합니다: 심볼릭 링크 자체와 이것이 해결되는 파일입니다. Allow 및 deny 규칙은 해당 쌍을 다르게 취급합니다: allow 규칙은 프롬프트로 폴백하고 deny 규칙은 즉시 차단합니다.

218 

219* **Allow 규칙**: 심볼릭 링크 경로와 해당 대상이 모두 일치할 때만 적용됩니다. 허용된 디렉토리 내의 심볼릭 링크가 외부를 가리키면 여전히 프롬프트합니다.

220* **Deny 규칙**: 심볼릭 링크 경로 또는 대상이 일치할 때 적용됩니다. 거부된 파일을 가리키는 심볼릭 링크는 자체적으로 거부됩니다.

221 

222예를 들어, `Read(./project/**)` allowed 및 `Read(~/.ssh/**)` denied를 사용하면 `./project/key`의 심볼릭 링크가 `~/.ssh/id_rsa`를 가리킬 때 차단됩니다: 대상이 allow 규칙에 실패하고 deny 규칙과 일치합니다.

223 

224### WebFetch

225 

226* `WebFetch(domain:example.com)`은 example.com으로의 가져오기 요청과 일치합니다

227 

228### MCP

229 

230* `mcp__puppeteer`는 `puppeteer` 서버(Claude Code에서 구성된 이름)에서 제공하는 모든 도구와 일치합니다

231* `mcp__puppeteer__*` 와일드카드 구문은 `puppeteer` 서버의 모든 도구와도 일치합니다

232* `mcp__puppeteer__puppeteer_navigate`는 `puppeteer` 서버에서 제공하는 `puppeteer_navigate` 도구와 일치합니다

233 

234### Agent (subagents)

235 

236`Agent(AgentName)` 규칙을 사용하여 Claude가 사용할 수 있는 [subagents](/ko/sub-agents)를 제어합니다:

237 

238* `Agent(Explore)`는 Explore subagent와 일치합니다

239* `Agent(Plan)`은 Plan subagent와 일치합니다

240* `Agent(my-custom-agent)`는 `my-custom-agent`라는 사용자 정의 subagent와 일치합니다

241 

242이러한 규칙을 설정의 `deny` 배열에 추가하거나 `--disallowedTools` CLI 플래그를 사용하여 특정 에이전트를 비활성화합니다. Explore 에이전트를 비활성화하려면:

243 

244```json theme={null}

245{

246 "permissions": {

247 "deny": ["Agent(Explore)"]

248 }

249}

250```

251 

252## 훅으로 권한 확장

253 

254[Claude Code 훅](/ko/hooks-guide)은 런타임에 권한 평가를 수행하기 위해 사용자 정의 셸 명령을 등록하는 방법을 제공합니다. Claude Code가 도구 호출을 할 때, PreToolUse 훅은 권한 프롬프트 전에 실행됩니다. 훅 출력은 도구 호출을 거부하거나, 프롬프트를 강제하거나, 프롬프트를 건너뛰어 호출을 진행하도록 할 수 있습니다.

255 

256훅 결정은 권한 규칙을 우회하지 않습니다. Deny 및 ask 규칙은 훅이 `"allow"` 또는 `"ask"`를 반환한 후에도 여전히 평가되므로 일치하는 deny 규칙은 호출을 차단하고 일치하는 ask 규칙은 훅이 `"allow"` 또는 `"ask"`를 반환했을 때도 여전히 프롬프트합니다. 이는 [권한 관리](#manage-permissions)에서 설명한 deny 우선 우선순위를 유지하며, 관리형 설정에서 설정한 deny 규칙을 포함합니다.

257 

258차단 훅은 또한 allow 규칙보다 우선합니다. 종료 코드 2로 종료되는 훅은 권한 규칙이 평가되기 전에 도구 호출을 중지하므로 allow 규칙이 호출을 허용할 수 있는 경우에도 차단이 적용됩니다. 모든 Bash 명령을 프롬프트 없이 실행하되 차단하려는 몇 가지를 제외하려면 allow 목록에 `"Bash"`를 추가하고 해당 특정 명령을 거부하는 PreToolUse 훅을 등록합니다. 적응할 수 있는 훅 스크립트는 [보호된 파일에 대한 편집 차단](/ko/hooks-guide#block-edits-to-protected-files)을 참조합니다.

259 

260## 작업 디렉토리

261 

262기본적으로 Claude는 시작된 디렉토리의 파일에 액세스할 수 있습니다. 이 액세스를 확장할 수 있습니다:

263 

264* **시작 중**: `--add-dir <path>` CLI 인수 사용

265* **세션 중**: `/add-dir` 명령 사용

266* **영구 구성**: [설정 파일](/ko/settings#settings-files)의 `additionalDirectories`에 추가

267 

268추가 디렉토리의 파일은 원래 작업 디렉토리와 동일한 권한 규칙을 따릅니다: 프롬프트 없이 읽을 수 있게 되며, 파일 편집 권한은 현재 권한 모드를 따릅니다.

269 

270### 추가 디렉토리는 파일 액세스를 부여하며, 구성은 아닙니다

271 

272디렉토리를 추가하면 Claude가 파일을 읽고 편집할 수 있는 위치가 확장됩니다. 해당 디렉토리를 전체 구성 루트로 만들지는 않습니다: 대부분의 `.claude/` 구성은 추가 디렉토리에서 발견되지 않지만 몇 가지 유형은 예외로 로드됩니다.

273 

274다음 구성 유형은 `--add-dir` 디렉토리에서 로드됩니다:

275 

276| 구성 | `--add-dir`에서 로드됨 |

277| :--------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------- |

278| `.claude/skills/`의 [Skills](/ko/skills) | 예, 라이브 리로드 포함 |

279| `.claude/settings.json`의 플러그인 설정 | `enabledPlugins` 및 `extraKnownMarketplaces`만 |

280| [CLAUDE.md](/ko/memory) 파일, `.claude/rules/` 및 `CLAUDE.local.md` | `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1`이 설정된 경우에만. `CLAUDE.local.md`는 추가로 `local` 설정 소스가 필요하며, 이는 기본적으로 활성화됩니다 |

281 

282서브에이전트, 명령, 출력 스타일, 훅 및 기타 설정을 포함한 다른 모든 것은 현재 작업 디렉토리 및 해당 부모, `~/.claude/`의 사용자 디렉토리 및 관리형 설정에서만 발견됩니다. 프로젝트 전체에서 해당 구성을 공유하려면 다음 방법 중 하나를 사용합니다:

283 

284* **사용자 수준 구성**: `~/.claude/agents/`, `~/.claude/output-styles/` 또는 `~/.claude/settings.json`에 파일을 배치하여 모든 프로젝트에서 사용 가능하게 합니다

285* **플러그인**: 팀이 설치할 수 있는 [플러그인](/ko/plugins)으로 구성을 패키징하고 배포합니다

286* **구성 디렉토리에서 시작**: 원하는 `.claude/` 구성이 포함된 디렉토리에서 Claude Code를 실행합니다

287 

288## 권한이 샌드박싱과 상호 작용하는 방식

289 

290권한과 [샌드박싱](/ko/sandboxing)은 상호 보완적인 보안 계층입니다:

291 

292* **권한**은 Claude Code가 사용할 수 있는 도구와 액세스할 수 있는 파일 또는 도메인을 제어합니다. 모든 도구(Bash, Read, Edit, WebFetch, MCP 등)에 적용됩니다.

293* **샌드박싱**은 Bash 도구의 파일 시스템 및 네트워크 액세스를 제한하는 OS 수준 적용을 제공합니다. Bash 명령 및 해당 자식 프로세스에만 적용됩니다.

294 

295심층 방어를 위해 둘 다 사용합니다:

296 

297* 권한 deny 규칙은 Claude가 제한된 리소스에 액세스하려고 시도하는 것을 차단합니다

298* 샌드박스 제한은 프롬프트 주입이 Claude의 의사 결정을 우회하더라도 Bash 명령이 정의된 경계 외부의 리소스에 도달하는 것을 방지합니다

299* 샌드박스의 파일 시스템 제한은 Read 및 Edit deny 규칙을 사용하며, 별도의 샌드박스 구성은 사용하지 않습니다

300* 네트워크 제한은 WebFetch 권한 규칙과 샌드박스의 `allowedDomains` 및 `deniedDomains` 목록을 결합합니다

301 

302샌드박싱이 `autoAllowBashIfSandboxed: true`로 활성화되면(기본값), 권한에 `ask: Bash(*)`가 포함되어 있어도 샌드박스된 Bash 명령은 프롬프트 없이 실행됩니다. 샌드박스 경계는 명령별 프롬프트를 대체합니다. 명시적 deny 규칙은 여전히 적용되며, `/`, 홈 디렉터리 또는 기타 중요한 시스템 경로를 대상으로 하는 `rm` 또는 `rmdir` 명령은 여전히 프롬프트를 트리거합니다. [샌드박스 모드](/ko/sandboxing#sandbox-modes)를 참조하여 이 동작을 변경합니다.

303 

304## 관리형 설정

305 

306Claude Code 구성에 대한 중앙 집중식 제어가 필요한 조직의 경우, 관리자는 사용자 또는 프로젝트 설정으로 재정의할 수 없는 관리형 설정을 배포할 수 있습니다. 이러한 정책 설정은 일반 설정 파일과 동일한 형식을 따르며 MDM/OS 수준 정책, 관리형 설정 파일 또는 [서버 관리형 설정](/ko/server-managed-settings)을 통해 전달될 수 있습니다. 전달 메커니즘 및 파일 위치는 [설정 파일](/ko/settings#settings-files)을 참조합니다.

307 

308### 관리형 전용 설정

309 

310다음 설정은 관리형 설정에서만 읽혀집니다. 사용자 또는 프로젝트 설정 파일에 배치하면 효과가 없습니다.

311 

312| 설정 | 설명 |

313| :--------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

314| `allowedChannelPlugins` | 메시지를 푸시할 수 있는 채널 플러그인의 허용 목록입니다. `channelsEnabled: true`가 필요할 때 기본 Anthropic 허용 목록을 대체합니다. [채널 플러그인이 실행될 수 있는 것을 제한합니다](/ko/channels#restrict-which-channel-plugins-can-run) 참조 |

315| `allowManagedHooksOnly` | `true`일 때, 관리형 훅, SDK 훅 및 관리형 설정 `enabledPlugins`에서 강제 활성화된 플러그인의 훅만 로드됩니다. 사용자, 프로젝트 및 다른 모든 플러그인 훅은 차단됩니다 |

316| `allowManagedMcpServersOnly` | `true`일 때, 관리형 설정의 `allowedMcpServers`만 존중됩니다. `deniedMcpServers`는 여전히 모든 소스에서 병합됩니다. [관리형 MCP 구성](/ko/mcp#managed-mcp-configuration) 참조 |

317| `allowManagedPermissionRulesOnly` | `true`일 때, 사용자 및 프로젝트 설정이 `allow`, `ask` 또는 `deny` 권한 규칙을 정의하는 것을 방지합니다. 관리형 설정의 규칙만 적용됩니다 |

318| `blockedMarketplaces` | 마켓플레이스 소스의 차단 목록입니다. 차단된 소스는 다운로드 전에 확인되므로 파일 시스템에 닿지 않습니다. [관리형 마켓플레이스 제한](/ko/plugin-marketplaces#managed-marketplace-restrictions) 참조 |

319| `channelsEnabled` | Team 및 Enterprise 사용자를 위한 [채널](/ko/channels)을 허용합니다. 설정되지 않거나 `false`이면 사용자가 `--channels`에 전달하는 것과 관계없이 채널 메시지 전달을 차단합니다 |

320| `forceRemoteSettingsRefresh` | `true`일 때, 원격 관리형 설정이 새로 가져올 때까지 CLI 시작을 차단하고 가져오기에 실패하면 종료합니다. [실패 폐쇄 적용](/ko/server-managed-settings#enforce-fail-closed-startup) 참조 |

321| `pluginTrustMessage` | 설치 전에 표시되는 플러그인 신뢰 경고에 추가되는 사용자 정의 메시지 |

322| `sandbox.filesystem.allowManagedReadPathsOnly` | `true`일 때, 관리형 설정의 `filesystem.allowRead` 경로만 존중됩니다. `denyRead`는 여전히 모든 소스에서 병합됩니다 |

323| `sandbox.network.allowManagedDomainsOnly` | `true`일 때, 관리형 설정의 `allowedDomains` 및 `WebFetch(domain:...)` allow 규칙만 존중됩니다. 허용되지 않은 도메인은 사용자에게 프롬프트하지 않고 자동으로 차단됩니다. 거부된 도메인은 여전히 모든 소스에서 병합됩니다 |

324| `strictKnownMarketplaces` | 사용자가 추가할 수 있는 플러그인 마켓플레이스를 제어합니다. [관리형 마켓플레이스 제한](/ko/plugin-marketplaces#managed-marketplace-restrictions) 참조 |

325| `wslInheritsWindowsSettings` | Windows HKLM 레지스트리 키 또는 `C:\Program Files\ClaudeCode\managed-settings.json`에서 `true`일 때, WSL은 `/etc/claude-code`에 추가로 Windows 정책 체인에서 관리형 설정을 읽습니다. [설정 파일](/ko/settings#settings-files) 참조 |

326 

327`disableBypassPermissionsMode`는 일반적으로 조직 정책을 적용하기 위해 관리형 설정에 배치되지만 모든 범위에서 작동합니다. 사용자는 자신의 설정에서 이를 설정하여 자신을 우회 모드에서 잠글 수 있습니다.

328 

329<Note>

330 [Remote Control](/ko/remote-control) 및 [웹 세션](/ko/claude-code-on-the-web)에 대한 액세스는 관리형 설정 키로 제어되지 않습니다. Team 및 Enterprise 플랜에서 관리자는 [Claude Code 관리자 설정](https://claude.ai/admin-settings/claude-code)에서 이러한 기능을 활성화하거나 비활성화합니다.

331</Note>

332 

333## 설정 우선순위

334 

335권한 규칙은 다른 모든 Claude Code 설정과 동일한 [설정 우선순위](/ko/settings#settings-precedence)를 따릅니다:

336 

3371. **관리형 설정**: 명령줄 인수를 포함한 다른 수준으로 재정의할 수 없습니다

3382. **명령줄 인수**: 임시 세션 재정의

3393. **로컬 프로젝트 설정** (`.claude/settings.local.json`)

3404. **공유 프로젝트 설정** (`.claude/settings.json`)

3415. **사용자 설정** (`~/.claude/settings.json`)

342 

343도구가 어느 수준에서든 거부되면 다른 수준은 이를 허용할 수 없습니다. 예를 들어, 관리형 설정 deny는 `--allowedTools`로 재정의할 수 없으며, `--disallowedTools`는 관리형 설정이 정의하는 것 이상의 제한을 추가할 수 있습니다.

344 

345권한이 사용자 설정에서 허용되지만 프로젝트 설정에서 거부되면, 프로젝트 설정이 우선이며 권한이 차단됩니다.

346 

347## 예시 구성

348 

349이 [저장소](https://github.com/anthropics/claude-code/tree/main/examples/settings)에는 일반적인 배포 시나리오에 대한 시작 설정 구성이 포함되어 있습니다. 이를 시작점으로 사용하고 필요에 맞게 조정합니다.

350 

351## 참고 항목

352 

353* [설정](/ko/settings): 권한 설정 테이블을 포함한 완전한 구성 참조

354* [샌드박싱](/ko/sandboxing): Bash 명령에 대한 OS 수준 파일 시스템 및 네트워크 격리

355* [인증](/ko/authentication): Claude Code에 대한 사용자 액세스 설정

356* [보안](/ko/security): 보안 보호 및 모범 사례

357* [훅](/ko/hooks-guide): 워크플로우 자동화 및 권한 평가 확장

platforms.md +78 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 플랫폼 및 통합

6 

7> Claude Code를 실행할 위치를 선택하고 연결할 항목을 결정합니다. CLI, Desktop, VS Code, JetBrains, 웹 및 Chrome, Slack, CI/CD와 같은 통합을 비교합니다.

8 

9Claude Code는 모든 곳에서 동일한 기본 엔진을 실행하지만, 각 플랫폼은 다양한 작업 방식에 맞게 조정됩니다. 이 페이지는 워크플로우에 적합한 플랫폼을 선택하고 이미 사용 중인 도구를 연결하는 데 도움을 줍니다.

10 

11## Claude Code를 실행할 위치

12 

13프로젝트가 있는 위치와 작업 방식에 따라 플랫폼을 선택합니다.

14 

15| 플랫폼 | 최적 용도 | 제공 기능 |

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

17| [CLI](/ko/quickstart) | 터미널 워크플로우, 스크립팅, 원격 서버 | 전체 기능 세트, [Agent SDK](/ko/headless), 타사 제공자 |

18| [Desktop](/ko/desktop) | 시각적 검토, 병렬 세션, 관리형 설정 | Diff 뷰어, 앱 미리보기, Pro 및 Max의 [컴퓨터 사용](/ko/desktop#let-claude-use-your-computer) 및 [Dispatch](/ko/desktop#sessions-from-dispatch) |

19| [VS Code](/ko/vs-code) | 터미널로 전환하지 않고 VS Code 내에서 작업 | 인라인 Diff, 통합 터미널, 파일 컨텍스트 |

20| [JetBrains](/ko/jetbrains) | IntelliJ, PyCharm, WebStorm 또는 기타 JetBrains IDE 내에서 작업 | Diff 뷰어, 선택 공유, 터미널 세션 |

21| [Web](/ko/claude-code-on-the-web) | 많은 조작이 필요하지 않은 장기 실행 작업 또는 오프라인 상태에서도 계속되어야 하는 작업 | Anthropic 관리형 클라우드, 연결 해제 후에도 계속 실행 |

22 

23CLI는 터미널 기반 작업을 위한 가장 완전한 플랫폼입니다. 스크립팅, 타사 제공자, Agent SDK는 CLI 전용입니다. Desktop과 IDE 확장 프로그램은 일부 CLI 전용 기능을 포기하는 대신 시각적 검토와 더 긴밀한 편집기 통합을 제공합니다. 웹은 Anthropic의 클라우드에서 실행되므로 연결을 해제한 후에도 작업이 계속됩니다.

24 

25동일한 프로젝트에서 여러 플랫폼을 혼합하여 사용할 수 있습니다. 구성, 프로젝트 메모리 및 MCP 서버는 로컬 플랫폼 간에 공유됩니다.

26 

27## 도구 연결

28 

29통합을 통해 Claude는 코드베이스 외부의 서비스와 작업할 수 있습니다.

30 

31| 통합 | 기능 | 사용 용도 |

32| :----------------------------------- | :------------------------------- | :----------------------------- |

33| [Chrome](/ko/chrome) | 로그인된 세션으로 브라우저를 제어합니다 | 웹 앱 테스트, 양식 작성, API 없이 사이트 자동화 |

34| [GitHub Actions](/ko/github-actions) | CI 파이프라인에서 Claude를 실행합니다 | 자동화된 PR 검토, 이슈 분류, 예약된 유지보수 |

35| [GitLab CI/CD](/ko/gitlab-ci-cd) | GitHub Actions와 동일하지만 GitLab용입니다 | GitLab의 CI 기반 자동화 |

36| [Code Review](/ko/code-review) | 모든 PR을 자동으로 검토합니다 | 인간 검토 전에 버그 포착 |

37| [Slack](/ko/slack) | 채널의 `@Claude` 멘션에 응답합니다 | 팀 채팅에서 버그 보고를 풀 요청으로 변환 |

38 

39여기에 나열되지 않은 통합의 경우, [MCP 서버](/ko/mcp) 및 [커넥터](/ko/desktop#connect-external-tools)를 사용하면 거의 모든 것을 연결할 수 있습니다. Linear, Notion, Google Drive 또는 자체 내부 API입니다.

40 

41## 터미널에서 멀리 떨어져 있을 때 작업

42 

43Claude Code offers several ways to work when you're not at your terminal. They differ in what triggers the work, where Claude runs, and how much you need to set up.

44 

45| | Trigger | Claude runs on | Setup | Best for |

46| :--------------------------------------------- | :--------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------ |

47| [Dispatch](/en/desktop#sessions-from-dispatch) | Message a task from the Claude mobile app | Your machine (Desktop) | [Pair the mobile app with Desktop](https://support.claude.com/en/articles/13947068) | Delegating work while you're away, minimal setup |

48| [Remote Control](/en/remote-control) | Drive a running session from [claude.ai/code](https://claude.ai/code) or the Claude mobile app | Your machine (CLI or VS Code) | Run `claude remote-control` | Steering in-progress work from another device |

49| [Channels](/en/channels) | Push events from a chat app like Telegram or Discord, or your own server | Your machine (CLI) | [Install a channel plugin](/en/channels#quickstart) or [build your own](/en/channels-reference) | Reacting to external events like CI failures or chat messages |

50| [Slack](/en/slack) | Mention `@Claude` in a team channel | Anthropic cloud | [Install the Slack app](/en/slack#setting-up-claude-code-in-slack) with [Claude Code on the web](/en/claude-code-on-the-web) enabled | PRs and reviews from team chat |

51| [Scheduled tasks](/en/scheduled-tasks) | Set a schedule | [CLI](/en/scheduled-tasks), [Desktop](/en/desktop-scheduled-tasks), or [cloud](/en/routines) | Pick a frequency | Recurring automation like daily reviews |

52 

53시작할 위치가 확실하지 않으면 [CLI를 설치](/ko/quickstart)하고 프로젝트 디렉토리에서 실행합니다. 터미널을 사용하지 않으려면 [Desktop](/ko/desktop-quickstart)이 그래픽 인터페이스와 함께 동일한 엔진을 제공합니다.

54 

55## 관련 리소스

56 

57### 플랫폼

58 

59* [CLI 빠른 시작](/ko/quickstart): 터미널에서 첫 번째 명령을 설치하고 실행합니다

60* [Desktop](/ko/desktop): 시각적 Diff 검토, 병렬 세션, 컴퓨터 사용 및 Dispatch

61* [VS Code](/ko/vs-code): 편집기 내 Claude Code 확장 프로그램

62* [JetBrains](/ko/jetbrains): IntelliJ, PyCharm 및 기타 JetBrains IDE용 확장 프로그램

63* [웹의 Claude Code](/ko/claude-code-on-the-web): 연결 해제 후에도 계속 실행되는 클라우드 세션

64 

65### 통합

66 

67* [Chrome](/ko/chrome): 로그인된 세션으로 브라우저 작업 자동화

68* [GitHub Actions](/ko/github-actions): CI 파이프라인에서 Claude 실행

69* [GitLab CI/CD](/ko/gitlab-ci-cd): GitLab용 동일한 기능

70* [Code Review](/ko/code-review): 모든 풀 요청에 대한 자동 검토

71* [Slack](/ko/slack): 팀 채팅에서 작업을 보내고 PR을 받습니다

72 

73### 원격 액세스

74 

75* [Dispatch](/ko/desktop#sessions-from-dispatch): 휴대폰에서 작업을 메시지로 보내면 Desktop 세션을 생성할 수 있습니다

76* [Remote Control](/ko/remote-control): 휴대폰 또는 브라우저에서 실행 중인 세션을 제어합니다

77* [Channels](/ko/channels): 채팅 앱 또는 자체 서버의 이벤트를 세션으로 푸시합니다

78* [Scheduled tasks](/ko/scheduled-tasks): 반복 일정에 따라 프롬프트를 실행합니다

plugin-dependencies.md +153 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 플러그인 종속성 버전 제약

6 

7> 플러그인 종속성에 대한 버전 제약을 선언하여 업스트림 플러그인이 주요 변경 사항을 배포할 때 플러그인이 계속 작동하도록 유지합니다.

8 

9플러그인은 `plugin.json` 또는 마켓플레이스 항목에 나열하여 다른 플러그인에 종속될 수 있습니다. 기본적으로 종속성은 최신 사용 가능 버전을 추적하므로 업스트림 릴리스가 경고 없이 플러그인의 종속성을 변경할 수 있습니다. 버전 제약을 사용하면 이동하기로 선택할 때까지 테스트된 버전 범위에서 종속성을 유지할 수 있습니다.

10 

11종속성을 선언하는 플러그인을 설치하면 Claude Code가 자동으로 종속성을 해결하고 설치하며 설치 출력의 끝에 추가된 종속성을 나열합니다. 종속성이 나중에 누락되면 `/reload-plugins`와 백그라운드 플러그인 자동 업데이트가 이를 다시 설치합니다. 단, 마켓플레이스가 이미 구성된 마켓플레이스에 있어야 합니다. 종속 플러그인에서 `claude plugin install`을 다시 실행하거나 `claude plugin marketplace add`로 마켓플레이스를 추가하면 누락된 종속성도 해결됩니다. 추가하지 않은 마켓플레이스의 종속성은 해결되지 않은 상태로 유지됩니다.

12 

13이 가이드는 `plugin.json`에서 종속성을 선언하는 플러그인 작성자와 릴리스에 태그를 지정하는 마켓플레이스 유지 관리자를 위한 것입니다. 종속성이 있는 플러그인을 설치하려면 [플러그인 검색 및 설치](/ko/discover-plugins)를 참조하세요. 전체 매니페스트 스키마는 [플러그인 참조](/ko/plugins-reference)를 참조하세요.

14 

15<Note>

16 종속성 버전 제약에는 Claude Code v2.1.110 이상이 필요합니다.

17</Note>

18 

19## 종속성 버전을 제약하는 이유

20 

21두 팀이 플러그인을 게시하는 내부 마켓플레이스를 생각해 봅시다. 플랫폼 팀은 비밀 백엔드를 래핑하는 MCP 서버인 `secrets-vault`를 유지 관리합니다. 배포 팀은 배포 중에 자격 증명을 가져오기 위해 `secrets-vault`를 호출하는 `deploy-kit`을 유지 관리합니다.

22 

23`deploy-kit`은 `secrets-vault` v2.1.0에 대해 테스트됩니다. 버전 제약이 없으면 플랫폼 팀이 MCP 도구의 이름을 바꾸는 릴리스에 태그를 지정할 때마다 자동 업데이트가 모든 엔지니어의 `secrets-vault`를 새 버전으로 이동하고 `deploy-kit`이 중단됩니다.

24 

25버전 제약을 사용하면 `deploy-kit`은 `~2.1.0` 범위에서 `secrets-vault`가 필요함을 선언합니다. `deploy-kit`이 설치된 엔지니어는 가장 높은 일치하는 `2.1.x` 패치에 머물러 있습니다. 배포 팀은 더 넓은 제약이 있는 새로운 `deploy-kit` 버전을 게시하여 자신의 일정에 따라 업그레이드합니다.

26 

27## 버전 제약으로 종속성 선언

28 

29플러그인의 `.claude-plugin/plugin.json`의 `dependencies` 배열에 종속성을 나열합니다. 각 항목은 플러그인 이름 또는 버전 제약이 있는 객체입니다.

30 

31다음 매니페스트는 하나의 버전 없는 종속성과 하나의 제약된 종속성을 선언합니다:

32 

33```json .claude-plugin/plugin.json theme={null}

34{

35 "name": "deploy-kit",

36 "version": "3.1.0",

37 "dependencies": [

38 "audit-logger",

39 { "name": "secrets-vault", "version": "~2.1.0" }

40 ]

41}

42```

43 

44항목은 위의 예에서 `"audit-logger"`처럼 플러그인 이름만 있는 문자열일 수 있으며, 이는 해당 플러그인의 마켓플레이스가 제공하는 모든 버전에 종속됩니다. 더 많은 제어를 위해 다음 필드가 있는 객체를 사용합니다:

45 

46| 필드 | 유형 | 설명 |

47| :------------ | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

48| `name` | string | 플러그인 이름입니다. 선언 플러그인과 동일한 마켓플레이스 내에서 해결됩니다. 필수입니다. |

49| `version` | string | `~2.1.0`, `^2.0`, `>=1.4` 또는 `=2.1.0`과 같은 [semver 범위](https://github.com/npm/node-semver#ranges)입니다. 종속성은 이 범위를 만족하는 가장 높은 태그된 버전에서 가져옵니다. |

50| `marketplace` | string | `name`을 해결할 다른 마켓플레이스입니다. 교차 마켓플레이스 종속성은 대상 마켓플레이스가 루트 마켓플레이스의 `marketplace.json`에서 [`allowCrossMarketplaceDependenciesOn`](#depend-on-a-plugin-from-another-marketplace)에 나열되지 않는 한 차단됩니다. |

51 

52`version` 필드는 캐럿, 틸드, 하이픈 및 비교자 범위를 포함하여 Node의 `semver` 패키지에서 지원하는 모든 표현식을 허용합니다. `^2.0.0-0`과 같은 사전 릴리스 접미사로 옵트인하지 않는 한 `2.0.0-beta.1`과 같은 사전 릴리스 버전은 제외됩니다.

53 

54## 다른 마켓플레이스의 플러그인에 종속

55 

56기본적으로 Claude Code는 플러그인을 선언하는 플러그인과 다른 마켓플레이스에 있는 종속성을 자동 설치하기를 거부합니다. 이는 한 마켓플레이스가 검토하지 않은 소스의 플러그인을 자동으로 가져오는 것을 방지합니다.

57 

58이를 허용하려면 루트 마켓플레이스의 유지 관리자가 대상 마켓플레이스 이름을 `marketplace.json`의 `allowCrossMarketplaceDependenciesOn`에 추가합니다. 루트 마켓플레이스는 사용자가 설치하는 플러그인을 호스팅하는 마켓플레이스이며, 해당 허용 목록만 참조되므로 신뢰가 중간 마켓플레이스를 통해 연결되지 않습니다.

59 

60다음 `marketplace.json`은 `deploy-kit`이 `acme-shared`의 플러그인에 종속되도록 허용합니다:

61 

62```json .claude-plugin/marketplace.json theme={null}

63{

64 "name": "acme-tools",

65 "owner": { "name": "Acme" },

66 "allowCrossMarketplaceDependenciesOn": ["acme-shared"],

67 "plugins": [

68 {

69 "name": "deploy-kit",

70 "source": "./deploy-kit",

71 "dependencies": [

72 { "name": "audit-logger", "marketplace": "acme-shared" }

73 ]

74 }

75 ]

76}

77```

78 

79필드가 없거나 대상 마켓플레이스를 포함하지 않으면 설정할 필드의 이름을 지정하는 `cross-marketplace` 오류로 설치가 실패합니다. 사용자는 여전히 종속성을 수동으로 먼저 설치할 수 있으며, 이는 허용 목록을 변경하지 않고 제약을 만족합니다.

80 

81## 버전 해결을 위한 플러그인 릴리스 태그

82 

83버전 제약은 마켓플레이스 저장소의 git 태그에 대해 해결됩니다. Claude Code가 종속성의 사용 가능한 버전을 찾으려면 업스트림 플러그인의 릴리스가 특정 명명 규칙을 사용하여 태그되어야 합니다.

84 

85각 릴리스를 `{plugin-name}--v{version}`으로 태그하며, 여기서 `{version}`은 해당 커밋의 `plugin.json`의 `version` 필드와 일치합니다. 플러그인 디렉터리에서 다음을 실행합니다:

86 

87```bash theme={null}

88claude plugin tag --push

89```

90 

91`claude plugin tag` 명령은 플러그인의 매니페스트와 포함된 마켓플레이스 항목에서 태그 이름을 파생합니다. 태그를 생성하기 전에 플러그인 콘텐츠를 검증하고, `plugin.json`과 마켓플레이스 항목이 버전에 동의하는지 확인하고, 플러그인 디렉터리 아래에 깨끗한 작업 트리를 요구하며, 태그가 이미 존재하면 거부합니다. `--dry-run`을 추가하여 태그를 생성하지 않고 어떤 것이 태그될지 확인합니다. `plugin.json`과 마켓플레이스 항목을 직접 동기화 상태로 유지하면 `git tag secrets-vault--v2.1.0`을 직접 실행하는 것과 동일합니다.

92 

93플러그인 이름 접두사를 사용하면 하나의 마켓플레이스 저장소가 독립적인 버전 라인을 가진 여러 플러그인을 호스팅할 수 있습니다. `--v` 구분자는 전체 플러그인 이름에 대한 접두사 일치로 구문 분석되므로 하이픈을 포함하는 플러그인 이름이 올바르게 처리됩니다.

94 

95`{ "name": "secrets-vault", "version": "~2.1.0" }`을 선언하는 플러그인을 설치하면 Claude Code는 마켓플레이스의 태그를 나열하고, `secrets-vault--v`로 시작하는 태그로 필터링하고, `~2.1.0`을 만족하는 가장 높은 버전을 가져옵니다. 일치하는 태그가 없으면 종속 플러그인은 사용 가능한 버전을 나열하는 오류로 비활성화됩니다.

96 

97해결된 태그의 semver는 `plugin.json`의 `version`과 별도로 기록되므로 제약 확인은 해당 커밋의 `plugin.json`에 오래된 값이 있더라도 실제로 가져온 태그를 사용합니다. 태그 해결 설치를 위한 캐시 디렉터리 이름에는 12자 커밋-SHA 접미사가 포함되므로 유지 관리자가 태그를 다른 커밋으로 강제 이동하면 다음 설치는 오래된 콘텐츠를 재사용하는 대신 새로운 캐시 디렉터리를 가져옵니다.

98 

99<Note>

100 `npm` 마켓플레이스 소스의 경우 태그 기반 해결이 git 지원 소스에만 적용되므로 제약이 가져온 버전을 제어하지 않습니다. 제약은 여전히 로드 시간에 확인되며, 설치된 버전이 이를 만족하지 않으면 종속 플러그인은 `dependency-version-unsatisfied`로 비활성화됩니다.

101</Note>

102 

103## 제약이 상호 작용하는 방식

104 

105여러 설치된 플러그인이 동일한 종속성을 제약하면 Claude Code는 해당 범위를 교차하고 모든 범위를 만족하는 가장 높은 버전으로 종속성을 해결합니다. 아래 표는 일반적인 조합이 어떻게 해결되는지 보여줍니다.

106 

107| 플러그인 A 필요 | 플러그인 B 필요 | 결과 |

108| :-------- | :-------- | :------------------------------------------------------------ |

109| `^2.0` | `>=2.1` | `2.1.0` 이상의 가장 높은 `2.x` 태그에서 하나의 설치입니다. 두 플러그인 모두 로드됩니다. |

110| `~2.1` | `~3.0` | 플러그인 B 설치가 `range-conflict`로 실패합니다. 플러그인 A와 종속성은 그대로 유지됩니다. |

111| `=2.1.0` | none | 종속성은 `2.1.0`에 머물러 있습니다. 플러그인 A가 설치된 동안 자동 업데이트는 최신 버전을 건너뜁니다. |

112 

113자동 업데이트는 마켓플레이스의 최신 버전이 아닌 모든 설치된 플러그인의 범위를 만족하는 가장 높은 git 태그에서 제약된 종속성을 가져오므로, 종속성은 허용된 범위 내에서 계속 업데이트를 받습니다. 모든 범위를 만족하는 태그가 없으면 업데이트를 건너뛰고 건너뛴 메시지는 `/doctor`에 나타나며 `/plugin` 오류 탭에서 제약 플러그인의 이름을 지정합니다.

114 

115종속성을 제약하는 마지막 플러그인을 제거하면 종속성은 더 이상 유지되지 않으며 다음 업데이트에서 마켓플레이스 항목 추적을 재개합니다.

116 

117## 고아 자동 설치 종속성 제거

118 

119자동 설치된 종속성은 이를 설치한 플러그인이 제거된 후에도 디스크에 남아 있으며, 종속 플러그인을 다시 설치하거나 종속성을 직접 계속 사용하려는 경우를 대비합니다. 이를 정리하려면 `claude plugin prune`을 실행하여 더 이상 설치된 플러그인이 필요로 하지 않는 자동 설치된 종속성을 나열하고 확인 프롬프트 후 제거합니다. 이는 Claude Code v2.1.121 이상이 필요합니다.

120 

121```bash theme={null}

122claude plugin prune

123```

124 

125기본적으로 prune은 사용자 범위에서 작동합니다. `--scope project` 또는 `--scope local`을 사용하여 다른 범위를 대상으로 합니다. `--dry-run`을 전달하여 아무것도 변경하지 않고 제거될 항목을 나열합니다. `-y`를 전달하여 확인 프롬프트를 건너뜁니다. stdin 또는 stdout이 터미널이 아닐 때 prune은 고아를 나열하고 `-y`가 전달되지 않는 한 제거하지 않고 종료합니다.

126 

127제거의 일부로 prune하려면 `claude plugin uninstall`에 `--prune`을 전달합니다. 명명된 플러그인을 제거한 후 Claude Code는 이제 고아가 된 자동 설치된 종속성을 검사하고 제거합니다. 직접 설치한 플러그인은 절대 prune되지 않으며, 다른 플러그인의 `dependencies` 배열을 통해 자동으로 설치된 플러그인만 prune됩니다.

128 

129예를 들어 `deploy-kit`을 제거하고 이를 남기는 종속성을 정리하려면:

130 

131```bash theme={null}

132claude plugin uninstall deploy-kit --prune

133```

134 

135## 종속성 오류 해결

136 

137종속성 문제는 `claude plugin list`, `/plugin` 인터페이스 및 `/doctor`에 표시됩니다. 영향을 받는 플러그인은 오류를 해결할 때까지 비활성화됩니다. 가장 일반적인 오류와 해결 방법은 아래에 나열되어 있습니다.

138 

139| 오류 | 의미 | 해결 방법 |

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

141| `dependency-unsatisfied` | 선언된 종속성이 설치되지 않았거나 설치되었지만 비활성화되어 있습니다. | 오류 메시지에 표시된 `claude plugin install` 명령을 실행합니다. 종속성의 마켓플레이스가 아직 구성되지 않은 경우 `claude plugin marketplace add`로 추가하면 Claude Code가 종속성을 자동으로 해결합니다. 종속성이 비활성화된 경우 활성화합니다. |

142| `range-conflict` | 종속성의 버전 요구 사항을 결합할 수 없습니다. 오류 메시지는 원인의 이름을 지정합니다: 모든 범위를 만족하는 버전이 없거나, 범위가 유효한 semver 구문이 아니거나, 결합된 범위가 너무 복잡하여 교차할 수 없습니다. | 충돌하는 플러그인 중 하나를 제거하거나 업데이트하고, 유효하지 않은 `version` 문자열을 수정하고, 긴 `\|\|` 체인을 단순화하거나, 업스트림 작성자에게 제약을 넓히도록 요청합니다. |

143| `dependency-version-unsatisfied` | 설치된 종속성의 버전이 이 플러그인의 선언된 범위를 벗어났습니다. | `claude plugin install <dependency>@<marketplace>`를 실행하여 모든 현재 제약에 대해 종속성을 다시 해결합니다. |

144| `no-matching-tag` | 종속성의 저장소에 범위를 만족하는 `{name}--v*` 태그가 없습니다. | 업스트림이 위의 규칙을 사용하여 릴리스에 태그를 지정했는지 확인하거나 범위를 완화합니다. |

145 

146이러한 오류를 프로그래밍 방식으로 확인하려면 `claude plugin list --json`을 실행하고 각 플러그인의 `errors` 필드를 읽습니다.

147 

148## 참고 항목

149 

150* [플러그인 생성](/ko/plugins): 기술, 에이전트 및 훅으로 플러그인 빌드

151* [플러그인 마켓플레이스 생성 및 배포](/ko/plugin-marketplaces): 팀을 위한 플러그인 호스팅

152* [플러그인 참조](/ko/plugins-reference#plugin-manifest-schema): 전체 `plugin.json` 스키마

153* [버전 관리](/ko/plugins-reference#version-management): 플러그인의 자체 버전이 어떻게 해결되고 캐시 키로 사용되는지

plugin-marketplaces.md +1054 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 플러그인 마켓플레이스 생성 및 배포

6 

7> Claude Code 확장 프로그램을 팀과 커뮤니티에 배포하기 위한 플러그인 마켓플레이스를 구축하고 호스팅합니다.

8 

9**플러그인 마켓플레이스**는 다른 사용자에게 플러그인을 배포할 수 있는 카탈로그입니다. 마켓플레이스는 중앙 집중식 검색, 버전 추적, 자동 업데이트 및 여러 소스 유형(git 저장소, 로컬 경로 등)을 지원합니다. 이 가이드에서는 팀이나 커뮤니티와 플러그인을 공유하기 위해 자신의 마켓플레이스를 만드는 방법을 보여줍니다.

10 

11기존 마켓플레이스에서 플러그인을 설치하려고 하시나요? [미리 빌드된 플러그인 검색 및 설치](/ko/discover-plugins)를 참조하세요.

12 

13## 개요

14 

15마켓플레이스를 생성하고 배포하는 과정은 다음과 같습니다:

16 

171. **플러그인 생성**: skills, 에이전트, hooks, MCP 서버 또는 LSP 서버를 사용하여 하나 이상의 플러그인을 빌드합니다. 이 가이드에서는 배포할 플러그인이 이미 있다고 가정합니다. 플러그인 생성 방법에 대한 자세한 내용은 [플러그인 생성](/ko/plugins)을 참조하세요.

182. **마켓플레이스 파일 생성**: 플러그인을 나열하고 플러그인을 찾을 위치를 정의하는 `marketplace.json`을 정의합니다([마켓플레이스 파일 생성](#create-the-marketplace-file) 참조).

193. **마켓플레이스 호스팅**: GitHub, GitLab 또는 다른 git 호스트에 푸시합니다([마켓플레이스 호스팅 및 배포](#host-and-distribute-marketplaces) 참조).

204. **사용자와 공유**: 사용자가 `/plugin marketplace add`로 마켓플레이스를 추가하고 개별 플러그인을 설치합니다([플러그인 검색 및 설치](/ko/discover-plugins) 참조).

21 

22마켓플레이스가 라이브 상태가 되면 저장소에 변경 사항을 푸시하여 업데이트할 수 있습니다. 사용자는 `/plugin marketplace update`로 로컬 복사본을 새로 고칩니다.

23 

24## 연습: 로컬 마켓플레이스 생성

25 

26이 예제에서는 하나의 플러그인으로 마켓플레이스를 생성합니다: 코드 리뷰를 위한 `/quality-review` skill입니다. 디렉터리 구조를 생성하고, skill을 추가하고, 플러그인 매니페스트와 마켓플레이스 카탈로그를 생성한 다음, 설치하고 테스트합니다.

27 

28<Steps>

29 <Step title="디렉터리 구조 생성">

30 ```bash theme={null}

31 mkdir -p my-marketplace/.claude-plugin

32 mkdir -p my-marketplace/plugins/quality-review-plugin/.claude-plugin

33 mkdir -p my-marketplace/plugins/quality-review-plugin/skills/quality-review

34 ```

35 </Step>

36 

37 <Step title="skill 생성">

38 `/quality-review` skill이 수행하는 작업을 정의하는 `SKILL.md` 파일을 생성합니다.

39 

40 ```markdown my-marketplace/plugins/quality-review-plugin/skills/quality-review/SKILL.md theme={null}

41 ---

42 description: 버그, 보안 및 성능에 대한 코드 검토

43 disable-model-invocation: true

44 ---

45 

46 선택한 코드 또는 최근 변경 사항을 다음 항목에 대해 검토합니다:

47 - 잠재적 버그 또는 엣지 케이스

48 - 보안 문제

49 - 성능 문제

50 - 가독성 개선

51 

52 간결하고 실행 가능한 내용을 제공합니다.

53 ```

54 </Step>

55 

56 <Step title="플러그인 매니페스트 생성">

57 플러그인을 설명하는 `plugin.json` 파일을 생성합니다. 매니페스트는 `.claude-plugin/` 디렉터리에 위치합니다.

58 

59 ```json my-marketplace/plugins/quality-review-plugin/.claude-plugin/plugin.json theme={null}

60 {

61 "name": "quality-review-plugin",

62 "description": "빠른 코드 리뷰를 위한 /quality-review skill 추가",

63 "version": "1.0.0"

64 }

65 ```

66 

67 <Note>

68 `version`을 설정하면 사용자는 이 필드를 변경할 때만 업데이트를 받으므로, 모든 릴리스에서 이를 증가시킵니다. `version`을 생략하고 이 마켓플레이스를 git에서 호스팅하면, 모든 커밋이 자동으로 새 버전으로 계산됩니다. [버전 해석](#version-resolution-and-release-channels)을 참조하여 올바른 접근 방식을 선택합니다.

69 </Note>

70 </Step>

71 

72 <Step title="마켓플레이스 파일 생성">

73 플러그인을 나열하는 마켓플레이스 카탈로그를 생성합니다.

74 

75 ```json my-marketplace/.claude-plugin/marketplace.json theme={null}

76 {

77 "name": "my-plugins",

78 "owner": {

79 "name": "Your Name"

80 },

81 "plugins": [

82 {

83 "name": "quality-review-plugin",

84 "source": "./plugins/quality-review-plugin",

85 "description": "빠른 코드 리뷰를 위한 /quality-review skill 추가"

86 }

87 ]

88 }

89 ```

90 </Step>

91 

92 <Step title="추가 및 설치">

93 마켓플레이스를 추가하고 플러그인을 설치합니다.

94 

95 ```shell theme={null}

96 /plugin marketplace add ./my-marketplace

97 /plugin install quality-review-plugin@my-plugins

98 ```

99 </Step>

100 

101 <Step title="시도해보기">

102 편집기에서 일부 코드를 선택하고 새 skill을 실행합니다.

103 

104 ```shell theme={null}

105 /quality-review

106 ```

107 </Step>

108</Steps>

109 

110플러그인이 수행할 수 있는 작업(hooks, 에이전트, MCP 서버 및 LSP 서버 포함)에 대해 자세히 알아보려면 [플러그인](/ko/plugins)을 참조하세요.

111 

112<Note>

113 **플러그인 설치 방법**: 사용자가 플러그인을 설치하면 Claude Code는 플러그인 디렉터리를 캐시 위치에 복사합니다. 이는 `../shared-utils`와 같은 경로를 사용하여 플러그인 디렉터리 외부의 파일을 참조할 수 없다는 의미입니다. 왜냐하면 해당 파일이 복사되지 않기 때문입니다.

114 

115 플러그인 간에 파일을 공유해야 하는 경우 symlink를 사용합니다. 자세한 내용은 [플러그인 캐싱 및 파일 해석](/ko/plugins-reference#plugin-caching-and-file-resolution)을 참조하세요.

116</Note>

117 

118## 마켓플레이스 파일 생성

119 

120저장소 루트에 `.claude-plugin/marketplace.json`을 생성합니다. 이 파일은 마켓플레이스의 이름, 소유자 정보 및 소스가 있는 플러그인 목록을 정의합니다.

121 

122각 플러그인 항목에는 최소한 `name`과 `source`(가져올 위치)가 필요합니다. 사용 가능한 모든 필드는 아래의 [전체 스키마](#marketplace-schema)를 참조하세요.

123 

124```json theme={null}

125{

126 "name": "company-tools",

127 "owner": {

128 "name": "DevTools Team",

129 "email": "devtools@example.com"

130 },

131 "plugins": [

132 {

133 "name": "code-formatter",

134 "source": "./plugins/formatter",

135 "description": "저장 시 자동 코드 포맷팅",

136 "version": "2.1.0",

137 "author": {

138 "name": "DevTools Team"

139 }

140 },

141 {

142 "name": "deployment-tools",

143 "source": {

144 "source": "github",

145 "repo": "company/deploy-plugin"

146 },

147 "description": "배포 자동화 도구"

148 }

149 ]

150}

151```

152 

153## 마켓플레이스 스키마

154 

155### 필수 필드

156 

157| 필드 | 유형 | 설명 | 예제 |

158| :-------- | :----- | :------------------------------------------------------------------------------------------------------------------ | :------------- |

159| `name` | string | 마켓플레이스 식별자(kebab-case, 공백 없음). 이는 공개 대면입니다: 사용자는 플러그인을 설치할 때 이를 봅니다(예: `/plugin install my-tool@your-marketplace`). | `"acme-tools"` |

160| `owner` | object | 마켓플레이스 유지 관리자 정보([아래 필드 참조](#owner-fields)) | |

161| `plugins` | array | 사용 가능한 플러그인 목록 | 아래 참조 |

162 

163<Note>

164 **예약된 이름**: 다음 마켓플레이스 이름은 공식 Anthropic 사용을 위해 예약되어 있으며 타사 마켓플레이스에서 사용할 수 없습니다: `claude-code-marketplace`, `claude-code-plugins`, `claude-plugins-official`, `anthropic-marketplace`, `anthropic-plugins`, `agent-skills`, `knowledge-work-plugins`, `life-sciences`. 공식 마켓플레이스를 사칭하는 이름(예: `official-claude-plugins` 또는 `anthropic-tools-v2`)도 차단됩니다.

165</Note>

166 

167### 소유자 필드

168 

169| 필드 | 유형 | 필수 | 설명 |

170| :------ | :----- | :-- | :-------------- |

171| `name` | string | 예 | 유지 관리자 또는 팀의 이름 |

172| `email` | string | 아니오 | 유지 관리자의 연락처 이메일 |

173 

174### 선택적 필드

175 

176| 필드 | 유형 | 설명 |

177| :------------------------------------ | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

178| `$schema` | string | 편집기 자동 완성 및 유효성 검사를 위한 JSON Schema URL입니다. Claude Code는 로드 시 이 필드를 무시합니다. |

179| `description` | string | 간단한 마켓플레이스 설명 |

180| `version` | string | 마켓플레이스 매니페스트 버전 |

181| `metadata.pluginRoot` | string | 상대 플러그인 소스 경로에 앞에 붙는 기본 디렉터리(예: `"./plugins"`를 사용하면 `"source": "./plugins/formatter"` 대신 `"source": "formatter"`를 작성할 수 있습니다) |

182| `allowCrossMarketplaceDependenciesOn` | array | 이 마켓플레이스의 플러그인이 의존할 수 있는 다른 마켓플레이스입니다. 여기에 나열되지 않은 마켓플레이스의 종속성은 설치 시 차단됩니다. [다른 마켓플레이스의 플러그인에 의존](/ko/plugin-dependencies#depend-on-a-plugin-from-another-marketplace)을 참조하세요. |

183 

184`description` 및 `version`은 이전 버전과의 호환성을 위해 `metadata` 아래에서도 허용됩니다.

185 

186## 플러그인 항목

187 

188`plugins` 배열의 각 플러그인 항목은 플러그인과 플러그인을 찾을 위치를 설명합니다. [플러그인 매니페스트 스키마](/ko/plugins-reference#plugin-manifest-schema)의 모든 필드(예: `description`, `version`, `author`, `commands`, `hooks` 등)와 이러한 마켓플레이스 특정 필드를 포함할 수 있습니다: `source`, `category`, `tags` 및 `strict`.

189 

190### 필수 필드

191 

192| 필드 | 유형 | 설명 |

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

194| `name` | string | 플러그인 식별자(kebab-case, 공백 없음). 이는 공개 대면입니다: 사용자는 설치할 때 이를 봅니다(예: `/plugin install my-plugin@marketplace`). |

195| `source` | string\|object | 플러그인을 가져올 위치([아래 플러그인 소스](#plugin-sources) 참조) |

196 

197### 선택적 플러그인 필드

198 

199**표준 메타데이터 필드:**

200 

201| 필드 | 유형 | 설명 |

202| :------------ | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

203| `description` | string | 간단한 플러그인 설명 |

204| `version` | string | 플러그인 버전. 설정된 경우(여기 또는 `plugin.json`에서), 플러그인은 이 문자열로 고정되며 사용자는 변경될 때만 업데이트를 받습니다. 생략하면 git 커밋 SHA로 돌아갑니다. [버전 해석](#version-resolution-and-release-channels)을 참조하세요. |

205| `author` | object | 플러그인 작성자 정보(`name` 필수, `email` 선택) |

206| `homepage` | string | 플러그인 홈페이지 또는 문서 URL |

207| `repository` | string | 소스 코드 저장소 URL |

208| `license` | string | SPDX 라이선스 식별자(예: MIT, Apache-2.0) |

209| `keywords` | array | 플러그인 검색 및 분류를 위한 태그 |

210| `category` | string | 조직을 위한 플러그인 카테고리 |

211| `tags` | array | 검색 가능성을 위한 태그 |

212| `strict` | boolean | `plugin.json`이 구성 요소 정의의 권한인지 여부를 제어합니다(기본값: true). 아래의 [Strict 모드](#strict-mode)를 참조하세요. |

213 

214**구성 요소 구성 필드:**

215 

216| 필드 | 유형 | 설명 |

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

218| `skills` | string\|array | `<name>/SKILL.md`를 포함하는 skill 디렉터리의 사용자 정의 경로 |

219| `commands` | string\|array | 평면 `.md` skill 파일 또는 디렉터리의 사용자 정의 경로 |

220| `agents` | string\|array | 에이전트 파일의 사용자 정의 경로 |

221| `hooks` | string\|object | 사용자 정의 hooks 구성 또는 hooks 파일 경로 |

222| `mcpServers` | string\|object | MCP 서버 구성 또는 MCP 구성 경로 |

223| `lspServers` | string\|object | LSP 서버 구성 또는 LSP 구성 경로 |

224 

225## 플러그인 소스

226 

227플러그인 소스는 Claude Code에 마켓플레이스에 나열된 각 개별 플러그인을 가져올 위치를 알려줍니다. 이는 `marketplace.json`의 각 플러그인 항목의 `source` 필드에 설정됩니다.

228 

229플러그인이 로컬 머신에 복제되거나 복사되면 `~/.claude/plugins/cache`의 로컬 버전 관리 플러그인 캐시에 복사됩니다.

230 

231| 소스 | 유형 | 필드 | 참고 |

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

233| 상대 경로 | `string` (예: `"./my-plugin"`) | 없음 | 마켓플레이스 저장소 내의 로컬 디렉터리. `./`로 시작해야 합니다 |

234| `github` | object | `repo`, `ref?`, `sha?` | |

235| `url` | object | `url`, `ref?`, `sha?` | Git URL 소스 |

236| `git-subdir` | object | `url`, `path`, `ref?`, `sha?` | git 저장소 내의 하위 디렉터리. 모노레포의 대역폭을 최소화하기 위해 희소하게 복제합니다 |

237| `npm` | object | `package`, `version?`, `registry?` | `npm install`을 통해 설치됨 |

238 

239<Note>

240 **마켓플레이스 소스 vs 플러그인 소스**: 이는 다양한 것을 제어하는 다양한 개념입니다.

241 

242 * **마켓플레이스 소스** — `marketplace.json` 카탈로그 자체를 가져올 위치. 사용자가 `/plugin marketplace add`를 실행하거나 `extraKnownMarketplaces` 설정에서 설정합니다. `ref`(분기/태그)를 지원하지만 `sha`는 지원하지 않습니다.

243 * **플러그인 소스** — 마켓플레이스에 나열된 개별 플러그인을 가져올 위치. `marketplace.json` 내의 각 플러그인 항목의 `source` 필드에 설정됩니다. `ref`(분기/태그)와 `sha`(정확한 커밋) 모두를 지원합니다.

244 

245 예를 들어, `acme-corp/plugin-catalog`에서 호스팅되는 마켓플레이스(마켓플레이스 소스)는 `acme-corp/code-formatter`에서 가져온 플러그인을 나열할 수 있습니다(플러그인 소스). 마켓플레이스 소스와 플러그인 소스는 다양한 저장소를 가리키며 독립적으로 고정됩니다.

246</Note>

247 

248### 상대 경로

249 

250동일한 저장소의 플러그인의 경우 `./`로 시작하는 경로를 사용합니다:

251 

252```json theme={null}

253{

254 "name": "my-plugin",

255 "source": "./plugins/my-plugin"

256}

257```

258 

259경로는 마켓플레이스 루트(`.claude-plugin/`을 포함하는 디렉터리)에 상대적으로 해석됩니다. 위의 예에서 `./plugins/my-plugin`은 `marketplace.json`이 `<repo>/.claude-plugin/marketplace.json`에 있더라도 `<repo>/plugins/my-plugin`을 가리킵니다. `.claude-plugin/` 외부로 나가기 위해 `../`를 사용하지 마세요.

260 

261<Note>

262 상대 경로는 사용자가 Git(GitHub, GitLab 또는 git URL)을 통해 마켓플레이스를 추가할 때만 작동합니다. 사용자가 `marketplace.json` 파일에 대한 직접 URL을 통해 마켓플레이스를 추가하면 상대 경로가 올바르게 해석되지 않습니다. URL 기반 배포의 경우 GitHub, npm 또는 git URL 소스를 대신 사용합니다. 자세한 내용은 [문제 해결](#plugins-with-relative-paths-fail-in-url-based-marketplaces)을 참조하세요.

263</Note>

264 

265### GitHub 저장소

266 

267```json theme={null}

268{

269 "name": "github-plugin",

270 "source": {

271 "source": "github",

272 "repo": "owner/plugin-repo"

273 }

274}

275```

276 

277특정 분기, 태그 또는 커밋에 고정할 수 있습니다:

278 

279```json theme={null}

280{

281 "name": "github-plugin",

282 "source": {

283 "source": "github",

284 "repo": "owner/plugin-repo",

285 "ref": "v2.0.0",

286 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"

287 }

288}

289```

290 

291| 필드 | 유형 | 설명 |

292| :----- | :----- | :------------------------------------ |

293| `repo` | string | 필수. `owner/repo` 형식의 GitHub 저장소 |

294| `ref` | string | 선택. Git 분기 또는 태그(저장소 기본 분기로 기본값) |

295| `sha` | string | 선택. 정확한 버전에 고정하기 위한 전체 40자 git 커밋 SHA |

296 

297### Git 저장소

298 

299```json theme={null}

300{

301 "name": "git-plugin",

302 "source": {

303 "source": "url",

304 "url": "https://gitlab.com/team/plugin.git"

305 }

306}

307```

308 

309특정 분기, 태그 또는 커밋에 고정할 수 있습니다:

310 

311```json theme={null}

312{

313 "name": "git-plugin",

314 "source": {

315 "source": "url",

316 "url": "https://gitlab.com/team/plugin.git",

317 "ref": "main",

318 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"

319 }

320}

321```

322 

323| 필드 | 유형 | 설명 |

324| :---- | :----- | :-------------------------------------------------------------------------------------------------------------- |

325| `url` | string | 필수. 전체 git 저장소 URL(`https://` 또는 `git@`). `.git` 접미사는 선택 사항이므로 Azure DevOps 및 AWS CodeCommit URL(접미사 없음)이 작동합니다 |

326| `ref` | string | 선택. Git 분기 또는 태그(저장소 기본 분기로 기본값) |

327| `sha` | string | 선택. 정확한 버전에 고정하기 위한 전체 40자 git 커밋 SHA |

328 

329### Git 하위 디렉터리

330 

331`git-subdir`을 사용하여 git 저장소의 하위 디렉터리 내에 있는 플러그인을 가리킵니다. Claude Code는 희소하고 부분적인 복제를 사용하여 하위 디렉터리만 가져오므로 대규모 모노레포의 대역폭을 최소화합니다.

332 

333```json theme={null}

334{

335 "name": "my-plugin",

336 "source": {

337 "source": "git-subdir",

338 "url": "https://github.com/acme-corp/monorepo.git",

339 "path": "tools/claude-plugin"

340 }

341}

342```

343 

344특정 분기, 태그 또는 커밋에 고정할 수 있습니다:

345 

346```json theme={null}

347{

348 "name": "my-plugin",

349 "source": {

350 "source": "git-subdir",

351 "url": "https://github.com/acme-corp/monorepo.git",

352 "path": "tools/claude-plugin",

353 "ref": "v2.0.0",

354 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"

355 }

356}

357```

358 

359`url` 필드는 GitHub 단축형(`owner/repo`) 또는 SSH URL(`git@github.com:owner/repo.git`)도 허용합니다.

360 

361| 필드 | 유형 | 설명 |

362| :----- | :----- | :----------------------------------------------------------- |

363| `url` | string | 필수. Git 저장소 URL, GitHub `owner/repo` 단축형 또는 SSH URL |

364| `path` | string | 필수. 플러그인을 포함하는 저장소 내의 하위 디렉터리 경로(예: `"tools/claude-plugin"`) |

365| `ref` | string | 선택. Git 분기 또는 태그(저장소 기본 분기로 기본값) |

366| `sha` | string | 선택. 정확한 버전에 고정하기 위한 전체 40자 git 커밋 SHA |

367 

368### npm 패키지

369 

370npm 패키지로 배포되는 플러그인은 `npm install`을 사용하여 설치됩니다. 이는 공개 npm 레지스트리 또는 팀이 호스팅하는 개인 레지스트리의 모든 패키지에서 작동합니다.

371 

372```json theme={null}

373{

374 "name": "my-npm-plugin",

375 "source": {

376 "source": "npm",

377 "package": "@acme/claude-plugin"

378 }

379}

380```

381 

382특정 버전에 고정하려면 `version` 필드를 추가합니다:

383 

384```json theme={null}

385{

386 "name": "my-npm-plugin",

387 "source": {

388 "source": "npm",

389 "package": "@acme/claude-plugin",

390 "version": "2.1.0"

391 }

392}

393```

394 

395개인 또는 내부 레지스트리에서 설치하려면 `registry` 필드를 추가합니다:

396 

397```json theme={null}

398{

399 "name": "my-npm-plugin",

400 "source": {

401 "source": "npm",

402 "package": "@acme/claude-plugin",

403 "version": "^2.0.0",

404 "registry": "https://npm.example.com"

405 }

406}

407```

408 

409| 필드 | 유형 | 설명 |

410| :--------- | :----- | :------------------------------------------------------------ |

411| `package` | string | 필수. 패키지 이름 또는 범위 지정 패키지(예: `@org/plugin`) |

412| `version` | string | 선택. 버전 또는 버전 범위(예: `2.1.0`, `^2.0.0`, `~1.5.0`) |

413| `registry` | string | 선택. 사용자 정의 npm 레지스트리 URL. 시스템 npm 레지스트리(일반적으로 npmjs.org)로 기본값 |

414 

415### 고급 플러그인 항목

416 

417이 예제는 명령어, 에이전트, hooks 및 MCP 서버의 사용자 정의 경로를 포함하여 많은 선택적 필드를 사용하는 플러그인 항목을 보여줍니다:

418 

419```json theme={null}

420{

421 "name": "enterprise-tools",

422 "source": {

423 "source": "github",

424 "repo": "company/enterprise-plugin"

425 },

426 "description": "엔터프라이즈 워크플로우 자동화 도구",

427 "version": "2.1.0",

428 "author": {

429 "name": "Enterprise Team",

430 "email": "enterprise@example.com"

431 },

432 "homepage": "https://docs.example.com/plugins/enterprise-tools",

433 "repository": "https://github.com/company/enterprise-plugin",

434 "license": "MIT",

435 "keywords": ["enterprise", "workflow", "automation"],

436 "category": "productivity",

437 "commands": [

438 "./commands/core/",

439 "./commands/enterprise/",

440 "./commands/experimental/preview.md"

441 ],

442 "agents": ["./agents/security-reviewer.md", "./agents/compliance-checker.md"],

443 "hooks": {

444 "PostToolUse": [

445 {

446 "matcher": "Write|Edit",

447 "hooks": [

448 {

449 "type": "command",

450 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh"

451 }

452 ]

453 }

454 ]

455 },

456 "mcpServers": {

457 "enterprise-db": {

458 "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",

459 "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"]

460 }

461 },

462 "strict": false

463}

464```

465 

466주목할 주요 사항:

467 

468* **`commands` 및 `agents`**: 여러 디렉터리 또는 개별 파일을 지정할 수 있습니다. 경로는 플러그인 루트에 상대적입니다.

469* **`${CLAUDE_PLUGIN_ROOT}`**: hooks 및 MCP 서버 구성에서 이 변수를 사용하여 플러그인의 설치 디렉터리 내의 파일을 참조합니다. 플러그인이 설치될 때 캐시 위치에 복사되기 때문에 필요합니다. 플러그인 업데이트를 통해 유지되어야 하는 종속성 또는 상태의 경우 [`${CLAUDE_PLUGIN_DATA}`](/ko/plugins-reference#persistent-data-directory)를 대신 사용합니다.

470* **`strict: false`**: 이것이 false로 설정되어 있으므로 플러그인은 자신의 `plugin.json`이 필요하지 않습니다. 마켓플레이스 항목이 모든 것을 정의합니다. 아래의 [Strict 모드](#strict-mode)를 참조하세요.

471 

472### Strict 모드

473 

474`strict` 필드는 `plugin.json`이 구성 요소 정의(skills, 에이전트, hooks, MCP 서버, 출력 스타일)의 권한인지 여부를 제어합니다.

475 

476| 값 | 동작 |

477| :---------- | :---------------------------------------------------------------------------------- |

478| `true`(기본값) | `plugin.json`이 권한입니다. 마켓플레이스 항목은 추가 구성 요소로 이를 보완할 수 있으며 두 소스가 병합됩니다. |

479| `false` | 마켓플레이스 항목이 전체 정의입니다. 플러그인에 구성 요소를 선언하는 `plugin.json`도 있으면 충돌이 발생하고 플러그인이 로드되지 않습니다. |

480 

481**각 모드를 사용할 때:**

482 

483* **`strict: true`**: 플러그인은 자신의 `plugin.json`을 가지고 있으며 자신의 구성 요소를 관리합니다. 마켓플레이스 항목은 맨 위에 추가 skills 또는 hooks를 추가할 수 있습니다. 이것이 기본값이며 대부분의 플러그인에서 작동합니다.

484* **`strict: false`**: 마켓플레이스 운영자가 완전한 제어를 원합니다. 플러그인 저장소는 원본 파일을 제공하고 마켓플레이스 항목은 이러한 파일 중 어느 것이 skills, 에이전트, hooks 등으로 노출되는지 정의합니다. 마켓플레이스가 플러그인 작성자의 의도와 다르게 플러그인의 구성 요소를 재구성하거나 큐레이션할 때 유용합니다.

485 

486## 마켓플레이스 호스팅 및 배포

487 

488### GitHub에서 호스팅(권장)

489 

490GitHub는 가장 쉬운 배포 방법을 제공합니다:

491 

4921. **저장소 생성**: 마켓플레이스를 위한 새 저장소 설정

4932. **마켓플레이스 파일 추가**: 플러그인 정의와 함께 `.claude-plugin/marketplace.json` 생성

4943. **팀과 공유**: 사용자가 `/plugin marketplace add owner/repo`로 마켓플레이스를 추가합니다

495 

496**이점**: 기본 제공 버전 제어, 문제 추적 및 팀 협업 기능.

497 

498### 다른 git 서비스에서 호스팅

499 

500GitLab, Bitbucket 및 자체 호스팅 서버와 같은 모든 git 호스팅 서비스가 작동합니다. 사용자는 전체 저장소 URL로 추가합니다:

501 

502```shell theme={null}

503/plugin marketplace add https://gitlab.com/company/plugins.git

504```

505 

506### 개인 저장소

507 

508Claude Code는 개인 저장소에서 플러그인 설치를 지원합니다. 수동 설치 및 업데이트의 경우 Claude Code는 기존 git 자격 증명 도우미를 사용합니다. 따라서 HTTPS 액세스는 `gh auth login`, macOS Keychain 또는 `git-credential-store`를 통해 터미널에서와 동일하게 작동합니다. SSH 액세스는 호스트가 이미 `known_hosts` 파일에 있고 키가 `ssh-agent`에 로드되어 있는 한 작동합니다. Claude Code는 호스트 지문 및 키 암호에 대한 대화형 SSH 프롬프트를 억제하기 때문입니다.

509 

510백그라운드 자동 업데이트는 대화형 프롬프트가 Claude Code 시작을 차단하므로 자격 증명 도우미 없이 시작 시 실행됩니다. 개인 마켓플레이스에 대한 자동 업데이트를 활성화하려면 환경에서 적절한 인증 토큰을 설정합니다:

511 

512| 공급자 | 환경 변수 | 참고 |

513| :-------- | :--------------------------- | :------------------------- |

514| GitHub | `GITHUB_TOKEN` 또는 `GH_TOKEN` | 개인 액세스 토큰 또는 GitHub App 토큰 |

515| GitLab | `GITLAB_TOKEN` 또는 `GL_TOKEN` | 개인 액세스 토큰 또는 프로젝트 토큰 |

516| Bitbucket | `BITBUCKET_TOKEN` | 앱 비밀번호 또는 저장소 액세스 토큰 |

517 

518셸 구성(예: `.bashrc`, `.zshrc`)에서 토큰을 설정하거나 Claude Code를 실행할 때 전달합니다:

519 

520```bash theme={null}

521export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx

522```

523 

524<Note>

525 CI/CD 환경의 경우 토큰을 비밀 환경 변수로 구성합니다. GitHub Actions는 동일한 조직의 저장소에 대해 자동으로 `GITHUB_TOKEN`을 제공합니다.

526</Note>

527 

528### 배포 전에 로컬에서 테스트

529 

530공유하기 전에 마켓플레이스를 로컬에서 테스트합니다:

531 

532```shell theme={null}

533/plugin marketplace add ./my-local-marketplace

534/plugin install test-plugin@my-local-marketplace

535```

536 

537추가 명령어의 전체 범위(GitHub, Git URL, 로컬 경로, 원격 URL)는 [마켓플레이스 추가](/ko/discover-plugins#add-marketplaces)를 참조하세요.

538 

539### 팀을 위한 마켓플레이스 필수

540 

541프로젝트 폴더를 신뢰할 때 팀 구성원이 자동으로 마켓플레이스를 설치하도록 저장소를 구성할 수 있습니다. 마켓플레이스를 `.claude/settings.json`에 추가합니다:

542 

543```json theme={null}

544{

545 "extraKnownMarketplaces": {

546 "company-tools": {

547 "source": {

548 "source": "github",

549 "repo": "your-org/claude-plugins"

550 }

551 }

552 }

553}

554```

555 

556기본적으로 활성화해야 하는 플러그인을 지정할 수도 있습니다:

557 

558```json theme={null}

559{

560 "enabledPlugins": {

561 "code-formatter@company-tools": true,

562 "deployment-tools@company-tools": true

563 }

564}

565```

566 

567전체 구성 옵션은 [플러그인 설정](/ko/settings#plugin-settings)을 참조하세요.

568 

569<Note>

570 로컬 `directory` 또는 `file` 소스를 상대 경로와 함께 사용하는 경우 경로는 저장소의 주 체크아웃에 대해 해석됩니다. git worktree에서 Claude Code를 실행할 때 경로는 여전히 주 체크아웃을 가리키므로 모든 worktree가 동일한 마켓플레이스 위치를 공유합니다. 마켓플레이스 상태는 프로젝트당이 아니라 사용자당 한 번 `~/.claude/plugins/known_marketplaces.json`에 저장됩니다.

571</Note>

572 

573### 컨테이너에 대한 플러그인 사전 채우기

574 

575컨테이너 이미지 및 CI 환경의 경우 빌드 시간에 플러그인 디렉터리를 사전 채우므로 Claude Code가 런타임에 아무것도 복제하지 않고도 마켓플레이스 및 플러그인이 이미 사용 가능한 상태로 시작됩니다. `CLAUDE_CODE_PLUGIN_SEED_DIR` 환경 변수를 이 디렉터리를 가리키도록 설정합니다.

576 

577여러 시드 디렉터리를 계층화하려면 Unix에서는 `:`로, Windows에서는 `;`로 경로를 구분합니다. Claude Code는 각 디렉터리를 순서대로 검색하고 주어진 마켓플레이스 또는 플러그인 캐시를 포함하는 첫 번째 시드가 우선합니다.

578 

579시드 디렉터리는 `~/.claude/plugins`의 구조를 미러링합니다:

580 

581```

582$CLAUDE_CODE_PLUGIN_SEED_DIR/

583 known_marketplaces.json

584 marketplaces/<name>/...

585 cache/<marketplace>/<plugin>/<version>/...

586```

587 

588시드 디렉터리를 구축하려면 이미지 빌드 중에 Claude Code를 한 번 실행하고, 필요한 플러그인을 설치한 다음, 결과 `~/.claude/plugins` 디렉터리를 이미지에 복사하고 `CLAUDE_CODE_PLUGIN_SEED_DIR`을 가리킵니다.

589 

590복사 단계를 건너뛰려면 빌드 중에 `CLAUDE_CODE_PLUGIN_CACHE_DIR`을 대상 시드 경로로 설정하여 플러그인이 직접 설치되도록 합니다:

591 

592```bash theme={null}

593CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin marketplace add your-org/plugins

594CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin install my-tool@your-plugins

595```

596 

597그런 다음 런타임 환경에서 `CLAUDE_CODE_PLUGIN_SEED_DIR=/opt/claude-seed`를 설정하여 Claude Code가 시작 시 시드에서 읽도록 합니다.

598 

599시작 시 Claude Code는 시드의 `known_marketplaces.json`에서 찾은 마켓플레이스를 기본 구성에 등록하고 `cache/` 아래에서 찾은 플러그인 캐시를 다시 복제하지 않고 사용합니다. 이는 대화형 모드와 `-p` 플래그를 사용한 비대화형 모드 모두에서 작동합니다.

600 

601동작 세부 정보:

602 

603* **읽기 전용**: 시드 디렉터리는 절대 쓰기되지 않습니다. git pull이 읽기 전용 파일 시스템에서 실패하므로 시드 마켓플레이스에 대해 자동 업데이트가 비활성화됩니다.

604* **시드 항목이 우선합니다**: 시드에서 선언된 마켓플레이스는 각 시작 시 사용자 구성의 일치하는 항목을 덮어씁니다. 시드 플러그인을 거부하려면 마켓플레이스를 제거하는 대신 `/plugin disable`을 사용합니다.

605* **경로 해석**: Claude Code는 시드의 JSON 내에 저장된 경로를 신뢰하지 않고 런타임에 `$CLAUDE_CODE_PLUGIN_SEED_DIR/marketplaces/<name>/`을 탐색하여 마켓플레이스 콘텐츠를 찾습니다. 이는 시드가 빌드된 위치와 다른 경로에 마운트된 경우에도 시드가 올바르게 작동함을 의미합니다.

606* **변경 차단**: 시드 관리 마켓플레이스에 대해 `/plugin marketplace remove` 또는 `/plugin marketplace update`를 실행하면 시드 이미지를 업데이트하도록 관리자에게 문의하라는 지침과 함께 실패합니다.

607* **설정과 구성**: `extraKnownMarketplaces` 또는 `enabledPlugins`이 시드에 이미 존재하는 마켓플레이스를 선언하면 Claude Code는 복제하는 대신 시드 복사본을 사용합니다.

608 

609### 관리되는 마켓플레이스 제한

610 

611플러그인 소스에 대한 엄격한 제어가 필요한 조직의 경우 관리자는 관리되는 설정에서 [`strictKnownMarketplaces`](/ko/settings#strictknownmarketplaces) 설정을 사용하여 사용자가 추가할 수 있는 플러그인 마켓플레이스를 제한할 수 있습니다.

612 

613`strictKnownMarketplaces`가 관리되는 설정에서 구성되면 제한 동작은 값에 따라 달라집니다:

614 

615| 값 | 동작 |

616| ------------ | --------------------------------------- |

617| 정의되지 않음(기본값) | 제한 없음. 사용자는 모든 마켓플레이스를 추가할 수 있습니다 |

618| 빈 배열 `[]` | 완전한 잠금. 사용자는 새 마켓플레이스를 추가할 수 없습니다 |

619| 소스 목록 | 사용자는 허용 목록과 정확히 일치하는 마켓플레이스만 추가할 수 있습니다 |

620 

621#### 일반적인 구성

622 

623모든 마켓플레이스 추가 비활성화:

624 

625```json theme={null}

626{

627 "strictKnownMarketplaces": []

628}

629```

630 

631특정 마켓플레이스만 허용:

632 

633```json theme={null}

634{

635 "strictKnownMarketplaces": [

636 {

637 "source": "github",

638 "repo": "acme-corp/approved-plugins"

639 },

640 {

641 "source": "github",

642 "repo": "acme-corp/security-tools",

643 "ref": "v2.0"

644 },

645 {

646 "source": "url",

647 "url": "https://plugins.example.com/marketplace.json"

648 }

649 ]

650}

651```

652 

653호스트에 대한 정규식 패턴 일치를 사용하여 내부 git 서버의 모든 마켓플레이스 허용. 이는 [GitHub Enterprise Server](/ko/github-enterprise-server#plugin-marketplaces-on-ghes) 또는 자체 호스팅 GitLab 인스턴스에 권장되는 방법입니다:

654 

655```json theme={null}

656{

657 "strictKnownMarketplaces": [

658 {

659 "source": "hostPattern",

660 "hostPattern": "^github\\.example\\.com$"

661 }

662 ]

663}

664```

665 

666경로에 대한 정규식 패턴 일치를 사용하여 특정 디렉터리의 파일 시스템 기반 마켓플레이스 허용:

667 

668```json theme={null}

669{

670 "strictKnownMarketplaces": [

671 {

672 "source": "pathPattern",

673 "pathPattern": "^/opt/approved/"

674 }

675 ]

676}

677```

678 

679`pathPattern`으로 모든 파일 시스템 경로를 허용하면서 `hostPattern`으로 네트워크 소스를 제어하려면 `".*"`를 `pathPattern`으로 사용합니다.

680 

681<Note>

682 `strictKnownMarketplaces`는 사용자가 추가할 수 있는 것을 제한하지만 자체적으로 마켓플레이스를 등록하지는 않습니다. 허용된 마켓플레이스를 사용자가 `/plugin marketplace add`를 실행하지 않고도 자동으로 사용 가능하게 하려면 동일한 `managed-settings.json`에서 [`extraKnownMarketplaces`](/ko/settings#extraknownmarketplaces)와 쌍을 이룹니다. [둘 다 함께 사용](/ko/settings#strictknownmarketplaces)을 참조하세요.

683</Note>

684 

685#### 제한 작동 방식

686 

687제한은 네트워크 또는 파일 시스템 작업이 발생하기 전에 확인됩니다. 확인은 마켓플레이스 추가 및 플러그인 설치, 업데이트, 새로고침 및 자동 업데이트 시 실행됩니다. 마켓플레이스가 정책 구성 전에 추가되었고 해당 소스가 더 이상 허용 목록과 일치하지 않으면 Claude Code는 해당 마켓플레이스에서 플러그인을 설치하거나 업데이트하기를 거부합니다. 동일한 적용이 `blockedMarketplaces`에도 적용됩니다.

688 

689허용 목록은 대부분의 소스 유형에 대해 정확한 일치를 사용합니다. 마켓플레이스가 허용되려면 지정된 모든 필드가 정확히 일치해야 합니다:

690 

691* GitHub 소스의 경우: `repo`는 필수이며 허용 목록에 지정된 경우 `ref` 또는 `path`도 일치해야 합니다

692* URL 소스의 경우: 전체 URL이 정확히 일치해야 합니다

693* `hostPattern` 소스의 경우: 마켓플레이스 호스트가 정규식 패턴과 일치합니다

694* `pathPattern` 소스의 경우: 마켓플레이스의 파일 시스템 경로가 정규식 패턴과 일치합니다

695 

696`strictKnownMarketplaces`는 [관리되는 설정](/ko/settings#settings-files)에서 설정되므로 개별 사용자 및 프로젝트 구성은 이러한 제한을 재정의할 수 없습니다.

697 

698전체 구성 세부 정보(지원되는 모든 소스 유형 및 `extraKnownMarketplaces`와의 비교 포함)는 [strictKnownMarketplaces 참조](/ko/settings#strictknownmarketplaces)를 참조하세요.

699 

700### 버전 해석 및 릴리스 채널

701 

702플러그인 버전은 캐시 경로 및 업데이트 감지를 결정합니다. 해석된 버전이 사용자가 이미 가지고 있는 것과 일치하면 `/plugin update` 및 자동 업데이트는 플러그인을 건너뜁니다.

703 

704Claude Code는 다음 중 설정된 첫 번째 항목에서 플러그인의 버전을 해석합니다:

705 

7061. 플러그인의 `plugin.json`의 `version`

7072. 플러그인의 마켓플레이스 항목의 `version`

7083. 플러그인 소스의 git 커밋 SHA

709 

710git 기반 소스 유형 `github`, `url`, `git-subdir` 및 git 호스팅 마켓플레이스 내의 상대 경로의 경우 `version`을 완전히 생략할 수 있으며 모든 새 커밋은 새 버전으로 취급됩니다. 이는 내부 또는 활발하게 개발 중인 플러그인에 대한 가장 간단한 설정입니다.

711 

712<Warning>

713 `version`을 설정하면 플러그인이 고정됩니다. `plugin.json`이 `"version": "1.0.0"`을 선언하면 해당 문자열을 변경하지 않고 새 커밋을 푸시해도 기존 사용자에게는 아무것도 하지 않습니다. Claude Code가 동일한 버전을 보고 캐시된 복사본을 유지하기 때문입니다. 모든 릴리스에서 필드를 범프하거나 커밋 SHA를 사용하도록 생략합니다.

714 

715 `plugin.json` 및 마켓플레이스 항목 모두에서 `version`을 설정하지 마세요. `plugin.json` 값이 항상 자동으로 우선하므로 오래된 매니페스트 버전이 `marketplace.json`에서 설정한 버전을 숨길 수 있습니다.

716</Warning>

717 

718#### 릴리스 채널 설정

719 

720플러그인에 대한 "stable" 및 "latest" 릴리스 채널을 지원하려면 동일한 저장소의 다양한 refs 또는 SHA를 가리키는 두 개의 마켓플레이스를 설정할 수 있습니다. 그런 다음 [관리되는 설정](/ko/settings#settings-files)을 통해 두 마켓플레이스를 다양한 사용자 그룹에 할당할 수 있습니다.

721 

722<Warning>

723 각 채널은 다른 버전으로 해석되어야 합니다. 명시적 버전을 사용하는 경우 `plugin.json`은 각 고정된 ref에서 다른 `version`을 선언해야 합니다. `version`을 생략하면 서로 다른 커밋 SHA가 이미 채널을 구분합니다. 두 refs가 동일한 버전 문자열로 해석되면 Claude Code는 이들을 동일한 것으로 취급하고 업데이트를 건너뜁니다.

724</Warning>

725 

726##### 예제

727 

728```json theme={null}

729{

730 "name": "stable-tools",

731 "plugins": [

732 {

733 "name": "code-formatter",

734 "source": {

735 "source": "github",

736 "repo": "acme-corp/code-formatter",

737 "ref": "stable"

738 }

739 }

740 ]

741}

742```

743 

744```json theme={null}

745{

746 "name": "latest-tools",

747 "plugins": [

748 {

749 "name": "code-formatter",

750 "source": {

751 "source": "github",

752 "repo": "acme-corp/code-formatter",

753 "ref": "latest"

754 }

755 }

756 ]

757}

758```

759 

760##### 사용자 그룹에 채널 할당

761 

762관리되는 설정을 통해 각 마켓플레이스를 적절한 사용자 그룹에 할당합니다. 예를 들어 stable 그룹은 다음을 받습니다:

763 

764```json theme={null}

765{

766 "extraKnownMarketplaces": {

767 "stable-tools": {

768 "source": {

769 "source": "github",

770 "repo": "acme-corp/stable-tools"

771 }

772 }

773 }

774}

775```

776 

777early-access 그룹은 대신 `latest-tools`를 받습니다:

778 

779```json theme={null}

780{

781 "extraKnownMarketplaces": {

782 "latest-tools": {

783 "source": {

784 "source": "github",

785 "repo": "acme-corp/latest-tools"

786 }

787 }

788 }

789}

790```

791 

792#### 의존성 버전 고정

793 

794플러그인은 의존성에 대한 semver 범위를 제한하여 의존성 업데이트가 종속 플러그인을 손상시키지 않도록 할 수 있습니다. `{plugin-name}--v{version}` git 태그 규칙, 범위 구문 및 동일한 의존성에 대한 여러 제약 조건이 어떻게 결합되는지에 대해서는 [플러그인 의존성 버전 제한](/ko/plugin-dependencies)을 참조하세요.

795 

796## 검증 및 테스트

797 

798공유하기 전에 마켓플레이스를 테스트합니다.

799 

800마켓플레이스 JSON 구문 검증:

801 

802```bash theme={null}

803claude plugin validate .

804```

805 

806또는 Claude Code 내에서:

807 

808```shell theme={null}

809/plugin validate .

810```

811 

812테스트를 위해 마켓플레이스 추가:

813 

814```shell theme={null}

815/plugin marketplace add ./path/to/marketplace

816```

817 

818모든 것이 작동하는지 확인하기 위해 테스트 플러그인 설치:

819 

820```shell theme={null}

821/plugin install test-plugin@marketplace-name

822```

823 

824전체 플러그인 테스트 워크플로우는 [플러그인을 로컬에서 테스트](/ko/plugins#test-your-plugins-locally)를 참조하세요. 기술적 문제 해결은 [플러그인 참조](/ko/plugins-reference)를 참조하세요.

825 

826## CLI에서 마켓플레이스 관리

827 

828Claude Code는 스크립팅 및 자동화를 위한 비대화형 `claude plugin marketplace` 하위 명령어를 제공합니다. 이는 대화형 세션 내에서 사용 가능한 `/plugin marketplace` 명령어와 동일합니다.

829 

830### 플러그인 마켓플레이스 추가

831 

832GitHub 저장소, git URL, 원격 URL 또는 로컬 경로에서 마켓플레이스를 추가합니다.

833 

834```bash theme={null}

835claude plugin marketplace add <source> [options]

836```

837 

838**인수:**

839 

840* `<source>`: GitHub `owner/repo` 단축형, git URL, `marketplace.json` 파일에 대한 원격 URL 또는 로컬 디렉터리 경로. 분기 또는 태그에 고정하려면 GitHub 단축형에 `@ref`를 추가하거나 git URL에 `#ref`를 추가합니다

841 

842**옵션:**

843 

844| 옵션 | 설명 | 기본값 |

845| :-------------------- | :-------------------------------------------------------------------------------------------------------------- | :----- |

846| `--scope <scope>` | 마켓플레이스를 선언할 위치: `user`, `project` 또는 `local`. [플러그인 설치 범위](/ko/plugins-reference#plugin-installation-scopes) 참조 | `user` |

847| `--sparse <paths...>` | git sparse-checkout을 통해 특정 디렉터리로 체크아웃 제한. 모노레포에 유용 | |

848 

849GitHub에서 `owner/repo` 단축형을 사용하여 마켓플레이스 추가:

850 

851```bash theme={null}

852claude plugin marketplace add acme-corp/claude-plugins

853```

854 

855`@ref`를 사용하여 특정 분기 또는 태그에 고정:

856 

857```bash theme={null}

858claude plugin marketplace add acme-corp/claude-plugins@v2.0

859```

860 

861비 GitHub 호스트의 git URL에서 추가:

862 

863```bash theme={null}

864claude plugin marketplace add https://gitlab.example.com/team/plugins.git

865```

866 

867`marketplace.json` 파일을 직접 제공하는 원격 URL에서 추가:

868 

869```bash theme={null}

870claude plugin marketplace add https://example.com/marketplace.json

871```

872 

873테스트를 위해 로컬 디렉터리에서 추가:

874 

875```bash theme={null}

876claude plugin marketplace add ./my-marketplace

877```

878 

879마켓플레이스를 프로젝트 범위에서 선언하여 `.claude/settings.json`을 통해 팀과 공유:

880 

881```bash theme={null}

882claude plugin marketplace add acme-corp/claude-plugins --scope project

883```

884 

885모노레포의 경우 플러그인 콘텐츠를 포함하는 디렉터리로 체크아웃 제한:

886 

887```bash theme={null}

888claude plugin marketplace add acme-corp/monorepo --sparse .claude-plugin plugins

889```

890 

891### 플러그인 마켓플레이스 목록

892 

893구성된 모든 마켓플레이스를 나열합니다.

894 

895```bash theme={null}

896claude plugin marketplace list [options]

897```

898 

899**옵션:**

900 

901| 옵션 | 설명 |

902| :------- | :-------- |

903| `--json` | JSON으로 출력 |

904 

905### 플러그인 마켓플레이스 제거

906 

907구성된 마켓플레이스를 제거합니다. 별칭 `rm`도 허용됩니다.

908 

909```bash theme={null}

910claude plugin marketplace remove <name>

911```

912 

913**인수:**

914 

915* `<name>`: `claude plugin marketplace list`에 표시된 마켓플레이스 이름을 제거합니다. 이는 `add`에 전달한 소스가 아니라 `marketplace.json`의 `name`입니다

916 

917<Warning>

918 마켓플레이스를 제거하면 해당 마켓플레이스에서 설치한 모든 플러그인도 제거됩니다. 설치된 플러그인을 잃지 않고 마켓플레이스를 새로 고치려면 `claude plugin marketplace update`를 대신 사용합니다.

919</Warning>

920 

921### 플러그인 마켓플레이스 업데이트

922 

923소스에서 마켓플레이스를 새로 고쳐 새 플러그인 및 버전 변경을 검색합니다.

924 

925```bash theme={null}

926claude plugin marketplace update [name]

927```

928 

929**인수:**

930 

931* `[name]`: `claude plugin marketplace list`에 표시된 마켓플레이스 이름을 업데이트합니다. 생략하면 모든 마켓플레이스를 업데이트합니다

932 

933`remove`와 `update` 모두 시드 관리 마켓플레이스에 대해 실행할 때 실패합니다. 이는 읽기 전용입니다. 모든 마켓플레이스를 업데이트할 때 시드 관리 항목은 건너뛰고 다른 마켓플레이스는 여전히 업데이트됩니다. 시드 제공 플러그인을 변경하려면 관리자에게 시드 이미지를 업데이트하도록 요청합니다. [컨테이너에 대한 플러그인 사전 채우기](#pre-populate-plugins-for-containers)를 참조하세요.

934 

935## 문제 해결

936 

937### 마켓플레이스가 로드되지 않음

938 

939**증상**: 마켓플레이스를 추가할 수 없거나 플러그인을 볼 수 없습니다

940 

941**해결책**:

942 

943* 마켓플레이스 URL이 액세스 가능한지 확인합니다

944* `.claude-plugin/marketplace.json`이 지정된 경로에 있는지 확인합니다

945* `claude plugin validate` 또는 `/plugin validate`를 사용하여 JSON 구문이 유효하고 frontmatter가 잘 형성되었는지 확인합니다

946* 개인 저장소의 경우 액세스 권한이 있는지 확인합니다

947 

948### 마켓플레이스 검증 오류

949 

950마켓플레이스 디렉터리에서 `claude plugin validate .` 또는 `/plugin validate .`를 실행하여 문제를 확인합니다. 검증자는 `plugin.json`, skill/agent/command frontmatter 및 `hooks/hooks.json`에서 구문 및 스키마 오류를 확인합니다. 일반적인 오류:

951 

952| 오류 | 원인 | 해결책 |

953| :------------------------------------------------ | :---------------------------------- | :----------------------------------------------------------------- |

954| `File not found: .claude-plugin/marketplace.json` | 누락된 매니페스트 | 필수 필드를 사용하여 `.claude-plugin/marketplace.json` 생성 |

955| `Invalid JSON syntax: Unexpected token...` | marketplace.json의 JSON 구문 오류 | 누락된 쉼표, 추가 쉼표 또는 인용되지 않은 문자열 확인 |

956| `Duplicate plugin name "x" found in marketplace` | 두 플러그인이 동일한 이름을 공유합니다 | 각 플러그인에 고유한 `name` 값 지정 |

957| `plugins[0].source: Path contains ".."` | 소스 경로에 `..` 포함 | 마켓플레이스 루트에 상대적인 경로를 `..` 없이 사용합니다. [상대 경로](#relative-paths) 참조 |

958| `YAML frontmatter failed to parse: ...` | skill, agent 또는 command 파일의 YAML 무효 | frontmatter 블록의 YAML 구문을 수정합니다. 런타임에 이 파일은 메타데이터 없이 로드됩니다. |

959| `Invalid JSON syntax: ...` (hooks.json) | 형식이 잘못된 `hooks/hooks.json` | JSON 구문을 수정합니다. 형식이 잘못된 `hooks/hooks.json`은 전체 플러그인이 로드되지 않도록 합니다. |

960 

961**경고**(차단하지 않음):

962 

963* `Marketplace has no plugins defined`: `plugins` 배열에 최소한 하나의 플러그인 추가

964* `No marketplace description provided`: 사용자가 마켓플레이스를 이해하도록 돕기 위해 최상위 `description` 추가

965* `Plugin name "x" is not kebab-case`: 플러그인 이름에 대문자, 공백 또는 특수 문자가 포함되어 있습니다. 소문자, 숫자 및 하이픈만 사용하도록 이름을 바꿉니다(예: `my-plugin`). Claude Code는 다른 형식을 허용하지만 Claude.ai 마켓플레이스 동기화는 이를 거부합니다.

966 

967### 플러그인 설치 실패

968 

969**증상**: 마켓플레이스가 나타나지만 플러그인 설치가 실패합니다

970 

971**해결책**:

972 

973* 플러그인 소스 URL이 액세스 가능한지 확인합니다

974* 플러그인 디렉터리에 필수 파일이 포함되어 있는지 확인합니다

975* GitHub 소스의 경우 저장소가 공개이거나 액세스 권한이 있는지 확인합니다

976* 플러그인 소스를 수동으로 복제/다운로드하여 테스트합니다

977 

978### 개인 저장소 인증 실패

979 

980**증상**: 개인 저장소에서 플러그인을 설치할 때 인증 오류

981 

982**해결책**:

983 

984수동 설치 및 업데이트의 경우:

985 

986* git 공급자로 인증되었는지 확인합니다(예: GitHub의 경우 `gh auth status` 실행).

987* 자격 증명 도우미가 올바르게 구성되었는지 확인합니다: `git config --global credential.helper`

988* 저장소를 수동으로 복제하여 자격 증명이 작동하는지 확인합니다

989 

990백그라운드 자동 업데이트의 경우:

991 

992* 환경에서 적절한 토큰이 설정되었는지 확인합니다: `echo $GITHUB_TOKEN`

993* 토큰에 필수 권한이 있는지 확인합니다(저장소에 대한 읽기 액세스)

994* GitHub의 경우 토큰에 개인 저장소에 대한 `repo` 범위가 있는지 확인합니다

995* GitLab의 경우 토큰에 최소한 `read_repository` 범위가 있는지 확인합니다

996* 토큰이 만료되지 않았는지 확인합니다

997 

998### 마켓플레이스 업데이트가 오프라인 환경에서 실패합니다

999 

1000**증상**: 마켓플레이스 `git pull`이 실패하고 Claude Code가 기존 캐시를 삭제하여 플러그인을 사용할 수 없게 됩니다.

1001 

1002**원인**: 기본적으로 `git pull`이 실패하면 Claude Code는 오래된 복제본을 제거하고 다시 복제를 시도합니다. 오프라인 또는 에어갭 환경에서 다시 복제가 동일한 방식으로 실패하여 마켓플레이스 디렉터리가 비어 있게 됩니다.

1003 

1004**해결책**: `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1`을 설정하여 pull이 실패할 때 기존 캐시를 삭제하는 대신 유지합니다:

1005 

1006```bash theme={null}

1007export CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1

1008```

1009 

1010이 변수가 설정되면 Claude Code는 `git pull` 실패 시 오래된 마켓플레이스 복제본을 유지하고 마지막으로 알려진 좋은 상태를 계속 사용합니다. 저장소에 절대 도달할 수 없는 완전히 오프라인 배포의 경우 대신 [`CLAUDE_CODE_PLUGIN_SEED_DIR`](#pre-populate-plugins-for-containers)을 사용하여 빌드 시간에 플러그인 디렉터리를 사전 채웁니다.

1011 

1012### Git 작업 시간 초과

1013 

1014**증상**: 플러그인 설치 또는 마켓플레이스 업데이트가 "Git clone timed out after 120s" 또는 "Git pull timed out after 120s"와 같은 시간 초과 오류로 실패합니다.

1015 

1016**원인**: Claude Code는 플러그인 저장소 복제 및 마켓플레이스 업데이트 끌어오기를 포함한 모든 git 작업에 120초 시간 초과를 사용합니다. 대규모 저장소 또는 느린 네트워크 연결이 이 제한을 초과할 수 있습니다.

1017 

1018**해결책**: `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` 환경 변수를 사용하여 시간 초과를 늘립니다. 값은 밀리초 단위입니다:

1019 

1020```bash theme={null}

1021export CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS=300000 # 5분

1022```

1023 

1024### 상대 경로가 있는 플러그인이 URL 기반 마켓플레이스에서 실패합니다

1025 

1026**증상**: URL을 통해 마켓플레이스를 추가했습니다(예: `https://example.com/marketplace.json`). 하지만 `"./plugins/my-plugin"`과 같은 상대 경로 소스가 있는 플러그인이 "path not found" 오류로 설치되지 않습니다.

1027 

1028**원인**: URL 기반 마켓플레이스는 `marketplace.json` 파일 자체만 다운로드합니다. 서버에서 플러그인 파일을 다운로드하지 않습니다. 마켓플레이스 항목의 상대 경로는 다운로드되지 않은 원격 서버의 파일을 참조합니다.

1029 

1030**해결책**:

1031 

1032* **외부 소스 사용**: 플러그인 항목을 상대 경로 대신 GitHub, npm 또는 git URL 소스를 사용하도록 변경합니다:

1033 ```json theme={null}

1034 { "name": "my-plugin", "source": { "source": "github", "repo": "owner/repo" } }

1035 ```

1036* **Git 기반 마켓플레이스 사용**: 마켓플레이스를 Git 저장소에서 호스팅하고 git URL로 추가합니다. Git 기반 마켓플레이스는 전체 저장소를 복제하므로 상대 경로가 올바르게 작동합니다.

1037 

1038### 설치 후 파일을 찾을 수 없음

1039 

1040**증상**: 플러그인이 설치되지만 파일 참조가 실패합니다. 특히 플러그인 디렉터리 외부의 파일

1041 

1042**원인**: 플러그인은 제자리에 사용되지 않고 캐시 디렉터리에 복사됩니다. 플러그인 디렉터리 외부의 파일을 참조하는 경로(예: `../shared-utils`)는 해당 파일이 복사되지 않기 때문에 작동하지 않습니다.

1043 

1044**해결책**: symlink 및 디렉터리 재구성을 포함한 해결 방법은 [플러그인 캐싱 및 파일 해석](/ko/plugins-reference#plugin-caching-and-file-resolution)을 참조하세요.

1045 

1046추가 디버깅 도구 및 일반적인 문제는 [디버깅 및 개발 도구](/ko/plugins-reference#debugging-and-development-tools)를 참조하세요.

1047 

1048## 참고 항목

1049 

1050* [미리 빌드된 플러그인 검색 및 설치](/ko/discover-plugins) - 기존 마켓플레이스에서 플러그인 설치

1051* [플러그인](/ko/plugins) - 자신의 플러그인 생성

1052* [플러그인 참조](/ko/plugins-reference) - 완전한 기술 사양 및 스키마

1053* [플러그인 설정](/ko/settings#plugin-settings) - 플러그인 구성 옵션

1054* [strictKnownMarketplaces 참조](/ko/settings#strictknownmarketplaces) - 관리되는 마켓플레이스 제한

plugins.md +454 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 플러그인 만들기

6 

7> skills, agents, hooks, MCP servers를 사용하여 Claude Code를 확장하는 사용자 정의 플러그인을 만듭니다.

8 

9플러그인을 사용하면 프로젝트와 팀 전체에서 공유할 수 있는 사용자 정의 기능으로 Claude Code를 확장할 수 있습니다. 이 가이드에서는 skills, agents, hooks, MCP servers를 사용하여 자신의 플러그인을 만드는 방법을 다룹니다.

10 

11기존 플러그인을 설치하려고 하시나요? [플러그인 발견 및 설치](/ko/discover-plugins)를 참조하세요. 완전한 기술 사양은 [플러그인 참조](/ko/plugins-reference)를 참조하세요.

12 

13## 플러그인 대 독립 실행형 구성 사용 시기

14 

15Claude Code는 사용자 정의 skills, agents, hooks를 추가하는 두 가지 방법을 지원합니다:

16 

17| 접근 방식 | Skill 이름 | 최적 용도 |

18| :----------------------------------------------- | :------------------- | :-------------------------------------- |

19| **독립 실행형** (`.claude/` 디렉토리) | `/hello` | 개인 워크플로우, 프로젝트별 사용자 정의, 빠른 실험 |

20| **플러그인** (`.claude-plugin/plugin.json`이 있는 디렉토리) | `/plugin-name:hello` | 팀원과 공유, 커뮤니티에 배포, 버전 관리 릴리스, 프로젝트 간 재사용 |

21 

22**다음의 경우 독립 실행형 구성을 사용하세요**:

23 

24* 단일 프로젝트에 대해 Claude Code를 사용자 정의하는 경우

25* 구성이 개인적이며 공유할 필요가 없는 경우

26* skills 또는 hooks를 패키징하기 전에 실험하는 경우

27* `/hello` 또는 `/deploy`와 같은 짧은 skill 이름을 원하는 경우

28 

29**다음의 경우 플러그인을 사용하세요**:

30 

31* 팀 또는 커뮤니티와 기능을 공유하려는 경우

32* 여러 프로젝트에서 동일한 skills/agents가 필요한 경우

33* 확장 기능에 대한 버전 제어 및 쉬운 업데이트를 원하는 경우

34* 마켓플레이스를 통해 배포하는 경우

35* `/my-plugin:hello`와 같은 네임스페이스 skills를 사용해도 괜찮은 경우 (네임스페이싱은 플러그인 간 충돌을 방지합니다)

36 

37<Tip>

38 빠른 반복을 위해 `.claude/`의 독립 실행형 구성으로 시작한 다음, 공유할 준비가 되면 [기존 구성을 플러그인으로 변환](#convert-existing-configurations-to-plugins)하세요.

39</Tip>

40 

41## 빠른 시작

42 

43이 빠른 시작은 사용자 정의 skill을 사용하여 플러그인을 만드는 과정을 안내합니다. 매니페스트(플러그인을 정의하는 구성 파일)를 만들고, skill을 추가하고, `--plugin-dir` 플래그를 사용하여 로컬에서 테스트합니다.

44 

45### 필수 조건

46 

47* Claude Code [설치 및 인증](/ko/quickstart#step-1-install-claude-code)

48 

49<Note>

50 `/plugin` 명령이 보이지 않으면 Claude Code를 최신 버전으로 업데이트하세요. 업그레이드 지침은 [문제 해결](/ko/troubleshooting)을 참조하세요.

51</Note>

52 

53### 첫 번째 플러그인 만들기

54 

55<Steps>

56 <Step title="플러그인 디렉토리 만들기">

57 모든 플러그인은 매니페스트와 skills, agents 또는 hooks를 포함하는 자체 디렉토리에 있습니다. 지금 만들어보세요:

58 

59 ```bash theme={null}

60 mkdir my-first-plugin

61 ```

62 </Step>

63 

64 <Step title="플러그인 매니페스트 만들기">

65 `.claude-plugin/plugin.json`의 매니페스트 파일은 플러그인의 정체성을 정의합니다: 이름, 설명, 버전. Claude Code는 이 메타데이터를 사용하여 플러그인 관리자에서 플러그인을 표시합니다.

66 

67 플러그인 폴더 내에 `.claude-plugin` 디렉토리를 만듭니다:

68 

69 ```bash theme={null}

70 mkdir my-first-plugin/.claude-plugin

71 ```

72 

73 그런 다음 다음 내용으로 `my-first-plugin/.claude-plugin/plugin.json`을 만듭니다:

74 

75 ```json my-first-plugin/.claude-plugin/plugin.json theme={null}

76 {

77 "name": "my-first-plugin",

78 "description": "A greeting plugin to learn the basics",

79 "version": "1.0.0",

80 "author": {

81 "name": "Your Name"

82 }

83 }

84 ```

85 

86 | 필드 | 목적 |

87 | :------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- |

88 | `name` | 고유 식별자 및 skill 네임스페이스. Skills는 이것으로 접두사가 붙습니다 (예: `/my-first-plugin:hello`). |

89 | `description` | 플러그인을 검색하거나 설치할 때 플러그인 관리자에 표시됩니다. |

90 | `version` | 선택 사항. 설정된 경우 사용자는 이 필드를 변경할 때만 업데이트를 받습니다. 생략되고 플러그인이 git을 통해 배포되는 경우 커밋 SHA가 사용되며 모든 커밋이 새 버전으로 계산됩니다. [버전 관리](/ko/plugins-reference#version-management)를 참조하세요. |

91 | `author` | 선택 사항. 속성에 유용합니다. |

92 

93 `homepage`, `repository`, `license`와 같은 추가 필드는 [전체 매니페스트 스키마](/ko/plugins-reference#plugin-manifest-schema)를 참조하세요.

94 </Step>

95 

96 <Step title="Skill 추가">

97 Skills는 `skills/` 디렉토리에 있습니다. 각 skill은 `SKILL.md` 파일을 포함하는 폴더입니다. 폴더 이름은 skill 이름이 되며, 플러그인의 네임스페이스가 접두사로 붙습니다 (`my-first-plugin`이라는 플러그인의 `hello/`는 `/my-first-plugin:hello`를 만듭니다).

98 

99 플러그인 폴더에 skill 디렉토리를 만듭니다:

100 

101 ```bash theme={null}

102 mkdir -p my-first-plugin/skills/hello

103 ```

104 

105 그런 다음 다음 내용으로 `my-first-plugin/skills/hello/SKILL.md`를 만듭니다:

106 

107 ```markdown my-first-plugin/skills/hello/SKILL.md theme={null}

108 ---

109 description: Greet the user with a friendly message

110 disable-model-invocation: true

111 ---

112 

113 Greet the user warmly and ask how you can help them today.

114 ```

115 </Step>

116 

117 <Step title="플러그인 테스트">

118 `--plugin-dir` 플래그를 사용하여 Claude Code를 실행하여 플러그인을 로드합니다:

119 

120 ```bash theme={null}

121 claude --plugin-dir ./my-first-plugin

122 ```

123 

124 Claude Code가 시작되면 새 skill을 시도해보세요:

125 

126 ```shell theme={null}

127 /my-first-plugin:hello

128 ```

129 

130 Claude가 인사말로 응답하는 것을 볼 수 있습니다. `/help`를 실행하여 플러그인 네임스페이스 아래에 나열된 skill을 확인하세요.

131 

132 <Note>

133 **네임스페이싱이 필요한 이유?** 플러그인 skills는 항상 네임스페이스가 지정됩니다 (예: `/my-first-plugin:hello`). 여러 플러그인이 동일한 이름의 skills를 가질 때 충돌을 방지합니다.

134 

135 네임스페이스 접두사를 변경하려면 `plugin.json`의 `name` 필드를 업데이트하세요.

136 </Note>

137 </Step>

138 

139 <Step title="Skill 인수 추가">

140 사용자 입력을 수락하여 skill을 동적으로 만듭니다. `$ARGUMENTS` 자리 표시자는 사용자가 skill 이름 뒤에 제공하는 모든 텍스트를 캡처합니다.

141 

142 `SKILL.md` 파일을 업데이트합니다:

143 

144 ```markdown my-first-plugin/skills/hello/SKILL.md theme={null}

145 ---

146 description: Greet the user with a personalized message

147 ---

148 

149 # Hello Skill

150 

151 Greet the user named "$ARGUMENTS" warmly and ask how you can help them today. Make the greeting personal and encouraging.

152 ```

153 

154 `/reload-plugins`를 실행하여 변경 사항을 적용한 다음 이름으로 skill을 시도해보세요:

155 

156 ```shell theme={null}

157 /my-first-plugin:hello Alex

158 ```

159 

160 Claude가 이름으로 인사할 것입니다. skills에 인수를 전달하는 방법에 대한 자세한 내용은 [Skills](/ko/skills#pass-arguments-to-skills)를 참조하세요.

161 </Step>

162</Steps>

163 

164다음과 같은 주요 구성 요소로 플러그인을 성공적으로 만들고 테스트했습니다:

165 

166* **플러그인 매니페스트** (`.claude-plugin/plugin.json`): 플러그인의 메타데이터를 설명합니다

167* **Skills 디렉토리** (`skills/`): 사용자 정의 skills를 포함합니다

168* **Skill 인수** (`$ARGUMENTS`): 동적 동작을 위해 사용자 입력을 캡처합니다

169 

170<Tip>

171 `--plugin-dir` 플래그는 개발 및 테스트에 유용합니다. 플러그인을 다른 사람과 공유할 준비가 되면 [플러그인 마켓플레이스 만들기 및 배포](/ko/plugin-marketplaces)를 참조하세요.

172</Tip>

173 

174## 플러그인 구조 개요

175 

176skills를 사용하여 플러그인을 만들었지만, 플러그인에는 훨씬 더 많은 것이 포함될 수 있습니다: 사용자 정의 agents, hooks, MCP servers, LSP servers, 백그라운드 모니터.

177 

178<Warning>

179 **일반적인 실수**: `commands/`, `agents/`, `skills/`, `hooks/`를 `.claude-plugin/` 디렉토리 내에 넣지 마세요. `.claude-plugin/` 내에는 `plugin.json`만 들어갑니다. 다른 모든 디렉토리는 플러그인 루트 수준에 있어야 합니다.

180</Warning>

181 

182| 디렉토리 | 위치 | 목적 |

183| :---------------- | :------ | :------------------------------------------------------- |

184| `.claude-plugin/` | 플러그인 루트 | `plugin.json` 매니페스트를 포함합니다 (구성 요소가 기본 위치를 사용하는 경우 선택 사항) |

185| `skills/` | 플러그인 루트 | `<name>/SKILL.md` 디렉토리로서의 Skills |

186| `commands/` | 플러그인 루트 | Markdown 파일로서의 Skills. 새 플러그인의 경우 `skills/`를 사용하세요 |

187| `agents/` | 플러그인 루트 | 사용자 정의 agent 정의 |

188| `hooks/` | 플러그인 루트 | `hooks.json`의 이벤트 핸들러 |

189| `.mcp.json` | 플러그인 루트 | MCP server 구성 |

190| `.lsp.json` | 플러그인 루트 | 코드 인텔리전스를 위한 LSP server 구성 |

191| `monitors/` | 플러그인 루트 | `monitors.json`의 백그라운드 모니터 구성 |

192| `bin/` | 플러그인 루트 | 플러그인이 활성화된 동안 Bash tool의 `PATH`에 추가되는 실행 파일 |

193| `settings.json` | 플러그인 루트 | 플러그인이 활성화될 때 적용되는 기본 [설정](/ko/settings) |

194 

195<Note>

196 **다음 단계**: 더 많은 기능을 추가할 준비가 되셨나요? [더 복잡한 플러그인 개발](#develop-more-complex-plugins)로 이동하여 agents, hooks, MCP servers, LSP servers를 추가하세요. 모든 플러그인 구성 요소의 완전한 기술 사양은 [플러그인 참조](/ko/plugins-reference)를 참조하세요.

197</Note>

198 

199## 더 복잡한 플러그인 개발

200 

201기본 플러그인에 익숙해지면 더 정교한 확장 기능을 만들 수 있습니다.

202 

203### 플러그인에 Skills 추가

204 

205플러그인은 Claude의 기능을 확장하기 위해 [Agent Skills](/ko/skills)를 포함할 수 있습니다. Skills는 모델 호출입니다: Claude는 작업 컨텍스트에 따라 자동으로 사용합니다.

206 

207플러그인 루트에 `SKILL.md` 파일을 포함하는 Skill 폴더가 있는 `skills/` 디렉토리를 추가합니다:

208 

209```text theme={null}

210my-plugin/

211├── .claude-plugin/

212│ └── plugin.json

213└── skills/

214 └── code-review/

215 └── SKILL.md

216```

217 

218각 `SKILL.md`는 YAML 프론트매터와 지침을 포함합니다. Claude가 skill을 언제 사용할지 알 수 있도록 `description`을 포함하세요:

219 

220```yaml theme={null}

221---

222description: Reviews code for best practices and potential issues. Use when reviewing code, checking PRs, or analyzing code quality.

223---

224 

225When reviewing code, check for:

2261. Code organization and structure

2272. Error handling

2283. Security concerns

2294. Test coverage

230```

231 

232플러그인을 설치한 후 `/reload-plugins`를 실행하여 Skills를 로드합니다. 점진적 공개 및 도구 제한을 포함한 완전한 Skill 작성 지침은 [Agent Skills](/ko/skills)를 참조하세요.

233 

234### 플러그인에 LSP servers 추가

235 

236<Tip>

237 TypeScript, Python, Rust와 같은 일반적인 언어의 경우 공식 마켓플레이스에서 미리 빌드된 LSP 플러그인을 설치하세요. 이미 다루어진 언어가 아닌 언어에 대한 지원이 필요한 경우에만 사용자 정의 LSP 플러그인을 만드세요.

238</Tip>

239 

240LSP (Language Server Protocol) 플러그인은 Claude에 실시간 코드 인텔리전스를 제공합니다. 아직 공식 LSP 플러그인이 없는 언어를 지원해야 하는 경우 플러그인에 `.lsp.json` 파일을 추가하여 자신의 플러그인을 만들 수 있습니다:

241 

242```json .lsp.json theme={null}

243{

244 "go": {

245 "command": "gopls",

246 "args": ["serve"],

247 "extensionToLanguage": {

248 ".go": "go"

249 }

250 }

251}

252```

253 

254플러그인을 설치하는 사용자는 자신의 머신에 언어 server 바이너리를 설치해야 합니다.

255 

256완전한 LSP 구성 옵션은 [LSP servers](/ko/plugins-reference#lsp-servers)를 참조하세요.

257 

258### 플러그인에 백그라운드 모니터 추가

259 

260백그라운드 모니터를 사용하면 플러그인이 로그, 파일 또는 외부 상태를 백그라운드에서 감시하고 이벤트가 도착할 때 Claude에 알릴 수 있습니다. Claude Code는 플러그인이 활성화될 때 각 모니터를 자동으로 시작하므로 Claude에 감시를 시작하도록 지시할 필요가 없습니다.

261 

262플러그인 루트에 `monitors/monitors.json` 파일을 추가하고 모니터 항목의 배열을 포함합니다:

263 

264```json monitors/monitors.json theme={null}

265[

266 {

267 "name": "error-log",

268 "command": "tail -F ./logs/error.log",

269 "description": "Application error log"

270 }

271]

272```

273 

274`command`의 각 stdout 줄은 세션 중에 Claude에 알림으로 전달됩니다. `when` 트리거 및 변수 대체를 포함한 전체 스키마는 [Monitors](/ko/plugins-reference#monitors)를 참조하세요.

275 

276### 플러그인과 함께 기본 설정 제공

277 

278플러그인은 플러그인 루트에 `settings.json` 파일을 포함하여 플러그인이 활성화될 때 기본 구성을 적용할 수 있습니다. 현재 `agent` 및 `subagentStatusLine` 키만 지원됩니다.

279 

280`agent`를 설정하면 플러그인의 [사용자 정의 agents](/ko/sub-agents) 중 하나를 주 스레드로 활성화하여 시스템 프롬프트, 도구 제한, 모델을 적용합니다. 이를 통해 플러그인은 활성화될 때 Claude Code의 동작 방식을 기본적으로 변경할 수 있습니다.

281 

282```json settings.json theme={null}

283{

284 "agent": "security-reviewer"

285}

286```

287 

288이 예제는 플러그인의 `agents/` 디렉토리에 정의된 `security-reviewer` agent를 활성화합니다. `settings.json`의 설정은 `plugin.json`에 선언된 `settings`보다 우선합니다. 알 수 없는 키는 자동으로 무시됩니다.

289 

290### 복잡한 플러그인 구성

291 

292많은 구성 요소가 있는 플러그인의 경우 기능별로 디렉토리 구조를 구성합니다. 완전한 디렉토리 레이아웃 및 구성 패턴은 [플러그인 디렉토리 구조](/ko/plugins-reference#plugin-directory-structure)를 참조하세요.

293 

294### 플러그인을 로컬에서 테스트

295 

296개발 중에 플러그인을 테스트하려면 `--plugin-dir` 플래그를 사용합니다. 이는 설치를 요구하지 않고 플러그인을 직접 로드합니다.

297 

298```bash theme={null}

299claude --plugin-dir ./my-plugin

300```

301 

302`--plugin-dir` 플러그인이 설치된 마켓플레이스 플러그인과 동일한 이름을 가진 경우 로컬 복사본이 해당 세션에 우선합니다. 이를 통해 먼저 제거하지 않고도 이미 설치한 플러그인의 변경 사항을 테스트할 수 있습니다. 관리 설정에 의해 강제로 활성화된 마켓플레이스 플러그인은 유일한 예외이며 재정의할 수 없습니다.

303 

304플러그인을 변경할 때 `/reload-plugins`를 실행하여 다시 시작하지 않고 업데이트를 적용합니다. 이는 플러그인, skills, agents, hooks, 플러그인 MCP servers, 플러그인 LSP servers를 다시 로드합니다. 플러그인 구성 요소를 테스트합니다:

305 

306* `/plugin-name:skill-name`으로 skills를 시도해보세요

307* agents가 `/agents`에 나타나는지 확인하세요

308* hooks가 예상대로 작동하는지 확인하세요

309 

310<Tip>

311 플래그를 여러 번 지정하여 한 번에 여러 플러그인을 로드할 수 있습니다:

312 

313 ```bash theme={null}

314 claude --plugin-dir ./plugin-one --plugin-dir ./plugin-two

315 ```

316</Tip>

317 

318### 플러그인 문제 디버깅

319 

320플러그인이 예상대로 작동하지 않는 경우:

321 

3221. **구조 확인**: 디렉토리가 `.claude-plugin/` 내부가 아닌 플러그인 루트에 있는지 확인하세요

3232. **구성 요소를 개별적으로 테스트**: 각 skill, agent, hook을 별도로 확인하세요

3243. **검증 및 디버깅 도구 사용**: CLI 명령 및 문제 해결 기법은 [디버깅 및 개발 도구](/ko/plugins-reference#debugging-and-development-tools)를 참조하세요

325 

326### 플러그인 공유

327 

328플러그인을 공유할 준비가 되면:

329 

3301. **문서 추가**: 설치 및 사용 지침이 포함된 `README.md`를 포함하세요

3312. **버전 관리 전략 선택**: 명시적 `version`을 설정할지 또는 git 커밋 SHA에 의존할지 결정하세요. [버전 관리](/ko/plugins-reference#version-management)를 참조하세요

3323. **마켓플레이스 만들기 또는 사용**: [플러그인 마켓플레이스](/ko/plugin-marketplaces)를 통해 배포하여 설치하세요

3334. **다른 사람과 테스트**: 더 광범위한 배포 전에 팀원이 플러그인을 테스트하도록 하세요

334 

335플러그인이 마켓플레이스에 있으면 다른 사람들이 [플러그인 발견 및 설치](/ko/discover-plugins)의 지침을 사용하여 설치할 수 있습니다. 플러그인을 팀 내부로만 유지하려면 [비공개 저장소](/ko/plugin-marketplaces#private-repositories)에서 마켓플레이스를 호스팅하세요.

336 

337### 플러그인을 공식 마켓플레이스에 제출

338 

339플러그인을 공식 Anthropic 마켓플레이스에 제출하려면 다음 앱 내 제출 양식 중 하나를 사용하세요:

340 

341* **Claude.ai**: [claude.ai/settings/plugins/submit](https://claude.ai/settings/plugins/submit)

342* **Console**: [platform.claude.com/plugins/submit](https://platform.claude.com/plugins/submit)

343 

344플러그인이 나열되면 CLI에서 Claude Code 사용자에게 설치를 권장할 수 있습니다. [CLI에서 플러그인 권장](/ko/plugin-hints)을 참조하세요.

345 

346<Note>

347 완전한 기술 사양, 디버깅 기법, 배포 전략은 [플러그인 참조](/ko/plugins-reference)를 참조하세요.

348</Note>

349 

350## 기존 구성을 플러그인으로 변환

351 

352`.claude/` 디렉토리에 이미 skills 또는 hooks가 있는 경우 더 쉬운 공유 및 배포를 위해 플러그인으로 변환할 수 있습니다.

353 

354### 마이그레이션 단계

355 

356<Steps>

357 <Step title="플러그인 구조 만들기">

358 새 플러그인 디렉토리를 만듭니다:

359 

360 ```bash theme={null}

361 mkdir -p my-plugin/.claude-plugin

362 ```

363 

364 `my-plugin/.claude-plugin/plugin.json`에 매니페스트 파일을 만듭니다:

365 

366 ```json my-plugin/.claude-plugin/plugin.json theme={null}

367 {

368 "name": "my-plugin",

369 "description": "Migrated from standalone configuration",

370 "version": "1.0.0"

371 }

372 ```

373 </Step>

374 

375 <Step title="기존 파일 복사">

376 기존 구성을 플러그인 디렉토리에 복사합니다:

377 

378 ```bash theme={null}

379 # Copy commands

380 cp -r .claude/commands my-plugin/

381 

382 # Copy agents (if any)

383 cp -r .claude/agents my-plugin/

384 

385 # Copy skills (if any)

386 cp -r .claude/skills my-plugin/

387 ```

388 </Step>

389 

390 <Step title="Hooks 마이그레이션">

391 설정에 hooks가 있는 경우 hooks 디렉토리를 만듭니다:

392 

393 ```bash theme={null}

394 mkdir my-plugin/hooks

395 ```

396 

397 `my-plugin/hooks/hooks.json`을 hooks 구성으로 만듭니다. `.claude/settings.json` 또는 `settings.local.json`에서 `hooks` 객체를 복사합니다. 형식이 동일하기 때문입니다. 명령은 stdin에서 JSON으로 hook 입력을 받으므로 `jq`를 사용하여 파일 경로를 추출합니다:

398 

399 ```json my-plugin/hooks/hooks.json theme={null}

400 {

401 "hooks": {

402 "PostToolUse": [

403 {

404 "matcher": "Write|Edit",

405 "hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npm run lint:fix" }]

406 }

407 ]

408 }

409 }

410 ```

411 </Step>

412 

413 <Step title="마이그레이션된 플러그인 테스트">

414 플러그인을 로드하여 모든 것이 작동하는지 확인합니다:

415 

416 ```bash theme={null}

417 claude --plugin-dir ./my-plugin

418 ```

419 

420 각 구성 요소를 테스트합니다: 명령을 실행하고, agents가 `/agents`에 나타나는지 확인하고, hooks가 올바르게 트리거되는지 확인합니다.

421 </Step>

422</Steps>

423 

424### 마이그레이션 시 변경되는 사항

425 

426| 독립 실행형 (`.claude/`) | 플러그인 |

427| :---------------------- | :-------------------------- |

428| 한 프로젝트에서만 사용 가능 | 마켓플레이스를 통해 공유 가능 |

429| `.claude/commands/`의 파일 | `plugin-name/commands/`의 파일 |

430| `settings.json`의 Hooks | `hooks/hooks.json`의 Hooks |

431| 공유하려면 수동으로 복사해야 함 | `/plugin install`로 설치 |

432 

433<Note>

434 마이그레이션 후 중복을 피하기 위해 `.claude/`에서 원본 파일을 제거할 수 있습니다. 플러그인 버전이 로드될 때 우선합니다.

435</Note>

436 

437## 다음 단계

438 

439이제 Claude Code의 플러그인 시스템을 이해했으므로 다양한 목표에 대한 제안된 경로는 다음과 같습니다:

440 

441### 플러그인 사용자의 경우

442 

443* [플러그인 발견 및 설치](/ko/discover-plugins): 마켓플레이스를 검색하고 플러그인을 설치합니다

444* [팀 마켓플레이스 구성](/ko/discover-plugins#configure-team-marketplaces): 팀을 위한 저장소 수준 플러그인을 설정합니다

445 

446### 플러그인 개발자의 경우

447 

448* [마켓플레이스 만들기 및 배포](/ko/plugin-marketplaces): 플러그인을 패키징하고 공유합니다

449* [플러그인 참조](/ko/plugins-reference): 완전한 기술 사양

450* 특정 플러그인 구성 요소에 대해 더 깊이 있게 살펴보세요:

451 * [Skills](/ko/skills): skill 개발 세부 사항

452 * [Subagents](/ko/sub-agents): agent 구성 및 기능

453 * [Hooks](/ko/hooks): 이벤트 처리 및 자동화

454 * [MCP](/ko/mcp): 외부 도구 통합

plugins-reference.md +1011 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 플러그인 참조

6 

7> Claude Code 플러그인 시스템의 완전한 기술 참조, 스키마, CLI 명령어 및 컴포넌트 사양 포함.

8 

9<Tip>

10 플러그인을 설치하려고 하시나요? [플러그인 발견 및 설치](/ko/discover-plugins)를 참조하세요. 플러그인 생성에 대해서는 [플러그인](/ko/plugins)을 참조하세요. 플러그인 배포에 대해서는 [플러그인 마켓플레이스](/ko/plugin-marketplaces)를 참조하세요.

11</Tip>

12 

13이 참조는 Claude Code 플러그인 시스템의 완전한 기술 사양을 제공하며, 컴포넌트 스키마, CLI 명령어 및 개발 도구를 포함합니다.

14 

15**플러그인**은 Claude Code를 사용자 정의 기능으로 확장하는 자체 포함된 컴포넌트 디렉토리입니다. 플러그인 컴포넌트에는 skills, agents, hooks, MCP servers, LSP servers 및 monitors가 포함됩니다.

16 

17## 플러그인 컴포넌트 참조

18 

19### Skills

20 

21플러그인은 Claude Code에 skills를 추가하여 사용자나 Claude가 호출할 수 있는 `/name` 바로가기를 생성합니다.

22 

23**위치**: 플러그인 루트의 `skills/` 또는 `commands/` 디렉토리

24 

25**파일 형식**: Skills는 `SKILL.md`가 있는 디렉토리이고, commands는 간단한 마크다운 파일입니다.

26 

27**Skill 구조**:

28 

29```text theme={null}

30skills/

31├── pdf-processor/

32│ ├── SKILL.md

33│ ├── reference.md (선택사항)

34│ └── scripts/ (선택사항)

35└── code-reviewer/

36 └── SKILL.md

37```

38 

39**통합 동작**:

40 

41* Skills와 commands는 플러그인이 설치될 때 자동으로 발견됩니다.

42* Claude는 작업 컨텍스트에 따라 자동으로 이들을 호출할 수 있습니다.

43* Skills는 SKILL.md와 함께 지원 파일을 포함할 수 있습니다.

44 

45완전한 세부 정보는 [Skills](/ko/skills)를 참조하세요.

46 

47### Agents

48 

49플러그인은 Claude가 적절할 때 자동으로 호출할 수 있는 특정 작업을 위한 특화된 subagents를 제공할 수 있습니다.

50 

51**위치**: 플러그인 루트의 `agents/` 디렉토리

52 

53**파일 형식**: 에이전트 기능을 설명하는 마크다운 파일

54 

55**Agent 구조**:

56 

57```markdown theme={null}

58---

59name: agent-name

60description: 이 에이전트가 전문으로 하는 분야와 Claude가 이를 호출해야 할 때

61model: sonnet

62effort: medium

63maxTurns: 20

64disallowedTools: Write, Edit

65---

66 

67에이전트의 역할, 전문성 및 동작을 설명하는 상세한 시스템 프롬프트입니다.

68```

69 

70플러그인 agents는 `name`, `description`, `model`, `effort`, `maxTurns`, `tools`, `disallowedTools`, `skills`, `memory`, `background` 및 `isolation` frontmatter 필드를 지원합니다. 유일한 유효한 `isolation` 값은 `"worktree"`입니다. 보안상의 이유로 `hooks`, `mcpServers` 및 `permissionMode`는 플러그인 제공 agents에서 지원되지 않습니다.

71 

72**통합 지점**:

73 

74* Agents는 `/agents` 인터페이스에 나타납니다.

75* Claude는 작업 컨텍스트에 따라 agents를 자동으로 호출할 수 있습니다.

76* Agents는 사용자가 수동으로 호출할 수 있습니다.

77* 플러그인 agents는 기본 제공 Claude agents와 함께 작동합니다.

78 

79완전한 세부 정보는 [Subagents](/ko/sub-agents)를 참조하세요.

80 

81### Hooks

82 

83플러그인은 Claude Code 이벤트에 자동으로 응답하는 이벤트 핸들러를 제공할 수 있습니다.

84 

85**위치**: 플러그인 루트의 `hooks/hooks.json` 또는 plugin.json에 인라인

86 

87**형식**: 이벤트 매처 및 작업이 있는 JSON 구성

88 

89**Hook 구성**:

90 

91```json theme={null}

92{

93 "hooks": {

94 "PostToolUse": [

95 {

96 "matcher": "Write|Edit",

97 "hooks": [

98 {

99 "type": "command",

100 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/format-code.sh"

101 }

102 ]

103 }

104 ]

105 }

106}

107```

108 

109플러그인 hooks는 [사용자 정의 hooks](/ko/hooks)와 동일한 라이프사이클 이벤트에 응답합니다:

110 

111| Event | When it fires |

112| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

113| `SessionStart` | When a session begins or resumes |

114| `Setup` | When you start Claude Code with `--init-only`, or with `--init` or `--maintenance` in `-p` mode. For one-time preparation in CI or scripts |

115| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |

116| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |

117| `PreToolUse` | Before a tool call executes. Can block it |

118| `PermissionRequest` | When a permission dialog appears |

119| `PermissionDenied` | When a tool call is denied by the auto mode classifier. Return `{retry: true}` to tell the model it may retry the denied tool call |

120| `PostToolUse` | After a tool call succeeds |

121| `PostToolUseFailure` | After a tool call fails |

122| `PostToolBatch` | After a full batch of parallel tool calls resolves, before the next model call |

123| `Notification` | When Claude Code sends a notification |

124| `SubagentStart` | When a subagent is spawned |

125| `SubagentStop` | When a subagent finishes |

126| `TaskCreated` | When a task is being created via `TaskCreate` |

127| `TaskCompleted` | When a task is being marked as completed |

128| `Stop` | When Claude finishes responding |

129| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |

130| `TeammateIdle` | When an [agent team](/en/agent-teams) teammate is about to go idle |

131| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |

132| `ConfigChange` | When a configuration file changes during a session |

133| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |

134| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |

135| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |

136| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |

137| `PreCompact` | Before context compaction |

138| `PostCompact` | After context compaction completes |

139| `Elicitation` | When an MCP server requests user input during a tool call |

140| `ElicitationResult` | After a user responds to an MCP elicitation, before the response is sent back to the server |

141| `SessionEnd` | When a session terminates |

142 

143**Hook 유형**:

144 

145* `command`: 셸 명령어 또는 스크립트 실행

146* `http`: 이벤트 JSON을 URL로 POST 요청으로 전송

147* `mcp_tool`: 구성된 [MCP server](/ko/mcp)에서 도구 호출

148* `prompt`: LLM으로 프롬프트 평가 (컨텍스트에 대해 `$ARGUMENTS` 플레이스홀더 사용)

149* `agent`: 복잡한 검증 작업을 위해 도구가 있는 에이전트 검증자 실행

150 

151### MCP servers

152 

153플러그인은 Claude Code를 외부 도구 및 서비스와 연결하기 위해 Model Context Protocol (MCP) servers를 번들로 제공할 수 있습니다.

154 

155**위치**: 플러그인 루트의 `.mcp.json` 또는 plugin.json에 인라인

156 

157**형식**: 표준 MCP 서버 구성

158 

159**MCP 서버 구성**:

160 

161```json theme={null}

162{

163 "mcpServers": {

164 "plugin-database": {

165 "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",

166 "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],

167 "env": {

168 "DB_PATH": "${CLAUDE_PLUGIN_ROOT}/data"

169 }

170 },

171 "plugin-api-client": {

172 "command": "npx",

173 "args": ["@company/mcp-server", "--plugin-mode"],

174 "cwd": "${CLAUDE_PLUGIN_ROOT}"

175 }

176 }

177}

178```

179 

180**통합 동작**:

181 

182* 플러그인 MCP servers는 플러그인이 활성화될 때 자동으로 시작됩니다.

183* Servers는 Claude의 도구 키트에서 표준 MCP 도구로 나타납니다.

184* 서버 기능은 Claude의 기존 도구와 원활하게 통합됩니다.

185* 플러그인 servers는 사용자 MCP servers와 독립적으로 구성할 수 있습니다.

186 

187### LSP servers

188 

189<Tip>

190 LSP 플러그인을 사용하려고 하시나요? 공식 마켓플레이스에서 설치하세요: `/plugin` Discover 탭에서 "lsp"를 검색하세요. 이 섹션은 공식 마켓플레이스에서 다루지 않는 언어에 대해 LSP 플러그인을 만드는 방법을 문서화합니다.

191</Tip>

192 

193플러그인은 [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) (LSP) servers를 제공하여 코드베이스에서 작업할 때 Claude에게 실시간 코드 인텔리전스를 제공할 수 있습니다.

194 

195LSP 통합은 다음을 제공합니다:

196 

197* **즉시 진단**: Claude는 각 편집 후 즉시 오류 및 경고를 봅니다.

198* **코드 네비게이션**: 정의로 이동, 참조 찾기 및 호버 정보

199* **언어 인식**: 코드 기호에 대한 타입 정보 및 문서

200 

201**위치**: 플러그인 루트의 `.lsp.json` 또는 `plugin.json`에 인라인

202 

203**형식**: 언어 서버 이름을 해당 구성에 매핑하는 JSON 구성

204 

205**`.lsp.json` 파일 형식**:

206 

207```json theme={null}

208{

209 "go": {

210 "command": "gopls",

211 "args": ["serve"],

212 "extensionToLanguage": {

213 ".go": "go"

214 }

215 }

216}

217```

218 

219**`plugin.json`에 인라인**:

220 

221```json theme={null}

222{

223 "name": "my-plugin",

224 "lspServers": {

225 "go": {

226 "command": "gopls",

227 "args": ["serve"],

228 "extensionToLanguage": {

229 ".go": "go"

230 }

231 }

232 }

233}

234```

235 

236**필수 필드:**

237 

238| 필드 | 설명 |

239| :-------------------- | :------------------------- |

240| `command` | 실행할 LSP 바이너리 (PATH에 있어야 함) |

241| `extensionToLanguage` | 파일 확장자를 언어 식별자에 매핑 |

242 

243**선택사항 필드:**

244 

245| 필드 | 설명 |

246| :---------------------- | :--------------------------------------------- |

247| `args` | LSP 서버의 명령줄 인수 |

248| `transport` | 통신 전송: `stdio` (기본값) 또는 `socket` |

249| `env` | 서버 시작 시 설정할 환경 변수 |

250| `initializationOptions` | 초기화 중에 서버에 전달되는 옵션 |

251| `settings` | `workspace/didChangeConfiguration`을 통해 전달되는 설정 |

252| `workspaceFolder` | 서버의 작업 공간 폴더 경로 |

253| `startupTimeout` | 서버 시작을 기다릴 최대 시간 (밀리초) |

254| `shutdownTimeout` | 정상 종료를 기다릴 최대 시간 (밀리초) |

255| `restartOnCrash` | 서버가 충돌하면 자동으로 다시 시작할지 여부 |

256| `maxRestarts` | 포기하기 전 최대 재시작 시도 횟수 |

257 

258<Warning>

259 **언어 서버 바이너리를 별도로 설치해야 합니다.** LSP 플러그인은 Claude Code가 언어 서버에 연결하는 방법을 구성하지만, 서버 자체는 포함하지 않습니다. `/plugin` Errors 탭에서 `Executable not found in $PATH`를 보면 언어에 필요한 바이너리를 설치하세요.

260</Warning>

261 

262**사용 가능한 LSP 플러그인:**

263 

264| 플러그인 | 언어 서버 | 설치 명령어 |

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

266| `pyright-lsp` | Pyright (Python) | `pip install pyright` 또는 `npm install -g pyright` |

267| `typescript-lsp` | TypeScript Language Server | `npm install -g typescript-language-server typescript` |

268| `rust-lsp` | rust-analyzer | [rust-analyzer 설치 참조](https://rust-analyzer.github.io/manual.html#installation) |

269 

270먼저 언어 서버를 설치한 다음 마켓플레이스에서 플러그인을 설치하세요.

271 

272### Monitors

273 

274플러그인은 플러그인이 활성화될 때 Claude Code가 자동으로 시작하는 백그라운드 monitors를 선언할 수 있습니다. 각 monitor는 세션 동안 셸 명령어를 실행하고 모든 stdout 라인을 Claude에게 알림으로 전달하므로 Claude는 로그 항목, 상태 변경 또는 폴링된 이벤트에 반응할 수 있으며 자신이 watch를 시작하도록 요청받을 필요가 없습니다.

275 

276플러그인 monitors는 [Monitor tool](/ko/tools-reference#monitor-tool)과 동일한 메커니즘을 사용하며 해당 가용성 제약을 공유합니다. 이들은 대화형 CLI 세션에서만 실행되고, [hooks](#hooks)와 동일한 신뢰 수준에서 샌드박스 없이 실행되며, Monitor tool을 사용할 수 없는 호스트에서는 건너뜁니다.

277 

278<Note>

279 플러그인 monitors는 Claude Code v2.1.105 이상이 필요합니다.

280</Note>

281 

282**위치**: 플러그인 루트의 `monitors/monitors.json` 또는 plugin.json에 인라인

283 

284**형식**: monitor 항목의 JSON 배열

285 

286다음 `monitors/monitors.json`은 배포 상태 엔드포인트와 로컬 오류 로그를 감시합니다:

287 

288```json theme={null}

289[

290 {

291 "name": "deploy-status",

292 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/poll-deploy.sh ${user_config.api_endpoint}",

293 "description": "배포 상태 변경"

294 },

295 {

296 "name": "error-log",

297 "command": "tail -F ./logs/error.log",

298 "description": "애플리케이션 오류 로그",

299 "when": "on-skill-invoke:debug"

300 }

301]

302```

303 

304monitors를 인라인으로 선언하려면 `plugin.json`의 `monitors` 키를 동일한 배열로 설정하세요. 기본이 아닌 경로에서 로드하려면 `monitors`를 `"./config/monitors.json"`과 같은 상대 경로 문자열로 설정하세요.

305 

306**필수 필드:**

307 

308| 필드 | 설명 |

309| :------------ | :--------------------------------------------------------------- |

310| `name` | 플러그인 내에서 고유한 식별자. 플러그인이 다시 로드되거나 skill이 다시 호출될 때 중복 프로세스를 방지합니다. |

311| `command` | 세션 작업 디렉토리에서 영구 백그라운드 프로세스로 실행되는 셸 명령어 |

312| `description` | 감시 중인 항목에 대한 간단한 요약. 작업 패널 및 알림 요약에 표시됩니다. |

313 

314**선택사항 필드:**

315 

316| 필드 | 설명 |

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

318| `when` | monitor가 시작되는 시기를 제어합니다. `"always"`는 세션 시작 및 플러그인 다시 로드 시 시작하며 기본값입니다. `"on-skill-invoke:<skill-name>"`은 이 플러그인의 명명된 skill이 처음 발송될 때 시작합니다. |

319 

320`command` 값은 MCP 및 LSP 서버 구성과 동일한 [변수 대체](#environment-variables)를 지원합니다: `${CLAUDE_PLUGIN_ROOT}`, `${CLAUDE_PLUGIN_DATA}`, `${user_config.*}` 및 환경의 모든 `${ENV_VAR}`. 스크립트가 플러그인 자체 디렉토리에서 실행되어야 하는 경우 명령어 앞에 `cd "${CLAUDE_PLUGIN_ROOT}" && `를 붙이세요.

321 

322세션 중간에 플러그인을 비활성화해도 이미 실행 중인 monitors는 중지되지 않습니다. 세션이 끝날 때 중지됩니다.

323 

324### Themes

325 

326플러그인은 `/theme`에 기본 제공 프리셋 및 사용자의 로컬 테마와 함께 나타나는 색상 테마를 제공할 수 있습니다. 테마는 `themes/` 디렉토리의 JSON 파일로, `base` 프리셋과 색상 토큰의 sparse `overrides` 맵을 포함합니다.

327 

328```json theme={null}

329{

330 "name": "Dracula",

331 "base": "dark",

332 "overrides": {

333 "claude": "#bd93f9",

334 "error": "#ff5555",

335 "success": "#50fa7b"

336 }

337}

338```

339 

340플러그인 테마를 선택하면 사용자의 구성에 `custom:<plugin-name>:<slug>`이 유지됩니다. 플러그인 테마는 읽기 전용입니다. `/theme`에서 하나에 `Ctrl+E`를 누르면 `~/.claude/themes/`로 복사되어 사용자가 복사본을 편집할 수 있습니다.

341 

342***

343 

344## 플러그인 설치 범위

345 

346플러그인을 설치할 때 플러그인이 사용 가능한 위치와 다른 사람이 사용할 수 있는지를 결정하는 **범위**를 선택합니다:

347 

348| 범위 | 설정 파일 | 사용 사례 |

349| :-------- | :------------------------------------- | :----------------------------- |

350| `user` | `~/.claude/settings.json` | 모든 프로젝트에서 사용 가능한 개인 플러그인 (기본값) |

351| `project` | `.claude/settings.json` | 버전 제어를 통해 공유되는 팀 플러그인 |

352| `local` | `.claude/settings.local.json` | 프로젝트별 플러그인, gitignored |

353| `managed` | [관리되는 설정](/ko/settings#settings-files) | 관리되는 플러그인 (읽기 전용, 업데이트만 가능) |

354 

355플러그인은 다른 Claude Code 구성과 동일한 범위 시스템을 사용합니다. 설치 지침 및 범위 플래그는 [플러그인 설치](/ko/discover-plugins#install-plugins)를 참조하세요. 범위에 대한 완전한 설명은 [구성 범위](/ko/settings#configuration-scopes)를 참조하세요.

356 

357***

358 

359## 플러그인 매니페스트 스키마

360 

361`.claude-plugin/plugin.json` 파일은 플러그인의 메타데이터 및 구성을 정의합니다. 이 섹션은 지원되는 모든 필드 및 옵션을 문서화합니다.

362 

363매니페스트는 선택사항입니다. 생략하면 Claude Code는 [기본 위치](#file-locations-reference)에서 컴포넌트를 자동으로 발견하고 디렉토리 이름에서 플러그인 이름을 파생합니다. 메타데이터를 제공하거나 사용자 정의 컴포넌트 경로가 필요할 때 매니페스트를 사용하세요.

364 

365### 완전한 스키마

366 

367```json theme={null}

368{

369 "name": "plugin-name",

370 "version": "1.2.0",

371 "description": "간단한 플러그인 설명",

372 "author": {

373 "name": "작성자 이름",

374 "email": "author@example.com",

375 "url": "https://github.com/author"

376 },

377 "homepage": "https://docs.example.com/plugin",

378 "repository": "https://github.com/author/plugin",

379 "license": "MIT",

380 "keywords": ["keyword1", "keyword2"],

381 "skills": "./custom/skills/",

382 "commands": ["./custom/commands/special.md"],

383 "agents": ["./custom/agents/reviewer.md"],

384 "hooks": "./config/hooks.json",

385 "mcpServers": "./mcp-config.json",

386 "outputStyles": "./styles/",

387 "themes": "./themes/",

388 "lspServers": "./.lsp.json",

389 "monitors": "./monitors.json",

390 "dependencies": [

391 "helper-lib",

392 { "name": "secrets-vault", "version": "~2.1.0" }

393 ]

394}

395```

396 

397### 필수 필드

398 

399매니페스트를 포함하는 경우 `name`이 유일한 필수 필드입니다.

400 

401| 필드 | 타입 | 설명 | 예시 |

402| :----- | :----- | :------------------------- | :------------------- |

403| `name` | string | 고유 식별자 (kebab-case, 공백 없음) | `"deployment-tools"` |

404 

405이 이름은 컴포넌트 네임스페이싱에 사용됩니다. 예를 들어 UI에서 이름이 `plugin-dev`인 플러그인의 agent `agent-creator`는 `plugin-dev:agent-creator`로 나타납니다.

406 

407### 메타데이터 필드

408 

409| 필드 | 타입 | 설명 | 예시 |

410| :------------ | :----- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------- |

411| `$schema` | string | 편집기 자동 완성 및 검증을 위한 JSON Schema URL. Claude Code는 로드 시 이 필드를 무시합니다. | `"https://json.schemastore.org/claude-code-plugin-manifest.json"` |

412| `version` | string | 선택사항. 의미 있는 버전. 이를 설정하면 플러그인이 해당 버전 문자열로 고정되므로 사용자는 버전을 올릴 때만 업데이트를 받습니다. 생략하면 Claude Code는 git 커밋 SHA로 폴백되므로 모든 커밋이 새 버전으로 취급됩니다. 마켓플레이스 항목에도 설정된 경우 `plugin.json`이 우선합니다. [버전 관리](#version-management)를 참조하세요. | `"2.1.0"` |

413| `description` | string | 플러그인 목적에 대한 간단한 설명 | `"배포 자동화 도구"` |

414| `author` | object | 작성자 정보 | `{"name": "Dev Team", "email": "dev@company.com"}` |

415| `homepage` | string | 문서 URL | `"https://docs.example.com"` |

416| `repository` | string | 소스 코드 URL | `"https://github.com/user/plugin"` |

417| `license` | string | 라이선스 식별자 | `"MIT"`, `"Apache-2.0"` |

418| `keywords` | array | 발견 태그 | `["deployment", "ci-cd"]` |

419 

420### 컴포넌트 경로 필드

421 

422| 필드 | 타입 | 설명 | 예시 |

423| :------------- | :-------------------- | :-------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |

424| `skills` | string\|array | `<name>/SKILL.md`를 포함하는 사용자 정의 skill 디렉토리 (기본 `skills/` 대체) | `"./custom/skills/"` |

425| `commands` | string\|array | 사용자 정의 평면 `.md` skill 파일 또는 디렉토리 (기본 `commands/` 대체) | `"./custom/cmd.md"` 또는 `["./cmd1.md"]` |

426| `agents` | string\|array | 사용자 정의 agent 파일 (기본 `agents/` 대체) | `"./custom/agents/reviewer.md"` |

427| `hooks` | string\|array\|object | Hook 구성 경로 또는 인라인 구성 | `"./my-extra-hooks.json"` |

428| `mcpServers` | string\|array\|object | MCP 구성 경로 또는 인라인 구성 | `"./my-extra-mcp-config.json"` |

429| `outputStyles` | string\|array | 사용자 정의 출력 스타일 파일/디렉토리 (기본 `output-styles/` 대체) | `"./styles/"` |

430| `themes` | string\|array | 색상 테마 파일/디렉토리 (기본 `themes/` 대체). [테마](#themes) 참조 | `"./themes/"` |

431| `lspServers` | string\|array\|object | [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) 코드 인텔리전스 구성 (정의로 이동, 참조 찾기 등) | `"./.lsp.json"` |

432| `monitors` | string\|array | 플러그인이 활성화될 때 자동으로 시작되는 백그라운드 [Monitor](/ko/tools-reference#monitor-tool) 구성. [Monitors](#monitors) 참조 | `"./monitors.json"` |

433| `userConfig` | object | 플러그인이 활성화될 때 사용자에게 프롬프트하는 사용자 구성 가능 값. [사용자 구성](#user-configuration) 참조 | 아래 참조 |

434| `channels` | array | 메시지 주입을 위한 채널 선언 (Telegram, Slack, Discord 스타일). [채널](#channels) 참조 | 아래 참조 |

435| `dependencies` | array | 이 플러그인이 필요로 하는 다른 플러그인, 선택적으로 semver 버전 제약 포함. [플러그인 종속성 버전 제약](/ko/plugin-dependencies) 참조 | `[{ "name": "secrets-vault", "version": "~2.1.0" }]` |

436 

437### 사용자 구성

438 

439`userConfig` 필드는 플러그인이 활성화될 때 Claude Code가 사용자에게 프롬프트하는 값을 선언합니다. 사용자가 `settings.json`을 수동으로 편집하도록 요구하는 대신 이를 사용하세요.

440 

441```json theme={null}

442{

443 "userConfig": {

444 "api_endpoint": {

445 "type": "string",

446 "title": "API 엔드포인트",

447 "description": "팀의 API 엔드포인트"

448 },

449 "api_token": {

450 "type": "string",

451 "title": "API 토큰",

452 "description": "API 인증 토큰",

453 "sensitive": true

454 }

455 }

456}

457```

458 

459키는 유효한 식별자여야 합니다. 각 옵션은 다음 필드를 지원합니다:

460 

461| 필드 | 필수 | 설명 |

462| :------------ | :-- | :-------------------------------------------------------- |

463| `type` | 예 | `string`, `number`, `boolean`, `directory` 또는 `file` 중 하나 |

464| `title` | 예 | 구성 대화에 표시되는 레이블 |

465| `description` | 예 | 필드 아래에 표시되는 도움말 텍스트 |

466| `sensitive` | 아니오 | `true`인 경우 입력을 마스킹하고 값을 `settings.json` 대신 보안 저장소에 저장합니다. |

467| `required` | 아니오 | `true`인 경우 필드가 비어 있으면 검증이 실패합니다. |

468| `default` | 아니오 | 사용자가 아무것도 제공하지 않을 때 사용되는 값 |

469| `multiple` | 아니오 | `string` 타입의 경우 문자열 배열 허용 |

470| `min` / `max` | 아니오 | `number` 타입의 범위 |

471 

472각 값은 MCP 및 LSP 서버 구성, hook 명령어 및 monitor 명령어에서 `${user_config.KEY}`로 대체할 수 있습니다. 민감하지 않은 값은 skill 및 agent 콘텐츠에서도 대체할 수 있습니다. 모든 값은 플러그인 서브프로세스에 `CLAUDE_PLUGIN_OPTION_<KEY>` 환경 변수로 내보내집니다.

473 

474민감하지 않은 값은 `settings.json`의 `pluginConfigs[<plugin-id>].options` 아래에 저장됩니다. 민감한 값은 시스템 키체인 (또는 키체인을 사용할 수 없는 경우 `~/.claude/.credentials.json`)으로 이동합니다. 키체인 저장소는 OAuth 토큰과 공유되며 약 2 KB의 총 제한이 있으므로 민감한 값을 작게 유지하세요.

475 

476### 채널

477 

478`channels` 필드를 사용하면 플러그인이 하나 이상의 메시지 채널을 선언하여 대화에 콘텐츠를 주입할 수 있습니다. 각 채널은 플러그인이 제공하는 MCP 서버에 바인딩됩니다.

479 

480```json theme={null}

481{

482 "channels": [

483 {

484 "server": "telegram",

485 "userConfig": {

486 "bot_token": {

487 "type": "string",

488 "title": "봇 토큰",

489 "description": "Telegram 봇 토큰",

490 "sensitive": true

491 },

492 "owner_id": {

493 "type": "string",

494 "title": "소유자 ID",

495 "description": "Telegram 사용자 ID"

496 }

497 }

498 }

499 ]

500}

501```

502 

503`server` 필드는 필수이며 플러그인의 `mcpServers`의 키와 일치해야 합니다. 선택사항인 채널별 `userConfig`는 최상위 필드와 동일한 스키마를 사용하여 플러그인이 플러그인이 활성화될 때 봇 토큰 또는 소유자 ID를 프롬프트할 수 있습니다.

504 

505### 경로 동작 규칙

506 

507`skills`, `commands`, `agents`, `outputStyles`, `themes` 및 `monitors`의 경우 사용자 정의 경로는 기본값을 대체합니다. 매니페스트가 `skills`를 지정하면 기본 `skills/` 디렉토리는 스캔되지 않습니다. 매니페스트가 `monitors`를 지정하면 기본 `monitors/monitors.json`은 로드되지 않습니다. [Hooks](#hooks), [MCP servers](#mcp-servers) 및 [LSP servers](#lsp-servers)는 여러 소스를 처리하기 위한 다른 의미를 가집니다.

508 

509* 모든 경로는 플러그인 루트에 상대적이어야 하며 `./`로 시작해야 합니다.

510* 사용자 정의 경로의 컴포넌트는 동일한 명명 및 네임스페이싱 규칙을 사용합니다.

511* 여러 경로를 배열로 지정할 수 있습니다.

512* skills, commands, agents 또는 output styles의 기본 디렉토리를 유지하고 더 많은 경로를 추가하려면 배열에 기본값을 포함하세요: `"skills": ["./skills/", "./extras/"]`

513* skill 경로가 `SKILL.md`를 직접 포함하는 디렉토리를 가리킬 때 (예: 플러그인 루트를 가리키는 `"skills": ["./"]`), frontmatter의 `name` 필드가 skill의 호출 이름을 결정합니다. 이는 설치 디렉토리와 관계없이 안정적인 이름을 제공합니다. `name`이 frontmatter에 설정되지 않으면 디렉토리 basename이 폴백으로 사용됩니다.

514 

515**경로 예시**:

516 

517```json theme={null}

518{

519 "commands": [

520 "./specialized/deploy.md",

521 "./utilities/batch-process.md"

522 ],

523 "agents": [

524 "./custom-agents/reviewer.md",

525 "./custom-agents/tester.md"

526 ]

527}

528```

529 

530### 환경 변수

531 

532Claude Code는 플러그인 경로를 참조하기 위한 두 가지 변수를 제공합니다. 둘 다 skill 콘텐츠, agent 콘텐츠, hook 명령어, monitor 명령어 및 MCP 또는 LSP 서버 구성에 나타나는 모든 곳에서 인라인으로 대체됩니다. 둘 다 hook 프로세스 및 MCP 또는 LSP 서버 서브프로세스에 환경 변수로 내보내집니다.

533 

534**`${CLAUDE_PLUGIN_ROOT}`**: 플러그인 설치 디렉토리의 절대 경로입니다. 플러그인과 함께 번들로 제공되는 스크립트, 바이너리 및 구성 파일을 참조하는 데 사용하세요. 이 경로는 플러그인이 업데이트될 때 변경되므로 여기에 작성하는 파일은 업데이트 후 유지되지 않습니다.

535 

536**`${CLAUDE_PLUGIN_DATA}`**: 업데이트 후에도 유지되는 플러그인 상태를 위한 영구 디렉토리입니다. `node_modules` 또는 Python 가상 환경과 같은 설치된 종속성, 생성된 코드, 캐시 및 플러그인 버전 전체에서 유지되어야 하는 기타 파일에 사용하세요. 이 변수가 처음 참조될 때 디렉토리가 자동으로 생성됩니다.

537 

538```json theme={null}

539{

540 "hooks": {

541 "PostToolUse": [

542 {

543 "hooks": [

544 {

545 "type": "command",

546 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/process.sh"

547 }

548 ]

549 }

550 ]

551 }

552}

553```

554 

555#### 영구 데이터 디렉토리

556 

557`${CLAUDE_PLUGIN_DATA}` 디렉토리는 `~/.claude/plugins/data/{id}/`로 확인되며, 여기서 `{id}`는 `a-z`, `A-Z`, `0-9`, `_` 및 `-` 외부의 문자가 `-`로 대체된 플러그인 식별자입니다. `formatter@my-marketplace`로 설치된 플러그인의 경우 디렉토리는 `~/.claude/plugins/data/formatter-my-marketplace/`입니다.

558 

559일반적인 사용은 언어 종속성을 한 번 설치하고 세션 및 플러그인 업데이트 전체에서 재사용하는 것입니다. 데이터 디렉토리가 단일 플러그인 버전보다 오래 지속되므로 디렉토리 존재 여부만 확인하면 업데이트가 플러그인의 종속성 매니페스트를 변경할 때를 감지할 수 없습니다. 권장 패턴은 번들된 매니페스트를 데이터 디렉토리의 복사본과 비교하고 다를 때 다시 설치합니다.

560 

561이 `SessionStart` hook은 첫 실행 시 `node_modules`를 설치하고 플러그인 업데이트가 변경된 `package.json`을 포함할 때마다 다시 설치합니다:

562 

563```json theme={null}

564{

565 "hooks": {

566 "SessionStart": [

567 {

568 "hooks": [

569 {

570 "type": "command",

571 "command": "diff -q \"${CLAUDE_PLUGIN_ROOT}/package.json\" \"${CLAUDE_PLUGIN_DATA}/package.json\" >/dev/null 2>&1 || (cd \"${CLAUDE_PLUGIN_DATA}\" && cp \"${CLAUDE_PLUGIN_ROOT}/package.json\" . && npm install) || rm -f \"${CLAUDE_PLUGIN_DATA}/package.json\""

572 }

573 ]

574 }

575 ]

576 }

577}

578```

579 

580`diff`는 저장된 복사본이 누락되거나 번들된 복사본과 다를 때 0이 아닌 값으로 종료되어 첫 실행과 종속성 변경 업데이트를 모두 다룹니다. `npm install`이 실패하면 후행 `rm`은 복사된 매니페스트를 제거하므로 다음 세션이 다시 시도합니다.

581 

582`${CLAUDE_PLUGIN_ROOT}`에 번들된 스크립트는 지속된 `node_modules`에 대해 실행할 수 있습니다:

583 

584```json theme={null}

585{

586 "mcpServers": {

587 "routines": {

588 "command": "node",

589 "args": ["${CLAUDE_PLUGIN_ROOT}/server.js"],

590 "env": {

591 "NODE_PATH": "${CLAUDE_PLUGIN_DATA}/node_modules"

592 }

593 }

594 }

595}

596```

597 

598데이터 디렉토리는 플러그인을 설치한 마지막 범위에서 제거할 때 자동으로 삭제됩니다. `/plugin` 인터페이스는 디렉토리 크기를 표시하고 삭제 전에 프롬프트합니다. CLI는 기본적으로 삭제합니다. [`--keep-data`](#plugin-uninstall)를 전달하여 유지하세요.

599 

600***

601 

602## 플러그인 캐싱 및 파일 해석

603 

604플러그인은 두 가지 방법 중 하나로 지정됩니다:

605 

606* `claude --plugin-dir`을 통해, 세션 기간 동안.

607* 마켓플레이스를 통해, 향후 세션을 위해 설치됨.

608 

609보안 및 검증 목적으로 Claude Code는 *마켓플레이스* 플러그인을 제자리에서 사용하는 대신 사용자의 로컬 **플러그인 캐시** (`~/.claude/plugins/cache`)에 복사합니다. 외부 파일을 참조하는 플러그인을 개발할 때 이 동작을 이해하는 것이 중요합니다.

610 

611각 설치된 버전은 캐시의 별도 디렉토리입니다. 플러그인을 업데이트하거나 제거하면 이전 버전 디렉토리는 고아로 표시되고 7일 후 자동으로 제거됩니다. 유예 기간을 통해 이미 이전 버전을 로드한 동시 Claude Code 세션이 오류 없이 계속 실행될 수 있습니다.

612 

613Claude의 Glob 및 Grep 도구는 검색 중에 고아 버전 디렉토리를 건너뛰므로 파일 결과에는 오래된 플러그인 코드가 포함되지 않습니다.

614 

615### 경로 순회 제한

616 

617설치된 플러그인은 해당 디렉토리 외부의 파일을 참조할 수 없습니다. 플러그인 루트 외부를 순회하는 경로 (예: `../shared-utils`)는 설치 후 작동하지 않습니다. 왜냐하면 이러한 외부 파일이 캐시에 복사되지 않기 때문입니다.

618 

619### 외부 종속성 작업

620 

621플러그인이 디렉토리 외부의 파일에 액세스해야 하는 경우 플러그인 디렉토리 내에서 외부 파일에 대한 심볼릭 링크를 만들 수 있습니다. 심볼릭 링크는 캐시에 보존되며 런타임에 해당 대상으로 확인됩니다. 다음 명령어는 플러그인 디렉토리 내부에서 공유 유틸리티 위치로의 링크를 만듭니다:

622 

623```bash theme={null}

624ln -s /path/to/shared-utils ./shared-utils

625```

626 

627이는 캐싱 시스템의 보안 이점을 유지하면서 유연성을 제공합니다.

628 

629***

630 

631## 플러그인 디렉토리 구조

632 

633### 표준 플러그인 레이아웃

634 

635완전한 플러그인은 다음 구조를 따릅니다:

636 

637```text theme={null}

638enterprise-plugin/

639├── .claude-plugin/ # 메타데이터 디렉토리 (선택사항)

640│ └── plugin.json # 플러그인 매니페스트

641├── skills/ # Skills

642│ ├── code-reviewer/

643│ │ └── SKILL.md

644│ └── pdf-processor/

645│ ├── SKILL.md

646│ └── scripts/

647├── commands/ # 평면 .md 파일로서의 Skills

648│ ├── status.md

649│ └── logs.md

650├── agents/ # Subagent 정의

651│ ├── security-reviewer.md

652│ ├── performance-tester.md

653│ └── compliance-checker.md

654├── output-styles/ # 출력 스타일 정의

655│ └── terse.md

656├── themes/ # 색상 테마 정의

657│ └── dracula.json

658├── monitors/ # 백그라운드 모니터 구성

659│ └── monitors.json

660├── hooks/ # Hook 구성

661│ ├── hooks.json # 주 hook 구성

662│ └── security-hooks.json # 추가 hooks

663├── bin/ # PATH에 추가된 플러그인 실행 파일

664│ └── my-tool # Bash tool에서 bare 명령어로 호출 가능

665├── settings.json # 플러그인의 기본 설정

666├── .mcp.json # MCP 서버 정의

667├── .lsp.json # LSP 서버 구성

668├── scripts/ # Hook 및 유틸리티 스크립트

669│ ├── security-scan.sh

670│ ├── format-code.py

671│ └── deploy.js

672├── LICENSE # 라이선스 파일

673└── CHANGELOG.md # 버전 기록

674```

675 

676<Warning>

677 `.claude-plugin/` 디렉토리는 `plugin.json` 파일을 포함합니다. 다른 모든 디렉토리 (commands/, agents/, skills/, output-styles/, themes/, monitors/, hooks/)는 `.claude-plugin/` 내부가 아닌 플러그인 루트에 있어야 합니다.

678</Warning>

679 

680### 파일 위치 참조

681 

682| 컴포넌트 | 기본 위치 | 목적 |

683| :---------------- | :--------------------------- | :---------------------------------------------------------------------------------------------------------------------------- |

684| **매니페스트** | `.claude-plugin/plugin.json` | 플러그인 메타데이터 및 구성 (선택사항) |

685| **Skills** | `skills/` | `<name>/SKILL.md` 구조의 Skills |

686| **Commands** | `commands/` | 평면 마크다운 파일로서의 Skills. 새 플러그인에는 `skills/` 사용 |

687| **Agents** | `agents/` | Subagent 마크다운 파일 |

688| **Output styles** | `output-styles/` | 출력 스타일 정의 |

689| **Themes** | `themes/` | 색상 테마 정의 |

690| **Hooks** | `hooks/hooks.json` | Hook 구성 |

691| **MCP servers** | `.mcp.json` | MCP 서버 정의 |

692| **LSP servers** | `.lsp.json` | 언어 서버 구성 |

693| **Monitors** | `monitors/monitors.json` | 백그라운드 모니터 구성 |

694| **Executables** | `bin/` | Bash tool의 `PATH`에 추가된 실행 파일. 여기의 파일은 플러그인이 활성화된 동안 모든 Bash tool 호출에서 bare 명령어로 호출 가능 |

695| **Settings** | `settings.json` | 플러그인이 활성화될 때 적용되는 기본 구성. 현재 [`agent`](/ko/sub-agents) 및 [`subagentStatusLine`](/ko/statusline#subagent-status-lines) 키만 지원됩니다 |

696 

697***

698 

699## CLI 명령어 참조

700 

701Claude Code는 스크립팅 및 자동화에 유용한 비대화형 플러그인 관리를 위한 CLI 명령어를 제공합니다.

702 

703### plugin install

704 

705사용 가능한 마켓플레이스에서 플러그인을 설치합니다.

706 

707```bash theme={null}

708claude plugin install <plugin> [options]

709```

710 

711**인수:**

712 

713* `<plugin>`: 플러그인 이름 또는 특정 마켓플레이스의 경우 `plugin-name@marketplace-name`

714 

715**옵션:**

716 

717| 옵션 | 설명 | 기본값 |

718| :-------------------- | :---------------------------------- | :----- |

719| `-s, --scope <scope>` | 설치 범위: `user`, `project` 또는 `local` | `user` |

720| `-h, --help` | 명령어 도움말 표시 | |

721 

722범위는 설치된 플러그인이 추가되는 설정 파일을 결정합니다. 예를 들어 `--scope project`는 `.claude/settings.json`의 `enabledPlugins`에 쓰므로 프로젝트 저장소를 복제하는 모든 사람이 플러그인을 사용할 수 있습니다.

723 

724**예시:**

725 

726```bash theme={null}

727# 사용자 범위에 설치 (기본값)

728claude plugin install formatter@my-marketplace

729 

730# 프로젝트 범위에 설치 (팀과 공유)

731claude plugin install formatter@my-marketplace --scope project

732 

733# 로컬 범위에 설치 (gitignored)

734claude plugin install formatter@my-marketplace --scope local

735```

736 

737### plugin uninstall

738 

739설치된 플러그인을 제거합니다.

740 

741```bash theme={null}

742claude plugin uninstall <plugin> [options]

743```

744 

745**인수:**

746 

747* `<plugin>`: 플러그인 이름 또는 `plugin-name@marketplace-name`

748 

749**옵션:**

750 

751| 옵션 | 설명 | 기본값 |

752| :-------------------- | :--------------------------------------------------------------------- | :----- |

753| `-s, --scope <scope>` | 범위에서 제거: `user`, `project` 또는 `local` | `user` |

754| `--keep-data` | 플러그인의 [영구 데이터 디렉토리](#persistent-data-directory) 유지 | |

755| `--prune` | 다른 플러그인이 필요로 하지 않는 자동 설치된 종속성도 제거합니다. [plugin prune](#plugin-prune) 참조 | |

756| `-y, --yes` | `--prune` 확인 프롬프트 건너뛰기. stdin이 TTY가 아닐 때 필수 | |

757| `-h, --help` | 명령어 도움말 표시 | |

758 

759**별칭:** `remove`, `rm`

760 

761기본적으로 마지막 남은 범위에서 제거하면 플러그인의 `${CLAUDE_PLUGIN_DATA}` 디렉토리도 삭제됩니다. 새 버전 테스트 후 재설치할 때와 같이 유지하려면 `--keep-data`를 사용하세요.

762 

763### plugin prune

764 

765더 이상 설치된 플러그인에서 필요로 하지 않는 자동 설치된 플러그인 종속성을 제거합니다. Claude Code가 다른 플러그인의 [`dependencies`](/ko/plugin-dependencies) 필드를 만족하기 위해 가져온 종속성은 제거되며, 직접 설치한 플러그인은 절대 건드리지 않습니다.

766 

767```bash theme={null}

768claude plugin prune [options]

769```

770 

771**옵션:**

772 

773| 옵션 | 설명 | 기본값 |

774| :-------------------- | :------------------------------------ | :----- |

775| `-s, --scope <scope>` | 범위에서 정리: `user`, `project` 또는 `local` | `user` |

776| `--dry-run` | 제거될 항목을 나열하되 실제로 제거하지 않음 | |

777| `-y, --yes` | 확인 프롬프트 건너뛰기. stdin이 TTY가 아닐 때 필수 | |

778| `-h, --help` | 명령어 도움말 표시 | |

779 

780**별칭:** `autoremove`

781 

782명령어는 고아 종속성을 나열하고 제거하기 전에 확인을 요청합니다. 플러그인을 제거하고 한 단계에서 종속성을 정리하려면 `claude plugin uninstall <plugin> --prune`을 실행하세요.

783 

784<Note>

785 `claude plugin prune`은 Claude Code v2.1.121 이상이 필요합니다.

786</Note>

787 

788### plugin enable

789 

790비활성화된 플러그인을 활성화합니다.

791 

792```bash theme={null}

793claude plugin enable <plugin> [options]

794```

795 

796**인수:**

797 

798* `<plugin>`: 플러그인 이름 또는 `plugin-name@marketplace-name`

799 

800**옵션:**

801 

802| 옵션 | 설명 | 기본값 |

803| :-------------------- | :------------------------------------ | :----- |

804| `-s, --scope <scope>` | 활성화할 범위: `user`, `project` 또는 `local` | `user` |

805| `-h, --help` | 명령어 도움말 표시 | |

806 

807### plugin disable

808 

809플러그인을 제거하지 않고 비활성화합니다.

810 

811```bash theme={null}

812claude plugin disable <plugin> [options]

813```

814 

815**인수:**

816 

817* `<plugin>`: 플러그인 이름 또는 `plugin-name@marketplace-name`

818 

819**옵션:**

820 

821| 옵션 | 설명 | 기본값 |

822| :-------------------- | :------------------------------------- | :----- |

823| `-s, --scope <scope>` | 비활성화할 범위: `user`, `project` 또는 `local` | `user` |

824| `-h, --help` | 명령어 도움말 표시 | |

825 

826### plugin update

827 

828플러그인을 최신 버전으로 업데이트합니다.

829 

830```bash theme={null}

831claude plugin update <plugin> [options]

832```

833 

834**인수:**

835 

836* `<plugin>`: 플러그인 이름 또는 `plugin-name@marketplace-name`

837 

838**옵션:**

839 

840| 옵션 | 설명 | 기본값 |

841| :-------------------- | :------------------------------------------------ | :----- |

842| `-s, --scope <scope>` | 업데이트할 범위: `user`, `project`, `local` 또는 `managed` | `user` |

843| `-h, --help` | 명령어 도움말 표시 | |

844 

845***

846 

847### plugin list

848 

849설치된 플러그인을 버전, 소스 마켓플레이스 및 활성화 상태와 함께 나열합니다.

850 

851```bash theme={null}

852claude plugin list [options]

853```

854 

855**옵션:**

856 

857| 옵션 | 설명 | 기본값 |

858| :------------ | :----------------------------------- | :-- |

859| `--json` | JSON으로 출력 | |

860| `--available` | 마켓플레이스에서 사용 가능한 플러그인 포함. `--json` 필요 | |

861| `-h, --help` | 명령어 도움말 표시 | |

862 

863### plugin tag

864 

865현재 디렉토리의 플러그인에 대한 릴리스 git 태그를 생성합니다. 플러그인의 폴더 내에서 실행하세요. [플러그인 릴리스 태그 지정](/ko/plugin-dependencies#tag-plugin-releases-for-version-resolution)을 참조하세요.

866 

867```bash theme={null}

868claude plugin tag [options]

869```

870 

871**옵션:**

872 

873| 옵션 | 설명 | 기본값 |

874| :------------ | :----------------------------- | :-- |

875| `--push` | 태그를 생성한 후 원격으로 푸시 | |

876| `--dry-run` | 태그를 생성하지 않고 태그 지정될 내용 출력 | |

877| `-f, --force` | 작업 트리가 더티하거나 태그가 이미 존재해도 태그 생성 | |

878| `-h, --help` | 명령어 도움말 표시 | |

879 

880***

881 

882## 디버깅 및 개발 도구

883 

884### 디버깅 명령어

885 

886`claude --debug`를 사용하여 플러그인 로딩 세부 정보를 확인하세요:

887 

888이는 다음을 표시합니다:

889 

890* 로드되는 플러그인

891* 플러그인 매니페스트의 오류

892* Skill, agent 및 hook 등록

893* MCP 서버 초기화

894 

895### 일반적인 문제

896 

897| 문제 | 원인 | 해결책 |

898| :---------------------------------- | :------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------- |

899| 플러그인이 로드되지 않음 | 잘못된 `plugin.json` | `claude plugin validate` 또는 `/plugin validate`를 실행하여 `plugin.json`, skill/agent/command frontmatter 및 `hooks/hooks.json`의 구문 및 스키마 오류 확인 |

900| Skills가 나타나지 않음 | 잘못된 디렉토리 구조 | `skills/` 또는 `commands/`가 플러그인 루트에 있는지 확인, `.claude-plugin/` 내부가 아님 |

901| Hooks가 실행되지 않음 | 스크립트가 실행 가능하지 않음 | `chmod +x script.sh` 실행 |

902| MCP 서버 실패 | `${CLAUDE_PLUGIN_ROOT}` 누락 | 모든 플러그인 경로에 변수 사용 |

903| 경로 오류 | 절대 경로 사용됨 | 모든 경로는 상대적이어야 하며 `./`로 시작해야 함 |

904| LSP `Executable not found in $PATH` | 언어 서버가 설치되지 않음 | 바이너리 설치 (예: `npm install -g typescript-language-server typescript`) |

905 

906### 예시 오류 메시지

907 

908**매니페스트 검증 오류**:

909 

910* `Invalid JSON syntax: Unexpected token } in JSON at position 142`: 누락된 쉼표, 추가 쉼표 또는 따옴표 없는 문자열 확인

911* `Plugin has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Required`: 필수 필드가 누락됨

912* `Plugin has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...`: JSON 구문 오류

913 

914**플러그인 로딩 오류**:

915 

916* `Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.`: 명령어 경로가 존재하지만 유효한 명령어 파일이 없음

917* `Plugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.`: marketplace.json의 `source` 경로가 존재하지 않는 디렉토리를 가리킴

918* `Plugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.`: 중복 컴포넌트 정의 제거 또는 marketplace 항목에서 `strict: false` 제거

919 

920### Hook 문제 해결

921 

922**Hook 스크립트가 실행되지 않음**:

923 

9241. 스크립트가 실행 가능한지 확인: `chmod +x ./scripts/your-script.sh`

9252. shebang 라인 확인: 첫 번째 줄은 `#!/bin/bash` 또는 `#!/usr/bin/env bash`여야 함

9263. 경로가 `${CLAUDE_PLUGIN_ROOT}` 사용하는지 확인: `"command": "${CLAUDE_PLUGIN_ROOT}/scripts/your-script.sh"`

9274. 스크립트를 수동으로 테스트: `./scripts/your-script.sh`

928 

929**Hook이 예상 이벤트에서 트리거되지 않음**:

930 

9311. 이벤트 이름이 올바른지 확인 (대소문자 구분): `PostToolUse`, `postToolUse` 아님

9322. 매처 패턴이 도구와 일치하는지 확인: 파일 작업의 경우 `"matcher": "Write|Edit"`

9333. Hook 유형이 유효한지 확인: `command`, `http`, `mcp_tool`, `prompt` 또는 `agent`

934 

935### MCP 서버 문제 해결

936 

937**서버가 시작되지 않음**:

938 

9391. 명령어가 존재하고 실행 가능한지 확인

9402. 모든 경로가 `${CLAUDE_PLUGIN_ROOT}` 변수를 사용하는지 확인

9413. MCP 서버 로그 확인: `claude --debug`는 초기화 오류를 표시합니다

9424. Claude Code 외부에서 서버를 수동으로 테스트

943 

944**서버 도구가 나타나지 않음**:

945 

9461. 서버가 `.mcp.json` 또는 `plugin.json`에 올바르게 구성되었는지 확인

9472. 서버가 MCP 프로토콜을 올바르게 구현하는지 확인

9483. 디버그 출력에서 연결 시간 초과 확인

949 

950### 디렉토리 구조 실수

951 

952**증상**: 플러그인이 로드되지만 컴포넌트 (skills, agents, hooks)가 누락됨.

953 

954**올바른 구조**: 컴포넌트는 플러그인 루트에 있어야 하며 `.claude-plugin/` 내부가 아닙니다. `plugin.json`만 `.claude-plugin/`에 속합니다.

955 

956```text theme={null}

957my-plugin/

958├── .claude-plugin/

959│ └── plugin.json ← 매니페스트만 여기

960├── commands/ ← 루트 수준

961├── agents/ ← 루트 수준

962└── hooks/ ← 루트 수준

963```

964 

965컴포넌트가 `.claude-plugin/` 내부에 있으면 플러그인 루트로 이동하세요.

966 

967**디버그 체크리스트**:

968 

9691. `claude --debug`를 실행하고 "loading plugin" 메시지를 찾으세요

9702. 각 컴포넌트 디렉토리가 디버그 출력에 나열되는지 확인

9713. 파일 권한이 플러그인 파일 읽기를 허용하는지 확인

972 

973***

974 

975## 배포 및 버전 관리 참조

976 

977### 버전 관리

978 

979Claude Code는 플러그인의 버전을 캐시 키로 사용하여 업데이트를 사용할 수 있는지 여부를 결정합니다. `/plugin update`를 실행하거나 자동 업데이트가 실행되면 Claude Code는 현재 버전을 계산하고 이미 설치된 버전과 일치하면 업데이트를 건너뜁니다.

980 

981버전은 다음 중 설정된 첫 번째 항목에서 확인됩니다:

982 

9831. 플러그인의 `plugin.json`에 있는 `version` 필드

9842. `marketplace.json`의 플러그인 마켓플레이스 항목에 있는 `version` 필드

9853. git 호스팅 마켓플레이스의 `github`, `url`, `git-subdir` 및 상대 경로 소스에 대한 플러그인 소스의 git 커밋 SHA

9864. git 저장소 내에 있지 않은 `npm` 소스 또는 로컬 디렉토리의 경우 `unknown`

987 

988이는 플러그인을 버전 관리하는 두 가지 방법을 제공합니다:

989 

990| 접근 방식 | 방법 | 업데이트 동작 | 최적 사용 |

991| :------------ | :------------------------------------------ | :-------------------------------------------------------------------------------------------------- | :----------------------- |

992| **명시적 버전** | `plugin.json`에서 `"version": "2.1.0"`으로 설정 | 사용자는 이 필드를 범프할 때만 업데이트를 받습니다. 이를 범프하지 않고 새 커밋을 푸시하면 효과가 없으며 `/plugin update`는 "이미 최신 버전입니다"를 보고합니다. | 안정적인 릴리스 주기가 있는 게시된 플러그인 |

993| **커밋-SHA 버전** | `plugin.json` 및 마켓플레이스 항목 모두에서 `version` 생략 | 사용자는 플러그인의 git 소스에 대한 모든 새 커밋에서 업데이트를 받습니다 | 활발히 개발 중인 내부 또는 팀 플러그인 |

994 

995<Warning>

996 `plugin.json`에서 `version`을 설정하면 사용자가 변경 사항을 받기를 원할 때마다 이를 범프해야 합니다. 새 커밋을 푸시하는 것만으로는 충분하지 않습니다. Claude Code가 동일한 버전 문자열을 보고 캐시된 사본을 유지하기 때문입니다. 빠르게 반복하는 경우 `version`을 설정하지 않은 상태로 두어 대신 git 커밋 SHA가 사용되도록 하세요.

997</Warning>

998 

999명시적 버전을 사용하는 경우 [의미 있는 버전 관리](https://semver.org)(`MAJOR.MINOR.PATCH`)를 따르세요: 주요 변경 사항의 경우 MAJOR를 범프하고, 새로운 기능의 경우 MINOR를 범프하고, 버그 수정의 경우 PATCH를 범프하세요. `CHANGELOG.md`에서 변경 사항을 문서화하세요.

1000 

1001***

1002 

1003## 참고 항목

1004 

1005* [플러그인](/ko/plugins) - 튜토리얼 및 실제 사용

1006* [플러그인 마켓플레이스](/ko/plugin-marketplaces) - 마켓플레이스 생성 및 관리

1007* [Skills](/ko/skills) - Skill 개발 세부 정보

1008* [Subagents](/ko/sub-agents) - Agent 구성 및 기능

1009* [Hooks](/ko/hooks) - 이벤트 처리 및 자동화

1010* [MCP](/ko/mcp) - 외부 도구 통합

1011* [설정](/ko/settings) - 플러그인의 구성 옵션

quickstart.md +976 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 빠른 시작

6 

7> Claude Code에 오신 것을 환영합니다!

8 

9export const InstallConfigurator = ({defaultSurface = 'terminal'}) => {

10 const TERM = {

11 mac: {

12 label: 'macOS / Linux',

13 cmd: 'curl -fsSL https://claude.ai/install.sh | bash'

14 },

15 win: {

16 label: 'Windows'

17 },

18 brew: {

19 label: 'Homebrew',

20 cmd: 'brew install --cask claude-code'

21 },

22 winget: {

23 label: 'WinGet',

24 cmd: 'winget install Anthropic.ClaudeCode'

25 }

26 };

27 const WIN_VARIANTS = {

28 ps: 'irm https://claude.ai/install.ps1 | iex',

29 cmd: 'curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd'

30 };

31 const TABS = [{

32 key: 'terminal',

33 label: 'Terminal'

34 }, {

35 key: 'desktop',

36 label: 'Desktop'

37 }, {

38 key: 'vscode',

39 label: 'VS Code'

40 }, {

41 key: 'jetbrains',

42 label: 'JetBrains'

43 }];

44 const ALT_TARGETS = {

45 desktop: {

46 name: 'Desktop',

47 tagline: 'The full agent in a native app for macOS and Windows.',

48 installLabel: 'Download the app',

49 installHref: 'https://claude.com/download?utm_source=claude_code&utm_medium=docs&utm_content=configurator_desktop_download',

50 guideHref: '/en/desktop-quickstart'

51 },

52 vscode: {

53 name: 'VS Code',

54 tagline: 'Review diffs, manage context, and chat without leaving your editor.',

55 installLabel: 'Install from Marketplace',

56 installHref: 'https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code',

57 altCmd: 'code --install-extension anthropic.claude-code',

58 guideHref: '/en/vs-code'

59 },

60 jetbrains: {

61 name: 'JetBrains',

62 tagline: 'Native plugin for IntelliJ, PyCharm, WebStorm, and other JetBrains IDEs.',

63 installLabel: 'Install from Marketplace',

64 installHref: 'https://plugins.jetbrains.com/plugin/27310-claude-code-beta-',

65 guideHref: '/en/jetbrains'

66 }

67 };

68 const PROVIDERS = [{

69 key: 'anthropic',

70 label: 'Anthropic'

71 }, {

72 key: 'bedrock',

73 label: 'Amazon Bedrock'

74 }, {

75 key: 'foundry',

76 label: 'Microsoft Foundry'

77 }, {

78 key: 'vertex',

79 label: 'Google Vertex AI'

80 }];

81 const PROVIDER_NOTICE = {

82 bedrock: <>

83 <strong>Configure your AWS account first.</strong> Running on Bedrock

84 requires model access enabled in the AWS console and IAM credentials.{' '}

85 <a href="/en/amazon-bedrock">Bedrock setup guide →</a>

86 </>,

87 vertex: <>

88 <strong>Configure your GCP project first.</strong> Running on Vertex AI

89 requires the Vertex API enabled and a service account with the right

90 permissions.{' '}

91 <a href="/en/google-vertex-ai">Vertex setup guide →</a>

92 </>,

93 foundry: <>

94 <strong>Configure your Azure resources first.</strong> Running on

95 Microsoft Foundry requires an Azure subscription with a Foundry resource

96 and model deployments provisioned.{' '}

97 <a href="/en/microsoft-foundry">Foundry setup guide →</a>

98 </>

99 };

100 const iconCheck = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

101 <polyline points="20 6 9 17 4 12" />

102 </svg>;

103 const iconCopy = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

104 <rect x="9" y="9" width="13" height="13" rx="2" />

105 <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />

106 </svg>;

107 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

108 <line x1="5" y1="12" x2="19" y2="12" />

109 <polyline points="12 5 19 12 12 19" />

110 </svg>;

111 const iconArrowUpRight = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

112 <line x1="7" y1="17" x2="17" y2="7" />

113 <polyline points="7 7 17 7 17 17" />

114 </svg>;

115 const iconInfo = (size = 16) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

116 <circle cx="12" cy="12" r="10" />

117 <line x1="12" y1="16" x2="12" y2="12" />

118 <line x1="12" y1="8" x2="12.01" y2="8" />

119 </svg>;

120 const [target, setTarget] = useState(defaultSurface);

121 const [team, setTeam] = useState(false);

122 const [provider, setProvider] = useState('anthropic');

123 const [pkg, setPkg] = useState(() => (/Win/).test(navigator.userAgent) ? 'win' : 'mac');

124 const [winCmd, setWinCmd] = useState(false);

125 const [copied, setCopied] = useState(null);

126 const copyTimer = useRef(null);

127 const handleCopy = async (text, key) => {

128 try {

129 await navigator.clipboard.writeText(text);

130 } catch {

131 const ta = document.createElement('textarea');

132 ta.value = text;

133 document.body.appendChild(ta);

134 ta.select();

135 document.execCommand('copy');

136 document.body.removeChild(ta);

137 }

138 clearTimeout(copyTimer.current);

139 setCopied(key);

140 copyTimer.current = setTimeout(() => setCopied(null), 1800);

141 };

142 const cardBodyCmd = (cmd, prompt) => {

143 const on = copied === 'term';

144 return <div className="cc-ic-card-body">

145 <span className="cc-ic-prompt">{prompt || '$'}</span>

146 <div className="cc-ic-cmd">{cmd}</div>

147 <button type="button" className={'cc-ic-copy' + (on ? ' cc-ic-copied' : '')} onClick={() => handleCopy(cmd, 'term')}>

148 {on ? iconCheck(13) : iconCopy(13)}

149 <span>{on ? 'Copied' : 'Copy'}</span>

150 </button>

151 </div>;

152 };

153 const isWinInstaller = pkg === 'win';

154 const isWinPrompt = pkg === 'win' || pkg === 'winget';

155 const terminalCmd = isWinInstaller ? WIN_VARIANTS[winCmd ? 'cmd' : 'ps'] : TERM[pkg].cmd;

156 const alt = ALT_TARGETS[target];

157 const showNotice = team && provider !== 'anthropic';

158 const STYLES = `

159.cc-ic {

160 --ic-slate: #141413;

161 --ic-clay: #d97757;

162 --ic-clay-deep: #c6613f;

163 --ic-gray-000: #ffffff;

164 --ic-gray-150: #f0eee6;

165 --ic-gray-550: #73726c;

166 --ic-gray-700: #3d3d3a;

167 --ic-border-subtle: rgba(31, 30, 29, 0.08);

168 --ic-border-default: rgba(31, 30, 29, 0.15);

169 --ic-border-strong: rgba(31, 30, 29, 0.3);

170 --ic-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Courier New', monospace;

171 font-family: 'Anthropic Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

172 font-size: 14px; line-height: 1.5; color: var(--ic-slate);

173 margin: 8px 0 32px;

174}

175.dark .cc-ic {

176 --ic-slate: #f0eee6;

177 --ic-gray-000: #262624;

178 --ic-gray-150: #1f1e1d;

179 --ic-gray-550: #91908a;

180 --ic-gray-700: #bfbdb4;

181 --ic-border-subtle: rgba(240, 238, 230, 0.08);

182 --ic-border-default: rgba(240, 238, 230, 0.14);

183 --ic-border-strong: rgba(240, 238, 230, 0.28);

184}

185.dark .cc-ic-check { background: transparent; }

186.dark .cc-ic-card { border: 0.5px solid var(--ic-border-subtle); }

187.dark .cc-ic-p-pill.cc-ic-active { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); }

188.cc-ic *, .cc-ic *::before, .cc-ic *::after { box-sizing: border-box; }

189.cc-ic a { text-decoration: none; }

190.cc-ic a:not([class]) { color: inherit; }

191.cc-ic button { font-family: inherit; cursor: pointer; }

192 

193.cc-ic-tab-strip {

194 display: inline-flex; gap: 2px;

195 padding: 4px; background: var(--ic-gray-150);

196 border-radius: 10px; overflow-x: auto;

197 max-width: 100%;

198}

199.cc-ic-tab {

200 appearance: none; background: none; border: none;

201 padding: 10px 18px; font-size: 15px; font-weight: 430;

202 color: var(--ic-gray-550); border-radius: 7px;

203 white-space: nowrap;

204 transition: color 0.12s, background-color 0.12s;

205}

206.cc-ic-tab:hover { color: var(--ic-gray-700); }

207.cc-ic-tab.cc-ic-active {

208 color: var(--ic-slate); font-weight: 500;

209 background: var(--ic-gray-000);

210 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);

211}

212.dark .cc-ic-tab.cc-ic-active { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); }

213 

214.cc-ic-team-wrap { padding: 16px 0 20px; }

215.cc-ic-team-toggle {

216 display: flex; align-items: center; gap: 12px; font-family: inherit;

217 padding: 12px 16px; font-size: 14px; font-weight: 430;

218 color: var(--ic-gray-700); cursor: pointer; user-select: none;

219 width: fit-content; background: var(--ic-gray-150);

220 border: 0.5px solid var(--ic-border-subtle); border-radius: 8px;

221 transition: border-color 0.15s;

222}

223.cc-ic-team-toggle:hover { border-color: var(--ic-border-default); }

224.cc-ic-team-toggle.cc-ic-checked {

225 background: rgba(217, 119, 87, 0.08);

226 border-color: rgba(217, 119, 87, 0.25);

227}

228.cc-ic-check {

229 width: 16px; height: 16px;

230 border: 1px solid var(--ic-border-strong); border-radius: 4px;

231 background: var(--ic-gray-000);

232 display: flex; align-items: center; justify-content: center;

233 flex-shrink: 0;

234}

235.cc-ic-check svg { color: #fff; display: none; }

236.cc-ic-team-toggle.cc-ic-checked .cc-ic-check { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); }

237.cc-ic-team-toggle.cc-ic-checked .cc-ic-check svg { display: block; }

238 

239.cc-ic-team-reveal { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; }

240.cc-ic-sales {

241 display: flex; align-items: center; justify-content: space-between;

242 gap: 16px; padding: 14px 16px;

243 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

244 border-radius: 8px; flex-wrap: wrap;

245}

246.cc-ic-sales-text { font-size: 13px; color: var(--ic-gray-700); line-height: 1.5; flex: 1; min-width: 200px; }

247.cc-ic-sales-text strong { font-weight: 550; color: var(--ic-slate); }

248.cc-ic-sales-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

249.cc-ic-btn-clay {

250 display: inline-flex; align-items: center; gap: 8px;

251 background: var(--ic-clay-deep); color: #fff; border: none;

252 border-radius: 8px; padding: 8px 14px;

253 font-size: 13px; font-weight: 500;

254 transition: background-color 0.15s; white-space: nowrap;

255}

256.cc-ic-btn-clay:hover { background: var(--ic-clay); }

257.cc-ic-btn-ghost {

258 display: inline-flex; align-items: center; gap: 8px;

259 background: transparent; color: var(--ic-gray-700);

260 border: 0.5px solid var(--ic-border-default);

261 border-radius: 8px; padding: 8px 14px;

262 font-size: 13px; font-weight: 500;

263}

264.cc-ic-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

265 

266.cc-ic-provider-bar {

267 display: flex; align-items: center; gap: 12px;

268 padding: 14px 16px; background: var(--ic-gray-150);

269 border-radius: 8px; font-size: 13px; flex-wrap: wrap;

270}

271.cc-ic-provider-bar .cc-ic-label { color: var(--ic-gray-550); flex-shrink: 0; }

272.cc-ic-provider-pills { display: flex; gap: 4px; flex-wrap: wrap; }

273.cc-ic-p-pill {

274 appearance: none; border: none; background: transparent;

275 padding: 6px 12px; border-radius: 6px;

276 font-size: 13px; font-weight: 430; color: var(--ic-gray-700);

277 white-space: nowrap;

278}

279.cc-ic-p-pill:hover { background: rgba(0, 0, 0, 0.04); }

280.cc-ic-p-pill.cc-ic-active {

281 background: var(--ic-gray-000); color: var(--ic-slate);

282 font-weight: 500; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);

283}

284.cc-ic-provider-notice {

285 display: flex; padding: 16px 18px;

286 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

287 border-radius: 8px; gap: 14px; align-items: flex-start;

288}

289.cc-ic-provider-notice > svg { color: var(--ic-gray-550); margin-top: 2px; flex-shrink: 0; }

290.cc-ic-provider-notice-body { font-size: 14px; line-height: 1.55; color: var(--ic-gray-700); }

291.cc-ic-provider-notice-body strong { font-weight: 550; color: var(--ic-slate); }

292.cc-ic-provider-notice-body a { color: var(--ic-clay-deep); font-weight: 500; }

293.cc-ic-provider-notice-body a:hover { text-decoration: underline; }

294 

295.cc-ic-card { background: #141413; border-radius: 12px; overflow: hidden; }

296.cc-ic-subtabs {

297 display: flex; align-items: center;

298 background: #1a1918;

299 border-bottom: 0.5px solid rgba(255, 255, 255, 0.08);

300 padding: 0 8px; overflow-x: auto;

301}

302.cc-ic-subtab {

303 appearance: none; background: none; border: none;

304 padding: 12px 16px; font-size: 12px;

305 color: rgba(255, 255, 255, 0.5);

306 position: relative; white-space: nowrap;

307}

308.cc-ic-subtab:hover { color: rgba(255, 255, 255, 0.75); }

309.cc-ic-subtab.cc-ic-active { color: #fff; }

310.cc-ic-subtab.cc-ic-active::after {

311 content: ''; position: absolute;

312 left: 12px; right: 12px; bottom: -0.5px;

313 height: 2px; background: var(--ic-clay);

314}

315.cc-ic-shell-switch {

316 display: inline-flex; gap: 2px;

317 margin: 14px 26px 0; padding: 3px;

318 background: rgba(255, 255, 255, 0.06);

319 border: 0.5px solid rgba(255, 255, 255, 0.08);

320 border-radius: 8px;

321 font-family: inherit;

322}

323.cc-ic-shell-option {

324 font: inherit; font-size: 12px; font-weight: 500;

325 padding: 5px 12px; border-radius: 6px;

326 background: transparent; border: none;

327 color: rgba(255, 255, 255, 0.55);

328 cursor: pointer; user-select: none; white-space: nowrap;

329 transition: color 120ms ease, background-color 120ms ease;

330}

331.cc-ic-shell-option:hover { color: rgba(255, 255, 255, 0.85); }

332.cc-ic-shell-option.cc-ic-active {

333 background: rgba(255, 255, 255, 0.12);

334 color: #fff;

335 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);

336}

337 

338.cc-ic-card-body { padding: 24px 26px; display: flex; align-items: flex-start; gap: 14px; }

339.cc-ic-prompt {

340 color: var(--ic-clay); font-family: var(--ic-font-mono);

341 font-size: 17px; user-select: none; padding-top: 2px;

342}

343.cc-ic-cmd {

344 flex: 1; font-family: var(--ic-font-mono);

345 font-size: 17px; color: #f0eee6;

346 line-height: 1.55; white-space: pre-wrap; word-break: break-word;

347}

348.cc-ic-copy {

349 display: inline-flex; align-items: center; gap: 6px;

350 background: rgba(255, 255, 255, 0.08);

351 border: 0.5px solid rgba(255, 255, 255, 0.12);

352 color: rgba(255, 255, 255, 0.85);

353 padding: 7px 13px; border-radius: 8px;

354 font-size: 13px; font-weight: 500; flex-shrink: 0;

355}

356.cc-ic-copy:hover { background: rgba(255, 255, 255, 0.14); }

357.cc-ic-copy.cc-ic-copied { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); color: #fff; }

358 

359.cc-ic-below {

360 margin-top: 12px; font-size: 13px; color: var(--ic-gray-550);

361 display: flex; gap: 16px; flex-wrap: wrap; align-items: baseline;

362}

363.cc-ic-below a { color: var(--ic-gray-700); border-bottom: 0.5px solid var(--ic-border-default); }

364.cc-ic-below a:hover { color: var(--ic-clay-deep); border-bottom-color: var(--ic-clay-deep); }

365.cc-ic-handoff {

366 padding: 22px 24px;

367 background: linear-gradient(180deg, #faf9f4 0%, #f3f1e9 100%);

368 border: 0.5px solid var(--ic-border-default);

369 border-radius: 12px;

370 box-shadow: 0 1px 2px rgba(31, 30, 29, 0.04), 0 6px 16px -4px rgba(31, 30, 29, 0.06);

371}

372.dark .cc-ic-handoff {

373 background: linear-gradient(180deg, #262624 0%, #1f1e1d 100%);

374 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3), 0 6px 16px -4px rgba(0, 0, 0, 0.4);

375}

376.cc-ic-handoff-title {

377 font-size: 16px; font-weight: 550; color: var(--ic-slate);

378 letter-spacing: -0.01em; margin-bottom: 4px;

379}

380.cc-ic-handoff-sub {

381 font-size: 14px; line-height: 1.5; color: var(--ic-gray-700);

382 margin-bottom: 18px;

383}

384.cc-ic-handoff-actions { display: flex; gap: 10px; flex-wrap: wrap; }

385.cc-ic-handoff-alt {

386 margin-top: 12px; font-size: 12px; color: var(--ic-gray-550);

387}

388.cc-ic-handoff-alt code {

389 font-family: var(--ic-font-mono); font-size: 11px;

390 background: var(--ic-gray-150); padding: 2px 6px;

391 border-radius: 4px; color: var(--ic-gray-700);

392}

393.cc-ic-copy-sm {

394 appearance: none; border: none;

395 display: inline-flex; align-items: center; justify-content: center;

396 width: 22px; height: 22px;

397 margin-left: 4px; vertical-align: middle;

398 background: var(--ic-gray-150); color: var(--ic-gray-550);

399 border-radius: 4px;

400 transition: color 0.1s, background-color 0.1s;

401}

402.cc-ic-copy-sm:hover { color: var(--ic-gray-700); background: var(--ic-border-default); }

403.cc-ic-copy-sm.cc-ic-copied { background: var(--ic-clay-deep); color: #fff; }

404 

405@media (max-width: 720px) {

406 .cc-ic-tab { padding: 12px 14px; font-size: 14px; }

407 .cc-ic-sales-actions { width: 100%; }

408 .cc-ic-card-body { padding: 20px; }

409 .cc-ic-cmd { font-size: 15px; }

410}

411`;

412 return <div className="cc-ic not-prose">

413 <style>{STYLES}</style>

414 

415 {}

416 <div className="cc-ic-tab-strip" role="tablist">

417 {TABS.map(t => <button key={t.key} type="button" role="tab" aria-selected={target === t.key} className={'cc-ic-tab' + (target === t.key ? ' cc-ic-active' : '')} onClick={() => setTarget(t.key)}>

418 {t.label}

419 </button>)}

420 </div>

421 

422 {}

423 <div className="cc-ic-team-wrap">

424 <button type="button" role="switch" aria-checked={team} className={'cc-ic-team-toggle' + (team ? ' cc-ic-checked' : '')} onClick={() => setTeam(!team)}>

425 <span className="cc-ic-check">{iconCheck(11)}</span>

426 <span>

427 I’m buying for a team or company (SSO, AWS/Azure/GCP, central billing)

428 </span>

429 </button>

430 </div>

431 

432 {}

433 {team && <div className="cc-ic-team-reveal">

434 <div className="cc-ic-sales">

435 <div className="cc-ic-sales-text">

436 <strong>Set up your team:</strong> self-serve or talk to sales.

437 </div>

438 <div className="cc-ic-sales-actions">

439 <a href="https://claude.ai/upgrade?initialPlanType=team&amp;utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_get_started" className="cc-ic-btn-ghost">

440 Get started

441 </a>

442 <a href="https://www.anthropic.com/contact-sales?utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_contact_sales" className="cc-ic-btn-clay">

443 Contact sales {iconArrowRight()}

444 </a>

445 </div>

446 </div>

447 

448 <div className="cc-ic-provider-bar">

449 <span className="cc-ic-label">Run on</span>

450 <div className="cc-ic-provider-pills" role="radiogroup" aria-label="Provider">

451 {PROVIDERS.map(p => <button key={p.key} type="button" role="radio" aria-checked={provider === p.key} className={'cc-ic-p-pill' + (provider === p.key ? ' cc-ic-active' : '')} onClick={() => setProvider(p.key)}>

452 {p.label}

453 </button>)}

454 </div>

455 </div>

456 

457 {showNotice && <div className="cc-ic-provider-notice">

458 {iconInfo()}

459 <div className="cc-ic-provider-notice-body">

460 {PROVIDER_NOTICE[provider]}

461 </div>

462 </div>}

463 </div>}

464 

465 {}

466 {target === 'terminal' && <div className="cc-ic-card">

467 <div className="cc-ic-subtabs" role="tablist" aria-label="Install method">

468 {Object.keys(TERM).map(k => <button key={k} type="button" role="tab" aria-selected={pkg === k} className={'cc-ic-subtab' + (pkg === k ? ' cc-ic-active' : '')} onClick={() => setPkg(k)}>

469 {TERM[k].label}

470 </button>)}

471 </div>

472 {isWinInstaller && <div className="cc-ic-shell-switch" role="tablist" aria-label="Shell">

473 {[{

474 k: 'ps',

475 label: 'PowerShell'

476 }, {

477 k: 'cmd',

478 label: 'CMD'

479 }].map(({k, label}) => {

480 const active = k === 'cmd' === winCmd;

481 return <button key={k} type="button" role="tab" aria-selected={active} className={'cc-ic-shell-option' + (active ? ' cc-ic-active' : '')} onClick={() => setWinCmd(k === 'cmd')}>

482 {label}

483 </button>;

484 })}

485 </div>}

486 {cardBodyCmd(terminalCmd, isWinPrompt ? '>' : '$')}

487 </div>}

488 

489 {}

490 {target === 'terminal' && <div className="cc-ic-below">

491 {isWinInstaller && <span>

492 <a href="https://git-scm.com/downloads/win" target="_blank" rel="noopener">

493 Git for Windows

494 </a>{' '}

495 recommended. PowerShell is used if Git Bash is absent.

496 </span>}

497 {(pkg === 'brew' || pkg === 'winget') && <span>

498 Does not auto-update. Run{' '}

499 <code>{pkg === 'brew' ? 'brew upgrade claude-code' : 'winget upgrade Anthropic.ClaudeCode'}</code>{' '}

500 periodically.

501 </span>}

502 <a href="/en/troubleshoot-install">Installation troubleshooting</a>

503 </div>}

504 

505 {alt && <div className="cc-ic-handoff">

506 <div className="cc-ic-handoff-title">Claude Code for {alt.name}</div>

507 <div className="cc-ic-handoff-sub">{alt.tagline}</div>

508 <div className="cc-ic-handoff-actions">

509 <a href={alt.installHref} className="cc-ic-btn-clay" {...alt.installHref.startsWith('http') ? {

510 target: '_blank',

511 rel: 'noopener'

512 } : {}}>

513 {alt.installLabel} {iconArrowUpRight(13)}

514 </a>

515 <a href={alt.guideHref} className="cc-ic-btn-ghost">

516 {alt.name} guide {iconArrowRight(12)}

517 </a>

518 </div>

519 {alt.altCmd && <div className="cc-ic-handoff-alt">

520 or run <code>{alt.altCmd}</code>

521 <button type="button" className={'cc-ic-copy-sm' + (copied === 'alt' ? ' cc-ic-copied' : '')} onClick={() => handleCopy(alt.altCmd, 'alt')} aria-label="Copy command">

522 {copied === 'alt' ? iconCheck(11) : iconCopy(11)}

523 </button>

524 </div>}

525 </div>}

526 </div>;

527};

528 

529export const Experiment = ({flag, treatment, children}) => {

530 const VID_KEY = 'exp_vid';

531 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

532 const fnv1a = s => {

533 let h = 0x811c9dc5;

534 for (let i = 0; i < s.length; i++) {

535 h ^= s.charCodeAt(i);

536 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

537 }

538 return h >>> 0;

539 };

540 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

541 const [decision] = useState(() => {

542 const params = new URLSearchParams(location.search);

543 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

544 const force = params.get('gb-force');

545 if (force) {

546 for (const p of force.split(',')) {

547 const [k, v] = p.split(':');

548 if (k === flag) return {

549 variant: v || 'treatment',

550 track: false

551 };

552 }

553 }

554 if (navigator.globalPrivacyControl) {

555 return {

556 variant: 'control',

557 track: false

558 };

559 }

560 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

561 if (prefsMatch) {

562 try {

563 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

564 return {

565 variant: 'control',

566 track: false

567 };

568 }

569 } catch {

570 return {

571 variant: 'control',

572 track: false

573 };

574 }

575 } else {

576 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

577 if (!country || CONSENT_COUNTRIES.has(country)) {

578 return {

579 variant: 'control',

580 track: false

581 };

582 }

583 }

584 let vid;

585 try {

586 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

587 if (ajsMatch) {

588 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

589 } else {

590 vid = localStorage.getItem(VID_KEY);

591 if (!vid) {

592 vid = crypto.randomUUID();

593 }

594 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

595 }

596 try {

597 localStorage.setItem(VID_KEY, vid);

598 } catch {}

599 } catch {

600 return {

601 variant: 'control',

602 track: false

603 };

604 }

605 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

606 return {

607 variant,

608 track: true,

609 vid

610 };

611 });

612 useEffect(() => {

613 if (!decision.track) return;

614 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

615 method: 'POST',

616 headers: {

617 'Content-Type': 'application/json',

618 'x-service-name': 'claude_code_docs'

619 },

620 body: JSON.stringify({

621 events: [{

622 event_type: 'GrowthbookExperimentEvent',

623 event_data: {

624 device_id: decision.vid,

625 anonymous_id: decision.vid,

626 timestamp: new Date().toISOString(),

627 experiment_id: flag,

628 variation_id: decision.variant === 'treatment' ? 1 : 0,

629 environment: 'production'

630 }

631 }]

632 }),

633 keepalive: true

634 }).catch(() => {});

635 }, []);

636 return decision.variant === 'treatment' ? treatment : children;

637};

638 

639이 빠른 시작 가이드를 통해 몇 분 안에 AI 기반 코딩 지원을 사용할 수 있습니다. 이 가이드를 마치면 일반적인 개발 작업에 Claude Code를 사용하는 방법을 이해하게 됩니다.

640 

641<Experiment flag="quickstart-install-configurator" treatment={<InstallConfigurator />} />

642 

643## 시작하기 전에

644 

645다음을 확인하십시오:

646 

647* 열려 있는 터미널 또는 명령 프롬프트

648 * 터미널을 처음 사용하는 경우 [터미널 가이드](/ko/terminal-guide)를 확인하십시오

649* 작업할 코드 프로젝트

650* [Claude 구독](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=quickstart_prereq) (Pro, Max, Teams 또는 Enterprise), [Claude Console](https://console.anthropic.com/) 계정 또는 [지원되는 클라우드 제공자](/ko/third-party-integrations)를 통한 액세스

651 

652<Note>

653 이 가이드는 터미널 CLI를 다룹니다. Claude Code는 [웹](https://claude.ai/code), [데스크톱 앱](/ko/desktop), [VS Code](/ko/vs-code) 및 [JetBrains IDE](/ko/jetbrains), [Slack](/ko/slack), [GitHub Actions](/ko/github-actions) 및 [GitLab](/ko/gitlab-ci-cd)의 CI/CD에서도 사용할 수 있습니다. [모든 인터페이스](/ko/overview#use-claude-code-everywhere)를 참조하십시오.

654</Note>

655 

656## 단계 1: Claude Code 설치

657 

658To install Claude Code, use one of the following methods:

659 

660<Tabs>

661 <Tab title="Native Install (Recommended)">

662 **macOS, Linux, WSL:**

663 

664 ```bash theme={null}

665 curl -fsSL https://claude.ai/install.sh | bash

666 ```

667 

668 **Windows PowerShell:**

669 

670 ```powershell theme={null}

671 irm https://claude.ai/install.ps1 | iex

672 ```

673 

674 **Windows CMD:**

675 

676 ```batch theme={null}

677 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

678 ```

679 

680 If you see `The token '&&' is not a valid statement separator`, you're in PowerShell, not CMD. If you see `'irm' is not recognized as an internal or external command`, you're in CMD, not PowerShell. Your prompt shows `PS C:\` when you're in PowerShell and `C:\` without the `PS` when you're in CMD.

681 

682 [Git for Windows](https://git-scm.com/downloads/win) is recommended on native Windows so Claude Code can use the Bash tool. If Git for Windows is not installed, Claude Code uses PowerShell as the shell tool instead. WSL setups do not need Git for Windows.

683 

684 <Info>

685 Native installations automatically update in the background to keep you on the latest version.

686 </Info>

687 </Tab>

688 

689 <Tab title="Homebrew">

690 ```bash theme={null}

691 brew install --cask claude-code

692 ```

693 

694 Homebrew offers two casks. `claude-code` tracks the stable release channel, which is typically about a week behind and skips releases with major regressions. `claude-code@latest` tracks the latest channel and receives new versions as soon as they ship.

695 

696 <Info>

697 Homebrew installations do not auto-update. Run `brew upgrade claude-code` or `brew upgrade claude-code@latest`, depending on which cask you installed, to get the latest features and security fixes.

698 </Info>

699 </Tab>

700 

701 <Tab title="WinGet">

702 ```powershell theme={null}

703 winget install Anthropic.ClaudeCode

704 ```

705 

706 <Info>

707 WinGet installations do not auto-update. Run `winget upgrade Anthropic.ClaudeCode` periodically to get the latest features and security fixes.

708 </Info>

709 </Tab>

710</Tabs>

711 

712You can also install with [apt, dnf, or apk](/en/setup#install-with-linux-package-managers) on Debian, Fedora, RHEL, and Alpine.

713 

714## 단계 2: 계정에 로그인

715 

716Claude Code를 사용하려면 계정이 필요합니다. `claude` 명령으로 대화형 세션을 시작할 때 로그인해야 합니다:

717 

718```bash theme={null}

719claude

720# 처음 사용할 때 로그인하라는 메시지가 표시됩니다

721```

722 

723```bash theme={null}

724/login

725# 프롬프트를 따라 계정으로 로그인하십시오

726```

727 

728다음 계정 유형 중 하나를 사용하여 로그인할 수 있습니다:

729 

730* [Claude Pro, Max, Teams 또는 Enterprise](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=quickstart_login) (권장)

731* [Claude Console](https://console.anthropic.com/) (선불 크레딧이 있는 API 액세스). 처음 로그인할 때 비용 추적을 위해 Console에서 "Claude Code" 워크스페이스가 자동으로 생성됩니다.

732* [Amazon Bedrock, Google Vertex AI 또는 Microsoft Foundry](/ko/third-party-integrations) (엔터프라이즈 클라우드 제공자)

733 

734로그인하면 자격 증명이 저장되고 다시 로그인할 필요가 없습니다. 나중에 계정을 전환하려면 `/login` 명령을 사용하십시오.

735 

736## 단계 3: 첫 번째 세션 시작

737 

738프로젝트 디렉토리에서 터미널을 열고 Claude Code를 시작하십시오:

739 

740```bash theme={null}

741cd /path/to/your/project

742claude

743```

744 

745세션 정보, 최근 대화 및 최신 업데이트가 포함된 Claude Code 환영 화면이 표시됩니다. 사용 가능한 명령을 보려면 `/help`를 입력하거나 이전 대화를 계속하려면 `/resume`을 입력하십시오.

746 

747<Tip>

748 로그인(단계 2) 후 자격 증명이 시스템에 저장됩니다. [자격 증명 관리](/ko/authentication#credential-management)에서 자세히 알아보십시오.

749</Tip>

750 

751## 단계 4: 첫 번째 질문 하기

752 

753코드베이스를 이해하는 것부터 시작하겠습니다. 다음 명령 중 하나를 시도하십시오:

754 

755```text theme={null}

756이 프로젝트는 무엇을 하나요?

757```

758 

759Claude가 파일을 분석하고 요약을 제공합니다. 더 구체적인 질문을 할 수도 있습니다:

760 

761```text theme={null}

762이 프로젝트는 어떤 기술을 사용하나요?

763```

764 

765```text theme={null}

766주요 진입점은 어디인가요?

767```

768 

769```text theme={null}

770폴더 구조를 설명해주세요

771```

772 

773Claude의 기능에 대해 물어볼 수도 있습니다:

774 

775```text theme={null}

776Claude Code는 무엇을 할 수 있나요?

777```

778 

779```text theme={null}

780Claude Code에서 사용자 정의 skills를 만드는 방법은?

781```

782 

783```text theme={null}

784Claude Code는 Docker와 함께 작동할 수 있나요?

785```

786 

787<Note>

788 Claude Code는 필요에 따라 프로젝트 파일을 읽습니다. 수동으로 컨텍스트를 추가할 필요가 없습니다.

789</Note>

790 

791## 단계 5: 첫 번째 코드 변경 수행

792 

793이제 Claude Code가 실제 코딩을 하도록 해봅시다. 간단한 작업을 시도하십시오:

794 

795```text theme={null}

796주 파일에 hello world 함수 추가

797```

798 

799Claude Code는 다음을 수행합니다:

800 

8011. 적절한 파일 찾기

8022. 제안된 변경 사항 표시

8033. 승인 요청

8044. 편집 수행

805 

806<Note>

807 Claude Code는 파일을 수정하기 전에 항상 권한을 요청합니다. 개별 변경 사항을 승인하거나 세션에 대해 "모두 수락" 모드를 활성화할 수 있습니다.

808</Note>

809 

810## 단계 6: Claude Code와 함께 Git 사용

811 

812Claude Code는 Git 작업을 대화형으로 만듭니다:

813 

814```text theme={null}

815어떤 파일을 변경했나요?

816```

817 

818```text theme={null}

819설명적인 메시지로 변경 사항 커밋

820```

821 

822더 복잡한 Git 작업을 요청할 수도 있습니다:

823 

824```text theme={null}

825feature/quickstart라는 새 브랜치 생성

826```

827 

828```text theme={null}

829마지막 5개의 커밋 표시

830```

831 

832```text theme={null}

833병합 충돌을 해결하는 데 도움을 주세요

834```

835 

836## 단계 7: 버그 수정 또는 기능 추가

837 

838Claude는 디버깅 및 기능 구현에 능숙합니다.

839 

840자연어로 원하는 것을 설명하십시오:

841 

842```text theme={null}

843사용자 등록 양식에 입력 유효성 검사 추가

844```

845 

846또는 기존 문제를 수정하십시오:

847 

848```text theme={null}

849사용자가 빈 양식을 제출할 수 있는 버그가 있습니다 - 수정하세요

850```

851 

852Claude Code는 다음을 수행합니다:

853 

854* 관련 코드 찾기

855* 컨텍스트 이해

856* 솔루션 구현

857* 사용 가능한 경우 테스트 실행

858 

859## 단계 8: 다른 일반적인 워크플로우 시도

860 

861Claude와 함께 작업하는 여러 가지 방법이 있습니다:

862 

863**코드 리팩토링**

864 

865```text theme={null}

866인증 모듈을 콜백 대신 async/await를 사용하도록 리팩토링

867```

868 

869**테스트 작성**

870 

871```text theme={null}

872계산기 함수에 대한 단위 테스트 작성

873```

874 

875**문서 업데이트**

876 

877```text theme={null}

878설치 지침으로 README 업데이트

879```

880 

881**코드 검토**

882 

883```text theme={null}

884내 변경 사항을 검토하고 개선 사항을 제안해주세요

885```

886 

887<Tip>

888 도움이 되는 동료처럼 Claude와 대화하십시오. 달성하고 싶은 것을 설명하면 도움을 드릴 것입니다.

889</Tip>

890 

891## 필수 명령

892 

893일상적인 사용을 위한 가장 중요한 명령은 다음과 같습니다:

894 

895| 명령 | 기능 | 예시 |

896| ------------------- | --------------------- | ----------------------------------- |

897| `claude` | 대화형 모드 시작 | `claude` |

898| `claude "task"` | 일회성 작업 실행 | `claude "fix the build error"` |

899| `claude -p "query"` | 일회성 쿼리 실행 후 종료 | `claude -p "explain this function"` |

900| `claude -c` | 현재 디렉토리에서 가장 최근 대화 계속 | `claude -c` |

901| `claude -r` | 이전 대화 재개 | `claude -r` |

902| `claude commit` | Git 커밋 생성 | `claude commit` |

903| `/clear` | 대화 기록 지우기 | `/clear` |

904| `/help` | 사용 가능한 명령 표시 | `/help` |

905| `exit` 또는 Ctrl+C | Claude Code 종료 | `exit` |

906 

907전체 명령 목록은 [CLI 참조](/ko/cli-reference)를 참조하십시오.

908 

909## 초보자를 위한 팁

910 

911자세한 내용은 [모범 사례](/ko/best-practices) 및 [일반적인 워크플로우](/ko/common-workflows)를 참조하십시오.

912 

913<AccordionGroup>

914 <Accordion title="요청을 구체적으로 하기">

915 대신: "버그 수정"

916 

917 시도: "사용자가 잘못된 자격 증명을 입력한 후 빈 화면을 보는 로그인 버그 수정"

918 </Accordion>

919 

920 <Accordion title="단계별 지침 사용">

921 복잡한 작업을 단계로 나누기:

922 

923 ```text theme={null}

924 1. 사용자 프로필을 위한 새 데이터베이스 테이블 생성

925 2. 사용자 프로필을 가져오고 업데이트하는 API 엔드포인트 생성

926 3. 사용자가 자신의 정보를 보고 편집할 수 있는 웹페이지 구축

927 ```

928 </Accordion>

929 

930 <Accordion title="Claude가 먼저 탐색하도록 하기">

931 변경하기 전에 Claude가 코드를 이해하도록 하기:

932 

933 ```text theme={null}

934 데이터베이스 스키마 분석

935 ```

936 

937 ```text theme={null}

938 영국 고객이 가장 자주 반품하는 제품을 보여주는 대시보드 구축

939 ```

940 </Accordion>

941 

942 <Accordion title="바로가기로 시간 절약">

943 * `?`를 눌러 사용 가능한 모든 키보드 바로가기 보기

944 * Tab을 사용하여 명령 완성

945 * ↑를 눌러 명령 기록 보기

946 * `/`를 입력하여 모든 명령 및 skills 보기

947 </Accordion>

948</AccordionGroup>

949 

950## 다음 단계

951 

952기본 사항을 배웠으므로 더 고급 기능을 살펴보십시오:

953 

954<CardGroup cols={2}>

955 <Card title="Claude Code 작동 방식" icon="microchip" href="/ko/how-claude-code-works">

956 에이전트 루프, 기본 제공 도구 및 Claude Code가 프로젝트와 상호 작용하는 방식 이해

957 </Card>

958 

959 <Card title="모범 사례" icon="star" href="/ko/best-practices">

960 효과적인 프롬프팅 및 프로젝트 설정으로 더 나은 결과 얻기

961 </Card>

962 

963 <Card title="일반적인 워크플로우" icon="graduation-cap" href="/ko/common-workflows">

964 일반적인 작업에 대한 단계별 가이드

965 </Card>

966 

967 <Card title="Claude Code 확장" icon="puzzle-piece" href="/ko/features-overview">

968 CLAUDE.md, skills, hooks, MCP 등으로 사용자 정의

969 </Card>

970</CardGroup>

971 

972## 도움 받기

973 

974* **Claude Code에서**: `/help`를 입력하거나 "어떻게..."를 물어보기

975* **문서**: 여기 있습니다! 다른 가이드 찾아보기

976* **커뮤니티**: 팁과 지원을 위해 [Discord](https://www.anthropic.com/discord)에 참여하기

remote-control.md +259 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 모든 기기에서 로컬 세션 계속하기 (Remote Control)

6 

7> Remote Control을 사용하여 휴대폰, 태블릿 또는 모든 브라우저에서 로컬 Claude Code 세션을 계속할 수 있습니다. claude.ai/code 및 Claude 모바일 앱과 함께 작동합니다.

8 

9<Note>

10 Remote Control은 연구 미리보기 단계이며 모든 요금제에서 사용할 수 있습니다. Team 및 Enterprise의 경우 관리자가 [Claude Code 관리자 설정](https://claude.ai/admin-settings/claude-code)에서 Remote Control 토글을 활성화할 때까지 기본적으로 꺼져 있습니다.

11</Note>

12 

13Remote Control은 [claude.ai/code](https://claude.ai/code) 또는 [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) 및 [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude)용 Claude 앱을 컴퓨터에서 실행 중인 Claude Code 세션에 연결합니다. 책상에서 작업을 시작한 다음 소파의 휴대폰이나 다른 컴퓨터의 브라우저에서 계속할 수 있습니다.

14 

15컴퓨터에서 Remote Control 세션을 시작하면 Claude는 전체 시간 동안 로컬에서 실행되므로 클라우드로 이동하는 것이 없습니다. Remote Control을 사용하면 다음을 수행할 수 있습니다:

16 

17* **전체 로컬 환경을 원격으로 사용**: 파일 시스템, [MCP servers](/ko/mcp), 도구 및 프로젝트 구성이 모두 사용 가능하게 유지되며, `@`를 입력하면 로컬 프로젝트의 파일 경로가 자동 완성됩니다

18* **두 표면에서 동시에 작업**: 대화가 모든 연결된 기기에서 동기화되므로 터미널, 브라우저 및 휴대폰에서 메시지를 교대로 보낼 수 있습니다

19* **중단 극복**: 노트북이 절전 모드로 전환되거나 네트워크가 끊어지면 컴퓨터가 다시 온라인 상태가 될 때 세션이 자동으로 다시 연결됩니다

20 

21클라우드 인프라에서 실행되는 [웹의 Claude Code](/ko/claude-code-on-the-web)와 달리 Remote Control 세션은 컴퓨터에서 직접 실행되며 로컬 파일 시스템과 상호 작용합니다. 웹 및 모바일 인터페이스는 단지 해당 로컬 세션의 창일 뿐입니다.

22 

23<Note>

24 Remote Control에는 Claude Code v2.1.51 이상이 필요합니다. `claude --version`으로 버전을 확인하세요.

25</Note>

26 

27이 페이지에서는 설정, 세션을 시작하고 연결하는 방법, Remote Control과 웹의 Claude Code를 비교하는 방법을 다룹니다.

28 

29## 요구 사항

30 

31Remote Control을 사용하기 전에 환경이 다음 조건을 충족하는지 확인하세요:

32 

33* **구독**: Pro, Max, Team 및 Enterprise 요금제에서 사용 가능합니다. API 키는 지원되지 않습니다. Team 및 Enterprise의 경우 관리자가 먼저 [Claude Code 관리자 설정](https://claude.ai/admin-settings/claude-code)에서 Remote Control 토글을 활성화해야 합니다.

34* **인증**: `claude`를 실행하고 아직 로그인하지 않았다면 `/login`을 사용하여 claude.ai를 통해 로그인하세요.

35* **작업 공간 신뢰**: 작업 공간 신뢰 대화를 수락하려면 프로젝트 디렉토리에서 최소한 한 번 `claude`를 실행하세요.

36 

37## Remote Control 세션 시작

38 

39CLI 또는 VS Code 확장에서 Remote Control 세션을 시작할 수 있습니다. CLI는 세 가지 호출 모드를 제공하며, VS Code는 `/remote-control` 명령을 사용합니다.

40 

41<Tabs>

42 <Tab title="서버 모드">

43 프로젝트 디렉토리로 이동하여 다음을 실행하세요:

44 

45 ```bash theme={null}

46 claude remote-control

47 ```

48 

49 프로세스는 터미널에서 서버 모드로 계속 실행되어 원격 연결을 기다립니다. [다른 기기에서 연결](#다른-기기에서-연결)하는 데 사용할 수 있는 세션 URL을 표시하며, 스페이스바를 눌러 휴대폰에서 빠르게 액세스할 수 있는 QR 코드를 표시할 수 있습니다. 원격 세션이 활성화되어 있는 동안 터미널은 연결 상태 및 도구 활동을 표시합니다.

50 

51 사용 가능한 플래그:

52 

53 | 플래그 | 설명 |

54 | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

55 | `--name "My Project"` | claude.ai/code의 세션 목록에 표시되는 사용자 정의 세션 제목을 설정합니다. |

56 | `--remote-control-session-name-prefix <prefix>` | 명시적 이름이 설정되지 않았을 때 자동 생성된 세션 이름의 접두사입니다. 기본값은 컴퓨터의 호스트 이름이며, `myhost-graceful-unicorn`과 같은 이름을 생성합니다. 동일한 효과를 위해 `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX`를 설정하세요. |

57 | `--spawn <mode>` | 서버가 세션을 생성하는 방식입니다.<br />• `same-dir` (기본값): 모든 세션이 현재 작업 디렉토리를 공유하므로 동일한 파일을 편집할 때 충돌할 수 있습니다.<br />• `worktree`: 각 온디맨드 세션은 자체 [git worktree](/ko/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees)를 가져옵니다. git 저장소가 필요합니다.<br />• `session`: 단일 세션 모드입니다. 정확히 하나의 세션을 제공하고 추가 연결을 거부합니다. 시작 시에만 설정합니다.<br />런타임에 `w`를 눌러 `same-dir`과 `worktree` 사이를 전환하세요. |

58 | `--capacity <N>` | 최대 동시 세션 수입니다. 기본값은 32입니다. `--spawn=session`과 함께 사용할 수 없습니다. |

59 | `--verbose` | 자세한 연결 및 세션 로그를 표시합니다. |

60 | `--sandbox` / `--no-sandbox` | 파일 시스템 및 네트워크 격리를 위해 [샌드박싱](/ko/sandboxing)을 활성화하거나 비활성화합니다. 기본적으로 꺼져 있습니다. |

61 </Tab>

62 

63 <Tab title="대화형 세션">

64 Remote Control이 활성화된 일반 대화형 Claude Code 세션을 시작하려면 `--remote-control` 플래그(또는 `--rc`)를 사용하세요:

65 

66 ```bash theme={null}

67 claude --remote-control

68 ```

69 

70 선택적으로 세션의 이름을 전달하세요:

71 

72 ```bash theme={null}

73 claude --remote-control "My Project"

74 ```

75 

76 이렇게 하면 터미널에서 전체 대화형 세션을 얻을 수 있으며, claude.ai 또는 Claude 앱에서도 제어할 수 있습니다. `claude remote-control`(서버 모드)과 달리 세션이 원격으로도 사용 가능한 동안 로컬에서 메시지를 입력할 수 있습니다.

77 </Tab>

78 

79 <Tab title="기존 세션에서">

80 이미 Claude Code 세션에 있고 원격으로 계속하려면 `/remote-control`(또는 `/rc`) 명령을 사용하세요:

81 

82 ```text theme={null}

83 /remote-control

84 ```

85 

86 인수로 이름을 전달하여 사용자 정의 세션 제목을 설정하세요:

87 

88 ```text theme={null}

89 /remote-control My Project

90 ```

91 

92 이렇게 하면 현재 대화 기록을 이어받는 Remote Control 세션이 시작되며, [다른 기기에서 연결](#다른-기기에서-연결)하는 데 사용할 수 있는 세션 URL 및 QR 코드를 표시합니다. `--verbose`, `--sandbox` 및 `--no-sandbox` 플래그는 이 명령에서 사용할 수 없습니다.

93 </Tab>

94 

95 <Tab title="VS Code">

96 [Claude Code VS Code 확장](/ko/vs-code)에서 프롬프트 상자에 `/remote-control` 또는 `/rc`를 입력하거나 `/`로 명령 메뉴를 열고 선택하세요. Claude Code v2.1.79 이상이 필요합니다.

97 

98 ```text theme={null}

99 /remote-control

100 ```

101 

102 프롬프트 상자 위에 연결 상태를 표시하는 배너가 나타납니다. 연결되면 배너의 **브라우저에서 열기**를 클릭하여 세션으로 직접 이동하거나 [claude.ai/code](https://claude.ai/code)의 세션 목록에서 찾으세요. 세션 URL도 대화에 게시됩니다.

103 

104 연결을 끊으려면 배너의 닫기 아이콘을 클릭하거나 `/remote-control`을 다시 실행하세요.

105 

106 CLI와 달리 VS Code 명령은 이름 인수를 허용하지 않으며 QR 코드를 표시하지 않습니다. 세션 제목은 대화 기록 또는 첫 번째 프롬프트에서 파생됩니다.

107 </Tab>

108</Tabs>

109 

110### 다른 기기에서 연결

111 

112Remote Control 세션이 활성화되면 다른 기기에서 연결하는 몇 가지 방법이 있습니다:

113 

114* **세션 URL 열기**: 모든 브라우저에서 URL을 열어 [claude.ai/code](https://claude.ai/code)의 세션으로 직접 이동합니다.

115* **QR 코드 스캔**: 세션 URL 옆에 표시된 QR 코드를 스캔하여 Claude 앱에서 직접 열 수 있습니다. `claude remote-control`을 사용하면 스페이스바를 눌러 QR 코드 표시를 전환할 수 있습니다.

116* **[claude.ai/code](https://claude.ai/code) 또는 Claude 앱 열기**: 세션 목록에서 이름으로 세션을 찾습니다. Remote Control 세션은 온라인 상태일 때 녹색 상태 점이 있는 컴퓨터 아이콘을 표시합니다.

117 

118원격 세션 제목은 다음 순서로 선택됩니다:

119 

1201. `--name`, `--remote-control` 또는 `/remote-control`에 전달한 이름

1212. `/rename`으로 설정한 제목

1223. 기존 대화 기록의 마지막 의미 있는 메시지

1234. `myhost-graceful-unicorn`과 같은 자동 생성된 이름입니다. 여기서 `myhost`는 컴퓨터의 호스트 이름 또는 `--remote-control-session-name-prefix`로 설정한 접두사입니다.

124 

125명시적 이름을 설정하지 않았다면 메시지를 보낸 후 제목이 프롬프트를 반영하도록 업데이트됩니다.

126 

127환경에 이미 활성 세션이 있으면 계속할지 새로 시작할지 묻는 메시지가 표시됩니다.

128 

129Claude 앱이 아직 없으면 Claude Code 내에서 `/mobile` 명령을 사용하여 [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) 또는 [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude)용 다운로드 QR 코드를 표시하세요.

130 

131### 모든 세션에 대해 Remote Control 활성화

132 

133기본적으로 Remote Control은 `claude remote-control`, `claude --remote-control` 또는 `/remote-control`을 명시적으로 실행할 때만 활성화됩니다. 모든 대화형 세션에 대해 자동으로 활성화하려면 Claude Code 내에서 `/config`를 실행하고 **모든 세션에 대해 Remote Control 활성화**를 `true`로 설정하세요. 비활성화하려면 `false`로 다시 설정하세요.

134 

135이 설정이 켜져 있으면 각 대화형 Claude Code 프로세스는 하나의 원격 세션을 등록합니다. 여러 인스턴스를 실행하면 각각 자체 환경 및 세션을 가져옵니다. 단일 프로세스에서 여러 동시 세션을 실행하려면 [서버 모드](#remote-control-세션-시작)를 대신 사용하세요.

136 

137## 연결 및 보안

138 

139로컬 Claude Code 세션은 아웃바운드 HTTPS 요청만 수행하며 컴퓨터에서 인바운드 포트를 열지 않습니다. Remote Control을 시작하면 Anthropic API에 등록되고 작업을 폴링합니다. 다른 기기에서 연결하면 서버는 웹 또는 모바일 클라이언트와 로컬 세션 간의 메시지를 스트리밍 연결을 통해 라우팅합니다.

140 

141모든 트래픽은 TLS를 통해 Anthropic API를 통해 이동하며, 이는 모든 Claude Code 세션과 동일한 전송 보안입니다. 연결은 각각 단일 목적으로 범위가 지정되고 독립적으로 만료되는 여러 단기 자격 증명을 사용합니다.

142 

143## Remote Control과 웹의 Claude Code 비교

144 

145Remote Control과 [웹의 Claude Code](/ko/claude-code-on-the-web)는 모두 claude.ai/code 인터페이스를 사용합니다. 주요 차이점은 세션이 실행되는 위치입니다: Remote Control은 컴퓨터에서 실행되므로 로컬 MCP servers, 도구 및 프로젝트 구성이 사용 가능하게 유지됩니다. 웹의 Claude Code는 Anthropic 관리 클라우드 인프라에서 실행됩니다.

146 

147로컬 작업 중간에 있고 다른 기기에서 계속하려고 할 때 Remote Control을 사용하세요. 로컬 설정 없이 작업을 시작하거나, 복제하지 않은 저장소에서 작업하거나, 여러 작업을 병렬로 실행하려고 할 때 웹의 Claude Code를 사용하세요.

148 

149## 모바일 푸시 알림

150 

151Remote Control이 활성화되면 Claude는 휴대폰으로 푸시 알림을 보낼 수 있습니다.

152 

153Claude는 언제 푸시할지 결정합니다. 일반적으로 오래 실행되는 작업이 완료되거나 계속하기 위해 사용자의 결정이 필요할 때 하나를 보냅니다. 프롬프트에서 푸시를 요청할 수도 있습니다. 예를 들어 `테스트가 완료되면 알려주세요`. 아래의 켜기/끄기 토글 외에는 이벤트별 구성이 없습니다.

154 

155<Note>

156 모바일 푸시 알림에는 Claude Code v2.1.110 이상이 필요합니다.

157</Note>

158 

159모바일 푸시 알림을 설정하려면:

160 

161<Steps>

162 <Step title="Claude 모바일 앱 설치">

163 [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) 또는 [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude)용 Claude 앱을 다운로드하세요.

164 </Step>

165 

166 <Step title="Claude Code 계정으로 로그인">

167 터미널에서 Claude Code에 사용하는 동일한 계정 및 조직을 사용하세요.

168 </Step>

169 

170 <Step title="알림 허용">

171 운영 체제의 알림 권한 프롬프트를 수락하세요.

172 </Step>

173 

174 <Step title="Claude Code에서 푸시 활성화">

175 터미널에서 `/config`를 실행하고 **Claude가 결정할 때 푸시**를 활성화하세요.

176 </Step>

177</Steps>

178 

179알림이 도착하지 않으면:

180 

181* `/config`에 **등록된 모바일 없음**이 표시되면 휴대폰에서 Claude 앱을 열어 푸시 토큰을 새로 고칠 수 있습니다. Remote Control이 다음에 연결할 때 경고가 지워집니다.

182* iOS에서 포커스 모드 및 알림 요약이 푸시를 억제하거나 지연시킬 수 있습니다. 설정 → 알림 → Claude를 확인하세요.

183* Android에서 적극적인 배터리 최적화가 전달을 지연시킬 수 있습니다. 시스템 설정에서 Claude 앱을 배터리 최적화에서 제외하세요.

184 

185## 제한 사항

186 

187* **대화형 프로세스당 하나의 원격 세션**: 서버 모드 외부에서 각 Claude Code 인스턴스는 한 번에 하나의 원격 세션을 지원합니다. 단일 프로세스에서 여러 동시 세션을 실행하려면 [서버 모드](#start-a-remote-control-session)를 사용하세요.

188* **로컬 프로세스는 계속 실행되어야 함**: Remote Control은 로컬 프로세스로 실행됩니다. 터미널을 닫거나, VS Code를 종료하거나, 다른 방식으로 `claude` 프로세스를 중지하면 세션이 종료됩니다.

189* **장시간 네트워크 중단**: 컴퓨터가 켜져 있지만 약 10분 이상 네트워크에 도달할 수 없으면 세션이 시간 초과되고 프로세스가 종료됩니다. `claude remote-control`을 다시 실행하여 새 세션을 시작하세요.

190* **Ultraplan이 Remote Control 연결 해제**: [ultraplan](/ko/ultraplan) 세션을 시작하면 활성 Remote Control 세션이 연결 해제됩니다. 두 기능 모두 claude.ai/code 인터페이스를 차지하고 한 번에 하나만 연결될 수 있기 때문입니다.

191* **일부 명령은 로컬 전용**: `/mcp`, `/plugin` 또는 `/resume`과 같이 터미널에서 대화형 선택기를 여는 명령은 로컬 CLI에서만 작동합니다. `/compact`, `/clear`, `/context`, `/usage`, `/exit`, `/extra-usage`, `/recap` 및 `/reload-plugins`를 포함하여 텍스트 출력을 생성하는 명령은 모바일 및 웹에서 작동합니다.

192 

193## 문제 해결

194 

195### "Remote Control에는 claude.ai 구독이 필요합니다"

196 

197claude.ai 계정으로 인증되지 않았습니다. `claude auth login`을 실행하고 claude.ai 옵션을 선택하세요. `ANTHROPIC_API_KEY`가 환경에 설정되어 있으면 먼저 설정을 해제하세요.

198 

199### "Remote Control에는 전체 범위 로그인 토큰이 필요합니다"

200 

201`claude setup-token` 또는 `CLAUDE_CODE_OAUTH_TOKEN` 환경 변수의 장기 토큰으로 인증되었습니다. 이러한 토큰은 추론 전용으로 제한되며 Remote Control 세션을 설정할 수 없습니다. 대신 `claude auth login`을 실행하여 전체 범위 세션 토큰으로 인증하세요.

202 

203### "Remote Control 적격성을 위해 조직을 결정할 수 없습니다"

204 

205캐시된 계정 정보가 오래되었거나 불완전합니다. `claude auth login`을 실행하여 새로 고치세요.

206 

207### "Remote Control이 아직 계정에 대해 활성화되지 않았습니다"

208 

209특정 환경 변수가 있으면 적격성 확인이 실패할 수 있습니다:

210 

211* `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 또는 `DISABLE_TELEMETRY`: 설정을 해제하고 다시 시도하세요.

212* `CLAUDE_CODE_USE_BEDROCK`, `CLAUDE_CODE_USE_VERTEX` 또는 `CLAUDE_CODE_USE_FOUNDRY`: Remote Control은 claude.ai 인증이 필요하며 타사 제공자와 작동하지 않습니다.

213 

214이 중 어느 것도 설정되지 않았다면 `/logout`을 실행한 다음 `/login`을 실행하여 새로 고치세요.

215 

216### "Remote Control이 조직의 정책에 의해 비활성화되었습니다"

217 

218이 오류에는 세 가지 서로 다른 원인이 있습니다. 먼저 `/status`를 실행하여 사용 중인 로그인 방법과 구독을 확인하세요.

219 

220* **API 키 또는 Console 계정으로 인증됨**: Remote Control은 claude.ai OAuth가 필요합니다. `/login`을 실행하고 claude.ai 옵션을 선택하세요. `ANTHROPIC_API_KEY`가 환경에 설정되어 있으면 설정을 해제하세요.

221* **Team 또는 Enterprise 관리자가 활성화하지 않음**: Remote Control은 이러한 요금제에서 기본적으로 꺼져 있습니다. 관리자는 [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code)에서 **Remote Control** 토글을 켜서 활성화할 수 있습니다. 이는 서버 측 조직 설정이며 [관리 전용 설정](/ko/permissions#managed-only-settings) 키가 아닙니다.

222* **관리자 토글이 회색으로 표시됨**: 조직에 Remote Control과 호환되지 않는 데이터 보존 또는 규정 준수 구성이 있습니다. 이는 관리자 패널에서 변경할 수 없습니다. Anthropic 지원팀에 문의하여 옵션을 논의하세요.

223 

224### "원격 자격 증명 가져오기 실패"

225 

226Claude Code가 Anthropic API에서 연결을 설정하기 위한 단기 자격 증명을 얻을 수 없습니다. `--verbose`로 다시 실행하여 전체 오류를 확인하세요:

227 

228```bash theme={null}

229claude remote-control --verbose

230```

231 

232일반적인 원인:

233 

234* 로그인하지 않음: `claude`를 실행하고 `/login`을 사용하여 claude.ai 계정으로 인증하세요. API 키 인증은 Remote Control에서 지원되지 않습니다.

235* 네트워크 또는 프록시 문제: 방화벽 또는 프록시가 아웃바운드 HTTPS 요청을 차단할 수 있습니다. Remote Control은 포트 443의 Anthropic API에 대한 액세스가 필요합니다.

236* 세션 생성 실패: `Session creation failed — see debug log`도 표시되면 설정 초기에 실패가 발생했습니다. 구독이 활성 상태인지 확인하세요.

237 

238## 올바른 접근 방식 선택

239 

240Claude Code offers several ways to work when you're not at your terminal. They differ in what triggers the work, where Claude runs, and how much you need to set up.

241 

242| | Trigger | Claude runs on | Setup | Best for |

243| :--------------------------------------------- | :--------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------ |

244| [Dispatch](/en/desktop#sessions-from-dispatch) | Message a task from the Claude mobile app | Your machine (Desktop) | [Pair the mobile app with Desktop](https://support.claude.com/en/articles/13947068) | Delegating work while you're away, minimal setup |

245| [Remote Control](/en/remote-control) | Drive a running session from [claude.ai/code](https://claude.ai/code) or the Claude mobile app | Your machine (CLI or VS Code) | Run `claude remote-control` | Steering in-progress work from another device |

246| [Channels](/en/channels) | Push events from a chat app like Telegram or Discord, or your own server | Your machine (CLI) | [Install a channel plugin](/en/channels#quickstart) or [build your own](/en/channels-reference) | Reacting to external events like CI failures or chat messages |

247| [Slack](/en/slack) | Mention `@Claude` in a team channel | Anthropic cloud | [Install the Slack app](/en/slack#setting-up-claude-code-in-slack) with [Claude Code on the web](/en/claude-code-on-the-web) enabled | PRs and reviews from team chat |

248| [Scheduled tasks](/en/scheduled-tasks) | Set a schedule | [CLI](/en/scheduled-tasks), [Desktop](/en/desktop-scheduled-tasks), or [cloud](/en/routines) | Pick a frequency | Recurring automation like daily reviews |

249 

250## 관련 리소스

251 

252* [웹의 Claude Code](/ko/claude-code-on-the-web): 컴퓨터 대신 Anthropic 관리 클라우드 환경에서 세션 실행

253* [Ultraplan](/ko/ultraplan): 터미널에서 클라우드 계획 세션을 시작하고 브라우저에서 계획을 검토합니다

254* [채널](/ko/channels): Telegram, Discord 또는 iMessage를 세션으로 전달하여 Claude가 자리를 비운 동안 메시지에 반응하도록 합니다

255* [Dispatch](/ko/desktop#sessions-from-dispatch): 휴대폰에서 작업을 메시지로 보내면 Desktop 세션을 생성하여 처리할 수 있습니다

256* [인증](/ko/authentication): `/login` 설정 및 claude.ai 자격 증명 관리

257* [CLI 참조](/ko/cli-reference): `claude remote-control`을 포함한 플래그 및 명령의 전체 목록

258* [보안](/ko/security): Remote Control 세션이 Claude Code 보안 모델에 어떻게 적합한지

259* [데이터 사용](/ko/data-usage): 로컬 및 원격 세션 중에 Anthropic API를 통해 흐르는 데이터

routines.md +319 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 루틴으로 작업 자동화하기

6 

7> Claude Code를 자동 조종 장치에 올려놓으세요. Anthropic 관리 클라우드 인프라에서 일정에 따라 실행되거나 API 호출로 트리거되거나 GitHub 이벤트에 반응하는 루틴을 정의하세요.

8 

9<Note>

10 루틴은 연구 미리보기 상태입니다. 동작, 제한 사항 및 API 표면이 변경될 수 있습니다.

11</Note>

12 

13루틴은 저장된 Claude Code 구성입니다. 프롬프트, 하나 이상의 저장소, 그리고 [커넥터](/ko/mcp) 세트를 한 번에 패키징하여 자동으로 실행합니다. 루틴은 Anthropic 관리 클라우드 인프라에서 실행되므로 노트북을 닫아도 계속 작동합니다.

14 

15각 루틴에는 하나 이상의 트리거를 연결할 수 있습니다.

16 

17* **예약됨**: 시간별, 야간, 또는 주간과 같은 반복 주기로 실행

18* **API**: HTTP POST를 루틴별 엔드포인트로 보내 베어러 토큰으로 요청 시 트리거

19* **GitHub**: 풀 요청 또는 릴리스와 같은 저장소 이벤트에 자동으로 반응하여 실행

20 

21단일 루틴은 트리거를 결합할 수 있습니다. 예를 들어 PR 검토 루틴은 야간에 실행되고, 배포 스크립트에서 트리거되며, 모든 새로운 PR에도 반응할 수 있습니다.

22 

23루틴은 [웹에서 Claude Code](/ko/claude-code-on-the-web)가 활성화된 Pro, Max, Team 및 Enterprise 플랜에서 사용할 수 있습니다. [claude.ai/code/routines](https://claude.ai/code/routines)에서 생성 및 관리하거나 CLI에서 `/schedule`로 관리하세요.

24 

25이 페이지에서는 루틴 생성, 각 트리거 유형 구성, 실행 관리 및 사용 제한 적용 방법을 다룹니다.

26 

27## 사용 사례 예시

28 

29각 예시는 트리거 유형을 루틴이 적합한 작업 종류와 짝지어줍니다. 무인 상태에서 반복 가능하며 명확한 결과와 연결된 작업입니다.

30 

31**백로그 유지 관리.** 일정 트리거가 커넥터를 통해 이슈 추적기에 대해 매주 평일 밤에 실행됩니다. 루틴은 마지막 실행 이후 열린 이슈를 읽고, 레이블을 적용하고, 참조된 코드 영역을 기반으로 소유자를 할당하고, Slack에 요약을 게시하여 팀이 정리된 큐로 하루를 시작할 수 있도록 합니다.

32 

33**경고 분류.** 모니터링 도구가 오류 임계값을 초과할 때 루틴의 API 엔드포인트를 호출하고 경고 본문을 `text`로 전달합니다. 루틴은 스택 추적을 가져오고, 저장소의 최근 커밋과 상관관계를 지으며, 제안된 수정 사항과 경고로 돌아가는 링크가 있는 초안 풀 요청을 엽니다. 온콜 담당자는 빈 터미널에서 시작하는 대신 PR을 검토합니다.

34 

35**맞춤형 코드 검토.** GitHub 트리거가 `pull_request.opened`에서 실행됩니다. 루틴은 팀의 자체 검토 체크리스트를 적용하고, 보안, 성능 및 스타일 문제에 대해 인라인 댓글을 남기고, 요약 댓글을 추가하여 인간 검토자가 기계적 검사 대신 설계에 집중할 수 있도록 합니다.

36 

37**배포 검증.** CD 파이프라인이 각 프로덕션 배포 후 루틴의 API 엔드포인트를 호출합니다. 루틴은 새 빌드에 대해 스모크 테스트를 실행하고, 오류 로그에서 회귀를 스캔하고, 배포 윈도우가 닫히기 전에 릴리스 채널에 진행 또는 진행 불가를 게시합니다.

38 

39**문서 드리프트.** 일정 트리거가 매주 실행됩니다. 루틴은 마지막 실행 이후 병합된 PR을 스캔하고, 변경된 API를 참조하는 문서에 플래그를 지정하고, 편집자가 검토할 수 있도록 문서 저장소에 대해 업데이트 PR을 엽니다.

40 

41**라이브러리 포트.** GitHub 트리거가 한 SDK 저장소의 병합된 PR로 필터링된 `pull_request.closed`에서 실행됩니다. 루틴은 변경 사항을 다른 언어의 병렬 SDK로 포트하고 일치하는 PR을 열어 두 라이브러리를 동기화 상태로 유지하며 인간이 각 변경 사항을 다시 구현할 필요가 없습니다.

42 

43아래 섹션에서는 루틴을 생성하고 이러한 각 트리거 유형을 구성하는 방법을 설명합니다.

44 

45## 루틴 생성

46 

47웹, 데스크톱 앱 또는 CLI에서 루틴을 생성하세요. 세 가지 표면 모두 동일한 클라우드 계정에 쓰므로 CLI에서 생성한 루틴이 즉시 claude.ai/code/routines에 표시됩니다. 데스크톱 앱에서 **새 작업**을 클릭하고 **새 원격 작업**을 선택하세요. **새 로컬 작업**을 선택하면 [로컬 데스크톱 예약 작업](/ko/desktop-scheduled-tasks)이 생성되며, 이는 머신에서 실행되고 루틴이 아닙니다.

48 

49생성 양식은 루틴의 프롬프트, 저장소, 환경, 커넥터 및 트리거를 설정합니다.

50 

51루틴은 완전한 Claude Code 클라우드 세션으로 자율적으로 실행됩니다. 권한 모드 선택기나 실행 중 승인 프롬프트가 없습니다. 세션은 셸 명령을 실행하고, 복제된 저장소에 커밋된 [스킬](/ko/skills)을 사용하고, 포함된 모든 커넥터를 호출할 수 있습니다. 루틴이 도달할 수 있는 것은 선택한 저장소와 해당 브랜치 푸시 설정, [환경의](/ko/claude-code-on-the-web#the-cloud-environment) 네트워크 액세스 및 변수, 그리고 포함된 커넥터에 의해 결정됩니다. 루틴이 실제로 필요한 것으로 각각을 범위 지정하세요.

52 

53루틴은 개별 claude.ai 계정에 속합니다. 팀원과 공유되지 않으며 계정의 일일 실행 허용량에 대해 계산됩니다. 루틴이 연결된 GitHub 신원 또는 커넥터를 통해 수행하는 모든 작업은 사용자로 표시됩니다. 커밋 및 풀 요청은 GitHub 사용자를 전달하고, Slack 메시지, Linear 티켓 또는 기타 커넥터 작업은 해당 서비스에 대해 연결된 계정을 사용합니다.

54 

55### 웹에서 생성

56 

57<Steps>

58 <Step title="생성 양식 열기">

59 [claude.ai/code/routines](https://claude.ai/code/routines)를 방문하고 **새 루틴**을 클릭하세요.

60 </Step>

61 

62 <Step title="루틴 이름 지정 및 프롬프트 작성">

63 루틴에 설명적인 이름을 지정하고 Claude가 매번 실행할 프롬프트를 작성하세요. 프롬프트가 가장 중요한 부분입니다. 루틴이 자율적으로 실행되므로 프롬프트는 자체 포함되어야 하며 수행할 작업과 성공이 무엇인지에 대해 명시적이어야 합니다.

64 

65 프롬프트 입력에는 모델 선택기가 포함됩니다. Claude는 모든 실행에서 선택된 모델을 사용합니다.

66 </Step>

67 

68 <Step title="저장소 선택">

69 Claude가 작업할 하나 이상의 GitHub 저장소를 추가하세요. 각 저장소는 실행 시작 시 기본 브랜치에서 시작하여 복제됩니다. Claude는 변경 사항에 대해 `claude/` 접두사가 붙은 브랜치를 생성합니다. 모든 브랜치로의 푸시를 허용하려면 해당 저장소에 대해 **제한 없는 브랜치 푸시 허용**을 활성화하세요.

70 </Step>

71 

72 <Step title="환경 선택">

73 루틴에 대해 [클라우드 환경](/ko/claude-code-on-the-web#the-cloud-environment)을 선택하세요. 환경은 클라우드 세션이 액세스할 수 있는 것을 제어합니다.

74 

75 * **네트워크 액세스**: 각 실행 중에 사용 가능한 인터넷 액세스 수준 설정

76 * **환경 변수**: Claude가 사용할 수 있는 API 키, 토큰 또는 기타 비밀 제공

77 * **설정 스크립트**: 루틴이 필요한 종속성 및 도구를 설치합니다. 결과는 [캐시됩니다](/ko/claude-code-on-the-web#environment-caching). 따라서 스크립트는 모든 세션에서 다시 실행되지 않습니다.

78 

79 **기본** 환경이 제공됩니다. 사용자 정의 환경을 사용하려면 루틴을 생성하기 전에 [하나를 생성](/ko/claude-code-on-the-web#the-cloud-environment)하세요.

80 </Step>

81 

82 <Step title="트리거 선택">

83 **트리거 선택** 아래에서 루틴이 시작되는 방식을 선택하세요. 하나의 트리거 유형을 선택하거나 여러 개를 결합할 수 있습니다.

84 

85 <Tabs>

86 <Tab title="일정">

87 사전 설정된 빈도를 선택하세요. 시간별, 일일, 평일 또는 주간. 시간대 처리, 엇갈림 및 사용자 정의 cron 간격은 [일정 트리거 추가](#add-a-schedule-trigger)를 참조하세요.

88 </Tab>

89 

90 <Tab title="GitHub 이벤트">

91 저장소, 반응할 이벤트 및 선택적 필터를 선택하세요. 지원되는 이벤트 및 필터 필드의 전체 목록은 [GitHub 트리거 추가](#add-a-github-trigger)를 참조하세요.

92 </Tab>

93 

94 <Tab title="API">

95 여기서 **API**를 선택한 다음 루틴을 저장하세요. URL과 토큰은 루틴 ID에 따라 달라지므로 루틴이 저장된 후 생성됩니다. URL을 복사하고 토큰을 생성하려면 [API 트리거 추가](#add-an-api-trigger)를 참조하세요.

96 </Tab>

97 </Tabs>

98 </Step>

99 

100 <Step title="커넥터 검토">

101 연결된 모든 [MCP 커넥터](/ko/mcp)는 기본적으로 포함됩니다. 루틴이 필요하지 않은 것을 제거하세요. 커넥터는 Claude에게 각 실행 중에 Slack, Linear 또는 Google Drive와 같은 외부 서비스에 액세스할 수 있게 합니다.

102 </Step>

103 

104 <Step title="루틴 생성">

105 **생성**을 클릭하세요. 루틴이 목록에 나타나고 다음 번에 트리거 중 하나가 일치할 때 실행됩니다. 즉시 실행을 시작하려면 루틴의 세부 정보 페이지에서 **지금 실행**을 클릭하세요.

106 

107 각 실행은 다른 세션과 함께 새 세션을 생성하므로 Claude가 수행한 작업을 확인하고, 변경 사항을 검토하고, 풀 요청을 생성할 수 있습니다.

108 </Step>

109</Steps>

110 

111### CLI에서 생성

112 

113모든 세션에서 `/schedule`을 실행하여 예약된 루틴을 대화식으로 생성하세요. `/schedule daily PR review at 9am`과 같이 설명을 직접 전달할 수도 있습니다. Claude는 웹 양식이 수집하는 동일한 정보를 안내한 다음 루틴을 계정에 저장합니다.

114 

115CLI의 `/schedule`은 예약된 루틴만 생성합니다. API 또는 GitHub 트리거를 추가하려면 [claude.ai/code/routines](https://claude.ai/code/routines)의 웹에서 루틴을 편집하세요.

116 

117CLI는 기존 루틴 관리도 지원합니다. `/schedule list`를 실행하여 모든 루틴을 보거나, `/schedule update`를 실행하여 하나를 변경하거나, `/schedule run`을 실행하여 즉시 트리거하세요.

118 

119### 데스크톱 앱에서 생성

120 

121데스크톱 앱에서 **일정** 페이지를 열고 **새 작업**을 클릭한 다음 **새 원격 작업**을 선택하세요. 데스크톱 앱은 로컬 예약 작업과 루틴을 동일한 그리드에 표시합니다. 로컬 옵션에 대한 자세한 내용은 [데스크톱 예약 작업](/ko/desktop-scheduled-tasks)을 참조하세요.

122 

123## 트리거 구성

124 

125루틴은 트리거 중 하나가 일치할 때 시작됩니다. 동일한 루틴에 일정, API 및 GitHub 트리거의 모든 조합을 연결할 수 있으며, 루틴의 편집 양식의 **트리거 선택** 섹션에서 언제든지 추가하거나 제거할 수 있습니다.

126 

127### 일정 트리거 추가

128 

129일정 트리거는 반복 주기에 따라 루틴을 실행합니다. **트리거 선택** 섹션에서 사전 설정된 빈도를 선택하세요. 시간별, 일일, 평일 또는 주간. 시간은 로컬 시간대에 입력되고 자동으로 변환되므로 클라우드 인프라가 어디에 있든 루틴이 해당 벽시계 시간에 실행됩니다.

130 

131실행은 엇갈림으로 인해 예약된 시간 몇 분 후에 시작될 수 있습니다. 오프셋은 각 루틴에 대해 일관됩니다.

132 

1332시간마다 또는 매월 1일과 같은 사용자 정의 간격의 경우 양식에서 가장 가까운 사전 설정을 선택한 다음 CLI에서 `/schedule update`를 실행하여 특정 cron 표현식을 설정하세요. 최소 간격은 1시간입니다. 더 자주 실행되는 표현식은 거부됩니다.

134 

135### API 트리거 추가

136 

137API 트리거는 루틴에 전용 HTTP 엔드포인트를 제공합니다. 루틴의 베어러 토큰으로 엔드포인트에 POST하면 새 세션이 시작되고 세션 URL이 반환됩니다. 이를 사용하여 Claude Code를 경고 시스템, 배포 파이프라인, 내부 도구 또는 인증된 HTTP 요청을 할 수 있는 곳에 연결하세요.

138 

139API 트리거는 웹에서 기존 루틴에 추가됩니다. CLI는 현재 토큰을 생성하거나 취소할 수 없습니다.

140 

141<Steps>

142 <Step title="편집을 위해 루틴 열기">

143 [claude.ai/code/routines](https://claude.ai/code/routines)로 이동하고, API를 통해 트리거하려는 루틴을 클릭한 다음, 연필 아이콘을 클릭하여 **루틴 편집**을 엽니다.

144 </Step>

145 

146 <Step title="API 트리거 추가">

147 프롬프트 아래의 **트리거 선택** 섹션으로 스크롤하고, **다른 트리거 추가**를 클릭한 다음, **API**를 선택하세요.

148 </Step>

149 

150 <Step title="URL 복사 및 토큰 생성">

151 모달은 이 루틴의 URL과 샘플 curl 명령을 표시합니다. URL을 복사한 다음 **토큰 생성**을 클릭하고 토큰을 즉시 복사하세요. 토큰은 한 번만 표시되며 나중에 검색할 수 없으므로 경고 도구의 비밀 저장소와 같은 안전한 곳에 저장하세요.

152 </Step>

153 

154 <Step title="엔드포인트 호출">

155 URL에 POST할 때 `Authorization: Bearer` 헤더에 토큰을 보내세요. 아래의 [루틴 트리거](#trigger-a-routine) 섹션에서 완전한 예시를 보여줍니다.

156 </Step>

157</Steps>

158 

159각 루틴에는 자체 토큰이 있으며, 해당 루틴 트리거로만 범위가 지정됩니다. 회전하거나 취소하려면 동일한 모달로 돌아가 **재생성** 또는 **취소**를 클릭하세요.

160 

161#### 루틴 트리거

162 

163`/fire` 엔드포인트에 `Authorization` 헤더의 베어러 토큰으로 POST 요청을 보내세요. 요청 본문은 경고 본문 또는 실패한 로그와 같은 실행별 컨텍스트에 대한 선택적 `text` 필드를 수락하며, 저장된 프롬프트와 함께 루틴에 전달됩니다. 값은 자유 형식 텍스트이며 구문 분석되지 않습니다. JSON 또는 다른 구조화된 페이로드를 보내면 루틴은 이를 리터럴 문자열로 받습니다.

164 

165아래 예시는 셸에서 루틴을 트리거합니다.

166 

167```bash theme={null}

168curl -X POST https://api.anthropic.com/v1/claude_code/routines/trig_01ABCDEFGHJKLMNOPQRSTUVW/fire \

169 -H "Authorization: Bearer sk-ant-oat01-xxxxx" \

170 -H "anthropic-beta: experimental-cc-routine-2026-04-01" \

171 -H "anthropic-version: 2023-06-01" \

172 -H "Content-Type: application/json" \

173 -d '{"text": "Sentry alert SEN-4521 fired in prod. Stack trace attached."}'

174```

175 

176성공한 요청은 새 세션 ID와 URL이 있는 JSON 본문을 반환합니다.

177 

178```json theme={null}

179{

180 "type": "routine_fire",

181 "claude_code_session_id": "session_01HJKLMNOPQRSTUVWXYZ",

182 "claude_code_session_url": "https://claude.ai/code/session_01HJKLMNOPQRSTUVWXYZ"

183}

184```

185 

186브라우저에서 세션 URL을 열어 실시간으로 실행을 보거나, 변경 사항을 검토하거나, 대화를 수동으로 계속하세요.

187 

188<Warning>

189 `/fire` 엔드포인트는 `experimental-cc-routine-2026-04-01` 베타 헤더 아래에서 제공됩니다. 요청 및 응답 형태, 속도 제한 및 토큰 의미론은 기능이 연구 미리보기 상태인 동안 변경될 수 있습니다. 주요 변경 사항은 새로운 날짜 지정 베타 헤더 버전 뒤에 제공되며, 가장 최근의 이전 헤더 버전 두 개는 계속 작동하므로 호출자가 마이그레이션할 시간이 있습니다.

190</Warning>

191 

192#### API 참조

193 

194모든 오류 응답, 검증 규칙 및 필드 제한을 포함한 전체 API 참조는 Claude 플랫폼 설명서의 [API를 통해 루틴 트리거](https://platform.claude.com/docs/ko/api/claude-code/routines-fire)를 참조하세요.

195 

196`/fire` 엔드포인트는 claude.ai 사용자만 사용할 수 있으며 Claude 플랫폼 API 표면의 일부가 아닙니다.

197 

198### GitHub 트리거 추가

199 

200GitHub 트리거는 연결된 저장소에서 일치하는 이벤트가 발생할 때 자동으로 새 세션을 시작합니다. 각 일치하는 이벤트는 자체 세션을 시작합니다.

201 

202<Note>

203 연구 미리보기 중에 GitHub 웹훅 이벤트는 루틴별 및 계정별 시간당 상한선이 있습니다. 제한을 초과하는 이벤트는 윈도우가 재설정될 때까지 삭제됩니다. [claude.ai/code/routines](https://claude.ai/code/routines)에서 현재 제한을 확인하세요.

204</Note>

205 

206GitHub 트리거는 웹 UI에서만 구성됩니다.

207 

208<Steps>

209 <Step title="편집을 위해 루틴 열기">

210 [claude.ai/code/routines](https://claude.ai/code/routines)로 이동하고, 루틴을 클릭한 다음, 연필 아이콘을 클릭하여 **루틴 편집**을 엽니다.

211 </Step>

212 

213 <Step title="GitHub 이벤트 트리거 추가">

214 **트리거 선택** 섹션으로 스크롤하고, **다른 트리거 추가**를 클릭한 다음, **GitHub 이벤트**를 선택하세요.

215 </Step>

216 

217 <Step title="Claude GitHub 앱 설치">

218 Claude GitHub 앱을 구독하려는 저장소에 설치해야 합니다. 트리거 설정은 아직 설치되지 않은 경우 설치하도록 요청합니다.

219 

220 <Note>

221 CLI에서 `/web-setup`을 실행하면 복제를 위한 저장소 액세스 권한이 부여되지만 Claude GitHub 앱을 설치하지 않으며 웹훅 전달을 활성화하지 않습니다. GitHub 트리거는 Claude GitHub 앱을 설치해야 하며, 트리거 설정이 이를 수행하도록 요청합니다.

222 </Note>

223 </Step>

224 

225 <Step title="트리거 구성">

226 저장소를 선택하고, [지원되는 이벤트](#supported-events) 목록에서 이벤트를 선택하고, 선택적으로 필터를 추가하세요. 트리거를 저장하세요.

227 </Step>

228</Steps>

229 

230#### 지원되는 이벤트

231 

232GitHub 트리거는 다음 이벤트 범주 중 하나를 구독할 수 있습니다. 각 범주 내에서 `pull_request.opened`와 같은 특정 작업을 선택하거나 범주의 모든 작업에 반응할 수 있습니다.

233 

234| 이벤트 | 트리거 시점 |

235| :--- | :------------------------------------------------------- |

236| 풀 요청 | PR이 열리거나, 닫히거나, 할당되거나, 레이블이 지정되거나, 동기화되거나, 기타 방식으로 업데이트됨 |

237| 릴리스 | 릴리스가 생성되거나, 게시되거나, 편집되거나, 삭제됨 |

238 

239#### 풀 요청 필터링

240 

241필터를 사용하여 새 세션을 시작하는 풀 요청을 좁히세요. 루틴이 트리거되려면 모든 필터 조건이 일치해야 합니다. 사용 가능한 필터 필드는 다음과 같습니다.

242 

243| 필터 | 일치 |

244| :----- | :------------------ |

245| 작성자 | PR 작성자의 GitHub 사용자명 |

246| 제목 | PR 제목 텍스트 |

247| 본문 | PR 설명 텍스트 |

248| 기본 브랜치 | PR이 대상으로 하는 브랜치 |

249| 헤드 브랜치 | PR이 나오는 브랜치 |

250| 레이블 | PR에 적용된 레이블 |

251| 초안 여부 | PR이 초안 상태인지 여부 |

252| 병합 여부 | PR이 병합되었는지 여부 |

253| 포크에서 | PR이 포크에서 나오는지 여부 |

254 

255각 필터는 필드를 연산자와 쌍으로 지정합니다. 같음, 포함, 시작, 하나, 하나 아님 또는 정규식 일치.

256 

257`matches regex` 연산자는 전체 필드 값을 테스트하며, 그 내의 부분 문자열이 아닙니다. `hotfix`를 포함하는 제목과 일치하려면 `.*hotfix.*`를 작성하세요. 주변 `.*` 없이는 필터가 정확히 `hotfix`인 제목과만 일치하며 앞이나 뒤에 아무것도 없습니다. 정규식 구문 없이 리터럴 부분 문자열 일치의 경우 대신 `contains` 연산자를 사용하세요.

258 

259몇 가지 예시 필터 조합:

260 

261* **인증 모듈 검토**: 기본 브랜치 `main`, 헤드 브랜치 포함 `auth-provider`. 인증을 건드리는 모든 PR을 집중된 검토자에게 보냅니다.

262* **외부 기여자 분류**: 포크에서 `true`. 모든 포크 기반 PR을 인간이 검토하기 전에 추가 보안 및 스타일 검토를 통해 라우팅합니다.

263* **검토 준비 완료만**: 초안 여부 `false`. 초안을 건너뛰므로 루틴은 PR이 검토 준비가 되었을 때만 실행됩니다.

264* **레이블 게이트 백포트**: 레이블 포함 `needs-backport`. 유지 관리자가 PR에 태그를 지정할 때만 다른 브랜치로의 포트 루틴을 트리거합니다.

265 

266#### 세션이 이벤트에 매핑되는 방식

267 

268각 일치하는 GitHub 이벤트는 새 세션을 시작합니다. GitHub 트리거 루틴의 경우 이벤트 간 세션 재사용을 사용할 수 없으므로 두 PR 업데이트는 두 개의 독립적인 세션을 생성합니다.

269 

270## 루틴 관리

271 

272목록에서 루틴을 클릭하여 세부 정보 페이지를 엽니다. 세부 정보 페이지는 루틴의 저장소, 커넥터, 프롬프트, 일정, API 토큰, GitHub 트리거 및 과거 실행 목록을 표시합니다.

273 

274### 실행 보기 및 상호 작용

275 

276모든 실행을 클릭하여 완전한 세션으로 엽니다. 거기서 Claude가 수행한 작업을 확인하고, 변경 사항을 검토하고, 풀 요청을 생성하거나, 대화를 계속할 수 있습니다. 각 실행 세션은 다른 세션처럼 작동합니다. 세션 제목 옆의 드롭다운 메뉴를 사용하여 이름을 바꾸거나, 보관하거나, 삭제하세요.

277 

278### 루틴 편집 및 제어

279 

280루틴 세부 정보 페이지에서 다음을 수행할 수 있습니다.

281 

282* **지금 실행**을 클릭하여 다음 예약된 시간을 기다리지 않고 즉시 실행을 시작하세요.

283* **반복** 섹션의 토글을 사용하여 일정을 일시 중지하거나 재개하세요. 일시 중지된 루틴은 구성을 유지하지만 다시 활성화할 때까지 실행되지 않습니다.

284* 연필 아이콘을 클릭하여 **루틴 편집**을 열고 이름, 프롬프트, 저장소, 환경, 커넥터 또는 루틴의 트리거를 변경하세요. **트리거 선택** 섹션은 일정, API 토큰 및 GitHub 이벤트 트리거를 추가하거나 제거하는 곳입니다.

285* 삭제 아이콘을 클릭하여 루틴을 제거하세요. 루틴에서 생성한 과거 세션은 세션 목록에 남아 있습니다.

286 

287### 저장소 및 브랜치 권한

288 

289루틴은 저장소를 복제하기 위해 GitHub 액세스가 필요합니다. CLI에서 `/schedule`로 루틴을 생성할 때 Claude는 계정에 GitHub이 연결되어 있는지 확인하고 연결되지 않은 경우 `/web-setup`을 실행하도록 요청합니다. [GitHub 인증 옵션](/ko/claude-code-on-the-web#github-authentication-options)을 참조하여 액세스 권한을 부여하는 두 가지 방법을 확인하세요.

290 

291추가하는 각 저장소는 모든 실행에서 복제됩니다. Claude는 프롬프트에서 달리 지정하지 않는 한 저장소의 기본 브랜치에서 시작합니다.

292 

293기본적으로 Claude는 `claude/` 접두사가 붙은 브랜치로만 푸시할 수 있습니다. 이는 루틴이 실수로 보호되거나 장기 브랜치를 수정하는 것을 방지합니다. 특정 저장소에 대해 이 제한을 제거하려면 루틴을 생성하거나 편집할 때 해당 저장소에 대해 **제한 없는 브랜치 푸시 허용**을 활성화하세요.

294 

295### 커넥터

296 

297루틴은 연결된 MCP 커넥터를 사용하여 각 실행 중에 외부 서비스에서 읽고 쓸 수 있습니다. 예를 들어 지원 요청을 분류하는 루틴은 Slack 채널에서 읽고 Linear에서 이슈를 생성할 수 있습니다.

298 

299루틴을 생성할 때 현재 연결된 모든 커넥터가 기본적으로 포함됩니다. 실행 중에 Claude가 액세스할 수 있는 도구를 제한하려면 필요하지 않은 것을 제거하세요. 루틴 양식 외부에서 커넥터를 관리하거나 추가할 수도 있습니다.

300 

301루틴 양식 외부에서 커넥터를 관리하거나 추가하려면 claude.ai의 **설정 > 커넥터**를 방문하거나 CLI에서 `/schedule update`를 사용하세요.

302 

303### 환경

304 

305각 루틴은 네트워크 액세스, 환경 변수 및 설정 스크립트를 제어하는 [클라우드 환경](/ko/claude-code-on-the-web#the-cloud-environment)에서 실행됩니다. 루틴을 생성하기 전에 환경을 구성하여 Claude에게 API에 액세스하거나, 종속성을 설치하거나, 네트워크 범위를 제한할 수 있게 하세요. 전체 설정 가이드는 [클라우드 환경](/ko/claude-code-on-the-web#the-cloud-environment)을 참조하세요.

306 

307## 사용 및 제한

308 

309루틴은 대화형 세션과 동일한 방식으로 구독 사용을 소비합니다. 표준 구독 제한 외에도 루틴은 계정당 시작할 수 있는 실행 수에 대한 일일 상한선이 있습니다. [claude.ai/code/routines](https://claude.ai/code/routines) 또는 [claude.ai/settings/usage](https://claude.ai/settings/usage)에서 현재 소비 및 남은 일일 루틴 실행을 확인하세요.

310 

311루틴이 일일 상한선 또는 구독 사용 제한에 도달할 때 추가 사용이 활성화된 조직은 계량된 초과 요금으로 루틴을 계속 실행할 수 있습니다. 추가 사용이 없으면 윈도우가 재설정될 때까지 추가 실행이 거부됩니다. claude.ai의 **설정 > 청구**에서 추가 사용을 활성화하세요.

312 

313## 관련 리소스

314 

315* [`/loop` 및 세션 내 예약](/ko/scheduled-tasks): 열린 CLI 세션 내에서 로컬 작업 예약

316* [데스크톱 예약 작업](/ko/desktop-scheduled-tasks): 로컬 파일에 액세스할 수 있는 머신에서 실행되는 로컬 예약 작업

317* [클라우드 환경](/ko/claude-code-on-the-web#the-cloud-environment): 클라우드 세션의 런타임 환경 구성

318* [MCP 커넥터](/ko/mcp): Slack, Linear 및 Google Drive와 같은 외부 서비스 연결

319* [GitHub Actions](/ko/github-actions): 저장소 이벤트에서 CI 파이프라인에서 Claude 실행

sandboxing.md +329 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 샌드박싱

6 

7> Claude Code의 샌드박싱된 bash 도구가 파일시스템 및 네트워크 격리를 제공하여 더 안전하고 자율적인 에이전트 실행을 가능하게 하는 방법을 알아봅니다.

8 

9## 개요

10 

11Claude Code는 에이전트 실행을 위한 더 안전한 환경을 제공하고 지속적인 권한 프롬프트의 필요성을 줄이기 위해 기본 샌드박싱 기능을 제공합니다. 각 bash 명령에 대해 권한을 요청하는 대신, 샌드박싱은 Claude Code가 위험을 줄이면서 더 자유롭게 작업할 수 있는 정의된 경계를 미리 생성합니다.

12 

13샌드박싱된 bash 도구는 OS 수준의 기본 요소를 사용하여 파일시스템 및 네트워크 격리를 모두 적용합니다.

14 

15## 샌드박싱이 중요한 이유

16 

17기존의 권한 기반 보안은 bash 명령에 대한 지속적인 사용자 승인이 필요합니다. 이는 제어를 제공하지만 다음과 같은 문제를 야기할 수 있습니다:

18 

19* **승인 피로**: "승인" 버튼을 반복적으로 클릭하면 사용자가 승인하는 내용에 덜 주의를 기울이게 될 수 있습니다

20* **생산성 감소**: 지속적인 중단으로 인해 개발 워크플로우가 느려집니다

21* **제한된 자율성**: Claude Code는 승인을 기다릴 때 효율적으로 작업할 수 없습니다

22 

23샌드박싱은 다음과 같은 방식으로 이러한 문제를 해결합니다:

24 

251. **명확한 경계 정의**: Claude Code가 액세스할 수 있는 정확한 디렉토리 및 네트워크 호스트를 지정합니다

262. **권한 프롬프트 감소**: 샌드박스 내의 안전한 명령은 승인이 필요하지 않습니다

273. **보안 유지**: 샌드박스 외부의 리소스에 액세스하려는 시도는 즉시 알림을 트리거합니다

284. **자율성 활성화**: Claude Code는 정의된 제한 내에서 더 독립적으로 실행할 수 있습니다

29 

30<Warning>

31 효과적인 샌드박싱은 **파일시스템 및 네트워크 격리 모두**를 필요로 합니다. 네트워크 격리가 없으면 손상된 에이전트가 SSH 키와 같은 민감한 파일을 유출할 수 있습니다. 파일시스템 격리가 없으면 손상된 에이전트가 시스템 리소스를 백도어하여 네트워크 액세스를 얻을 수 있습니다. 샌드박싱을 구성할 때 구성된 설정이 이러한 시스템에서 우회를 생성하지 않도록 하는 것이 중요합니다.

32</Warning>

33 

34## 작동 방식

35 

36### 파일시스템 격리

37 

38샌드박싱된 bash 도구는 파일 시스템 액세스를 특정 디렉토리로 제한합니다:

39 

40* **기본 쓰기 동작**: 현재 작업 디렉토리 및 그 하위 디렉토리에 대한 읽기 및 쓰기 액세스

41* **기본 읽기 동작**: 특정 거부된 디렉토리를 제외한 전체 컴퓨터에 대한 읽기 액세스

42* **차단된 액세스**: 명시적 권한 없이 현재 작업 디렉토리 외부의 파일을 수정할 수 없습니다

43* **구성 가능**: 설정을 통해 사용자 정의 허용 및 거부 경로를 정의합니다

44 

45설정에서 `sandbox.filesystem.allowWrite`를 사용하여 추가 경로에 대한 쓰기 액세스를 부여할 수 있습니다. 이러한 제한은 OS 수준(macOS의 Seatbelt, Linux의 bubblewrap)에서 적용되므로 Claude의 파일 도구뿐만 아니라 `kubectl`, `terraform`, `npm`과 같은 도구를 포함한 모든 하위 프로세스 명령에 적용됩니다.

46 

47### 네트워크 격리

48 

49네트워크 액세스는 샌드박스 외부에서 실행되는 프록시 서버를 통해 제어됩니다:

50 

51* **도메인 제한**: 승인된 도메인만 액세스할 수 있습니다

52* **사용자 확인**: 새 도메인 요청은 권한 프롬프트를 트리거합니다([`allowManagedDomainsOnly`](/ko/settings#sandbox-settings)가 활성화된 경우 제외, 이는 허용되지 않은 도메인을 자동으로 차단합니다)

53* **사용자 정의 프록시 지원**: 고급 사용자는 나가는 트래픽에 대한 사용자 정의 규칙을 구현할 수 있습니다

54* **포괄적 범위**: 제한은 명령으로 생성된 모든 스크립트, 프로그램 및 하위 프로세스에 적용됩니다

55 

56### OS 수준 적용

57 

58샌드박싱된 bash 도구는 운영 체제 보안 기본 요소를 활용합니다:

59 

60* **macOS**: 샌드박스 적용을 위해 Seatbelt를 사용합니다

61* **Linux**: 격리를 위해 [bubblewrap](https://github.com/containers/bubblewrap)을 사용합니다

62* **WSL2**: Linux와 동일하게 bubblewrap을 사용합니다

63 

64WSL1은 bubblewrap이 WSL2에서만 사용 가능한 커널 기능을 필요로 하기 때문에 지원되지 않습니다.

65 

66이러한 OS 수준의 제한은 Claude Code의 명령으로 생성된 모든 자식 프로세스가 동일한 보안 경계를 상속하도록 보장합니다.

67 

68## 시작하기

69 

70### 필수 조건

71 

72**macOS**에서는 기본 제공 Seatbelt 프레임워크를 사용하여 샌드박싱이 기본적으로 작동합니다.

73 

74**Linux 및 WSL2**에서는 먼저 필수 패키지를 설치합니다:

75 

76<Tabs>

77 <Tab title="Ubuntu/Debian">

78 ```bash theme={null}

79 sudo apt-get install bubblewrap socat

80 ```

81 </Tab>

82 

83 <Tab title="Fedora">

84 ```bash theme={null}

85 sudo dnf install bubblewrap socat

86 ```

87 </Tab>

88</Tabs>

89 

90WSL1은 필요한 Linux 네임스페이스 프리미티브가 부족하기 때문에 샌드박싱을 지원하지 않습니다. `Sandboxing requires WSL2` 메시지가 표시되면 배포판을 WSL2로 업그레이드하거나 샌드박싱 없이 Claude Code를 실행합니다.

91 

92WSL2에서 샌드박싱된 명령은 `cmd.exe`, `powershell.exe` 또는 `/mnt/c/` 아래의 모든 항목과 같은 Windows 바이너리를 시작할 수 없습니다. WSL은 이러한 항목을 Unix 소켓을 통해 Windows 호스트로 전달하며, 샌드박스가 이를 차단합니다. 명령이 Windows 바이너리를 호출해야 하는 경우 [`excludedCommands`](/ko/settings#sandbox-settings)에 추가하여 샌드박스 외부에서 실행되도록 합니다.

93 

94### 샌드박싱 활성화

95 

96`/sandbox` 명령을 실행하여 샌드박싱을 활성화할 수 있습니다:

97 

98```text theme={null}

99/sandbox

100```

101 

102이는 샌드박스 모드 중에서 선택할 수 있는 메뉴를 엽니다. Linux에서 `bubblewrap` 또는 `socat`과 같은 필수 종속성이 누락된 경우 메뉴에 플랫폼에 대한 설치 지침이 표시됩니다.

103 

104기본적으로 샌드박스를 시작할 수 없는 경우(누락된 종속성 또는 지원되지 않는 플랫폼), Claude Code는 경고를 표시하고 샌드박싱 없이 명령을 실행합니다. 대신 이를 하드 실패로 만들려면 [`sandbox.failIfUnavailable`](/ko/settings#sandbox-settings)을 `true`로 설정합니다. 이는 샌드박싱을 보안 게이트로 요구하는 관리 배포를 위한 것입니다.

105 

106### 샌드박스 모드

107 

108Claude Code는 두 가지 샌드박스 모드를 제공합니다:

109 

110**자동 허용 모드**: Bash 명령은 샌드박스 내에서 실행을 시도하며 권한 없이 자동으로 허용됩니다. 샌드박싱할 수 없는 명령(허용되지 않은 호스트에 대한 네트워크 액세스가 필요한 경우 등)은 일반 권한 흐름으로 폴백됩니다. 명시적 거부 규칙은 항상 존중됩니다. 그리고 `/`, 홈 디렉토리 또는 기타 중요한 시스템 경로를 대상으로 하는 `rm` 또는 `rmdir` 명령은 여전히 권한 프롬프트를 트리거합니다. Ask 규칙은 일반 권한 흐름으로 폴백되는 명령에만 적용됩니다.

111 

112**일반 권한 모드**: 모든 bash 명령은 샌드박싱되었더라도 표준 권한 흐름을 거칩니다. 이는 더 많은 제어를 제공하지만 더 많은 승인이 필요합니다.

113 

114두 모드 모두에서 샌드박스는 동일한 파일시스템 및 네트워크 제한을 적용합니다. 차이점은 샌드박싱된 명령이 자동 승인되는지 또는 명시적 권한이 필요한지 여부뿐입니다.

115 

116<Info>

117 자동 허용 모드는 권한 모드 설정과 독립적으로 작동합니다. "편집 수락" 모드에 있지 않더라도 자동 허용이 활성화되면 샌드박싱된 bash 명령이 자동으로 실행됩니다. 이는 샌드박스 경계 내에서 파일을 수정하는 bash 명령이 파일 편집 도구가 일반적으로 승인을 요구할 때도 프롬프트 없이 실행됨을 의미합니다.

118</Info>

119 

120### 샌드박싱 구성

121 

122`settings.json` 파일을 통해 샌드박스 동작을 사용자 정의합니다. 전체 구성 참조는 [설정](/ko/settings#sandbox-settings)을 참조하세요.

123 

124#### 특정 경로에 대한 하위 프로세스 쓰기 액세스 부여

125 

126기본적으로 샌드박싱된 명령은 현재 작업 디렉토리에만 쓸 수 있습니다. `kubectl`, `terraform` 또는 `npm`과 같은 하위 프로세스 명령이 프로젝트 디렉토리 외부에 쓰기해야 하는 경우 `sandbox.filesystem.allowWrite`를 사용하여 특정 경로에 대한 액세스를 부여합니다:

127 

128```json theme={null}

129{

130 "sandbox": {

131 "enabled": true,

132 "filesystem": {

133 "allowWrite": ["~/.kube", "/tmp/build"]

134 }

135 }

136}

137```

138 

139이러한 경로는 OS 수준에서 적용되므로 샌드박스 내에서 실행되는 모든 명령(자식 프로세스 포함)이 이를 존중합니다. 이는 도구를 `excludedCommands`로 샌드박스에서 완전히 제외하는 것보다 도구가 특정 위치에 쓰기 액세스가 필요할 때 권장되는 방법입니다.

140 

141`allowWrite`(또는 `denyWrite`/`denyRead`/`allowRead`)가 여러 [설정 범위](/ko/settings#settings-precedence)에서 정의된 경우 배열이 **병합**됩니다. 즉, 모든 범위의 경로가 결합되며 대체되지 않습니다. 예를 들어 관리 설정이 `/opt/company-tools`에 대한 쓰기를 허용하고 사용자가 개인 설정에서 `~/.kube`를 추가하면 두 경로 모두 최종 샌드박스 구성에 포함됩니다. 이는 사용자와 프로젝트가 더 높은 우선순위 범위에서 설정한 경로를 복제하거나 재정의하지 않고 목록을 확장할 수 있음을 의미합니다.

142 

143경로 접두사는 경로가 해석되는 방식을 제어합니다:

144 

145| 접두사 | 의미 | 예시 |

146| :------------- | :------------------------------------------------------- | :------------------------------------------------------------------- |

147| `/` | 파일시스템 루트의 절대 경로 | `/tmp/build`는 `/tmp/build`로 유지됩니다 |

148| `~/` | 홈 디렉토리에 상대적 | `~/.kube`는 `$HOME/.kube`가 됩니다 |

149| `./` 또는 접두사 없음 | 프로젝트 설정의 경우 프로젝트 루트에 상대적이거나, 사용자 설정의 경우 `~/.claude`에 상대적 | `.claude/settings.json`의 `./output`은 `<project-root>/output`으로 해석됩니다 |

150 

151더 오래된 `//path` 접두사는 절대 경로용으로 여전히 작동합니다. 이전에 프로젝트 상대 해석을 기대하면서 단일 슬래시 `/path`를 사용했다면 `./path`로 전환하세요. 이 구문은 절대 경로에 `//path`를 사용하고 프로젝트 상대에 `/path`를 사용하는 [Read 및 Edit 권한 규칙](/ko/permissions#read-and-edit)과 다릅니다. 샌드박스 파일시스템 경로는 표준 규칙을 사용합니다: `/tmp/build`는 절대 경로입니다.

152 

153`sandbox.filesystem.denyWrite` 및 `sandbox.filesystem.denyRead`를 사용하여 쓰기 또는 읽기 액세스를 거부할 수도 있습니다. 이들은 `Edit(...)` 및 `Read(...)` 권한 규칙의 모든 경로와 병합됩니다. 거부된 영역 내에서 특정 경로 읽기를 다시 허용하려면 `denyRead`보다 우선하는 `sandbox.filesystem.allowRead`를 사용합니다. `allowManagedReadPathsOnly`가 관리 설정에서 활성화되면 관리 `allowRead` 항목만 존중되고 사용자, 프로젝트 및 로컬 `allowRead` 항목은 무시됩니다. `denyRead`는 여전히 모든 소스에서 병합됩니다.

154 

155예를 들어 홈 디렉토리 전체에서의 읽기를 차단하면서도 현재 프로젝트에서의 읽기를 허용하려면 프로젝트의 `.claude/settings.json`에 다음을 추가합니다:

156 

157```json theme={null}

158{

159 "sandbox": {

160 "enabled": true,

161 "filesystem": {

162 "denyRead": ["~/"],

163 "allowRead": ["."]

164 }

165 }

166}

167```

168 

169이 구성이 프로젝트 설정에 있으므로 `allowRead`의 `.`은 프로젝트 루트로 해석됩니다. 동일한 구성을 `~/.claude/settings.json`에 배치했다면 `.`은 `~/.claude`로 해석되고 프로젝트 파일은 `denyRead` 규칙에 의해 차단된 상태로 유지됩니다.

170 

171<Tip>

172 모든 명령이 기본적으로 샌드박싱과 호환되는 것은 아닙니다. 샌드박스를 최대한 활용하는 데 도움이 될 수 있는 몇 가지 참고 사항:

173 

174 * 많은 CLI 도구는 특정 호스트에 액세스해야 합니다. 이러한 도구를 사용하면서 특정 호스트에 액세스할 권한을 요청합니다. 권한을 부여하면 지금과 앞으로 이러한 호스트에 액세스할 수 있으므로 샌드박스 내에서 안전하게 실행할 수 있습니다.

175 * `watchman`은 샌드박스에서 실행하는 것과 호환되지 않습니다. `jest`를 실행 중인 경우 `jest --no-watchman` 사용을 고려하세요

176 * `docker`는 샌드박스에서 실행하는 것과 호환되지 않습니다. `excludedCommands`에서 `docker *`를 지정하여 샌드박스 외부에서 실행하도록 강제하는 것을 고려하세요.

177</Tip>

178 

179<Note>

180 Claude Code는 필요할 때 명령이 샌드박스 외부에서 실행될 수 있도록 하는 의도적인 탈출 해치 메커니즘을 포함합니다. 명령이 샌드박스 제한으로 인해 실패할 때(예: 네트워크 연결 문제 또는 호환되지 않는 도구), Claude는 실패를 분석하도록 프롬프트되며 `dangerouslyDisableSandbox` 매개변수로 명령을 다시 시도할 수 있습니다. 이 매개변수를 사용하는 명령은 실행을 위해 사용자 권한이 필요한 일반 Claude Code 권한 흐름을 거칩니다. 이를 통해 Claude Code는 특정 도구 또는 네트워크 작업이 샌드박스 제약 내에서 작동할 수 없는 경우를 처리할 수 있습니다.

181 

182 [샌드박스 설정](/ko/settings#sandbox-settings)에서 `"allowUnsandboxedCommands": false`를 설정하여 이 탈출 해치를 비활성화할 수 있습니다. 비활성화되면 `dangerouslyDisableSandbox` 매개변수가 완전히 무시되고 모든 명령은 샌드박싱되거나 `excludedCommands`에 명시적으로 나열되어야 합니다.

183</Note>

184 

185## 보안 이점

186 

187### 프롬프트 주입으로부터의 보호

188 

189공격자가 프롬프트 주입을 통해 Claude Code의 동작을 성공적으로 조작하더라도 샌드박스는 시스템이 안전하게 유지되도록 보장합니다:

190 

191**파일시스템 보호:**

192 

193* `~/.bashrc`와 같은 중요한 구성 파일을 수정할 수 없습니다

194* `/bin/`의 시스템 수준 파일을 수정할 수 없습니다

195* [Claude 권한 설정](/ko/permissions#manage-permissions)에서 거부된 파일을 읽을 수 없습니다

196 

197**네트워크 보호:**

198 

199* 공격자가 제어하는 서버로 데이터를 유출할 수 없습니다

200* 승인되지 않은 도메인에서 악성 스크립트를 다운로드할 수 없습니다

201* 승인되지 않은 서비스에 예상치 못한 API 호출을 할 수 없습니다

202* 명시적으로 허용된 도메인이 아닌 다른 도메인에 연락할 수 없습니다

203 

204**모니터링 및 제어:**

205 

206* 샌드박스 외부의 모든 액세스 시도는 OS 수준에서 차단됩니다

207* 경계가 테스트될 때 즉시 알림을 받습니다

208* 요청을 거부하거나, 한 번만 허용하거나, 구성을 영구적으로 업데이트하도록 선택할 수 있습니다

209 

210### 공격 표면 감소

211 

212샌드박싱은 다음으로 인한 잠재적 피해를 제한합니다:

213 

214* **악성 종속성**: 해로운 코드가 있는 NPM 패키지 또는 기타 종속성

215* **손상된 스크립트**: 보안 취약점이 있는 빌드 스크립트 또는 도구

216* **사회 공학**: 사용자를 속여 위험한 명령을 실행하도록 하는 공격

217* **프롬프트 주입**: Claude를 속여 위험한 명령을 실행하도록 하는 공격

218 

219### 투명한 작동

220 

221Claude Code가 샌드박스 외부의 네트워크 리소스에 액세스하려고 시도할 때:

222 

2231. 작업이 OS 수준에서 차단됩니다

2242. 즉시 알림을 받습니다

2253. 다음을 선택할 수 있습니다:

226 * 요청 거부

227 * 한 번만 허용

228 * 샌드박스 구성을 업데이트하여 영구적으로 허용

229 

230## 보안 제한 사항

231 

232* 네트워크 샌드박싱 제한: 네트워크 필터링 시스템은 프로세스가 연결할 수 있는 도메인을 제한하여 작동합니다. 프록시를 통과하는 트래픽을 검사하지 않으며 사용자는 정책에서 신뢰할 수 있는 도메인만 허용하도록 해야 합니다.

233 

234<Warning>

235 사용자는 데이터 유출을 허용할 수 있는 `github.com`과 같은 광범위한 도메인을 허용하는 것과 관련된 잠재적 위험을 인식해야 합니다. 또한 경우에 따라 [도메인 프론팅](https://en.wikipedia.org/wiki/Domain_fronting)을 통해 네트워크 필터링을 우회할 수 있습니다.

236</Warning>

237 

238* Unix 소켓을 통한 권한 상승: `allowUnixSockets` 구성은 실수로 샌드박스 우회로 이어질 수 있는 강력한 시스템 서비스에 대한 액세스를 부여할 수 있습니다. 예를 들어 `/var/run/docker.sock`에 대한 액세스를 허용하는 데 사용되면 docker 소켓을 악용하여 호스트 시스템에 대한 액세스를 효과적으로 부여합니다. 사용자는 샌드박스를 통해 허용하는 모든 unix 소켓을 신중하게 고려하도록 권장됩니다.

239* 파일시스템 권한 상승: 과도하게 광범위한 파일시스템 쓰기 권한은 권한 상승 공격을 가능하게 할 수 있습니다. `$PATH`의 실행 파일을 포함하는 디렉토리, 시스템 구성 디렉토리 또는 사용자 셸 구성 파일(`.bashrc`, `.zshrc`)에 대한 쓰기를 허용하면 다른 사용자 또는 시스템 프로세스가 이러한 파일에 액세스할 때 다른 보안 컨텍스트에서 코드 실행으로 이어질 수 있습니다.

240* Linux 샌드박스 강도: Linux 구현은 강력한 파일시스템 및 네트워크 격리를 제공하지만 권한 있는 네임스페이스 없이 Docker 환경 내에서 작동할 수 있도록 하는 `enableWeakerNestedSandbox` 모드를 포함합니다. 이 옵션은 보안을 상당히 약화시키며 추가 격리가 다른 방식으로 적용되는 경우에만 사용해야 합니다.

241 

242## 샌드박싱이 권한과 어떻게 관련되는지

243 

244샌드박싱과 [권한](/ko/permissions)은 함께 작동하는 상호 보완적인 보안 계층입니다:

245 

246* **권한**은 Claude Code가 사용할 수 있는 도구를 제어하며 도구가 실행되기 전에 평가됩니다. 이들은 모든 도구에 적용됩니다: Bash, Read, Edit, WebFetch, MCP 등.

247* **샌드박싱**은 Bash 명령이 파일시스템 및 네트워크 수준에서 액세스할 수 있는 것을 제한하는 OS 수준의 적용을 제공합니다. Bash 명령 및 그 자식 프로세스에만 적용됩니다.

248 

249파일시스템 및 네트워크 제한은 샌드박스 설정 및 권한 규칙을 통해 모두 구성됩니다:

250 

251* `sandbox.filesystem.allowWrite`를 사용하여 작업 디렉토리 외부의 경로에 대한 하위 프로세스 쓰기 액세스를 부여합니다

252* `sandbox.filesystem.denyWrite` 및 `sandbox.filesystem.denyRead`를 사용하여 특정 경로에 대한 하위 프로세스 액세스를 차단합니다

253* `sandbox.filesystem.allowRead`를 사용하여 `denyRead` 영역 내의 특정 경로 읽기를 다시 허용합니다

254* `Read` 및 `Edit` 거부 규칙을 사용하여 특정 파일 또는 디렉토리에 대한 액세스를 차단합니다

255* `WebFetch` 허용/거부 규칙을 사용하여 도메인 액세스를 제어합니다

256* 샌드박스 `allowedDomains`를 사용하여 Bash 명령이 도달할 수 있는 도메인을 제어합니다

257* 샌드박스 `deniedDomains`를 사용하여 더 광범위한 `allowedDomains` 와일드카드가 허용할 수 있는 경우에도 특정 도메인을 차단합니다

258 

259`sandbox.filesystem` 설정 및 권한 규칙의 경로는 최종 샌드박스 구성으로 병합됩니다.

260 

261이 [저장소](https://github.com/anthropics/claude-code/tree/main/examples/settings)에는 샌드박스 관련 예제를 포함한 일반적인 배포 시나리오에 대한 시작 설정 구성이 포함되어 있습니다. 이를 시작점으로 사용하고 필요에 맞게 조정합니다.

262 

263## 고급 사용

264 

265### 사용자 정의 프록시 구성

266 

267고급 네트워크 보안이 필요한 조직의 경우 사용자 정의 프록시를 구현하여 다음을 수행할 수 있습니다:

268 

269* HTTPS 트래픽 복호화 및 검사

270* 사용자 정의 필터링 규칙 적용

271* 모든 네트워크 요청 로깅

272* 기존 보안 인프라와 통합

273 

274```json theme={null}

275{

276 "sandbox": {

277 "network": {

278 "httpProxyPort": 8080,

279 "socksProxyPort": 8081

280 }

281 }

282}

283```

284 

285### 기존 보안 도구와의 통합

286 

287샌드박싱된 bash 도구는 다음과 함께 작동합니다:

288 

289* **권한 규칙**: [권한 설정](/ko/permissions)과 결합하여 심층 방어를 수행합니다

290* **개발 컨테이너**: [dev containers](/ko/devcontainer)와 함께 사용하여 추가 격리를 수행합니다

291* **엔터프라이즈 정책**: [관리 설정](/ko/settings#settings-precedence)을 통해 샌드박스 구성을 적용합니다

292 

293## 모범 사례

294 

2951. **제한적으로 시작**: 최소 권한으로 시작하여 필요에 따라 확장합니다

2962. **로그 모니터링**: 샌드박스 위반 시도를 검토하여 Claude Code의 필요 사항을 이해합니다

2973. **환경별 구성 사용**: 개발 및 프로덕션 컨텍스트에 대해 다른 샌드박스 규칙을 사용합니다

2984. **권한과 결합**: 포괄적인 보안을 위해 샌드박싱을 IAM 정책과 함께 사용합니다

2995. **구성 테스트**: 샌드박스 설정이 합법적인 워크플로우를 차단하지 않는지 확인합니다

300 

301## 오픈 소스

302 

303샌드박스 런타임은 자신의 에이전트 프로젝트에서 사용할 수 있는 오픈 소스 npm 패키지로 제공됩니다. 이를 통해 더 넓은 AI 에이전트 커뮤니티가 더 안전하고 보안이 강화된 자율 시스템을 구축할 수 있습니다. 이를 사용하여 실행하려는 다른 프로그램을 샌드박싱할 수도 있습니다. 예를 들어 MCP 서버를 샌드박싱하려면 다음을 실행할 수 있습니다:

304 

305```bash theme={null}

306npx @anthropic-ai/sandbox-runtime <command-to-sandbox>

307```

308 

309구현 세부 사항 및 소스 코드는 [GitHub 저장소](https://github.com/anthropic-experimental/sandbox-runtime)를 방문하세요.

310 

311## 제한 사항

312 

313* **성능 오버헤드**: 최소이지만 일부 파일시스템 작업이 약간 더 느릴 수 있습니다

314* **호환성**: 특정 시스템 액세스 패턴이 필요한 일부 도구는 구성 조정이 필요할 수 있으며 샌드박스 외부에서 실행해야 할 수도 있습니다

315* **플랫폼 지원**: macOS, Linux 및 WSL2를 지원합니다. WSL1은 지원되지 않습니다. 기본 Windows 지원이 계획되어 있습니다.

316 

317## 샌드박싱이 다루지 않는 것

318 

319샌드박스는 Bash 하위 프로세스를 격리합니다. 다른 도구는 다른 경계에서 작동합니다:

320 

321* **기본 제공 파일 도구**: Read, Edit 및 Write는 샌드박스를 통해 실행되지 않고 권한 시스템을 직접 사용합니다. [권한](/ko/permissions)을 참조하세요.

322* **Desktop의 컴퓨터 사용**: Claude가 앱을 열고 화면을 제어할 때 격리된 환경이 아닌 실제 데스크톱에서 실행됩니다. 앱별 권한 프롬프트가 각 애플리케이션을 제어합니다. [Desktop의 컴퓨터 사용](/ko/desktop#let-claude-use-your-computer)을 참조하세요.

323 

324## 참고 항목

325 

326* [보안](/ko/security) - 포괄적인 보안 기능 및 모범 사례

327* [권한](/ko/permissions) - 권한 구성 및 액세스 제어

328* [설정](/ko/settings) - 전체 구성 참조

329* [CLI 참조](/ko/cli-reference) - 명령줄 옵션

scheduled-tasks.md +213 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 일정에 따라 프롬프트 실행하기

6 

7> /loop와 cron 스케줄링 도구를 사용하여 Claude Code 세션 내에서 프롬프트를 반복 실행하거나, 상태를 폴링하거나, 일회성 알림을 설정합니다.

8 

9<Note>

10 스케줄된 작업을 사용하려면 Claude Code v2.1.72 이상이 필요합니다. `claude --version`으로 버전을 확인하세요.

11</Note>

12 

13스케줄된 작업을 사용하면 Claude가 일정한 간격으로 프롬프트를 자동으로 다시 실행할 수 있습니다. 배포를 폴링하거나, PR을 감시하거나, 오래 실행되는 빌드를 확인하거나, 나중에 세션에서 무언가를 하도록 자신에게 알림을 설정하는 데 사용합니다. 이벤트가 발생할 때 폴링하는 대신 반응하려면 [Channels](/ko/channels)를 참조하세요. CI가 실패를 세션에 직접 푸시할 수 있습니다.

14 

15작업은 세션 범위입니다. 현재 대화에 존재하며 새로운 대화를 시작할 때 중지됩니다. `--resume` 또는 `--continue`로 재개하면 [만료](#seven-day-expiry)되지 않은 모든 작업이 복원됩니다. 지난 7일 이내에 생성된 반복 작업이거나 스케줄된 시간이 아직 지나지 않은 일회성 작업입니다. 세션과 독립적으로 지속되는 스케줄링의 경우 [Routines](/ko/routines), [Desktop scheduled tasks](/ko/desktop-scheduled-tasks), 또는 [GitHub Actions](/ko/github-actions)를 사용하세요.

16 

17## 스케줄링 옵션 비교하기

18 

19Claude Code offers three ways to schedule recurring or one-off work:

20 

21| | [Cloud](/en/routines) | [Desktop](/en/desktop-scheduled-tasks) | [`/loop`](/en/scheduled-tasks) |

22| :------------------------- | :----------------------------- | :------------------------------------- | :---------------------------------- |

23| Runs on | Anthropic cloud | Your machine | Your machine |

24| Requires machine on | No | Yes | Yes |

25| Requires open session | No | No | Yes |

26| Persistent across restarts | Yes | Yes | Restored on `--resume` if unexpired |

27| Access to local files | No (fresh clone) | Yes | Yes |

28| MCP servers | Connectors configured per task | [Config files](/en/mcp) and connectors | Inherits from session |

29| Permission prompts | No (runs autonomously) | Configurable per task | Inherits from session |

30| Customizable schedule | Via `/schedule` in the CLI | Yes | Yes |

31| Minimum interval | 1 hour | 1 minute | 1 minute |

32 

33<Tip>

34 Use **cloud tasks** for work that should run reliably without your machine. Use **Desktop tasks** when you need access to local files and tools. Use **`/loop`** for quick polling during a session.

35</Tip>

36 

37## /loop로 반복 프롬프트 실행하기

38 

39`/loop` [번들 스킬](/ko/commands)은 세션이 열려 있는 동안 프롬프트를 반복 실행하는 가장 빠른 방법입니다. 간격과 프롬프트는 모두 선택 사항이며, 제공하는 내용에 따라 루프의 동작이 결정됩니다.

40 

41| 제공하는 내용 | 예시 | 동작 |

42| :------------- | :-------------------------- | :------------------------------------------------------------------------------------ |

43| 간격과 프롬프트 | `/loop 5m check the deploy` | 프롬프트가 [고정 스케줄](#run-on-a-fixed-interval)에서 실행됩니다 |

44| 프롬프트만 | `/loop check the deploy` | 프롬프트가 각 반복에서 [Claude가 선택한 간격](#let-claude-choose-the-interval)으로 실행됩니다 |

45| 간격만 또는 아무것도 없음 | `/loop` | [내장 유지보수 프롬프트](#run-the-built-in-maintenance-prompt)가 실행되거나, 존재하는 경우 `loop.md`가 실행됩니다 |

46 

47또한 다른 명령어를 프롬프트로 전달할 수 있습니다. 예를 들어 `/loop 20m /review-pr 1234`는 각 반복에서 패키징된 워크플로우를 다시 실행합니다.

48 

49### 고정 간격으로 실행하기

50 

51간격을 제공하면 Claude가 이를 cron 표현식으로 변환하고, 작업을 스케줄하고, 주기와 작업 ID를 확인합니다.

52 

53```text theme={null}

54/loop 5m check if the deployment finished and tell me what happened

55```

56 

57간격은 `30m`과 같은 선행 토큰으로 프롬프트 앞에 올 수도 있고, `every 2 hours`와 같은 절로 뒤에 올 수도 있습니다. 지원되는 단위는 초의 경우 `s`, 분의 경우 `m`, 시간의 경우 `h`, 일의 경우 `d`입니다.

58 

59cron은 1분 단위의 세분성을 가지므로 초는 가장 가까운 분으로 올림됩니다. `7m` 또는 `90m`과 같이 깔끔한 cron 단계로 매핑되지 않는 간격은 가장 가까운 간격으로 반올림되며 Claude가 선택한 것을 알려줍니다.

60 

61### Claude가 간격을 선택하도록 하기

62 

63간격을 생략하면 Claude가 고정 cron 스케줄 대신 동적으로 간격을 선택합니다. 각 반복 후 관찰한 내용을 기반으로 1분에서 1시간 사이의 지연을 선택합니다. 빌드가 완료되거나 PR이 활성화되는 동안 짧은 대기, 보류 중인 것이 없을 때 더 긴 대기입니다. 선택된 지연과 그 이유는 각 반복이 끝날 때 출력됩니다.

64 

65아래 예시는 CI와 검토 의견을 확인하며, Claude는 PR이 조용해지면 반복 사이에 더 오래 기다립니다.

66 

67```text theme={null}

68/loop check whether CI passed and address any review comments

69```

70 

71동적 `/loop` 스케줄을 요청하면 Claude는 [Monitor tool](/ko/tools-reference#monitor-tool)을 직접 사용할 수 있습니다. Monitor는 백그라운드 스크립트를 실행하고 각 출력 줄을 다시 스트리밍하므로 폴링을 완전히 피하고 프롬프트를 간격으로 다시 실행하는 것보다 토큰 효율적이고 반응성이 더 좋은 경우가 많습니다.

72 

73동적으로 스케줄된 루프는 다른 작업처럼 [스케줄된 작업 목록](#manage-scheduled-tasks)에 나타나므로 동일한 방식으로 나열하거나 취소할 수 있습니다. [지터 규칙](#jitter)은 적용되지 않지만 [7일 만료](#seven-day-expiry)는 적용됩니다. 루프는 시작 후 7일 후 자동으로 종료됩니다.

74 

75<Note>

76 Bedrock, Vertex AI, Microsoft Foundry에서는 간격이 없는 프롬프트가 고정 10분 스케줄로 실행됩니다.

77</Note>

78 

79### 내장 유지보수 프롬프트 실행하기

80 

81프롬프트를 생략하면 Claude는 제공한 프롬프트 대신 내장 유지보수 프롬프트를 사용합니다. 각 반복에서 다음을 순서대로 진행합니다.

82 

83* 대화에서 미완료된 작업 계속하기

84* 현재 브랜치의 풀 요청 관리: 검토 의견, 실패한 CI 실행, 병합 충돌

85* 다른 것이 보류 중이지 않을 때 버그 사냥이나 단순화와 같은 정리 통과 실행

86 

87Claude는 해당 범위 외의 새로운 이니셔티브를 시작하지 않으며, 푸시나 삭제와 같은 되돌릴 수 없는 작업은 트랜스크립트가 이미 승인한 것을 계속할 때만 진행됩니다.

88 

89```text theme={null}

90/loop

91```

92 

93단순한 `/loop`는 [동적으로 선택된 간격](#let-claude-choose-the-interval)에서 이 프롬프트를 실행합니다. 고정 스케줄에서 실행하려면 `/loop 15m`과 같이 간격을 추가하세요. 내장 프롬프트를 자신의 기본값으로 바꾸려면 [loop.md로 기본 프롬프트 사용자 정의하기](#customize-the-default-prompt-with-loop-md)를 참조하세요.

94 

95<Note>

96 Bedrock, Vertex AI, Microsoft Foundry에서는 프롬프트가 없는 `/loop`가 유지보수 루프를 시작하는 대신 사용 메시지를 출력합니다.

97</Note>

98 

99### loop.md로 기본 프롬프트 사용자 정의하기

100 

101`loop.md` 파일은 내장 유지보수 프롬프트를 자신의 지침으로 바꿉니다. 이는 단순한 `/loop`에 대한 단일 기본 프롬프트를 정의하며, 별도의 스케줄된 작업 목록이 아니고, 명령줄에서 프롬프트를 제공할 때마다 무시됩니다. 추가 프롬프트를 함께 스케줄하려면 `/loop <prompt>`를 사용하거나 [Claude에게 직접 요청](#manage-scheduled-tasks)하세요.

102 

103Claude는 두 위치에서 파일을 찾고 먼저 찾은 것을 사용합니다.

104 

105| 경로 | 범위 |

106| :------------------ | :-------------------------------------- |

107| `.claude/loop.md` | 프로젝트 수준. 두 파일이 모두 존재할 때 우선순위를 가집니다. |

108| `~/.claude/loop.md` | 사용자 수준. 자신의 파일을 정의하지 않는 모든 프로젝트에 적용됩니다. |

109 

110파일은 필수 구조가 없는 일반 Markdown입니다. `/loop` 프롬프트를 직접 입력하는 것처럼 작성하세요. 다음 예시는 릴리스 브랜치를 건강하게 유지합니다.

111 

112```markdown title=".claude/loop.md" theme={null}

113Check the `release/next` PR. If CI is red, pull the failing job log,

114diagnose, and push a minimal fix. If new review comments have arrived,

115address each one and resolve the thread. If everything is green and

116quiet, say so in one line.

117```

118 

119`loop.md`에 대한 편집은 다음 반복에서 적용되므로 루프가 실행 중인 동안 지침을 개선할 수 있습니다. 두 위치 중 어디에도 `loop.md`가 없으면 루프는 내장 유지보수 프롬프트로 폴백됩니다. 파일을 간결하게 유지하세요. 25,000바이트를 초과하는 내용은 잘립니다.

120 

121### 루프 중지하기

122 

123`/loop`가 다음 반복을 기다리는 동안 중지하려면 `Esc`를 누르세요. 이는 보류 중인 웨이크업을 지우므로 루프가 다시 실행되지 않습니다. [Claude에게 직접 요청](#manage-scheduled-tasks)하여 스케줄한 작업은 `Esc`의 영향을 받지 않으며 삭제할 때까지 유지됩니다.

124 

125## 일회성 알림 설정하기

126 

127일회성 알림의 경우 `/loop`를 사용하는 대신 자연어로 원하는 것을 설명합니다. Claude는 실행 후 자신을 삭제하는 단일 실행 작업을 스케줄합니다.

128 

129```text theme={null}

130remind me at 3pm to push the release branch

131```

132 

133```text theme={null}

134in 45 minutes, check whether the integration tests passed

135```

136 

137Claude는 cron 표현식을 사용하여 실행 시간을 특정 분과 시간으로 고정하고 실행 시간을 확인합니다.

138 

139## 스케줄된 작업 관리하기

140 

141Claude에게 자연어로 작업을 나열하거나 취소하도록 요청하거나 기본 도구를 직접 참조합니다.

142 

143```text theme={null}

144what scheduled tasks do I have?

145```

146 

147```text theme={null}

148cancel the deploy check job

149```

150 

151내부적으로 Claude는 다음 도구를 사용합니다.

152 

153| 도구 | 목적 |

154| :----------- | :--------------------------------------------------------------- |

155| `CronCreate` | 새 작업을 스케줄합니다. 5필드 cron 표현식, 실행할 프롬프트, 반복 여부 또는 일회성 실행 여부를 허용합니다. |

156| `CronList` | ID, 스케줄, 프롬프트와 함께 모든 스케줄된 작업을 나열합니다. |

157| `CronDelete` | ID로 작업을 취소합니다. |

158 

159각 스케줄된 작업에는 `CronDelete`에 전달할 수 있는 8자 ID가 있습니다. 세션은 한 번에 최대 50개의 스케줄된 작업을 보유할 수 있습니다.

160 

161## 스케줄된 작업이 실행되는 방식

162 

163스케줄러는 매초 기한이 된 작업을 확인하고 낮은 우선순위로 큐에 넣습니다. 스케줄된 프롬프트는 차례 사이에 실행되며, Claude가 응답 중일 때는 실행되지 않습니다. Claude가 작업이 기한이 될 때 바쁘면 프롬프트는 현재 차례가 끝날 때까지 기다립니다.

164 

165모든 시간은 현지 시간대로 해석됩니다. `0 9 * * *`와 같은 cron 표현식은 UTC가 아니라 Claude Code를 실행 중인 곳의 오전 9시를 의미합니다.

166 

167### 지터

168 

169모든 세션이 동일한 벽시계 시간에 API에 도달하는 것을 방지하기 위해 스케줄러는 실행 시간에 작은 결정론적 오프셋을 추가합니다.

170 

171* 반복 작업은 기간의 최대 10% 늦게 실행되며, 최대 15분으로 제한됩니다. 시간별 작업은 `:00`에서 `:06` 사이의 어느 시점에서나 실행될 수 있습니다.

172* 시간의 맨 위 또는 맨 아래에 스케줄된 일회성 작업은 최대 90초 일찍 실행됩니다.

173 

174오프셋은 작업 ID에서 파생되므로 동일한 작업은 항상 동일한 오프셋을 가집니다. 정확한 타이밍이 중요한 경우 `0 9 * * *` 대신 `3 9 * * *`와 같이 `:00` 또는 `:30`이 아닌 분을 선택하면 일회성 지터가 적용되지 않습니다.

175 

176### 7일 만료

177 

178반복 작업은 생성 후 7일 후 자동으로 만료됩니다. 작업은 마지막으로 한 번 실행된 후 자신을 삭제합니다. 이는 잊혀진 루프가 실행될 수 있는 기간을 제한합니다. 반복 작업이 더 오래 지속되어야 하는 경우 만료되기 전에 취소하고 다시 만들거나 지속적인 스케줄링을 위해 [Routines](/ko/routines) 또는 [Desktop scheduled tasks](/ko/desktop-scheduled-tasks)를 사용하세요.

179 

180## Cron 표현식 참조

181 

182`CronCreate`는 표준 5필드 cron 표현식을 허용합니다: `minute hour day-of-month month day-of-week`. 모든 필드는 와일드카드(`*`), 단일 값(`5`), 단계(`*/15`), 범위(`1-5`), 쉼표로 구분된 목록(`1,15,30`)을 지원합니다.

183 

184| 예시 | 의미 |

185| :------------- | :---------------------- |

186| `*/5 * * * *` | 5분마다 |

187| `0 * * * *` | 매시간 정각 |

188| `7 * * * *` | 매시간 7분 |

189| `0 9 * * *` | 매일 오전 9시(현지 시간) |

190| `0 9 * * 1-5` | 평일 오전 9시(현지 시간) |

191| `30 14 15 3 *` | 3월 15일 오후 2시 30분(현지 시간) |

192 

193요일은 일요일의 경우 `0` 또는 `7`, 토요일의 경우 `6`을 사용합니다. `L`, `W`, `?`와 같은 확장 구문 및 `MON` 또는 `JAN`과 같은 이름 별칭은 지원되지 않습니다.

194 

195월의 날짜와 요일이 모두 제한되면 두 필드 중 하나라도 일치하면 날짜가 일치합니다. 이는 표준 vixie-cron 의미론을 따릅니다.

196 

197## 스케줄된 작업 비활성화하기

198 

199환경에서 `CLAUDE_CODE_DISABLE_CRON=1`을 설정하여 스케줄러를 완전히 비활성화합니다. cron 도구와 `/loop`를 사용할 수 없게 되며, 이미 스케줄된 모든 작업이 실행을 중지합니다. 비활성화 플래그의 전체 목록은 [Environment variables](/ko/env-vars)를 참조하세요.

200 

201## 제한 사항

202 

203세션 범위 스케줄링에는 고유한 제약이 있습니다.

204 

205* 작업은 Claude Code가 실행 중이고 유휴 상태일 때만 실행됩니다. 터미널을 닫거나 세션을 종료하면 작업 실행이 중지됩니다.

206* 놓친 실행에 대한 추적 없음. 작업의 스케줄된 시간이 Claude가 오래 실행되는 요청에 바쁠 때 지나가면 Claude가 유휴 상태가 될 때 한 번 실행되며, 놓친 각 간격마다 한 번씩 실행되지 않습니다.

207* 새로운 대화를 시작하면 모든 세션 범위 작업이 지워집니다. `claude --resume` 또는 `claude --continue`로 재개하면 만료되지 않은 작업이 복원됩니다. 생성 후 7일 이내의 반복 작업, 스케줄된 시간이 아직 지나지 않은 일회성 작업입니다. 백그라운드 Bash 및 모니터 작업은 재개 시 복원되지 않습니다.

208 

209무인으로 실행해야 하는 cron 기반 자동화의 경우:

210 

211* [Routines](/ko/routines): Anthropic 관리 인프라에서 스케줄에 따라, API 호출을 통해, 또는 GitHub 이벤트에서 실행

212* [GitHub Actions](/ko/github-actions): CI에서 `schedule` 트리거 사용

213* [Desktop scheduled tasks](/ko/desktop-scheduled-tasks): 머신에서 로컬로 실행

security.md +141 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 보안

6 

7> Claude Code의 보안 보호 기능과 안전한 사용을 위한 모범 사례에 대해 알아봅니다.

8 

9## 보안에 대한 우리의 접근 방식

10 

11### 보안 기초

12 

13코드의 보안은 매우 중요합니다. Claude Code는 보안을 핵심으로 구축되었으며, Anthropic의 포괄적인 보안 프로그램에 따라 개발되었습니다. [Anthropic Trust Center](https://trust.anthropic.com)에서 자세히 알아보고 리소스(SOC 2 Type 2 보고서, ISO 27001 인증서 등)에 접근할 수 있습니다.

14 

15### 권한 기반 아키텍처

16 

17Claude Code는 기본적으로 엄격한 읽기 전용 권한을 사용합니다. 추가 작업이 필요한 경우(파일 편집, 테스트 실행, 명령 실행), Claude Code는 명시적 권한을 요청합니다. 사용자는 작업을 한 번만 승인할지 또는 자동으로 허용할지 제어할 수 있습니다.

18 

19Claude Code는 투명하고 안전하도록 설계되었습니다. 예를 들어, bash 명령을 실행하기 전에 승인을 요구하여 직접 제어할 수 있습니다. 이 접근 방식을 통해 사용자와 조직은 권한을 직접 구성할 수 있습니다.

20 

21자세한 권한 구성은 [Permissions](/ko/permissions)를 참조하십시오.

22 

23### 기본 제공 보호

24 

25에이전트 시스템의 위험을 완화하기 위해:

26 

27* **샌드박스 bash 도구**: [Sandbox](/ko/sandboxing)를 사용하여 bash 명령을 파일 시스템 및 네트워크 격리로 실행하여 권한 프롬프트를 줄이면서 보안을 유지합니다. `/sandbox`를 사용하여 Claude Code가 자율적으로 작업할 수 있는 경계를 정의하도록 활성화합니다.

28* **쓰기 액세스 제한**: Claude Code는 시작된 폴더와 그 하위 폴더에만 쓸 수 있으며, 명시적 권한 없이 상위 디렉토리의 파일을 수정할 수 없습니다. Claude Code는 작업 디렉토리 외부의 파일을 읽을 수 있지만(시스템 라이브러리 및 종속성에 액세스하는 데 유용함), 쓰기 작업은 프로젝트 범위로 엄격히 제한되어 명확한 보안 경계를 만듭니다.

29* **프롬프트 피로 완화**: 사용자별, 코드베이스별 또는 조직별로 자주 사용되는 안전한 명령을 허용 목록에 추가하는 지원

30* **Accept Edits 모드**: 여러 편집을 일괄 수락하면서 부작용이 있는 명령에 대한 권한 프롬프트를 유지합니다.

31 

32### 사용자 책임

33 

34Claude Code는 사용자가 부여한 권한만 가집니다. 승인 전에 제안된 코드와 명령의 안전성을 검토할 책임이 있습니다.

35 

36## 프롬프트 주입으로부터 보호

37 

38프롬프트 주입은 공격자가 악의적인 텍스트를 삽입하여 AI 어시스턴트의 지시사항을 무시하거나 조작하려는 기법입니다. Claude Code는 이러한 공격에 대한 여러 보호 기능을 포함합니다:

39 

40### 핵심 보호

41 

42* **권한 시스템**: 민감한 작업에는 명시적 승인이 필요합니다.

43* **컨텍스트 인식 분석**: 전체 요청을 분석하여 잠재적으로 해로운 지시사항을 감지합니다.

44* **입력 살균**: 사용자 입력을 처리하여 명령 주입을 방지합니다.

45* **명령 차단 목록**: `curl` 및 `wget`과 같이 웹에서 임의의 콘텐츠를 가져오는 위험한 명령을 기본적으로 차단합니다. 명시적으로 허용된 경우 [권한 패턴 제한](/ko/permissions#tool-specific-permission-rules)을 인식하십시오.

46 

47### 개인정보 보호 장치

48 

49데이터를 보호하기 위해 다음을 포함한 여러 보호 기능을 구현했습니다:

50 

51* 민감한 정보에 대한 제한된 보관 기간([Privacy Center](https://privacy.anthropic.com/en/articles/10023548-how-long-do-you-store-my-data)에서 자세히 알아보기)

52* 사용자 세션 데이터에 대한 제한된 액세스

53* 데이터 학습 기본 설정에 대한 사용자 제어. 소비자 사용자는 언제든지 [개인정보 보호 설정](https://claude.ai/settings/privacy)을 변경할 수 있습니다.

54 

55전체 세부 사항은 [Commercial Terms of Service](https://www.anthropic.com/legal/commercial-terms)(Team, Enterprise 및 API 사용자용) 또는 [Consumer Terms](https://www.anthropic.com/legal/consumer-terms)(Free, Pro 및 Max 사용자용) 및 [Privacy Policy](https://www.anthropic.com/legal/privacy)를 검토하십시오.

56 

57### 추가 보호 기능

58 

59* **네트워크 요청 승인**: 네트워크 요청을 하는 도구는 기본적으로 사용자 승인이 필요합니다.

60* **격리된 컨텍스트 윈도우**: 웹 가져오기는 별도의 컨텍스트 윈도우를 사용하여 잠재적으로 악의적인 프롬프트 주입을 방지합니다.

61* **신뢰 확인**: 첫 번째 코드베이스 실행 및 새 MCP 서버는 신뢰 확인이 필요합니다.

62 * 참고: `-p` 플래그를 사용하여 비대화형으로 실행할 때 신뢰 확인이 비활성화됩니다.

63* **명령 주입 감지**: 의심스러운 bash 명령은 이전에 허용 목록에 있었더라도 수동 승인이 필요합니다.

64* **폐쇄형 매칭 실패**: 일치하지 않는 명령은 기본적으로 수동 승인이 필요합니다.

65* **자연어 설명**: 복잡한 bash 명령에는 사용자 이해를 위한 설명이 포함됩니다.

66* **보안 자격증명 저장소**: API 키 및 토큰은 암호화됩니다. [Credential Management](/ko/authentication#credential-management)를 참조하십시오.

67 

68<Warning>

69 **Windows WebDAV 보안 위험**: Windows에서 Claude Code를 실행할 때 WebDAV를 활성화하거나 Claude Code가 WebDAV 하위 디렉토리를 포함할 수 있는 `\\*`와 같은 경로에 액세스하도록 허용하지 않는 것이 좋습니다. [WebDAV는 Microsoft에서 보안 위험으로 인해 더 이상 사용되지 않습니다](https://learn.microsoft.com/en-us/windows/whats-new/deprecated-features#:~:text=The%20Webclient%20\(WebDAV\)%20service%20is%20deprecated). WebDAV를 활성화하면 Claude Code가 원격 호스트에 대한 네트워크 요청을 트리거하여 권한 시스템을 우회할 수 있습니다.

70</Warning>

71 

72**신뢰할 수 없는 콘텐츠로 작업하기 위한 모범 사례**:

73 

741. 승인 전에 제안된 명령 검토

752. 신뢰할 수 없는 콘텐츠를 Claude에 직접 파이프하지 않기

763. 중요한 파일에 대한 제안된 변경 사항 확인

774. 가상 머신(VM)을 사용하여 스크립트를 실행하고 도구 호출을 수행합니다. 특히 외부 웹 서비스와 상호 작용할 때

785. `/feedback`을 사용하여 의심스러운 동작 보고

79 

80<Warning>

81 이러한 보호 기능이 위험을 크게 줄이지만, 모든 공격에 완전히 면역인 시스템은 없습니다. 모든 AI 도구로 작업할 때 항상 좋은 보안 관행을 유지하십시오.

82</Warning>

83 

84## MCP 보안

85 

86Claude Code를 사용하면 사용자가 Model Context Protocol(MCP) 서버를 구성할 수 있습니다. 허용된 MCP 서버 목록은 소스 코드에서 구성되며, Claude Code 설정의 일부로 엔지니어가 소스 제어에 체크인합니다.

87 

88자신의 MCP 서버를 작성하거나 신뢰하는 제공자의 MCP 서버를 사용할 것을 권장합니다. Claude Code 권한을 MCP 서버에 대해 구성할 수 있습니다. Anthropic은 MCP 서버를 관리하거나 감사하지 않습니다.

89 

90## IDE 보안

91 

92IDE에서 Claude Code를 실행하는 방법에 대한 자세한 내용은 [VS Code 보안 및 개인정보 보호](/ko/vs-code#security-and-privacy)를 참조하십시오.

93 

94## 클라우드 실행 보안

95 

96[웹에서 Claude Code](/ko/claude-code-on-the-web)를 사용할 때 추가 보안 제어가 적용됩니다:

97 

98* **격리된 가상 머신**: 각 클라우드 세션은 격리된 Anthropic 관리 VM에서 실행됩니다.

99* **네트워크 액세스 제어**: 네트워크 액세스는 기본적으로 제한되며 비활성화되거나 특정 도메인만 허용하도록 구성할 수 있습니다.

100* **자격증명 보호**: 인증은 샌드박스 내에서 범위가 지정된 자격증명을 사용하는 보안 프록시를 통해 처리되며, 이는 실제 GitHub 인증 토큰으로 변환됩니다.

101* **분기 제한**: Git 푸시 작업은 현재 작업 분기로 제한됩니다.

102* **감사 로깅**: 클라우드 환경의 모든 작업은 규정 준수 및 감사 목적으로 기록됩니다.

103* **자동 정리**: 클라우드 환경은 세션 완료 후 자동으로 종료됩니다.

104 

105클라우드 실행에 대한 자세한 내용은 [Claude Code on the web](/ko/claude-code-on-the-web)을 참조하십시오.

106 

107[Remote Control](/ko/remote-control) 세션은 다르게 작동합니다: 웹 인터페이스는 로컬 머신에서 실행 중인 Claude Code 프로세스에 연결됩니다. 모든 코드 실행 및 파일 액세스는 로컬에 유지되며, 모든 로컬 Claude Code 세션 중에 흐르는 동일한 데이터는 TLS를 통해 Anthropic API를 통해 이동합니다. 클라우드 VM 또는 샌드박싱이 관련되지 않습니다. 연결은 각각 특정 목적으로 제한되고 독립적으로 만료되는 여러 단기 범위 자격증명을 사용하여 손상된 단일 자격증명의 영향 범위를 제한합니다.

108 

109## 보안 모범 사례

110 

111### 민감한 코드로 작업

112 

113* 승인 전에 제안된 모든 변경 사항 검토

114* 민감한 저장소에 프로젝트별 권한 설정 사용

115* 추가 격리를 위해 [dev containers](/ko/devcontainer) 사용 고려

116* `/permissions`를 사용하여 권한 설정을 정기적으로 감사합니다

117 

118### 팀 보안

119 

120* [managed settings](/ko/settings#settings-files)를 사용하여 조직 표준 적용

121* 버전 제어를 통해 승인된 권한 구성 공유

122* 팀 구성원에게 보안 모범 사례 교육

123* [OpenTelemetry metrics](/ko/monitoring-usage)를 통해 Claude Code 사용 모니터링

124* [`ConfigChange` hooks](/ko/hooks#configchange)를 사용하여 세션 중 설정 변경 감사 또는 차단

125 

126### 보안 문제 보고

127 

128Claude Code에서 보안 취약점을 발견한 경우:

129 

1301. 공개적으로 공개하지 마십시오

1312. [HackerOne 프로그램](https://hackerone.com/4f1f16ba-10d3-4d09-9ecc-c721aad90f24/embedded_submissions/new)을 통해 보고합니다

1323. 자세한 재현 단계 포함

1334. 공개 공개 전에 문제를 해결할 시간을 허용합니다

134 

135## 관련 리소스

136 

137* [Sandboxing](/ko/sandboxing) - bash 명령에 대한 파일 시스템 및 네트워크 격리

138* [Permissions](/ko/permissions) - 권한 및 액세스 제어 구성

139* [Monitoring usage](/ko/monitoring-usage) - Claude Code 활동 추적 및 감사

140* [Development containers](/ko/devcontainer) - 보안, 격리된 환경

141* [Anthropic Trust Center](https://trust.anthropic.com) - 보안 인증 및 규정 준수

server-managed-settings.md +224 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 서버 관리 설정 구성

6 

7> 기기 관리 인프라 없이 Claude.ai의 웹 기반 인터페이스를 통해 조직을 위해 Claude Code를 중앙에서 구성합니다.

8 

9서버 관리 설정을 통해 관리자는 Claude.ai의 웹 기반 인터페이스를 통해 Claude Code를 중앙에서 구성할 수 있습니다. Claude Code 클라이언트는 사용자가 조직 자격증명으로 인증할 때 이러한 설정을 자동으로 수신합니다.

10 

11이 방식은 기기 관리 인프라가 없거나 관리되지 않는 기기의 사용자를 위해 설정을 관리해야 하는 조직을 위해 설계되었습니다.

12 

13<Note>

14 서버 관리 설정은 [Claude for Teams](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=server_settings_teams#team-&-enterprise) 및 [Claude for Enterprise](https://anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=server_settings_enterprise) 고객에게 제공됩니다.

15</Note>

16 

17## 요구사항

18 

19서버 관리 설정을 사용하려면 다음이 필요합니다.

20 

21* Claude for Teams 또는 Claude for Enterprise 플랜

22* Claude for Teams의 경우 Claude Code 버전 2.1.38 이상, Claude for Enterprise의 경우 버전 2.1.30 이상

23* `api.anthropic.com`에 대한 네트워크 액세스

24 

25## 서버 관리 설정과 엔드포인트 관리 설정 중 선택

26 

27Claude Code는 중앙 집중식 구성을 위한 두 가지 방식을 지원합니다. 서버 관리 설정은 Anthropic의 서버에서 구성을 전달합니다. [엔드포인트 관리 설정](/ko/settings#settings-files)은 기본 OS 정책(macOS 관리 기본 설정, Windows 레지스트리) 또는 관리 설정 파일을 통해 기기에 직접 배포됩니다.

28 

29| 방식 | 최적 대상 | 보안 모델 |

30| :--------------------------------------------- | :---------------------------- | :----------------------------------------------- |

31| **서버 관리 설정** | MDM이 없는 조직 또는 관리되지 않는 기기의 사용자 | 인증 시 Anthropic의 서버에서 전달되는 설정 |

32| **[엔드포인트 관리 설정](/ko/settings#settings-files)** | MDM 또는 엔드포인트 관리가 있는 조직 | MDM 구성 프로필, 레지스트리 정책 또는 관리 설정 파일을 통해 기기에 배포되는 설정 |

33 

34기기가 MDM 또는 엔드포인트 관리 솔루션에 등록된 경우, 엔드포인트 관리 설정은 설정 파일을 OS 수준에서 사용자 수정으로부터 보호할 수 있으므로 더 강력한 보안 보장을 제공합니다.

35 

36## 서버 관리 설정 구성

37 

38<Steps>

39 <Step title="관리 콘솔 열기">

40 [Claude.ai](https://claude.ai)에서 **관리 설정 > Claude Code > 관리 설정**으로 이동합니다.

41 </Step>

42 

43 <Step title="설정 정의">

44 구성을 JSON으로 추가합니다. [`settings.json`에서 사용 가능한 모든 설정](/ko/settings#available-settings)이 지원되며, [hooks](/ko/hooks), [환경 변수](/ko/env-vars), 및 `allowManagedPermissionRulesOnly`와 같은 [관리 전용 설정](/ko/permissions#managed-only-settings)도 포함됩니다.

45 

46 이 예제는 권한 거부 목록을 적용하고, 사용자가 권한을 우회하는 것을 방지하며, 권한 규칙을 관리 설정에 정의된 규칙으로만 제한합니다.

47 

48 ```json theme={null}

49 {

50 "permissions": {

51 "deny": [

52 "Bash(curl *)",

53 "Read(./.env)",

54 "Read(./.env.*)",

55 "Read(./secrets/**)"

56 ],

57 "disableBypassPermissionsMode": "disable"

58 },

59 "allowManagedPermissionRulesOnly": true

60 }

61 ```

62 

63 Hook은 `settings.json`과 동일한 형식을 사용합니다.

64 

65 이 예제는 조직 전체에서 모든 파일 편집 후 감사 스크립트를 실행합니다.

66 

67 ```json theme={null}

68 {

69 "hooks": {

70 "PostToolUse": [

71 {

72 "matcher": "Edit|Write",

73 "hooks": [

74 { "type": "command", "command": "/usr/local/bin/audit-edit.sh" }

75 ]

76 }

77 ]

78 }

79 }

80 ```

81 

82 [자동 모드](/ko/permission-modes#eliminate-prompts-with-auto-mode) 분류기를 구성하여 조직이 신뢰하는 저장소, 버킷 및 도메인을 알도록 하려면:

83 

84 ```json theme={null}

85 {

86 "autoMode": {

87 "environment": [

88 "Source control: github.example.com/acme-corp and all repos under it",

89 "Trusted cloud buckets: s3://acme-build-artifacts, gs://acme-ml-datasets",

90 "Trusted internal domains: *.corp.example.com"

91 ]

92 }

93 }

94 ```

95 

96 Hook은 셸 명령을 실행하므로 사용자는 적용되기 전에 [보안 승인 대화](#security-approval-dialogs)를 봅니다. `autoMode` 항목이 분류기가 차단하는 것에 어떻게 영향을 미치는지, 그리고 `allow` 및 `soft_deny` 필드에 대한 중요한 경고는 [자동 모드 구성](/ko/auto-mode-config)을 참조하십시오.

97 </Step>

98 

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

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

101 </Step>

102</Steps>

103 

104### 설정 전달 확인

105 

106설정이 적용되고 있는지 확인하려면 사용자에게 Claude Code를 다시 시작하도록 요청합니다. 구성에 [보안 승인 대화](#security-approval-dialogs)를 트리거하는 설정이 포함된 경우, 사용자는 시작 시 관리 설정을 설명하는 프롬프트를 봅니다. 사용자가 `/permissions`를 실행하여 유효한 권한 규칙을 확인하도록 하여 관리 권한 규칙이 활성화되어 있는지 확인할 수도 있습니다.

107 

108### 액세스 제어

109 

110다음 역할이 서버 관리 설정을 관리할 수 있습니다.

111 

112* **주 소유자**

113* **소유자**

114 

115설정 변경이 조직의 모든 사용자에게 적용되므로 신뢰할 수 있는 담당자에게만 액세스를 제한합니다.

116 

117### 관리 전용 설정

118 

119대부분의 [설정 키](/ko/settings#available-settings)는 모든 범위에서 작동합니다. 소수의 키는 관리 설정에서만 읽혀지며 사용자 또는 프로젝트 설정 파일에 배치될 때 효과가 없습니다. 전체 목록은 [관리 전용 설정](/ko/permissions#managed-only-settings)을 참조하십시오. 해당 목록에 없는 모든 설정은 여전히 관리 설정에 배치될 수 있으며 최고 우선순위를 갖습니다.

120 

121### 현재 제한사항

122 

123서버 관리 설정은 다음과 같은 제한사항이 있습니다.

124 

125* 설정은 조직의 모든 사용자에게 균일하게 적용됩니다. 그룹별 구성은 아직 지원되지 않습니다.

126* [MCP 서버 구성](/ko/mcp#managed-mcp-configuration)은 서버 관리 설정을 통해 배포할 수 없습니다.

127 

128## 설정 전달

129 

130### 설정 우선순위

131 

132서버 관리 설정과 [엔드포인트 관리 설정](/ko/settings#settings-files)은 모두 Claude Code [설정 계층](/ko/settings#settings-precedence)의 최상위 계층을 차지합니다. 명령줄 인수를 포함한 다른 설정 수준은 이를 재정의할 수 없습니다.

133 

134관리 계층 내에서 비어있지 않은 구성을 전달하는 첫 번째 소스가 우선합니다. 서버 관리 설정이 먼저 확인되고, 그 다음 엔드포인트 관리 설정이 확인됩니다. 소스는 병합되지 않습니다. 서버 관리 설정이 어떤 키든 전달하면 엔드포인트 관리 설정은 완전히 무시됩니다. 서버 관리 설정이 아무것도 전달하지 않으면 엔드포인트 관리 설정이 적용됩니다.

135 

136엔드포인트 관리 plist 또는 레지스트리 정책으로 돌아가려는 의도로 관리 콘솔에서 서버 관리 구성을 지우는 경우, [캐시된 설정](#fetch-and-caching-behavior)이 다음 성공적인 가져오기까지 클라이언트 머신에 유지된다는 점을 주의하십시오. `/status`를 실행하여 어느 관리 소스가 활성화되어 있는지 확인합니다.

137 

138### 가져오기 및 캐싱 동작

139 

140Claude Code는 시작 시 Anthropic의 서버에서 설정을 가져오고 활성 세션 중에 시간별로 업데이트를 폴링합니다.

141 

142**캐시된 설정 없이 처음 시작:**

143 

144* Claude Code는 비동기적으로 설정을 가져옵니다.

145* 가져오기가 실패하면 Claude Code는 관리 설정 없이 계속됩니다.

146* 설정이 로드되기 전에 제한이 아직 적용되지 않는 짧은 시간이 있습니다.

147 

148**캐시된 설정으로 이후 시작:**

149 

150* 캐시된 설정은 시작 시 즉시 적용됩니다.

151* Claude Code는 백그라운드에서 새로운 설정을 가져옵니다.

152* 캐시된 설정은 네트워크 장애를 통해 유지됩니다.

153 

154Claude Code는 OpenTelemetry 구성과 같은 고급 설정을 제외하고 재시작 없이 설정 업데이트를 자동으로 적용하며, 이는 적용되려면 전체 재시작이 필요합니다.

155 

156### 강제 실패 폐쇄 시작

157 

158기본적으로 시작 시 원격 설정 가져오기가 실패하면 CLI는 관리 설정 없이 계속됩니다. 이 짧은 적용되지 않은 시간이 허용되지 않는 환경의 경우, 관리 설정에서 `forceRemoteSettingsRefresh: true`를 설정합니다.

159 

160이 설정이 활성화되면 CLI는 시작 시 원격 설정이 새로 가져올 때까지 차단됩니다. 가져오기가 실패하면 정책 없이 진행하는 대신 CLI가 종료됩니다. 이 설정은 자체 영속성을 가집니다. 서버에서 전달되면 로컬로도 캐시되므로 새 세션의 첫 번째 성공적인 가져오기 전에도 이후 시작이 동일한 동작을 적용합니다.

161 

162이를 활성화하려면 관리 설정 구성에 키를 추가합니다.

163 

164```json theme={null}

165{

166 "forceRemoteSettingsRefresh": true

167}

168```

169 

170이 설정을 활성화하기 전에 네트워크 정책이 `api.anthropic.com`에 대한 연결을 허용하는지 확인합니다. 해당 엔드포인트에 도달할 수 없으면 CLI는 시작 시 종료되고 사용자는 Claude Code를 시작할 수 없습니다.

171 

172### 보안 승인 대화

173 

174보안 위험을 초래할 수 있는 특정 설정은 적용되기 전에 명시적인 사용자 승인이 필요합니다.

175 

176* **셸 명령 설정**: 셸 명령을 실행하는 설정

177* **사용자 정의 환경 변수**: 알려진 안전 허용 목록에 없는 변수

178* **Hook 구성**: 모든 hook 정의

179 

180이러한 설정이 있을 때 사용자는 구성되는 내용을 설명하는 보안 대화를 봅니다. 사용자는 진행하려면 승인해야 합니다. 사용자가 설정을 거부하면 Claude Code가 종료됩니다.

181 

182<Note>

183 `-p` 플래그를 사용한 비대화형 모드에서 Claude Code는 보안 대화를 건너뛰고 사용자 승인 없이 설정을 적용합니다.

184</Note>

185 

186## 플랫폼 가용성

187 

188서버 관리 설정은 `api.anthropic.com`에 대한 직접 연결이 필요하며 타사 모델 공급자를 사용할 때는 사용할 수 없습니다.

189 

190* Amazon Bedrock

191* Google Vertex AI

192* Microsoft Foundry

193* `ANTHROPIC_BASE_URL` 또는 [LLM gateways](/ko/llm-gateway)를 통한 사용자 정의 API 엔드포인트

194 

195## 감사 로깅

196 

197설정 변경에 대한 감사 로그 이벤트는 규정 준수 API 또는 감사 로그 내보내기를 통해 사용할 수 있습니다. 액세스를 위해 Anthropic 계정 팀에 문의합니다.

198 

199감사 이벤트는 수행된 작업의 유형, 작업을 수행한 계정 및 기기, 이전 값과 새 값에 대한 참조를 포함합니다.

200 

201## 보안 고려사항

202 

203서버 관리 설정은 중앙 집중식 정책 적용을 제공하지만 클라이언트 측 제어로 작동합니다. 관리되지 않는 기기에서 관리자 또는 sudo 액세스 권한이 있는 사용자는 Claude Code 바이너리, 파일 시스템 또는 네트워크 구성을 수정할 수 있습니다.

204 

205| 시나리오 | 동작 |

206| :-------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

207| 사용자가 캐시된 설정 파일을 편집함 | 변조된 파일이 시작 시 적용되지만 다음 서버 가져오기에서 올바른 설정이 복원됩니다. |

208| 사용자가 캐시된 설정 파일을 삭제함 | 첫 시작 동작이 발생합니다. 설정이 비동기적으로 가져오지며 짧은 적용되지 않은 시간이 있습니다. |

209| API를 사용할 수 없음 | 캐시된 설정이 있으면 적용되고, 그렇지 않으면 다음 성공적인 가져오기까지 관리 설정이 적용되지 않습니다. `forceRemoteSettingsRefresh: true`를 사용하면 CLI는 계속하는 대신 종료됩니다. |

210| 사용자가 다른 조직으로 인증함 | 관리 조직 외부의 계정에 대해 설정이 전달되지 않습니다. |

211| 사용자가 [타사 모델 공급자](#platform-availability)를 구성함 | 서버 관리 설정이 우회됩니다. 여기에는 `CLAUDE_CODE_USE_BEDROCK`, `CLAUDE_CODE_USE_MANTLE`, `CLAUDE_CODE_USE_VERTEX`, `CLAUDE_CODE_USE_FOUNDRY` 설정 또는 기본이 아닌 `ANTHROPIC_BASE_URL` 설정이 포함됩니다. |

212 

213런타임 구성 변경을 감지하려면 [`ConfigChange` hooks](/ko/hooks#configchange)를 사용하여 수정 사항을 기록하거나 적용되기 전에 무단 변경을 차단합니다.

214 

215더 강력한 적용 보장을 위해 MDM 솔루션에 등록된 기기에서 [엔드포인트 관리 설정](/ko/settings#settings-files)을 사용합니다.

216 

217## 참고 항목

218 

219Claude Code 구성 관리를 위한 관련 페이지:

220 

221* [설정](/ko/settings): 사용 가능한 모든 설정을 포함한 완전한 구성 참조

222* [엔드포인트 관리 설정](/ko/settings#settings-files): IT에서 기기에 배포하는 관리 설정

223* [인증](/ko/authentication): Claude Code에 대한 사용자 액세스 설정

224* [보안](/ko/security): 보안 보호 및 모범 사례

settings.md +914 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Claude Code 설정

6 

7> 전역 및 프로젝트 수준 설정과 환경 변수로 Claude Code를 구성합니다.

8 

9Claude Code는 사용자의 필요에 맞게 동작을 구성할 수 있는 다양한 설정을 제공합니다. 대화형 REPL을 사용할 때 `/config` 명령을 실행하여 Claude Code를 구성할 수 있으며, 이는 상태 정보를 보고 구성 옵션을 수정할 수 있는 탭 형식의 설정 인터페이스를 엽니다.

10 

11## 구성 범위

12 

13Claude Code는 **범위 시스템**을 사용하여 구성이 어디에 적용되고 누가 공유하는지 결정합니다. 범위를 이해하면 개인 사용, 팀 협업 또는 엔터프라이즈 배포를 위해 Claude Code를 구성하는 방법을 결정하는 데 도움이 됩니다.

14 

15### 사용 가능한 범위

16 

17| 범위 | 위치 | 영향을 받는 대상 | 팀과 공유? |

18| :---------- | :-------------------------------------------------------- | :------------ | :--------------- |

19| **Managed** | 서버 관리 설정, plist / 레지스트리 또는 시스템 수준 `managed-settings.json` | 머신의 모든 사용자 | 예 (IT에서 배포) |

20| **User** | `~/.claude/` 디렉토리 | 모든 프로젝트에서 사용자 | 아니오 |

21| **Project** | 저장소의 `.claude/` | 이 저장소의 모든 협업자 | 예 (git에 커밋됨) |

22| **Local** | `.claude/settings.local.json` | 이 저장소에서만 사용자 | 아니오 (gitignored) |

23 

24### 각 범위를 사용할 때

25 

26**Managed 범위**는 다음을 위한 것입니다:

27 

28* 조직 전체에서 적용해야 하는 보안 정책

29* 재정의할 수 없는 규정 준수 요구 사항

30* IT/DevOps에서 배포한 표준화된 구성

31 

32**User 범위**는 다음에 가장 적합합니다:

33 

34* 모든 곳에서 원하는 개인 설정 (테마, 편집기 설정)

35* 모든 프로젝트에서 사용하는 도구 및 플러그인

36* API 키 및 인증 (안전하게 저장됨)

37 

38**Project 범위**는 다음에 가장 적합합니다:

39 

40* 팀 공유 설정 (권한, hooks, MCP servers)

41* 전체 팀이 가져야 할 플러그인

42* 협업자 간 도구 표준화

43 

44**Local 범위**는 다음에 가장 적합합니다:

45 

46* 특정 프로젝트에 대한 개인 재정의

47* 팀과 공유하기 전에 구성 테스트

48* 다른 사용자에게는 작동하지 않을 머신 특정 설정

49 

50### 범위가 상호 작용하는 방식

51 

52동일한 설정이 여러 범위에서 구성되면 더 구체적인 범위가 우선합니다:

53 

541. **Managed** (최고) - 아무것도 재정의할 수 없음

552. **명령줄 인수** - 임시 세션 재정의

563. **Local** - 프로젝트 및 사용자 설정 재정의

574. **Project** - 사용자 설정 재정의

585. **User** (최저) - 다른 것이 설정을 지정하지 않을 때 적용

59 

60예를 들어, 사용자 설정에서는 권한이 허용되지만 프로젝트 설정에서는 거부되면, 프로젝트 설정이 우선하고 권한이 차단됩니다.

61 

62### 범위를 사용하는 것

63 

64범위는 많은 Claude Code 기능에 적용됩니다:

65 

66| 기능 | 사용자 위치 | 프로젝트 위치 | Local 위치 |

67| :-------------- | :------------------------ | :--------------------------------- | :---------------------------- |

68| **Settings** | `~/.claude/settings.json` | `.claude/settings.json` | `.claude/settings.local.json` |

69| **Subagents** | `~/.claude/agents/` | `.claude/agents/` | 없음 |

70| **MCP servers** | `~/.claude.json` | `.mcp.json` | `~/.claude.json` (프로젝트별) |

71| **Plugins** | `~/.claude/settings.json` | `.claude/settings.json` | `.claude/settings.local.json` |

72| **CLAUDE.md** | `~/.claude/CLAUDE.md` | `CLAUDE.md` 또는 `.claude/CLAUDE.md` | `CLAUDE.local.md` |

73 

74***

75 

76## 설정 파일

77 

78`settings.json` 파일은 계층적 설정을 통해 Claude Code를 구성하기 위한 공식 메커니즘입니다:

79 

80* **사용자 설정**은 `~/.claude/settings.json`에 정의되며 모든 프로젝트에 적용됩니다.

81* **프로젝트 설정**은 프로젝트 디렉토리에 저장됩니다:

82 * 소스 제어에 체크인되고 팀과 공유되는 설정을 위한 `.claude/settings.json`

83 * 체크인되지 않은 설정을 위한 `.claude/settings.local.json`으로, 개인 설정 및 실험에 유용합니다. Claude Code는 `.claude/settings.local.json`이 생성될 때 git을 구성하여 이를 무시하도록 합니다.

84* **Managed 설정**: 중앙 집중식 제어가 필요한 조직의 경우 Claude Code는 managed 설정을 위한 여러 전달 메커니즘을 지원합니다. 모두 동일한 JSON 형식을 사용하며 사용자 또는 프로젝트 설정으로 재정의할 수 없습니다:

85 

86 * **서버 관리 설정**: Anthropic의 서버에서 Claude.ai 관리 콘솔을 통해 전달됩니다. [서버 관리 설정](/ko/server-managed-settings)을 참조하세요.

87 * **MDM/OS 수준 정책**: macOS 및 Windows의 기본 장치 관리를 통해 전달됩니다:

88 * macOS: `com.anthropic.claudecode` managed preferences domain. plist의 최상위 키는 `managed-settings.json`을 반영하며, 중첩된 설정은 딕셔너리이고 배열은 plist 배열입니다. Jamf, Kandji (Iru) 또는 유사한 MDM 도구의 구성 프로필을 통해 배포합니다.

89 * Windows: `HKLM\SOFTWARE\Policies\ClaudeCode` 레지스트리 키와 JSON을 포함하는 `Settings` 값 (REG\_SZ 또는 REG\_EXPAND\_SZ) (그룹 정책 또는 Intune을 통해 배포)

90 * Windows (사용자 수준): `HKCU\SOFTWARE\Policies\ClaudeCode` (최저 정책 우선순위, 관리자 수준 소스가 없을 때만 사용)

91 * **파일 기반**: 시스템 디렉토리에 배포된 `managed-settings.json` 및 `managed-mcp.json`:

92 

93 * macOS: `/Library/Application Support/ClaudeCode/`

94 * Linux 및 WSL: `/etc/claude-code/`

95 * Windows: `C:\Program Files\ClaudeCode\`

96 

97 <Warning>

98 레거시 Windows 경로 `C:\ProgramData\ClaudeCode\managed-settings.json`은 v2.1.75부터 더 이상 지원되지 않습니다. 해당 위치에 설정을 배포한 관리자는 파일을 `C:\Program Files\ClaudeCode\managed-settings.json`으로 마이그레이션해야 합니다.

99 </Warning>

100 

101 파일 기반 managed 설정은 `managed-settings.json`과 동일한 시스템 디렉토리에 `managed-settings.d/` 드롭인 디렉토리도 지원합니다. 이를 통해 별도의 팀이 단일 파일 편집을 조정하지 않고 독립적인 정책 조각을 배포할 수 있습니다.

102 

103 systemd 규칙을 따르면 `managed-settings.json`이 먼저 기본으로 병합되고, 드롭인 디렉토리의 모든 `*.json` 파일이 알파벳순으로 정렬되어 위에 병합됩니다. 스칼라 값의 경우 나중 파일이 이전 파일을 재정의합니다. 배열은 연결되고 중복 제거됩니다. 객체는 깊게 병합됩니다. `.`로 시작하는 숨겨진 파일은 무시됩니다.

104 

105 병합 순서를 제어하려면 숫자 접두사를 사용합니다 (예: `10-telemetry.json` 및 `20-security.json`).

106 

107 [managed 설정](/ko/permissions#managed-only-settings) 및 [Managed MCP 구성](/ko/mcp#managed-mcp-configuration)을 참조하세요.

108 

109 이 [저장소](https://github.com/anthropics/claude-code/tree/main/examples/mdm)에는 Jamf, Kandji (Iru), Intune 및 그룹 정책에 대한 시작 배포 템플릿이 포함되어 있습니다. 이를 시작점으로 사용하고 필요에 맞게 조정합니다.

110 

111 <Note>

112 Managed 배포는 `strictKnownMarketplaces`를 사용하여 **플러그인 마켓플레이스 추가**를 제한할 수도 있습니다. 자세한 내용은 [Managed 마켓플레이스 제한](/ko/plugin-marketplaces#managed-marketplace-restrictions)을 참조하세요.

113 </Note>

114* **기타 구성**은 `~/.claude.json`에 저장됩니다. 이 파일에는 OAuth 세션, [MCP server](/ko/mcp) 구성 (사용자 및 local 범위), 프로젝트별 상태 (허용된 도구, 신뢰 설정) 및 다양한 캐시가 포함됩니다. 프로젝트 범위 MCP 서버는 `.mcp.json`에 별도로 저장됩니다.

115 

116<Note>

117 Claude Code는 자동으로 구성 파일의 타임스탬프가 지정된 백업을 생성하고 데이터 손실을 방지하기 위해 가장 최근의 5개 백업을 유지합니다.

118</Note>

119 

120```JSON 예제 settings.json theme={null}

121{

122 "$schema": "https://json.schemastore.org/claude-code-settings.json",

123 "permissions": {

124 "allow": [

125 "Bash(npm run lint)",

126 "Bash(npm run test *)",

127 "Read(~/.zshrc)"

128 ],

129 "deny": [

130 "Bash(curl *)",

131 "Read(./.env)",

132 "Read(./.env.*)",

133 "Read(./secrets/**)"

134 ]

135 },

136 "env": {

137 "CLAUDE_CODE_ENABLE_TELEMETRY": "1",

138 "OTEL_METRICS_EXPORTER": "otlp"

139 },

140 "companyAnnouncements": [

141 "Welcome to Acme Corp! Review our code guidelines at docs.acme.com",

142 "Reminder: Code reviews required for all PRs",

143 "New security policy in effect"

144 ]

145}

146```

147 

148위의 예제에서 `$schema` 줄은 Claude Code 설정에 대한 [공식 JSON 스키마](https://json.schemastore.org/claude-code-settings.json)를 가리킵니다. 이를 `settings.json`에 추가하면 VS Code, Cursor 및 JSON 스키마 검증을 지원하는 다른 편집기에서 자동 완성 및 인라인 검증이 활성화됩니다.

149 

150게시된 스키마는 주기적으로 업데이트되며 가장 최근 CLI 릴리스에서 추가된 설정을 포함하지 않을 수 있으므로, 최근에 문서화된 필드에 대한 검증 경고가 반드시 구성이 유효하지 않음을 의미하지는 않습니다.

151 

152### 사용 가능한 설정

153 

154`settings.json`은 여러 옵션을 지원합니다:

155 

156| 키 | 설명 | 예제 |

157| :-------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------- |

158| `agent` | 메인 스레드를 명명된 subagent로 실행합니다. 해당 subagent의 시스템 프롬프트, 도구 제한 및 모델을 적용합니다. [subagents 명시적으로 호출](/ko/sub-agents#invoke-subagents-explicitly)을 참조하세요 | `"code-reviewer"` |

159| `allowedChannelPlugins` | (Managed 설정만) 메시지를 푸시할 수 있는 채널 플러그인의 허용 목록입니다. 설정되면 기본 Anthropic 허용 목록을 대체합니다. 정의되지 않음 = 기본값으로 폴백, 빈 배열 = 모든 채널 플러그인 차단. `channelsEnabled: true`가 필요합니다. [채널 플러그인 실행 제한](/ko/channels#restrict-which-channel-plugins-can-run)을 참조하세요 | `[{ "marketplace": "claude-plugins-official", "plugin": "telegram" }]` |

160| `allowedHttpHookUrls` | HTTP hooks가 대상으로 할 수 있는 URL 패턴의 허용 목록입니다. `*`를 와일드카드로 지원합니다. 설정되면 일치하지 않는 URL을 가진 hooks는 차단됩니다. 정의되지 않음 = 제한 없음, 빈 배열 = 모든 HTTP hooks 차단. 배열은 설정 소스 전체에서 병합됩니다. [Hook 구성](#hook-configuration)을 참조하세요 | `["https://hooks.example.com/*"]` |

161| `allowedMcpServers` | Managed 설정에서 설정되면 사용자가 구성할 수 있는 MCP 서버의 허용 목록입니다. 정의되지 않음 = 제한 없음, 빈 배열 = 잠금. 모든 범위에 적용됩니다. 거부 목록이 우선합니다. [Managed MCP 구성](/ko/mcp#managed-mcp-configuration)을 참조하세요 | `[{ "serverName": "github" }]` |

162| `allowManagedHooksOnly` | (Managed 설정만) Managed hooks, SDK hooks 및 managed 설정 `enabledPlugins`에서 강제 활성화된 플러그인의 hooks만 로드됩니다. 사용자, 프로젝트 및 다른 모든 플러그인 hooks는 차단됩니다. [Hook 구성](#hook-configuration)을 참조하세요 | `true` |

163| `allowManagedMcpServersOnly` | (Managed 설정만) Managed 설정의 `allowedMcpServers`만 존중됩니다. `deniedMcpServers`는 여전히 모든 소스에서 병합됩니다. 사용자는 여전히 MCP 서버를 추가할 수 있지만 관리자 정의 허용 목록만 적용됩니다. [Managed MCP 구성](/ko/mcp#managed-mcp-configuration)을 참조하세요 | `true` |

164| `allowManagedPermissionRulesOnly` | (Managed 설정만) 사용자 및 프로젝트 설정이 `allow`, `ask` 또는 `deny` 권한 규칙을 정의하는 것을 방지합니다. Managed 설정의 규칙만 적용됩니다. [Managed 전용 설정](/ko/permissions#managed-only-settings)을 참조하세요 | `true` |

165| `alwaysThinkingEnabled` | 모든 세션에 대해 기본적으로 [확장 사고](/ko/model-config#extended-thinking)를 활성화합니다. 일반적으로 직접 편집하기보다는 `/config` 명령을 통해 구성됩니다 | `true` |

166| `apiKeyHelper` | `/bin/sh`에서 실행될 사용자 정의 스크립트로 인증 값을 생성합니다. 이 값은 모델 요청에 대해 `X-Api-Key` 및 `Authorization: Bearer` 헤더로 전송됩니다 | `/bin/generate_temp_api_key.sh` |

167| `attribution` | git 커밋 및 pull request에 대한 attribution을 사용자 정의합니다. [Attribution 설정](#attribution-settings)을 참조하세요 | `{"commit": "🤖 Generated with Claude Code", "pr": ""}` |

168| `autoMemoryDirectory` | [자동 메모리](/ko/memory#storage-location) 저장소를 위한 사용자 정의 디렉토리입니다. 절대 경로 또는 `~/` 접두사 경로를 허용합니다. 정책 및 사용자 설정과 `--settings` 플래그에서 허용됩니다. 복제된 저장소가 메모리 쓰기를 민감한 위치로 리디렉션할 수 있으므로 프로젝트 또는 local 설정에서는 허용되지 않습니다 | `"~/my-memory-dir"` |

169| `autoMode` | [자동 모드](/ko/permission-modes#eliminate-prompts-with-auto-mode) 분류기가 차단하고 허용하는 것을 사용자 정의합니다. `environment`, `allow` 및 `soft_deny` 배열의 산문 규칙을 포함합니다. 배열에 리터럴 문자열 `"$defaults"`를 포함하여 해당 위치에서 기본 제공 규칙을 상속합니다. [자동 모드 구성](/ko/auto-mode-config)을 참조하세요. 공유 프로젝트 설정에서는 읽지 않음 | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |

170| `autoScrollEnabled` | [fullscreen 렌더링](/ko/fullscreen)에서 새 출력을 대화의 맨 아래로 따릅니다. 기본값: `true`. `/config`에 **자동 스크롤**로 표시됩니다. 이것이 꺼져 있을 때도 권한 프롬프트는 여전히 보기로 스크롤됩니다 | `false` |

171| `autoUpdatesChannel` | 업데이트를 따를 릴리스 채널입니다. 일반적으로 약 1주일 된 버전이고 주요 회귀가 있는 버전을 건너뛰는 `"stable"`을 사용하거나 가장 최근 릴리스인 `"latest"` (기본값)을 사용합니다 | `"stable"` |

172| `availableModels` | `/model`, `--model` 또는 `ANTHROPIC_MODEL`을 통해 사용자가 선택할 수 있는 모델을 제한합니다. 기본 옵션에는 영향을 주지 않습니다. [모델 선택 제한](/ko/model-config#restrict-model-selection)을 참조하세요 | `["sonnet", "haiku"]` |

173| `awaySummaryEnabled` | 몇 분 동안 터미널에서 떨어져 있다가 돌아올 때 한 줄 세션 요약을 표시합니다. 비활성화하려면 `false`로 설정하거나 `/config`에서 세션 요약을 끕니다. [`CLAUDE_CODE_ENABLE_AWAY_SUMMARY`](/ko/env-vars)와 동일합니다 | `true` |

174| `awsAuthRefresh` | `.aws` 디렉토리를 수정하는 사용자 정의 스크립트 ([고급 자격 증명 구성](/ko/amazon-bedrock#advanced-credential-configuration) 참조) | `aws sso login --profile myprofile` |

175| `awsCredentialExport` | AWS 자격 증명이 포함된 JSON을 출력하는 사용자 정의 스크립트 ([고급 자격 증명 구성](/ko/amazon-bedrock#advanced-credential-configuration) 참조) | `/bin/generate_aws_grant.sh` |

176| `blockedMarketplaces` | (Managed 설정만) 마켓플레이스 소스의 차단 목록입니다. 마켓플레이스 추가 및 플러그인 설치, 업데이트, 새로고침 및 자동 업데이트에 적용되므로 정책이 설정되기 전에 추가된 마켓플레이스는 플러그인을 가져오는 데 사용할 수 없습니다. 차단된 소스는 다운로드 전에 확인되므로 파일 시스템에 닿지 않습니다. [Managed 마켓플레이스 제한](/ko/plugin-marketplaces#managed-marketplace-restrictions)을 참조하세요 | `[{ "source": "github", "repo": "untrusted/plugins" }]` |

177| `channelsEnabled` | (Managed 설정만) Team 및 Enterprise 사용자를 위해 [channels](/ko/channels)를 허용합니다. 설정되지 않거나 `false`이면 사용자가 `--channels`에 전달하는 것과 관계없이 채널 메시지 전달을 차단합니다 | `true` |

178| `cleanupPeriodDays` | 이 기간보다 오래 비활성 상태인 세션 파일은 시작 시 삭제됩니다 (기본값: 30일, 최소 1). `0`으로 설정하면 검증 오류가 발생합니다. 또한 시작 시 [고아 subagent worktrees](/ko/worktrees#clean-up-worktrees)의 자동 제거에 대한 나이 기준을 제어합니다. 트랜스크립트 쓰기를 완전히 비활성화하려면 [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/ko/env-vars) 환경 변수를 설정하거나 비대화형 모드 (`-p`)에서 `--no-session-persistence` 플래그 또는 `persistSession: false` SDK 옵션을 사용합니다. | `20` |

179| `companyAnnouncements` | 시작 시 사용자에게 표시할 공지사항입니다. 여러 공지사항이 제공되면 무작위로 순환됩니다. | `["Welcome to Acme Corp! Review our code guidelines at docs.acme.com"]` |

180| `defaultShell` | 입력 상자 `!` 명령의 기본 셸입니다. `"bash"` (기본값) 또는 `"powershell"`을 허용합니다. `"powershell"`을 설정하면 Windows에서 대화형 `!` 명령을 PowerShell을 통해 라우팅합니다. `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`이 필요합니다. [PowerShell 도구](/ko/tools-reference#powershell-tool)를 참조하세요 | `"powershell"` |

181| `deniedMcpServers` | Managed 설정에서 설정되면 명시적으로 차단된 MCP 서버의 거부 목록입니다. Managed 서버를 포함한 모든 범위에 적용됩니다. 거부 목록이 허용 목록보다 우선합니다. [Managed MCP 구성](/ko/mcp#managed-mcp-configuration)을 참조하세요 | `[{ "serverName": "filesystem" }]` |

182| `disableAllHooks` | 모든 [hooks](/ko/hooks) 및 사용자 정의 [상태 줄](/ko/statusline) 비활성화 | `true` |

183| `disableAutoMode` | [자동 모드](/ko/permission-modes#eliminate-prompts-with-auto-mode)가 활성화되는 것을 방지하려면 `"disable"`로 설정합니다. `Shift+Tab` 순환에서 `auto`를 제거하고 시작 시 `--permission-mode auto`를 거부합니다. [managed 설정](/ko/permissions#managed-settings)에서 사용자가 재정의할 수 없을 때 가장 유용합니다 | `"disable"` |

184| `disableDeepLinkRegistration` | Claude Code가 시작 시 운영 체제에 `claude-cli://` 프로토콜 핸들러를 등록하는 것을 방지하려면 `"disable"`로 설정합니다. [Deep links](/ko/deep-links)를 사용하면 외부 도구가 사전 채워진 프롬프트로 Claude Code 세션을 열 수 있습니다. 프로토콜 핸들러 등록이 제한되거나 별도로 관리되는 환경에서 유용합니다 | `"disable"` |

185| `disabledMcpjsonServers` | `.mcp.json` 파일에서 거부할 특정 MCP 서버 목록 | `["filesystem"]` |

186| `disableSkillShellExecution` | [skills](/ko/skills) 및 사용자, 프로젝트, 플러그인 또는 추가 디렉토리 소스의 사용자 정의 명령에서 `` !`...` `` 및 ` ```! ` 블록에 대한 인라인 셸 실행을 비활성화합니다. 명령은 실행되는 대신 `[shell command execution disabled by policy]`로 대체됩니다. 번들 및 managed skills는 영향을 받지 않습니다. [managed 설정](/ko/permissions#managed-settings)에서 사용자가 재정의할 수 없을 때 가장 유용합니다 | `true` |

187| `editorMode` | 입력 프롬프트의 키 바인딩 모드: `"normal"` 또는 `"vim"`. 기본값: `"normal"`. `/config`에 **편집기 모드**로 표시됩니다 | `"vim"` |

188| `effortLevel` | [노력 수준](/ko/model-config#adjust-effort-level)을 세션 간에 유지합니다. `"low"`, `"medium"`, `"high"` 또는 `"xhigh"`를 허용합니다. `/effort`를 이러한 값 중 하나로 실행할 때 자동으로 작성됩니다. [노력 수준 조정](/ko/model-config#adjust-effort-level)에서 지원되는 모델을 참조하세요 | `"xhigh"` |

189| `enableAllProjectMcpServers` | 프로젝트 `.mcp.json` 파일에 정의된 모든 MCP 서버를 자동으로 승인합니다 | `true` |

190| `enabledMcpjsonServers` | `.mcp.json` 파일에서 승인할 특정 MCP 서버 목록 | `["memory", "github"]` |

191| `env` | 모든 세션에 적용될 환경 변수 | `{"FOO": "bar"}` |

192| `fastModePerSessionOptIn` | `true`일 때 빠른 모드는 세션 간에 지속되지 않습니다. 각 세션은 빠른 모드가 꺼진 상태로 시작되며 사용자가 `/fast`로 활성화해야 합니다. 사용자의 빠른 모드 설정은 여전히 저장됩니다. [세션별 옵트인 필요](/ko/fast-mode#require-per-session-opt-in)를 참조하세요 | `true` |

193| `feedbackSurveyRate` | [세션 품질 설문조사](/ko/data-usage#session-quality-surveys)가 적격일 때 나타날 확률 (0–1). 완전히 억제하려면 `0`으로 설정합니다. Bedrock, Vertex 또는 Foundry를 사용할 때 유용하며 기본 샘플 레이트가 적용되지 않습니다 | `0.05` |

194| `fileSuggestion` | `@` 파일 자동 완성을 위한 사용자 정의 스크립트를 구성합니다. [파일 제안 설정](#file-suggestion-settings)을 참조하세요 | `{"type": "command", "command": "~/.claude/file-suggestion.sh"}` |

195| `forceLoginMethod` | `claudeai`를 사용하여 Claude.ai 계정으로만 로그인을 제한하거나, `console`을 사용하여 Claude Console (API 사용 청구) 계정으로만 제한합니다 | `claudeai` |

196| `forceLoginOrgUUID` | 로그인이 특정 조직에 속하도록 요구합니다. 단일 UUID 문자열을 허용하며, 이는 로그인 중에 해당 조직을 사전 선택하거나, 나열된 조직이 사전 선택 없이 허용되는 UUID 배열을 허용합니다. Managed 설정에서 설정되면 인증된 계정이 나열된 조직에 속하지 않으면 로그인이 실패합니다. 빈 배열은 실패하고 잘못된 구성 메시지로 로그인을 차단합니다 | `"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"` 또는 `["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"]` |

197| `forceRemoteSettingsRefresh` | (Managed 설정만) 원격 managed 설정이 서버에서 새로 가져올 때까지 CLI 시작을 차단합니다. 가져오기가 실패하면 캐시된 또는 설정 없이 계속하는 대신 CLI가 종료됩니다. 설정되지 않으면 시작이 원격 설정을 기다리지 않고 계속됩니다. [실패 폐쇄 적용](/ko/server-managed-settings#enforce-fail-closed-startup)을 참조하세요 | `true` |

198| `hooks` | 라이프사이클 이벤트에서 실행할 사용자 정의 명령을 구성합니다. 형식은 [hooks 문서](/ko/hooks)를 참조하세요 | [hooks](/ko/hooks) 참조 |

199| `httpHookAllowedEnvVars` | HTTP hooks가 헤더에 보간할 수 있는 환경 변수 이름의 허용 목록입니다. 설정되면 각 hook의 유효한 `allowedEnvVars`는 이 설정과의 교집합입니다. 정의되지 않음 = 제한 없음. 배열은 설정 소스 전체에서 병합됩니다. [Hook 구성](#hook-configuration)을 참조하세요 | `["MY_TOKEN", "HOOK_SECRET"]` |

200| `includeCoAuthoredBy` | **더 이상 사용되지 않음**: 대신 `attribution`을 사용하세요. git 커밋 및 pull request에 `co-authored-by Claude` 바이라인을 포함할지 여부 (기본값: `true`) | `false` |

201| `includeGitInstructions` | Claude의 시스템 프롬프트에 기본 제공 커밋 및 PR 워크플로우 지침 및 git 상태 스냅샷을 포함합니다 (기본값: `true`). 예를 들어 자신의 git 워크플로우 skills을 사용할 때 이를 `false`로 설정하여 둘 다 제거합니다. `CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` 환경 변수가 설정되면 이 설정보다 우선합니다 | `false` |

202| `language` | Claude의 선호 응답 언어를 구성합니다 (예: `"japanese"`, `"spanish"`, `"french"`). Claude는 기본적으로 이 언어로 응답합니다. 또한 [음성 받아쓰기](/ko/voice-dictation#change-the-dictation-language) 언어를 설정합니다 | `"japanese"` |

203| `minimumVersion` | 배경 자동 업데이트 및 `claude update`가 이 버전 아래로 설치되는 것을 방지하는 하한입니다. `"latest"` 채널에서 `"stable"`로 전환할 때 `/config`를 통해 현재 버전에 머물기 또는 다운그레이드를 허용하라는 메시지가 표시됩니다. 머물기를 선택하면 이 값이 설정됩니다. 또한 [managed 설정](/ko/permissions#managed-settings)에서 조직 전체 최소값을 고정하는 데 유용합니다 | `"2.1.100"` |

204| `model` | Claude Code에 사용할 기본 모델을 재정의합니다 | `"claude-sonnet-4-6"` |

205| `modelOverrides` | Anthropic 모델 ID를 Bedrock 추론 프로필 ARN과 같은 공급자 특정 모델 ID로 매핑합니다. 각 모델 선택기 항목은 공급자 API를 호출할 때 매핑된 값을 사용합니다. [버전별 모델 ID 재정의](/ko/model-config#override-model-ids-per-version)를 참조하세요 | `{"claude-opus-4-6": "arn:aws:bedrock:..."}` |

206| `otelHeadersHelper` | 동적 OpenTelemetry 헤더를 생성하는 스크립트입니다. 시작 시 및 주기적으로 실행됩니다 ([동적 헤더](/ko/monitoring-usage#dynamic-headers) 참조) | `/bin/generate_otel_headers.sh` |

207| `outputStyle` | 시스템 프롬프트를 조정하기 위한 출력 스타일을 구성합니다. [출력 스타일 문서](/ko/output-styles)를 참조하세요 | `"Explanatory"` |

208| `permissions` | 권한의 구조는 아래 표를 참조하세요. | |

209| `plansDirectory` | 계획 파일이 저장되는 위치를 사용자 정의합니다. 경로는 프로젝트 루트에 상대적입니다. 기본값: `~/.claude/plans` | `"./plans"` |

210| `pluginTrustMessage` | (Managed 설정만) 설치 전에 표시되는 플러그인 신뢰 경고에 추가될 사용자 정의 메시지입니다. 이를 사용하여 조직 특정 컨텍스트를 추가합니다. 예를 들어 내부 마켓플레이스의 플러그인이 검증되었음을 확인합니다. | `"All plugins from our marketplace are approved by IT"` |

211| `preferredNotifChannel` | 작업 완료 및 권한 프롬프트 알림 방법: `"auto"`, `"terminal_bell"`, `"iterm2"`, `"iterm2_with_bell"`, `"kitty"`, `"ghostty"` 또는 `"notifications_disabled"`. 기본값: `"auto"`로, iTerm2, Ghostty 및 Kitty에서 데스크톱 알림을 보내고 다른 터미널에서는 아무것도 하지 않습니다. 모든 터미널에서 벨 문자를 울리려면 `"terminal_bell"`을 설정합니다. `/config`에 **알림**으로 표시됩니다. [터미널 벨 또는 알림 받기](/ko/terminal-config#get-a-terminal-bell-or-notification)를 참조하세요 | `"terminal_bell"` |

212| `prefersReducedMotion` | 접근성을 위해 UI 애니메이션 (스피너, shimmer, flash 효과) 감소 또는 비활성화 | `true` |

213| `prUrlTemplate` | PR 배지에 대한 URL 템플릿으로 바닥글 및 도구 결과 요약에 표시됩니다. `gh`에서 보고한 PR URL에서 `{host}`, `{owner}`, `{repo}`, `{number}` 및 `{url}`을 대체합니다. `github.com` 대신 내부 코드 검토 도구를 가리키도록 사용합니다. Claude의 산문에서 `#123` 자동 링크에는 영향을 주지 않습니다 | `"https://reviews.example.com/{owner}/{repo}/pull/{number}"` |

214| `respectGitignore` | `@` 파일 선택기가 `.gitignore` 패턴을 존중할지 여부를 제어합니다. `true` (기본값)일 때 `.gitignore` 패턴과 일치하는 파일은 제안에서 제외됩니다 | `false` |

215| `showClearContextOnPlanAccept` | 계획 수락 화면에서 "컨텍스트 지우기" 옵션을 표시합니다. 기본값: `false`. 옵션을 복원하려면 `true`로 설정합니다 | `true` |

216| `showThinkingSummaries` | 대화형 세션에서 [확장 사고](/ko/model-config#extended-thinking) 요약을 표시합니다. 설정되지 않거나 `false` (대화형 모드의 기본값)일 때 사고 블록은 API에 의해 편집되고 축소된 스텁으로 표시됩니다. 편집은 표시되는 내용만 변경하고 모델이 생성하는 내용은 변경하지 않습니다. 사고 지출을 줄이려면 [예산을 낮추거나 사고를 비활성화](/ko/model-config#extended-thinking)하세요. 비대화형 모드 (`-p`) 및 SDK 호출자는 이 설정과 관계없이 항상 요약을 받습니다 | `true` |

217| `showTurnDuration` | 응답 후 턴 지속 시간 메시지를 표시합니다 (예: "Cooked for 1m 6s"). 기본값: `true`. `/config`에 **턴 지속 시간 표시**로 표시됩니다 | `false` |

218| `skipWebFetchPreflight` | [WebFetch 도메인 안전 검사](/ko/data-usage#webfetch-domain-safety-check)를 건너뜁니다. 이 검사는 각 요청된 호스트명을 가져오기 전에 `api.anthropic.com`으로 전송합니다. Bedrock, Vertex AI 또는 Foundry 배포와 같이 Anthropic으로의 트래픽을 차단하는 환경에서 `true`로 설정합니다. 건너뛰면 WebFetch는 차단 목록을 참조하지 않고 모든 URL을 시도합니다 | `true` |

219| `spinnerTipsEnabled` | Claude가 작업 중일 때 스피너에 팁을 표시합니다. 팁을 비활성화하려면 `false`로 설정합니다 (기본값: `true`) | `false` |

220| `spinnerTipsOverride` | 사용자 정의 문자열로 스피너 팁을 재정의합니다. `tips`: 팁 문자열 배열. `excludeDefault`: `true`이면 사용자 정의 팁만 표시하고, `false`이거나 없으면 사용자 정의 팁이 기본 제공 팁과 병합됩니다 | `{ "excludeDefault": true, "tips": ["Use our internal tool X"] }` |

221| `spinnerVerbs` | 스피너 및 턴 지속 시간 메시지에 표시되는 작업 동사를 사용자 정의합니다. `mode`를 `"replace"`로 설정하여 동사만 사용하거나 `"append"`로 설정하여 기본값에 추가합니다 | `{"mode": "append", "verbs": ["Pondering", "Crafting"]}` |

222| `sshConfigs` | [Desktop](/ko/desktop#pre-configure-ssh-connections-for-your-team) 환경 드롭다운에 표시할 SSH 연결입니다. 각 항목에는 `id`, `name` 및 `sshHost`가 필요하며, `sshPort`, `sshIdentityFile` 및 `startDirectory`는 선택 사항입니다. Managed 설정에서 설정되면 연결은 사용자에게 읽기 전용입니다. Managed 및 사용자 설정에서만 읽음 | `[{"id": "dev-vm", "name": "Dev VM", "sshHost": "user@dev.example.com"}]` |

223| `statusLine` | 컨텍스트를 표시하기 위한 사용자 정의 상태 줄을 구성합니다. [`statusLine` 문서](/ko/statusline)를 참조하세요 | `{"type": "command", "command": "~/.claude/statusline.sh"}` |

224| `strictKnownMarketplaces` | (Managed 설정만) 플러그인 마켓플레이스 소스의 허용 목록입니다. 정의되지 않음 = 제한 없음, 빈 배열 = 잠금. 마켓플레이스 추가 및 플러그인 설치, 업데이트, 새로고침 및 자동 업데이트에 적용되므로 정책이 설정되기 전에 추가된 마켓플레이스는 플러그인을 가져오는 데 사용할 수 없습니다. [Managed 마켓플레이스 제한](/ko/plugin-marketplaces#managed-marketplace-restrictions)을 참조하세요 | `[{ "source": "github", "repo": "acme-corp/plugins" }]` |

225| `teammateMode` | [에이전트 팀](/ko/agent-teams) 팀원이 표시되는 방식: `auto` (tmux 또는 iTerm2에서 분할 창 선택, 그 외에는 in-process), `in-process` 또는 `tmux`. [디스플레이 모드 선택](/ko/agent-teams#choose-a-display-mode)을 참조하세요 | `"in-process"` |

226| `terminalProgressBarEnabled` | 지원되는 터미널에서 터미널 진행률 표시줄을 표시합니다: ConEmu, Ghostty 1.2.0+ 및 iTerm2 3.6.6+. 기본값: `true`. `/config`에 **터미널 진행률 표시줄**로 표시됩니다 | `false` |

227| `tui` | 터미널 UI 렌더러입니다. 깜박임 없는 [alt-screen 렌더러](/ko/fullscreen)가 있는 가상화된 스크롤백을 위해 `"fullscreen"`을 사용합니다. 클래식 메인 화면 렌더러를 위해 `"default"`를 사용합니다. `/tui`를 통해 설정합니다 | `"fullscreen"` |

228| `useAutoModeDuringPlan` | 자동 모드를 사용할 수 있을 때 계획 모드가 자동 모드 의미론을 사용할지 여부입니다. 기본값: `true`. 공유 프로젝트 설정에서는 읽지 않음. `/config`에 "계획 중 자동 모드 사용"으로 표시됨 | `false` |

229| `viewMode` | 시작 시 기본 트랜스크립트 보기 모드: `"default"`, `"verbose"` 또는 `"focus"`. 설정되면 sticky `/focus` 선택을 재정의합니다 | `"verbose"` |

230| `voice` | [음성 받아쓰기](/ko/voice-dictation) 설정: `enabled`는 받아쓰기를 켜고, `mode`는 `"hold"` 또는 `"tap"`을 선택하고, `autoSubmit`은 hold 모드에서 키 릴리스 시 프롬프트를 전송합니다. `/voice`를 실행할 때 자동으로 작성됩니다. Claude.ai 계정이 필요합니다 | `{ "enabled": true, "mode": "tap" }` |

231| `voiceEnabled` | `voice.enabled`에 대한 레거시 별칭입니다. `voice` 객체를 선호합니다 | `true` |

232| `wslInheritsWindowsSettings` | (Windows managed 설정만) `true`일 때 WSL의 Claude Code는 `/etc/claude-code`에 추가하여 Windows 정책 체인에서 managed 설정을 읽으며 Windows 소스가 우선합니다. Windows 관리자가 작성해야 하는 HKLM 레지스트리 키 또는 `C:\Program Files\ClaudeCode\managed-settings.json`에서 설정된 경우에만 적용됩니다. HKCU 정책도 WSL에 적용되려면 플래그를 HKCU 자체에도 설정해야 합니다. 기본 Windows에는 영향을 주지 않습니다 | `true` |

233 

234### 전역 구성 설정

235 

236이러한 설정은 `settings.json`이 아닌 `~/.claude.json`에 저장됩니다. 이들을 `settings.json`에 추가하면 스키마 검증 오류가 발생합니다.

237 

238<Note>

239 v2.1.119 이전 버전은 `autoScrollEnabled`, `editorMode`, `showTurnDuration`, `teammateMode` 및 `terminalProgressBarEnabled`를 `settings.json` 대신 여기에 저장합니다.

240</Note>

241 

242| 키 | 설명 | 예제 |

243| :------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------ |

244| `autoConnectIde` | Claude Code가 외부 터미널에서 시작될 때 실행 중인 IDE에 자동으로 연결합니다. 기본값: `false`. VS Code 또는 JetBrains 터미널 외부에서 실행할 때 `/config`에 \*\*IDE에 자동 연결 (외부 터미널)\*\*로 표시됩니다 | `true` |

245| `autoInstallIdeExtension` | VS Code 터미널에서 실행할 때 Claude Code IDE 확장을 자동으로 설치합니다. 기본값: `true`. VS Code 또는 JetBrains 터미널 내에서 실행할 때 `/config`에 **IDE 확장 자동 설치**로 표시됩니다. [`CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL`](/ko/env-vars) 환경 변수도 설정할 수 있습니다 | `false` |

246| `externalEditorContext` | `Ctrl+G`로 외부 편집기를 열 때 Claude의 이전 응답을 `#` 주석 처리된 컨텍스트로 앞에 붙입니다. 기본값: `false`. `/config`에 **외부 편집기에 마지막 응답 표시**로 표시됩니다 | `true` |

247 

248### Worktree 설정

249 

250`--worktree`가 git worktrees를 생성하고 관리하는 방식을 구성합니다. 이러한 설정을 사용하여 대규모 monorepos에서 디스크 사용량 및 시작 시간을 줄입니다.

251 

252| 키 | 설명 | 예제 |

253| :---------------------------- | :-------------------------------------------------------------------------------------------------------- | :------------------------------------ |

254| `worktree.symlinkDirectories` | 각 worktree에서 중복을 피하기 위해 메인 저장소에서 symlink할 디렉토리입니다. 기본적으로 디렉토리는 symlink되지 않습니다 | `["node_modules", ".cache"]` |

255| `worktree.sparsePaths` | git sparse-checkout (cone mode)을 통해 각 worktree에서 체크아웃할 디렉토리입니다. 나열된 경로만 디스크에 작성되므로 대규모 monorepos에서 더 빠릅니다 | `["packages/my-app", "shared/utils"]` |

256 

257worktrees에 `.env`와 같은 gitignored 파일을 복사하려면 설정 대신 프로젝트 루트의 [`.worktreeinclude` 파일](/ko/worktrees#copy-gitignored-files-into-worktrees)을 사용합니다.

258 

259### 권한 설정

260 

261| 키 | 설명 | 예제 |

262| :---------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- |

263| `allow` | 도구 사용을 허용하는 권한 규칙 배열입니다. 패턴 매칭 세부 사항은 아래 [권한 규칙 구문](#permission-rule-syntax)을 참조하세요 | `[ "Bash(git diff *)" ]` |

264| `ask` | 도구 사용 시 확인을 요청하는 권한 규칙 배열입니다. 패턴 매칭 세부 사항은 아래 [권한 규칙 구문](#permission-rule-syntax)을 참조하세요 | `[ "Bash(git push *)" ]` |

265| `deny` | 도구 사용을 거부하는 권한 규칙 배열입니다. 이를 사용하여 Claude Code 액세스에서 민감한 파일을 제외합니다. [권한 규칙 구문](#permission-rule-syntax) 및 [Bash 권한 제한](/ko/permissions#tool-specific-permission-rules)을 참조하세요 | `[ "WebFetch", "Bash(curl *)", "Read(./.env)", "Read(./secrets/**)" ]` |

266| `additionalDirectories` | Claude가 액세스할 수 있는 추가 [작업 디렉토리](/ko/permissions#working-directories)입니다. 대부분의 `.claude/` 구성은 이러한 디렉토리에서 [발견되지 않습니다](/ko/permissions#additional-directories-grant-file-access-not-configuration) | `[ "../docs/" ]` |

267| `defaultMode` | Claude Code를 열 때 기본 [권한 모드](/ko/permission-modes)입니다. 유효한 값: `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions`. `--permission-mode` CLI 플래그는 단일 세션에 대해 이 설정을 재정의합니다 | `"acceptEdits"` |

268| `disableBypassPermissionsMode` | `bypassPermissions` 모드가 활성화되는 것을 방지하려면 `"disable"`로 설정합니다. 이는 `--dangerously-skip-permissions` 명령줄 플래그를 비활성화합니다. 일반적으로 [managed 설정](/ko/permissions#managed-settings)에 배치되어 조직 정책을 적용하지만 모든 범위에서 작동합니다 | `"disable"` |

269| `skipDangerousModePermissionPrompt` | `--dangerously-skip-permissions` 또는 `defaultMode: "bypassPermissions"`를 통해 bypass permissions 모드에 들어가기 전에 표시되는 확인 프롬프트를 건너뜁니다. 신뢰할 수 없는 저장소가 프롬프트를 자동으로 우회하는 것을 방지하기 위해 프로젝트 설정 (`.claude/settings.json`)에서 설정되면 무시됩니다 | `true` |

270 

271### 권한 규칙 구문

272 

273권한 규칙은 `Tool` 또는 `Tool(specifier)` 형식을 따릅니다. 규칙은 순서대로 평가됩니다: 먼저 거부 규칙, 그 다음 요청, 그 다음 허용. 첫 번째 일치 규칙이 우승합니다.

274 

275빠른 예제:

276 

277| 규칙 | 효과 |

278| :----------------------------- | :--------------------------- |

279| `Bash` | 모든 Bash 명령과 일치 |

280| `Bash(npm run *)` | `npm run`으로 시작하는 명령과 일치 |

281| `Read(./.env)` | `.env` 파일 읽기와 일치 |

282| `WebFetch(domain:example.com)` | example.com에 대한 fetch 요청과 일치 |

283 

284Read, Edit, WebFetch, MCP 및 Agent 규칙에 대한 와일드카드 동작, 도구 특정 패턴 및 Bash 패턴의 보안 제한을 포함한 완전한 규칙 구문 참조는 [권한 규칙 구문](/ko/permissions#permission-rule-syntax)을 참조하세요.

285 

286### Sandbox 설정

287 

288고급 샌드박싱 동작을 구성합니다. 샌드박싱은 bash 명령을 파일 시스템 및 네트워크에서 격리합니다. 자세한 내용은 [Sandboxing](/ko/sandboxing)을 참조하세요.

289 

290| 키 | 설명 | 예제 |

291| :------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------- |

292| `enabled` | bash 샌드박싱 활성화 (macOS, Linux 및 WSL2). 기본값: false | `true` |

293| `failIfUnavailable` | `sandbox.enabled`가 true이지만 샌드박스를 시작할 수 없는 경우 (종속성 누락, 지원되지 않는 플랫폼) 시작 시 오류로 종료합니다. false (기본값)일 때 경고가 표시되고 명령이 샌드박싱되지 않은 상태로 실행됩니다. Managed 설정 배포에서 샌드박싱을 하드 게이트로 요구하는 경우를 위한 것입니다 | `true` |

294| `autoAllowBashIfSandboxed` | 샌드박싱되면 bash 명령 자동 승인. 기본값: true | `true` |

295| `excludedCommands` | 샌드박스 외부에서 실행해야 하는 명령 | `["docker *"]` |

296| `allowUnsandboxedCommands` | `dangerouslyDisableSandbox` 매개변수를 통해 샌드박스 외부에서 명령을 실행하도록 허용합니다. `false`로 설정되면 `dangerouslyDisableSandbox` 이스케이프 해치가 완전히 비활성화되고 모든 명령은 샌드박싱되거나 `excludedCommands`에 있어야 합니다. 엄격한 샌드박싱이 필요한 엔터프라이즈 정책에 유용합니다. 기본값: true | `false` |

297| `filesystem.allowWrite` | 샌드박싱된 명령이 쓸 수 있는 추가 경로입니다. 배열은 모든 설정 범위에서 병합됩니다: 사용자, 프로젝트 및 managed 경로가 결합되고 대체되지 않습니다. `Edit(...)` 허용 권한 규칙의 경로와도 병합됩니다. [경로 접두사](#sandbox-path-prefixes)를 참조하세요. | `["/tmp/build", "~/.kube"]` |

298| `filesystem.denyWrite` | 샌드박싱된 명령이 쓸 수 없는 경로입니다. 배열은 모든 설정 범위에서 병합됩니다. `Edit(...)` 거부 권한 규칙의 경로와도 병합됩니다. | `["/etc", "/usr/local/bin"]` |

299| `filesystem.denyRead` | 샌드박싱된 명령이 읽을 수 없는 경로입니다. 배열은 모든 설정 범위에서 병합됩니다. `Read(...)` 거부 권한 규칙의 경로와도 병합됩니다. | `["~/.aws/credentials"]` |

300| `filesystem.allowRead` | `denyRead` 영역 내에서 읽기를 다시 허용할 경로입니다. `denyRead`보다 우선합니다. 배열은 모든 설정 범위에서 병합됩니다. 이를 사용하여 작업 공간 전용 읽기 액세스 패턴을 만듭니다. | `["."]` |

301| `filesystem.allowManagedReadPathsOnly` | (Managed 설정만) Managed 설정의 `filesystem.allowRead` 경로만 존중됩니다. `denyRead`는 여전히 모든 소스에서 병합됩니다. 기본값: false | `true` |

302| `network.allowUnixSockets` | (macOS만) Unix 소켓 경로 샌드박스에서 액세스 가능. Linux 및 WSL2에서는 무시되며, seccomp 필터가 소켓 경로를 검사할 수 없습니다. 대신 `allowAllUnixSockets`를 사용합니다. | `["~/.ssh/agent-socket"]` |

303| `network.allowAllUnixSockets` | 샌드박스에서 모든 Unix 소켓 연결을 허용합니다. Linux 및 WSL2에서 이는 `socket(AF_UNIX, ...)` 호출을 차단하는 seccomp 필터를 건너뛰므로 Unix 소켓을 허용하는 유일한 방법입니다. 기본값: false | `true` |

304| `network.allowLocalBinding` | localhost 포트에 바인딩 허용 (macOS만). 기본값: false | `true` |

305| `network.allowMachLookup` | 샌드박스가 조회할 수 있는 추가 XPC/Mach 서비스 이름 (macOS만). 접두사 일치를 위해 단일 후행 `*`를 지원합니다. iOS Simulator 또는 Playwright와 같이 XPC를 통해 통신하는 도구에 필요합니다. | `["com.apple.coresimulator.*"]` |

306| `network.allowedDomains` | 아웃바운드 네트워크 트래픽을 허용할 도메인 배열입니다. 와일드카드를 지원합니다 (예: `*.example.com`). | `["github.com", "*.npmjs.org"]` |

307| `network.deniedDomains` | 아웃바운드 네트워크 트래픽을 차단할 도메인 배열입니다. `allowedDomains`와 동일한 와일드카드 구문을 지원합니다. 둘 다 일치할 때 `allowedDomains`보다 우선합니다. 모든 설정 소스와 관계없이 병합됩니다 | `["sensitive.cloud.example.com"]` |

308| `network.allowManagedDomainsOnly` | (Managed 설정만) Managed 설정의 `allowedDomains` 및 `WebFetch(domain:...)` 허용 규칙만 존중됩니다. 사용자, 프로젝트 및 local 설정의 도메인은 무시됩니다. 허용되지 않은 도메인은 사용자에게 메시지를 표시하지 않고 자동으로 차단됩니다. 거부된 도메인은 여전히 모든 소스에서 존중됩니다. 기본값: false | `true` |

309| `network.httpProxyPort` | 자신의 프록시를 가져오려는 경우 사용되는 HTTP 프록시 포트입니다. 지정되지 않으면 Claude가 자신의 프록시를 실행합니다. | `8080` |

310| `network.socksProxyPort` | 자신의 프록시를 가져오려는 경우 사용되는 SOCKS5 프록시 포트입니다. 지정되지 않으면 Claude가 자신의 프록시를 실행합니다. | `8081` |

311| `enableWeakerNestedSandbox` | 권한이 없는 Docker 환경에서 더 약한 샌드박스를 활성화합니다 (Linux 및 WSL2만). **보안을 감소시킵니다.** 기본값: false | `true` |

312| `enableWeakerNetworkIsolation` | (macOS만) 샌드박스에서 시스템 TLS 신뢰 서비스 (`com.apple.trustd.agent`)에 대한 액세스를 허용합니다. MITM 프록시 및 사용자 정의 CA를 사용하는 `httpProxyPort`를 사용할 때 `gh`, `gcloud` 및 `terraform`과 같은 Go 기반 도구가 TLS 인증서를 확인하는 데 필요합니다. **보안을 감소시킵니다** 잠재적 데이터 유출 경로를 열어서. 기본값: false | `true` |

313 

314#### Sandbox 경로 접두사

315 

316`filesystem.allowWrite`, `filesystem.denyWrite`, `filesystem.denyRead` 및 `filesystem.allowRead`의 경로는 다음 접두사를 지원합니다:

317 

318| 접두사 | 의미 | 예제 |

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

320| `/` | 파일 시스템 루트의 절대 경로 | `/tmp/build`는 `/tmp/build`로 유지됨 |

321| `~/` | 홈 디렉토리에 상대적 | `~/.kube`는 `$HOME/.kube`가 됨 |

322| `./` 또는 접두사 없음 | 프로젝트 설정의 경우 프로젝트 루트에 상대적이거나 사용자 설정의 경우 `~/.claude`에 상대적 | `./output`은 `.claude/settings.json`에서 `<project-root>/output`으로 해결됨 |

323 

324이전 `//path` 접두사는 절대 경로에 대해 여전히 작동합니다. 이전에 프로젝트 상대 해결을 기대하면서 단일 슬래시 `/path`를 사용한 경우 `./path`로 전환합니다. 이 구문은 `/path`를 프로젝트 상대로 사용하는 [Read 및 Edit 권한 규칙](/ko/permissions#read-and-edit)과 다릅니다. Sandbox 파일 시스템 경로는 표준 규칙을 사용합니다: `/tmp/build`는 절대 경로입니다.

325 

326**구성 예제:**

327 

328```json theme={null}

329{

330 "sandbox": {

331 "enabled": true,

332 "autoAllowBashIfSandboxed": true,

333 "excludedCommands": ["docker *"],

334 "filesystem": {

335 "allowWrite": ["/tmp/build", "~/.kube"],

336 "denyRead": ["~/.aws/credentials"]

337 },

338 "network": {

339 "allowedDomains": ["github.com", "*.npmjs.org", "registry.yarnpkg.com"],

340 "deniedDomains": ["uploads.github.com"],

341 "allowUnixSockets": [

342 "/var/run/docker.sock"

343 ],

344 "allowLocalBinding": true

345 }

346 }

347}

348```

349 

350**파일 시스템 및 네트워크 제한**은 함께 병합되는 두 가지 방식으로 구성할 수 있습니다:

351 

352* **`sandbox.filesystem` 설정** (위에 표시됨): OS 수준 샌드박스 경계에서 경로를 제어합니다. 이러한 제한은 Claude의 파일 도구뿐만 아니라 모든 하위 프로세스 명령 (예: `kubectl`, `terraform`, `npm`)에 적용됩니다.

353* **권한 규칙**: `Edit` 허용/거부 규칙을 사용하여 Claude의 파일 도구 액세스를 제어하고, `Read` 거부 규칙을 사용하여 읽기를 차단하고, `WebFetch` 허용/거부 규칙을 사용하여 네트워크 도메인을 제어합니다. 이러한 규칙의 경로도 샌드박스 구성에 병합됩니다.

354 

355### Attribution 설정

356 

357Claude Code는 git 커밋 및 pull request에 attribution을 추가합니다. 이들은 별도로 구성됩니다:

358 

359* 커밋은 기본적으로 [git trailers](https://git-scm.com/docs/git-interpret-trailers) (예: `Co-Authored-By`)를 사용하며 사용자 정의하거나 비활성화할 수 있습니다

360* Pull request 설명은 일반 텍스트입니다

361 

362| 키 | 설명 |

363| :------- | :------------------------------------------------------------------------ |

364| `commit` | git 커밋에 대한 attribution으로 모든 trailers를 포함합니다. 빈 문자열은 커밋 attribution을 숨깁니다 |

365| `pr` | Pull request 설명에 대한 attribution입니다. 빈 문자열은 pull request attribution을 숨깁니다 |

366 

367**기본 커밋 attribution:**

368 

369```text theme={null}

370🤖 Generated with [Claude Code](https://claude.com/claude-code)

371 

372 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

373```

374 

375**기본 pull request attribution:**

376 

377```text theme={null}

378🤖 Generated with [Claude Code](https://claude.com/claude-code)

379```

380 

381**예제:**

382 

383```json theme={null}

384{

385 "attribution": {

386 "commit": "Generated with AI\n\nCo-Authored-By: AI <ai@example.com>",

387 "pr": ""

388 }

389}

390```

391 

392<Note>

393 `attribution` 설정은 더 이상 사용되지 않는 `includeCoAuthoredBy` 설정보다 우선합니다. 모든 attribution을 숨기려면 `commit` 및 `pr`을 빈 문자열로 설정합니다.

394</Note>

395 

396### 파일 제안 설정

397 

398`@` 파일 경로 자동 완성을 위한 사용자 정의 명령을 구성합니다. 기본 제공 파일 제안은 빠른 파일 시스템 순회를 사용하지만 대규모 monorepos는 사전 구축된 파일 인덱스 또는 사용자 정의 도구와 같은 프로젝트 특정 인덱싱의 이점을 얻을 수 있습니다.

399 

400```json theme={null}

401{

402 "fileSuggestion": {

403 "type": "command",

404 "command": "~/.claude/file-suggestion.sh"

405 }

406}

407```

408 

409명령은 `CLAUDE_PROJECT_DIR`을 포함한 [hooks](/ko/hooks)와 동일한 환경 변수로 실행됩니다. stdin을 통해 `query` 필드가 있는 JSON을 받습니다:

410 

411```json theme={null}

412{"query": "src/comp"}

413```

414 

415stdout에 줄 바꿈으로 구분된 파일 경로를 출력합니다 (현재 15개로 제한됨):

416 

417```text theme={null}

418src/components/Button.tsx

419src/components/Modal.tsx

420src/components/Form.tsx

421```

422 

423**예제:**

424 

425```bash theme={null}

426#!/bin/bash

427query=$(cat | jq -r '.query')

428your-repo-file-index --query "$query" | head -20

429```

430 

431### Hook 구성

432 

433이러한 설정은 어떤 hooks가 실행될 수 있는지와 HTTP hooks가 액세스할 수 있는 것을 제어합니다. `allowManagedHooksOnly` 설정은 [managed 설정](#settings-files)에서만 구성할 수 있습니다. URL 및 env var 허용 목록은 모든 설정 수준에서 설정할 수 있으며 소스 전체에서 병합됩니다.

434 

435**`allowManagedHooksOnly`가 `true`일 때의 동작:**

436 

437* Managed hooks 및 SDK hooks가 로드됨

438* Managed 설정 `enabledPlugins`에서 강제 활성화된 플러그인의 hooks가 로드됩니다. 이를 통해 관리자는 조직 마켓플레이스를 통해 검증된 hooks를 배포하면서 다른 모든 것을 차단할 수 있습니다. 신뢰는 전체 `plugin@marketplace` ID로 부여되므로 다른 마켓플레이스의 동일한 이름의 플러그인은 차단된 상태로 유지됩니다

439* 사용자 hooks, 프로젝트 hooks 및 다른 모든 플러그인 hooks는 차단됩니다

440 

441**HTTP hook URL 제한:**

442 

443HTTP hooks가 대상으로 할 수 있는 URL을 제한합니다. 일치를 위해 `*`를 와일드카드로 지원합니다. 배열이 정의되면 일치하지 않는 URL을 대상으로 하는 HTTP hooks는 자동으로 차단됩니다.

444 

445```json theme={null}

446{

447 "allowedHttpHookUrls": ["https://hooks.example.com/*", "http://localhost:*"]

448}

449```

450 

451**HTTP hook 환경 변수 제한:**

452 

453HTTP hooks가 헤더 값에 보간할 수 있는 환경 변수 이름을 제한합니다. 각 hook의 유효한 `allowedEnvVars`는 이 설정과의 교집합입니다.

454 

455```json theme={null}

456{

457 "httpHookAllowedEnvVars": ["MY_TOKEN", "HOOK_SECRET"]

458}

459```

460 

461### 설정 우선순위

462 

463설정은 우선순위 순서대로 적용됩니다. 가장 높음에서 가장 낮음:

464 

4651. **Managed 설정** ([서버 관리](/ko/server-managed-settings), [MDM/OS 수준 정책](#configuration-scopes) 또는 [managed 설정](/ko/settings#settings-files))

466 * IT에서 서버 전달, MDM 구성 프로필, 레지스트리 정책 또는 managed 설정 파일을 통해 배포한 정책

467 * 명령줄 인수를 포함한 다른 수준으로 재정의할 수 없음

468 * Managed 계층 내에서 우선순위는: 서버 관리 > MDM/OS 수준 정책 > 파일 기반 (`managed-settings.d/*.json` + `managed-settings.json`) > HKCU 레지스트리 (Windows만). 하나의 managed 소스만 사용되며 소스는 병합되지 않습니다. 파일 기반 계층 내에서 드롭인 파일과 기본 파일이 함께 병합됩니다.

469 

4702. **명령줄 인수**

471 * 특정 세션에 대한 임시 재정의

472 

4733. **Local 프로젝트 설정** (`.claude/settings.local.json`)

474 * 개인 프로젝트 특정 설정

475 

4764. **공유 프로젝트 설정** (`.claude/settings.json`)

477 * 소스 제어의 팀 공유 프로젝트 설정

478 

4795. **사용자 설정** (`~/.claude/settings.json`)

480 * 개인 전역 설정

481 

482이 계층 구조는 조직 정책이 항상 적용되면서도 팀과 개인이 자신의 경험을 사용자 정의할 수 있도록 보장합니다. CLI, [VS Code 확장](/ko/vs-code) 또는 [JetBrains IDE](/ko/jetbrains)에서 Claude Code를 실행하든 동일한 우선순위가 적용됩니다.

483 

484예를 들어 사용자 설정이 `Bash(npm run *)`을 허용하지만 프로젝트의 공유 설정이 이를 거부하면 프로젝트 설정이 우선하고 명령이 차단됩니다.

485 

486<Note>

487 **배열 설정은 범위 전체에서 병합됩니다.** 동일한 배열 값 설정 (예: `sandbox.filesystem.allowWrite` 또는 `permissions.allow`)이 여러 범위에 나타나면 배열은 **연결되고 중복 제거되며** 대체되지 않습니다. 이는 낮은 우선순위 범위가 높은 우선순위 범위에서 설정한 항목을 재정의하지 않고 항목을 추가할 수 있음을 의미하며 그 반대도 마찬가지입니다. 예를 들어 managed 설정이 `allowWrite`를 `["/opt/company-tools"]`로 설정하고 사용자가 `["~/.kube"]`를 추가하면 두 경로 모두 최종 구성에 포함됩니다.

488</Note>

489 

490### 활성 설정 확인

491 

492Claude Code 내에서 `/status`를 실행하여 어떤 설정 소스가 활성화되어 있고 어디에서 오는지 확인합니다. 출력은 각 구성 계층 (managed, user, project)을 `Enterprise managed settings (remote)`, `Enterprise managed settings (plist)`, `Enterprise managed settings (HKLM)`, `Enterprise managed settings (HKCU)` 또는 `Enterprise managed settings (file)`과 같은 출처와 함께 표시합니다. 설정 파일에 오류가 포함되어 있으면 `/status`는 문제를 보고하여 수정할 수 있습니다.

493 

494### 구성 시스템의 핵심 포인트

495 

496* **메모리 파일 (`CLAUDE.md`)**: Claude가 시작 시 로드하는 지침 및 컨텍스트를 포함합니다

497* **설정 파일 (JSON)**: 권한, 환경 변수 및 도구 동작을 구성합니다

498* **Skills**: `/skill-name`으로 호출하거나 Claude가 자동으로 로드할 수 있는 사용자 정의 프롬프트

499* **MCP servers**: 추가 도구 및 통합으로 Claude Code를 확장합니다

500* **우선순위**: 높은 수준 구성 (Managed)이 낮은 수준 (User/Project)을 재정의합니다

501* **상속**: 설정은 병합되며 더 구체적인 설정이 더 광범위한 설정을 추가하거나 재정의합니다

502 

503### 시스템 프롬프트

504 

505Claude Code의 내부 시스템 프롬프트는 게시되지 않습니다. 사용자 정의 지침을 추가하려면 `CLAUDE.md` 파일 또는 `--append-system-prompt` 플래그를 사용합니다.

506 

507### 민감한 파일 제외

508 

509API 키, 비밀 및 환경 파일과 같은 민감한 정보가 포함된 파일에서 Claude Code가 액세스하는 것을 방지하려면 `.claude/settings.json` 파일에서 `permissions.deny` 설정을 사용합니다:

510 

511```json theme={null}

512{

513 "permissions": {

514 "deny": [

515 "Read(./.env)",

516 "Read(./.env.*)",

517 "Read(./secrets/**)",

518 "Read(./config/credentials.json)",

519 "Read(./build)"

520 ]

521 }

522}

523```

524 

525이는 더 이상 사용되지 않는 `ignorePatterns` 구성을 대체합니다. 이러한 패턴과 일치하는 파일은 파일 검색 및 검색 결과에서 제외되며 이러한 파일에 대한 읽기 작업이 거부됩니다.

526 

527## Subagent 구성

528 

529Claude Code는 사용자 및 프로젝트 수준 모두에서 구성할 수 있는 사용자 정의 AI subagents를 지원합니다. 이러한 subagents는 YAML frontmatter가 있는 Markdown 파일로 저장됩니다:

530 

531* **사용자 subagents**: `~/.claude/agents/` - 모든 프로젝트에서 사용 가능

532* **프로젝트 subagents**: `.claude/agents/` - 프로젝트에 특정이며 팀과 공유할 수 있음

533 

534Subagent 파일은 사용자 정의 프롬프트 및 도구 권한이 있는 특화된 AI 어시스턴트를 정의합니다. [subagents 문서](/ko/sub-agents)에서 subagents 생성 및 사용에 대해 자세히 알아보세요.

535 

536## 플러그인 구성

537 

538Claude Code는 skills, agents, hooks 및 MCP servers로 기능을 확장할 수 있는 플러그인 시스템을 지원합니다. 플러그인은 마켓플레이스를 통해 배포되며 사용자 및 저장소 수준 모두에서 구성할 수 있습니다.

539 

540### 플러그인 설정

541 

542`settings.json`의 플러그인 관련 설정:

543 

544```json theme={null}

545{

546 "enabledPlugins": {

547 "formatter@acme-tools": true,

548 "deployer@acme-tools": true,

549 "analyzer@security-plugins": false

550 },

551 "extraKnownMarketplaces": {

552 "acme-tools": {

553 "source": "github",

554 "repo": "acme-corp/claude-plugins"

555 }

556 }

557}

558```

559 

560#### `enabledPlugins`

561 

562어떤 플러그인이 활성화되는지 제어합니다. 형식: `"plugin-name@marketplace-name": true/false`

563 

564**범위**:

565 

566* **사용자 설정** (`~/.claude/settings.json`): 개인 플러그인 설정

567* **프로젝트 설정** (`.claude/settings.json`): 팀과 공유되는 프로젝트 특정 플러그인

568* **Local 설정** (`.claude/settings.local.json`): 머신별 재정의 (커밋되지 않음)

569* **Managed 설정** (`managed-settings.json`): 모든 범위에서 설치를 차단하고 마켓플레이스에서 플러그인을 숨기는 조직 전체 정책 재정의

570 

571**예제**:

572 

573```json theme={null}

574{

575 "enabledPlugins": {

576 "code-formatter@team-tools": true,

577 "deployment-tools@team-tools": true,

578 "experimental-features@personal": false

579 }

580}

581```

582 

583#### `extraKnownMarketplaces`

584 

585저장소에서 사용 가능하게 해야 할 추가 마켓플레이스를 정의합니다. 일반적으로 팀 멤버가 필요한 플러그인 소스에 액세스할 수 있도록 저장소 수준 설정에서 사용됩니다.

586 

587**저장소에 `extraKnownMarketplaces`가 포함되면**:

588 

5891. 팀 멤버는 폴더를 신뢰할 때 마켓플레이스를 설치하라는 메시지를 받습니다

5902. 그 다음 팀 멤버는 해당 마켓플레이스에서 플러그인을 설치하라는 메시지를 받습니다

5913. 사용자는 원하지 않는 마켓플레이스 또는 플러그인을 건너뛸 수 있습니다 (사용자 설정에 저장됨)

5924. 설치는 신뢰 경계를 존중하고 명시적 동의가 필요합니다

593 

594**예제**:

595 

596```json theme={null}

597{

598 "extraKnownMarketplaces": {

599 "acme-tools": {

600 "source": {

601 "source": "github",

602 "repo": "acme-corp/claude-plugins"

603 }

604 },

605 "security-plugins": {

606 "source": {

607 "source": "git",

608 "url": "https://git.example.com/security/plugins.git"

609 }

610 }

611 }

612}

613```

614 

615**마켓플레이스 소스 유형**:

616 

617* `github`: GitHub 저장소 (`repo` 사용)

618* `git`: 모든 git URL (`url` 사용)

619* `directory`: 로컬 파일 시스템 경로 (`path` 사용, 개발 전용)

620* `hostPattern`: 마켓플레이스 호스트와 일치하는 정규식 패턴 (`hostPattern` 사용)

621* `settings`: 별도의 호스팅 저장소 없이 settings.json에 직접 선언된 인라인 마켓플레이스 (`name` 및 `plugins` 사용)

622 

623`source: 'settings'`를 사용하여 호스팅된 마켓플레이스 저장소를 설정하지 않고 작은 플러그인 세트를 인라인으로 선언합니다. 여기에 나열된 플러그인은 GitHub 또는 npm과 같은 외부 소스를 참조해야 합니다. 여전히 `enabledPlugins`에서 각 플러그인을 별도로 활성화해야 합니다.

624 

625```json theme={null}

626{

627 "extraKnownMarketplaces": {

628 "team-tools": {

629 "source": {

630 "source": "settings",

631 "name": "team-tools",

632 "plugins": [

633 {

634 "name": "code-formatter",

635 "source": {

636 "source": "github",

637 "repo": "acme-corp/code-formatter"

638 }

639 }

640 ]

641 }

642 }

643 }

644}

645```

646 

647#### `strictKnownMarketplaces`

648 

649**Managed 설정만**: 사용자가 추가할 수 있는 플러그인 마켓플레이스를 제어합니다. 이 설정은 [managed 설정](/ko/settings#settings-files)에서만 구성할 수 있으며 관리자에게 마켓플레이스 소스에 대한 엄격한 제어를 제공합니다.

650 

651**Managed 설정 파일 위치**:

652 

653* **macOS**: `/Library/Application Support/ClaudeCode/managed-settings.json`

654* **Linux 및 WSL**: `/etc/claude-code/managed-settings.json`

655* **Windows**: `C:\Program Files\ClaudeCode\managed-settings.json`

656 

657**주요 특성**:

658 

659* Managed 설정 (`managed-settings.json`)에서만 사용 가능

660* 사용자 또는 프로젝트 설정으로 재정의할 수 없음 (최고 우선순위)

661* 네트워크/파일 시스템 작업 전에 적용됨 (차단된 소스는 실행되지 않음)

662* `hostPattern`을 제외한 소스 사양에 대해 정확한 일치를 사용합니다. `hostPattern`은 정규식 일치를 사용합니다

663 

664**허용 목록 동작**:

665 

666* `undefined` (기본값): 제한 없음 - 사용자는 모든 마켓플레이스를 추가할 수 있음

667* 빈 배열 `[]`: 완전 잠금 - 사용자는 새 마켓플레이스를 추가할 수 없음

668* 소스 목록: 사용자는 정확히 일치하는 마켓플레이스만 추가할 수 있음

669 

670**지원되는 모든 소스 유형**:

671 

672허용 목록은 여러 마켓플레이스 소스 유형을 지원합니다. 대부분의 소스는 정확한 일치를 사용하는 반면 `hostPattern`은 마켓플레이스 호스트에 대한 정규식 일치를 사용합니다.

673 

6741. **GitHub 저장소**:

675 

676```json theme={null}

677{ "source": "github", "repo": "acme-corp/approved-plugins" }

678{ "source": "github", "repo": "acme-corp/security-tools", "ref": "v2.0" }

679{ "source": "github", "repo": "acme-corp/plugins", "ref": "main", "path": "marketplace" }

680```

681 

682필드: `repo` (필수), `ref` (선택: 분기/태그/SHA), `path` (선택: 하위 디렉토리)

683 

6842. **Git 저장소**:

685 

686```json theme={null}

687{ "source": "git", "url": "https://gitlab.example.com/tools/plugins.git" }

688{ "source": "git", "url": "https://bitbucket.org/acme-corp/plugins.git", "ref": "production" }

689{ "source": "git", "url": "ssh://git@git.example.com/plugins.git", "ref": "v3.1", "path": "approved" }

690```

691 

692필드: `url` (필수), `ref` (선택: 분기/태그/SHA), `path` (선택: 하위 디렉토리)

693 

6943. **URL 기반 마켓플레이스**:

695 

696```json theme={null}

697{ "source": "url", "url": "https://plugins.example.com/marketplace.json" }

698{ "source": "url", "url": "https://cdn.example.com/marketplace.json", "headers": { "Authorization": "Bearer ${TOKEN}" } }

699```

700 

701필드: `url` (필수), `headers` (선택: 인증된 액세스를 위한 HTTP 헤더)

702 

703<Note>

704 URL 기반 마켓플레이스는 `marketplace.json` 파일만 다운로드합니다. 서버에서 플러그인 파일을 다운로드하지 않습니다. URL 기반 마켓플레이스의 플러그인은 상대 경로가 아닌 외부 소스 (GitHub, npm 또는 git URL)를 사용해야 합니다. 상대 경로가 있는 플러그인의 경우 대신 Git 기반 마켓플레이스를 사용합니다. [문제 해결](/ko/plugin-marketplaces#plugins-with-relative-paths-fail-in-url-based-marketplaces)을 참조하세요.

705</Note>

706 

7074. **NPM 패키지**:

708 

709```json theme={null}

710{ "source": "npm", "package": "@acme-corp/claude-plugins" }

711{ "source": "npm", "package": "@acme-corp/approved-marketplace" }

712```

713 

714필드: `package` (필수, 범위가 지정된 패키지 지원)

715 

7165. **파일 경로**:

717 

718```json theme={null}

719{ "source": "file", "path": "/usr/local/share/claude/acme-marketplace.json" }

720{ "source": "file", "path": "/opt/acme-corp/plugins/marketplace.json" }

721```

722 

723필드: `path` (필수: marketplace.json 파일의 절대 경로)

724 

7256. **디렉토리 경로**:

726 

727```json theme={null}

728{ "source": "directory", "path": "/usr/local/share/claude/acme-plugins" }

729{ "source": "directory", "path": "/opt/acme-corp/approved-marketplaces" }

730```

731 

732필드: `path` (필수: `.claude-plugin/marketplace.json`을 포함하는 디렉토리의 절대 경로)

733 

7347. **호스트 패턴 일치**:

735 

736```json theme={null}

737{ "source": "hostPattern", "hostPattern": "^github\\.example\\.com$" }

738{ "source": "hostPattern", "hostPattern": "^gitlab\\.internal\\.example\\.com$" }

739```

740 

741필드: `hostPattern` (필수: 마켓플레이스 호스트와 일치하는 정규식 패턴)

742 

743각 저장소를 열거하지 않고 특정 호스트의 모든 마켓플레이스를 허용하려면 호스트 패턴 일치를 사용합니다. 이는 개발자가 자신의 마켓플레이스를 만드는 내부 GitHub Enterprise 또는 GitLab 서버가 있는 조직에 유용합니다.

744 

745소스 유형별 호스트 추출:

746 

747* `github`: 항상 `github.com`에 대해 일치

748* `git`: URL에서 호스트 이름 추출 (HTTPS 및 SSH 형식 지원)

749* `url`: URL에서 호스트 이름 추출

750* `npm`, `file`, `directory`: 호스트 패턴 일치에 지원되지 않음

751 

752**구성 예제**:

753 

754예제: 특정 마켓플레이스만 허용:

755 

756```json theme={null}

757{

758 "strictKnownMarketplaces": [

759 {

760 "source": "github",

761 "repo": "acme-corp/approved-plugins"

762 },

763 {

764 "source": "github",

765 "repo": "acme-corp/security-tools",

766 "ref": "v2.0"

767 },

768 {

769 "source": "url",

770 "url": "https://plugins.example.com/marketplace.json"

771 },

772 {

773 "source": "npm",

774 "package": "@acme-corp/compliance-plugins"

775 }

776 ]

777}

778```

779 

780예제 - 모든 마켓플레이스 추가 비활성화:

781 

782```json theme={null}

783{

784 "strictKnownMarketplaces": []

785}

786```

787 

788예제: 내부 git 서버의 모든 마켓플레이스 허용:

789 

790```json theme={null}

791{

792 "strictKnownMarketplaces": [

793 {

794 "source": "hostPattern",

795 "hostPattern": "^github\\.example\\.com$"

796 }

797 ]

798}

799```

800 

801**정확한 일치 요구 사항**:

802 

803마켓플레이스 소스는 사용자의 추가가 허용되려면 **정확히** 일치해야 합니다. git 기반 소스 (`github` 및 `git`)의 경우 이는 모든 선택적 필드를 포함합니다:

804 

805* `repo` 또는 `url`이 정확히 일치해야 함

806* `ref` 필드가 정확히 일치해야 함 (또는 둘 다 정의되지 않음)

807* `path` 필드가 정확히 일치해야 함 (또는 둘 다 정의되지 않음)

808 

809일치하지 **않는** 소스의 예:

810 

811```json theme={null}

812// 이들은 다른 소스입니다:

813{ "source": "github", "repo": "acme-corp/plugins" }

814{ "source": "github", "repo": "acme-corp/plugins", "ref": "main" }

815 

816// 이것도 다릅니다:

817{ "source": "github", "repo": "acme-corp/plugins", "path": "marketplace" }

818{ "source": "github", "repo": "acme-corp/plugins" }

819```

820 

821**`extraKnownMarketplaces`와의 비교**:

822 

823| 측면 | `strictKnownMarketplaces` | `extraKnownMarketplaces` |

824| ---------- | ------------------------- | ------------------------ |

825| **목적** | 조직 정책 적용 | 팀 편의 |

826| **설정 파일** | `managed-settings.json`만 | 모든 설정 파일 |

827| **동작** | 허용 목록에 없는 추가 차단 | 누락된 마켓플레이스 자동 설치 |

828| **적용 시기** | 네트워크/파일 시스템 작업 전 | 사용자 신뢰 프롬프트 후 |

829| **재정의 가능** | 아니오 (최고 우선순위) | 예 (높은 우선순위 설정으로) |

830| **소스 형식** | 직접 소스 객체 | 중첩된 소스가 있는 명명된 마켓플레이스 |

831| **사용 사례** | 규정 준수, 보안 제한 | 온보딩, 표준화 |

832 

833**형식 차이**:

834 

835`strictKnownMarketplaces`는 직접 소스 객체를 사용합니다:

836 

837```json theme={null}

838{

839 "strictKnownMarketplaces": [

840 { "source": "github", "repo": "acme-corp/plugins" }

841 ]

842}

843```

844 

845`extraKnownMarketplaces`는 명명된 마켓플레이스가 필요합니다:

846 

847```json theme={null}

848{

849 "extraKnownMarketplaces": {

850 "acme-tools": {

851 "source": { "source": "github", "repo": "acme-corp/plugins" }

852 }

853 }

854}

855```

856 

857**함께 사용**:

858 

859`strictKnownMarketplaces`는 정책 게이트입니다: 사용자가 추가할 수 있는 것을 제어하지만 마켓플레이스를 등록하지 않습니다. 모든 사용자를 위해 마켓플레이스를 제한하고 사전 등록하려면 `managed-settings.json`에서 둘 다 설정합니다:

860 

861```json theme={null}

862{

863 "strictKnownMarketplaces": [

864 { "source": "github", "repo": "acme-corp/plugins" }

865 ],

866 "extraKnownMarketplaces": {

867 "acme-tools": {

868 "source": { "source": "github", "repo": "acme-corp/plugins" }

869 }

870 }

871}

872```

873 

874`strictKnownMarketplaces`만 설정되면 사용자는 여전히 `/plugin marketplace add`를 통해 허용된 마켓플레이스를 수동으로 추가할 수 있지만 자동으로 사용 가능하지 않습니다.

875 

876**중요 참고 사항**:

877 

878* 제한은 네트워크 요청 또는 파일 시스템 작업 전에 확인됨

879* 차단되면 사용자는 소스가 managed 정책으로 차단되었음을 나타내는 명확한 오류 메시지를 봅니다

880* 제한은 마켓플레이스 추가 및 플러그인 설치, 업데이트, 새로고침 및 자동 업데이트에 적용됩니다. 정책이 설정되기 전에 추가된 마켓플레이스는 해당 소스가 더 이상 허용 목록과 일치하지 않으면 플러그인을 설치하거나 업데이트하는 데 사용할 수 없습니다

881* Managed 설정은 최고 우선순위를 가지며 재정의할 수 없습니다

882 

883사용자 대면 문서는 [Managed 마켓플레이스 제한](/ko/plugin-marketplaces#managed-marketplace-restrictions)을 참조하세요.

884 

885### 플러그인 관리

886 

887`/plugin` 명령을 사용하여 플러그인을 대화형으로 관리합니다:

888 

889* 마켓플레이스에서 사용 가능한 플러그인 찾아보기

890* 플러그인 설치/제거

891* 플러그인 활성화/비활성화

892* 플러그인 세부 정보 보기 (제공되는 skills, agents, hooks)

893* 마켓플레이스 추가/제거

894 

895[플러그인 문서](/ko/plugins)에서 플러그인 시스템에 대해 자세히 알아보세요.

896 

897## 환경 변수

898 

899환경 변수를 사용하면 설정 파일을 편집하지 않고 Claude Code 동작을 제어할 수 있습니다. 모든 변수는 [`settings.json`](#available-settings)의 `env` 키 아래에서 구성하여 모든 세션에 적용하거나 팀에 배포할 수 있습니다.

900 

901전체 목록은 [환경 변수 참조](/ko/env-vars)를 참조하세요.

902 

903## Claude가 사용할 수 있는 도구

904 

905Claude Code는 파일 읽기, 편집, 검색, 명령 실행 및 subagents 조율을 위한 도구 세트에 액세스할 수 있습니다. 도구 이름은 권한 규칙 및 hook 매처에서 사용하는 정확한 문자열입니다.

906 

907전체 목록 및 Bash 도구 동작 세부 사항은 [도구 참조](/ko/tools-reference)를 참조하세요.

908 

909## 참고 항목

910 

911* [권한](/ko/permissions): 권한 시스템, 규칙 구문, 도구 특정 패턴 및 관리형 정책

912* [인증](/ko/authentication): Claude Code에 대한 사용자 액세스 설정

913* [구성 디버깅](/ko/debug-your-config): 설정, 훅 또는 MCP 서버가 적용되지 않는 이유를 진단합니다

914* [설치 및 로그인 문제 해결](/ko/troubleshoot-install): 설치, 인증 및 플랫폼 문제

setup.md +606 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 고급 설정

6 

7> Claude Code의 시스템 요구사항, 플랫폼별 설치, 버전 관리 및 제거.

8 

9이 페이지에서는 시스템 요구사항, 플랫폼별 설치 세부사항, 업데이트 및 제거에 대해 다룹니다. 첫 번째 세션의 단계별 안내는 [빠른 시작](/ko/quickstart)을 참조하세요. 터미널을 처음 사용하는 경우 [터미널 가이드](/ko/terminal-guide)를 참조하세요.

10 

11## 시스템 요구사항

12 

13Claude Code는 다음 플랫폼 및 구성에서 실행됩니다:

14 

15* **운영 체제**:

16 * macOS 13.0+

17 * Windows 10 1809+ 또는 Windows Server 2019+

18 * Ubuntu 20.04+

19 * Debian 10+

20 * Alpine Linux 3.19+

21* **하드웨어**: 4GB 이상 RAM, x64 또는 ARM64 프로세서

22* **네트워크**: 인터넷 연결 필수. [네트워크 구성](/ko/network-config#network-access-requirements)을 참조하세요.

23* **셸**: Bash, Zsh, PowerShell 또는 CMD. 네이티브 Windows에서는 [Git for Windows](https://git-scm.com/downloads/win)를 권장합니다. Git Bash가 없을 때 Claude Code는 PowerShell로 폴백됩니다. WSL 설정에는 Git for Windows가 필요하지 않습니다.

24* **위치**: [Anthropic 지원 국가](https://www.anthropic.com/supported-countries)

25 

26### 추가 종속성

27 

28* **ripgrep**: 일반적으로 Claude Code에 포함됩니다. 검색이 실패하면 [검색 문제 해결](/ko/troubleshooting#search-and-discovery-issues)을 참조하세요.

29 

30## Claude Code 설치

31 

32<Tip>

33 그래픽 인터페이스를 선호하시나요? [Desktop 앱](/ko/desktop-quickstart)을 사용하면 터미널 없이 Claude Code를 사용할 수 있습니다. [macOS](https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code\&utm_medium=docs) 또는 [Windows](https://claude.com/download?utm_source=claude_code\&utm_medium=docs)용으로 다운로드하세요.

34 

35 터미널이 처음이신가요? 단계별 지침은 [터미널 가이드](/ko/terminal-guide)를 참조하세요.

36</Tip>

37 

38To install Claude Code, use one of the following methods:

39 

40<Tabs>

41 <Tab title="Native Install (Recommended)">

42 **macOS, Linux, WSL:**

43 

44 ```bash theme={null}

45 curl -fsSL https://claude.ai/install.sh | bash

46 ```

47 

48 **Windows PowerShell:**

49 

50 ```powershell theme={null}

51 irm https://claude.ai/install.ps1 | iex

52 ```

53 

54 **Windows CMD:**

55 

56 ```batch theme={null}

57 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

58 ```

59 

60 If you see `The token '&&' is not a valid statement separator`, you're in PowerShell, not CMD. If you see `'irm' is not recognized as an internal or external command`, you're in CMD, not PowerShell. Your prompt shows `PS C:\` when you're in PowerShell and `C:\` without the `PS` when you're in CMD.

61 

62 [Git for Windows](https://git-scm.com/downloads/win) is recommended on native Windows so Claude Code can use the Bash tool. If Git for Windows is not installed, Claude Code uses PowerShell as the shell tool instead. WSL setups do not need Git for Windows.

63 

64 <Info>

65 Native installations automatically update in the background to keep you on the latest version.

66 </Info>

67 </Tab>

68 

69 <Tab title="Homebrew">

70 ```bash theme={null}

71 brew install --cask claude-code

72 ```

73 

74 Homebrew offers two casks. `claude-code` tracks the stable release channel, which is typically about a week behind and skips releases with major regressions. `claude-code@latest` tracks the latest channel and receives new versions as soon as they ship.

75 

76 <Info>

77 Homebrew installations do not auto-update. Run `brew upgrade claude-code` or `brew upgrade claude-code@latest`, depending on which cask you installed, to get the latest features and security fixes.

78 </Info>

79 </Tab>

80 

81 <Tab title="WinGet">

82 ```powershell theme={null}

83 winget install Anthropic.ClaudeCode

84 ```

85 

86 <Info>

87 WinGet installations do not auto-update. Run `winget upgrade Anthropic.ClaudeCode` periodically to get the latest features and security fixes.

88 </Info>

89 </Tab>

90</Tabs>

91 

92You can also install with [apt, dnf, or apk](/en/setup#install-with-linux-package-managers) on Debian, Fedora, RHEL, and Alpine.

93 

94설치가 완료된 후 작업하려는 프로젝트에서 터미널을 열고 Claude Code를 시작하세요:

95 

96```bash theme={null}

97claude

98```

99 

100설치 중에 문제가 발생하면 [설치 및 로그인 문제 해결](/ko/troubleshoot-install)을 참조하세요.

101 

102### Windows에서 설정

103 

104Claude Code를 Windows에서 기본적으로 실행하거나 WSL 내에서 실행할 수 있습니다. 프로젝트가 위치한 곳과 필요한 기능을 기반으로 선택하세요:

105 

106| 옵션 | 필요 사항 | [샌드박싱](/ko/sandboxing) | 사용 시기 |

107| ------------ | -------------------------------------------------------------------------- | ---------------------- | -------------------------- |

108| 네이티브 Windows | [Git for Windows](https://git-scm.com/downloads/win) 권장; 없으면 PowerShell 사용 | 지원되지 않음 | Windows 기본 프로젝트 및 도구 |

109| WSL 2 | WSL 2 활성화 | 지원됨 | Linux 도구 체인 또는 샌드박싱된 명령 실행 |

110| WSL 1 | WSL 1 활성화 | 지원되지 않음 | WSL 2를 사용할 수 없는 경우 |

111 

112**옵션 1: Git Bash를 사용한 네이티브 Windows**

113 

114[Git for Windows](https://git-scm.com/downloads/win)를 설치한 후 PowerShell 또는 CMD에서 설치 명령을 실행하세요. 관리자로 실행할 필요가 없습니다.

115 

116PowerShell 또는 CMD에서 설치하는지 여부는 실행하는 설치 명령에만 영향을 줍니다. 프롬프트는 PowerShell에서 `PS C:\Users\YourName>`을 표시하고 CMD에서는 `PS` 없이 `C:\Users\YourName>`을 표시합니다. 터미널이 처음이라면 [터미널 가이드](/ko/terminal-guide#windows)에서 각 단계를 안내합니다.

117 

118설치 후 PowerShell, CMD 또는 Git Bash에서 `claude`를 실행하세요. Git Bash가 설치되어 있으면 Claude Code는 실행 위치와 관계없이 명령을 실행하기 위해 내부적으로 Git Bash를 사용합니다. Claude Code가 Git Bash 설치를 찾을 수 없으면 [settings.json 파일](/ko/settings)에서 경로를 설정하세요:

119 

120```json theme={null}

121{

122 "env": {

123 "CLAUDE_CODE_GIT_BASH_PATH": "C:\\Program Files\\Git\\bin\\bash.exe"

124 }

125}

126```

127 

128Claude Code는 또한 Windows에서 PowerShell을 기본적으로 실행할 수 있습니다. Git Bash가 설치되어 있으면 PowerShell 도구는 추가 옵션으로 점진적으로 출시되고 있습니다. 옵트인하려면 `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`을 설정하거나 옵트아웃하려면 `0`을 설정하세요. 설정 및 제한사항은 [PowerShell 도구](/ko/tools-reference#powershell-tool)를 참조하세요.

129 

130**옵션 2: WSL**

131 

132WSL 배포판을 열고 위의 [설치 지침](#install-claude-code)에서 Linux 설치 프로그램을 실행하세요. PowerShell 또는 CMD가 아닌 WSL 터미널 내에서 `claude`를 설치하고 실행합니다.

133 

134### Alpine Linux 및 musl 기반 배포판

135 

136Alpine 및 기타 musl/uClibc 기반 배포판의 네이티브 설치 프로그램에는 `libgcc`, `libstdc++` 및 `ripgrep`이 필요합니다. 배포판의 패키지 관리자를 사용하여 이들을 설치한 후 `USE_BUILTIN_RIPGREP=0`을 설정하세요.

137 

138이 예제는 Alpine에 필요한 패키지를 설치합니다:

139 

140```bash theme={null}

141apk add libgcc libstdc++ ripgrep

142```

143 

144그런 다음 [`settings.json`](/ko/settings#available-settings) 파일에서 `USE_BUILTIN_RIPGREP`을 `0`으로 설정하세요:

145 

146```json theme={null}

147{

148 "env": {

149 "USE_BUILTIN_RIPGREP": "0"

150 }

151}

152```

153 

154## 설치 확인

155 

156설치 후 Claude Code가 작동하는지 확인하세요:

157 

158```bash theme={null}

159claude --version

160```

161 

162이 명령이 `command not found` 또는 다른 오류로 실패하면 [설치 및 로그인 문제 해결](/ko/troubleshoot-install)을 참조하세요.

163 

164설치 및 구성을 더 자세히 확인하려면 [`claude doctor`](/ko/troubleshooting#get-more-help)를 실행하세요:

165 

166```bash theme={null}

167claude doctor

168```

169 

170## 인증

171 

172Claude Code는 Pro, Max, Team, Enterprise 또는 Console 계정이 필요합니다. 무료 Claude.ai 플랜에는 Claude Code 액세스가 포함되지 않습니다. [Amazon Bedrock](/ko/amazon-bedrock), [Google Vertex AI](/ko/google-vertex-ai) 또는 [Microsoft Foundry](/ko/microsoft-foundry)와 같은 타사 API 제공자와 함께 Claude Code를 사용할 수도 있습니다.

173 

174설치 후 `claude`를 실행하고 브라우저 프롬프트를 따라 로그인하세요. 모든 계정 유형 및 팀 설정 옵션은 [인증](/ko/authentication)을 참조하세요.

175 

176## Claude Code 업데이트

177 

178네이티브 설치는 백그라운드에서 자동으로 업데이트됩니다. [릴리스 채널을 구성](#configure-release-channel)하여 즉시 업데이트를 받을지 또는 지연된 안정적인 일정으로 받을지 제어하거나, [자동 업데이트를 비활성화](#disable-auto-updates)할 수 있습니다. Homebrew, WinGet 및 [Linux 패키지 관리자](#install-with-linux-package-managers) 설치는 수동 업데이트가 필요합니다.

179 

180### 자동 업데이트

181 

182Claude Code는 시작 시 및 실행 중에 주기적으로 업데이트를 확인합니다. 업데이트는 백그라운드에서 다운로드 및 설치되며 다음 번에 Claude Code를 시작할 때 적용됩니다.

183 

184<Note>

185 Homebrew, WinGet, apt, dnf 및 apk 설치는 자동으로 업데이트되지 않습니다. Homebrew의 경우 `brew upgrade claude-code` 또는 `brew upgrade claude-code@latest`를 실행하세요(설치한 cask에 따라 다름). WinGet의 경우 `winget upgrade Anthropic.ClaudeCode`를 실행하세요. Linux 패키지 관리자의 경우 [Linux 패키지 관리자로 설치](#install-with-linux-package-managers)의 업그레이드 명령을 참조하세요.

186 

187 **알려진 문제:** Claude Code는 새 버전이 이러한 패키지 관리자에서 사용 가능하기 전에 업데이트를 알릴 수 있습니다. 업그레이드가 실패하면 잠시 기다렸다가 나중에 다시 시도하세요.

188 

189 Homebrew는 업그레이드 후 디스크에 이전 버전을 유지합니다. 디스크 공간을 확보하려면 주기적으로 `brew cleanup`을 실행하세요.

190</Note>

191 

192### 릴리스 채널 구성

193 

194`autoUpdatesChannel` 설정으로 Claude Code가 자동 업데이트 및 `claude update`에 대해 따르는 릴리스 채널을 제어하세요:

195 

196* `"latest"`, 기본값: 새 기능이 릴리스되는 즉시 받기

197* `"stable"`: 일반적으로 약 1주일 된 버전을 사용하여 주요 회귀가 있는 릴리스 건너뛰기

198 

199이를 `/config` → **자동 업데이트 채널**을 통해 구성하거나 [settings.json 파일](/ko/settings)에 추가하세요:

200 

201```json theme={null}

202{

203 "autoUpdatesChannel": "stable"

204}

205```

206 

207엔터프라이즈 배포의 경우 [관리 설정](/ko/permissions#managed-settings)을 사용하여 조직 전체에서 일관된 릴리스 채널을 적용할 수 있습니다.

208 

209Homebrew 설치는 이 설정 대신 cask 이름으로 채널을 선택합니다: `claude-code`는 안정적인 버전을 추적하고 `claude-code@latest`는 최신 버전을 추적합니다.

210 

211### 최소 버전 고정

212 

213`minimumVersion` 설정은 하한을 설정합니다. 백그라운드 자동 업데이트 및 `claude update`는 이 값 이하의 버전 설치를 거부하므로 `"stable"` 채널로 이동해도 이미 최신 `"latest"` 빌드에 있는 경우 다운그레이드되지 않습니다.

214 

215`/config`를 통해 `"latest"`에서 `"stable"`로 전환하면 현재 버전을 유지하거나 다운그레이드를 허용하라는 메시지가 표시됩니다. 현재 버전을 유지하도록 선택하면 `minimumVersion`이 해당 버전으로 설정됩니다. `"latest"`로 다시 전환하면 이를 지웁니다.

216 

217[settings.json 파일](/ko/settings)에 추가하여 하한을 명시적으로 고정하세요:

218 

219```json theme={null}

220{

221 "autoUpdatesChannel": "stable",

222 "minimumVersion": "2.1.100"

223}

224```

225 

226[관리 설정](/ko/permissions#managed-settings)에서 이는 사용자 및 프로젝트 설정이 재정의할 수 없는 조직 전체 최소값을 적용합니다.

227 

228### 자동 업데이트 비활성화

229 

230[`settings.json`](/ko/settings#available-settings) 파일의 `env` 키에서 `DISABLE_AUTOUPDATER`를 `"1"`로 설정하세요:

231 

232```json theme={null}

233{

234 "env": {

235 "DISABLE_AUTOUPDATER": "1"

236 }

237}

238```

239 

240`DISABLE_AUTOUPDATER`는 백그라운드 확인만 중지합니다. `claude update` 및 `claude install`은 계속 작동합니다. 수동 업데이트를 포함한 모든 업데이트 경로를 차단하려면 [`DISABLE_UPDATES`](/ko/env-vars)를 대신 설정하세요. Claude Code를 자신의 채널을 통해 배포하고 사용자가 제공하는 버전에 머물러야 할 때 이를 사용하세요.

241 

242### 수동으로 업데이트

243 

244다음 백그라운드 확인을 기다리지 않고 즉시 업데이트를 적용하려면 다음을 실행하세요:

245 

246```bash theme={null}

247claude update

248```

249 

250## 고급 설치 옵션

251 

252이러한 옵션은 버전 고정, Linux 패키지 관리자, npm 및 바이너리 무결성 확인을 위한 것입니다.

253 

254### 특정 버전 설치

255 

256네이티브 설치 프로그램은 특정 버전 번호 또는 릴리스 채널(`latest` 또는 `stable`)을 허용합니다. 설치 시 선택한 채널이 자동 업데이트의 기본값이 됩니다. 자세한 내용은 [릴리스 채널 구성](#configure-release-channel)을 참조하세요.

257 

258최신 버전을 설치하려면(기본값):

259 

260<Tabs>

261 <Tab title="macOS, Linux, WSL">

262 ```bash theme={null}

263 curl -fsSL https://claude.ai/install.sh | bash

264 ```

265 </Tab>

266 

267 <Tab title="Windows PowerShell">

268 ```powershell theme={null}

269 irm https://claude.ai/install.ps1 | iex

270 ```

271 </Tab>

272 

273 <Tab title="Windows CMD">

274 ```batch theme={null}

275 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

276 ```

277 </Tab>

278</Tabs>

279 

280안정적인 버전을 설치하려면:

281 

282<Tabs>

283 <Tab title="macOS, Linux, WSL">

284 ```bash theme={null}

285 curl -fsSL https://claude.ai/install.sh | bash -s stable

286 ```

287 </Tab>

288 

289 <Tab title="Windows PowerShell">

290 ```powershell theme={null}

291 & ([scriptblock]::Create((irm https://claude.ai/install.ps1))) stable

292 ```

293 </Tab>

294 

295 <Tab title="Windows CMD">

296 ```batch theme={null}

297 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd stable && del install.cmd

298 ```

299 </Tab>

300</Tabs>

301 

302특정 버전 번호를 설치하려면:

303 

304<Tabs>

305 <Tab title="macOS, Linux, WSL">

306 ```bash theme={null}

307 curl -fsSL https://claude.ai/install.sh | bash -s 2.1.89

308 ```

309 </Tab>

310 

311 <Tab title="Windows PowerShell">

312 ```powershell theme={null}

313 & ([scriptblock]::Create((irm https://claude.ai/install.ps1))) 2.1.89

314 ```

315 </Tab>

316 

317 <Tab title="Windows CMD">

318 ```batch theme={null}

319 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd 2.1.89 && del install.cmd

320 ```

321 </Tab>

322</Tabs>

323 

324### Linux 패키지 관리자로 설치

325 

326Claude Code는 서명된 apt, dnf 및 apk 저장소를 게시합니다. 롤링 채널의 경우 `stable`을 `latest`로 바꾸세요. 패키지 관리자 설치는 Claude Code를 통해 자동 업데이트되지 않습니다. 업데이트는 일반적인 시스템 업그레이드 워크플로우를 통해 제공됩니다.

327 

328모든 저장소는 [Claude Code 릴리스 서명 키](#binary-integrity-and-code-signing)로 서명됩니다. 키를 신뢰하기 전에 각 탭에 설명된 대로 확인하세요.

329 

330<Tabs>

331 <Tab title="apt">

332 Debian 및 Ubuntu용입니다. 롤링 채널을 사용하려면 `deb` 줄의 두 `stable` 항목을 변경하세요: URL 경로 및 제품군 이름입니다.

333 

334 ```bash theme={null}

335 sudo install -d -m 0755 /etc/apt/keyrings

336 sudo curl -fsSL https://downloads.claude.ai/keys/claude-code.asc \

337 -o /etc/apt/keyrings/claude-code.asc

338 echo "deb [signed-by=/etc/apt/keyrings/claude-code.asc] https://downloads.claude.ai/claude-code/apt/stable stable main" \

339 | sudo tee /etc/apt/sources.list.d/claude-code.list

340 sudo apt update

341 sudo apt install claude-code

342 ```

343 

344 신뢰하기 전에 GPG 키 지문을 확인하세요: `gpg --show-keys /etc/apt/keyrings/claude-code.asc`는 `31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE`를 보고해야 합니다.

345 

346 나중에 업그레이드하려면 `sudo apt update && sudo apt upgrade claude-code`를 실행하세요.

347 </Tab>

348 

349 <Tab title="dnf">

350 Fedora 및 RHEL용입니다:

351 

352 ```bash theme={null}

353 sudo tee /etc/yum.repos.d/claude-code.repo <<'EOF'

354 [claude-code]

355 name=Claude Code

356 baseurl=https://downloads.claude.ai/claude-code/rpm/stable

357 enabled=1

358 gpgcheck=1

359 gpgkey=https://downloads.claude.ai/keys/claude-code.asc

360 EOF

361 sudo dnf install claude-code

362 ```

363 

364 dnf는 첫 설치 시 키를 다운로드하고 지문을 확인하도록 요청합니다. `31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE`와 일치하는지 확인한 후 수락하세요.

365 

366 나중에 업그레이드하려면 `sudo dnf upgrade claude-code`를 실행하세요.

367 </Tab>

368 

369 <Tab title="apk">

370 Alpine Linux용입니다:

371 

372 ```sh theme={null}

373 wget -O /etc/apk/keys/claude-code.rsa.pub \

374 https://downloads.claude.ai/keys/claude-code.rsa.pub

375 echo "https://downloads.claude.ai/claude-code/apk/stable" >> /etc/apk/repositories

376 apk add claude-code

377 ```

378 

379 `sha256sum /etc/apk/keys/claude-code.rsa.pub`로 다운로드한 키를 확인하세요. 이는 `395759c1f7449ef4cdef305a42e820f3c766d6090d142634ebdb049f113168b6`을 보고해야 합니다.

380 

381 나중에 업그레이드하려면 `apk update && apk upgrade claude-code`를 실행하세요.

382 </Tab>

383</Tabs>

384 

385### npm으로 설치

386 

387Claude Code를 전역 npm 패키지로 설치할 수도 있습니다. 패키지에는 [Node.js 18 이상](https://nodejs.org/en/download)이 필요합니다.

388 

389```bash theme={null}

390npm install -g @anthropic-ai/claude-code

391```

392 

393npm 패키지는 독립 실행형 설치 프로그램과 동일한 네이티브 바이너리를 설치합니다. npm은 `@anthropic-ai/claude-code-darwin-arm64`와 같은 플랫폼별 선택적 종속성을 통해 바이너리를 가져오고 설치 후 단계가 이를 제자리에 연결합니다. 설치된 `claude` 바이너리는 자체적으로 Node를 호출하지 않습니다.

394 

395지원되는 npm 설치 플랫폼은 `darwin-arm64`, `darwin-x64`, `linux-x64`, `linux-arm64`, `linux-x64-musl`, `linux-arm64-musl`, `win32-x64` 및 `win32-arm64`입니다. 패키지 관리자는 선택적 종속성을 허용해야 합니다. 설치 후 바이너리가 누락된 경우 [문제 해결](/ko/troubleshoot-install#native-binary-not-found-after-npm-install)을 참조하세요.

396 

397<Warning>

398 `sudo npm install -g`를 사용하지 마세요. 이는 권한 문제 및 보안 위험으로 이어질 수 있습니다. 권한 오류가 발생하면 [설치 중 권한 오류 문제 해결](/ko/troubleshoot-install#permission-errors-during-installation)을 참조하세요.

399</Warning>

400 

401### 바이너리 무결성 및 코드 서명

402 

403각 릴리스는 모든 플랫폼 바이너리에 대한 SHA256 체크섬을 포함하는 `manifest.json`을 게시합니다. 매니페스트는 Anthropic GPG 키로 서명되므로 매니페스트의 서명을 확인하면 이것이 나열하는 모든 바이너리를 전이적으로 확인합니다.

404 

405#### 매니페스트 서명 확인

406 

407다음 단계 1-3에는 `gpg` 및 `curl`이 있는 POSIX 셸이 필요합니다. Windows에서는 Git Bash 또는 WSL에서 실행하세요. 4단계에는 PowerShell 옵션이 포함됩니다.

408 

409<Steps>

410 <Step title="공개 키 다운로드 및 가져오기">

411 릴리스 서명 키는 고정 URL에 게시됩니다.

412 

413 ```bash theme={null}

414 curl -fsSL https://downloads.claude.ai/keys/claude-code.asc | gpg --import

415 ```

416 

417 가져온 키의 지문을 표시합니다.

418 

419 ```bash theme={null}

420 gpg --fingerprint security@anthropic.com

421 ```

422 

423 출력에 이 지문이 포함되어 있는지 확인하세요:

424 

425 ```text theme={null}

426 31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE

427 ```

428 </Step>

429 

430 <Step title="매니페스트 및 서명 다운로드">

431 `VERSION`을 확인하려는 릴리스로 설정하세요.

432 

433 ```bash theme={null}

434 REPO=https://downloads.claude.ai/claude-code-releases

435 VERSION=2.1.89

436 curl -fsSLO "$REPO/$VERSION/manifest.json"

437 curl -fsSLO "$REPO/$VERSION/manifest.json.sig"

438 ```

439 </Step>

440 

441 <Step title="서명 확인">

442 매니페스트에 대해 분리된 서명을 확인합니다.

443 

444 ```bash theme={null}

445 gpg --verify manifest.json.sig manifest.json

446 ```

447 

448 유효한 결과는 `Good signature from "Anthropic Claude Code Release Signing <security@anthropic.com>"`을 보고합니다.

449 

450 `gpg`는 또한 새로 가져온 키에 대해 `WARNING: This key is not certified with a trusted signature!`을 인쇄합니다. 이는 예상된 것입니다. `Good signature` 줄은 암호화 확인이 통과했음을 확인합니다. 1단계의 지문 비교는 키 자체가 진정함을 확인합니다.

451 </Step>

452 

453 <Step title="바이너리를 매니페스트와 비교">

454 다운로드한 바이너리의 SHA256 체크섬을 `manifest.json`의 `platforms.<platform>.checksum` 아래에 나열된 값과 비교합니다.

455 

456 <Tabs>

457 <Tab title="Linux">

458 ```bash theme={null}

459 sha256sum claude

460 ```

461 </Tab>

462 

463 <Tab title="macOS">

464 ```bash theme={null}

465 shasum -a 256 claude

466 ```

467 </Tab>

468 

469 <Tab title="Windows PowerShell">

470 ```powershell theme={null}

471 (Get-FileHash claude.exe -Algorithm SHA256).Hash.ToLower()

472 ```

473 </Tab>

474 </Tabs>

475 </Step>

476</Steps>

477 

478<Note>

479 매니페스트 서명은 `2.1.89` 이상의 릴리스에 사용 가능합니다. 이전 릴리스는 분리된 서명 없이 `manifest.json`에 체크섬을 게시합니다.

480</Note>

481 

482#### 플랫폼 코드 서명

483 

484서명된 매니페스트 외에도 개별 바이너리는 지원되는 플랫폼에서 플랫폼 기본 코드 서명을 수행합니다.

485 

486* **macOS**: "Anthropic PBC"에서 서명하고 Apple에서 공증합니다. `codesign --verify --verbose ./claude`로 확인하세요.

487* **Windows**: "Anthropic, PBC"에서 서명합니다. `Get-AuthenticodeSignature .\claude.exe`로 확인하세요.

488* **Linux**: 바이너리는 개별적으로 코드 서명되지 않습니다. `claude-code-releases` 버킷에서 직접 다운로드하거나 네이티브 설치 프로그램을 사용하는 경우 위의 매니페스트 서명으로 무결성을 확인하세요. [apt, dnf 또는 apk](#install-with-linux-package-managers)로 설치하는 경우 패키지 관리자가 저장소 서명 키를 사용하여 서명을 자동으로 확인합니다.

489 

490## Claude Code 제거

491 

492Claude Code를 제거하려면 설치 방법에 따른 지침을 따르세요.

493 

494### 네이티브 설치

495 

496Claude Code 바이너리 및 버전 파일을 제거하세요:

497 

498<Tabs>

499 <Tab title="macOS, Linux, WSL">

500 ```bash theme={null}

501 rm -f ~/.local/bin/claude

502 rm -rf ~/.local/share/claude

503 ```

504 </Tab>

505 

506 <Tab title="Windows PowerShell">

507 ```powershell theme={null}

508 Remove-Item -Path "$env:USERPROFILE\.local\bin\claude.exe" -Force

509 Remove-Item -Path "$env:USERPROFILE\.local\share\claude" -Recurse -Force

510 ```

511 </Tab>

512</Tabs>

513 

514### Homebrew 설치

515 

516설치한 Homebrew cask를 제거하세요. 안정적인 cask를 설치한 경우:

517 

518```bash theme={null}

519brew uninstall --cask claude-code

520```

521 

522최신 cask를 설치한 경우:

523 

524```bash theme={null}

525brew uninstall --cask claude-code@latest

526```

527 

528### WinGet 설치

529 

530WinGet 패키지를 제거하세요:

531 

532```powershell theme={null}

533winget uninstall Anthropic.ClaudeCode

534```

535 

536### apt / dnf / apk

537 

538패키지 및 저장소 구성을 제거하세요:

539 

540<Tabs>

541 <Tab title="apt">

542 ```bash theme={null}

543 sudo apt remove claude-code

544 sudo rm /etc/apt/sources.list.d/claude-code.list /etc/apt/keyrings/claude-code.asc

545 ```

546 </Tab>

547 

548 <Tab title="dnf">

549 ```bash theme={null}

550 sudo dnf remove claude-code

551 sudo rm /etc/yum.repos.d/claude-code.repo

552 ```

553 </Tab>

554 

555 <Tab title="apk">

556 ```sh theme={null}

557 apk del claude-code

558 sed -i '\|downloads.claude.ai/claude-code/apk|d' /etc/apk/repositories

559 rm /etc/apk/keys/claude-code.rsa.pub

560 ```

561 </Tab>

562</Tabs>

563 

564### npm

565 

566전역 npm 패키지를 제거하세요:

567 

568```bash theme={null}

569npm uninstall -g @anthropic-ai/claude-code

570```

571 

572### 구성 파일 제거

573 

574<Warning>

575 구성 파일을 제거하면 모든 설정, 허용된 도구, MCP 서버 구성 및 세션 기록이 삭제됩니다.

576</Warning>

577 

578VS Code 확장 프로그램, JetBrains 플러그인 및 Desktop 앱도 `~/.claude/`에 씁니다. 이들 중 하나라도 여전히 설치되어 있으면 다음 실행 시 디렉토리가 다시 생성됩니다. Claude Code를 완전히 제거하려면 이 파일을 삭제하기 전에 [VS Code 확장 프로그램](/ko/vs-code#uninstall-the-extension), JetBrains 플러그인 및 Desktop 앱을 제거하세요.

579 

580Claude Code 설정 및 캐시된 데이터를 제거하려면:

581 

582<Tabs>

583 <Tab title="macOS, Linux, WSL">

584 ```bash theme={null}

585 # 사용자 설정 및 상태 제거

586 rm -rf ~/.claude

587 rm ~/.claude.json

588 

589 # 프로젝트별 설정 제거(프로젝트 디렉토리에서 실행)

590 rm -rf .claude

591 rm -f .mcp.json

592 ```

593 </Tab>

594 

595 <Tab title="Windows PowerShell">

596 ```powershell theme={null}

597 # 사용자 설정 및 상태 제거

598 Remove-Item -Path "$env:USERPROFILE\.claude" -Recurse -Force

599 Remove-Item -Path "$env:USERPROFILE\.claude.json" -Force

600 

601 # 프로젝트별 설정 제거(프로젝트 디렉토리에서 실행)

602 Remove-Item -Path ".claude" -Recurse -Force

603 Remove-Item -Path ".mcp.json" -Force

604 ```

605 </Tab>

606</Tabs>

skills.md +728 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Claude를 skills로 확장하기

6 

7> Claude Code에서 skills를 생성, 관리, 공유하여 Claude의 기능을 확장합니다. 사용자 정의 명령어와 번들 skills를 포함합니다.

8 

9Skills는 Claude가 할 수 있는 작업을 확장합니다. `SKILL.md` 파일을 지침과 함께 생성하면 Claude가 이를 자신의 도구 모음에 추가합니다. Claude는 관련이 있을 때 skills를 사용하거나 `/skill-name`으로 직접 호출할 수 있습니다.

10 

11같은 플레이북, 체크리스트 또는 다단계 절차를 계속 채팅에 붙여넣거나, CLAUDE.md의 섹션이 사실이 아닌 절차로 성장했을 때 skill을 생성합니다. CLAUDE.md 콘텐츠와 달리, skill의 본문은 사용할 때만 로드되므로 긴 참조 자료는 필요할 때까지 거의 비용이 들지 않습니다.

12 

13<Note>

14 `/help` 및 `/compact`와 같은 기본 제공 명령어와 `/debug` 및 `/simplify`와 같은 번들 skills는 [명령어 참조](/ko/commands)를 참조하세요.

15 

16 **사용자 정의 명령어가 skills로 병합되었습니다.** `.claude/commands/deploy.md`의 파일과 `.claude/skills/deploy/SKILL.md`의 skill은 모두 `/deploy`를 생성하고 동일하게 작동합니다. 기존 `.claude/commands/` 파일은 계속 작동합니다. Skills는 선택적 기능을 추가합니다: 지원 파일을 위한 디렉토리, [skill을 누가 호출하는지 제어](#control-who-invokes-a-skill)하기 위한 frontmatter, 그리고 Claude가 관련이 있을 때 자동으로 로드할 수 있는 기능입니다.

17</Note>

18 

19Claude Code skills는 [Agent Skills](https://agentskills.io) 개방형 표준을 따르며, 이는 여러 AI 도구에서 작동합니다. Claude Code는 [호출 제어](#control-who-invokes-a-skill), [subagent 실행](#run-skills-in-a-subagent), [동적 컨텍스트 주입](#inject-dynamic-context)과 같은 추가 기능으로 표준을 확장합니다.

20 

21## 번들 skills

22 

23Claude Code에는 모든 세션에서 사용 가능한 번들 skills 세트가 포함되어 있으며, `/simplify`, `/batch`, `/debug`, `/loop`, `/claude-api`를 포함합니다. 고정 로직을 직접 실행하는 대부분의 기본 제공 명령어와 달리, 번들 skills는 프롬프트 기반입니다: Claude에 상세한 플레이북을 제공하고 도구를 사용하여 작업을 조율하도록 합니다. 다른 skill과 동일한 방식으로 호출합니다: `/` 다음에 skill 이름을 입력합니다.

24 

25번들 skills는 [명령어 참조](/ko/commands)에 나열되어 있으며, 목적 열에 **Skill**로 표시됩니다.

26 

27## 시작하기

28 

29### 첫 번째 skill 생성

30 

31이 예제는 Claude에게 시각적 다이어그램과 유추를 사용하여 코드를 설명하도록 가르치는 skill을 생성합니다. 기본 frontmatter를 사용하므로 Claude는 코드가 어떻게 작동하는지 물어볼 때 자동으로 로드하거나 `/explain-code`로 직접 호출할 수 있습니다.

32 

33<Steps>

34 <Step title="skill 디렉토리 생성">

35 개인 skills 폴더에 skill을 위한 디렉토리를 생성합니다. 개인 skills는 모든 프로젝트에서 사용 가능합니다.

36 

37 ```bash theme={null}

38 mkdir -p ~/.claude/skills/explain-code

39 ```

40 </Step>

41 

42 <Step title="SKILL.md 작성">

43 모든 skill에는 두 부분이 있는 `SKILL.md` 파일이 필요합니다: Claude에게 skill을 언제 사용할지 알려주는 YAML frontmatter (`---` 마커 사이)와 skill이 호출될 때 Claude가 따르는 지침이 있는 markdown 콘텐츠입니다. 디렉토리 이름이 `/slash-command`가 되고, `description`은 Claude가 자동으로 로드할 시기를 결정하는 데 도움이 됩니다.

44 

45 `~/.claude/skills/explain-code/SKILL.md` 생성:

46 

47 ```yaml theme={null}

48 ---

49 description: Explains code with visual diagrams and analogies. Use when explaining how code works, teaching about a codebase, or when the user asks "how does this work?"

50 ---

51 

52 When explaining code, always include:

53 

54 1. **Start with an analogy**: Compare the code to something from everyday life

55 2. **Draw a diagram**: Use ASCII art to show the flow, structure, or relationships

56 3. **Walk through the code**: Explain step-by-step what happens

57 4. **Highlight a gotcha**: What's a common mistake or misconception?

58 

59 Keep explanations conversational. For complex concepts, use multiple analogies.

60 ```

61 </Step>

62 

63 <Step title="skill 테스트">

64 두 가지 방법으로 테스트할 수 있습니다:

65 

66 **Claude가 자동으로 호출하도록 하기** - 설명과 일치하는 항목을 물어봅니다:

67 

68 ```text theme={null}

69 How does this code work?

70 ```

71 

72 **또는 skill 이름으로 직접 호출하기**:

73 

74 ```text theme={null}

75 /explain-code src/auth/login.ts

76 ```

77 

78 어느 쪽이든 Claude는 설명에 유추와 ASCII 다이어그램을 포함해야 합니다.

79 </Step>

80</Steps>

81 

82### Skills가 있는 위치

83 

84skill을 저장하는 위치에 따라 누가 사용할 수 있는지가 결정됩니다:

85 

86| 위치 | 경로 | 적용 대상 |

87| :--------- | :--------------------------------------- | :------------ |

88| Enterprise | [관리 설정](/ko/settings#settings-files) 참조 | 조직의 모든 사용자 |

89| Personal | `~/.claude/skills/<skill-name>/SKILL.md` | 모든 프로젝트 |

90| Project | `.claude/skills/<skill-name>/SKILL.md` | 이 프로젝트만 |

91| Plugin | `<plugin>/skills/<skill-name>/SKILL.md` | 플러그인이 활성화된 위치 |

92 

93Skills가 여러 수준에서 같은 이름을 공유할 때, enterprise가 personal을 재정의하고, personal이 project를 재정의합니다. Plugin skills는 `plugin-name:skill-name` 네임스페이스를 사용하므로 다른 수준과 충돌할 수 없습니다. `.claude/commands/`에 파일이 있으면 동일한 방식으로 작동하지만, skill과 명령어가 같은 이름을 공유하면 skill이 우선합니다.

94 

95#### 라이브 변경 감지

96 

97Claude Code는 skill 디렉토리의 파일 변경을 감시합니다. `~/.claude/skills/`, 프로젝트 `.claude/skills/`, 또는 `--add-dir` 디렉토리 내의 `.claude/skills/` 아래에서 skill을 추가, 편집 또는 제거하면 Claude Code를 다시 시작하지 않고도 현재 세션 내에서 적용됩니다. 세션이 시작되었을 때 존재하지 않았던 최상위 skills 디렉토리를 생성하려면 Claude Code를 다시 시작해야 새 디렉토리를 감시할 수 있습니다.

98 

99#### 중첩된 디렉토리에서 자동 검색

100 

101하위 디렉토리의 파일로 작업할 때, Claude Code는 중첩된 `.claude/skills/` 디렉토리에서 skills를 자동으로 검색합니다. 예를 들어, `packages/frontend/`의 파일을 편집하는 경우, Claude Code는 `packages/frontend/.claude/skills/`에서도 skills를 찾습니다. 이는 패키지가 자신의 skills를 가진 monorepo 설정을 지원합니다.

102 

103각 skill은 `SKILL.md`를 진입점으로 하는 디렉토리입니다:

104 

105```text theme={null}

106my-skill/

107├── SKILL.md # 주요 지침 (필수)

108├── template.md # Claude가 채울 템플릿

109├── examples/

110│ └── sample.md # 예상 형식을 보여주는 예제 출력

111└── scripts/

112 └── validate.sh # Claude가 실행할 수 있는 스크립트

113```

114 

115`SKILL.md`는 주요 지침을 포함하며 필수입니다. 다른 파일은 선택적이며 더 강력한 skills를 구축할 수 있습니다: Claude가 채울 템플릿, 예상 형식을 보여주는 예제 출력, Claude가 실행할 수 있는 스크립트 또는 상세한 참조 문서. `SKILL.md`에서 이러한 파일을 참조하여 Claude가 각 파일의 내용과 로드 시기를 알 수 있도록 합니다. 자세한 내용은 [지원 파일 추가](#add-supporting-files)를 참조하세요.

116 

117<Note>

118 `.claude/commands/`의 파일은 계속 작동하며 동일한 [frontmatter](#frontmatter-reference)를 지원합니다. Skills는 지원 파일과 같은 추가 기능을 지원하므로 권장됩니다.

119</Note>

120 

121#### 추가 디렉토리의 Skills

122 

123`--add-dir` 플래그는 [파일 액세스를 부여](/ko/permissions#additional-directories-grant-file-access-not-configuration)하지만 구성 검색은 하지 않습니다. 그러나 skills는 예외입니다: 추가된 디렉토리 내의 `.claude/skills/`는 자동으로 로드됩니다. [라이브 변경 감지](#live-change-detection)를 참조하여 세션 중에 편집이 어떻게 선택되는지 확인하세요.

124 

125subagents, 명령어 및 출력 스타일과 같은 다른 `.claude/` 구성은 추가 디렉토리에서 로드되지 않습니다. 로드되는 항목과 로드되지 않는 항목의 전체 목록과 프로젝트 간 구성을 공유하는 권장 방법은 [예외 표](/ko/permissions#additional-directories-grant-file-access-not-configuration)를 참조하세요.

126 

127<Note>

128 `--add-dir` 디렉토리의 CLAUDE.md 파일은 기본적으로 로드되지 않습니다. 로드하려면 `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1`을 설정하세요. [추가 디렉토리에서 로드](/ko/memory#load-from-additional-directories)를 참조하세요.

129</Note>

130 

131## Skills 구성

132 

133Skills는 `SKILL.md` 상단의 YAML frontmatter와 그 뒤의 markdown 콘텐츠를 통해 구성됩니다.

134 

135### Skill 콘텐츠 유형

136 

137Skill 파일은 모든 지침을 포함할 수 있지만, 호출 방식을 생각하면 포함할 내용을 안내하는 데 도움이 됩니다:

138 

139**참조 콘텐츠**는 Claude가 현재 작업에 적용하는 지식을 추가합니다. 규칙, 패턴, 스타일 가이드, 도메인 지식. 이 콘텐츠는 인라인으로 실행되므로 Claude가 대화 컨텍스트와 함께 사용할 수 있습니다.

140 

141```yaml theme={null}

142---

143name: api-conventions

144description: API design patterns for this codebase

145---

146 

147When writing API endpoints:

148- Use RESTful naming conventions

149- Return consistent error formats

150- Include request validation

151```

152 

153**작업 콘텐츠**는 배포, 커밋 또는 코드 생성과 같은 특정 작업에 대한 단계별 지침을 제공합니다. 이는 Claude가 자동으로 실행하도록 하기보다는 `/skill-name`으로 직접 호출하려는 작업입니다. `disable-model-invocation: true`를 추가하여 Claude가 자동으로 트리거하는 것을 방지합니다.

154 

155```yaml theme={null}

156---

157name: deploy

158description: Deploy the application to production

159context: fork

160disable-model-invocation: true

161---

162 

163Deploy the application:

1641. Run the test suite

1652. Build the application

1663. Push to the deployment target

167```

168 

169`SKILL.md`는 모든 것을 포함할 수 있지만, skill을 호출하는 방식(사용자, Claude 또는 둘 다)과 실행 위치(인라인 또는 subagent)를 생각하면 포함할 내용을 안내하는 데 도움이 됩니다. 복잡한 skills의 경우, [지원 파일을 추가](#add-supporting-files)하여 주요 skill을 집중적으로 유지할 수도 있습니다.

170 

171### Frontmatter 참조

172 

173markdown 콘텐츠 외에도, `SKILL.md` 파일 상단의 `---` 마커 사이의 YAML frontmatter 필드를 사용하여 skill 동작을 구성할 수 있습니다:

174 

175```yaml theme={null}

176---

177name: my-skill

178description: What this skill does

179disable-model-invocation: true

180allowed-tools: Read Grep

181---

182 

183Your skill instructions here...

184```

185 

186모든 필드는 선택적입니다. Claude가 skill을 언제 사용할지 알 수 있도록 `description`만 권장됩니다.

187 

188| 필드 | 필수 | 설명 |

189| :------------------------- | :-- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

190| `name` | 아니오 | skill의 표시 이름. 생략하면 디렉토리 이름을 사용합니다. 소문자, 숫자 및 하이픈만 사용 가능(최대 64자). |

191| `description` | 권장 | skill이 무엇을 하는지, 언제 사용할지. Claude는 이를 사용하여 skill을 자동으로 적용할 시기를 결정합니다. 생략하면 markdown 콘텐츠의 첫 번째 단락을 사용합니다. 주요 사용 사례를 앞에 배치합니다: 결합된 `description` 및 `when_to_use` 텍스트는 컨텍스트 사용을 줄이기 위해 skill 목록에서 1,536자로 잘립니다. |

192| `when_to_use` | 아니오 | Claude가 skill을 호출해야 할 때에 대한 추가 컨텍스트(예: 트리거 구문 또는 예제 요청). skill 목록에서 `description`에 추가되며 1,536자 제한에 포함됩니다. |

193| `argument-hint` | 아니오 | 예상 인수를 나타내기 위해 자동 완성 중에 표시되는 힌트. 예: `[issue-number]` 또는 `[filename] [format]`. |

194| `arguments` | 아니오 | skill 콘텐츠에서 [`$name` 치환](#available-string-substitutions)을 위한 명명된 위치 인수. 공백으로 구분된 문자열 또는 YAML 목록을 허용합니다. 이름은 순서대로 인수 위치에 매핑됩니다. |

195| `disable-model-invocation` | 아니오 | Claude가 이 skill을 자동으로 로드하는 것을 방지하려면 `true`로 설정합니다. `/name`으로 수동으로 트리거하려는 워크플로우에 사용합니다. 또한 skill이 [subagents에 미리 로드되는 것](/ko/sub-agents#preload-skills-into-subagents)을 방지합니다. 기본값: `false`. |

196| `user-invocable` | 아니오 | `/` 메뉴에서 숨기려면 `false`로 설정합니다. 사용자가 직접 호출하지 않아야 하는 배경 지식에 사용합니다. 기본값: `true`. |

197| `allowed-tools` | 아니오 | 이 skill이 활성화되었을 때 Claude가 권한을 요청하지 않고 사용할 수 있는 도구. 공백으로 구분된 문자열 또는 YAML 목록을 허용합니다. |

198| `model` | 아니오 | 이 skill이 활성화되었을 때 사용할 모델. 재정의는 현재 턴의 나머지 부분에 적용되며 설정에 저장되지 않습니다. 다음 프롬프트에서 세션 모델이 재개됩니다. [`/model`](/ko/model-config)과 동일한 값을 허용하거나 활성 모델을 유지하려면 `inherit`을 허용합니다. |

199| `effort` | 아니오 | [노력 수준](/ko/model-config#adjust-effort-level) - 이 skill이 활성화되었을 때. 세션 노력 수준을 재정의합니다. 기본값: 세션에서 상속. 옵션: `low`, `medium`, `high`, `xhigh`, `max`; 사용 가능한 수준은 모델에 따라 다릅니다. |

200| `context` | 아니오 | forked subagent 컨텍스트에서 실행하려면 `fork`로 설정합니다. |

201| `agent` | 아니오 | `context: fork`가 설정되었을 때 사용할 subagent 유형. |

202| `hooks` | 아니오 | 이 skill의 라이프사이클에 범위가 지정된 hooks. 구성 형식은 [Skills 및 agents의 Hooks](/ko/hooks#hooks-in-skills-and-agents)를 참조하세요. |

203| `paths` | 아니오 | 이 skill이 활성화되는 시기를 제한하는 Glob 패턴. 쉼표로 구분된 문자열 또는 YAML 목록을 허용합니다. 설정하면 Claude는 패턴과 일치하는 파일로 작업할 때만 자동으로 skill을 로드합니다. [경로별 규칙](/ko/memory#path-specific-rules)과 동일한 형식을 사용합니다. |

204| `shell` | 아니오 | 이 skill의 `` !`command` `` 및 ` ```! ` 블록에 사용할 shell. `bash`(기본값) 또는 `powershell`을 허용합니다. `powershell`을 설정하면 Windows에서 PowerShell을 통해 인라인 shell 명령어를 실행합니다. `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`이 필요합니다. |

205 

206#### 사용 가능한 문자열 치환

207 

208Skills는 skill 콘텐츠의 동적 값에 대한 문자열 치환을 지원합니다:

209 

210| 변수 | 설명 |

211| :--------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

212| `$ARGUMENTS` | skill을 호출할 때 전달된 모든 인수. `$ARGUMENTS`가 콘텐츠에 없으면 인수가 `ARGUMENTS: <value>`로 추가됩니다. |

213| `$ARGUMENTS[N]` | 0 기반 인덱스로 특정 인수에 액세스합니다(예: `$ARGUMENTS[0]`은 첫 번째 인수). |

214| `$N` | `$ARGUMENTS[N]`의 약자(예: `$0`은 첫 번째 인수, `$1`은 두 번째 인수). |

215| `$name` | [`arguments`](#frontmatter-reference) frontmatter 목록에서 선언된 명명된 인수. 이름은 순서대로 위치에 매핑되므로, `arguments: [issue, branch]`를 사용하면 플레이스홀더 `$issue`는 첫 번째 인수로 확장되고 `$branch`는 두 번째 인수로 확장됩니다. |

216| `${CLAUDE_SESSION_ID}` | 현재 세션 ID. 로깅, 세션별 파일 생성 또는 skill 출력을 세션과 연관시키는 데 유용합니다. |

217| `${CLAUDE_EFFORT}` | 현재 노력 수준: `low`, `medium`, `high`, `xhigh` 또는 `max`. 이를 사용하여 활성 노력 설정에 맞게 skill 지침을 조정합니다. |

218| `${CLAUDE_SKILL_DIR}` | skill의 `SKILL.md` 파일을 포함하는 디렉토리. plugin skills의 경우, 이는 plugin 루트가 아닌 plugin 내의 skill 하위 디렉토리입니다. bash 주입 명령어에서 현재 작업 디렉토리와 관계없이 skill과 함께 번들된 스크립트 또는 파일을 참조하는 데 사용합니다. |

219 

220인덱싱된 인수는 shell 스타일 인용을 사용하므로 다중 단어 값을 따옴표로 감싸서 단일 인수로 전달합니다. 예를 들어, `/my-skill "hello world" second`는 `$0`을 `hello world`로, `$1`을 `second`로 확장합니다. `$ARGUMENTS` 플레이스홀더는 항상 입력한 전체 인수 문자열로 확장됩니다.

221 

222**치환을 사용한 예제:**

223 

224```yaml theme={null}

225---

226name: session-logger

227description: Log activity for this session

228---

229 

230Log the following to logs/${CLAUDE_SESSION_ID}.log:

231 

232$ARGUMENTS

233```

234 

235### 지원 파일 추가

236 

237Skills는 디렉토리에 여러 파일을 포함할 수 있습니다. 이는 `SKILL.md`를 필수 항목에 집중하게 하면서 Claude가 필요할 때만 상세한 참조 자료에 액세스할 수 있게 합니다. 큰 참조 문서, API 사양 또는 예제 컬렉션은 skill이 실행될 때마다 컨텍스트에 로드될 필요가 없습니다.

238 

239```text theme={null}

240my-skill/

241├── SKILL.md (required - overview and navigation)

242├── reference.md (detailed API docs - loaded when needed)

243├── examples.md (usage examples - loaded when needed)

244└── scripts/

245 └── helper.py (utility script - executed, not loaded)

246```

247 

248`SKILL.md`에서 지원 파일을 참조하여 Claude가 각 파일의 내용과 로드 시기를 알 수 있도록 합니다:

249 

250```markdown theme={null}

251## Additional resources

252 

253- For complete API details, see [reference.md](reference.md)

254- For usage examples, see [examples.md](examples.md)

255```

256 

257<Tip>`SKILL.md`를 500줄 이하로 유지합니다. 상세한 참조 자료를 별도 파일로 이동합니다.</Tip>

258 

259### Skill을 호출하는 사람 제어

260 

261기본적으로 사용자와 Claude 모두 모든 skill을 호출할 수 있습니다. `/skill-name`을 입력하여 직접 호출할 수 있고, Claude는 대화와 관련이 있을 때 자동으로 로드할 수 있습니다. 두 frontmatter 필드를 사용하여 이를 제한할 수 있습니다:

262 

263* **`disable-model-invocation: true`**: 사용자만 skill을 호출할 수 있습니다. 부작용이 있거나 타이밍을 제어하려는 워크플로우(예: `/commit`, `/deploy` 또는 `/send-slack-message`)에 사용합니다. Claude가 코드가 준비된 것처럼 보인다고 해서 배포하기로 결정하지 않기를 원합니다.

264 

265* **`user-invocable: false`**: Claude만 skill을 호출할 수 있습니다. 명령어로 실행할 수 없는 배경 지식에 사용합니다. `legacy-system-context` skill은 오래된 시스템이 어떻게 작동하는지 설명합니다. Claude는 관련이 있을 때 이를 알아야 하지만, `/legacy-system-context`는 사용자가 취할 의미 있는 작업이 아닙니다.

266 

267이 예제는 사용자만 트리거할 수 있는 배포 skill을 생성합니다. `disable-model-invocation: true` 필드는 Claude가 자동으로 실행하는 것을 방지합니다:

268 

269```yaml theme={null}

270---

271name: deploy

272description: Deploy the application to production

273disable-model-invocation: true

274---

275 

276Deploy $ARGUMENTS to production:

277 

2781. Run the test suite

2792. Build the application

2803. Push to the deployment target

2814. Verify the deployment succeeded

282```

283 

284두 필드가 호출 및 컨텍스트 로딩에 미치는 영향은 다음과 같습니다:

285 

286| Frontmatter | 사용자가 호출 가능 | Claude가 호출 가능 | 컨텍스트에 로드되는 시기 |

287| :------------------------------- | :--------- | :------------ | :------------------------------------- |

288| (기본값) | 예 | 예 | 설명은 항상 컨텍스트에 있고, 호출될 때 전체 skill이 로드됨 |

289| `disable-model-invocation: true` | 예 | 아니오 | 설명은 컨텍스트에 없고, 사용자가 호출할 때 전체 skill이 로드됨 |

290| `user-invocable: false` | 아니오 | 예 | 설명은 항상 컨텍스트에 있고, 호출될 때 전체 skill이 로드됨 |

291 

292<Note>

293 일반 세션에서 skill 설명은 Claude가 사용 가능한 항목을 알 수 있도록 컨텍스트에 로드되지만, 전체 skill 콘텐츠는 호출될 때만 로드됩니다. [미리 로드된 skills가 있는 Subagents](/ko/sub-agents#preload-skills-into-subagents)는 다르게 작동합니다: 전체 skill 콘텐츠는 시작 시 주입됩니다.

294</Note>

295 

296### Skill 콘텐츠 라이프사이클

297 

298사용자 또는 Claude가 skill을 호출하면, 렌더링된 `SKILL.md` 콘텐츠는 대화에 단일 메시지로 들어가고 세션의 나머지 부분 동안 그대로 유지됩니다. Claude Code는 나중의 턴에서 skill 파일을 다시 읽지 않으므로, 작업 전체에 적용되어야 하는 지침을 일회성 단계가 아닌 상시 지침으로 작성합니다.

299 

300[자동 압축](/ko/how-claude-code-works#when-context-fills-up)은 토큰 예산 내에서 호출된 skills를 전달합니다. 대화가 요약되어 컨텍스트를 확보하면, Claude Code는 요약 후 각 skill의 가장 최근 호출을 다시 첨부하여 처음 5,000토큰을 유지합니다. 다시 첨부된 skills는 25,000토큰의 결합 예산을 공유합니다. Claude Code는 가장 최근에 호출된 skill부터 시작하여 이 예산을 채우므로, 한 세션에서 많은 skills를 호출한 경우 압축 후 이전 skills가 완전히 삭제될 수 있습니다.

301 

302skill이 첫 번째 응답 후 동작에 영향을 미치지 않는 것처럼 보이면, 콘텐츠는 일반적으로 여전히 존재하며 모델이 다른 도구나 접근 방식을 선택하고 있습니다. skill의 `description` 및 지침을 강화하여 모델이 계속 선호하도록 하거나, [hooks](/ko/hooks)를 사용하여 동작을 결정론적으로 적용합니다. skill이 크거나 그 후에 다른 여러 skills를 호출한 경우, 압축 후 전체 콘텐츠를 복원하려면 다시 호출합니다.

303 

304### Skill에 대한 도구 사전 승인

305 

306`allowed-tools` 필드는 skill이 활성화되었을 때 나열된 도구에 대한 권한을 부여하므로 Claude는 승인을 요청하지 않고 사용할 수 있습니다. 사용 가능한 도구를 제한하지 않습니다: 모든 도구는 호출 가능하게 유지되며, [권한 설정](/ko/permissions)은 나열되지 않은 도구에 대한 도구를 계속 관리합니다.

307 

308이 skill은 skill을 호출할 때마다 Claude가 승인을 요청하지 않고 git 명령어를 실행할 수 있게 합니다:

309 

310```yaml theme={null}

311---

312name: commit

313description: Stage and commit the current changes

314disable-model-invocation: true

315allowed-tools: Bash(git add *) Bash(git commit *) Bash(git status *)

316---

317```

318 

319skill이 특정 도구를 사용하지 못하도록 차단하려면, [권한 설정](/ko/permissions)에 거부 규칙을 추가합니다.

320 

321### Skills에 인수 전달

322 

323사용자와 Claude 모두 skill을 호출할 때 인수를 전달할 수 있습니다. 인수는 `$ARGUMENTS` 플레이스홀더를 통해 사용 가능합니다.

324 

325이 skill은 GitHub 이슈를 번호로 수정합니다. `$ARGUMENTS` 플레이스홀더는 skill 이름 뒤에 오는 모든 것으로 대체됩니다:

326 

327```yaml theme={null}

328---

329name: fix-issue

330description: Fix a GitHub issue

331disable-model-invocation: true

332---

333 

334Fix GitHub issue $ARGUMENTS following our coding standards.

335 

3361. Read the issue description

3372. Understand the requirements

3383. Implement the fix

3394. Write tests

3405. Create a commit

341```

342 

343`/fix-issue 123`을 실행하면 Claude는 "Fix GitHub issue 123 following our coding standards..."를 받습니다.

344 

345인수를 사용하여 skill을 호출하지만 skill에 `$ARGUMENTS`가 포함되지 않으면, Claude Code는 `ARGUMENTS: <your input>`을 skill 콘텐츠의 끝에 추가하므로 Claude는 여전히 입력한 내용을 봅니다.

346 

347위치별로 개별 인수에 액세스하려면 `$ARGUMENTS[N]` 또는 더 짧은 `$N`을 사용합니다:

348 

349```yaml theme={null}

350---

351name: migrate-component

352description: Migrate a component from one framework to another

353---

354 

355Migrate the $ARGUMENTS[0] component from $ARGUMENTS[1] to $ARGUMENTS[2].

356Preserve all existing behavior and tests.

357```

358 

359`/migrate-component SearchBar React Vue`를 실행하면 `$ARGUMENTS[0]`을 `SearchBar`로, `$ARGUMENTS[1]`을 `React`로, `$ARGUMENTS[2]`를 `Vue`로 대체합니다. `$N` 약자를 사용하는 동일한 skill:

360 

361```yaml theme={null}

362---

363name: migrate-component

364description: Migrate a component from one framework to another

365---

366 

367Migrate the $0 component from $1 to $2.

368Preserve all existing behavior and tests.

369```

370 

371## 고급 패턴

372 

373### 동적 컨텍스트 주입

374 

375`` !`<command>` `` 구문은 skill 콘텐츠가 Claude로 전송되기 전에 shell 명령어를 실행합니다. 명령어 출력이 플레이스홀더를 대체하므로 Claude는 명령어 자체가 아닌 실제 데이터를 받습니다.

376 

377이 skill은 GitHub CLI를 사용하여 라이브 PR 데이터를 가져와 pull request를 요약합니다. `` !`gh pr diff` `` 및 기타 명령어가 먼저 실행되고, 출력이 프롬프트에 삽입됩니다:

378 

379```yaml theme={null}

380---

381name: pr-summary

382description: Summarize changes in a pull request

383context: fork

384agent: Explore

385allowed-tools: Bash(gh *)

386---

387 

388## Pull request context

389- PR diff: !`gh pr diff`

390- PR comments: !`gh pr view --comments`

391- Changed files: !`gh pr diff --name-only`

392 

393## Your task

394Summarize this pull request...

395```

396 

397이 skill이 실행될 때:

398 

3991. 각 `` !`<command>` ``가 즉시 실행됩니다(Claude가 보기 전에).

4002. 출력이 skill 콘텐츠의 플레이스홀더를 대체합니다.

4013. Claude는 실제 PR 데이터가 있는 완전히 렌더링된 프롬프트를 받습니다.

402 

403이는 전처리이며, Claude가 실행하는 것이 아닙니다. Claude는 최종 결과만 봅니다.

404 

405다중 라인 명령어의 경우, 인라인 형식 대신 ` ```! `로 열린 펜스 코드 블록을 사용합니다:

406 

407````markdown theme={null}

408## Environment

409```!

410node --version

411npm --version

412git status --short

413```

414````

415 

416사용자, 프로젝트, 플러그인 또는 [추가 디렉토리](#skills-from-additional-directories) 소스의 skills 및 사용자 정의 명령어에 대해 이 동작을 비활성화하려면, [설정](/ko/settings)에서 `"disableSkillShellExecution": true`를 설정합니다. 각 명령어는 실행되는 대신 `[shell command execution disabled by policy]`로 대체됩니다. 번들 및 관리 skills는 영향을 받지 않습니다. 이 설정은 사용자가 재정의할 수 없는 [관리 설정](/ko/permissions#managed-settings)에서 가장 유용합니다.

417 

418<Tip>

419 skill에서 [확장 사고](/ko/common-workflows#use-extended-thinking-thinking-mode)를 활성화하려면 skill 콘텐츠의 어디든 "ultrathink"라는 단어를 포함합니다.

420</Tip>

421 

422### Subagent에서 Skills 실행

423 

424skill을 격리 상태에서 실행하려면 frontmatter에 `context: fork`를 추가합니다. skill 콘텐츠는 subagent를 구동하는 프롬프트가 됩니다. 대화 기록에 액세스할 수 없습니다.

425 

426<Warning>

427 `context: fork`는 명시적 지침이 있는 skills에만 의미가 있습니다. skill에 작업 없이 "이 API 규칙을 사용하세요"와 같은 지침이 포함되어 있으면, subagent는 지침을 받지만 실행 가능한 프롬프트가 없으므로 의미 있는 출력 없이 반환됩니다.

428</Warning>

429 

430Skills와 [subagents](/ko/sub-agents)는 두 방향으로 함께 작동합니다:

431 

432| 접근 방식 | 시스템 프롬프트 | 작업 | 또한 로드 |

433| :------------------------ | :----------------------------- | :------------- | :------------------------ |

434| `context: fork`가 있는 Skill | 에이전트 유형(`Explore`, `Plan` 등)에서 | SKILL.md 콘텐츠 | CLAUDE.md |

435| `skills` 필드가 있는 Subagent | Subagent의 markdown 본문 | Claude의 위임 메시지 | 미리 로드된 skills + CLAUDE.md |

436 

437`context: fork`를 사용하면 skill에 작업을 작성하고 실행할 에이전트 유형을 선택합니다. 역방향(skills를 참조 자료로 사용하는 사용자 정의 subagent 정의)은 [Subagents](/ko/sub-agents#preload-skills-into-subagents)를 참조하세요.

438 

439#### 예제: Explore 에이전트를 사용하는 Research Skill

440 

441이 skill은 forked Explore 에이전트에서 연구를 실행합니다. skill 콘텐츠는 작업이 되고, 에이전트는 코드베이스 탐색에 최적화된 읽기 전용 도구를 제공합니다:

442 

443```yaml theme={null}

444---

445name: deep-research

446description: Research a topic thoroughly

447context: fork

448agent: Explore

449---

450 

451Research $ARGUMENTS thoroughly:

452 

4531. Find relevant files using Glob and Grep

4542. Read and analyze the code

4553. Summarize findings with specific file references

456```

457 

458이 skill이 실행될 때:

459 

4601. 새로운 격리된 컨텍스트가 생성됩니다.

4612. subagent는 skill 콘텐츠를 프롬프트로 받습니다("Research \$ARGUMENTS thoroughly...").

4623. `agent` 필드는 실행 환경(모델, 도구 및 권한)을 결정합니다.

4634. 결과는 요약되어 주 대화로 반환됩니다.

464 

465`agent` 필드는 사용할 subagent 구성을 지정합니다. 옵션에는 기본 제공 에이전트(`Explore`, `Plan`, `general-purpose`) 또는 `.claude/agents/`의 모든 사용자 정의 subagent가 포함됩니다. 생략하면 `general-purpose`를 사용합니다.

466 

467### Claude의 Skill 액세스 제한

468 

469기본적으로 Claude는 `disable-model-invocation: true`가 설정되지 않은 모든 skill을 호출할 수 있습니다. `allowed-tools`를 정의하는 Skills는 skill이 활성화되었을 때 사용자별 승인 없이 Claude에게 이러한 도구에 대한 액세스를 부여합니다. [권한 설정](/ko/permissions)은 여전히 다른 모든 도구에 대한 기본 승인 동작을 관리합니다. `/init`, `/review`, `/security-review`를 포함한 몇 가지 기본 제공 명령어도 Skill 도구를 통해 사용 가능합니다. `/compact`와 같은 다른 기본 제공 명령어는 그렇지 않습니다.

470 

471Claude가 호출할 수 있는 skills를 제어하는 세 가지 방법:

472 

473**`/permissions`에서 Skill 도구를 거부하여 모든 skills를 비활성화합니다:**

474 

475```text theme={null}

476# Add to deny rules:

477Skill

478```

479 

480**[권한 규칙](/ko/permissions)을 사용하여 특정 skills를 허용하거나 거부합니다:**

481 

482```text theme={null}

483# Allow only specific skills

484Skill(commit)

485Skill(review-pr *)

486 

487# Deny specific skills

488Skill(deploy *)

489```

490 

491권한 구문: 정확한 일치는 `Skill(name)`, 모든 인수를 사용한 접두사 일치는 `Skill(name *)`.

492 

493**개별 skills를 숨기기** - frontmatter에 `disable-model-invocation: true`를 추가합니다. 이는 Claude의 컨텍스트에서 skill을 완전히 제거합니다.

494 

495<Note>

496 `user-invocable` 필드는 메뉴 가시성만 제어하고 Skill 도구 액세스는 제어하지 않습니다. 프로그래밍 방식 호출을 차단하려면 `disable-model-invocation: true`를 사용합니다.

497</Note>

498 

499## Skills 공유

500 

501Skills는 대상에 따라 다양한 범위에서 배포할 수 있습니다:

502 

503* **프로젝트 skills**: `.claude/skills/`를 버전 제어에 커밋합니다.

504* **플러그인**: [플러그인](/ko/plugins)에서 `skills/` 디렉토리를 생성합니다.

505* **관리**: [관리 설정](/ko/settings#settings-files)을 통해 조직 전체에 배포합니다.

506 

507### 시각적 출력 생성

508 

509Skills는 모든 언어의 스크립트를 번들하고 실행할 수 있으므로 Claude에게 단일 프롬프트로 가능한 것 이상의 기능을 제공합니다. 강력한 패턴 중 하나는 시각적 출력을 생성하는 것입니다: 브라우저에서 열리는 대화형 HTML 파일로 데이터 탐색, 디버깅 또는 보고서 생성에 사용됩니다.

510 

511이 예제는 코드베이스 탐색기를 생성합니다: 디렉토리를 확장 및 축소할 수 있는 대화형 트리 보기로, 한눈에 파일 크기를 보고, 색상으로 파일 유형을 식별할 수 있습니다.

512 

513Skill 디렉토리 생성:

514 

515```bash theme={null}

516mkdir -p ~/.claude/skills/codebase-visualizer/scripts

517```

518 

519`~/.claude/skills/codebase-visualizer/SKILL.md` 생성. 설명은 Claude에게 이 Skill을 언제 활성화할지 알려주고, 지침은 Claude에게 번들 스크립트를 실행하도록 알려줍니다:

520 

521````yaml theme={null}

522---

523name: codebase-visualizer

524description: Generate an interactive collapsible tree visualization of your codebase. Use when exploring a new repo, understanding project structure, or identifying large files.

525allowed-tools: Bash(python *)

526---

527 

528# Codebase Visualizer

529 

530Generate an interactive HTML tree view that shows your project's file structure with collapsible directories.

531 

532## Usage

533 

534Run the visualization script from your project root:

535 

536```bash

537python ~/.claude/skills/codebase-visualizer/scripts/visualize.py .

538```

539 

540This creates `codebase-map.html` in the current directory and opens it in your default browser.

541 

542## What the visualization shows

543 

544- **Collapsible directories**: Click folders to expand/collapse

545- **File sizes**: Displayed next to each file

546- **Colors**: Different colors for different file types

547- **Directory totals**: Shows aggregate size of each folder

548````

549 

550`~/.claude/skills/codebase-visualizer/scripts/visualize.py` 생성. 이 스크립트는 디렉토리 트리를 스캔하고 다음을 포함하는 자체 포함 HTML 파일을 생성합니다:

551 

552* 파일 수, 디렉토리 수, 총 크기 및 파일 유형 수를 보여주는 **요약 사이드바**

553* 파일 유형별로 코드베이스를 분석하는 **막대 차트**(크기 기준 상위 8개)

554* 디렉토리를 확장 및 축소할 수 있는 **축소 가능한 트리**로, 색상으로 코딩된 파일 유형 표시기 포함

555 

556스크립트는 Python이 필요하지만 기본 제공 라이브러리만 사용하므로 설치할 패키지가 없습니다:

557 

558```python expandable theme={null}

559#!/usr/bin/env python3

560"""Generate an interactive collapsible tree visualization of a codebase."""

561 

562import json

563import sys

564import webbrowser

565from pathlib import Path

566from collections import Counter

567 

568IGNORE = {'.git', 'node_modules', '__pycache__', '.venv', 'venv', 'dist', 'build'}

569 

570def scan(path: Path, stats: dict) -> dict:

571 result = {"name": path.name, "children": [], "size": 0}

572 try:

573 for item in sorted(path.iterdir()):

574 if item.name in IGNORE or item.name.startswith('.'):

575 continue

576 if item.is_file():

577 size = item.stat().st_size

578 ext = item.suffix.lower() or '(no ext)'

579 result["children"].append({"name": item.name, "size": size, "ext": ext})

580 result["size"] += size

581 stats["files"] += 1

582 stats["extensions"][ext] += 1

583 stats["ext_sizes"][ext] += size

584 elif item.is_dir():

585 stats["dirs"] += 1

586 child = scan(item, stats)

587 if child["children"]:

588 result["children"].append(child)

589 result["size"] += child["size"]

590 except PermissionError:

591 pass

592 return result

593 

594def generate_html(data: dict, stats: dict, output: Path) -> None:

595 ext_sizes = stats["ext_sizes"]

596 total_size = sum(ext_sizes.values()) or 1

597 sorted_exts = sorted(ext_sizes.items(), key=lambda x: -x[1])[:8]

598 colors = {

599 '.js': '#f7df1e', '.ts': '#3178c6', '.py': '#3776ab', '.go': '#00add8',

600 '.rs': '#dea584', '.rb': '#cc342d', '.css': '#264de4', '.html': '#e34c26',

601 '.json': '#6b7280', '.md': '#083fa1', '.yaml': '#cb171e', '.yml': '#cb171e',

602 '.mdx': '#083fa1', '.tsx': '#3178c6', '.jsx': '#61dafb', '.sh': '#4eaa25',

603 }

604 lang_bars = "".join(

605 f'<div class="bar-row"><span class="bar-label">{ext}</span>'

606 f'<div class="bar" style="width:{(size/total_size)*100}%;background:{colors.get(ext,"#6b7280")}"></div>'

607 f'<span class="bar-pct">{(size/total_size)*100:.1f}%</span></div>'

608 for ext, size in sorted_exts

609 )

610 def fmt(b):

611 if b < 1024: return f"{b} B"

612 if b < 1048576: return f"{b/1024:.1f} KB"

613 return f"{b/1048576:.1f} MB"

614 

615 html = f'''<!DOCTYPE html>

616<html><head>

617 <meta charset="utf-8"><title>Codebase Explorer</title>

618 <style>

619 body {{ font: 14px/1.5 system-ui, sans-serif; margin: 0; background: #1a1a2e; color: #eee; }}

620 .container {{ display: flex; height: 100vh; }}

621 .sidebar {{ width: 280px; background: #252542; padding: 20px; border-right: 1px solid #3d3d5c; overflow-y: auto; flex-shrink: 0; }}

622 .main {{ flex: 1; padding: 20px; overflow-y: auto; }}

623 h1 {{ margin: 0 0 10px 0; font-size: 18px; }}

624 h2 {{ margin: 20px 0 10px 0; font-size: 14px; color: #888; text-transform: uppercase; }}

625 .stat {{ display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #3d3d5c; }}

626 .stat-value {{ font-weight: bold; }}

627 .bar-row {{ display: flex; align-items: center; margin: 6px 0; }}

628 .bar-label {{ width: 55px; font-size: 12px; color: #aaa; }}

629 .bar {{ height: 18px; border-radius: 3px; }}

630 .bar-pct {{ margin-left: 8px; font-size: 12px; color: #666; }}

631 .tree {{ list-style: none; padding-left: 20px; }}

632 details {{ cursor: pointer; }}

633 summary {{ padding: 4px 8px; border-radius: 4px; }}

634 summary:hover {{ background: #2d2d44; }}

635 .folder {{ color: #ffd700; }}

636 .file {{ display: flex; align-items: center; padding: 4px 8px; border-radius: 4px; }}

637 .file:hover {{ background: #2d2d44; }}

638 .size {{ color: #888; margin-left: auto; font-size: 12px; }}

639 .dot {{ width: 8px; height: 8px; border-radius: 50%; margin-right: 8px; }}

640 </style>

641</head><body>

642 <div class="container">

643 <div class="sidebar">

644 <h1>📊 Summary</h1>

645 <div class="stat"><span>Files</span><span class="stat-value">{stats["files"]:,}</span></div>

646 <div class="stat"><span>Directories</span><span class="stat-value">{stats["dirs"]:,}</span></div>

647 <div class="stat"><span>Total size</span><span class="stat-value">{fmt(data["size"])}</span></div>

648 <div class="stat"><span>File types</span><span class="stat-value">{len(stats["extensions"])}</span></div>

649 <h2>By file type</h2>

650 {lang_bars}

651 </div>

652 <div class="main">

653 <h1>📁 {data["name"]}</h1>

654 <ul class="tree" id="root"></ul>

655 </div>

656 </div>

657 <script>

658 const data = {json.dumps(data)};

659 const colors = {json.dumps(colors)};

660 function fmt(b) {{ if (b < 1024) return b + ' B'; if (b < 1048576) return (b/1024).toFixed(1) + ' KB'; return (b/1048576).toFixed(1) + ' MB'; }}

661 function render(node, parent) {{

662 if (node.children) {{

663 const det = document.createElement('details');

664 det.open = parent === document.getElementById('root');

665 det.innerHTML = `<summary><span class="folder">📁 ${{node.name}}</span><span class="size">${{fmt(node.size)}}</span></summary>`;

666 const ul = document.createElement('ul'); ul.className = 'tree';

667 node.children.sort((a,b) => (b.children?1:0)-(a.children?1:0) || a.name.localeCompare(b.name));

668 node.children.forEach(c => render(c, ul));

669 det.appendChild(ul);

670 const li = document.createElement('li'); li.appendChild(det); parent.appendChild(li);

671 }} else {{

672 const li = document.createElement('li'); li.className = 'file';

673 li.innerHTML = `<span class="dot" style="background:${{colors[node.ext]||'#6b7280'}}"></span>${{node.name}}<span class="size">${{fmt(node.size)}}</span>`;

674 parent.appendChild(li);

675 }}

676 }}

677 data.children.forEach(c => render(c, document.getElementById('root')));

678 </script>

679</body></html>'''

680 output.write_text(html)

681 

682if __name__ == '__main__':

683 target = Path(sys.argv[1] if len(sys.argv) > 1 else '.').resolve()

684 stats = {"files": 0, "dirs": 0, "extensions": Counter(), "ext_sizes": Counter()}

685 data = scan(target, stats)

686 out = Path('codebase-map.html')

687 generate_html(data, stats, out)

688 print(f'Generated {out.absolute()}')

689 webbrowser.open(f'file://{out.absolute()}')

690```

691 

692테스트하려면 모든 프로젝트에서 Claude Code를 열고 "Visualize this codebase"를 요청합니다. Claude는 스크립트를 실행하고, `codebase-map.html`을 생성하고, 브라우저에서 엽니다.

693 

694이 패턴은 모든 시각적 출력에 작동합니다: 종속성 그래프, 테스트 커버리지 보고서, API 문서 또는 데이터베이스 스키마 시각화. 번들 스크립트가 무거운 작업을 수행하는 동안 Claude는 조율을 처리합니다.

695 

696## 문제 해결

697 

698### Skill이 트리거되지 않음

699 

700Claude가 예상대로 skill을 사용하지 않는 경우:

701 

7021. 설명에 사용자가 자연스럽게 말할 키워드가 포함되어 있는지 확인합니다.

7032. skill이 `What skills are available?`에 나타나는지 확인합니다.

7043. 설명과 더 가깝게 일치하도록 요청을 다시 표현해봅니다.

7054. skill이 사용자 호출 가능하면 `/skill-name`으로 직접 호출합니다.

706 

707### Skill이 너무 자주 트리거됨

708 

709Claude가 원하지 않을 때 skill을 사용하는 경우:

710 

7111. 설명을 더 구체적으로 만듭니다.

7122. 수동 호출만 원하면 `disable-model-invocation: true`를 추가합니다.

713 

714### Skill 설명이 잘림

715 

716Skill 설명은 Claude가 사용 가능한 항목을 알 수 있도록 컨텍스트에 로드됩니다. 모든 skill 이름은 항상 포함되지만, 많은 skills가 있으면 설명이 단축되어 문자 예산에 맞출 수 있으며, 이는 Claude가 요청과 일치하는 데 필요한 키워드를 제거할 수 있습니다. 예산은 컨텍스트 윈도우의 1%에서 동적으로 확장되며, 8,000자의 폴백이 있습니다.

717 

718제한을 높이려면 `SLASH_COMMAND_TOOL_CHAR_BUDGET` 환경 변수를 설정합니다. 또는 소스에서 설명을 자릅니다: 주요 사용 사례를 앞에 배치합니다. 각 항목의 결합된 텍스트는 예산과 관계없이 1,536자로 제한됩니다.

719 

720## 관련 리소스

721 

722* **[구성 디버깅](/ko/debug-your-config)**: skill이 나타나지 않거나 트리거되지 않는 이유 진단

723* **[Subagents](/ko/sub-agents)**: 특화된 에이전트에 작업 위임

724* **[플러그인](/ko/plugins)**: 다른 확장과 함께 skills 패키징 및 배포

725* **[Hooks](/ko/hooks)**: 도구 이벤트 주변 워크플로우 자동화

726* **[메모리](/ko/memory)**: 지속적인 컨텍스트를 위한 CLAUDE.md 파일 관리

727* **[명령어](/ko/commands)**: 기본 제공 명령어 및 번들 skills 참조

728* **[권한](/ko/permissions)**: 도구 및 skill 액세스 제어

slack.md +210 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Slack의 Claude Code

6 

7> Slack 워크스페이스에서 직접 코딩 작업 위임

8 

9Slack의 Claude Code는 Claude Code의 강력한 기능을 Slack 워크스페이스에 직접 가져옵니다. `@Claude`를 언급하여 코딩 작업을 요청하면, Claude는 자동으로 의도를 감지하고 웹에서 Claude Code 세션을 생성하여 팀 대화를 떠나지 않고도 개발 작업을 위임할 수 있습니다.

10 

11이 통합은 기존 Slack용 Claude 앱을 기반으로 하지만 코딩 관련 요청에 대해 웹의 Claude Code로 지능형 라우팅을 추가합니다.

12 

13## 사용 사례

14 

15* **버그 조사 및 수정**: Claude에 Slack 채널에서 보고된 버그를 조사하고 수정하도록 요청합니다.

16* **빠른 코드 검토 및 수정**: Claude가 팀 피드백을 기반으로 작은 기능을 구현하거나 코드를 리팩토링하도록 합니다.

17* **협업 디버깅**: 팀 토론에서 중요한 컨텍스트(예: 오류 재현 또는 사용자 보고)를 제공할 때, Claude는 이 정보를 사용하여 디버깅 접근 방식을 알릴 수 있습니다.

18* **병렬 작업 실행**: Slack에서 코딩 작업을 시작하면서 다른 작업을 계속하고, 완료되면 알림을 받습니다.

19 

20## 필수 조건

21 

22Slack에서 Claude Code를 사용하기 전에 다음을 확인하세요:

23 

24| 요구 사항 | 세부 정보 |

25| :------------- | :--------------------------------------------------------- |

26| Claude 플랜 | Claude Code 액세스가 있는 Pro, Max, Team 또는 Enterprise(프리미엄 시트) |

27| 웹의 Claude Code | [웹의 Claude Code](/ko/claude-code-on-the-web) 액세스가 활성화되어야 함 |

28| GitHub 계정 | 웹의 Claude Code에 연결되어 있으며 최소 하나의 저장소가 인증됨 |

29| Slack 인증 | Claude 앱을 통해 Claude 계정에 연결된 Slack 계정 |

30 

31## Slack에서 Claude Code 설정

32 

33<Steps>

34 <Step title="Slack에 Claude 앱 설치">

35 워크스페이스 관리자는 Slack 앱 마켓플레이스에서 Claude 앱을 설치해야 합니다. [Slack 앱 마켓플레이스](https://slack.com/marketplace/A08SF47R6P4)를 방문하여 "Slack에 추가"를 클릭하여 설치 프로세스를 시작합니다.

36 </Step>

37 

38 <Step title="Claude 계정 연결">

39 앱이 설치된 후 개별 Claude 계정을 인증합니다:

40 

41 1. 앱 섹션에서 "Claude"를 클릭하여 Slack에서 Claude 앱을 엽니다

42 2. 앱 홈 탭으로 이동합니다

43 3. "연결"을 클릭하여 Slack 계정을 Claude 계정과 연결합니다

44 4. 브라우저에서 인증 흐름을 완료합니다

45 </Step>

46 

47 <Step title="웹의 Claude Code 구성">

48 웹의 Claude Code가 제대로 구성되어 있는지 확인합니다:

49 

50 * [claude.ai/code](https://claude.ai/code)를 방문하여 Slack에 연결한 동일한 계정으로 로그인합니다

51 * 아직 연결되지 않은 경우 GitHub 계정을 연결합니다

52 * Claude가 작업할 수 있도록 최소 하나의 저장소를 인증합니다

53 </Step>

54 

55 <Step title="라우팅 모드 선택">

56 계정을 연결한 후 Claude가 Slack의 메시지를 처리하는 방식을 구성합니다. Slack의 Claude 앱 홈으로 이동하여 **라우팅 모드** 설정을 찾습니다.

57 

58 | 모드 | 동작 |

59 | :---------- | :------------------------------------------------------------------------------------------------------------------------------------ |

60 | **코드만** | Claude는 모든 @mentions을 Claude Code 세션으로 라우팅합니다. Claude를 Slack에서 개발 작업 전용으로 사용하는 팀에 가장 적합합니다. |

61 | **코드 + 채팅** | Claude는 각 메시지를 분석하고 Claude Code(코딩 작업용)와 Claude Chat(작성, 분석 및 일반 질문용) 간에 지능형으로 라우팅합니다. 모든 유형의 작업에 대해 단일 @Claude 진입점을 원하는 팀에 가장 적합합니다. |

62 

63 <Note>

64 코드 + 채팅 모드에서 Claude가 메시지를 채팅으로 라우팅했지만 코딩 세션을 원했다면 "코드로 다시 시도"를 클릭하여 Claude Code 세션을 대신 생성할 수 있습니다. 마찬가지로 코드로 라우팅되었지만 채팅 세션을 원했다면 해당 스레드에서 해당 옵션을 선택할 수 있습니다.

65 </Note>

66 </Step>

67</Steps>

68 

69## 작동 방식

70 

71### 자동 감지

72 

73Slack 채널이나 스레드에서 @Claude를 언급하면, Claude는 자동으로 메시지를 분석하여 코딩 작업인지 여부를 결정합니다. Claude가 코딩 의도를 감지하면 일반 채팅 어시스턴트로 응답하는 대신 요청을 웹의 Claude Code로 라우팅합니다.

74 

75자동으로 감지되지 않더라도 Claude에 요청을 코딩 작업으로 처리하도록 명시적으로 지시할 수 있습니다.

76 

77<Note>

78 Slack의 Claude Code는 채널(공개 또는 비공개)에서만 작동합니다. 직접 메시지(DM)에서는 작동하지 않습니다.

79</Note>

80 

81### 컨텍스트 수집

82 

83**스레드에서**: 스레드에서 @Claude를 언급하면 전체 대화를 이해하기 위해 해당 스레드의 모든 메시지에서 컨텍스트를 수집합니다.

84 

85**채널에서**: 채널에서 직접 언급되면 Claude는 관련 컨텍스트를 위해 최근 채널 메시지를 살펴봅니다.

86 

87이 컨텍스트는 Claude가 문제를 이해하고, 적절한 저장소를 선택하고, 작업에 대한 접근 방식을 알리는 데 도움이 됩니다.

88 

89<Warning>

90 Slack에서 @Claude가 호출되면 Claude는 요청을 더 잘 이해하기 위해 대화 컨텍스트에 액세스할 수 있습니다. Claude는 컨텍스트의 다른 메시지의 지시를 따를 수 있으므로 사용자는 Claude를 신뢰할 수 있는 Slack 대화에서만 사용해야 합니다.

91</Warning>

92 

93### 세션 흐름

94 

951. **시작**: @Claude를 코딩 요청과 함께 언급합니다

962. **감지**: Claude가 메시지를 분석하고 코딩 의도를 감지합니다

973. **세션 생성**: claude.ai/code에서 새로운 Claude Code 세션이 생성됩니다

984. **진행 상황 업데이트**: Claude는 작업이 진행됨에 따라 Slack 스레드에 상태 업데이트를 게시합니다

995. **완료**: 완료되면 Claude는 요약 및 작업 버튼과 함께 @mentions을 합니다

1006. **검토**: "세션 보기"를 클릭하여 전체 기록을 보거나 "PR 생성"을 클릭하여 풀 요청을 엽니다

101 

102## 사용자 인터페이스 요소

103 

104### 앱 홈

105 

106앱 홈 탭은 연결 상태를 표시하고 Claude 계정을 Slack에서 연결하거나 연결 해제할 수 있습니다.

107 

108### 메시지 작업

109 

110* **세션 보기**: 수행된 모든 작업을 볼 수 있고, 세션을 계속하거나 추가 요청을 할 수 있는 브라우저에서 전체 Claude Code 세션을 엽니다.

111* **PR 생성**: 세션의 변경 사항에서 직접 풀 요청을 생성합니다.

112* **코드로 다시 시도**: Claude가 처음에 채팅 어시스턴트로 응답했지만 코딩 세션을 원했다면 이 버튼을 클릭하여 요청을 Claude Code 작업으로 다시 시도합니다.

113* **저장소 변경**: Claude가 잘못 선택한 경우 다른 저장소를 선택할 수 있습니다.

114 

115### 저장소 선택

116 

117Claude는 Slack 대화의 컨텍스트를 기반으로 저장소를 자동으로 선택합니다. 여러 저장소가 적용될 수 있는 경우 Claude는 올바른 저장소를 선택할 수 있는 드롭다운을 표시할 수 있습니다.

118 

119## 액세스 및 권한

120 

121### 사용자 수준 액세스

122 

123| 액세스 유형 | 요구 사항 |

124| :------------- | :---------------------------------------- |

125| Claude Code 세션 | 각 사용자는 자신의 Claude 계정에서 세션을 실행합니다 |

126| 사용량 및 속도 제한 | 세션은 개별 사용자의 플랜 제한에 대해 계산됩니다 |

127| 저장소 액세스 | 사용자는 개인적으로 연결한 저장소에만 액세스할 수 있습니다 |

128| 세션 기록 | 세션은 claude.ai/code의 Claude Code 기록에 나타납니다 |

129 

130### 워크스페이스 관리자 권한

131 

132Slack 워크스페이스 관리자는 Claude 앱을 워크스페이스에 설치할 수 있는지 여부를 제어합니다. 개별 사용자는 자신의 Claude 계정으로 인증하여 통합을 사용합니다.

133 

134## 어디서 액세스할 수 있는지

135 

136**Slack에서**: 상태 업데이트, 완료 요약 및 작업 버튼이 표시됩니다. 전체 기록은 보존되며 항상 액세스할 수 있습니다.

137 

138**웹에서**: 전체 대화 기록, 모든 코드 변경, 파일 작업 및 세션을 계속하거나 풀 요청을 생성할 수 있는 기능이 있는 완전한 Claude Code 세션입니다.

139 

140## 모범 사례

141 

142### 효과적인 요청 작성

143 

144* **구체적으로**: 관련이 있을 때 파일 이름, 함수 이름 또는 오류 메시지를 포함합니다.

145* **컨텍스트 제공**: 대화에서 명확하지 않은 경우 저장소 또는 프로젝트를 언급합니다.

146* **성공 정의**: "완료"가 무엇인지 설명합니다. Claude가 테스트를 작성해야 합니까? 문서를 업데이트합니까? PR을 생성합니까?

147* **스레드 사용**: 버그나 기능을 논의할 때 스레드에서 회신하여 Claude가 전체 컨텍스트를 수집할 수 있도록 합니다.

148 

149### Slack과 웹 사용 시기

150 

151**Slack을 사용할 때**: 컨텍스트가 이미 Slack 토론에 있을 때, 작업을 비동기적으로 시작하려고 할 때, 또는 가시성이 필요한 팀원과 협업할 때입니다.

152 

153**웹을 직접 사용할 때**: 파일을 업로드해야 할 때, 개발 중 실시간 상호 작용을 원할 때, 또는 더 길고 복잡한 작업을 수행할 때입니다.

154 

155## 문제 해결

156 

157### 세션이 시작되지 않음

158 

1591. Claude 앱 홈에서 Claude 계정이 연결되어 있는지 확인합니다

1602. 웹의 Claude Code 액세스가 활성화되어 있는지 확인합니다

1613. Claude Code에 연결된 GitHub 저장소가 최소 하나 있는지 확인합니다

162 

163### 저장소가 표시되지 않음

164 

1651. [claude.ai/code](https://claude.ai/code)에서 웹의 Claude Code에 저장소를 연결합니다

1662. 해당 저장소에 대한 GitHub 권한을 확인합니다

1673. GitHub 계정을 연결 해제했다가 다시 연결해봅니다

168 

169### 잘못된 저장소 선택됨

170 

1711. "저장소 변경" 버튼을 클릭하여 다른 저장소를 선택합니다

1722. 더 정확한 선택을 위해 요청에 저장소 이름을 포함합니다

173 

174### 인증 오류

175 

1761. 앱 홈에서 Claude 계정을 연결 해제했다가 다시 연결합니다

1772. 브라우저에서 올바른 Claude 계정으로 로그인했는지 확인합니다

1783. Claude 플랜에 Claude Code 액세스가 포함되어 있는지 확인합니다

179 

180### 세션 만료

181 

1821. 세션은 웹의 Claude Code 기록에서 액세스할 수 있습니다

1832. [claude.ai/code](https://claude.ai/code)에서 과거 세션을 계속하거나 참조할 수 있습니다

184 

185## 현재 제한 사항

186 

187* **GitHub만**: 현재 GitHub의 저장소만 지원합니다.

188* **한 번에 하나의 PR**: 각 세션은 하나의 풀 요청을 생성할 수 있습니다.

189* **속도 제한 적용**: 세션은 개별 Claude 플랜의 속도 제한을 사용합니다.

190* **웹 액세스 필요**: 사용자는 웹의 Claude Code 액세스가 있어야 합니다. 없으면 표준 Claude 채팅 응답만 받습니다.

191 

192## 관련 리소스

193 

194<CardGroup>

195 <Card title="웹의 Claude Code" icon="globe" href="/ko/claude-code-on-the-web">

196 웹의 Claude Code에 대해 자세히 알아보기

197 </Card>

198 

199 <Card title="Slack용 Claude" icon="slack" href="https://claude.com/claude-and-slack">

200 일반 Slack용 Claude 문서

201 </Card>

202 

203 <Card title="Slack 앱 마켓플레이스" icon="store" href="https://slack.com/marketplace/A08SF47R6P4">

204 Slack 마켓플레이스에서 Claude 앱 설치

205 </Card>

206 

207 <Card title="Claude 도움말 센터" icon="circle-question" href="https://support.claude.com">

208 추가 지원 받기

209 </Card>

210</CardGroup>

statusline.md +1062 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 상태 표시줄 사용자 정의

6 

7> Claude Code에서 컨텍스트 윈도우 사용량, 비용 및 git 상태를 모니터링하기 위해 사용자 정의 상태 표시줄 구성

8 

9상태 표시줄은 Claude Code 하단의 사용자 정의 가능한 막대로, 구성한 모든 셸 스크립트를 실행합니다. stdin을 통해 JSON 세션 데이터를 수신하고 스크립트가 출력하는 모든 내용을 표시하여 컨텍스트 사용량, 비용, git 상태 또는 추적하려는 다른 항목을 한눈에 볼 수 있는 지속적인 보기를 제공합니다.

10 

11상태 표시줄은 다음과 같은 경우에 유용합니다:

12 

13* 작업 중 컨텍스트 윈도우 사용량을 모니터링하려는 경우

14* 세션 비용을 추적해야 하는 경우

15* 여러 세션에서 작업하고 이들을 구분해야 하는 경우

16* git 브랜치 및 상태를 항상 표시하려는 경우

17 

18다음은 첫 번째 줄에 git 정보를 표시하고 두 번째 줄에 색상으로 구분된 컨텍스트 막대를 표시하는 [다중 줄 상태 표시줄](#display-multiple-lines)의 예입니다.

19 

20<Frame>

21 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-multiline.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=60f11387658acc9ff75158ae85f2ac87" alt="모델 이름, 디렉토리, git 브랜치를 첫 번째 줄에 표시하고 컨텍스트 사용량 진행률 표시줄, 비용 및 기간을 두 번째 줄에 표시하는 다중 줄 상태 표시줄" width="776" height="212" data-path="images/statusline-multiline.png" />

22</Frame>

23 

24이 페이지는 [기본 상태 표시줄 설정](#set-up-a-status-line)을 안내하고, [데이터 흐름](#how-status-lines-work)이 Claude Code에서 스크립트로 어떻게 흐르는지 설명하며, [표시할 수 있는 모든 필드](#available-data)를 나열하고, git 상태, 비용 추적 및 진행률 표시줄과 같은 일반적인 패턴에 대한 [즉시 사용 가능한 예제](#examples)를 제공합니다.

25 

26## 상태 표시줄 설정

27 

28[`/statusline` 명령](#use-the-%2Fstatusline-command)을 사용하여 Claude Code가 스크립트를 생성하도록 하거나, [수동으로 스크립트를 만들고](#manually-configure-a-status-line) 설정에 추가합니다.

29 

30### /statusline 명령 사용

31 

32`/statusline` 명령은 표시하려는 내용을 설명하는 자연어 지시사항을 허용합니다. Claude Code는 `~/.claude/` 디렉토리에 스크립트 파일을 생성하고 설정을 자동으로 업데이트합니다:

33 

34```text theme={null}

35/statusline show model name and context percentage with a progress bar

36```

37 

38### 상태 표시줄 수동 구성

39 

40사용자 설정(`~/.claude/settings.json`, 여기서 `~`는 홈 디렉토리) 또는 [프로젝트 설정](/ko/settings#settings-files)에 `statusLine` 필드를 추가합니다. `type`을 `"command"`로 설정하고 `command`를 스크립트 경로 또는 인라인 셸 명령으로 지정합니다. 스크립트 생성에 대한 전체 설명은 [상태 표시줄 단계별 구축](#build-a-status-line-step-by-step)을 참조하세요.

41 

42```json theme={null}

43{

44 "statusLine": {

45 "type": "command",

46 "command": "~/.claude/statusline.sh",

47 "padding": 2

48 }

49}

50```

51 

52`command` 필드는 셸에서 실행되므로 스크립트 파일 대신 인라인 명령을 사용할 수도 있습니다. 이 예제는 `jq`를 사용하여 JSON 입력을 구문 분석하고 모델 이름과 컨텍스트 백분율을 표시합니다:

53 

54```json theme={null}

55{

56 "statusLine": {

57 "type": "command",

58 "command": "jq -r '\"[\\(.model.display_name)] \\(.context_window.used_percentage // 0)% context\"'"

59 }

60}

61```

62 

63선택적 `padding` 필드는 상태 표시줄 콘텐츠에 추가 수평 간격(문자 단위)을 추가합니다. 기본값은 `0`입니다. 이 패딩은 인터페이스의 기본 제공 간격에 추가되므로 터미널 가장자리로부터의 절대 거리가 아닌 상대 들여쓰기를 제어합니다.

64 

65선택적 `refreshInterval` 필드는 [이벤트 기반 업데이트](#how-status-lines-work)에 추가로 N초마다 명령을 다시 실행합니다. 최소값은 `1`입니다. 상태 표시줄이 시계와 같은 시간 기반 데이터를 표시하거나 주 세션이 유휴 상태일 때 백그라운드 서브에이전트가 git 상태를 변경할 때 이를 설정합니다. 이벤트에서만 실행하려면 설정하지 않은 상태로 두세요.

66 

67선택적 `hideVimModeIndicator` 필드는 프롬프트 아래의 기본 제공 `-- INSERT --` 텍스트를 숨깁니다. 스크립트가 [`vim.mode`](#available-data) 자체를 렌더링할 때 이를 `true`로 설정하여 모드가 두 번 표시되지 않도록 합니다.

68 

69### 상태 표시줄 비활성화

70 

71`/statusline`을 실행하고 상태 표시줄을 제거하거나 지우도록 요청합니다(예: `/statusline delete`, `/statusline clear`, `/statusline remove it`). settings.json에서 `statusLine` 필드를 수동으로 삭제할 수도 있습니다.

72 

73## 상태 표시줄 단계별 구축

74 

75이 설명서는 현재 모델, 작업 디렉토리 및 컨텍스트 윈도우 사용량 백분율을 표시하는 상태 표시줄을 수동으로 만들어 내부 동작을 보여줍니다.

76 

77<Note>[`/statusline`](#use-the-statusline-command)을 원하는 내용 설명과 함께 실행하면 이 모든 것이 자동으로 구성됩니다.</Note>

78 

79이 예제는 macOS 및 Linux에서 작동하는 Bash 스크립트를 사용합니다. Windows에서는 [Windows 구성](#windows-configuration)을 참조하여 PowerShell 및 Git Bash 예제를 확인하세요.

80 

81<Frame>

82 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-quickstart.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=696445e59ca0059213250651ad23db6b" alt="모델 이름, 디렉토리 및 컨텍스트 백분율을 표시하는 상태 표시줄" width="726" height="164" data-path="images/statusline-quickstart.png" />

83</Frame>

84 

85<Steps>

86 <Step title="JSON을 읽고 출력을 인쇄하는 스크립트 만들기">

87 Claude Code는 stdin을 통해 JSON 데이터를 스크립트로 보냅니다. 이 스크립트는 [`jq`](https://jqlang.github.io/jq/)(설치해야 할 수 있는 명령줄 JSON 파서)를 사용하여 모델 이름, 디렉토리 및 컨텍스트 백분율을 추출한 다음 형식이 지정된 줄을 인쇄합니다.

88 

89 이를 `~/.claude/statusline.sh`에 저장합니다(여기서 `~`는 홈 디렉토리이며, macOS에서는 `/Users/username`, Linux에서는 `/home/username`):

90 

91 ```bash theme={null}

92 #!/bin/bash

93 # Claude Code가 stdin으로 보내는 JSON 데이터 읽기

94 input=$(cat)

95 

96 # jq를 사용하여 필드 추출

97 MODEL=$(echo "$input" | jq -r '.model.display_name')

98 DIR=$(echo "$input" | jq -r '.workspace.current_dir')

99 # "// 0"은 필드가 null인 경우 폴백을 제공합니다

100 PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)

101 

102 # 상태 표시줄 출력 - ${DIR##*/}는 폴더 이름만 추출합니다

103 echo "[$MODEL] 📁 ${DIR##*/} | ${PCT}% context"

104 ```

105 </Step>

106 

107 <Step title="실행 가능하게 만들기">

108 셸이 실행할 수 있도록 스크립트를 실행 가능하게 표시합니다:

109 

110 ```bash theme={null}

111 chmod +x ~/.claude/statusline.sh

112 ```

113 </Step>

114 

115 <Step title="설정에 추가">

116 Claude Code에 스크립트를 상태 표시줄로 실행하도록 지시합니다. 이 구성을 `~/.claude/settings.json`에 추가합니다. 이는 `type`을 `"command"`로 설정하고(의미: "이 셸 명령 실행") `command`를 스크립트로 지정합니다:

117 

118 ```json theme={null}

119 {

120 "statusLine": {

121 "type": "command",

122 "command": "~/.claude/statusline.sh"

123 }

124 }

125 ```

126 

127 상태 표시줄이 인터페이스 하단에 나타납니다. 설정은 자동으로 다시 로드되지만 Claude Code와의 다음 상호 작용까지 변경 사항이 나타나지 않습니다.

128 </Step>

129</Steps>

130 

131## 상태 표시줄 작동 방식

132 

133Claude Code는 스크립트를 실행하고 stdin을 통해 [JSON 세션 데이터](#available-data)를 파이프합니다. 스크립트는 JSON을 읽고 필요한 것을 추출한 다음 stdout에 텍스트를 인쇄합니다. Claude Code는 스크립트가 인쇄하는 모든 것을 표시합니다.

134 

135**업데이트 시기**

136 

137스크립트는 새로운 어시스턴트 메시지 후, 권한 모드가 변경될 때 또는 vim 모드가 전환될 때 실행됩니다. 업데이트는 300ms에서 디바운스되므로 빠른 변경이 함께 일괄 처리되고 스크립트는 상황이 안정화되면 한 번 실행됩니다. 스크립트가 여전히 실행 중인 동안 새 업데이트가 트리거되면 진행 중인 실행이 취소됩니다. 스크립트를 편집하면 Claude Code와의 다음 상호 작용이 업데이트를 트리거할 때까지 변경 사항이 나타나지 않습니다.

138 

139이러한 트리거는 주 세션이 유휴 상태일 때(예: 코디네이터가 백그라운드 서브에이전트를 기다릴 때) 조용해질 수 있습니다. 유휴 기간 동안 시간 기반 또는 외부 소스 세그먼트를 최신 상태로 유지하려면 [`refreshInterval`](#manually-configure-a-status-line)을 설정하여 고정 타이머에서도 명령을 다시 실행합니다.

140 

141**스크립트가 출력할 수 있는 것**

142 

143* **여러 줄**: 각 `echo` 또는 `print` 문은 별도의 행으로 표시됩니다. [다중 줄 예제](#display-multiple-lines)를 참조하세요.

144* **색상**: 녹색의 경우 `\033[32m`과 같은 [ANSI 이스케이프 코드](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors)를 사용합니다(터미널이 지원해야 함). [git 상태 예제](#git-status-with-colors)를 참조하세요.

145* **링크**: [OSC 8 이스케이프 시퀀스](https://en.wikipedia.org/wiki/ANSI_escape_code#OSC)를 사용하여 텍스트를 클릭 가능하게 만듭니다(macOS에서는 Cmd+클릭, Windows/Linux에서는 Ctrl+클릭). iTerm2, Kitty 또는 WezTerm과 같이 하이퍼링크를 지원하는 터미널이 필요합니다. [클릭 가능한 링크 예제](#clickable-links)를 참조하세요.

146 

147<Note>상태 표시줄은 로컬에서 실행되며 API 토큰을 소비하지 않습니다. 자동 완성 제안, 도움말 메뉴 및 권한 프롬프트를 포함한 특정 UI 상호 작용 중에 일시적으로 숨겨집니다.</Note>

148 

149## 사용 가능한 데이터

150 

151Claude Code는 stdin을 통해 스크립트에 다음 JSON 필드를 보냅니다:

152 

153| 필드 | 설명 |

154| -------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |

155| `model.id`, `model.display_name` | 현재 모델 식별자 및 표시 이름 |

156| `cwd`, `workspace.current_dir` | 현재 작업 디렉토리. 두 필드 모두 동일한 값을 포함합니다. `workspace.current_dir`은 `workspace.project_dir`과의 일관성을 위해 선호됩니다. |

157| `workspace.project_dir` | Claude Code가 시작된 디렉토리로, 세션 중에 작업 디렉토리가 변경되면 `cwd`와 다를 수 있습니다 |

158| `workspace.added_dirs` | `/add-dir` 또는 `--add-dir`을 통해 추가된 추가 디렉토리. 추가된 것이 없으면 빈 배열 |

159| `workspace.git_worktree` | `git worktree add`로 생성된 연결된 worktree 내에 현재 디렉토리가 있을 때 Git worktree 이름. 주 작업 트리에는 없습니다. `worktree.*`와 달리 `--worktree` 세션에만 적용되는 것이 아니라 모든 git worktree에 대해 채워집니다 |

160| `cost.total_cost_usd` | USD 단위의 총 세션 비용(클라이언트 측에서 계산). 실제 청구서와 다를 수 있습니다 |

161| `cost.total_duration_ms` | 세션 시작 이후의 총 벽시계 시간(밀리초) |

162| `cost.total_api_duration_ms` | API 응답 대기에 소비된 총 시간(밀리초) |

163| `cost.total_lines_added`, `cost.total_lines_removed` | 변경된 코드 줄 |

164| `context_window.total_input_tokens`, `context_window.total_output_tokens` | 세션 전체의 누적 토큰 수 |

165| `context_window.context_window_size` | 토큰 단위의 최대 컨텍스트 윈도우 크기. 기본값은 200,000이거나 확장된 컨텍스트가 있는 모델의 경우 1,000,000입니다. |

166| `context_window.used_percentage` | 사용된 컨텍스트 윈도우의 사전 계산된 백분율 |

167| `context_window.remaining_percentage` | 남은 컨텍스트 윈도우의 사전 계산된 백분율 |

168| `context_window.current_usage` | 마지막 API 호출의 토큰 수([컨텍스트 윈도우 필드](#context-window-fields)에 설명됨) |

169| `exceeds_200k_tokens` | 가장 최근 API 응답의 총 토큰 수(입력, 캐시 및 출력 토큰 결합)가 200k를 초과하는지 여부. 이는 실제 컨텍스트 윈도우 크기와 관계없이 고정된 임계값입니다. |

170| `effort.level` | 현재 추론 노력(`low`, `medium`, `high`, `xhigh` 또는 `max`). 중간 세션 `/effort` 변경을 포함한 라이브 세션 값을 반영합니다. 현재 모델이 노력 매개변수를 지원하지 않을 때는 없습니다 |

171| `thinking.enabled` | 세션에 대해 확장된 사고가 활성화되어 있는지 여부 |

172| `rate_limits.five_hour.used_percentage`, `rate_limits.seven_day.used_percentage` | 5시간 또는 7일 속도 제한의 소비된 백분율(0\~100) |

173| `rate_limits.five_hour.resets_at`, `rate_limits.seven_day.resets_at` | 5시간 또는 7일 속도 제한 윈도우가 재설정되는 Unix epoch 초 |

174| `session_id` | 고유 세션 식별자 |

175| `session_name` | `--name` 플래그 또는 `/rename`으로 설정된 사용자 정의 세션 이름. 사용자 정의 이름이 설정되지 않은 경우 없음 |

176| `transcript_path` | 대화 기록 파일의 경로 |

177| `version` | Claude Code 버전 |

178| `output_style.name` | 현재 출력 스타일의 이름 |

179| `vim.mode` | [vim 모드](/ko/interactive-mode#vim-editor-mode)가 활성화되어 있을 때 현재 vim 모드(`NORMAL`, `INSERT`, `VISUAL` 또는 `VISUAL LINE`) |

180| `agent.name` | `--agent` 플래그 또는 에이전트 설정이 구성되어 있을 때 에이전트 이름 |

181| `worktree.name` | 활성 worktree의 이름. `--worktree` 세션 중에만 표시됩니다 |

182| `worktree.path` | worktree 디렉토리의 절대 경로 |

183| `worktree.branch` | worktree의 Git 브랜치 이름(예: `"worktree-my-feature"`). 훅 기반 worktree의 경우 없음 |

184| `worktree.original_cwd` | worktree에 들어가기 전에 Claude가 있던 디렉토리 |

185| `worktree.original_branch` | worktree에 들어가기 전에 체크아웃된 Git 브랜치. 훅 기반 worktree의 경우 없음 |

186 

187<Accordion title="전체 JSON 스키마">

188 상태 표시줄 명령은 stdin을 통해 이 JSON 구조를 수신합니다:

189 

190 ```json theme={null}

191 {

192 "cwd": "/current/working/directory",

193 "session_id": "abc123...",

194 "session_name": "my-session",

195 "transcript_path": "/path/to/transcript.jsonl",

196 "model": {

197 "id": "claude-opus-4-7",

198 "display_name": "Opus"

199 },

200 "workspace": {

201 "current_dir": "/current/working/directory",

202 "project_dir": "/original/project/directory",

203 "added_dirs": [],

204 "git_worktree": "feature-xyz"

205 },

206 "version": "2.1.90",

207 "output_style": {

208 "name": "default"

209 },

210 "cost": {

211 "total_cost_usd": 0.01234,

212 "total_duration_ms": 45000,

213 "total_api_duration_ms": 2300,

214 "total_lines_added": 156,

215 "total_lines_removed": 23

216 },

217 "context_window": {

218 "total_input_tokens": 15234,

219 "total_output_tokens": 4521,

220 "context_window_size": 200000,

221 "used_percentage": 8,

222 "remaining_percentage": 92,

223 "current_usage": {

224 "input_tokens": 8500,

225 "output_tokens": 1200,

226 "cache_creation_input_tokens": 5000,

227 "cache_read_input_tokens": 2000

228 }

229 },

230 "exceeds_200k_tokens": false,

231 "effort": {

232 "level": "high"

233 },

234 "thinking": {

235 "enabled": true

236 },

237 "rate_limits": {

238 "five_hour": {

239 "used_percentage": 23.5,

240 "resets_at": 1738425600

241 },

242 "seven_day": {

243 "used_percentage": 41.2,

244 "resets_at": 1738857600

245 }

246 },

247 "vim": {

248 "mode": "NORMAL"

249 },

250 "agent": {

251 "name": "security-reviewer"

252 },

253 "worktree": {

254 "name": "my-feature",

255 "path": "/path/to/.claude/worktrees/my-feature",

256 "branch": "worktree-my-feature",

257 "original_cwd": "/path/to/project",

258 "original_branch": "main"

259 }

260 }

261 ```

262 

263 **없을 수 있는 필드** (JSON에 없음):

264 

265 * `session_name`: `--name` 또는 `/rename`으로 사용자 정의 이름이 설정되었을 때만 나타남

266 * `workspace.git_worktree`: 현재 디렉토리가 연결된 git worktree 내에 있을 때만 나타남

267 * `effort`: 현재 모델이 추론 노력 매개변수를 지원할 때만 나타남

268 * `vim`: vim 모드가 활성화되어 있을 때만 나타남

269 * `agent`: `--agent` 플래그 또는 에이전트 설정이 구성되어 있을 때만 나타남

270 * `worktree`: `--worktree` 세션 중에만 나타남. 존재할 때 `branch` 및 `original_branch`도 훅 기반 worktree의 경우 없을 수 있습니다

271 * `rate_limits`: Claude.ai 구독자(Pro/Max)의 경우 첫 번째 API 응답 후에만 나타남. 각 윈도우(`five_hour`, `seven_day`)는 독립적으로 없을 수 있습니다. 부재를 우아하게 처리하려면 `jq -r '.rate_limits.five_hour.used_percentage // empty'`를 사용합니다.

272 

273 **`null`일 수 있는 필드**:

274 

275 * `context_window.current_usage`: 세션의 첫 번째 API 호출 전에 `null`

276 * `context_window.used_percentage`, `context_window.remaining_percentage`: 세션 초기에 `null`일 수 있음

277 

278 스크립트에서 조건부 액세스로 누락된 필드를 처리하고 null 값을 폴백 기본값으로 처리합니다.

279</Accordion>

280 

281### 컨텍스트 윈도우 필드

282 

283`context_window` 객체는 컨텍스트 사용량을 추적하는 두 가지 방법을 제공합니다:

284 

285* **누적 합계** (`total_input_tokens`, `total_output_tokens`): 전체 세션 전체의 모든 토큰의 합계로, 총 소비량을 추적하는 데 유용합니다

286* **현재 사용량** (`current_usage`): 가장 최근 API 호출의 토큰 수로, 실제 컨텍스트 상태를 반영하므로 정확한 컨텍스트 백분율에 사용합니다

287 

288`current_usage` 객체에는 다음이 포함됩니다:

289 

290* `input_tokens`: 현재 컨텍스트의 입력 토큰

291* `output_tokens`: 생성된 출력 토큰

292* `cache_creation_input_tokens`: 캐시에 기록된 토큰

293* `cache_read_input_tokens`: 캐시에서 읽은 토큰

294 

295`used_percentage` 필드는 입력 토큰만으로 계산됩니다: `input_tokens + cache_creation_input_tokens + cache_read_input_tokens`. `output_tokens`는 포함하지 않습니다.

296 

297`current_usage`에서 컨텍스트 백분율을 수동으로 계산하는 경우 동일한 입력 전용 공식을 사용하여 `used_percentage`와 일치시킵니다.

298 

299`current_usage` 객체는 세션의 첫 번째 API 호출 전에 `null`입니다.

300 

301## 예제

302 

303이 예제는 일반적인 상태 표시줄 패턴을 보여줍니다. 예제를 사용하려면:

304 

3051. 스크립트를 `~/.claude/statusline.sh`(또는 `.py`/`.js`)와 같은 파일에 저장합니다

3062. 실행 가능하게 만듭니다: `chmod +x ~/.claude/statusline.sh`

3073. [설정](#manually-configure-a-status-line)에 경로를 추가합니다

308 

309Bash 예제는 [`jq`](https://jqlang.github.io/jq/)를 사용하여 JSON을 구문 분석합니다. Python 및 Node.js는 기본 제공 JSON 구문 분석을 가집니다.

310 

311### 컨텍스트 윈도우 사용량

312 

313현재 모델과 컨텍스트 윈도우 사용량을 시각적 진행률 표시줄과 함께 표시합니다. 각 스크립트는 stdin에서 JSON을 읽고, `used_percentage` 필드를 추출하고, 채워진 블록(▓)이 사용량을 나타내는 10자 막대를 구축합니다:

314 

315<Frame>

316 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-context-window-usage.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=15b58ab3602f036939145dde3165c6f7" alt="모델 이름과 백분율이 있는 진행률 표시줄을 표시하는 상태 표시줄" width="448" height="152" data-path="images/statusline-context-window-usage.png" />

317</Frame>

318 

319<CodeGroup>

320 ```bash Bash theme={null}

321 #!/bin/bash

322 # stdin의 모든 내용을 변수로 읽기

323 input=$(cat)

324 

325 # jq로 필드 추출, "// 0"은 null에 대한 폴백 제공

326 MODEL=$(echo "$input" | jq -r '.model.display_name')

327 PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)

328 

329 # 진행률 표시줄 구축: printf -v는 공백을 만들고,

330 # ${var// /▓}는 각 공백을 블록 문자로 바꿈

331 BAR_WIDTH=10

332 FILLED=$((PCT * BAR_WIDTH / 100))

333 EMPTY=$((BAR_WIDTH - FILLED))

334 BAR=""

335 [ "$FILLED" -gt 0 ] && printf -v FILL "%${FILLED}s" && BAR="${FILL// /▓}"

336 [ "$EMPTY" -gt 0 ] && printf -v PAD "%${EMPTY}s" && BAR="${BAR}${PAD// /░}"

337 

338 echo "[$MODEL] $BAR $PCT%"

339 ```

340 

341 ```python Python theme={null}

342 #!/usr/bin/env python3

343 import json, sys

344 

345 # json.load는 한 단계로 stdin을 읽고 구문 분석합니다

346 data = json.load(sys.stdin)

347 model = data['model']['display_name']

348 # "or 0"은 null 값을 처리합니다

349 pct = int(data.get('context_window', {}).get('used_percentage', 0) or 0)

350 

351 # 문자열 곱셈이 막대를 구축합니다

352 filled = pct * 10 // 100

353 bar = '▓' * filled + '░' * (10 - filled)

354 

355 print(f"[{model}] {bar} {pct}%")

356 ```

357 

358 ```javascript Node.js theme={null}

359 #!/usr/bin/env node

360 // Node.js는 이벤트로 stdin을 비동기적으로 읽습니다

361 let input = '';

362 process.stdin.on('data', chunk => input += chunk);

363 process.stdin.on('end', () => {

364 const data = JSON.parse(input);

365 const model = data.model.display_name;

366 // 선택적 체이닝(?.)은 null 필드를 안전하게 처리합니다

367 const pct = Math.floor(data.context_window?.used_percentage || 0);

368 

369 // String.repeat()이 막대를 구축합니다

370 const filled = Math.floor(pct * 10 / 100);

371 const bar = '▓'.repeat(filled) + '░'.repeat(10 - filled);

372 

373 console.log(`[${model}] ${bar} ${pct}%`);

374 });

375 ```

376</CodeGroup>

377 

378### 색상이 있는 git 상태

379 

380색상으로 구분된 스테이징 및 수정된 파일 표시기가 있는 git 브랜치를 표시합니다. 이 스크립트는 터미널 색상에 [ANSI 이스케이프 코드](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors)를 사용합니다: `\033[32m`은 녹색, `\033[33m`은 노란색, `\033[0m`은 기본값으로 재설정합니다.

381 

382<Frame>

383 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-git-context.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=e656f34f90d1d9a1d0e220988914345f" alt="모델, 디렉토리, git 브랜치 및 스테이징 및 수정된 파일에 대한 색상 표시기를 표시하는 상태 표시줄" width="742" height="178" data-path="images/statusline-git-context.png" />

384</Frame>

385 

386각 스크립트는 현재 디렉토리가 git 저장소인지 확인하고, 스테이징 및 수정된 파일을 계산하고, 색상으로 구분된 표시기를 표시합니다:

387 

388<CodeGroup>

389 ```bash Bash theme={null}

390 #!/bin/bash

391 input=$(cat)

392 

393 MODEL=$(echo "$input" | jq -r '.model.display_name')

394 DIR=$(echo "$input" | jq -r '.workspace.current_dir')

395 

396 GREEN='\033[32m'

397 YELLOW='\033[33m'

398 RESET='\033[0m'

399 

400 if git rev-parse --git-dir > /dev/null 2>&1; then

401 BRANCH=$(git branch --show-current 2>/dev/null)

402 STAGED=$(git diff --cached --numstat 2>/dev/null | wc -l | tr -d ' ')

403 MODIFIED=$(git diff --numstat 2>/dev/null | wc -l | tr -d ' ')

404 

405 GIT_STATUS=""

406 [ "$STAGED" -gt 0 ] && GIT_STATUS="${GREEN}+${STAGED}${RESET}"

407 [ "$MODIFIED" -gt 0 ] && GIT_STATUS="${GIT_STATUS}${YELLOW}~${MODIFIED}${RESET}"

408 

409 echo -e "[$MODEL] 📁 ${DIR##*/} | 🌿 $BRANCH $GIT_STATUS"

410 else

411 echo "[$MODEL] 📁 ${DIR##*/}"

412 fi

413 ```

414 

415 ```python Python theme={null}

416 #!/usr/bin/env python3

417 import json, sys, subprocess, os

418 

419 data = json.load(sys.stdin)

420 model = data['model']['display_name']

421 directory = os.path.basename(data['workspace']['current_dir'])

422 

423 GREEN, YELLOW, RESET = '\033[32m', '\033[33m', '\033[0m'

424 

425 try:

426 subprocess.check_output(['git', 'rev-parse', '--git-dir'], stderr=subprocess.DEVNULL)

427 branch = subprocess.check_output(['git', 'branch', '--show-current'], text=True).strip()

428 staged_output = subprocess.check_output(['git', 'diff', '--cached', '--numstat'], text=True).strip()

429 modified_output = subprocess.check_output(['git', 'diff', '--numstat'], text=True).strip()

430 staged = len(staged_output.split('\n')) if staged_output else 0

431 modified = len(modified_output.split('\n')) if modified_output else 0

432 

433 git_status = f"{GREEN}+{staged}{RESET}" if staged else ""

434 git_status += f"{YELLOW}~{modified}{RESET}" if modified else ""

435 

436 print(f"[{model}] 📁 {directory} | 🌿 {branch} {git_status}")

437 except:

438 print(f"[{model}] 📁 {directory}")

439 ```

440 

441 ```javascript Node.js theme={null}

442 #!/usr/bin/env node

443 const { execSync } = require('child_process');

444 const path = require('path');

445 

446 let input = '';

447 process.stdin.on('data', chunk => input += chunk);

448 process.stdin.on('end', () => {

449 const data = JSON.parse(input);

450 const model = data.model.display_name;

451 const dir = path.basename(data.workspace.current_dir);

452 

453 const GREEN = '\x1b[32m', YELLOW = '\x1b[33m', RESET = '\x1b[0m';

454 

455 try {

456 execSync('git rev-parse --git-dir', { stdio: 'ignore' });

457 const branch = execSync('git branch --show-current', { encoding: 'utf8' }).trim();

458 const staged = execSync('git diff --cached --numstat', { encoding: 'utf8' }).trim().split('\n').filter(Boolean).length;

459 const modified = execSync('git diff --numstat', { encoding: 'utf8' }).trim().split('\n').filter(Boolean).length;

460 

461 let gitStatus = staged ? `${GREEN}+${staged}${RESET}` : '';

462 gitStatus += modified ? `${YELLOW}~${modified}${RESET}` : '';

463 

464 console.log(`[${model}] 📁 ${dir} | 🌿 ${branch} ${gitStatus}`);

465 } catch {

466 console.log(`[${model}] 📁 ${dir}`);

467 }

468 });

469 ```

470</CodeGroup>

471 

472### 비용 및 기간 추적

473 

474세션의 API 비용 및 경과 시간을 추적합니다. `cost.total_cost_usd` 필드는 현재 세션의 모든 API 호출 비용을 누적합니다. `cost.total_duration_ms` 필드는 세션 시작 이후의 총 경과 시간을 측정하는 반면, `cost.total_api_duration_ms`는 API 응답 대기에 소비된 시간만 추적합니다.

475 

476각 스크립트는 비용을 통화로 형식화하고 밀리초를 분과 초로 변환합니다:

477 

478<Frame>

479 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-cost-tracking.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=e3444a51fe6f3440c134bd5f1f08ad29" alt="모델 이름, 세션 비용 및 기간을 표시하는 상태 표시줄" width="588" height="180" data-path="images/statusline-cost-tracking.png" />

480</Frame>

481 

482<CodeGroup>

483 ```bash Bash theme={null}

484 #!/bin/bash

485 input=$(cat)

486 

487 MODEL=$(echo "$input" | jq -r '.model.display_name')

488 COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')

489 DURATION_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0')

490 

491 COST_FMT=$(printf '$%.2f' "$COST")

492 DURATION_SEC=$((DURATION_MS / 1000))

493 MINS=$((DURATION_SEC / 60))

494 SECS=$((DURATION_SEC % 60))

495 

496 echo "[$MODEL] 💰 $COST_FMT | ⏱️ ${MINS}m ${SECS}s"

497 ```

498 

499 ```python Python theme={null}

500 #!/usr/bin/env python3

501 import json, sys

502 

503 data = json.load(sys.stdin)

504 model = data['model']['display_name']

505 cost = data.get('cost', {}).get('total_cost_usd', 0) or 0

506 duration_ms = data.get('cost', {}).get('total_duration_ms', 0) or 0

507 

508 duration_sec = duration_ms // 1000

509 mins, secs = duration_sec // 60, duration_sec % 60

510 

511 print(f"[{model}] 💰 ${cost:.2f} | ⏱️ {mins}m {secs}s")

512 ```

513 

514 ```javascript Node.js theme={null}

515 #!/usr/bin/env node

516 let input = '';

517 process.stdin.on('data', chunk => input += chunk);

518 process.stdin.on('end', () => {

519 const data = JSON.parse(input);

520 const model = data.model.display_name;

521 const cost = data.cost?.total_cost_usd || 0;

522 const durationMs = data.cost?.total_duration_ms || 0;

523 

524 const durationSec = Math.floor(durationMs / 1000);

525 const mins = Math.floor(durationSec / 60);

526 const secs = durationSec % 60;

527 

528 console.log(`[${model}] 💰 $${cost.toFixed(2)} | ⏱️ ${mins}m ${secs}s`);

529 });

530 ```

531</CodeGroup>

532 

533### 여러 줄 표시

534 

535스크립트는 여러 줄을 출력하여 더 풍부한 디스플레이를 만들 수 있습니다. 각 `echo` 문은 상태 영역에서 별도의 행을 생성합니다.

536 

537<Frame>

538 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-multiline.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=60f11387658acc9ff75158ae85f2ac87" alt="첫 번째 줄에 모델 이름, 디렉토리, git 브랜치를 표시하고 두 번째 줄에 컨텍스트 사용량 진행률 표시줄, 비용 및 기간을 표시하는 다중 줄 상태 표시줄" width="776" height="212" data-path="images/statusline-multiline.png" />

539</Frame>

540 

541이 예제는 여러 기법을 결합합니다: 임계값 기반 색상(70% 미만일 때 녹색, 70-89% 노란색, 90%+ 빨간색), 진행률 표시줄 및 git 브랜치 정보. 각 `print` 또는 `echo` 문은 별도의 행을 만듭니다:

542 

543<CodeGroup>

544 ```bash Bash theme={null}

545 #!/bin/bash

546 input=$(cat)

547 

548 MODEL=$(echo "$input" | jq -r '.model.display_name')

549 DIR=$(echo "$input" | jq -r '.workspace.current_dir')

550 COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')

551 PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)

552 DURATION_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0')

553 

554 CYAN='\033[36m'; GREEN='\033[32m'; YELLOW='\033[33m'; RED='\033[31m'; RESET='\033[0m'

555 

556 # 컨텍스트 사용량에 따라 막대 색상 선택

557 if [ "$PCT" -ge 90 ]; then BAR_COLOR="$RED"

558 elif [ "$PCT" -ge 70 ]; then BAR_COLOR="$YELLOW"

559 else BAR_COLOR="$GREEN"; fi

560 

561 FILLED=$((PCT / 10)); EMPTY=$((10 - FILLED))

562 printf -v FILL "%${FILLED}s"; printf -v PAD "%${EMPTY}s"

563 BAR="${FILL// /█}${PAD// /░}"

564 

565 MINS=$((DURATION_MS / 60000)); SECS=$(((DURATION_MS % 60000) / 1000))

566 

567 BRANCH=""

568 git rev-parse --git-dir > /dev/null 2>&1 && BRANCH=" | 🌿 $(git branch --show-current 2>/dev/null)"

569 

570 echo -e "${CYAN}[$MODEL]${RESET} 📁 ${DIR##*/}$BRANCH"

571 COST_FMT=$(printf '$%.2f' "$COST")

572 echo -e "${BAR_COLOR}${BAR}${RESET} ${PCT}% | ${YELLOW}${COST_FMT}${RESET} | ⏱️ ${MINS}m ${SECS}s"

573 ```

574 

575 ```python Python theme={null}

576 #!/usr/bin/env python3

577 import json, sys, subprocess, os

578 

579 data = json.load(sys.stdin)

580 model = data['model']['display_name']

581 directory = os.path.basename(data['workspace']['current_dir'])

582 cost = data.get('cost', {}).get('total_cost_usd', 0) or 0

583 pct = int(data.get('context_window', {}).get('used_percentage', 0) or 0)

584 duration_ms = data.get('cost', {}).get('total_duration_ms', 0) or 0

585 

586 CYAN, GREEN, YELLOW, RED, RESET = '\033[36m', '\033[32m', '\033[33m', '\033[31m', '\033[0m'

587 

588 bar_color = RED if pct >= 90 else YELLOW if pct >= 70 else GREEN

589 filled = pct // 10

590 bar = '█' * filled + '░' * (10 - filled)

591 

592 mins, secs = duration_ms // 60000, (duration_ms % 60000) // 1000

593 

594 try:

595 branch = subprocess.check_output(['git', 'branch', '--show-current'], text=True, stderr=subprocess.DEVNULL).strip()

596 branch = f" | 🌿 {branch}" if branch else ""

597 except:

598 branch = ""

599 

600 print(f"{CYAN}[{model}]{RESET} 📁 {directory}{branch}")

601 print(f"{bar_color}{bar}{RESET} {pct}% | {YELLOW}${cost:.2f}{RESET} | ⏱️ {mins}m {secs}s")

602 ```

603 

604 ```javascript Node.js theme={null}

605 #!/usr/bin/env node

606 const { execSync } = require('child_process');

607 const path = require('path');

608 

609 let input = '';

610 process.stdin.on('data', chunk => input += chunk);

611 process.stdin.on('end', () => {

612 const data = JSON.parse(input);

613 const model = data.model.display_name;

614 const dir = path.basename(data.workspace.current_dir);

615 const cost = data.cost?.total_cost_usd || 0;

616 const pct = Math.floor(data.context_window?.used_percentage || 0);

617 const durationMs = data.cost?.total_duration_ms || 0;

618 

619 const CYAN = '\x1b[36m', GREEN = '\x1b[32m', YELLOW = '\x1b[33m', RED = '\x1b[31m', RESET = '\x1b[0m';

620 

621 const barColor = pct >= 90 ? RED : pct >= 70 ? YELLOW : GREEN;

622 const filled = Math.floor(pct / 10);

623 const bar = '█'.repeat(filled) + '░'.repeat(10 - filled);

624 

625 const mins = Math.floor(durationMs / 60000);

626 const secs = Math.floor((durationMs % 60000) / 1000);

627 

628 let branch = '';

629 try {

630 branch = execSync('git branch --show-current', { encoding: 'utf8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();

631 branch = branch ? ` | 🌿 ${branch}` : '';

632 } catch {}

633 

634 console.log(`${CYAN}[${model}]${RESET} 📁 ${dir}${branch}`);

635 console.log(`${barColor}${bar}${RESET} ${pct}% | ${YELLOW}$${cost.toFixed(2)}${RESET} | ⏱️ ${mins}m ${secs}s`);

636 });

637 ```

638</CodeGroup>

639 

640### 클릭 가능한 링크

641 

642이 예제는 GitHub 저장소에 대한 클릭 가능한 링크를 만듭니다. git 원격 URL을 읽고, `sed`를 사용하여 SSH 형식을 HTTPS로 변환하고, 저장소 이름을 OSC 8 이스케이프 코드로 래핑합니다. Cmd(macOS) 또는 Ctrl(Windows/Linux)을 누르고 클릭하여 브라우저에서 링크를 엽니다.

643 

644<Frame>

645 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-links.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=4bcc6e7deb7cf52f41ab85a219b52661" alt="GitHub 저장소에 대한 클릭 가능한 링크를 표시하는 상태 표시줄" width="726" height="198" data-path="images/statusline-links.png" />

646</Frame>

647 

648각 스크립트는 git 원격 URL을 가져오고, SSH 형식을 HTTPS로 변환하고, 저장소 이름을 OSC 8 이스케이프 코드로 래핑합니다. Bash 버전은 `printf '%b'`를 사용하여 다양한 셸에서 백슬래시 이스케이프를 더 안정적으로 해석합니다:

649 

650<CodeGroup>

651 ```bash Bash theme={null}

652 #!/bin/bash

653 input=$(cat)

654 

655 MODEL=$(echo "$input" | jq -r '.model.display_name')

656 

657 # git SSH URL을 HTTPS로 변환

658 REMOTE=$(git remote get-url origin 2>/dev/null | sed 's/git@github.com:/https:\/\/github.com\//' | sed 's/\.git$//')

659 

660 if [ -n "$REMOTE" ]; then

661 REPO_NAME=$(basename "$REMOTE")

662 # OSC 8 형식: \e]8;;URL\a then TEXT then \e]8;;\a

663 # printf %b는 셸 전체에서 이스케이프 시퀀스를 안정적으로 해석합니다

664 printf '%b' "[$MODEL] 🔗 \e]8;;${REMOTE}\a${REPO_NAME}\e]8;;\a\n"

665 else

666 echo "[$MODEL]"

667 fi

668 ```

669 

670 ```python Python theme={null}

671 #!/usr/bin/env python3

672 import json, sys, subprocess, re, os

673 

674 data = json.load(sys.stdin)

675 model = data['model']['display_name']

676 

677 # git 원격 URL 가져오기

678 try:

679 remote = subprocess.check_output(

680 ['git', 'remote', 'get-url', 'origin'],

681 stderr=subprocess.DEVNULL, text=True

682 ).strip()

683 # SSH를 HTTPS 형식으로 변환

684 remote = re.sub(r'^git@github\.com:', 'https://github.com/', remote)

685 remote = re.sub(r'\.git$', '', remote)

686 repo_name = os.path.basename(remote)

687 # OSC 8 이스케이프 시퀀스

688 link = f"\033]8;;{remote}\a{repo_name}\033]8;;\a"

689 print(f"[{model}] 🔗 {link}")

690 except:

691 print(f"[{model}]")

692 ```

693 

694 ```javascript Node.js theme={null}

695 #!/usr/bin/env node

696 const { execSync } = require('child_process');

697 const path = require('path');

698 

699 let input = '';

700 process.stdin.on('data', chunk => input += chunk);

701 process.stdin.on('end', () => {

702 const data = JSON.parse(input);

703 const model = data.model.display_name;

704 

705 try {

706 let remote = execSync('git remote get-url origin', { encoding: 'utf8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();

707 // SSH를 HTTPS 형식으로 변환

708 remote = remote.replace(/^git@github\.com:/, 'https://github.com/').replace(/\.git$/, '');

709 const repoName = path.basename(remote);

710 // OSC 8 이스케이프 시퀀스

711 const link = `\x1b]8;;${remote}\x07${repoName}\x1b]8;;\x07`;

712 console.log(`[${model}] 🔗 ${link}`);

713 } catch {

714 console.log(`[${model}]`);

715 }

716 });

717 ```

718</CodeGroup>

719 

720### 속도 제한 사용량

721 

722Claude.ai 구독 속도 제한 사용량을 상태 표시줄에 표시합니다. `rate_limits` 객체에는 `five_hour`(5시간 롤링 윈도우) 및 `seven_day`(주간) 윈도우가 포함됩니다. 각 윈도우는 `used_percentage`(0-100) 및 `resets_at`(윈도우가 재설정되는 Unix epoch 초)를 제공합니다.

723 

724이 필드는 Claude.ai 구독자(Pro/Max)의 경우 첫 번째 API 응답 후에만 나타납니다. 각 스크립트는 부재한 필드를 우아하게 처리합니다:

725 

726<CodeGroup>

727 ```bash Bash theme={null}

728 #!/bin/bash

729 input=$(cat)

730 

731 MODEL=$(echo "$input" | jq -r '.model.display_name')

732 # "// empty"는 rate_limits이 없을 때 출력을 생성하지 않습니다

733 FIVE_H=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')

734 WEEK=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty')

735 

736 LIMITS=""

737 [ -n "$FIVE_H" ] && LIMITS="5h: $(printf '%.0f' "$FIVE_H")%"

738 [ -n "$WEEK" ] && LIMITS="${LIMITS:+$LIMITS }7d: $(printf '%.0f' "$WEEK")%"

739 

740 [ -n "$LIMITS" ] && echo "[$MODEL] | $LIMITS" || echo "[$MODEL]"

741 ```

742 

743 ```python Python theme={null}

744 #!/usr/bin/env python3

745 import json, sys

746 

747 data = json.load(sys.stdin)

748 model = data['model']['display_name']

749 

750 parts = []

751 rate = data.get('rate_limits', {})

752 five_h = rate.get('five_hour', {}).get('used_percentage')

753 week = rate.get('seven_day', {}).get('used_percentage')

754 

755 if five_h is not None:

756 parts.append(f"5h: {five_h:.0f}%")

757 if week is not None:

758 parts.append(f"7d: {week:.0f}%")

759 

760 if parts:

761 print(f"[{model}] | {' '.join(parts)}")

762 else:

763 print(f"[{model}]")

764 ```

765 

766 ```javascript Node.js theme={null}

767 #!/usr/bin/env node

768 let input = '';

769 process.stdin.on('data', chunk => input += chunk);

770 process.stdin.on('end', () => {

771 const data = JSON.parse(input);

772 const model = data.model.display_name;

773 

774 const parts = [];

775 const fiveH = data.rate_limits?.five_hour?.used_percentage;

776 const week = data.rate_limits?.seven_day?.used_percentage;

777 

778 if (fiveH != null) parts.push(`5h: ${Math.round(fiveH)}%`);

779 if (week != null) parts.push(`7d: ${Math.round(week)}%`);

780 

781 console.log(parts.length ? `[${model}] | ${parts.join(' ')}` : `[${model}]`);

782 });

783 ```

784</CodeGroup>

785 

786### 비용이 많이 드는 작업 캐싱

787 

788상태 표시줄 스크립트는 활성 세션 중에 자주 실행됩니다. `git status` 또는 `git diff`와 같은 명령은 특히 큰 저장소에서 느릴 수 있습니다. 이 예제는 git 정보를 임시 파일에 캐싱하고 5초마다만 새로 고칩니다.

789 

790캐시 파일 이름은 세션 내 상태 표시줄 호출 간에 안정적이어야 하지만 동시 세션이 서로의 캐시된 git 상태를 읽지 않도록 세션 간에 고유해야 합니다. `$$`, `os.getpid()` 또는 `process.pid`와 같은 프로세스 기반 식별자는 모든 호출에서 변경되고 캐시를 무효화합니다. 대신 JSON 입력의 `session_id`를 사용하세요: 세션의 수명 동안 안정적이고 세션당 고유합니다.

791 

792각 스크립트는 git 명령을 실행하기 전에 캐시 파일이 누락되었거나 5초보다 오래되었는지 확인합니다:

793 

794<CodeGroup>

795 ```bash Bash theme={null}

796 #!/bin/bash

797 input=$(cat)

798 

799 MODEL=$(echo "$input" | jq -r '.model.display_name')

800 DIR=$(echo "$input" | jq -r '.workspace.current_dir')

801 SESSION_ID=$(echo "$input" | jq -r '.session_id')

802 

803 CACHE_FILE="/tmp/statusline-git-cache-$SESSION_ID"

804 CACHE_MAX_AGE=5 # seconds

805 

806 cache_is_stale() {

807 [ ! -f "$CACHE_FILE" ] || \

808 # stat -f %m은 macOS, stat -c %Y는 Linux

809 [ $(($(date +%s) - $(stat -f %m "$CACHE_FILE" 2>/dev/null || stat -c %Y "$CACHE_FILE" 2>/dev/null || echo 0))) -gt $CACHE_MAX_AGE ]

810 }

811 

812 if cache_is_stale; then

813 if git rev-parse --git-dir > /dev/null 2>&1; then

814 BRANCH=$(git branch --show-current 2>/dev/null)

815 STAGED=$(git diff --cached --numstat 2>/dev/null | wc -l | tr -d ' ')

816 MODIFIED=$(git diff --numstat 2>/dev/null | wc -l | tr -d ' ')

817 echo "$BRANCH|$STAGED|$MODIFIED" > "$CACHE_FILE"

818 else

819 echo "||" > "$CACHE_FILE"

820 fi

821 fi

822 

823 IFS='|' read -r BRANCH STAGED MODIFIED < "$CACHE_FILE"

824 

825 if [ -n "$BRANCH" ]; then

826 echo "[$MODEL] 📁 ${DIR##*/} | 🌿 $BRANCH +$STAGED ~$MODIFIED"

827 else

828 echo "[$MODEL] 📁 ${DIR##*/}"

829 fi

830 ```

831 

832 ```python Python theme={null}

833 #!/usr/bin/env python3

834 import json, sys, subprocess, os, time

835 

836 data = json.load(sys.stdin)

837 model = data['model']['display_name']

838 directory = os.path.basename(data['workspace']['current_dir'])

839 session_id = data['session_id']

840 

841 CACHE_FILE = f"/tmp/statusline-git-cache-{session_id}"

842 CACHE_MAX_AGE = 5 # seconds

843 

844 def cache_is_stale():

845 if not os.path.exists(CACHE_FILE):

846 return True

847 return time.time() - os.path.getmtime(CACHE_FILE) > CACHE_MAX_AGE

848 

849 if cache_is_stale():

850 try:

851 subprocess.check_output(['git', 'rev-parse', '--git-dir'], stderr=subprocess.DEVNULL)

852 branch = subprocess.check_output(['git', 'branch', '--show-current'], text=True).strip()

853 staged = subprocess.check_output(['git', 'diff', '--cached', '--numstat'], text=True).strip()

854 modified = subprocess.check_output(['git', 'diff', '--numstat'], text=True).strip()

855 staged_count = len(staged.split('\n')) if staged else 0

856 modified_count = len(modified.split('\n')) if modified else 0

857 with open(CACHE_FILE, 'w') as f:

858 f.write(f"{branch}|{staged_count}|{modified_count}")

859 except:

860 with open(CACHE_FILE, 'w') as f:

861 f.write("||")

862 

863 with open(CACHE_FILE) as f:

864 branch, staged, modified = f.read().strip().split('|')

865 

866 if branch:

867 print(f"[{model}] 📁 {directory} | 🌿 {branch} +{staged} ~{modified}")

868 else:

869 print(f"[{model}] 📁 {directory}")

870 ```

871 

872 ```javascript Node.js theme={null}

873 #!/usr/bin/env node

874 const { execSync } = require('child_process');

875 const fs = require('fs');

876 const path = require('path');

877 

878 let input = '';

879 process.stdin.on('data', chunk => input += chunk);

880 process.stdin.on('end', () => {

881 const data = JSON.parse(input);

882 const model = data.model.display_name;

883 const dir = path.basename(data.workspace.current_dir);

884 const sessionId = data.session_id;

885 

886 const CACHE_FILE = `/tmp/statusline-git-cache-${sessionId}`;

887 const CACHE_MAX_AGE = 5; // seconds

888 

889 const cacheIsStale = () => {

890 if (!fs.existsSync(CACHE_FILE)) return true;

891 return (Date.now() / 1000) - fs.statSync(CACHE_FILE).mtimeMs / 1000 > CACHE_MAX_AGE;

892 };

893 

894 if (cacheIsStale()) {

895 try {

896 execSync('git rev-parse --git-dir', { stdio: 'ignore' });

897 const branch = execSync('git branch --show-current', { encoding: 'utf8' }).trim();

898 const staged = execSync('git diff --cached --numstat', { encoding: 'utf8' }).trim().split('\n').filter(Boolean).length;

899 const modified = execSync('git diff --numstat', { encoding: 'utf8' }).trim().split('\n').filter(Boolean).length;

900 fs.writeFileSync(CACHE_FILE, `${branch}|${staged}|${modified}`);

901 } catch {

902 fs.writeFileSync(CACHE_FILE, '||');

903 }

904 }

905 

906 const [branch, staged, modified] = fs.readFileSync(CACHE_FILE, 'utf8').trim().split('|');

907 

908 if (branch) {

909 console.log(`[${model}] 📁 ${dir} | 🌿 ${branch} +${staged} ~${modified}`);

910 } else {

911 console.log(`[${model}] 📁 ${dir}`);

912 }

913 });

914 ```

915</CodeGroup>

916 

917### Windows 구성

918 

919Windows에서 Claude Code는 Git Bash가 설치되어 있을 때 Git Bash를 통해 상태 표시줄 명령을 실행하거나, Git Bash가 없을 때 PowerShell을 통해 실행합니다. PowerShell 스크립트를 상태 표시줄로 실행하려면 `powershell`을 통해 호출하세요. 이는 두 셸 모두에서 작동합니다:

920 

921<CodeGroup>

922 ```json settings.json theme={null}

923 {

924 "statusLine": {

925 "type": "command",

926 "command": "powershell -NoProfile -File C:/Users/username/.claude/statusline.ps1"

927 }

928 }

929 ```

930 

931 ```powershell statusline.ps1 theme={null}

932 $input_json = $input | Out-String | ConvertFrom-Json

933 $cwd = $input_json.cwd

934 $model = $input_json.model.display_name

935 $used = $input_json.context_window.used_percentage

936 $dirname = Split-Path $cwd -Leaf

937 

938 if ($used) {

939 Write-Host "$dirname [$model] ctx: $used%"

940 } else {

941 Write-Host "$dirname [$model]"

942 }

943 ```

944</CodeGroup>

945 

946또는 Git Bash가 설치되어 있을 때 Bash 스크립트를 직접 실행합니다:

947 

948<CodeGroup>

949 ```json settings.json theme={null}

950 {

951 "statusLine": {

952 "type": "command",

953 "command": "~/.claude/statusline.sh"

954 }

955 }

956 ```

957 

958 ```bash statusline.sh theme={null}

959 #!/usr/bin/env bash

960 input=$(cat)

961 cwd=$(echo "$input" | grep -o '"cwd":"[^"]*"' | cut -d'"' -f4)

962 model=$(echo "$input" | grep -o '"display_name":"[^"]*"' | cut -d'"' -f4)

963 dirname="${cwd##*[/\\]}"

964 echo "$dirname [$model]"

965 ```

966</CodeGroup>

967 

968## 서브에이전트 상태 표시줄

969 

970`subagentStatusLine` 설정은 [서브에이전트](/ko/sub-agents) 패널에 표시된 각 서브에이전트에 대한 사용자 정의 행 본문을 렌더링합니다. 기본 `name · description · token count` 행을 자신의 형식으로 바꾸는 데 사용합니다.

971 

972```json theme={null}

973{

974 "subagentStatusLine": {

975 "type": "command",

976 "command": "~/.claude/subagent-statusline.sh"

977 }

978}

979```

980 

981명령은 새로 고침 틱마다 한 번 실행되며 모든 표시 가능한 서브에이전트 행이 stdin의 단일 JSON 객체로 전달됩니다. 입력에는 [기본 훅 필드](/ko/hooks#common-input-fields)와 `columns`(사용 가능한 행 너비) 및 `tasks` 배열이 포함되며, 각 작업에는 `id`, `name`, `type`, `status`, `description`, `label`, `startTime`, `tokenCount`, `tokenSamples` 및 `cwd`가 있습니다.

982 

983재정의하려는 각 행에 대해 stdout에 한 줄의 JSON을 작성합니다: `{"id": "<task id>", "content": "<row body>"}`. `content` 문자열은 ANSI 색상 및 OSC 8 하이퍼링크를 포함하여 그대로 렌더링됩니다. 작업의 `id`를 생략하여 해당 행의 기본 렌더링을 유지합니다. 빈 `content` 문자열을 내보내 숨깁니다.

984 

985`statusLine`에 적용되는 동일한 신뢰 및 `disableAllHooks` 게이트가 여기에 적용됩니다. 플러그인은 [`settings.json`](/ko/plugins-reference#standard-plugin-layout)에서 기본 `subagentStatusLine`을 제공할 수 있습니다.

986 

987## 팁

988 

989* **모의 입력으로 테스트**: `echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/home/user/project"},"context_window":{"used_percentage":25},"session_id":"test-session-abc"}' | ./statusline.sh`

990* **출력을 짧게 유지**: 상태 표시줄의 너비가 제한되어 있으므로 긴 출력이 잘리거나 어색하게 줄 바꿈될 수 있습니다

991* **느린 작업 캐싱**: 스크립트는 활성 세션 중에 자주 실행되므로 `git status`와 같은 명령이 지연을 유발할 수 있습니다. 이를 처리하는 방법은 [캐싱 예제](#cache-expensive-operations)를 참조하세요.

992 

993[ccstatusline](https://github.com/sirmalloc/ccstatusline) 및 [starship-claude](https://github.com/martinemde/starship-claude)와 같은 커뮤니티 프로젝트는 테마 및 추가 기능이 있는 사전 구축된 구성을 제공합니다.

994 

995## 문제 해결

996 

997**상태 표시줄이 나타나지 않음**

998 

999* 스크립트가 실행 가능한지 확인합니다: `chmod +x ~/.claude/statusline.sh`

1000* 스크립트가 stderr가 아닌 stdout으로 출력하는지 확인합니다

1001* 스크립트를 수동으로 실행하여 출력을 생성하는지 확인합니다

1002* 설정에서 `disableAllHooks`가 `true`로 설정되어 있으면 상태 표시줄도 비활성화됩니다. 이 설정을 제거하거나 `false`로 설정하여 다시 활성화합니다.

1003* `claude --debug`를 실행하여 세션의 첫 번째 상태 표시줄 호출에서 종료 코드 및 stderr를 기록합니다

1004* Claude에 설정 파일을 읽고 `statusLine` 명령을 직접 실행하도록 요청하여 오류를 표시합니다

1005 

1006**상태 표시줄이 `--` 또는 빈 값을 표시함**

1007 

1008* 필드는 첫 번째 API 응답이 완료되기 전에 `null`일 수 있습니다

1009* jq의 `// 0`과 같은 폴백으로 스크립트에서 null 값을 처리합니다

1010* 여러 메시지 후에도 값이 비어 있으면 Claude Code를 다시 시작합니다

1011 

1012**컨텍스트 백분율이 예상치 못한 값을 표시함**

1013 

1014* 누적 합계 대신 정확한 컨텍스트 상태를 위해 `used_percentage`를 사용합니다

1015* `total_input_tokens` 및 `total_output_tokens`는 세션 전체에 누적되며 컨텍스트 윈도우 크기를 초과할 수 있습니다

1016* 각각이 계산되는 시기로 인해 컨텍스트 백분율이 `/context` 출력과 다를 수 있습니다

1017 

1018**OSC 8 링크를 클릭할 수 없음**

1019 

1020* 터미널이 OSC 8 하이퍼링크를 지원하는지 확인합니다(iTerm2, Kitty, WezTerm)

1021 

1022* Terminal.app은 클릭 가능한 링크를 지원하지 않습니다

1023 

1024* 링크 텍스트가 나타나지만 클릭할 수 없으면 Claude Code가 터미널에서 하이퍼링크 지원을 감지하지 못했을 수 있습니다. 이는 자동 감지 목록에 없는 Windows Terminal 및 기타 에뮬레이터에 영향을 미칩니다. Claude Code를 시작하기 전에 `FORCE_HYPERLINK` 환경 변수를 설정하여 감지를 재정의합니다:

1025 

1026 ```bash theme={null}

1027 FORCE_HYPERLINK=1 claude

1028 ```

1029 

1030 PowerShell에서는 먼저 현재 세션에서 변수를 설정합니다:

1031 

1032 ```powershell theme={null}

1033 $env:FORCE_HYPERLINK = "1"; claude

1034 ```

1035 

1036* SSH 및 tmux 세션은 구성에 따라 OSC 시퀀스를 제거할 수 있습니다

1037 

1038* `\e]8;;`과 같은 리터럴 텍스트로 이스케이프 시퀀스가 나타나면 `echo -e` 대신 `printf '%b'`를 사용하여 더 안정적인 이스케이프 처리를 합니다

1039 

1040**이스케이프 시퀀스로 인한 디스플레이 결함**

1041 

1042* 복잡한 이스케이프 시퀀스(ANSI 색상, OSC 8 링크)는 다른 UI 업데이트와 겹치면 가끔 손상된 출력을 유발할 수 있습니다

1043* 손상된 텍스트가 보이면 스크립트를 일반 텍스트 출력으로 단순화해 봅니다

1044* 이스케이프 코드가 있는 다중 줄 상태 표시줄은 일반 텍스트 단일 줄보다 렌더링 문제가 더 발생하기 쉽습니다

1045 

1046**워크스페이스 신뢰 필요**

1047 

1048* 상태 표시줄 명령은 현재 디렉토리에 대한 워크스페이스 신뢰 대화를 수락한 경우에만 실행됩니다. `statusLine`이 셸 명령을 실행하므로 훅 및 기타 셸 실행 설정과 동일한 신뢰 수락이 필요합니다.

1049* 신뢰가 수락되지 않으면 상태 표시줄 출력 대신 `statusline skipped · restart to fix` 알림이 표시됩니다. Claude Code를 다시 시작하고 신뢰 프롬프트를 수락하여 활성화합니다.

1050 

1051**스크립트 오류 또는 중단**

1052 

1053* 0이 아닌 코드로 종료되거나 출력을 생성하지 않는 스크립트는 상태 표시줄을 공백으로 만듭니다

1054* 느린 스크립트는 완료될 때까지 상태 표시줄이 업데이트되지 않도록 차단합니다. 오래된 출력을 피하려면 스크립트를 빠르게 유지합니다.

1055* 느린 스크립트가 실행 중인 동안 새 업데이트가 트리거되면 진행 중인 스크립트가 취소됩니다

1056* 구성하기 전에 모의 입력으로 스크립트를 독립적으로 테스트합니다

1057 

1058**알림이 상태 표시줄 행을 공유함**

1059 

1060* MCP 서버 오류 및 자동 업데이트와 같은 시스템 알림은 상태 표시줄과 동일한 행의 오른쪽에 표시됩니다. 컨텍스트 부족 경고와 같은 일시적 알림도 이 영역을 순환합니다.

1061* 자세한 모드를 활성화하면 이 영역에 토큰 카운터가 추가됩니다

1062* 좁은 터미널에서 이러한 알림이 상태 표시줄 출력을 자를 수 있습니다

sub-agents.md +1009 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 사용자 정의 subagent 만들기

6 

7> Claude Code에서 작업별 워크플로우 및 향상된 컨텍스트 관리를 위한 특화된 AI subagent를 만들고 사용합니다.

8 

9Subagent는 특정 유형의 작업을 처리하는 특화된 AI 어시스턴트입니다. 부작업이 검색 결과, 로그 또는 다시 참조하지 않을 파일 콘텐츠로 주 대화를 넘칠 때 하나를 사용하세요: subagent는 자신의 컨텍스트에서 해당 작업을 수행하고 요약만 반환합니다. 동일한 지침으로 동일한 종류의 워커를 계속 생성할 때 사용자 정의 subagent를 정의합니다.

10 

11각 subagent는 자체 컨텍스트 윈도우에서 실행되며 사용자 정의 시스템 프롬프트, 특정 도구 액세스 및 독립적인 권한을 가집니다. Claude가 subagent의 설명과 일치하는 작업을 만나면 해당 subagent에 위임하고, subagent는 독립적으로 작동하여 결과를 반환합니다. 실제로 컨텍스트 절감을 확인하려면 [컨텍스트 윈도우 시각화](/ko/context-window)에서 subagent가 자신의 별도 윈도우에서 연구를 처리하는 세션을 안내합니다.

12 

13<Note>

14 여러 에이전트가 병렬로 작동하고 서로 통신해야 하는 경우 [agent teams](/ko/agent-teams)를 참조하세요. Subagent는 단일 세션 내에서 작동하고, agent team은 별도 세션 간에 조정합니다.

15</Note>

16 

17Subagent는 다음을 도와줍니다:

18 

19* **컨텍스트 보존** - 탐색 및 구현을 주 대화에서 분리하여 유지

20* **제약 조건 적용** - subagent가 사용할 수 있는 도구 제한

21* **구성 재사용** - 사용자 수준 subagent를 통해 프로젝트 간 구성 재사용

22* **동작 특화** - 특정 도메인을 위한 집중된 시스템 프롬프트

23* **비용 제어** - Haiku와 같은 더 빠르고 저렴한 모델로 작업 라우팅

24 

25Claude는 각 subagent의 설명을 사용하여 작업을 위임할 시기를 결정합니다. Subagent를 만들 때 Claude가 언제 사용할지 알 수 있도록 명확한 설명을 작성하세요.

26 

27Claude Code에는 **Explore**, **Plan**, **general-purpose**와 같은 여러 내장 subagent가 포함되어 있습니다. 특정 작업을 처리하기 위해 사용자 정의 subagent를 만들 수도 있습니다. 이 페이지에서는 다음을 다룹니다:

28 

29* [내장 subagent](#built-in-subagents)

30* [자신의 subagent를 만드는 방법](#quickstart-create-your-first-subagent)

31* [전체 구성 옵션](#configure-subagents)

32* [subagent 작업 패턴](#work-with-subagents)

33* [포크된 subagent](#fork-the-current-conversation)

34* [예제 subagent](#example-subagents)

35 

36## 내장 subagent

37 

38Claude Code에는 Claude가 적절할 때 자동으로 사용하는 내장 subagent가 포함되어 있습니다. 각각은 추가 도구 제한이 있는 부모 대화의 권한을 상속합니다.

39 

40<Tabs>

41 <Tab title="Explore">

42 코드베이스 검색 및 분석에 최적화된 빠른 읽기 전용 에이전트입니다.

43 

44 * **모델**: Haiku (빠름, 낮은 지연시간)

45 * **도구**: 읽기 전용 도구 (Write 및 Edit 도구에 대한 액세스 거부)

46 * **목적**: 파일 검색, 코드 검색, 코드베이스 탐색

47 

48 Claude는 변경 없이 코드베이스를 검색하거나 이해해야 할 때 Explore에 위임합니다. 이렇게 하면 탐색 결과가 주 대화 컨텍스트에서 벗어납니다.

49 

50 Explore를 호출할 때 Claude는 철저함 수준을 지정합니다: 대상 조회의 경우 **quick**, 균형 잡힌 탐색의 경우 **medium**, 포괄적인 분석의 경우 **very thorough**.

51 </Tab>

52 

53 <Tab title="Plan">

54 [plan mode](/ko/common-workflows#use-plan-mode-for-safe-code-analysis) 중에 계획을 제시하기 전에 컨텍스트를 수집하는 데 사용되는 연구 에이전트입니다.

55 

56 * **모델**: 주 대화에서 상속

57 * **도구**: 읽기 전용 도구 (Write 및 Edit 도구에 대한 액세스 거부)

58 * **목적**: 계획을 위한 코드베이스 연구

59 

60 plan mode에 있고 Claude가 코드베이스를 이해해야 할 때 연구를 Plan subagent에 위임합니다. 이렇게 하면 무한 중첩을 방지하면서(subagent는 다른 subagent를 생성할 수 없음) 필요한 컨텍스트를 수집합니다.

61 </Tab>

62 

63 <Tab title="General-purpose">

64 탐색과 작업 모두를 필요로 하는 복잡한 다단계 작업을 위한 유능한 에이전트입니다.

65 

66 * **모델**: 주 대화에서 상속

67 * **도구**: 모든 도구

68 * **목적**: 복잡한 연구, 다단계 작업, 코드 수정

69 

70 Claude는 작업이 탐색과 수정 모두를 필요로 하거나, 결과를 해석하기 위한 복잡한 추론이 필요하거나, 여러 종속 단계가 필요할 때 general-purpose에 위임합니다.

71 </Tab>

72 

73 <Tab title="Other">

74 Claude Code에는 특정 작업을 위한 추가 도우미 에이전트가 포함되어 있습니다. 이들은 일반적으로 자동으로 호출되므로 직접 사용할 필요가 없습니다.

75 

76 | 에이전트 | 모델 | Claude가 사용하는 경우 |

77 | :---------------- | :----- | :-------------------------------- |

78 | statusline-setup | Sonnet | `/statusline`을 실행하여 상태 표시줄을 구성할 때 |

79 | Claude Code Guide | Haiku | Claude Code 기능에 대한 질문을 할 때 |

80 </Tab>

81</Tabs>

82 

83이러한 내장 subagent 외에도 사용자 정의 프롬프트, 도구 제한, 권한 모드, hooks 및 skills를 사용하여 자신의 subagent를 만들 수 있습니다. 다음 섹션에서는 시작하는 방법과 subagent를 사용자 정의하는 방법을 보여줍니다.

84 

85## 빠른 시작: 첫 번째 subagent 만들기

86 

87Subagent는 YAML frontmatter가 있는 Markdown 파일로 정의됩니다. [수동으로 만들거나](#write-subagent-files) `/agents` 명령을 사용할 수 있습니다.

88 

89이 연습에서는 `/agents` 명령을 사용하여 사용자 수준 subagent를 만드는 과정을 안내합니다. Subagent는 코드를 검토하고 코드베이스에 대한 개선 사항을 제안합니다.

90 

91<Steps>

92 <Step title="subagent 인터페이스 열기">

93 Claude Code에서 다음을 실행합니다:

94 

95 ```text theme={null}

96 /agents

97 ```

98 </Step>

99 

100 <Step title="위치 선택">

101 **Library** 탭으로 전환하고 **Create new agent**를 선택한 다음 **Personal**을 선택합니다. 이렇게 하면 subagent가 `~/.claude/agents/`에 저장되어 모든 프로젝트에서 사용할 수 있습니다.

102 </Step>

103 

104 <Step title="Claude로 생성">

105 **Generate with Claude**를 선택합니다. 메시지가 표시되면 subagent를 설명합니다:

106 

107 ```text theme={null}

108 A code improvement agent that scans files and suggests improvements

109 for readability, performance, and best practices. It should explain

110 each issue, show the current code, and provide an improved version.

111 ```

112 

113 Claude가 식별자, 설명 및 시스템 프롬프트를 생성합니다.

114 </Step>

115 

116 <Step title="도구 선택">

117 읽기 전용 검토자의 경우 **Read-only tools**를 제외한 모든 항목을 선택 해제합니다. 모든 도구를 선택한 상태로 유지하면 subagent는 주 대화에서 사용 가능한 모든 도구를 상속합니다.

118 </Step>

119 

120 <Step title="모델 선택">

121 Subagent가 사용할 모델을 선택합니다. 이 예제 에이전트의 경우 코드 패턴 분석을 위해 기능과 속도의 균형을 맞추는 **Sonnet**을 선택합니다.

122 </Step>

123 

124 <Step title="색상 선택">

125 Subagent의 배경색을 선택합니다. 이렇게 하면 UI에서 어느 subagent가 실행 중인지 식별하는 데 도움이 됩니다.

126 </Step>

127 

128 <Step title="메모리 구성">

129 **User scope**를 선택하여 subagent에 `~/.claude/agent-memory/`에서 [지속적 메모리 디렉토리](#enable-persistent-memory)를 제공합니다. Subagent는 이를 사용하여 코드베이스 패턴 및 반복되는 문제와 같은 대화 간 통찰력을 축적합니다. Subagent가 학습을 유지하지 않으려면 **None**을 선택합니다.

130 </Step>

131 

132 <Step title="저장 및 시도">

133 구성 요약을 검토합니다. `s` 또는 `Enter`를 눌러 저장하거나 `e`를 눌러 편집기에서 저장 및 편집합니다. Subagent는 즉시 사용 가능합니다. 시도해 봅니다:

134 

135 ```text theme={null}

136 Use the code-improver agent to suggest improvements in this project

137 ```

138 

139 Claude가 새 subagent에 위임하고, subagent가 코드베이스를 스캔하여 개선 제안을 반환합니다.

140 </Step>

141</Steps>

142 

143이제 머신의 모든 프로젝트에서 코드베이스를 분석하고 개선 사항을 제안하는 데 사용할 수 있는 subagent가 있습니다.

144 

145Markdown 파일로 subagent를 수동으로 만들거나, CLI 플래그를 통해 정의하거나, 플러그인을 통해 배포할 수도 있습니다. 다음 섹션에서는 모든 구성 옵션을 다룹니다.

146 

147## Subagent 구성

148 

149### /agents 명령 사용

150 

151`/agents` 명령은 subagent를 관리하기 위한 탭 인터페이스를 엽니다. **Running** 탭은 라이브 subagent를 표시하고 열거나 중지할 수 있습니다. **Library** 탭을 사용하면 다음을 수행할 수 있습니다:

152 

153* 사용 가능한 모든 subagent 보기 (내장, 사용자, 프로젝트, 플러그인)

154* 안내된 설정 또는 Claude 생성으로 새 subagent 만들기

155* 기존 subagent 구성 및 도구 액세스 편집

156* 사용자 정의 subagent 삭제

157* 중복이 있을 때 활성 subagent 확인

158 

159이것이 subagent를 만들고 관리하는 권장 방법입니다. 수동 생성 또는 자동화의 경우 subagent 파일을 직접 추가할 수도 있습니다.

160 

161대화형 세션을 시작하지 않고 명령줄에서 구성된 모든 subagent를 나열하려면 `claude agents`를 실행합니다. 이렇게 하면 소스별로 그룹화된 에이전트가 표시되고 더 높은 우선순위 정의로 재정의되는 에이전트가 표시됩니다.

162 

163### Subagent 범위 선택

164 

165Subagent는 YAML frontmatter가 있는 Markdown 파일입니다. 범위에 따라 다른 위치에 저장합니다. 여러 subagent가 같은 이름을 공유할 때 더 높은 우선순위 위치가 우선합니다.

166 

167| 위치 | 범위 | 우선순위 | 만드는 방법 |

168| :------------------- | :------------ | :----- | :----------------------------- |

169| 관리되는 설정 | 조직 전체 | 1 (최고) | [관리되는 설정](/ko/settings)을 통해 배포 |

170| `--agents` CLI 플래그 | 현재 세션 | 2 | Claude Code 시작 시 JSON 전달 |

171| `.claude/agents/` | 현재 프로젝트 | 3 | 대화형 또는 수동 |

172| `~/.claude/agents/` | 모든 프로젝트 | 4 | 대화형 또는 수동 |

173| 플러그인의 `agents/` 디렉토리 | 플러그인이 활성화된 위치 | 5 (최저) | [플러그인](/ko/plugins)과 함께 설치 |

174 

175**프로젝트 subagent** (`.claude/agents/`)는 코드베이스에 특정한 subagent에 이상적입니다. 버전 제어에 체크인하여 팀이 협력하여 사용하고 개선할 수 있습니다.

176 

177프로젝트 subagent는 현재 작업 디렉토리에서 위로 이동하여 검색됩니다. `--add-dir`로 추가된 디렉토리는 [파일 액세스만 부여](/ko/permissions#additional-directories-grant-file-access-not-configuration)하며 subagent를 검색하지 않습니다. 프로젝트 간에 subagent를 공유하려면 `~/.claude/agents/`를 사용하거나 [플러그인](/ko/plugins)을 사용합니다.

178 

179**사용자 subagent** (`~/.claude/agents/`)는 모든 프로젝트에서 사용 가능한 개인 subagent입니다.

180 

181**CLI 정의 subagent**는 Claude Code를 시작할 때 JSON으로 전달됩니다. 해당 세션에만 존재하며 디스크에 저장되지 않으므로 빠른 테스트 또는 자동화 스크립트에 유용합니다. 단일 `--agents` 호출에서 여러 subagent를 정의할 수 있습니다:

182 

183```bash theme={null}

184claude --agents '{

185 "code-reviewer": {

186 "description": "Expert code reviewer. Use proactively after code changes.",

187 "prompt": "You are a senior code reviewer. Focus on code quality, security, and best practices.",

188 "tools": ["Read", "Grep", "Glob", "Bash"],

189 "model": "sonnet"

190 },

191 "debugger": {

192 "description": "Debugging specialist for errors and test failures.",

193 "prompt": "You are an expert debugger. Analyze errors, identify root causes, and provide fixes."

194 }

195}'

196```

197 

198`--agents` 플래그는 파일 기반 subagent와 동일한 [frontmatter](#supported-frontmatter-fields) 필드를 가진 JSON을 허용합니다: `description`, `prompt`, `tools`, `disallowedTools`, `model`, `permissionMode`, `mcpServers`, `hooks`, `maxTurns`, `skills`, `initialPrompt`, `memory`, `effort`, `background`, `isolation`, `color`. 시스템 프롬프트에는 `prompt`를 사용하며, 이는 파일 기반 subagent의 markdown 본문과 동등합니다.

199 

200**관리되는 subagent**는 조직 관리자가 배포합니다. [관리되는 설정 디렉토리](/ko/settings#settings-files) 내의 `.claude/agents/`에 markdown 파일을 배치하고, 프로젝트 및 사용자 subagent와 동일한 frontmatter 형식을 사용합니다. 관리되는 정의는 같은 이름의 프로젝트 및 사용자 subagent보다 우선합니다.

201 

202**플러그인 subagent**는 설치한 [플러그인](/ko/plugins)에서 제공됩니다. `/agents`에서 사용자 정의 subagent와 함께 나타납니다. 플러그인 subagent 만드는 방법에 대한 자세한 내용은 [플러그인 컴포넌트 참조](/ko/plugins-reference#agents)를 참조하세요.

203 

204<Note>

205 보안상의 이유로 플러그인 subagent는 `hooks`, `mcpServers`, `permissionMode` frontmatter 필드를 지원하지 않습니다. 이러한 필드는 플러그인에서 에이전트를 로드할 때 무시됩니다. 필요한 경우 에이전트 파일을 `.claude/agents/` 또는 `~/.claude/agents/`로 복사합니다. `settings.json` 또는 `settings.local.json`의 [`permissions.allow`](/ko/settings#permission-settings)에 규칙을 추가할 수도 있지만, 이러한 규칙은 전체 세션에 적용되며 플러그인 subagent에만 적용되지 않습니다.

206</Note>

207 

208이러한 범위의 subagent 정의는 [agent teams](/ko/agent-teams#use-subagent-definitions-for-teammates)에서도 사용 가능합니다: 팀원을 생성할 때 subagent 유형을 참조할 수 있으며 팀원은 해당 `tools` 및 `model`을 사용하고, 정의의 본문이 팀원의 시스템 프롬프트에 추가 지침으로 추가됩니다. 어느 frontmatter 필드가 해당 경로에 적용되는지는 [agent teams](/ko/agent-teams#use-subagent-definitions-for-teammates)를 참조하세요.

209 

210### Subagent 파일 작성

211 

212Subagent 파일은 구성을 위한 YAML frontmatter를 사용하고 그 뒤에 Markdown의 시스템 프롬프트가 옵니다:

213 

214<Note>

215 Subagent는 세션 시작 시 로드됩니다. 파일을 수동으로 추가하여 subagent를 만드는 경우 세션을 다시 시작하거나 `/agents`를 사용하여 즉시 로드합니다.

216</Note>

217 

218```markdown theme={null}

219---

220name: code-reviewer

221description: Reviews code for quality and best practices

222tools: Read, Glob, Grep

223model: sonnet

224---

225 

226You are a code reviewer. When invoked, analyze the code and provide

227specific, actionable feedback on quality, security, and best practices.

228```

229 

230Frontmatter는 subagent의 메타데이터와 구성을 정의합니다. 본문은 subagent의 동작을 안내하는 시스템 프롬프트가 됩니다. Subagent는 이 시스템 프롬프트만 받습니다(작업 디렉토리와 같은 기본 환경 세부 정보 포함). 전체 Claude Code 시스템 프롬프트는 받지 않습니다.

231 

232Subagent는 주 대화의 현재 작업 디렉토리에서 시작합니다. Subagent 내에서 `cd` 명령은 Bash 또는 PowerShell 도구 호출 간에 유지되지 않으며 주 대화의 작업 디렉토리에 영향을 주지 않습니다. Subagent에 저장소의 격리된 복사본을 제공하려면 [`isolation: worktree`](#supported-frontmatter-fields)를 설정합니다.

233 

234#### 지원되는 frontmatter 필드

235 

236다음 필드를 YAML frontmatter에서 사용할 수 있습니다. `name`과 `description`만 필수입니다.

237 

238| 필드 | 필수 | 설명 |

239| :---------------- | :-- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

240| `name` | 예 | 소문자 및 하이픈을 사용한 고유 식별자 |

241| `description` | 예 | Claude가 이 subagent에 위임해야 할 때 |

242| `tools` | 아니오 | Subagent가 사용할 수 있는 [도구](#available-tools). 생략하면 모든 도구 상속 |

243| `disallowedTools` | 아니오 | 거부할 도구, 상속되거나 지정된 목록에서 제거됨 |

244| `model` | 아니오 | 사용할 [모델](#choose-a-model): `sonnet`, `opus`, `haiku`, 전체 모델 ID (예: `claude-opus-4-7`), 또는 `inherit`. 기본값: `inherit` |

245| `permissionMode` | 아니오 | [권한 모드](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, 또는 `plan`. [플러그인 subagent](#choose-the-subagent-scope)에서는 무시됨 |

246| `maxTurns` | 아니오 | Subagent가 중지되기 전의 최대 에이전트 턴 수 |

247| `skills` | 아니오 | 시작 시 subagent의 컨텍스트에 로드할 [Skills](/ko/skills). 호출 가능하게 만들어지는 것이 아니라 전체 skill 콘텐츠가 주입됩니다. Subagent는 부모 대화에서 skills를 상속하지 않습니다 |

248| `mcpServers` | 아니오 | 이 subagent에서 사용 가능한 [MCP servers](/ko/mcp). 각 항목은 이미 구성된 서버를 참조하는 서버 이름 (예: `"slack"`) 또는 서버 이름을 키로 하고 전체 [MCP server config](/ko/mcp#installing-mcp-servers)를 값으로 하는 인라인 정의입니다. [플러그인 subagent](#choose-the-subagent-scope)에서는 무시됨 |

249| `hooks` | 아니오 | 이 subagent로 범위가 지정된 [라이프사이클 hooks](#define-hooks-for-subagents). [플러그인 subagent](#choose-the-subagent-scope)에서는 무시됨 |

250| `memory` | 아니오 | [지속적 메모리 범위](#enable-persistent-memory): `user`, `project`, 또는 `local`. 교차 세션 학습 활성화 |

251| `background` | 아니오 | 이 subagent를 항상 [background task](#run-subagents-in-foreground-or-background)로 실행하려면 `true`로 설정합니다. 기본값: `false` |

252| `effort` | 아니오 | 이 subagent가 활성화될 때의 노력 수준. 세션 노력 수준을 재정의합니다. 기본값: 세션에서 상속. 옵션: `low`, `medium`, `high`, `xhigh`, `max` (사용 가능한 수준은 모델에 따라 다름) |

253| `isolation` | 아니오 | Subagent를 임시 [git worktree](/ko/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees)에서 실행하려면 `worktree`로 설정하여 저장소의 격리된 복사본을 제공합니다. Subagent가 변경 사항을 만들지 않으면 worktree가 자동으로 정리됩니다 |

254| `color` | 아니오 | 작업 목록 및 트랜스크립트에서 subagent의 표시 색상입니다. `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, 또는 `cyan`을 허용합니다 |

255| `initialPrompt` | 아니오 | 이 에이전트가 주 세션 에이전트로 실행될 때 (`--agent` 또는 `agent` 설정을 통해) 첫 번째 사용자 턴으로 자동 제출됩니다. [Commands](/ko/commands) 및 [Skills](/ko/skills)가 처리됩니다. 사용자 제공 프롬프트에 앞에 붙습니다 |

256 

257### 모델 선택

258 

259`model` 필드는 subagent가 사용하는 [AI 모델](/ko/model-config)을 제어합니다:

260 

261* **모델 별칭**: 사용 가능한 별칭 중 하나를 사용합니다: `sonnet`, `opus`, 또는 `haiku`

262* **전체 모델 ID**: `claude-opus-4-7` 또는 `claude-sonnet-4-6`과 같은 전체 모델 ID를 사용합니다. `--model` 플래그와 동일한 값을 허용합니다

263* **inherit**: 주 대화와 동일한 모델을 사용합니다

264* **생략됨**: 지정하지 않으면 기본값은 `inherit`입니다 (주 대화와 동일한 모델 사용)

265 

266Claude가 subagent를 호출할 때 해당 특정 호출에 대해 `model` 매개변수를 전달할 수도 있습니다. Claude Code는 다음 순서로 subagent의 모델을 해결합니다:

267 

2681. [`CLAUDE_CODE_SUBAGENT_MODEL`](/ko/model-config#environment-variables) 환경 변수 (설정된 경우)

2692. 호출별 `model` 매개변수

2703. Subagent 정의의 `model` frontmatter

2714. 주 대화의 모델

272 

273### Subagent 기능 제어

274 

275도구 액세스, 권한 모드 및 조건부 규칙을 통해 subagent가 할 수 있는 작업을 제어할 수 있습니다.

276 

277#### 사용 가능한 도구

278 

279Subagent는 Claude Code의 [내부 도구](/ko/tools-reference) 중 하나를 사용할 수 있습니다. 기본적으로 subagent는 MCP 도구를 포함하여 주 대화의 모든 도구를 상속합니다.

280 

281도구를 제한하려면 `tools` 필드 (허용 목록) 또는 `disallowedTools` 필드 (거부 목록)를 사용합니다. 이 예제는 `tools`를 사용하여 Read, Grep, Glob, Bash만 허용합니다. Subagent는 파일을 편집하거나 쓸 수 없으며 MCP 도구를 사용할 수 없습니다:

282 

283```yaml theme={null}

284---

285name: safe-researcher

286description: Research agent with restricted capabilities

287tools: Read, Grep, Glob, Bash

288---

289```

290 

291이 예제는 `disallowedTools`를 사용하여 주 대화에서 상속된 모든 도구를 상속하지만 Write 및 Edit은 제외합니다. Subagent는 Bash, MCP 도구 및 다른 모든 것을 유지합니다:

292 

293```yaml theme={null}

294---

295name: no-writes

296description: Inherits every tool except file writes

297disallowedTools: Write, Edit

298---

299```

300 

301둘 다 설정되면 `disallowedTools`가 먼저 적용되고 `tools`가 남은 풀에 대해 해결됩니다. 둘 다에 나열된 도구는 제거됩니다.

302 

303#### 생성할 수 있는 subagent 제한

304 

305에이전트가 `claude --agent`를 사용하여 주 스레드로 실행될 때 Agent 도구를 사용하여 subagent를 생성할 수 있습니다. 생성할 수 있는 subagent 유형을 제한하려면 `tools` 필드에서 `Agent(agent_type)` 구문을 사용합니다.

306 

307<Note>버전 2.1.63에서 Task 도구의 이름이 Agent로 변경되었습니다. 설정 및 에이전트 정의의 기존 `Task(...)` 참조는 여전히 별칭으로 작동합니다.</Note>

308 

309```yaml theme={null}

310---

311name: coordinator

312description: Coordinates work across specialized agents

313tools: Agent(worker, researcher), Read, Bash

314---

315```

316 

317이것은 허용 목록입니다: `worker` 및 `researcher` subagent만 생성할 수 있습니다. 에이전트가 다른 유형을 생성하려고 하면 요청이 실패하고 에이전트는 프롬프트에서 허용된 유형만 봅니다. 다른 모든 에이전트를 허용하면서 특정 에이전트를 차단하려면 [`permissions.deny`](#disable-specific-subagents)를 대신 사용합니다.

318 

319제한 없이 모든 subagent를 생성할 수 있도록 허용하려면 괄호 없이 `Agent`를 사용합니다:

320 

321```yaml theme={null}

322tools: Agent, Read, Bash

323```

324 

325`Agent`가 `tools` 목록에서 완전히 생략되면 에이전트는 subagent를 생성할 수 없습니다. 이 제한은 `claude --agent`를 사용하여 주 스레드로 실행되는 에이전트에만 적용됩니다. Subagent는 다른 subagent를 생성할 수 없으므로 `Agent(agent_type)`은 subagent 정의에서 효과가 없습니다.

326 

327#### Subagent에 MCP 서버 범위 지정

328 

329`mcpServers` 필드를 사용하여 주 대화에서 사용할 수 없는 [MCP](/ko/mcp) 서버에 subagent 액세스 권한을 부여합니다. 여기에 정의된 인라인 서버는 subagent가 시작될 때 연결되고 완료될 때 연결이 끊깁니다. 문자열 참조는 부모 세션의 연결을 공유합니다.

330 

331<Note>

332 `mcpServers` 필드는 에이전트 파일이 실행될 수 있는 두 가지 컨텍스트에 적용됩니다:

333 

334 * Agent 도구 또는 @-mention을 통해 생성된 subagent

335 * [`--agent`](#invoke-subagents-explicitly) 또는 `agent` 설정으로 시작된 주 세션

336 

337 에이전트가 주 세션일 때 인라인 서버 정의는 [`.mcp.json`](/ko/mcp) 및 설정 파일의 서버와 함께 시작 시 연결됩니다.

338</Note>

339 

340목록의 각 항목은 인라인 서버 정의 또는 세션에서 이미 구성된 MCP 서버를 참조하는 문자열입니다:

341 

342```yaml theme={null}

343---

344name: browser-tester

345description: Tests features in a real browser using Playwright

346mcpServers:

347 # Inline definition: scoped to this subagent only

348 - playwright:

349 type: stdio

350 command: npx

351 args: ["-y", "@playwright/mcp@latest"]

352 # Reference by name: reuses an already-configured server

353 - github

354---

355 

356Use the Playwright tools to navigate, screenshot, and interact with pages.

357```

358 

359인라인 정의는 `.mcp.json` 서버 항목 (`stdio`, `http`, `sse`, `ws`)과 동일한 스키마를 사용하며 서버 이름으로 키가 지정됩니다.

360 

361MCP 서버를 주 대화에서 완전히 분리하고 도구 설명이 컨텍스트를 소비하지 않도록 하려면 `.mcp.json`이 아닌 여기에 인라인으로 정의합니다. Subagent는 도구를 얻고 부모 대화는 그렇지 않습니다.

362 

363#### 권한 모드

364 

365`permissionMode` 필드는 subagent가 권한 프롬프트를 처리하는 방식을 제어합니다. Subagent는 주 대화의 권한 컨텍스트를 상속하고 모드를 재정의할 수 있습니다. 단, 아래에 설명된 대로 부모 모드가 우선하는 경우는 제외입니다.

366 

367| 모드 | 동작 |

368| :------------------ | :-------------------------------------------------------------------------------------------------- |

369| `default` | 프롬프트를 사용한 표준 권한 확인 |

370| `acceptEdits` | 파일 편집 및 작업 디렉토리 또는 `additionalDirectories`의 경로에 대한 일반적인 파일시스템 명령 자동 수락 |

371| `auto` | [Auto mode](/ko/permission-modes#eliminate-prompts-with-auto-mode): 백그라운드 분류기가 명령을 검토하고 보호된 디렉토리 쓰기 |

372| `dontAsk` | 권한 프롬프트 자동 거부 (명시적으로 허용된 도구는 여전히 작동) |

373| `bypassPermissions` | 권한 프롬프트 건너뛰기 |

374| `plan` | Plan mode (읽기 전용 탐색) |

375 

376<Warning>

377 `bypassPermissions`는 주의해서 사용하세요. 권한 프롬프트를 건너뛰어 subagent가 승인 없이 작업을 실행할 수 있습니다. `.git`, `.claude`, `.vscode`, `.idea`, `.husky`에 대한 쓰기는 여전히 회로 차단기로 프롬프트합니다. 루트 및 홈 디렉토리 제거 (예: `rm -rf /`)는 여전히 회로 차단기로 프롬프트합니다. [권한 모드](/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)를 참조하세요.

378</Warning>

379 

380부모가 `bypassPermissions` 또는 `acceptEdits`를 사용하면 이것이 우선하며 재정의할 수 없습니다. 부모가 [auto mode](/ko/permission-modes#eliminate-prompts-with-auto-mode)를 사용하면 subagent는 auto mode를 상속하고 frontmatter의 모든 `permissionMode`는 무시됩니다: 분류기는 부모 세션과 동일한 차단 및 허용 규칙으로 subagent의 도구 호출을 평가합니다.

381 

382#### Subagent에 skills 미리 로드

383 

384`skills` 필드를 사용하여 시작 시 subagent의 컨텍스트에 skill 콘텐츠를 주입합니다. 이렇게 하면 실행 중에 skill을 검색하고 로드하도록 요구하지 않고 subagent에 도메인 지식을 제공합니다.

385 

386```yaml theme={null}

387---

388name: api-developer

389description: Implement API endpoints following team conventions

390skills:

391 - api-conventions

392 - error-handling-patterns

393---

394 

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

396```

397 

398각 skill의 전체 콘텐츠가 subagent의 컨텍스트에 주입되며, 호출 가능하게 만들어지는 것이 아닙니다. Subagent는 부모 대화에서 skills를 상속하지 않으므로 명시적으로 나열해야 합니다.

399 

400`disable-model-invocation: true`를 설정하는 skills는 미리 로드할 수 없습니다. 미리 로드는 Claude가 호출할 수 있는 동일한 skills 세트에서 가져오기 때문입니다. 나열된 skill이 누락되었거나 비활성화된 경우 Claude Code는 이를 건너뛰고 디버그 로그에 경고를 기록합니다.

401 

402<Note>

403 이것은 [subagent에서 skill 실행](/ko/skills#run-skills-in-a-subagent)의 역입니다. Subagent의 `skills`를 사용하면 subagent가 시스템 프롬프트를 제어하고 skill 콘텐츠를 로드합니다. Skill의 `context: fork`를 사용하면 skill 콘텐츠가 지정한 에이전트에 주입됩니다. 둘 다 동일한 기본 시스템을 사용합니다.

404</Note>

405 

406#### 지속적 메모리 활성화

407 

408`memory` 필드는 subagent에 대화 간에 유지되는 지속적 디렉토리를 제공합니다. Subagent는 이 디렉토리를 사용하여 코드베이스 패턴, 디버깅 통찰력, 아키텍처 결정과 같은 지식을 시간에 따라 구축합니다.

409 

410```yaml theme={null}

411---

412name: code-reviewer

413description: Reviews code for quality and best practices

414memory: user

415---

416 

417You are a code reviewer. As you review code, update your agent memory with

418patterns, conventions, and recurring issues you discover.

419```

420 

421메모리가 얼마나 광범위하게 적용되어야 하는지에 따라 범위를 선택합니다:

422 

423| 범위 | 위치 | 사용 시기 |

424| :-------- | :-------------------------------------------- | :------------------------------------------ |

425| `user` | `~/.claude/agent-memory/<name-of-agent>/` | Subagent가 모든 프로젝트 간 학습을 기억해야 할 때 |

426| `project` | `.claude/agent-memory/<name-of-agent>/` | Subagent의 지식이 프로젝트별이고 버전 제어를 통해 공유 가능할 때 |

427| `local` | `.claude/agent-memory-local/<name-of-agent>/` | Subagent의 지식이 프로젝트별이지만 버전 제어에 체크인되지 않아야 할 때 |

428 

429메모리가 활성화되면:

430 

431* Subagent의 시스템 프롬프트에는 메모리 디렉토리 읽기 및 쓰기 지침이 포함됩니다.

432* Subagent의 시스템 프롬프트에는 메모리 디렉토리의 `MEMORY.md`의 처음 200줄 또는 25KB (둘 중 먼저 도달하는 것)가 포함되며, 해당 한계를 초과하면 `MEMORY.md`를 큐레이션하도록 지침이 포함됩니다.

433* Read, Write, Edit 도구가 자동으로 활성화되어 subagent가 메모리 파일을 관리할 수 있습니다.

434 

435##### 지속적 메모리 팁

436 

437* `project`는 권장되는 기본 범위입니다. 메모리를 버전 제어를 통해 공유 가능하게 만듭니다. Subagent의 지식이 모든 프로젝트에 광범위하게 적용될 때 `user`를 사용하거나, 지식이 버전 제어에 체크인되지 않아야 할 때 `local`을 사용합니다.

438* Subagent에 작업을 시작하기 전에 메모리를 확인하도록 요청합니다: "Review this PR, and check your memory for patterns you've seen before."

439* Subagent에 작업을 완료한 후 메모리를 업데이트하도록 요청합니다: "Now that you're done, save what you learned to your memory." 시간이 지남에 따라 이렇게 하면 subagent를 더 효과적으로 만드는 지식 기반이 구축됩니다.

440* Subagent가 자신의 지식 기반을 적극적으로 유지하도록 메모리 지침을 subagent의 markdown 파일에 직접 포함합니다:

441 

442 ```markdown theme={null}

443 Update your agent memory as you discover codepaths, patterns, library

444 locations, and key architectural decisions. This builds up institutional

445 knowledge across conversations. Write concise notes about what you found

446 and where.

447 ```

448 

449#### Hook을 사용한 조건부 규칙

450 

451도구 사용을 더 동적으로 제어하려면 `PreToolUse` hook을 사용하여 실행 전에 작업을 검증합니다. 도구의 일부 작업은 허용하면서 다른 작업은 차단해야 할 때 유용합니다.

452 

453이 예제는 읽기 전용 데이터베이스 쿼리만 허용하는 subagent를 만듭니다. `PreToolUse` hook은 각 Bash 명령이 실행되기 전에 `command`에 지정된 스크립트를 실행합니다:

454 

455```yaml theme={null}

456---

457name: db-reader

458description: Execute read-only database queries

459tools: Bash

460hooks:

461 PreToolUse:

462 - matcher: "Bash"

463 hooks:

464 - type: command

465 command: "./scripts/validate-readonly-query.sh"

466---

467```

468 

469Claude Code는 [hook 입력을 JSON으로](/ko/hooks#pretooluse-input) stdin을 통해 hook 명령에 전달합니다. 검증 스크립트는 이 JSON을 읽고 Bash 명령을 추출하며 쓰기 작업을 차단하기 위해 [종료 코드 2](/ko/hooks#exit-code-2-behavior-per-event)로 종료합니다:

470 

471```bash theme={null}

472#!/bin/bash

473# ./scripts/validate-readonly-query.sh

474 

475INPUT=$(cat)

476COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

477 

478# Block SQL write operations (case-insensitive)

479if echo "$COMMAND" | grep -iE '\b(INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|TRUNCATE)\b' > /dev/null; then

480 echo "Blocked: Only SELECT queries are allowed" >&2

481 exit 2

482fi

483 

484exit 0

485```

486 

487전체 입력 스키마는 [Hook input](/ko/hooks#pretooluse-input)을 참조하고 종료 코드가 동작에 미치는 영향은 [exit codes](/ko/hooks#exit-code-output)를 참조하세요.

488 

489#### 특정 subagent 비활성화

490 

491[설정](/ko/settings#permission-settings)의 `deny` 배열에 추가하여 Claude가 특정 subagent를 사용하지 못하도록 할 수 있습니다. `Agent(subagent-name)` 형식을 사용합니다. 여기서 `subagent-name`은 subagent의 name 필드와 일치합니다.

492 

493```json theme={null}

494{

495 "permissions": {

496 "deny": ["Agent(Explore)", "Agent(my-custom-agent)"]

497 }

498}

499```

500 

501이것은 내장 및 사용자 정의 subagent 모두에 작동합니다. `--disallowedTools` CLI 플래그를 사용할 수도 있습니다:

502 

503```bash theme={null}

504claude --disallowedTools "Agent(Explore)"

505```

506 

507권한 규칙에 대한 자세한 내용은 [Permissions 문서](/ko/permissions#tool-specific-permission-rules)를 참조하세요.

508 

509### Subagent에 대한 hook 정의

510 

511Subagent는 subagent의 라이프사이클 중에 실행되는 [hooks](/ko/hooks)를 정의할 수 있습니다. Hook을 구성하는 두 가지 방법이 있습니다:

512 

5131. **Subagent의 frontmatter에서**: 해당 subagent가 활성화된 동안만 실행되는 hook 정의

5142. **`settings.json`에서**: Subagent가 시작되거나 중지될 때 주 세션에서 실행되는 hook 정의

515 

516#### Subagent frontmatter의 hook

517 

518Subagent의 markdown 파일에 직접 hook을 정의합니다. 이러한 hook은 해당 특정 subagent가 활성화된 동안만 실행되고 완료될 때 정리됩니다.

519 

520<Note>

521 Frontmatter hook은 에이전트가 Agent 도구 또는 @-mention을 통해 subagent로 생성될 때 발생합니다. [`--agent`](#invoke-subagents-explicitly) 또는 `agent` 설정을 통해 주 세션으로 실행될 때도 발생합니다. 주 세션의 경우 [`settings.json`](/ko/hooks)에서 정의된 모든 hook과 함께 실행됩니다.

522</Note>

523 

524모든 [hook 이벤트](/ko/hooks#hook-events)가 지원됩니다. Subagent에 가장 일반적인 이벤트는:

525 

526| 이벤트 | Matcher 입력 | 실행 시기 |

527| :------------ | :--------- | :------------------------------------------ |

528| `PreToolUse` | 도구 이름 | Subagent가 도구를 사용하기 전 |

529| `PostToolUse` | 도구 이름 | Subagent가 도구를 사용한 후 |

530| `Stop` | (없음) | Subagent가 완료될 때 (런타임에 `SubagentStop`으로 변환됨) |

531 

532이 예제는 `PreToolUse` hook으로 Bash 명령을 검증하고 `PostToolUse`로 파일 편집 후 linter를 실행합니다:

533 

534```yaml theme={null}

535---

536name: code-reviewer

537description: Review code changes with automatic linting

538hooks:

539 PreToolUse:

540 - matcher: "Bash"

541 hooks:

542 - type: command

543 command: "./scripts/validate-command.sh $TOOL_INPUT"

544 PostToolUse:

545 - matcher: "Edit|Write"

546 hooks:

547 - type: command

548 command: "./scripts/run-linter.sh"

549---

550```

551 

552Frontmatter의 `Stop` hook은 자동으로 `SubagentStop` 이벤트로 변환됩니다.

553 

554#### Subagent 이벤트에 대한 프로젝트 수준 hook

555 

556주 세션에서 subagent 라이프사이클 이벤트에 응답하는 `settings.json`에서 hook을 구성합니다.

557 

558| 이벤트 | Matcher 입력 | 실행 시기 |

559| :-------------- | :--------- | :------------------ |

560| `SubagentStart` | 에이전트 유형 이름 | Subagent가 실행을 시작할 때 |

561| `SubagentStop` | 에이전트 유형 이름 | Subagent가 완료될 때 |

562 

563두 이벤트 모두 이름별로 특정 에이전트 유형을 대상으로 하는 matcher를 지원합니다. 이 예제는 `db-agent` subagent가 시작될 때만 설정 스크립트를 실행하고 모든 subagent가 중지될 때 정리 스크립트를 실행합니다:

564 

565```json theme={null}

566{

567 "hooks": {

568 "SubagentStart": [

569 {

570 "matcher": "db-agent",

571 "hooks": [

572 { "type": "command", "command": "./scripts/setup-db-connection.sh" }

573 ]

574 }

575 ],

576 "SubagentStop": [

577 {

578 "hooks": [

579 { "type": "command", "command": "./scripts/cleanup-db-connection.sh" }

580 ]

581 }

582 ]

583 }

584}

585```

586 

587전체 hook 구성 형식은 [Hooks](/ko/hooks)를 참조하세요.

588 

589## Subagent 작업

590 

591### 자동 위임 이해

592 

593Claude는 요청의 작업 설명, subagent 구성의 `description` 필드, 현재 컨텍스트를 기반으로 자동으로 작업을 위임합니다. 적극적인 위임을 장려하려면 subagent의 description 필드에 "use proactively"와 같은 구문을 포함합니다.

594 

595### Subagent를 명시적으로 호출

596 

597자동 위임이 충분하지 않을 때 subagent를 직접 요청할 수 있습니다. 일회성 제안에서 세션 전체 기본값으로 확대되는 세 가지 패턴이 있습니다:

598 

599* **자연어**: 프롬프트에서 subagent 이름을 지정합니다. Claude가 위임할지 결정합니다

600* **@-mention**: 한 작업에 대해 subagent가 실행되도록 보장합니다

601* **세션 전체**: 전체 세션이 `--agent` 플래그 또는 `agent` 설정을 통해 해당 subagent의 시스템 프롬프트, 도구 제한 및 모델을 사용합니다

602 

603자연어의 경우 특별한 구문이 없습니다. Subagent 이름을 지정하면 Claude는 일반적으로 위임합니다:

604 

605```text theme={null}

606Use the test-runner subagent to fix failing tests

607Have the code-reviewer subagent look at my recent changes

608```

609 

610**Subagent를 @-mention합니다.** `@`를 입력하고 파일을 @-mention하는 것과 동일한 방식으로 typeahead에서 subagent를 선택합니다. 이렇게 하면 Claude가 선택하도록 하는 대신 특정 subagent가 실행되도록 보장합니다:

611 

612```text theme={null}

613@"code-reviewer (agent)" look at the auth changes

614```

615 

616전체 메시지는 여전히 Claude로 이동하며, Claude는 요청한 내용을 기반으로 subagent의 작업 프롬프트를 작성합니다. @-mention은 Claude가 호출하는 subagent를 제어하며, 받는 프롬프트는 제어하지 않습니다.

617 

618활성화된 [플러그인](/ko/plugins)에서 제공하는 Subagent는 typeahead에 `<plugin-name>:<agent-name>`으로 나타납니다. 선택기를 사용하지 않고 수동으로 mention을 입력할 수도 있습니다: 로컬 subagent의 경우 `@agent-<name>`, 플러그인 subagent의 경우 `@agent-<plugin-name>:<agent-name>`.

619 

620**전체 세션을 subagent로 실행합니다.** [`--agent <name>`](/ko/cli-reference)을 전달하여 주 스레드 자체가 해당 subagent의 시스템 프롬프트, 도구 제한 및 모델을 취하는 세션을 시작합니다:

621 

622```bash theme={null}

623claude --agent code-reviewer

624```

625 

626Subagent의 시스템 프롬프트는 [`--system-prompt`](/ko/cli-reference)와 동일한 방식으로 기본 Claude Code 시스템 프롬프트를 완전히 대체합니다. `CLAUDE.md` 파일 및 프로젝트 메모리는 여전히 일반적인 메시지 흐름을 통해 로드됩니다. 에이전트 이름은 시작 헤더에 `@<name>`으로 나타나므로 활성화되었는지 확인할 수 있습니다.

627 

628이것은 내장 및 사용자 정의 subagent에서 작동하며, 세션을 재개할 때 선택이 유지됩니다.

629 

630플러그인 제공 subagent의 경우 범위가 지정된 이름을 전달합니다: `claude --agent <plugin-name>:<agent-name>`.

631 

632프로젝트의 모든 세션에 대한 기본값으로 만들려면 `.claude/settings.json`에서 `agent`를 설정합니다:

633 

634```json theme={null}

635{

636 "agent": "code-reviewer"

637}

638```

639 

640CLI 플래그가 둘 다 있으면 설정을 재정의합니다.

641 

642### Subagent를 foreground 또는 background에서 실행

643 

644Subagent는 foreground (차단) 또는 background (동시)에서 실행할 수 있습니다:

645 

646* **Foreground subagent**는 완료될 때까지 주 대화를 차단합니다. 권한 프롬프트 및 명확한 질문 (예: [`AskUserQuestion`](/ko/tools-reference))이 사용자에게 전달됩니다.

647* **Background subagent**는 계속 작업하는 동안 동시에 실행됩니다. 시작하기 전에 Claude Code는 subagent가 필요로 할 도구 권한을 요청하여 필요한 승인이 있는지 확인합니다. 실행 중이면 subagent는 이러한 권한을 상속하고 사전 승인되지 않은 모든 항목을 자동으로 거부합니다. Background subagent가 명확한 질문을 해야 하면 해당 도구 호출이 실패하지만 subagent는 계속됩니다.

648 

649Background subagent가 권한 부족으로 인해 실패하면 foreground에서 새 foreground subagent를 시작하여 대화형 프롬프트로 다시 시도할 수 있습니다.

650 

651Claude는 작업을 기반으로 subagent를 foreground 또는 background에서 실행할지 결정합니다. 다음을 수행할 수도 있습니다:

652 

653* Claude에 "run this in the background"를 요청

654* **Ctrl+B**를 눌러 실행 중인 작업을 background로 이동

655 

656모든 background 작업 기능을 비활성화하려면 `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` 환경 변수를 `1`로 설정합니다. [환경 변수](/ko/env-vars)를 참조하세요.

657 

658[fork mode](#fork-the-current-conversation)가 활성화되면 모든 subagent 생성이 `background` 필드와 관계없이 background에서 실행됩니다. Fork는 여전히 터미널에서 발생하는 권한 프롬프트를 표시하는 대신 사전 승인합니다. 명명된 subagent는 위의 사전 승인 흐름을 따릅니다.

659 

660### 일반적인 패턴

661 

662#### 대량 작업 격리

663 

664Subagent의 가장 효과적인 사용 중 하나는 많은 양의 출력을 생성하는 작업을 격리하는 것입니다. 테스트 실행, 문서 가져오기 또는 로그 파일 처리는 상당한 컨텍스트를 소비할 수 있습니다. 이를 subagent에 위임하면 자세한 출력이 subagent의 컨텍스트에 유지되고 관련 요약만 주 대화로 반환됩니다.

665 

666```text theme={null}

667Use a subagent to run the test suite and report only the failing tests with their error messages

668```

669 

670#### 병렬 연구 실행

671 

672독립적인 조사의 경우 여러 subagent를 생성하여 동시에 작동하도록 합니다:

673 

674```text theme={null}

675Research the authentication, database, and API modules in parallel using separate subagents

676```

677 

678각 subagent는 자신의 영역을 독립적으로 탐색한 다음 Claude가 결과를 종합합니다. 이것은 연구 경로가 서로 의존하지 않을 때 가장 잘 작동합니다.

679 

680<Warning>

681 Subagent가 완료되면 결과가 주 대화로 반환됩니다. 각각 자세한 결과를 반환하는 많은 subagent를 실행하면 상당한 컨텍스트를 소비할 수 있습니다.

682</Warning>

683 

684지속적인 병렬성이 필요하거나 컨텍스트 윈도우를 초과하는 작업의 경우 [agent teams](/ko/agent-teams)는 각 워커에게 자신의 독립적인 컨텍스트를 제공합니다.

685 

686#### Subagent 체인

687 

688다단계 워크플로우의 경우 Claude에 subagent를 순차적으로 사용하도록 요청합니다. 각 subagent는 작업을 완료하고 결과를 Claude에 반환하고, Claude는 관련 컨텍스트를 다음 subagent에 전달합니다.

689 

690```text theme={null}

691Use the code-reviewer subagent to find performance issues, then use the optimizer subagent to fix them

692```

693 

694### Subagent와 주 대화 중 선택

695 

696**주 대화**를 사용하는 경우:

697 

698* 작업이 빈번한 왕복 또는 반복적인 개선이 필요한 경우

699* 여러 단계가 상당한 컨텍스트를 공유하는 경우 (계획 → 구현 → 테스트)

700* 빠르고 대상이 지정된 변경을 수행하는 경우

701* 지연시간이 중요한 경우. Subagent는 새로 시작하고 컨텍스트를 수집하는 데 시간이 걸릴 수 있습니다

702 

703**Subagent**를 사용하는 경우:

704 

705* 작업이 주 컨텍스트에서 필요하지 않은 자세한 출력을 생성하는 경우

706* 특정 도구 제한 또는 권한을 적용하려는 경우

707* 작업이 자체 포함되어 있고 요약을 반환할 수 있는 경우

708 

709격리된 subagent 컨텍스트가 아닌 주 대화 컨텍스트에서 실행되는 재사용 가능한 프롬프트 또는 워크플로우를 원할 때 [Skills](/ko/skills)를 대신 고려합니다.

710 

711대화에 이미 있는 항목에 대한 빠른 질문의 경우 subagent 대신 [`/btw`](/ko/interactive-mode#side-questions-with-%2Fbtw)를 사용합니다. 전체 컨텍스트를 보지만 도구 액세스가 없으며 답변은 기록에 추가되지 않습니다.

712 

713<Note>

714 Subagent는 다른 subagent를 생성할 수 없습니다. 워크플로우가 중첩된 위임이 필요한 경우 [Skills](/ko/skills) 또는 주 대화에서 [subagent 체인](#chain-subagents)을 사용합니다.

715</Note>

716 

717### Subagent 컨텍스트 관리

718 

719#### Subagent 재개

720 

721각 subagent 호출은 새로운 인스턴스를 만들고 새로운 컨텍스트를 생성합니다. 처음부터 시작하는 대신 기존 subagent의 작업을 계속하려면 Claude에 재개하도록 요청합니다.

722 

723재개된 subagent는 모든 이전 도구 호출, 결과 및 추론을 포함한 전체 대화 기록을 유지합니다. Subagent는 새로 시작하는 대신 정확히 중단한 위치에서 계속됩니다.

724 

725Subagent가 완료되면 Claude는 에이전트 ID를 받습니다. Claude는 `SendMessage` 도구를 에이전트의 ID를 `to` 필드로 사용하여 재개합니다. `SendMessage` 도구는 [agent teams](/ko/agent-teams)가 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`을 통해 활성화될 때만 사용 가능합니다.

726 

727Subagent를 재개하려면 Claude에 이전 작업을 계속하도록 요청합니다:

728 

729```text theme={null}

730Use the code-reviewer subagent to review the authentication module

731[Agent completes]

732 

733Continue that code review and now analyze the authorization logic

734[Claude resumes the subagent with full context from previous conversation]

735```

736 

737에이전트 ID를 명시적으로 참조하려면 Claude에 ID를 요청할 수도 있으며, `~/.claude/projects/{project}/{sessionId}/subagents/`의 트랜스크립트 파일에서 ID를 찾을 수 있습니다. 각 트랜스크립트는 `agent-{agentId}.jsonl`로 저장됩니다.

738 

739Subagent 트랜스크립트는 주 대화와 독립적으로 유지됩니다:

740 

741* **주 대화 압축**: 주 대화가 압축될 때 subagent 트랜스크립트는 영향을 받지 않습니다. 별도 파일에 저장됩니다.

742* **세션 지속성**: Subagent 트랜스크립트는 세션 내에서 유지됩니다. 동일한 세션을 재개하여 Claude Code를 다시 시작한 후 [subagent를 재개](#resume-subagents)할 수 있습니다.

743* **자동 정리**: 트랜스크립트는 `cleanupPeriodDays` 설정 (기본값: 30일)을 기반으로 정리됩니다.

744 

745#### 자동 압축

746 

747Subagent는 주 대화와 동일한 논리를 사용하여 자동 압축을 지원합니다. 기본적으로 자동 압축은 약 95% 용량에서 트리거됩니다. 압축을 더 일찍 트리거하려면 `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`를 더 낮은 백분율 (예: `50`)로 설정합니다. 자세한 내용은 [환경 변수](/ko/env-vars)를 참조하세요.

748 

749압축 이벤트는 subagent 트랜스크립트 파일에 기록됩니다:

750 

751```json theme={null}

752{

753 "type": "system",

754 "subtype": "compact_boundary",

755 "compactMetadata": {

756 "trigger": "auto",

757 "preTokens": 167189

758 }

759}

760```

761 

762`preTokens` 값은 압축이 발생하기 전에 사용된 토큰 수를 보여줍니다.

763 

764## 현재 대화 포크

765 

766<Note>

767 포크된 subagent는 실험적이며 Claude Code v2.1.117 이상이 필요합니다. 동작 및 구성은 향후 릴리스에서 변경될 수 있습니다. [`CLAUDE_CODE_FORK_SUBAGENT`](/ko/env-vars) 환경 변수를 `1`로 설정하여 활성화합니다. 이 변수는 대화형 모드 및 SDK 또는 `claude -p`를 통해 인정됩니다.

768</Note>

769 

770포크는 새로 시작하는 대신 지금까지의 전체 대화를 상속하는 subagent입니다. 이렇게 하면 subagent가 일반적으로 제공하는 입력 격리가 떨어집니다: 포크는 주 세션과 동일한 시스템 프롬프트, 도구, 모델 및 메시지 기록을 보므로 상황을 다시 설명할 필요 없이 부작업을 전달할 수 있습니다. 포크의 자체 도구 호출은 여전히 대화에서 벗어나고 최종 결과만 돌아오므로 주 컨텍스트 윈도우가 깨끗하게 유지됩니다. 명명된 subagent가 유용하기에는 너무 많은 배경이 필요하거나 동일한 시작점에서 여러 접근 방식을 병렬로 시도하려는 경우 포크를 사용합니다.

771 

772포크 모드를 활성화하면 Claude Code가 세 가지 방식으로 변경됩니다:

773 

774* Claude는 [general-purpose](#built-in-subagents) subagent를 사용할 때마다 포크를 생성합니다. Explore와 같은 명명된 subagent는 이전과 같이 생성됩니다.

775* 모든 subagent 생성이 [background](#run-subagents-in-foreground-or-background)에서 실행됩니다. 포크든 명명된 subagent든 상관없습니다. 생성을 동기식으로 유지하려면 `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`를 `1`로 설정합니다.

776* `/fork` 명령은 [`/branch`](/ko/commands)의 별칭으로 작동하는 대신 포크를 생성합니다.

777 

778`/fork` 다음에 지시문을 사용하여 포크를 직접 시작할 수 있습니다. Claude Code는 지시문의 첫 단어에서 포크의 이름을 지정합니다. 다음 예제는 주 세션에서 구현을 계속하는 동안 포크가 테스트 케이스를 작성하도록 포크합니다:

779 

780```text theme={null}

781/fork draft unit tests for the parser changes so far

782```

783 

784포크는 프롬프트 입력 아래의 패널에 나타나고 계속 작업하는 동안 background에서 실행됩니다. 완료되면 결과가 주 대화의 메시지로 도착합니다. 다음 섹션에서는 포크가 실행되는 동안 포크를 관찰하고 조종하기 위한 패널 컨트롤을 다룹니다.

785 

786### 실행 중인 포크 관찰 및 조종

787 

788실행 중인 포크는 프롬프트 입력 아래의 패널에 나타나며, 주 세션에 대한 행과 각 포크에 대한 행이 있습니다. 이 키를 사용하여 패널과 상호 작용합니다:

789 

790| 키 | 작업 |

791| :-------- | :--------------------------- |

792| `↑` / `↓` | 행 간 이동 |

793| `Enter` | 선택한 포크의 트랜스크립트를 열고 후속 메시지 전송 |

794| `x` | 완료된 포크를 닫거나 실행 중인 포크 중지 |

795| `Esc` | 프롬프트 입력으로 포커스 반환 |

796 

797### 포크와 명명된 subagent의 차이점

798 

799포크는 생성 시점의 주 세션의 모든 것을 상속합니다. 명명된 subagent는 자신의 정의에서 시작합니다.

800 

801| | 포크 | 명명된 subagent |

802| :------------ | :------------- | :------------------------------------------------------------------ |

803| 컨텍스트 | 전체 대화 기록 | 전달하는 프롬프트를 사용한 새로운 컨텍스트 |

804| 시스템 프롬프트 및 도구 | 주 세션과 동일 | [정의 파일](#write-subagent-files)에서 |

805| 모델 | 주 세션과 동일 | Subagent의 `model` 필드에서 |

806| 권한 | 프롬프트가 터미널에 표시됨 | 시작 전 [사전 승인](#run-subagents-in-foreground-or-background), 그 후 자동 거부 |

807| 프롬프트 캐시 | 주 세션과 공유 | 별도 캐시 |

808 

809포크의 시스템 프롬프트 및 도구 정의가 부모와 동일하기 때문에 첫 번째 요청은 부모의 프롬프트 캐시를 재사용합니다. 이렇게 하면 동일한 컨텍스트가 필요한 작업에 대해 새로운 subagent를 생성하는 것보다 포크가 더 저렴합니다.

810 

811Claude가 Agent 도구를 통해 포크를 생성할 때 `isolation: "worktree"`를 전달하여 포크의 파일 편집이 체크아웃 대신 별도의 git worktree에 기록되도록 할 수 있습니다.

812 

813### 제한 사항

814 

815`CLAUDE_CODE_FORK_SUBAGENT=1`을 설정하면 대화형 세션, [비대화형 모드](/ko/headless) 및 Agent SDK에서 포크 모드를 활성화합니다. 포크는 추가 포크를 생성할 수 없습니다.

816 

817## 예제 subagent

818 

819이러한 예제는 subagent를 구축하기 위한 효과적인 패턴을 보여줍니다. 시작점으로 사용하거나 Claude로 사용자 정의된 버전을 생성합니다.

820 

821<Tip>

822 **모범 사례:**

823 

824 * **집중된 subagent 설계:** 각 subagent는 특정 작업에서 탁월해야 합니다

825 * **자세한 설명 작성:** Claude는 설명을 사용하여 위임할 시기를 결정합니다

826 * **도구 액세스 제한:** 보안 및 집중을 위해 필요한 권한만 부여합니다

827 * **버전 제어에 체크인:** 프로젝트 subagent를 팀과 공유합니다

828</Tip>

829 

830### 코드 검토자

831 

832수정하지 않고 코드를 검토하는 읽기 전용 subagent입니다. 이 예제는 제한된 도구 액세스 (Edit 또는 Write 없음)와 정확히 무엇을 찾을지 및 출력 형식을 지정하는 자세한 프롬프트를 사용하여 집중된 subagent를 설계하는 방법을 보여줍니다.

833 

834```markdown theme={null}

835---

836name: code-reviewer

837description: Expert code review specialist. Proactively reviews code for quality, security, and maintainability. Use immediately after writing or modifying code.

838tools: Read, Grep, Glob, Bash

839model: inherit

840---

841 

842You are a senior code reviewer ensuring high standards of code quality and security.

843 

844When invoked:

8451. Run git diff to see recent changes

8462. Focus on modified files

8473. Begin review immediately

848 

849Review checklist:

850- Code is clear and readable

851- Functions and variables are well-named

852- No duplicated code

853- Proper error handling

854- No exposed secrets or API keys

855- Input validation implemented

856- Good test coverage

857- Performance considerations addressed

858 

859Provide feedback organized by priority:

860- Critical issues (must fix)

861- Warnings (should fix)

862- Suggestions (consider improving)

863 

864Include specific examples of how to fix issues.

865```

866 

867### 디버거

868 

869문제를 분석하고 수정할 수 있는 subagent입니다. 코드 검토자와 달리 이 subagent는 버그 수정이 코드 수정을 필요로 하기 때문에 Edit을 포함합니다. 프롬프트는 진단에서 검증까지의 명확한 워크플로우를 제공합니다.

870 

871```markdown theme={null}

872---

873name: debugger

874description: Debugging specialist for errors, test failures, and unexpected behavior. Use proactively when encountering any issues.

875tools: Read, Edit, Bash, Grep, Glob

876---

877 

878You are an expert debugger specializing in root cause analysis.

879 

880When invoked:

8811. Capture error message and stack trace

8822. Identify reproduction steps

8833. Isolate the failure location

8844. Implement minimal fix

8855. Verify solution works

886 

887Debugging process:

888- Analyze error messages and logs

889- Check recent code changes

890- Form and test hypotheses

891- Add strategic debug logging

892- Inspect variable states

893 

894For each issue, provide:

895- Root cause explanation

896- Evidence supporting the diagnosis

897- Specific code fix

898- Testing approach

899- Prevention recommendations

900 

901Focus on fixing the underlying issue, not the symptoms.

902```

903 

904### 데이터 과학자

905 

906데이터 분석 작업을 위한 도메인별 subagent입니다. 이 예제는 일반적인 코딩 작업 외에 특화된 워크플로우를 위해 subagent를 만드는 방법을 보여줍니다. 명시적으로 `model: sonnet`을 설정하여 더 유능한 분석을 수행합니다.

907 

908```markdown theme={null}

909---

910name: data-scientist

911description: Data analysis expert for SQL queries, BigQuery operations, and data insights. Use proactively for data analysis tasks and queries.

912tools: Bash, Read, Write

913model: sonnet

914---

915 

916You are a data scientist specializing in SQL and BigQuery analysis.

917 

918When invoked:

9191. Understand the data analysis requirement

9202. Write efficient SQL queries

9213. Use BigQuery command line tools (bq) when appropriate

9224. Analyze and summarize results

9235. Present findings clearly

924 

925Key practices:

926- Write optimized SQL queries with proper filters

927- Use appropriate aggregations and joins

928- Include comments explaining complex logic

929- Format results for readability

930- Provide data-driven recommendations

931 

932For each analysis:

933- Explain the query approach

934- Document any assumptions

935- Highlight key findings

936- Suggest next steps based on data

937 

938Always ensure queries are efficient and cost-effective.

939```

940 

941### 데이터베이스 쿼리 검증자

942 

943Bash 액세스를 허용하지만 읽기 전용 SQL 쿼리만 허용하도록 명령을 검증하는 subagent입니다. 이 예제는 `tools` 필드보다 더 세밀한 제어가 필요할 때 `PreToolUse` hook을 사용하는 방법을 보여줍니다.

944 

945```markdown theme={null}

946---

947name: db-reader

948description: Execute read-only database queries. Use when analyzing data or generating reports.

949tools: Bash

950hooks:

951 PreToolUse:

952 - matcher: "Bash"

953 hooks:

954 - type: command

955 command: "./scripts/validate-readonly-query.sh"

956---

957 

958You are a database analyst with read-only access. Execute SELECT queries to answer questions about the data.

959 

960When asked to analyze data:

9611. Identify which tables contain the relevant data

9622. Write efficient SELECT queries with appropriate filters

9633. Present results clearly with context

964 

965You cannot modify data. If asked to INSERT, UPDATE, DELETE, or modify schema, explain that you only have read access.

966```

967 

968Claude Code는 [hook 입력을 JSON으로](/ko/hooks#pretooluse-input) stdin을 통해 hook 명령에 전달합니다. 검증 스크립트는 이 JSON을 읽고 실행 중인 명령을 추출하고 SQL 쓰기 작업 목록에 대해 확인합니다. 쓰기 작업이 감지되면 스크립트는 [종료 코드 2](/ko/hooks#exit-code-2-behavior-per-event)로 종료하여 실행을 차단하고 stderr를 통해 Claude에 오류 메시지를 반환합니다.

969 

970프로젝트의 어디든지 검증 스크립트를 만듭니다. 경로는 hook 구성의 `command` 필드와 일치해야 합니다:

971 

972```bash theme={null}

973#!/bin/bash

974# Blocks SQL write operations, allows SELECT queries

975 

976# Read JSON input from stdin

977INPUT=$(cat)

978 

979# Extract the command field from tool_input using jq

980COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

981 

982if [ -z "$COMMAND" ]; then

983 exit 0

984fi

985 

986# Block write operations (case-insensitive)

987if echo "$COMMAND" | grep -iE '\b(INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|TRUNCATE|REPLACE|MERGE)\b' > /dev/null; then

988 echo "Blocked: Write operations not allowed. Use SELECT queries only." >&2

989 exit 2

990fi

991 

992exit 0

993```

994 

995스크립트를 실행 가능하게 만듭니다:

996 

997```bash theme={null}

998chmod +x ./scripts/validate-readonly-query.sh

999```

1000 

1001Hook은 stdin을 통해 JSON을 받으며 Bash 명령은 `tool_input.command`에 있습니다. 종료 코드 2는 작업을 차단하고 오류 메시지를 Claude에 피드백합니다. 종료 코드 및 [Hook input](/ko/hooks#pretooluse-input)에 대한 자세한 내용은 [Hooks](/ko/hooks#exit-code-output)를 참조하세요.

1002 

1003## 다음 단계

1004 

1005이제 subagent를 이해했으므로 다음 관련 기능을 탐색합니다:

1006 

1007* [플러그인으로 subagent 배포](/ko/plugins) - 팀 또는 프로젝트 간에 subagent 공유

1008* [Claude Code를 프로그래밍 방식으로 실행](/ko/headless) - CI/CD 및 자동화를 위한 Agent SDK

1009* [MCP 서버 사용](/ko/mcp) - Subagent에 외부 도구 및 데이터에 대한 액세스 제공

terminal-config.md +307 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Claude Code를 위한 터미널 구성

6 

7> Shift+Enter로 줄 바꿈 수정, Claude 완료 시 터미널 벨 설정, tmux 구성, 색상 테마 일치, Claude Code CLI에서 Vim 모드 활성화합니다.

8 

9Claude Code는 구성 없이 모든 터미널에서 작동합니다. 이 페이지는 특정 항목이 예상대로 작동하지 않을 때를 위한 것입니다. 아래에서 증상을 찾아보세요. 이미 모든 것이 올바르게 느껴진다면 이 페이지가 필요하지 않습니다.

10 

11* [Shift+Enter가 줄 바꿈 대신 제출함](#enter-multiline-prompts)

12* [macOS에서 Option 키 단축키가 작동하지 않음](#enable-option-key-shortcuts-on-macos)

13* [Claude 완료 시 소리 또는 알림 없음](#get-a-terminal-bell-or-notification)

14* [tmux 내에서 Claude Code 실행](#configure-tmux)

15* [디스플레이 깜박임 또는 스크롤백 점프](#switch-to-fullscreen-rendering)

16* [프롬프트에서 Vim 키 사용](#edit-prompts-with-vim-keybindings)

17 

18이 페이지는 터미널이 Claude Code에 올바른 신호를 보내도록 하는 것에 관한 것입니다. Claude Code 자체가 응답하는 키를 변경하려면 대신 [키 바인딩](/ko/keybindings)을 참조하세요.

19 

20## 여러 줄 프롬프트 입력

21 

22Enter를 누르면 메시지가 제출됩니다. 제출하지 않고 줄 바꿈을 추가하려면 Ctrl+J를 누르거나 `\`를 입력한 후 Enter를 누르세요. 둘 다 구성 없이 모든 터미널에서 작동합니다.

23 

24대부분의 터미널에서 Shift+Enter를 누를 수도 있지만 터미널 에뮬레이터에 따라 지원이 다릅니다:

25 

26| 터미널 | 줄 바꿈을 위한 Shift+Enter |

27| :--------------------------------------------------------------------------- | :------------------------------- |

28| Ghostty, Kitty, iTerm2, WezTerm, Warp, Apple Terminal | 구성 없이 작동 |

29| VS Code, Cursor, Windsurf, Alacritty, Zed | 한 번 `/terminal-setup` 실행 |

30| Windows Terminal, gnome-terminal, PyCharm 및 Android Studio와 같은 JetBrains IDE | 사용 불가; Ctrl+J 또는 `\` 다음 Enter 사용 |

31 

32VS Code, Cursor, Windsurf, Alacritty 및 Zed의 경우 `/terminal-setup`은 Shift+Enter 및 기타 키 바인딩을 터미널의 구성 파일에 씁니다. VS Code, Cursor 및 Windsurf에서는 [전체 화면 모드](/ko/fullscreen)에서 더 부드러운 스크롤링을 위해 편집기 설정에서 `terminal.integrated.mouseWheelScrollSensitivity`도 설정합니다. 기존 바인딩 및 설정은 그대로 유지됩니다. `VSCode terminal Shift+Enter key binding already configured`와 같은 메시지가 표시되면 변경이 이루어지지 않았습니다. tmux 또는 screen 내부가 아닌 호스트 터미널에서 직접 `/terminal-setup`을 실행하세요. 호스트 터미널의 구성에 써야 하기 때문입니다.

33 

34tmux 내에서 실행 중인 경우 외부 터미널이 지원하더라도 Shift+Enter는 아래의 [tmux 구성](#configure-tmux)도 필요합니다.

35 

36줄 바꿈을 다른 키에 바인딩하거나 Enter가 줄 바꿈을 삽입하고 Shift+Enter가 제출하도록 동작을 바꾸려면 [키 바인딩 파일](/ko/keybindings)에서 `chat:newline` 및 `chat:submit` 작업을 매핑하세요.

37 

38## macOS에서 Option 키 단축키 활성화

39 

40일부 Claude Code 단축키는 Option 키를 사용합니다. 예를 들어 줄 바꿈을 위한 Option+Enter 또는 모델을 전환하기 위한 Option+P입니다. macOS에서 대부분의 터미널은 기본적으로 Option을 수정자로 보내지 않으므로 이를 활성화할 때까지 이러한 단축키는 작동하지 않습니다. 터미널 설정은 일반적으로 "Option을 Meta 키로 사용"으로 표시됩니다. Meta는 현재 Option 또는 Alt로 표시된 키의 역사적 Unix 이름입니다.

41 

42<Tabs>

43 <Tab title="Apple Terminal">

44 설정 → 프로필 → 키보드를 열고 "Option을 Meta 키로 사용"을 확인하세요.

45 

46 Claude Code의 첫 실행 프롬프트에서 "줄 바꿈 및 시각적 벨을 위한 Option+Enter"를 제공하는 것을 수락했다면 이미 완료되었습니다. 해당 프롬프트는 `/terminal-setup`을 실행하여 Option을 Meta로 활성화하고 Apple Terminal 프로필에서 오디오 벨을 시각적 화면 깜박임으로 전환합니다.

47 </Tab>

48 

49 <Tab title="iTerm2">

50 설정 → 프로필 → 키 → 일반을 열고 왼쪽 Option 키와 오른쪽 Option 키를 "Esc+"로 설정하세요.

51 

52 iTerm2에서 `/terminal-setup`을 실행하면 설정 → 일반 → 선택 아래에서 "터미널의 애플리케이션이 클립보드에 액세스할 수 있음"을 활성화하여 `/copy` 명령이 시스템 클립보드에 쓸 수 있도록 합니다. 이 명령은 tmux 내부에서 실행되는 경우에도 iTerm2를 감지합니다. 변경 사항을 적용하려면 iTerm2를 다시 시작하세요.

53 </Tab>

54 

55 <Tab title="VS Code">

56 VS Code 설정에 `"terminal.integrated.macOptionIsMeta": true`를 추가하세요.

57 </Tab>

58</Tabs>

59 

60Ghostty, Kitty 및 기타 터미널의 경우 터미널의 구성 파일에서 Option-as-Alt 또는 Option-as-Meta 설정을 찾으세요.

61 

62## 터미널 벨 또는 알림 받기

63 

64Claude가 작업을 완료하거나 권한 프롬프트를 위해 일시 중지하면 알림 이벤트를 발생시킵니다. 이를 터미널 벨 또는 데스크톱 알림으로 표시하면 긴 작업이 실행되는 동안 다른 작업으로 전환할 수 있습니다.

65 

66기본적으로 Claude Code는 Ghostty, Kitty 및 iTerm2에서만 데스크톱 알림을 보냅니다. 다른 터미널에서는 [`preferredNotifChannel`](/ko/settings#available-settings)을 `"terminal_bell"`로 설정하여 대신 터미널 벨을 울리거나, 사용자 정의 소리나 명령을 위해 [알림 훅](#play-a-sound-with-a-notification-hook)을 구성하세요.

67 

68데스크톱 알림은 SSH를 통해 로컬 머신에 도달하므로 원격 세션도 여전히 알림을 받을 수 있습니다. Ghostty와 Kitty는 추가 설정 없이 OS 알림 센터로 전달합니다. iTerm2는 전달을 활성화해야 합니다:

69 

70<Steps>

71 <Step title="iTerm2 알림 설정 열기">

72 설정 → 프로필 → 터미널로 이동하세요.

73 </Step>

74 

75 <Step title="알림 활성화">

76 "Notification Center Alerts"를 확인한 후 "Filter Alerts"를 클릭하고 "Send escape sequence-generated alerts"를 활성화하세요.

77 </Step>

78</Steps>

79 

80알림이 여전히 나타나지 않으면 터미널 애플리케이션이 OS 설정에서 알림 권한을 가지고 있는지 확인하고, tmux 내에서 실행 중인 경우 [통과를 활성화](#configure-tmux)하세요.

81 

82### 알림 훅으로 소리 재생

83 

84모든 터미널에서 Claude가 주의가 필요할 때 소리를 재생하거나 사용자 정의 명령을 실행하는 [알림 훅](/ko/hooks-guide#get-notified-when-claude-needs-input)을 구성할 수 있습니다. 훅은 기본 제공 알림과 함께 실행되며 이를 대체하지 않으므로, Warp 또는 VS Code 통합 터미널과 같이 데스크톱 알림을 받지 않는 터미널은 훅을 사용하거나 `preferredNotifChannel`을 `"terminal_bell"`로 설정할 수 있습니다.

85 

86아래 예제는 macOS에서 시스템 소리를 재생합니다. 연결된 가이드에는 macOS, Linux 및 Windows용 데스크톱 알림 명령이 있습니다.

87 

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

89{

90 "hooks": {

91 "Notification": [

92 {

93 "hooks": [{ "type": "command", "command": "afplay /System/Library/Sounds/Glass.aiff" }]

94 }

95 ]

96 }

97}

98```

99 

100## tmux 구성

101 

102Claude Code가 tmux 내에서 실행될 때 기본적으로 두 가지가 손상됩니다: Shift+Enter가 줄 바꿈을 삽입하는 대신 제출하고, 데스크톱 알림 및 [진행률 표시줄](/ko/settings#available-settings)이 외부 터미널에 도달하지 않습니다. `~/.tmux.conf`에 이 줄을 추가한 후 `tmux source-file ~/.tmux.conf`를 실행하여 실행 중인 서버에 적용하세요:

103 

104```bash ~/.tmux.conf theme={null}

105set -g allow-passthrough on

106set -s extended-keys on

107set -as terminal-features 'xterm*:extkeys'

108```

109 

110`allow-passthrough` 줄은 알림 및 진행률 업데이트가 tmux에 의해 삼켜지는 대신 iTerm2, Ghostty 또는 Kitty에 도달하도록 합니다. `extended-keys` 줄은 tmux가 Shift+Enter를 일반 Enter와 구별하도록 하여 줄 바꿈 단축키가 작동하도록 합니다.

111 

112## 색상 테마 일치

113 

114`/theme` 명령을 사용하거나 `/config`의 테마 선택기를 사용하여 터미널과 일치하는 Claude Code 테마를 선택합니다. 자동 옵션을 선택하면 터미널의 밝은 또는 어두운 배경을 감지하므로 테마는 터미널이 할 때마다 OS 모양 변경을 따릅니다. Claude Code는 터미널 애플리케이션에서 설정하는 터미널의 자체 색상 구성표를 제어하지 않습니다.

115 

116인터페이스 하단에 표시되는 내용을 사용자 정의하려면 현재 모델, 작업 디렉토리, git 분기 또는 기타 컨텍스트를 표시하는 [사용자 정의 상태 줄](/ko/statusline)을 구성합니다.

117 

118### 사용자 정의 테마 만들기

119 

120<Note>

121 사용자 정의 테마는 Claude Code v2.1.118 이상이 필요합니다.

122</Note>

123 

124기본 제공 사전 설정 외에도 `/theme`는 정의한 모든 사용자 정의 테마와 설치된 [플러그인](/ko/plugins-reference#themes)에서 제공한 모든 테마를 나열합니다. 목록 끝에서 \*\*새 사용자 정의 테마…\*\*를 선택하여 대화형으로 만들 수 있습니다. 테마 이름을 지정한 다음 개별 색상 토큰을 선택하여 재정의합니다. 사용자 정의 테마가 강조 표시되어 있는 동안 `Ctrl+E`를 눌러 편집합니다.

125 

126각 사용자 정의 테마는 `~/.claude/themes/`의 JSON 파일입니다. `.json` 확장자를 제외한 파일 이름이 테마의 슬러그이며, 테마를 선택하면 `custom:<slug>`이 테마 기본 설정으로 저장됩니다. 파일에는 세 가지 선택적 필드가 있습니다.

127 

128| 필드 | 유형 | 설명 |

129| :---------- | :----- | :------------------------------------------------------------------------------------------------------------------------------- |

130| `name` | string | `/theme`에 표시되는 표시 레이블입니다. 파일 이름 슬러그로 기본 설정됩니다. |

131| `base` | string | 테마가 시작되는 기본 제공 사전 설정입니다: `dark`, `light`, `dark-daltonized`, `light-daltonized`, `dark-ansi`, 또는 `light-ansi`. `dark`로 기본 설정됩니다. |

132| `overrides` | object | 색상 토큰 이름을 색상 값으로 매핑합니다. 여기에 나열되지 않은 토큰은 기본 사전 설정으로 통과합니다. |

133 

134색상 값은 `#rrggbb`, `#rgb`, `rgb(r,g,b)`, `ansi256(n)`, 또는 `ansi:<name>`을 허용합니다. 여기서 `<name>`은 `red` 또는 `cyanBright`와 같은 16가지 표준 ANSI 색상 이름 중 하나입니다. 알 수 없는 토큰과 잘못된 색상 값은 무시되므로 오타가 렌더링을 손상시킬 수 없습니다.

135 

136다음 예제는 어두운 사전 설정을 유지하지만 프롬프트 악센트, 오류 텍스트 및 성공 텍스트를 다시 칠하는 테마를 정의합니다.

137 

138```json ~/.claude/themes/dracula.json theme={null}

139{

140 "name": "Dracula",

141 "base": "dark",

142 "overrides": {

143 "claude": "#bd93f9",

144 "error": "#ff5555",

145 "success": "#50fa7b"

146 }

147}

148```

149 

150Claude Code는 `~/.claude/themes/`를 감시하고 파일이 변경되면 다시 로드하므로 편집기에서 만든 편집 사항이 다시 시작하지 않고도 실행 중인 세션에 적용됩니다.

151 

152아래는 `overrides`에서 설정할 수 있는 토큰을 다룹니다. `/theme`의 대화형 편집기는 여기에서 다루지 않은 몇 가지 단일 목적 악센트(예: 온보딩 화면 색상)를 포함한 라이브 미리보기와 함께 동일한 토큰을 표시합니다.

153 

154<Accordion title="색상 토큰 참조">

155 다음 예제는 여러 그룹의 토큰을 결합합니다: 브랜드 악센트, 계획 모드 테두리, diff 배경 및 전체 화면 메시지 배경입니다.

156 

157 ```json ~/.claude/themes/midnight.json theme={null}

158 {

159 "name": "Midnight",

160 "base": "dark",

161 "overrides": {

162 "claude": "#a78bfa",

163 "planMode": "#38bdf8",

164 "diffAdded": "#14532d",

165 "diffRemoved": "#7f1d1d",

166 "userMessageBackground": "#1e1b4b"

167 }

168 }

169 ```

170 

171 #### 텍스트 및 악센트 색상

172 

173 기본 브랜드 악센트와 인터페이스 전체에서 사용되는 전경 텍스트 음영을 제어합니다.

174 

175 | 토큰 | 제어 대상 |

176 | :------------ | :------------------------------- |

177 | `claude` | 기본 브랜드 악센트, 스피너 및 어시스턴트 레이블에 사용됨 |

178 | `text` | 기본 전경 텍스트 |

179 | `inverseText` | 상태 배지와 같은 색상 배경 위에 그려진 텍스트 |

180 | `inactive` | 힌트, 타임스탬프 및 비활성화된 항목과 같은 보조 텍스트 |

181 | `subtle` | 희미한 테두리 및 강조 해제된 보조 텍스트 |

182 | `suggestion` | 자동 완성 제안 및 선택기의 선택 강조 |

183 | `permission` | 권한 프롬프트 및 선택기를 포함한 대화 상자 테두리 |

184 | `remember` | 메모리 및 `CLAUDE.md` 표시기 |

185 

186 #### 상태 색상

187 

188 메시지 및 표시기 전체에서 성공, 실패 및 경고 상태를 신호합니다.

189 

190 | 토큰 | 제어 대상 |

191 | :-------- | :--------------------- |

192 | `success` | 성공 메시지 및 통과한 검사 |

193 | `error` | 오류 메시지 및 실패 |

194 | `warning` | 경고, 주의 메시지 및 자동 모드 테두리 |

195 | `merged` | 병합된 풀 요청 상태 |

196 

197 #### 입력 상자 및 모드 표시기

198 

199 입력 상자 테두리 색상과 권한 모드 또는 표시기가 활성화되어 있는 동안 표시되는 악센트를 설정합니다.

200 

201 | 토큰 | 제어 대상 |

202 | :------------- | :------------------------ |

203 | `promptBorder` | 기본 권한 모드의 입력 상자 테두리 |

204 | `planMode` | 계획 모드 악센트 및 테두리 |

205 | `autoAccept` | 수락-편집 모드 악센트 및 테두리 |

206 | `bashBorder` | `!` 셸 명령을 입력할 때 입력 상자 테두리 |

207 | `ide` | IDE 연결 표시기 |

208 | `fastMode` | 빠른 모드 표시기 |

209 

210 #### Diff 렌더링

211 

212 파일 편집 및 검토에서 추가되고 제거된 코드를 색칠합니다.

213 

214 | 토큰 | 제어 대상 |

215 | :------------------ | :------------------------ |

216 | `diffAdded` | 추가된 줄의 배경 |

217 | `diffRemoved` | 제거된 줄의 배경 |

218 | `diffAddedDimmed` | 추가된 줄 근처의 변경되지 않은 컨텍스트 배경 |

219 | `diffRemovedDimmed` | 제거된 줄 근처의 변경되지 않은 컨텍스트 배경 |

220 | `diffAddedWord` | 추가된 줄 내의 단어 수준 강조 |

221 | `diffRemovedWord` | 제거된 줄 내의 단어 수준 강조 |

222 

223 #### 전체 화면 모드

224 

225 메시지가 배경 채우기를 갖는 [전체 화면 렌더링 모드](/ko/fullscreen)에서만 적용됩니다.

226 

227 | 토큰 | 제어 대상 |

228 | :--------------------------- | :---------------------------- |

229 | `userMessageBackground` | 트랜스크립트의 메시지 뒤의 배경 |

230 | `userMessageBackgroundHover` | 마우스를 올리거나 확장할 때 메시지 뒤의 배경 |

231 | `messageActionsBackground` | 작업 표시줄이 열려 있을 때 선택된 메시지 뒤의 배경 |

232 | `bashMessageBackgroundColor` | 트랜스크립트의 `!` 셸 명령 항목 뒤의 배경 |

233 | `memoryBackgroundColor` | 트랜스크립트의 `#` 메모리 항목 뒤의 배경 |

234 | `selectionBg` | 마우스로 선택한 텍스트의 배경 |

235 

236 #### 사용량 미터 및 스피커 레이블

237 

238 `/usage` 보기에 표시되는 막대와 메시지를 Claude의 메시지와 구별하는 레이블을 조정합니다.

239 

240 | 토큰 | 제어 대상 |

241 | :----------------- | :------------------------- |

242 | `rate_limit_fill` | 사용량 미터의 채워진 부분 |

243 | `rate_limit_empty` | 사용량 미터의 채워지지 않은 부분 |

244 | `briefLabelYou` | 메시지의 `You` 레이블 색상 |

245 | `briefLabelClaude` | 어시스턴트 메시지의 `Claude` 레이블 색상 |

246 

247 #### 반짝임 변형 및 서브에이전트 색상

248 

249 여러 토큰에는 쌍을 이루는 반짝임 변형이 있으며, 이는 스피너의 애니메이션 그래디언트에서 사용되는 더 밝은 색상을 제공합니다. 애니메이션이 일치하지 않는 것처럼 보이면 기본 토큰과 함께 반짝임을 재정의합니다.

250 

251 * `claude` 및 `claudeShimmer`

252 * `warning` 및 `warningShimmer`

253 * `permission` 및 `permissionShimmer`

254 * `promptBorder` 및 `promptBorderShimmer`

255 * `inactive` 및 `inactiveShimmer`

256 * `fastMode` 및 `fastModeShimmer`

257 

258 각 [서브에이전트](/ko/sub-agents) 및 병렬 작업은 8개의 명명된 색상 중 하나로 표시되므로 트랜스크립트에서 구별할 수 있습니다. 토큰 이름은 `<color>_FOR_SUBAGENTS_ONLY` 패턴을 따릅니다. 여기서 `<color>`는 `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink` 또는 `cyan`입니다. 이를 재정의하여 각 명명된 색상의 모양을 변경합니다. 예를 들어, 정의에서 `color: blue`를 가진 서브에이전트는 `blue_FOR_SUBAGENTS_ONLY` 값을 사용하여 그려집니다.

259 

260 [`ultrathink`](/ko/model-config#use-ultrathink-for-one-off-deep-reasoning) 및 [`ultraplan`](/ko/ultraplan) 키워드는 프롬프트 입력에서 7색 무지개 그래디언트로 렌더링됩니다. 토큰 이름은 `rainbow_<color>` 및 `rainbow_<color>_shimmer` 패턴을 따릅니다. 여기서 `<color>`는 `red`, `orange`, `yellow`, `green`, `blue`, `indigo` 또는 `violet`입니다.

261</Accordion>

262 

263## 전체 화면 렌더링으로 전환

264 

265디스플레이가 깜박이거나 Claude가 작업 중일 때 스크롤 위치가 점프하면 [전체 화면 렌더링 모드](/ko/fullscreen)로 전환하세요. 터미널이 일반 스크롤백에 추가하는 대신 전체 화면 앱용으로 예약한 별도의 화면에 그려서 메모리 사용량을 평탄하게 유지하고 스크롤 및 선택을 위한 마우스 지원을 추가합니다. 이 모드에서는 터미널의 기본 스크롤백이 아닌 마우스 또는 PageUp으로 Claude Code 내에서 스크롤합니다. 검색 및 복사 방법은 [전체 화면 페이지](/ko/fullscreen#search-and-review-the-conversation)를 참조하세요.

266 

267현재 세션에서 대화를 유지하면서 전환하려면 `/tui fullscreen`을 실행하세요. 기본값으로 설정하려면 Claude Code를 시작하기 전에 `CLAUDE_CODE_NO_FLICKER` 환경 변수를 설정하세요:

268 

269<CodeGroup>

270 ```bash Bash and Zsh theme={null}

271 CLAUDE_CODE_NO_FLICKER=1 claude

272 ```

273 

274 ```powershell PowerShell theme={null}

275 $env:CLAUDE_CODE_NO_FLICKER = "1"; claude

276 ```

277 

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

279 {

280 "env": {

281 "CLAUDE_CODE_NO_FLICKER": "1"

282 }

283 }

284 ```

285</CodeGroup>

286 

287## 큰 콘텐츠 붙여넣기

288 

289프롬프트에 10,000자 이상을 붙여넣으면 Claude Code는 입력을 `[Pasted text]` 자리 표시자로 축소하여 입력 상자를 사용 가능하게 유지합니다. 전체 콘텐츠는 제출할 때 여전히 Claude에 전송됩니다.

290 

291VS Code 통합 터미널은 매우 큰 붙여넣기에서 Claude Code에 도달하기 전에 문자를 삭제할 수 있으므로 거기서 파일 기반 워크플로우를 선호하세요. 전체 파일 또는 긴 로그와 같은 매우 큰 입력의 경우 콘텐츠를 파일에 작성하고 붙여넣는 대신 Claude에 읽도록 요청하세요. 이렇게 하면 대화 기록을 읽을 수 있게 유지하고 Claude가 나중에 경로로 파일을 참조할 수 있습니다.

292 

293## Vim 키 바인딩으로 프롬프트 편집

294 

295Claude Code는 프롬프트 입력을 위한 Vim 스타일 편집 모드를 포함합니다. `/config` → 편집기 모드를 통해 활성화하거나 [`editorMode`](/ko/settings#available-settings)를 `~/.claude/settings.json`에서 `"vim"`으로 설정하여 활성화하세요. 편집기 모드를 `normal`로 다시 설정하여 끄세요.

296 

297Vim 모드는 `hjkl` 네비게이션, `v`/`V` 선택, 텍스트 객체를 사용한 `d`/`c`/`y`와 같은 NORMAL 모드 및 VISUAL 모드 모션과 연산자의 부분 집합을 지원합니다. 전체 키 테이블은 [Vim 편집기 모드 참조](/ko/interactive-mode#vim-editor-mode)를 참조하세요. Vim 모션은 키 바인딩 파일을 통해 다시 매핑할 수 없습니다.

298 

299INSERT 모드에서 Enter를 누르면 표준 Vim과 달리 프롬프트가 여전히 제출됩니다. 대신 NORMAL 모드에서 `o` 또는 `O`를 사용하거나 Ctrl+J를 사용하여 줄 바꿈을 삽입하세요.

300 

301## 관련 리소스

302 

303* [대화형 모드](/ko/interactive-mode): 전체 키보드 단축키 참조 및 Vim 키 테이블

304* [키 바인딩](/ko/keybindings): Enter 및 Shift+Enter를 포함한 모든 Claude Code 단축키 다시 매핑

305* [전체 화면 렌더링](/ko/fullscreen): 전체 화면 모드에서 스크롤, 검색 및 복사에 대한 세부 정보

306* [훅 가이드](/ko/hooks-guide): Linux 및 Windows용 더 많은 알림 훅 예제

307* [문제 해결](/ko/troubleshooting): 터미널 구성 외부의 문제에 대한 수정 사항

third-party-integrations.md +262 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 엔터프라이즈 배포 개요

6 

7> Claude Code가 다양한 타사 서비스 및 인프라와 통합되어 엔터프라이즈 배포 요구사항을 충족하는 방법을 알아봅니다.

8 

9조직은 Anthropic을 통해 직접 또는 클라우드 제공자를 통해 Claude Code를 배포할 수 있습니다. 이 페이지는 올바른 구성을 선택하는 데 도움을 줍니다.

10 

11## 배포 옵션 비교

12 

13대부분의 조직에서는 Claude for Teams 또는 Claude for Enterprise가 최고의 경험을 제공합니다. 팀 멤버는 단일 구독으로 Claude Code와 웹의 Claude에 모두 액세스할 수 있으며, 중앙 집중식 청구 및 인프라 설정이 필요하지 않습니다.

14 

15**Claude for Teams**는 셀프 서비스이며 협업 기능, 관리 도구 및 청구 관리를 포함합니다. 빠르게 시작해야 하는 소규모 팀에 최적입니다.

16 

17**Claude for Enterprise**는 SSO 및 도메인 캡처, 역할 기반 권한, 규정 준수 API 액세스 및 조직 전체 Claude Code 구성을 배포하기 위한 관리형 정책 설정을 추가합니다. 보안 및 규정 준수 요구사항이 있는 대규모 조직에 최적입니다.

18 

19[팀 플랜](https://support.claude.com/ko/articles/9266767-what-is-the-team-plan) 및 [엔터프라이즈 플랜](https://support.claude.com/ko/articles/9797531-what-is-the-enterprise-plan)에 대해 자세히 알아봅니다.

20 

21조직에 특정 인프라 요구사항이 있는 경우 아래 옵션을 비교하십시오:

22 

23<table>

24 <thead>

25 <tr>

26 <th>기능</th>

27 <th>Claude for Teams/Enterprise</th>

28 <th>Anthropic Console</th>

29 <th>Amazon Bedrock</th>

30 <th>Google Vertex AI</th>

31 <th>Microsoft Foundry</th>

32 </tr>

33 </thead>

34 

35 <tbody>

36 <tr>

37 <td>최적 용도</td>

38 <td>대부분의 조직 (권장)</td>

39 <td>개별 개발자</td>

40 <td>AWS 네이티브 배포</td>

41 <td>GCP 네이티브 배포</td>

42 <td>Azure 네이티브 배포</td>

43 </tr>

44 

45 <tr>

46 <td>청구</td>

47 <td><strong>Teams:</strong> \$150/seat (Premium) PAYG 사용 가능<br /><strong>Enterprise:</strong> <a href="https://claude.com/contact-sales?utm_source=claude_code&utm_medium=docs&utm_content=third_party_enterprise">영업팀에 문의</a></td>

48 <td>PAYG</td>

49 <td>AWS를 통한 PAYG</td>

50 <td>GCP를 통한 PAYG</td>

51 <td>Azure를 통한 PAYG</td>

52 </tr>

53 

54 <tr>

55 <td>지역</td>

56 <td>지원되는 [국가](https://www.anthropic.com/supported-countries)</td>

57 <td>지원되는 [국가](https://www.anthropic.com/supported-countries)</td>

58 <td>여러 AWS [지역](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html)</td>

59 <td>여러 GCP [지역](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/locations)</td>

60 <td>여러 Azure [지역](https://azure.microsoft.com/en-us/explore/global-infrastructure/products-by-region/)</td>

61 </tr>

62 

63 <tr>

64 <td>Prompt caching</td>

65 <td>기본적으로 활성화됨</td>

66 <td>기본적으로 활성화됨</td>

67 <td>기본적으로 활성화됨</td>

68 <td>기본적으로 활성화됨</td>

69 <td>기본적으로 활성화됨</td>

70 </tr>

71 

72 <tr>

73 <td>인증</td>

74 <td>Claude.ai SSO 또는 이메일</td>

75 <td>API 키</td>

76 <td>API 키 또는 AWS 자격증명</td>

77 <td>GCP 자격증명</td>

78 <td>API 키 또는 Microsoft Entra ID</td>

79 </tr>

80 

81 <tr>

82 <td>비용 추적</td>

83 <td>사용량 대시보드</td>

84 <td>사용량 대시보드</td>

85 <td>AWS Cost Explorer</td>

86 <td>GCP 청구</td>

87 <td>Azure Cost Management</td>

88 </tr>

89 

90 <tr>

91 <td>웹의 Claude 포함</td>

92 <td>예</td>

93 <td>아니오</td>

94 <td>아니오</td>

95 <td>아니오</td>

96 <td>아니오</td>

97 </tr>

98 

99 <tr>

100 <td>엔터프라이즈 기능</td>

101 <td>팀 관리, SSO, 사용량 모니터링</td>

102 <td>없음</td>

103 <td>IAM 정책, CloudTrail</td>

104 <td>IAM 역할, Cloud Audit Logs</td>

105 <td>RBAC 정책, Azure Monitor</td>

106 </tr>

107 </tbody>

108</table>

109 

110배포 옵션을 선택하여 설정 지침을 확인하십시오:

111 

112* [Claude for Teams 또는 Enterprise](/ko/authentication#claude-for-teams-or-enterprise)

113* [Anthropic Console](/ko/authentication#claude-console-authentication)

114* [Amazon Bedrock](/ko/amazon-bedrock)

115* [Google Vertex AI](/ko/google-vertex-ai)

116* [Microsoft Foundry](/ko/microsoft-foundry)

117 

118## 프록시 및 게이트웨이 구성

119 

120대부분의 조직은 추가 구성 없이 클라우드 제공자를 직접 사용할 수 있습니다. 그러나 조직에 특정 네트워크 또는 관리 요구사항이 있는 경우 회사 프록시 또는 LLM 게이트웨이를 구성해야 할 수 있습니다. 이는 함께 사용할 수 있는 다양한 구성입니다:

121 

122* **회사 프록시**: HTTP/HTTPS 프록시를 통해 트래픽을 라우팅합니다. 조직에서 보안 모니터링, 규정 준수 또는 네트워크 정책 적용을 위해 모든 아웃바운드 트래픽이 프록시 서버를 통과해야 하는 경우 이를 사용하십시오. `HTTPS_PROXY` 또는 `HTTP_PROXY` 환경 변수로 구성합니다. [엔터프라이즈 네트워크 구성](/ko/network-config)에서 자세히 알아봅니다.

123* **LLM 게이트웨이**: Claude Code와 클라우드 제공자 사이에 위치하여 인증 및 라우팅을 처리하는 서비스입니다. 팀 전체에서 중앙 집중식 사용량 추적, 사용자 정의 속도 제한 또는 예산, 또는 중앙 집중식 인증 관리가 필요한 경우 이를 사용하십시오. `ANTHROPIC_BASE_URL`, `ANTHROPIC_BEDROCK_BASE_URL` 또는 `ANTHROPIC_VERTEX_BASE_URL` 환경 변수로 구성합니다. [LLM 게이트웨이 구성](/ko/llm-gateway)에서 자세히 알아봅니다.

124 

125다음 예제는 셸 또는 셸 프로필(`.bashrc`, `.zshrc`)에서 설정할 환경 변수를 보여줍니다. 다른 구성 방법은 [설정](/ko/settings)을 참조하십시오.

126 

127### Amazon Bedrock

128 

129<Tabs>

130 <Tab title="회사 프록시">

131 다음 [환경 변수](/ko/env-vars)를 설정하여 Bedrock 트래픽을 회사 프록시를 통해 라우팅합니다:

132 

133 ```bash theme={null}

134 # Bedrock 활성화

135 export CLAUDE_CODE_USE_BEDROCK=1

136 export AWS_REGION=us-east-1

137 

138 # 회사 프록시 구성

139 export HTTPS_PROXY='https://proxy.example.com:8080'

140 ```

141 </Tab>

142 

143 <Tab title="LLM 게이트웨이">

144 다음 [환경 변수](/ko/env-vars)를 설정하여 Bedrock 트래픽을 LLM 게이트웨이를 통해 라우팅합니다:

145 

146 ```bash theme={null}

147 # Bedrock 활성화

148 export CLAUDE_CODE_USE_BEDROCK=1

149 

150 # LLM 게이트웨이 구성

151 export ANTHROPIC_BEDROCK_BASE_URL='https://your-llm-gateway.com/bedrock'

152 export CLAUDE_CODE_SKIP_BEDROCK_AUTH=1 # 게이트웨이가 AWS 인증을 처리하는 경우

153 ```

154 </Tab>

155</Tabs>

156 

157### Microsoft Foundry

158 

159<Tabs>

160 <Tab title="회사 프록시">

161 다음 [환경 변수](/ko/env-vars)를 설정하여 Foundry 트래픽을 회사 프록시를 통해 라우팅합니다:

162 

163 ```bash theme={null}

164 # Microsoft Foundry 활성화

165 export CLAUDE_CODE_USE_FOUNDRY=1

166 export ANTHROPIC_FOUNDRY_RESOURCE=your-resource

167 export ANTHROPIC_FOUNDRY_API_KEY=your-api-key # 또는 Entra ID 인증의 경우 생략

168 

169 # 회사 프록시 구성

170 export HTTPS_PROXY='https://proxy.example.com:8080'

171 ```

172 </Tab>

173 

174 <Tab title="LLM 게이트웨이">

175 다음 [환경 변수](/ko/env-vars)를 설정하여 Foundry 트래픽을 LLM 게이트웨이를 통해 라우팅합니다:

176 

177 ```bash theme={null}

178 # Microsoft Foundry 활성화

179 export CLAUDE_CODE_USE_FOUNDRY=1

180 

181 # LLM 게이트웨이 구성

182 export ANTHROPIC_FOUNDRY_BASE_URL='https://your-llm-gateway.com'

183 export CLAUDE_CODE_SKIP_FOUNDRY_AUTH=1 # 게이트웨이가 Azure 인증을 처리하는 경우

184 ```

185 </Tab>

186</Tabs>

187 

188### Google Vertex AI

189 

190<Tabs>

191 <Tab title="회사 프록시">

192 다음 [환경 변수](/ko/env-vars)를 설정하여 Vertex AI 트래픽을 회사 프록시를 통해 라우팅합니다:

193 

194 ```bash theme={null}

195 # Vertex 활성화

196 export CLAUDE_CODE_USE_VERTEX=1

197 export CLOUD_ML_REGION=us-east5

198 export ANTHROPIC_VERTEX_PROJECT_ID=your-project-id

199 

200 # 회사 프록시 구성

201 export HTTPS_PROXY='https://proxy.example.com:8080'

202 ```

203 </Tab>

204 

205 <Tab title="LLM 게이트웨이">

206 다음 [환경 변수](/ko/env-vars)를 설정하여 Vertex AI 트래픽을 LLM 게이트웨이를 통해 라우팅합니다:

207 

208 ```bash theme={null}

209 # Vertex 활성화

210 export CLAUDE_CODE_USE_VERTEX=1

211 

212 # LLM 게이트웨이 구성

213 export ANTHROPIC_VERTEX_BASE_URL='https://your-llm-gateway.com/vertex'

214 export CLAUDE_CODE_SKIP_VERTEX_AUTH=1 # 게이트웨이가 GCP 인증을 처리하는 경우

215 ```

216 </Tab>

217</Tabs>

218 

219<Tip>

220 Claude Code에서 `/status`를 사용하여 프록시 및 게이트웨이 구성이 올바르게 적용되었는지 확인합니다.

221</Tip>

222 

223## 조직을 위한 모범 사례

224 

225### 문서 및 메모리에 투자

226 

227Claude Code가 코드베이스를 이해할 수 있도록 문서에 투자할 것을 강력히 권장합니다. 조직은 여러 수준에서 CLAUDE.md 파일을 배포할 수 있습니다:

228 

229* **조직 전체**: 회사 전체 표준을 위해 `/Library/Application Support/ClaudeCode/CLAUDE.md` (macOS)와 같은 시스템 디렉토리에 배포

230* **저장소 수준**: 프로젝트 아키텍처, 빌드 명령 및 기여 지침을 포함하는 저장소 루트에 `CLAUDE.md` 파일을 만듭니다. 이를 소스 제어에 체크인하여 모든 사용자가 이점을 얻을 수 있도록 합니다.

231 

232[메모리 및 CLAUDE.md 파일](/ko/memory)에서 자세히 알아봅니다.

233 

234### 배포 단순화

235 

236사용자 정의 개발 환경이 있는 경우 Claude Code를 설치하는 "원클릭" 방법을 만드는 것이 조직 전체에서 채택을 늘리는 핵심이라는 것을 알았습니다.

237 

238### 안내된 사용으로 시작

239 

240새 사용자가 코드베이스 Q\&A 또는 더 작은 버그 수정 또는 기능 요청에 Claude Code를 시도하도록 권장합니다. Claude Code에 계획을 세우도록 요청합니다. Claude의 제안을 확인하고 잘못된 경우 피드백을 제공합니다. 시간이 지남에 따라 사용자가 이 새로운 패러다임을 더 잘 이해하게 되면 Claude Code를 더 에이전트적으로 실행하는 데 더 효과적이 될 것입니다.

241 

242### 클라우드 제공자를 위한 모델 버전 고정

243 

244[Bedrock](/ko/amazon-bedrock), [Vertex AI](/ko/google-vertex-ai) 또는 [Foundry](/ko/microsoft-foundry)를 통해 배포하는 경우 `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL` 및 `ANTHROPIC_DEFAULT_HAIKU_MODEL`을 사용하여 특정 모델 버전을 고정합니다. 고정하지 않으면 Claude Code 별칭이 최신 버전으로 확인되어 Anthropic이 아직 계정에서 활성화되지 않은 새 모델을 출시할 때 사용자가 손상될 수 있습니다. 자세한 내용은 [모델 구성](/ko/model-config#pin-models-for-third-party-deployments)을 참조하십시오.

245 

246### 보안 정책 구성

247 

248보안 팀은 Claude Code가 수행할 수 있고 수행할 수 없는 작업에 대한 관리형 권한을 구성할 수 있으며, 이는 로컬 구성으로 덮어쓸 수 없습니다. [자세히 알아봅니다](/ko/security).

249 

250### MCP를 통합에 활용

251 

252MCP는 Claude Code에 더 많은 정보를 제공하는 좋은 방법입니다. 예를 들어 티켓 관리 시스템 또는 오류 로그에 연결할 수 있습니다. 한 중앙 팀이 MCP 서버를 구성하고 `.mcp.json` 구성을 코드베이스에 체크인하여 모든 사용자가 이점을 얻을 수 있도록 할 것을 권장합니다. [자세히 알아봅니다](/ko/mcp).

253 

254Anthropic에서는 Claude Code를 신뢰하여 모든 Anthropic 코드베이스에서 개발을 강화합니다. Claude Code를 우리만큼 즐기시기를 바랍니다.

255 

256## 다음 단계

257 

258배포 옵션을 선택하고 팀에 대한 액세스를 구성한 후:

259 

2601. **팀에 롤아웃**: 설치 지침을 공유하고 팀 멤버가 [Claude Code를 설치](/ko/setup)하고 자신의 자격증명으로 인증하도록 합니다.

2612. **공유 구성 설정**: 저장소에 [CLAUDE.md 파일](/ko/memory)을 만들어 Claude Code가 코드베이스 및 코딩 표준을 이해하도록 도와줍니다.

2623. **권한 구성**: [보안 설정](/ko/security)을 검토하여 Claude Code가 환경에서 수행할 수 있고 수행할 수 없는 작업을 정의합니다.

tools-reference.md +148 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 도구 참조

6 

7> Claude Code가 사용할 수 있는 도구의 완전한 참조 자료이며, 권한 요구사항을 포함합니다.

8 

9Claude Code는 코드베이스를 이해하고 수정하는 데 도움이 되는 도구 세트에 접근할 수 있습니다. 도구 이름은 [권한 규칙](/ko/permissions#tool-specific-permission-rules), [subagent 도구 목록](/ko/sub-agents), 및 [hook 매처](/ko/hooks)에서 사용하는 정확한 문자열입니다. 도구를 완전히 비활성화하려면 [권한 설정](/ko/permissions#tool-specific-permission-rules)의 `deny` 배열에 해당 이름을 추가합니다.

10 

11사용자 정의 도구를 추가하려면 [MCP 서버](/ko/mcp)를 연결합니다. Claude를 재사용 가능한 프롬프트 기반 워크플로우로 확장하려면 [skill](/ko/skills)을 작성합니다. 이는 새로운 도구 항목을 추가하는 대신 기존 `Skill` 도구를 통해 실행됩니다.

12 

13| 도구 | 설명 | 필요한 권한 |

14| :--------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----- |

15| `Agent` | 작업을 처리하기 위해 자체 context window를 가진 [subagent](/ko/sub-agents)를 생성합니다 | 아니오 |

16| `AskUserQuestion` | 요구사항을 수집하거나 모호함을 명확히 하기 위해 객관식 질문을 합니다 | 아니오 |

17| `Bash` | 환경에서 shell 명령을 실행합니다. [Bash 도구 동작](#bash-tool-behavior) 참조 | 예 |

18| `CronCreate` | 현재 세션 내에서 반복 또는 일회성 프롬프트를 예약합니다. 작업은 세션 범위이며 `--resume` 또는 `--continue`에서 만료되지 않으면 복원됩니다. [예약된 작업](/ko/scheduled-tasks) 참조 | 아니오 |

19| `CronDelete` | ID로 예약된 작업을 취소합니다 | 아니오 |

20| `CronList` | 세션의 모든 예약된 작업을 나열합니다 | 아니오 |

21| `Edit` | 특정 파일에 대한 대상 편집을 수행합니다 | 예 |

22| `EnterPlanMode` | Plan Mode로 전환하여 코딩 전에 접근 방식을 설계합니다 | 아니오 |

23| `EnterWorktree` | 격리된 [git worktree](/ko/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees)를 생성하고 전환합니다. 새로운 worktree를 생성하는 대신 현재 저장소의 기존 worktree로 전환하려면 `path`를 전달합니다. Subagent에서는 사용할 수 없습니다 | 아니오 |

24| `ExitPlanMode` | 승인을 위한 계획을 제시하고 Plan Mode를 종료합니다 | 예 |

25| `ExitWorktree` | worktree 세션을 종료하고 원래 디렉토리로 돌아갑니다. Subagent에서는 사용할 수 없습니다 | 아니오 |

26| `Glob` | 패턴 매칭을 기반으로 파일을 찾습니다 | 아니오 |

27| `Grep` | 파일 내용에서 패턴을 검색합니다 | 아니오 |

28| `ListMcpResourcesTool` | 연결된 [MCP 서버](/ko/mcp)에서 노출된 리소스를 나열합니다 | 아니오 |

29| `LSP` | 언어 서버를 통한 코드 인텔리전스: 정의로 이동, 참조 찾기, 타입 오류 및 경고 보고. [LSP 도구 동작](#lsp-tool-behavior) 참조 | 아니오 |

30| `Monitor` | 백그라운드에서 명령을 실행하고 각 출력 라인을 Claude에 다시 전달하므로, Claude는 로그 항목, 파일 변경 또는 대화 중 폴링된 상태에 반응할 수 있습니다. [Monitor 도구](#monitor-tool) 참조 | 예 |

31| `NotebookEdit` | Jupyter 노트북 셀을 수정합니다 | 예 |

32| `PowerShell` | PowerShell 명령을 기본적으로 실행합니다. [PowerShell 도구](#powershell-tool) 참조 | 예 |

33| `Read` | 파일의 내용을 읽습니다 | 아니오 |

34| `ReadMcpResourceTool` | URI로 특정 MCP 리소스를 읽습니다 | 아니오 |

35| `SendMessage` | [agent team](/ko/agent-teams) 팀원에게 메시지를 보내거나, agent ID로 [subagent를 재개합니다](/ko/sub-agents#resume-subagents). 중지된 subagent는 백그라운드에서 자동으로 재개됩니다. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`이 설정되었을 때만 사용 가능합니다 | 아니오 |

36| `Skill` | 주 대화 내에서 [skill](/ko/skills#control-who-invokes-a-skill)을 실행합니다 | 예 |

37| `TaskCreate` | 작업 목록에 새 작업을 생성합니다 | 아니오 |

38| `TaskGet` | 특정 작업의 전체 세부 정보를 검색합니다 | 아니오 |

39| `TaskList` | 현재 상태와 함께 모든 작업을 나열합니다 | 아니오 |

40| `TaskOutput` | (더 이상 사용되지 않음) 백그라운드 작업에서 출력을 검색합니다. 작업의 출력 파일 경로에서 `Read`를 사용하는 것을 권장합니다 | 아니오 |

41| `TaskStop` | ID로 실행 중인 백그라운드 작업을 종료합니다 | 아니오 |

42| `TaskUpdate` | 작업 상태, 종속성, 세부 정보를 업데이트하거나 작업을 삭제합니다 | 아니오 |

43| `TeamCreate` | 여러 팀원이 있는 [agent team](/ko/agent-teams)을 생성합니다. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`이 설정되었을 때만 사용 가능합니다 | 아니오 |

44| `TeamDelete` | agent team을 해산하고 팀원 프로세스를 정리합니다. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`이 설정되었을 때만 사용 가능합니다 | 아니오 |

45| `TodoWrite` | 세션 작업 체크리스트를 관리합니다. 비대화형 모드 및 [Agent SDK](/ko/headless)에서 사용 가능합니다. 대화형 세션은 대신 TaskCreate, TaskGet, TaskList, TaskUpdate를 사용합니다 | 아니오 |

46| `ToolSearch` | [tool search](/ko/mcp#scale-with-mcp-tool-search)가 활성화되었을 때 지연된 도구를 검색하고 로드합니다 | 아니오 |

47| `WebFetch` | 지정된 URL에서 콘텐츠를 가져옵니다 | 예 |

48| `WebSearch` | 웹 검색을 수행합니다 | 예 |

49| `Write` | 파일을 생성하거나 덮어씁니다 | 예 |

50 

51권한 규칙은 `/permissions`를 사용하거나 [권한 설정](/ko/settings#available-settings)에서 구성할 수 있습니다. [도구별 권한 규칙](/ko/permissions#tool-specific-permission-rules)도 참조하십시오.

52 

53## Bash 도구 동작

54 

55Bash 도구는 다음의 지속성 동작으로 각 명령을 별도의 프로세스에서 실행합니다:

56 

57* Claude가 주 세션에서 `cd`를 실행할 때, 새로운 작업 디렉토리는 프로젝트 디렉토리 내에 머물러 있거나 `--add-dir`, `/add-dir`, 또는 설정의 `additionalDirectories`로 추가한 [추가 작업 디렉토리](/ko/permissions#working-directories) 내에 머물러 있는 한 이후 Bash 명령으로 이월됩니다. Subagent 세션은 절대 작업 디렉토리 변경을 이월하지 않습니다.

58 * `cd`가 해당 디렉토리 외부로 이동하면, Claude Code는 프로젝트 디렉토리로 재설정하고 도구 결과에 `Shell cwd was reset to <dir>`을 추가합니다.

59 * 모든 Bash 명령이 프로젝트 디렉토리에서 시작하도록 이 이월을 비활성화하려면 `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=1`을 설정합니다.

60* 환경 변수는 지속되지 않습니다. 한 명령의 `export`는 다음 명령에서 사용할 수 없습니다.

61 

62Claude Code를 시작하기 전에 virtualenv 또는 conda 환경을 활성화합니다. Bash 명령 전체에서 환경 변수를 지속하려면 Claude Code를 시작하기 전에 [`CLAUDE_ENV_FILE`](/ko/env-vars)을 shell 스크립트로 설정하거나, [SessionStart hook](/ko/hooks#persist-environment-variables)을 사용하여 동적으로 채웁니다.

63 

64## LSP 도구 동작

65 

66LSP 도구는 실행 중인 언어 서버에서 Claude에 코드 인텔리전스를 제공합니다. 각 파일 편집 후 자동으로 타입 오류 및 경고를 보고하므로 Claude는 별도의 빌드 단계 없이 문제를 수정할 수 있습니다. Claude는 또한 코드를 탐색하기 위해 직접 호출할 수 있습니다:

67 

68* 기호의 정의로 이동

69* 기호에 대한 모든 참조 찾기

70* 위치의 타입 정보 가져오기

71* 파일 또는 워크스페이스의 기호 나열

72* 인터페이스의 구현 찾기

73* 호출 계층 추적

74 

75이 도구는 언어에 대한 [코드 인텔리전스 플러그인](/ko/discover-plugins#code-intelligence)을 설치할 때까지 비활성 상태입니다. 플러그인은 언어 서버 구성을 번들로 제공하며, 서버 바이너리는 별도로 설치합니다.

76 

77## Monitor 도구

78 

79<Note>

80 Monitor 도구는 Claude Code v2.1.98 이상이 필요합니다.

81</Note>

82 

83Monitor 도구를 사용하면 Claude는 백그라운드에서 무언가를 감시하고 대화를 일시 중지하지 않고 변경될 때 반응할 수 있습니다. Claude에 다음을 요청합니다:

84 

85* 로그 파일을 추적하고 오류가 나타나면 플래그 지정

86* PR 또는 CI 작업을 폴링하고 상태가 변경되면 보고

87* 파일 변경을 위해 디렉토리 감시

88* 지정한 장기 실행 스크립트의 출력 추적

89 

90Claude는 감시를 위한 작은 스크립트를 작성하고, 백그라운드에서 실행하며, 각 출력 라인이 도착할 때 수신합니다. 동일한 세션에서 계속 작업하고 Claude는 이벤트가 발생할 때 개입합니다. Claude에 취소하도록 요청하거나 세션을 종료하여 모니터를 중지합니다.

91 

92Monitor는 [Bash와 동일한 권한 규칙](/ko/permissions#tool-specific-permission-rules)을 사용하므로, Bash에 대해 설정한 `allow` 및 `deny` 패턴이 여기에도 적용됩니다. Amazon Bedrock, Google Vertex AI 또는 Microsoft Foundry에서는 사용할 수 없습니다. `DISABLE_TELEMETRY` 또는 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`이 설정되었을 때도 사용할 수 없습니다.

93 

94플러그인은 Claude에 시작하도록 요청하는 대신 플러그인이 활성화될 때 자동으로 시작되는 모니터를 선언할 수 있습니다. [플러그인 모니터](/ko/plugins-reference#monitors)를 참조합니다.

95 

96## PowerShell 도구

97 

98PowerShell 도구를 사용하면 Claude는 PowerShell 명령을 기본적으로 실행할 수 있습니다. Windows에서는 이것이 Git Bash를 통해 라우팅하는 대신 PowerShell에서 명령을 실행한다는 의미입니다. Git Bash가 없는 Windows에서는 도구가 자동으로 활성화됩니다. Git Bash가 설치된 Windows에서는 도구가 점진적으로 출시되고 있습니다. Linux, macOS 및 WSL에서는 도구가 옵트인입니다.

99 

100### PowerShell 도구 활성화

101 

102환경 또는 `settings.json`에서 `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`을 설정합니다:

103 

104```json theme={null}

105{

106 "env": {

107 "CLAUDE_CODE_USE_POWERSHELL_TOOL": "1"

108 }

109}

110```

111 

112Windows에서는 변수를 `0`으로 설정하여 출시를 거부할 수 있습니다. Linux, macOS 및 WSL에서는 도구에 PowerShell 7 이상이 필요합니다: `pwsh`를 설치하고 `PATH`에 있는지 확인합니다.

113 

114Windows에서 Claude Code는 PowerShell 7+의 경우 `pwsh.exe`를 자동 감지하며 PowerShell 5.1의 경우 `powershell.exe`로 폴백합니다. 도구가 활성화되면 Claude는 PowerShell을 기본 셸로 취급합니다. Bash 도구는 Git Bash가 설치되어 있을 때 POSIX 스크립트에 사용할 수 있습니다.

115 

116### 설정, hook 및 skill의 shell 선택

117 

118세 가지 추가 설정이 PowerShell이 사용되는 위치를 제어합니다:

119 

120* [`settings.json`](/ko/settings#available-settings)의 `"defaultShell": "powershell"`: 대화형 `!` 명령을 PowerShell을 통해 라우팅합니다. PowerShell 도구가 활성화되어야 합니다.

121* 개별 [command hook](/ko/hooks#command-hook-fields)의 `"shell": "powershell"`: 해당 hook을 PowerShell에서 실행합니다. Hook은 PowerShell을 직접 생성하므로 `CLAUDE_CODE_USE_POWERSHELL_TOOL`에 관계없이 작동합니다.

122* [skill frontmatter](/ko/skills#frontmatter-reference)의 `shell: powershell`: `` !`command` `` 블록을 PowerShell에서 실행합니다. PowerShell 도구가 활성화되어야 합니다.

123 

124Bash 도구 섹션에서 설명한 동일한 주 세션 작업 디렉토리 재설정 동작이 PowerShell 명령에 적용되며, `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR` 환경 변수도 포함됩니다.

125 

126### 미리보기 제한사항

127 

128PowerShell 도구는 미리보기 중에 다음과 같은 알려진 제한사항이 있습니다:

129 

130* PowerShell 프로필이 로드되지 않습니다

131* Windows에서는 sandboxing이 지원되지 않습니다

132 

133## 사용 가능한 도구 확인

134 

135정확한 도구 세트는 제공자, 플랫폼 및 설정에 따라 다릅니다. 실행 중인 세션에서 로드된 항목을 확인하려면 Claude에 직접 문의합니다:

136 

137```text theme={null}

138What tools do you have access to?

139```

140 

141Claude는 대화형 요약을 제공합니다. 정확한 MCP 도구 이름의 경우 `/mcp`를 실행합니다.

142 

143## 참고 항목

144 

145* [MCP 서버](/ko/mcp): 외부 서버를 연결하여 사용자 정의 도구 추가

146* [권한](/ko/permissions): 권한 시스템, 규칙 구문, 도구별 패턴

147* [Subagents](/ko/sub-agents): subagent에 대한 도구 접근 구성

148* [Hooks](/ko/hooks-guide): 도구 실행 전후에 사용자 정의 명령 실행

troubleshoot-install.md +803 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 설치 및 로그인 문제 해결

6 

7> Claude Code 설치 또는 로그인 시 command not found, PATH, 권한, 네트워크 및 인증 오류를 수정합니다.

8 

9설치가 실패하거나 로그인할 수 없는 경우 아래에서 오류를 찾으세요. Claude Code가 작동한 후 런타임 문제의 경우 [문제 해결](/ko/troubleshooting)을 참조하세요. 설정이 적용되지 않거나 hooks가 실행되지 않는 등의 구성 문제의 경우 [구성 디버깅](/ko/debug-your-config)을 참조하세요.

10 

11## 오류 찾기

12 

13표시되는 오류 메시지 또는 증상을 수정 사항과 일치시키세요:

14 

15| 표시되는 내용 | 해결책 |

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

17| `command not found: claude` 또는 `'claude' is not recognized` | [PATH 수정](#command-not-found-claude-after-installation) |

18| `syntax error near unexpected token '<'` | [설치 스크립트가 HTML 반환](#install-script-returns-html-instead-of-a-shell-script) |

19| `curl: (56) Failure writing output to destination` | [연결성 확인 또는 대체 설치 프로그램 사용](#curl-56-failure-writing-output-to-destination) |

20| Linux에서 설치 중 `Killed` | [저메모리 서버에 스왑 공간 추가](#install-killed-on-low-memory-linux-servers) |

21| `TLS connect error` 또는 `SSL/TLS secure channel` | [CA 인증서 업데이트](#tls-or-ssl-connection-errors) |

22| `Failed to fetch version` 또는 다운로드 서버에 도달할 수 없음 | [네트워크 및 프록시 설정 확인](#check-network-connectivity) |

23| `irm is not recognized` 또는 `&& is not valid` | [셸에 맞는 명령 사용](#wrong-install-command-on-windows) |

24| `'bash' is not recognized as the name of a cmdlet` | [Windows 설치 프로그램 명령 사용](#wrong-install-command-on-windows) |

25| `Claude Code on Windows requires either Git for Windows (for bash) or PowerShell` | [셸 설치](#claude-code-on-windows-requires-either-git-for-windows-for-bash-or-powershell) |

26| `Claude Code does not support 32-bit Windows` | [Windows PowerShell 열기, x86 항목 아님](#claude-code-does-not-support-32-bit-windows) |

27| `The process cannot access the file ... because it is being used by another process` | [다운로드 폴더 지우기 및 다시 시도](#the-process-cannot-access-the-file-during-windows-install) |

28| `Error loading shared library` | [시스템에 맞는 잘못된 바이너리 변형](#linux-musl-or-glibc-binary-mismatch) |

29| `Illegal instruction` | [아키텍처 또는 CPU 명령어 세트 불일치](#illegal-instruction) |

30| WSL에서 `cannot execute binary file: Exec format error` | [WSL1 네이티브 바이너리 회귀](#exec-format-error-on-wsl1) |

31| PowerShell 설치 프로그램이 완료되지만 `claude`를 찾을 수 없거나 이전 버전 표시 | [터미널 다시 시작 및 PATH 확인](#verify-your-path) |

32| macOS에서 `dyld: cannot load`, `dyld: Symbol not found` 또는 `Abort trap` | [바이너리 비호환성](#dyld-cannot-load-on-macos) |

33| `Invoke-Expression: Missing argument in parameter list` | [설치 스크립트가 HTML 반환](#install-script-returns-html-instead-of-a-shell-script) |

34| `App unavailable in region` | Claude Code는 귀국에서 사용할 수 없습니다. [지원되는 국가](https://www.anthropic.com/supported-countries)를 참조하세요. |

35| `unable to get local issuer certificate` | [회사 CA 인증서 구성](#tls-or-ssl-connection-errors) |

36| `OAuth error` 또는 `403 Forbidden` | [인증 수정](#login-and-authentication) |

37| `Could not load the default credentials` 또는 `Could not load credentials from any providers` | [Bedrock, Vertex 또는 Foundry 자격증명](#bedrock-vertex-or-foundry-credentials-not-loading) |

38| `ChainedTokenCredential authentication failed` 또는 `CredentialUnavailableError` | [Bedrock, Vertex 또는 Foundry 자격증명](#bedrock-vertex-or-foundry-credentials-not-loading) |

39| `API Error: 500`, `529 Overloaded`, `429` 또는 위에 나열되지 않은 기타 4xx 및 5xx 오류 | [오류 참조](/ko/errors)를 참조하세요 |

40 

41문제가 나열되지 않은 경우 아래의 진단 검사를 수행하여 원인을 좁혀보세요.

42 

43<Tip>

44 터미널을 완전히 건너뛰고 싶다면 [Claude Code Desktop 앱](/ko/desktop-quickstart)을 사용하여 그래픽 인터페이스를 통해 Claude Code를 설치하고 사용할 수 있습니다. [macOS](https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code\&utm_medium=docs) 또는 [Windows](https://claude.com/download?utm_source=claude_code\&utm_medium=docs)용으로 다운로드하고 명령줄 설정 없이 코딩을 시작하세요.

45</Tip>

46 

47## 진단 검사 실행

48 

49### 네트워크 연결성 확인

50 

51설치 프로그램은 `downloads.claude.ai`에서 다운로드합니다. 도달할 수 있는지 확인하세요:

52 

53```bash theme={null}

54curl -sI https://downloads.claude.ai/claude-code-releases/latest

55```

56 

57`HTTP/2 200` 줄은 서버에 도달했음을 의미합니다. 출력이 없거나 `Could not resolve host` 또는 연결 시간 초과가 표시되면 네트워크가 연결을 차단하고 있습니다. 일반적인 원인:

58 

59* `downloads.claude.ai`를 차단하는 회사 방화벽 또는 프록시

60* 지역 네트워크 제한: VPN 또는 대체 네트워크 시도

61* TLS/SSL 문제: 시스템의 CA 인증서를 업데이트하거나 `HTTPS_PROXY`가 구성되어 있는지 확인

62 

63회사 프록시 뒤에 있는 경우 설치하기 전에 `HTTPS_PROXY` 및 `HTTP_PROXY`를 프록시 주소로 설정하세요. 프록시 URL을 모르는 경우 IT 팀에 문의하거나 브라우저의 프록시 설정을 확인하세요.

64 

65이 예제는 두 프록시 변수를 설정한 다음 프록시를 통해 설치 프로그램을 실행합니다:

66 

67<Tabs>

68 <Tab title="macOS/Linux">

69 ```bash theme={null}

70 export HTTP_PROXY=http://proxy.example.com:8080

71 export HTTPS_PROXY=http://proxy.example.com:8080

72 curl -fsSL https://claude.ai/install.sh | bash

73 ```

74 </Tab>

75 

76 <Tab title="Windows PowerShell">

77 ```powershell theme={null}

78 $env:HTTP_PROXY = 'http://proxy.example.com:8080'

79 $env:HTTPS_PROXY = 'http://proxy.example.com:8080'

80 irm https://claude.ai/install.ps1 | iex

81 ```

82 </Tab>

83</Tabs>

84 

85### PATH 확인

86 

87설치가 성공했지만 `claude`를 실행할 때 `command not found` 또는 `not recognized` 오류가 발생하면 설치 디렉토리가 PATH에 없습니다. 셸은 PATH에 나열된 디렉토리에서 프로그램을 검색하고 설치 프로그램은 macOS/Linux에서 `~/.local/bin/claude`에 또는 Windows에서 `%USERPROFILE%\.local\bin\claude.exe`에 `claude`를 배치합니다.

88 

89PATH 항목을 나열하고 `local/bin`을 필터링하여 설치 디렉토리가 PATH에 있는지 확인하세요:

90 

91<Tabs>

92 <Tab title="macOS/Linux">

93 ```bash theme={null}

94 echo $PATH | tr ':' '\n' | grep -Fx "$HOME/.local/bin"

95 ```

96 

97 이것이 `/Users/you/.local/bin` 또는 `/home/you/.local/bin`을 인쇄하면 디렉토리가 PATH에 있으므로 [충돌하는 설치 확인](#check-for-conflicting-installations)으로 건너뛸 수 있습니다. 출력이 없으면 셸 구성에 추가하세요.

98 

99 macOS의 기본값인 Zsh의 경우:

100 

101 ```bash theme={null}

102 echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc

103 source ~/.zshrc

104 ```

105 

106 대부분의 Linux 배포판의 기본값인 Bash의 경우:

107 

108 ```bash theme={null}

109 echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc

110 source ~/.bashrc

111 ```

112 

113 또는 터미널을 닫았다가 다시 여세요.

114 

115 fish 또는 Nushell과 같은 다른 셸의 경우 셸의 자체 구성 구문을 사용하여 `~/.local/bin`을 PATH에 추가한 다음 터미널을 다시 시작하세요.

116 

117 수정이 작동했는지 확인하세요:

118 

119 ```bash theme={null}

120 claude --version

121 ```

122 </Tab>

123 

124 <Tab title="Windows PowerShell">

125 ```powershell theme={null}

126 $env:PATH -split ';' | Select-String '\.local\\bin'

127 ```

128 

129 출력이 없으면 설치 디렉토리를 사용자 PATH에 추가하세요:

130 

131 ```powershell theme={null}

132 $currentPath = [Environment]::GetEnvironmentVariable('PATH', 'User')

133 [Environment]::SetEnvironmentVariable('PATH', "$currentPath;$env:USERPROFILE\.local\bin", 'User')

134 ```

135 

136 변경 사항이 적용되려면 터미널을 다시 시작하세요.

137 

138 수정이 작동했는지 확인하세요:

139 

140 ```powershell theme={null}

141 claude --version

142 ```

143 </Tab>

144 

145 <Tab title="Windows CMD">

146 ```batch theme={null}

147 echo %PATH% | findstr /i "local\bin"

148 ```

149 

150 출력이 없으면 시스템 설정을 열고 환경 변수로 이동한 다음 `%USERPROFILE%\.local\bin`을 사용자 PATH 변수에 추가하세요. 터미널을 다시 시작하세요.

151 

152 수정이 작동했는지 확인하세요:

153 

154 ```batch theme={null}

155 claude --version

156 ```

157 </Tab>

158</Tabs>

159 

160### 충돌하는 설치 확인

161 

162여러 Claude Code 설치로 인해 버전 불일치 또는 예기치 않은 동작이 발생할 수 있습니다. 설치된 항목을 확인하세요:

163 

164<Tabs>

165 <Tab title="macOS/Linux">

166 PATH에서 찾은 모든 `claude` 바이너리를 나열하세요:

167 

168 ```bash theme={null}

169 which -a claude

170 ```

171 

172 이것이 아무것도 인쇄하지 않으면 아직 PATH에 `claude`가 없습니다. [PATH 확인](#verify-your-path)으로 돌아가세요.

173 

174 `claude` 바이너리가 올 수 있는 세 위치를 확인하세요. `~/.local/bin/claude`는 네이티브 설치 프로그램이고 `~/.claude/local/`은 Claude Code의 이전 버전에서 생성한 레거시 로컬 npm 설치이며 npm 글로벌 목록은 `-g` 설치를 표시합니다:

175 

176 ```bash theme={null}

177 ls -la ~/.local/bin/claude

178 ```

179 

180 ```bash theme={null}

181 ls -la ~/.claude/local/

182 ```

183 

184 ```bash theme={null}

185 npm -g ls @anthropic-ai/claude-code 2>/dev/null

186 ```

187 </Tab>

188 

189 <Tab title="Windows PowerShell">

190 PATH에서 찾은 모든 `claude` 바이너리를 나열하세요:

191 

192 ```powershell theme={null}

193 where.exe claude

194 ```

195 

196 네이티브 설치 프로그램이 바이너리를 배치했는지 확인하세요:

197 

198 ```powershell theme={null}

199 Test-Path "$env:USERPROFILE\.local\bin\claude.exe"

200 ```

201 </Tab>

202</Tabs>

203 

204여러 설치를 찾으면 하나만 유지하세요. macOS/Linux의 `~/.local/bin/claude` 또는 Windows의 `%USERPROFILE%\.local\bin\claude.exe`에서의 네이티브 설치가 권장됩니다. 추가 항목을 제거하세요:

205 

206npm 글로벌 설치 제거:

207 

208```bash theme={null}

209npm uninstall -g @anthropic-ai/claude-code

210```

211 

212레거시 로컬 npm 설치 제거:

213 

214```bash theme={null}

215rm -rf ~/.claude/local

216```

217 

218Windows에서 PowerShell을 사용하세요:

219 

220```powershell theme={null}

221Remove-Item -Recurse -Force "$env:USERPROFILE\.claude\local"

222```

223 

224macOS에서 Homebrew 설치 제거. `claude-code@latest` cask를 설치한 경우 해당 이름으로 대체하세요:

225 

226```bash theme={null}

227brew uninstall --cask claude-code

228```

229 

230Windows에서 WinGet 설치 제거:

231 

232```powershell theme={null}

233winget uninstall Anthropic.ClaudeCode

234```

235 

236### 디렉토리 권한 확인

237 

238설치 프로그램은 macOS 및 Linux의 `~/.local/bin/` 및 `~/.claude/`에 대한 쓰기 액세스가 필요합니다. Windows에서 설치 위치는 `%USERPROFILE%` 아래에 있으며 기본적으로 사용자가 쓸 수 있으므로 이 섹션은 거의 적용되지 않습니다.

239 

240디렉토리가 쓸 수 있는지 확인하세요:

241 

242```bash theme={null}

243test -w ~/.local/bin && echo "writable" || echo "not writable"

244test -w ~/.claude && echo "writable" || echo "not writable"

245```

246 

247디렉토리를 쓸 수 없으면 설치 디렉토리를 만들고 사용자를 소유자로 설정하세요:

248 

249```bash theme={null}

250sudo mkdir -p ~/.local/bin

251sudo chown -R $(whoami) ~/.local

252```

253 

254### 바이너리 작동 확인

255 

256`claude --version`이 버전을 인쇄하지만 `claude`가 시작 시 충돌하거나 중단되면 이 검사를 실행하여 원인을 좁혀보세요. `claude --version`이 command not found를 표시하면 먼저 [PATH 확인](#verify-your-path)으로 이동하세요. 아래 명령은 `claude`가 PATH에 있다고 가정합니다.

257 

258바이너리가 존재하고 실행 가능한지 확인하세요:

259 

260```bash theme={null}

261ls -la "$(command -v claude)"

262```

263 

264Windows에서 PowerShell을 사용하세요:

265 

266```powershell theme={null}

267Get-Command claude | Select-Object Source

268```

269 

270Linux에서 누락된 공유 라이브러리를 확인하세요. `ldd`가 누락된 라이브러리를 표시하면 시스템 패키지를 설치해야 할 수 있습니다. Alpine Linux 및 기타 musl 기반 배포판의 경우 [Alpine Linux 설정](/ko/setup#alpine-linux-and-musl-based-distributions)을 참조하세요.

271 

272```bash theme={null}

273ldd "$(command -v claude)" | grep "not found"

274```

275 

276바이너리가 실행될 수 있는지 확인하세요:

277 

278```bash theme={null}

279claude --version

280```

281 

282## 일반적인 설치 문제

283 

284이는 가장 자주 발생하는 설치 문제와 해결책입니다.

285 

286### 설치 스크립트가 셸 스크립트 대신 HTML 반환

287 

288설치 명령을 실행할 때 다음 오류 중 하나가 표시될 수 있습니다:

289 

290```text theme={null}

291bash: line 1: syntax error near unexpected token `<'

292bash: line 1: `<!DOCTYPE html>'

293```

294 

295PowerShell에서 동일한 문제는 다음과 같이 나타납니다:

296 

297```text theme={null}

298Invoke-Expression: Missing argument in parameter list.

299```

300 

301이는 설치 URL이 설치 스크립트 대신 HTML 페이지를 반환했음을 의미합니다. HTML 페이지에 "App unavailable in region"이 표시되면 Claude Code는 귀국에서 사용할 수 없습니다. [지원되는 국가](https://www.anthropic.com/supported-countries)를 참조하세요.

302 

303그렇지 않으면 네트워크 문제, 지역 라우팅 또는 일시적인 서비스 중단으로 인해 발생할 수 있습니다.

304 

305**해결책:**

306 

3071. **대체 설치 방법 사용**:

308 

309 macOS에서 Homebrew를 통해 설치:

310 

311 ```bash theme={null}

312 brew install --cask claude-code

313 ```

314 

315 Windows에서 WinGet을 통해 설치:

316 

317 ```powershell theme={null}

318 winget install Anthropic.ClaudeCode

319 ```

320 

3212. **몇 분 후 다시 시도**: 문제는 종종 일시적입니다. 기다렸다가 원래 명령을 다시 시도하세요.

322 

323### 설치 후 `command not found: claude`

324 

325설치가 완료되었지만 `claude`가 작동하지 않습니다. 정확한 오류는 플랫폼에 따라 다릅니다:

326 

327| 플랫폼 | 오류 메시지 |

328| :---------- | :--------------------------------------------------------------------- |

329| macOS | `zsh: command not found: claude` |

330| Linux | `bash: claude: command not found` |

331| Windows CMD | `'claude' is not recognized as an internal or external command` |

332| PowerShell | `claude : The term 'claude' is not recognized as the name of a cmdlet` |

333 

334이는 설치 디렉토리가 셸의 검색 경로에 없음을 의미합니다. 각 플랫폼의 수정 사항은 [PATH 확인](#verify-your-path)을 참조하세요.

335 

336### `curl: (56) Failure writing output to destination`

337 

338`curl ... | bash` 명령은 스크립트를 다운로드하고 Bash에 파이프하여 실행합니다. 이 오류는 스크립트 다운로드가 완료되기 전에 연결이 끊어졌음을 의미합니다. 일반적인 원인은 네트워크 중단, 다운로드가 중간에 차단되거나 시스템 리소스 제한입니다.

339 

340**해결책:**

341 

3421. **네트워크 안정성 확인**: Claude Code 바이너리는 `downloads.claude.ai`에서 호스팅됩니다. 도달할 수 있는지 테스트하세요:

343 ```bash theme={null}

344 curl -sI https://downloads.claude.ai/claude-code-releases/latest

345 ```

346 `HTTP/2 200` 줄은 서버에 도달했으며 원래 실패가 일시적이었음을 의미합니다. 설치 명령을 다시 시도하세요. `Could not resolve host` 또는 연결 시간 초과가 표시되면 네트워크가 다운로드를 차단하고 있습니다.

347 

3482. **대체 설치 방법 시도**:

349 

350 macOS에서:

351 

352 ```bash theme={null}

353 brew install --cask claude-code

354 ```

355 

356 Windows에서:

357 

358 ```powershell theme={null}

359 winget install Anthropic.ClaudeCode

360 ```

361 

362### TLS 또는 SSL 연결 오류

363 

364`curl: (35) TLS connect error`, `schannel: next InitializeSecurityContext failed` 또는 PowerShell의 `Could not establish trust relationship for the SSL/TLS secure channel`과 같은 오류는 TLS 핸드셰이크 실패를 나타냅니다.

365 

366**해결책:**

367 

3681. **시스템 CA 인증서 업데이트**:

369 

370 Ubuntu/Debian에서:

371 

372 ```bash theme={null}

373 sudo apt-get update && sudo apt-get install ca-certificates

374 ```

375 

376 macOS에서 시스템 curl은 Keychain 신뢰 저장소를 사용합니다. macOS 자체를 업데이트하면 루트 인증서가 업데이트됩니다.

377 

3782. **Windows에서 설치 프로그램을 실행하기 전에 PowerShell에서 TLS 1.2 활성화**:

379 ```powershell theme={null}

380 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

381 irm https://claude.ai/install.ps1 | iex

382 ```

383 

3843. **프록시 또는 방화벽 간섭 확인**: TLS 검사를 수행하는 회사 프록시는 `unable to get local issuer certificate` 및 `SELF_SIGNED_CERT_IN_CHAIN`을 포함한 이러한 오류를 유발할 수 있습니다. 설치 단계의 경우 curl을 회사 CA 번들로 가리키세요 `--cacert`:

385 ```bash theme={null}

386 curl --cacert /path/to/corporate-ca.pem -fsSL https://claude.ai/install.sh | bash

387 ```

388 설치된 Claude Code 자체의 경우 `NODE_EXTRA_CA_CERTS`를 설정하여 API 요청이 동일한 번들을 신뢰하도록 하세요:

389 ```bash theme={null}

390 export NODE_EXTRA_CA_CERTS=/path/to/corporate-ca.pem

391 ```

392 인증서 파일이 없으면 IT 팀에 문의하세요. 프록시가 원인인지 확인하기 위해 직접 연결에서 시도할 수도 있습니다.

393 

3944. **Windows에서 인증서 해지 확인 무시** `CRYPT_E_NO_REVOCATION_CHECK (0x80092012)` 또는 `CRYPT_E_REVOCATION_OFFLINE (0x80092013)`이 표시되면. 이는 curl이 서버에 도달했지만 네트워크가 인증서 해지 조회를 차단함을 의미하며, 이는 회사 방화벽 뒤에서 일반적입니다. 설치 명령에 `--ssl-revoke-best-effort`를 추가하세요:

395 ```batch theme={null}

396 curl --ssl-revoke-best-effort -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

397 ```

398 또는 curl을 완전히 피하는 `winget install Anthropic.ClaudeCode`로 설치하세요.

399 

400### `Failed to fetch version from downloads.claude.ai`

401 

402설치 프로그램이 다운로드 서버에 도달할 수 없습니다. 이는 일반적으로 `downloads.claude.ai`가 네트워크에서 차단됨을 의미합니다.

403 

404**해결책:**

405 

4061. **직접 연결성 테스트**:

407 ```bash theme={null}

408 curl -sI https://downloads.claude.ai/claude-code-releases/latest

409 ```

410 

4112. **프록시 뒤에 있는 경우** `HTTPS_PROXY`를 설정하여 설치 프로그램이 프록시를 통해 라우팅할 수 있도록 하세요. 자세한 내용은 [프록시 구성](/ko/network-config#proxy-configuration)을 참조하세요.

412 ```bash theme={null}

413 export HTTPS_PROXY=http://proxy.example.com:8080

414 curl -fsSL https://claude.ai/install.sh | bash

415 ```

416 

4173. **제한된 네트워크에 있는 경우** 다른 네트워크 또는 VPN을 시도하거나 대체 설치 방법을 사용하세요:

418 

419 macOS에서:

420 

421 ```bash theme={null}

422 brew install --cask claude-code

423 ```

424 

425 Windows에서:

426 

427 ```powershell theme={null}

428 winget install Anthropic.ClaudeCode

429 ```

430 

431### Windows에서 잘못된 설치 명령

432 

433`'irm' is not recognized`, `The token '&&' is not valid` 또는 `'bash' is not recognized as the name of a cmdlet`이 표시되면 다른 셸 또는 운영 체제의 설치 명령을 복사했습니다.

434 

435* **`irm` 인식 안 됨**: CMD에 있고 PowerShell이 아닙니다. 두 가지 옵션이 있습니다:

436 

437 시작 메뉴에서 "PowerShell"을 검색하여 PowerShell을 열고 원래 설치 명령을 실행하세요:

438 

439 ```powershell theme={null}

440 irm https://claude.ai/install.ps1 | iex

441 ```

442 

443 또는 CMD에 머물러 있고 CMD 설치 프로그램을 대신 사용하세요:

444 

445 ```batch theme={null}

446 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

447 ```

448 

449* **`&&` 유효하지 않음**: PowerShell에 있지만 CMD 설치 프로그램 명령을 실행했습니다. PowerShell 설치 프로그램을 사용하세요:

450 ```powershell theme={null}

451 irm https://claude.ai/install.ps1 | iex

452 ```

453 

454* **`bash` 인식 안 됨**: Windows에서 macOS/Linux 설치 프로그램을 실행했습니다. 대신 PowerShell 설치 프로그램을 사용하세요:

455 ```powershell theme={null}

456 irm https://claude.ai/install.ps1 | iex

457 ```

458 

459### Windows 설치 중 `The process cannot access the file`

460 

461PowerShell 설치 프로그램이 `Failed to download binary: The process cannot access the file ... because it is being used by another process`로 실패하면 설치 프로그램이 `%USERPROFILE%\.claude\downloads`에 쓸 수 없습니다. 이는 일반적으로 이전 설치 시도가 여전히 실행 중이거나 바이러스 백신 소프트웨어가 해당 폴더의 부분적으로 다운로드된 바이너리를 스캔하고 있음을 의미합니다.

462 

463설치 프로그램을 실행하는 다른 PowerShell 창을 닫고 바이러스 백신 스캔이 파일을 해제할 때까지 기다리세요. 그런 다음 다운로드 폴더를 삭제하고 설치 프로그램을 다시 실행하세요:

464 

465```powershell theme={null}

466Remove-Item -Recurse -Force "$env:USERPROFILE\.claude\downloads"

467irm https://claude.ai/install.ps1 | iex

468```

469 

470### 저메모리 Linux 서버에서 설치 중단

471 

472VPS 또는 클라우드 인스턴스에서 설치 중에 `Killed`가 표시되면:

473 

474```text theme={null}

475Setting up Claude Code...

476Installing Claude Code native build latest...

477bash: line 142: 34803 Killed "$binary_path" install ${TARGET:+"$TARGET"}

478```

479 

480Linux OOM killer는 시스템이 메모리 부족으로 인해 프로세스를 종료했습니다. Claude Code는 최소 4GB의 사용 가능한 RAM이 필요합니다.

481 

482**해결책:**

483 

4841. **서버의 RAM이 제한된 경우 스왑 공간 추가**. 스왑은 디스크 공간을 오버플로우 메모리로 사용하여 낮은 물리적 RAM으로도 설치를 완료할 수 있게 합니다.

485 

486 2GB 스왑 파일을 만들고 활성화하세요:

487 

488 ```bash theme={null}

489 sudo fallocate -l 2G /swapfile

490 sudo chmod 600 /swapfile

491 sudo mkswap /swapfile

492 sudo swapon /swapfile

493 ```

494 

495 그런 다음 설치를 다시 시도하세요:

496 

497 ```bash theme={null}

498 curl -fsSL https://claude.ai/install.sh | bash

499 ```

500 

5012. **설치하기 전에 다른 프로세스를 닫아** 메모리를 확보하세요.

502 

5033. **가능하면 더 큰 인스턴스 사용**. Claude Code는 최소 4GB의 RAM이 필요합니다.

504 

505### Docker에서 설치 중단

506 

507Docker 컨테이너에서 Claude Code를 설치할 때 root로 `/`에 설치하면 중단될 수 있습니다.

508 

509**해결책:**

510 

5111. **설치 프로그램을 실행하기 전에 작업 디렉토리 설정**. `/`에서 실행하면 설치 프로그램이 전체 파일 시스템을 스캔하여 과도한 메모리 사용을 유발합니다. `WORKDIR`을 설정하면 스캔이 작은 디렉토리로 제한됩니다:

512 ```dockerfile theme={null}

513 WORKDIR /tmp

514 RUN curl -fsSL https://claude.ai/install.sh | bash

515 ```

516 

5172. **Docker 메모리 제한 증가** Docker Desktop을 사용하는 경우:

518 ```bash theme={null}

519 docker build --memory=4g .

520 ```

521 

522### Claude Desktop이 Windows에서 `claude` 명령 무시

523 

524Claude Desktop의 이전 버전을 설치한 경우 `WindowsApps` 디렉토리에 `Claude.exe`를 등록할 수 있으며, 이는 Claude Code CLI보다 PATH 우선순위를 가집니다. `claude`를 실행하면 CLI 대신 Desktop 앱이 열립니다.

525 

526Claude Desktop을 최신 버전으로 업데이트하여 이 문제를 해결하세요.

527 

528### Windows에서 Claude Code는 Git for Windows(Bash용) 또는 PowerShell 필요

529 

530Claude Code의 네이티브 Windows 버전은 최소 하나의 셸이 필요합니다: Bash용 [Git for Windows](https://git-scm.com/downloads/win) 또는 PowerShell. 둘 다 찾을 수 없으면 이 오류가 시작 시 나타납니다. PowerShell만 찾으면 Claude Code는 Bash 대신 PowerShell 도구를 사용합니다.

531 

532**둘 다 설치되지 않은 경우** 하나를 설치하세요:

533 

534* Git for Windows: [git-scm.com/downloads/win](https://git-scm.com/downloads/win)에서 다운로드하세요. 설정 중에 "Add to PATH"를 선택하세요. 설치 후 터미널을 다시 시작하세요.

535* PowerShell 7: [aka.ms/powershell](https://aka.ms/powershell)에서 다운로드하세요.

536 

537**Git이 이미 설치되어 있지만** Claude Code가 찾을 수 없으면 [settings.json 파일](/ko/settings)에서 경로를 설정하세요:

538 

539```json theme={null}

540{

541 "env": {

542 "CLAUDE_CODE_GIT_BASH_PATH": "C:\\Program Files\\Git\\bin\\bash.exe"

543 }

544}

545```

546 

547Git이 다른 곳에 설치된 경우 PowerShell에서 `where.exe git`을 실행하여 경로를 찾고 해당 디렉토리의 `bin\bash.exe` 경로를 사용하세요.

548 

549### Claude Code는 32비트 Windows를 지원하지 않음

550 

551Windows는 시작 메뉴에 두 개의 PowerShell 항목을 포함합니다: `Windows PowerShell` 및 `Windows PowerShell (x86)`. x86 항목은 32비트 프로세스로 실행되며 64비트 머신에서도 이 오류를 트리거합니다. 어느 경우인지 확인하려면 오류를 생성한 동일한 창에서 이를 실행하세요:

552 

553```powershell theme={null}

554[Environment]::Is64BitOperatingSystem

555```

556 

557이것이 `True`를 인쇄하면 운영 체제는 정상입니다. 창을 닫고 x86 접미사 없이 `Windows PowerShell`을 열고 설치 명령을 다시 실행하세요.

558 

559이것이 `False`를 인쇄하면 32비트 Windows 버전을 사용 중입니다. Claude Code는 64비트 운영 체제가 필요합니다. [시스템 요구사항](/ko/setup#system-requirements)을 참조하세요.

560 

561### Linux musl 또는 glibc 바이너리 불일치

562 

563설치 후 `libstdc++.so.6` 또는 `libgcc_s.so.1`과 같은 누락된 공유 라이브러리에 대한 오류가 표시되면 설치 프로그램이 시스템에 맞는 잘못된 바이너리 변형을 다운로드했을 수 있습니다.

564 

565```text theme={null}

566Error loading shared library libstdc++.so.6: No such file or directory

567```

568 

569이는 musl 크로스 컴파일 패키지가 설치된 glibc 기반 시스템에서 발생할 수 있으며, 설치 프로그램이 시스템을 musl로 잘못 감지하게 합니다.

570 

571**해결책:**

572 

5731. **시스템이 어느 libc를 사용하는지 확인**:

574 ```bash theme={null}

575 ldd --version 2>&1 | head -1

576 ```

577 `GNU libc` 또는 `GLIBC`를 언급하는 출력은 glibc를 의미합니다. `musl`을 언급하는 출력은 musl을 의미합니다.

578 

5792. **glibc에 있지만 musl 바이너리를 받은 경우** 설치를 제거하고 다시 설치하세요. `https://downloads.claude.ai/claude-code-releases/{VERSION}/manifest.json`의 매니페스트를 사용하여 올바른 바이너리를 수동으로 다운로드할 수도 있습니다. `ldd --version` 및 `ls /lib/libc.musl*`의 출력과 함께 [GitHub 이슈](https://github.com/anthropics/claude-code/issues)를 제출하세요.

580 

5813. **실제로 musl에 있는 경우** Alpine Linux와 같이 필요한 패키지를 설치하세요:

582 ```bash theme={null}

583 apk add libgcc libstdc++ ripgrep

584 ```

585 

586### `Illegal instruction`

587 

588`claude`를 실행하거나 설치 프로그램이 `Illegal instruction`을 인쇄하면 네이티브 바이너리는 프로세서가 지원하지 않는 CPU 명령어를 사용합니다. 두 가지 서로 다른 원인이 있습니다.

589 

590**아키텍처 불일치.** 설치 프로그램이 잘못된 바이너리를 다운로드했습니다. 예를 들어 ARM 서버의 x86. macOS 또는 Linux에서 `uname -m`으로 확인하거나 PowerShell에서 `$env:PROCESSOR_ARCHITECTURE`로 확인하세요. 결과가 받은 바이너리와 일치하지 않으면 출력과 함께 [GitHub 이슈](https://github.com/anthropics/claude-code/issues)를 제출하세요.

591 

592**누락된 AVX 명령어 세트.** 아키텍처는 올바르지만 여전히 `Illegal instruction`이 표시되면 CPU에 바이너리가 필요로 하는 AVX 또는 다른 명령어가 없을 가능성이 높습니다. 이는 대략 2013년 이전의 Intel 및 AMD 프로세서에 영향을 미치며, 하이퍼바이저가 게스트에게 AVX를 전달하지 않는 가상 머신에도 영향을 미칩니다.

593 

594VPS 또는 VM에서 `grep -m1 -ow avx /proc/cpuinfo`를 실행하세요. 빈 결과는 AVX를 게스트에서 사용할 수 없음을 의미합니다.

595 

596네이티브 바이너리 해결 방법이 없습니다. [이슈 #50384](https://github.com/anthropics/claude-code/issues/50384)를 추적하고 Linux에서 `grep -m1 "model name" /proc/cpuinfo`의 CPU 모델 또는 macOS에서 `sysctl -n machdep.cpu.brand_string`을 보고할 때 포함하세요.

597 

598대체 설치 방법은 동일한 네이티브 바이너리를 다운로드하며 어느 원인도 해결하지 않습니다.

599 

600### macOS에서 `dyld: cannot load`

601 

602설치 중에 `dyld: cannot load`, `dyld: Symbol not found` 또는 `Abort trap: 6`이 표시되면 바이너리는 macOS 버전 또는 하드웨어와 호환되지 않습니다.

603 

604```text theme={null}

605dyld: cannot load 'claude-2.1.42-darwin-x64' (load command 0x80000034 is unknown)

606Abort trap: 6

607```

608 

609`libicucore`를 참조하는 `Symbol not found` 오류는 macOS 버전이 바이너리가 지원하는 것보다 오래되었음을 나타냅니다:

610 

611```text theme={null}

612dyld: Symbol not found: _ubrk_clone

613 Referenced from: claude-darwin-x64 (which was built for Mac OS X 13.0)

614 Expected in: /usr/lib/libicucore.A.dylib

615```

616 

617**해결책:**

618 

6191. **macOS 버전 확인**: Claude Code는 macOS 13.0 이상이 필요합니다. Apple 메뉴를 열고 이 Mac에 관하여를 선택하여 버전을 확인하세요.

620 

6212. **이전 버전을 사용 중인 경우 macOS 업데이트**. 바이너리는 이전 macOS 버전이 지원하지 않는 로드 명령 및 시스템 라이브러리를 사용합니다. Homebrew와 같은 대체 설치 방법은 동일한 바이너리를 다운로드하며 이 오류를 해결하지 않습니다.

622 

623### WSL1에서 `Exec format error`

624 

625WSL에서 `claude`를 실행하면 `cannot execute binary file: Exec format error`가 인쇄되면 WSL1에 있으며 [이슈 #38788](https://github.com/anthropics/claude-code/issues/38788)에서 추적되는 알려진 네이티브 바이너리 회귀를 겪고 있습니다. 바이너리의 프로그램 헤더가 WSL1의 로더가 처리할 수 없는 방식으로 변경되었습니다.

626 

627가장 깔끔한 수정은 PowerShell에서 배포판을 WSL2로 변환하는 것입니다:

628 

629```powershell theme={null}

630wsl --set-version <DistroName> 2

631```

632 

633WSL1에 머물러야 하는 경우 동적 링커를 통해 바이너리를 호출하세요. WSL 내 `~/.bashrc`에 이 함수를 추가하고 홈 디렉토리가 다르면 경로를 바꾸세요:

634 

635```bash theme={null}

636claude() {

637 /lib64/ld-linux-x86-64.so.2 "$(readlink -f "$HOME/.local/bin/claude")" "$@"

638}

639```

640 

641그런 다음 `source ~/.bashrc`를 실행하고 `claude`를 다시 시도하세요.

642 

643### WSL에서 npm 설치 오류

644 

645이 문제는 WSL 내에서 `npm install -g`로 Claude Code를 설치한 경우 적용됩니다. [네이티브 설치 프로그램](/ko/setup)을 사용한 경우 이 섹션을 건너뛰세요.

646 

647**OS 또는 플랫폼 감지 문제.** npm이 설치 중에 플랫폼 불일치를 보고하면 WSL이 Windows `npm`을 선택하고 있을 가능성이 높습니다. 먼저 `npm config set os linux`를 실행한 다음 `npm install -g @anthropic-ai/claude-code --force`로 설치하세요. `sudo`를 사용하지 마세요.

648 

649**`claude` 실행 시 `exec: node: not found`.** WSL 환경이 Node.js의 Windows 설치를 사용하고 있을 가능성이 높습니다. `which npm` 및 `which node`로 확인하세요: `/mnt/c/`로 시작하는 경로는 Windows 바이너리이고 Linux 경로는 `/usr/`로 시작합니다. 이를 수정하려면 Linux 배포판의 패키지 관리자 또는 [`nvm`](https://github.com/nvm-sh/nvm)을 통해 Node를 설치하세요.

650 

651**nvm 버전 충돌.** WSL과 Windows 모두에 nvm이 설치되어 있으면 WSL에서 Node 버전을 전환하면 WSL이 기본적으로 Windows PATH를 가져오고 Windows nvm이 우선순위를 가지기 때문에 중단될 수 있습니다. 가장 일반적인 원인은 nvm이 셸에 로드되지 않는 것입니다. nvm 로더를 `~/.bashrc` 또는 `~/.zshrc`에 추가하세요:

652 

653```bash theme={null}

654export NVM_DIR="$HOME/.nvm"

655[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

656[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

657```

658 

659또는 현재 세션에서 로드하세요:

660 

661```bash theme={null}

662source ~/.nvm/nvm.sh

663```

664 

665nvm이 로드되었지만 Windows 경로가 여전히 우선순위를 가지면 Linux Node 경로를 명시적으로 앞에 추가하세요:

666 

667```bash theme={null}

668export PATH="$HOME/.nvm/versions/node/$(node -v)/bin:$PATH"

669```

670 

671<Warning>

672 `appendWindowsPath = false`를 통해 Windows PATH 가져오기를 비활성화하지 마세요. WSL에서 Windows 실행 파일을 호출하는 기능이 중단됩니다. 마찬가지로 Windows 개발에 사용하는 경우 Windows에서 Node.js를 제거하지 마세요.

673</Warning>

674 

675### 설치 중 권한 오류

676 

677네이티브 설치 프로그램이 권한 오류로 실패하면 대상 디렉토리를 쓸 수 없을 수 있습니다. [디렉토리 권한 확인](#check-directory-permissions)을 참조하세요.

678 

679이전에 npm으로 설치했고 npm 특정 권한 오류를 겪고 있으면 네이티브 설치 프로그램으로 전환하세요:

680 

681```bash theme={null}

682curl -fsSL https://claude.ai/install.sh | bash

683```

684 

685### npm 설치 후 네이티브 바이너리를 찾을 수 없음

686 

687`@anthropic-ai/claude-code` npm 패키지는 `@anthropic-ai/claude-code-darwin-arm64`와 같은 플랫폼별 선택적 종속성을 통해 네이티브 바이너리를 가져옵니다. 설치 후 `claude`를 실행하면 `Could not find native binary package "@anthropic-ai/claude-code-<platform>"`이 인쇄되면 다음 원인을 확인하세요:

688 

689* **선택적 종속성이 비활성화됨.** npm 설치 명령에서 `--omit=optional`을 제거하고 pnpm에서 `--no-optional`을 제거하고 yarn에서 `--ignore-optional`을 제거하고 `.npmrc`가 `optional=false`를 설정하지 않는지 확인하세요. 그런 다음 다시 설치하세요. 네이티브 바이너리는 선택적 종속성으로만 제공되므로 건너뛰면 JavaScript 폴백이 없습니다.

690* **지원되지 않는 플랫폼.** 미리 빌드된 바이너리는 `darwin-arm64`, `darwin-x64`, `linux-x64`, `linux-arm64`, `linux-x64-musl`, `linux-arm64-musl`, `win32-x64` 및 `win32-arm64`에 대해 게시됩니다. Claude Code는 다른 플랫폼에 대한 바이너리를 제공하지 않습니다. [시스템 요구사항](/ko/setup#system-requirements)을 참조하세요.

691* **회사 npm 미러가 플랫폼 패키지를 누락함.** 레지스트리가 메타 패키지 외에도 8개의 `@anthropic-ai/claude-code-*` 플랫폼 패키지를 모두 미러링하는지 확인하세요.

692 

693`--ignore-scripts`로 설치하면 이 오류가 트리거되지 않습니다. 바이너리를 제자리에 연결하는 postinstall 단계를 건너뛰므로 Claude Code는 각 시작 시 플랫폼 바이너리를 찾아 생성하는 래퍼로 폴백합니다. 이는 작동하지만 더 느리게 시작됩니다. 직접 실행을 위해 스크립트를 활성화하여 다시 설치하세요.

694 

695## 로그인 및 인증

696 

697이 섹션은 로그인 실패, OAuth 오류 및 토큰 문제를 다룹니다.

698 

699### 로그인 재설정

700 

701로그인이 실패하고 원인이 명확하지 않으면 깨끗한 재인증이 대부분의 경우를 해결합니다:

702 

7031. `/logout`을 실행하여 완전히 로그아웃

7042. Claude Code 닫기

7053. `claude`로 다시 시작하고 인증 프로세스 완료

706 

707브라우저가 로그인 중에 자동으로 열리지 않으면 `c`를 눌러 OAuth URL을 클립보드에 복사한 다음 수동으로 브라우저에 붙여넣으세요. 이는 URL이 좁은 또는 SSH 터미널에서 줄을 넘어 래핑되고 직접 클릭할 수 없을 때도 작동합니다.

708 

709### OAuth 오류: 유효하지 않은 코드

710 

711`OAuth error: Invalid code. Please make sure the full code was copied`가 표시되면 로그인 코드가 만료되었거나 복사-붙여넣기 중에 잘렸습니다.

712 

713**해결책:**

714 

715* Enter를 눌러 다시 시도하고 브라우저가 열린 후 빠르게 로그인 완료

716* 브라우저가 자동으로 열리지 않으면 `c`를 입력하여 전체 URL 복사

717* 원격/SSH 세션을 사용하는 경우 브라우저가 잘못된 머신에서 열릴 수 있습니다. 터미널에 표시된 URL을 복사하고 로컬 브라우저에서 대신 열어보세요.

718 

719### 로그인 후 403 Forbidden

720 

721로그인 후 `API Error: 403 {"error":{"type":"forbidden","message":"Request not allowed"}}`가 표시되면:

722 

723* **Claude Pro/Max 사용자**: [claude.ai/settings](https://claude.ai/settings)에서 구독이 활성화되어 있는지 확인

724* **Anthropic Console 사용자**: 계정에 "Claude Code" 또는 "Developer" 역할이 있는지 확인. 관리자는 Anthropic Console의 설정 → 멤버에서 이를 할당합니다.

725* **프록시 뒤에 있음**: 회사 프록시가 API 요청을 방해할 수 있습니다. 프록시 설정은 [네트워크 구성](/ko/network-config)을 참조하세요.

726 

727### 이 조직은 활성 구독으로 비활성화되었습니다

728 

729활성 Claude 구독이 있음에도 불구하고 `API Error: 400 ... "This organization has been disabled"`가 표시되면 `ANTHROPIC_API_KEY` 환경 변수가 구독을 무시하고 있습니다. 이는 이전 고용주 또는 프로젝트의 이전 API 키가 여전히 셸 프로필에 설정되어 있을 때 일반적으로 발생합니다.

730 

731`ANTHROPIC_API_KEY`가 있고 승인한 경우 Claude Code는 구독의 OAuth 자격증명 대신 해당 키를 사용합니다. `-p` 플래그를 사용한 비대화형 모드에서는 키가 있을 때 항상 사용됩니다. 전체 해결 순서는 [인증 우선순위](/ko/authentication#authentication-precedence)를 참조하세요.

732 

733대신 구독을 사용하려면 환경 변수를 설정 해제하고 셸 프로필에서 제거하세요:

734 

735```bash theme={null}

736unset ANTHROPIC_API_KEY

737claude

738```

739 

740`~/.zshrc`, `~/.bashrc` 또는 `~/.profile`에서 `export ANTHROPIC_API_KEY=...` 줄을 확인하고 변경을 영구적으로 만들려면 제거하세요. Windows에서 `$PROFILE`의 PowerShell 프로필과 `ANTHROPIC_API_KEY`의 사용자 환경 변수를 확인하세요. Claude Code 내에서 `/status`를 실행하여 어느 인증 방법이 활성화되어 있는지 확인하세요.

741 

742### WSL2, SSH 또는 컨테이너에서 OAuth 로그인 실패

743 

744Claude Code가 WSL2에서 실행되거나 SSH를 통해 원격 머신에서 실행되거나 컨테이너 내부에서 실행될 때 브라우저는 보통 다른 호스트에서 열리고 그 리다이렉트는 Claude Code의 로컬 콜백 서버에 도달할 수 없습니다. 로그인한 후 브라우저는 자동으로 다시 리다이렉트되지 않고 대신 로그인 코드를 표시합니다. 터미널의 `Paste code here if prompted` 프롬프트에 해당 코드를 붙여넣어 로그인을 완료하세요.

745 

746WSL2에서 브라우저가 전혀 열리지 않으면 `BROWSER` 환경 변수를 Windows 브라우저 경로로 설정하세요:

747 

748```bash theme={null}

749export BROWSER="/mnt/c/Program Files/Google/Chrome/Application/chrome.exe"

750claude

751```

752 

753또는 대화형 로그인 프롬프트에서 `c`를 눌러 OAuth URL을 복사하거나 `claude auth login`이 출력하는 URL을 복사하고 로컬 머신의 브라우저에서 열어보세요.

754 

755대화형 프롬프트에 코드를 붙여넣어도 아무것도 하지 않으면 터미널의 붙여넣기 바인딩이 입력 필드에 도달하지 않을 가능성이 높습니다. 터미널의 대체 붙여넣기 바로 가기를 시도해보세요. 종종 Windows Terminal에서 우클릭 또는 Shift+Insert이거나 대신 `claude auth login`을 사용하세요. 이는 표준 입력에서 붙여넣은 코드를 읽습니다:

756 

757```bash theme={null}

758claude auth login

759```

760 

761이 폴백은 네이티브 Windows 또는 대화형 프롬프트에 붙여넣기가 실패하는 모든 터미널에도 적용됩니다.

762 

763### 로그인하지 않음 또는 토큰 만료

764 

765Claude Code가 세션 후 다시 로그인하도록 요청하면 OAuth 토큰이 만료되었을 수 있습니다.

766 

767`/login`을 실행하여 다시 인증하세요. 이것이 자주 발생하면 토큰 검증이 올바른 타임스탬프에 따라 달라지므로 시스템 시계가 정확한지 확인하세요.

768 

769macOS에서 Keychain이 잠겨 있거나 암호가 계정 암호와 동기화되지 않으면 로그인이 실패할 수도 있으며, 이는 Claude Code가 자격증명을 저장하지 못하게 합니다. `claude doctor`를 실행하여 Keychain 액세스를 확인하세요. Keychain을 수동으로 잠금 해제하려면 `security unlock-keychain ~/Library/Keychains/login.keychain-db`를 실행하세요. 잠금 해제가 도움이 되지 않으면 Keychain Access를 열고 `login` keychain을 선택한 다음 편집 > Keychain "login"의 암호 변경을 선택하여 계정 암호와 다시 동기화하세요.

770 

771### Bedrock, Vertex 또는 Foundry 자격증명이 로드되지 않음

772 

773Claude Code를 클라우드 공급자를 사용하도록 구성했고 Bedrock에서 `Could not load credentials from any providers`, Vertex에서 `Could not load the default credentials` 또는 Foundry에서 `ChainedTokenCredential authentication failed`가 표시되면 클라우드 공급자 CLI가 현재 셸에서 인증되지 않았을 가능성이 높습니다.

774 

775Bedrock의 경우 AWS 자격증명이 유효한지 확인하세요:

776 

777```bash theme={null}

778aws sts get-caller-identity

779```

780 

781Vertex AI의 경우 `ANTHROPIC_VERTEX_PROJECT_ID` 및 `CLOUD_ML_REGION`이 셸에 설정되어 있는지 확인한 다음 애플리케이션 기본 자격증명을 설정하세요:

782 

783```bash theme={null}

784gcloud auth application-default login

785```

786 

787Microsoft Foundry의 경우 `ANTHROPIC_FOUNDRY_API_KEY`가 설정되어 있는지 확인하거나 Azure CLI로 로그인하여 기본 자격증명 체인이 계정을 찾을 수 있도록 하세요:

788 

789```bash theme={null}

790az login

791```

792 

793자격증명이 터미널에서 작동하지만 VS Code 또는 JetBrains 확장에서 작동하지 않으면 IDE 프로세스가 셸 환경을 상속하지 않았을 가능성이 높습니다. IDE의 자체 설정에서 공급자 환경 변수를 설정하거나 이미 내보낸 터미널에서 IDE를 시작하세요.

794 

795전체 공급자 설정은 [Amazon Bedrock](/ko/amazon-bedrock), [Google Vertex AI](/ko/google-vertex-ai) 또는 [Microsoft Foundry](/ko/microsoft-foundry)를 참조하세요.

796 

797## 여전히 막혔습니다

798 

799위의 어느 것도 문제를 해결하지 못하면:

800 

8011. [GitHub 저장소](https://github.com/anthropics/claude-code/issues)에서 알려진 문제를 확인하거나 운영 체제, 실행한 설치 명령 및 전체 오류 출력과 함께 새 문제를 열어보세요

8022. `claude --version`이 작동하지만 다른 것이 잘못되면 `claude doctor`를 실행하여 자동화된 진단 보고서를 받으세요

8033. 세션을 시작할 수 있으면 Claude Code 내에서 `/feedback`을 사용하여 문제를 보고하세요

troubleshooting.md +121 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 문제 해결

6 

7> Claude Code에서 높은 CPU 또는 메모리 사용량, 중단, 자동 압축 스래싱 및 검색 문제를 해결하고 다른 문제에 대한 올바른 페이지를 찾습니다.

8 

9이 페이지는 Claude Code가 실행 중일 때의 성능, 안정성 및 검색 문제를 다룹니다. 다른 문제의 경우 문제가 있는 위치와 일치하는 페이지부터 시작하세요:

10 

11| 증상 | 이동 |

12| :--------------------------------------------------------------------------------------- | :------------------------------------------------------------------ |

13| `command not found`, 설치 실패, PATH 문제, `EACCES`, TLS 오류 | [설치 및 로그인 문제 해결](/ko/troubleshoot-install) |

14| 로그인 루프, OAuth 오류, `403 Forbidden`, "organization disabled", Bedrock/Vertex/Foundry 자격 증명 | [설치 및 로그인 문제 해결](/ko/troubleshoot-install#login-and-authentication) |

15| 설정이 적용되지 않음, hooks가 실행되지 않음, MCP 서버가 로드되지 않음 | [구성 디버깅](/ko/debug-your-config) |

16| `API Error: 5xx`, `529 Overloaded`, `429`, 요청 검증 오류 | [오류 참조](/ko/errors) |

17| `model not found` 또는 `you may not have access to it` | [오류 참조](/ko/errors#theres-an-issue-with-the-selected-model) |

18| VS Code 확장이 Claude에 연결되지 않거나 감지하지 못함 | [VS Code 통합](/ko/vs-code#fix-common-issues) |

19| JetBrains 플러그인 또는 IDE가 감지되지 않음 | [JetBrains 통합](/ko/jetbrains#troubleshooting) |

20| 높은 CPU 또는 메모리, 느린 응답, 중단, 검색이 파일을 찾지 못함 | [성능 및 안정성](#performance-and-stability) 아래 |

21 

22어떤 것이 적용되는지 확실하지 않으면 Claude Code 내에서 `/doctor`를 실행하여 설치, 설정, MCP 서버 및 컨텍스트 사용을 자동으로 확인하세요. `claude`가 전혀 시작되지 않으면 셸에서 `claude doctor`를 대신 실행하세요.

23 

24## 성능 및 안정성

25 

26이 섹션에서는 리소스 사용, 응답성 및 검색 동작과 관련된 문제를 다룹니다.

27 

28### 높은 CPU 또는 메모리 사용량

29 

30Claude Code는 대부분의 개발 환경에서 작동하도록 설계되었지만 대규모 코드베이스를 처리할 때 상당한 리소스를 소비할 수 있습니다. 성능 문제가 발생하는 경우:

31 

321. `/compact`를 정기적으로 사용하여 컨텍스트 크기 감소

332. 주요 작업 사이에 Claude Code 닫기 및 다시 시작

343. 큰 빌드 디렉토리를 `.gitignore` 파일에 추가하는 것을 고려하세요

35 

36메모리 사용량이 이 단계 후에도 높게 유지되면 `/heapdump`를 실행하여 JavaScript 힙 스냅샷과 메모리 분석을 `~/Desktop`에 작성하세요. Linux에 Desktop 폴더가 없으면 파일이 홈 디렉토리에 작성됩니다.

37 

38분석은 상주 집합 크기, JS 힙, 배열 버퍼 및 설명되지 않은 네이티브 메모리를 표시하며, 이는 증가가 JavaScript 객체인지 네이티브 코드인지 식별하는 데 도움이 됩니다. Chrome DevTools의 메모리 → 로드에서 `.heapsnapshot` 파일을 열어 보유자를 검사하세요. [GitHub](https://github.com/anthropics/claude-code/issues)에서 메모리 문제를 보고할 때 두 파일을 모두 첨부하세요.

39 

40### 자동 압축이 스래싱 오류로 중단됨

41 

42`Autocompact is thrashing: the context refilled to the limit...`이 표시되면 자동 압축이 성공했지만 파일 또는 도구 출력이 즉시 컨텍스트 창을 여러 번 연속으로 다시 채웠습니다. Claude Code는 진행되지 않는 루프에서 API 호출을 낭비하지 않기 위해 재시도를 중단합니다.

43 

44복구하려면:

45 

461. Claude에게 전체 파일 대신 특정 줄 범위 또는 함수와 같은 더 작은 청크로 큰 파일을 읽도록 요청하세요

472. 큰 출력을 삭제하는 포커스로 `/compact`를 실행하세요. 예: `/compact keep only the plan and the diff`

483. 큰 파일 작업을 [서브에이전트](/ko/sub-agents)로 이동하여 별도의 컨텍스트 창에서 실행하세요

494. 이전 대화가 더 이상 필요하지 않으면 `/clear`를 실행하세요

50 

51### 명령 중단 또는 정지

52 

53Claude Code가 응답하지 않는 것처럼 보이면:

54 

551. Ctrl+C를 눌러 현재 작업을 취소하세요

562. 응답하지 않으면 터미널을 닫고 다시 시작해야 할 수 있습니다

57 

58다시 시작해도 대화가 손실되지 않습니다. 같은 디렉토리에서 `claude --resume`을 실행하여 세션을 다시 시작하세요.

59 

60### 검색 및 발견 문제

61 

62Search 도구, `@file` 언급, 사용자 정의 에이전트 또는 사용자 정의 skills가 파일을 찾지 못하면 번들된 `ripgrep` 바이너리가 시스템에서 실행되지 않을 수 있습니다. 플랫폼의 `ripgrep` 패키지를 설치하고 Claude Code에 대신 사용하도록 지시하세요:

63 

64<Tabs>

65 <Tab title="macOS">

66 ```bash theme={null}

67 brew install ripgrep

68 ```

69 </Tab>

70 

71 <Tab title="Ubuntu/Debian">

72 ```bash theme={null}

73 sudo apt install ripgrep

74 ```

75 </Tab>

76 

77 <Tab title="Alpine">

78 ```bash theme={null}

79 apk add ripgrep

80 ```

81 </Tab>

82 

83 <Tab title="Arch">

84 ```bash theme={null}

85 pacman -S ripgrep

86 ```

87 </Tab>

88 

89 <Tab title="Windows">

90 ```powershell theme={null}

91 winget install BurntSushi.ripgrep.MSVC

92 ```

93 </Tab>

94</Tabs>

95 

96그런 다음 [환경](/ko/env-vars)에서 `USE_BUILTIN_RIPGREP=0`을 설정하세요.

97 

98### WSL에서 느리거나 불완전한 검색 결과

99 

100[WSL에서 파일 시스템 간 작업](https://learn.microsoft.com/en-us/windows/wsl/filesystems)할 때 디스크 읽기 성능 저하로 인해 WSL에서 Claude Code를 사용할 때 예상보다 적은 일치 항목이 발생할 수 있습니다. 검색은 여전히 작동하지만 네이티브 파일 시스템보다 적은 결과를 반환합니다.

101 

102<Note>

103 이 경우 `/doctor`는 검색을 OK로 표시합니다.

104</Note>

105 

106**해결책:**

107 

1081. **더 구체적인 검색 제출**: 디렉토리 또는 파일 유형을 지정하여 검색되는 파일 수를 줄이세요: "auth-service 패키지에서 JWT 검증 로직 검색" 또는 "JS 파일에서 md5 해시 사용 찾기".

109 

1102. **프로젝트를 Linux 파일 시스템으로 이동**: 가능하면 프로젝트가 Windows 파일 시스템(`/mnt/c/`) 대신 Linux 파일 시스템(`/home/`)에 있는지 확인하세요.

111 

1123. **Windows 기본 사용**: 더 나은 파일 시스템 성능을 위해 WSL 대신 Windows에서 기본적으로 Claude Code를 실행하는 것을 고려하세요.

113 

114## 추가 도움 받기

115 

116여기에 다루지 않은 문제가 발생하는 경우:

117 

1181. `/doctor`를 실행하여 설치 상태, 설정 유효성, MCP 구성 및 컨텍스트 사용을 한 번에 확인하세요

1192. Claude Code 내에서 `/feedback` 명령을 사용하여 Anthropic에 문제를 직접 보고하세요

1203. [GitHub 저장소](https://github.com/anthropics/claude-code)에서 알려진 문제를 확인하세요

1214. Claude에게 직접 기능 및 특징에 대해 물어보세요. Claude는 문서에 대한 기본 제공 액세스 권한이 있습니다.

ultraplan.md +84 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 클라우드에서 Ultraplan으로 계획하기

6 

7> CLI에서 계획을 시작하고, 웹의 Claude Code에서 초안을 작성한 다음, 원격으로 또는 터미널로 돌아가서 실행합니다

8 

9<Note>

10 Ultraplan은 연구 미리보기 상태이며 Claude Code v2.1.91 이상이 필요합니다. 피드백에 따라 동작 및 기능이 변경될 수 있습니다.

11</Note>

12 

13Ultraplan은 로컬 CLI의 계획 작업을 [계획 모드](/ko/permission-modes#analyze-before-you-edit-with-plan-mode)에서 실행 중인 [웹의 Claude Code](/ko/claude-code-on-the-web) 세션으로 전달합니다. Claude는 클라우드에서 계획을 초안하는 동안 터미널에서 계속 작업할 수 있습니다. 계획이 준비되면 브라우저에서 열어 특정 섹션에 대해 의견을 남기고, 수정을 요청하고, 실행할 위치를 선택할 수 있습니다.

14 

15이는 터미널이 제공하는 것보다 더 풍부한 검토 표면을 원할 때 유용합니다:

16 

17* **대상 피드백**: 전체에 회신하는 대신 계획의 개별 섹션에 대해 의견을 남깁니다

18* **자동 초안 작성**: 계획이 원격으로 생성되므로 터미널이 다른 작업을 위해 자유로워집니다

19* **유연한 실행**: 웹에서 실행하고 풀 요청을 열도록 계획을 승인하거나 터미널로 다시 보냅니다

20 

21Ultraplan은 [웹의 Claude Code](/ko/claude-code-on-the-web) 계정과 GitHub 저장소가 필요합니다. Anthropic의 클라우드 인프라에서 실행되므로 Amazon Bedrock, Google Cloud Vertex AI 또는 Microsoft Foundry를 사용할 때는 사용할 수 없습니다. 클라우드 세션은 계정의 기본 [클라우드 환경](/ko/claude-code-on-the-web#the-cloud-environment)에서 실행됩니다. 아직 클라우드 환경이 없으면 ultraplan이 처음 시작할 때 자동으로 생성합니다.

22 

23## CLI에서 ultraplan 시작하기

24 

25로컬 CLI 세션에서 세 가지 방법으로 ultraplan을 시작할 수 있습니다:

26 

27* **명령어**: `/ultraplan` 다음에 프롬프트를 입력합니다

28* **키워드**: 일반 프롬프트의 어디든 `ultraplan` 단어를 포함합니다

29* **로컬 계획에서**: Claude가 로컬 계획을 완료하고 승인 대화상자를 표시할 때, **아니요, Claude Code 웹에서 Ultraplan으로 개선하기**를 선택하여 초안을 클라우드로 보내 추가 반복합니다

30 

31예를 들어, 명령어로 서비스 마이그레이션을 계획하려면:

32 

33```

34/ultraplan migrate the auth service from sessions to JWTs

35```

36 

37명령어 및 키워드 경로는 시작하기 전에 확인 대화상자를 엽니다. 로컬 계획 경로는 해당 선택이 이미 확인 역할을 하므로 이 대화상자를 건너뜁니다. [Remote Control](/ko/remote-control)이 활성화되어 있으면 두 기능이 claude.ai/code 인터페이스를 차지하고 한 번에 하나만 연결될 수 있으므로 ultraplan이 시작될 때 연결이 끊깁니다.

38 

39클라우드 세션이 시작된 후 CLI의 프롬프트 입력은 원격 세션이 작동하는 동안 상태 표시기를 표시합니다:

40 

41| 상태 | 의미 |

42| :----------------------------- | :------------------------------------------- |

43| `◇ ultraplan` | Claude가 코드베이스를 조사하고 계획을 초안하는 중입니다 |

44| `◇ ultraplan needs your input` | Claude가 명확히 하는 질문을 가지고 있습니다. 세션 링크를 열어 응답하세요 |

45| `◆ ultraplan ready` | 계획이 브라우저에서 검토할 준비가 되었습니다 |

46 

47`/tasks`를 실행하고 ultraplan 항목을 선택하여 세션 링크, 에이전트 활동 및 **ultraplan 중지** 작업이 있는 상세 보기를 엽니다. ultraplan을 중지하면 클라우드 세션이 보관되고 표시기가 지워집니다. 터미널에 아무것도 저장되지 않습니다.

48 

49## 브라우저에서 계획 검토 및 수정하기

50 

51상태가 `◆ ultraplan ready`로 변경되면 세션 링크를 열어 claude.ai에서 계획을 봅니다. 계획은 전용 검토 보기에 나타납니다:

52 

53* **인라인 댓글**: 모든 구절을 강조 표시하고 Claude가 처리할 댓글을 남깁니다

54* **이모지 반응**: 섹션에 반응하여 전체 댓글을 작성하지 않고 승인 또는 우려를 신호합니다

55* **개요 사이드바**: 계획의 섹션 간에 이동합니다

56 

57Claude에게 댓글을 처리하도록 요청하면 계획을 수정하고 업데이트된 초안을 제시합니다. 실행할 위치를 선택하기 전에 필요한 만큼 반복할 수 있습니다.

58 

59## 실행 위치 선택하기

60 

61계획이 올바르면 브라우저에서 Claude가 동일한 클라우드 세션에서 구현할지 또는 대기 중인 터미널로 다시 보낼지 선택합니다.

62 

63### 웹에서 실행

64 

65브라우저에서 **Claude의 계획을 승인하고 코딩 시작**을 선택하여 Claude가 동일한 Claude Code 웹 세션에서 구현하도록 합니다. 터미널에 확인이 표시되고, 상태 표시기가 지워지고, 작업이 클라우드에서 계속됩니다. 구현이 완료되면 [변경 사항 검토](/ko/claude-code-on-the-web#review-changes)하고 웹 인터페이스에서 풀 요청을 만듭니다.

66 

67### 계획을 터미널로 다시 보내기

68 

69브라우저에서 **계획을 승인하고 터미널로 텔레포트**를 선택하여 환경에 완전히 액세스하여 계획을 로컬로 구현합니다. 이 옵션은 세션이 CLI에서 시작되었고 터미널이 여전히 폴링 중일 때 나타납니다. 웹 세션이 보관되므로 병렬로 계속 작동하지 않습니다.

70 

71터미널은 **Ultraplan approved** 제목의 대화상자에 계획을 표시하며 세 가지 옵션이 있습니다:

72 

73* **여기에서 구현**: 계획을 현재 대화에 주입하고 중단한 곳에서 계속합니다

74* **새 세션 시작**: 현재 대화를 지우고 계획만을 컨텍스트로 새로 시작합니다

75* **취소**: 계획을 파일에 저장하지 않고 실행합니다. Claude가 파일 경로를 인쇄하므로 나중에 돌아올 수 있습니다

76 

77새 세션을 시작하면 Claude가 상단에 `claude --resume` 명령어를 인쇄하므로 나중에 이전 대화로 돌아올 수 있습니다.

78 

79## 관련 리소스

80 

81* [웹의 Claude Code](/ko/claude-code-on-the-web): ultraplan이 실행되는 클라우드 인프라

82* [계획 모드](/ko/permission-modes#analyze-before-you-edit-with-plan-mode): 로컬 세션에서 계획이 작동하는 방식

83* [ultrareview로 버그 찾기](/ko/ultrareview): 병합 전에 문제를 포착하기 위한 ultraplan의 코드 검토 대응

84* [Remote Control](/ko/remote-control): 자신의 머신에서 실행 중인 세션과 함께 claude.ai/code 인터페이스 사용

ultrareview.md +108 −0 created

Details

1> ## Documentation Index

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

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

4 

5# ultrareview로 버그 찾기

6 

7> /ultrareview를 사용하여 클라우드에서 심층적인 다중 에이전트 코드 리뷰를 실행하여 병합 전에 버그를 찾고 검증합니다.

8 

9<Note>

10 Ultrareview는 Claude Code v2.1.86 이상에서 사용 가능한 연구 미리보기 기능입니다. 기능, 가격 책정 및 가용성은 피드백에 따라 변경될 수 있습니다.

11</Note>

12 

13Ultrareview는 Claude Code 웹 인프라에서 실행되는 심층 코드 리뷰입니다. `/ultrareview`를 실행하면 Claude Code는 원격 샌드박스에서 리뷰어 에이전트 플릿을 시작하여 브랜치 또는 풀 요청의 버그를 찾습니다.

14 

15로컬 `/review`와 비교하여 ultrareview는 다음을 제공합니다:

16 

17* **더 높은 신호**: 보고된 모든 발견 사항이 독립적으로 재현되고 검증되므로 결과는 스타일 제안보다는 실제 버그에 초점을 맞춥니다

18* **더 광범위한 범위**: 많은 리뷰어 에이전트가 변경 사항을 병렬로 탐색하므로 단일 패스 리뷰에서 놓칠 수 있는 문제를 표면화합니다

19* **로컬 리소스 사용 없음**: 리뷰가 원격 샌드박스에서 완전히 실행되므로 실행 중에 터미널이 다른 작업을 위해 자유로워집니다

20 

21Ultrareview는 Claude Code 웹 인프라에서 실행되기 때문에 Claude.ai 계정으로 인증이 필요합니다. API 키만으로 로그인한 경우 `/login`을 실행하고 먼저 Claude.ai로 인증하세요. Ultrareview는 Amazon Bedrock, Google Cloud Vertex AI 또는 Microsoft Foundry와 함께 Claude Code를 사용할 때 사용할 수 없으며, Zero Data Retention을 활성화한 조직에서도 사용할 수 없습니다.

22 

23## CLI에서 ultrareview 실행

24 

25Claude Code CLI의 모든 git 저장소에서 리뷰를 시작합니다.

26 

27```text theme={null}

28/ultrareview

29```

30 

31인수 없이 ultrareview는 현재 브랜치와 기본 브랜치 간의 차이를 검토하며, 작업 트리의 커밋되지 않은 변경 사항과 스테이징된 변경 사항을 포함합니다. Claude Code는 저장소 상태를 번들로 묶고 리뷰를 위해 원격 샌드박스에 업로드합니다.

32 

33대신 GitHub 풀 요청을 검토하려면 PR 번호를 전달합니다.

34 

35```text theme={null}

36/ultrareview 1234

37```

38 

39PR 모드에서 원격 샌드박스는 로컬 작업 트리를 번들로 묶는 대신 GitHub에서 직접 풀 요청을 복제합니다. PR 모드는 저장소에 `github.com` 원격이 필요합니다.

40 

41<Tip>

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

43</Tip>

44 

45시작하기 전에 Claude Code는 리뷰 범위(브랜치를 검토할 때 파일 및 라인 수 포함), 남은 무료 실행 횟수 및 예상 비용이 포함된 확인 대화를 표시합니다. 확인한 후 리뷰는 백그라운드에서 계속되며 세션을 계속 사용할 수 있습니다. 명령은 `/ultrareview`로 호출할 때만 실행되며, Claude는 자동으로 ultrareview를 시작하지 않습니다.

46 

47## 가격 책정 및 무료 실행

48 

49Ultrareview는 플랜의 포함된 사용량이 아닌 추가 사용량에 대해 청구되는 프리미엄 기능입니다.

50 

51| 플랜 | 포함된 무료 실행 | 무료 실행 후 |

52| ----------------- | ---------------------- | ------------------------------------------------------------------------------------------------- |

53| Pro | 2026년 5월 5일까지 3회 무료 실행 | [추가 사용량](https://support.claude.com/ko/articles/12429409-extra-usage-for-paid-claude-plans)으로 청구됨 |

54| Max | 2026년 5월 5일까지 3회 무료 실행 | [추가 사용량](https://support.claude.com/ko/articles/12429409-extra-usage-for-paid-claude-plans)으로 청구됨 |

55| Team 및 Enterprise | 없음 | [추가 사용량](https://support.claude.com/ko/articles/12429409-extra-usage-for-paid-claude-plans)으로 청구됨 |

56 

57Pro 및 Max 구독자는 기능을 시도하기 위해 3회의 무료 ultrareview 실행을 받습니다. 이 3회 실행은 계정당 일회성 할당이며 새로 고쳐지지 않으며 2026년 5월 5일에 만료됩니다. 3회를 모두 사용한 후 또는 무료 실행 기간이 끝난 후 각 리뷰는 추가 사용량으로 청구되며 일반적으로 변경 사항의 크기에 따라 $5에서 $20의 비용이 듭니다. 원격 세션이 시작되면 실행이 계산되므로 조기에 중단하거나 완료되지 않은 리뷰도 무료 실행을 사용합니다. 유료 리뷰의 경우 추가 사용량은 실행된 부분에 대해서만 청구됩니다.

58 

59Ultrareview는 항상 무료 실행 외에 추가 사용량으로 청구되기 때문에 계정 또는 조직은 유료 리뷰를 시작하기 전에 추가 사용량을 활성화해야 합니다. 추가 사용량이 활성화되지 않은 경우 Claude Code는 시작을 차단하고 켤 수 있는 청구 설정으로 연결합니다. `/extra-usage`를 실행하여 현재 설정을 확인하거나 변경할 수도 있습니다.

60 

61## 실행 중인 리뷰 추적

62 

63리뷰는 일반적으로 5\~10분이 소요됩니다. 리뷰는 백그라운드 작업으로 실행되므로 세션에서 계속 작업하고, 다른 명령을 시작하거나, 터미널을 완전히 닫을 수 있습니다.

64 

65`/tasks`를 사용하여 실행 중이고 완료된 리뷰를 보고, 리뷰의 상세 보기를 열거나, 진행 중인 리뷰를 중지합니다. 리뷰를 중지하면 클라우드 세션이 보관되고 부분 발견 사항은 반환되지 않습니다. 리뷰가 완료되면 검증된 발견 사항이 세션의 알림으로 나타납니다. 각 발견 사항에는 파일 위치와 문제에 대한 설명이 포함되어 있으므로 Claude에 직접 수정을 요청할 수 있습니다.

66 

67## 비대화형으로 ultrareview 실행

68 

69`claude ultrareview` 하위 명령을 사용하여 대화형 세션 없이 CI 또는 스크립트에서 ultrareview를 시작합니다. 하위 명령은 `/ultrareview`와 동일한 리뷰를 시작하고, 원격 리뷰가 완료될 때까지 차단하고, 발견 사항을 stdout으로 인쇄하고, 성공 시 코드 0으로 종료하거나 실패 시 코드 1로 종료합니다.

70 

71```bash theme={null}

72claude ultrareview

73claude ultrareview 1234

74claude ultrareview origin/main

75```

76 

77인수 없이 하위 명령은 현재 브랜치와 기본 브랜치 간의 차이를 검토합니다. PR 번호를 전달하여 풀 요청을 검토하거나, 기본 브랜치를 전달하여 대신 해당 브랜치에 대한 차이를 검토합니다. 하위 명령을 호출하면 대화형 명령이 표시하는 청구 및 약관 프롬프트에 대한 동의로 간주됩니다.

78 

79진행 메시지 및 라이브 세션 URL은 stderr로 이동하므로 stdout은 구문 분석 가능한 상태로 유지됩니다. 이 플래그를 사용하여 출력 및 시간 초과를 제어합니다:

80 

81| 플래그 | 설명 |

82| --------------------- | ------------------------------------------- |

83| `--json` | 형식이 지정된 발견 사항 대신 원본 `bugs.json` 페이로드를 인쇄합니다 |

84| `--timeout <minutes>` | 리뷰가 완료될 때까지 기다릴 최대 분 수입니다. 기본값은 30입니다 |

85 

86`claude ultrareview` 실행은 `/ultrareview`와 동일한 인증 및 추가 사용량 구성이 필요합니다. 하위 명령은 리뷰가 발견 사항 유무와 관계없이 완료될 때 코드 0으로 종료되고, 리뷰가 시작되지 않거나 원격 세션에 오류가 발생하거나 시간 초과가 경과할 때 코드 1로 종료되며, Ctrl-C로 중단될 때 코드 130으로 종료됩니다. 하위 명령을 중단하면 원격 리뷰는 계속 실행됩니다. stderr로 인쇄된 세션 URL을 따라 브라우저에서 시청합니다.

87 

88GitHub 풀 요청에 대한 자동 리뷰의 경우, [Code Review](/ko/code-review)는 저장소와 직접 통합되고 CLI 단계 없이 발견 사항을 인라인 PR 댓글로 게시합니다.

89 

90## ultrareview와 /review의 비교

91 

92두 명령 모두 코드를 검토하지만 워크플로우의 다른 단계를 대상으로 합니다.

93 

94| | `/review` | `/ultrareview` |

95| ----- | -------------- | ----------------------------- |

96| 실행 | 세션에서 로컬로 | 클라우드 샌드박스에서 원격으로 |

97| 깊이 | 단일 패스 리뷰 | 독립적 검증이 있는 다중 에이전트 플릿 |

98| 기간 | 몇 초에서 몇 분 | 대략 5\~10분 |

99| 비용 | 일반 사용량으로 계산됨 | 무료 실행, 그 후 추가 사용량으로 대략 $5~$20 |

100| 최적 용도 | 반복하는 동안 빠른 피드백 | 실질적인 변경 사항을 병합하기 전에 신뢰도 향상 |

101 

102빠른 피드백을 위해 작업하는 동안 `/review`를 사용합니다. 단일 리뷰에서 놓칠 수 있는 문제를 포착하는 더 깊은 패스를 원할 때 실질적인 변경 사항을 병합하기 전에 `/ultrareview`를 사용합니다.

103 

104## 관련 리소스

105 

106* [Claude Code on the web](/ko/claude-code-on-the-web): 원격 세션 및 클라우드 샌드박스의 작동 방식 알아보기

107* [ultraplan으로 복잡한 변경 사항 계획](/ko/ultraplan): 사전 설계 작업을 위한 ultrareview의 계획 대응

108* [비용 효과적으로 관리](/ko/costs): 사용량 추적 및 지출 한도 설정

voice-dictation.md +191 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 음성 받아쓰기

6 

7> Claude Code CLI에서 누르고 있기 또는 탭하기 음성 받아쓰기로 프롬프트를 말씀하세요.

8 

9Claude Code CLI에서 입력하는 대신 프롬프트를 말씀하세요. 음성이 프롬프트 입력으로 실시간 전사되므로 같은 메시지에서 음성과 입력을 혼합할 수 있습니다. `/voice`로 받아쓰기를 활성화한 다음, 말하는 동안 키를 누르고 있거나 한 번 탭하여 시작하고 다시 탭하여 전송합니다.

10 

11<Note>

12 음성 받아쓰기에는 Claude Code v2.1.69 이상이 필요합니다. 탭 모드에는 v2.1.116 이상이 필요합니다. `claude --version`으로 버전을 확인하세요.

13</Note>

14 

15## 요구 사항

16 

17음성 받아쓰기는 기록된 오디오를 Anthropic의 서버로 스트리밍하여 전사합니다. 오디오는 로컬에서 처리되지 않습니다. 음성 텍스트 변환 서비스는 Claude.ai 계정으로 인증할 때만 사용 가능하며, Claude Code가 Anthropic API 키, Amazon Bedrock, Google Vertex AI 또는 Microsoft Foundry를 직접 사용하도록 구성된 경우에는 사용할 수 없습니다. 전사는 Claude 메시지나 토큰을 소비하지 않으며 `/usage`에 표시된 한도에 포함되지 않습니다. Anthropic이 데이터를 처리하는 방법은 [데이터 사용](/ko/data-usage)을 참조하세요.

18 

19음성 받아쓰기는 또한 로컬 마이크 접근이 필요하므로 [웹의 Claude Code](/ko/claude-code-on-the-web) 또는 SSH 세션과 같은 원격 환경에서는 작동하지 않습니다. WSL에서 음성 받아쓰기는 오디오 접근을 위해 WSLg가 필요하며, 이는 Windows 11의 WSL2에 포함되어 있습니다. Windows 10 또는 WSL1에서는 대신 기본 Windows에서 Claude Code를 실행하세요.

20 

21오디오 녹음은 macOS, Linux 및 Windows의 기본 제공 네이티브 모듈을 사용합니다. Linux에서 네이티브 모듈을 로드할 수 없으면 Claude Code는 ALSA utils의 `arecord` 또는 SoX의 `rec`으로 폴백합니다. 둘 다 사용할 수 없으면 `/voice`는 패키지 관리자에 대한 설치 명령을 출력합니다.

22 

23Claude Code [VS Code 확장](/ko/vs-code)도 동일한 Claude.ai 계정 요구 사항으로 음성 받아쓰기를 지원합니다. SSH, Dev Containers 및 Codespaces를 포함한 VS Code Remote 세션에서는 사용할 수 없습니다. 마이크가 로컬 머신에 있고 확장이 원격 호스트에서 실행되기 때문입니다.

24 

25## 음성 받아쓰기 활성화

26 

27`/voice`를 실행하여 받아쓰기를 활성화합니다. 처음 활성화할 때 Claude Code는 마이크 확인을 실행합니다. macOS에서는 터미널에 대한 시스템 마이크 권한 프롬프트를 트리거합니다(이전에 부여되지 않은 경우).

28 

29```

30/voice

31Voice mode enabled (hold). Hold Space to record. Dictation language: en (/config to change).

32```

33 

34`/voice`는 선택적 모드 인수를 허용합니다:

35 

36| 명령 | 효과 |

37| :------------ | :------------------------------------ |

38| `/voice` | 켜거나 끄기, 현재 모드 유지 |

39| `/voice hold` | [누르고 있기 모드](#hold-to-record)에서 활성화 |

40| `/voice tap` | [탭 모드](#tap-to-record-and-send)에서 활성화 |

41| `/voice off` | 비활성화 |

42 

43음성 받아쓰기는 세션 간에 유지됩니다. `/voice`를 실행하는 대신 [사용자 설정 파일](/ko/settings)에서 직접 설정하세요:

44 

45```json theme={null}

46{

47 "voice": {

48 "enabled": true,

49 "mode": "tap"

50 }

51}

52```

53 

54음성 받아쓰기가 활성화되어 있는 동안 입력 바닥글은 프롬프트가 비어 있을 때 `hold Space to speak` 힌트를 표시합니다. 힌트 텍스트는 두 모드 모두에서 동일하며, [사용자 정의 상태 줄](/ko/statusline)이 구성된 경우 나타나지 않습니다.

55 

56전사는 두 모드 모두에서 코딩 어휘에 맞게 조정됩니다. `regex`, `OAuth`, `JSON` 및 `localhost`와 같은 일반적인 개발 용어가 올바르게 인식되며, 현재 프로젝트 이름과 git 분기 이름이 자동으로 인식 힌트로 추가됩니다.

57 

58## 누르고 있기로 녹음

59 

60누르고 있기 모드는 푸시 투 토크입니다: 키를 누르고 있는 동안 녹음이 실행되고 놓으면 중지됩니다. 이것이 기본 모드입니다.

61 

62`Space`를 누르고 있어서 녹음을 시작합니다. Claude Code는 터미널에서 빠른 키 반복 이벤트를 감시하여 누르고 있는 키를 감지하므로 녹음이 시작되기 전에 짧은 워밍업이 있습니다. 바닥글은 워밍업 중에 `keep holding…`을 표시한 다음 녹음이 활성화되면 실시간 파형으로 전환됩니다.

63 

64처음 몇 개의 키 반복 문자는 워밍업 중에 입력으로 입력되며 녹음이 활성화될 때 자동으로 제거됩니다. 단일 `Space` 탭은 여전히 공백을 입력합니다. 누르고 있기 감지는 빠른 반복에서만 트리거되기 때문입니다.

65 

66<Tip>

67 워밍업을 건너뛰려면 `/voice tap`으로 [탭 모드](#tap-to-record-and-send)로 전환하거나 [받아쓰기 키를 다시 바인딩](#rebind-the-dictation-key)하여 `meta+k`와 같은 수정자 조합을 사용하세요. 수정자 조합은 첫 번째 키 누름에서 녹음을 시작합니다.

68</Tip>

69 

70음성이 프롬프트에 말하는 동안 나타나며, 전사가 완료될 때까지 흐려집니다. `Space`를 놓아서 녹음을 중지하고 텍스트를 완료합니다. 전사는 커서 위치에 삽입되고 커서는 삽입된 텍스트의 끝에 유지되므로 입력과 받아쓰기를 어떤 순서로든 혼합할 수 있습니다. `Space`를 다시 누르고 있어서 다른 녹음을 추가하거나 먼저 커서를 이동하여 프롬프트의 다른 곳에 음성을 삽입하세요:

71 

72```

73> refactor the auth middleware to ▮

74 # hold Space, speak "use the new token validation helper"

75> refactor the auth middleware to use the new token validation helper▮

76```

77 

78기본적으로 키를 놓으면 전사를 삽입하고 `Enter`를 누를 때까지 기다립니다. `voice` 설정 객체에서 `"autoSubmit": true`를 설정하여 전사가 최소 3단어 이상이면 키를 놓을 때 프롬프트를 자동으로 전송합니다.

79 

80## 탭하여 녹음 및 전송

81 

82탭 모드는 단일 키 누름으로 녹음을 전환합니다: 한 번 탭하여 시작하고, 말한 다음, 다시 탭하여 프롬프트를 전송합니다. 워밍업이 없으며 키를 누르고 있을 필요가 없습니다.

83 

84`/voice tap`으로 탭 모드를 활성화합니다. 프롬프트 입력이 비어 있으면 `Space`를 탭하여 녹음을 시작합니다. 바닥글은 녹음 중에 실시간 파형을 표시합니다. `Space`를 다시 탭하여 중지합니다. Claude Code는 전사를 삽입하고 전사가 최소 3단어 이상이면 프롬프트를 자동으로 제출합니다. 더 짧은 전사는 삽입되지만 제출되지 않으므로 실수로 탭해도 단어가 전송되지 않습니다.

85 

86첫 번째 탭은 프롬프트 입력이 비어 있을 때만 녹음을 시작하므로 메시지를 작성하는 동안 여전히 공백을 정상적으로 입력할 수 있습니다. 두 번째 탭은 입력 내용에 관계없이 녹음을 중지합니다. 녹음은 또한 15초의 침묵 또는 2분 총 시간 후 자동으로 중지됩니다.

87 

88## 받아쓰기 언어 변경

89 

90음성 받아쓰기는 Claude의 응답 언어를 제어하는 동일한 [`language` 설정](/ko/settings)을 사용합니다. 해당 설정이 비어 있으면 받아쓰기는 기본적으로 영어입니다. VS Code 확장에서 `language`가 비어 있으면 받아쓰기는 VS Code의 `accessibility.voice.speechLanguage` 설정을 사용한 후 기본적으로 영어로 설정됩니다.

91 

92<Accordion title="지원되는 받아쓰기 언어">

93 | 언어 | 코드 |

94 | :----- | :--- |

95 | 체코어 | `cs` |

96 | 덴마크어 | `da` |

97 | 네덜란드어 | `nl` |

98 | 영어 | `en` |

99 | 프랑스어 | `fr` |

100 | 독일어 | `de` |

101 | 그리스어 | `el` |

102 | 힌디어 | `hi` |

103 | 인도네시아어 | `id` |

104 | 이탈리아어 | `it` |

105 | 일본어 | `ja` |

106 | 한국어 | `ko` |

107 | 노르웨이어 | `no` |

108 | 폴란드어 | `pl` |

109 | 포르투갈어 | `pt` |

110 | 러시아어 | `ru` |

111 | 스페인어 | `es` |

112 | 스웨덴어 | `sv` |

113 | 터키어 | `tr` |

114 | 우크라이나어 | `uk` |

115</Accordion>

116 

117`/config`에서 또는 설정에서 직접 언어를 설정합니다. [BCP 47 언어 코드](https://en.wikipedia.org/wiki/IETF_language_tag) 또는 언어 이름을 사용할 수 있습니다:

118 

119```json theme={null}

120{

121 "language": "japanese"

122}

123```

124 

125`language` 설정이 지원되는 목록에 없으면 `/voice`는 활성화할 때 경고하고 받아쓰기를 위해 영어로 폴백합니다. Claude의 텍스트 응답은 이 폴백의 영향을 받지 않습니다.

126 

127## 받아쓰기 키 다시 바인딩

128 

129받아쓰기 키는 `Chat` 컨텍스트에서 `voice:pushToTalk`에 바인딩되고 기본값은 `Space`입니다. 동일한 바인딩이 누르고 있기 및 탭 모드를 모두 제어합니다. [`~/.claude/keybindings.json`](/ko/keybindings)에서 다시 바인딩하세요:

130 

131```json theme={null}

132{

133 "bindings": [

134 {

135 "context": "Chat",

136 "bindings": {

137 "meta+k": "voice:pushToTalk",

138 "space": null

139 }

140 }

141 ]

142}

143```

144 

145`"space": null`을 설정하면 기본 바인딩이 제거됩니다. 두 키를 모두 활성화하려면 생략하세요.

146 

147누르고 있기 모드에서는 `v`와 같은 단순 문자 키 바인딩을 피하세요. 누르고 있기 감지는 키 반복에 의존하고 문자는 워밍업 중에 프롬프트로 입력되기 때문입니다. `Space`를 사용하거나 `meta+k`와 같은 수정자 조합을 사용하여 워밍업 없이 첫 번째 키 누름에서 녹음을 시작하세요. 탭 모드에는 워밍업이 없으므로 대부분의 키가 작동합니다.

148 

149일부 키는 터미널 애플리케이션에 전달되지 않으며 전혀 바인딩할 수 없습니다. 예를 들어, `Caps Lock`을 바인딩하려고 하면 오류가 표시됩니다. 전체 키바인딩 구문 및 예약된 단축키 목록은 [키보드 단축키 사용자 정의](/ko/keybindings)를 참조하세요.

150 

151## 문제 해결

152 

153음성 받아쓰기가 활성화되지 않거나 녹음되지 않을 때의 일반적인 문제:

154 

155* **`Voice mode requires a Claude.ai account`**: API 키 또는 타사 공급자로 인증되었습니다. `/login`을 실행하여 Claude.ai 계정으로 로그인하세요.

156* **`Microphone access is denied`**: 시스템 설정에서 터미널에 마이크 권한을 부여하세요. macOS에서는 시스템 설정 → 개인정보 보호 및 보안 → 마이크로 이동하여 터미널 앱을 활성화한 다음 `/voice`를 다시 실행하세요. Windows에서는 설정 → 개인정보 보호 및 보안 → 마이크로 이동하여 데스크톱 앱에 대한 마이크 접근을 켜세요. 그런 다음 `/voice`를 다시 실행하세요. 터미널이 macOS 설정에 나열되지 않으면 [macOS 마이크 설정에 나열되지 않은 터미널](#terminal-not-listed-in-macos-microphone-settings)을 참조하세요.

157* **Linux에서 `No audio recording tool found`**: 네이티브 오디오 모듈을 로드할 수 없고 폴백이 설치되지 않았습니다. 오류 메시지에 표시된 명령으로 SoX를 설치하세요. 예: `sudo apt-get install sox`.

158* **누르고 있기 모드에서 `Space`를 누르고 있어도 아무것도 일어나지 않음**: 누르고 있는 동안 프롬프트 입력을 봅니다. 공백이 계속 누적되면 음성 받아쓰기가 꺼져 있을 가능성이 높습니다. `/voice hold`를 실행하여 활성화하세요. 1\~2개의 공백만 나타나고 그 다음 아무것도 없으면 음성 받아쓰기는 켜져 있지만 누르고 있기 감지가 트리거되지 않습니다. 누르고 있기 감지는 터미널이 키 반복 이벤트를 보내야 하므로 OS 수준에서 키 반복이 비활성화되면 누르고 있는 키를 감지할 수 없습니다. 키 반복 요구 사항을 피하려면 `/voice tap`으로 탭 모드로 전환하세요.

159* **탭 모드에서 `Space`를 탭하면 녹음 대신 공백을 입력함**: 첫 번째 탭은 프롬프트 입력이 비어 있을 때만 녹음을 시작합니다. 먼저 입력을 지우거나 `/voice tap`을 실행하여 탭 모드에 있는지 확인하세요.

160* **`No audio detected from microphone`**: 녹음이 시작되었지만 침묵을 캡처했습니다. 올바른 입력 장치가 시스템 기본값으로 설정되어 있고 입력 수준이 음소거되거나 0에 가깝지 않은지 확인하세요. Windows에서는 설정 → 시스템 → 사운드 → 입력을 열고 마이크를 선택하세요. macOS에서는 시스템 설정 → 사운드 → 입력을 열어보세요.

161* **`No speech detected`**: 오디오가 전사 서비스에 도달했지만 단어가 인식되지 않았습니다. 마이크에 더 가깝게 말하고, 배경 소음을 줄이고, [받아쓰기 언어](#change-the-dictation-language)가 말하는 언어와 일치하는지 확인하세요.

162* **전사가 왜곡되었거나 잘못된 언어임**: 받아쓰기는 기본적으로 영어입니다. 다른 언어로 받아쓰기하는 경우 먼저 `/config`에서 설정하세요. [받아쓰기 언어 변경](#change-the-dictation-language)을 참조하세요.

163 

164### macOS 마이크 설정에 나열되지 않은 터미널

165 

166터미널 앱이 시스템 설정 → 개인정보 보호 및 보안 → 마이크 아래에 나타나지 않으면 활성화할 수 있는 토글이 없습니다. 터미널의 권한 상태를 재설정하여 다음 `/voice` 실행이 새로운 macOS 권한 프롬프트를 트리거하도록 합니다.

167 

168<Steps>

169 <Step title="터미널의 마이크 권한 재설정">

170 `tccutil reset Microphone <bundle-id>`를 실행하고, `<bundle-id>`를 터미널의 식별자로 바꾸세요: 기본 제공 터미널의 경우 `com.apple.Terminal`, iTerm2의 경우 `com.googlecode.iterm2`. 다른 터미널의 경우 `osascript -e 'id of app "AppName"'`으로 식별자를 조회하세요.

171 

172 <Warning>

173 번들 ID 없이 `tccutil reset Microphone`을 실행할 수 있지만 Mac의 모든 앱(Zoom 또는 Slack과 같은 앱 포함)에서 마이크 접근을 취소합니다. 각 앱은 다음 사용 시 접근을 다시 요청해야 하므로 활성 통화 중에 실행하지 마세요.

174 </Warning>

175 </Step>

176 

177 <Step title="터미널 종료 및 다시 시작">

178 macOS는 이미 실행 중인 프로세스를 다시 프롬프트하지 않습니다. 창을 닫기만 하지 말고 Cmd+Q로 터미널 앱을 종료한 다음 다시 열어보세요.

179 </Step>

180 

181 <Step title="새로운 프롬프트 트리거">

182 Claude Code를 시작하고 `/voice`를 실행합니다. macOS가 마이크 접근을 요청합니다. 허용하세요.

183 </Step>

184</Steps>

185 

186## 참고 항목

187 

188* [키보드 단축키 사용자 정의](/ko/keybindings): `voice:pushToTalk` 및 기타 CLI 키보드 작업 다시 바인딩

189* [설정 구성](/ko/settings): `voice`, `language` 및 기타 설정 키에 대한 전체 참조

190* [대화형 모드](/ko/interactive-mode): 키보드 단축키, 입력 모드 및 세션 제어

191* [명령](/ko/commands): `/voice`, `/config` 및 기타 모든 명령에 대한 참조

vs-code.md +511 −0 created

Details

1> ## Documentation Index

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

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

4 

5# VS Code에서 Claude Code 사용하기

6 

7> VS Code용 Claude Code 확장 프로그램을 설치하고 구성합니다. 인라인 diff, @-멘션, 계획 검토 및 키보드 단축키를 통해 AI 코딩 지원을 받습니다.

8 

9<img src="https://mintcdn.com/claude-code/-YhHHmtSxwr7W8gy/images/vs-code-extension-interface.jpg?fit=max&auto=format&n=-YhHHmtSxwr7W8gy&q=85&s=300652d5678c63905e6b0ea9e50835f8" alt="VS Code 편집기와 오른쪽에 열린 Claude Code 확장 프로그램 패널, Claude와의 대화를 표시" width="2500" height="1155" data-path="images/vs-code-extension-interface.jpg" />

10 

11VS Code 확장 프로그램은 Claude Code를 위한 기본 그래픽 인터페이스를 제공하며, IDE에 직접 통합됩니다. 이것이 VS Code에서 Claude Code를 사용하는 권장 방법입니다.

12 

13확장 프로그램을 사용하면 Claude의 계획을 수락하기 전에 검토하고 편집할 수 있으며, 편집이 이루어질 때 자동으로 수락하고, 선택 항목에서 특정 줄 범위가 있는 파일을 @-멘션으로 표시하고, 대화 기록에 액세스하고, 별도의 탭이나 창에서 여러 대화를 열 수 있습니다.

14 

15## 필수 조건

16 

17설치하기 전에 다음을 확인하십시오:

18 

19* VS Code 1.98.0 이상

20* Anthropic 계정(확장 프로그램을 처음 열 때 로그인합니다). Amazon Bedrock이나 Google Vertex AI와 같은 타사 공급자를 사용하는 경우 대신 [타사 공급자 사용](#use-third-party-providers)을 참조하십시오.

21 

22<Tip>

23 확장 프로그램에는 CLI(명령줄 인터페이스)가 포함되어 있으며, VS Code의 통합 터미널에서 고급 기능에 액세스할 수 있습니다. 자세한 내용은 [VS Code 확장 프로그램 vs. Claude Code CLI](#vs-code-extension-vs-claude-code-cli)를 참조하십시오.

24</Tip>

25 

26## 확장 프로그램 설치

27 

28IDE에 대한 링크를 클릭하여 직접 설치합니다:

29 

30* [VS Code용 설치](vscode:extension/anthropic.claude-code)

31* [Cursor용 설치](cursor:extension/anthropic.claude-code)

32 

33또는 VS Code에서 `Cmd+Shift+X`(Mac) 또는 `Ctrl+Shift+X`(Windows/Linux)를 눌러 확장 프로그램 보기를 열고, "Claude Code"를 검색한 후 **설치**를 클릭합니다.

34 

35<Note>설치 후 확장 프로그램이 나타나지 않으면 VS Code를 다시 시작하거나 명령 팔레트에서 "Developer: Reload Window"를 실행합니다.</Note>

36 

37## 시작하기

38 

39설치 후 VS Code 인터페이스를 통해 Claude Code를 사용할 수 있습니다:

40 

41<Steps>

42 <Step title="Claude Code 패널 열기">

43 VS Code 전체에서 Spark 아이콘은 Claude Code를 나타냅니다: <img src="https://mintcdn.com/claude-code/c5r9_6tjPMzFdDDT/images/vs-code-spark-icon.svg?fit=max&auto=format&n=c5r9_6tjPMzFdDDT&q=85&s=3ca45e00deadec8c8f4b4f807da94505" alt="Spark 아이콘" style={{display: "inline", height: "0.85em", verticalAlign: "middle"}} width="16" height="16" data-path="images/vs-code-spark-icon.svg" />

44 

45 Claude를 여는 가장 빠른 방법은 **편집기 도구 모음**(편집기의 오른쪽 위 모서리)에서 Spark 아이콘을 클릭하는 것입니다. 이 아이콘은 파일을 열었을 때만 나타납니다.

46 

47 <img src="https://mintcdn.com/claude-code/mfM-EyoZGnQv8JTc/images/vs-code-editor-icon.png?fit=max&auto=format&n=mfM-EyoZGnQv8JTc&q=85&s=eb4540325d94664c51776dbbfec4cf02" alt="편집기 도구 모음에서 Spark 아이콘을 표시하는 VS Code 편집기" width="2796" height="734" data-path="images/vs-code-editor-icon.png" />

48 

49 Claude Code를 여는 다른 방법:

50 

51 * **활동 표시줄**: 왼쪽 사이드바에서 Spark 아이콘을 클릭하여 세션 목록을 엽니다. 세션을 클릭하여 전체 편집기 탭으로 열거나 새 세션을 시작합니다. 이 아이콘은 항상 활동 표시줄에 표시됩니다.

52 * **명령 팔레트**: `Cmd+Shift+P`(Mac) 또는 `Ctrl+Shift+P`(Windows/Linux)를 누르고, "Claude Code"를 입력한 후 "새 탭에서 열기"와 같은 옵션을 선택합니다.

53 * **상태 표시줄**: 창의 오른쪽 아래 모서리에서 **✱ Claude Code**를 클릭합니다. 파일을 열지 않았을 때도 작동합니다.

54 

55 Claude 패널을 드래그하여 VS Code의 어느 곳이든 다시 배치할 수 있습니다. 자세한 내용은 [워크플로우 사용자 정의](#customize-your-workflow)를 참조하십시오.

56 </Step>

57 

58 <Step title="로그인">

59 패널을 처음 열 때 로그인 화면이 나타납니다. **로그인**을 클릭하고 브라우저에서 인증을 완료합니다.

60 

61 나중에 **로그인하지 않음 · /login을 실행하십시오**가 표시되면 확장 프로그램이 로그인 화면을 자동으로 다시 엽니다. 나타나지 않으면 명령 팔레트에서 **Developer: Reload Window**로 창을 다시 로드합니다.

62 

63 셸에 `ANTHROPIC_API_KEY`가 설정되어 있지만 여전히 로그인 프롬프트가 표시되면 VS Code가 셸 환경을 상속하지 못했을 수 있습니다. `code .`를 사용하여 터미널에서 VS Code를 시작하여 환경 변수를 상속하거나 대신 Claude 계정으로 로그인합니다.

64 

65 로그인한 후 **Learn Claude Code** 체크리스트가 나타납니다. **보여주기**를 클릭하여 각 항목을 진행하거나 X로 닫습니다. 나중에 다시 열려면 VS Code 설정의 확장 프로그램 → Claude Code에서 **Hide Onboarding**을 선택 해제합니다.

66 </Step>

67 

68 <Step title="프롬프트 보내기">

69 Claude에게 코드나 파일을 도와달라고 요청합니다. 작동 방식 설명, 문제 디버깅 또는 변경 사항 만들기 등이 있습니다.

70 

71 <Tip>Claude는 자동으로 선택한 텍스트를 봅니다. `Option+K`(Mac) / `Alt+K`(Windows/Linux)를 눌러 프롬프트에 @-멘션 참조(예: `@file.ts#5-10`)를 삽입합니다.</Tip>

72 

73 파일의 특정 줄에 대해 묻는 예시입니다:

74 

75 <img src="https://mintcdn.com/claude-code/FVYz38sRY-VuoGHA/images/vs-code-send-prompt.png?fit=max&auto=format&n=FVYz38sRY-VuoGHA&q=85&s=ede3ed8d8d5f940e01c5de636d009cfd" alt="Python 파일에서 2-3줄이 선택되고 Claude Code 패널에 @-멘션 참조가 있는 해당 줄에 대한 질문을 표시하는 VS Code 편집기" width="3288" height="1876" data-path="images/vs-code-send-prompt.png" />

76 </Step>

77 

78 <Step title="변경 사항 검토">

79 Claude가 파일을 편집하려고 할 때, 원본과 제안된 변경 사항을 나란히 비교하고 권한을 요청합니다. 수락하거나 거부하거나 Claude에게 대신 수행할 작업을 알릴 수 있습니다. 수락하기 전에 diff 보기에서 제안된 콘텐츠를 직접 편집하면 Claude는 수정되었다는 것을 알려지므로 파일이 원래 제안과 일치한다고 가정하지 않습니다.

80 

81 <img src="https://mintcdn.com/claude-code/FVYz38sRY-VuoGHA/images/vs-code-edits.png?fit=max&auto=format&n=FVYz38sRY-VuoGHA&q=85&s=e005f9b41c541c5c7c59c082f7c4841c" alt="Claude의 제안된 변경 사항의 diff를 표시하고 편집을 수행할지 여부를 묻는 권한 프롬프트가 있는 VS Code" width="3292" height="1876" data-path="images/vs-code-edits.png" />

82 </Step>

83</Steps>

84 

85Claude Code로 수행할 수 있는 작업에 대한 더 많은 아이디어는 [일반적인 워크플로우](/ko/common-workflows)를 참조하십시오.

86 

87<Tip>

88 명령 팔레트에서 "Claude Code: Open Walkthrough"를 실행하여 기본 사항에 대한 안내 투어를 받습니다.

89</Tip>

90 

91## 프롬프트 상자 사용

92 

93프롬프트 상자는 여러 기능을 지원합니다:

94 

95* **권한 모드**: 프롬프트 상자 하단의 모드 표시기를 클릭하여 모드를 전환합니다. 일반 모드에서 Claude는 각 작업 전에 권한을 요청합니다. Plan Mode에서 Claude는 수행할 작업을 설명하고 변경을 수행하기 전에 승인을 기다립니다. VS Code는 자동으로 계획을 전체 markdown 문서로 열어서 Claude가 시작하기 전에 피드백을 제공하기 위해 인라인 주석을 추가할 수 있습니다. 자동 수락 모드에서 Claude는 요청 없이 편집을 수행합니다. VS Code 설정의 `claudeCode.initialPermissionMode`에서 기본값을 설정합니다.

96* **명령 메뉴**: `/`를 클릭하거나 입력하여 명령 메뉴를 엽니다. 옵션에는 파일 첨부, 모델 전환, 확장 사고 토글, 계획 사용량 보기(`/usage`) 및 [Remote Control](/ko/remote-control) 세션 시작(`/remote-control`)이 포함됩니다. 사용자 정의 섹션은 MCP 서버, hooks, 메모리, 권한 및 플러그인에 대한 액세스를 제공합니다. 터미널 아이콘이 있는 항목은 통합 터미널에서 열립니다.

97* **컨텍스트 표시기**: 프롬프트 상자는 Claude의 context window를 얼마나 사용하고 있는지 표시합니다. Claude는 필요할 때 자동으로 압축하거나 `/compact`를 수동으로 실행할 수 있습니다.

98* **확장 사고**: Claude가 복잡한 문제를 추론하는 데 더 많은 시간을 소비할 수 있습니다. 명령 메뉴(`/`)를 통해 켭니다. Claude의 추론은 대화에 축소된 블록으로 나타납니다: 블록을 클릭하여 읽거나 `Ctrl+O`를 눌러 세션의 모든 사고 블록을 확장하거나 축소합니다. 자세한 내용은 [확장 사고](/ko/common-workflows#use-extended-thinking-thinking-mode)를 참조하십시오.

99* **여러 줄 입력**: `Shift+Enter`를 눌러 보내지 않고 새 줄을 추가합니다. 이것은 질문 대화의 "기타" 자유 텍스트 입력에서도 작동합니다.

100 

101### 파일 및 폴더 참조

102 

103@-멘션을 사용하여 특정 파일이나 폴더에 대한 컨텍스트를 Claude에게 제공합니다. `@` 다음에 파일 또는 폴더 이름을 입력하면 Claude는 해당 콘텐츠를 읽고 이에 대해 질문하거나 변경할 수 있습니다. Claude Code는 fuzzy matching을 지원하므로 부분 이름을 입력하여 필요한 것을 찾을 수 있습니다:

104 

105```text theme={null}

106> Explain the logic in @auth (fuzzy matches auth.js, AuthService.ts, etc.)

107> What's in @src/components/ (include a trailing slash for folders)

108```

109 

110큰 PDF의 경우 Claude에게 전체 파일 대신 특정 페이지를 읽도록 요청할 수 있습니다: 단일 페이지, 1-10페이지와 같은 범위 또는 3페이지 이상과 같은 개방형 범위입니다.

111 

112편집기에서 텍스트를 선택하면 Claude는 강조 표시된 코드를 자동으로 볼 수 있습니다. 프롬프트 상자 바닥글은 선택된 줄 수를 표시합니다. `Option+K`(Mac) / `Alt+K`(Windows/Linux)를 눌러 파일 경로 및 줄 번호(예: `@app.ts#5-10`)가 있는 @-멘션을 삽입합니다. 선택 표시기를 클릭하여 Claude가 강조 표시된 텍스트를 볼 수 있는지 여부를 전환합니다. 눈 슬래시 아이콘은 선택이 Claude에서 숨겨져 있음을 의미합니다.

113 

114프롬프트 상자에 파일을 드래그할 때 `Shift`를 누르고 있으면 첨부 파일로 추가할 수 있습니다. 첨부 파일의 X를 클릭하여 컨텍스트에서 제거합니다.

115 

116### 과거 대화 재개

117 

118Claude Code 패널 상단의 **세션 기록** 버튼을 클릭하여 대화 기록에 액세스합니다. 키워드로 검색하거나 시간별로 찾아볼 수 있습니다(오늘, 어제, 지난 7일 등). 대화를 클릭하여 전체 메시지 기록으로 재개합니다. 새 세션은 첫 번째 메시지를 기반으로 AI가 생성한 제목을 받습니다. 세션 위에 마우스를 올려 이름 바꾸기 및 제거 작업을 표시합니다: 설명적인 제목으로 이름을 바꾸거나 목록에서 삭제하려면 제거합니다. 세션 재개에 대한 자세한 내용은 [일반적인 워크플로우](/ko/common-workflows#resume-previous-conversations)를 참조하십시오.

119 

120### Claude.ai에서 원격 세션 재개

121 

122[웹에서 Claude Code](/ko/claude-code-on-the-web)를 사용하는 경우 VS Code에서 직접 해당 원격 세션을 재개할 수 있습니다. 이를 위해서는 Anthropic Console이 아닌 **Claude.ai Subscription**으로 로그인해야 합니다.

123 

124<Steps>

125 <Step title="세션 기록 열기">

126 Claude Code 패널 상단의 **세션 기록** 버튼을 클릭합니다.

127 </Step>

128 

129 <Step title="원격 탭 선택">

130 대화 상자에는 로컬 및 원격의 두 탭이 표시됩니다. **원격**을 클릭하여 claude.ai의 세션을 봅니다.

131 </Step>

132 

133 <Step title="재개할 세션 선택">

134 원격 세션을 찾아보거나 검색합니다. 세션을 클릭하여 다운로드하고 대화를 로컬에서 계속합니다.

135 </Step>

136</Steps>

137 

138<Note>

139 원격 탭에는 GitHub 저장소로 시작된 웹 세션만 나타납니다. 재개하면 대화 기록이 로컬로 로드되며, 변경 사항은 claude.ai로 다시 동기화되지 않습니다.

140</Note>

141 

142## 워크플로우 사용자 정의

143 

144실행 중이면 Claude 패널을 다시 배치하거나, 여러 세션을 실행하거나, 터미널 모드로 전환할 수 있습니다.

145 

146### Claude가 있는 위치 선택

147 

148Claude 패널을 드래그하여 VS Code의 어느 곳이든 다시 배치할 수 있습니다. 패널의 탭이나 제목 표시줄을 잡고 다음으로 드래그합니다:

149 

150* **보조 사이드바**: 창의 오른쪽. 코딩하는 동안 Claude를 표시된 상태로 유지합니다.

151* **기본 사이드바**: 탐색기, 검색 등의 아이콘이 있는 왼쪽 사이드바입니다.

152* **편집기 영역**: Claude를 파일과 함께 탭으로 엽니다. 부수적인 작업에 유용합니다.

153 

154<Tip>

155 주 Claude 세션에 사이드바를 사용하고 부수적인 작업을 위해 추가 탭을 엽니다. Claude는 선호하는 위치를 기억합니다. 활동 표시줄 세션 목록 아이콘은 Claude 패널과 별개입니다: 세션 목록은 항상 활동 표시줄에 표시되지만 Claude 패널 아이콘은 패널이 왼쪽 사이드바에 도킹되어 있을 때만 나타납니다.

156</Tip>

157 

158### 여러 대화 실행

159 

160명령 팔레트에서 **새 탭에서 열기** 또는 **새 창에서 열기**를 사용하여 추가 대화를 시작합니다. 각 대화는 자체 기록 및 컨텍스트를 유지하므로 다양한 작업을 병렬로 작업할 수 있습니다.

161 

162탭을 사용할 때 spark 아이콘의 작은 색상 점은 상태를 나타냅니다: 파란색은 권한 요청이 보류 중임을 의미하고, 주황색은 탭이 숨겨져 있는 동안 Claude가 완료되었음을 의미합니다.

163 

164### 터미널 모드로 전환

165 

166기본적으로 확장 프로그램은 그래픽 채팅 패널을 엽니다. CLI 스타일 인터페이스를 선호하는 경우 [Use Terminal 설정](vscode://settings/claudeCode.useTerminal)을 열고 상자를 선택합니다.

167 

168VS Code 설정(`Cmd+,` Mac 또는 `Ctrl+,` Windows/Linux)을 열고 확장 프로그램 → Claude Code로 이동한 후 **Use Terminal**을 선택할 수도 있습니다.

169 

170## 플러그인 관리

171 

172VS Code 확장 프로그램에는 [플러그인](/ko/plugins)을 설치하고 관리하기 위한 그래픽 인터페이스가 포함되어 있습니다. 프롬프트 상자에 `/plugins`를 입력하여 **플러그인 관리** 인터페이스를 엽니다.

173 

174### 플러그인 설치

175 

176플러그인 대화 상자에는 **플러그인** 및 **마켓플레이스**의 두 탭이 표시됩니다.

177 

178플러그인 탭에서:

179 

180* **설치된 플러그인**은 토글 스위치와 함께 상단에 나타나 활성화 또는 비활성화합니다.

181* **구성된 마켓플레이스의 사용 가능한 플러그인**이 아래에 나타납니다.

182* 이름 또는 설명으로 플러그인을 필터링하려면 검색합니다.

183* 사용 가능한 플러그인에서 **설치**를 클릭합니다.

184 

185플러그인을 설치할 때 설치 범위를 선택합니다:

186 

187* **사용자용 설치**: 모든 프로젝트에서 사용 가능(사용자 범위)

188* **이 프로젝트용 설치**: 프로젝트 협력자와 공유(프로젝트 범위)

189* **로컬로 설치**: 이 저장소에서만 사용자용(로컬 범위)

190 

191### 마켓플레이스 관리

192 

193**마켓플레이스** 탭으로 전환하여 플러그인 소스를 추가하거나 제거합니다:

194 

195* GitHub 저장소, URL 또는 로컬 경로를 입력하여 새 마켓플레이스를 추가합니다.

196* 새로 고침 아이콘을 클릭하여 마켓플레이스의 플러그인 목록을 업데이트합니다.

197* 휴지통 아이콘을 클릭하여 마켓플레이스를 제거합니다.

198 

199변경 후 배너가 Claude Code를 다시 시작하여 업데이트를 적용하라는 메시지를 표시합니다.

200 

201<Note>

202 VS Code의 플러그인 관리는 내부적으로 동일한 CLI 명령을 사용합니다. 확장 프로그램에서 구성한 플러그인 및 마켓플레이스는 CLI에서도 사용 가능하며 그 반대도 마찬가지입니다.

203</Note>

204 

205플러그인 시스템에 대한 자세한 내용은 [플러그인](/ko/plugins) 및 [플러그인 마켓플레이스](/ko/plugin-marketplaces)를 참조하십시오.

206 

207## Chrome으로 브라우저 작업 자동화

208 

209Claude를 Chrome 브라우저에 연결하여 웹 앱을 테스트하고, 콘솔 로그로 디버깅하고, VS Code를 떠나지 않고 브라우저 워크플로우를 자동화합니다. 이를 위해서는 [Chrome의 Claude 확장 프로그램](https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn) 버전 1.0.36 이상이 필요합니다.

210 

211프롬프트 상자에 `@browser`를 입력한 후 Claude가 수행할 작업을 입력합니다:

212 

213```text theme={null}

214@browser go to localhost:3000 and check the console for errors

215```

216 

217첨부 메뉴를 열어 새 탭 열기 또는 페이지 콘텐츠 읽기와 같은 특정 브라우저 도구를 선택할 수도 있습니다.

218 

219Claude는 브라우저 작업을 위해 새 탭을 열고 브라우저의 로그인 상태를 공유하므로 이미 로그인한 모든 사이트에 액세스할 수 있습니다.

220 

221설정 지침, 전체 기능 목록 및 문제 해결은 [Chrome에서 Claude Code 사용](/ko/chrome)을 참조하십시오.

222 

223## VS Code 명령 및 단축키

224 

225명령 팔레트(`Cmd+Shift+P` Mac 또는 `Ctrl+Shift+P` Windows/Linux)를 열고 "Claude Code"를 입력하여 Claude Code 확장 프로그램에 사용 가능한 모든 VS Code 명령을 봅니다.

226 

227일부 단축키는 어느 패널이 "포커스"되어 있는지(키보드 입력을 받는지)에 따라 다릅니다. 커서가 코드 파일에 있으면 편집기가 포커스됩니다. 커서가 Claude의 프롬프트 상자에 있으면 Claude가 포커스됩니다. `Cmd+Esc` / `Ctrl+Esc`를 사용하여 둘 사이를 전환합니다.

228 

229<Note>

230 이는 확장 프로그램을 제어하기 위한 VS Code 명령입니다. 모든 기본 제공 Claude Code 명령을 확장 프로그램에서 사용할 수 있는 것은 아닙니다. 자세한 내용은 [VS Code 확장 프로그램 vs. Claude Code CLI](#vs-code-extension-vs-claude-code-cli)를 참조하십시오.

231</Note>

232 

233| 명령 | 단축키 | 설명 |

234| -------------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------ |

235| Focus Input | `Cmd+Esc`(Mac) / `Ctrl+Esc`(Windows/Linux) | 편집기와 Claude 사이의 포커스 전환 |

236| Open in Side Bar | - | 왼쪽 사이드바에서 Claude 열기 |

237| Open in Terminal | - | 터미널 모드에서 Claude 열기 |

238| Open in New Tab | `Cmd+Shift+Esc`(Mac) / `Ctrl+Shift+Esc`(Windows/Linux) | 편집기 탭으로 새 대화 열기 |

239| Open in New Window | - | 별도 창에서 새 대화 열기 |

240| New Conversation | `Cmd+N`(Mac) / `Ctrl+N`(Windows/Linux) | 새 대화 시작. Claude가 포커스되어야 하고 `enableNewConversationShortcut`이 `true`로 설정되어야 합니다. |

241| Insert @-Mention Reference | `Option+K`(Mac) / `Alt+K`(Windows/Linux) | 현재 파일 및 선택에 대한 참조 삽입(편집기가 포커스되어야 함) |

242| Show Logs | - | 확장 프로그램 디버그 로그 보기 |

243| Logout | - | Anthropic 계정에서 로그아웃 |

244 

245### 다른 도구에서 VS Code 탭 시작

246 

247확장 프로그램은 `vscode://anthropic.claude-code/open`에서 URI 핸들러를 등록합니다. 이를 사용하여 자신의 도구에서 새 Claude Code 탭을 열 수 있습니다: 셸 별칭, 브라우저 북마크렛 또는 URL을 열 수 있는 모든 스크립트입니다. VS Code가 아직 실행 중이 아니면 URL을 열면 먼저 시작됩니다. VS Code가 이미 실행 중이면 URL은 현재 포커스된 창에서 열립니다.

248 

249운영 체제의 URL 오프너로 핸들러를 호출합니다.

250 

251<Tabs>

252 <Tab title="macOS">

253 ```bash theme={null}

254 open "vscode://anthropic.claude-code/open"

255 ```

256 </Tab>

257 

258 <Tab title="Linux">

259 ```bash theme={null}

260 xdg-open "vscode://anthropic.claude-code/open"

261 ```

262 </Tab>

263 

264 <Tab title="Windows">

265 PowerShell에서:

266 

267 ```powershell theme={null}

268 Start-Process "vscode://anthropic.claude-code/open"

269 ```

270 

271 `cmd.exe`에서 `start`는 첫 번째 따옴표로 묶인 인수를 창 제목으로 처리하므로 URL 앞에 빈 제목을 전달합니다:

272 

273 ```cmd theme={null}

274 start "" "vscode://anthropic.claude-code/open"

275 ```

276 </Tab>

277</Tabs>

278 

279핸들러는 두 개의 선택적 쿼리 매개변수를 허용합니다:

280 

281| 매개변수 | 설명 |

282| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

283| `prompt` | 프롬프트 상자에 미리 채울 텍스트입니다. URL 인코딩되어야 합니다. 프롬프트는 미리 채워지지만 자동으로 제출되지 않습니다. |

284| `session` | 새 대화를 시작하는 대신 재개할 세션 ID입니다. 세션은 VS Code에서 현재 열려 있는 작업 공간에 속해야 합니다. 세션을 찾을 수 없으면 새 대화가 시작됩니다. 세션이 이미 탭에서 열려 있으면 해당 탭이 포커스됩니다. 프로그래밍 방식으로 세션 ID를 캡처하려면 [대화 계속](/ko/headless#continue-conversations)을 참조하십시오. |

285 

286예를 들어 "review my changes"로 미리 채워진 탭을 열려면:

287 

288```text theme={null}

289vscode://anthropic.claude-code/open?prompt=review%20my%20changes

290```

291 

292터미널 세션을 VS Code 탭 대신 시작하려면 CLI의 `claude-cli://` 핸들러를 사용합니다. [링크에서 세션 시작](/ko/deep-links)을 참조하십시오.

293 

294## 설정 구성

295 

296확장 프로그램에는 두 가지 유형의 설정이 있습니다:

297 

298* **확장 프로그램 설정** VS Code에서: VS Code 내에서 확장 프로그램의 동작을 제어합니다. `Cmd+,`(Mac) 또는 `Ctrl+,`(Windows/Linux)로 열고 확장 프로그램 → Claude Code로 이동합니다. `/`를 입력하고 **General Config**를 선택하여 설정을 열 수도 있습니다.

299* **Claude Code 설정** `~/.claude/settings.json`에서: 확장 프로그램과 CLI 간에 공유됩니다. 허용된 명령, 환경 변수, hooks 및 MCP 서버에 사용합니다. 자세한 내용은 [설정](/ko/settings)을 참조하십시오.

300 

301<Tip>

302 `"$schema": "https://json.schemastore.org/claude-code-settings.json"`을 `settings.json`에 추가하여 VS Code에서 직접 사용 가능한 모든 설정에 대한 자동 완성 및 인라인 유효성 검사를 받습니다.

303</Tip>

304 

305### 확장 프로그램 설정

306 

307| 설정 | 기본값 | 설명 |

308| --------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

309| `useTerminal` | `false` | 그래픽 패널 대신 터미널 모드에서 Claude 시작 |

310| `initialPermissionMode` | `default` | 새 대화에 대한 승인 프롬프트 제어: `default`, `plan`, `acceptEdits` 또는 `bypassPermissions`. [권한 모드](/ko/permission-modes)를 참조하십시오. |

311| `preferredLocation` | `panel` | Claude가 열리는 위치: `sidebar`(오른쪽) 또는 `panel`(새 탭) |

312| `autosave` | `true` | Claude가 파일을 읽거나 쓰기 전에 자동 저장 |

313| `useCtrlEnterToSend` | `false` | Enter 대신 Ctrl/Cmd+Enter를 사용하여 프롬프트 보내기 |

314| `enableNewConversationShortcut` | `false` | Cmd/Ctrl+N을 사용하여 새 대화 시작 활성화 |

315| `hideOnboarding` | `false` | 온보딩 체크리스트 숨기기(졸업 모자 아이콘) |

316| `respectGitIgnore` | `true` | 파일 검색에서 .gitignore 패턴 제외 |

317| `usePythonEnvironment` | `true` | Claude를 실행할 때 작업 공간의 Python 환경을 활성화합니다. Python 확장 프로그램이 필요합니다. |

318| `environmentVariables` | `[]` | Claude 프로세스에 대한 환경 변수 설정. 공유 구성을 위해 Claude Code 설정을 대신 사용합니다. |

319| `disableLoginPrompt` | `false` | 인증 프롬프트 건너뛰기(타사 공급자 설정용) |

320| `allowDangerouslySkipPermissions` | `false` | [Auto mode](/ko/permission-modes#eliminate-prompts-with-auto-mode) 및 Bypass 권한을 모드 선택기에 추가합니다. Auto mode는 [계획, 관리자, 모델 및 공급자 요구 사항](/ko/permission-modes#eliminate-prompts-with-auto-mode)이 있으므로 이 토글이 켜져 있어도 사용 불가능할 수 있습니다. Bypass 권한은 인터넷 액세스가 없는 샌드박스에서만 사용합니다. |

321| `claudeProcessWrapper` | - | Claude 프로세스를 시작하는 데 사용되는 실행 파일 경로 |

322 

323## VS Code 확장 프로그램 vs. Claude Code CLI

324 

325Claude Code는 VS Code 확장 프로그램(그래픽 패널)과 CLI(터미널의 명령줄 인터페이스) 모두로 사용 가능합니다. 일부 기능은 CLI에서만 사용 가능합니다. CLI 전용 기능이 필요한 경우 VS Code의 통합 터미널에서 `claude`를 실행합니다.

326 

327| 기능 | CLI | VS Code 확장 프로그램 |

328| ------------ | ------------------ | ------------------------------------------- |

329| 명령 및 skills | [모두](/ko/commands) | 부분 집합(`/`를 입력하여 사용 가능한 항목 보기) |

330| MCP 서버 구성 | 예 | 부분(CLI를 통해 서버 추가; 채팅 패널에서 `/mcp`로 기존 서버 관리) |

331| Checkpoints | 예 | 예 |

332| `!` bash 단축키 | 예 | 아니요 |

333| Tab 완성 | 예 | 아니요 |

334 

335### Checkpoints로 되감기

336 

337VS Code 확장 프로그램은 Claude의 파일 편집을 추적하고 이전 상태로 되감을 수 있는 checkpoints를 지원합니다. 메시지 위에 마우스를 올려 되감기 버튼을 표시한 후 세 가지 옵션 중에서 선택합니다:

338 

339* **여기서 대화 분기**: 모든 코드 변경 사항을 유지하면서 이 메시지에서 새 대화 분기 시작

340* **여기로 코드 되감기**: 전체 대화 기록을 유지하면서 파일 변경 사항을 이 지점으로 되돌리기

341* **대화 분기 및 코드 되감기**: 새 대화 분기 시작 및 파일 변경 사항을 이 지점으로 되돌리기

342 

343checkpoints 작동 방식 및 제한 사항에 대한 전체 세부 정보는 [Checkpointing](/ko/checkpointing)을 참조하십시오.

344 

345### VS Code에서 CLI 실행

346 

347VS Code에 머물면서 CLI를 사용하려면 통합 터미널(Windows/Linux에서 `` Ctrl+` `` 또는 Mac에서 `` Cmd+` ``)을 열고 `claude`를 실행합니다. CLI는 diff 보기 및 진단 공유와 같은 기능을 위해 IDE와 자동으로 통합됩니다.

348 

349외부 터미널을 사용하는 경우 Claude Code 내에서 `/ide`를 실행하여 VS Code에 연결합니다.

350 

351### 확장 프로그램과 CLI 간 전환

352 

353확장 프로그램과 CLI는 동일한 대화 기록을 공유합니다. 확장 프로그램 대화를 CLI에서 계속하려면 터미널에서 `claude --resume`을 실행합니다. 이렇게 하면 대화를 검색하고 선택할 수 있는 대화형 선택기가 열립니다.

354 

355### 프롬프트에 터미널 출력 포함

356 

357`@terminal:name`을 사용하여 프롬프트에서 터미널 출력을 참조합니다. 여기서 `name`은 터미널의 제목입니다. 이를 통해 Claude는 복사 붙여넣기 없이 명령 출력, 오류 메시지 또는 로그를 볼 수 있습니다.

358 

359### 백그라운드 프로세스 모니터링

360 

361Claude가 장기 실행 명령을 실행할 때 확장 프로그램은 상태 표시줄에 진행 상황을 표시합니다. 그러나 백그라운드 작업의 가시성은 CLI에 비해 제한적입니다. 더 나은 가시성을 위해 Claude가 명령을 출력하도록 하여 VS Code의 통합 터미널에서 실행할 수 있습니다.

362 

363### MCP를 사용하여 외부 도구에 연결

364 

365MCP(Model Context Protocol) 서버는 Claude에게 외부 도구, 데이터베이스 및 API에 대한 액세스를 제공합니다.

366 

367MCP 서버를 추가하려면 통합 터미널(`` Ctrl+` `` 또는 `` Cmd+` ``)을 열고 `claude mcp add`를 실행합니다. 아래 예제는 GitHub의 원격 MCP 서버를 추가하며, 이는 헤더로 전달된 [개인 액세스 토큰](https://github.com/settings/personal-access-tokens)으로 인증합니다:

368 

369```bash theme={null}

370claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \

371 --header "Authorization: Bearer YOUR_GITHUB_PAT"

372```

373 

374구성되면 Claude에게 도구를 사용하도록 요청합니다(예: "Review PR #456").

375 

376VS Code를 떠나지 않고 MCP 서버를 관리하려면 채팅 패널에 `/mcp`를 입력합니다. MCP 관리 대화 상자를 사용하면 서버를 활성화 또는 비활성화하고, 서버에 다시 연결하고, OAuth 인증을 관리할 수 있습니다. 사용 가능한 서버는 [MCP 문서](/ko/mcp)를 참조하십시오.

377 

378## git으로 작업

379 

380Claude Code는 git과 통합되어 VS Code에서 직접 버전 제어 워크플로우를 지원합니다. Claude에게 변경 사항을 커밋하거나, 풀 요청을 생성하거나, 분기 간에 작업하도록 요청합니다.

381 

382### 커밋 및 풀 요청 생성

383 

384Claude는 변경 사항을 스테이징하고, 커밋 메시지를 작성하고, 작업을 기반으로 풀 요청을 생성할 수 있습니다:

385 

386```text theme={null}

387> commit my changes with a descriptive message

388> create a pr for this feature

389> summarize the changes I've made to the auth module

390```

391 

392풀 요청을 생성할 때 Claude는 실제 코드 변경을 기반으로 설명을 생성하고 테스트 또는 구현 결정에 대한 컨텍스트를 추가할 수 있습니다.

393 

394### 병렬 작업을 위해 git worktrees 사용

395 

396`--worktree`(`-w`) 플래그를 사용하여 자체 파일 및 분기가 있는 격리된 worktree에서 Claude를 시작합니다:

397 

398```bash theme={null}

399claude --worktree feature-auth

400```

401 

402각 worktree는 git 기록을 공유하면서 독립적인 파일 상태를 유지합니다. 이렇게 하면 Claude 인스턴스가 다양한 작업을 수행할 때 서로 간섭하지 않습니다. 자세한 내용은 [Git worktrees를 사용하여 병렬 Claude Code 세션 실행](/ko/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees)을 참조하십시오.

403 

404## 타사 공급자 사용

405 

406기본적으로 Claude Code는 Anthropic의 API에 직접 연결됩니다. 조직에서 Amazon Bedrock, Google Vertex AI 또는 Microsoft Foundry를 사용하여 Claude에 액세스하는 경우 대신 공급자를 사용하도록 확장 프로그램을 구성합니다:

407 

408<Steps>

409 <Step title="로그인 프롬프트 비활성화">

410 [로그인 프롬프트 비활성화 설정](vscode://settings/claudeCode.disableLoginPrompt)을 열고 상자를 선택합니다.

411 

412 VS Code 설정(`Cmd+,` Mac 또는 `Ctrl+,` Windows/Linux)을 열고 "Claude Code login"을 검색한 후 **로그인 프롬프트 비활성화**를 선택할 수도 있습니다.

413 </Step>

414 

415 <Step title="공급자 구성">

416 공급자에 대한 설정 가이드를 따릅니다:

417 

418 * [Amazon Bedrock의 Claude Code](/ko/amazon-bedrock)

419 * [Google Vertex AI의 Claude Code](/ko/google-vertex-ai)

420 * [Microsoft Foundry의 Claude Code](/ko/microsoft-foundry)

421 

422 이 가이드는 `~/.claude/settings.json`에서 공급자를 구성하는 방법을 다루며, 이는 VS Code 확장 프로그램과 CLI 간에 설정이 공유되도록 합니다.

423 </Step>

424</Steps>

425 

426## 보안 및 개인 정보 보호

427 

428코드는 비공개로 유지됩니다. Claude Code는 코드를 처리하여 지원을 제공하지만 모델 학습에 사용하지 않습니다. 데이터 처리 및 로깅을 거부하는 방법에 대한 자세한 내용은 [데이터 및 개인 정보 보호](/ko/data-usage)를 참조하십시오.

429 

430자동 편집 권한이 활성화되면 Claude Code는 VS Code가 자동으로 실행할 수 있는 VS Code 구성 파일(예: `settings.json` 또는 `tasks.json`)을 수정할 수 있습니다. 신뢰할 수 없는 코드로 작업할 때 위험을 줄이려면:

431 

432* 신뢰할 수 없는 작업 공간에 대해 [VS Code 제한 모드](https://code.visualstudio.com/docs/editor/workspace-trust#_restricted-mode)를 활성화합니다.

433* 편집에 대해 자동 수락 대신 수동 승인 모드를 사용합니다.

434* 수락하기 전에 변경 사항을 주의 깊게 검토합니다.

435 

436### 기본 제공 IDE MCP 서버

437 

438확장 프로그램이 활성화되면 CLI가 자동으로 연결하는 로컬 MCP 서버를 실행합니다. 이것이 CLI가 VS Code의 기본 diff 뷰어에서 diff를 열고, `@`-멘션에 대한 현재 선택을 읽고, Jupyter 노트북에서 작업할 때 VS Code에 셀을 실행하도록 요청하는 방법입니다.

439 

440서버의 이름은 `ide`이며 구성할 것이 없으므로 `/mcp`에서 숨겨져 있습니다. 그러나 조직에서 `PreToolUse` hook을 사용하여 MCP 도구를 허용 목록에 추가하는 경우 이것이 존재한다는 것을 알아야 합니다.

441 

442**전송 및 인증.** 서버는 `127.0.0.1`에 바인드되고 임의의 높은 포트에서 다른 머신에서 도달할 수 없습니다. 각 확장 프로그램 활성화는 CLI가 연결하기 위해 제시해야 하는 새로운 임의의 인증 토큰을 생성합니다. 토큰은 `0600` 권한이 있는 `0700` 디렉토리 아래 `~/.claude/ide/`의 잠금 파일에 기록되므로 VS Code를 실행하는 사용자만 읽을 수 있습니다.

443 

444**모델에 노출된 도구.** 서버는 약 12개의 도구를 호스팅하지만 모델에만 2개가 표시됩니다. 나머지는 CLI가 자체 UI(diff 열기, 선택 읽기, 파일 저장)에 사용하는 내부 RPC이며 도구 목록이 Claude에 도달하기 전에 필터링됩니다.

445 

446| 도구 이름(hooks에서 보이는 대로) | 수행하는 작업 | 쓰기? |

447| -------------------------- | ---------------------------------------------------------------- | --- |

448| `mcp__ide__getDiagnostics` | 언어 서버 진단을 반환합니다 — VS Code의 문제 패널의 오류 및 경고. 선택적으로 한 파일로 범위 지정됩니다. | 아니요 |

449| `mcp__ide__executeCode` | 활성 Jupyter 노트북의 커널에서 Python 코드를 실행합니다. 아래 확인 흐름을 참조하십시오. | 예 |

450 

451**Jupyter 실행은 항상 먼저 묻습니다.** `mcp__ide__executeCode`는 아무것도 조용히 실행할 수 없습니다. 각 호출에서 코드는 활성 노트북의 끝에 새 셀로 삽입되고, VS Code는 이를 보기로 스크롤하고, 기본 Quick Pick은 **실행** 또는 **취소**를 요청합니다. 취소하거나 `Esc`로 선택기를 닫으면 Claude에 오류를 반환하고 아무것도 실행되지 않습니다. 도구는 활성 노트북이 없을 때, Jupyter 확장 프로그램(`ms-toolsai.jupyter`)이 설치되지 않았을 때 또는 커널이 Python이 아닐 때 완전히 거부합니다.

452 

453<Note>

454 Quick Pick 확인은 `PreToolUse` hooks와 별개입니다. `mcp__ide__executeCode`에 대한 허용 목록 항목을 사용하면 Claude가 셀 실행을 *제안*할 수 있습니다. VS Code 내의 Quick Pick은 실제로 *실행*할 수 있게 해줍니다.

455</Note>

456 

457<a id="troubleshooting" />

458 

459## 일반적인 문제 해결

460 

461### 확장 프로그램이 설치되지 않음

462 

463* VS Code의 호환 버전(1.98.0 이상)이 있는지 확인합니다.

464* VS Code에 확장 프로그램을 설치할 권한이 있는지 확인합니다.

465* [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code)에서 직접 설치를 시도합니다.

466 

467### Spark 아이콘이 표시되지 않음

468 

469Spark 아이콘은 파일을 열었을 때 **편집기 도구 모음**(편집기의 오른쪽 위)에 나타납니다. 표시되지 않으면:

470 

4711. **파일 열기**: 아이콘에는 파일을 열어야 합니다. 폴더만 열어서는 충분하지 않습니다.

4722. **VS Code 버전 확인**: 1.98.0 이상 필요(도움말 → 정보)

4733. **VS Code 다시 시작**: 명령 팔레트에서 "Developer: Reload Window" 실행

4744. **충돌하는 확장 프로그램 비활성화**: 다른 AI 확장 프로그램(Cline, Continue 등)을 일시적으로 비활성화합니다.

4755. **작업 공간 신뢰 확인**: 확장 프로그램은 제한 모드에서 작동하지 않습니다.

476 

477또는 **상태 표시줄**(오른쪽 아래 모서리)에서 "✱ Claude Code"를 클릭합니다. 파일을 열지 않았을 때도 작동합니다. **명령 팔레트**(`Cmd+Shift+P` / `Ctrl+Shift+P`)를 사용하고 "Claude Code"를 입력할 수도 있습니다.

478 

479### Claude Code가 응답하지 않음

480 

481Claude Code가 프롬프트에 응답하지 않으면:

482 

4831. **인터넷 연결 확인**: 안정적인 인터넷 연결이 있는지 확인합니다.

4842. **새 대화 시작**: 새 대화를 시작하여 문제가 지속되는지 확인합니다.

4853. **CLI 시도**: 터미널에서 `claude`를 실행하여 더 자세한 오류 메시지를 확인합니다.

486 

487문제가 지속되면 오류에 대한 세부 정보와 함께 [GitHub에서 문제를 제출합니다](https://github.com/anthropics/claude-code/issues).

488 

489## 확장 프로그램 제거

490 

491Claude Code 확장 프로그램을 제거하려면:

492 

4931. 확장 프로그램 보기 열기(`Cmd+Shift+X` Mac 또는 `Ctrl+Shift+X` Windows/Linux)

4942. "Claude Code" 검색

4953. **제거** 클릭

496 

497확장 프로그램 데이터를 제거하고 모든 설정을 재설정하려면:

498 

499```bash theme={null}

500rm -rf ~/.vscode/globalStorage/anthropic.claude-code

501```

502 

503추가 도움말은 [문제 해결 가이드](/ko/troubleshooting)를 참조하십시오.

504 

505## 다음 단계

506 

507이제 VS Code에서 Claude Code를 설정했습니다:

508 

509* [일반적인 워크플로우 탐색](/ko/common-workflows)하여 Claude Code를 최대한 활용합니다.

510* [MCP 서버 설정](/ko/mcp)하여 외부 도구로 Claude의 기능을 확장합니다. CLI를 사용하여 서버를 추가한 후 채팅 패널에서 `/mcp`로 관리합니다.

511* [Claude Code 설정 구성](/ko/settings)하여 허용된 명령, hooks 등을 사용자 정의합니다. 이 설정은 확장 프로그램과 CLI 간에 공유됩니다.

web-quickstart.md +220 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 웹에서 Claude Code 시작하기

6 

7> 브라우저나 휴대폰에서 클라우드에서 Claude Code를 실행합니다. GitHub 저장소를 연결하고, 작업을 제출하고, 로컬 설정 없이 PR을 검토합니다.

8 

9<Note>

10 웹의 Claude Code는 Pro, Max, Team 사용자와 프리미엄 시트 또는 Chat + Claude Code 시트가 있는 Enterprise 사용자를 위한 연구 미리보기 상태입니다.

11</Note>

12 

13웹의 Claude Code는 사용자의 머신 대신 Anthropic 관리 클라우드 인프라에서 실행됩니다. [claude.ai/code](https://claude.ai/code)에서 브라우저 또는 Claude 모바일 앱을 통해 작업을 제출합니다.

14 

15[시작하기](#connect-github-and-create-an-environment)를 위해 GitHub 저장소가 필요합니다. Claude는 이를 격리된 가상 머신으로 복제하고, 변경 사항을 만들고, 검토할 수 있도록 브랜치를 푸시합니다. 세션은 기기 간에 지속되므로, 노트북에서 시작한 작업을 나중에 휴대폰에서 검토할 수 있습니다.

16 

17웹의 Claude Code는 다음에 적합합니다:

18 

19* **병렬 작업**: 여러 개의 독립적인 작업을 동시에 실행하며, 각각 자신의 세션과 브랜치에서 실행되고, 여러 worktrees를 관리할 필요가 없습니다

20* **로컬에 없는 저장소**: Claude는 매 세션마다 저장소를 새로 복제하므로, 체크아웃할 필요가 없습니다

21* **자주 조정할 필요가 없는 작업**: 잘 정의된 작업을 제출하고, 다른 작업을 하고, Claude가 완료되면 결과를 검토합니다

22* **코드 질문 및 탐색**: 로컬 체크아웃 없이 코드베이스를 이해하거나 기능이 어떻게 구현되는지 추적합니다

23 

24로컬 구성, 도구 또는 환경이 필요한 작업의 경우, Claude Code를 로컬에서 실행하거나 [Remote Control](/ko/remote-control)을 사용하는 것이 더 적합합니다.

25 

26## 세션이 실행되는 방식

27 

28작업을 제출할 때:

29 

301. **복제 및 준비**: 저장소가 Anthropic 관리 VM으로 복제되고, 구성된 경우 [설정 스크립트](/ko/claude-code-on-the-web#setup-scripts)가 실행됩니다.

312. **네트워크 구성**: 인터넷 접근은 환경의 [접근 수준](/ko/claude-code-on-the-web#access-levels)에 따라 설정됩니다.

323. **작업**: Claude는 코드를 분석하고, 변경 사항을 만들고, 테스트를 실행하고, 작업을 확인합니다. 전체 과정을 지켜보고 조정할 수 있거나, 물러나 있다가 완료되면 돌아올 수 있습니다.

334. **브랜치 푸시**: Claude가 중지점에 도달하면, 브랜치를 GitHub로 푸시합니다. 차이를 검토하고, 인라인 댓글을 남기고, PR을 생성하거나, 계속 진행하도록 다른 메시지를 보냅니다.

34 

35브랜치가 푸시될 때 세션이 닫히지 않습니다. PR 생성 및 추가 편집은 모두 동일한 대화 내에서 발생합니다.

36 

37## Claude Code를 실행하는 방법 비교

38 

39Claude Code는 모든 곳에서 동일하게 작동합니다. 변경되는 것은 코드가 실행되는 위치와 로컬 구성을 사용할 수 있는지 여부입니다. Desktop 앱은 로컬 및 클라우드 세션을 모두 제공하므로, 아래의 답변은 선택한 것에 따라 달라집니다:

40 

41| | 웹에서 | Remote Control | Terminal CLI | Desktop 앱 |

42| :-------------------------------- | :-------------------------------------------------------------------------------------------------- | :----------------- | :----------- | :--------------------- |

43| **코드 실행 위치** | Anthropic 클라우드 VM | 사용자의 머신 | 사용자의 머신 | 사용자의 머신 또는 클라우드 VM |

44| **채팅 위치** | claude.ai 또는 모바일 앱 | claude.ai 또는 모바일 앱 | 터미널 | Desktop UI |

45| **로컬 구성 사용** | 아니오, 저장소만 | 예 | 예 | 로컬의 경우 예, 클라우드의 경우 아니오 |

46| **GitHub 필요** | 예, 또는 `--remote`를 통해 [로컬 저장소 번들](/ko/claude-code-on-the-web#send-local-repositories-without-github) | 아니오 | 아니오 | 클라우드 세션의 경우만 |

47| **연결 해제 시 계속 실행** | 예 | 터미널이 열려 있는 동안 | 아니오 | 세션 유형에 따라 다름 |

48| **[권한 모드](/ko/permission-modes)** | 편집 자동 수락, Plan | 요청, 편집 자동 수락, Plan | 모든 모드 | 세션 유형에 따라 다름 |

49| **네트워크 접근** | 환경별로 구성 가능 | 머신의 네트워크 | 머신의 네트워크 | 세션 유형에 따라 다름 |

50 

51[터미널 빠른 시작](/ko/quickstart), [Desktop 앱](/ko/desktop) 또는 [Remote Control](/ko/remote-control) 문서를 참조하여 설정합니다.

52 

53## GitHub 연결 및 환경 생성

54 

55설정은 일회성 프로세스입니다. 이미 GitHub CLI를 사용하는 경우, 브라우저 대신 [터미널에서 이를 수행](#connect-from-your-terminal)할 수 있습니다.

56 

57<Steps>

58 <Step title="claude.ai/code 방문">

59 [claude.ai/code](https://claude.ai/code)로 이동하고 Anthropic 계정으로 로그인합니다.

60 </Step>

61 

62 <Step title="Claude GitHub 앱 설치">

63 로그인 후, claude.ai/code는 GitHub를 연결하도록 요청합니다. 프롬프트를 따라 Claude GitHub 앱을 설치하고 저장소에 대한 접근을 허용합니다. 클라우드 세션은 기존 GitHub 저장소와 함께 작동하므로, 새 프로젝트를 시작하려면 먼저 [GitHub에서 빈 저장소를 생성](https://github.com/new)합니다.

64 </Step>

65 

66 <Step title="환경 생성">

67 GitHub를 연결한 후, 클라우드 환경을 생성하도록 요청받습니다. 환경은 세션 중에 Claude가 가진 네트워크 접근 권한과 새 세션이 생성될 때 실행되는 것을 제어합니다. 구성 없이 사용 가능한 것은 [설치된 도구](/ko/claude-code-on-the-web#installed-tools)를 참조합니다.

68 

69 양식에는 다음 필드가 있습니다:

70 

71 * **이름**: 표시 레이블입니다. 다양한 프로젝트 또는 접근 수준을 위해 여러 환경이 있을 때 유용합니다.

72 * **네트워크 접근**: 세션이 인터넷에서 도달할 수 있는 것을 제어합니다. 기본값인 `Trusted`는 npm, PyPI, RubyGems와 같은 [일반적인 패키지 레지스트리](/ko/claude-code-on-the-web#default-allowed-domains)에 대한 연결을 허용하면서 일반 인터넷 접근을 차단합니다.

73 * **환경 변수**: `.env` 형식의 모든 세션에서 사용 가능한 선택적 변수입니다. 따옴표가 값의 일부로 저장되므로 값을 따옴표로 감싸지 마십시오. 이 환경을 편집할 수 있는 모든 사람에게 표시됩니다.

74 * **설정 스크립트**: Claude Code가 시작되기 전에 실행되는 선택적 Bash 스크립트입니다. `apt install -y gh`와 같이 클라우드 VM에 포함되지 않은 시스템 도구를 설치하는 데 사용합니다. 결과는 [캐시됨](/ko/claude-code-on-the-web#environment-caching)이므로, 스크립트는 매 세션마다 다시 실행되지 않습니다. 예제 및 디버깅 팁은 [설정 스크립트](/ko/claude-code-on-the-web#setup-scripts)를 참조합니다.

75 

76 첫 번째 프로젝트의 경우, 기본값을 유지하고 **환경 생성**을 클릭합니다. 나중에 [편집하거나 다양한 프로젝트를 위해 추가 환경을 생성](/ko/claude-code-on-the-web#configure-your-environment)할 수 있습니다.

77 </Step>

78</Steps>

79 

80### 터미널에서 연결

81 

82이미 GitHub CLI(`gh`)를 사용하는 경우, 브라우저를 열지 않고 웹에서 Claude Code를 설정할 수 있습니다. 이는 [Claude Code CLI](/ko/quickstart)가 필요합니다. `/web-setup`은 로컬 `gh` 토큰을 읽고, Claude 계정에 연결하고, 아직 없는 경우 기본 클라우드 환경을 생성합니다.

83 

84<Note>

85 [Zero Data Retention](/ko/zero-data-retention)이 활성화된 조직은 `/web-setup` 또는 기타 클라우드 세션 기능을 사용할 수 없습니다. GitHub CLI가 설치되지 않았거나 인증되지 않은 경우, `/web-setup`은 브라우저 온보딩 흐름을 대신 엽니다.

86</Note>

87 

88<Steps>

89 <Step title="GitHub CLI로 인증">

90 셸에서, 아직 하지 않은 경우 GitHub CLI를 인증합니다:

91 

92 ```bash theme={null}

93 gh auth login

94 ```

95 </Step>

96 

97 <Step title="Claude에 로그인">

98 Claude Code CLI에서 `/login`을 실행하여 claude.ai 계정으로 로그인합니다. 이미 로그인한 경우 이 단계를 건너뜁니다.

99 </Step>

100 

101 <Step title="/web-setup 실행">

102 Claude Code CLI에서 다음을 실행합니다:

103 

104 ```text theme={null}

105 /web-setup

106 ```

107 

108 이는 `gh` 토큰을 Claude 계정과 동기화합니다. 아직 클라우드 환경이 없는 경우, `/web-setup`은 Trusted 네트워크 접근 및 설정 스크립트 없이 환경을 생성합니다. 나중에 [환경을 편집하거나 변수를 추가](/ko/claude-code-on-the-web#configure-your-environment)할 수 있습니다. `/web-setup`이 완료되면, 터미널에서 [`--remote`](/ko/claude-code-on-the-web#from-terminal-to-web)를 사용하여 클라우드 세션을 시작하거나 [`/schedule`](/ko/routines)을 사용하여 반복 작업을 설정할 수 있습니다.

109 </Step>

110</Steps>

111 

112## 작업 시작

113 

114GitHub가 연결되고 환경이 생성되면, 작업을 제출할 준비가 되었습니다.

115 

116<Steps>

117 <Step title="저장소 및 브랜치 선택">

118 [claude.ai/code](https://claude.ai/code) 또는 Claude 모바일 앱의 Code 탭에서, 입력 상자 아래의 저장소 선택기를 클릭하고 Claude가 작업할 저장소를 선택합니다. 각 저장소는 브랜치 선택기를 표시합니다. 기본값 대신 기능 브랜치에서 Claude를 시작하도록 변경합니다. 한 세션에서 여러 저장소를 추가하여 작업할 수 있습니다.

119 </Step>

120 

121 <Step title="권한 모드 선택">

122 입력 옆의 모드 드롭다운은 기본값으로 **편집 자동 수락**이며, Claude는 승인을 기다리지 않고 변경 사항을 만들고 브랜치를 푸시합니다. Claude가 접근 방식을 제안하고 파일을 편집하기 전에 승인을 기다리도록 하려면 **Plan mode**로 전환합니다. 클라우드 세션은 Ask 권한, Auto 모드 또는 Bypass 권한을 제공하지 않습니다. 전체 목록은 [권한 모드](/ko/permission-modes)를 참조합니다.

123 </Step>

124 

125 <Step title="작업 설명 및 제출">

126 원하는 작업에 대한 설명을 입력하고 Enter를 누릅니다. 구체적으로 작성합니다:

127 

128 * 파일 또는 함수 이름 지정: "설정 지침이 포함된 README 추가" 또는 "`tests/test_auth.py`에서 실패한 인증 테스트 수정"이 "테스트 수정"보다 낫습니다

129 * 오류 출력이 있으면 붙여넣기

130 * 증상이 아닌 예상 동작을 설명합니다

131 

132 Claude는 저장소를 복제하고, 구성된 경우 설정 스크립트를 실행하고, 작업을 시작합니다. 각 작업은 자신의 세션과 자신의 브랜치를 가지므로, 하나가 완료될 때까지 기다릴 필요가 없습니다.

133 </Step>

134</Steps>

135 

136## 세션 미리 채우기

137 

138[claude.ai/code](https://claude.ai/code) URL에 쿼리 매개변수를 추가하여 새 세션의 프롬프트, 저장소 및 환경을 미리 채울 수 있습니다. 이를 사용하여 문제 추적기의 버튼과 같은 통합을 구축하여 문제 설명을 프롬프트로 하여 Claude Code를 엽니다.

139 

140| 매개변수 | 설명 |

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

142| `prompt` | 입력 상자에 미리 채울 프롬프트 텍스트입니다. 별칭 `q`도 허용됩니다. |

143| `prompt_url` | 쿼리 문자열에 포함하기에 너무 긴 프롬프트 텍스트를 가져올 URL입니다. URL은 교차 출처 요청을 허용해야 합니다. `prompt`도 설정된 경우 무시됩니다. |

144| `repositories` | 미리 선택할 `owner/repo` 슬러그의 쉼표로 구분된 목록입니다. 별칭 `repo`도 허용됩니다. |

145| `environment` | 미리 선택할 [환경](#connect-github-and-create-an-environment)의 이름 또는 ID입니다. |

146 

147각 값을 URL 인코딩합니다. 아래 예제는 프롬프트와 저장소가 이미 선택된 양식을 엽니다:

148 

149```text theme={null}

150https://claude.ai/code?prompt=Fix%20the%20login%20bug&repositories=acme/webapp

151```

152 

153## 검토 및 반복

154 

155Claude가 완료되면, 변경 사항을 검토하고, 특정 줄에 피드백을 남기고, 차이가 올바를 때까지 계속합니다.

156 

157<Steps>

158 <Step title="차이 보기 열기">

159 차이 표시기는 세션 전체에서 추가되고 제거된 줄을 표시합니다(예: `+42 -18`). 이를 선택하여 차이 보기를 열고, 왼쪽에 파일 목록이 있고 오른쪽에 변경 사항이 있습니다.

160 </Step>

161 

162 <Step title="인라인 댓글 남기기">

163 차이의 모든 줄을 선택하고, 피드백을 입력하고, Enter를 누릅니다. 댓글은 다음 메시지를 보낼 때까지 대기열에 있다가 함께 번들로 제공됩니다. Claude는 주요 지침과 함께 "`src/auth.ts:47`에서 여기서 오류를 포착하지 마십시오"를 보므로, 문제가 있는 위치를 설명할 필요가 없습니다.

164 </Step>

165 

166 <Step title="풀 요청 생성">

167 차이가 올바르면, 차이 보기 상단에서 **PR 생성**을 선택합니다. 전체 PR로 열거나, 초안으로 열거나, 생성된 제목 및 설명과 함께 GitHub의 작성 페이지로 이동할 수 있습니다.

168 </Step>

169 

170 <Step title="PR 후 계속 반복">

171 PR이 생성된 후 세션이 활성 상태로 유지됩니다. CI 실패 출력 또는 검토자 댓글을 채팅에 붙여넣고 Claude에게 이를 해결하도록 요청합니다. Claude가 PR을 자동으로 모니터링하도록 하려면, [자동 수정 풀 요청](/ko/claude-code-on-the-web#auto-fix-pull-requests)을 참조합니다.

172 </Step>

173</Steps>

174 

175## 설정 문제 해결

176 

177### GitHub 연결 후 저장소가 나타나지 않음

178 

179Claude GitHub 앱은 사용하려는 각 저장소에 대한 명시적 접근이 필요합니다. github.com에서 **Settings → Applications → Claude → Configure**를 열고 저장소가 **Repository access** 아래에 나열되어 있는지 확인합니다. 비공개 저장소는 공개 저장소와 동일한 권한이 필요합니다.

180 

181### 페이지에 GitHub 로그인 버튼만 표시됨

182 

183클라우드 세션은 연결된 GitHub 계정이 필요합니다. 위의 브라우저 흐름을 통해 연결하거나, GitHub CLI를 사용하는 경우 터미널에서 `/web-setup`을 실행합니다. GitHub를 연결하지 않으려면, [Remote Control](/ko/remote-control)을 참조하여 자신의 머신에서 Claude Code를 실행하고 웹에서 모니터링합니다.

184 

185### "선택한 조직에서 사용할 수 없음"

186 

187Enterprise 조직은 관리자가 웹에서 Claude Code를 활성화해야 할 수 있습니다. Anthropic 계정 팀에 문의합니다.

188 

189### `/web-setup`이 "Unknown command" 반환

190 

191`/web-setup`은 셸이 아닌 Claude Code CLI 내부에서 실행됩니다. 먼저 `claude`를 시작한 다음, 프롬프트에서 `/web-setup`을 입력합니다.

192 

193Claude Code 내부에 입력했는데도 오류가 표시되면, CLI가 v2.1.80보다 오래되었거나 API 키 또는 타사 공급자 대신 claude.ai 구독으로 인증되었습니다. `claude update`를 실행한 다음, `/login`을 실행하여 claude.ai 계정으로 로그인합니다.

194 

195### `--remote` 또는 ultraplan 사용 시 "클라우드 환경을 생성할 수 없음" 또는 "사용 가능한 클라우드 환경 없음"

196 

197원격 세션 기능은 아직 없는 경우 기본 클라우드 환경을 자동으로 생성합니다. "클라우드 환경을 생성할 수 없음"이 표시되면, 자동 생성이 실패했습니다. {/* max-version: 2.1.100 */}"사용 가능한 클라우드 환경 없음"이 표시되면, CLI가 자동 생성보다 앞서 있습니다. 어느 경우든, Claude Code CLI에서 `/web-setup`을 실행하여 수동으로 생성하거나, [claude.ai/code](https://claude.ai/code)를 방문하고 위의 **환경 생성** 단계를 따릅니다.

198 

199### 설정 스크립트 실패

200 

201설정 스크립트가 0이 아닌 상태로 종료되어 세션 시작을 차단합니다. 일반적인 원인:

202 

203* 레지스트리가 [네트워크 접근 수준](/ko/claude-code-on-the-web#access-levels)에 없어서 패키지 설치가 실패했습니다. `Trusted`는 대부분의 패키지 관리자를 포함합니다. `None`은 모두 차단합니다.

204* 스크립트가 신선한 복제에 존재하지 않는 파일 또는 경로를 참조합니다.

205* 로컬에서 작동하는 명령이 Ubuntu에서 다른 호출이 필요합니다.

206 

207디버깅하려면, 스크립트 상단에 `set -x`를 추가하여 어느 명령이 실패했는지 확인합니다. 중요하지 않은 명령의 경우, `|| true`를 추가하여 세션 시작을 차단하지 않도록 합니다.

208 

209### 탭을 닫은 후 세션이 계속 실행됨

210 

211이는 의도된 동작입니다. 탭을 닫거나 다른 곳으로 이동해도 세션이 중지되지 않습니다. Claude가 현재 작업을 완료한 다음 유휴 상태가 될 때까지 백그라운드에서 계속 실행됩니다. 사이드바에서, [세션을 보관](/ko/claude-code-on-the-web#archive-sessions)하여 목록에서 숨기거나, [삭제](/ko/claude-code-on-the-web#delete-sessions)하여 영구적으로 제거할 수 있습니다.

212 

213## 다음 단계

214 

215이제 작업을 제출하고 검토할 수 있으므로, 이 페이지들은 다음에 올 것을 다룹니다: 터미널에서 클라우드 세션 시작, 반복 작업 예약, Claude에게 상시 지침 제공.

216 

217* [웹에서 Claude Code 사용](/ko/claude-code-on-the-web): 터미널로 세션 텔레포트, 설정 스크립트, 환경 변수, 네트워크 구성을 포함한 전체 참조

218* [Routines](/ko/routines): 일정에 따라, API 호출을 통해, 또는 GitHub 이벤트에 응답하여 작업을 자동화합니다

219* [CLAUDE.md](/ko/memory): 모든 세션의 시작 시 로드되는 지속적인 지침 및 컨텍스트를 Claude에게 제공합니다

220* [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) 또는 [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude)용 Claude 모바일 앱을 설치하여 휴대폰에서 세션을 모니터링합니다. Claude Code CLI에서, `/mobile`은 QR 코드를 표시합니다.

whats-new.md +49 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 새로운 기능

6 

7> Claude Code의 주목할 만한 기능을 매주 정리한 다이제스트로, 코드 스니펫, 데모, 그리고 그 중요성에 대한 설명을 포함합니다.

8 

9주간 개발자 다이제스트는 업무 방식을 바꿀 가능성이 가장 높은 기능들을 강조합니다. 각 항목에는 실행 가능한 코드, 짧은 데모, 그리고 전체 문서로의 링크가 포함됩니다. 모든 버그 수정 및 사소한 개선 사항은 [changelog](/ko/changelog)를 참조하십시오.

10 

11<Update label="Week 17" description="2026년 4월 20–24일" tags={["v2.1.114–v2.1.119"]}>

12 \*\*`/ultrareview`\*\*가 공개 연구 미리보기로 출시됩니다: 클라우드에서 실행되는 버그 사냥 에이전트 플릿이 발견 사항을 CLI 또는 Desktop으로 자동으로 전달합니다.

13 

14 이번 주의 다른 기능들: **session recap**은 터미널이 포커스를 잃은 동안 발생한 일을 보여줍니다. **custom themes**을 사용하면 `/theme` 또는 플러그인에서 색상 팔레트를 구축하고 배포할 수 있습니다. 그리고 **Claude Code on the web**은 새로운 세션 사이드바와 드래그 앤 드롭 레이아웃으로 재설계되었습니다.

15 

16 [Week 17 다이제스트 읽기 →](/ko/whats-new/2026-w17)

17</Update>

18 

19<Update label="Week 16" description="2026년 4월 13–17일" tags={["v2.1.105–v2.1.113"]}>

20 **Claude Opus 4.7**이 Max 및 Team Premium의 새로운 기본값으로 출시되며, 대부분의 코딩 작업에 권장되는 새로운 `xhigh` 노력 수준과 이를 조정할 수 있는 대화형 `/effort` 슬라이더가 포함됩니다.

21 

22 이번 주의 다른 기능들: Claude Code on the web의 **Routines**은 일정, GitHub 이벤트 또는 API 호출에서 템플릿 클라우드 에이전트를 실행합니다. `/ultrareview`는 클라우드에서 병렬 다중 에이전트 코드 리뷰를 실행합니다. `/usage`는 제한을 유발하는 요소를 표시합니다. 그리고 CLI는 네이티브 바이너리로 이동합니다.

23 

24 [Week 16 다이제스트 읽기 →](/ko/whats-new/2026-w16)

25</Update>

26 

27<Update label="Week 15" description="2026년 4월 6–10일" tags={["v2.1.92–v2.1.101"]}>

28 **Ultraplan**이 초기 미리보기에 진입합니다: CLI에서 클라우드의 계획을 작성하고, 웹 편집기에서 검토 및 댓글을 달고, 원격으로 실행하거나 로컬로 다시 가져옵니다. 첫 번째 실행은 이제 자동으로 클라우드 환경을 생성합니다.

29 

30 이번 주의 다른 기능들: **Monitor** 도구는 백그라운드 이벤트를 대화로 스트리밍하므로 Claude가 로그를 추적하고 실시간으로 반응할 수 있습니다. `/loop`는 간격을 생략할 때 자동으로 속도를 조절합니다. `/team-onboarding`은 설정을 재생 가능한 가이드로 패키징합니다. 그리고 `/autofix-pr`은 터미널에서 PR 자동 수정을 켭니다.

31 

32 [Week 15 다이제스트 읽기 →](/ko/whats-new/2026-w15)

33</Update>

34 

35<Update label="Week 14" description="2026년 3월 30일 – 4월 3일" tags={["v2.1.86–v2.1.91"]}>

36 **Computer use**가 연구 미리보기에서 CLI로 제공됩니다: Claude는 네이티브 앱을 열고, UI를 클릭하고, 터미널에서 변경 사항을 확인할 수 있습니다. GUI만 확인할 수 있는 작업을 완료하는 데 가장 좋습니다.

37 

38 이번 주의 다른 기능들: `/powerup` 대화형 레슨, 깜박임 없는 alt-screen 렌더링, 도구당 MCP 결과 크기 재정의(최대 500K), 그리고 Bash 도구의 `PATH`에 플러그인 실행 파일이 있습니다.

39 

40 [Week 14 다이제스트 읽기 →](/ko/whats-new/2026-w14)

41</Update>

42 

43<Update label="Week 13" description="2026년 3월 23–27일" tags={["v2.1.83–v2.1.85"]}>

44 **Auto mode**가 연구 미리보기에서 출시됩니다: 분류기가 권한 프롬프트를 처리하므로 안전한 작업은 중단 없이 실행되고 위험한 작업은 차단됩니다. 모든 것을 승인하는 것과 `--dangerously-skip-permissions` 사이의 중간 지점입니다.

45 

46 이번 주의 다른 기능들: Desktop 앱의 컴퓨터 사용, Web의 PR 자동 수정, `/`를 사용한 트랜스크립트 검색, Windows용 네이티브 PowerShell 도구, 그리고 조건부 `if` 훅입니다.

47 

48 [Week 13 다이제스트 읽기 →](/ko/whats-new/2026-w13)

49</Update>

whats-new/2026-w16.md +135 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 16주차 · 2026년 4월 13–17일

6 

7> 새로운 xhigh 노력 수준이 포함된 Claude Opus 4.7, Claude Code 웹의 루틴, /ultrareview 클라우드 코드 리뷰, 사용 한도를 주도하는 요소를 보여주는 /usage 분석, 그리고 번들된 JavaScript를 대체하는 네이티브 바이너리.

8 

9<div className="digest-meta">

10 <span>릴리스 <a href="/ko/docs/changelog#2-1-105">v2.1.105 → v2.1.113</a></span>

11 <span>5가지 기능 · 4월 13–17일</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">Claude Opus 4.7</span>

17 <span className="digest-feature-pill">새로운 모델</span>

18 </div>

19 

20 <p className="digest-feature-lede">Anthropic의 가장 강력한 코딩 모델이 이제 Max 및 Team Premium의 기본값이며, <code>/model</code>에서 다른 모든 곳에서도 사용할 수 있습니다. <code>high</code>와 <code>max</code> 사이에 위치하는 새로운 <code>xhigh</code> 노력 수준을 추가합니다. 대부분의 코딩 및 에이전트 작업에 최적의 결과를 제공하며, 4.7로 처음 전환할 때 기본값으로 적용됩니다. <code>/effort</code>는 이제 인수 없이 호출할 때 대화형 화살표 키 슬라이더를 열어서 수준 이름을 기억하지 않고도 지능과 속도를 조절할 수 있습니다.</p>

21 

22 <p className="digest-feature-try">모델과 노력 수준을 한 번에 전환하기:</p>

23 

24 ```text Claude Code theme={null}

25 > /model opus

26 > /effort xhigh

27 ```

28 

29 <a className="digest-feature-link" href="/ko/docs/model-config#adjust-effort-level">모델 설정: 노력 수준</a>

30</div>

31 

32<div className="digest-feature">

33 <div className="digest-feature-header">

34 <span className="digest-feature-title">루틴</span>

35 <span className="digest-feature-pill">웹</span>

36 </div>

37 

38 <p className="digest-feature-lede">일정에 따라, GitHub 이벤트에 따라, 또는 API 호출에 따라 실행되는 템플릿 클라우드 에이전트입니다. Claude Code 웹에서 프롬프트, 접근할 수 있는 저장소, 필요한 커넥터를 사용하여 루틴을 한 번 정의한 후, PR 열림, 릴리스 게시 또는 자신의 웹훅이 머신을 실행하지 않고도 이를 트리거하도록 합니다. 트리거 선택기는 이제 선택적 필터가 있는 GitHub 이벤트를 포함하며 모든 루틴에 외부 시스템을 위한 토큰화된 <code>/fire</code> 엔드포인트를 제공합니다.</p>

39 

40 <Frame>

41 <img className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/routines.png?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=2ba818ea9280c549511cb48b9b4d1dc5" alt="일정, GitHub 이벤트 및 API 트리거를 사용하여 Claude Code 웹에서 루틴 생성" width="1440" height="810" data-path="images/whats-new/routines.png" />

42 </Frame>

43 

44 <p className="digest-feature-try">웹 UI에서 생성하거나 터미널에서 스캐폴드하기:</p>

45 

46 ```text Claude Code theme={null}

47 > /schedule daily PR review at 9am

48 ```

49 

50 <a className="digest-feature-link" href="/ko/docs/routines">루틴 가이드</a>

51</div>

52 

53<div className="digest-feature">

54 <div className="digest-feature-header">

55 <span className="digest-feature-title">/usage 분석</span>

56 <span className="digest-feature-pill">CLI</span>

57 </div>

58 

59 <p className="digest-feature-lede">Claude Code 사용이 어디로 가는지에 대한 더 많은 가시성을 제공합니다. <code>/usage</code>는 이제 사용 한도를 주도하는 요소를 보여줍니다. 병렬 세션, 서브에이전트, 캐시 미스, 긴 컨텍스트 각각에 대해 지난 24시간의 백분율과 최적화 팁을 제공합니다. <code>d</code> 또는 <code>w</code>를 눌러 일일 및 주간 보기 사이를 전환합니다.</p>

60 

61 <Frame>

62 <img className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/usage.png?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=792a4b43cbef4e2931974831f076bca6" alt="/usage 명령이 한도 사용에 기여하는 요소의 분석을 보여줌" width="1204" height="1182" data-path="images/whats-new/usage.png" />

63 </Frame>

64 

65 <p className="digest-feature-try">언제든지 실행하기:</p>

66 

67 ```text Claude Code theme={null}

68 > /usage

69 ```

70 

71 <a className="digest-feature-link" href="/ko/docs/commands">명령 참조</a>

72</div>

73 

74<div className="digest-feature">

75 <div className="digest-feature-header">

76 <span className="digest-feature-title">/ultrareview</span>

77 <span className="digest-feature-pill">v2.1.111</span>

78 </div>

79 

80 <p className="digest-feature-lede">클라우드에서의 포괄적인 코드 리뷰입니다. Ultrareview는 브랜치를 Claude Code 웹의 병렬 리뷰어 전체에 분산시키고, 각 발견에 대해 적대적 비판 패스를 실행하며, 터미널이 자유로운 상태에서 검증된 발견 보고서를 반환합니다. 인수 없이 호출하여 현재 브랜치를 리뷰하거나, PR 번호를 전달하여 해당 PR을 가져와 리뷰합니다. 시작 대화상자는 이제 확인하기 전에 어떤 내용이 올라가는지 알 수 있도록 diffstat을 표시합니다.</p>

81 

82 <p className="digest-feature-try">현재 브랜치 리뷰하기:</p>

83 

84 ```text Claude Code theme={null}

85 > /ultrareview

86 ```

87 

88 <p className="digest-feature-try">또는 PR을 지정하기:</p>

89 

90 ```text Claude Code theme={null}

91 > /ultrareview 1234

92 ```

93 

94 <a className="digest-feature-link" href="/ko/docs/ultrareview">Ultrareview 가이드</a>

95</div>

96 

97<div className="digest-feature">

98 <div className="digest-feature-header">

99 <span className="digest-feature-title">네이티브 바이너리</span>

100 <span className="digest-feature-pill">v2.1.113</span>

101 </div>

102 

103 <p className="digest-feature-lede"><code>claude</code> CLI는 이제 번들된 JavaScript 대신 플랫폼별 네이티브 바이너리를 생성하므로, 설치된 <code>claude</code> 명령은 더 이상 Node를 호출하지 않습니다. npm 패키지는 <code>@anthropic-ai/claude-code-darwin-arm64</code>와 같은 선택적 종속성을 통해 올바른 바이너리를 가져오므로, 설치 명령은 변경되지 않습니다. 독립 실행형 설치 프로그램은 이미 이 바이너리를 제공했으며, npm은 이제 이와 일치합니다.</p>

104 

105 <p className="digest-feature-try">업그레이드하고 실행 중인 항목 확인하기:</p>

106 

107 ```bash theme={null}

108 claude update

109 claude --version

110 ```

111 

112 <a className="digest-feature-link" href="/ko/docs/setup">설정 가이드</a>

113</div>

114 

115<div className="digest-wins">

116 <p className="digest-wins-title">기타 개선 사항</p>

117 

118 <div className="digest-wins-grid">

119 <div><a href="/ko/docs/permission-modes#eliminate-prompts-with-auto-mode">자동 모드</a>는 이제 Opus 4.7의 Max 구독자에게 제공되며, <code>--enable-auto-mode</code> 플래그는 더 이상 필요하지 않습니다</div>

120 <div><a href="/ko/docs/interactive-mode#session-recap">세션 요약</a>은 자리를 비운 동안 발생한 일의 한 줄 요약을 표시합니다. <code>/recap</code>을 요청 시 실행하거나 <code>/config</code>에서 끕니다</div>

121 <div>새로운 <code>/tui</code> 명령과 <code>tui</code> 설정은 대화 중에 클래식과 깜박임 없는 렌더링 사이를 전환합니다. 포커스 보기는 <code>Ctrl+O</code>에서 자신의 <code>/focus</code> 명령으로 이동했습니다</div>

122 <div>푸시 알림 도구: <a href="/ko/docs/remote-control">원격 제어</a>가 연결되어 있고 "Claude가 결정할 때 푸시" 옵션이 활성화되어 있으면, Claude는 필요할 때 휴대폰에 알림을 보낼 수 있습니다</div>

123 <div>플러그인은 세션 시작 또는 스킬 호출 시 자동으로 활성화되는 최상위 <code>monitors</code> 매니페스트 키를 통해 백그라운드 감시자를 제공할 수 있습니다</div>

124 <div><code>/theme</code>의 "자동 (터미널과 일치)" 옵션은 터미널의 어두운/밝은 모드를 따릅니다</div>

125 <div><code>/fewer-permission-prompts</code>는 트랜스크립트에서 일반적인 읽기 전용 Bash 및 MCP 호출을 스캔하고 <code>.claude/settings.json</code>에 대한 허용 목록을 제안합니다</div>

126 <div>Claude는 이제 스킬 도구를 통해 <code>/init</code>, <code>/review</code>, <code>/security-review</code>와 같은 기본 제공 명령을 발견하고 실행할 수 있습니다</div>

127 <div><code>PreCompact</code> 훅은 코드 2로 종료하거나 <code>{"{"}"decision":"block"{"}"}</code>를 반환하여 압축을 차단할 수 있습니다</div>

128 <div><code>ENABLE\_PROMPT\_CACHING\_1H</code>는 API 키, Bedrock, Vertex 및 Foundry 사용자를 1시간 프롬프트 캐시 TTL로 옵트인합니다</div>

129 <div><code>sandbox.network.deniedDomains</code> 설정은 더 광범위한 <code>allowedDomains</code> 와일드카드에서 특정 도메인을 제외합니다</div>

130 <div><code>/undo</code>는 이제 <code>/rewind</code>의 별칭이며, <code>/proactive</code>는 <code>/loop</code>의 별칭입니다</div>

131 <div>강화된 Bash 권한: 거부 규칙은 이제 <code>env</code>/<code>sudo</code>/<code>watch</code> 래퍼를 통해 일치하며, <code>Bash(find:\*)</code> 허용 규칙은 더 이상 <code>-exec</code> 또는 <code>-delete</code>를 자동으로 승인하지 않습니다</div>

132 </div>

133</div>

134 

135[v2.1.105–v2.1.113 전체 변경 로그 →](/ko/changelog#2-1-105)

whats-new/2026-w17.md +113 −0 created

Details

1> ## Documentation Index

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

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

4 

5# 17주차 · 2026년 4월 20–24일

6 

7> /ultrareview가 연구 미리보기로 공개되며, 터미널로 돌아올 때 자동 세션 요약, 플러그인으로 빌드하고 배포할 수 있는 커스텀 색상 테마, 그리고 재설계된 웹용 Claude Code가 제공됩니다.

8 

9<div className="digest-meta">

10 <span>릴리스 <a href="/ko/docs/changelog#2-1-114">v2.1.114 → v2.1.119</a></span>

11 <span>4가지 기능 · 4월 20–24</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">/ultrareview</span>

17 <span className="digest-feature-pill">research preview</span>

18 </div>

19 

20 <p className="digest-feature-lede">이제 공개 연구 미리보기로 제공됩니다. Ultrareview는 클라우드에서 버그 헌팅 에이전트 플릿을 실행하여 브랜치 또는 PR에 대해 검토하고, 발견 사항이 CLI 또는 Desktop으로 자동으로 전달됩니다. 인증 또는 데이터 마이그레이션과 같은 중요한 변경 사항을 병합하기 전에 실행하세요.</p>

21 

22 <Frame>

23 <video autoPlay muted loop playsInline className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/ultrareview.mp4?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=0fb1271365d38f414ad155aeb8edb08e" data-path="images/whats-new/ultrareview.mp4" />

24 </Frame>

25 

26 <p className="digest-feature-try">현재 브랜치를 검토합니다:</p>

27 

28 ```text Claude Code theme={null}

29 > /ultrareview

30 ```

31 

32 <p className="digest-feature-try">또는 PR을 지정합니다:</p>

33 

34 ```text Claude Code theme={null}

35 > /ultrareview 1234

36 ```

37 

38 <a className="digest-feature-link" href="/ko/docs/ultrareview">Ultrareview 가이드</a>

39</div>

40 

41<div className="digest-feature">

42 <div className="digest-feature-header">

43 <span className="digest-feature-title">세션 요약</span>

44 <span className="digest-feature-pill">CLI</span>

45 </div>

46 

47 <p className="digest-feature-lede">세션에서 포커스를 전환했다가 돌아오면 자신이 없는 동안 일어난 일에 대한 한 줄 요약을 받습니다. 여러 Claude 세션을 동시에 실행하면서 흐름을 유지하는 데 도움이 됩니다.</p>

48 

49 <Frame>

50 <video autoPlay muted loop playsInline className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/session-recap.mp4?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=0a8db1470bd0161a47efeb2f322af76f" data-path="images/whats-new/session-recap.mp4" />

51 </Frame>

52 

53 <p className="digest-feature-try"><code>/config</code>에서 요청 시 요약을 생성하거나 자동 요약을 끕니다:</p>

54 

55 ```text Claude Code theme={null}

56 > /recap

57 ```

58 

59 <a className="digest-feature-link" href="/ko/docs/interactive-mode#session-recap">대화형 모드: 세션 요약</a>

60</div>

61 

62<div className="digest-feature">

63 <div className="digest-feature-header">

64 <span className="digest-feature-title">커스텀 테마</span>

65 <span className="digest-feature-pill">v2.1.118</span>

66 </div>

67 

68 <p className="digest-feature-lede"><code>/theme</code>에서 명명된 색상 테마를 빌드하고 전환하거나, <code>\~/.claude/themes/</code>의 JSON 파일을 직접 편집합니다. 각 테마는 기본 프리셋을 선택하고 관심 있는 토큰만 재정의합니다. 플러그인도 테마를 배포할 수 있습니다.</p>

69 

70 <p className="digest-feature-try">테마 선택기를 열고 새로운 테마를 만듭니다:</p>

71 

72 ```text Claude Code theme={null}

73 > /theme

74 ```

75 

76 <a className="digest-feature-link" href="/ko/docs/terminal-config#create-a-custom-theme">터미널 설정: 커스텀 테마 만들기</a>

77</div>

78 

79<div className="digest-feature">

80 <div className="digest-feature-header">

81 <span className="digest-feature-title">웹용 Claude Code</span>

82 <span className="digest-feature-pill">web</span>

83 </div>

84 

85 <p className="digest-feature-lede"><a href="https://claude.ai/code">claude.ai/code</a>의 새로운 모습으로 재설계된 데스크톱 앱과 일치합니다: 세션 사이드바, 드래그 앤 드롭 레이아웃, 그리고 새로워진 루틴 보기입니다. 주요 부분이 더 빠른 응답과 더 안정적인 경험을 위해 재구축되었습니다.</p>

86 

87 <Frame>

88 <img className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/web-redesign.jpeg?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=a2aca1b49e295b7337f5779038db8e2c" alt="웹용 Claude Code 재설계 개요: 새로운 UI, 속도 및 안정성, 웹, 모바일, CLI 전반에서 작업" width="1602" height="1610" data-path="images/whats-new/web-redesign.jpeg" />

89 </Frame>

90 

91 <a className="digest-feature-link" href="/ko/docs/claude-code-on-the-web">웹용 Claude Code</a>

92</div>

93 

94<div className="digest-wins">

95 <p className="digest-wins-title">기타 개선 사항</p>

96 

97 <div className="digest-wins-grid">

98 <div><a href="/ko/docs/interactive-mode#vim-editor-mode">Vim 비주얼 모드</a>: 프롬프트 입력에서 문자 선택을 위해 <code>v</code>를 누르거나 줄 선택을 위해 <code>V</code>를 누르고, 연산자 및 시각적 피드백을 사용합니다</div>

99 <div>Hooks는 이제 <a href="/ko/docs/hooks#mcp-tool-hook-fields"><code>type: "mcp\_tool"</code></a>을 통해 MCP 도구를 직접 호출할 수 있으므로, hook이 프로세스를 생성하지 않고 이미 연결된 서버에 접근할 수 있습니다</div>

100 <div><code>/cost</code>와 <code>/stats</code>는 <a href="/ko/docs/commands"><code>/usage</code></a>로 병합되었습니다. 이전 이름은 여전히 관련 탭을 여는 입력 단축키로 작동합니다</div>

101 <div><code>/config</code> 변경 사항(테마, 편집기 모드, 상세 정보 등)은 이제 <code>\~/.claude/settings.json</code>에 유지되며 다른 <a href="/ko/docs/settings">설정</a>과 동일한 프로젝트/로컬/정책 우선순위를 따릅니다</div>

102 <div><a href="/ko/docs/sub-agents#fork-the-current-conversation">포크된 서브에이전트</a>는 <code>CLAUDE\_CODE\_FORK\_SUBAGENT=1</code>로 외부 빌드에서 활성화할 수 있습니다: 포크는 처음부터 시작하는 대신 전체 대화 컨텍스트를 상속합니다</div>

103 <div>Pro 및 Max 구독자의 Opus 4.6 및 Sonnet 4.6에 대한 기본 <a href="/ko/docs/model-config#adjust-effort-level">노력 수준</a>은 이제 <code>high</code>입니다(이전: <code>medium</code>)</div>

104 <div>네이티브 macOS 및 Linux 빌드는 <code>Glob</code> 및 <code>Grep</code> 도구를 Bash를 통해 사용 가능한 내장 <code>bfs</code> 및 <code>ugrep</code>으로 대체하여 별도의 도구 라운드 트립 없이 더 빠른 검색을 제공합니다</div>

105 <div><code>--from-pr</code>은 이제 github.com 외에도 GitLab 병합 요청, Bitbucket 풀 요청, GitHub Enterprise PR URL을 허용합니다</div>

106 <div>자동 모드: <a href="/ko/docs/auto-mode-config"><code>autoMode.allow</code>, <code>soft\_deny</code>, 또는 <code>environment</code></a>에 <code>"\$defaults"</code>를 포함하여 기본 제공 목록을 대체하는 대신 커스텀 규칙을 추가합니다</div>

107 <div>새로운 <a href="/ko/docs/plugin-dependencies#tag-plugin-releases-for-version-resolution"><code>claude plugin tag</code></a> 명령은 버전 검증을 통해 플러그인에 대한 릴리스 git 태그를 만듭니다</div>

108 <div>Opus 4.7 세션은 이제 모델의 네이티브 1M 컨텍스트 윈도우에 대해 계산되어 부풀려진 <code>/context</code> 백분율과 조기 자동 압축을 수정합니다</div>

109 <div><code>/resume</code>은 대규모 세션에서 최대 67% 더 빠르며 이제 다시 읽기 전에 오래되고 큰 세션을 요약할 것을 제안합니다</div>

110 </div>

111</div>

112 

113[v2.1.114–v2.1.119의 전체 변경 로그 →](/ko/changelog#2-1-114)

zero-data-retention.md +66 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Zero data retention

6 

7> Claude for Enterprise에서 Claude Code의 Zero Data Retention(ZDR)에 대해 알아보세요. 범위, 비활성화된 기능, 활성화 요청 방법을 포함합니다.

8 

9Zero Data Retention(ZDR)은 Claude for Enterprise를 통해 사용할 때 Claude Code에서 사용 가능합니다. ZDR이 활성화되면 Claude Code 세션 중에 생성된 프롬프트와 모델 응답은 실시간으로 처리되며 응답이 반환된 후 Anthropic에서 저장되지 않습니다. 단, 법률 준수 또는 오용 방지가 필요한 경우는 제외합니다.

10 

11Claude for Enterprise의 ZDR은 엔터프라이즈 고객에게 Zero Data Retention으로 Claude Code를 사용하고 관리 기능에 액세스할 수 있는 기능을 제공합니다:

12 

13* 사용자별 비용 제어

14* [분석](/ko/analytics) 대시보드

15* [서버 관리 설정](/ko/server-managed-settings)

16* 감사 로그

17 

18Claude for Enterprise의 Claude Code에 대한 ZDR은 Anthropic의 직접 플랫폼에만 적용됩니다. Amazon Bedrock, Google Vertex AI 또는 Microsoft Foundry의 Claude 배포의 경우 해당 플랫폼의 데이터 보존 정책을 참조하세요.

19 

20## ZDR 범위

21 

22ZDR은 Claude for Enterprise의 Claude Code 추론을 포함합니다.

23 

24<Warning>

25 ZDR은 조직별로 활성화됩니다. 각 새로운 조직은 Anthropic 계정 팀에서 별도로 ZDR을 활성화해야 합니다. ZDR은 동일한 계정 아래에 생성된 새로운 조직에 자동으로 적용되지 않습니다. 새로운 조직에 대해 ZDR을 활성화하려면 계정 팀에 문의하세요.

26</Warning>

27 

28### ZDR이 포함하는 것

29 

30ZDR은 Claude for Enterprise의 Claude Code를 통해 이루어진 모델 추론 호출을 포함합니다. 터미널에서 Claude Code를 사용할 때 전송하는 프롬프트와 Claude가 생성하는 응답은 Anthropic에서 보존되지 않습니다. 이는 사용되는 Claude 모델에 관계없이 적용됩니다.

31 

32### ZDR이 포함하지 않는 것

33 

34ZDR은 ZDR이 활성화된 조직의 경우에도 다음을 포함하지 않습니다. 이러한 기능은 [표준 데이터 보존 정책](/ko/data-usage#data-retention)을 따릅니다:

35 

36| 기능 | 세부 정보 |

37| -------------- | ----------------------------------------------------------------------------------------------------------------------------------- |

38| claude.ai의 채팅 | Claude for Enterprise 웹 인터페이스를 통한 채팅 대화는 ZDR에 포함되지 않습니다. |

39| Cowork | Cowork 세션은 ZDR에 포함되지 않습니다. |

40| Claude Code 분석 | 프롬프트 또는 모델 응답을 저장하지 않지만 계정 이메일 및 사용 통계와 같은 생산성 메타데이터를 수집합니다. 기여도 메트릭은 ZDR 조직에서 사용할 수 없습니다. [분석 대시보드](/ko/analytics)는 사용 메트릭만 표시합니다. |

41| 사용자 및 시트 관리 | 계정 이메일 및 시트 할당과 같은 관리 데이터는 표준 정책에 따라 보존됩니다. |

42| 타사 통합 | 타사 도구, MCP servers 또는 기타 외부 통합에서 처리한 데이터는 ZDR에 포함되지 않습니다. 해당 서비스의 데이터 처리 관행을 독립적으로 검토하세요. |

43 

44## ZDR에서 비활성화된 기능

45 

46Claude for Enterprise의 Claude Code 조직에 대해 ZDR이 활성화되면 프롬프트 또는 완성을 저장해야 하는 특정 기능이 백엔드 수준에서 자동으로 비활성화됩니다:

47 

48| 기능 | 이유 |

49| ----------------------------------------------- | ------------------------------------ |

50| [웹의 Claude Code](/ko/claude-code-on-the-web) | 대화 기록의 서버 측 저장이 필요합니다. |

51| Desktop 앱의 [원격 세션](/ko/desktop#remote-sessions) | 프롬프트 및 완성을 포함하는 지속적인 세션 데이터가 필요합니다. |

52| 피드백 제출(`/feedback`) | 피드백을 제출하면 대화 데이터가 Anthropic으로 전송됩니다. |

53 

54이러한 기능은 클라이언트 측 표시에 관계없이 백엔드에서 차단됩니다. 시작 중에 Claude Code 터미널에서 비활성화된 기능이 표시되면 이를 사용하려고 시도하면 조직의 정책이 해당 작업을 허용하지 않음을 나타내는 오류가 반환됩니다.

55 

56향후 기능도 프롬프트 또는 완성을 저장해야 하는 경우 비활성화될 수 있습니다.

57 

58## 정책 위반에 대한 데이터 보존

59 

60ZDR이 활성화된 경우에도 Anthropic은 법률에서 요구하거나 Usage Policy 위반을 해결하기 위해 필요한 경우 데이터를 보존할 수 있습니다. 세션이 정책 위반으로 플래그되면 Anthropic은 관련 입력 및 출력을 최대 2년 동안 보존할 수 있으며, 이는 Anthropic의 표준 ZDR 정책과 일치합니다.

61 

62## ZDR 요청

63 

64Claude for Enterprise의 Claude Code에 대해 ZDR을 요청하려면 [영업팀에 문의](https://www.anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=zero_data_retention_request)하거나 Anthropic 계정 팀에 문의하세요. 계정 팀이 내부적으로 요청을 제출하면 Anthropic이 적격성을 확인한 후 조직에서 ZDR을 검토하고 활성화합니다. 모든 활성화 작업은 감사 로그에 기록됩니다.

65 

66현재 종량제 API 키를 통해 Claude Code에 대해 ZDR을 사용 중인 경우 Claude for Enterprise로 전환하여 Claude Code에 대한 ZDR을 유지하면서 관리 기능에 액세스할 수 있습니다. 마이그레이션을 조정하려면 계정 팀에 문의하세요.