SpyBara
Go Premium

plugins-reference.md 2026-06-09 06:34 UTC to 2026-06-10 23:57 UTC

281 added, 55 removed.

2026
Thu 11 02:59 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 ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ์˜ ์™„์ „ํ•œ ๊ธฐ์ˆ  ์ฐธ์กฐ, ์Šคํ‚ค๋งˆ, CLI ๋ช…๋ น์–ด ๋ฐ ์ปดํฌ๋„ŒํŠธ ์‚ฌ์–‘ ํฌํ•จ.

์ด ์ฐธ์กฐ๋Š” Claude Code ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ์˜ ์™„์ „ํ•œ ๊ธฐ์ˆ  ์‚ฌ์–‘์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ปดํฌ๋„ŒํŠธ ์Šคํ‚ค๋งˆ, CLI ๋ช…๋ น์–ด ๋ฐ ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Claude Code๋ฅผ ์‚ฌ์šฉ์ž ์ •์˜ ๊ธฐ๋Šฅ์œผ๋กœ ํ™•์žฅํ•˜๋Š” ์ž์ฒด ํฌํ•จ๋œ ์ปดํฌ๋„ŒํŠธ ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ ์ปดํฌ๋„ŒํŠธ์—๋Š” skills, agents, hooks, MCP servers, LSP servers ๋ฐ monitors๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ ์ปดํฌ๋„ŒํŠธ ์ฐธ์กฐ

Skills

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Claude Code์— skills๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉ์ž๋‚˜ Claude๊ฐ€ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” /name ๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์œ„์น˜: ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ์˜ skills/ ๋˜๋Š” commands/ ๋””๋ ‰ํ† ๋ฆฌ, ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ์˜ ๋‹จ์ผ SKILL.md ํŒŒ์ผ

ํŒŒ์ผ ํ˜•์‹: Skills๋Š” SKILL.md๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ด๊ณ , commands๋Š” ๊ฐ„๋‹จํ•œ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

Skill ๊ตฌ์กฐ:

skills/
โ”œโ”€โ”€ pdf-processor/
โ”‚   โ”œโ”€โ”€ SKILL.md
โ”‚   โ”œโ”€โ”€ reference.md (์„ ํƒ์‚ฌํ•ญ)
โ”‚   โ””โ”€โ”€ scripts/ (์„ ํƒ์‚ฌํ•ญ)
โ””โ”€โ”€ code-reviewer/
    โ””โ”€โ”€ SKILL.md

ํ†ตํ•ฉ ๋™์ž‘:

  • Skills์™€ commands๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์„ค์น˜๋  ๋•Œ ์ž๋™์œผ๋กœ ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค.
  • Claude๋Š” ์ž‘์—… ์ปจํ…์ŠคํŠธ์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์ด๋“ค์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Skills๋Š” SKILL.md์™€ ํ•จ๊ป˜ ์ง€์› ํŒŒ์ผ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™„์ „ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋Š” Skills๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Agents

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Claude๊ฐ€ ์ ์ ˆํ•  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ • ์ž‘์—…์„ ์œ„ํ•œ ํŠนํ™”๋œ subagents๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์น˜: ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ์˜ agents/ ๋””๋ ‰ํ† ๋ฆฌ

ํŒŒ์ผ ํ˜•์‹: ์—์ด์ „ํŠธ ๊ธฐ๋Šฅ์„ ์„ค๋ช…ํ•˜๋Š” ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ

Agent ๊ตฌ์กฐ:

---
name: agent-name
description: ์ด ์—์ด์ „ํŠธ๊ฐ€ ์ „๋ฌธ์œผ๋กœ ํ•˜๋Š” ๋ถ„์•ผ์™€ Claude๊ฐ€ ์ด๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•  ๋•Œ
model: sonnet
effort: medium
maxTurns: 20
disallowedTools: Write, Edit
---

์—์ด์ „ํŠธ์˜ ์—ญํ• , ์ „๋ฌธ์„ฑ ๋ฐ ๋™์ž‘์„ ์„ค๋ช…ํ•˜๋Š” ์ƒ์„ธํ•œ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ์ž…๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ agents๋Š” name, description, model, effort, maxTurns, tools, disallowedTools, skills, memory, background ๋ฐ isolation frontmatter ํ•„๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์œ ํšจํ•œ isolation ๊ฐ’์€ "worktree"์ž…๋‹ˆ๋‹ค. ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ hooks, mcpServers ๋ฐ permissionMode๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์ œ๊ณต agents์—์„œ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ†ตํ•ฉ ์ง€์ :

  • Agents๋Š” /agents ์ธํ„ฐํŽ˜์ด์Šค์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
  • Claude๋Š” ์ž‘์—… ์ปจํ…์ŠคํŠธ์— ๋”ฐ๋ผ agents๋ฅผ ์ž๋™์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Agents๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ”Œ๋Ÿฌ๊ทธ์ธ agents๋Š” ๊ธฐ๋ณธ ์ œ๊ณต Claude agents์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์™„์ „ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋Š” Subagents๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Hooks

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Claude Code ์ด๋ฒคํŠธ์— ์ž๋™์œผ๋กœ ์‘๋‹ตํ•˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์น˜: ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ์˜ hooks/hooks.json ๋˜๋Š” plugin.json์— ์ธ๋ผ์ธ

ํ˜•์‹: ์ด๋ฒคํŠธ ๋งค์ฒ˜ ๋ฐ ์ž‘์—…์ด ์žˆ๋Š” JSON ๊ตฌ์„ฑ

Hook ๊ตฌ์„ฑ:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/format-code.sh"
          }
        ]
      }
    ]
  }
}

ํ”Œ๋Ÿฌ๊ทธ์ธ hooks๋Š” ์‚ฌ์šฉ์ž ์ •์˜ hooks์™€ ๋™์ผํ•œ ๋ผ์ดํ”„์‚ฌ์ดํด ์ด๋ฒคํŠธ์— ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค:

