Claude Code 공식문서 리뷰-참고자료(Reference)[6] : 플러그인 참조(Plugins reference)
- -
안녕하세요! 갓대희입니다.
Claude Code Docs 공식 문서 >> [참고자료(Reference)] 섹션의 내용 중 [플러그인 참조(Plugins reference)]를 살펴 보려고 합니다.
이번 섹션 부터는 영문, 한글번역본이 모두 공식문서로 존재하는 섹션이니 한글 문서를 편하게 참고 하셔도 될 것 같습니다.
https://code.claude.com/docs/en/plugins-reference
Plugins reference - Claude Code Docs
Complete technical reference for Claude Code plugin system, including schemas, CLI commands, and component specifications.
code.claude.com
이 카테고리의 글은 편하게 공식 문서 위주의 내용을 눈으로 쭉 살펴 보고 넘어가는 목적을 갖고 시작 하게 되었습니다.
저도 초심으로 돌아가 기초적읜 글을 살펴보다보니, 지금와서 클로드에서 강조 하고자 하는 원칙이 어떤건지 되돌아볼 수 있는 계기가 되기도 하는 것 같아, 다른 분들도 꼭 한번 눈으로라도 이해 하고 넘어가는것이 좋다고 생각하여 공식 문서의 내용을 억지로 리뷰해보게 되었습니다.

