ํ๋ฌ๊ทธ์ธ ๋ง์ผํ๋ ์ด์ค ์์ฑ ๋ฐ ๋ฐฐํฌ
Claude Code ํ์ฅ ํ๋ก๊ทธ๋จ์ ํ๊ณผ ์ปค๋ฎค๋ํฐ์ ๋ฐฐํฌํ๊ธฐ ์ํ ํ๋ฌ๊ทธ์ธ ๋ง์ผํ๋ ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ณ ํธ์คํ ํฉ๋๋ค.
ํ๋ฌ๊ทธ์ธ ๋ง์ผํ๋ ์ด์ค๋ ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ํ๋ฌ๊ทธ์ธ์ ๋ฐฐํฌํ ์ ์๋ ์นดํ๋ก๊ทธ์ ๋๋ค. ๋ง์ผํ๋ ์ด์ค๋ ์ค์ ์ง์ค์ ๊ฒ์, ๋ฒ์ ์ถ์ , ์๋ ์ ๋ฐ์ดํธ ๋ฐ ์ฌ๋ฌ ์์ค ์ ํ(git ์ ์ฅ์, ๋ก์ปฌ ๊ฒฝ๋ก ๋ฑ)์ ์ง์ํฉ๋๋ค. ์ด ๊ฐ์ด๋์์๋ ํ์ด๋ ์ปค๋ฎค๋ํฐ์ ํ๋ฌ๊ทธ์ธ์ ๊ณต์ ํ๊ธฐ ์ํด ์์ ์ ๋ง์ผํ๋ ์ด์ค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
๊ธฐ์กด ๋ง์ผํ๋ ์ด์ค์์ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๋ ค๊ณ ํ์๋์? ๋ฏธ๋ฆฌ ๋น๋๋ ํ๋ฌ๊ทธ์ธ ๊ฒ์ ๋ฐ ์ค์น๋ฅผ ์ฐธ์กฐํ์ธ์.
๊ฐ์
๋ง์ผํ๋ ์ด์ค๋ฅผ ์์ฑํ๊ณ ๋ฐฐํฌํ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํ๋ฌ๊ทธ์ธ ์์ฑ: skills, ์์ด์ ํธ, hooks, MCP ์๋ฒ ๋๋ LSP ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ์ด์์ ํ๋ฌ๊ทธ์ธ์ ๋น๋ํฉ๋๋ค. ์ด ๊ฐ์ด๋์์๋ ๋ฐฐํฌํ ํ๋ฌ๊ทธ์ธ์ด ์ด๋ฏธ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ ์์ฑ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ํ๋ฌ๊ทธ์ธ ์์ฑ์ ์ฐธ์กฐํ์ธ์.
- ๋ง์ผํ๋ ์ด์ค ํ์ผ ์์ฑ: ํ๋ฌ๊ทธ์ธ์ ๋์ดํ๊ณ ํ๋ฌ๊ทธ์ธ์ ์ฐพ์ ์์น๋ฅผ ์ ์ํ๋
marketplace.json์ ์ ์ํฉ๋๋ค(๋ง์ผํ๋ ์ด์ค ํ์ผ ์์ฑ ์ฐธ์กฐ). - ๋ง์ผํ๋ ์ด์ค ํธ์คํ : GitHub, GitLab ๋๋ ๋ค๋ฅธ git ํธ์คํธ์ ํธ์ํฉ๋๋ค(๋ง์ผํ๋ ์ด์ค ํธ์คํ ๋ฐ ๋ฐฐํฌ ์ฐธ์กฐ).
- ์ฌ์ฉ์์ ๊ณต์ : ์ฌ์ฉ์๊ฐ
/plugin marketplace add๋ก ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ถ๊ฐํ๊ณ ๊ฐ๋ณ ํ๋ฌ๊ทธ์ธ์ ์ค์นํฉ๋๋ค(ํ๋ฌ๊ทธ์ธ ๊ฒ์ ๋ฐ ์ค์น ์ฐธ์กฐ).
๋ง์ผํ๋ ์ด์ค๊ฐ ๋ผ์ด๋ธ ์ํ๊ฐ ๋๋ฉด ์ ์ฅ์์ ๋ณ๊ฒฝ ์ฌํญ์ ํธ์ํ์ฌ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๋ /plugin marketplace update๋ก ๋ก์ปฌ ๋ณต์ฌ๋ณธ์ ์๋ก ๊ณ ์นฉ๋๋ค.
์ฐ์ต: ๋ก์ปฌ ๋ง์ผํ๋ ์ด์ค ์์ฑ
์ด ์์ ์์๋ ํ๋์ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ง์ผํ๋ ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค: ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์ํ quality-review skill์
๋๋ค. ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๊ณ , skill์ ์ถ๊ฐํ๊ณ , ํ๋ฌ๊ทธ์ธ ๋งค๋ํ์คํธ์ ๋ง์ผํ๋ ์ด์ค ์นดํ๋ก๊ทธ๋ฅผ ์์ฑํ ๋ค์, ์ค์นํ๊ณ ํ
์คํธํฉ๋๋ค.
๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ ์์ฑ
mkdir -p my-marketplace/.claude-plugin
mkdir -p my-marketplace/plugins/quality-review-plugin/.claude-plugin
mkdir -p my-marketplace/plugins/quality-review-plugin/skills/quality-review
skill ์์ฑ
quality-review skill์ด ์ํํ๋ ์์
์ ์ ์ํ๋ SKILL.md ํ์ผ์ ์์ฑํฉ๋๋ค.
---
description: ๋ฒ๊ทธ, ๋ณด์ ๋ฐ ์ฑ๋ฅ์ ๋ํ ์ฝ๋ ๊ฒํ
disable-model-invocation: true
---
์ ํํ ์ฝ๋ ๋๋ ์ต๊ทผ ๋ณ๊ฒฝ ์ฌํญ์ ๋ค์ ํญ๋ชฉ์ ๋ํด ๊ฒํ ํฉ๋๋ค:
- ์ ์ฌ์ ๋ฒ๊ทธ ๋๋ ์ฃ์ง ์ผ์ด์ค
- ๋ณด์ ๋ฌธ์
- ์ฑ๋ฅ ๋ฌธ์
- ๊ฐ๋
์ฑ ๊ฐ์
๊ฐ๊ฒฐํ๊ณ ์คํ ๊ฐ๋ฅํ ๋ด์ฉ์ ์ ๊ณตํฉ๋๋ค.
ํ๋ฌ๊ทธ์ธ ๋งค๋ํ์คํธ ์์ฑ
ํ๋ฌ๊ทธ์ธ์ ์ค๋ช
ํ๋ plugin.json ํ์ผ์ ์์ฑํฉ๋๋ค. ๋งค๋ํ์คํธ๋ .claude-plugin/ ๋๋ ํฐ๋ฆฌ์ ์์นํฉ๋๋ค.
{
"name": "quality-review-plugin",
"description": "๋น ๋ฅธ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์ํ quality-review skill ์ถ๊ฐ",
"version": "1.0.0"
}
version์ ์ค์ ํ๋ฉด ์ฌ์ฉ์๋ ์ด ํ๋๋ฅผ ๋ณ๊ฒฝํ ๋๋ง ์
๋ฐ์ดํธ๋ฅผ ๋ฐ์ผ๋ฏ๋ก, ๋ชจ๋ ๋ฆด๋ฆฌ์ค์์ ์ด๋ฅผ ์ฆ๊ฐ์ํต๋๋ค. version์ ์๋ตํ๊ณ ์ด ๋ง์ผํ๋ ์ด์ค๋ฅผ git์์ ํธ์คํ
ํ๋ฉด, ๋ชจ๋ ์ปค๋ฐ์ด ์๋์ผ๋ก ์ ๋ฒ์ ์ผ๋ก ๊ณ์ฐ๋ฉ๋๋ค. ๋ฒ์ ํด์์ ์ฐธ์กฐํ์ฌ ์ฌ๋ฐ๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ ํํฉ๋๋ค.
๋ง์ผํ๋ ์ด์ค ํ์ผ ์์ฑ
ํ๋ฌ๊ทธ์ธ์ ๋์ดํ๋ ๋ง์ผํ๋ ์ด์ค ์นดํ๋ก๊ทธ๋ฅผ ์์ฑํฉ๋๋ค.
{
"name": "my-plugins",
"owner": {
"name": "Your Name"
},
"plugins": [
{
"name": "quality-review-plugin",
"source": "./plugins/quality-review-plugin",
"description": "๋น ๋ฅธ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์ํ quality-review skill ์ถ๊ฐ"
}
]
}
์ถ๊ฐ ๋ฐ ์ค์น
๋ง์ผํ๋ ์ด์ค๋ฅผ ์ถ๊ฐํ๊ณ ํ๋ฌ๊ทธ์ธ์ ์ค์นํฉ๋๋ค.
/plugin marketplace add ./my-marketplace
/plugin install quality-review-plugin@my-plugins
์๋ํด๋ณด๊ธฐ
ํธ์ง๊ธฐ์์ ์ผ๋ถ ์ฝ๋๋ฅผ ์ ํํ๊ณ ์ skill์ ์คํํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ skill์ ํ๋ฌ๊ทธ์ธ ์ด๋ฆ์ผ๋ก ๋ค์์คํ์ด์ค๋ฉ๋๋ค.
/quality-review-plugin:quality-review
ํ๋ฌ๊ทธ์ธ์ด ์ํํ ์ ์๋ ์์ (hooks, ์์ด์ ํธ, MCP ์๋ฒ ๋ฐ LSP ์๋ฒ ํฌํจ)์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด ํ๋ฌ๊ทธ์ธ์ ์ฐธ์กฐํ์ธ์.
ํ๋ฌ๊ทธ์ธ ์ค์น ๋ฐฉ๋ฒ: ์ฌ์ฉ์๊ฐ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๋ฉด Claude Code๋ ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์บ์ ์์น์ ๋ณต์ฌํฉ๋๋ค. ์ด๋ ../shared-utils์ ๊ฐ์ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ ์ธ๋ถ์ ํ์ผ์ ์ฐธ์กฐํ ์ ์๋ค๋ ์๋ฏธ์
๋๋ค. ์๋ํ๋ฉด ํด๋น ํ์ผ์ด ๋ณต์ฌ๋์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค.
ํ๋ฌ๊ทธ์ธ ๊ฐ์ ํ์ผ์ ๊ณต์ ํด์ผ ํ๋ ๊ฒฝ์ฐ symlink๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ํ๋ฌ๊ทธ์ธ ์บ์ฑ ๋ฐ ํ์ผ ํด์์ ์ฐธ์กฐํ์ธ์.
๋ง์ผํ๋ ์ด์ค ํ์ผ ์์ฑ
์ ์ฅ์ ๋ฃจํธ์ .claude-plugin/marketplace.json์ ์์ฑํฉ๋๋ค. ์ด ํ์ผ์ ๋ง์ผํ๋ ์ด์ค์ ์ด๋ฆ, ์์ ์ ์ ๋ณด ๋ฐ ์์ค๊ฐ ์๋ ํ๋ฌ๊ทธ์ธ ๋ชฉ๋ก์ ์ ์ํฉ๋๋ค.
๊ฐ ํ๋ฌ๊ทธ์ธ ํญ๋ชฉ์๋ ์ต์ํ name๊ณผ source(๊ฐ์ ธ์ฌ ์์น)๊ฐ ํ์ํฉ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ํ๋๋ ์๋์ ์ ์ฒด ์คํค๋ง๋ฅผ ์ฐธ์กฐํ์ธ์.
{
"name": "company-tools",
"owner": {
"name": "DevTools Team",
"email": "devtools@example.com"
},
"plugins": [
{
"name": "code-formatter",
"source": "./plugins/formatter",
"description": "์ ์ฅ ์ ์๋ ์ฝ๋ ํฌ๋งทํ
",
"version": "2.1.0",
"author": {
"name": "DevTools Team"
}
},
{
"name": "deployment-tools",
"source": {
"source": "github",
"repo": "company/deploy-plugin"
},
"description": "๋ฐฐํฌ ์๋ํ ๋๊ตฌ"
}
]
}
๋ง์ผํ๋ ์ด์ค ์คํค๋ง
ํ์ ํ๋
| ํ๋ | ์ ํ | ์ค๋ช | ์์ |
|---|---|---|---|
name |
string | ๋ง์ผํ๋ ์ด์ค ์๋ณ์(kebab-case, ๊ณต๋ฐฑ ์์). ์ด๋ ๊ณต๊ฐ ๋๋ฉด์
๋๋ค: ์ฌ์ฉ์๋ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ ๋ ์ด๋ฅผ ๋ด
๋๋ค(์: /plugin install my-tool@your-marketplace). ๊ฐ ์ฌ์ฉ์๋ ์ด๋ฆ๋น ํ๋์ ๋ง์ผํ๋ ์ด์ค๋ง ๋ฑ๋กํ ์ ์์ต๋๋ค: ๋์ผํ ์ด๋ฆ์ผ๋ก ๋ ๋ฒ์งธ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ถ๊ฐํ๋ฉด ์ฒซ ๋ฒ์งธ๋ฅผ ๋์ฒดํฉ๋๋ค. ํ๋์ ๋ง์ผํ๋ ์ด์ค ์ด๋ฆ ์๋์ ์ฌ๋ฌ ํ๋ฌ๊ทธ์ธ์ ๊ฒ์ํ๋ ค๋ฉด ๋จ์ผ marketplace.json์ ๋ชจ๋ ๋์ดํ์ธ์. |
"acme-tools" |
owner |
object | ๋ง์ผํ๋ ์ด์ค ์ ์ง ๊ด๋ฆฌ์ ์ ๋ณด(์๋ ํ๋ ์ฐธ์กฐ) | |
plugins |
array | ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋ฌ๊ทธ์ธ ๋ชฉ๋ก | ์๋ ์ฐธ์กฐ |
์์ฝ๋ ์ด๋ฆ: ๋ค์ ๋ง์ผํ๋ ์ด์ค ์ด๋ฆ์ ๊ณต์ Anthropic ์ฌ์ฉ์ ์ํด ์์ฝ๋์ด ์์ผ๋ฉฐ ํ์ฌ ๋ง์ผํ๋ ์ด์ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค: claude-code-marketplace, claude-code-plugins, claude-plugins-official, claude-plugins-community, claude-community, anthropic-marketplace, anthropic-plugins, agent-skills, anthropic-agent-skills, knowledge-work-plugins, life-sciences, claude-for-legal, claude-for-financial-services, financial-services-plugins. ๊ณต์ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ฌ์นญํ๋ ์ด๋ฆ(์: official-claude-plugins ๋๋ anthropic-tools-v2)๋ ์ฐจ๋จ๋ฉ๋๋ค.
์์ ์ ํ๋
| ํ๋ | ์ ํ | ํ์ | ์ค๋ช |
|---|---|---|---|
name |
string | ์ | ์ ์ง ๊ด๋ฆฌ์ ๋๋ ํ์ ์ด๋ฆ |
email |
string | ์๋์ค | ์ ์ง ๊ด๋ฆฌ์์ ์ฐ๋ฝ์ฒ ์ด๋ฉ์ผ |
์ ํ์ ํ๋
| ํ๋ | ์ ํ | ์ค๋ช |
|---|---|---|
$schema |
string | ํธ์ง๊ธฐ ์๋ ์์ฑ ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํ JSON Schema URL์ ๋๋ค. Claude Code๋ ๋ก๋ ์ ์ด ํ๋๋ฅผ ๋ฌด์ํฉ๋๋ค. |
description |
string | ๊ฐ๋จํ ๋ง์ผํ๋ ์ด์ค ์ค๋ช |
version |
string | ๋ง์ผํ๋ ์ด์ค ๋งค๋ํ์คํธ ๋ฒ์ |
metadata.pluginRoot |
string | ์๋ ํ๋ฌ๊ทธ์ธ ์์ค ๊ฒฝ๋ก์ ์์ ๋ถ๋ ๊ธฐ๋ณธ ๋๋ ํฐ๋ฆฌ(์: "./plugins"๋ฅผ ์ฌ์ฉํ๋ฉด "source": "./plugins/formatter" ๋์ "source": "formatter"๋ฅผ ์์ฑํ ์ ์์ต๋๋ค) |
allowCrossMarketplaceDependenciesOn |
array | ์ด ๋ง์ผํ๋ ์ด์ค์ ํ๋ฌ๊ทธ์ธ์ด ์์กดํ ์ ์๋ ๋ค๋ฅธ ๋ง์ผํ๋ ์ด์ค์ ๋๋ค. ์ฌ๊ธฐ์ ๋์ด๋์ง ์์ ๋ง์ผํ๋ ์ด์ค์ ์ข ์์ฑ์ ์ค์น ์ ์ฐจ๋จ๋ฉ๋๋ค. ๋ค๋ฅธ ๋ง์ผํ๋ ์ด์ค์ ํ๋ฌ๊ทธ์ธ์ ์์กด์ ์ฐธ์กฐํ์ธ์. |
description ๋ฐ version์ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ํด metadata ์๋์์๋ ํ์ฉ๋ฉ๋๋ค.
ํ๋ฌ๊ทธ์ธ ํญ๋ชฉ
plugins ๋ฐฐ์ด์ ๊ฐ ํ๋ฌ๊ทธ์ธ ํญ๋ชฉ์ ํ๋ฌ๊ทธ์ธ๊ณผ ํ๋ฌ๊ทธ์ธ์ ์ฐพ์ ์์น๋ฅผ ์ค๋ช
ํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ ๋งค๋ํ์คํธ ์คํค๋ง์ ๋ชจ๋ ํ๋(์: description, version, author, commands, hooks ๋ฑ)์ ์ด๋ฌํ ๋ง์ผํ๋ ์ด์ค ํน์ ํ๋๋ฅผ ํฌํจํ ์ ์์ต๋๋ค: source, category, tags ๋ฐ strict.
ํ์ ํ๋
| ํ๋ | ์ ํ | ์ค๋ช |
|---|---|---|
name |
string | ํ๋ฌ๊ทธ์ธ ์๋ณ์(kebab-case, ๊ณต๋ฐฑ ์์). ์ด๋ ๊ณต๊ฐ ๋๋ฉด์
๋๋ค: ์ฌ์ฉ์๋ ์ค์นํ ๋ ์ด๋ฅผ ๋ด
๋๋ค(์: /plugin install my-plugin@marketplace). |
source |
string|object | ํ๋ฌ๊ทธ์ธ์ ๊ฐ์ ธ์ฌ ์์น(์๋ ํ๋ฌ๊ทธ์ธ ์์ค ์ฐธ์กฐ) |
์ ํ์ ํ๋ฌ๊ทธ์ธ ํ๋
ํ์ค ๋ฉํ๋ฐ์ดํฐ ํ๋:
| ํ๋ | ์ ํ | ์ค๋ช |
|---|---|---|
displayName |
string | {/* min-version: 2.1.143 */}UI ํ๋ฉด์ ํ์๋๋ ์ฌ๋์ด ์ฝ์ ์ ์๋ ์ด๋ฆ์
๋๋ค. ์๋ตํ๋ฉด name์ผ๋ก ๋์๊ฐ๋๋ค. ๊ณต๋ฐฑ๊ณผ ๋ชจ๋ ๋์๋ฌธ์๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ๋ค์์คํ์ด์ฑ์ด๋ ์กฐํ์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. Claude Code v2.1.143 ์ด์์ด ํ์ํฉ๋๋ค. |
description |
string | ๊ฐ๋จํ ํ๋ฌ๊ทธ์ธ ์ค๋ช |
version |
string | ํ๋ฌ๊ทธ์ธ ๋ฒ์ . ์ค์ ๋ ๊ฒฝ์ฐ(์ฌ๊ธฐ ๋๋ plugin.json์์), ํ๋ฌ๊ทธ์ธ์ ์ด ๋ฌธ์์ด๋ก ๊ณ ์ ๋๋ฉฐ ์ฌ์ฉ์๋ ๋ณ๊ฒฝ๋ ๋๋ง ์
๋ฐ์ดํธ๋ฅผ ๋ฐ์ต๋๋ค. ์๋ตํ๋ฉด git ์ปค๋ฐ SHA๋ก ๋์๊ฐ๋๋ค. ๋ฒ์ ํด์์ ์ฐธ์กฐํ์ธ์. |
author |
object | ํ๋ฌ๊ทธ์ธ ์์ฑ์ ์ ๋ณด(name ํ์, email ์ ํ) |
homepage |
string | ํ๋ฌ๊ทธ์ธ ํํ์ด์ง ๋๋ ๋ฌธ์ URL |
repository |
string | ์์ค ์ฝ๋ ์ ์ฅ์ URL |
license |
string | SPDX ๋ผ์ด์ ์ค ์๋ณ์(์: MIT, Apache-2.0) |
keywords |
array | ํ๋ฌ๊ทธ์ธ ๊ฒ์ ๋ฐ ๋ถ๋ฅ๋ฅผ ์ํ ํ๊ทธ |
category |
string | ์กฐ์ง์ ์ํ ํ๋ฌ๊ทธ์ธ ์นดํ ๊ณ ๋ฆฌ |
tags |
array | ๊ฒ์ ๊ฐ๋ฅ์ฑ์ ์ํ ํ๊ทธ |
strict |
boolean | plugin.json์ด ๊ตฌ์ฑ ์์ ์ ์์ ๊ถํ์ธ์ง ์ฌ๋ถ๋ฅผ ์ ์ดํฉ๋๋ค(๊ธฐ๋ณธ๊ฐ: true). ์๋์ Strict ๋ชจ๋๋ฅผ ์ฐธ์กฐํ์ธ์. |
defaultEnabled |
boolean | {/* min-version: 2.1.154 */}ํ๋ฌ๊ทธ์ธ์ด ์ค์น ํ ํ์ฑํ๋๋์ง ์ฌ๋ถ(๊ธฐ๋ณธ๊ฐ: true). ์ฌ์ฉ์๊ฐ ์ตํธ์ธํ ๋๊น์ง ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํ๋ ์ํ๋ก ์ค์นํ๋ ค๋ฉด false๋ก ์ค์ ํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ์ plugin.json์ ์๋ ๋์ผํ ํ๋๋ณด๋ค ์ฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ ํ์ฑํ๋ฅผ ์ฐธ์กฐํ์ธ์. Claude Code v2.1.154 ์ด์์ด ํ์ํฉ๋๋ค. |
๊ตฌ์ฑ ์์ ๊ตฌ์ฑ ํ๋:
| ํ๋ | ์ ํ | ์ค๋ช |
|---|---|---|
skills |
string|array | <name>/SKILL.md๋ฅผ ํฌํจํ๋ skill ๋๋ ํฐ๋ฆฌ์ ์ฌ์ฉ์ ์ ์ ๊ฒฝ๋ก |
commands |
string|array | ํ๋ฉด .md skill ํ์ผ ๋๋ ๋๋ ํฐ๋ฆฌ์ ์ฌ์ฉ์ ์ ์ ๊ฒฝ๋ก |
agents |
string|array | ์์ด์ ํธ ํ์ผ์ ์ฌ์ฉ์ ์ ์ ๊ฒฝ๋ก |
hooks |
string|object | ์ฌ์ฉ์ ์ ์ hooks ๊ตฌ์ฑ ๋๋ hooks ํ์ผ ๊ฒฝ๋ก |
mcpServers |
string|object | MCP ์๋ฒ ๊ตฌ์ฑ ๋๋ MCP ๊ตฌ์ฑ ๊ฒฝ๋ก |
lspServers |
string|object | LSP ์๋ฒ ๊ตฌ์ฑ ๋๋ LSP ๊ตฌ์ฑ ๊ฒฝ๋ก |
ํ๋ฌ๊ทธ์ธ ์์ค
ํ๋ฌ๊ทธ์ธ ์์ค๋ Claude Code์ ๋ง์ผํ๋ ์ด์ค์ ๋์ด๋ ๊ฐ ๊ฐ๋ณ ํ๋ฌ๊ทธ์ธ์ ๊ฐ์ ธ์ฌ ์์น๋ฅผ ์๋ ค์ค๋๋ค. ์ด๋ marketplace.json์ ๊ฐ ํ๋ฌ๊ทธ์ธ ํญ๋ชฉ์ source ํ๋์ ์ค์ ๋ฉ๋๋ค.
ํ๋ฌ๊ทธ์ธ์ด ๋ก์ปฌ ๋จธ์ ์ ๋ณต์ ๋๊ฑฐ๋ ๋ณต์ฌ๋๋ฉด ~/.claude/plugins/cache์ ๋ก์ปฌ ๋ฒ์ ๊ด๋ฆฌ ํ๋ฌ๊ทธ์ธ ์บ์์ ๋ณต์ฌ๋ฉ๋๋ค.
| ์์ค | ์ ํ | ํ๋ | ์ฐธ๊ณ |
|---|---|---|---|
| ์๋ ๊ฒฝ๋ก | string (์: "./my-plugin") |
์์ | ๋ง์ผํ๋ ์ด์ค ์ ์ฅ์ ๋ด์ ๋ก์ปฌ ๋๋ ํฐ๋ฆฌ. ./๋ก ์์ํด์ผ ํฉ๋๋ค. ๋ง์ผํ๋ ์ด์ค ๋ฃจํธ์ ์๋์ ์ผ๋ก ํด์๋๋ฉฐ, .claude-plugin/ ๋๋ ํฐ๋ฆฌ๊ฐ ์๋๋๋ค |
github |
object | repo, ref?, sha? |
|
url |
object | url, ref?, sha? |
Git URL ์์ค |
git-subdir |
object | url, path, ref?, sha? |
git ์ ์ฅ์ ๋ด์ ํ์ ๋๋ ํฐ๋ฆฌ. ๋ชจ๋ ธ๋ ํฌ์ ๋์ญํญ์ ์ต์ํํ๊ธฐ ์ํด ํฌ์ํ๊ฒ ๋ณต์ ํฉ๋๋ค |
npm |
object | package, version?, registry? |
npm install์ ํตํด ์ค์น๋จ |
๋ง์ผํ๋ ์ด์ค ์์ค vs ํ๋ฌ๊ทธ์ธ ์์ค: ์ด๋ ๋ค์ํ ๊ฒ์ ์ ์ดํ๋ ๋ค์ํ ๊ฐ๋ ์ ๋๋ค.
- ๋ง์ผํ๋ ์ด์ค ์์ค โ
marketplace.json์นดํ๋ก๊ทธ ์์ฒด๋ฅผ ๊ฐ์ ธ์ฌ ์์น. ์ฌ์ฉ์๊ฐ/plugin marketplace add๋ฅผ ์คํํ๊ฑฐ๋extraKnownMarketplaces์ค์ ์์ ์ค์ ํฉ๋๋ค.ref(๋ถ๊ธฐ/ํ๊ทธ)๋ฅผ ์ง์ํ์ง๋งsha๋ ์ง์ํ์ง ์์ต๋๋ค. - ํ๋ฌ๊ทธ์ธ ์์ค โ ๋ง์ผํ๋ ์ด์ค์ ๋์ด๋ ๊ฐ๋ณ ํ๋ฌ๊ทธ์ธ์ ๊ฐ์ ธ์ฌ ์์น.
marketplace.json๋ด์ ๊ฐ ํ๋ฌ๊ทธ์ธ ํญ๋ชฉ์sourceํ๋์ ์ค์ ๋ฉ๋๋ค.ref(๋ถ๊ธฐ/ํ๊ทธ)์sha(์ ํํ ์ปค๋ฐ) ๋ชจ๋๋ฅผ ์ง์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, acme-corp/plugin-catalog์์ ํธ์คํ
๋๋ ๋ง์ผํ๋ ์ด์ค(๋ง์ผํ๋ ์ด์ค ์์ค)๋ acme-corp/code-formatter์์ ๊ฐ์ ธ์จ ํ๋ฌ๊ทธ์ธ์ ๋์ดํ ์ ์์ต๋๋ค(ํ๋ฌ๊ทธ์ธ ์์ค). ๋ง์ผํ๋ ์ด์ค ์์ค์ ํ๋ฌ๊ทธ์ธ ์์ค๋ ๋ค์ํ ์ ์ฅ์๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ ๋
๋ฆฝ์ ์ผ๋ก ๊ณ ์ ๋ฉ๋๋ค.
git ๊ธฐ๋ฐ ์์ค ์ ํ์ ์๋์ github, url, ๋ฐ git-subdir์
๋๋ค. ref์ sha๊ฐ ๋ชจ๋ ์ค์ ๋๋ฉด sha๊ฐ ์ ํจํ ํ์
๋๋ค. Claude Code๋ ๊ณ ์ ๋ ์ปค๋ฐ์ ์ง์ ๊ฐ์ ธ์ค๊ณ ์ฒดํฌ์์ํ๋ฏ๋ก ๋ถ๊ธฐ ๋๋ ํ๊ทธ๊ฐ ์
์คํธ๋ฆผ์์ ์ญ์ ๋์๋๋ผ๋ ์ปค๋ฐ์ด ์ ์ฅ์์์ ์ฌ์ ํ ๋๋ฌ ๊ฐ๋ฅํ ํ ์ค์น๊ฐ ์ฑ๊ณตํฉ๋๋ค.
์๋ ๊ฒฝ๋ก
๋์ผํ ์ ์ฅ์์ ํ๋ฌ๊ทธ์ธ์ ๊ฒฝ์ฐ ./๋ก ์์ํ๋ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํฉ๋๋ค:
{
"name": "my-plugin",
"source": "./plugins/my-plugin"
}
๊ฒฝ๋ก๋ ๋ง์ผํ๋ ์ด์ค ๋ฃจํธ(.claude-plugin/์ ํฌํจํ๋ ๋๋ ํฐ๋ฆฌ)์ ์๋์ ์ผ๋ก ํด์๋ฉ๋๋ค. ์์ ์์์ ./plugins/my-plugin์ marketplace.json์ด <repo>/.claude-plugin/marketplace.json์ ์๋๋ผ๋ <repo>/plugins/my-plugin์ ๊ฐ๋ฆฌํต๋๋ค. ๋ง์ผํ๋ ์ด์ค ๋ฃจํธ ์ธ๋ถ๋ก ๋๊ฐ๊ธฐ ์ํด ../๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์.
์๋ ๊ฒฝ๋ก๋ ์ฌ์ฉ์๊ฐ Git(GitHub, GitLab ๋๋ git URL)์ ํตํด ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ถ๊ฐํ ๋๋ง ์๋ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ marketplace.json ํ์ผ์ ๋ํ ์ง์ URL์ ํตํด ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ถ๊ฐํ๋ฉด ์๋ ๊ฒฝ๋ก๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํด์๋์ง ์์ต๋๋ค. URL ๊ธฐ๋ฐ ๋ฐฐํฌ์ ๊ฒฝ์ฐ GitHub, npm ๋๋ git URL ์์ค๋ฅผ ๋์ ์ฌ์ฉํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ฌธ์ ํด๊ฒฐ์ ์ฐธ์กฐํ์ธ์.
GitHub ์ ์ฅ์
{
"name": "github-plugin",
"source": {
"source": "github",
"repo": "owner/plugin-repo"
}
}
ํน์ ๋ถ๊ธฐ, ํ๊ทธ ๋๋ ์ปค๋ฐ์ ๊ณ ์ ํ ์ ์์ต๋๋ค:
{
"name": "github-plugin",
"source": {
"source": "github",
"repo": "owner/plugin-repo",
"ref": "v2.0.0",
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
}
}
| ํ๋ | ์ ํ | ์ค๋ช |
|---|---|---|
repo |
string | ํ์. owner/repo ํ์์ GitHub ์ ์ฅ์ |
ref |
string | ์ ํ. Git ๋ถ๊ธฐ ๋๋ ํ๊ทธ(์ ์ฅ์ ๊ธฐ๋ณธ ๋ถ๊ธฐ๋ก ๊ธฐ๋ณธ๊ฐ) |
sha |
string | ์ ํ. ์ ํํ ๋ฒ์ ์ ๊ณ ์ ํ๊ธฐ ์ํ ์ ์ฒด 40์ git ์ปค๋ฐ SHA |
Git ์ ์ฅ์
{
"name": "git-plugin",
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git"
}
}
ํน์ ๋ถ๊ธฐ, ํ๊ทธ ๋๋ ์ปค๋ฐ์ ๊ณ ์ ํ ์ ์์ต๋๋ค:
{
"name": "git-plugin",
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git",
"ref": "main",
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
}
}
| ํ๋ | ์ ํ | ์ค๋ช |
|---|---|---|
url |
string | ํ์. ์ ์ฒด git ์ ์ฅ์ URL(https:// ๋๋ git@). .git ์ ๋ฏธ์ฌ๋ ์ ํ ์ฌํญ์ด๋ฏ๋ก Azure DevOps ๋ฐ AWS CodeCommit URL(์ ๋ฏธ์ฌ ์์)์ด ์๋ํฉ๋๋ค |
ref |
string | ์ ํ. Git ๋ถ๊ธฐ ๋๋ ํ๊ทธ(์ ์ฅ์ ๊ธฐ๋ณธ ๋ถ๊ธฐ๋ก ๊ธฐ๋ณธ๊ฐ) |
sha |
string | ์ ํ. ์ ํํ ๋ฒ์ ์ ๊ณ ์ ํ๊ธฐ ์ํ ์ ์ฒด 40์ git ์ปค๋ฐ SHA |
Git ํ์ ๋๋ ํฐ๋ฆฌ
git-subdir์ ์ฌ์ฉํ์ฌ git ์ ์ฅ์์ ํ์ ๋๋ ํฐ๋ฆฌ ๋ด์ ์๋ ํ๋ฌ๊ทธ์ธ์ ๊ฐ๋ฆฌํต๋๋ค. Claude Code๋ ํฌ์ํ๊ณ ๋ถ๋ถ์ ์ธ ๋ณต์ ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ๋๋ ํฐ๋ฆฌ๋ง ๊ฐ์ ธ์ค๋ฏ๋ก ๋๊ท๋ชจ ๋ชจ๋
ธ๋ ํฌ์ ๋์ญํญ์ ์ต์ํํฉ๋๋ค.
{
"name": "my-plugin",
"source": {
"source": "git-subdir",
"url": "https://github.com/acme-corp/monorepo.git",
"path": "tools/claude-plugin"
}
}
ํน์ ๋ถ๊ธฐ, ํ๊ทธ ๋๋ ์ปค๋ฐ์ ๊ณ ์ ํ ์ ์์ต๋๋ค:
{
"name": "my-plugin",
"source": {
"source": "git-subdir",
"url": "https://github.com/acme-corp/monorepo.git",
"path": "tools/claude-plugin",
"ref": "v2.0.0",
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
}
}
url ํ๋๋ GitHub ๋จ์ถํ(owner/repo) ๋๋ SSH URL(git@github.com:owner/repo.git)๋ ํ์ฉํฉ๋๋ค.
| ํ๋ | ์ ํ | ์ค๋ช |
|---|---|---|
url |
string | ํ์. Git ์ ์ฅ์ URL, GitHub owner/repo ๋จ์ถํ ๋๋ SSH URL |
path |
string | ํ์. ํ๋ฌ๊ทธ์ธ์ ํฌํจํ๋ ์ ์ฅ์ ๋ด์ ํ์ ๋๋ ํฐ๋ฆฌ ๊ฒฝ๋ก(์: "tools/claude-plugin") |
ref |
string | ์ ํ. Git ๋ถ๊ธฐ ๋๋ ํ๊ทธ(์ ์ฅ์ ๊ธฐ๋ณธ ๋ถ๊ธฐ๋ก ๊ธฐ๋ณธ๊ฐ) |
sha |
string | ์ ํ. ์ ํํ ๋ฒ์ ์ ๊ณ ์ ํ๊ธฐ ์ํ ์ ์ฒด 40์ git ์ปค๋ฐ SHA |
npm ํจํค์ง
npm ํจํค์ง๋ก ๋ฐฐํฌ๋๋ ํ๋ฌ๊ทธ์ธ์ npm install์ ์ฌ์ฉํ์ฌ ์ค์น๋ฉ๋๋ค. ์ด๋ ๊ณต๊ฐ npm ๋ ์ง์คํธ๋ฆฌ ๋๋ ํ์ด ํธ์คํ
ํ๋ ๊ฐ์ธ ๋ ์ง์คํธ๋ฆฌ์ ๋ชจ๋ ํจํค์ง์์ ์๋ํฉ๋๋ค.
{
"name": "my-npm-plugin",
"source": {
"source": "npm",
"package": "@acme/claude-plugin"
}
}
ํน์ ๋ฒ์ ์ ๊ณ ์ ํ๋ ค๋ฉด version ํ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค:
{
"name": "my-npm-plugin",
"source": {
"source": "npm",
"package": "@acme/claude-plugin",
"version": "2.1.0"
}
}
๊ฐ์ธ ๋๋ ๋ด๋ถ ๋ ์ง์คํธ๋ฆฌ์์ ์ค์นํ๋ ค๋ฉด registry ํ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค:
{
"name": "my-npm-plugin",
"source": {
"source": "npm",
"package": "@acme/claude-plugin",
"version": "^2.0.0",
"registry": "https://npm.example.com"
}
}
| ํ๋ | ์ ํ | ์ค๋ช |
|---|---|---|
package |
string | ํ์. ํจํค์ง ์ด๋ฆ ๋๋ ๋ฒ์ ์ง์ ํจํค์ง(์: @org/plugin) |
version |
string | ์ ํ. ๋ฒ์ ๋๋ ๋ฒ์ ๋ฒ์(์: 2.1.0, ^2.0.0, ~1.5.0) |
registry |
string | ์ ํ. ์ฌ์ฉ์ ์ ์ npm ๋ ์ง์คํธ๋ฆฌ URL. ์์คํ npm ๋ ์ง์คํธ๋ฆฌ(์ผ๋ฐ์ ์ผ๋ก npmjs.org)๋ก ๊ธฐ๋ณธ๊ฐ |
๊ณ ๊ธ ํ๋ฌ๊ทธ์ธ ํญ๋ชฉ
์ด ์์ ๋ ๋ช ๋ น์ด, ์์ด์ ํธ, hooks ๋ฐ MCP ์๋ฒ์ ์ฌ์ฉ์ ์ ์ ๊ฒฝ๋ก๋ฅผ ํฌํจํ์ฌ ๋ง์ ์ ํ์ ํ๋๋ฅผ ์ฌ์ฉํ๋ ํ๋ฌ๊ทธ์ธ ํญ๋ชฉ์ ๋ณด์ฌ์ค๋๋ค:
{
"name": "enterprise-tools",
"source": {
"source": "github",
"repo": "company/enterprise-plugin"
},
"description": "Enterprise workflow automation tools",
"version": "2.1.0",
"author": {
"name": "Enterprise Team",
"email": "enterprise@example.com"
},
"homepage": "https://docs.example.com/plugins/enterprise-tools",
"repository": "https://github.com/company/enterprise-plugin",
"license": "MIT",
"keywords": ["enterprise", "workflow", "automation"],
"category": "productivity",
"commands": [
"./commands/core/",
"./commands/enterprise/",
"./commands/experimental/preview.md"
],
"agents": ["./agents/security-reviewer.md", "./agents/compliance-checker.md"],
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh"
}
]
}
]
},
"mcpServers": {
"enterprise-db": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"]
}
},
"strict": false
}
์ฃผ๋ชฉํ ์ฃผ์ ์ฌํญ:
commands๋ฐagents: ์ฌ๋ฌ ๋๋ ํฐ๋ฆฌ ๋๋ ๊ฐ๋ณ ํ์ผ์ ์ง์ ํ ์ ์์ต๋๋ค. ๊ฒฝ๋ก๋ ํ๋ฌ๊ทธ์ธ ๋ฃจํธ์ ์๋์ ์ ๋๋ค.${CLAUDE_PLUGIN_ROOT}: hooks ๋ฐ MCP ์๋ฒ ๊ตฌ์ฑ์์ ์ด ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฌ๊ทธ์ธ์ ์ค์น ๋๋ ํฐ๋ฆฌ ๋ด์ ํ์ผ์ ์ฐธ์กฐํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ์ด ์ค์น๋ ๋ ์บ์ ์์น์ ๋ณต์ฌ๋๊ธฐ ๋๋ฌธ์ ํ์ํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ ์ ๋ฐ์ดํธ๋ฅผ ํตํด ์ ์ง๋์ด์ผ ํ๋ ์ข ์์ฑ ๋๋ ์ํ์ ๊ฒฝ์ฐ${CLAUDE_PLUGIN_DATA}๋ฅผ ๋์ ์ฌ์ฉํฉ๋๋ค.strict: false: ์ด๊ฒ์ด false๋ก ์ค์ ๋์ด ์์ผ๋ฏ๋ก ํ๋ฌ๊ทธ์ธ์ ์์ ์plugin.json์ด ํ์ํ์ง ์์ต๋๋ค. ๋ง์ผํ๋ ์ด์ค ํญ๋ชฉ์ด ๋ชจ๋ ๊ฒ์ ์ ์ํฉ๋๋ค. ์๋์ Strict ๋ชจ๋๋ฅผ ์ฐธ์กฐํ์ธ์.
๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ฌ๊ทธ์ธ์ skills๋ ํด๋น source ์๋์ skills/ ๋๋ ํฐ๋ฆฌ์์ ๋ก๋๋๋ฉฐ, skills ์๋์ ๋์ด๋ ๋ชจ๋ ๊ฒฝ๋ก๊ฐ ํด๋น ์ค์บ์ ์ถ๊ฐ๋ฉ๋๋ค. ์์ธ๋ source: "./"์ ๊ฐ์ ๋ง์ผํ๋ ์ด์ค ๋ฃจํธ ์์ค์ด๋ฉฐ, ์ฌ๋ฌ ํ๋ฌ๊ทธ์ธ ํญ๋ชฉ์ด ํ๋์ skills/ ํด๋๋ฅผ ๊ณต์ ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ skills/ ์๋์ ํน์ ํ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋์ดํ๋ฉด ํด๋น ๋ชฉ๋ก์ด ํญ๋ชฉ์ ์์ ํ ์งํฉ์ด ๋๋ฉฐ, skills/ ์๋์ ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ๋ ๋ก๋๋์ง ์์ต๋๋ค. skills/ ๋๋ ํฐ๋ฆฌ ์์ฒด ๋๋ ํ๋ฌ๊ทธ์ธ ๋ฃจํธ๋ฅผ ๋์ดํ๋ฉด ์ ์ฒด ์ค์บ์ด ์ ์ง๋ฉ๋๋ค. ๋์ด๋ ๊ฒฝ๋ก ์ค ์ด๋ ๊ฒ๋ ์กด์ฌํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ์ค์บ์ด ๋์ ์คํ๋ฉ๋๋ค.
Strict ๋ชจ๋
strict ํ๋๋ plugin.json์ด ๊ตฌ์ฑ ์์ ์ ์(skills, ์์ด์ ํธ, hooks, MCP ์๋ฒ, ์ถ๋ ฅ ์คํ์ผ)์ ๊ถํ์ธ์ง ์ฌ๋ถ๋ฅผ ์ ์ดํฉ๋๋ค.
| ๊ฐ | ๋์ |
|---|---|
true(๊ธฐ๋ณธ๊ฐ) |
plugin.json์ด ๊ถํ์
๋๋ค. ๋ง์ผํ๋ ์ด์ค ํญ๋ชฉ์ ์ถ๊ฐ ๊ตฌ์ฑ ์์๋ก ์ด๋ฅผ ๋ณด์ํ ์ ์์ผ๋ฉฐ ๋ ์์ค๊ฐ ๋ณํฉ๋ฉ๋๋ค. |
false |
๋ง์ผํ๋ ์ด์ค ํญ๋ชฉ์ด ์ ์ฒด ์ ์์
๋๋ค. ํ๋ฌ๊ทธ์ธ์ ๊ตฌ์ฑ ์์๋ฅผ ์ ์ธํ๋ plugin.json๋ ์์ผ๋ฉด ์ถฉ๋์ด ๋ฐ์ํ๊ณ ํ๋ฌ๊ทธ์ธ์ด ๋ก๋๋์ง ์์ต๋๋ค. |
๊ฐ ๋ชจ๋๋ฅผ ์ฌ์ฉํ ๋:
strict: true: ํ๋ฌ๊ทธ์ธ์ ์์ ์plugin.json์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์์ ์ ๊ตฌ์ฑ ์์๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ๋ง์ผํ๋ ์ด์ค ํญ๋ชฉ์ ๋งจ ์์ ์ถ๊ฐ skills ๋๋ hooks๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ๊ธฐ๋ณธ๊ฐ์ด๋ฉฐ ๋๋ถ๋ถ์ ํ๋ฌ๊ทธ์ธ์์ ์๋ํฉ๋๋ค.strict: false: ๋ง์ผํ๋ ์ด์ค ์ด์์๊ฐ ์์ ํ ์ ์ด๋ฅผ ์ํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ ์ ์ฅ์๋ ์๋ณธ ํ์ผ์ ์ ๊ณตํ๊ณ ๋ง์ผํ๋ ์ด์ค ํญ๋ชฉ์ ์ด๋ฌํ ํ์ผ ์ค ์ด๋ ๊ฒ์ด skills, ์์ด์ ํธ, hooks ๋ฑ์ผ๋ก ๋ ธ์ถ๋๋์ง ์ ์ํฉ๋๋ค. ๋ง์ผํ๋ ์ด์ค๊ฐ ํ๋ฌ๊ทธ์ธ ์์ฑ์์ ์๋์ ๋ค๋ฅด๊ฒ ํ๋ฌ๊ทธ์ธ์ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ๊ตฌ์ฑํ๊ฑฐ๋ ํ๋ ์ด์ ํ ๋ ์ ์ฉํฉ๋๋ค.
๋ง์ผํ๋ ์ด์ค ํธ์คํ ๋ฐ ๋ฐฐํฌ
GitHub์์ ํธ์คํ (๊ถ์ฅ)
GitHub๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค:
- ์ ์ฅ์ ์์ฑ: ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ํ ์ ์ ์ฅ์ ์ค์
- ๋ง์ผํ๋ ์ด์ค ํ์ผ ์ถ๊ฐ: ํ๋ฌ๊ทธ์ธ ์ ์์ ํจ๊ป
.claude-plugin/marketplace.json์์ฑ - ํ๊ณผ ๊ณต์ : ์ฌ์ฉ์๊ฐ
/plugin marketplace add owner/repo๋ก ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค
์ด์ : ๊ธฐ๋ณธ ์ ๊ณต ๋ฒ์ ์ ์ด, ๋ฌธ์ ์ถ์ ๋ฐ ํ ํ์ ๊ธฐ๋ฅ.
๋ค๋ฅธ git ์๋น์ค์์ ํธ์คํ
GitLab, Bitbucket ๋ฐ ์์ฒด ํธ์คํ ์๋ฒ์ ๊ฐ์ ๋ชจ๋ git ํธ์คํ ์๋น์ค๊ฐ ์๋ํฉ๋๋ค. ์ฌ์ฉ์๋ ์ ์ฒด ์ ์ฅ์ URL๋ก ์ถ๊ฐํฉ๋๋ค:
/plugin marketplace add https://gitlab.com/company/plugins.git
๊ฐ์ธ ์ ์ฅ์
Claude Code๋ ๊ฐ์ธ ์ ์ฅ์์์ ํ๋ฌ๊ทธ์ธ ์ค์น๋ฅผ ์ง์ํฉ๋๋ค. ์๋ ์ค์น ๋ฐ ์
๋ฐ์ดํธ์ ๊ฒฝ์ฐ Claude Code๋ ๊ธฐ์กด git ์๊ฒฉ ์ฆ๋ช
๋์ฐ๋ฏธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ HTTPS ์ก์ธ์ค๋ gh auth login, macOS Keychain ๋๋ git-credential-store๋ฅผ ํตํด ํฐ๋ฏธ๋์์์ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค. SSH ์ก์ธ์ค๋ ํธ์คํธ๊ฐ ์ด๋ฏธ known_hosts ํ์ผ์ ์๊ณ ํค๊ฐ ssh-agent์ ๋ก๋๋์ด ์๋ ํ ์๋ํฉ๋๋ค. Claude Code๋ ํธ์คํธ ์ง๋ฌธ ๋ฐ ํค ์ํธ์ ๋ํ ๋ํํ SSH ํ๋กฌํํธ๋ฅผ ์ต์ ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ฐฑ๊ทธ๋ผ์ด๋ ์๋ ์ ๋ฐ์ดํธ๋ ๋ํํ ํ๋กฌํํธ๊ฐ Claude Code ์์์ ์ฐจ๋จํ๋ฏ๋ก ์๊ฒฉ ์ฆ๋ช ๋์ฐ๋ฏธ ์์ด ์์ ์ ์คํ๋ฉ๋๋ค. ๊ฐ์ธ ๋ง์ผํ๋ ์ด์ค์ ๋ํ ์๋ ์ ๋ฐ์ดํธ๋ฅผ ํ์ฑํํ๋ ค๋ฉด ํ๊ฒฝ์์ ์ ์ ํ ์ธ์ฆ ํ ํฐ์ ์ค์ ํฉ๋๋ค:
| ๊ณต๊ธ์ | ํ๊ฒฝ ๋ณ์ | ์ฐธ๊ณ |
|---|---|---|
| GitHub | GITHUB_TOKEN ๋๋ GH_TOKEN |
๊ฐ์ธ ์ก์ธ์ค ํ ํฐ ๋๋ GitHub App ํ ํฐ |
| GitLab | GITLAB_TOKEN ๋๋ GL_TOKEN |
๊ฐ์ธ ์ก์ธ์ค ํ ํฐ ๋๋ ํ๋ก์ ํธ ํ ํฐ |
| Bitbucket | BITBUCKET_TOKEN |
์ฑ ๋น๋ฐ๋ฒํธ ๋๋ ์ ์ฅ์ ์ก์ธ์ค ํ ํฐ |
์
ธ ๊ตฌ์ฑ(์: .bashrc, .zshrc)์์ ํ ํฐ์ ์ค์ ํ๊ฑฐ๋ Claude Code๋ฅผ ์คํํ ๋ ์ ๋ฌํฉ๋๋ค:
export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
CI/CD ํ๊ฒฝ์ ๊ฒฝ์ฐ ํ ํฐ์ ๋น๋ฐ ํ๊ฒฝ ๋ณ์๋ก ๊ตฌ์ฑํฉ๋๋ค. GitHub Actions๋ ๋์ผํ ์กฐ์ง์ ์ ์ฅ์์ ๋ํด ์๋์ผ๋ก GITHUB_TOKEN์ ์ ๊ณตํฉ๋๋ค.
๋ฐฐํฌ ์ ์ ๋ก์ปฌ์์ ํ ์คํธ
๊ณต์ ํ๊ธฐ ์ ์ ๋ง์ผํ๋ ์ด์ค๋ฅผ ๋ก์ปฌ์์ ํ ์คํธํฉ๋๋ค:
/plugin marketplace add ./my-local-marketplace
/plugin install test-plugin@my-local-marketplace
์ถ๊ฐ ๋ช ๋ น์ด์ ์ ์ฒด ๋ฒ์(GitHub, Git URL, ๋ก์ปฌ ๊ฒฝ๋ก, ์๊ฒฉ URL)๋ ๋ง์ผํ๋ ์ด์ค ์ถ๊ฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
ํ์ ์ํ ๋ง์ผํ๋ ์ด์ค ํ์
ํ๋ก์ ํธ ํด๋๋ฅผ ์ ๋ขฐํ ๋ ํ ๊ตฌ์ฑ์์ด ์๋์ผ๋ก ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ค์นํ๋๋ก ์ ์ฅ์๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๋ง์ผํ๋ ์ด์ค๋ฅผ .claude/settings.json์ ์ถ๊ฐํฉ๋๋ค:
{
"extraKnownMarketplaces": {
"company-tools": {
"source": {
"source": "github",
"repo": "your-org/claude-plugins"
}
}
}
}
๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํํด์ผ ํ๋ ํ๋ฌ๊ทธ์ธ์ ์ง์ ํ ์๋ ์์ต๋๋ค:
{
"enabledPlugins": {
"code-formatter@company-tools": true,
"deployment-tools@company-tools": true
}
}
์ ์ฒด ๊ตฌ์ฑ ์ต์ ์ ํ๋ฌ๊ทธ์ธ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
๋ก์ปฌ directory ๋๋ file ์์ค๋ฅผ ์๋ ๊ฒฝ๋ก์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ฒฝ๋ก๋ ์ ์ฅ์์ ์ฃผ ์ฒดํฌ์์์ ๋ํด ํด์๋ฉ๋๋ค. git worktree์์ Claude Code๋ฅผ ์คํํ ๋ ๊ฒฝ๋ก๋ ์ฌ์ ํ ์ฃผ ์ฒดํฌ์์์ ๊ฐ๋ฆฌํค๋ฏ๋ก ๋ชจ๋ worktree๊ฐ ๋์ผํ ๋ง์ผํ๋ ์ด์ค ์์น๋ฅผ ๊ณต์ ํฉ๋๋ค. ๋ง์ผํ๋ ์ด์ค ์ํ๋ ํ๋ก์ ํธ๋น์ด ์๋๋ผ ์ฌ์ฉ์๋น ํ ๋ฒ ~/.claude/plugins/known_marketplaces.json์ ์ ์ฅ๋ฉ๋๋ค.
์ปจํ ์ด๋์ ๋ํ ํ๋ฌ๊ทธ์ธ ์ฌ์ ์ฑ์ฐ๊ธฐ
์ปจํ
์ด๋ ์ด๋ฏธ์ง ๋ฐ CI ํ๊ฒฝ์ ๊ฒฝ์ฐ ๋น๋ ์๊ฐ์ ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฌ์ ์ฑ์ฐ๋ฏ๋ก Claude Code๊ฐ ๋ฐํ์์ ์๋ฌด๊ฒ๋ ๋ณต์ ํ์ง ์๊ณ ๋ ๋ง์ผํ๋ ์ด์ค ๋ฐ ํ๋ฌ๊ทธ์ธ์ด ์ด๋ฏธ ์ฌ์ฉ ๊ฐ๋ฅํ ์ํ๋ก ์์๋ฉ๋๋ค. CLAUDE_CODE_PLUGIN_SEED_DIR ํ๊ฒฝ ๋ณ์๋ฅผ ์ด ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ์ค์ ํฉ๋๋ค.
์ฌ๋ฌ ์๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ณ์ธตํํ๋ ค๋ฉด Unix์์๋ :๋ก, Windows์์๋ ;๋ก ๊ฒฝ๋ก๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. Claude Code๋ ๊ฐ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์๋๋ก ๊ฒ์ํ๊ณ ์ฃผ์ด์ง ๋ง์ผํ๋ ์ด์ค ๋๋ ํ๋ฌ๊ทธ์ธ ์บ์๋ฅผ ํฌํจํ๋ ์ฒซ ๋ฒ์งธ ์๋๊ฐ ์ฐ์ ํฉ๋๋ค.
์๋ ๋๋ ํฐ๋ฆฌ๋ ~/.claude/plugins์ ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฌ๋งํฉ๋๋ค:
$CLAUDE_CODE_PLUGIN_SEED_DIR/
known_marketplaces.json
marketplaces/<name>/...
cache/<marketplace>/<plugin>/<version>/...
์๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ ค๋ฉด ์ด๋ฏธ์ง ๋น๋ ์ค์ Claude Code๋ฅผ ํ ๋ฒ ์คํํ๊ณ , ํ์ํ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ ๋ค์, ๊ฒฐ๊ณผ ~/.claude/plugins ๋๋ ํฐ๋ฆฌ๋ฅผ ์ด๋ฏธ์ง์ ๋ณต์ฌํ๊ณ CLAUDE_CODE_PLUGIN_SEED_DIR์ ๊ฐ๋ฆฌํต๋๋ค.
๋ณต์ฌ ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ๋ ค๋ฉด ๋น๋ ์ค์ CLAUDE_CODE_PLUGIN_CACHE_DIR์ ๋์ ์๋ ๊ฒฝ๋ก๋ก ์ค์ ํ์ฌ ํ๋ฌ๊ทธ์ธ์ด ์ง์ ์ค์น๋๋๋ก ํฉ๋๋ค:
CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin marketplace add your-org/plugins
CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin install my-tool@your-plugins
๊ทธ๋ฐ ๋ค์ ๋ฐํ์ ํ๊ฒฝ์์ CLAUDE_CODE_PLUGIN_SEED_DIR=/opt/claude-seed๋ฅผ ์ค์ ํ์ฌ Claude Code๊ฐ ์์ ์ ์๋์์ ์ฝ๋๋ก ํฉ๋๋ค.
์์ ์ Claude Code๋ ์๋์ known_marketplaces.json์์ ์ฐพ์ ๋ง์ผํ๋ ์ด์ค๋ฅผ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ๋ฑ๋กํ๊ณ cache/ ์๋์์ ์ฐพ์ ํ๋ฌ๊ทธ์ธ ์บ์๋ฅผ ๋ค์ ๋ณต์ ํ์ง ์๊ณ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๋ํํ ๋ชจ๋์ -p ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ ๋น๋ํํ ๋ชจ๋ ๋ชจ๋์์ ์๋ํฉ๋๋ค.
๋์ ์ธ๋ถ ์ ๋ณด:
- ์ฝ๊ธฐ ์ ์ฉ: ์๋ ๋๋ ํฐ๋ฆฌ๋ ์ ๋ ์ฐ๊ธฐ๋์ง ์์ต๋๋ค. git pull์ด ์ฝ๊ธฐ ์ ์ฉ ํ์ผ ์์คํ ์์ ์คํจํ๋ฏ๋ก ์๋ ๋ง์ผํ๋ ์ด์ค์ ๋ํด ์๋ ์ ๋ฐ์ดํธ๊ฐ ๋นํ์ฑํ๋ฉ๋๋ค.
- ์๋ ํญ๋ชฉ์ด ์ฐ์ ํฉ๋๋ค: ์๋์์ ์ ์ธ๋ ๋ง์ผํ๋ ์ด์ค๋ ๊ฐ ์์ ์ ์ฌ์ฉ์ ๊ตฌ์ฑ์ ์ผ์นํ๋ ํญ๋ชฉ์ ๋ฎ์ด์๋๋ค. ์๋ ํ๋ฌ๊ทธ์ธ์ ๊ฑฐ๋ถํ๋ ค๋ฉด ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ ๊ฑฐํ๋ ๋์
/plugin disable์ ์ฌ์ฉํฉ๋๋ค. - ๊ฒฝ๋ก ํด์: Claude Code๋ ์๋์ JSON ๋ด์ ์ ์ฅ๋ ๊ฒฝ๋ก๋ฅผ ์ ๋ขฐํ์ง ์๊ณ ๋ฐํ์์
$CLAUDE_CODE_PLUGIN_SEED_DIR/marketplaces/<name>/์ ํ์ํ์ฌ ๋ง์ผํ๋ ์ด์ค ์ฝํ ์ธ ๋ฅผ ์ฐพ์ต๋๋ค. ์ด๋ ์๋๊ฐ ๋น๋๋ ์์น์ ๋ค๋ฅธ ๊ฒฝ๋ก์ ๋ง์ดํธ๋ ๊ฒฝ์ฐ์๋ ์๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํจ์ ์๋ฏธํฉ๋๋ค. - ๋ณ๊ฒฝ ์ฐจ๋จ: ์๋ ๊ด๋ฆฌ ๋ง์ผํ๋ ์ด์ค์ ๋ํด
/plugin marketplace remove๋๋/plugin marketplace update๋ฅผ ์คํํ๋ฉด ์๋ ์ด๋ฏธ์ง๋ฅผ ์ ๋ฐ์ดํธํ๋๋ก ๊ด๋ฆฌ์์๊ฒ ๋ฌธ์ํ๋ผ๋ ์ง์นจ๊ณผ ํจ๊ป ์คํจํฉ๋๋ค. - ์ค์ ๊ณผ ๊ตฌ์ฑ:
extraKnownMarketplaces๋๋enabledPlugins์ด ์๋์ ์ด๋ฏธ ์กด์ฌํ๋ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ ์ธํ๋ฉด Claude Code๋ ๋ณต์ ํ๋ ๋์ ์๋ ๋ณต์ฌ๋ณธ์ ์ฌ์ฉํฉ๋๋ค.
๊ด๋ฆฌ๋๋ ๋ง์ผํ๋ ์ด์ค ์ ํ
ํ๋ฌ๊ทธ์ธ ์์ค์ ๋ํ ์๊ฒฉํ ์ ์ด๊ฐ ํ์ํ ์กฐ์ง์ ๊ฒฝ์ฐ ๊ด๋ฆฌ์๋ ๊ด๋ฆฌ๋๋ ์ค์ ์์ strictKnownMarketplaces ์ค์ ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ์ถ๊ฐํ ์ ์๋ ํ๋ฌ๊ทธ์ธ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
strictKnownMarketplaces๊ฐ ๊ด๋ฆฌ๋๋ ์ค์ ์์ ๊ตฌ์ฑ๋๋ฉด ์ ํ ๋์์ ๊ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค:
| ๊ฐ | ๋์ |
|---|---|
| ์ ์๋์ง ์์(๊ธฐ๋ณธ๊ฐ) | ์ ํ ์์. ์ฌ์ฉ์๋ ๋ชจ๋ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค |
๋น ๋ฐฐ์ด [] |
์์ ํ ์ ๊ธ. ์ฌ์ฉ์๋ ์ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค |
| ์์ค ๋ชฉ๋ก | ์ฌ์ฉ์๋ ํ์ฉ ๋ชฉ๋ก๊ณผ ์ ํํ ์ผ์นํ๋ ๋ง์ผํ๋ ์ด์ค๋ง ์ถ๊ฐํ ์ ์์ต๋๋ค |
์ผ๋ฐ์ ์ธ ๊ตฌ์ฑ
๋ชจ๋ ๋ง์ผํ๋ ์ด์ค ์ถ๊ฐ ๋นํ์ฑํ:
{
"strictKnownMarketplaces": []
}
ํน์ ๋ง์ผํ๋ ์ด์ค๋ง ํ์ฉ:
{
"strictKnownMarketplaces": [
{
"source": "github",
"repo": "acme-corp/approved-plugins"
},
{
"source": "github",
"repo": "acme-corp/security-tools",
"ref": "v2.0"
},
{
"source": "url",
"url": "https://plugins.example.com/marketplace.json"
}
]
}
ํธ์คํธ์ ๋ํ ์ ๊ท์ ํจํด ์ผ์น๋ฅผ ์ฌ์ฉํ์ฌ ๋ด๋ถ git ์๋ฒ์ ๋ชจ๋ ๋ง์ผํ๋ ์ด์ค ํ์ฉ. ์ด๋ GitHub Enterprise Server ๋๋ ์์ฒด ํธ์คํ GitLab ์ธ์คํด์ค์ ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์ ๋๋ค:
{
"strictKnownMarketplaces": [
{
"source": "hostPattern",
"hostPattern": "^github\\.example\\.com$"
}
]
}
๊ฒฝ๋ก์ ๋ํ ์ ๊ท์ ํจํด ์ผ์น๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋๋ ํฐ๋ฆฌ์ ํ์ผ ์์คํ ๊ธฐ๋ฐ ๋ง์ผํ๋ ์ด์ค ํ์ฉ:
{
"strictKnownMarketplaces": [
{
"source": "pathPattern",
"pathPattern": "^/opt/approved/"
}
]
}
pathPattern์ผ๋ก ๋ชจ๋ ํ์ผ ์์คํ
๊ฒฝ๋ก๋ฅผ ํ์ฉํ๋ฉด์ hostPattern์ผ๋ก ๋คํธ์ํฌ ์์ค๋ฅผ ์ ์ดํ๋ ค๋ฉด ".*"๋ฅผ pathPattern์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
strictKnownMarketplaces๋ ์ฌ์ฉ์๊ฐ ์ถ๊ฐํ ์ ์๋ ๊ฒ์ ์ ํํ์ง๋ง ์์ฒด์ ์ผ๋ก ๋ง์ผํ๋ ์ด์ค๋ฅผ ๋ฑ๋กํ์ง๋ ์์ต๋๋ค. ํ์ฉ๋ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ฌ์ฉ์๊ฐ /plugin marketplace add๋ฅผ ์คํํ์ง ์๊ณ ๋ ์๋์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ํ๋ ค๋ฉด ๋์ผํ managed-settings.json์์ extraKnownMarketplaces์ ์์ ์ด๋ฃน๋๋ค. ๋ ๋ค ํจ๊ป ์ฌ์ฉ์ ์ฐธ์กฐํ์ธ์.
์ ํ ์๋ ๋ฐฉ์
์ ํ์ ๋คํธ์ํฌ ๋๋ ํ์ผ ์์คํ
์์
์ด ๋ฐ์ํ๊ธฐ ์ ์ ํ์ธ๋ฉ๋๋ค. ํ์ธ์ ๋ง์ผํ๋ ์ด์ค ์ถ๊ฐ ๋ฐ ํ๋ฌ๊ทธ์ธ ์ค์น, ์
๋ฐ์ดํธ, ์๋ก๊ณ ์นจ ๋ฐ ์๋ ์
๋ฐ์ดํธ ์ ์คํ๋ฉ๋๋ค. ๋ง์ผํ๋ ์ด์ค๊ฐ ์ ์ฑ
๊ตฌ์ฑ ์ ์ ์ถ๊ฐ๋์๊ณ ํด๋น ์์ค๊ฐ ๋ ์ด์ ํ์ฉ ๋ชฉ๋ก๊ณผ ์ผ์นํ์ง ์์ผ๋ฉด Claude Code๋ ํด๋น ๋ง์ผํ๋ ์ด์ค์์ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๊ฑฐ๋ ์
๋ฐ์ดํธํ๊ธฐ๋ฅผ ๊ฑฐ๋ถํฉ๋๋ค. ๋์ผํ ์ ์ฉ์ด blockedMarketplaces์๋ ์ ์ฉ๋ฉ๋๋ค.
ํ์ฉ ๋ชฉ๋ก์ ๋๋ถ๋ถ์ ์์ค ์ ํ์ ๋ํด ์ ํํ ์ผ์น๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ง์ผํ๋ ์ด์ค๊ฐ ํ์ฉ๋๋ ค๋ฉด ์ง์ ๋ ๋ชจ๋ ํ๋๊ฐ ์ ํํ ์ผ์นํด์ผ ํฉ๋๋ค:
- GitHub ์์ค์ ๊ฒฝ์ฐ:
repo๋ ํ์์ด๋ฉฐ ํ์ฉ ๋ชฉ๋ก์ ์ง์ ๋ ๊ฒฝ์ฐref๋๋path๋ ์ผ์นํด์ผ ํฉ๋๋ค - URL ์์ค์ ๊ฒฝ์ฐ: ์ ์ฒด URL์ด ์ ํํ ์ผ์นํด์ผ ํฉ๋๋ค
hostPattern์์ค์ ๊ฒฝ์ฐ: ๋ง์ผํ๋ ์ด์ค ํธ์คํธ๊ฐ ์ ๊ท์ ํจํด๊ณผ ์ผ์นํฉ๋๋คpathPattern์์ค์ ๊ฒฝ์ฐ: ๋ง์ผํ๋ ์ด์ค์ ํ์ผ ์์คํ ๊ฒฝ๋ก๊ฐ ์ ๊ท์ ํจํด๊ณผ ์ผ์นํฉ๋๋ค
์ ํํ ์ผ์น๋ URL์ ์ ๊ทํํ์ง ์์ต๋๋ค. ํํ ์ฌ๋์, .git ์ ๋ฏธ์ฌ ๋๋ ssh:// ๋ https:// ํ์์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ทจ๊ธ๋ฉ๋๋ค. ์กฐ์ง์ ๋ง์ผํ๋ ์ด์ค๋ฅผ ๋ ์ด์์ URL ํ์์ผ๋ก ๋ณต์ ํ ์ ์๋ ๊ฒฝ์ฐ ๋ชจ๋ ํ์์ด ์ผ์นํ๋๋ก ๋ฆฌํฐ๋ด URL๋ณด๋ค hostPattern ํญ๋ชฉ์ ์ ํธํฉ๋๋ค.
strictKnownMarketplaces๋ ๊ด๋ฆฌ๋๋ ์ค์ ์์ ์ค์ ๋๋ฏ๋ก ๊ฐ๋ณ ์ฌ์ฉ์ ๋ฐ ํ๋ก์ ํธ ๊ตฌ์ฑ์ ์ด๋ฌํ ์ ํ์ ์ฌ์ ์ํ ์ ์์ต๋๋ค.
์ ์ฒด ๊ตฌ์ฑ ์ธ๋ถ ์ ๋ณด(์ง์๋๋ ๋ชจ๋ ์์ค ์ ํ ๋ฐ extraKnownMarketplaces์์ ๋น๊ต ํฌํจ)๋ strictKnownMarketplaces ์ฐธ์กฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ฒ์ ํด์ ๋ฐ ๋ฆด๋ฆฌ์ค ์ฑ๋
ํ๋ฌ๊ทธ์ธ ๋ฒ์ ์ ์บ์ ๊ฒฝ๋ก ๋ฐ ์
๋ฐ์ดํธ ๊ฐ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ํด์๋ ๋ฒ์ ์ด ์ฌ์ฉ์๊ฐ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ ๊ฒ๊ณผ ์ผ์นํ๋ฉด /plugin update ๋ฐ ์๋ ์
๋ฐ์ดํธ๋ ํ๋ฌ๊ทธ์ธ์ ๊ฑด๋๋๋๋ค.
Claude Code๋ ๋ค์ ์ค ์ค์ ๋ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์์ ํ๋ฌ๊ทธ์ธ์ ๋ฒ์ ์ ํด์ํฉ๋๋ค:
- ํ๋ฌ๊ทธ์ธ์
plugin.json์version - ํ๋ฌ๊ทธ์ธ์ ๋ง์ผํ๋ ์ด์ค ํญ๋ชฉ์
version - ํ๋ฌ๊ทธ์ธ ์์ค์ git ์ปค๋ฐ SHA
git ๊ธฐ๋ฐ ์์ค ์ ํ github, url, git-subdir ๋ฐ git ํธ์คํ
๋ง์ผํ๋ ์ด์ค ๋ด์ ์๋ ๊ฒฝ๋ก์ ๊ฒฝ์ฐ version์ ์์ ํ ์๋ตํ ์ ์์ผ๋ฉฐ ๋ชจ๋ ์ ์ปค๋ฐ์ ์ ๋ฒ์ ์ผ๋ก ์ทจ๊ธ๋ฉ๋๋ค. ์ด๋ ๋ด๋ถ ๋๋ ํ๋ฐํ๊ฒ ๊ฐ๋ฐ ์ค์ธ ํ๋ฌ๊ทธ์ธ์ ๋ํ ๊ฐ์ฅ ๊ฐ๋จํ ์ค์ ์
๋๋ค.
version์ ์ค์ ํ๋ฉด ํ๋ฌ๊ทธ์ธ์ด ๊ณ ์ ๋ฉ๋๋ค. plugin.json์ด "version": "1.0.0"์ ์ ์ธํ๋ฉด ํด๋น ๋ฌธ์์ด์ ๋ณ๊ฒฝํ์ง ์๊ณ ์ ์ปค๋ฐ์ ํธ์ํด๋ ๊ธฐ์กด ์ฌ์ฉ์์๊ฒ๋ ์๋ฌด๊ฒ๋ ํ์ง ์์ต๋๋ค. Claude Code๊ฐ ๋์ผํ ๋ฒ์ ์ ๋ณด๊ณ ์บ์๋ ๋ณต์ฌ๋ณธ์ ์ ์งํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ชจ๋ ๋ฆด๋ฆฌ์ค์์ ํ๋๋ฅผ ๋ฒํํ๊ฑฐ๋ ์ปค๋ฐ SHA๋ฅผ ์ฌ์ฉํ๋๋ก ์๋ตํฉ๋๋ค.
plugin.json ๋ฐ ๋ง์ผํ๋ ์ด์ค ํญ๋ชฉ ๋ชจ๋์์ version์ ์ค์ ํ์ง ๋ง์ธ์. plugin.json ๊ฐ์ด ํญ์ ์๋์ผ๋ก ์ฐ์ ํ๋ฏ๋ก ์ค๋๋ ๋งค๋ํ์คํธ ๋ฒ์ ์ด marketplace.json์์ ์ค์ ํ ๋ฒ์ ์ ์จ๊ธธ ์ ์์ต๋๋ค.
๋ฆด๋ฆฌ์ค ์ฑ๋ ์ค์
ํ๋ฌ๊ทธ์ธ์ ๋ํ "stable" ๋ฐ "latest" ๋ฆด๋ฆฌ์ค ์ฑ๋์ ์ง์ํ๋ ค๋ฉด ๋์ผํ ์ ์ฅ์์ ๋ค์ํ refs ๋๋ SHA๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ ๊ฐ์ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ด๋ฆฌ๋๋ ์ค์ ์ ํตํด ๋ ๋ง์ผํ๋ ์ด์ค๋ฅผ ๋ค์ํ ์ฌ์ฉ์ ๊ทธ๋ฃน์ ํ ๋นํ ์ ์์ต๋๋ค.
๊ฐ ์ฑ๋์ ๋ค๋ฅธ ๋ฒ์ ์ผ๋ก ํด์๋์ด์ผ ํฉ๋๋ค. ๋ช
์์ ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ plugin.json์ ๊ฐ ๊ณ ์ ๋ ref์์ ๋ค๋ฅธ version์ ์ ์ธํด์ผ ํฉ๋๋ค. version์ ์๋ตํ๋ฉด ์๋ก ๋ค๋ฅธ ์ปค๋ฐ SHA๊ฐ ์ด๋ฏธ ์ฑ๋์ ๊ตฌ๋ถํฉ๋๋ค. ๋ refs๊ฐ ๋์ผํ ๋ฒ์ ๋ฌธ์์ด๋ก ํด์๋๋ฉด Claude Code๋ ์ด๋ค์ ๋์ผํ ๊ฒ์ผ๋ก ์ทจ๊ธํ๊ณ ์
๋ฐ์ดํธ๋ฅผ ๊ฑด๋๋๋๋ค.
์์
{
"name": "stable-tools",
"plugins": [
{
"name": "code-formatter",
"source": {
"source": "github",
"repo": "acme-corp/code-formatter",
"ref": "stable"
}
}
]
}
{
"name": "latest-tools",
"plugins": [
{
"name": "code-formatter",
"source": {
"source": "github",
"repo": "acme-corp/code-formatter",
"ref": "latest"
}
}
]
}
์ฌ์ฉ์ ๊ทธ๋ฃน์ ์ฑ๋ ํ ๋น
๊ด๋ฆฌ๋๋ ์ค์ ์ ํตํด ๊ฐ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ ์ ํ ์ฌ์ฉ์ ๊ทธ๋ฃน์ ํ ๋นํฉ๋๋ค. ์๋ฅผ ๋ค์ด stable ๊ทธ๋ฃน์ ๋ค์์ ๋ฐ์ต๋๋ค:
{
"extraKnownMarketplaces": {
"stable-tools": {
"source": {
"source": "github",
"repo": "acme-corp/stable-tools"
}
}
}
}
early-access ๊ทธ๋ฃน์ ๋์ latest-tools๋ฅผ ๋ฐ์ต๋๋ค:
{
"extraKnownMarketplaces": {
"latest-tools": {
"source": {
"source": "github",
"repo": "acme-corp/latest-tools"
}
}
}
}
์์กด์ฑ ๋ฒ์ ๊ณ ์
ํ๋ฌ๊ทธ์ธ์ ์์กด์ฑ์ ๋ํ semver ๋ฒ์๋ฅผ ์ ํํ์ฌ ์์กด์ฑ ์
๋ฐ์ดํธ๊ฐ ์ข
์ ํ๋ฌ๊ทธ์ธ์ ์์์ํค์ง ์๋๋ก ํ ์ ์์ต๋๋ค. {plugin-name}--v{version} git ํ๊ทธ ๊ท์น, ๋ฒ์ ๊ตฌ๋ฌธ ๋ฐ ๋์ผํ ์์กด์ฑ์ ๋ํ ์ฌ๋ฌ ์ ์ฝ ์กฐ๊ฑด์ด ์ด๋ป๊ฒ ๊ฒฐํฉ๋๋์ง์ ๋ํด์๋ ํ๋ฌ๊ทธ์ธ ์์กด์ฑ ๋ฒ์ ์ ํ์ ์ฐธ์กฐํ์ธ์.
๊ฒ์ฆ ๋ฐ ํ ์คํธ
๊ณต์ ํ๊ธฐ ์ ์ ๋ง์ผํ๋ ์ด์ค๋ฅผ ํ ์คํธํฉ๋๋ค.
๋ง์ผํ๋ ์ด์ค JSON ๊ตฌ๋ฌธ ๊ฒ์ฆ:
claude plugin validate .
๋๋ Claude Code ๋ด์์:
/plugin validate .
ํ ์คํธ๋ฅผ ์ํด ๋ง์ผํ๋ ์ด์ค ์ถ๊ฐ:
/plugin marketplace add ./path/to/marketplace
๋ชจ๋ ๊ฒ์ด ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ํ ์คํธ ํ๋ฌ๊ทธ์ธ ์ค์น:
/plugin install test-plugin@marketplace-name
์ ์ฒด ํ๋ฌ๊ทธ์ธ ํ ์คํธ ์ํฌํ๋ก์ฐ๋ ํ๋ฌ๊ทธ์ธ์ ๋ก์ปฌ์์ ํ ์คํธ๋ฅผ ์ฐธ์กฐํ์ธ์. ๊ธฐ์ ์ ๋ฌธ์ ํด๊ฒฐ์ ํ๋ฌ๊ทธ์ธ ์ฐธ์กฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
CLI์์ ๋ง์ผํ๋ ์ด์ค ๊ด๋ฆฌ
Claude Code๋ ์คํฌ๋ฆฝํ
๋ฐ ์๋ํ๋ฅผ ์ํ ๋น๋ํํ claude plugin marketplace ํ์ ๋ช
๋ น์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ ๋ํํ ์ธ์
๋ด์์ ์ฌ์ฉ ๊ฐ๋ฅํ /plugin marketplace ๋ช
๋ น์ด์ ๋์ผํฉ๋๋ค.
ํ๋ฌ๊ทธ์ธ ๋ง์ผํ๋ ์ด์ค ์ถ๊ฐ
GitHub ์ ์ฅ์, git URL, ์๊ฒฉ URL ๋๋ ๋ก์ปฌ ๊ฒฝ๋ก์์ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค.
claude plugin marketplace add <source> [options]
์ธ์:
<source>: GitHubowner/repo๋จ์ถํ, git URL,marketplace.jsonํ์ผ์ ๋ํ ์๊ฒฉ URL ๋๋ ๋ก์ปฌ ๋๋ ํฐ๋ฆฌ ๊ฒฝ๋ก. ๋ถ๊ธฐ ๋๋ ํ๊ทธ์ ๊ณ ์ ํ๋ ค๋ฉด GitHub ๋จ์ถํ์@ref๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ git URL์#ref๋ฅผ ์ถ๊ฐํฉ๋๋ค
์ต์ :
| ์ต์ | ์ค๋ช | ๊ธฐ๋ณธ๊ฐ |
|---|---|---|
--scope <scope> |
๋ง์ผํ๋ ์ด์ค๋ฅผ ์ ์ธํ ์์น: user, project ๋๋ local. ํ๋ฌ๊ทธ์ธ ์ค์น ๋ฒ์ ์ฐธ์กฐ |
user |
--sparse <paths...> |
git sparse-checkout์ ํตํด ํน์ ๋๋ ํฐ๋ฆฌ๋ก ์ฒดํฌ์์ ์ ํ. ๋ชจ๋ ธ๋ ํฌ์ ์ ์ฉ |
GitHub์์ owner/repo ๋จ์ถํ์ ์ฌ์ฉํ์ฌ ๋ง์ผํ๋ ์ด์ค ์ถ๊ฐ:
claude plugin marketplace add acme-corp/claude-plugins
@ref๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋ถ๊ธฐ ๋๋ ํ๊ทธ์ ๊ณ ์ :
claude plugin marketplace add acme-corp/claude-plugins@v2.0
๋น GitHub ํธ์คํธ์ git URL์์ ์ถ๊ฐ:
claude plugin marketplace add https://gitlab.example.com/team/plugins.git
marketplace.json ํ์ผ์ ์ง์ ์ ๊ณตํ๋ ์๊ฒฉ URL์์ ์ถ๊ฐ:
claude plugin marketplace add https://example.com/marketplace.json
ํ ์คํธ๋ฅผ ์ํด ๋ก์ปฌ ๋๋ ํฐ๋ฆฌ์์ ์ถ๊ฐ:
claude plugin marketplace add ./my-marketplace
๋ง์ผํ๋ ์ด์ค๋ฅผ ํ๋ก์ ํธ ๋ฒ์์์ ์ ์ธํ์ฌ .claude/settings.json์ ํตํด ํ๊ณผ ๊ณต์ :
claude plugin marketplace add acme-corp/claude-plugins --scope project
๋ชจ๋ ธ๋ ํฌ์ ๊ฒฝ์ฐ ํ๋ฌ๊ทธ์ธ ์ฝํ ์ธ ๋ฅผ ํฌํจํ๋ ๋๋ ํฐ๋ฆฌ๋ก ์ฒดํฌ์์ ์ ํ:
claude plugin marketplace add acme-corp/monorepo --sparse .claude-plugin plugins
ํ๋ฌ๊ทธ์ธ ๋ง์ผํ๋ ์ด์ค ๋ชฉ๋ก
๊ตฌ์ฑ๋ ๋ชจ๋ ๋ง์ผํ๋ ์ด์ค๋ฅผ ๋์ดํฉ๋๋ค.
claude plugin marketplace list [options]
์ต์ :
| ์ต์ | ์ค๋ช |
|---|---|
--json |
JSON์ผ๋ก ์ถ๋ ฅ |
--json์ ์ฌ์ฉํ๋ฉด ๊ฐ ํญ๋ชฉ์๋ name, source ๋ฐ ์์ค๋ณ ํ๋๊ฐ ํฌํจ๋ฉ๋๋ค: GitHub ์์ค์ ๊ฒฝ์ฐ repo, git ๋ฐ URL ์์ค์ ๊ฒฝ์ฐ url, ๋ก์ปฌ ์์ค์ ๊ฒฝ์ฐ path. GitHub ๋ฐ git ์์ค๋ ๋ง์ผํ๋ ์ด์ค๊ฐ ๊ณ ์ ๋ ๋ถ๊ธฐ ๋๋ ํ๊ทธ๋ก ์ถ๊ฐ๋ ๊ฒฝ์ฐ ref ํ๋๋ ํฌํจํฉ๋๋ค.
ํ๋ฌ๊ทธ์ธ ๋ง์ผํ๋ ์ด์ค ์ ๊ฑฐ
๊ตฌ์ฑ๋ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๋ณ์นญ rm๋ ํ์ฉ๋ฉ๋๋ค.
claude plugin marketplace remove <name> [options]
์ธ์:
<name>:claude plugin marketplace list์ ํ์๋ ๋ง์ผํ๋ ์ด์ค ์ด๋ฆ์ ์ ๊ฑฐํฉ๋๋ค. ์ด๋add์ ์ ๋ฌํ ์์ค๊ฐ ์๋๋ผmarketplace.json์name์ ๋๋ค
์ต์ :
| ์ต์ | ์ค๋ช | ๊ธฐ๋ณธ๊ฐ |
|---|---|---|
--scope <scope> |
์ ๊ฑฐ๋ฅผ ๋จ์ผ ์ค์ ๋ฒ์๋ก ์ ํ: user, project ๋๋ local. ํ๋ฌ๊ทธ์ธ ์ค์น ๋ฒ์ ์ฐธ์กฐ. ์๋ตํ๋ฉด ๋ชจ๋ ํธ์ง ๊ฐ๋ฅํ ๋ฒ์์์ ์ ์ธ์ด ์ ๊ฑฐ๋ฉ๋๋ค. ์ง์ ํ๋ฉด ํด๋น ๋ฒ์์ ์ ์ธ๋ง ์ ๊ฑฐ๋๊ณ , ๋ง์ผํ๋ ์ด์ค๊ฐ ๋ค๋ฅธ ๋ฒ์์์ ์ฌ์ ํ ์ ์ธ๋ ๊ฒฝ์ฐ ๊ณต์ ์ํ, ์บ์ ๋ฐ ์ค์น๋ ํ๋ฌ๊ทธ์ธ ๋ฐ์ดํฐ๋ ์ ์ง๋ฉ๋๋ค |
(๋ชจ๋ ๋ฒ์) |
๋ง์ผํ๋ ์ด์ค๋ฅผ ๋ง์ง๋ง ๋จ์ ๋ฒ์์์ ์ ๊ฑฐํ๋ฉด ํด๋น ๋ง์ผํ๋ ์ด์ค์์ ์ค์นํ ๋ชจ๋ ํ๋ฌ๊ทธ์ธ๋ ์ ๊ฑฐ๋ฉ๋๋ค. ์ค์น๋ ํ๋ฌ๊ทธ์ธ์ ์์ง ์๊ณ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์๋ก ๊ณ ์น๋ ค๋ฉด claude plugin marketplace update๋ฅผ ๋์ ์ฌ์ฉํฉ๋๋ค.
ํ๋ฌ๊ทธ์ธ ๋ง์ผํ๋ ์ด์ค ์ ๋ฐ์ดํธ
์์ค์์ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์๋ก ๊ณ ์ณ ์ ํ๋ฌ๊ทธ์ธ ๋ฐ ๋ฒ์ ๋ณ๊ฒฝ์ ๊ฒ์ํฉ๋๋ค.
claude plugin marketplace update [name]
์ธ์:
[name]:claude plugin marketplace list์ ํ์๋ ๋ง์ผํ๋ ์ด์ค ์ด๋ฆ์ ์ ๋ฐ์ดํธํฉ๋๋ค. ์๋ตํ๋ฉด ๋ชจ๋ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค
remove์ update ๋ชจ๋ ์๋ ๊ด๋ฆฌ ๋ง์ผํ๋ ์ด์ค์ ๋ํด ์คํํ ๋ ์คํจํฉ๋๋ค. ์ด๋ ์ฝ๊ธฐ ์ ์ฉ์
๋๋ค. ๋ชจ๋ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์
๋ฐ์ดํธํ ๋ ์๋ ๊ด๋ฆฌ ํญ๋ชฉ์ ๊ฑด๋๋ฐ๊ณ ๋ค๋ฅธ ๋ง์ผํ๋ ์ด์ค๋ ์ฌ์ ํ ์
๋ฐ์ดํธ๋ฉ๋๋ค. ์๋ ์ ๊ณต ํ๋ฌ๊ทธ์ธ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ๊ด๋ฆฌ์์๊ฒ ์๋ ์ด๋ฏธ์ง๋ฅผ ์
๋ฐ์ดํธํ๋๋ก ์์ฒญํฉ๋๋ค. ์ปจํ
์ด๋์ ๋ํ ํ๋ฌ๊ทธ์ธ ์ฌ์ ์ฑ์ฐ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ฌธ์ ํด๊ฒฐ
๋ง์ผํ๋ ์ด์ค๊ฐ ๋ก๋๋์ง ์์
์ฆ์: ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ถ๊ฐํ ์ ์๊ฑฐ๋ ํ๋ฌ๊ทธ์ธ์ ๋ณผ ์ ์์ต๋๋ค
ํด๊ฒฐ์ฑ :
- ๋ง์ผํ๋ ์ด์ค URL์ด ์ก์ธ์ค ๊ฐ๋ฅํ์ง ํ์ธํฉ๋๋ค
.claude-plugin/marketplace.json์ด ์ง์ ๋ ๊ฒฝ๋ก์ ์๋์ง ํ์ธํฉ๋๋คclaude plugin validate๋๋/plugin validate๋ฅผ ์ฌ์ฉํ์ฌ JSON ๊ตฌ๋ฌธ์ด ์ ํจํ์ง ํ์ธํฉ๋๋ค. skill, agent ๋ฐ command frontmatter๋ฅผ ํ์ธํ๋ ค๋ฉด ๊ฐ ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ์ ๋ํด ๋ช ๋ น์ ์คํํฉ๋๋ค- ๊ฐ์ธ ์ ์ฅ์์ ๊ฒฝ์ฐ ์ก์ธ์ค ๊ถํ์ด ์๋์ง ํ์ธํฉ๋๋ค
๋ง์ผํ๋ ์ด์ค ๊ฒ์ฆ ์ค๋ฅ
๋ง์ผํ๋ ์ด์ค ๋๋ ํฐ๋ฆฌ์์ claude plugin validate . ๋๋ /plugin validate .๋ฅผ ์คํํ์ฌ ๋ฌธ์ ๋ฅผ ํ์ธํฉ๋๋ค. ๋ง์ผํ๋ ์ด์ค ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํฌ ๋ ๊ฒ์ฆ์๋ marketplace.json๋ง ํ์ธํฉ๋๋ค: ์คํค๋ง, ์ค๋ณต ํ๋ฌ๊ทธ์ธ ์ด๋ฆ, ์์ค ๊ฒฝ๋ก ์ํ ๋ฐ ๊ฐ ์ฐธ์กฐ๋ plugin.json์ ๋ํ ๋ฒ์ ๋ถ์ผ์น.
๊ฐ๋ณ ํ๋ฌ๊ทธ์ธ์ plugin.json ๋ฐ ํด๋น skill, agent, command ๋ฐ hook ํ์ผ์ ๊ฒ์ฆํ๋ ค๋ฉด ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ ์์ฒด์ ๋ํด ๋ช
๋ น์ ์คํํฉ๋๋ค(์: claude plugin validate ./plugins/my-plugin). ์ผ๋ฐ์ ์ธ ์ค๋ฅ:
| ์ค๋ฅ | ์์ธ | ํด๊ฒฐ์ฑ |
|---|---|---|
File not found: .claude-plugin/marketplace.json |
๋๋ฝ๋ ๋งค๋ํ์คํธ | ํ์ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ .claude-plugin/marketplace.json ์์ฑ |
Invalid JSON syntax: Unexpected token... |
marketplace.json์ JSON ๊ตฌ๋ฌธ ์ค๋ฅ | ๋๋ฝ๋ ์ผํ, ์ถ๊ฐ ์ผํ ๋๋ ์ธ์ฉ๋์ง ์์ ๋ฌธ์์ด ํ์ธ |
Duplicate plugin name "x" found in marketplace |
๋ ํ๋ฌ๊ทธ์ธ์ด ๋์ผํ ์ด๋ฆ์ ๊ณต์ ํฉ๋๋ค | ๊ฐ ํ๋ฌ๊ทธ์ธ์ ๊ณ ์ ํ name ๊ฐ ์ง์ |
plugins[0].source: Path contains ".." |
์์ค ๊ฒฝ๋ก์ .. ํฌํจ |
๋ง์ผํ๋ ์ด์ค ๋ฃจํธ์ ์๋์ ์ธ ๊ฒฝ๋ก๋ฅผ .. ์์ด ์ฌ์ฉํฉ๋๋ค. ์๋ ๊ฒฝ๋ก ์ฐธ์กฐ |
YAML frontmatter failed to parse: ... |
skill, agent ๋๋ command ํ์ผ์ YAML ๋ฌดํจ | frontmatter ๋ธ๋ก์ YAML ๊ตฌ๋ฌธ์ ์์ ํฉ๋๋ค. ๋ฐํ์์ ์ด ํ์ผ์ ๋ฉํ๋ฐ์ดํฐ ์์ด ๋ก๋๋ฉ๋๋ค. ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ฒ์ฆํ ๋๋ง ๋ณด๊ณ ๋ฉ๋๋ค |
Invalid JSON syntax: ... (hooks.json) |
ํ์์ด ์๋ชป๋ hooks/hooks.json |
JSON ๊ตฌ๋ฌธ์ ์์ ํฉ๋๋ค. ํ์์ด ์๋ชป๋ hooks/hooks.json์ ์ ์ฒด ํ๋ฌ๊ทธ์ธ์ด ๋ก๋๋์ง ์๋๋ก ํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ฒ์ฆํ ๋๋ง ๋ณด๊ณ ๋ฉ๋๋ค |
๊ฒฝ๊ณ (์ฐจ๋จํ์ง ์์):
Marketplace has no plugins defined:plugins๋ฐฐ์ด์ ์ต์ํ ํ๋์ ํ๋ฌ๊ทธ์ธ ์ถ๊ฐNo marketplace description provided: ์ฌ์ฉ์๊ฐ ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ดํดํ๋๋ก ๋๊ธฐ ์ํด ์ต์์description์ถ๊ฐPlugin name "x" is not kebab-case: ํ๋ฌ๊ทธ์ธ ์ด๋ฆ์ ๋๋ฌธ์, ๊ณต๋ฐฑ ๋๋ ํน์ ๋ฌธ์๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์๋ฌธ์, ์ซ์ ๋ฐ ํ์ดํ๋ง ์ฌ์ฉํ๋๋ก ์ด๋ฆ์ ๋ฐ๊ฟ๋๋ค(์:my-plugin). Claude Code๋ ๋ค๋ฅธ ํ์์ ํ์ฉํ์ง๋ง Claude.ai ๋ง์ผํ๋ ์ด์ค ๋๊ธฐํ๋ ์ด๋ฅผ ๊ฑฐ๋ถํฉ๋๋ค.
ํ๋ฌ๊ทธ์ธ ์ค์น ์คํจ
์ฆ์: ๋ง์ผํ๋ ์ด์ค๊ฐ ๋ํ๋์ง๋ง ํ๋ฌ๊ทธ์ธ ์ค์น๊ฐ ์คํจํฉ๋๋ค
ํด๊ฒฐ์ฑ :
- ํ๋ฌ๊ทธ์ธ ์์ค URL์ด ์ก์ธ์ค ๊ฐ๋ฅํ์ง ํ์ธํฉ๋๋ค
- ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ์ ํ์ ํ์ผ์ด ํฌํจ๋์ด ์๋์ง ํ์ธํฉ๋๋ค
- GitHub ์์ค์ ๊ฒฝ์ฐ ์ ์ฅ์๊ฐ ๊ณต๊ฐ์ด๊ฑฐ๋ ์ก์ธ์ค ๊ถํ์ด ์๋์ง ํ์ธํฉ๋๋ค
- ํ๋ฌ๊ทธ์ธ ์์ค๋ฅผ ์๋์ผ๋ก ๋ณต์ /๋ค์ด๋ก๋ํ์ฌ ํ ์คํธํฉ๋๋ค
- ์์ค๊ฐ
ref์sha๋ฅผ ๋ชจ๋ ๊ณ ์ ํ๋ ๊ฒฝ์ฐ ์ญ์ ๋ ์ ์คํธ๋ฆผ ๋ถ๊ธฐ ๋๋ ํ๊ทธ๋ ์ค์น๋ฅผ ์ฐจ๋จํ์ง ์์ต๋๋ค. ์ค์น๊ฐ ๊ณ์ ์คํจํ๋ฉด ๊ณ ์ ๋ ์ปค๋ฐ์ด ์ ์ฅ์์ ์ฌ์ ํ ์กด์ฌํ๋์ง ํ์ธํฉ๋๋ค
๊ฐ์ธ ์ ์ฅ์ ์ธ์ฆ ์คํจ
์ฆ์: ๊ฐ์ธ ์ ์ฅ์์์ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ ๋ ์ธ์ฆ ์ค๋ฅ
ํด๊ฒฐ์ฑ :
์๋ ์ค์น ๋ฐ ์ ๋ฐ์ดํธ์ ๊ฒฝ์ฐ:
- git ๊ณต๊ธ์๋ก ์ธ์ฆ๋์๋์ง ํ์ธํฉ๋๋ค(์: GitHub์ ๊ฒฝ์ฐ
gh auth status์คํ). - ์๊ฒฉ ์ฆ๋ช
๋์ฐ๋ฏธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์๋์ง ํ์ธํฉ๋๋ค:
git config --global credential.helper - ์ ์ฅ์๋ฅผ ์๋์ผ๋ก ๋ณต์ ํ์ฌ ์๊ฒฉ ์ฆ๋ช ์ด ์๋ํ๋์ง ํ์ธํฉ๋๋ค
๋ฐฑ๊ทธ๋ผ์ด๋ ์๋ ์ ๋ฐ์ดํธ์ ๊ฒฝ์ฐ:
- ํ๊ฒฝ์์ ์ ์ ํ ํ ํฐ์ด ์ค์ ๋์๋์ง ํ์ธํฉ๋๋ค:
echo $GITHUB_TOKEN - ํ ํฐ์ ํ์ ๊ถํ์ด ์๋์ง ํ์ธํฉ๋๋ค(์ ์ฅ์์ ๋ํ ์ฝ๊ธฐ ์ก์ธ์ค)
- GitHub์ ๊ฒฝ์ฐ ํ ํฐ์ ๊ฐ์ธ ์ ์ฅ์์ ๋ํ
repo๋ฒ์๊ฐ ์๋์ง ํ์ธํฉ๋๋ค - GitLab์ ๊ฒฝ์ฐ ํ ํฐ์ ์ต์ํ
read_repository๋ฒ์๊ฐ ์๋์ง ํ์ธํฉ๋๋ค - ํ ํฐ์ด ๋ง๋ฃ๋์ง ์์๋์ง ํ์ธํฉ๋๋ค
๋ง์ผํ๋ ์ด์ค ์ ๋ฐ์ดํธ๊ฐ ์คํ๋ผ์ธ ํ๊ฒฝ์์ ์คํจํฉ๋๋ค
์ฆ์: ๋ง์ผํ๋ ์ด์ค git pull์ด ์คํจํ๊ณ Claude Code๊ฐ ๊ธฐ์กด ์บ์๋ฅผ ์ญ์ ํ์ฌ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
์์ธ: ๊ธฐ๋ณธ์ ์ผ๋ก git pull์ด ์คํจํ๋ฉด Claude Code๋ ์ค๋๋ ๋ณต์ ๋ณธ์ ์ ๊ฑฐํ๊ณ ๋ค์ ๋ณต์ ๋ฅผ ์๋ํฉ๋๋ค. ์คํ๋ผ์ธ ๋๋ ์์ด๊ฐญ ํ๊ฒฝ์์ ๋ค์ ๋ณต์ ๊ฐ ๋์ผํ ๋ฐฉ์์ผ๋ก ์คํจํ์ฌ ๋ง์ผํ๋ ์ด์ค ๋๋ ํฐ๋ฆฌ๊ฐ ๋น์ด ์๊ฒ ๋ฉ๋๋ค.
ํด๊ฒฐ์ฑ
: CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1์ ์ค์ ํ์ฌ pull์ด ์คํจํ ๋ ๊ธฐ์กด ์บ์๋ฅผ ์ญ์ ํ๋ ๋์ ์ ์งํฉ๋๋ค:
export CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1
์ด ๋ณ์๊ฐ ์ค์ ๋๋ฉด Claude Code๋ git pull ์คํจ ์ ์ค๋๋ ๋ง์ผํ๋ ์ด์ค ๋ณต์ ๋ณธ์ ์ ์งํ๊ณ ๋ง์ง๋ง์ผ๋ก ์๋ ค์ง ์ข์ ์ํ๋ฅผ ๊ณ์ ์ฌ์ฉํฉ๋๋ค. ์ ์ฅ์์ ์ ๋ ๋๋ฌํ ์ ์๋ ์์ ํ ์คํ๋ผ์ธ ๋ฐฐํฌ์ ๊ฒฝ์ฐ ๋์ CLAUDE_CODE_PLUGIN_SEED_DIR์ ์ฌ์ฉํ์ฌ ๋น๋ ์๊ฐ์ ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฌ์ ์ฑ์๋๋ค.
Git ์์ ์๊ฐ ์ด๊ณผ
์ฆ์: ํ๋ฌ๊ทธ์ธ ์ค์น ๋๋ ๋ง์ผํ๋ ์ด์ค ์ ๋ฐ์ดํธ๊ฐ "Git clone timed out after 120s" ๋๋ "Git pull timed out after 120s"์ ๊ฐ์ ์๊ฐ ์ด๊ณผ ์ค๋ฅ๋ก ์คํจํฉ๋๋ค.
์์ธ: Claude Code๋ ํ๋ฌ๊ทธ์ธ ์ ์ฅ์ ๋ณต์ ๋ฐ ๋ง์ผํ๋ ์ด์ค ์ ๋ฐ์ดํธ ๋์ด์ค๊ธฐ๋ฅผ ํฌํจํ ๋ชจ๋ git ์์ ์ 120์ด ์๊ฐ ์ด๊ณผ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋๊ท๋ชจ ์ ์ฅ์ ๋๋ ๋๋ฆฐ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ์ด ์ ํ์ ์ด๊ณผํ ์ ์์ต๋๋ค.
ํด๊ฒฐ์ฑ
: CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฐ ์ด๊ณผ๋ฅผ ๋๋ฆฝ๋๋ค. ๊ฐ์ ๋ฐ๋ฆฌ์ด ๋จ์์
๋๋ค:
export CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS=300000 # 5๋ถ
์๋ ๊ฒฝ๋ก๊ฐ ์๋ ํ๋ฌ๊ทธ์ธ์ด URL ๊ธฐ๋ฐ ๋ง์ผํ๋ ์ด์ค์์ ์คํจํฉ๋๋ค
์ฆ์: URL์ ํตํด ๋ง์ผํ๋ ์ด์ค๋ฅผ ์ถ๊ฐํ์ต๋๋ค(์: https://example.com/marketplace.json). ํ์ง๋ง "./plugins/my-plugin"๊ณผ ๊ฐ์ ์๋ ๊ฒฝ๋ก ์์ค๊ฐ ์๋ ํ๋ฌ๊ทธ์ธ์ด "path not found" ์ค๋ฅ๋ก ์ค์น๋์ง ์์ต๋๋ค.
์์ธ: URL ๊ธฐ๋ฐ ๋ง์ผํ๋ ์ด์ค๋ marketplace.json ํ์ผ ์์ฒด๋ง ๋ค์ด๋ก๋ํฉ๋๋ค. ์๋ฒ์์ ํ๋ฌ๊ทธ์ธ ํ์ผ์ ๋ค์ด๋ก๋ํ์ง ์์ต๋๋ค. ๋ง์ผํ๋ ์ด์ค ํญ๋ชฉ์ ์๋ ๊ฒฝ๋ก๋ ๋ค์ด๋ก๋๋์ง ์์ ์๊ฒฉ ์๋ฒ์ ํ์ผ์ ์ฐธ์กฐํฉ๋๋ค.
ํด๊ฒฐ์ฑ :
- ์ธ๋ถ ์์ค ์ฌ์ฉ: ํ๋ฌ๊ทธ์ธ ํญ๋ชฉ์ ์๋ ๊ฒฝ๋ก ๋์ GitHub, npm ๋๋ git URL ์์ค๋ฅผ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝํฉ๋๋ค:
{ "name": "my-plugin", "source": { "source": "github", "repo": "owner/repo" } } - Git ๊ธฐ๋ฐ ๋ง์ผํ๋ ์ด์ค ์ฌ์ฉ: ๋ง์ผํ๋ ์ด์ค๋ฅผ Git ์ ์ฅ์์์ ํธ์คํ ํ๊ณ git URL๋ก ์ถ๊ฐํฉ๋๋ค. Git ๊ธฐ๋ฐ ๋ง์ผํ๋ ์ด์ค๋ ์ ์ฒด ์ ์ฅ์๋ฅผ ๋ณต์ ํ๋ฏ๋ก ์๋ ๊ฒฝ๋ก๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํฉ๋๋ค.
์ค์น ํ ํ์ผ์ ์ฐพ์ ์ ์์
์ฆ์: ํ๋ฌ๊ทธ์ธ์ด ์ค์น๋์ง๋ง ํ์ผ ์ฐธ์กฐ๊ฐ ์คํจํฉ๋๋ค. ํนํ ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ ์ธ๋ถ์ ํ์ผ
์์ธ: ํ๋ฌ๊ทธ์ธ์ ์ ์๋ฆฌ์ ์ฌ์ฉ๋์ง ์๊ณ ์บ์ ๋๋ ํฐ๋ฆฌ์ ๋ณต์ฌ๋ฉ๋๋ค. ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ ์ธ๋ถ์ ํ์ผ์ ์ฐธ์กฐํ๋ ๊ฒฝ๋ก(์: ../shared-utils)๋ ํด๋น ํ์ผ์ด ๋ณต์ฌ๋์ง ์๊ธฐ ๋๋ฌธ์ ์๋ํ์ง ์์ต๋๋ค.
ํด๊ฒฐ์ฑ : symlink ๋ฐ ๋๋ ํฐ๋ฆฌ ์ฌ๊ตฌ์ฑ์ ํฌํจํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ํ๋ฌ๊ทธ์ธ ์บ์ฑ ๋ฐ ํ์ผ ํด์์ ์ฐธ์กฐํ์ธ์.
์ถ๊ฐ ๋๋ฒ๊น ๋๊ตฌ ๋ฐ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ ๋๋ฒ๊น ๋ฐ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฐธ๊ณ ํญ๋ชฉ
- ๋ฏธ๋ฆฌ ๋น๋๋ ํ๋ฌ๊ทธ์ธ ๊ฒ์ ๋ฐ ์ค์น - ๊ธฐ์กด ๋ง์ผํ๋ ์ด์ค์์ ํ๋ฌ๊ทธ์ธ ์ค์น
- ํ๋ฌ๊ทธ์ธ - ์์ ์ ํ๋ฌ๊ทธ์ธ ์์ฑ
- ํ๋ฌ๊ทธ์ธ ์ฐธ์กฐ - ์์ ํ ๊ธฐ์ ์ฌ์ ๋ฐ ์คํค๋ง
- ํ๋ฌ๊ทธ์ธ ์ค์ - ํ๋ฌ๊ทธ์ธ ๊ตฌ์ฑ ์ต์
- strictKnownMarketplaces ์ฐธ์กฐ - ๊ด๋ฆฌ๋๋ ๋ง์ผํ๋ ์ด์ค ์ ํ