Event When it fires
SessionStart When a session begins or resumes
Setup When you start Claude Code with --init-only, or with --init or --maintenance in -p mode. For one-time preparation in CI or scripts
UserPromptSubmit When you submit a prompt, before Claude processes it
UserPromptExpansion When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion
PreToolUse Before a tool call executes. Can block it
PermissionRequest When a permission dialog appears
PermissionDenied When a tool call is denied by the auto mode classifier. Return {retry: true} to tell the model it may retry the denied tool call
PostToolUse After a tool call succeeds
PostToolUseFailure After a tool call fails
PostToolBatch After a full batch of parallel tool calls resolves, before the next model call
Notification When Claude Code sends a notification
MessageDisplay While assistant message text is displayed
SubagentStart When a subagent is spawned
SubagentStop When a subagent finishes
TaskCreated When a task is being created via TaskCreate
TaskCompleted When a task is being marked as completed
Stop When Claude finishes responding
StopFailure When the turn ends due to an API error. Output and exit code are ignored
TeammateIdle When an agent team teammate is about to go idle
InstructionsLoaded When a CLAUDE.md or .claude/rules/*.md file is loaded into context. Fires at session start and when files are lazily loaded during a session
ConfigChange When a configuration file changes during a session
CwdChanged When the working directory changes, for example when Claude executes a cd command. Useful for reactive environment management with tools like direnv
FileChanged When a watched file changes on disk. The matcher field specifies which filenames to watch
WorktreeCreate When a worktree is being created via --worktree or isolation: "worktree". Replaces default git behavior
WorktreeRemove When a worktree is being removed, either at session exit or when a subagent finishes
PreCompact Before context compaction
PostCompact After context compaction completes
Elicitation When an MCP server requests user input during a tool call
ElicitationResult After a user responds to an MCP elicitation, before the response is sent back to the server
SessionEnd When a session terminates

Hook ์œ ํ˜•:

  • command: ์…ธ ๋ช…๋ น์–ด ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
  • http: ์ด๋ฒคํŠธ JSON์„ URL๋กœ POST ์š”์ฒญ์œผ๋กœ ์ „์†ก
  • mcp_tool: ๊ตฌ์„ฑ๋œ MCP server์—์„œ ๋„๊ตฌ ํ˜ธ์ถœ
  • prompt: LLM์œผ๋กœ ํ”„๋กฌํ”„ํŠธ ํ‰๊ฐ€ (์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•ด $ARGUMENTS ํ”Œ๋ ˆ์ด์Šคํ™€๋” ์‚ฌ์šฉ)
  • agent: ๋ณต์žกํ•œ ๊ฒ€์ฆ ์ž‘์—…์„ ์œ„ํ•ด ๋„๊ตฌ๊ฐ€ ์žˆ๋Š” ์—์ด์ „ํŠธ ๊ฒ€์ฆ์ž ์‹คํ–‰

MCP servers

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Claude Code๋ฅผ ์™ธ๋ถ€ ๋„๊ตฌ ๋ฐ ์„œ๋น„์Šค์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Model Context Protocol (MCP) servers๋ฅผ ๋ฒˆ๋“ค๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์น˜: ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ์˜ .mcp.json ๋˜๋Š” plugin.json์— ์ธ๋ผ์ธ

ํ˜•์‹: ํ‘œ์ค€ MCP ์„œ๋ฒ„ ๊ตฌ์„ฑ

MCP ์„œ๋ฒ„ ๊ตฌ์„ฑ:

{
  "mcpServers": {
    "plugin-database": {
      "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
      "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
      "env": {
        "DB_PATH": "${CLAUDE_PLUGIN_ROOT}/data"
      }
    },
    "plugin-api-client": {
      "command": "npx",
      "args": ["@company/mcp-server", "--plugin-mode"],
      "cwd": "${CLAUDE_PLUGIN_ROOT}"
    }
  }
}

ํ†ตํ•ฉ ๋™์ž‘:

  • ํ”Œ๋Ÿฌ๊ทธ์ธ MCP servers๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ™œ์„ฑํ™”๋  ๋•Œ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.
  • Servers๋Š” Claude์˜ ๋„๊ตฌ ํ‚คํŠธ์—์„œ ํ‘œ์ค€ MCP ๋„๊ตฌ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„ ๊ธฐ๋Šฅ์€ Claude์˜ ๊ธฐ์กด ๋„๊ตฌ์™€ ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค.
  • ํ”Œ๋Ÿฌ๊ทธ์ธ servers๋Š” ์‚ฌ์šฉ์ž MCP servers์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

LSP servers

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Language Server Protocol (LSP) servers๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์ž‘์—…ํ•  ๋•Œ Claude์—๊ฒŒ ์‹ค์‹œ๊ฐ„ ์ฝ”๋“œ ์ธํ…”๋ฆฌ์ „์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

LSP ํ†ตํ•ฉ์€ ๋‹ค์Œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • ์ฆ‰์‹œ ์ง„๋‹จ: Claude๋Š” ๊ฐ ํŽธ์ง‘ ํ›„ ์ฆ‰์‹œ ์˜ค๋ฅ˜ ๋ฐ ๊ฒฝ๊ณ ๋ฅผ ๋ด…๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ๋„ค๋น„๊ฒŒ์ด์…˜: ์ •์˜๋กœ ์ด๋™, ์ฐธ์กฐ ์ฐพ๊ธฐ ๋ฐ ํ˜ธ๋ฒ„ ์ •๋ณด
  • ์–ธ์–ด ์ธ์‹: ์ฝ”๋“œ ๊ธฐํ˜ธ์— ๋Œ€ํ•œ ํƒ€์ž… ์ •๋ณด ๋ฐ ๋ฌธ์„œ

์œ„์น˜: ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ์˜ .lsp.json ๋˜๋Š” plugin.json์— ์ธ๋ผ์ธ

ํ˜•์‹: ์–ธ์–ด ์„œ๋ฒ„ ์ด๋ฆ„์„ ํ•ด๋‹น ๊ตฌ์„ฑ์— ๋งคํ•‘ํ•˜๋Š” JSON ๊ตฌ์„ฑ

.lsp.json ํŒŒ์ผ ํ˜•์‹:

{
  "go": {
    "command": "gopls",
    "args": ["serve"],
    "extensionToLanguage": {
      ".go": "go"
    }
  }
}

plugin.json์— ์ธ๋ผ์ธ:

{
  "name": "my-plugin",
  "lspServers": {
    "go": {
      "command": "gopls",
      "args": ["serve"],
      "extensionToLanguage": {
        ".go": "go"
      }
    }
  }
}

ํ•„์ˆ˜ ํ•„๋“œ:

ํ•„๋“œ ์„ค๋ช…
command ์‹คํ–‰ํ•  LSP ๋ฐ”์ด๋„ˆ๋ฆฌ (PATH์— ์žˆ์–ด์•ผ ํ•จ)
extensionToLanguage ํŒŒ์ผ ํ™•์žฅ์ž๋ฅผ ์–ธ์–ด ์‹๋ณ„์ž์— ๋งคํ•‘

์„ ํƒ์‚ฌํ•ญ ํ•„๋“œ:

ํ•„๋“œ ์„ค๋ช…
args LSP ์„œ๋ฒ„์˜ ๋ช…๋ น์ค„ ์ธ์ˆ˜
transport ํ†ต์‹  ์ „์†ก: stdio (๊ธฐ๋ณธ๊ฐ’) ๋˜๋Š” socket
env ์„œ๋ฒ„ ์‹œ์ž‘ ์‹œ ์„ค์ •ํ•  ํ™˜๊ฒฝ ๋ณ€์ˆ˜
initializationOptions ์ดˆ๊ธฐํ™” ์ค‘์— ์„œ๋ฒ„์— ์ „๋‹ฌ๋˜๋Š” ์˜ต์…˜
settings workspace/didChangeConfiguration์„ ํ†ตํ•ด ์ „๋‹ฌ๋˜๋Š” ์„ค์ •
workspaceFolder ์„œ๋ฒ„์˜ ์ž‘์—… ๊ณต๊ฐ„ ํด๋” ๊ฒฝ๋กœ
startupTimeout ์„œ๋ฒ„ ์‹œ์ž‘์„ ๊ธฐ๋‹ค๋ฆด ์ตœ๋Œ€ ์‹œ๊ฐ„ (๋ฐ€๋ฆฌ์ดˆ)
maxRestarts ํฌ๊ธฐํ•˜๊ธฐ ์ „ ์ตœ๋Œ€ ์žฌ์‹œ์ž‘ ์‹œ๋„ ํšŸ์ˆ˜

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ LSP ํ”Œ๋Ÿฌ๊ทธ์ธ:

ํ”Œ๋Ÿฌ๊ทธ์ธ ์–ธ์–ด ์„œ๋ฒ„ ์„ค์น˜ ๋ช…๋ น์–ด
pyright-lsp Pyright (Python) pip install pyright ๋˜๋Š” npm install -g pyright
typescript-lsp TypeScript Language Server npm install -g typescript-language-server typescript
rust-analyzer-lsp rust-analyzer rust-analyzer ์„ค์น˜ ์ฐธ์กฐ

๋จผ์ € ์–ธ์–ด ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•œ ๋‹ค์Œ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜์„ธ์š”.

Monitors

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ™œ์„ฑํ™”๋  ๋•Œ Claude Code๊ฐ€ ์ž๋™์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ monitors๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ monitor๋Š” ์„ธ์…˜ ๋™์•ˆ ์…ธ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ชจ๋“  stdout ๋ผ์ธ์„ Claude์—๊ฒŒ ์•Œ๋ฆผ์œผ๋กœ ์ „๋‹ฌํ•˜๋ฏ€๋กœ Claude๋Š” ๋กœ๊ทธ ํ•ญ๋ชฉ, ์ƒํƒœ ๋ณ€๊ฒฝ ๋˜๋Š” ํด๋ง๋œ ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž์‹ ์ด watch๋ฅผ ์‹œ์ž‘ํ•˜๋„๋ก ์š”์ฒญ๋ฐ›์„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ monitors๋Š” Monitor tool๊ณผ ๋™์ผํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉฐ ํ•ด๋‹น ๊ฐ€์šฉ์„ฑ ์ œ์•ฝ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค์€ ๋Œ€ํ™”ํ˜• CLI ์„ธ์…˜์—์„œ๋งŒ ์‹คํ–‰๋˜๊ณ , hooks์™€ ๋™์ผํ•œ ์‹ ๋ขฐ ์ˆ˜์ค€์—์„œ ์ƒŒ๋“œ๋ฐ•์Šค ์—†์ด ์‹คํ–‰๋˜๋ฉฐ, Monitor tool์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ํ˜ธ์ŠคํŠธ์—์„œ๋Š” ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

์œ„์น˜: ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ์˜ monitors/monitors.json ๋˜๋Š” plugin.json์— ์ธ๋ผ์ธ

ํ˜•์‹: monitor ํ•ญ๋ชฉ์˜ JSON ๋ฐฐ์—ด

๋‹ค์Œ monitors/monitors.json์€ ๋ฐฐํฌ ์ƒํƒœ ์—”๋“œํฌ์ธํŠธ์™€ ๋กœ์ปฌ ์˜ค๋ฅ˜ ๋กœ๊ทธ๋ฅผ ๊ฐ์‹œํ•ฉ๋‹ˆ๋‹ค:

[
  {
    "name": "deploy-status",
    "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/poll-deploy.sh ${user_config.api_endpoint}",
    "description": "๋ฐฐํฌ ์ƒํƒœ ๋ณ€๊ฒฝ"
  },
  {
    "name": "error-log",
    "command": "tail -F ./logs/error.log",
    "description": "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜ค๋ฅ˜ ๋กœ๊ทธ",
    "when": "on-skill-invoke:debug"
  }
]

monitors๋ฅผ ์ธ๋ผ์ธ์œผ๋กœ ์„ ์–ธํ•˜๋ ค๋ฉด plugin.json์˜ experimental.monitors๋ฅผ ๋™์ผํ•œ ๋ฐฐ์—ด๋กœ ์„ค์ •ํ•˜์„ธ์š”. ๊ธฐ๋ณธ์ด ์•„๋‹Œ ๊ฒฝ๋กœ์—์„œ ๋กœ๋“œํ•˜๋ ค๋ฉด experimental.monitors๋ฅผ "./config/monitors.json"๊ณผ ๊ฐ™์€ ์ƒ๋Œ€ ๊ฒฝ๋กœ ๋ฌธ์ž์—ด๋กœ ์„ค์ •ํ•˜์„ธ์š”. Monitors๋Š” ์‹คํ—˜์  ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ํ•„๋“œ:

ํ•„๋“œ ์„ค๋ช…
name ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‚ด์—์„œ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž. ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋‹ค์‹œ ๋กœ๋“œ๋˜๊ฑฐ๋‚˜ skill์ด ๋‹ค์‹œ ํ˜ธ์ถœ๋  ๋•Œ ์ค‘๋ณต ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
command ์„ธ์…˜ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์˜๊ตฌ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰๋˜๋Š” ์…ธ ๋ช…๋ น์–ด
description ๊ฐ์‹œ ์ค‘์ธ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์š”์•ฝ. ์ž‘์—… ํŒจ๋„ ๋ฐ ์•Œ๋ฆผ ์š”์•ฝ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์„ ํƒ์‚ฌํ•ญ ํ•„๋“œ:

ํ•„๋“œ ์„ค๋ช…
when monitor๊ฐ€ ์‹œ์ž‘๋˜๋Š” ์‹œ๊ธฐ๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. "always"๋Š” ์„ธ์…˜ ์‹œ์ž‘ ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‹ค์‹œ ๋กœ๋“œ ์‹œ ์‹œ์ž‘ํ•˜๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค. "on-skill-invoke:<skill-name>"์€ ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋ช…๋ช…๋œ skill์ด ์ฒ˜์Œ ๋ฐœ์†ก๋  ๋•Œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

command ๊ฐ’์€ MCP ๋ฐ LSP ์„œ๋ฒ„ ๊ตฌ์„ฑ๊ณผ ๋™์ผํ•œ ๋ณ€์ˆ˜ ๋Œ€์ฒด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค: ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA}, ${CLAUDE_PROJECT_DIR}, ${user_config.*} ๋ฐ ํ™˜๊ฒฝ์˜ ๋ชจ๋“  ${ENV_VAR}. ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž์ฒด ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋ช…๋ น์–ด ์•ž์— cd "${CLAUDE_PLUGIN_ROOT}" && ๋ฅผ ๋ถ™์ด์„ธ์š”.

์„ธ์…˜ ์ค‘๊ฐ„์— ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋น„ํ™œ์„ฑํ™”ํ•ด๋„ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ monitors๋Š” ์ค‘์ง€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ธ์…˜์ด ๋๋‚  ๋•Œ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.

Themes

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ /theme์— ๊ธฐ๋ณธ ์ œ๊ณต ํ”„๋ฆฌ์…‹ ๋ฐ ์‚ฌ์šฉ์ž์˜ ๋กœ์ปฌ ํ…Œ๋งˆ์™€ ํ•จ๊ป˜ ๋‚˜ํƒ€๋‚˜๋Š” ์ƒ‰์ƒ ํ…Œ๋งˆ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ๋งˆ๋Š” themes/ ๋””๋ ‰ํ† ๋ฆฌ์˜ JSON ํŒŒ์ผ๋กœ, base ํ”„๋ฆฌ์…‹๊ณผ ์ƒ‰์ƒ ํ† ํฐ์˜ sparse overrides ๋งต์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. Themes๋Š” ์‹คํ—˜์  ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.

{
  "name": "Dracula",
  "base": "dark",
  "overrides": {
    "claude": "#bd93f9",
    "error": "#ff5555",
    "success": "#50fa7b"
  }
}

ํ”Œ๋Ÿฌ๊ทธ์ธ ํ…Œ๋งˆ๋ฅผ ์„ ํƒํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ๊ตฌ์„ฑ์— custom:<plugin-name>:<slug>์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ ํ…Œ๋งˆ๋Š” ์ฝ๊ธฐ ์ „์šฉ์ž…๋‹ˆ๋‹ค. /theme์—์„œ ํ•˜๋‚˜์— Ctrl+E๋ฅผ ๋ˆ„๋ฅด๋ฉด ~/.claude/themes/๋กœ ๋ณต์‚ฌ๋˜์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๋ณต์‚ฌ๋ณธ์„ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ ๋ฒ”์œ„

ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•  ๋•Œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์œ„์น˜์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค:

๋ฒ”์œ„ ์„ค์ • ํŒŒ์ผ ์‚ฌ์šฉ ์‚ฌ๋ก€
user ~/.claude/settings.json ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐœ์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ (๊ธฐ๋ณธ๊ฐ’)
project .claude/settings.json ๋ฒ„์ „ ์ œ์–ด๋ฅผ ํ†ตํ•ด ๊ณต์œ ๋˜๋Š” ํŒ€ ํ”Œ๋Ÿฌ๊ทธ์ธ
local .claude/settings.local.json ํ”„๋กœ์ ํŠธ๋ณ„ ํ”Œ๋Ÿฌ๊ทธ์ธ, gitignored
managed ๊ด€๋ฆฌ๋˜๋Š” ์„ค์ • ๊ด€๋ฆฌ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ (์ฝ๊ธฐ ์ „์šฉ, ์—…๋ฐ์ดํŠธ๋งŒ ๊ฐ€๋Šฅ)

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋‹ค๋ฅธ Claude Code ๊ตฌ์„ฑ๊ณผ ๋™์ผํ•œ ๋ฒ”์œ„ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ์ง€์นจ ๋ฐ ๋ฒ”์œ„ ํ”Œ๋ž˜๊ทธ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ๋ฒ”์œ„์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์„ค๋ช…์€ ๊ตฌ์„ฑ ๋ฒ”์œ„๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.


Skills-directory ํ”Œ๋Ÿฌ๊ทธ์ธ

skills ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์˜ ๋ชจ๋“  ํด๋”๊ฐ€ .claude-plugin/plugin.json ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜๋ฉด ๋‹ค์Œ ์„ธ์…˜์—์„œ <name>@skills-dir์ด๋ผ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ๋กœ๋“œ๋˜๋ฉฐ, ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋‚˜ ์„ค์น˜ ๋‹จ๊ณ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. plugin init์œผ๋กœ ์Šค์บํด๋“œํ•˜์„ธ์š”. ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ์„ค์น˜์™€ ๋‹ฌ๋ฆฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์บ์‹œ์— ๋ณต์‚ฌ๋˜์ง€ ์•Š๊ณ  ์ œ์ž๋ฆฌ์—์„œ ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค.

skills ๋””๋ ‰ํ† ๋ฆฌ ํŠธ๋ฆฌ๋Š” ์„ธ ๊ฐ€์ง€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

๋ฌด์—‡์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๋ฌด์—‡์ธ์ง€
๋งค๋‹ˆํŽ˜์ŠคํŠธ๊ฐ€ ์—†๋Š” <skills-dir>/foo/SKILL.md foo๋ผ๋Š” ์ผ๋ฐ˜ skill
<skills-dir>/foo/.claude-plugin/plugin.json foo@skills-dir ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ, ์ž์ฒด skills, agents, hooks ๋“ฑ์„ ๋ฒˆ๋“ค๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
<plugin>/skills/bar/SKILL.md ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‚ด์— ํŒจํ‚ค์ง€๋œ bar skill

ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋กœ๋“œ๋˜๋Š” ์œ„์น˜ ์„ ํƒ

Skills ๋””๋ ‰ํ† ๋ฆฌ ๋ฒ”์œ„ ๋กœ๋“œ
~/.claude/skills/ personal ์œ„์น˜๊ฐ€ ๋‹น์‹ ์˜ ๊ฒƒ์ด๋ฏ€๋กœ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ
<cwd>/.claude/skills/ project ํ•ด๋‹น ํด๋”์— ๋Œ€ํ•œ ์ž‘์—… ๊ณต๊ฐ„ ์‹ ๋ขฐ ๋Œ€ํ™”๋ฅผ ์ˆ˜๋ฝํ•œ ํ›„์—๋งŒ

ํ”„๋กœ์ ํŠธ ๋ฒ”์œ„ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ €์žฅ์†Œ์— ์ฒดํฌ์ธ๋˜๊ณ  ๋ณต์ œํ•˜๋Š” ๋ชจ๋“  ํ˜‘๋ ฅ์ž์—๊ฒŒ ๋„๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์ฝ˜ํ…์ธ ๋Š” ์ €์žฅ์†Œ์—์„œ ์˜ค๋ฏ€๋กœ .claude/settings.json์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ์‹ ๋ขฐ ๊ฒŒ์ดํŠธ ํ›„์—๋งŒ ๋กœ๋“œ๋˜๋ฉฐ, ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ์ถ”๊ฐ€๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค:

  • ์„ ์–ธํ•˜๋Š” MCP servers๋Š” ํ”„๋กœ์ ํŠธ .mcp.json๊ณผ ๋™์ผํ•œ ์„œ๋ฒ„๋ณ„ ์Šน์ธ์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.
  • LSP servers๋Š” ์ž‘์—… ๊ณต๊ฐ„์„ ์‹ ๋ขฐํ•œ ํ›„์—๋งŒ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ monitors๋Š” ๋กœ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธ ๋ฒ”์œ„ ํ”Œ๋Ÿฌ๊ทธ์ธ์—๋Š” ์ด๋Ÿฌํ•œ ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.

Skills-directory ํ”Œ๋Ÿฌ๊ทธ์ธ ํŽธ์ง‘, ๋‹ค์‹œ ๋กœ๋“œ ๋ฐ ๋น„ํ™œ์„ฑํ™”

skill์˜ SKILL.md์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ํ˜„์žฌ ์„ธ์…˜์—์„œ ์ฆ‰์‹œ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. hooks/, .mcp.json, agents/ ๋ฐ output-styles/์™€ ๊ฐ™์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. /reload-plugins๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ Claude Code๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ ์ด๋“ค์„ ์„ ํƒํ•˜์„ธ์š”. ๋ผ์ด๋ธŒ ๋ณ€๊ฒฝ ๊ฐ์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

skills-directory ํ”Œ๋Ÿฌ๊ทธ์ธ ๋กœ๋“œ๋ฅผ ์ค‘์ง€ํ•˜๋ ค๋ฉด ํ•ด๋‹น ํด๋”๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ด๋ฆ„์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•˜์„ธ์š”. ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์—์„œ ์•„๋ฌด๊ฒƒ๋„ ์„ค์น˜๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ uninstall ๋‹จ๊ณ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

claude plugin disable my-tool@skills-dir

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

.claude-plugin/plugin.json ํŒŒ์ผ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ ๊ตฌ์„ฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„น์…˜์€ ์ง€์›๋˜๋Š” ๋ชจ๋“  ํ•„๋“œ ๋ฐ ์˜ต์…˜์„ ๋ฌธ์„œํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋งค๋‹ˆํŽ˜์ŠคํŠธ๋Š” ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ƒ๋žตํ•˜๋ฉด Claude Code๋Š” ๊ธฐ๋ณธ ์œ„์น˜์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž๋™์œผ๋กœ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ด๋ฆ„์„ ํŒŒ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

์™„์ „ํ•œ ์Šคํ‚ค๋งˆ

{
  "name": "plugin-name",
  "displayName": "Plugin Name",
  "version": "1.2.0",
  "description": "Brief plugin description",
  "author": {
    "name": "Author Name",
    "email": "author@example.com",
    "url": "https://github.com/author"
  },
  "homepage": "https://docs.example.com/plugin",
  "repository": "https://github.com/author/plugin",
  "license": "MIT",
  "keywords": ["keyword1", "keyword2"],
  "skills": "./custom/skills/",
  "commands": ["./custom/commands/special.md"],
  "agents": ["./custom/agents/reviewer.md"],
  "hooks": "./config/hooks.json",
  "mcpServers": "./mcp-config.json",
  "outputStyles": "./styles/",
  "lspServers": "./.lsp.json",
  "experimental": {
    "themes": "./themes/",
    "monitors": "./monitors.json"
  },
  "dependencies": [
    "helper-lib",
    { "name": "secrets-vault", "version": "~2.1.0" }
  ]
}

ํ•„์ˆ˜ ํ•„๋“œ

๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ name์ด ์œ ์ผํ•œ ํ•„์ˆ˜ ํ•„๋“œ์ž…๋‹ˆ๋‹ค.

ํ•„๋“œ ํƒ€์ž… ์„ค๋ช… ์˜ˆ์‹œ
name string ๊ณ ์œ  ์‹๋ณ„์ž (kebab-case, ๊ณต๋ฐฑ ์—†์Œ) "deployment-tools"

์ด ์ด๋ฆ„์€ ์ปดํฌ๋„ŒํŠธ ๋„ค์ž„์ŠคํŽ˜์ด์‹ฑ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด UI์—์„œ ์ด๋ฆ„์ด plugin-dev์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ agent agent-creator๋Š” plugin-dev:agent-creator๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์ธ์‹๋˜์ง€ ์•Š์€ ํ•„๋“œ

Claude Code๋Š” ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ตœ์ƒ์œ„ ํ•„๋“œ๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ƒํƒœ๊ณ„์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ plugin.json์— ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์—ฌ์ „ํžˆ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด VS Code ๋˜๋Š” Cursor ํ™•์žฅ ๋งค๋‹ˆํŽ˜์ŠคํŠธ, npm package.json ๋˜๋Š” MCPB/DXT ๋ฒˆ๋“ค ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋กœ๋„ ์ž‘๋™ํ•˜๋Š” ํ•˜๋‚˜์˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์‹ค์šฉ์ ์ž…๋‹ˆ๋‹ค.

claude plugin validate๋Š” ์ธ์‹๋˜์ง€ ์•Š์€ ํ•„๋“œ๋ฅผ ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ๊ณ ๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ํ•„๋“œ๊ฐ€ ์ธ์‹๋œ ํ•„๋“œ์™€ ํ•œ๋‘ ๊ธ€์ž ์ฐจ์ด๋‚˜๋ฉด ๊ฒฝ๊ณ ๋Š” ์˜๋„๋œ ์ด๋ฆ„์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์ธ์‹๋˜์ง€ ์•Š์€ ํ•„๋“œ ๊ฒฝ๊ณ ๋งŒ ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์—ฌ์ „ํžˆ ๊ฒ€์ฆ์„ ํ†ต๊ณผํ•˜๊ณ  ๋Ÿฐํƒ€์ž„์— ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ ํƒ€์ž…์˜ ํ•„๋“œ๋Š” ์—ฌ์ „ํžˆ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด keywords ๊ฐ’์ด ๋ฐฐ์—ด ๋Œ€์‹  ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ ๋กœ๋“œ ์˜ค๋ฅ˜์ด๋ฉฐ claude plugin validate๋Š” ์ด๋ฅผ ์˜ค๋ฅ˜๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

--strict๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ๊ฒฝ๊ณ ๋ฅผ ์˜ค๋ฅ˜๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. CI์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋Ÿฐํƒ€์ž„์— ๋กœ๋“œ๋˜๋”๋ผ๋„ ๊ฒŒ์‹œํ•˜๊ธฐ ์ „์— ์˜คํƒ€๊ฐ€ ๋‚œ ํ•„๋“œ ์ด๋ฆ„์ด๋‚˜ ๋‹ค๋ฅธ ๋„๊ตฌ์˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์—์„œ ๋‚จ๊ฒจ์ง„ ํ•„๋“œ๋ฅผ ํฌ์ฐฉํ•ฉ๋‹ˆ๋‹ค.

claude plugin validate ./my-plugin --strict

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ

ํ•„๋“œ ํƒ€์ž… ์„ค๋ช… ์˜ˆ์‹œ
$schema string ํŽธ์ง‘๊ธฐ ์ž๋™ ์™„์„ฑ ๋ฐ ๊ฒ€์ฆ์„ ์œ„ํ•œ JSON Schema URL. Claude Code๋Š” ๋กœ๋“œ ์‹œ ์ด ํ•„๋“œ๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. "https://json.schemastore.org/claude-code-plugin-manifest.json"
displayName string {/* min-version: 2.1.143 */}/plugin ์„ ํƒ๊ธฐ ๋ฐ ๊ธฐํƒ€ UI ํ‘œ๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ƒ๋žตํ•˜๋ฉด name์œผ๋กœ ํด๋ฐฑ๋ฉ๋‹ˆ๋‹ค. name๊ณผ ๋‹ฌ๋ฆฌ ๊ณต๋ฐฑ๊ณผ ๋ชจ๋“  ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์‹ฑ ๋˜๋Š” ์กฐํšŒ์— ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Claude Code v2.1.143 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. "Deployment Tools"
version string ์„ ํƒ์‚ฌํ•ญ. ์˜๋ฏธ ์žˆ๋Š” ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์„ค์ •ํ•˜๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ•ด๋‹น ๋ฒ„์ „ ๋ฌธ์ž์—ด๋กœ ๊ณ ์ •๋˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋Š” ๋ฒ„์ „์„ ์˜ฌ๋ฆด ๋•Œ๋งŒ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ƒ๋žตํ•˜๋ฉด Claude Code๋Š” git ์ปค๋ฐ‹ SHA๋กœ ํด๋ฐฑ๋˜๋ฏ€๋กœ ๋ชจ๋“  ์ปค๋ฐ‹์ด ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ํ•ญ๋ชฉ์—๋„ ์„ค์ •๋œ ๊ฒฝ์šฐ plugin.json์ด ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. "2.1.0"
description string ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ชฉ์ ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช… "๋ฐฐํฌ ์ž๋™ํ™” ๋„๊ตฌ"
author object ์ž‘์„ฑ์ž ์ •๋ณด {"name": "Dev Team", "email": "dev@company.com"}
homepage string ๋ฌธ์„œ URL "https://docs.example.com"
repository string ์†Œ์Šค ์ฝ”๋“œ URL "https://github.com/user/plugin"
license string ๋ผ์ด์„ ์Šค ์‹๋ณ„์ž "MIT", "Apache-2.0"
keywords array ๋ฐœ๊ฒฌ ํƒœ๊ทธ ["deployment", "ci-cd"]
defaultEnabled boolean {/* min-version: 2.1.154 */}์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ™œ์„ฑํ™”๋œ ์ƒํƒœ๋กœ ์‹œ์ž‘ํ• ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ true์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํ™œ์„ฑํ™”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. Claude Code v2.1.154 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. false