플러그인 레퍼런스
원본: Claude Code Plugins Reference
이 문서는 플러그인 개발자를 위한 상세 기술 문서이다. Claude Code의 기능을 확장하는 커스텀 명령어, 에이전트, 스킬, 훅을 만들고 싶다면 이 레퍼런스를 참고하자.
- 팀 전용 커스텀 슬래시 명령어를 만들고 싶다
- 특정 작업에 특화된 AI 에이전트를 정의하고 싶다
- 코드 작성 후 자동으로 린트/포맷을 실행하고 싶다
- 외부 도구(Jira, Slack 등)와 연동하고 싶다
다른 문서 찾고 있나요?
- 플러그인 사용법이 궁금하다면 → Plugins
- 마켓플레이스에서 플러그인을 찾고 설치하려면 → Discover plugins
시작하기 전에 준비할 것들
플러그인 개발을 시작하기 전에 다음 사항을 확인하자.
필수 항목- Claude Code 설치 - 최신 버전 권장
→claude --version으로 확인 - Markdown 기본 문법 - 명령어, 에이전트, 스킬은 모두 Markdown 파일
→ 프론트매터(YAML) 작성법도 알아두면 좋음 - JSON 기본 문법 - plugin.json, hooks.json 등 설정 파일 작성에 필요
→ 문법 오류 시 플러그인이 로딩되지 않음
- 셸 스크립트 기본 - 훅에서 스크립트 실행 시 필요
- MCP(Model Context Protocol) 이해 - 외부 서비스 연동 시 필요
플러그인 컴포넌트 개요
모든 컴포넌트를 사용할 필요는 없다. 필요한 것만 선택해서 조합하면 된다.
| 컴포넌트 | 한 줄 설명 | 언제 사용? |
|---|---|---|
| Commands | 슬래시 명령어 (/deploy) |
사용자가 직접 호출하는 작업 |
| Agents | 전문 분야별 AI 에이전트 | Claude가 자동으로 판단해서 호출 |
| Skills | 특정 도메인 지식/도구 모음 | PDF 처리, 코드 리뷰 등 전문 기능 |
| Hooks | 이벤트 기반 자동 실행 | 파일 저장 시 린트 실행 등 |
| MCP Servers | 외부 서비스 연동 | DB, API, 외부 도구 연결 |
| LSP Servers | 언어별 코드 인텔리전스 | 실시간 진단, 코드 탐색 |
첫 플러그인 만들기
복잡한 설정 없이, 커스텀 슬래시 명령어 하나만 있는 플러그인을 만들어보자.
1단계: 플러그인 디렉토리 구조 생성
# 플러그인 디렉토리 생성
mkdir -p my-first-plugin/.claude-plugin
mkdir -p my-first-plugin/commands
# 디렉토리 구조 확인
tree my-first-plugin/
# my-first-plugin/
# ├── .claude-plugin/
# │ └── plugin.json ← 필수: 플러그인 메타데이터
# └── commands/
# └── hello.md ← 슬래시 명령어 정의
2단계: plugin.json 작성
// .claude-plugin/plugin.json
{
"name": "my-first-plugin",
"version": "1.0.0",
"description": "나의 첫 번째 Claude Code 플러그인"
}
3단계: 명령어 파일 작성
# commands/hello.md
---
description: 팀원들에게 인사하는 명령어
---
# /hello 명령어
사용자에게 친근하게 인사하고, 오늘 도와줄 수 있는 작업 목록을 제안해주세요.
## 인사 스타일
- 친근하고 전문적인 톤
- 이모지는 사용하지 않음
- 간결하게 3-4줄 이내로
## 제안할 작업 예시
- 코드 리뷰
- 버그 수정
- 새 기능 구현
- 문서 작성
4단계: 플러그인 설치 및 테스트
# 로컬 플러그인 설치
claude plugin install ./my-first-plugin
# Claude Code 실행 후 명령어 테스트
claude
> /hello
/hello 명령어가 작동한다면 첫 플러그인 개발에 성공한 것이다. 이제 아래 컴포넌트 레퍼런스를 참고해서 더 복잡한 기능을 추가해보자.
플러그인 컴포넌트 상세 레퍼런스
1. Commands (명령어)
- 반복 작업 자동화:
/deploy,/test같은 자주 쓰는 명령 - 팀 표준화: 모든 팀원이 동일한 방식으로 작업하도록
- 복잡한 프롬프트 저장: 긴 지시사항을 명령어로 저장
| 항목 | 내용 |
|---|---|
| 위치 | 플러그인 루트의 commands/ 디렉토리 |
| 파일 형식 | 프론트매터가 있는 Markdown 파일 (.md) |
| 명령어 이름 | 파일명이 곧 명령어 이름 (예: deploy.md → /deploy) |
| 호출 방식 | 사용자가 /명령어로 직접 호출 |
실전 예시 - 배포 명령어:
# commands/deploy.md
---
description: 프로덕션 배포 체크리스트 실행
allowed-tools: ["Bash", "Read"]
---
# 배포 전 체크리스트
다음 항목을 순서대로 확인하고 실행하세요:
1. **테스트 실행**: `npm test` 실행하고 모든 테스트 통과 확인
2. **빌드 확인**: `npm run build` 성공 여부 확인
3. **버전 확인**: package.json 버전이 올바른지 확인
4. **변경사항 요약**: 이번 배포에 포함된 주요 변경사항 정리
## 주의사항
- main 브랜치에서만 배포
- 금요일 오후에는 배포 자제
2. Agents (에이전트)
- 전문 분야 위임: 보안 검토, 성능 분석 등 특화된 작업
- 자동 판단 필요: 작업 컨텍스트에 따라 Claude가 알아서 호출
- 복잡한 멀티스텝 작업: 여러 단계를 거치는 분석 작업
| 항목 | 내용 |
|---|---|
| 위치 | agents/ 디렉토리 |
| 파일 형식 | 에이전트 기능을 설명하는 프론트매터가 있는 Markdown |
| 호출 방식 | Claude가 작업 컨텍스트에 따라 자동 호출 |
| Commands와 차이 | Commands는 사용자가 호출, Agents는 Claude가 판단해서 호출 |
실전 예시 - 보안 검토 에이전트:
# agents/security-reviewer.md
---
description: 코드의 보안 취약점을 분석하는 전문 에이전트
capabilities: ["security-analysis", "vulnerability-detection", "owasp-check"]
---
# Security Reviewer Agent
이 에이전트는 코드의 보안 취약점을 분석합니다.
## 전문 분야
- SQL Injection 탐지
- XSS 취약점 분석
- 인증/인가 로직 검토
- 민감 정보 노출 확인
## 언제 호출되나요?
- 사용자가 "보안 검토해줘"라고 요청할 때
- 인증 관련 코드를 작성할 때
- API 엔드포인트를 구현할 때
## 출력 형식
발견된 취약점을 심각도(Critical/High/Medium/Low)와 함께 보고합니다.
3. Skills (스킬)
- 도메인 전문 지식: PDF 처리, 엑셀 조작, 특정 프레임워크 지식
- 도구 + 지식 조합: 참조 문서와 스크립트가 함께 필요한 경우
- 재사용 가능한 기능: 여러 프로젝트에서 공통으로 사용
| 항목 | 내용 |
|---|---|
| 위치 | skills/ 디렉토리 내 하위 디렉토리 |
| 필수 파일 | SKILL.md 파일 (대문자) |
| 추가 파일 | 참조 문서, 스크립트, 템플릿 등 자유롭게 포함 가능 |
| 호출 방식 | Claude가 작업 컨텍스트에 따라 자율적으로 호출 |
스킬 디렉토리 구조:
skills/
├── pdf-processor/
│ ├── SKILL.md # 필수: 스킬 정의
│ ├── reference.md # 선택: 참조 문서
│ └── scripts/ # 선택: 유틸리티 스크립트
│ └── extract-text.py
└── code-reviewer/
├── SKILL.md
└── checklists/ # 선택: 체크리스트 템플릿
└── security.md
4. Hooks (훅)
- 자동 포매팅: 파일 저장 시 코드 포맷터 실행
- 검증: 커밋 전 린트 체크
- 알림: 작업 완료 시 Slack 알림
- 로깅: 모든 도구 사용 기록
| 항목 | 내용 |
|---|---|
| 위치 | hooks/hooks.json 또는 plugin.json에 인라인 |
| 기능 | Claude Code 이벤트에 자동 응답 |
| 실행 | 이벤트에 의해 트리거되는 셸 명령어나 스크립트 |
사용 가능한 훅 이벤트:
| 이벤트 | 언제 발생? | 사용 예시 |
|---|---|---|
PreToolUse |
Claude가 도구 사용 전 | 위험한 명령어 차단 |
PostToolUse |
도구 실행 성공 후 | 파일 저장 시 포맷팅 |
UserPromptSubmit |
사용자 프롬프트 제출 시 | 프롬프트 로깅 |
Notification |
Claude Code 알림 전송 시 | Slack 알림 연동 |
SessionStart/End |
세션 시작/종료 시 | 환경 초기화/정리 |
훅 타입:
| 타입 | 설명 | 사용 예시 |
|---|---|---|
command |
셸 명령어나 스크립트 실행 | prettier --write |
prompt |
LLM으로 프롬프트 평가 | 보안 검증 프롬프트 |
agent |
도구가 있는 에이전트 검증자 실행 | 복잡한 검증 로직 |
실전 예시 - 코드 저장 시 자동 포맷팅:
// hooks/hooks.json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/format-code.sh"
}
]
}
]
}
}
5. MCP Servers
- 외부 API 연동: Jira, Slack, GitHub API 등
- 데이터베이스 접근: PostgreSQL, MongoDB 등
- 커스텀 도구: 내부 시스템 연동
| 항목 | 내용 |
|---|---|
| 위치 | .mcp.json 또는 plugin.json에 인라인 |
| 기능 | Claude Code를 외부 도구 및 서비스와 연결 |
| 시작 | 플러그인 활성화 시 자동 시작 |
MCP 서버 설정 예시:
// .mcp.json
{
"mcpServers": {
"plugin-database": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
"env": {
"DB_PATH": "${CLAUDE_PLUGIN_ROOT}/data"
}
}
}
}
6. LSP Servers
- 실시간 진단: 타입 에러, 문법 오류 즉시 감지
- 코드 탐색: 정의로 이동, 참조 찾기
- 언어별 인텔리전스: Go, Rust 등 언어 서버 연동
| 필드 | 필수 | 설명 |
|---|---|---|
command |
O | 실행할 LSP 바이너리 (PATH에 있어야 함) |
extensionToLanguage |
O | 파일 확장자를 언어 식별자에 매핑 |
args |
X | 명령줄 인수 |
transport |
X | stdio (기본) 또는 socket |
restartOnCrash |
X | 충돌 시 자동 재시작 |
LSP 설정 예시 - Go 언어:
// .lsp.json
{
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
},
"restartOnCrash": true
}
}
플러그인 매니페스트 스키마 (plugin.json)
모든 플러그인의 필수 파일이다. 플러그인의 이름, 버전, 어떤 컴포넌트를 포함하는지 정의한다. 위치는 .claude-plugin/plugin.json이다.
최소 필수 구성
{
"name": "plugin-name" // 이것만 있으면 됨!
}
완전한 매니페스트 예시
{
// 필수
"name": "my-team-plugin",
// 메타데이터 (선택)
"version": "1.2.0",
"description": "우리 팀을 위한 커스텀 플러그인",
"author": {
"name": "개발팀",
"email": "dev@example.com"
},
"license": "MIT",
"keywords": ["deployment", "ci-cd"],
// 컴포넌트 경로 (선택 - 기본 위치와 다를 때만)
"commands": "./custom/commands/",
"agents": "./custom/agents/",
"skills": "./custom/skills/",
"hooks": "./config/hooks.json",
"mcpServers": "./.mcp.json",
"lspServers": "./.lsp.json"
}
필드 상세 설명
| 필드 | 타입 | 설명 |
|---|---|---|
name * |
string | 플러그인 고유 이름 (필수) |
version |
string | 시맨틱 버전 (예: "2.1.0") |
description |
string | 플러그인 설명 |
commands |
string | array | 명령어 경로 (기본: commands/) |
agents |
string | array | 에이전트 경로 (기본: agents/) |
skills |
string | array | 스킬 경로 (기본: skills/) |
hooks |
string | object | 훅 설정 경로 또는 인라인 |
mcpServers |
string | object | MCP 설정 경로 또는 인라인 |
lspServers |
string | object | LSP 설정 경로 또는 인라인 |
플러그인 설치 범위 - 어디에 설치할까?
개인용인지, 팀 공유용인지, 프로젝트 전용인지에 따라 설치 범위를 선택하자.
| 범위 | 설정 파일 | 언제 사용? |
|---|---|---|
user (기본) |
~/.claude/settings.json |
개인용 - 모든 프로젝트에서 사용 |
project |
.claude/settings.json |
팀 공유 - Git으로 버전 관리됨 |
local |
.claude/settings.local.json |
프로젝트별 개인 설정 (gitignored) |
managed |
managed-settings.json |
엔터프라이즈 관리 (읽기 전용) |
# user 범위에 설치 (기본값)
claude plugin install ./my-plugin
# project 범위에 설치 (팀 공유)
claude plugin install ./my-plugin --scope project
# local 범위에 설치 (개인 + 이 프로젝트만)
claude plugin install ./my-plugin --scope local
환경 변수
${CLAUDE_PLUGIN_ROOT}: 플러그인 디렉토리의 절대 경로.
훅, MCP 서버, 스크립트에서 플러그인 내부 파일을 참조할 때 반드시 사용하자. 이렇게 하면 어디에 설치되든 올바르게 작동한다.
// 올바른 사용
{
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/format.sh"
}
// 잘못된 사용 (절대 경로)
{
"command": "/Users/me/plugins/my-plugin/scripts/format.sh" // ❌
}
플러그인 디렉토리 구조
표준 플러그인 레이아웃
my-plugin/
├── .claude-plugin/ # 메타데이터 디렉토리
│ └── plugin.json # ⭐ 필수: 플러그인 매니페스트
├── commands/ # 슬래시 명령어
│ ├── deploy.md
│ └── test.md
├── agents/ # AI 에이전트
│ ├── security-reviewer.md
│ └── code-analyzer.md
├── skills/ # 스킬 (하위 디렉토리로 구성)
│ ├── pdf-processor/
│ │ ├── SKILL.md # ⭐ 스킬 정의 (대문자)
│ │ └── scripts/
│ └── code-reviewer/
│ └── SKILL.md
├── hooks/ # 훅 설정
│ └── hooks.json
├── .mcp.json # MCP 서버 설정
├── .lsp.json # LSP 서버 설정
├── scripts/ # 유틸리티 스크립트
│ └── format-code.sh
└── README.md
CLI 명령어 레퍼런스
| 명령어 | 설명 |
|---|---|
claude plugin install <path> |
로컬 또는 마켓플레이스에서 플러그인 설치 |
claude plugin uninstall <name> |
플러그인 제거 (별칭: remove, rm) |
claude plugin enable <name> |
비활성화된 플러그인 활성화 |
claude plugin disable <name> |
제거 없이 플러그인 비활성화 |
claude plugin update <name> |
최신 버전으로 업데이트 |
claude --debug |
디버그 모드로 실행 (플러그인 로딩 상태 확인) |
설치 옵션:
# 로컬 디렉토리에서 설치
claude plugin install ./my-plugin
# 마켓플레이스에서 설치
claude plugin install formatter@my-marketplace
# 범위 지정
claude plugin install ./my-plugin --scope project # user, project, local
문제 해결 - 자주 겪는 문제와 해결 방법
문제 1: 플러그인이 로딩되지 않음
- 설치했는데 명령어가 나타나지 않음
- claude --debug에서 플러그인 관련 메시지 없음
plugin.json에 JSON 문법 오류.claude-plugin/plugin.json경로가 잘못됨name필드 누락
# JSON 문법 검증
cat .claude-plugin/plugin.json | python -m json.tool
# 디버그 모드로 확인
claude --debug
문제 2: 명령어가 나타나지 않음
- 플러그인은 로딩되는데 /mycommand가 안 됨
commands/디렉토리가 루트에 없음- Markdown 파일에 프론트매터 누락
- plugin.json에서 다른 경로를 지정했는데 해당 경로에 파일이 없음
# 디렉토리 구조 확인
ls -la ./my-plugin/commands/
# 프론트매터 확인 (파일 상단에 ---로 감싼 YAML)
head -10 ./my-plugin/commands/mycommand.md
문제 3: 훅이 실행되지 않음
- PostToolUse 훅을 설정했는데 스크립트가 실행 안 됨
원인- 스크립트에 실행 권한이 없음
${CLAUDE_PLUGIN_ROOT}대신 절대 경로 사용- hooks.json에 JSON 문법 오류
# 스크립트 실행 권한 부여
chmod +x ./my-plugin/scripts/format-code.sh
# 경로 확인 (${CLAUDE_PLUGIN_ROOT} 사용해야 함)
grep -r "CLAUDE_PLUGIN_ROOT" ./my-plugin/
문제 4: MCP 서버 연결 실패
- MCP 도구가 사용 불가
- "Server not found" 에러
${CLAUDE_PLUGIN_ROOT}변수 미사용- 서버 바이너리가 PATH에 없음
- 필요한 환경 변수 미설정
# 서버 실행 테스트
./my-plugin/servers/db-server --help
# .mcp.json에서 경로 확인
cat ./my-plugin/.mcp.json | python -m json.tool
핵심 요약 - 플러그인 개발 체크리스트
플러그인 개발 전후로 이 체크리스트를 확인하자.
| 항목 | 확인 사항 |
|---|---|
| 필수 파일 | .claude-plugin/plugin.json 존재→ 최소한 "name" 필드 필수 |
| JSON 문법 | 모든 JSON 파일 문법 검증 → python -m json.tool로 확인 |
| Markdown 프론트매터 | commands, agents, skills에 YAML 프론트매터 포함 → ---로 시작하고 끝 |
| 경로 참조 | ${CLAUDE_PLUGIN_ROOT} 사용→ 절대 경로 사용 금지 |
| 스크립트 권한 | 훅 스크립트에 실행 권한 → chmod +x script.sh |
| 버전 관리 | 시맨틱 버전 사용 (MAJOR.MINOR.PATCH) → 첫 안정 버전은 1.0.0부터 |
참고 자료
- Plugins - 플러그인 사용 가이드
- Discover plugins - 마켓플레이스 탐색
- Skills - 스킬 작성 가이드
- Hooks - 훅 상세 레퍼런스
- MCP - Model Context Protocol 가이드
'AI > Claude Code Doc(공식문서) 번역본' 카테고리의 다른 글
당신이 좋아할만한 콘텐츠
-
Claude Code 공식문서 리뷰-참고자료(Reference)[5] : Hooks 참조(Hooks reference) 2026.01.19
-
Claude Code 공식문서 리뷰-참고자료(Reference)[4] : 체크포인팅(Checkpointing) 2026.01.19
-
Claude Code 공식문서 리뷰-참고자료(Reference)[3] : 슬래시 명령어(Slash commands) 2026.01.07
-
Claude Code 공식문서 리뷰-참고자료(Reference)[2] : 대화형 모드(Interactive mode) 2026.01.07
소중한 공감 감사합니다