본문으로 건너뛰기

1. 플러그인 vs 단독 설정

  • Claude Code에서 커스텀 스킬, 에이전트, 훅을 넣는 방법은 단독 설정(.claude/)과 플러그인 두 가지입니다.
  • 단독 설정은 한 프로젝트·개인용, 플러그인은 팀·커뮤니티 공유와 버전 관리·마켓플레이스 배포에 적합합니다.
방식스킬 이름 예적합한 경우
단독 설정 (.claude/ 디렉터리)/hello개인 워크플로, 프로젝트 전용 커스터마이징, 빠른 실험
플러그인 (.claude-plugin/plugin.json이 있는 디렉터리)/plugin-name:hello팀·커뮤니티와 공유, 버전 관리된 배포, 여러 프로젝트에서 재사용

단독 설정을 쓸 때

  • 한 프로젝트만 위한 커스터마이징
  • 공유할 필요 없는 개인 설정
  • 패키징 전 스킬·훅 실험
  • /hello, /deploy처럼 짧은 스킬 이름을 쓸 때

플러그인을 쓸 때

  • 팀이나 커뮤니티와 기능 공유
  • 여러 프로젝트에서 같은 스킬·에이전트 사용
  • 버전 관리와 쉬운 업데이트가 필요한 확장
  • 마켓플레이스를 통한 배포
  • 스킬 이름에 네임스페이스가 붙어도 괜찮을 때 (플러그인 간 이름 충돌 방지)
실험 → 공유 순서

먼저 .claude/에서 단독 설정으로 빠르게 반복하고, 공유할 준비가 되면 기존 설정을 플러그인으로 변환하세요.

2. 퀵스타트

  • 플러그인에 대해서 알아보기 위해 직접 플러그인을 만들어 보겠습니다.
  • 커스텀 스킬이 있는 플러그인을 만듭니다.
  • 매니페스트 작성, 스킬 추가, --plugin-dir로 로컬 테스트까지 진행합니다.

2.1 사전 요구사항

  • Claude Code 설치 및 인증 완료
  • Claude Code 1.0.33 이상 (claude --version으로 확인)
/plugin 명령이 안 보일 때

/plugin 명령이 보이지 않으면 Claude Code를 최신 버전으로 업데이트하세요. Troubleshooting에서 업그레이드 방법을 확인할 수 있습니다.

2.2 첫 번째 플러그인 만들기

플러그인 디렉터리 만들기

  • 플러그인은 각각 자신의 디렉터리에 두고, 그 안에 매니페스트와 스킬·에이전트·훅을 넣습니다.
mkdir my-first-plugin

플러그인 매니페스트 만들기

  • .claude-plugin/plugin.json이 플러그인 식별 정보(이름, 설명, 버전)를 정의합니다.
  • Claude Code는 이 메타데이터로 플러그인 매니저에 표시합니다.
  • 플러그인 폴더 안에 .claude-plugin 디렉터리를 만들고, 그 안에 plugin.json을 둡니다.
mkdir my-first-plugin/.claude-plugin

my-first-plugin/.claude-plugin/plugin.json을 아래 내용으로 만듭니다.

{
"name": "my-first-plugin",
"description": "기초를 익히기 위한 인사 플러그인",
"version": "1.0.0",
"author": {
"name": "Your Name"
}
}
필드용도
name고유 식별자이자 스킬 네임스페이스. 스킬은 이 이름으로 접두사가 붙음 (예: /my-first-plugin:hello)
description플러그인 찾기·설치 시 플러그인 매니저에 표시됨
version시맨틱 버저닝으로 릴리스 관리
author선택. 출처 표시용