๊ธฐ๋ณธ ํ™œ์„ฑํ™”

plugin.json์—์„œ defaultEnabled: false๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋น„ํ™œ์„ฑํ™”๋œ ์ƒํƒœ๋กœ ์„ค์น˜๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ณตํ•˜์„ธ์š”. ์‚ฌ์šฉ์ž๋Š” claude plugin enable <plugin> ๋˜๋Š” /plugin ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ผญ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ์„œ๋น„์Šค์— ์—ฐ๊ฒฐํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ์ž๊ฐ€ ์˜ตํŠธ์ธํ•ด์•ผ ํ•˜๋Š” ๋น„์šฉ์ด๋‚˜ ๋ฒ”์œ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด๋Š” Claude Code v2.1.154 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „์€ ํ•„๋“œ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์„ค์น˜ ์‹œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

defaultEnabled๋Š” ๋‹ค๋ฅธ ๊ฒƒ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ƒํƒœ๋ฅผ ๊ฒฐ์ •ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ์˜ ํด๋ฐฑ์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€๊ฐ€ ์ด๋ฅผ ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค:

  • ์‚ฌ์šฉ์ž์˜ ์„ค์ •: ๋ชจ๋“  ์„ค์ • ๋ฒ”์œ„์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ enabledPlugins์˜ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค. ์ž‘์„ฑ๋˜๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ ์—…๋ฐ์ดํŠธ ๋ฐ ์žฌ์„ค์น˜ ์ „์ฒด์—์„œ ์œ ์ง€๋˜๋ฏ€๋กœ ๋‚˜์ค‘ ๋ฆด๋ฆฌ์Šค์—์„œ defaultEnabled๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ ๊ธฐ์กด ์‚ฌ์šฉ์ž๋ฅผ ๋’ค์ง‘์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ข…์†์„ฑ ์š”๊ตฌ ์‚ฌํ•ญ: ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ™œ์„ฑํ™”๋œ ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์˜ํ•ด ํ•„์š”ํ•  ๋•Œ Claude Code๋Š” ์„ค์น˜ ๋˜๋Š” ํ™œ์„ฑํ™” ์‹œ true๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ช…์‹œ์  ์„ค์ •์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์ž์ฒด ๊ธฐ๋ณธ๊ฐ’์ด ๋” ์ด์ƒ ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ข…์†์„ฑ์ด ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ํ™œ์„ฑํ™” ๋˜๋Š” ๋น„ํ™œ์„ฑํ™”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋™์ผํ•œ ํ•„๋“œ๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ํ•ญ๋ชฉ์— ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—ฌ๊ธฐ์„œ plugin.json์˜ ๊ฐ’๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ์‚ฌํ•ญ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ•„๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ปดํฌ๋„ŒํŠธ ๊ฒฝ๋กœ ํ•„๋“œ

