4 4
5# 플러그인 참조5# 플러그인 참조
6 6
7> Claude Code 플러그인 시스템의 완전한 기술 참조, 스키마, CLI 명령어 및 컴포넌트 사양 포함.7> 스키마, CLI 명령어, 컴포넌트 사양을 포함한 Claude Code 플러그인 시스템의 완전한 기술 참조입니다.
8 8
9<Tip>9<Tip>
10 플러그인을 설치하려고 하시나요? [플러그인 발견 및 설치](/docs/ko/discover-plugins)를 참조하세요. 플러그인 생성에 대해서는 [플러그인](/docs/ko/plugins)을 참조하세요. 플러그인 배포에 대해서는 [플러그인 마켓플레이스](/docs/ko/plugin-marketplaces)를 참조하세요.10 플러그인을 설치하려고 하시나요? [플러그인 발견 및 설치](/docs/ko/discover-plugins)를 참조하십시오. 플러그인 생성에 대해서는 [플러그인](/docs/ko/plugins)을 참조하십시오. 플러그인 배포에 대해서는 [플러그인 마켓플레이스](/docs/ko/plugin-marketplaces)를 참조하십시오.
11</Tip>11</Tip>
12 12
13이 참조는 Claude Code 플러그인 시스템의 완전한 기술 사양을 제공하며, 컴포넌트 스키마, CLI 명령어 및 개발 도구를 포함합니다.13**플러그인**은 Claude Code를 사용자 정의 기능으로 확장하는 자체 포함된 컴포넌트 디렉토리입니다. 플러그인 컴포넌트에는 skills, agents, hooks, MCP servers, LSP servers, 및 monitors가 포함됩니다.
14
15**플러그인**은 Claude Code를 사용자 정의 기능으로 확장하는 자체 포함된 컴포넌트 디렉토리입니다. 플러그인 컴포넌트에는 skills, agents, hooks, MCP servers, LSP servers 및 monitors가 포함됩니다.
16 14
17<h2 id="plugin-components-reference">15<h2 id="plugin-components-reference">
18 플러그인 컴포넌트 참조16 플러그인 컴포넌트 참조
19</h2>17</h2>
20 18
21<h3 id="skills">19<h3 id="skills">
22 Skills20 스킬
23</h3>21</h3>
24 22
25플러그인은 Claude Code에 skills를 추가하여 사용자나 Claude가 호출할 수 있는 `/name` 바로가기를 생성합니다.23플러그인은 Claude Code에 스킬을 추가하여 사용자나 Claude가 호출할 수 있는 `/name` 바로가기를 생성합니다.
26 24
27**위치**: 플러그인 루트의 `skills/` 또는 `commands/` 디렉토리, 또는 플러그인 루트의 단일 `SKILL.md` 파일25**위치**: 플러그인 루트의 `skills/` 또는 `commands/` 디렉토리, 또는 플러그인 루트의 단일 `SKILL.md` 파일
28 26
29**파일 형식**: Skills는 `SKILL.md`가 있는 디렉토리이고, commands는 간단한 마크다운 파일입니다.27**파일 형식**: 스킬은 `SKILL.md`가 있는 디렉토리이고, 명령어는 간단한 마크다운 파일입니다.
30 28
31**Skill 구조**:29**스킬 구조**:
32 30
33```text theme={null}31```text theme={null}
34skills/32skills/
40 └── SKILL.md38 └── SKILL.md
41```39```
42 40
43**통합 동작**:41스킬과 명령어는 플러그인이 설치될 때 자동으로 발견됩니다.
44 42
45* Skills와 commands는 플러그인이 설치될 때 자동으로 발견됩니다.43플러그인에 `skills/` 디렉토리가 없고 `skills` 매니페스트 필드가 없으면, 플러그인 루트의 `SKILL.md`가 단일 스킬로 로드됩니다. 프론트매터 `name` 필드를 설정하여 스킬의 호출 이름을 제어합니다. 이 필드가 없으면 Claude Code는 설치 디렉토리 이름으로 폴백되며, 마켓플레이스에서 설치된 플러그인의 경우 매번 업데이트할 때마다 변경되는 버전 문자열입니다. 둘 이상의 스킬을 제공하는 플러그인의 경우 위에 표시된 `skills/` 디렉토리 레이아웃을 사용합니다.
46* Claude는 작업 컨텍스트에 따라 자동으로 이들을 호출할 수 있습니다.
47* Skills는 SKILL.md와 함께 지원 파일을 포함할 수 있습니다.
48 44
49플러그인에 `skills/` 디렉토리가 없고 `skills` manifest 필드가 없으면, 플러그인 루트의 `SKILL.md`가 단일 skill로 로드됩니다. frontmatter `name` 필드를 설정하여 skill의 호출 이름을 제어하세요. 이 필드가 없으면 Claude Code는 설치 디렉토리 이름으로 폴백되며, 마켓플레이스에서 설치된 플러그인의 경우 매 업데이트마다 변경되는 버전 문자열입니다. 둘 이상의 skill을 제공하는 플러그인의 경우 위에 표시된 `skills/` 디렉토리 레이아웃을 사용하세요.45플러그인 스킬과 명령어에서 `disable-model-invocation`과 같은 부울 프론트매터 필드는 `true` 및 `false` 외에도 `yes`, `no`, `on`, `off`, `1`, `0`을 모든 문자 케이스로 허용합니다. v2.1.218 이전에는 Claude Code가 `true`와 `false`만 인식했습니다.
50 46
51완전한 세부 정보는 [Skills](/docs/ko/skills)를 참조하세요.47전체 세부 정보는 [스킬](/docs/ko/skills)을 참조하십시오.
52 48
53<h3 id="agents">49<h3 id="agents">
54 Agents50 에이전트
55</h3>51</h3>
56 52
57플러그인은 Claude가 적절할 때 자동으로 호출할 수 있는 특정 작업을 위한 특화된 subagents를 제공할 수 있습니다.53플러그인은 Claude가 적절할 때 자동으로 호출할 수 있는 특정 작업을 위한 특화된 서브에이전트를 제공할 수 있습니다.
58 54
59**위치**: 플러그인 루트의 `agents/` 디렉토리55**위치**: 플러그인 루트의 `agents/` 디렉토리
60 56
61**파일 형식**: 에이전트 기능을 설명하는 마크다운 파일57**파일 형식**: 에이전트 기능을 설명하는 마크다운 파일
62 58
63**Agent 구조**:59**에이전트 구조**:
64 60
65```markdown theme={null}61```markdown theme={null}
66---62---
67name: agent-name63name: agent-name
68description: 이 에이전트가 전문으로 하는 분야와 Claude가 이를 호출해야 할 때64description: 이 에이전트가 전문으로 하는 분야와 Claude가 언제 호출해야 하는지
69model: sonnet65model: sonnet
70effort: medium66effort: medium
71maxTurns: 2067maxTurns: 20
72disallowedTools: Write, Edit68disallowedTools: Write, Edit
73---69---
74 70
75에이전트의 역할, 전문성 및 동작을 설명하는 상세한 시스템 프롬프트입니다.71에이전트의 역할, 전문성, 동작을 설명하는 상세한 시스템 프롬프트입니다.
76```72```
77 73
78플러그인 agents는 `name`, `description`, `model`, `effort`, `maxTurns`, `tools`, `disallowedTools`, `skills`, `memory`, `background` 및 `isolation` frontmatter 필드를 지원합니다. 유일한 유효한 `isolation` 값은 `"worktree"`입니다. 보안상의 이유로 `hooks`, `mcpServers` 및 `permissionMode`는 플러그인 제공 agents에서 지원되지 않습니다.74플러그인 에이전트는 `name`, `description`, `model`, `effort`, `maxTurns`, `tools`, `disallowedTools`, `skills`, `memory`, `background`, `isolation` 프론트매터 필드를 지원합니다. 유일한 유효한 `isolation` 값은 `"worktree"`입니다. 보안상의 이유로 `hooks`, `mcpServers`, `permissionMode`는 플러그인 제공 에이전트에서 지원되지 않습니다.
75
76Claude Code는 프론트매터에 `name`이 없거나 파싱되지 않는 경우에도 플러그인 에이전트를 로드합니다:
77
78* `name` 없음: Claude Code는 파일 이름으로 에이전트를 명명하므로, `my-plugin`이라는 플러그인의 `agents/reviewer.md`는 `my-plugin:reviewer`로 로드됩니다.
79* 파싱되지 않는 프론트매터: Claude Code는 파일 이름으로 에이전트를 명명하고, 설명으로 `Agent from my-plugin plugin`을 사용하며, 파일의 모든 필드를 무시합니다.
80
81반대로 Claude Code는 프론트매터에 `name`이 없거나 파싱되지 않는 프로젝트, 사용자 또는 관리 에이전트 파일을 건너뜁니다.
82
83프론트매터가 파싱되지 않는 플러그인의 기본 `agents/` 디렉토리에서 파일을 찾으려면 `claude plugin validate`를 실행합니다. 전달하는 경로는 플러그인에 매니페스트가 있는지 여부에 따라 다르며, 두 예제 모두 `./my-plugin`을 플러그인 디렉토리로 사용합니다:
79 84
80**통합 지점**:85* 매니페스트가 있는 플러그인: `claude plugin validate ./my-plugin`
86* 매니페스트가 없는 플러그인: `claude plugin validate ./my-plugin/agents`. Claude Code v2.1.233 이상이 필요합니다.
81 87
82* Agents는 [@-mention 타입어헤드](/docs/ko/sub-agents#invoke-subagents-explicitly)에 `my-plugin:code-reviewer`와 같은 범위가 지정된 이름으로 나타나며, 플러그인이 활성화되면 표시됩니다.88에이전트는 플러그인이 활성화되면 `my-plugin:code-reviewer`와 같은 범위가 지정된 이름으로 [@-mention 자동완성](/docs/ko/sub-agents#invoke-subagents-explicitly)에 나타납니다.
83* Claude는 작업 컨텍스트에 따라 agents를 자동으로 호출할 수 있습니다.
84* Agents는 사용자가 수동으로 호출할 수 있습니다.
85* 플러그인 agents는 기본 제공 Claude agents와 함께 작동합니다.
86 89
87완전한 세부 정보는 [Subagents](/docs/ko/sub-agents)를 참조하세요.90전체 세부 정보는 [서브에이전트](/docs/ko/sub-agents)를 참조하십시오.
88 91
89<h3 id="hooks">92<h3 id="hooks">
90 Hooks93 훅
91</h3>94</h3>
92 95
93플러그인은 Claude Code 이벤트에 자동으로 응답하는 이벤트 핸들러를 제공할 수 있습니다.96플러그인은 Claude Code 이벤트에 자동으로 응답하는 이벤트 핸들러를 제공할 수 있습니다.
94 97
95**위치**: 플러그인 루트의 `hooks/hooks.json` 또는 plugin.json에 인라인98**위치**: 플러그인 루트의 `hooks/hooks.json`, 또는 plugin.json에 인라인
96 99
97**형식**: 이벤트 매처 및 작업이 있는 JSON 구성100**형식**: 이벤트 매처와 작업이 있는 JSON 구성
98 101
99**Hook 구성**:102**훅 구성**:
100 103
101```json theme={null}104```json theme={null}
102{105{
116}119}
117```120```
118 121
119플러그인 hooks는 [사용자 정의 hooks](/docs/ko/hooks)와 동일한 라이프사이클 이벤트에 응답합니다:122플러그인 훅은 [사용자 정의 훅](/docs/ko/hooks)과 동일한 라이프사이클 이벤트에 응답합니다:
120 123
121| Event | When it fires |124| Event | When it fires |
122| :-------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |125| :-------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
154| `ElicitationResult` | After a user responds to an MCP elicitation, before the response is sent back to the server |157| `ElicitationResult` | After a user responds to an MCP elicitation, before the response is sent back to the server |
155| `SessionEnd` | When a session terminates |158| `SessionEnd` | When a session terminates |
156 159
157**Hook 유형**:160**훅 유형**:
158 161
159* `command`: 셸 명령어 또는 스크립트 실행162* `command`: 셸 명령어 또는 스크립트 실행
160* `http`: 이벤트 JSON을 URL로 POST 요청으로 전송163* `http`: 이벤트 JSON을 URL로 POST 요청으로 전송
161* `mcp_tool`: 구성된 [MCP server](/docs/ko/mcp)에서 도구 호출164* `mcp_tool`: 구성된 [MCP 서버](/docs/ko/mcp)에서 도구 호출
162* `prompt`: LLM으로 프롬프트 평가 (컨텍스트에 대해 `$ARGUMENTS` 플레이스홀더 사용)165* `prompt`: LLM으로 프롬프트 평가 (컨텍스트에 `$ARGUMENTS` 플레이스홀더 사용)
163* `agent`: 복잡한 검증 작업을 위해 도구가 있는 에이전트 검증자 실행166* `agent`: 복잡한 검증 작업을 위해 도구가 있는 에이전트 검증자 실행
164 167
165플러그인의 자체 [번들 MCP server](#mcp-servers)를 대상으로 하는 Hooks는 범위가 지정된 이름을 사용해야 합니다. 도구 매처 및 `if` 필드는 범위가 지정된 도구 이름 `mcp__plugin_<plugin-name>_<server-name>__<tool>`을 사용하고, `mcp_tool` hook의 `server` 필드는 `plugin:<plugin-name>:<server-name>`을 사용합니다. 베어 서버 키에 대해 작성된 매처는 절대 실행되지 않습니다. [MCP 도구 매칭](/docs/ko/hooks#match-mcp-tools) 및 [플러그인 제공 MCP servers](/docs/ko/mcp#plugin-provided-mcp-servers)를 참조하세요.168플러그인의 자체 [번들 MCP 서버](#mcp-servers)를 대상으로 하는 훅은 범위가 지정된 이름을 사용해야 합니다. 도구 매처와 `if` 필드는 범위가 지정된 도구 이름 `mcp__plugin_<plugin-name>_<server-name>__<tool>`을 사용하고, `mcp_tool` 훅의 `server` 필드는 `plugin:<plugin-name>:<server-name>`을 사용합니다. 베어 서버 키에 대해 작성된 매처는 절대 실행되지 않습니다. [MCP 도구 일치](/docs/ko/hooks#match-mcp-tools) 및 [플러그인 제공 MCP 서버](/docs/ko/mcp#plugin-provided-mcp-servers)를 참조하십시오.
166 169
167<h3 id="mcp-servers">170<h3 id="mcp-servers">
168 MCP servers171 MCP 서버
169</h3>172</h3>
170 173
171플러그인은 Claude Code를 외부 도구 및 서비스와 연결하기 위해 Model Context Protocol (MCP) servers를 번들로 제공할 수 있습니다.174플러그인은 Claude Code를 외부 도구 및 서비스와 연결하기 위해 Model Context Protocol (MCP) 서버를 번들로 제공할 수 있습니다.
172 175
173**위치**: 플러그인 루트의 `.mcp.json` 또는 plugin.json에 인라인176**위치**: 플러그인 루트의 `.mcp.json`, 또는 plugin.json에 인라인
174 177
175**형식**: 표준 MCP 서버 구성178**형식**: 표준 MCP 서버 구성
176 179
196 199
197**통합 동작**:200**통합 동작**:
198 201
199* 플러그인 MCP servers는 플러그인이 활성화될 때 자동으로 시작됩니다.202* 플러그인 MCP 서버는 플러그인이 활성화될 때 자동으로 시작됩니다.
200* Servers는 Claude의 도구 키트에서 표준 MCP 도구로 나타납니다.203* 서버는 Claude의 도구 키트에 표준 MCP 도구로 나타납니다.
201* 서버 기능은 Claude의 기존 도구와 원활하게 통합됩니다.204* 플러그인 서버는 사용자 MCP 서버와 독립적으로 구성할 수 있습니다.
202* 플러그인 servers는 사용자 MCP servers와 독립적으로 구성할 수 있습니다.205* 세션 중에 [`/reload-plugins`](/docs/ko/discover-plugins#apply-plugin-changes-without-restarting)를 실행하면, Claude Code는 구성이 변경되지 않은 서버의 라이브 연결을 유지합니다.
203 206
204<h3 id="lsp-servers">207<h3 id="lsp-servers">
205 LSP servers208 LSP 서버
206</h3>209</h3>
207 210
208<Tip>211<Tip>
209 LSP 플러그인을 사용하려고 하시나요? 공식 마켓플레이스에서 설치하세요: `/plugin` Discover 탭에서 "lsp"를 검색하세요. 이 섹션은 공식 마켓플레이스에서 다루지 않는 언어에 대해 LSP 플러그인을 만드는 방법을 문서화합니다.212 LSP 플러그인을 사용하려고 하시나요? 공식 마켓플레이스에서 설치하십시오: `/plugin` 발견 탭에서 "lsp"를 검색하십시오. 이 섹션은 공식 마켓플레이스에서 다루지 않는 언어에 대한 LSP 플러그인을 만드는 방법을 설명합니다.
210</Tip>213</Tip>
211 214
212플러그인은 [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) (LSP) servers를 제공하여 코드베이스에서 작업할 때 Claude에게 실시간 코드 인텔리전스를 제공할 수 있습니다.215플러그인은 [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) (LSP) 서버를 제공하여 Claude가 코드베이스에서 작업할 때 [실시간 코드 인텔리전스](/docs/ko/discover-plugins#code-intelligence)를 제공할 수 있습니다.
213 216
214LSP 통합은 다음을 제공합니다:217**위치**: 플러그인 루트의 `.lsp.json`, 또는 `plugin.json`에 인라인
215
216* **즉시 진단**: Claude는 각 편집 후 즉시 오류 및 경고를 봅니다.
217* **코드 네비게이션**: 정의로 이동, 참조 찾기 및 호버 정보
218* **언어 인식**: 코드 기호에 대한 타입 정보 및 문서
219
220**위치**: 플러그인 루트의 `.lsp.json` 또는 `plugin.json`에 인라인
221 218
222**형식**: 언어 서버 이름을 해당 구성에 매핑하는 JSON 구성219**형식**: 언어 서버 이름을 해당 구성에 매핑하는 JSON 구성
223 220
262**선택사항 필드:**259**선택사항 필드:**
263 260
264| 필드 | 설명 |261| 필드 | 설명 |
265| :---------------------- | :------------------------------------------------------------------------------------------ |262| :---------------------- | :------------------------------------------------------------------------------------------------------------------ |
266| `args` | LSP 서버의 명령줄 인수 |263| `args` | LSP 서버의 명령줄 인수 |
267| `transport` | 통신 전송: `stdio` (기본값) 또는 `socket` |264| `transport` | 통신 전송: `stdio` (기본값) 또는 `socket`. Claude Code는 `socket`을 허용하지만 모든 서버를 stdio를 통해 실행하므로 stdout 프로토콜 규칙이 모든 서버에 적용됩니다. |
268| `env` | 서버 시작 시 설정할 환경 변수 |265| `env` | 서버 시작 시 설정할 환경 변수 |
269| `initializationOptions` | 초기화 중에 서버에 전달되는 옵션 |266| `initializationOptions` | 초기화 중에 서버에 전달되는 옵션 |
270| `settings` | `workspace/didChangeConfiguration`을 통해 전달되는 설정 |267| `settings` | `workspace/didChangeConfiguration`을 통해 전달되는 설정 |
271| `workspaceFolder` | 서버의 작업 공간 폴더 경로 |268| `workspaceFolder` | 서버의 작업 공간 폴더 경로 |
272| `startupTimeout` | 서버 시작을 기다릴 최대 시간 (밀리초) |269| `startupTimeout` | 서버 시작을 기다릴 최대 시간 (밀리초) |
273| `shutdownTimeout` | 정상 종료를 기다릴 최대 시간 (밀리초). 시간 초과가 경과하면 Claude Code가 서버 프로세스를 종료합니다. 설정하지 않으면 시간 초과가 적용되지 않습니다. |270| `shutdownTimeout` | 정상 종료를 기다릴 최대 시간 (밀리초). 시간 초과가 경과하면 Claude Code는 서버 프로세스를 종료합니다. 설정하지 않으면 시간 초과가 적용되지 않습니다. |
274| `restartOnCrash` | 서버가 충돌한 후 다시 시작할지 여부. 기본값은 `true`입니다. 충돌한 서버를 다시 시작하지 않고 중지된 상태로 두려면 `false`로 설정하세요. |271| `restartOnCrash` | 서버 충돌 후 다시 시작할지 여부. 기본값은 `true`입니다. 충돌한 서버를 다시 시작하지 않고 중지된 상태로 두려면 `false`로 설정합니다. |
275| `maxRestarts` | 포기하기 전 최대 재시작 시도 횟수 |272| `maxRestarts` | 포기하기 전 최대 재시작 시도 횟수 |
276| `diagnostics` | Claude의 컨텍스트에 진단을 푸시할지 여부 (기본값 `true`). 코드 네비게이션은 유지하되 자동 진단 주입을 억제하려면 `false`로 설정하세요. |273| `diagnostics` | 편집 후 진단을 Claude의 컨텍스트에 푸시할지 여부 (기본값 `true`). 코드 네비게이션은 유지하되 자동 진단 주입을 억제하려면 `false`로 설정합니다. |
274
275`restartOnCrash` 및 `shutdownTimeout`은 Claude Code v2.1.205 이상이 필요합니다. v2.1.205 이전에는 구성 스키마가 두 옵션을 모두 허용했지만 둘 중 하나를 설정하면 Claude Code가 시작 시 해당 LSP 서버를 완전히 건너뛰었으며, 이유는 `claude --debug` 출력에서만 볼 수 있었습니다.
277 276
278`restartOnCrash` 및 `shutdownTimeout`은 Claude Code v2.1.205 이상이 필요합니다. v2.1.205 이전에는 구성 스키마가 두 옵션을 모두 허용했지만 둘 중 하나를 설정하면 Claude Code가 시작 시 해당 LSP 서버를 완전히 건너뛰었으며, 그 이유는 `claude --debug` 출력에서만 볼 수 있었습니다.277**동일한 확장자에 대한 여러 서버**: 둘 이상의 활성화된 LSP 서버가 `extensionToLanguage`에서 동일한 파일 확장자를 선언할 때, 서버가 하나의 플러그인에서 오든 다른 플러그인에서 오든, 먼저 등록된 서버가 해당 확장자의 파일을 처리하고 다른 서버는 시작되지 않습니다. `/plugin` 인터페이스는 활성 서버인 플러그인의 이름을 지정하는 경고를 표시합니다.
279 278
280**동일한 확장자에 대한 여러 서버**: 하나 이상의 활성화된 LSP 서버가 `extensionToLanguage`에서 동일한 파일 확장자를 선언할 때, 서버가 하나의 플러그인에서 오든 다른 플러그인에서 오든, 첫 번째로 등록된 서버가 해당 확장자의 파일을 처리하고 다른 서버는 절대 시작되지 않습니다. `/plugin` 인터페이스는 활성 서버인 플러그인의 이름을 지정하는 경고를 표시합니다.279**초기화에 실패한 서버**: Claude Code는 `command` 또는 `extensionToLanguage`가 누락된 것처럼 구성이 유효하지 않은 서버를 건너뛰고, 다른 구성된 서버는 여전히 시작됩니다. `claude --debug`를 실행하여 서버가 건너뛰어진 이유를 확인합니다.
281 280
282**초기화에 실패한 서버**: Claude Code는 구성이 유효하지 않은 서버 (예: `command` 또는 `extensionToLanguage`가 누락된 서버)를 건너뛰고, 다른 구성된 서버는 여전히 시작됩니다. `claude --debug`를 실행하여 서버가 건너뛴 이유를 확인하세요.281건너뛴 서버는 파일 확장자를 요청하지 않으므로, 동일한 확장자를 선언하는 다른 유효한 서버(같은 플러그인 또는 다른 플러그인에서)가 여전히 해당 파일을 처리합니다.
283 282
284건너뛴 서버는 파일 확장자를 요청하지 않으므로, 동일한 확장자를 선언하는 다른 유효한 서버 (동일한 플러그인 또는 다른 플러그인에서)가 여전히 해당 파일을 처리합니다. v2.1.205 이전에는 초기화에 실패한 서버가 여전히 확장자를 요청했고 동일한 확장자에 대한 다른 유효한 서버를 차단했습니다.283**로그 출력을 stderr로 보내기, stdout이 아님**: Claude Code는 서버의 stdout을 프로토콜 메시지로만 읽고, 메시지 헤더는 최대 64 KiB, 메시지 본문은 최대 32 MiB를 허용합니다. Claude Code는 한계를 초과하거나 stdout에 비프로토콜 출력을 작성하는 서버를 연결 해제하고, 연결 해제를 `restartOnCrash` 및 `maxRestarts`에 대한 충돌로 계산합니다. `--debug`로 실행하면 Claude Code는 원인을 명명하는 오류를 디버그 로그에 작성합니다.
285 284
286<Warning>285<Warning>
287 **언어 서버 바이너리를 별도로 설치해야 합니다.** LSP 플러그인은 Claude Code가 언어 서버에 연결하는 방법을 구성하지만, 서버 자체는 포함하지 않습니다. `/plugin` Errors 탭에서 `Executable not found in $PATH`를 보면 언어에 필요한 바이너리를 설치하세요.286 **언어 서버 바이너리를 별도로 설치해야 합니다.** LSP 플러그인은 Claude Code가 언어 서버에 연결하는 방법을 구성하지만, 서버 자체는 포함하지 않습니다. `/plugin` 오류 탭에서 `Executable not found in $PATH`를 보면, 언어에 필요한 바이너리를 설치합니다.
288</Warning>287</Warning>
289 288
290**사용 가능한 LSP 플러그인:**289**사용 가능한 LSP 플러그인:**
295| `typescript-lsp` | TypeScript Language Server | `npm install -g typescript-language-server typescript` |294| `typescript-lsp` | TypeScript Language Server | `npm install -g typescript-language-server typescript` |
296| `rust-analyzer-lsp` | rust-analyzer | [rust-analyzer 설치 참조](https://rust-analyzer.github.io/manual.html#installation) |295| `rust-analyzer-lsp` | rust-analyzer | [rust-analyzer 설치 참조](https://rust-analyzer.github.io/manual.html#installation) |
297 296
298먼저 언어 서버를 설치한 다음 마켓플레이스에서 플러그인을 설치하세요.297먼저 언어 서버를 설치한 다음 마켓플레이스에서 플러그인을 설치합니다.
299 298
300<h3 id="monitors">299<h3 id="monitors">
301 Monitors300 모니터
302</h3>301</h3>
303 302
304플러그인은 플러그인이 활성화될 때 Claude Code가 자동으로 시작하는 백그라운드 monitors를 선언할 수 있습니다. 각 monitor는 세션 동안 셸 명령어를 실행하고 모든 stdout 라인을 Claude에게 알림으로 전달하므로 Claude는 로그 항목, 상태 변경 또는 폴링된 이벤트에 반응할 수 있으며 자신이 watch를 시작하도록 요청받을 필요가 없습니다.303플러그인은 Claude Code가 플러그인이 활성화될 때 자동으로 시작하는 백그라운드 모니터를 선언할 수 있습니다. 각 모니터는 세션 동안 셸 명령어를 실행하고 모든 stdout 라인을 Claude에 알림으로 전달하므로, Claude는 자신이 시작하도록 요청받지 않고도 로그 항목, 상태 변경 또는 폴링된 이벤트에 반응할 수 있습니다.
305 304
306플러그인 monitors는 [Monitor tool](/docs/ko/tools-reference#monitor-tool)과 동일한 메커니즘을 사용하며 해당 가용성 제약을 공유합니다. 이들은 대화형 CLI 세션에서만 실행되고, [hooks](#hooks)와 동일한 신뢰 수준에서 샌드박스 없이 실행되며, Monitor tool을 사용할 수 없는 호스트에서는 건너뜁니다.305플러그인 모니터는 [모니터 도구](/docs/ko/tools-reference#monitor-tool)와 동일한 메커니즘을 사용하고 가용성 제약을 공유합니다. 이들은 대화형 CLI 세션에서만 실행되고, [훅](#hooks)과 동일한 신뢰 수준에서 샌드박스 없이 실행되며, 모니터 도구를 사용할 수 없는 호스트에서는 건너뜁니다.
307 306
308**위치**: 플러그인 루트의 `monitors/monitors.json` 또는 plugin.json에 인라인307**위치**: 플러그인 루트의 `monitors/monitors.json`, 또는 plugin.json에 인라인
309 308
310**형식**: monitor 항목의 JSON 배열309**형식**: 모니터 항목의 JSON 배열
311 310
312다음 `monitors/monitors.json`은 배포 상태 엔드포인트와 로컬 오류 로그를 감시합니다:311다음 `monitors/monitors.json`은 배포 상태 엔드포인트와 로컬 오류 로그를 감시합니다:
313 312
327]326]
328```327```
329 328
330monitors를 인라인으로 선언하려면 `plugin.json`의 `experimental.monitors`를 동일한 배열로 설정하세요. 기본이 아닌 경로에서 로드하려면 `experimental.monitors`를 `"./config/monitors.json"`과 같은 상대 경로 문자열로 설정하세요. Monitors는 [실험적 컴포넌트](#experimental-components)입니다.329모니터를 인라인으로 선언하려면 `plugin.json`에서 `experimental.monitors`를 동일한 배열로 설정합니다. 기본이 아닌 경로에서 로드하려면 `experimental.monitors`를 `"./config/monitors.json"`과 같은 상대 경로 문자열로 설정합니다. 모니터는 [실험적 컴포넌트](#experimental-components)입니다.
331 330
332**필수 필드:**331**필수 필드:**
333 332
334| 필드 | 설명 |333| 필드 | 설명 |
335| :------------ | :--------------------------------------------------------------- |334| :------------ | :------------------------------------------------------------ |
336| `name` | 플러그인 내에서 고유한 식별자. 플러그인이 다시 로드되거나 skill이 다시 호출될 때 중복 프로세스를 방지합니다. |335| `name` | 플러그인 내에서 고유한 식별자. 플러그인이 다시 로드되거나 스킬이 다시 호출될 때 중복 프로세스를 방지합니다. |
337| `command` | 세션 작업 디렉토리에서 영구 백그라운드 프로세스로 실행되는 셸 명령어 |336| `command` | 세션 작업 디렉토리에서 지속적인 백그라운드 프로세스로 실행되는 셸 명령어 |
338| `description` | 감시 중인 항목에 대한 간단한 요약. 작업 패널 및 알림 요약에 표시됩니다. |337| `description` | 감시 중인 항목의 간단한 요약. 작업 패널 및 알림 요약에 표시됩니다. |
339 338
340**선택사항 필드:**339**선택사항 필드:**
341 340
342| 필드 | 설명 |341| 필드 | 설명 |
343| :----- | :------------------------------------------------------------------------------------------------------------------------------------------ |342| :----- | :----------------------------------------------------------------------------------------------------------------------------------- |
344| `when` | monitor가 시작되는 시기를 제어합니다. `"always"`는 세션 시작 및 플러그인 다시 로드 시 시작하며 기본값입니다. `"on-skill-invoke:<skill-name>"`은 이 플러그인의 명명된 skill이 처음 발송될 때 시작합니다. |343| `when` | 모니터가 시작될 때를 제어합니다. `"always"`는 세션 시작 및 플러그인 다시 로드 시 시작하며 기본값입니다. `"on-skill-invoke:<skill-name>"`은 이 플러그인의 명명된 스킬이 처음 디스패치될 때 시작합니다. |
345 344
346`command` 값은 [경로 대체](#environment-variables) `${CLAUDE_PLUGIN_ROOT}`, `${CLAUDE_PLUGIN_DATA}`, `${CLAUDE_PROJECT_DIR}` 및 환경의 모든 `${ENV_VAR}`을 지원합니다. 스크립트가 플러그인 자체 디렉토리에서 실행되어야 하는 경우 명령어 앞에 `cd "${CLAUDE_PLUGIN_ROOT}" && `를 붙이세요.345`command` 값은 [경로 대체](#environment-variables) `${CLAUDE_PLUGIN_ROOT}`, `${CLAUDE_PLUGIN_DATA}`, `${CLAUDE_PROJECT_DIR}` 및 환경의 모든 `${ENV_VAR}`을 지원합니다. 스크립트가 플러그인의 자체 디렉토리에서 실행되어야 하면 명령어 앞에 `cd "${CLAUDE_PLUGIN_ROOT}" && `를 붙입니다.
347 346
348monitor `command`는 [`${user_config.*}`](#user-configuration) 값을 참조할 수 없습니다. 명령어는 셸을 통해 실행되므로 Claude Code는 값을 대체하는 대신 [오류](/docs/ko/errors#plugin-command-references-user-config)로 monitor를 거부합니다. Monitor 프로세스는 `CLAUDE_PLUGIN_OPTION_<KEY>` 환경 변수를 받지 않으므로 monitor 스크립트가 자신이 소유한 구성 파일에서 값을 읽도록 하세요. v2.1.207 이전에는 monitor 명령어가 `${user_config.*}` 값을 대체했습니다.347모니터 `command`는 [`${user_config.*}`](#user-configuration) 값을 참조할 수 없습니다. 명령어는 셸을 통해 실행되므로 Claude Code는 값을 대체하는 대신 [오류](/docs/ko/errors#plugin-command-references-user-config)로 모니터를 거부합니다. 모니터 프로세스는 `CLAUDE_PLUGIN_OPTION_<KEY>` 환경 변수를 받지 않으므로, 모니터 스크립트가 자신이 소유한 구성 파일에서 값을 읽도록 합니다.
349 348
350세션 중간에 플러그인을 비활성화해도 이미 실행 중인 monitors는 중지되지 않습니다. 세션이 끝날 때 중지됩니다.349세션 중에 플러그인을 비활성화하면, Claude Code는 이미 실행 중인 모니터를 중지하지 않습니다. 세션이 끝날 때 중지됩니다.
351 350
352<h3 id="themes">351<h3 id="themes">
353 Themes352 테마
354</h3>353</h3>
355 354
356플러그인은 `/theme`에 기본 제공 프리셋 및 사용자의 로컬 테마와 함께 나타나는 색상 테마를 제공할 수 있습니다. 테마는 `themes/` 디렉토리의 JSON 파일로, `base` 프리셋과 색상 토큰의 sparse `overrides` 맵을 포함합니다. Themes는 [실험적 컴포넌트](#experimental-components)입니다.355플러그인은 `/theme`에 기본 제공 사전 설정 및 사용자의 로컬 테마와 함께 나타나는 색상 테마를 제공할 수 있습니다. 테마는 `themes/` 디렉토리의 JSON 파일로, `base` 사전 설정과 색상 토큰의 스파스 `overrides` 맵이 있습니다. 테마는 [실험적 컴포넌트](#experimental-components)입니다.
357 356
358```json theme={null}357```json theme={null}
359{358{
367}366}
368```367```
369 368
370플러그인 테마를 선택하면 사용자의 구성에 `custom:<plugin-name>:<slug>`이 유지됩니다. 플러그인 테마는 읽기 전용입니다. `/theme`에서 하나에 `Ctrl+E`를 누르면 `~/.claude/themes/`로 복사되어 사용자가 복사본을 편집할 수 있습니다.369사용자가 플러그인 테마를 선택하면, Claude Code는 `custom:<plugin-name>:<slug>`을 해당 구성에 저장합니다. 플러그인 테마는 읽기 전용입니다: 사용자가 `/theme`에서 하나를 `Ctrl+E`로 누르면, Claude Code는 이를 `~/.claude/themes/`로 복사하여 사용자가 복사본을 편집할 수 있도록 합니다.
371 370
372***371***
373 372
375 플러그인 설치 범위374 플러그인 설치 범위
376</h2>375</h2>
377 376
378플러그인을 설치할 때 플러그인이 사용 가능한 위치와 다른 사람이 사용할 수 있는지를 결정하는 **범위**를 선택합니다:377플러그인을 설치할 때 플러그인이 사용 가능한 위치와 다른 사용자가 사용할 수 있는지를 결정하는 **범위**를 선택합니다:
379 378
380| 범위 | 설정 파일 | 사용 사례 |379| 범위 | 설정 파일 | 사용 사례 |
381| :-------- | :------------------------------------- | :----------------------------- |380| :-------- | :------------------------------ | :--------------------------------------------- |
382| `user` | `~/.claude/settings.json` | 모든 프로젝트에서 사용 가능한 개인 플러그인 (기본값) |381| `user` | `~/.claude/settings.json` | 모든 프로젝트에서 사용 가능한 개인 플러그인(기본값) |
383| `project` | `.claude/settings.json` | 버전 제어를 통해 공유되는 팀 플러그인 |382| `project` | `.claude/settings.json` | 버전 관리를 통해 공유되는 팀 플러그인 |
384| `local` | `.claude/settings.local.json` | 프로젝트별 플러그인, gitignored |383| `local` | `.claude/settings.local.json` | 프로젝트별 플러그인, Claude Code가 설정을 저장할 때 gitignored됨 |
385| `managed` | [관리되는 설정](/docs/ko/settings#settings-files) | 관리되는 플러그인 (읽기 전용, 업데이트만 가능) |384| `managed` | [관리되는 설정](/docs/ko/managed-settings) | 관리되는 플러그인(읽기 전용, 업데이트만 가능) |
386 385
387플러그인은 다른 Claude Code 구성과 동일한 범위 시스템을 사용합니다. 설치 지침 및 범위 플래그는 [플러그인 설치](/docs/ko/discover-plugins#install-plugins)를 참조하세요. 범위에 대한 완전한 설명은 [구성 범위](/docs/ko/settings#configuration-scopes)를 참조하세요.386플러그인은 다른 Claude Code 구성과 동일한 범위 시스템을 사용합니다. 설치 지침 및 범위 플래그는 [플러그인 설치](/docs/ko/discover-plugins#install-plugins)를 참조하십시오. 범위에 대한 완전한 설명은 [구성 범위](/docs/ko/settings#where-settings-live)를 참조하십시오.
388 387
389***388***
390 389
391<h2 id="skills-directory-plugins">390<h2 id="skills-directory-plugins">
392 Skills-directory 플러그인391 스킬 디렉토리 플러그인
393</h2>392</h2>
394 393
395skills 디렉토리 아래의 모든 폴더가 `.claude-plugin/plugin.json` 매니페스트를 포함하면 다음 세션에서 `<name>@skills-dir`이라는 플러그인으로 로드되며, 마켓플레이스나 설치 단계가 없습니다. [`plugin init`](#plugin-init)으로 스캐폴드하세요. 마켓플레이스 설치와 달리 플러그인은 플러그인 캐시에 복사되지 않고 제자리에서 발견됩니다.394스킬 디렉토리 아래의 모든 폴더가 `.claude-plugin/plugin.json` 매니페스트를 포함하면 다음 세션에서 `<name>@skills-dir`이라는 이름의 플러그인으로 로드되며, 마켓플레이스나 설치 단계가 없습니다. [`plugin init`](#plugin-init)으로 스캐폴드를 생성할 수 있습니다. 복사된 마켓플레이스 설치와 달리, 플러그인은 플러그인 캐시로 복사되지 않고 제자리에서 발견됩니다.
396 395
397skills 디렉토리 트리는 세 가지 서로 다른 것을 지원합니다:396스킬 디렉토리 트리는 세 가지 서로 다른 것을 지원합니다:
398 397
399| 무엇을 가지고 있는지 | 무엇인지 |398| 보유한 것 | 설명 |
400| :-------------------------------------------- | :------------------------------------------------------------------- |399| :-------------------------------------------- | :--------------------------------------------------- |
401| 매니페스트가 없는 `<skills-dir>/foo/SKILL.md` | `foo`라는 일반 [skill](/docs/ko/skills) |400| 매니페스트가 없는 `<skills-dir>/foo/SKILL.md` | `foo`라는 이름의 일반 [스킬](/docs/ko/skills) |
402| `<skills-dir>/foo/.claude-plugin/plugin.json` | `foo@skills-dir` 플러그인으로, 자체 skills, agents, hooks 등을 번들로 제공할 수 있습니다. |401| `<skills-dir>/foo/.claude-plugin/plugin.json` | 자체 스킬, 에이전트, 훅 등을 번들로 제공할 수 있는 플러그인 `foo@skills-dir` |
403| `<plugin>/skills/bar/SKILL.md` | 플러그인 내에 패키지된 `bar` skill |402| `<plugin>/skills/bar/SKILL.md` | 플러그인 내에 패키징된 스킬 `bar` |
404 403
405<h3 id="choose-where-the-plugin-loads-from">404<h3 id="choose-where-the-plugin-loads-from">
406 플러그인이 로드되는 위치 선택405 플러그인이 로드되는 위치 선택
407</h3>406</h3>
408 407
409| Skills 디렉토리 | 범위 | 로드 |408| 스킬 디렉토리 | 범위 | 로드 |
410| :---------------------- | :------- | :--------------------------------------------- |409| :---------------------- | :--- | :------------------------------------------------------------------------------------------ |
411| `~/.claude/skills/` | personal | 위치가 당신의 것이므로 모든 프로젝트에서 |410| `~/.claude/skills/` | 개인 | 위치가 사용자 것이므로 모든 프로젝트에서 로드 |
412| `<cwd>/.claude/skills/` | project | 해당 폴더에 대한 작업 공간 [신뢰 대화](/docs/ko/settings)를 수락한 후에만 |411| `<cwd>/.claude/skills/` | 프로젝트 | 해당 폴더에 대한 워크스페이스 [신뢰 대화상자](/docs/ko/permissions#what-runs-before-you-trust-a-folder)를 수락한 후에만 로드 |
413 412
414프로젝트 범위 플러그인은 저장소에 체크인되고 복제하는 모든 협력자에게 도달합니다. 해당 콘텐츠는 저장소에서 오므로 `.claude/settings.json`을 관리하는 것과 동일한 신뢰 게이트 후에만 로드되며, 코드를 실행하는 컴포넌트는 추가로 제한됩니다:413프로젝트 범위 플러그인은 저장소에 체크인되며 이를 복제하는 모든 협력자에게 도달합니다. 해당 콘텐츠가 사용자가 아닌 저장소에서 오기 때문에, `.claude/settings.json`의 프로젝트 허용 규칙을 관리하는 것과 동일한 신뢰 게이트 이후에만 로드되므로, 상위 폴더를 신뢰하거나 `-p`로 실행하는 것만으로는 충분하지 않으며, 코드를 실행하는 구성 요소는 추가로 제한됩니다:
415 414
416* 선언하는 MCP servers는 프로젝트 `.mcp.json`과 동일한 [서버별 승인](/docs/ko/mcp)을 거칩니다.415* 선언하는 MCP 서버는 프로젝트 `.mcp.json`과 동일한 [서버별 승인](/docs/ko/mcp)을 거칩니다
417* LSP servers는 작업 공간을 신뢰한 후에만 시작됩니다.416* LSP 서버는 워크스페이스를 신뢰한 후에만 시작됩니다
418* [백그라운드 monitors](#monitors)는 로드되지 않습니다.417* [백그라운드 모니터](#monitors)는 로드되지 않습니다
419 418
420개인 범위 플러그인에는 이러한 제한이 없습니다.419개인 범위 플러그인에는 이러한 제한이 없습니다.
421 420
422<Warning>421<Warning>
423 프로젝트 범위 `@skills-dir` 플러그인은 Claude Code를 시작하는 디렉토리의 `.claude/skills/`에서만 로드됩니다. 일반 skills 및 commands가 하는 것처럼 [저장소 루트로 이동](/docs/ko/skills#automatic-discovery-from-parent-and-nested-directories)하지 않으므로 서브디렉토리에서 시작하면 저장소 루트에 있는 플러그인을 놓칩니다. 저장소 루트에서 시작하거나 디렉토리를 변경한 후 `/reload-plugins`를 실행하세요.422 프로젝트 범위 `@skills-dir` 플러그인은 세션의 [기본 작업 디렉토리](/docs/ko/permissions#working-directories)의 `.claude/skills/`에서만 로드됩니다. 일반 스킬 및 명령처럼 [저장소 루트까지 올라가지](/docs/ko/skills#discovery-from-parent-and-nested-directories) 않으므로, 하위 디렉토리에서 시작하면 저장소 루트에 있는 플러그인을 놓칩니다. 저장소 루트에서 시작하거나, [v2.1.246 이상에서 `/cd`로 세션을 이동](/docs/ko/permissions#move-the-session-to-another-directory)하십시오.
424</Warning>423</Warning>
425 424
426<h3 id="edit-reload-and-disable-a-skills-directory-plugin">425<h3 id="edit-reload-and-disable-a-skills-directory-plugin">
427 Skills-directory 플러그인 편집, 다시 로드 및 비활성화426 스킬 디렉토리 플러그인 편집, 다시 로드 및 비활성화
428</h3>427</h3>
429 428
430skill의 `SKILL.md`에 대한 변경 사항은 현재 세션에서 즉시 적용됩니다. `hooks/`, `.mcp.json`, `agents/` 및 `output-styles/`와 같은 플러그인의 다른 컴포넌트에 대한 변경 사항은 그렇지 않습니다. `/reload-plugins`를 실행하거나 Claude Code를 다시 시작하여 이들을 선택하세요. [라이브 변경 감지](/docs/ko/skills#live-change-detection)를 참조하세요.429스킬의 `SKILL.md`에 대한 변경 사항은 현재 세션에서 즉시 적용됩니다. `hooks/`, `.mcp.json`, `agents/`, `output-styles/` 등 플러그인의 다른 구성 요소에 대한 변경 사항은 적용되지 않습니다. `/reload-plugins`를 실행하거나 Claude Code를 다시 시작하여 이를 적용하십시오. [라이브 변경 감지](/docs/ko/skills#live-change-detection)를 참조하십시오.
431 430
432skills-directory 플러그인 로드를 중지하려면 해당 폴더를 삭제하거나 이름으로 비활성화하세요. 마켓플레이스에서 아무것도 설치되지 않았으므로 `uninstall` 단계가 없습니다.431스킬 디렉토리 플러그인 로드를 중지하려면 해당 폴더를 삭제하거나 이름으로 비활성화하십시오. 마켓플레이스에서 아무것도 설치되지 않았으므로 `uninstall` 단계가 없습니다.
433 432
434```bash theme={null}433```bash theme={null}
435claude plugin disable my-tool@skills-dir434claude plugin disable my-tool@skills-dir
437 436
438***437***
439 438
439<h2 id="synced-plugins">
440 claude.ai에서 동기화된 플러그인
441</h2>
442
443[Cowork](https://claude.com/product/cowork) 및 [클라우드 세션](/docs/ko/cloud-environments#what-carries-over-from-your-setup)에서 Claude Code는 claude.ai 계정에 대해 활성화된 플러그인을 세션의 자체 환경에 있는 `~/.claude/plugins/synced/`로 다운로드하고 각 플러그인을 `<name>@synced`로 로드합니다. 마켓플레이스 및 설치 기록이 없습니다. Claude Code는 자신의 터미널에서 시작하는 세션에서는 이러한 플러그인을 로드하지 않습니다. 해당 Cowork 또는 클라우드 환경 내에서 `claude plugin list`는 다운로드된 복사본을 `Synced from claude.ai` 제목 아래에 표시합니다. v2.1.239 이전에는 Claude Code가 이러한 플러그인을 `<name>@inline`으로 로드했으며, 이는 `--plugin-dir` 플러그인이 사용하는 ID입니다.
444
445`claude plugin list`가 출력하는 `<name>@synced` ID로 동기화된 플러그인을 관리합니다:
446
447* **하나 끄기**: 동기화된 세션에서 `claude plugin disable <name>@synced`를 실행하거나 Claude에 실행하도록 요청합니다. Claude Code는 선택을 해당 환경의 사용자 수준 [`enabledPlugins`](/docs/ko/settings-reference#enabledplugins)에 `"<name>@synced": false`로 저장합니다. 플러그인을 다시 켜려면 같은 세션에서 `claude plugin enable <name>@synced`를 실행합니다. 모든 동기화된 세션에서 플러그인을 제외하려면 [claude.ai 계정에서 플러그인을 끕니다](/docs/ko/desktop#extend-claude-code). 모든 환경에서 하나의 프로젝트의 동기화된 세션에서 플러그인을 제외하려면 해당 프로젝트의 커밋된 `.claude/settings.json`의 `enabledPlugins` 아래에 `"<name>@synced": false`를 설정합니다.
448* **claude.ai에서 플러그인 자체 관리**: `claude plugin install`, `update`, `uninstall`은 동기화된 플러그인에 적용되지 않습니다. 플러그인을 제거하려면 claude.ai 계정에서 플러그인을 끕니다. 다음 동기화된 세션은 플러그인 없이 시작됩니다.
449
450마켓플레이스 설치, [skills-directory 플러그인](#skills-directory-plugins) 또는 `--plugin-dir` 플러그인과 같은 다른 소스의 활성화된 플러그인이 동기화된 플러그인의 이름과 일치하면 Claude Code는 해당 플러그인을 로드하고 동기화된 복사본을 로드되지 않은 것으로 보고합니다. claude.ai 복사본을 대신 사용하려면 자신의 복사본을 비활성화합니다. v2.1.239 이전에는 Claude Code가 같은 이름의 마켓플레이스 설치 대신 동기화된 복사본을 로드했습니다.
451
452***
453
440<h2 id="plugin-manifest-schema">454<h2 id="plugin-manifest-schema">
441 플러그인 매니페스트 스키마455 플러그인 매니페스트 스키마
442</h2>456</h2>
443 457
444`.claude-plugin/plugin.json` 파일은 플러그인의 메타데이터 및 구성을 정의합니다. 이 섹션은 지원되는 모든 필드 및 옵션을 문서화합니다.458`.claude-plugin/plugin.json` 파일은 플러그인의 메타데이터와 구성을 정의합니다.
445 459
446매니페스트는 선택사항입니다. 생략하면 Claude Code는 [기본 위치](#file-locations-reference)에서 컴포넌트를 자동으로 발견하고 디렉토리 이름에서 플러그인 이름을 파생합니다. 메타데이터를 제공하거나 사용자 정의 컴포넌트 경로가 필요할 때 매니페스트를 사용하세요.460매니페스트는 선택 사항입니다. 생략하면 Claude Code는 [기본 위치](#file-locations-reference)에서 구성 요소를 자동으로 검색하고 디렉터리 이름에서 플러그인 이름을 파생합니다. 메타데이터를 제공하거나 사용자 정의 구성 요소 경로가 필요한 경우 매니페스트를 사용합니다.
447 461
448<h3 id="complete-schema">462<h3 id="complete-schema">
449 완전한 스키마463 완전한 스키마
464 "repository": "https://github.com/author/plugin",478 "repository": "https://github.com/author/plugin",
465 "license": "MIT",479 "license": "MIT",
466 "keywords": ["keyword1", "keyword2"],480 "keywords": ["keyword1", "keyword2"],
481 "metadata": { "catalogId": "cat-123", "tier": "pro" },
467 "skills": "./custom/skills/",482 "skills": "./custom/skills/",
468 "commands": ["./custom/commands/special.md"],483 "commands": ["./custom/commands/special.md"],
469 "agents": ["./custom/agents/reviewer.md"],484 "agents": ["./custom/agents/reviewer.md"],
488 503
489매니페스트를 포함하는 경우 `name`이 유일한 필수 필드입니다.504매니페스트를 포함하는 경우 `name`이 유일한 필수 필드입니다.
490 505
491| 필드 | 타입 | 설명 | 예시 |506| 필드 | 유형 | 설명 | 예시 |
492| :----- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------- |507| :----- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------- |
493| `name` | string | 고유 식별자 (kebab-case, 공백 없음). [마켓플레이스 항목](/docs/ko/plugin-marketplaces#plugin-entries)이 플러그인을 다른 이름으로 나열할 때 마켓플레이스 항목 이름이 `enabledPlugins` 키 및 `/plugin`이 사용하는 것입니다. | `"deployment-tools"` |508| `name` | string | 공백, 제어 문자 또는 양방향 형식 문자가 없는 케밥 케이스의 고유 식별자입니다. [마켓플레이스 항목](/docs/ko/plugin-marketplaces#plugin-entries)이 플러그인을 다른 이름으로 나열할 때 마켓플레이스 항목 이름이 `enabledPlugins` 키와 `/plugin`에서 사용하는 이름입니다 | `"deployment-tools"` |
494 509
495이 이름은 컴포넌트 네임스페이싱에 사용됩니다. 예를 들어 UI에서 이름이 `plugin-dev`인 플러그인의 agent `agent-creator`는 `plugin-dev:agent-creator`로 나타납니다.510이 이름은 구성 요소 네임스페이싱에 사용됩니다. 예를 들어 UI에서 이름이 `plugin-dev`인 플러그인의 에이전트 `agent-creator`는 `plugin-dev:agent-creator`로 표시됩니다.
496 511
497<h3 id="unrecognized-fields">512<h3 id="unrecognized-fields">
498 인식되지 않은 필드513 인식되지 않는 필드
499</h3>514</h3>
500 515
501Claude Code는 인식하지 못하는 최상위 필드를 무시합니다. 다른 생태계의 메타데이터를 `plugin.json`에 유지할 수 있으며 플러그인은 여전히 로드됩니다. 이를 통해 VS Code 또는 Cursor 확장 매니페스트, npm `package.json` 또는 MCPB/DXT 번들 매니페스트로도 작동하는 하나의 매니페스트를 유지하는 것이 실용적입니다.516Claude Code는 인식하지 못하는 최상위 필드를 무시합니다. 다른 에코시스템의 메타데이터를 `plugin.json`에 유지할 수 있으며 플러그인은 여전히 로드됩니다. 이를 통해 VS Code 또는 Cursor 확장 매니페스트, npm `package.json` 또는 MCPB/DXT 번들 매니페스트로도 작동하는 하나의 매니페스트를 유지하는 것이 실용적입니다.
517
518`claude plugin validate`는 인식되지 않는 필드를 오류가 아닌 경고로 보고합니다. 필드가 인식된 필드와 한두 글자 차이나면 경고에서 의도된 이름을 제안합니다. 인식되지 않는 필드 경고만 있는 플러그인은 여전히 검증을 통과하고 런타임에 로드됩니다.
502 519
503`claude plugin validate`는 인식되지 않은 필드를 오류가 아닌 경고로 보고합니다. 필드가 인식된 필드와 한두 글자 차이나면 경고는 의도된 이름을 제안합니다. 인식되지 않은 필드 경고만 있는 플러그인은 여전히 검증을 통과하고 런타임에 로드됩니다.520Claude Code가 값의 유형이 잘못된 인식된 필드를 처리하는 방식은 필드에 따라 다릅니다.
504 521
505잘못된 타입의 필드는 여전히 실패합니다. 예를 들어 `keywords` 값이 배열 대신 문자열인 경우 로드 오류이며 `claude plugin validate`는 이를 오류로 보고합니다.522* **대부분의 필드**: 플러그인이 로드되지 않습니다. 예를 들어 `keywords` 값이 배열 대신 문자열인 경우 로드 오류이며 `claude plugin validate`는 이를 오류로 보고합니다.
523* **`experimental` 및 `metadata`**: Claude Code는 비객체 값을 무시하고 `claude plugin validate`는 경고를 보고합니다.
506 524
507`--strict`를 전달하여 경고를 오류로 취급합니다. CI에서 이를 사용하여 플러그인이 런타임에 로드되더라도 게시하기 전에 오타가 난 필드 이름이나 다른 도구의 매니페스트에서 남겨진 필드를 포착합니다.525`--strict`를 전달하여 경고를 오류로 처리합니다. CI에서 이를 사용하여 게시하기 전에 필드 이름 오타나 다른 도구의 매니페스트에서 남은 필드를 포착합니다. 플러그인은 런타임에 로드되지만 말입니다.
508 526
509```bash theme={null}527```bash theme={null}
510claude plugin validate ./my-plugin --strict528claude plugin validate ./my-plugin --strict
514 메타데이터 필드532 메타데이터 필드
515</h3>533</h3>
516 534
517| 필드 | 타입 | 설명 | 예시 |535| 필드 | 유형 | 설명 | 예시 |
518| :--------------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------------------------------- |536| :--------------- | :------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------- |
519| `$schema` | string | 편집기 자동 완성 및 검증을 위한 JSON Schema URL. Claude Code는 로드 시 이 필드를 무시합니다. | `"https://json.schemastore.org/claude-code-plugin-manifest.json"` |537| `$schema` | string | 편집기 자동 완성 및 검증을 위한 JSON Schema URL입니다. Claude Code는 로드 시간에 이 필드를 무시합니다. | `"https://json.schemastore.org/claude-code-plugin-manifest.json"` |
520| `displayName` | string | `/plugin` 선택기 및 기타 UI 표면에 표시되는 사람이 읽을 수 있는 이름입니다. 생략하면 `name`으로 폴백됩니다. `name`과 달리 공백과 모든 대소문자를 포함할 수 있습니다. 네임스페이싱 또는 조회에 사용되지 않습니다. Claude Code v2.1.143 이상이 필요합니다. | `"Deployment Tools"` |538| `displayName` | string | `/plugin` 선택기 및 기타 UI 표면에 표시되는 사람이 읽을 수 있는 이름입니다. 생략하면 `name`으로 폴백됩니다. `name`과 달리 공백과 모든 대소문자를 포함할 수 있습니다. 네임스페이싱이나 조회에 사용되지 않습니다. | `"Deployment Tools"` |
521| `version` | string | 선택사항. 의미 있는 버전입니다. 이를 설정하면 플러그인이 해당 버전 문자열로 고정되므로 사용자는 버전을 올릴 때만 업데이트를 받습니다. 생략하면 Claude Code는 git 커밋 SHA로 폴백되므로 모든 커밋이 새 버전으로 취급됩니다. 마켓플레이스 항목에도 설정된 경우 `plugin.json`이 우선합니다. [버전 관리](#version-management)를 참조하세요. | `"2.1.0"` |539| `version` | string | 선택 사항입니다. 의미 있는 버전입니다. 이를 설정하면 플러그인이 해당 버전 문자열로 고정되므로 사용자는 이를 범프할 때만 업데이트를 받습니다. [`command` 소스](/docs/ko/plugin-marketplaces#command-sources) 제외; [버전 관리](#version-management)를 참조합니다. 마켓플레이스 항목에도 설정된 경우 `plugin.json`이 우선합니다. 생략하면 버전은 [버전 관리](#version-management)의 다음 소스에서 옵니다. | `"2.1.0"` |
522| `description` | string | 플러그인 목적에 대한 간단한 설명 | `"배포 자동화 도구"` |540| `description` | string | 플러그인 목적에 대한 간단한 설명 | `"Deployment automation tools"` |
523| `author` | object | 작성자 정보 | `{"name": "Dev Team", "email": "dev@company.com"}` |541| `author` | object | 작성자 정보 | `{"name": "Dev Team", "email": "dev@company.com"}` |
524| `homepage` | string | 문서 URL | `"https://docs.example.com"` |542| `homepage` | string | 문서 URL | `"https://docs.example.com"` |
525| `repository` | string | 소스 코드 URL | `"https://github.com/user/plugin"` |543| `repository` | string | 소스 코드 URL | `"https://github.com/user/plugin"` |
526| `license` | string | 라이선스 식별자 | `"MIT"`, `"Apache-2.0"` |544| `license` | string | 라이선스 식별자 | `"MIT"`, `"Apache-2.0"` |
527| `keywords` | array | 발견 태그 | `["deployment", "ci-cd"]` |545| `keywords` | array | 검색 태그 | `["deployment", "ci-cd"]` |
528| `defaultEnabled` | boolean | 사용자가 설정하지 않았을 때 플러그인이 활성화된 상태로 시작할지 여부입니다. 기본값은 `true`입니다. [기본 활성화](#default-enablement)를 참조하세요. Claude Code v2.1.154 이상이 필요합니다. | `false` |546| `metadata` | object | 자격 또는 카탈로그 필드와 같은 자신의 데이터를 위한 자유 형식 객체입니다. Claude Code는 이를 읽지 않으므로 값이 플러그인 동작에 영향을 주지 않습니다. Claude Code는 비객체 값을 무시하고 `claude plugin validate`는 이를 경고로 보고합니다. v2.1.222 이전에는 Claude Code가 키를 [인식되지 않는 필드](#unrecognized-fields)로 처리했습니다. | `{"catalogId": "cat-123"}` |
547| `defaultEnabled` | boolean | 사용자가 설정하지 않았을 때 플러그인이 활성화된 상태로 시작되는지 여부입니다. 기본값은 `true`입니다. [기본 활성화](#default-enablement)를 참조합니다. | `false` |
529 548
530<h3 id="default-enablement">549<h3 id="default-enablement">
531 기본 활성화550 기본 활성화
532</h3>551</h3>
533 552
534`plugin.json`에서 `defaultEnabled: false`를 설정하여 비활성화된 상태로 설치되는 플러그인을 제공하세요. 사용자는 `claude plugin enable <plugin>` 또는 `/plugin` 인터페이스로 켭니다. 외부 서비스에 연결하는 플러그인과 같이 사용자가 옵트인해야 하는 비용이나 범위를 추가하는 플러그인에 사용하세요. 이는 Claude Code v2.1.154 이상이 필요합니다. 이전 버전은 필드를 무시하고 설치 시 플러그인을 활성화합니다.553`plugin.json`에서 `defaultEnabled: false`를 설정하여 비활성화된 상태로 설치되는 플러그인을 배포합니다. 사용자는 `claude plugin enable <plugin>` 또는 `/plugin` 인터페이스로 이를 켭니다. 외부 서비스에 연결하는 것과 같이 사용자가 옵트인해야 하는 비용이나 범위를 추가하는 플러그인에 이를 사용합니다.
535 554
536`defaultEnabled`는 다른 것이 플러그인의 상태를 결정하지 않았을 때의 폴백입니다. 두 가지가 이를 우선합니다:555`defaultEnabled`는 다른 것이 플러그인의 상태를 결정하지 않았을 때의 폴백입니다. 두 가지가 이를 우선합니다.
537 556
538* **사용자의 설정**: 모든 설정 범위에서 플러그인에 대한 `enabledPlugins`의 항목입니다. 작성되면 플러그인 업데이트 및 재설치 전체에서 유지되므로 나중 릴리스에서 `defaultEnabled`를 변경해도 기존 사용자를 뒤집지 않습니다.557* **사용자의 설정**: 모든 설정 범위에서 플러그인의 `enabledPlugins` 항목입니다. 작성되면 플러그인 업데이트 및 재설치 전체에서 지속되므로 나중 릴리스에서 `defaultEnabled`를 변경해도 기존 사용자를 뒤집지 않습니다.
539* **종속성 요구 사항**: 플러그인이 활성화된 다른 플러그인에 의해 필요할 때 Claude Code는 설치 또는 활성화 시 `true`를 작성합니다. 이는 명시적 설정을 제공하므로 자체 기본값이 더 이상 적용되지 않습니다. [종속성이 있는 플러그인 활성화 또는 비활성화](/docs/ko/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies)를 참조하세요.558* **종속성 요구 사항**: 플러그인이 활성화된 다른 플러그인에 의해 필요할 때 Claude Code는 설치 또는 활성화 시간에 이에 대해 `true`를 작성합니다. 이는 명시적 설정을 제공하므로 자신의 기본값은 더 이상 적용되지 않습니다. [종속성이 있는 플러그인 활성화 또는 비활성화](/docs/ko/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies)를 참조합니다.
540 559
541동일한 필드가 플러그인의 마켓플레이스 항목에 나타날 수 있으며, 여기서 `plugin.json`의 값보다 우선합니다. [선택사항 플러그인 필드](/docs/ko/plugin-marketplaces#optional-plugin-fields)를 참조하세요.560동일한 필드가 플러그인의 마켓플레이스 항목에 나타날 수 있으며, 여기서 `plugin.json`의 값보다 우선합니다. [선택적 플러그인 필드](/docs/ko/plugin-marketplaces#optional-plugin-fields)를 참조합니다.
542 561
543<h3 id="component-path-fields">562<h3 id="component-path-fields">
544 컴포넌트 경로 필드563 구성 요소 경로 필드
545</h3>564</h3>
546 565
547| 필드 | 타입 | 설명 | 예시 |566| 필드 | 유형 | 설명 | 예시 |
548| :---------------------- | :-------------------- | :---------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |567| :---------------------- | :-------------------- | :-------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |
549| `skills` | string\|array | `<name>/SKILL.md`를 포함하는 사용자 정의 skill 디렉토리 (기본 `skills/` 외에 추가). [경로 동작 규칙](#path-behavior-rules)에서 마켓플레이스 루트 예외를 참조하세요. | `"./custom/skills/"` |568| `skills` | string\|array | `<name>/SKILL.md`를 포함하는 사용자 정의 스킬 디렉터리입니다. 기본 `skills/` 스캔에 추가됩니다. 마켓플레이스 루트 예외에 대해 [경로 동작 규칙](#path-behavior-rules)을 참조합니다 | `"./custom/skills/"` |
550| `commands` | string\|array | 사용자 정의 평면 `.md` skill 파일 또는 디렉토리 (기본 `commands/` 대체) | `"./custom/cmd.md"` 또는 `["./cmd1.md"]` |569| `commands` | string\|array | 사용자 정의 플랫 `.md` 스킬 파일 또는 디렉터리입니다(기본 `commands/` 대체) | `"./custom/cmd.md"` 또는 `["./cmd1.md"]` |
551| `agents` | string\|array | 사용자 정의 agent 파일 (기본 `agents/` 대체) | `"./custom/agents/reviewer.md"` |570| `agents` | string\|array | 사용자 정의 에이전트 파일입니다(기본 `agents/` 대체) | `"./custom/agents/reviewer.md"` |
552| `hooks` | string\|array\|object | Hook 구성 경로 또는 인라인 구성 | `"./my-extra-hooks.json"` |571| `workflows` | string\|array | 사용자 정의 [워크플로우](/docs/ko/workflows) 스크립트 파일 또는 디렉터리입니다(기본 `workflows/` 대체) | `"./custom/workflows/"` |
572| `hooks` | string\|array\|object | 훅 구성 경로 또는 인라인 구성 | `"./my-extra-hooks.json"` |
553| `mcpServers` | string\|array\|object | MCP 구성 경로 또는 인라인 구성 | `"./my-extra-mcp-config.json"` |573| `mcpServers` | string\|array\|object | MCP 구성 경로 또는 인라인 구성 | `"./my-extra-mcp-config.json"` |
554| `outputStyles` | string\|array | 사용자 정의 출력 스타일 파일/디렉토리 (기본 `output-styles/` 대체) | `"./styles/"` |574| `outputStyles` | string\|array | 사용자 정의 출력 스타일 파일/디렉터리입니다(기본 `output-styles/` 대체) | `"./styles/"` |
555| `lspServers` | string\|array\|object | [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) 코드 인텔리전스 구성 (정의로 이동, 참조 찾기 등) | `"./.lsp.json"` |575| `lspServers` | string\|array\|object | 코드 인텔리전스(정의로 이동, 참조 찾기 등)를 위한 [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) 구성 | `"./.lsp.json"` |
556| `experimental.themes` | string\|array | 색상 테마 파일/디렉토리 (기본 `themes/` 대체). [테마](#themes) 참조 | `"./themes/"` |576| `experimental.themes` | string\|array | 색상 테마 파일/디렉터리입니다(기본 `themes/` 대체). [테마](#themes)를 참조합니다 | `"./themes/"` |
557| `experimental.monitors` | string\|array | 플러그인이 활성화될 때 자동으로 시작되는 백그라운드 [Monitor](/docs/ko/tools-reference#monitor-tool) 구성. [Monitors](#monitors) 참조 | `"./monitors.json"` |577| `experimental.monitors` | string\|array | 플러그인이 활성화될 때 자동으로 시작되는 백그라운드 [Monitor](/docs/ko/tools-reference#monitor-tool) 구성입니다. [모니터](#monitors)를 참조합니다 | `"./monitors.json"` |
558| `userConfig` | object | 플러그인이 활성화될 때 사용자에게 프롬프트하는 사용자 구성 가능 값. [사용자 구성](#user-configuration) 참조 | 아래 참조 |578| `userConfig` | object | 활성화 시간에 사용자에게 프롬프트되는 사용자 구성 가능한 값입니다. [사용자 구성](#user-configuration)을 참조합니다 | 아래 참조 |
559| `channels` | array | 메시지 주입을 위한 채널 선언 (Telegram, Slack, Discord 스타일). [채널](#channels) 참조 | 아래 참조 |579| `channels` | array | 메시지 주입을 위한 채널 선언입니다(Telegram, Slack, Discord 스타일). [채널](#channels)을 참조합니다 | 아래 참조 |
560| `dependencies` | array | 이 플러그인이 필요로 하는 다른 플러그인, 선택적으로 semver 버전 제약 포함. [플러그인 종속성 버전 제약](/docs/ko/plugin-dependencies) 참조 | `[{ "name": "secrets-vault", "version": "~2.1.0" }]` |580| `dependencies` | array | 이 플러그인이 필요로 하는 다른 플러그인입니다. 선택적으로 semver 버전 제약 조건이 있습니다. [플러그인 종속성 버전 제약](/docs/ko/plugin-dependencies)을 참조합니다 | `[{ "name": "secrets-vault", "version": "~2.1.0" }]` |
561 581
562<h3 id="experimental-components">582<h3 id="experimental-components">
563 실험적 컴포넌트583 실험적 구성 요소
564</h3>584</h3>
565 585
566`experimental` 키 아래의 컴포넌트인 `themes` 및 `monitors`는 안정화되는 동안 릴리스 간에 변경될 수 있는 매니페스트 스키마를 가집니다. 이들을 선언하는 위치는 별도의 마이그레이션입니다. 최상위 수준은 여전히 작동하고, `claude plugin validate`는 경고하며, 향후 릴리스에서는 `experimental.*`이 필요합니다.586`experimental` 키 아래의 구성 요소인 `themes` 및 `monitors`는 안정화되는 동안 릴리스 간에 변경될 수 있는 매니페스트 스키마를 가집니다. 이를 선언하는 위치는 별도의 마이그레이션입니다. 최상위 수준은 여전히 작동하고 `claude plugin validate`는 경고하며 향후 릴리스는 `experimental.*`를 요구할 것입니다.
567 587
568<h3 id="user-configuration">588<h3 id="user-configuration">
569 사용자 구성589 사용자 구성
570</h3>590</h3>
571 591
572`userConfig` 필드는 플러그인이 활성화될 때 Claude Code가 사용자에게 프롬프트하는 값을 선언합니다. 사용자가 `settings.json`을 수동으로 편집하도록 요구하는 대신 이를 사용하세요.592`userConfig` 필드는 플러그인이 활성화될 때 Claude Code가 사용자에게 프롬프트하는 값을 선언합니다. 사용자가 `settings.json`을 수동으로 편집하도록 요구하는 대신 이를 사용합니다.
573 593
574```json theme={null}594```json theme={null}
575{595{
576 "userConfig": {596 "userConfig": {
577 "api_endpoint": {597 "api_endpoint": {
578 "type": "string",598 "type": "string",
579 "title": "API 엔드포인트",599 "title": "API endpoint",
580 "description": "팀의 API 엔드포인트"600 "description": "Your team's API endpoint"
581 },601 },
582 "api_token": {602 "api_token": {
583 "type": "string",603 "type": "string",
584 "title": "API 토큰",604 "title": "API token",
585 "description": "API 인증 토큰",605 "description": "API authentication token",
586 "sensitive": true606 "sensitive": true
587 }607 }
588 }608 }
589}609}
590```610```
591 611
592키는 유효한 식별자여야 합니다. 각 옵션은 다음 필드를 지원합니다:612키는 유효한 식별자여야 합니다. 각 옵션은 다음 필드를 지원합니다.
593 613
594| 필드 | 필수 | 설명 |614| 필드 | 필수 | 설명 |
595| :------------ | :-- | :-------------------------------------------------------- |615| :------------ | :-- | :-------------------------------------------------------- |
596| `type` | 예 | `string`, `number`, `boolean`, `directory` 또는 `file` 중 하나 |616| `type` | 예 | `string`, `number`, `boolean`, `directory` 또는 `file` 중 하나 |
597| `title` | 예 | 구성 대화에 표시되는 레이블 |617| `title` | 예 | 구성 대화 상자에 표시되는 레이블 |
598| `description` | 예 | 필드 아래에 표시되는 도움말 텍스트 |618| `description` | 예 | 필드 아래에 표시되는 도움말 텍스트 |
599| `sensitive` | 아니오 | `true`인 경우 입력을 마스킹하고 값을 `settings.json` 대신 보안 저장소에 저장합니다. |619| `sensitive` | 아니오 | `true`인 경우 입력을 마스크하고 `settings.json` 대신 보안 저장소에 값을 저장합니다 |
600| `required` | 아니오 | `true`인 경우 필드가 비어 있으면 검증이 실패합니다. |620| `required` | 아니오 | `true`인 경우 필드가 비어 있을 때 검증이 실패합니다 |
601| `default` | 아니오 | 사용자가 아무것도 제공하지 않을 때 사용되는 값 |621| `default` | 아니오 | 사용자가 아무것도 제공하지 않을 때 사용되는 값 |
602| `multiple` | 아니오 | `string` 타입의 경우 문자열 배열 허용 |622| `multiple` | 아니오 | `string` 유형의 경우 문자열 배열을 허용합니다 |
603| `min` / `max` | 아니오 | `number` 타입의 범위 |623| `min` / `max` | 아니오 | `number` 유형의 경계 |
604 624
605각 값은 MCP 및 LSP 서버 구성과 hook 명령어에서 `${user_config.KEY}`로 대체할 수 있습니다. 민감하지 않은 값은 skill 및 agent 콘텐츠에서도 대체할 수 있습니다. 모든 값은 hook 프로세스에 `CLAUDE_PLUGIN_OPTION_<KEY>` 환경 변수로 내보내집니다. 여기서 `<KEY>`는 옵션 키를 대문자로 표기한 것입니다.625각 값은 MCP 및 LSP 서버 구성과 훅 명령에서 `${user_config.KEY}`로 대체할 수 있습니다. 민감하지 않은 값은 스킬 및 에이전트 콘텐츠에서도 대체할 수 있습니다. 모든 값은 훅 프로세스로 `CLAUDE_PLUGIN_OPTION_<KEY>` 환경 변수로 내보내집니다. 여기서 `<KEY>`는 대문자로 된 옵션 키입니다.
606 626
607셸에서 실행되는 필드는 `${user_config.*}`를 거부합니다. 구성된 값을 셸 명령어에 대체하면 셸이 해당 값이 포함하는 모든 것을 실행할 수 있으므로 컴포넌트는 [오류](/docs/ko/errors#plugin-command-references-user-config)로 실패합니다. 거부된 각 필드에는 값을 전달하는 대체 방법이 있습니다:627셸에서 실행되는 필드는 `${user_config.*}`를 거부합니다. 구성된 값을 셸 명령에 대체하면 셸이 해당 값이 포함하는 모든 것을 실행할 수 있으므로 구성 요소는 [오류](/docs/ko/errors#plugin-command-references-user-config)로 실패합니다. 각 거부된 필드에는 값을 전달하는 대체 방법이 있습니다.
608 628
609| 거부된 필드 | 값을 전달하는 방법 |629| 거부된 필드 | 값을 전달하는 방법 |
610| :--------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------- |630| :--------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------- |
611| Shell-form hook 명령어 | [exec form](/docs/ko/hooks#exec-form-and-shell-form)을 `args`와 함께 사용하거나 hook의 환경에서 `CLAUDE_PLUGIN_OPTION_<KEY>`를 읽습니다. |631| 셸 형식 훅 명령 | [exec 형식](/docs/ko/hooks#exec-form-and-shell-form)을 `args`와 함께 사용하거나 훅의 환경에서 `CLAUDE_PLUGIN_OPTION_<KEY>`를 읽습니다 |
612| [Monitor](#monitors) 명령어 | 스크립트의 구성 파일에서 값을 읽습니다. |632| [Monitor](#monitors) 명령 | 스크립트의 구성 파일에서 값을 읽습니다 |
613| MCP [`headersHelper`](/docs/ko/mcp#use-dynamic-headers-for-custom-authentication) | 스크립트의 구성 파일에서 값을 읽습니다. |633| MCP [`headersHelper`](/docs/ko/mcp#use-dynamic-headers-for-custom-authentication) | 스크립트의 구성 파일에서 값을 읽습니다 |
634
635v2.1.207 이전에는 이러한 필드가 `${user_config.KEY}` 값을 대체했습니다. 이에 의존하는 플러그인을 업데이트합니다.
636
637민감하지 않은 값은 사용자 `settings.json`의 [`pluginConfigs`](/docs/ko/settings-reference#pluginconfigs) 키 아래 `pluginConfigs[<plugin-id>].options`로 저장됩니다.
638
639macOS에서 Claude Code는 민감한 값을 macOS Keychain에 저장하고 Keychain이 쓰기를 거부할 때 `~/.claude/.credentials.json`으로 폴백합니다. 지원되는 키체인이 없는 플랫폼에서는 `~/.claude/.credentials.json`에 저장합니다. 키체인 저장소는 OAuth 토큰과 공유되며 약 2 KB의 총 제한이 있으므로 민감한 값을 작게 유지합니다.
614 640
615v2.1.207 이전에는 이러한 필드가 `${user_config.KEY}` 값을 대체했습니다. 이에 의존하는 플러그인을 업데이트하세요.641Claude Code는 세 가지 설정 소스에서만 모든 `pluginConfigs` 값을 읽습니다.
616 642
617민감하지 않은 값은 `settings.json`의 `pluginConfigs[<plugin-id>].options` 아래에 저장됩니다. Claude Code는 키를 사용자 설정에 작성하고 사용자 설정, `--settings` 플래그 및 관리되는 설정에서만 읽습니다. 프로젝트의 `.claude/settings.json` 또는 `.claude/settings.local.json`의 항목은 무시됩니다. v2.1.207 이전에는 Claude Code가 프로젝트 및 로컬 설정도 읽었습니다.643* **사용자 설정**: `~/.claude/settings.json`, 활성화 시간 프롬프트가 작성하는 파일
644* **`--settings`**: CLI 플래그 또는 SDK 인라인 설정
645* **관리되는 설정**: [조직 제어 정책](/docs/ko/permissions#managed-settings)
618 646
619민감한 값은 macOS Keychain으로 이동하거나, 지원되는 키체인을 사용할 수 없는 플랫폼에서는 `~/.claude/.credentials.json`으로 이동합니다. 키체인 저장소는 OAuth 토큰과 공유되며 약 2 KB의 총 제한이 있으므로 민감한 값을 작게 유지하세요.647둘 이상의 소스가 동일한 키를 설정할 때 관리되는 설정이 우선하고 `--settings`가 우선하고 사용자 설정이 우선합니다. 이 목록에서 제거할 수 있는 유일한 소스는 사용자 설정입니다. `user` 없이 [`--setting-sources`](/docs/ko/cli-reference#cli-flags)를 전달하면 Claude Code는 이를 건너뜁니다. 관리되는 설정과 `--settings`는 전달하는 모든 것을 유지합니다. SDK의 [`settingSources`](/docs/ko/agent-sdk/claude-code-features#what-settingsources-does-not-control) 옵션은 동일한 목록을 설정합니다.
648
649프로젝트의 `.claude/settings.json` 또는 `.claude/settings.local.json`의 항목은 무시됩니다. 두 파일 모두 작업 공간에 있으므로 복제된 저장소가 거기에 값을 제공할 수 있으며 이러한 값은 플러그인 훅 명령, MCP 서버 구성, LSP 명령 및 모니터 명령으로 흐릅니다. v2.1.207 이전에는 이러한 항목이 읽혔습니다. 제한은 `pluginConfigs`에만 해당됩니다. [`enabledPlugins`](/docs/ko/settings-reference#enabledplugins)는 여전히 프로젝트 및 로컬 설정을 준수합니다.
620 650
621<h3 id="channels">651<h3 id="channels">
622 채널652 채널
632 "userConfig": {662 "userConfig": {
633 "bot_token": {663 "bot_token": {
634 "type": "string",664 "type": "string",
635 "title": "봇 토큰",665 "title": "Bot token",
636 "description": "Telegram 봇 토큰",666 "description": "Telegram bot token",
637 "sensitive": true667 "sensitive": true
638 },668 },
639 "owner_id": {669 "owner_id": {
640 "type": "string",670 "type": "string",
641 "title": "소유자 ID",671 "title": "Owner ID",
642 "description": "Telegram 사용자 ID"672 "description": "Your Telegram user ID"
643 }673 }
644 }674 }
645 }675 }
647}677}
648```678```
649 679
650`server` 필드는 필수이며 플러그인의 `mcpServers`의 키와 일치해야 합니다. 선택사항인 채널별 `userConfig`는 최상위 필드와 동일한 스키마를 사용하여 플러그인이 플러그인이 활성화될 때 봇 토큰 또는 소유자 ID를 프롬프트할 수 있습니다.680`server` 필드는 필수이며 플러그인의 `mcpServers`의 키와 일치해야 합니다. 선택적 채널별 `userConfig`는 최상위 필드와 동일한 스키마를 사용하여 플러그인이 플러그인이 활성화될 때 봇 토큰 또는 소유자 ID를 프롬프트할 수 있습니다.
651 681
652<h3 id="path-behavior-rules">682<h3 id="path-behavior-rules">
653 경로 동작 규칙683 경로 동작 규칙
654</h3>684</h3>
655 685
656사용자 정의 경로가 플러그인의 기본 디렉토리를 대체하는지 확장하는지는 필드에 따라 다릅니다:686사용자 정의 경로가 플러그인의 기본 디렉터리를 대체하는지 확장하는지는 필드에 따라 다릅니다.
657 687
658* **기본값 대체**: `commands`, `agents`, `outputStyles`, `experimental.themes`, `experimental.monitors`. 예를 들어 매니페스트가 `commands`를 지정하면 기본 `commands/` 디렉토리는 스캔되지 않습니다. 기본값을 유지하고 더 많은 것을 추가하려면 명시적으로 나열하세요: `"commands": ["./commands/", "./extras/"]`688* **기본값 대체**: `commands`, `agents`, `workflows`, `outputStyles`, `experimental.themes`, `experimental.monitors`. 예를 들어 매니페스트가 `commands`를 지정할 때 기본 `commands/` 디렉터리는 스캔되지 않습니다. 기본값을 유지하고 더 추가하려면 명시적으로 나열합니다. `"commands": ["./commands/", "./extras/"]`
659* **기본값에 추가**: `skills`. 기본 `skills/` 디렉토리는 항상 스캔되며, `skills`에 나열된 디렉토리는 함께 로드됩니다. 예외: [소스가 마켓플레이스 루트로 확인되는 마켓플레이스 항목](/docs/ko/plugin-marketplaces#advanced-plugin-entries)의 경우 특정 서브디렉토리를 선언하면 기본 `skills/` 스캔을 대체합니다.689* **기본값에 추가**: `skills`. 기본 `skills/` 디렉터리는 항상 스캔되고 `skills`에 나열된 디렉터리는 함께 로드됩니다. 예외: [소스가 마켓플레이스 루트로 확인되는 마켓플레이스 항목](/docs/ko/plugin-marketplaces#advanced-plugin-entries)의 경우 특정 하위 디렉터리를 선언하면 기본 `skills/` 스캔을 대체합니다
660* **자체 병합 규칙**: [hooks](#hooks), [MCP servers](#mcp-servers) 및 [LSP servers](#lsp-servers). 각 섹션에서 여러 소스가 어떻게 결합되는지 참조하세요.690* **자신의 병합 규칙**: [훅](#hooks), [MCP 서버](#mcp-servers) 및 [LSP 서버](#lsp-servers). 여러 소스가 결합되는 방식에 대해 각 섹션을 참조합니다
661 691
662플러그인에 기본 폴더와 일치하는 매니페스트 키가 모두 있으면 Claude Code v2.1.140 이상은 `claude plugin list` 및 `/plugin` 상세 보기에서 무시된 폴더에 플래그를 지정합니다. 플러그인은 여전히 매니페스트 경로를 사용하여 로드됩니다. 매니페스트 키가 기본 폴더를 가리킬 때는 경고가 표시되지 않습니다 (예: `"commands": ["./commands/deploy.md"]`). 이 경우 폴더가 명시적으로 처리되기 때문입니다.692플러그인에 기본 폴더와 일치하는 매니페스트 키가 모두 있을 때 Claude Code는 `claude plugin list` 및 `/plugin` 세부 정보 보기에서 무시된 폴더에 대해 경고합니다. 플러그인은 여전히 매니페스트 경로를 사용하여 로드됩니다. Claude Code는 매니페스트 키가 기본 폴더를 가리킬 때 경고하지 않습니다. 예를 들어 `"commands": ["./commands/deploy.md"]`는 폴더를 명시적으로 이름 지정하기 때문입니다.
663 693
664모든 경로 필드의 경우:694모든 경로 필드의 경우:
665 695
666* 모든 경로는 플러그인 루트에 상대적이어야 하며 `./`로 시작해야 합니다.696* 모든 경로는 플러그인 루트에 상대적이어야 하고 `./`로 시작해야 합니다. 단, `skills` 필드는 `"."`도 허용합니다
667* 사용자 정의 경로의 컴포넌트는 동일한 명명 및 네임스페이싱 규칙을 사용합니다.697 * `"."`과 `"./"`는 모두 플러그인 루트 자체를 나타냅니다
668* 여러 경로를 배열로 지정할 수 있습니다.698 * v2.1.221 이전에는 `"."`이 매니페스트 검증에 실패했고 플러그인이 로드되지 않았으므로 이전 버전을 지원하려면 `"./"`를 사용합니다
669* skill 경로가 `SKILL.md`를 직접 포함하는 디렉토리를 가리킬 때 (예: 플러그인 루트를 가리키는 `"skills": ["./"]`), frontmatter의 `name` 필드가 skill의 호출 이름을 결정합니다. 이는 설치 디렉토리와 관계없이 안정적인 이름을 제공합니다. `name`이 frontmatter에 설정되지 않으면 디렉토리 basename이 폴백으로 사용됩니다.699* 사용자 정의 경로의 구성 요소는 동일한 명명 및 네임스페이싱 규칙을 사용합니다
700* 여러 경로를 배열로 지정할 수 있습니다
701* 스킬 경로는 `SKILL.md`를 직접 포함하는 디렉터리를 가리킬 수 있습니다. 예를 들어 플러그인 루트의 경우 `"skills": ["."]`
702 * Claude Code는 `SKILL.md`의 프론트매터 `name` 필드에서 스킬의 호출 이름을 가져오므로 설치 디렉터리의 이름이 무엇이든 이름은 안정적으로 유지됩니다
703 * 프론트매터에 `name`이 설정되지 않으면 Claude Code는 디렉터리 기본 이름으로 폴백합니다
670 704
671플러그인이 루트에 `SKILL.md`를 가지고 있고, `skills/` 서브디렉토리가 없으며, `skills` 매니페스트 필드가 없으면 Claude Code v2.1.142 이상에서 자동으로 단일 skill 플러그인으로 로드됩니다. 이 레이아웃에 대해 `plugin.json`에서 `"skills": ["./"]`를 설정할 필요가 없습니다. skill의 호출 이름은 위와 동일한 규칙을 따릅니다: frontmatter `name` 필드 또는 디렉토리 basename을 폴백으로 사용합니다.705루트에 `SKILL.md`가 있고 `skills/` 하위 디렉터리가 없으며 `skills` 매니페스트 필드가 없는 플러그인은 자동으로 단일 스킬 플러그인으로 로드됩니다. 이 레이아웃에 대해 `plugin.json`에서 `"skills": ["./"]`를 설정할 필요가 없습니다.
672 706
673**경로 예시**:707**경로 예시**:
674 708
689 환경 변수723 환경 변수
690</h3>724</h3>
691 725
692Claude Code는 플러그인 경로를 참조하기 위한 세 가지 변수를 제공합니다:726Claude Code는 경로를 참조하기 위한 세 가지 변수를 제공합니다.
693 727
694| 변수 | 확인 대상 | 사용 목적 |728| 변수 | 확인 대상 | 사용 목적 |
695| :---------------------- | :------------------------------------------------------------------------ | :------------------------------------------------------ |729| :---------------------- | :----------------------------------------------------------------- | :------------------------------------------------------ |
696| `${CLAUDE_PLUGIN_ROOT}` | 플러그인 설치 디렉토리의 절대 경로 | 플러그인과 함께 번들로 제공되는 스크립트, 바이너리 및 구성 파일 |730| `${CLAUDE_PLUGIN_ROOT}` | 플러그인의 설치 디렉터리의 절대 경로 | 플러그인과 함께 번들된 스크립트, 바이너리 및 구성 파일 |
697| `${CLAUDE_PLUGIN_DATA}` | [영구 데이터 디렉토리](#persistent-data-directory) (첫 참조 시 생성되며 플러그인 업데이트 후에도 유지됨) | `node_modules` 또는 Python 가상 환경과 같은 설치된 종속성, 생성된 코드 및 캐시 |731| `${CLAUDE_PLUGIN_DATA}` | 플러그인 업데이트를 유지하고 첫 참조 시 생성되는 [지속적 디렉터리](#persistent-data-directory) | `node_modules` 또는 Python 가상 환경과 같은 설치된 종속성, 생성된 코드 및 캐시 |
698| `${CLAUDE_PROJECT_DIR}` | 프로젝트 루트 | 프로젝트 로컬 스크립트 및 구성 파일 |732| `${CLAUDE_PROJECT_DIR}` | 프로젝트 루트 | 프로젝트 로컬 스크립트 및 구성 파일 |
699 733
700세 변수 모두 hook 프로세스 및 MCP 및 LSP 서버 서브프로세스에 환경 변수로 내보내집니다. 어느 필드가 인라인으로 플레이스홀더를 대체하는지는 플러그인 컴포넌트에 따라 다릅니다:734세 가지 모두 훅 프로세스 및 MCP 및 LSP 서버 하위 프로세스로 환경 변수로 내보내집니다. 어느 필드가 인라인으로 대체하는지는 플러그인 구성 요소에 따라 다릅니다.
701 735
702| 플러그인 컴포넌트 | 플레이스홀더가 확인되는 필드 |736| 플러그인 구성 요소 | 자리 표시자가 확인되는 필드 |
703| :------------------------- | :------------------------------------------ |737| :------------------------- | :------------------------------------------ |
704| Skill 및 agent 콘텐츠 | 플레이스홀더가 나타나는 모든 곳 |738| 스킬 및 에이전트 콘텐츠 | 자리 표시자가 나타나는 모든 곳 |
705| Hook 및 monitor 명령어 | 플레이스홀더가 나타나는 모든 곳 |739| 훅 및 모니터 명령 | 자리 표시자가 나타나는 모든 곳 |
706| MCP `stdio` 서버 | `command`, `args`, `env` |740| MCP `stdio` 서버 | `command`, `args`, `env` |
707| MCP `http`, `sse`, `ws` 서버 | `url`, `headers`, `headersHelper` |741| MCP `http`, `sse`, `ws` 서버 | `url`, `headers`, `headersHelper` |
708| LSP 서버 | `command`, `args`, `env`, `workspaceFolder` |742| LSP 서버 | `command`, `args`, `env`, `workspaceFolder` |
709 743
710hook 명령어에서 [exec form](/docs/ko/hooks#exec-form-and-shell-form)을 `args`와 함께 사용하여 각 경로가 따옴표 없이 하나의 인수로 전달되도록 하세요. shell-form hook 및 monitor 명령어에서 `"${CLAUDE_PROJECT_DIR}/scripts/server.sh"`와 같이 큰따옴표로 변수를 감싸세요. 이 shell-form hook은 플러그인과 함께 번들된 스크립트를 실행합니다:744훅 명령에서 [exec 형식](/docs/ko/hooks#exec-form-and-shell-form)을 `args`와 함께 사용하여 각 경로가 따옴표 없이 하나의 인수로 전달되도록 합니다. 셸 형식 훅 및 모니터 명령에서 변수를 큰따옴표로 래핑합니다. 예: `"${CLAUDE_PROJECT_DIR}/scripts/server.sh"`. 이 셸 형식 훅은 플러그인과 함께 번들된 스크립트를 실행합니다.
711 745
712```json theme={null}746```json theme={null}
713{747{
726}760}
727```761```
728 762
729`${CLAUDE_PLUGIN_ROOT}`는 플러그인이 업데이트될 때 변경됩니다. 이전 버전의 디렉토리는 업데이트 후 약 7일 동안 디스크에 남아 있지만 이를 임시로 취급하고 여기에 상태를 작성하지 마세요.763`${CLAUDE_PLUGIN_ROOT}`는 플러그인이 업데이트될 때 변경됩니다. 이전 버전의 디렉터리는 업데이트 후 일정 기간 동안 디스크에 남아 있지만 이를 임시로 취급하고 거기에 상태를 작성하지 마십시오. 정리 의미론에 대해 [플러그인 캐싱](#plugin-caching-and-file-resolution)을 참조합니다.
764
765플러그인이 세션 중간에 업데이트될 때 훅 명령, 모니터, MCP 서버 및 LSP 서버는 이전 버전의 경로를 계속 사용합니다. `/reload-plugins`를 실행하여 훅, MCP 서버 및 LSP 서버를 새 경로로 전환합니다. 모니터는 세션 재시작이 필요합니다. 대화형 터미널이 없는 세션에서 다시 로드는 플러그인 MCP 서버를 다음 세션까지 이전 경로에 남겨 둡니다.
730 766
731플러그인이 세션 중에 업데이트될 때 hook 명령어, monitors, MCP 서버 및 LSP 서버는 이전 버전의 경로를 계속 사용합니다. `/reload-plugins`를 실행하여 hook, MCP 서버 및 LSP 서버를 새 경로로 전환하세요. monitors는 세션 재시작이 필요합니다.767`command` 소스가 있는 플러그인의 경우 Claude Code는 [플러그인 자체를 다시 로드할 수 있습니다](/docs/ko/plugin-marketplaces#when-claude-code-re-runs-the-command).
732 768
733MCP 서버는 또한 `roots/list` 요청을 호출하여 런타임에 세션의 작업 디렉토리를 읽을 수 있습니다. [`roots/list`가 반환하는 것과 Claude Code가 서버에 변경을 알리는 시기](/docs/ko/mcp#option-3-add-a-local-stdio-server)를 참조하세요.769MCP 서버는 또한 `roots/list` 요청을 호출하여 런타임에 세션의 작업 디렉터리를 읽을 수 있습니다. [`roots/list`가 반환하는 것과 Claude Code가 서버에 변경을 알리는 시기](/docs/ko/mcp#option-3-add-a-local-stdio-server)를 참조합니다.
734 770
735<h4 id="persistent-data-directory">771<h4 id="persistent-data-directory">
736 영구 데이터 디렉토리772 지속적 데이터 디렉터리
737</h4>773</h4>
738 774
739`${CLAUDE_PLUGIN_DATA}` 디렉토리는 `~/.claude/plugins/data/{id}/`로 확인되며, 여기서 `{id}`는 `a-z`, `A-Z`, `0-9`, `_` 및 `-` 외부의 문자가 `-`로 대체된 플러그인 식별자입니다. `formatter@my-marketplace`로 설치된 플러그인의 경우 디렉토리는 `~/.claude/plugins/data/formatter-my-marketplace/`입니다.775`${CLAUDE_PLUGIN_DATA}` 디렉터리는 `~/.claude/plugins/data/{id}/`로 확인됩니다. 여기서 `{id}`는 `a-z`, `A-Z`, `0-9`, `_` 및 `-` 외부의 문자가 `-`로 대체된 플러그인 식별자입니다. `formatter@my-marketplace`로 설치된 플러그인의 경우 디렉터리는 `~/.claude/plugins/data/formatter-my-marketplace/`입니다.
776
777일반적인 사용은 언어 종속성을 한 번 설치하고 세션 및 플러그인 업데이트 전체에서 재사용하는 것입니다. Python 종속성, Yarn 또는 pnpm으로 잠긴 종속성 및 수명 주기 스크립트를 실행해야 하는 패키지에 이를 사용합니다. 마켓플레이스 설치 플러그인의 경우 전혀 필요하지 않을 수 있습니다. Claude Code는 플러그인을 캐시할 때 적격 [Node.js 패키지 종속성](#node-js-package-dependencies)을 자동으로 설치합니다.
740 778
741일반적인 사용은 언어 종속성을 한 번 설치하고 세션 및 플러그인 업데이트 전체에서 재사용하는 것입니다. 데이터 디렉토리가 단일 플러그인 버전보다 오래 지속되므로 디렉토리 존재 여부만 확인하면 업데이트가 플러그인의 종속성 매니페스트를 변경할 때를 감지할 수 없습니다. 권장 패턴은 번들된 매니페스트를 데이터 디렉토리의 복사본과 비교하고 다를 때 다시 설치합니다.779데이터 디렉터리는 단일 플러그인 버전보다 오래 지속되므로 디렉터리 존재 여부만으로는 업데이트가 플러그인의 종속성 매니페스트를 변경하는 시기를 감지할 수 없습니다. 권장 패턴은 번들된 매니페스트를 데이터 디렉터리의 복사본과 비교하고 다를 때 재설치합니다.
742 780
743이 `SessionStart` hook은 첫 실행 시 `node_modules`를 설치하고 플러그인 업데이트가 변경된 `package.json`을 포함할 때마다 다시 설치합니다:781이 `SessionStart` 훅은 첫 실행 시 `node_modules`를 설치하고 플러그인 업데이트가 변경된 `package.json`을 포함할 때마다 다시 설치합니다.
744 782
745```json theme={null}783```json theme={null}
746{784{
759}797}
760```798```
761 799
762`diff`는 저장된 복사본이 누락되거나 번들된 복사본과 다를 때 0이 아닌 값으로 종료되어 첫 실행과 종속성 변경 업데이트를 모두 다룹니다. `npm install`이 실패하면 후행 `rm`은 복사된 매니페스트를 제거하므로 다음 세션이 다시 시도합니다.800`diff`는 저장된 복사본이 누락되거나 번들된 복사본과 다를 때 0이 아닌 값으로 종료되어 첫 실행과 종속성 변경 업데이트를 모두 다룹니다. `npm install`이 실패하면 후행 `rm`은 복사된 매니페스트를 제거하여 다음 세션이 재시도합니다.
763 801
764`${CLAUDE_PLUGIN_ROOT}`에 번들된 스크립트는 지속된 `node_modules`에 대해 실행할 수 있습니다:802`${CLAUDE_PLUGIN_ROOT}`에 번들된 스크립트는 지속된 `node_modules`에 대해 실행할 수 있습니다.
765 803
766```json theme={null}804```json theme={null}
767{805{
777}815}
778```816```
779 817
780데이터 디렉토리는 플러그인을 설치한 마지막 범위에서 제거할 때 자동으로 삭제됩니다. `/plugin` 인터페이스는 디렉토리 크기를 표시하고 삭제 전에 프롬프트합니다. CLI는 기본적으로 삭제합니다. [`--keep-data`](#plugin-uninstall)를 전달하여 유지하세요.818데이터 디렉터리는 마지막 범위에서 플러그인을 제거할 때 자동으로 삭제됩니다. `/plugin` 인터페이스는 디렉터리 크기를 표시하고 삭제하기 전에 프롬프트합니다. CLI는 기본적으로 삭제합니다. [`--keep-data`](#plugin-uninstall)를 전달하여 보존합니다.
781 819
782***820***
783 821
785 플러그인 캐싱 및 파일 해석823 플러그인 캐싱 및 파일 해석
786</h2>824</h2>
787 825
788플러그인은 두 가지 방법 중 하나로 지정됩니다:826플러그인은 다음 두 가지 방법 중 하나로 지정됩니다.
789 827
790* `claude --plugin-dir` 또는 `claude --plugin-url`을 통해, 세션 기간 동안.828* `claude --plugin-dir` 또는 `claude --plugin-url`을 통해 세션 기간 동안 지정합니다.
791* 마켓플레이스를 통해, 향후 세션을 위해 설치됨.829* 마켓플레이스를 통해 설치하여 향후 세션에서 사용합니다.
792 830
793보안 및 검증 목적으로 Claude Code는 *마켓플레이스* 플러그인을 제자리에서 사용하는 대신 사용자의 로컬 **플러그인 캐시** (`~/.claude/plugins/cache`)에 복사합니다. 외부 파일을 참조하는 플러그인을 개발할 때 이 동작을 이해하는 것이 중요합니다.831보안 및 검증 목적으로 Claude Code는 *마켓플레이스* 플러그인을 사용자의 로컬 **플러그인 캐시**(`~/.claude/plugins/cache`)에 복사합니다. 단, [`command` 소스가 링크 모드](/docs/ko/plugin-marketplaces#copy-mode-and-link-mode)인 경우는 제외하며, 이 경우 Claude Code는 캐시 항목의 링크를 통해 제자리에서 사용합니다.
794 832
795각 설치된 버전은 캐시의 별도 디렉토리입니다. 플러그인을 업데이트하거나 제거하면 이전 버전 디렉토리는 고아로 표시되고 7일 후 자동으로 제거됩니다. 유예 기간을 통해 이미 이전 버전을 로드한 동시 Claude Code 세션이 오류 없이 계속 실행될 수 있습니다.833복사된 플러그인의 경우, 설치된 각 버전은 캐시의 별도 디렉토리이며, 마켓플레이스 및 플러그인별로 그룹화되고 해석된 버전으로 명명되며, 플러그인의 파일과 [Node.js 패키지 종속성](#node-js-package-dependencies)의 자체 복사본을 포함합니다. [릴리스 태그](/docs/ko/plugin-dependencies#tag-plugin-releases-for-version-resolution)에서 해석된 종속성은 커밋-SHA 접미사가 있는 디렉토리 이름을 가집니다.
834
835플러그인을 업데이트하거나 제거할 때 Claude Code는 이전 버전 디렉토리를 고아 상태로 표시하고 대략 14일 후 백그라운드 스윕에서 제거합니다. 유예 기간을 통해 이미 이전 버전을 로드한 동시 Claude Code 세션이 오류 없이 계속 실행될 수 있습니다. Claude Code는 최소한 하나의 플러그인이 설치되어 있는 동안에만 스윕을 실행합니다. 마지막 플러그인을 제거한 후 고아 디렉토리는 플러그인을 다시 설치할 때까지 디스크에 남아 있습니다.
836
837Claude Code는 더 이상 디렉토리나 심볼릭 링크를 포함하지 않을 때만 캐시에서 플러그인 또는 마켓플레이스 폴더를 제거합니다. 개발 체크아웃을 캐시에 플러그인의 버전 항목으로 심볼릭 링크하면 Claude Code는 링크를 고아 상태로 표시하지 않으며 링크나 링크를 포함하는 폴더를 제거하지 않습니다. Claude Code는 또한 링크된 체크아웃 내부에 버전 추적 파일을 작성하지 않습니다.
796 838
797Claude의 Glob 및 Grep 도구는 검색 중에 고아 버전 디렉토리를 건너뛰므로 파일 결과에는 오래된 플러그인 코드가 포함되지 않습니다.839Claude의 Glob 및 Grep 도구는 검색 중에 고아 버전 디렉토리를 건너뛰므로 파일 결과에는 오래된 플러그인 코드가 포함되지 않습니다.
798 840
841<h3 id="node-js-package-dependencies">
842 Node.js 패키지 종속성
843</h3>
844
845Claude Code가 플러그인을 캐시에 복사할 때 플러그인의 Node.js 패키지 종속성도 여기에 설치하므로 플러그인의 hooks 및 MCP 서버가 이를 로드할 수 있습니다. 이 섹션은 플러그인이 자체 `package.json`에서 선언하는 npm 및 Bun 패키지를 다룹니다. 다른 플러그인에 종속된 플러그인의 경우 [플러그인 종속성 버전](/docs/ko/plugin-dependencies)을 참조하세요.
846
847Claude Code는 복사된 버전 디렉토리 내에서 설치를 실행합니다. 플러그인을 설치할 때, Claude Code가 플러그인을 새 버전으로 업데이트할 때, 그리고 새 머신에서와 같이 활성화된 플러그인이 아직 캐시되지 않았을 때 세션 시작 시에 실행됩니다. 설치는 플러그인의 루트 디렉토리에 `package.json`과 지원되는 lockfile이 모두 포함되어 있을 때만 실행됩니다.
848
849| Lockfile | 명령 |
850| :------------------------------------------- | :----------------------------------------------- |
851| `bun.lock` 또는 `bun.lockb` | `bun install --frozen-lockfile --ignore-scripts` |
852| `npm-shrinkwrap.json` 또는 `package-lock.json` | `npm ci --ignore-scripts` |
853
854플러그인에 이러한 lockfile 중 하나 이상이 포함되어 있으면 Claude Code는 첫 번째 일치를 사용하며, 다음 순서로 확인합니다. `bun.lock`, `bun.lockb`, `npm-shrinkwrap.json`, `package-lock.json`. Claude Code는 `yarn.lock` 및 `pnpm-lock.yaml`을 건너뜁니다. Yarn 및 pnpm은 `--ignore-scripts`를 우회하는 해석 시간 구성 hooks를 지원하기 때문입니다.
855
856가장 광범위한 도달을 위해 npm lockfile을 제공하세요. Claude Code는 사용자의 PATH에서 일치하는 lockfile의 패키지 관리자를 실행하며 lockfile이 누락된 경우 다른 lockfile로 폴백하지 않습니다. npm 소스를 통해 배포된 플러그인의 경우 `npm-shrinkwrap.json`을 사용하세요. npm은 게시된 패키지에서 `package-lock.json`을 제외합니다.
857
858Claude Code는 이 종속성 설치를 제한하여 설치 중에 플러그인 또는 해당 패키지의 코드가 실행되지 않도록 하고 실행 시간을 제한합니다.
859
860* **고정된 해석:** Bun 및 npm은 lockfile이 고정한 것을 정확히 설치하며, `package.json`과 lockfile이 불일치할 때 버전을 다시 해석하지 않고 실패합니다.
861* **라이프사이클 스크립트 없음:** `--ignore-scripts`는 `preinstall`, `install`, 및 `postinstall` 스크립트가 실행되지 않도록 하므로 이러한 스크립트에서 네이티브 모듈을 빌드하는 종속성은 다운로드되지만 이 설치 중에는 컴파일되지 않습니다.
862* **60초 타임아웃:** Claude Code는 더 오래 실행되는 설치를 중지하고 실패로 처리합니다.
863
864npm 소스 플러그인 자체를 가져오면 이 종속성 설치가 실행되기 전에 라이프사이클 스크립트가 활성화된 상태에서 `npm install`을 실행합니다.
865
866실패하거나 건너뛴 설치는 플러그인을 차단하지 않습니다. 설치가 실패하거나 Claude Code가 yarn 또는 pnpm lockfile을 건너뛸 때 이유를 [디버그 출력](#debugging-commands)의 경고로 기록합니다. `package.json`이 있고 lockfile이 없는 플러그인은 로그 항목 없이 건너뜁니다. 시간 초과된 설치는 캐시된 복사본에 부분 `node_modules` 트리를 남길 수 있습니다.
867
868자동 설치를 끌 수 없습니다. 설정이나 환경 변수가 이를 비활성화하지 않습니다. 제한된 네트워크에서는 [네트워크 액세스 요구 사항](/docs/ko/network-config#network-access-requirements)을 참조하여 허용할 호스트를 확인하세요.
869
870자동 설치가 제공할 수 없는 종속성(예: 라이프사이클 스크립트를 빌드해야 하는 패키지, Python 종속성, 또는 Yarn 또는 pnpm으로 잠긴 플러그인)의 경우 [영구 데이터 디렉토리](#persistent-data-directory)의 hook에서 설치하세요.
871
799<h3 id="path-traversal-limitations">872<h3 id="path-traversal-limitations">
800 경로 순회 제한873 경로 순회 제한
801</h3>874</h3>
802 875
803설치된 플러그인은 해당 디렉토리 외부의 파일을 참조할 수 없습니다. 플러그인 루트 외부를 순회하는 경로(예: `../shared-utils`)는 설치 후 작동하지 않습니다. 왜냐하면 이러한 외부 파일이 캐시에 복사되지 않기 때문입니다.876Claude Code는 플러그인이 자체 디렉토리 외부의 파일을 참조하도록 허용하지 않습니다. `plugin.json`에서 선언되거나 [마켓플레이스 항목](/docs/ko/plugin-marketplaces#plugin-entries)에서 선언된 플러그인 루트 외부로 해석되는 구성 요소 경로를 거부합니다. 이는 `../shared-utils`와 같이 작성된 대로 플러그인 외부를 가리키는 경로와 [마켓플레이스 내 링크](#share-files-within-a-marketplace-with-symlinks)를 제외한 플러그인 외부로 이어지는 심볼릭 링크를 포함합니다.
877
878Claude Code가 경로를 거부하면 [`path escapes plugin directory`](/docs/ko/errors#path-escapes-plugin-directory) 오류를 보고하고 해당 구성 요소 없이 플러그인을 로드합니다.
879
880Claude Code는 플러그인을 설치할 때 플러그인 디렉토리 외부의 파일을 캐시에 복사하지 않으므로 복사된 플러그인 내부의 스크립트가 플러그인 루트 위의 경로를 읽을 때 해당 파일을 찾지 못합니다.
804 881
805<h3 id="share-files-within-a-marketplace-with-symlinks">882<h3 id="share-files-within-a-marketplace-with-symlinks">
806 마켓플레이스 내에서 심볼릭 링크를 사용하여 파일 공유883 심볼릭 링크를 사용하여 마켓플레이스 내에서 파일 공유
807</h3>884</h3>
808 885
809플러그인이 동일한 마켓플레이스의 다른 부분과 파일을 공유해야 하는 경우 플러그인 디렉토리 내에 심볼릭 링크를 만들 수 있습니다. 플러그인이 캐시에 복사될 때 심볼릭 링크가 처리되는 방식은 해당 대상이 어디로 해석되는지에 따라 달라집니다:886플러그인이 동일한 마켓플레이스의 다른 부분과 파일을 공유해야 하는 경우 플러그인 디렉토리 내에 심볼릭 링크를 만들 수 있습니다. 플러그인이 캐시에 복사될 때 심볼릭 링크가 처리되는 방식은 대상이 해석되는 위치에 따라 달라집니다.
810 887
811* **플러그인 자체 디렉토리 내:** 심볼릭 링크는 캐시에 상대 심볼릭 링크로 보존되므로 런타임에 복사된 대상으로 계속 해석됩니다.888* **플러그인 자체 디렉토리 내:** 심볼릭 링크는 캐시에서 상대 심볼릭 링크로 유지되므로 런타임에 복사된 대상으로 계속 해석됩니다.
812* **동일한 마켓플레이스 내의 다른 곳:** 심볼릭 링크는 역참조됩니다. 대상의 콘텐츠가 캐시에 복사됩니다. 이를 통해 메타 플러그인의 `skills/` 디렉토리가 마켓플레이스의 다른 플러그인으로 정의된 skills에 링크할 수 있습니다.889* **동일한 마켓플레이스 내 다른 곳:** 심볼릭 링크는 역참조됩니다. 대상의 내용이 캐시에 복사됩니다. 이를 통해 메타 플러그인의 `skills/` 디렉토리가 마켓플레이스의 다른 플러그인으로 정의된 skills에 링크할 수 있습니다.
813* **마켓플레이스 외부:** 심볼릭 링크는 보안상의 이유로 건너뜁니다. 이는 플러그인이 시스템 경로와 같은 임의의 호스트 파일을 캐시로 가져오는 것을 방지합니다.890* **마켓플레이스 외부:** 심볼릭 링크는 보안상 건너뜁니다. 이는 플러그인이 시스템 경로와 같은 임의의 호스트 파일을 캐시로 가져오는 것을 방지합니다.
814 891
815`--plugin-dir`으로 설치되거나 로컬 경로에서 설치된 플러그인의 경우 플러그인 자체 디렉토리 내에서 해석되는 심볼릭 링크만 보존됩니다. 다른 모든 것은 건너뜁니다.892`--plugin-dir`으로 설치된 플러그인, 로컬 경로에서 설치된 플러그인, 또는 복사 모드의 [`command` 소스](/docs/ko/plugin-marketplaces#copy-mode-and-link-mode)에서 설치된 플러그인의 경우 플러그인 자체 디렉토리 내에서 해석되는 심볼릭 링크만 유지됩니다. 다른 모든 것은 건너뜁니다.
816 893
817다음 명령어는 마켓플레이스 플러그인 내부에서 형제 플러그인으로 정의된 공유 skill로의 링크를 만듭니다. Windows에서는 관리자 권한 명령 프롬프트에서 `mklink /D`를 사용하거나 개발자 모드를 활성화하세요:894다음 명령은 마켓플레이스 플러그인 내부에서 형제 플러그인으로 정의된 공유 skill로의 링크를 만듭니다. Windows에서는 관리자 권한 명령 프롬프트에서 `mklink /D`를 사용하거나 개발자 모드를 활성화하세요.
818 895
819```bash theme={null}896```bash theme={null}
820ln -s ../../shared-plugin/skills/foo ./skills/foo897ln -s ../../shared-plugin/skills/foo ./skills/foo
821```898```
822 899
823이는 캐싱 시스템의 보안 이점을 유지하면서 유연성을 제공합니다.
824
825***900***
826 901
827<h2 id="plugin-directory-structure">902<h2 id="plugin-directory-structure">
832 표준 플러그인 레이아웃907 표준 플러그인 레이아웃
833</h3>908</h3>
834 909
835완전한 플러그인은 다음 구조를 따릅니다:910완전한 플러그인은 다음과 같은 구조를 따릅니다:
836 911
837```text theme={null}912```text theme={null}
838enterprise-plugin/913enterprise-plugin/
844│ └── pdf-processor/919│ └── pdf-processor/
845│ ├── SKILL.md920│ ├── SKILL.md
846│ └── scripts/921│ └── scripts/
847├── commands/ # 평면 .md 파일로서의 Skills922├── commands/ # Skills as flat .md files
848│ ├── status.md923│ ├── status.md
849│ └── logs.md924│ └── logs.md
850├── agents/ # Subagent 정의925├── agents/ # Subagent 정의
851│ ├── security-reviewer.md926│ ├── security-reviewer.md
852│ ├── performance-tester.md927│ ├── performance-tester.md
853│ └── compliance-checker.md928│ └── compliance-checker.md
929├── workflows/ # 워크플로우 스크립트
930│ └── release-audit.js
854├── output-styles/ # 출력 스타일 정의931├── output-styles/ # 출력 스타일 정의
855│ └── terse.md932│ └── terse.md
856├── themes/ # 색상 테마 정의933├── themes/ # 색상 테마 정의
858├── monitors/ # 백그라운드 모니터 구성935├── monitors/ # 백그라운드 모니터 구성
859│ └── monitors.json936│ └── monitors.json
860├── hooks/ # Hook 구성937├── hooks/ # Hook 구성
861│ ├── hooks.json # 주 hook 구성938│ ├── hooks.json # 주요 hook 구성
862│ └── security-hooks.json # 추가 hooks939│ └── security-hooks.json # 추가 hooks
863├── bin/ # PATH에 추가된 플러그인 실행 파일940├── bin/ # 플러그인 실행 파일이 PATH에 추가됨
864│ └── my-tool # Bash tool에서 bare 명령어로 호출 가능941│ └── my-tool # Bash 도구에서 명령어로 호출 가능
865├── settings.json # 플러그인의 기본 설정942├── settings.json # 플러그인의 기본 설정
866├── .mcp.json # MCP 서버 정의943├── .mcp.json # MCP 서버 정의
867├── .lsp.json # LSP 서버 구성944├── .lsp.json # LSP 서버 구성
870│ ├── format-code.py947│ ├── format-code.py
871│ └── deploy.js948│ └── deploy.js
872├── LICENSE # 라이선스 파일949├── LICENSE # 라이선스 파일
873└── CHANGELOG.md # 버전 기록950└── CHANGELOG.md # 버전 히스토리
874```951```
875 952
876<Warning>953<Warning>
877 `.claude-plugin/` 디렉토리는 `plugin.json` 파일을 포함합니다. 다른 모든 디렉토리 (commands/, agents/, skills/, output-styles/, themes/, monitors/, hooks/)는 `.claude-plugin/` 내부가 아닌 플러그인 루트에 있어야 합니다.954 `.claude-plugin/` 디렉토리에는 `plugin.json` 파일이 포함됩니다. 다른 모든 디렉토리(commands/, agents/, skills/, workflows/, output-styles/, themes/, monitors/, hooks/)는 `.claude-plugin/` 내부가 아닌 플러그인 루트에 있어야 합니다.
878</Warning>955</Warning>
879 956
880`CLAUDE.md` 파일이 플러그인 루트에 있어도 프로젝트 컨텍스트로 로드되지 않습니다. 플러그인은 `CLAUDE.md`가 아닌 skills, agents, hooks를 통해 컨텍스트를 제공합니다. Claude의 컨텍스트에 로드되는 지침을 제공하려면 [skill](#skills)에 배치하십시오.957플러그인 루트의 `CLAUDE.md` 파일은 프로젝트 컨텍스트로 로드되지 않습니다. 플러그인은 CLAUDE.md가 아닌 skills, agents, hooks를 통해 컨텍스트를 제공합니다. Claude의 컨텍스트에 로드되는 지침을 제공하려면 [skill](#skills)에 배치하십시오.
881 958
882<h3 id="file-locations-reference">959<h3 id="file-locations-reference">
883 파일 위치 참조960 파일 위치 참조
884</h3>961</h3>
885 962
886| 컴포넌트 | 기본 위치 | 목적 |963| 구성 요소 | 기본 위치 | 목적 |
887| :---------------- | :--------------------------- | :---------------------------------------------------------------------------------------------------------------------------- |964| :------------ | :--------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
888| **매니페스트** | `.claude-plugin/plugin.json` | 플러그인 메타데이터 및 구성 (선택사항) |965| **매니페스트** | `.claude-plugin/plugin.json` | 플러그인 메타데이터 및 구성 (선택사항) |
889| **Skills** | `skills/` | `<name>/SKILL.md` 구조의 Skills |966| **Skills** | `skills/` | `<name>/SKILL.md` 구조의 Skills |
890| **Commands** | `commands/` | 평면 마크다운 파일로서의 Skills. 새 플러그인에는 `skills/` 사용 |967| **Commands** | `commands/` | Markdown 파일로서의 Skills. 새 플러그인의 경우 `skills/` 사용 |
891| **Agents** | `agents/` | Subagent 마크다운 파일 |968| **Agents** | `agents/` | Subagent Markdown 파일 |
892| **Output styles** | `output-styles/` | 출력 스타일 정의 |969| **Workflows** | `workflows/` | [Workflow](/docs/ko/workflows) 스크립트 파일 |
893| **Themes** | `themes/` | 색상 테마 정의 |970| **출력 스타일** | `output-styles/` | 출력 스타일 정의 |
971| **테마** | `themes/` | 색상 테마 정의 |
894| **Hooks** | `hooks/hooks.json` | Hook 구성 |972| **Hooks** | `hooks/hooks.json` | Hook 구성 |
895| **MCP servers** | `.mcp.json` | MCP 서버 정의 |973| **MCP 서버** | `.mcp.json` | MCP 서버 정의 |
896| **LSP servers** | `.lsp.json` | 언어 서버 구성 |974| **LSP 서버** | `.lsp.json` | 언어 서버 구성 |
897| **Monitors** | `monitors/monitors.json` | 백그라운드 모니터 구성 |975| **모니터** | `monitors/monitors.json` | 백그라운드 모니터 구성 |
898| **Executables** | `bin/` | Bash tool의 `PATH`에 추가된 실행 파일. 여기의 파일은 플러그인이 활성화된 동안 모든 Bash tool 호출에서 bare 명령어로 호출 가능 |976| **실행 파일** | `bin/` | Bash 도구의 `PATH`에 추가되고 플러그인이 활성화된 동안 명령어로 호출 가능한 실행 파일. [Claude.ai 조직 설정을 통해 배포하는 플러그인에는 이 디렉토리를 포함할 수 없습니다](/docs/ko/plugin-marketplaces#keep-executables-out-of-the-top-level-bin-directory) |
899| **Settings** | `settings.json` | 플러그인이 활성화될 때 적용되는 기본 구성. 현재 [`agent`](/docs/ko/sub-agents) 및 [`subagentStatusLine`](/docs/ko/statusline#subagent-status-lines) 키만 지원됩니다 |977| **설정** | `settings.json` | 플러그인이 활성화될 때 적용되는 기본 구성. [`agent`](/docs/ko/sub-agents) 및 [`subagentStatusLine`](/docs/ko/statusline#subagent-status-lines) 키만 지원됩니다 |
900 978
901***979***
902 980
904 CLI 명령어 참조982 CLI 명령어 참조
905</h2>983</h2>
906 984
907Claude Code는 스크립팅 및 자동화에 유용한 비대화형 플러그인 관리를 위한 CLI 명령어를 제공합니다.985Claude Code는 비대화형 플러그인 관리를 위한 CLI 명령어를 제공하며, 스크립팅 및 자동화에 유용합니다.
908 986
909<h3 id="plugin-init">987<h3 id="plugin-init">
910 plugin init988 plugin init
911</h3>989</h3>
912 990
913`~/.claude/skills/<name>/`에서 새 플러그인을 스캐폴드합니다. 다음 Claude Code 세션에서 `<name>@skills-dir`으로 자동으로 로드되고 설치 단계 없이 `/plugin` 및 `claude plugin list`에 나타납니다.991`~/.claude/skills/<name>/`에 새 플러그인을 스캐폴드합니다. 다음 Claude Code 세션에서 `<name>@skills-dir`로 자동으로 로드되며 `/plugin` 및 `claude plugin list`에 설치 단계 없이 나타납니다.
914 992
915[Skills-directory 플러그인](#skills-directory-plugins)에서 범위 및 신뢰 요구 사항을 참조하세요.993범위 및 신뢰 요구사항은 [Skills-directory plugins](#skills-directory-plugins)를 참조하십시오.
916 994
917```bash theme={null}995```bash theme={null}
918claude plugin init <name> [options]996claude plugin init <name> [options]
920 998
921**인수:**999**인수:**
922 1000
923* `<name>`: 플러그인 이름. skill 네임스페이스 및 `~/.claude/skills/` 아래의 디렉토리 이름이 되므로 공백이나 경로 구분자를 포함할 수 없습니다.1001* `<name>`: 플러그인 이름입니다. 스킬 네임스페이스 및 `~/.claude/skills/` 아래의 디렉터리 이름이 되므로 공백이나 경로 구분자를 포함할 수 없습니다.
924 1002
925**옵션:**1003**옵션:**
926 1004
930| `--author <name>` | 작성자 이름 | `git config user.name` |1008| `--author <name>` | 작성자 이름 | `git config user.name` |
931| `--author-email <email>` | 작성자 이메일 | `git config user.email` |1009| `--author-email <email>` | 작성자 이메일 | `git config user.email` |
932| `--with <components...>` | 컴포넌트 폴더도 스캐폴드합니다. 유효한 값: `skills`, `agents`, `hooks`, `mcp`, `lsp`, `output-style`, `channel` | |1010| `--with <components...>` | 컴포넌트 폴더도 스캐폴드합니다. 유효한 값: `skills`, `agents`, `hooks`, `mcp`, `lsp`, `output-style`, `channel` | |
933| `-f, --force` | 대상의 기존 `.claude-plugin/` 덮어쓰기 | |1011| `-f, --force` | 대상의 기존 `.claude-plugin/`을 덮어씁니다 | |
934| `-h, --help` | 명령어 도움말 표시 | |1012| `-h, --help` | 명령어에 대한 도움말을 표시합니다 | |
935 1013
936**별칭:** `new`1014**별칭:** `new`
937 1015
938각 `--with` 값은 해당 컴포넌트에 대한 스타터 파일을 추가하여 편집할 준비가 됩니다:1016각 `--with` 값은 해당 컴포넌트에 대한 스타터 파일을 추가하며, 편집할 준비가 되어 있습니다:
939 1017
940| 컴포넌트 | 스캐폴드하는 것 |1018| 컴포넌트 | 스캐폴드되는 항목 |
941| :------------- | :-------------------------------------------------------------------------------------- |1019| :------------- | :-------------------------------------------------------------------------------------- |
942| `skills` | 기본 skill과 함께 추가 네임스페이스 `<name>:example` skill |1020| `skills` | 기본 스킬과 함께 추가 네임스페이스 `<name>:example` 스킬 |
943| `agents` | `agents/` subagent 정의 |1021| `agents` | `agents/` 서브에이전트 정의 |
944| `hooks` | 샘플 이벤트 핸들러가 있는 `hooks/hooks.json` |1022| `hooks` | 샘플 이벤트 핸들러가 포함된 `hooks/hooks.json` |
945| `mcp` | HTTP 및 stdio 서버 예시가 있는 `.mcp.json` |1023| `mcp` | HTTP 및 stdio 서버 예제가 포함된 `.mcp.json` |
946| `lsp` | 언어 서버 예시가 있는 `.lsp.json` |1024| `lsp` | `.lsp.json` 언어 서버 예제 |
947| `output-style` | 플러그인이 활성화된 동안 자동으로 적용되는 `output-styles/<name>.md` |1025| `output-style` | 플러그인이 활성화된 동안 자동으로 적용되는 `output-styles/<name>.md` |
948| `channel` | MCP 기반 [channel](/docs/ko/channels): stdio 서버 (`server.ts`), 해당 `.mcp.json` 및 `package.json` |1026| `channel` | MCP 기반 [channel](/docs/ko/channels): stdio 서버(`server.ts`), 해당 `.mcp.json`, 및 `package.json` |
949 1027
950스캐폴드된 플러그인은 마켓플레이스가 아닌 `@skills-dir` 소스를 사용합니다. 관리자는 [관리되는 설정](/docs/ko/plugin-marketplaces#managed-marketplace-restrictions)에서 `strictKnownMarketplaces`로 이 소스를 차단하거나 `blockedMarketplaces`에 `{"source": "skills-dir"}`을 추가할 수 있습니다. 차단되면 `plugin init`은 작성하기 전에 실패합니다.1028스캐폴드된 플러그인은 마켓플레이스가 아닌 `@skills-dir` 소스를 사용합니다. 관리자는 `strictKnownMarketplaces`를 사용하거나 [관리 설정](/docs/ko/plugin-marketplaces#managed-marketplace-restrictions)의 `blockedMarketplaces`에 `{"source": "skills-dir"}`을 추가하여 이 소스를 차단할 수 있습니다. 차단되면 `plugin init`은 작성하기 전에 실패합니다.
951 1029
952**예시:**1030**예제:**
953 1031
954```bash theme={null}1032```bash theme={null}
955# 최소 플러그인 스캐폴드1033# 최소 플러그인 스캐폴드
956claude plugin init my-helper1034claude plugin init my-helper
957 1035
958# skill 및 hook 폴더로 스캐폴드1036# 스킬 및 훅 폴더를 포함하여 스캐폴드
959claude plugin init my-helper --with skills hooks1037claude plugin init my-helper --with skills hooks
960 1038
961# 기존 스캐폴드 덮어쓰기1039# 기존 스캐폴드 덮어쓰기
979**옵션:**1057**옵션:**
980 1058
981| 옵션 | 설명 | 기본값 |1059| 옵션 | 설명 | 기본값 |
982| :-------------------- | :---------------------------------- | :----- |1060| :--------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----- |
983| `-s, --scope <scope>` | 설치 범위: `user`, `project` 또는 `local` | `user` |1061| `-s, --scope <scope>` | 설치 범위: `user`, `project`, 또는 `local` | `user` |
984| `-h, --help` | 명령어 도움말 표시 | |1062| `--config <key=value>` | 플러그인의 매니페스트에 선언된 [`userConfig`](#user-configuration) 옵션을 설정합니다. 여러 옵션을 설정하려면 플래그를 반복합니다 | |
1063| `-y, --yes` | 확인 프롬프트 없이 플러그인의 마켓플레이스가 선언한 명령어를 수락합니다: [`command` source](/docs/ko/plugin-marketplaces#command-sources)를 사용하는 플러그인을 생성하는 명령어 또는 아카이브 다운로드를 인증하는 [`headersHelper`](/docs/ko/plugin-marketplaces#authenticate-archive-downloads). `headersHelper`를 수락하려면 Claude Code v2.1.238 이상이 필요합니다. Claude Code는 여전히 명령어를 먼저 인쇄합니다. stdin 또는 stdout이 TTY가 아닐 때 필수입니다. Claude Code 세션 내에서는 효과가 없으므로 자신의 터미널에서 명령어를 실행하십시오 | |
1064| `-h, --help` | 명령어에 대한 도움말을 표시합니다 | |
985 1065
986범위는 설치된 플러그인이 추가되는 설정 파일을 결정합니다. 예를 들어 `--scope project`는 `.claude/settings.json`의 `enabledPlugins`에 쓰므로 프로젝트 저장소를 복제하는 모든 사람이 플러그인을 사용할 수 있습니다.1066범위는 설치된 플러그인이 추가되는 설정 파일을 결정합니다. 예를 들어 `--scope project`는 .claude/settings.json의 `enabledPlugins`에 작성하여 프로젝트 저장소를 복제하는 모든 사람이 플러그인을 사용할 수 있도록 합니다.
987 1067
988**예시:**1068**예제:**
989 1069
990```bash theme={null}1070```bash theme={null}
991# 사용자 범위에 설치 (기본값)1071# 사용자 범위에 설치(기본값)
992claude plugin install formatter@my-marketplace1072claude plugin install formatter@my-marketplace
993 1073
994# 프로젝트 범위에 설치 (팀과 공유)1074# 프로젝트 범위에 설치(팀과 공유)
995claude plugin install formatter@my-marketplace --scope project1075claude plugin install formatter@my-marketplace --scope project
996 1076
997# 로컬 범위에 설치 (gitignored)1077# 로컬 범위에 설치(팀과 공유하지 않음)
998claude plugin install formatter@my-marketplace --scope local1078claude plugin install formatter@my-marketplace --scope local
999```1079```
1000 1080
1015**옵션:**1095**옵션:**
1016 1096
1017| 옵션 | 설명 | 기본값 |1097| 옵션 | 설명 | 기본값 |
1018| :-------------------- | :--------------------------------------------------------------------- | :----- |1098| :-------------------- | :------------------------------------------------------------------- | :----- |
1019| `-s, --scope <scope>` | 범위에서 제거: `user`, `project` 또는 `local` | `user` |1099| `-s, --scope <scope>` | 범위에서 제거: `user`, `project`, 또는 `local` | `user` |
1020| `--keep-data` | 플러그인의 [영구 데이터 디렉토리](#persistent-data-directory) 유지 | |1100| `--keep-data` | 플러그인의 [persistent data directory](#persistent-data-directory)를 보존합니다 | |
1021| `--prune` | 다른 플러그인이 필요로 하지 않는 자동 설치된 종속성도 제거합니다. [plugin prune](#plugin-prune) 참조 | |1101| `--prune` | 다른 플러그인이 필요하지 않은 자동 설치된 종속성도 제거합니다. [plugin prune](#plugin-prune) 참조 | |
1022| `-y, --yes` | `--prune` 확인 프롬프트 건너뛰기. stdin이 TTY가 아닐 때 필수 | |1102| `-y, --yes` | `--prune` 확인 프롬프트를 건너뜁니다. stdin 또는 stdout이 TTY가 아닐 때 필수입니다 | |
1023| `-h, --help` | 명령어 도움말 표시 | |1103| `-h, --help` | 명령어에 대한 도움말을 표시합니다 | |
1024 1104
1025**별칭:** `remove`, `rm`1105**별칭:** `remove`, `rm`
1026 1106
1027기본적으로 마지막 남은 범위에서 제거하면 플러그인의 `${CLAUDE_PLUGIN_DATA}` 디렉토리도 삭제됩니다. 새 버전 테스트 후 재설치할 때와 같이 유지하려면 `--keep-data`를 사용하세요.1107기본적으로 마지막 남은 범위에서 제거하면 플러그인의 `${CLAUDE_PLUGIN_DATA}` 디렉터리도 삭제됩니다. `--keep-data`를 사용하여 보존하십시오. 예를 들어 새 버전 테스트 후 재설치할 때입니다.
1108
1109<Note>
1110 다른 마켓플레이스의 설치된 플러그인이 이름을 공유할 때, `plugin-name@marketplace-name` 형식은 명명된 마켓플레이스의 플러그인만 제거합니다. v2.1.212 이전에는 정규화된 형식이 다른 마켓플레이스의 동일한 이름의 플러그인과 일치하여 제거할 수 있었습니다.
1111</Note>
1028 1112
1029<h3 id="plugin-prune">1113<h3 id="plugin-prune">
1030 plugin prune1114 plugin prune
1031</h3>1115</h3>
1032 1116
1033더 이상 설치된 플러그인에서 필요로 하지 않는 자동 설치된 플러그인 종속성을 제거합니다. Claude Code가 다른 플러그인의 [`dependencies`](/docs/ko/plugin-dependencies) 필드를 만족하기 위해 가져온 종속성은 제거되며, 직접 설치한 플러그인은 절대 건드리지 않습니다.1117더 이상 설치된 플러그인이 필요하지 않은 자동 설치된 플러그인 종속성을 제거합니다. Claude Code가 다른 플러그인의 [`dependencies`](/docs/ko/plugin-dependencies) 필드를 충족하기 위해 가져온 종속성이 제거됩니다. 직접 설치한 플러그인은 절대 건드리지 않습니다.
1034 1118
1035```bash theme={null}1119```bash theme={null}
1036claude plugin prune [options]1120claude plugin prune [options]
1039**옵션:**1123**옵션:**
1040 1124
1041| 옵션 | 설명 | 기본값 |1125| 옵션 | 설명 | 기본값 |
1042| :-------------------- | :------------------------------------ | :----- |1126| :-------------------- | :----------------------------------------------- | :----- |
1043| `-s, --scope <scope>` | 범위에서 정리: `user`, `project` 또는 `local` | `user` |1127| `-s, --scope <scope>` | 범위에서 정리: `user`, `project`, 또는 `local` | `user` |
1044| `--dry-run` | 제거될 항목을 나열하되 실제로 제거하지 않음 | |1128| `--dry-run` | 제거하지 않고 제거될 항목을 나열합니다 | |
1045| `-y, --yes` | 확인 프롬프트 건너뛰기. stdin이 TTY가 아닐 때 필수 | |1129| `-y, --yes` | 확인 프롬프트를 건너뜁니다. stdin 또는 stdout이 TTY가 아닐 때 필수입니다 | |
1046| `-h, --help` | 명령어 도움말 표시 | |1130| `-h, --help` | 명령어에 대한 도움말을 표시합니다 | |
1047 1131
1048**별칭:** `autoremove`1132**별칭:** `autoremove`
1049 1133
1050명령어는 고아 종속성을 나열하고 제거하기 전에 확인을 요청합니다. 플러그인을 제거하고 한 단계에서 종속성을 정리하려면 `claude plugin uninstall <plugin> --prune`을 실행하세요.1134명령어는 고아 종속성을 나열하고 제거하기 전에 확인을 요청합니다. 플러그인을 제거하고 한 단계에서 종속성을 정리하려면 `claude plugin uninstall <plugin> --prune`을 실행하십시오.
1051
1052<Note>
1053 `claude plugin prune`은 Claude Code v2.1.121 이상이 필요합니다.
1054</Note>
1055 1135
1056<h3 id="plugin-enable">1136<h3 id="plugin-enable">
1057 plugin enable1137 plugin enable
1058</h3>1138</h3>
1059 1139
1060비활성화된 플러그인을 활성화합니다. 플러그인이 [종속성](/docs/ko/plugin-dependencies)을 선언하면 Claude Code는 동일한 범위에서 이들을 전이적으로 활성화하며, 종속성이 설치되지 않으면 명령어가 실패합니다.1140비활성화된 플러그인을 활성화합니다. 대상이 마켓플레이스에서 설치되고 [dependencies](/docs/ko/plugin-dependencies)를 선언할 때, Claude Code는 동일한 범위에서 이들을 전이적으로 활성화합니다. 명령어는 [Enable or disable a plugin with dependencies](/docs/ko/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies)가 나열하는 조건에서 실패합니다.
1061 1141
1062```bash theme={null}1142```bash theme={null}
1063claude plugin enable <plugin> [options]1143claude plugin enable <plugin> [options]
1070**옵션:**1150**옵션:**
1071 1151
1072| 옵션 | 설명 | 기본값 |1152| 옵션 | 설명 | 기본값 |
1073| :-------------------- | :------------------------------------ | :----- |1153| :-------------------- | :---------------------------------------------------------------------------- | :---- |
1074| `-s, --scope <scope>` | 활성화할 범위: `user`, `project` 또는 `local` | `user` |1154| `-s, --scope <scope>` | 활성화할 범위: `user`, `project`, 또는 `local`. 생략하면 Claude Code는 플러그인이 설치된 범위를 감지합니다 | 자동 감지 |
1075| `-h, --help` | 명령어 도움말 표시 | |1155| `-h, --help` | 명령어에 대한 도움말을 표시합니다 | |
1076 1156
1077<h3 id="plugin-disable">1157<h3 id="plugin-disable">
1078 plugin disable1158 plugin disable
1079</h3>1159</h3>
1080 1160
1081플러그인을 제거하지 않고 비활성화합니다. 다른 활성화된 플러그인이 대상에 [종속되어](/docs/ko/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies) 있으면 실패합니다. 오류 메시지에는 먼저 모든 종속 플러그인을 비활성화하는 연쇄 명령어가 포함됩니다.1161플러그인을 제거하지 않고 비활성화합니다. 대상이 마켓플레이스에서 설치될 때, 다른 활성화된 플러그인이 [depends on](/docs/ko/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies) 하면 명령어가 실패합니다. 오류 메시지에는 먼저 모든 종속성을 비활성화하는 연결된 명령어가 포함됩니다.
1082 1162
1083```bash theme={null}1163```bash theme={null}
1084claude plugin disable <plugin> [options]1164claude plugin disable [plugin] [options]
1085```1165```
1086 1166
1087**인수:**1167**인수:**
1088 1168
1089* `<plugin>`: 플러그인 이름 또는 `plugin-name@marketplace-name`1169* `[plugin]`: 플러그인 이름 또는 `plugin-name@marketplace-name`. `--all`을 사용할 때 선택 사항입니다.
1090 1170
1091**옵션:**1171**옵션:**
1092 1172
1093| 옵션 | 설명 | 기본값 |1173| 옵션 | 설명 | 기본값 |
1094| :-------------------- | :------------------------------------- | :----- |1174| :-------------------- | :----------------------------------------------------------------------------- | :---- |
1095| `-s, --scope <scope>` | 비활성화할 범위: `user`, `project` 또는 `local` | `user` |1175| `-a, --all` | 모든 활성화된 플러그인을 비활성화합니다. `--scope`와 결합할 수 없습니다 | |
1096| `-h, --help` | 명령어 도움말 표시 | |1176| `-s, --scope <scope>` | 비활성화할 범위: `user`, `project`, 또는 `local`. 생략하면 Claude Code는 플러그인이 설치된 범위를 감지합니다 | 자동 감지 |
1177| `-h, --help` | 명령어에 대한 도움말을 표시합니다 | |
1097 1178
1098<h3 id="plugin-update">1179<h3 id="plugin-update">
1099 plugin update1180 plugin update
1112**옵션:**1193**옵션:**
1113 1194
1114| 옵션 | 설명 | 기본값 |1195| 옵션 | 설명 | 기본값 |
1115| :-------------------- | :------------------------------------------------ | :----- |1196| :-------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----- |
1116| `-s, --scope <scope>` | 업데이트할 범위: `user`, `project`, `local` 또는 `managed` | `user` |1197| `-s, --scope <scope>` | 업데이트할 범위: `user`, `project`, `local`, 또는 `managed` | `user` |
1117| `-h, --help` | 명령어 도움말 표시 | |1198| `-y, --yes` | 확인 프롬프트 없이 플러그인의 마켓플레이스가 선언한 명령어를 수락합니다: [`command` source](/docs/ko/plugin-marketplaces#command-sources)를 사용하는 플러그인을 생성하는 명령어 또는 아카이브 다운로드를 인증하는 [`headersHelper`](/docs/ko/plugin-marketplaces#authenticate-archive-downloads). `headersHelper`를 수락하려면 Claude Code v2.1.238 이상이 필요합니다. Claude Code는 여전히 명령어를 먼저 인쇄합니다. stdin 또는 stdout이 TTY가 아닐 때 필수입니다. Claude Code 세션 내에서는 효과가 없으므로 자신의 터미널에서 명령어를 실행하십시오 | |
1199| `-h, --help` | 명령어에 대한 도움말을 표시합니다 | |
1200
1201<Note>
1202 Claude Code는 설치된 플러그인에 대해 베어 플러그인 이름을 확인합니다. 다른 마켓플레이스의 설치된 플러그인이 이름을 공유할 때, Claude Code는 업데이트를 거부하고 대신 실행할 정규화된 `plugin-name@marketplace-name` 명령어를 나열합니다. v2.1.246 이전에는 Claude Code가 정규화된 형식만 수락하고 베어 이름을 찾을 수 없는 것으로 거부했습니다.
1203</Note>
1118 1204
1119***1205***
1120 1206
1131**옵션:**1217**옵션:**
1132 1218
1133| 옵션 | 설명 | 기본값 |1219| 옵션 | 설명 | 기본값 |
1134| :------------ | :----------------------------------- | :-- |1220| :------------ | :-------------------------------------- | :-- |
1135| `--json` | JSON으로 출력 | |1221| `--json` | JSON으로 출력합니다 | |
1136| `--available` | 마켓플레이스에서 사용 가능한 플러그인 포함. `--json` 필요 | |1222| `--available` | 마켓플레이스의 사용 가능한 플러그인을 포함합니다. `--json` 필요 | |
1137| `-h, --help` | 명령어 도움말 표시 | |1223| `-h, --help` | 명령어에 대한 도움말을 표시합니다 | |
1224
1225대화형 세션 내에서 `/plugin list`는 유사한 목록을 인라인으로 인쇄하지만, 마켓플레이스 설치 플러그인만 포함합니다:
1138 1226
1139대화형 세션 내에서 `/plugin list`는 동일한 목록을 인라인으로 출력합니다. 대화형 형식은 `--enabled` 또는 `--disabled`를 허용하여 해당 상태의 플러그인만 표시하며, `ls`를 `list`의 약자로 사용합니다.1227* 스킬 디렉터리에서 로드된 플러그인은 `/plugin` 인터페이스 및 `claude plugin list`에 나타나지만 인라인 `/plugin list` 출력에는 나타나지 않습니다.
1228* Claude Code v2.1.239 이상에서 [claude.ai에서 동기화된 플러그인](#synced-plugins)은 동기화된 세션이 다운로드한 환경에서 `claude plugin list`를 실행할 때 나타납니다. 인라인 `/plugin list` 출력에는 나타나지 않습니다.
1229* `--plugin-dir` 또는 `--plugin-url`로 세션에 로드된 플러그인은 `/plugin` 인터페이스에 나타나며, `claude --plugin-dir <dir> plugin list`와 같이 동일한 플래그가 서브명령어 앞에 올 때만 `claude plugin list`에 나타납니다. 플래그 이름만 위치를 지정하므로 베어 `claude plugin list`는 동기화된 플러그인 및 스킬 디렉터리 플러그인과 달리 고정 디렉터리를 스캔하는 Claude Code를 찾을 수 없습니다.
1230
1231대화형 형식은 `--enabled` 또는 `--disabled`를 수락하여 해당 상태의 플러그인만 표시하고, `ls`를 `list`의 약자로 수락합니다.
1140 1232
1141<h3 id="plugin-details">1233<h3 id="plugin-details">
1142 plugin details1234 plugin details
1143</h3>1235</h3>
1144 1236
1145플러그인의 컴포넌트 인벤토리 및 예상 토큰 비용을 표시합니다. 출력은 플러그인이 기여하는 모든 컴포넌트를 Skills, Agents, Hooks, MCP 서버 및 LSP 서버로 그룹화하여 나열하며, 각 세션에 추가되는 토큰 수의 추정치를 함께 표시합니다. Skills 그룹에는 `skills/` 및 `commands/` 항목이 모두 포함됩니다.1237플러그인의 컴포넌트 인벤토리 및 예상 토큰 비용을 표시합니다. 출력은 플러그인이 기여하는 모든 컴포넌트를 Skills, Agents, Hooks, MCP servers, 및 LSP servers로 그룹화하여 나열하며, 각 세션에 추가하는 토큰 수의 추정치를 포함합니다. Skills 그룹에는 `skills/` 및 `commands/` 항목이 모두 포함됩니다.
1146 1238
1147```bash theme={null}1239```bash theme={null}
1148claude plugin details <name>1240claude plugin details <name>
1155**옵션:**1247**옵션:**
1156 1248
1157| 옵션 | 설명 | 기본값 |1249| 옵션 | 설명 | 기본값 |
1158| :----------- | :--------- | :-- |1250| :----------- | :----------------- | :-- |
1159| `-h, --help` | 명령어 도움말 표시 | |1251| `-h, --help` | 명령어에 대한 도움말을 표시합니다 | |
1160 1252
1161출력은 각 컴포넌트에 대해 두 가지 비용 수치를 표시합니다:1253출력은 각 컴포넌트에 대해 두 개의 비용 수치를 표시합니다:
1162 1254
1163* **Always-on:** 컴포넌트가 실행되는지 여부와 관계없이 플러그인의 목록 텍스트(예: 스킬 설명, 에이전트 설명, 명령어 이름)에 의해 모든 세션에 추가되는 토큰입니다.1255* **Always-on:** 스킬 설명, 에이전트 설명, 명령어 이름과 같은 플러그인의 목록 텍스트에 의해 모든 세션에 추가되는 토큰입니다. 어떤 컴포넌트도 실행되지 않는지 여부와 관계없이 추가됩니다.
1164* **On-invoke:** 컴포넌트가 실행될 때 비용이 드는 토큰입니다. 일반적인 세션에서는 컴포넌트의 일부만 호출되므로 플러그인 전체가 아닌 컴포넌트별로 표시됩니다.1256* **On-invoke:** 컴포넌트가 실행될 때 비용이 드는 토큰입니다. 일반적인 세션이 컴포넌트의 부분 집합만 호출하기 때문에 플러그인 전체가 아닌 컴포넌트당 표시됩니다.
1165 1257
1166다음 예시는 두 개의 스킬이 있는 플러그인의 출력 모습을 보여줍니다:1258이 예제는 두 개의 스킬이 있는 플러그인의 출력 모양을 보여줍니다:
1167 1259
1168```1260```
1169dependency-guard 1.2.01261dependency-guard 1.2.0
1173Component inventory1265Component inventory
1174 Skills (2) scan-dependencies, review-changes1266 Skills (2) scan-dependencies, review-changes
1175 Agents (0)1267 Agents (0)
1176 Hooks (1) (harness-only — no model context cost)1268 Hooks (1) SessionStart (harness-only — no model context cost)
1177 MCP servers (0)1269 MCP servers (0)
1178 LSP servers (0)1270 LSP servers (0)
1179 1271
1189 Token counts are estimates and may differ from actual usage.1281 Token counts are estimates and may differ from actual usage.
1190```1282```
1191 1283
1192Always-on 합계는 활성 모델에 대한 `count_tokens` API를 통해 계산됩니다. 컴포넌트별 수치는 해당 합계에서 비례적으로 조정됩니다. API에 연결할 수 없으면 명령어는 문자 기반 추정으로 폴백됩니다.1284always-on 합계는 활성 모델에 대한 `count_tokens` API를 통해 계산됩니다. 컴포넌트별 숫자는 해당 합계에서 비례적으로 확장됩니다. API에 도달할 수 없으면 명령어는 문자 기반 추정으로 폴백합니다.
1285
1286<h3 id="plugin-validate">
1287 plugin validate
1288</h3>
1289
1290플러그인 또는 마켓플레이스를 게시하기 전에 구문 및 스키마 오류를 확인합니다.
1291
1292명령어는 유효성 검사가 통과하면 0으로, 실패하면 1로, 경로를 읽을 수 없는 경우와 같이 유효성 검사 실행 자체가 실패하면 2로 종료됩니다.
1293
1294```bash theme={null}
1295claude plugin validate <path> [options]
1296```
1297
1298**인수:**
1299
1300* `<path>`: 플러그인 디렉터리 또는 마켓플레이스 디렉터리의 경로입니다. 플러그인 실행이 포함하는 파일에 대해서는 [Validate a plugin or a directory without a manifest](/docs/ko/plugin-marketplaces#validate-a-plugin-or-a-directory-without-a-manifest)를 참조하십시오.
1301
1302**옵션:**
1303
1304| 옵션 | 설명 | 기본값 |
1305| :----------- | :-------------------------------------------------------------------------------------------------------- | :-- |
1306| `--strict` | 경고를 오류로 취급하고 경고에서 1로 종료합니다. CI에서 사용하여 [unrecognized fields](#unrecognized-fields)와 같이 런타임이 허용하는 문제를 포착합니다 | |
1307| `--json` | 유효성 검사 보고서를 동일한 종료 코드를 가진 하나의 JSON 객체로 출력합니다. Claude Code v2.1.259 이상 필요 | |
1308| `-h, --help` | 명령어에 대한 도움말을 표시합니다 | |
1309
1310`--json`을 사용하면 Claude Code는 보고서를 stdout에 다음 최상위 필드를 가진 하나의 JSON 객체로 작성합니다:
1311
1312* `success`: 종료 코드가 제공하는 동일한 판정
1313* `strict`: 실행이 경고를 오류로 취급했는지 여부
1314* `target`: Claude Code가 유효성을 검사한 확인된 경로
1315* `manifest`: 매니페스트 자체의 결과 또는 [run without a manifest](/docs/ko/plugin-marketplaces#validate-a-plugin-or-a-directory-without-a-manifest)의 경우 `null`
1316* `contents`: 파일별 결과, 각각 `file`을 명명하고 `errors`, `warnings`, 및 `notes` 배열을 포함합니다
1317
1318종료 2에서 명령어는 stdout에 아무것도 작성하지 않습니다. 오류 메시지는 stderr로 이동합니다.
1319
1320대화형 세션 내에서 `/plugin validate <path>`는 동일한 검사를 인라인으로 실행합니다.
1193 1321
1194<h3 id="plugin-tag">1322<h3 id="plugin-tag">
1195 plugin tag1323 plugin tag
1196</h3>1324</h3>
1197 1325
1198현재 디렉토리의 플러그인에 대한 릴리스 git 태그를 생성합니다. 플러그인의 폴더 내에서 실행하세요. [플러그인 릴리스 태그 지정](/docs/ko/plugin-dependencies#tag-plugin-releases-for-version-resolution)을 참조하세요.1326플러그인에 대한 릴리스 git 태그를 생성합니다. 기본적으로 명령어는 현재 디렉터리의 플러그인에 태그를 지정합니다. 다른 곳의 플러그인에 태그를 지정하려면 경로를 전달합니다. [Tag plugin releases](/docs/ko/plugin-dependencies#tag-plugin-releases-for-version-resolution)를 참조하십시오.
1199 1327
1200```bash theme={null}1328```bash theme={null}
1201claude plugin tag [options]1329claude plugin tag [path] [options]
1202```1330```
1203 1331
1332**인수:**
1333
1334* `[path]`: 플러그인 디렉터리의 경로입니다. 기본값은 현재 디렉터리입니다.
1335
1204**옵션:**1336**옵션:**
1205 1337
1206| 옵션 | 설명 | 기본값 |1338| 옵션 | 설명 | 기본값 |
1207| :------------ | :----------------------------- | :-- |1339| :-------------------- | :------------------------------------ | :------- |
1208| `--push` | 태그를 생성한 후 원격으로 푸시 | |1340| `--push` | 태그를 생성한 후 원격으로 푸시합니다 | |
1209| `--dry-run` | 태그를 생성하지 않고 태그 지정될 내용 출력 | |1341| `--dry-run` | 태그를 생성하지 않고 태그될 항목을 인쇄합니다 | |
1210| `-f, --force` | 작업 트리가 더티하거나 태그가 이미 존재해도 태그 생성 | |1342| `-f, --force` | 작업 트리가 더티하거나 태그가 이미 존재하더라도 태그를 생성합니다 | |
1211| `-h, --help` | 명령어 도움말 표시 | |1343| `-m, --message <msg>` | 태그 주석 메시지입니다. 버전의 자리 표시자로 `%s`를 사용합니다 | |
1344| `--remote <name>` | `--push`로 푸시할 원격입니다 | `origin` |
1345| `-h, --help` | 명령어에 대한 도움말을 표시합니다 | |
1212 1346
1213***1347***
1214 1348
1220 디버깅 명령어1354 디버깅 명령어
1221</h3>1355</h3>
1222 1356
1223`claude --debug`를 사용하여 플러그인 로딩 세부 정보를 확인하세요:1357`claude --debug`를 사용하여 플러그인 로딩 세부 정보를 확인합니다:
1224 1358
1225이는 다음을 표시합니다:1359다음을 표시합니다:
1226 1360
1227* 로드되는 플러그인1361* 로드되는 플러그인
1228* 플러그인 매니페스트의 오류1362* 플러그인 매니페스트의 오류
1229* Skill, agent 및 hook 등록1363* Skill, agent, hook 등록
1230* MCP 서버 초기화1364* MCP 서버 초기화
1231 1365
1232<h3 id="common-issues">1366<h3 id="common-issues">
1233 일반적인 문제1367 일반적인 문제
1234</h3>1368</h3>
1235 1369
1236| 문제 | 원인 | 해결책 |1370| 문제 | 원인 | 해결 방법 |
1237| :---------------------------------- | :------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------- |1371| :---------------------------------- | :------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1238| 플러그인이 로드되지 않음 | 잘못된 `plugin.json` | `claude plugin validate` 또는 `/plugin validate`를 실행하여 `plugin.json`, skill/agent/command frontmatter 및 `hooks/hooks.json`의 구문 및 스키마 오류 확인 |1372| 플러그인이 로드되지 않음 | 잘못된 `plugin.json` | `claude plugin validate ./my-plugin` 또는 `/plugin validate ./my-plugin`을 실행합니다. 여기서 `./my-plugin`은 플러그인 디렉토리이며, `plugin.json`, `hooks/hooks.json`, 플러그인의 기본 디렉토리에 있는 skills, agents, commands의 frontmatter에서 구문 및 스키마 오류를 확인합니다. 실행 범위에 대해서는 [플러그인 또는 매니페스트 없는 디렉토리 검증](/docs/ko/plugin-marketplaces#validate-a-plugin-or-a-directory-without-a-manifest)을 참조하십시오 |
1239| Skills가 나타나지 않음 | 잘못된 디렉토리 구조 | `skills/` 또는 `commands/`가 플러그인 루트에 있는지 확인, `.claude-plugin/` 내부가 아님 |1373| Skills가 나타나지 않음 | 잘못된 디렉토리 구조 | `skills/` 또는 `commands/`가 플러그인 루트에 있는지 확인하고, `.claude-plugin/` 내부에 있지 않은지 확인합니다 |
1240| Hooks가 실행되지 않음 | 스크립트가 실행 가능하지 않음 | `chmod +x script.sh` 실행 |1374| Hooks가 실행되지 않음 | 스크립트가 실행 가능하지 않음 | `chmod +x script.sh`를 실행합니다 |
1241| MCP 서버 실패 | `${CLAUDE_PLUGIN_ROOT}` 누락 | 모든 플러그인 경로에 변수 사용 |1375| MCP 서버 실패 | `${CLAUDE_PLUGIN_ROOT}` 누락 | 모든 플러그인 경로에 변수를 사용합니다 |
1242| 경로 오류 | 절대 경로 사용됨 | 모든 경로는 상대적이어야 하며 `./`로 시작해야 함 |1376| 경로 오류 | 절대 경로 사용됨 | 경로를 상대 경로로 변경하고 `./`로 시작합니다. [경로 동작 규칙](#path-behavior-rules)을 참조하십시오. 이는 `skills` 필드의 `"."` 예외를 다룹니다 |
1243| LSP `Executable not found in $PATH` | 언어 서버가 설치되지 않음 | 바이너리 설치 (예: `npm install -g typescript-language-server typescript`) |1377| LSP `Executable not found in $PATH` | 언어 서버가 설치되지 않음 | 바이너리를 설치합니다 (예: `npm install -g typescript-language-server typescript`) |
1244 1378
1245<h3 id="example-error-messages">1379<h3 id="example-error-messages">
1246 예시 오류 메시지1380 예제 오류 메시지
1247</h3>1381</h3>
1248 1382
1249**매니페스트 검증 오류**:1383**매니페스트 검증 오류**:
1250 1384
1251* `Invalid JSON syntax: Unexpected token } in JSON at position 142`: 누락된 쉼표, 추가 쉼표 또는 따옴표 없는 문자열 확인1385* `Invalid JSON syntax: Unexpected token } in JSON at position 142`: 누락된 쉼표, 추가 쉼표 또는 따옴표 없는 문자열이 있는지 확인합니다
1252* `Plugin has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Required`: 필수 필드가 누락됨1386* `Plugin <name> has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Invalid input: expected string, received undefined`: 필수 필드가 누락되었습니다
1253* `Plugin has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...`: JSON 구문 오류1387* `Plugin <name> has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...`: JSON 구문 오류입니다. v2.1.246 이전에는 Claude Code가 UTF-8로 저장되고 선행 바이트 순서 표시(BOM)가 있는 `plugin.json`에 대해서도 이 오류를 생성했습니다. JSON이 다른 방식으로는 유효했더라도 말입니다.
1254 1388
1255**플러그인 로딩 오류**:1389**플러그인 로딩 오류**:
1256 1390
1257* `Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.`: 명령어 경로가 존재하지만 유효한 명령어 파일이 없음1391* `Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.`: 명령 경로가 존재하지만 유효한 명령 파일이 포함되지 않습니다
1258* `Plugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.`: marketplace.json의 `source` 경로가 존재하지 않는 디렉토리를 가리킴1392* `Plugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.`: marketplace.json의 `source` 경로가 존재하지 않는 디렉토리를 가리킵니다
1259* `Plugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.`: 중복 컴포넌트 정의 제거 또는 marketplace 항목에서 `strict: false` 제거1393* `Plugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.`: 중복 구성 요소 정의를 제거하거나 marketplace 항목에서 `strict: false`를 제거합니다
1260 1394
1261<h3 id="hook-troubleshooting">1395<h3 id="hook-troubleshooting">
1262 Hook 문제 해결1396 Hook 문제 해결
1264 1398
1265**Hook 스크립트가 실행되지 않음**:1399**Hook 스크립트가 실행되지 않음**:
1266 1400
12671. 스크립트가 실행 가능한지 확인: `chmod +x ./scripts/your-script.sh`14011. 스크립트가 실행 가능한지 확인합니다: `chmod +x ./scripts/your-script.sh`
12682. shebang 라인 확인: 첫 번째 줄은 `#!/bin/bash` 또는 `#!/usr/bin/env bash`여야 함14022. shebang 줄을 확인합니다: 첫 번째 줄은 `#!/bin/bash` 또는 `#!/usr/bin/env bash`여야 합니다
12693. 경로가 `${CLAUDE_PLUGIN_ROOT}` 사용하는지 확인: `"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/your-script.sh"`14033. 경로가 `${CLAUDE_PLUGIN_ROOT}`를 사용하는지 확인합니다: `"command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/your-script.sh"`
12704. 스크립트를 수동으로 테스트: `./scripts/your-script.sh`14044. 스크립트를 수동으로 테스트합니다: `./scripts/your-script.sh`
1271 1405
1272**Hook이 예상 이벤트에서 트리거되지 않음**:1406**Hook이 예상 이벤트에서 트리거되지 않음**:
1273 1407
12741. 이벤트 이름이 올바른지 확인 (대소문자 구분): `PostToolUse`, `postToolUse` 아님14081. 이벤트 이름이 올바른지 확인합니다 (대소문자 구분): `postToolUse`가 아닌 `PostToolUse`
12752. 매처 패턴이 도구와 일치하는지 확인: 파일 작업의 경우 `"matcher": "Write|Edit"`14092. matcher 패턴이 도구와 일치하는지 확인합니다: 파일 작업의 경우 `"matcher": "Write|Edit"`
12763. Hook 유형이 유효한지 확인: `command`, `http`, `mcp_tool`, `prompt` 또는 `agent`14103. hook 유형이 유효한지 확인합니다: `command`, `http`, `mcp_tool`, `prompt`, 또는 `agent`
1277 1411
1278<h3 id="mcp-server-troubleshooting">1412<h3 id="mcp-server-troubleshooting">
1279 MCP 서버 문제 해결1413 MCP 서버 문제 해결
1281 1415
1282**서버가 시작되지 않음**:1416**서버가 시작되지 않음**:
1283 1417
12841. 명령어가 존재하고 실행 가능한지 확인14181. 명령이 존재하고 실행 가능한지 확인합니다
12852. 모든 경로가 `${CLAUDE_PLUGIN_ROOT}` 변수를 사용하는지 확인14192. 모든 경로가 `${CLAUDE_PLUGIN_ROOT}` 변수를 사용하는지 확인합니다
12863. MCP 서버 로그 확인: `claude --debug`는 초기화 오류를 표시합니다14203. MCP 서버 로그를 확인합니다: `claude --debug`는 초기화 오류를 표시합니다
12874. Claude Code 외부에서 서버를 수동으로 테스트14214. Claude Code 외부에서 서버를 수동으로 테스트합니다
1288 1422
1289**서버 도구가 나타나지 않음**:1423**서버 도구가 나타나지 않음**:
1290 1424
12911. 서버가 `.mcp.json` 또는 `plugin.json`에 올바르게 구성되었는지 확인14251. 서버가 `.mcp.json` 또는 `plugin.json`에서 올바르게 구성되었는지 확인합니다
12922. 서버가 MCP 프로토콜을 올바르게 구현하는지 확인14262. 서버가 MCP 프로토콜을 올바르게 구현하는지 확인합니다
12933. 디버그 출력에서 연결 시간 초과 확인14273. 디버그 출력에서 연결 시간 초과를 확인합니다
1294 1428
1295<h3 id="directory-structure-mistakes">1429<h3 id="directory-structure-mistakes">
1296 디렉토리 구조 실수1430 디렉토리 구조 오류
1297</h3>1431</h3>
1298 1432
1299**증상**: 플러그인이 로드되지만 컴포넌트 (skills, agents, hooks)가 누락됨.1433**증상**: 플러그인이 로드되지만 구성 요소(skills, agents, hooks)가 누락되었습니다.
1300
1301**올바른 구조**: 컴포넌트는 플러그인 루트에 있어야 하며 `.claude-plugin/` 내부가 아닙니다. `plugin.json`만 `.claude-plugin/`에 속합니다.
1302
1303```text theme={null}
1304my-plugin/
1305├── .claude-plugin/
1306│ └── plugin.json ← 매니페스트만 여기
1307├── commands/ ← 루트 수준
1308├── agents/ ← 루트 수준
1309└── hooks/ ← 루트 수준
1310```
1311 1434
1312컴포넌트가 `.claude-plugin/` 내부에 있으면 플러그인 루트로 이동하세요.1435**올바른 구조**: 구성 요소는 플러그인 루트에 있어야 하며, `.claude-plugin/` 내부에 있지 않아야 합니다. `plugin.json`만 `.claude-plugin/`에 속합니다.
1313 1436
1314**디버그 체크리스트**:1437**디버그 체크리스트**:
1315 1438
13161. `claude --debug`를 실행하고 "loading plugin" 메시지를 찾으세요14391. `claude --debug`를 실행하고 "loading plugin" 메시지를 찾습니다
13172. 각 컴포넌트 디렉토리가 디버그 출력에 나열되는지 확인14402. 각 구성 요소 디렉토리가 디버그 출력에 나열되어 있는지 확인합니다
13183. 파일 권한이 플러그인 파일 읽기를 허용하는지 확인14413. 파일 권한이 플러그인 파일 읽기를 허용하는지 확인합니다
1319 1442
1320***1443***
1321 1444
1322<h2 id="distribution-and-versioning-reference">1445<h2 id="distribution-and-versioning-reference">
1323 배포 및 버전 관리 참조1446 배포 및 버전 관리 참고자료
1324</h2>1447</h2>
1325 1448
1326<h3 id="version-management">1449<h3 id="version-management">
1327 버전 관리1450 버전 관리
1328</h3>1451</h3>
1329 1452
1330Claude Code는 플러그인의 버전을 캐시 키로 사용하여 업데이트를 사용할 수 있는지 여부를 결정합니다. `/plugin update`를 실행하거나 자동 업데이트가 실행되면 Claude Code는 현재 버전을 계산하고 이미 설치된 버전과 일치하면 업데이트를 건너뜁니다.1453Claude Code는 플러그인의 버전을 캐시 키로 사용하여 업데이트 가능 여부를 결정합니다. `/plugin update`를 실행하거나 자동 업데이트가 실행될 때, Claude Code는 현재 버전을 계산하고 이미 설치된 버전과 일치하면 업데이트를 건너뜁니다.
1331 1454
1332버전은 다음 중 설정된 첫 번째 항목에서 확인됩니다:1455`command` 외의 모든 소스 유형에 대해 Claude Code는 다음 중 설정된 첫 번째 항목에서 버전을 확인합니다:
1333 1456
13341. 플러그인의 `plugin.json`에 있는 `version` 필드14571. 플러그인의 `plugin.json`에 있는 `version` 필드
13352. `marketplace.json`의 플러그인 마켓플레이스 항목에 있는 `version` 필드14582. `marketplace.json`의 플러그인 마켓플레이스 항목에 있는 `version` 필드
13363. git 호스팅 마켓플레이스의 `github`, `url`, `git-subdir` 및 상대 경로 소스에 대한 플러그인 소스의 git 커밋 SHA14593. git 호스팅 마켓플레이스의 `github`, `url`, `git-subdir`, 상대 경로 소스에 대한 플러그인 소스의 git 커밋 SHA
13374. git 저장소 내에 있지 않은 `npm` 소스 또는 로컬 디렉토리의 경우 `unknown`14604. [`archive` 소스](/docs/ko/plugin-marketplaces#zip-archives)의 경우 SHA-256 다이제스트: 마켓플레이스 항목의 `sha256` 핀 또는 핀을 설정하지 않았을 때 다운로드된 파일의 다이제스트입니다. Claude Code는 이를 처음 12자로 단축합니다.
14615. `npm` 소스 또는 git 저장소 내에 있지 않은 로컬 디렉터리의 경우 `unknown`
1338 1462
1339이는 플러그인을 버전 관리하는 두 가지 방법을 제공합니다:1463[`command` 소스](/docs/ko/plugin-marketplaces#command-sources)의 경우 Claude Code는 항상 명령이 생성한 내용에서 버전을 파생합니다: 자체적으로 12자 콘텐츠 해시이거나, 하나가 설정되어 있을 때 `<version>-<hash>` 형식으로 `plugin.json` 버전에 추가됩니다. Claude Code는 command 소스에 대해 마켓플레이스 항목의 `version` 필드를 무시합니다. 해시된 출력이 변경되는 명령은 작성된 버전 문자열이 동일하게 유지되더라도 새 버전을 생성합니다. [링크 모드](/docs/ko/plugin-marketplaces#copy-mode-and-link-mode)에서 해시는 인쇄된 디렉터리의 실제 경로와 파일 콘텐츠가 아닌 최상위 항목을 포함합니다.
1340 1464
1341| 접근 방식 | 방법 | 업데이트 동작 | 최적 사용 |1465이러한 소스 유형의 경우 플러그인을 버전 관리하는 세 가지 방법이 있습니다:
1342| :------------ | :------------------------------------------ | :-------------------------------------------------------------------------------------------------- | :----------------------- |
1343| **명시적 버전** | `plugin.json`에서 `"version": "2.1.0"`으로 설정 | 사용자는 이 필드를 범프할 때만 업데이트를 받습니다. 이를 범프하지 않고 새 커밋을 푸시하면 효과가 없으며 `/plugin update`는 "이미 최신 버전입니다"를 보고합니다. | 안정적인 릴리스 주기가 있는 게시된 플러그인 |
1344| **커밋-SHA 버전** | `plugin.json` 및 마켓플레이스 항목 모두에서 `version` 생략 | 사용자는 플러그인의 git 소스에 대한 모든 새 커밋에서 업데이트를 받습니다 | 활발히 개발 중인 내부 또는 팀 플러그인 |
1345 1466
1346<Warning>1467| 접근 방식 | 방법 | 업데이트 동작 | 최적 사용 |
1347 `plugin.json`에서 `version`을 설정하면 사용자가 변경 사항을 받기를 원할 때마다 이를 범프해야 합니다. 새 커밋을 푸시하는 것만으로는 충분하지 않습니다. Claude Code가 동일한 버전 문자열을 보고 캐시된 사본을 유지하기 때문입니다. 빠르게 반복하는 경우 `version`을 설정하지 않은 상태로 두어 대신 git 커밋 SHA가 사용되도록 하세요.1468| :------------ | :--------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------- | :---------------------------------- |
1348</Warning>1469| **명시적 버전** | `plugin.json`에서 `"version": "2.1.0"`을 설정합니다. | 사용자는 이 필드를 업데이트할 때만 업데이트를 받습니다. 이를 업데이트하지 않고 새 커밋을 푸시하면 효과가 없으며, `/plugin update`는 "이미 최신 버전입니다"를 보고합니다. | 안정적인 릴리스 주기를 가진 게시된 플러그인 |
1470| **커밋-SHA 버전** | `plugin.json`과 마켓플레이스 항목 모두에서 `version`을 생략합니다. | 사용자는 소스의 확인된 커밋이 변경될 때마다 업데이트를 받습니다. | 활발한 개발 중인 내부 또는 팀 플러그인 |
1471| **다이제스트 버전** | [`archive` 소스](/docs/ko/plugin-marketplaces#zip-archives)를 사용하고 `plugin.json`과 마켓플레이스 항목 모두에서 `version`을 생략합니다. | `sha256` 핀을 사용하면 사용자는 핀을 변경할 때 업데이트를 받습니다. 핀이 없으면 사용자는 호스팅된 zip 파일의 바이트가 변경될 때마다 업데이트를 받습니다. | 정적 서버 또는 아티팩트 저장소에 zip 파일로 게시된 플러그인 |
1349 1472
1350명시적 버전을 사용하는 경우 [의미 있는 버전 관리](https://semver.org)(`MAJOR.MINOR.PATCH`)를 따르세요: 주요 변경 사항의 경우 MAJOR를 범프하고, 새로운 기능의 경우 MINOR를 범프하고, 버그 수정의 경우 PATCH를 범프하세요. `CHANGELOG.md`에서 변경 사항을 문서화하세요.1473명시적 버전을 사용하는 경우 [의미 있는 버전 관리](https://semver.org)(`MAJOR.MINOR.PATCH`)를 따릅니다: 주요 변경 사항의 경우 MAJOR를 업데이트하고, 새 기능의 경우 MINOR를 업데이트하고, 버그 수정의 경우 PATCH를 업데이트합니다. `CHANGELOG.md`에서 변경 사항을 문서화합니다.
1351 1474
1352***1475***
1353 1476