스킬 추가하기

  • 스킬은 skills/ 디렉터리에 둡니다.
  • 스킬 하나 = SKILL.md를 포함한 폴더 하나이며, 폴더 이름이 스킬 이름이 되고 플러그인 네임스페이스가 접두사로 붙습니다 (my-first-plugin 안의 hello//my-first-plugin:hello).
mkdir -p my-first-plugin/skills/hello

my-first-plugin/skills/hello/SKILL.md를 아래 내용으로 만듭니다.

---
description: 친절한 메시지로 사용자에게 인사
disable-model-invocation: true
---

사용자에게 따뜻하게 인사하고, 오늘 무엇을 도와드릴지 물어보세요.

플러그인 테스트하기

  • --plugin-dir 플래그로 플러그인을 로드해 Claude Code를 실행합니다.
claude --plugin-dir ./my-first-plugin

실행된 뒤 새 스킬을 사용해 봅니다.

/my-first-plugin:hello

Claude가 인사로 응답합니다. /help를 실행하면 플러그인 네임스페이스 아래에 해당 스킬이 나옵니다.

네임스페이스를 쓰는 이유

플러그인 스킬은 항상 네임스페이스가 붙습니다 (예: /greet:hello). 여러 플러그인에 같은 이름의 스킬이 있어도 충돌하지 않습니다. 접두사를 바꾸려면 plugin.jsonname 필드를 수정하면 됩니다.

스킬에 인자 추가하기

  • 사용자 입력을 받으려면 $ARGUMENTS 플레이스홀더를 사용합니다.
  • 스킬 이름 뒤에 사용자가 입력한 텍스트가 여기로 들어갑니다.

SKILL.md를 다음처럼 수정합니다.

---
description: 이름을 넣어 맞춤 인사
---

# Hello 스킬

"$ARGUMENTS"라는 이름의 사용자에게 따뜻하게 인사하고, 오늘 무엇을 도와드릴지 물어보세요. 인사는 개인적이고 격려가 되도록 하세요.

변경 사항을 반영하려면 /reload-plugins를 실행한 뒤, 이름을 넣어 스킬을 호출해 봅니다.

/my-first-plugin:hello Alex
  • Claude가 이름을 넣어 인사합니다.
  • 스킬에 인자 넘기는 방법은 Skills를 참고하세요.

퀵스타트 결과

  • 플러그인 매니페스트 (.claude-plugin/plugin.json): 플러그인 메타데이터
  • 스킬 디렉터리 (skills/): 커스텀 스킬
  • 스킬 인자 ($ARGUMENTS): 동적 동작을 위한 사용자 입력
--plugin-dir 활용

--plugin-dir은 개발·테스트에 유용합니다. 다른 사람과 공유할 준비가 되면 플러그인 마켓플레이스 만들기 및 배포를 참고하세요.

3. 플러그인 구조 개요

  • 스킬만 넣은 플러그인을 만들었지만, 플러그인에는 커스텀 에이전트, 훅, MCP 서버, LSP 서버 등 더 넣을 수 있습니다.
흔한 실수

commands/, agents/, skills/, hooks/.claude-plugin/ 에 두지 마세요. .claude-plugin/ 안에는 plugin.json만 둡니다. 나머지 디렉터리는 모두 플러그인 루트에 둡니다.

디렉터리/파일위치용도
.claude-plugin/플러그인 루트plugin.json 매니페스트 (구성 요소가 기본 위치를 쓰면 선택적)
commands/플러그인 루트마크다운 파일로 된 슬래시 명령
agents/플러그인 루트커스텀 에이전트 정의
skills/플러그인 루트SKILL.md가 있는 Agent Skills
hooks/플러그인 루트hooks.json으로 이벤트 핸들러
.mcp.json플러그인 루트MCP 서버 설정
.lsp.json플러그인 루트코드 인텔리전스용 LSP 서버 설정
settings.json플러그인 루트플러그인 활성화 시 적용되는 기본 설정
다음 단계

에이전트, 훅, MCP 서버, LSP 서버를 더 넣고 싶다면 더 복잡한 플러그인 개발로 넘어가세요. 기술 명세 전체는 Plugins reference를 참고하세요.

4. 더 복잡한 플러그인 개발

  • 기본 플러그인에 익숙해졌다면, 더 정교한 확장을 만들 수 있습니다.

4.1 플러그인에 스킬 추가하기

  • 플러그인에는 Agent Skills를 넣어 Claude 능력을 확장할 수 있습니다.
  • 스킬은 모델이 호출하며, 작업 맥락에 따라 Claude가 자동으로 사용합니다.
  • 플러그인 루트에 skills/ 디렉터리를 만들고, SKILL.md가 들어 있는 스킬 폴더를 추가합니다.
my-plugin/
├── .claude-plugin/
│ └── plugin.json
└── skills/
└── code-review/
└── SKILL.md
  • SKILL.md에는 name, description 필드가 있는 프론트매터와 그다음 지침이 필요합니다.
---
name: code-review
description: 모범 사례와 잠재적 이슈를 위해 코드를 검토합니다. 코드 리뷰, PR 확인, 코드 품질 분석 시 사용합니다.
---

코드 검토 시 다음을 확인하세요:
1. 코드 구조와 조직
2. 에러 처리
3. 보안 이슈
4. 테스트 커버리지
  • 플러그인 설치 후 /reload-plugins를 실행하면 스킬이 로드됩니다.
  • 점진적 공개, 도구 제한 등은 Agent Skills를 참고하세요.

4.2 플러그인에 LSP 서버 추가하기

일반 언어는 공식 플러그인 사용

TypeScript, Python, Rust처럼 흔한 언어는 공식 마켓플레이스의 미리 만든 LSP 플러그인을 설치하세요. 공식으로 지원하지 않는 언어를 쓸 때만 커스텀 LSP 플러그인을 만드세요.

  • LSP(Language Server Protocol) 플러그인은 Claude에 실시간 코드 인텔리전스를 제공합니다.
  • 공식 LSP 플러그인이 없는 언어를 지원하려면 플러그인 루트에 .lsp.json을 추가해 직접 만들 수 있습니다.
{
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
}
}
}
  • 플러그인을 설치하는 사용자는 해당 언어 서버 바이너리를 본인 머신에 설치해 두어야 합니다.
  • LSP 설정 옵션 전체는 LSP servers를 참고하세요.