ํ•„๋“œ ํƒ€์ž… ์„ค๋ช… ์˜ˆ์‹œ
skills string|array <name>/SKILL.md๋ฅผ ํฌํ•จํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ skill ๋””๋ ‰ํ† ๋ฆฌ (๊ธฐ๋ณธ skills/ ์™ธ์— ์ถ”๊ฐ€) "./custom/skills/"
commands string|array ์‚ฌ์šฉ์ž ์ •์˜ ํ‰๋ฉด .md skill ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ (๊ธฐ๋ณธ commands/ ๋Œ€์ฒด) "./custom/cmd.md" ๋˜๋Š” ["./cmd1.md"]
agents string|array ์‚ฌ์šฉ์ž ์ •์˜ agent ํŒŒ์ผ (๊ธฐ๋ณธ agents/ ๋Œ€์ฒด) "./custom/agents/reviewer.md"
hooks string|array|object Hook ๊ตฌ์„ฑ ๊ฒฝ๋กœ ๋˜๋Š” ์ธ๋ผ์ธ ๊ตฌ์„ฑ "./my-extra-hooks.json"
mcpServers string|array|object MCP ๊ตฌ์„ฑ ๊ฒฝ๋กœ ๋˜๋Š” ์ธ๋ผ์ธ ๊ตฌ์„ฑ "./my-extra-mcp-config.json"
outputStyles string|array ์‚ฌ์šฉ์ž ์ •์˜ ์ถœ๋ ฅ ์Šคํƒ€์ผ ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ (๊ธฐ๋ณธ output-styles/ ๋Œ€์ฒด) "./styles/"
lspServers string|array|object Language Server Protocol ์ฝ”๋“œ ์ธํ…”๋ฆฌ์ „์Šค ๊ตฌ์„ฑ (์ •์˜๋กœ ์ด๋™, ์ฐธ์กฐ ์ฐพ๊ธฐ ๋“ฑ) "./.lsp.json"
experimental.themes string|array ์ƒ‰์ƒ ํ…Œ๋งˆ ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ (๊ธฐ๋ณธ themes/ ๋Œ€์ฒด). ํ…Œ๋งˆ ์ฐธ์กฐ "./themes/"
experimental.monitors string|array ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ™œ์„ฑํ™”๋  ๋•Œ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ Monitor ๊ตฌ์„ฑ. Monitors ์ฐธ์กฐ "./monitors.json"
userConfig object ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ™œ์„ฑํ™”๋  ๋•Œ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ”„๋กฌํ”„ํŠธํ•˜๋Š” ์‚ฌ์šฉ์ž ๊ตฌ์„ฑ ๊ฐ€๋Šฅ ๊ฐ’. ์‚ฌ์šฉ์ž ๊ตฌ์„ฑ ์ฐธ์กฐ ์•„๋ž˜ ์ฐธ์กฐ
channels array ๋ฉ”์‹œ์ง€ ์ฃผ์ž…์„ ์œ„ํ•œ ์ฑ„๋„ ์„ ์–ธ (Telegram, Slack, Discord ์Šคํƒ€์ผ). ์ฑ„๋„ ์ฐธ์กฐ ์•„๋ž˜ ์ฐธ์กฐ
dependencies array ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ•„์š”๋กœ ํ•˜๋Š” ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ, ์„ ํƒ์ ์œผ๋กœ semver ๋ฒ„์ „ ์ œ์•ฝ ํฌํ•จ. ํ”Œ๋Ÿฌ๊ทธ์ธ ์ข…์†์„ฑ ๋ฒ„์ „ ์ œ์•ฝ ์ฐธ์กฐ [{ "name": "secrets-vault", "version": "~2.1.0" }]

์‹คํ—˜์  ์ปดํฌ๋„ŒํŠธ

experimental ํ‚ค ์•„๋ž˜์˜ ์ปดํฌ๋„ŒํŠธ์ธ themes ๋ฐ monitors๋Š” ์•ˆ์ •ํ™”๋˜๋Š” ๋™์•ˆ ๋ฆด๋ฆฌ์Šค ๊ฐ„์— ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด๋“ค์„ ์„ ์–ธํ•˜๋Š” ์œ„์น˜๋Š” ๋ณ„๋„์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ž…๋‹ˆ๋‹ค. ์ตœ์ƒ์œ„ ์ˆ˜์ค€์€ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜๊ณ , claude plugin validate๋Š” ๊ฒฝ๊ณ ํ•˜๋ฉฐ, ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” experimental.*์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๊ตฌ์„ฑ

userConfig ํ•„๋“œ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ™œ์„ฑํ™”๋  ๋•Œ Claude Code๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ”„๋กฌํ”„ํŠธํ•˜๋Š” ๊ฐ’์„ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ settings.json์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜๋„๋ก ์š”๊ตฌํ•˜๋Š” ๋Œ€์‹  ์ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

{
  "userConfig": {
    "api_endpoint": {
      "type": "string",
      "title": "API ์—”๋“œํฌ์ธํŠธ",
      "description": "ํŒ€์˜ API ์—”๋“œํฌ์ธํŠธ"
    },
    "api_token": {
      "type": "string",
      "title": "API ํ† ํฐ",
      "description": "API ์ธ์ฆ ํ† ํฐ",
      "sensitive": true
    }
  }
}

ํ‚ค๋Š” ์œ ํšจํ•œ ์‹๋ณ„์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์˜ต์…˜์€ ๋‹ค์Œ ํ•„๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

ํ•„๋“œ ํ•„์ˆ˜ ์„ค๋ช…
type ์˜ˆ string, number, boolean, directory ๋˜๋Š” file ์ค‘ ํ•˜๋‚˜
title ์˜ˆ ๊ตฌ์„ฑ ๋Œ€ํ™”์— ํ‘œ์‹œ๋˜๋Š” ๋ ˆ์ด๋ธ”
description ์˜ˆ ํ•„๋“œ ์•„๋ž˜์— ํ‘œ์‹œ๋˜๋Š” ๋„์›€๋ง ํ…์ŠคํŠธ
sensitive ์•„๋‹ˆ์˜ค true์ธ ๊ฒฝ์šฐ ์ž…๋ ฅ์„ ๋งˆ์Šคํ‚นํ•˜๊ณ  ๊ฐ’์„ settings.json ๋Œ€์‹  ๋ณด์•ˆ ์ €์žฅ์†Œ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
required ์•„๋‹ˆ์˜ค true์ธ ๊ฒฝ์šฐ ํ•„๋“œ๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด ๊ฒ€์ฆ์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
default ์•„๋‹ˆ์˜ค ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ์ œ๊ณตํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’
multiple ์•„๋‹ˆ์˜ค string ํƒ€์ž…์˜ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด ๋ฐฐ์—ด ํ—ˆ์šฉ
min / max ์•„๋‹ˆ์˜ค number ํƒ€์ž…์˜ ๋ฒ”์œ„

๊ฐ ๊ฐ’์€ MCP ๋ฐ LSP ์„œ๋ฒ„ ๊ตฌ์„ฑ, hook ๋ช…๋ น์–ด ๋ฐ monitor ๋ช…๋ น์–ด์—์„œ ${user_config.KEY}๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏผ๊ฐํ•˜์ง€ ์•Š์€ ๊ฐ’์€ skill ๋ฐ agent ์ฝ˜ํ…์ธ ์—์„œ๋„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฐ’์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„œ๋ธŒํ”„๋กœ์„ธ์Šค์— CLAUDE_PLUGIN_OPTION_<KEY> ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๋‚ด๋ณด๋‚ด์ง‘๋‹ˆ๋‹ค.

๋ฏผ๊ฐํ•˜์ง€ ์•Š์€ ๊ฐ’์€ settings.json์˜ pluginConfigs[<plugin-id>].options ์•„๋ž˜์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋ฏผ๊ฐํ•œ ๊ฐ’์€ ์‹œ์Šคํ…œ ํ‚ค์ฒด์ธ (๋˜๋Š” ํ‚ค์ฒด์ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ~/.claude/.credentials.json)์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค์ฒด์ธ ์ €์žฅ์†Œ๋Š” OAuth ํ† ํฐ๊ณผ ๊ณต์œ ๋˜๋ฉฐ ์•ฝ 2 KB์˜ ์ด ์ œํ•œ์ด ์žˆ์œผ๋ฏ€๋กœ ๋ฏผ๊ฐํ•œ ๊ฐ’์„ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜์„ธ์š”.

์ฑ„๋„

channels ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฉ”์‹œ์ง€ ์ฑ„๋„์„ ์„ ์–ธํ•˜์—ฌ ๋Œ€ํ™”์— ์ฝ˜ํ…์ธ ๋ฅผ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ฑ„๋„์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ œ๊ณตํ•˜๋Š” MCP ์„œ๋ฒ„์— ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค.

{
  "channels": [
    {
      "server": "telegram",
      "userConfig": {
        "bot_token": {
          "type": "string",
          "title": "๋ด‡ ํ† ํฐ",
          "description": "Telegram ๋ด‡ ํ† ํฐ",
          "sensitive": true
        },
        "owner_id": {
          "type": "string",
          "title": "์†Œ์œ ์ž ID",
          "description": "Telegram ์‚ฌ์šฉ์ž ID"
        }
      }
    }
  ]
}

server ํ•„๋“œ๋Š” ํ•„์ˆ˜์ด๋ฉฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ mcpServers์˜ ํ‚ค์™€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ์‚ฌํ•ญ์ธ ์ฑ„๋„๋ณ„ userConfig๋Š” ์ตœ์ƒ์œ„ ํ•„๋“œ์™€ ๋™์ผํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ™œ์„ฑํ™”๋  ๋•Œ ๋ด‡ ํ† ํฐ ๋˜๋Š” ์†Œ์œ ์ž ID๋ฅผ ํ”„๋กฌํ”„ํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฝ๋กœ ๋™์ž‘ ๊ทœ์น™

์‚ฌ์šฉ์ž ์ •์˜ ๊ฒฝ๋กœ๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊ธฐ๋ณธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋Œ€์ฒดํ•˜๋Š”์ง€ ํ™•์žฅํ•˜๋Š”์ง€๋Š” ํ•„๋“œ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค:

  • ๊ธฐ๋ณธ๊ฐ’ ๋Œ€์ฒด: commands, agents, outputStyles, experimental.themes, experimental.monitors. ์˜ˆ๋ฅผ ๋“ค์–ด ๋งค๋‹ˆํŽ˜์ŠคํŠธ๊ฐ€ commands๋ฅผ ์ง€์ •ํ•˜๋ฉด ๊ธฐ๋ณธ commands/ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์Šค์บ”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์„ ์œ ์ง€ํ•˜๊ณ  ๋” ๋งŽ์€ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋ช…์‹œ์ ์œผ๋กœ ๋‚˜์—ดํ•˜์„ธ์š”: "commands": ["./commands/", "./extras/"]
  • ๊ธฐ๋ณธ๊ฐ’์— ์ถ”๊ฐ€: skills. ๊ธฐ๋ณธ skills/ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ํ•ญ์ƒ ์Šค์บ”๋˜๋ฉฐ, skills์— ๋‚˜์—ด๋œ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ํ•จ๊ป˜ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.
  • ์ž์ฒด ๋ณ‘ํ•ฉ ๊ทœ์น™: hooks, MCP servers ๋ฐ LSP servers. ๊ฐ ์„น์…˜์—์„œ ์—ฌ๋Ÿฌ ์†Œ์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉ๋˜๋Š”์ง€ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๊ธฐ๋ณธ ํด๋”์™€ ์ผ์น˜ํ•˜๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํ‚ค๊ฐ€ ๋ชจ๋‘ ์žˆ์œผ๋ฉด Claude Code v2.1.140 ์ด์ƒ์€ /doctor, claude plugin list ๋ฐ /plugin ์ƒ์„ธ ๋ณด๊ธฐ์—์„œ ๋ฌด์‹œ๋œ ํด๋”์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์—ฌ์ „ํžˆ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํ‚ค๊ฐ€ ๊ธฐ๋ณธ ํด๋”๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ๋Š” ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (์˜ˆ: "commands": ["./commands/deploy.md"]). ์ด ๊ฒฝ์šฐ ํด๋”๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฒฝ๋กœ ํ•„๋“œ์˜ ๊ฒฝ์šฐ:

  • ๋ชจ๋“  ๊ฒฝ๋กœ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ์— ์ƒ๋Œ€์ ์ด์–ด์•ผ ํ•˜๋ฉฐ ./๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ •์˜ ๊ฒฝ๋กœ์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋™์ผํ•œ ๋ช…๋ช… ๋ฐ ๋„ค์ž„์ŠคํŽ˜์ด์‹ฑ ๊ทœ์น™์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ๋ฅผ ๋ฐฐ์—ด๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • skill ๊ฒฝ๋กœ๊ฐ€ SKILL.md๋ฅผ ์ง์ ‘ ํฌํ•จํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ (์˜ˆ: ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” "skills": ["./"]), frontmatter์˜ name ํ•„๋“œ๊ฐ€ skill์˜ ํ˜ธ์ถœ ์ด๋ฆ„์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„ค์น˜ ๋””๋ ‰ํ† ๋ฆฌ์™€ ๊ด€๊ณ„์—†์ด ์•ˆ์ •์ ์ธ ์ด๋ฆ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. name์ด frontmatter์— ์„ค์ •๋˜์ง€ ์•Š์œผ๋ฉด ๋””๋ ‰ํ† ๋ฆฌ basename์ด ํด๋ฐฑ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋ฃจํŠธ์— SKILL.md๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , skills/ ์„œ๋ธŒ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์—†์œผ๋ฉฐ, skills ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํ•„๋“œ๊ฐ€ ์—†์œผ๋ฉด Claude Code v2.1.142 ์ด์ƒ์—์„œ ์ž๋™์œผ๋กœ ๋‹จ์ผ skill ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ ˆ์ด์•„์›ƒ์— ๋Œ€ํ•ด plugin.json์—์„œ "skills": ["./"]๋ฅผ ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. skill์˜ ํ˜ธ์ถœ ์ด๋ฆ„์€ ์œ„์™€ ๋™์ผํ•œ ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค: frontmatter name ํ•„๋“œ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ basename์„ ํด๋ฐฑ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ๋กœ ์˜ˆ์‹œ:

