10 10
11이 페이지는 자신의 플러그인을 작성하는 사람들을 위한 것입니다.11이 페이지는 자신의 플러그인을 작성하는 사람들을 위한 것입니다.
12 12
13<Note>13> [!NOTE]
14 다음 경우는 다른 페이지에서 다룹니다:14>
15 15> 다음 경우는 다른 페이지에서 다룹니다:
16 * **다른 사람의 플러그인 설치**: [플러그인 설치](/docs/ko/plugins/install) 참조16>
17 * **플러그인이 필요한지 확실하지 않음**: 개요의 [플러그인이 필요한지 결정](/docs/ko/plugins/overview#decide-whether-you-need-a-plugin) 참조17> * **다른 사람의 플러그인 설치**: [플러그인 설치](/docs/ko/plugins/install) 참조
18 * **플러그인의 사용자가 claude.ai 또는 Cowork에 있음**: 동일한 폴더가 다른 구성 요소 부분 집합으로 설치됩니다. [Plugin structure and testing](https://claude.com/docs/plugins/build) 및 [component support table](https://claude.com/docs/plugins/platform-support#compare-component-support-by-app) 참조18> * **플러그인이 필요한지 확실하지 않음**: 개요의 [플러그인이 필요한지 결정](/docs/ko/plugins/overview#decide-whether-you-need-a-plugin) 참조
19</Note>19> * **플러그인의 사용자가 claude.ai 또는 Cowork에 있음**: 동일한 폴더가 다른 구성 요소 부분 집합으로 설치됩니다. [Plugin structure and testing](https://claude.com/docs/plugins/build) 및 [component support table](https://claude.com/docs/plugins/platform-support#compare-component-support-by-app) 참조
20 20
21이미 가지고 있는 것과 일치하는 섹션에서 시작하세요:21이미 가지고 있는 것과 일치하는 섹션에서 시작하세요:
22 22
23* **아직 아무것도 없음**: [첫 번째 플러그인 만들기](#create-your-first-plugin)를 따른 다음 [마켓플레이스 없이 개발](#develop-without-a-marketplace) 및 [테스트 및 디버그](#test-and-debug)를 따릅니다.23* **아직 아무것도 없음**: [첫 번째 플러그인 만들기](#create-your-first-plugin)를 따른 다음 [마켓플레이스 없이 개발](#develop-without-a-marketplace) 및 [테스트 및 디버그](#test-and-debug)를 따릅니다.
24* **`.claude/` 아래에 파일이 이미 있음**: 레이아웃을 배우기 위해 첫 번째 플러그인 연습을 한 번 수행한 다음 [기존 `.claude/` 설정 변환](#convert-an-existing-claude-setup)을 따릅니다.24* **`.claude/` 아래에 파일이 이미 있음**: 레이아웃을 배우기 위해 첫 번째 플러그인 연습을 한 번 수행한 다음 [기존 `.claude/` 설정 변환](#convert-an-existing-claude-setup)을 따릅니다.
25 25
26<h2 id="decide-when-to-use-a-plugin">26## 플러그인을 사용할 시기 결정
27 플러그인을 사용할 시기 결정
28</h2>
29 27
30스킬, 에이전트, 훅 및 MCP 서버는 모두 프로젝트 또는 홈 디렉토리에서 독립적으로 작동합니다. 하나의 프로젝트에만 제공하거나 자신만 사용하는 동안 독립 실행형 설정을 유지하세요. 팀원과 설정을 공유하거나, 여러 프로젝트에 설치하거나, 버전이 지정된 릴리스를 게시하려는 경우 플러그인을 만드세요.28스킬, 에이전트, 훅 및 MCP 서버는 모두 프로젝트 또는 홈 디렉토리에서 독립적으로 작동합니다. 하나의 프로젝트에만 제공하거나 자신만 사용하는 동안 독립 실행형 설정을 유지하세요. 팀원과 설정을 공유하거나, 여러 프로젝트에 설치하거나, 버전이 지정된 릴리스를 게시하려는 경우 플러그인을 만드세요.
31 29
36 34
37기존 설정을 플러그인으로 이동하려면 [기존 `.claude/` 설정 변환](#convert-an-existing-claude-setup)을 참조하세요.35기존 설정을 플러그인으로 이동하려면 [기존 `.claude/` 설정 변환](#convert-an-existing-claude-setup)을 참조하세요.
38 36
39<h2 id="create-your-first-plugin">37## 첫 번째 플러그인 만들기
40 첫 번째 플러그인 만들기
41</h2>
42 38
43이 연습에서는 유일한 구성 요소가 하나의 스킬(인사말)인 플러그인을 만들고 `--plugin-dir`으로 실행합니다. 이는 설치하지 않고 한 세션 동안 플러그인을 로드합니다. 플러그인은 스킬, 에이전트, 훅 및 MCP 서버와 같은 [구성 요소](/docs/ko/plugins/components)의 모든 조합을 보유할 수 있으며, 어느 것도 필요하지 않습니다. 하나의 스킬은 레이아웃을 보여주는 가장 작은 예제입니다.39이 연습에서는 유일한 구성 요소가 하나의 스킬(인사말)인 플러그인을 만들고 `--plugin-dir`으로 실행합니다. 이는 설치하지 않고 한 세션 동안 플러그인을 로드합니다. 플러그인은 스킬, 에이전트, 훅 및 MCP 서버와 같은 [구성 요소](/docs/ko/plugins/components)의 모든 조합을 보유할 수 있으며, 어느 것도 필요하지 않습니다. 하나의 스킬은 레이아웃을 보여주는 가장 작은 예제입니다.
44 40
46 42
47플러그인을 보관할 디렉토리(예: `~/projects`)에서 터미널을 열고 이 단계의 명령을 실행하세요. 플러그인을 어디든 보관할 수 있습니다. 세션을 시작할 때 Claude Code에 경로를 전달하기 때문입니다.43플러그인을 보관할 디렉토리(예: `~/projects`)에서 터미널을 열고 이 단계의 명령을 실행하세요. 플러그인을 어디든 보관할 수 있습니다. 세션을 시작할 때 Claude Code에 경로를 전달하기 때문입니다.
48 44
49<Steps>45**1. 플러그인 디렉토리 만들기**
50 <Step title="플러그인 디렉토리 만들기">46
51 플러그인 디렉토리를 만들고, 매니페스트를 보관할 `.claude-plugin/` 폴더를 그 안에 만듭니다:47플러그인 디렉토리를 만들고, 매니페스트를 보관할 `.claude-plugin/` 폴더를 그 안에 만듭니다:
48
49```bash theme={null}
50mkdir -p my-first-plugin/.claude-plugin
51```
52 52
53 ```bash theme={null}53**2. 매니페스트 작성**
54 mkdir -p my-first-plugin/.claude-plugin
55 ```
56 </Step>
57 54
58 <Step title="매니페스트 작성">55[매니페스트](/docs/ko/plugins/manifest-reference)는 Claude Code에 플러그인의 이름을 알려주고 설명하는 `plugin.json`이라는 JSON 파일입니다. 이것을 `my-first-plugin/.claude-plugin/plugin.json`으로 저장하세요:
59 [매니페스트](/docs/ko/plugins/manifest-reference)는 Claude Code에 플러그인의 이름을 알려주고 설명하는 `plugin.json`이라는 JSON 파일입니다. 이것을 `my-first-plugin/.claude-plugin/plugin.json`으로 저장하세요:
60 56
61 ```json my-first-plugin/.claude-plugin/plugin.json theme={null}57```json my-first-plugin/.claude-plugin/plugin.json theme={null}
62 {58{
63 "name": "my-first-plugin",59 "name": "my-first-plugin",
64 "description": "A greeting plugin to learn the basics",60 "description": "A greeting plugin to learn the basics",
65 "version": "1.0.0",61 "version": "1.0.0",
66 "author": {62 "author": {
67 "name": "Your Name"63 "name": "Your Name"
68 }64 }
69 }65}
70 ```66```
71 67
72 네 필드는 다음을 수행합니다:68네 필드는 다음을 수행합니다:
73 69
74 * **`name`**: 필수입니다. 플러그인을 식별하고 플러그인이 제공하는 모든 스킬 및 에이전트의 접두사가 됩니다. 공백을 포함하지 마세요.70* **`name`**: 필수입니다. 플러그인을 식별하고 플러그인이 제공하는 모든 스킬 및 에이전트의 접두사가 됩니다. 공백을 포함하지 마세요.
75 * **`description`**: 사용자가 `/plugin`에서 플러그인에 대해 보는 텍스트입니다.71* **`description`**: 사용자가 `/plugin`에서 플러그인에 대해 보는 텍스트입니다.
76 * **`version`**: 선택 사항입니다. 설정하면 사용자가 변경할 때까지 해당 버전에 유지됩니다. [새 버전 릴리스](/docs/ko/plugins/host-marketplace#release-a-new-version)는 설정하거나 생략할 시기를 설명합니다.72* **`version`**: 선택 사항입니다. 설정하면 사용자가 변경할 때까지 해당 버전에 유지됩니다. [새 버전 릴리스](/docs/ko/plugins/host-marketplace#release-a-new-version)는 설정하거나 생략할 시기를 설명합니다.
77 * **`author`**: 누구에게 크레딧을 줄지입니다. 그 안에 `name`은 필수입니다. `email` 및 `url`은 선택 사항입니다.73* **`author`**: 누구에게 크레딧을 줄지입니다. 그 안에 `name`은 필수입니다. `email` 및 `url`은 선택 사항입니다.
78 74
79 다른 모든 필드는 [매니페스트 참조](/docs/ko/plugins/manifest-reference#fields)에 있습니다.75다른 모든 필드는 [매니페스트 참조](/docs/ko/plugins/manifest-reference#fields)에 있습니다.
80 76
81 `.claude-plugin/` 안에는 `plugin.json`만 들어갑니다. 다음에 추가할 스킬은 `my-first-plugin/` 아래에 직접 들어가며, 해당 폴더 옆에 있습니다.77`.claude-plugin/` 안에는 `plugin.json`만 들어갑니다. 다음에 추가할 스킬은 `my-first-plugin/` 아래에 직접 들어가며, 해당 폴더 옆에 있습니다.
82 </Step>
83 78
84 <Step title="스킬 추가">79**3. 스킬 추가**
85 이 플러그인의 유일한 구성 요소는 스킬입니다. 각 스킬은 `SKILL.md` 파일을 포함하는 `skills/` 아래의 디렉토리입니다. 스킬의 디렉토리를 만듭니다:
86 80
87 ```bash theme={null}81이 플러그인의 유일한 구성 요소는 스킬입니다. 각 스킬은 `SKILL.md` 파일을 포함하는 `skills/` 아래의 디렉토리입니다. 스킬의 디렉토리를 만듭니다:
88 mkdir -p my-first-plugin/skills/hello
89 ```
90 82
91 그런 다음 다음 내용으로 `my-first-plugin/skills/hello/SKILL.md`를 만듭니다:83```bash theme={null}
84mkdir -p my-first-plugin/skills/hello
85```
92 86
93 ```markdown my-first-plugin/skills/hello/SKILL.md theme={null}87그런 다음 다음 내용으로 `my-first-plugin/skills/hello/SKILL.md`를 만듭니다:
94 ---
95 name: hello
96 description: Greet the user with a friendly message
97 disable-model-invocation: true
98 ---
99 88
100 Greet the user warmly and ask how you can help them today.89```markdown my-first-plugin/skills/hello/SKILL.md theme={null}
101 ```90---
91name: hello
92description: Greet the user with a friendly message
93disable-model-invocation: true
94---
102 95
103 `disable-model-invocation: true` 줄은 Claude가 스킬을 자동으로 실행하지 않음을 의미합니다. Claude가 자동으로 실행하려는 스킬에서 해당 줄을 제거하세요. 스킬의 명령은 플러그인 이름과 스킬의 이름을 결합하므로 이것을 `/my-first-plugin:hello`로 실행합니다. 다른 frontmatter 필드는 [스킬 frontmatter 참조](/docs/ko/skills#frontmatter-reference)를 참조하세요.96Greet the user warmly and ask how you can help them today.
104 </Step>97```
105 98
106 <Step title="플러그인 검증">99`disable-model-invocation: true` 줄은 Claude가 스킬을 자동으로 실행하지 않음을 의미합니다. Claude가 자동으로 실행하려는 스킬에서 해당 줄을 제거하세요. 스킬의 명령은 플러그인 이름과 스킬의 이름을 결합하므로 이것을 `/my-first-plugin:hello`로 실행합니다. 다른 frontmatter 필드는 [스킬 frontmatter 참조](/docs/ko/skills#frontmatter-reference)를 참조하세요.
107 아무것도 실행하기 전에 매니페스트와 스킬의 frontmatter를 확인하세요:
108 100
109 ```bash theme={null}101**4. 플러그인 검증**
110 claude plugin validate ./my-first-plugin
111 ```
112 102
113 명령은 확인한 매니페스트 경로와 `✔ Validation passed`를 출력합니다. 대신 `✘ Validation failed`를 출력하면, 그 결과 줄 위의 각 줄은 수정할 필드의 이름을 지정합니다. [`claude plugin validate` 보고 오류](/docs/ko/plugins/troubleshooting#claude-plugin-validate-reports-errors) 아래에서 각 메시지를 찾아보세요.103아무것도 실행하기 전에 매니페스트와 스킬의 frontmatter를 확인하세요:
114 </Step>
115 104
116 <Step title="플러그인으로 Claude Code 실행">105```bash theme={null}
117 플러그인이 로드된 세션을 시작합니다:106claude plugin validate ./my-first-plugin
107```
108
109명령은 확인한 매니페스트 경로와 `✔ Validation passed`를 출력합니다. 대신 `✘ Validation failed`를 출력하면, 그 결과 줄 위의 각 줄은 수정할 필드의 이름을 지정합니다. [`claude plugin validate` 보고 오류](/docs/ko/plugins/troubleshooting#claude-plugin-validate-reports-errors) 아래에서 각 메시지를 찾아보세요.
110
111**5. 플러그인으로 Claude Code 실행**
118 112
119 ```bash theme={null}113플러그인이 로드된 세션을 시작합니다:
120 claude --plugin-dir ./my-first-plugin
121 ```
122 114
123 Claude Code가 시작되면 스킬을 실행합니다:115```bash theme={null}
116claude --plugin-dir ./my-first-plugin
117```
124 118
125 ```text theme={null}119Claude Code가 시작되면 스킬을 실행합니다:
126 /my-first-plugin:hello
127 ```
128 120
129 Claude가 인사말로 응답합니다.121```text theme={null}
130 </Step>122/my-first-plugin:hello
131</Steps>123```
124
125Claude가 인사말로 응답합니다.
132 126
133플러그인은 `--plugin-dir`으로 시작하는 세션에서만 로드됩니다. 플래그 없이 계속 작업하거나 `.zip` 빌드를 테스트하려면 [마켓플레이스 없이 개발](#develop-without-a-marketplace)을 참조하세요.127플러그인은 `--plugin-dir`으로 시작하는 세션에서만 로드됩니다. 플래그 없이 계속 작업하거나 `.zip` 빌드를 테스트하려면 [마켓플레이스 없이 개발](#develop-without-a-marketplace)을 참조하세요.
134 128
135Claude가 더 큰 플러그인을 스캐폴드하고 확인하도록 하려면 `claude-plugins-official` 마켓플레이스에서 Anthropic의 `plugin-dev` 플러그인을 [설치](/docs/ko/plugins/install#install-a-plugin)하세요. 이는 스킬, 훅 및 MCP 서버와 같은 구성 요소를 작성하고 완성된 플러그인을 검증하기 위한 스킬 및 에이전트를 추가합니다. 설치되면 `/plugin-dev:create-plugin`을 실행한 후 원하는 플러그인에 대한 설명을 입력하면 Claude가 설계, 생성 및 검증 과정을 안내합니다.129Claude가 더 큰 플러그인을 스캐폴드하고 확인하도록 하려면 `claude-plugins-official` 마켓플레이스에서 Anthropic의 `plugin-dev` 플러그인을 [설치](/docs/ko/plugins/install#install-a-plugin)하세요. 이는 스킬, 훅 및 MCP 서버와 같은 구성 요소를 작성하고 완성된 플러그인을 검증하기 위한 스킬 및 에이전트를 추가합니다. 설치되면 `/plugin-dev:create-plugin`을 실행한 후 원하는 플러그인에 대한 설명을 입력하면 Claude가 설계, 생성 및 검증 과정을 안내합니다.
136 130
137<h3 id="share-the-plugin">131### 플러그인 공유
138 플러그인 공유
139</h3>
140 132
141[첫 번째 플러그인 만들기](#create-your-first-plugin)로 만든 플러그인은 컴퓨터에만 존재합니다. 다른 사람들이 사용할 준비가 되면 세 가지 방법으로 전달할 수 있습니다:133[첫 번째 플러그인 만들기](#create-your-first-plugin)로 만든 플러그인은 컴퓨터에만 존재합니다. 다른 사람들이 사용할 준비가 되면 세 가지 방법으로 전달할 수 있습니다:
142 134
144* **자신의 마켓플레이스에 나열**: 팀원이 마켓플레이스를 한 번 추가하고 이름으로 플러그인을 설치하면 업데이트를 받습니다. [자신의 마켓플레이스를 통해 게시](/docs/ko/plugins/publish#publish-through-your-own-marketplace)를 참조하세요.136* **자신의 마켓플레이스에 나열**: 팀원이 마켓플레이스를 한 번 추가하고 이름으로 플러그인을 설치하면 업데이트를 받습니다. [자신의 마켓플레이스를 통해 게시](/docs/ko/plugins/publish#publish-through-your-own-marketplace)를 참조하세요.
145* **Anthropic의 디렉토리에 제출**: 검토를 통과한 후 사람들은 claude.ai 및 Cowork에서 이를 추가할 수 있으며, Claude Code를 통해 계정에 도달합니다. [Anthropic의 디렉토리에 제출](/docs/ko/plugins/publish#submit-to-anthropics-directory)을 참조하세요.137* **Anthropic의 디렉토리에 제출**: 검토를 통과한 후 사람들은 claude.ai 및 Cowork에서 이를 추가할 수 있으며, Claude Code를 통해 계정에 도달합니다. [Anthropic의 디렉토리에 제출](/docs/ko/plugins/publish#submit-to-anthropics-directory)을 참조하세요.
146 138
147<h3 id="plugin-layout">139### 플러그인 레이아웃
148 플러그인 레이아웃
149</h3>
150 140
151스킬, 에이전트, 훅 및 MCP 서버와 같은 각 종류의 [구성 요소](/docs/ko/plugins/components)는 플러그인 루트(즉, `--plugin-dir`에 전달하는 디렉토리) 아래의 고정 디렉토리에 들어갑니다. 사용하는 디렉토리만 추가하세요. 완전한 플러그인 디렉토리를 클릭하고 각 파일이 무엇을 하는지 읽으려면 [플러그인 탐색기](/docs/ko/plugins/components#explore-the-plugin-directory)를 열어보세요.141스킬, 에이전트, 훅 및 MCP 서버와 같은 각 종류의 [구성 요소](/docs/ko/plugins/components)는 플러그인 루트(즉, `--plugin-dir`에 전달하는 디렉토리) 아래의 고정 디렉토리에 들어갑니다. 사용하는 디렉토리만 추가하세요. 완전한 플러그인 디렉토리를 클릭하고 각 파일이 무엇을 하는지 읽으려면 [플러그인 탐색기](/docs/ko/plugins/components#explore-the-plugin-directory)를 열어보세요.
152 142
161| `hooks/hooks.json` | 훅 구성: 최상위 `"hooks"` 키이며 값은 설정 파일의 `hooks`와 동일한 형태입니다 |151| `hooks/hooks.json` | 훅 구성: 최상위 `"hooks"` 키이며 값은 설정 파일의 `hooks`와 동일한 형태입니다 |
162| `.mcp.json` | MCP 서버 정의 |152| `.mcp.json` | MCP 서버 정의 |
163 153
164<Warning>154> [!WARNING]
165 `.claude-plugin/` 안에는 `plugin.json`만 들어갑니다. 거기에 저장된 구성 요소는 로드되지 않습니다.155>
166 156> `.claude-plugin/` 안에는 `plugin.json`만 들어갑니다. 거기에 저장된 구성 요소는 로드되지 않습니다.
167 플러그인 루트는 플러그인의 자체 디렉토리이며, `~/.claude/` 자체가 아닙니다. `~/.claude/.mcp.json`에 저장된 `.mcp.json`은 로드되지 않습니다.157>
168</Warning>158> 플러그인 루트는 플러그인의 자체 디렉토리이며, `~/.claude/` 자체가 아닙니다. `~/.claude/.mcp.json`에 저장된 `.mcp.json`은 로드되지 않습니다.
169 159
170<h2 id="develop-without-a-marketplace">160## 마켓플레이스 없이 개발
171 마켓플레이스 없이 개발
172</h2>
173 161
174작성 중인 플러그인을 실행하기 위해 [마켓플레이스](/docs/ko/plugins/overview#get-plugins-from-a-marketplace)가 필요하지 않습니다. 대신 디스크 또는 URL에서 직접 로드하세요:162작성 중인 플러그인을 실행하기 위해 [마켓플레이스](/docs/ko/plugins/overview#get-plugins-from-a-marketplace)가 필요하지 않습니다. 대신 디스크 또는 URL에서 직접 로드하세요:
175 163
179 167
180다른 방식으로 로드된 두 플러그인이 이름을 공유하면 [이름 충돌](/docs/ko/plugins/loading#name-conflicts)을 참조하여 Claude Code가 어느 것을 유지하는지 확인하세요.168다른 방식으로 로드된 두 플러그인이 이름을 공유하면 [이름 충돌](/docs/ko/plugins/loading#name-conflicts)을 참조하여 Claude Code가 어느 것을 유지하는지 확인하세요.
181 169
182<h3 id="load-a-directory-or-archive-for-one-session">170### 한 세션 동안 플러그인 로드
183 한 세션 동안 플러그인 로드
184</h3>
185 171
186세 가지 방법으로 단일 세션 동안 플러그인을 로드할 수 있습니다: `--plugin-dir`으로 디스크의 디렉토리 또는 `.zip` 아카이브에서, `--plugin-url`로 URL에서, 또는 플래그를 추가할 수 없을 때 환경 변수에서. 각 플러그인은 해당 세션에만 로드되며, 설정에 아무것도 기록되지 않습니다. 세션 중에 플러그인의 파일을 편집하면 `/reload-plugins`를 실행하여 변경 사항을 로드합니다.172세 가지 방법으로 단일 세션 동안 플러그인을 로드할 수 있습니다: `--plugin-dir`으로 디스크의 디렉토리 또는 `.zip` 아카이브에서, `--plugin-url`로 URL에서, 또는 플래그를 추가할 수 없을 때 환경 변수에서. 각 플러그인은 해당 세션에만 로드되며, 설정에 아무것도 기록되지 않습니다. 세션 중에 플러그인의 파일을 편집하면 `/reload-plugins`를 실행하여 변경 사항을 로드합니다.
187 173
188<span id="from-a-directory-or-zip" />174#### 디렉토리 또는 `.zip`에서 플러그인 로드
189
190<h4 id="load-a-plugin-from-a-directory-or-zip">
191 디렉토리 또는 `.zip`에서 플러그인 로드
192</h4>
193 175
194셸에서 `claude`를 시작할 때 `--plugin-dir`을 플러그인의 루트 디렉토리 또는 그 `.zip` 아카이브와 함께 전달합니다. 여러 플러그인을 로드하려면 플래그를 반복합니다:176셸에서 `claude`를 시작할 때 `--plugin-dir`을 플러그인의 루트 디렉토리 또는 그 `.zip` 아카이브와 함께 전달합니다. 여러 플러그인을 로드하려면 플래그를 반복합니다:
195 177
197claude --plugin-dir ./my-first-plugin --plugin-dir ./other-plugin.zip179claude --plugin-dir ./my-first-plugin --plugin-dir ./other-plugin.zip
198```180```
199 181
200<h4 id="load-a-folder-of-plugins">182#### 플러그인 폴더 로드
201 플러그인 폴더 로드
202</h4>
203 183
204한 곳에서 여러 플러그인을 로드하려면 `--plugin-dir ./plugins`와 같이 플러그인을 보관하는 폴더를 전달합니다. 플러그인 폴더를 로드하려면 Claude Code v2.1.265 이상이 필요합니다.184한 곳에서 여러 플러그인을 로드하려면 `--plugin-dir ./plugins`와 같이 플러그인을 보관하는 폴더를 전달합니다. 플러그인 폴더를 로드하려면 Claude Code v2.1.265 이상이 필요합니다.
205 185
214 194
215이러한 각 변경에 대해 세션에 메시지가 나타납니다. 중간 대화 중에 플러그인을 로드하거나 언로드하면 [프롬프트 캐시](/docs/ko/prompt-caching#enabling-or-disabling-a-plugin)가 무효화되면 변경이 대신 보류되고 메시지는 적용하려면 `/reload-plugins`를 실행하도록 알려줍니다.195이러한 각 변경에 대해 세션에 메시지가 나타납니다. 중간 대화 중에 플러그인을 로드하거나 언로드하면 [프롬프트 캐시](/docs/ko/prompt-caching#enabling-or-disabling-a-plugin)가 무효화되면 변경이 대신 보류되고 메시지는 적용하려면 `/reload-plugins`를 실행하도록 알려줍니다.
216 196
217<span id="fetch-an-archive-from-a-url-for-one-session" />197#### URL에서 플러그인 로드
218
219<h4 id="load-a-plugin-from-a-url">
220 URL에서 플러그인 로드
221</h4>
222 198
223셸에서 `claude`를 시작할 때 `--plugin-url`을 `.zip` 아카이브의 주소(예: CI가 게시하는 빌드 아티팩트)와 함께 전달합니다:199셸에서 `claude`를 시작할 때 `--plugin-url`을 `.zip` 아카이브의 주소(예: CI가 게시하는 빌드 아티팩트)와 함께 전달합니다:
224 200
232 208
233Claude Code가 아카이브를 가져올 수 없거나 아카이브가 유효하지 않으면 플러그인 없이 시작되고 `/plugin` 관리자의 **Errors** 탭에서 검토할 수 있는 플러그인 로드 오류를 기록합니다.209Claude Code가 아카이브를 가져올 수 없거나 아카이브가 유효하지 않으면 플러그인 없이 시작되고 `/plugin` 관리자의 **Errors** 탭에서 검토할 수 있는 플러그인 로드 오류를 기록합니다.
234 210
235<span id="from-an-environment-variable" />211#### 환경 변수에서 플러그인 로드
236
237<h4 id="load-plugins-from-an-environment-variable">
238 환경 변수에서 플러그인 로드
239</h4>
240 212
241`--plugin-dir` 플래그를 추가할 수 없는 세션에서 플러그인을 로드하려면 [`CLAUDE_CODE_PLUGIN_DIRS`](/docs/ko/env-vars#variables) 환경 변수에 절대 경로를 나열하세요. Claude Code는 각 경로를 `--plugin-dir` 경로로 로드합니다. 이 플러그인은 `--plugin-dir`으로 전달하는 모든 플러그인에 추가로 로드됩니다. [프로젝트 및 로컬 설정은 이 변수를 설정할 수 없습니다](/docs/ko/settings-reference#variables-claude-code-ignores-in-env). `CLAUDE_CODE_PLUGIN_DIRS`는 Claude Code v2.1.280 이상이 필요합니다.213`--plugin-dir` 플래그를 추가할 수 없는 세션에서 플러그인을 로드하려면 [`CLAUDE_CODE_PLUGIN_DIRS`](/docs/ko/env-vars#variables) 환경 변수에 절대 경로를 나열하세요. Claude Code는 각 경로를 `--plugin-dir` 경로로 로드합니다. 이 플러그인은 `--plugin-dir`으로 전달하는 모든 플러그인에 추가로 로드됩니다. [프로젝트 및 로컬 설정은 이 변수를 설정할 수 없습니다](/docs/ko/settings-reference#variables-claude-code-ignores-in-env). `CLAUDE_CODE_PLUGIN_DIRS`는 Claude Code v2.1.280 이상이 필요합니다.
242 214
243관리되는 설정은 `--plugin-dir` 및 `CLAUDE_CODE_PLUGIN_DIRS`를 끌 수 있습니다. [한 세션 동안 플러그인을 로드하는 플래그](/docs/ko/plugins/cli-reference#flags-that-load-a-plugin-for-one-session)를 참조하세요. 플러그인과 그것이 의존하는 플러그인을 함께 테스트하려면 [플러그인 및 해당 종속성을 로컬로 테스트](/docs/ko/plugins/dependencies#test-a-plugin-and-its-dependency-locally)를 참조하세요.215관리되는 설정은 `--plugin-dir` 및 `CLAUDE_CODE_PLUGIN_DIRS`를 끌 수 있습니다. [한 세션 동안 플러그인을 로드하는 플래그](/docs/ko/plugins/cli-reference#flags-that-load-a-plugin-for-one-session)를 참조하세요. 플러그인과 그것이 의존하는 플러그인을 함께 테스트하려면 [플러그인 및 해당 종속성을 로컬로 테스트](/docs/ko/plugins/dependencies#test-a-plugin-and-its-dependency-locally)를 참조하세요.
244 216
245<h3 id="scaffold-a-plugin-that-loads-every-session">217### 모든 세션에서 플러그인 로드
246 모든 세션에서 플러그인 로드
247</h3>
248 218
249개인 스킬 디렉토리는 `~/.claude/skills/`입니다. Claude Code는 `.claude-plugin/plugin.json`을 포함하는 모든 폴더를 플래그 없이 설치 단계 없이 모든 세션에서 플러그인으로 로드합니다. `claude plugin init`은 이러한 플러그인 중 하나를 스캐폴드합니다.219개인 스킬 디렉토리는 `~/.claude/skills/`입니다. Claude Code는 `.claude-plugin/plugin.json`을 포함하는 모든 폴더를 플래그 없이 설치 단계 없이 모든 세션에서 플러그인으로 로드합니다. `claude plugin init`은 이러한 플러그인 중 하나를 스캐폴드합니다.
250 220
251<h4 id="scaffold-the-plugin-with-claude-plugin-init">221#### `claude plugin init`으로 플러그인 스캐폴드
252 `claude plugin init`으로 플러그인 스캐폴드
253</h4>
254 222
255`claude plugin init`은 `~/.claude/skills/` 아래에 스타터 플러그인을 작성합니다. 셸에서 하나를 스캐폴드합니다:223`claude plugin init`은 `~/.claude/skills/` 아래에 스타터 플러그인을 작성합니다. 셸에서 하나를 스캐폴드합니다:
256 224
262 230
263`claude plugin init`이 `skills/` 아래에 스킬을 스캐폴드하도록 `--with skills`를 전달합니다. 다른 `--with` 값은 [플러그인 명령 참조](/docs/ko/plugins/cli-reference#plugin-init)에 있습니다.231`claude plugin init`이 `skills/` 아래에 스킬을 스캐폴드하도록 `--with skills`를 전달합니다. 다른 `--with` 값은 [플러그인 명령 참조](/docs/ko/plugins/cli-reference#plugin-init)에 있습니다.
264 232
265<h4 id="skill-names-in-a-scaffolded-plugin">233#### 스캐폴드된 플러그인의 스킬 이름
266 스캐폴드된 플러그인의 스킬 이름
267</h4>
268 234
269`~/.claude/skills/my-tool/SKILL.md`의 루트 스킬도 개인 스킬이므로 `/my-tool:my-tool`이 아닌 `/my-tool`로 호출합니다. 플러그인 내 `skills/` 아래에 추가하는 스킬은 `/my-tool:example`과 같은 플러그인 이름 접두사를 가집니다.235`~/.claude/skills/my-tool/SKILL.md`의 루트 스킬도 개인 스킬이므로 `/my-tool:my-tool`이 아닌 `/my-tool`로 호출합니다. 플러그인 내 `skills/` 아래에 추가하는 스킬은 `/my-tool:example`과 같은 플러그인 이름 접두사를 가집니다.
270 236
271<h4 id="stop-loading-the-plugin">237#### 플러그인 로드 중지
272 플러그인 로드 중지
273</h4>
274 238
275스캐폴드된 플러그인 로드를 중지하려면 해당 디렉토리를 삭제하거나 셸에서 `claude plugin disable my-tool@skills-dir`을 실행하세요. `my-tool@skills-dir` 이름은 `claude plugin init`이 출력했습니다. ID `my-tool@skills-dir`에서 `skills-dir`은 플러그인이 마켓플레이스가 아닌 스킬 디렉토리에서 로드되기 때문에 마켓플레이스 이름이 있을 위치에 서 있습니다.239스캐폴드된 플러그인 로드를 중지하려면 해당 디렉토리를 삭제하거나 셸에서 `claude plugin disable my-tool@skills-dir`을 실행하세요. `my-tool@skills-dir` 이름은 `claude plugin init`이 출력했습니다. ID `my-tool@skills-dir`에서 `skills-dir`은 플러그인이 마켓플레이스가 아닌 스킬 디렉토리에서 로드되기 때문에 마켓플레이스 이름이 있을 위치에 서 있습니다.
276 240
277<h4 id="load-a-plugin-for-everyone-in-one-repository">241#### 저장소를 통해 플러그인 공유
278 저장소를 통해 플러그인 공유
279</h4>
280 242
281`claude plugin init`은 플러그인을 개인 스킬 디렉토리 `~/.claude/skills/`에 작성하므로 모든 프로젝트에서 로드됩니다. 한 저장소의 모든 사람이 플러그인을 로드하도록 하려면 `.claude-plugin/plugin.json`을 포함하여 `<project>/.claude/skills/<name>/`에서 동일한 레이아웃을 직접 만드세요. Claude Code가 로드하는 조건은 [저장소를 통해 공유된 플러그인](/docs/ko/plugins/loading#plugins-shared-through-a-repository)을 참조하세요.243`claude plugin init`은 플러그인을 개인 스킬 디렉토리 `~/.claude/skills/`에 작성하므로 모든 프로젝트에서 로드됩니다. 한 저장소의 모든 사람이 플러그인을 로드하도록 하려면 `.claude-plugin/plugin.json`을 포함하여 `<project>/.claude/skills/<name>/`에서 동일한 레이아웃을 직접 만드세요. Claude Code가 로드하는 조건은 [저장소를 통해 공유된 플러그인](/docs/ko/plugins/loading#plugins-shared-through-a-repository)을 참조하세요.
282 244
283<h2 id="test-and-debug">245## 테스트 및 디버그
284 테스트 및 디버그
285</h2>
286 246
287플러그인의 변경 사항이 표시되지 않으면 순서대로 이 확인을 진행하세요. 각각은 Claude Code가 플러그인으로 무엇을 했는지 알려줍니다:247플러그인의 변경 사항이 표시되지 않으면 순서대로 이 확인을 진행하세요. 각각은 Claude Code가 플러그인으로 무엇을 했는지 알려줍니다:
288 248
297 257
298다음 섹션은 개발 중에 가장 가능성이 높은 실패를 다루며, [문제 해결 페이지](/docs/ko/plugins/troubleshooting#build-a-plugin)에는 각각에 대한 전체 항목이 있습니다.258다음 섹션은 개발 중에 가장 가능성이 높은 실패를 다루며, [문제 해결 페이지](/docs/ko/plugins/troubleshooting#build-a-plugin)에는 각각에 대한 전체 항목이 있습니다.
299 259
300<h3 id="a-component-path-isn’t-found">260### 구성 요소 경로를 찾을 수 없음
301 구성 요소 경로를 찾을 수 없음
302</h3>
303 261
304`/plugin`의 **Errors** 탭은 `<component> path not found: <path>`를 표시합니다(예: `commands path not found`). 매니페스트의 구성 요소 경로(예: `commands`, `skills`, `agents` 또는 `hooks`)가 아무것도 가리키지 않습니다. 경로를 수정하거나 디렉토리를 만든 다음 세션에서 `/reload-plugins`를 실행합니다. [`commands path not found`](/docs/ko/plugins/troubleshooting#commands-path-not-found)를 참조하세요.262`/plugin`의 **Errors** 탭은 `<component> path not found: <path>`를 표시합니다(예: `commands path not found`). 매니페스트의 구성 요소 경로(예: `commands`, `skills`, `agents` 또는 `hooks`)가 아무것도 가리키지 않습니다. 경로를 수정하거나 디렉토리를 만든 다음 세션에서 `/reload-plugins`를 실행합니다. [`commands path not found`](/docs/ko/plugins/troubleshooting#commands-path-not-found)를 참조하세요.
305 263
306<h3 id="plugin-dir-at-a-marketplace-root-doesn’t-load-the-plugins-under-plugins/">264### `--plugin-dir`이 마켓플레이스 루트에서 `plugins/` 아래의 플러그인을 로드하지 않음
307 `--plugin-dir`이 마켓플레이스 루트에서 `plugins/` 아래의 플러그인을 로드하지 않음
308</h3>
309 265
310`--plugin-dir`은 `.claude-plugin/plugin.json` 및 `skills/`와 같은 구성 요소 디렉토리를 포함하는 플러그인의 루트 디렉토리를 사용합니다. 대신 마켓플레이스 루트를 가리키면 Claude Code는 `marketplace.json`을 읽지 않으므로 `plugins/` 아래의 플러그인이 로드되지 않으며 오류가 표시되지 않습니다. 플래그를 하나의 플러그인 폴더에 가리키거나 마켓플레이스를 추가합니다. [문제 해결 항목](/docs/ko/plugins/troubleshooting#plugin-dir-loads-a-plugin-with-no-components)을 참조하세요.266`--plugin-dir`은 `.claude-plugin/plugin.json` 및 `skills/`와 같은 구성 요소 디렉토리를 포함하는 플러그인의 루트 디렉토리를 사용합니다. 대신 마켓플레이스 루트를 가리키면 Claude Code는 `marketplace.json`을 읽지 않으므로 `plugins/` 아래의 플러그인이 로드되지 않으며 오류가 표시되지 않습니다. 플래그를 하나의 플러그인 폴더에 가리키거나 마켓플레이스를 추가합니다. [문제 해결 항목](/docs/ko/plugins/troubleshooting#plugin-dir-loads-a-plugin-with-no-components)을 참조하세요.
311 267
312<h3 id="the-plugin-loads-but-its-skills-are-missing">268### 플러그인이 로드되지만 스킬이 누락됨
313 플러그인이 로드되지만 스킬이 누락됨
314</h3>
315 269
316`skills/` 디렉토리가 `.claude-plugin/` 내부에 있거나 매니페스트의 `skills` 항목이 파일을 가리킵니다. `skills/`를 플러그인 루트로 이동하고, 각 `skills` 항목이 `SKILL.md`를 포함하는 디렉토리를 가리키도록 하고, 세션에서 `/reload-plugins`를 실행합니다. [플러그인이 로드되지만 스킬이 누락됨](/docs/ko/plugins/troubleshooting#plugin-loads-but-its-skills-are-missing)을 참조하세요.270`skills/` 디렉토리가 `.claude-plugin/` 내부에 있거나 매니페스트의 `skills` 항목이 파일을 가리킵니다. `skills/`를 플러그인 루트로 이동하고, 각 `skills` 항목이 `SKILL.md`를 포함하는 디렉토리를 가리키도록 하고, 세션에서 `/reload-plugins`를 실행합니다. [플러그인이 로드되지만 스킬이 누락됨](/docs/ko/plugins/troubleshooting#plugin-loads-but-its-skills-are-missing)을 참조하세요.
317 271
318<h3 id="the-userconfig-dialog-never-appears">272### `userConfig` 대화 상자가 나타나지 않음
319 `userConfig` 대화 상자가 나타나지 않음
320</h3>
321 273
322플러그인의 [`userConfig`](/docs/ko/plugins/components#user-configuration) 옵션에 대한 대화 상자는 세션에서 `/plugin`을 통해 설치하는 부분입니다. `--plugin-dir`으로 로드하면 표시되지 않으며, `claude plugin install`도 셸에서 표시되지 않습니다. 플러그인이 로드되면 세션에서 `/plugin configure <plugin-name>`을 실행하여 열어보세요. [`userConfig` 대화 상자가 나타나지 않음](/docs/ko/plugins/troubleshooting#the-userconfig-dialog-never-appears)을 참조하세요.274플러그인의 [`userConfig`](/docs/ko/plugins/components#user-configuration) 옵션에 대한 대화 상자는 세션에서 `/plugin`을 통해 설치하는 부분입니다. `--plugin-dir`으로 로드하면 표시되지 않으며, `claude plugin install`도 셸에서 표시되지 않습니다. 플러그인이 로드되면 세션에서 `/plugin configure <plugin-name>`을 실행하여 열어보세요. [`userConfig` 대화 상자가 나타나지 않음](/docs/ko/plugins/troubleshooting#the-userconfig-dialog-never-appears)을 참조하세요.
323 275
324<h3 id="check-that-the-plugin-changes-claude’s-behavior">276### 플러그인이 Claude의 동작을 변경하는지 확인
325 플러그인이 Claude의 동작을 변경하는지 확인
326</h3>
327 277
328오류 없이 로드되는 플러그인도 의도한 방식으로 Claude를 조종하지 못할 수 있습니다. 셸에서 실행하는 `claude plugin eval`은 플러그인 있음과 없음으로 테스트 사례를 실행하고 차이를 점수 매깁니다. [플러그인으로 evals 테스트](/docs/ko/plugin-evals)를 참조하고 [첫 번째 eval 스위트 만들기](/docs/ko/plugin-evals#create-your-first-eval-suite)부터 시작합니다.278오류 없이 로드되는 플러그인도 의도한 방식으로 Claude를 조종하지 못할 수 있습니다. 셸에서 실행하는 `claude plugin eval`은 플러그인 있음과 없음으로 테스트 사례를 실행하고 차이를 점수 매깁니다. [플러그인으로 evals 테스트](/docs/ko/plugin-evals)를 참조하고 [첫 번째 eval 스위트 만들기](/docs/ko/plugin-evals#create-your-first-eval-suite)부터 시작합니다.
329 279
330<h2 id="convert-an-existing-claude-setup">280## 기존 `.claude/` 설정 변환
331 기존 `.claude/` 설정 변환
332</h2>
333 281
334프로젝트의 `.claude/` 디렉토리 아래에 스킬, 에이전트 또는 훅이 이미 있으면 다시 작성하지 않고 플러그인으로 이동할 수 있습니다.282프로젝트의 `.claude/` 디렉토리 아래에 스킬, 에이전트 또는 훅이 이미 있으면 다시 작성하지 않고 플러그인으로 이동할 수 있습니다.
335 283
336`.claude/`를 포함하는 디렉토리인 프로젝트 루트에서 이 단계의 명령을 실행합니다. `cp` 경로가 상대적이기 때문입니다.284`.claude/`를 포함하는 디렉토리인 프로젝트 루트에서 이 단계의 명령을 실행합니다. `cp` 경로가 상대적이기 때문입니다.
337 285
338<Steps>286**1. 플러그인 구조 만들기**
339 <Step title="플러그인 구조 만들기">
340 플러그인 디렉토리와 `.claude-plugin/` 폴더를 `.claude/` 옆에 만듭니다. 나중에 플러그인을 어디든 이동할 수 있습니다.
341 287
342 ```bash theme={null}288플러그인 디렉토리와 `.claude-plugin/` 폴더를 `.claude/` 옆에 만듭니다. 나중에 플러그인을 어디든 이동할 수 있습니다.
343 mkdir -p my-plugin/.claude-plugin
344 ```
345 289
346 `my-plugin/.claude-plugin/plugin.json`을 만듭니다:290```bash theme={null}
291mkdir -p my-plugin/.claude-plugin
292```
347 293
348 ```json my-plugin/.claude-plugin/plugin.json theme={null}294`my-plugin/.claude-plugin/plugin.json`을 만듭니다:
349 {295
296```json my-plugin/.claude-plugin/plugin.json theme={null}
297{
350 "name": "my-plugin",298 "name": "my-plugin",
351 "description": "Migrated from standalone configuration",299 "description": "Migrated from standalone configuration",
352 "version": "1.0.0"300 "version": "1.0.0"
353 }301}
354 ```302```
355 </Step>
356 303
357 <Step title="기존 파일 복사">304**2. 기존 파일 복사**
358 가지고 있는 각 구성 디렉토리를 플러그인 루트로 복사하고 없는 디렉토리의 명령을 건너뜁니다.
359 305
360 ```bash theme={null}306가지고 있는 각 구성 디렉토리를 플러그인 루트로 복사하고 없는 디렉토리의 명령을 건너뜁니다.
361 cp -r .claude/commands my-plugin/307
362 ```308```bash theme={null}
309cp -r .claude/commands my-plugin/
310```
311
312```bash theme={null}
313cp -r .claude/agents my-plugin/
314```
363 315
364 ```bash theme={null}316```bash theme={null}
365 cp -r .claude/agents my-plugin/317cp -r .claude/skills my-plugin/
366 ```318```
367 319
368 ```bash theme={null}320`ls -a my-plugin`을 실행하여 복사한 각 디렉토리가 `.claude-plugin` 옆에 나타나는지 확인합니다.
369 cp -r .claude/skills my-plugin/
370 ```
371 321
372 `ls -a my-plugin`을 실행하여 복사한 각 디렉토리가 `.claude-plugin` 옆에 나타나는지 확인합니다.322**3. 훅 이동**
373 </Step>
374 323
375 <Step title="훅 이동">324`.claude/settings.json` 또는 `.claude/settings.local.json`에 훅이 있으면 훅 디렉토리를 만듭니다:
376 `.claude/settings.json` 또는 `.claude/settings.local.json`에 훅이 있으면 훅 디렉토리를 만듭니다:
377 325
378 ```bash theme={null}326```bash theme={null}
379 mkdir -p my-plugin/hooks327mkdir -p my-plugin/hooks
380 ```328```
381 329
382 `my-plugin/hooks/hooks.json`을 만들고 설정 파일에서 `hooks` 객체를 복사합니다. 형식은 동일합니다.330`my-plugin/hooks/hooks.json`을 만들고 설정 파일에서 `hooks` 객체를 복사합니다. 형식은 동일합니다.
383 331
384 이 예제는 Claude가 작성하거나 편집하는 각 파일에서 린터를 실행하는 하나의 훅이 있는 형태를 보여줍니다. 예제를 자신의 `hooks` 객체로 바꾸세요.332이 예제는 Claude가 작성하거나 편집하는 각 파일에서 린터를 실행하는 하나의 훅이 있는 형태를 보여줍니다. 예제를 자신의 `hooks` 객체로 바꾸세요.
385 333
386 ```json my-plugin/hooks/hooks.json theme={null}334```json my-plugin/hooks/hooks.json theme={null}
387 {335{
388 "hooks": {336 "hooks": {
389 "PostToolUse": [337 "PostToolUse": [
390 {338 {
393 }341 }
394 ]342 ]
395 }343 }
396 }344}
397 ```345```
398 </Step>346
347**4. 마이그레이션된 플러그인 테스트**
399 348
400 <Step title="마이그레이션된 플러그인 테스트">349한 세션 동안 플러그인을 로드합니다:
401 한 세션 동안 플러그인을 로드합니다:
402 350
403 ```bash theme={null}351```bash theme={null}
404 claude --plugin-dir ./my-plugin352claude --plugin-dir ./my-plugin
405 ```353```
406 354
407 새 이름으로 각 구성 요소를 확인합니다:355새 이름으로 각 구성 요소를 확인합니다:
408 356
409 * **스킬**: `/deploy`였던 스킬에 대해 `/my-plugin:deploy`를 실행합니다.357* **스킬**: `/deploy`였던 스킬에 대해 `/my-plugin:deploy`를 실행합니다.
410 * **서브에이전트**: `reviewer`였던 에이전트에 대해 Claude에 `my-plugin:reviewer` 에이전트를 사용하도록 요청합니다.358* **서브에이전트**: `reviewer`였던 에이전트에 대해 Claude에 `my-plugin:reviewer` 에이전트를 사용하도록 요청합니다.
411 * **훅**: 각 훅이 일치하는 이벤트를 트리거합니다.359* **훅**: 각 훅이 일치하는 이벤트를 트리거합니다.
412 360
413 뭔가 누락되면 [테스트 및 디버그](#test-and-debug)를 진행합니다.361뭔가 누락되면 [테스트 및 디버그](#test-and-debug)를 진행합니다.
414 </Step>
415</Steps>
416 362
417원본이 여전히 `.claude/` 아래에 있는 동안 플러그인의 복사본과 함께 로드된 상태로 유지됩니다:363원본이 여전히 `.claude/` 아래에 있는 동안 플러그인의 복사본과 함께 로드된 상태로 유지됩니다:
418 364
421 367
422플러그인이 작동하는지 확인한 후 `.claude/`에서 원본을 삭제하고 설정 파일에서 `hooks` 객체를 제거합니다.368플러그인이 작동하는지 확인한 후 `.claude/`에서 원본을 삭제하고 설정 파일에서 `hooks` 객체를 제거합니다.
423 369
424<h2 id="next-steps">370## 다음 단계
425 다음 단계
426</h2>
427 371
428* [플러그인 구성 요소](/docs/ko/plugins/components): 에이전트, 훅, MCP 서버, LSP 서버 및 사용자 구성을 플러그인에 추가합니다372* [플러그인 구성 요소](/docs/ko/plugins/components): 에이전트, 훅, MCP 서버, LSP 서버 및 사용자 구성을 플러그인에 추가합니다
429* [플러그인으로 evals 테스트](/docs/ko/plugin-evals): eval 사례를 작성하고 `claude plugin eval`로 실행하여 플러그인이 Claude의 동작을 얼마나 안정적으로 안내하는지 확인합니다373* [플러그인으로 evals 테스트](/docs/ko/plugin-evals): eval 사례를 작성하고 `claude plugin eval`로 실행하여 플러그인이 Claude의 동작을 얼마나 안정적으로 안내하는지 확인합니다