SpyBara
Go Premium

plugin-marketplaces.md 2026-06-16 21:57 UTC to 2026-06-17 17:02 UTC

11 added, 6 removed.

2026
Tue 30 23:02 Mon 29 23:02 Sat 27 01:01 Fri 26 23:00 Thu 25 23:58 Wed 24 22:02 Tue 23 22:00 Mon 22 23:59 Fri 19 22:58 Thu 18 22:00 Wed 17 17:02 Tue 16 21:57 Mon 15 23:02 Sat 13 21:59 Fri 12 22:00 Thu 11 23:01 Wed 10 23:57 Tue 9 06:34 Mon 8 06:52 Sat 6 06:24 Fri 5 06:45 Thu 4 06:52 Wed 3 06:53 Tue 2 06:51

ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ์ƒ์„ฑ ๋ฐ ๋ฐฐํฌ

Claude Code ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ํŒ€๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์นดํƒˆ๋กœ๊ทธ์ž…๋‹ˆ๋‹ค. ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ๊ฒ€์ƒ‰, ๋ฒ„์ „ ์ถ”์ , ์ž๋™ ์—…๋ฐ์ดํŠธ ๋ฐ ์—ฌ๋Ÿฌ ์†Œ์Šค ์œ ํ˜•(git ์ €์žฅ์†Œ, ๋กœ์ปฌ ๊ฒฝ๋กœ ๋“ฑ)์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ํŒ€์ด๋‚˜ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด ์ž์‹ ์˜ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๊ธฐ์กด ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•˜์‹œ๋‚˜์š”? ๋ฏธ๋ฆฌ ๋นŒ๋“œ๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฒ€์ƒ‰ ๋ฐ ์„ค์น˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ฐœ์š”

๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒ์„ฑ: skills, ์—์ด์ „ํŠธ, hooks, MCP ์„œ๋ฒ„ ๋˜๋Š” LSP ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ๋ฐฐํฌํ•  ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ด๋ฏธ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  2. ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ํŒŒ์ผ ์ƒ์„ฑ: ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‚˜์—ดํ•˜๊ณ  ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ฐพ์„ ์œ„์น˜๋ฅผ ์ •์˜ํ•˜๋Š” marketplace.json์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค(๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ํŒŒ์ผ ์ƒ์„ฑ ์ฐธ์กฐ).
  3. ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ํ˜ธ์ŠคํŒ…: GitHub, GitLab ๋˜๋Š” ๋‹ค๋ฅธ git ํ˜ธ์ŠคํŠธ์— ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค(๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ํ˜ธ์ŠคํŒ… ๋ฐ ๋ฐฐํฌ ์ฐธ์กฐ).
  4. ์‚ฌ์šฉ์ž์™€ ๊ณต์œ : ์‚ฌ์šฉ์ž๊ฐ€ /plugin marketplace add๋กœ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ฐœ๋ณ„ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค(ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฒ€์ƒ‰ ๋ฐ ์„ค์น˜ ์ฐธ์กฐ).

๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๊ฐ€ ๋ผ์ด๋ธŒ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ์ €์žฅ์†Œ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ‘ธ์‹œํ•˜์—ฌ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” /plugin marketplace update๋กœ ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ์„ ์ƒˆ๋กœ ๊ณ ์นฉ๋‹ˆ๋‹ค.

์—ฐ์Šต: ๋กœ์ปฌ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ์ƒ์„ฑ

์ด ์˜ˆ์ œ์—์„œ๋Š” ํ•˜๋‚˜์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค: ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•œ quality-review skill์ž…๋‹ˆ๋‹ค. ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , skill์„ ์ถ”๊ฐ€ํ•˜๊ณ , ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์™€ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค์Œ, ์„ค์น˜ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

1

๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ ์ƒ์„ฑ

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
2

skill ์ƒ์„ฑ

quality-review skill์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ์ •์˜ํ•˜๋Š” SKILL.md ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

---
description: ๋ฒ„๊ทธ, ๋ณด์•ˆ ๋ฐ ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ์ฝ”๋“œ ๊ฒ€ํ† 
disable-model-invocation: true
---

์„ ํƒํ•œ ์ฝ”๋“œ ๋˜๋Š” ์ตœ๊ทผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋‹ค์Œ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค:
- ์ž ์žฌ์  ๋ฒ„๊ทธ ๋˜๋Š” ์—ฃ์ง€ ์ผ€์ด์Šค
- ๋ณด์•ˆ ๋ฌธ์ œ
- ์„ฑ๋Šฅ ๋ฌธ์ œ
- ๊ฐ€๋…์„ฑ ๊ฐœ์„ 

๊ฐ„๊ฒฐํ•˜๊ณ  ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋‚ด์šฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
3

ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ƒ์„ฑ

ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค๋ช…ํ•˜๋Š” plugin.json ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋Š” .claude-plugin/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.

{
"name": "quality-review-plugin",
"description": "๋น ๋ฅธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•œ quality-review skill ์ถ”๊ฐ€",
"version": "1.0.0"
}
4

๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ํŒŒ์ผ ์ƒ์„ฑ

ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‚˜์—ดํ•˜๋Š” ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

{
"name": "my-plugins",
"owner": {
"name": "Your Name"
},
"plugins": [
{
"name": "quality-review-plugin",
"source": "./plugins/quality-review-plugin",
"description": "๋น ๋ฅธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•œ quality-review skill ์ถ”๊ฐ€"
}
]
}
5