{
  "commands": [
    "./specialized/deploy.md",
    "./utilities/batch-process.md"
  ],
  "agents": [
    "./custom-agents/reviewer.md",
    "./custom-agents/tester.md"
  ]
}

ํ™˜๊ฒฝ ๋ณ€์ˆ˜

Claude Code๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฒฝ๋กœ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•œ ์„ธ ๊ฐ€์ง€ ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘ skill ์ฝ˜ํ…์ธ , agent ์ฝ˜ํ…์ธ , hook ๋ช…๋ น์–ด, monitor ๋ช…๋ น์–ด ๋ฐ MCP ๋˜๋Š” LSP ์„œ๋ฒ„ ๊ตฌ์„ฑ์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ชจ๋“  ๊ณณ์—์„œ ์ธ๋ผ์ธ์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘ hook ํ”„๋กœ์„ธ์Šค ๋ฐ MCP ๋˜๋Š” LSP ์„œ๋ฒ„ ์„œ๋ธŒํ”„๋กœ์„ธ์Šค์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๋‚ด๋ณด๋‚ด์ง‘๋‹ˆ๋‹ค.

${CLAUDE_PLUGIN_ROOT}: ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ•จ๊ป˜ ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ, ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜์„ธ์š”. hook ๋ช…๋ น์–ด์—์„œ exec form์„ args์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๋กœ๊ฐ€ ๋”ฐ์˜ดํ‘œ ์—†์ด ํ•˜๋‚˜์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋„๋ก ํ•˜์„ธ์š”. shell-form hook ๋ฐ monitor ๋ช…๋ น์–ด์—์„œ "${CLAUDE_PLUGIN_ROOT}"์™€ ๊ฐ™์ด ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์„ธ์š”. ์ด ๊ฒฝ๋กœ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์—…๋ฐ์ดํŠธ๋  ๋•Œ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „์˜ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์—…๋ฐ์ดํŠธ ํ›„ ์•ฝ 7์ผ ๋™์•ˆ ๋””์Šคํฌ์— ๋‚จ์•„ ์žˆ์ง€๋งŒ ์ด๋ฅผ ์ž„์‹œ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ  ์—ฌ๊ธฐ์— ์ƒํƒœ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ๋งˆ์„ธ์š”.

ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์„ธ์…˜ ์ค‘์— ์—…๋ฐ์ดํŠธ๋  ๋•Œ hook ๋ช…๋ น์–ด, monitors, MCP ์„œ๋ฒ„ ๋ฐ LSP ์„œ๋ฒ„๋Š” ์ด์ „ ๋ฒ„์ „์˜ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. /reload-plugins๋ฅผ ์‹คํ–‰ํ•˜์—ฌ hook, MCP ์„œ๋ฒ„ ๋ฐ LSP ์„œ๋ฒ„๋ฅผ ์ƒˆ ๊ฒฝ๋กœ๋กœ ์ „ํ™˜ํ•˜์„ธ์š”. monitors๋Š” ์„ธ์…˜ ์žฌ์‹œ์ž‘์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

${CLAUDE_PLUGIN_DATA}: ์—…๋ฐ์ดํŠธ ํ›„์—๋„ ์œ ์ง€๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์œ„ํ•œ ์˜๊ตฌ ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. node_modules ๋˜๋Š” Python ๊ฐ€์ƒ ํ™˜๊ฒฝ๊ณผ ๊ฐ™์€ ์„ค์น˜๋œ ์ข…์†์„ฑ, ์ƒ์„ฑ๋œ ์ฝ”๋“œ, ์บ์‹œ ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „ ์ „์ฒด์—์„œ ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋Š” ๊ธฐํƒ€ ํŒŒ์ผ์— ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด ๋ณ€์ˆ˜๊ฐ€ ์ฒ˜์Œ ์ฐธ์กฐ๋  ๋•Œ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

${CLAUDE_PROJECT_DIR}: ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” hook์ด CLAUDE_PROJECT_DIR ๋ณ€์ˆ˜์—์„œ ๋ฐ›๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋กœ์ปฌ ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜์„ธ์š”. ๊ณต๋ฐฑ์ด ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์„ธ์š” (์˜ˆ: "${CLAUDE_PROJECT_DIR}/scripts/server.sh"). MCP ์„œ๋ฒ„๋Š” MCP roots/list ์š”์ฒญ์„ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ์ด๋Š” Claude Code๊ฐ€ ์‹œ์ž‘๋œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

{
  "hooks": {
    "PostToolUse": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/process.sh"
          }
        ]
      }
    ]
  }
}

์˜๊ตฌ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ

${CLAUDE_PLUGIN_DATA} ๋””๋ ‰ํ† ๋ฆฌ๋Š” ~/.claude/plugins/data/{id}/๋กœ ํ™•์ธ๋˜๋ฉฐ, ์—ฌ๊ธฐ์„œ {id}๋Š” a-z, A-Z, 0-9, _ ๋ฐ - ์™ธ๋ถ€์˜ ๋ฌธ์ž๊ฐ€ -๋กœ ๋Œ€์ฒด๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. formatter@my-marketplace๋กœ ์„ค์น˜๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊ฒฝ์šฐ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ~/.claude/plugins/data/formatter-my-marketplace/์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์€ ์–ธ์–ด ์ข…์†์„ฑ์„ ํ•œ ๋ฒˆ ์„ค์น˜ํ•˜๊ณ  ์„ธ์…˜ ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ์—…๋ฐ์ดํŠธ ์ „์ฒด์—์„œ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋‹จ์ผ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „๋ณด๋‹ค ์˜ค๋ž˜ ์ง€์†๋˜๋ฏ€๋กœ ๋””๋ ‰ํ† ๋ฆฌ ์กด์žฌ ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•˜๋ฉด ์—…๋ฐ์ดํŠธ๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ข…์†์„ฑ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ถŒ์žฅ ํŒจํ„ด์€ ๋ฒˆ๋“ค๋œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ณต์‚ฌ๋ณธ๊ณผ ๋น„๊ตํ•˜๊ณ  ๋‹ค๋ฅผ ๋•Œ ๋‹ค์‹œ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ด SessionStart hook์€ ์ฒซ ์‹คํ–‰ ์‹œ node_modules๋ฅผ ์„ค์น˜ํ•˜๊ณ  ํ”Œ๋Ÿฌ๊ทธ์ธ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋œ package.json์„ ํฌํ•จํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค์‹œ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "diff -q \"${CLAUDE_PLUGIN_ROOT}/package.json\" \"${CLAUDE_PLUGIN_DATA}/package.json\" >/dev/null 2>&1 || (cd \"${CLAUDE_PLUGIN_DATA}\" && cp \"${CLAUDE_PLUGIN_ROOT}/package.json\" . && npm install) || rm -f \"${CLAUDE_PLUGIN_DATA}/package.json\""
          }
        ]
      }
    ]
  }
}

diff๋Š” ์ €์žฅ๋œ ๋ณต์‚ฌ๋ณธ์ด ๋ˆ„๋ฝ๋˜๊ฑฐ๋‚˜ ๋ฒˆ๋“ค๋œ ๋ณต์‚ฌ๋ณธ๊ณผ ๋‹ค๋ฅผ ๋•Œ 0์ด ์•„๋‹Œ ๊ฐ’์œผ๋กœ ์ข…๋ฃŒ๋˜์–ด ์ฒซ ์‹คํ–‰๊ณผ ์ข…์†์„ฑ ๋ณ€๊ฒฝ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ชจ๋‘ ๋‹ค๋ฃน๋‹ˆ๋‹ค. npm install์ด ์‹คํŒจํ•˜๋ฉด ํ›„ํ–‰ rm์€ ๋ณต์‚ฌ๋œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๋ฏ€๋กœ ๋‹ค์Œ ์„ธ์…˜์ด ๋‹ค์‹œ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

${CLAUDE_PLUGIN_ROOT}์— ๋ฒˆ๋“ค๋œ ์Šคํฌ๋ฆฝํŠธ๋Š” ์ง€์†๋œ node_modules์— ๋Œ€ํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

{
  "mcpServers": {
    "routines": {
      "command": "node",
      "args": ["${CLAUDE_PLUGIN_ROOT}/server.js"],
      "env": {
        "NODE_PATH": "${CLAUDE_PLUGIN_DATA}/node_modules"
      }
    }
  }
}

๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•œ ๋งˆ์ง€๋ง‰ ๋ฒ”์œ„์—์„œ ์ œ๊ฑฐํ•  ๋•Œ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. /plugin ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋””๋ ‰ํ† ๋ฆฌ ํฌ๊ธฐ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‚ญ์ œ ์ „์— ํ”„๋กฌํ”„ํŠธํ•ฉ๋‹ˆ๋‹ค. CLI๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. --keep-data๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์œ ์ง€ํ•˜์„ธ์š”.


ํ”Œ๋Ÿฌ๊ทธ์ธ ์บ์‹ฑ ๋ฐ ํŒŒ์ผ ํ•ด์„

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค:

  • claude --plugin-dir ๋˜๋Š” claude --plugin-url์„ ํ†ตํ•ด, ์„ธ์…˜ ๊ธฐ๊ฐ„ ๋™์•ˆ.
  • ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋ฅผ ํ†ตํ•ด, ํ–ฅํ›„ ์„ธ์…˜์„ ์œ„ํ•ด ์„ค์น˜๋จ.

๋ณด์•ˆ ๋ฐ ๊ฒ€์ฆ ๋ชฉ์ ์œผ๋กœ Claude Code๋Š” ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ์ž๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์‚ฌ์šฉ์ž์˜ ๋กœ์ปฌ ํ”Œ๋Ÿฌ๊ทธ์ธ ์บ์‹œ (~/.claude/plugins/cache)์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์ด ๋™์ž‘์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ์„ค์น˜๋œ ๋ฒ„์ „์€ ์บ์‹œ์˜ ๋ณ„๋„ ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋ฉด ์ด์ „ ๋ฒ„์ „ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๊ณ ์•„๋กœ ํ‘œ์‹œ๋˜๊ณ  7์ผ ํ›„ ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์œ ์˜ˆ ๊ธฐ๊ฐ„์„ ํ†ตํ•ด ์ด๋ฏธ ์ด์ „ ๋ฒ„์ „์„ ๋กœ๋“œํ•œ ๋™์‹œ Claude Code ์„ธ์…˜์ด ์˜ค๋ฅ˜ ์—†์ด ๊ณ„์† ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Claude์˜ Glob ๋ฐ Grep ๋„๊ตฌ๋Š” ๊ฒ€์ƒ‰ ์ค‘์— ๊ณ ์•„ ๋ฒ„์ „ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ฏ€๋กœ ํŒŒ์ผ ๊ฒฐ๊ณผ์—๋Š” ์˜ค๋ž˜๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒฝ๋กœ ์ˆœํšŒ ์ œํ•œ

