.claude-plugin/plugin.json의 선택적 manifest 키(해당 폴더를 대체하거나 추가함), 그리고 사용자가 보는 이름을 가집니다. 각 키의 전체 필드 테이블은 manifest 참조를 참조하십시오.
이 페이지를 사용하여 이미 로드되는 플러그인에 컴포넌트를 추가합니다.
컴포넌트를 추가한 후, 실행 중인 세션에서 /reload-plugins를 실행하거나 새 세션을 시작하여 Claude Code가 이를 로드하도록 합니다. 로드하기 전에 컴포넌트의 파일을 확인하려면 플러그인 디렉토리에서 셸에서 claude plugin validate .를 실행합니다.
다음 경우는 다른 페이지에서 다룹니다:
- 첫 번째 플러그인 구축: 플러그인 생성으로 시작합니다
- 다른 사람의 플러그인 설치: 플러그인 설치를 참조합니다
- 플러그인의 사용자가 claude.ai 또는 Cowork에 있음: 다른 컴포넌트 세트가 로드됩니다. 플러그인 구조 및 테스트 및 컴포넌트 지원 테이블을 참조합니다
플러그인 디렉토리 탐색
탐색기는 기본 위치에 모든 종류의 구성 요소 중 하나씩 포함하는 예제 플러그인my-plugin을 보여줍니다:
- 검토 스킬과
about명령 - 보안 검토 서브에이전트
- Claude가 파일을 편집한 후 파일을 포맷하는 훅과 이를 호출하는
scripts/폴더 - 로그 모니터
- 출력 스타일과 색상 테마
- 경로 감사 워크플로우
hello-plugin실행 파일- 기본 설정
- 로컬 MCP 서버와 Go 언어 서버
각 유형의 구성 요소 추가하기
아래 각 섹션은 한 가지 유형의 구성 요소를 다룹니다. 플러그인에서 해당 파일을 두는 위치, 검증을 통과하는 예시, 플러그인이 로드된 후 사용자에게 보이는 내용, 기본 위치를 변경하는 매니페스트 키를 설명합니다. 플러그인에 필요한 것만 추가하면 되며, 필수 항목은 없습니다.Skills
스킬은 설명이 작업과 일치할 때 Claude가 로드할 수 있는SKILL.md 파일입니다. 사용자가 명령으로 직접 실행할 수도 있습니다. 각 스킬은 skills/ 아래의 개별 디렉터리에 저장합니다.
SKILL.md에 description을 지정합니다.
skills/review/SKILL.md
/my-plugin:review가 스킬을 실행합니다. 명령 이름과 호출 주체는 다음 규칙을 따릅니다.
- 명령 이름:
/<plugin>:<directory>형식이므로my-plugin의skills/review/SKILL.md는/my-plugin:review가 됩니다. frontmatter에서name을 설정하면 마지막 세그먼트가 대체되고 플러그인 접두사는 유지됩니다. 스킬의 명령 이름이 정해지는 방식을 참조하십시오 - 호출 주체: Claude, 사용자 또는 둘 다이며, frontmatter로 제어합니다. 스킬 호출 주체 제어하기를 참조하십시오
skills/ 디렉터리 외부에 스킬을 둘 수도 있습니다.
- 추가 디렉터리:
skills매니페스트 키에 나열합니다.commands및agents와 달리, 기본skills/스캔을 대체하지 않고 여기에 추가됩니다 - 플러그인 루트의 단일 스킬:
skills/디렉터리와skills매니페스트 키가 모두 없으면 플러그인 루트의SKILL.md가 하나의 스킬로 로드됩니다. frontmatter에name을 설정하십시오. 그렇지 않으면 마켓플레이스 설치 시 스킬 이름이 플러그인이 아닌 캐시 디렉터리 이름을 따르게 됩니다
CLAUDE.md를 로드하지 않으며, claude plugin validate는 CLAUDE.md at the plugin root is not loaded as project context 경고를 표시합니다.
보호된 파일 편집 차단처럼 항상 지켜져야 하는 규칙이라면 스킬이 아닌 훅으로 플러그인에 추가하십시오. 둘 중 무엇을 선택할지는 유사한 기능 비교의 Hook vs Skill 탭을 참조하십시오.
frontmatter 필드와 보조 파일에 대해서는 Skills를 참조하십시오.
Commands
명령은 사용자가/my-plugin:about처럼 이름으로 실행하는 단일 Markdown 파일입니다.
명령은 이전 형식이며, 새로운 작업에서는 스킬이 이를 대체합니다. 스킬도 같은 방식으로 이름으로 실행되며, 디렉터리에 보조 파일을 함께 담을 수도 있습니다.
commands/는 .claude/commands/에서 옮겨 오는 파일에만 사용하십시오.commands/<file>.md에 저장하면 /<plugin>:<file>이 됩니다. 하위 디렉터리는 세그먼트를 추가하므로 commands/db/migrate.md는 /my-plugin:db:migrate가 됩니다.
명령 파일은 스킬과 동일한 frontmatter를 사용합니다.
매니페스트에서 명령 정의하기
이 방법은 명령 파일을commands/가 아닌 다른 위치에 두거나, 별도의 Markdown 파일 없이 plugin.json 안에 짧은 명령을 정의하려는 경우에만 필요합니다. commands 매니페스트 키를 설정하면 Claude Code는 commands/를 스캔하는 대신 이 키를 읽습니다. 이 키는 경로, 경로 배열, 또는 각 명령 이름을 source 파일이나 인라인 content에 매핑하는 객체를 받습니다.
다음 매니페스트는 Markdown 파일 없이 /my-plugin:about을 인라인으로 정의합니다.
.claude-plugin/plugin.json
/my-plugin:about을 실행하여 로드되었는지 확인합니다.
전체 키 구문은 commands를 참조하십시오.
Agents
서브에이전트는 자체 지침과 컨텍스트 윈도우를 가진 별도의 어시스턴트로, Claude가 작업을 위임할 수 있습니다.agents/ 아래의 각 Markdown 파일이 하나의 서브에이전트를 정의합니다.
agents/security-reviewer.md
my-plugin:security-reviewer이며, 사용자는 @agent-my-plugin:security-reviewer로 명시적으로 호출할 수 있습니다. 이름 형식은 <plugin>:<name>이며, <name>은 frontmatter의 name 필드에서 가져오고, 해당 필드가 없으면 파일 이름에서 가져옵니다.
agents 매니페스트 키는 agents/ 스캔을 대체합니다.
하위 폴더로 에이전트 정리하기
플러그인 에이전트 파일을agents/의 하위 폴더에 둘 수 있습니다. Claude Code는 이를 재귀적으로 로드하며, 플러그인 이름, 각 하위 폴더 이름, 파일 이름을 콜론으로 연결하여 에이전트의 범위 지정 이름을 만듭니다. 예를 들어 my-plugin이라는 플러그인의 agents/review/security.md는 my-plugin:review:security로 로드됩니다. 다음 두 가지 설정이 이 이름을 변경합니다.
- Frontmatter
name: 파일 이름만 대체하므로agents/review/security.md의name: audit는my-plugin:review:audit로 로드됩니다 - 매니페스트
agents필드: 여기에 나열한 파일은 하위 폴더 이름 없이 로드되므로"agents": "./custom/review/security.md"는my-plugin:security로 로드됩니다
플러그인 에이전트의 frontmatter 필드
플러그인 에이전트의 frontmatter는 다음 규칙을 따릅니다.- 지원되는 필드:
name,description,model,effort,maxTurns,autoCompactWindow,tools,disallowedTools,skills,memory,background,omitClaudeMd,isolation,color, 그리고experimental의cacheTtl키입니다. 유효한isolation값은"worktree"뿐입니다. 각 필드의 역할은 지원되는 frontmatter 필드를 참조하십시오 - 무시되는 필드:
permissionMode,hooks,mcpServers,initialPrompt입니다. 에이전트 파일은 자체적으로 훅이나 MCP 서버를 추가할 수 없으므로, 대신 플러그인 훅과 MCP 서버로 추가하십시오 - 파싱되지 않는 frontmatter: 에이전트는 모든 필드가 무시된 채로 로드됩니다. 이름은 파일 이름을 따르며, 설명은
Agent from my-plugin plugin으로 표시됩니다. 이러한 파일을 찾으려면 셸에서claude plugin validate를 실행하십시오
Hooks
훅은 파일을 편집할 때마다와 같이 Claude Code 수명 주기의 특정 시점에 셸 명령, HTTP 요청, MCP 도구 호출, 모델에 대한 프롬프트 또는 서브에이전트를 자동으로 실행합니다. 플러그인의 훅은 플러그인 루트의hooks/hooks.json에 최상위 "hooks" 키 아래에, settings.json의 hooks 객체와 동일한 형태로 저장합니다. 따라서 기존 설정 훅을 그대로 복사해 넣을 수 있습니다.
다음 훅은 모든 Write 또는 Edit 이후에 번들된 스크립트를 실행합니다.
hooks/hooks.json
scripts/format.sh에 저장하고 실행 가능하게 만듭니다.
플러그인을 로드하고 Claude에게 파일 편집을 요청합니다. 0으로 종료되는 PostToolUse 훅은 트랜스크립트에 아무것도 표시하지 않으므로, 디버그 로깅을 사용하거나 스크립트 자체가 변경한 내용을 통해 실행 여부를 확인하십시오.
hooks/hooks.json의 훅과 hooks 매니페스트 키의 훅은 모두 로드됩니다. 모든 이벤트와 해당 페이로드는 Hook events를 참조하십시오.
활성화된 다른 플러그인과 이름이 같으면, 둘 중 하나만 hooks/hooks.json의 훅을 등록하고 다른 플러그인의 훅은 제외됩니다. 어느 쪽이 등록되는지와 이를 알려 주는 /plugin의 안내 문구는 활성화된 두 플러그인의 이름이 같을 때의 훅을 참조하십시오.
Claude Code 내부에서 실행되고 인터페이스에 그릴 수 있는 JavaScript 함수로 훅을 작성하려면, 같은 hooks/hooks.json의 modules 키 아래에 모듈 파일을 나열합니다. 이러한 모듈이 있는 플러그인이 mod입니다. mod 만들기를 참조하십시오.
플러그인 훅이 실행되는 시점
플러그인의 훅은 플러그인의 스킬이나 명령이 사용될 때까지 기다리지 않습니다. Claude Code는 세션이 플러그인을 로드할 때 훅을 등록하며, 그 이후부터 해당 이벤트에서 훅이 실행됩니다. 훅의 실행 시점을 제한하려면matcher의 범위를 좁히십시오.
훅이 전혀 실행되지 않는다면 실행되지 않는 훅을 참조하십시오.
환경, 따옴표 처리 및 MCP 도구 매칭
훅의 환경,${CLAUDE_PLUGIN_ROOT}의 따옴표 처리, 플러그인 자체 MCP 도구에 대한 matcher는 다음과 같이 작동합니다.
- 환경: 모든 훅 프로세스는 환경 변수로
CLAUDE_PLUGIN_ROOT와CLAUDE_PLUGIN_DATA를 받으며, 각 사용자 구성 값에 대해CLAUDE_PLUGIN_OPTION_<KEY>도 받으므로 스크립트에서 이를 읽을 수 있습니다 - 따옴표 처리:
command에args가 없으면 셸을 통해 실행되므로, Hooks의hooks/hooks.json예시처럼${CLAUDE_PLUGIN_ROOT}경로를 큰따옴표로 감싸 확장된 경로가 하나의 셸 단어로 유지되도록 하십시오. 대신args를 전달하면 각 요소가 셸 없이 하나의 인수로 전달되므로 따옴표가 필요하지 않습니다. exec 형식과 셸 형식을 참조하십시오 - 플러그인 자체 MCP 도구 매칭: 이 플러그인이 선언한 MCP 서버의 도구 이름은
mcp__plugin_<plugin>_<server>__<tool>이므로, matcher에 이 전체 이름을 작성하십시오. 서버 이름만으로 된 matcher는 절대 실행되지 않습니다. MCP 도구 매칭을 참조하십시오
MCP servers
MCP 서버는 외부 시스템의 도구를 Claude에 제공합니다. 플러그인 루트의.mcp.json에 프로젝트 .mcp.json과 동일한 형태로 선언합니다. 다음 .mcp.json은 db라는 서버 하나를 선언합니다.
.mcp.json
mcpServers 래퍼를 생략하고 db를 파일의 최상위에 둘 수도 있습니다.
플러그인을 로드하고 /mcp를 실행하여 서버가 plugin:my-plugin:db로 표시되는지 확인합니다.
claude plugin validate는 .mcp.json을 검사하고, Claude Code가 로드 시점에 제외할 서버 항목을 오류로 보고합니다. Claude Code v2.1.281 이상이 필요합니다.
잘못된 항목이 로드 시점에 어디에 표시되는지는 시작되지 않는 MCP 서버를 참조하십시오.
mcpServers 매니페스트 키는 인라인 서버 맵, JSON 파일 경로, 또는 이들의 배열을 받습니다. 매니페스트 서버가 .mcp.json의 서버와 이름이 같으면 매니페스트 서버가 이를 대체합니다.
claude.ai 및 Cowork 사용자에게 제공하기
MCP servers의db 서버와 같은 로컬 stdio 서버는 Claude Code와 Claude Desktop 앱에서 사용자의 컴퓨터로 실행되는 Cowork 세션에서는 실행되지만 claude.ai에서는 실행되지 않습니다. 해당 사용자에게도 제공하려면 Bundle an MCP connector with its skill에 나온 것처럼 https:// URL로 원격 서버를 참조하십시오. claude.ai와 Cowork는 이를 사용자에게 커넥터로 제공합니다.
서버 이름, 도구 이름 및 다시 로드
서버의 이름, 변수 치환, 다시 로드 동작은 다음 규칙을 따릅니다.- 서버 이름:
plugin:<plugin>:<server>형식이므로my-plugin의db서버는/mcp에서plugin:my-plugin:db로 표시됩니다.mcp_tool훅에서 서버를 지정할 때도 같은 형식을 사용합니다 - 도구 이름:
mcp__plugin_<plugin>_<server>__<tool>형식이므로 해당db서버의query도구는mcp__plugin_my-plugin_db__query입니다. 권한 규칙과 훅 matcher에서는 이 이름을 사용합니다 - 치환:
${CLAUDE_PLUGIN_ROOT}와 기타 경로 변수는command,args,env에서 치환됩니다.args에서는 각 요소가 하나의 인수로 전달되므로 따옴표가 필요하지 않습니다 - 다시 로드: 사용자가
/reload-plugins를 실행하고 다시 로드가 적용되면, 구성이 변경되지 않은 서버는 연결을 유지합니다. 구성이 변경된 서버는 다시 연결되고, 제거한 서버는 연결이 해제됩니다
패키징된 MCPB 서버 포함하기
mcpServers 키는 확장자가 .mcpb 또는 이전 형식인 .dxt인 MCPB 파일로 패키징된 서버도 받습니다. 키가 플러그인 내부 경로 또는 https:// URL로 파일을 가리키도록 지정합니다.
.claude-plugin/plugin.json
name을 따릅니다.
번들 자체의 매니페스트는 user_config 블록에서 서버가 사용자로부터 필요로 하는 설정을 선언할 수 있습니다. 필수 설정에 저장된 값이 없는 번들 서버는 시작되지 않습니다. /plugin Errors 탭에 Bundled MCP server "<name>" was not started: it needs configuration이 표시됩니다.
사용자는 다음 두 가지 방법 중 하나로 값을 제공합니다.
/plugin에서: Installed 탭에서 플러그인을 선택하고 Configure를 선택합니다- 설치 시 셸에서:
claude plugin install에--config <server>.<key>=<value>를 전달합니다. Claude Code v2.1.285 이상이 필요하며, 플러그인 내부에 패키징된 번들에서만 작동합니다.
LSP servers
LSP 서버는 특정 언어에 대한 진단과 코드 탐색 기능을 Claude에 제공합니다. 공식 코드 인텔리전스 플러그인이 이미 해당 언어를 지원한다면 직접 작성하는 대신 그 플러그인을 설치하십시오. 그렇지 않으면 플러그인 루트의.lsp.json에 서버를 선언합니다.
.lsp.json
command는 바이너리 이름이며, 인수는 args에 지정합니다. extensionToLanguage에는 .으로 시작하는 확장자가 하나 이상 필요합니다.
claude plugin validate는 이 파일을 읽지 않습니다. 항목 중 하나라도 유효하지 않으면 로드 시 파일 전체를 건너뛰며, /plugin Errors 탭에 Invalid LSP server config for ".lsp.json"이 표시됩니다.
플러그인은 연결을 구성하지만 서버 바이너리를 설치하지는 않으며, 각 파일 확장자에는 하나의 서버만 할당됩니다.
- 바이너리 누락: Claude Code는 사용자의
PATH에서 이름으로command를 시작합니다. 바이너리가 없으면 서버 시작에 실패하고claude --debug가LSP server <name> failed to start를 로그에 기록합니다 - 확장자 충돌: 활성화된 두 서버가 같은 확장자를 지정하면, 서버가 한 플러그인에서 왔든 두 플러그인에서 왔든 먼저 등록된 서버가 해당 파일을 처리하고 다른 서버는 해당 파일에 사용되지 않습니다.
/pluginErrors 탭에LSP server "<name>" is not used for <ext> files경고가 표시됩니다
lspServers 매니페스트 키는 같은 맵을 인라인으로, JSON 파일 경로로, 또는 이들의 배열로 받으며, 해당 서버는 .lsp.json의 서버에 추가됩니다. 매니페스트 서버가 .lsp.json의 서버와 이름이 같으면 매니페스트 서버가 이를 대체합니다.
transport, 타임아웃, 재시작 및 기타 필드는 lspServers를 참조하십시오.
로그 출력은 stdout이 아닌 stderr로 보내십시오. Claude Code는 서버의 stdout을 프로토콜 메시지로만 읽으며, 최대 64 KiB의 메시지 헤더와 최대 32 MiB의 메시지 본문을 허용합니다.
Claude Code는 두 제한 중 하나를 초과하거나 stdout에 프로토콜이 아닌 출력을 쓰는 서버의 연결을 끊고, 이 연결 해제를 restartOnCrash 및 maxRestarts에 대한 충돌로 집계합니다. --debug로 실행하면 Claude Code가 원인을 명시한 오류를 디버그 로그에 기록합니다.
Executables
플러그인 루트의bin/에 있는 파일은 플러그인이 활성화된 동안 Bash 도구 셸의 PATH에 포함되므로, Claude가 이를 단독 명령으로 실행할 수 있습니다. 실행 가능한 스크립트를 추가합니다.
bin/hello-plugin
chmod +x bin/hello-plugin으로 실행 가능하게 만들고 플러그인을 로드합니다. Claude에게 hello-plugin 실행을 요청하면 Bash 도구 결과에 스크립트의 출력이 표시됩니다.
플러그인 bin/ 디렉터리는 사용자 자체의 PATH 항목 뒤에 위치하므로, 플러그인이 git, ls 또는 기타 시스템 명령을 가릴 수 없습니다.
claude.ai와 Cowork는 최상위 bin/ 디렉터리가 있는 플러그인을 설치하지 않으며, claude.ai 조직 설정을 통해 배포하는 플러그인도 마찬가지입니다.
Default settings
플러그인이 활성화된 동안 적용되는 기본값을 설정하려면 플러그인 루트에settings.json을 추가하거나, 같은 객체를 settings 매니페스트 키에 인라인으로 넣습니다. 적용되는 키는 agent와 subagentStatusLine 두 가지이며, 그 외의 키는 모두 제외됩니다.
플러그인 자체 에이전트 중 하나를 메인 스레드로 실행하려면 agent를 설정합니다.
settings.json
security-reviewer 에이전트의 시스템 프롬프트와 모델로 응답합니다.
이 키가 제어하는 모든 항목은 agent 설정을 참조하십시오.
같은 키가 여러 곳에 설정된 경우 다음 규칙에 따라 적용할 값이 결정됩니다.
- 매니페스트보다 파일 우선: 둘 다 존재하고
settings.json이 지원되는 키를 하나 이상 설정하면settings.json이 적용되고 매니페스트의settings는 무시됩니다 - 플러그인 기본값보다 사용자 설정 우선: 설정 소스 전체에서 플러그인 기본값이 가장 낮은 계층이므로, 사용자가
~/.claude/settings.json에 설정한agent가 플러그인의 값을 재정의합니다 - 두 플러그인이 같은 키를 설정하는 경우: 마지막으로 로드된 플러그인의 값이 적용되며,
claude --debug가overrides setting을 로그에 기록합니다
subagentStatusLine의 형태는 서브에이전트 상태줄을 참조하십시오.
Themes and output styles
플러그인에는 색상 테마와 출력 스타일을 포함할 수 있습니다. 둘 다 사용자 자체의 항목과 같은 선택기에 표시됩니다. 두 경우 모두 매니페스트 키를 설정하면 폴더 스캔이 대체됩니다.
플러그인 테마는 읽기 전용이므로, 사용자가
/theme에서 편집하면 편집 내용은 사용자 자체의 테마 디렉터리에 사본으로 저장됩니다.
다음 테마는 dark 프리셋에서 프롬프트 강조 색상과 오류 텍스트 색상을 변경합니다.
themes/dracula.json
Channels
채널을 사용하면 채팅 앱과 같은 외부 시스템이 세션으로 메시지를 보낼 수 있습니다. 플러그인에서 채널은 MCP 서버 중 하나와, 이에 바인딩되며 자체 구성을 요청할 수 있는channels 항목으로 구성됩니다. 다음 매니페스트는 채널을 telegram 서버에 바인딩하고 봇 토큰을 요청합니다.
.claude-plugin/plugin.json
server는 mcpServers의 키와 일치해야 합니다. 채널별 userConfig는 최상위 userConfig 키와 같은 형태를 가집니다.
서버가 구현해야 하는 사항과 사용자가 채널 플러그인을 활성화하는 방법은 채널 레퍼런스의 플러그인으로 패키징하기를 참조하십시오. 필드 표는 channels를 참조하십시오.
Monitors
모니터는 세션 전체 동안 백그라운드에서 실행되는 셸 명령입니다. 모니터가 출력하는 내용은 알림으로 Claude에 전달되므로, Claude는 감시하라는 요청을 받지 않아도 로그나 상태 변경에 대응할 수 있습니다. 항목은monitors/monitors.json에 저장합니다.
monitors/monitors.json
- 대화형 세션 전용: 플러그인 모니터는 대화형 세션에서 시작되며,
-p플래그를 사용하는 비대화형 모드에서는 절대 시작되지 않습니다. API 제공자 또는 텔레메트리 설정으로 인해 Monitor 도구를 사용할 수 없는 세션에서도 시작되지 않습니다 - 사용자 구성 사용 불가:
command는 경로 변수와 환경의${ENV_VAR}를 받지만${user_config.*}는 절대 받지 않습니다. 이를 참조하는 모니터는 시작되지 않으며, 모니터 프로세스는CLAUDE_PLUGIN_OPTION_<KEY>도 받지 않습니다 - 세션 중 비활성화: 세션 도중 플러그인을 비활성화해도 Claude Code는 이미 실행 중인 모니터를 중지하지 않습니다. 모니터는 세션이 종료될 때 중지됩니다
experimental.monitors 매니페스트 키는 같은 배열을 인라인으로 또는 JSON 파일 경로로 받으며, monitors/monitors.json 대신 읽힙니다.
when 트리거와 기타 필드는 monitors를 참조하십시오.
사용자에게 구성 값을 요청합니다
플러그인이 사용자로부터 필요로 하는 값을userConfig manifest 키에서 선언하여, 사용자가 settings.json을 자신들이 편집하지 않도록 합니다. 각 옵션은 title을 레이블로 하고 description을 아래에 가진 대화 상자에 나타납니다.
토큰이나 비밀번호의 경우 "sensitive": true를 설정합니다. 대화 상자는 입력을 마스크하고, 값은 settings.json이 아닌 보안 저장소에 저장됩니다.
이 manifest는 엔드포인트와 토큰을 요청합니다:
.claude-plugin/plugin.json
구성 대화 상자가 나타날 때
대화 상자는 대화형/plugin 인터페이스의 일부입니다. 사용자가 다음 중 하나를 수행할 때 아직 설정되지 않은 옵션에 대해 열립니다:
/plugin에서 플러그인을 설치합니다- 세션 내에서
/plugin install <plugin>@<marketplace>를 실행합니다 /plugin의 Installed 탭에서 플러그인을 활성화합니다
/plugin configure <plugin>@<marketplace>를 실행합니다.
VS Code 확장의 플러그인 관리 대화 상자는 설치 후 양식으로 설정되지 않은 옵션을 요청하며, 플러그인의 행에 있는 기어 아이콘은 모든 옵션과 함께 양식을 다시 엽니다.
claude plugin install 셸 명령은 userConfig 값을 프롬프트하지 않습니다. 셸에서 값을 설정하려면, 설치할 때 각각을 --config KEY=VALUE로 전달하거나, 그 후 JSON 객체를 claude plugin configure --values-stdin으로 파이프합니다.
옵션이 설정되지 않으면, claude plugin install은 userConfig options not yet set 라인을 인쇄합니다. 라인의 정확한 텍스트는 The userConfig dialog never appears를 참조합니다.
옵션 필드, 각 값이 저장되는 위치, 컴포넌트가 저장된 값을 참조하는 방법, ${user_config.*}를 거부하는 필드의 경우, 사용자 구성을 참조합니다.
플러그인 경로 참조 및 데이터 저장
플러그인이 어디에 설치될지 모르므로, 고정 경로보다는 이 변수를 통해 파일과 데이터를 참조합니다. 이들은 skill, 명령, agent 콘텐츠에서, hook과 모니터 명령에서, MCP와 LSP 서버 구성에서 대체됩니다. 또한 hook, MCP, LSP 프로세스로 내보내집니다:${CLAUDE_PLUGIN_ROOT}: 플러그인의 설치 디렉토리. 각 버전은 자신의 캐시 디렉토리를 가지므로, 플러그인이 업데이트될 때 경로가 변경됩니다. 거기에 상태를 작성하지 마십시오${CLAUDE_PLUGIN_DATA}: 업데이트를 생존하는 디렉토리,node_modules, 가상 환경, 캐시용.~/.claude/plugins/data/<id>/로 해석되고 처음 참조될 때 생성됩니다${CLAUDE_PROJECT_DIR}: 프로젝트 루트, hooks가 받는 동일한 값
<id>는 문자, 숫자, _, - 이외의 모든 문자가 -로 대체된 플러그인 식별자이므로, my-plugin@my-marketplace는 my-plugin-my-marketplace가 됩니다.
Windows에서, 대체된 경로는 셸이 백슬래시를 이스케이프로 읽지 않도록 전진 슬래시를 사용합니다.
데이터 디렉토리에 종속성 설치
마켓플레이스 설치 플러그인의 경우, Claude Code는 플러그인을 캐시할 때 적격 Node.js 패키지 종속성을 자동으로 설치하므로, 자신이 설치할 필요가 없을 수 있습니다. 할 때, 이SessionStart hook은 첫 실행 시 ${CLAUDE_PLUGIN_DATA}에 node_modules를 설치하고 업데이트가 package.json을 변경한 후 다시 설치합니다:
hooks/hooks.json
~/.claude/plugins/data/<id>/node_modules이 존재합니다. MCP 서버는 그 다음 NODE_PATH를 ${CLAUDE_PLUGIN_DATA}/node_modules로 설정할 수 있습니다. 어느 필드가 어느 변수를 대체하는지의 경우, 환경 변수를 참조합니다.
다음 단계
- 플러그인 manifest 참조:
plugin.json필드, 경로 규칙, 표준 레이아웃 - evals로 플러그인 테스트: 추가한 컴포넌트가 Claude의 동작을 의도한 방식으로 변경하는지 확인합니다
- 플러그인 게시 및 배포: 플러그인을 버전 지정하고 마켓플레이스에 넣습니다
- 플러그인 문제 해결: 컴포넌트가 로드되지 않거나 hook이 발생하지 않을 때 수행할 작업