์ถ”๊ฐ€ ๋ฐ ์„ค์น˜

๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

/plugin marketplace add ./my-marketplace
/plugin install quality-review-plugin@my-plugins
6

์‹œ๋„ํ•ด๋ณด๊ธฐ

ํŽธ์ง‘๊ธฐ์—์„œ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ  ์ƒˆ skill์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ skill์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ด๋ฆ„์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฉ๋‹ˆ๋‹ค.

/quality-review-plugin:quality-review

ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…(hooks, ์—์ด์ „ํŠธ, MCP ์„œ๋ฒ„ ๋ฐ LSP ์„œ๋ฒ„ ํฌํ•จ)์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ํŒŒ์ผ ์ƒ์„ฑ

์ €์žฅ์†Œ ๋ฃจํŠธ์— .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 ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ชฉ๋ก ์•„๋ž˜ ์ฐธ์กฐ

์†Œ์œ ์ž ํ•„๋“œ

ํ•„๋“œ ์œ ํ˜• ํ•„์ˆ˜ ์„ค๋ช…
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์„ ํ†ตํ•ด ์„ค์น˜๋จ

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์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ๋ฃจํŠธ ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€๊ธฐ ์œ„ํ•ด ../๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.

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๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฐํฌ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  1. ์ €์žฅ์†Œ ์ƒ์„ฑ: ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋ฅผ ์œ„ํ•œ ์ƒˆ ์ €์žฅ์†Œ ์„ค์ •
  2. ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ํŒŒ์ผ ์ถ”๊ฐ€: ํ”Œ๋Ÿฌ๊ทธ์ธ ์ •์˜์™€ ํ•จ๊ป˜ .claude-plugin/marketplace.json ์ƒ์„ฑ
  3. ํŒ€๊ณผ ๊ณต์œ : ์‚ฌ์šฉ์ž๊ฐ€ /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

๋ฐฐํฌ ์ „์— ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธ

๊ณต์œ ํ•˜๊ธฐ ์ „์— ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋ฅผ ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค:

/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
  }
}

์ „์ฒด ๊ตฌ์„ฑ ์˜ต์…˜์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ฌ์ „ ์ฑ„์šฐ๊ธฐ

์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋ฐ 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์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ œํ•œ ์ž‘๋™ ๋ฐฉ์‹

์ œํ•œ์€ ๋„คํŠธ์›Œํฌ ๋˜๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ์ž‘์—…์ด ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ํ™•์ธ๋ฉ๋‹ˆ๋‹ค. ํ™•์ธ์€ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ์ถ”๊ฐ€ ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜, ์—…๋ฐ์ดํŠธ, ์ƒˆ๋กœ๊ณ ์นจ ๋ฐ ์ž๋™ ์—…๋ฐ์ดํŠธ ์‹œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๊ฐ€ ์ •์ฑ… ๊ตฌ์„ฑ ์ „์— ์ถ”๊ฐ€๋˜์—ˆ๊ณ  ํ•ด๋‹น ์†Œ์Šค๊ฐ€ ๋” ์ด์ƒ ํ—ˆ์šฉ ๋ชฉ๋ก๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด 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๋Š” ๋‹ค์Œ ์ค‘ ์„ค์ •๋œ ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋ฒ„์ „์„ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค:

  1. ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ plugin.json์˜ version
  2. ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ํ•ญ๋ชฉ์˜ version
  3. ํ”Œ๋Ÿฌ๊ทธ์ธ ์†Œ์Šค์˜ git ์ปค๋ฐ‹ SHA

git ๊ธฐ๋ฐ˜ ์†Œ์Šค ์œ ํ˜• github, url, git-subdir ๋ฐ git ํ˜ธ์ŠคํŒ… ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ๋‚ด์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ์˜ ๊ฒฝ์šฐ version์„ ์™„์ „ํžˆ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ์ƒˆ ์ปค๋ฐ‹์€ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‚ด๋ถ€ ๋˜๋Š” ํ™œ๋ฐœํ•˜๊ฒŒ ๊ฐœ๋ฐœ ์ค‘์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์„ค์ •์ž…๋‹ˆ๋‹ค.

๋ฆด๋ฆฌ์Šค ์ฑ„๋„ ์„ค์ •

ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ "stable" ๋ฐ "latest" ๋ฆด๋ฆฌ์Šค ์ฑ„๋„์„ ์ง€์›ํ•˜๋ ค๋ฉด ๋™์ผํ•œ ์ €์žฅ์†Œ์˜ ๋‹ค์–‘ํ•œ refs ๋˜๋Š” SHA๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‘ ๊ฐœ์˜ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ด€๋ฆฌ๋˜๋Š” ์„ค์ •์„ ํ†ตํ•ด ๋‘ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋ฅผ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ๊ทธ๋ฃน์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ
{
  "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>: GitHub owner/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 [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 ๋ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ ์žฌ๊ตฌ์„ฑ์„ ํฌํ•จํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์บ์‹ฑ ๋ฐ ํŒŒ์ผ ํ•ด์„์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ถ”๊ฐ€ ๋””๋ฒ„๊น… ๋„๊ตฌ ๋ฐ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋Š” ๋””๋ฒ„๊น… ๋ฐ ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ฐธ๊ณ  ํ•ญ๋ชฉ