4.3 플러그인과 함께 기본 설정 배포하기

  • 플러그인 루트에 settings.json을 두면, 플러그인 활성화 시 적용할 기본 구성을 넣을 수 있습니다.
  • 현재는 agent 키만 지원합니다.
  • agent를 설정하면 플러그인의 커스텀 에이전트 중 하나가 메인 스레드로 활성화되고, 그 에이전트의 시스템 프롬프트, 도구 제한, 모델이 적용됩니다.
  • 플러그인으로 Claude Code의 기본 동작을 바꿀 수 있습니다.
{
"agent": "security-reviewer"
}
  • 이 예는 플러그인 agents/에 정의된 security-reviewer 에이전트를 활성화합니다.
  • settings.json의 설정이 plugin.jsonsettings보다 우선하며, 알 수 없는 키는 무시됩니다.

복잡한 플러그인 구성하기

  • 구성 요소가 많으면 기능별로 디렉터리를 나눕니다.
  • Plugin directory structure에서 레이아웃과 패턴을 참고하세요.

로컬에서 플러그인 테스트하기

  • 개발 중에는 --plugin-dir 플래그로 플러그인을 테스트합니다.
  • 설치 없이 해당 디렉터리의 플러그인을 직접 로드합니다.
  • --plugin-dir으로 준 플러그인 이름이 이미 설치된 마켓플레이스 플러그인과 같으면, 그 세션에서는 로컬 복사본이 우선합니다.
claude --plugin-dir ./my-plugin
  • 이미 설치된 플러그인을 수정해서 테스트할 때 유용합니다.
  • 관리형 설정으로 강제 활성화된 마켓플레이스 플러그인만 이 방식으로 덮어쓸 수 없습니다.
  • 플러그인을 수정한 뒤 /reload-plugins를 실행하면 재시작 없이 반영됩니다.
  • 명령, 스킬, 에이전트, 훅, MCP·LSP 서버가 다시 로드됩니다.

확인할 항목

  • /plugin-name:skill-name으로 스킬 실행
  • /agents에 에이전트가 보이는지 확인
  • 훅이 기대대로 동작하는지 확인
여러 플러그인 동시 로드

플래그를 여러 번 써서 한 번에 여러 플러그인을 로드할 수 있습니다.

claude --plugin-dir ./plugin-one --plugin-dir ./plugin-two

플러그인 문제 디버깅하기

  1. 구조 확인: 디렉터리가 플러그인 루트에 있는지, .claude-plugin/ 안에 있지 않은지 확인
  2. 구성 요소별 테스트: 명령, 에이전트, 훅을 각각 테스트
  3. 검증·디버깅 도구: Debugging and development tools에서 CLI와 문제 해결 방법 참고

플러그인 공유하기

공식 마켓플레이스 제출

기술 명세·디버깅·배포

기술 명세 전체, 디버깅 방법, 배포 전략은 Plugins reference를 참고하세요.

5. 기존 설정을 플러그인으로 변환하기

  • 이미 .claude/에 스킬이나 훅이 있다면, 공유와 배포를 위해 플러그인으로 옮길 수 있습니다.

5.1 마이그레이션 단계

  1. 플러그인 구조 만들기
    • 새 플러그인 디렉터리를 만듭니다.
    • 매니페스트 파일 my-plugin/.claude-plugin/plugin.json을 만듭니다.
mkdir -p my-plugin/.claude-plugin
{
"name": "my-plugin",
"description": "단독 설정에서 옮긴 플러그인",
"version": "1.0.0"
}
  1. 기존 파일 복사하기
    • 기존 설정을 플러그인 디렉터리로 복사합니다.
# 명령 복사
cp -r .claude/commands my-plugin/

# 에이전트 복사 (있는 경우)
cp -r .claude/agents my-plugin/

# 스킬 복사 (있는 경우)
cp -r .claude/skills my-plugin/
  1. 훅 마이그레이션하기
    • 설정에 훅이 있다면 훅 디렉터리를 만듭니다.
    • my-plugin/hooks/hooks.json을 만들고 .claude/settings.json 또는 settings.local.jsonhooks 객체를 그대로 복사합니다. 훅 명령은 stdin으로 JSON을 받으므로, 파일 경로를 쓰려면 jq로 추출할 수 있습니다.
mkdir my-plugin/hooks
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npm run lint:fix" }]
}
]
}
}
  1. 마이그레이션한 플러그인 테스트하기
    • 플러그인을 로드해 모든 구성 요소가 동작하는지 확인합니다.
claude --plugin-dir ./my-plugin
  • 명령 실행, /agents에 에이전트 표시, 훅 발동을 각각 확인합니다.

5.2 마이그레이션 시 바뀌는 것

단독 설정 (.claude/)플러그인
한 프로젝트에서만 사용마켓플레이스로 공유 가능
.claude/commands/에 파일plugin-name/commands/에 파일
settings.json에 훅hooks/hooks.json에 훅
공유 시 수동 복사/plugin install로 설치
중복 제거

마이그레이션 후 .claude/에 있던 원본 파일은 제거해도 됩니다. 로드 시 플러그인 버전이 우선합니다.

6. 다음 단계

  • Claude Code 플러그인 구조를 파악했다면, 목적에 맞는 경로를 선택하면 됩니다.

6.1 플러그인 사용자

6.2 플러그인 개발자


출처: Create plugins