์„ค์น˜๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ ์™ธ๋ถ€์˜ ํŒŒ์ผ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ ์™ธ๋ถ€๋ฅผ ์ˆœํšŒํ•˜๋Š” ๊ฒฝ๋กœ(์˜ˆ: ../shared-utils)๋Š” ์„ค์น˜ ํ›„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์™ธ๋ถ€ ํŒŒ์ผ์ด ์บ์‹œ์— ๋ณต์‚ฌ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋™์ผํ•œ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„๊ณผ ํŒŒ์ผ์„ ๊ณต์œ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์— ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์บ์‹œ์— ๋ณต์‚ฌ๋  ๋•Œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ์‹์€ ํ•ด๋‹น ๋Œ€์ƒ์ด ์–ด๋””๋กœ ํ•ด์„๋˜๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค:

  • ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž์ฒด ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด: ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋Š” ์บ์‹œ์— ์ƒ๋Œ€ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋กœ ๋ณด์กด๋˜๋ฏ€๋กœ ๋Ÿฐํƒ€์ž„์— ๋ณต์‚ฌ๋œ ๋Œ€์ƒ์œผ๋กœ ๊ณ„์† ํ•ด์„๋ฉ๋‹ˆ๋‹ค.
  • ๋™์ผํ•œ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ๋‚ด์˜ ๋‹ค๋ฅธ ๊ณณ: ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋Š” ์—ญ์ฐธ์กฐ๋ฉ๋‹ˆ๋‹ค. ๋Œ€์ƒ์˜ ์ฝ˜ํ…์ธ ๊ฐ€ ์บ์‹œ์— ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฉ”ํƒ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ skills/ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์˜ ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ •์˜๋œ skills์— ๋งํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ์™ธ๋ถ€: ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋Š” ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ์ด๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์‹œ์Šคํ…œ ๊ฒฝ๋กœ์™€ ๊ฐ™์€ ์ž„์˜์˜ ํ˜ธ์ŠคํŠธ ํŒŒ์ผ์„ ์บ์‹œ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

--plugin-dir์œผ๋กœ ์„ค์น˜๋˜๊ฑฐ๋‚˜ ๋กœ์ปฌ ๊ฒฝ๋กœ์—์„œ ์„ค์น˜๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊ฒฝ์šฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž์ฒด ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์—์„œ ํ•ด์„๋˜๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋งŒ ๋ณด์กด๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์€ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ช…๋ น์–ด๋Š” ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‚ด๋ถ€์—์„œ ํ˜•์ œ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ •์˜๋œ ๊ณต์œ  skill๋กœ์˜ ๋งํฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Windows์—์„œ๋Š” ๊ด€๋ฆฌ์ž ๊ถŒํ•œ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ์—์„œ mklink /D๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜์„ธ์š”:

ln -s ../../shared-plugin/skills/foo ./skills/foo

์ด๋Š” ์บ์‹ฑ ์‹œ์Šคํ…œ์˜ ๋ณด์•ˆ ์ด์ ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


ํ”Œ๋Ÿฌ๊ทธ์ธ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

ํ‘œ์ค€ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ ˆ์ด์•„์›ƒ

์™„์ „ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋‹ค์Œ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค:

enterprise-plugin/
โ”œโ”€โ”€ .claude-plugin/           # ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ (์„ ํƒ์‚ฌํ•ญ)
โ”‚   โ””โ”€โ”€ plugin.json             # ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งค๋‹ˆํŽ˜์ŠคํŠธ
โ”œโ”€โ”€ skills/                   # Skills
โ”‚   โ”œโ”€โ”€ code-reviewer/
โ”‚   โ”‚   โ””โ”€โ”€ SKILL.md
โ”‚   โ””โ”€โ”€ pdf-processor/
โ”‚       โ”œโ”€โ”€ SKILL.md
โ”‚       โ””โ”€โ”€ scripts/
โ”œโ”€โ”€ commands/                 # ํ‰๋ฉด .md ํŒŒ์ผ๋กœ์„œ์˜ Skills
โ”‚   โ”œโ”€โ”€ status.md
โ”‚   โ””โ”€โ”€ logs.md
โ”œโ”€โ”€ agents/                   # Subagent ์ •์˜
โ”‚   โ”œโ”€โ”€ security-reviewer.md
โ”‚   โ”œโ”€โ”€ performance-tester.md
โ”‚   โ””โ”€โ”€ compliance-checker.md
โ”œโ”€โ”€ output-styles/            # ์ถœ๋ ฅ ์Šคํƒ€์ผ ์ •์˜
โ”‚   โ””โ”€โ”€ terse.md
โ”œโ”€โ”€ themes/                   # ์ƒ‰์ƒ ํ…Œ๋งˆ ์ •์˜
โ”‚   โ””โ”€โ”€ dracula.json
โ”œโ”€โ”€ monitors/                 # ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ชจ๋‹ˆํ„ฐ ๊ตฌ์„ฑ
โ”‚   โ””โ”€โ”€ monitors.json
โ”œโ”€โ”€ hooks/                    # Hook ๊ตฌ์„ฑ
โ”‚   โ”œโ”€โ”€ hooks.json           # ์ฃผ hook ๊ตฌ์„ฑ
โ”‚   โ””โ”€โ”€ security-hooks.json  # ์ถ”๊ฐ€ hooks
โ”œโ”€โ”€ bin/                      # PATH์— ์ถ”๊ฐ€๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹คํ–‰ ํŒŒ์ผ
โ”‚   โ””โ”€โ”€ my-tool               # Bash tool์—์„œ bare ๋ช…๋ น์–ด๋กœ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
โ”œโ”€โ”€ settings.json            # ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊ธฐ๋ณธ ์„ค์ •
โ”œโ”€โ”€ .mcp.json                # MCP ์„œ๋ฒ„ ์ •์˜
โ”œโ”€โ”€ .lsp.json                # LSP ์„œ๋ฒ„ ๊ตฌ์„ฑ
โ”œโ”€โ”€ scripts/                 # Hook ๋ฐ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์Šคํฌ๋ฆฝํŠธ
โ”‚   โ”œโ”€โ”€ security-scan.sh
โ”‚   โ”œโ”€โ”€ format-code.py
โ”‚   โ””โ”€โ”€ deploy.js
โ”œโ”€โ”€ LICENSE                  # ๋ผ์ด์„ ์Šค ํŒŒ์ผ
โ””โ”€โ”€ CHANGELOG.md             # ๋ฒ„์ „ ๊ธฐ๋ก

CLAUDE.md ํŒŒ์ผ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ์— ์žˆ์–ด๋„ ํ”„๋กœ์ ํŠธ ์ปจํ…์ŠคํŠธ๋กœ ๋กœ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์€ CLAUDE.md๊ฐ€ ์•„๋‹Œ skills, agents, hooks๋ฅผ ํ†ตํ•ด ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Claude์˜ ์ปจํ…์ŠคํŠธ์— ๋กœ๋“œ๋˜๋Š” ์ง€์นจ์„ ์ œ๊ณตํ•˜๋ ค๋ฉด skill์— ๋ฐฐ์น˜ํ•˜์‹ญ์‹œ์˜ค.

ํŒŒ์ผ ์œ„์น˜ ์ฐธ์กฐ

์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ณธ ์œ„์น˜ ๋ชฉ์ 
๋งค๋‹ˆํŽ˜์ŠคํŠธ .claude-plugin/plugin.json ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ ๊ตฌ์„ฑ (์„ ํƒ์‚ฌํ•ญ)
Skills skills/ <name>/SKILL.md ๊ตฌ์กฐ์˜ Skills
Commands commands/ ํ‰๋ฉด ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ๋กœ์„œ์˜ Skills. ์ƒˆ ํ”Œ๋Ÿฌ๊ทธ์ธ์—๋Š” skills/ ์‚ฌ์šฉ
Agents agents/ Subagent ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ
Output styles output-styles/ ์ถœ๋ ฅ ์Šคํƒ€์ผ ์ •์˜
Themes themes/ ์ƒ‰์ƒ ํ…Œ๋งˆ ์ •์˜
Hooks hooks/hooks.json Hook ๊ตฌ์„ฑ
MCP servers .mcp.json MCP ์„œ๋ฒ„ ์ •์˜
LSP servers .lsp.json ์–ธ์–ด ์„œ๋ฒ„ ๊ตฌ์„ฑ
Monitors monitors/monitors.json ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ชจ๋‹ˆํ„ฐ ๊ตฌ์„ฑ
Executables bin/ Bash tool์˜ PATH์— ์ถ”๊ฐ€๋œ ์‹คํ–‰ ํŒŒ์ผ. ์—ฌ๊ธฐ์˜ ํŒŒ์ผ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ™œ์„ฑํ™”๋œ ๋™์•ˆ ๋ชจ๋“  Bash tool ํ˜ธ์ถœ์—์„œ bare ๋ช…๋ น์–ด๋กœ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
Settings settings.json ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ™œ์„ฑํ™”๋  ๋•Œ ์ ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ๊ตฌ์„ฑ. ํ˜„์žฌ agent ๋ฐ subagentStatusLine ํ‚ค๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค

CLI ๋ช…๋ น์–ด ์ฐธ์กฐ

Claude Code๋Š” ์Šคํฌ๋ฆฝํŒ… ๋ฐ ์ž๋™ํ™”์— ์œ ์šฉํ•œ ๋น„๋Œ€ํ™”ํ˜• ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ CLI ๋ช…๋ น์–ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

plugin init

~/.claude/skills/<name>/์—์„œ ์ƒˆ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์Šค์บํด๋“œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ Claude Code ์„ธ์…˜์—์„œ <name>@skills-dir์œผ๋กœ ์ž๋™์œผ๋กœ ๋กœ๋“œ๋˜๊ณ  ์„ค์น˜ ๋‹จ๊ณ„ ์—†์ด /plugin ๋ฐ claude plugin list์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

Skills-directory ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ๋ฒ”์œ„ ๋ฐ ์‹ ๋ขฐ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

claude plugin init <name> [options]

์ธ์ˆ˜:

  • <name>: ํ”Œ๋Ÿฌ๊ทธ์ธ ์ด๋ฆ„. skill ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฐ ~/.claude/skills/ ์•„๋ž˜์˜ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์ด ๋˜๋ฏ€๋กœ ๊ณต๋ฐฑ์ด๋‚˜ ๊ฒฝ๋กœ ๊ตฌ๋ถ„์ž๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
--description <text> ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์„ค๋ช…
--author <name> ์ž‘์„ฑ์ž ์ด๋ฆ„ git config user.name
--author-email <email> ์ž‘์„ฑ์ž ์ด๋ฉ”์ผ git config user.email
--with <components...> ์ปดํฌ๋„ŒํŠธ ํด๋”๋„ ์Šค์บํด๋“œํ•ฉ๋‹ˆ๋‹ค. ์œ ํšจํ•œ ๊ฐ’: skills, agents, hooks, mcp, lsp, output-style, channel
-f, --force ๋Œ€์ƒ์˜ ๊ธฐ์กด .claude-plugin/ ๋ฎ์–ด์“ฐ๊ธฐ
-h, --help ๋ช…๋ น์–ด ๋„์›€๋ง ํ‘œ์‹œ

๋ณ„์นญ: new

๊ฐ --with ๊ฐ’์€ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ ์Šคํƒ€ํ„ฐ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํŽธ์ง‘ํ•  ์ค€๋น„๊ฐ€ ๋ฉ๋‹ˆ๋‹ค:

์ปดํฌ๋„ŒํŠธ ์Šค์บํด๋“œํ•˜๋Š” ๊ฒƒ
skills ๊ธฐ๋ณธ skill๊ณผ ํ•จ๊ป˜ ์ถ”๊ฐ€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค <name>:example skill
agents agents/ subagent ์ •์˜
hooks ์ƒ˜ํ”Œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์žˆ๋Š” hooks/hooks.json
mcp HTTP ๋ฐ stdio ์„œ๋ฒ„ ์˜ˆ์‹œ๊ฐ€ ์žˆ๋Š” .mcp.json
lsp ์–ธ์–ด ์„œ๋ฒ„ ์˜ˆ์‹œ๊ฐ€ ์žˆ๋Š” .lsp.json
output-style ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ™œ์„ฑํ™”๋œ ๋™์•ˆ ์ž๋™์œผ๋กœ ์ ์šฉ๋˜๋Š” output-styles/<name>.md
channel MCP ๊ธฐ๋ฐ˜ channel: stdio ์„œ๋ฒ„ (server.ts), ํ•ด๋‹น .mcp.json ๋ฐ package.json

์Šค์บํด๋“œ๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๊ฐ€ ์•„๋‹Œ @skills-dir ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๋Š” ๊ด€๋ฆฌ๋˜๋Š” ์„ค์ •์—์„œ strictKnownMarketplaces๋กœ ์ด ์†Œ์Šค๋ฅผ ์ฐจ๋‹จํ•˜๊ฑฐ๋‚˜ blockedMarketplaces์— {"source": "skills-dir"}์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐจ๋‹จ๋˜๋ฉด plugin init์€ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

# ์ตœ์†Œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์Šค์บํด๋“œ
claude plugin init my-helper

# skill ๋ฐ hook ํด๋”๋กœ ์Šค์บํด๋“œ
claude plugin init my-helper --with skills hooks

# ๊ธฐ์กด ์Šค์บํด๋“œ ๋ฎ์–ด์“ฐ๊ธฐ
claude plugin init my-helper --force

plugin install

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

claude plugin install <plugin> [options]

์ธ์ˆ˜:

  • <plugin>: ํ”Œ๋Ÿฌ๊ทธ์ธ ์ด๋ฆ„ ๋˜๋Š” ํŠน์ • ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์˜ ๊ฒฝ์šฐ plugin-name@marketplace-name

์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
-s, --scope <scope> ์„ค์น˜ ๋ฒ”์œ„: user, project ๋˜๋Š” local user
-h, --help ๋ช…๋ น์–ด ๋„์›€๋ง ํ‘œ์‹œ

๋ฒ”์œ„๋Š” ์„ค์น˜๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ถ”๊ฐ€๋˜๋Š” ์„ค์ • ํŒŒ์ผ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด --scope project๋Š” .claude/settings.json์˜ enabledPlugins์— ์“ฐ๋ฏ€๋กœ ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

# ์‚ฌ์šฉ์ž ๋ฒ”์œ„์— ์„ค์น˜ (๊ธฐ๋ณธ๊ฐ’)
claude plugin install formatter@my-marketplace

# ํ”„๋กœ์ ํŠธ ๋ฒ”์œ„์— ์„ค์น˜ (ํŒ€๊ณผ ๊ณต์œ )
claude plugin install formatter@my-marketplace --scope project

# ๋กœ์ปฌ ๋ฒ”์œ„์— ์„ค์น˜ (gitignored)
claude plugin install formatter@my-marketplace --scope local

plugin uninstall

์„ค์น˜๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

claude plugin uninstall <plugin> [options]

์ธ์ˆ˜:

  • <plugin>: ํ”Œ๋Ÿฌ๊ทธ์ธ ์ด๋ฆ„ ๋˜๋Š” plugin-name@marketplace-name

์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
-s, --scope <scope> ๋ฒ”์œ„์—์„œ ์ œ๊ฑฐ: user, project ๋˜๋Š” local user
--keep-data ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์˜๊ตฌ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ ์œ ์ง€
--prune ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ์ž๋™ ์„ค์น˜๋œ ์ข…์†์„ฑ๋„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. plugin prune ์ฐธ์กฐ
-y, --yes --prune ํ™•์ธ ํ”„๋กฌํ”„ํŠธ ๊ฑด๋„ˆ๋›ฐ๊ธฐ. stdin์ด TTY๊ฐ€ ์•„๋‹ ๋•Œ ํ•„์ˆ˜
-h, --help ๋ช…๋ น์–ด ๋„์›€๋ง ํ‘œ์‹œ

๋ณ„์นญ: remove, rm

๊ธฐ๋ณธ์ ์œผ๋กœ ๋งˆ์ง€๋ง‰ ๋‚จ์€ ๋ฒ”์œ„์—์„œ ์ œ๊ฑฐํ•˜๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ${CLAUDE_PLUGIN_DATA} ๋””๋ ‰ํ† ๋ฆฌ๋„ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „ ํ…Œ์ŠคํŠธ ํ›„ ์žฌ์„ค์น˜ํ•  ๋•Œ์™€ ๊ฐ™์ด ์œ ์ง€ํ•˜๋ ค๋ฉด --keep-data๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

plugin prune

๋” ์ด์ƒ ์„ค์น˜๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ์ž๋™ ์„ค์น˜๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. Claude Code๊ฐ€ ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ dependencies ํ•„๋“œ๋ฅผ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์ ธ์˜จ ์ข…์†์„ฑ์€ ์ œ๊ฑฐ๋˜๋ฉฐ, ์ง์ ‘ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ ˆ๋Œ€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

claude plugin prune [options]

์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
-s, --scope <scope> ๋ฒ”์œ„์—์„œ ์ •๋ฆฌ: user, project ๋˜๋Š” local user
--dry-run ์ œ๊ฑฐ๋  ํ•ญ๋ชฉ์„ ๋‚˜์—ดํ•˜๋˜ ์‹ค์ œ๋กœ ์ œ๊ฑฐํ•˜์ง€ ์•Š์Œ
-y, --yes ํ™•์ธ ํ”„๋กฌํ”„ํŠธ ๊ฑด๋„ˆ๋›ฐ๊ธฐ. stdin์ด TTY๊ฐ€ ์•„๋‹ ๋•Œ ํ•„์ˆ˜
-h, --help ๋ช…๋ น์–ด ๋„์›€๋ง ํ‘œ์‹œ

๋ณ„์นญ: autoremove

๋ช…๋ น์–ด๋Š” ๊ณ ์•„ ์ข…์†์„ฑ์„ ๋‚˜์—ดํ•˜๊ณ  ์ œ๊ฑฐํ•˜๊ธฐ ์ „์— ํ™•์ธ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ฑฐํ•˜๊ณ  ํ•œ ๋‹จ๊ณ„์—์„œ ์ข…์†์„ฑ์„ ์ •๋ฆฌํ•˜๋ ค๋ฉด claude plugin uninstall <plugin> --prune์„ ์‹คํ–‰ํ•˜์„ธ์š”.

plugin enable

๋น„ํ™œ์„ฑํ™”๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ข…์†์„ฑ์„ ์„ ์–ธํ•˜๋ฉด Claude Code๋Š” ๋™์ผํ•œ ๋ฒ”์œ„์—์„œ ์ด๋“ค์„ ์ „์ด์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•˜๋ฉฐ, ์ข…์†์„ฑ์ด ์„ค์น˜๋˜์ง€ ์•Š์œผ๋ฉด ๋ช…๋ น์–ด๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

claude plugin enable <plugin> [options]

์ธ์ˆ˜:

  • <plugin>: ํ”Œ๋Ÿฌ๊ทธ์ธ ์ด๋ฆ„ ๋˜๋Š” plugin-name@marketplace-name

์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
-s, --scope <scope> ํ™œ์„ฑํ™”ํ•  ๋ฒ”์œ„: user, project ๋˜๋Š” local user
-h, --help ๋ช…๋ น์–ด ๋„์›€๋ง ํ‘œ์‹œ

plugin disable

ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ™œ์„ฑํ™”๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋Œ€์ƒ์— ์ข…์†๋˜์–ด ์žˆ์œผ๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์—๋Š” ๋จผ์ € ๋ชจ๋“  ์ข…์† ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ์—ฐ์‡„ ๋ช…๋ น์–ด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

claude plugin disable <plugin> [options]

์ธ์ˆ˜:

  • <plugin>: ํ”Œ๋Ÿฌ๊ทธ์ธ ์ด๋ฆ„ ๋˜๋Š” plugin-name@marketplace-name

์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
-s, --scope <scope> ๋น„ํ™œ์„ฑํ™”ํ•  ๋ฒ”์œ„: user, project ๋˜๋Š” local user
-h, --help ๋ช…๋ น์–ด ๋„์›€๋ง ํ‘œ์‹œ

plugin update

ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

claude plugin update <plugin> [options]

์ธ์ˆ˜:

  • <plugin>: ํ”Œ๋Ÿฌ๊ทธ์ธ ์ด๋ฆ„ ๋˜๋Š” plugin-name@marketplace-name

์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
-s, --scope <scope> ์—…๋ฐ์ดํŠธํ•  ๋ฒ”์œ„: user, project, local ๋˜๋Š” managed user
-h, --help ๋ช…๋ น์–ด ๋„์›€๋ง ํ‘œ์‹œ

plugin list

์„ค์น˜๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ฒ„์ „, ์†Œ์Šค ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ๋ฐ ํ™œ์„ฑํ™” ์ƒํƒœ์™€ ํ•จ๊ป˜ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

claude plugin list [options]

์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
--json JSON์œผ๋กœ ์ถœ๋ ฅ
--available ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ํฌํ•จ. --json ํ•„์š”
-h, --help ๋ช…๋ น์–ด ๋„์›€๋ง ํ‘œ์‹œ

plugin details

ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ปดํฌ๋„ŒํŠธ ์ธ๋ฒคํ† ๋ฆฌ ๋ฐ ์˜ˆ์ƒ ํ† ํฐ ๋น„์šฉ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ถœ๋ ฅ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๊ธฐ์—ฌํ•˜๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ Skills, Agents, Hooks, MCP ์„œ๋ฒ„ ๋ฐ LSP ์„œ๋ฒ„๋กœ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๋‚˜์—ดํ•˜๋ฉฐ, ๊ฐ ์„ธ์…˜์— ์ถ”๊ฐ€๋˜๋Š” ํ† ํฐ ์ˆ˜์˜ ์ถ”์ •์น˜๋ฅผ ํ•จ๊ป˜ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. Skills ๊ทธ๋ฃน์—๋Š” skills/ ๋ฐ commands/ ํ•ญ๋ชฉ์ด ๋ชจ๋‘ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

claude plugin details <name>

์ธ์ˆ˜:

  • <name>: ํ”Œ๋Ÿฌ๊ทธ์ธ ์ด๋ฆ„ ๋˜๋Š” plugin-name@marketplace-name

์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
-h, --help ๋ช…๋ น์–ด ๋„์›€๋ง ํ‘œ์‹œ

์ถœ๋ ฅ์€ ๊ฐ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด ๋‘ ๊ฐ€์ง€ ๋น„์šฉ ์ˆ˜์น˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค:

  • Always-on: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š”์ง€ ์—ฌ๋ถ€์™€ ๊ด€๊ณ„์—†์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋ชฉ๋ก ํ…์ŠคํŠธ(์˜ˆ: ์Šคํ‚ฌ ์„ค๋ช…, ์—์ด์ „ํŠธ ์„ค๋ช…, ๋ช…๋ น์–ด ์ด๋ฆ„)์— ์˜ํ•ด ๋ชจ๋“  ์„ธ์…˜์— ์ถ”๊ฐ€๋˜๋Š” ํ† ํฐ์ž…๋‹ˆ๋‹ค.
  • On-invoke: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ๋น„์šฉ์ด ๋“œ๋Š” ํ† ํฐ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์„ธ์…˜์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ผ๋ถ€๋งŒ ํ˜ธ์ถœ๋˜๋ฏ€๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ „์ฒด๊ฐ€ ์•„๋‹Œ ์ปดํฌ๋„ŒํŠธ๋ณ„๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์‹œ๋Š” ๋‘ ๊ฐœ์˜ ์Šคํ‚ฌ์ด ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ถœ๋ ฅ ๋ชจ์Šต์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค:

dependency-guard 1.2.0
  Dependency analysis for Claude Code sessions
  Source: dependency-guard@example-marketplace

Component inventory
  Skills (2)  scan-dependencies, review-changes
  Agents (0)
  Hooks (1)  (harness-only โ€” no model context cost)
  MCP servers (0)
  LSP servers (0)

Projected token cost
  Always-on:   ~180 tok   added to every session

Per-component (rounded)
  component            always-on  on-invoke
  scan-dependencies        ~100      ~2400
  review-changes            ~80      ~1800

  On-invoke cost is paid each time a skill or agent fires.
  Token counts are estimates and may differ from actual usage.

Always-on ํ•ฉ๊ณ„๋Š” ํ™œ์„ฑ ๋ชจ๋ธ์— ๋Œ€ํ•œ count_tokens API๋ฅผ ํ†ตํ•ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋ณ„ ์ˆ˜์น˜๋Š” ํ•ด๋‹น ํ•ฉ๊ณ„์—์„œ ๋น„๋ก€์ ์œผ๋กœ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค. API์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์œผ๋ฉด ๋ช…๋ น์–ด๋Š” ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ถ”์ •์œผ๋กœ ํด๋ฐฑ๋ฉ๋‹ˆ๋‹ค.

plugin tag

ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ๋ฆด๋ฆฌ์Šค git ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ํด๋” ๋‚ด์—์„œ ์‹คํ–‰ํ•˜์„ธ์š”. ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฆด๋ฆฌ์Šค ํƒœ๊ทธ ์ง€์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

claude plugin tag [options]

์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
--push ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์›๊ฒฉ์œผ๋กœ ํ‘ธ์‹œ
--dry-run ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ํƒœ๊ทธ ์ง€์ •๋  ๋‚ด์šฉ ์ถœ๋ ฅ
-f, --force ์ž‘์—… ํŠธ๋ฆฌ๊ฐ€ ๋”ํ‹ฐํ•˜๊ฑฐ๋‚˜ ํƒœ๊ทธ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•ด๋„ ํƒœ๊ทธ ์ƒ์„ฑ
-h, --help ๋ช…๋ น์–ด ๋„์›€๋ง ํ‘œ์‹œ

๋””๋ฒ„๊น… ๋ฐ ๊ฐœ๋ฐœ ๋„๊ตฌ

๋””๋ฒ„๊น… ๋ช…๋ น์–ด

claude --debug๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋กœ๋”ฉ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์„ธ์š”:

์ด๋Š” ๋‹ค์Œ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค:

  • ๋กœ๋“œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์˜ ์˜ค๋ฅ˜
  • Skill, agent ๋ฐ hook ๋“ฑ๋ก
  • MCP ์„œ๋ฒ„ ์ดˆ๊ธฐํ™”

์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ

๋ฌธ์ œ ์›์ธ ํ•ด๊ฒฐ์ฑ…
ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋กœ๋“œ๋˜์ง€ ์•Š์Œ ์ž˜๋ชป๋œ plugin.json claude plugin validate ๋˜๋Š” /plugin validate๋ฅผ ์‹คํ–‰ํ•˜์—ฌ plugin.json, skill/agent/command frontmatter ๋ฐ hooks/hooks.json์˜ ๊ตฌ๋ฌธ ๋ฐ ์Šคํ‚ค๋งˆ ์˜ค๋ฅ˜ ํ™•์ธ
Skills๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Œ ์ž˜๋ชป๋œ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ skills/ ๋˜๋Š” commands/๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ์— ์žˆ๋Š”์ง€ ํ™•์ธ, .claude-plugin/ ๋‚ด๋ถ€๊ฐ€ ์•„๋‹˜
Hooks๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์Œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Œ chmod +x script.sh ์‹คํ–‰
MCP ์„œ๋ฒ„ ์‹คํŒจ ${CLAUDE_PLUGIN_ROOT} ๋ˆ„๋ฝ ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฒฝ๋กœ์— ๋ณ€์ˆ˜ ์‚ฌ์šฉ
๊ฒฝ๋กœ ์˜ค๋ฅ˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ๋จ ๋ชจ๋“  ๊ฒฝ๋กœ๋Š” ์ƒ๋Œ€์ ์ด์–ด์•ผ ํ•˜๋ฉฐ ./๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•จ
LSP Executable not found in $PATH ์–ธ์–ด ์„œ๋ฒ„๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์Œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ค์น˜ (์˜ˆ: npm install -g typescript-language-server typescript)

์˜ˆ์‹œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€

๋งค๋‹ˆํŽ˜์ŠคํŠธ ๊ฒ€์ฆ ์˜ค๋ฅ˜:

  • Invalid JSON syntax: Unexpected token } in JSON at position 142: ๋ˆ„๋ฝ๋œ ์‰ผํ‘œ, ์ถ”๊ฐ€ ์‰ผํ‘œ ๋˜๋Š” ๋”ฐ์˜ดํ‘œ ์—†๋Š” ๋ฌธ์ž์—ด ํ™•์ธ
  • Plugin has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Required: ํ•„์ˆ˜ ํ•„๋“œ๊ฐ€ ๋ˆ„๋ฝ๋จ
  • Plugin has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...: JSON ๊ตฌ๋ฌธ ์˜ค๋ฅ˜

ํ”Œ๋Ÿฌ๊ทธ์ธ ๋กœ๋”ฉ ์˜ค๋ฅ˜:

  • Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.: ๋ช…๋ น์–ด ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ ์œ ํšจํ•œ ๋ช…๋ น์–ด ํŒŒ์ผ์ด ์—†์Œ
  • Plugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.: marketplace.json์˜ source ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ด
  • Plugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.: ์ค‘๋ณต ์ปดํฌ๋„ŒํŠธ ์ •์˜ ์ œ๊ฑฐ ๋˜๋Š” marketplace ํ•ญ๋ชฉ์—์„œ strict: false ์ œ๊ฑฐ

Hook ๋ฌธ์ œ ํ•ด๊ฒฐ

Hook ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์Œ:

  1. ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ: chmod +x ./scripts/your-script.sh
  2. shebang ๋ผ์ธ ํ™•์ธ: ์ฒซ ๋ฒˆ์งธ ์ค„์€ #!/bin/bash ๋˜๋Š” #!/usr/bin/env bash์—ฌ์•ผ ํ•จ
  3. ๊ฒฝ๋กœ๊ฐ€ ${CLAUDE_PLUGIN_ROOT} ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ™•์ธ: "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/your-script.sh"
  4. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆ˜๋™์œผ๋กœ ํ…Œ์ŠคํŠธ: ./scripts/your-script.sh

Hook์ด ์˜ˆ์ƒ ์ด๋ฒคํŠธ์—์„œ ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š์Œ:

  1. ์ด๋ฒคํŠธ ์ด๋ฆ„์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธ (๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„): PostToolUse, postToolUse ์•„๋‹˜
  2. ๋งค์ฒ˜ ํŒจํ„ด์ด ๋„๊ตฌ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ: ํŒŒ์ผ ์ž‘์—…์˜ ๊ฒฝ์šฐ "matcher": "Write|Edit"
  3. Hook ์œ ํ˜•์ด ์œ ํšจํ•œ์ง€ ํ™•์ธ: command, http, mcp_tool, prompt ๋˜๋Š” agent

MCP ์„œ๋ฒ„ ๋ฌธ์ œ ํ•ด๊ฒฐ

์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์Œ:

  1. ๋ช…๋ น์–ด๊ฐ€ ์กด์žฌํ•˜๊ณ  ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ
  2. ๋ชจ๋“  ๊ฒฝ๋กœ๊ฐ€ ${CLAUDE_PLUGIN_ROOT} ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ™•์ธ
  3. MCP ์„œ๋ฒ„ ๋กœ๊ทธ ํ™•์ธ: claude --debug๋Š” ์ดˆ๊ธฐํ™” ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค
  4. Claude Code ์™ธ๋ถ€์—์„œ ์„œ๋ฒ„๋ฅผ ์ˆ˜๋™์œผ๋กœ ํ…Œ์ŠคํŠธ

์„œ๋ฒ„ ๋„๊ตฌ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Œ:

  1. ์„œ๋ฒ„๊ฐ€ .mcp.json ๋˜๋Š” plugin.json์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
  2. ์„œ๋ฒ„๊ฐ€ MCP ํ”„๋กœํ† ์ฝœ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ํ™•์ธ
  3. ๋””๋ฒ„๊ทธ ์ถœ๋ ฅ์—์„œ ์—ฐ๊ฒฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ ํ™•์ธ

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ์‹ค์ˆ˜

์ฆ์ƒ: ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋กœ๋“œ๋˜์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ (skills, agents, hooks)๊ฐ€ ๋ˆ„๋ฝ๋จ.

์˜ฌ๋ฐ”๋ฅธ ๊ตฌ์กฐ: ์ปดํฌ๋„ŒํŠธ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ์— ์žˆ์–ด์•ผ ํ•˜๋ฉฐ .claude-plugin/ ๋‚ด๋ถ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. plugin.json๋งŒ .claude-plugin/์— ์†ํ•ฉ๋‹ˆ๋‹ค.

my-plugin/
โ”œโ”€โ”€ .claude-plugin/
โ”‚   โ””โ”€โ”€ plugin.json      โ† ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋งŒ ์—ฌ๊ธฐ
โ”œโ”€โ”€ commands/            โ† ๋ฃจํŠธ ์ˆ˜์ค€
โ”œโ”€โ”€ agents/              โ† ๋ฃจํŠธ ์ˆ˜์ค€
โ””โ”€โ”€ hooks/               โ† ๋ฃจํŠธ ์ˆ˜์ค€

์ปดํฌ๋„ŒํŠธ๊ฐ€ .claude-plugin/ ๋‚ด๋ถ€์— ์žˆ์œผ๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ๋กœ ์ด๋™ํ•˜์„ธ์š”.

๋””๋ฒ„๊ทธ ์ฒดํฌ๋ฆฌ์ŠคํŠธ:

  1. claude --debug๋ฅผ ์‹คํ–‰ํ•˜๊ณ  "loading plugin" ๋ฉ”์‹œ์ง€๋ฅผ ์ฐพ์œผ์„ธ์š”
  2. ๊ฐ ์ปดํฌ๋„ŒํŠธ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋””๋ฒ„๊ทธ ์ถœ๋ ฅ์— ๋‚˜์—ด๋˜๋Š”์ง€ ํ™•์ธ
  3. ํŒŒ์ผ ๊ถŒํ•œ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ ํŒŒ์ผ ์ฝ๊ธฐ๋ฅผ ํ—ˆ์šฉํ•˜๋Š”์ง€ ํ™•์ธ

๋ฐฐํฌ ๋ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ฐธ์กฐ

๋ฒ„์ „ ๊ด€๋ฆฌ

Claude Code๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋ฒ„์ „์„ ์บ์‹œ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์—…๋ฐ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. /plugin update๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ž๋™ ์—…๋ฐ์ดํŠธ๊ฐ€ ์‹คํ–‰๋˜๋ฉด Claude Code๋Š” ํ˜„์žฌ ๋ฒ„์ „์„ ๊ณ„์‚ฐํ•˜๊ณ  ์ด๋ฏธ ์„ค์น˜๋œ ๋ฒ„์ „๊ณผ ์ผ์น˜ํ•˜๋ฉด ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

๋ฒ„์ „์€ ๋‹ค์Œ ์ค‘ ์„ค์ •๋œ ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์—์„œ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค:

  1. ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ plugin.json์— ์žˆ๋Š” version ํ•„๋“œ
  2. marketplace.json์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ํ•ญ๋ชฉ์— ์žˆ๋Š” version ํ•„๋“œ
  3. git ํ˜ธ์ŠคํŒ… ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์˜ github, url, git-subdir ๋ฐ ์ƒ๋Œ€ ๊ฒฝ๋กœ ์†Œ์Šค์— ๋Œ€ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์†Œ์Šค์˜ git ์ปค๋ฐ‹ SHA
  4. git ์ €์žฅ์†Œ ๋‚ด์— ์žˆ์ง€ ์•Š์€ npm ์†Œ์Šค ๋˜๋Š” ๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ฒฝ์šฐ unknown

์ด๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ฒ„์ „ ๊ด€๋ฆฌํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

์ ‘๊ทผ ๋ฐฉ์‹ ๋ฐฉ๋ฒ• ์—…๋ฐ์ดํŠธ ๋™์ž‘ ์ตœ์  ์‚ฌ์šฉ
๋ช…์‹œ์  ๋ฒ„์ „ plugin.json์—์„œ "version": "2.1.0"์œผ๋กœ ์„ค์ • ์‚ฌ์šฉ์ž๋Š” ์ด ํ•„๋“œ๋ฅผ ๋ฒ”ํ”„ํ•  ๋•Œ๋งŒ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฒ”ํ”„ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ ์ปค๋ฐ‹์„ ํ‘ธ์‹œํ•˜๋ฉด ํšจ๊ณผ๊ฐ€ ์—†์œผ๋ฉฐ /plugin update๋Š” "์ด๋ฏธ ์ตœ์‹  ๋ฒ„์ „์ž…๋‹ˆ๋‹ค"๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค ์ฃผ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒŒ์‹œ๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ
์ปค๋ฐ‹-SHA ๋ฒ„์ „ plugin.json ๋ฐ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ํ•ญ๋ชฉ ๋ชจ๋‘์—์„œ version ์ƒ๋žต ์‚ฌ์šฉ์ž๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ git ์†Œ์Šค์— ๋Œ€ํ•œ ๋ชจ๋“  ์ƒˆ ์ปค๋ฐ‹์—์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค ํ™œ๋ฐœํžˆ ๊ฐœ๋ฐœ ์ค‘์ธ ๋‚ด๋ถ€ ๋˜๋Š” ํŒ€ ํ”Œ๋Ÿฌ๊ทธ์ธ

๋ช…์‹œ์  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์˜๋ฏธ ์žˆ๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ(MAJOR.MINOR.PATCH)๋ฅผ ๋”ฐ๋ฅด์„ธ์š”: ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ๊ฒฝ์šฐ MAJOR๋ฅผ ๋ฒ”ํ”„ํ•˜๊ณ , ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์˜ ๊ฒฝ์šฐ MINOR๋ฅผ ๋ฒ”ํ”„ํ•˜๊ณ , ๋ฒ„๊ทธ ์ˆ˜์ •์˜ ๊ฒฝ์šฐ PATCH๋ฅผ ๋ฒ”ํ”„ํ•˜์„ธ์š”. CHANGELOG.md์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฌธ์„œํ™”ํ•˜์„ธ์š”.


์ฐธ๊ณ  ํ•ญ๋ชฉ