<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>개발가이드 on Yarang's Tech Lair</title><link>https://blog.fcoinfup.com/ko/tags/%EA%B0%9C%EB%B0%9C%EA%B0%80%EC%9D%B4%EB%93%9C/</link><description>Recent content in 개발가이드 on Yarang's Tech Lair</description><generator>Hugo -- gohugo.io</generator><language>ko</language><lastBuildDate>Mon, 23 Mar 2026 10:53:23 +0900</lastBuildDate><atom:link href="https://blog.fcoinfup.com/ko/tags/%EA%B0%9C%EB%B0%9C%EA%B0%80%EC%9D%B4%EB%93%9C/index.xml" rel="self" type="application/rss+xml"/><item><title>Claude Code 플러그인 개발 완전 가이드 — plugin.json부터 배포까지</title><link>https://blog.fcoinfup.com/ko/post/claude-code-%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8-%EA%B0%9C%EB%B0%9C-%EC%99%84%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-plugin.json%EB%B6%80%ED%84%B0-%EB%B0%B0%ED%8F%AC%EA%B9%8C%EC%A7%80/</link><pubDate>Mon, 23 Mar 2026 10:53:23 +0900</pubDate><guid>https://blog.fcoinfup.com/ko/post/claude-code-%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8-%EA%B0%9C%EB%B0%9C-%EC%99%84%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-plugin.json%EB%B6%80%ED%84%B0-%EB%B0%B0%ED%8F%AC%EA%B9%8C%EC%A7%80/</guid><description>&lt;h1 id="claude-code-플러그인-개발-완전-가이드--pluginjson부터-배포까지"&gt;Claude Code 플러그인 개발 완전 가이드 — plugin.json부터 배포까지
&lt;/h1&gt;&lt;p&gt;Claude Code CLI는 &lt;code&gt;v2.1.0&lt;/code&gt;부터 &lt;strong&gt;플러그인 시스템&lt;/strong&gt;을 공식 지원한다. skills, agents, commands, hooks 네 가지 구성 요소를 조합하면 Claude의 동작을 도구처럼 패키징하고 팀 전체에 배포할 수 있다. 이 글에서는 실제 운영 중인 &lt;code&gt;yarang-plugins&lt;/code&gt; 마켓플레이스 레포를 기반으로, 플러그인을 처음 만드는 개발자가 배포까지 완주할 수 있도록 단계별로 설명한다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="플러그인이란--claude-code-확장의-4가지-구성-요소"&gt;플러그인이란? — Claude Code 확장의 4가지 구성 요소
&lt;/h2&gt;&lt;p&gt;Claude Code 플러그인은 단순한 스크립트 번들이 아니다. 아래 네 가지 요소를 조합해 Claude의 역할과 행동을 선언적으로 정의한다.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;구성 요소&lt;/th&gt;
 &lt;th&gt;디렉토리&lt;/th&gt;
 &lt;th&gt;역할&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;skills&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;skills/&amp;lt;name&amp;gt;/SKILL.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Claude에게 특정 도메인 지식과 행동 규칙 주입&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;agents&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;agents/&amp;lt;role&amp;gt;.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;서브에이전트 페르소나 정의 (전문가 역할 부여)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;commands&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;commands/&amp;lt;verb&amp;gt;-&amp;lt;noun&amp;gt;.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/slash-command&lt;/code&gt; 단축키 등록&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;hooks&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;hooks/hooks.json&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;도구 호출 전후 자동 실행 트리거&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD
 A[사용자 요청] --&gt; B[Command /create-post]
 B --&gt; C[Skill blog-writer 로드]
 C --&gt; D[Claude 작성 실행]
 D --&gt; E{Write 도구 호출}
 E --&gt; F[Hook PostToolUse 실행]
 F --&gt; G[SEO 자동 검토]
 G --&gt; H[최종 결과물]&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="1단계-디렉토리-구조-만들기"&gt;1단계: 디렉토리 구조 만들기
&lt;/h2&gt;&lt;p&gt;플러그인 이름은 반드시 &lt;code&gt;&amp;lt;domain&amp;gt;-&amp;lt;function&amp;gt;&lt;/code&gt; 형식의 &lt;strong&gt;kebab-case&lt;/strong&gt;로 작성한다. 예: &lt;code&gt;blog-writer&lt;/code&gt;, &lt;code&gt;domain-checker&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;plugins/blog-writer/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── .claude-plugin/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── plugin.json ← 플러그인 메타데이터 (필수)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── skills/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── blog-writer/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── SKILL.md ← 스킬 파일명은 SKILL.md 고정
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── agents/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── editor.md ← &amp;lt;role&amp;gt;.md 형식
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── commands/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── create-post.md ← &amp;lt;verb&amp;gt;-&amp;lt;noun&amp;gt;.md 형식
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── hooks/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── hooks.json ← hooks는 여기서만 선언
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── README.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;파일 명명 규칙을 어기면 Claude Code가 해당 파일을 인식하지 못한다.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="2단계-pluginjson-작성--메타데이터의-핵심"&gt;2단계: plugin.json 작성 — 메타데이터의 핵심
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;plugin.json&lt;/code&gt;은 플러그인의 신원증명서다. &lt;code&gt;skills&lt;/code&gt;, &lt;code&gt;commands&lt;/code&gt;, &lt;code&gt;agents&lt;/code&gt; 필드에 디렉토리 경로만 지정하면 내부 파일을 자동으로 탐색한다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;blog-writer&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;SEO 최적화 블로그 글을 구조적으로 작성하는 스킬 플러그인&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;author&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;yarang&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;https://github.com/yarang&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;license&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;MIT&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;keywords&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;blog&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;seo&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;writing&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;skills&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;./skills/&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;commands&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;./commands/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;주의사항 3가지:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;version&lt;/code&gt; 필드를 &lt;code&gt;plugin.json&lt;/code&gt;에 넣지 않는다 — 내부 플러그인은 &lt;code&gt;marketplace.json&lt;/code&gt;에서만 버전을 선언한다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hooks&lt;/code&gt; 필드를 여기에 명시하지 않는다 — &lt;code&gt;v2.1+&lt;/code&gt;는 &lt;code&gt;hooks/hooks.json&lt;/code&gt;을 자동으로 감지한다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;../&lt;/code&gt;로 플러그인 디렉토리 밖을 참조하는 경로는 금지다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="3단계-skillmd-작성--claude의-전문성-주입"&gt;3단계: SKILL.md 작성 — Claude의 전문성 주입
&lt;/h2&gt;&lt;p&gt;스킬은 Claude에게 &lt;strong&gt;특정 도메인의 행동 규칙과 지식&lt;/strong&gt;을 주입하는 마크다운 문서다. &lt;code&gt;blog-writer&lt;/code&gt; 플러그인의 &lt;code&gt;SKILL.md&lt;/code&gt;를 예시로 본다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# Blog Writer Skill
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;주어진 주제로 SEO 최적화된 블로그 포스트를 작성한다.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;## 구조
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;1.&lt;/span&gt; &lt;span style="font-weight:bold"&gt;**제목 (H1)**&lt;/span&gt;: 키워드 포함, 클릭 유도
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;2.&lt;/span&gt; &lt;span style="font-weight:bold"&gt;**서론**&lt;/span&gt;: 독자 문제 제기, 글에서 다룰 내용 안내
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;3.&lt;/span&gt; &lt;span style="font-weight:bold"&gt;**본문**&lt;/span&gt;: H2/H3 소제목으로 구조화, 핵심 키워드 자연스럽게 포함
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;4.&lt;/span&gt; &lt;span style="font-weight:bold"&gt;**결론**&lt;/span&gt;: 핵심 요약, 행동 촉구(CTA)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;## 지침
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 문장은 명확하게
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 단락은 충분히 설명을 작성
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 독자가 검색할 키워드를 제목과 첫 단락에 포함
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 실용적인 정보 위주로 작성
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 다이어그램도 포함
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;SKILL.md는 Claude가 해당 스킬로 호출될 때 &lt;strong&gt;시스템 프롬프트처럼 주입&lt;/strong&gt;된다. 행동 지침이 구체적일수록 출력 품질이 높아진다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="4단계-agents--전문가-서브에이전트-정의"&gt;4단계: agents/ — 전문가 서브에이전트 정의
&lt;/h2&gt;&lt;p&gt;에이전트 파일은 Claude Code의 서브에이전트에 페르소나를 부여한다. YAML frontmatter의 &lt;code&gt;name&lt;/code&gt;과 &lt;code&gt;description&lt;/code&gt;이 핵심이다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;name: blog-editor
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;description: |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 블로그 편집 전문 에이전트.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 글의 문체, 구조, SEO 최적화를 검토하고 개선안을 제안한다.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 사용 시점: 글 검토, 편집, 퇴고 요청 시.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# Technical Blog Editor Agent
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;당신은 전문 기술 블로그 편집자다. 아래 기준으로 글을 검토한다:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; Mermaid 다이어그램으로 동작 방식 시각화
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; SEO 키워드 밀도 확인
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;-&lt;/span&gt; 참고 자료(References) 포함 여부 검증
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;description&lt;/code&gt;에 &lt;strong&gt;&amp;ldquo;사용 시점&amp;rdquo;&lt;/strong&gt; 을 명시하면 Claude가 자동으로 적절한 시점에 해당 에이전트를 선택한다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="5단계-commands--슬래시-커맨드-등록"&gt;5단계: commands/ — 슬래시 커맨드 등록
&lt;/h2&gt;&lt;p&gt;커맨드 파일은 &lt;code&gt;/blog-writer:create-post&lt;/code&gt; 같은 슬래시 커맨드를 등록한다. frontmatter로 허용 도구와 설명을 제한할 수 있다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;description: SEO 최적화 블로그 포스트 생성
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;allowed-tools: Read, Write, WebFetch
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# /blog-writer:create-post
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ARGUMENTS에서 주제를 받아 SEO 최적화된 블로그 포스트를 작성한다.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;주제가 없으면 사용자에게 주제를 물어본다.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;blog-writer 스킬을 사용해 포스트를 작성하고, 완료 후 파일로 저장 여부를 확인한다.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$ARGUMENTS&lt;/code&gt;: 커맨드 뒤에 오는 인자를 자동으로 바인딩한다. &lt;code&gt;/create-post AI 에이전트 설계&lt;/code&gt;처럼 사용.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;allowed-tools&lt;/code&gt;: 보안을 위해 커맨드가 사용할 수 있는 도구를 명시적으로 제한한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="6단계-hookshooksjson--자동-트리거-설정"&gt;6단계: hooks/hooks.json — 자동 트리거 설정
&lt;/h2&gt;&lt;p&gt;훅은 특정 도구 호출 전후에 Claude가 자동으로 실행할 프롬프트나 명령을 정의한다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;hooks&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;PostToolUse&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;matcher&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;Write&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;hooks&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;prompt&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;prompt&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;작성된 파일을 확인하고 SEO 관점에서 제목과 첫 단락을 검토하라.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Write&lt;/code&gt; 도구가 실행된 직후 SEO 검토를 자동으로 트리거하는 예시다. 훅 이벤트는 &lt;code&gt;PreToolUse&lt;/code&gt;, &lt;code&gt;PostToolUse&lt;/code&gt;, &lt;code&gt;Notification&lt;/code&gt;, &lt;code&gt;Stop&lt;/code&gt; 등을 지원한다.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;sequenceDiagram
 participant U as 사용자
 participant C as Claude
 participant H as Hook Engine

 U-&gt;&gt;C: /create-post 실행
 C-&gt;&gt;C: Write 도구 호출
 C-&gt;&gt;H: PostToolUse 이벤트 발생
 H-&gt;&gt;C: SEO 검토 프롬프트 주입
 C-&gt;&gt;U: SEO 검토 결과 반환&lt;/pre&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;code&gt;hooks&lt;/code&gt; 필드는 &lt;code&gt;plugin.json&lt;/code&gt;에 선언하지 않는다. &lt;code&gt;hooks/hooks.json&lt;/code&gt; 파일만 있으면 자동으로 인식된다 (v2.1.0+).&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="7단계-marketplacejson에-플러그인-등록"&gt;7단계: marketplace.json에 플러그인 등록
&lt;/h2&gt;&lt;p&gt;내부 플러그인은 마켓플레이스 루트의 &lt;code&gt;.claude-plugin/marketplace.json&lt;/code&gt;에 등록한다. &lt;strong&gt;&lt;code&gt;version&lt;/code&gt;은 여기서만 선언&lt;/strong&gt;한다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;yarang-plugins&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;plugins&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;blog-writer&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;SEO 최적화 블로그 글을 구조적으로 작성하는 스킬 플러그인&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;version&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;1.1.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;keywords&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;blog&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;seo&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;writing&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;source&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;source&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;relative&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;path&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;./plugins/blog-writer&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;domain-checker&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;도메인 가용성 확인&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;keywords&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;domain&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;rdap&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;whois&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;source&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;source&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;github&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;repo&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;yarang/skill-domain-checker&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;ref&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;v1.2.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;외부 레포 플러그인은 &lt;code&gt;source.source&lt;/code&gt;를 &lt;code&gt;&amp;quot;github&amp;quot;&lt;/code&gt;으로 설정하고 &lt;code&gt;repo&lt;/code&gt;와 &lt;code&gt;ref&lt;/code&gt;(태그/브랜치)를 지정한다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="로컬-테스트--배포-워크플로"&gt;로컬 테스트 → 배포 워크플로
&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR
 A[플러그인 작성] --&gt; B[로컬 테스트]
 B --&gt; C{동작 확인}
 C -- 실패 --&gt; A
 C -- 성공 --&gt; D[marketplace.json 등록]
 D --&gt; E[GitHub push]
 E --&gt; F[팀원 설치]&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 1. 로컬 테스트 (설치 없이 즉시 확인)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;claude --plugin-dir ./plugins/blog-writer
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 2. 마켓플레이스 카탈로그 새로고침&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;claude plugin marketplace update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 3. 개인 설치 (user scope, 기본값)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;claude plugin install blog-writer@yarang-plugins
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 4. 팀 공유 설치 (project scope — .claude/settings.json에 기록)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;claude plugin install blog-writer@yarang-plugins --scope project
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="자주-하는-실수-체크리스트"&gt;자주 하는 실수 체크리스트
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;항목&lt;/th&gt;
 &lt;th&gt;올바른 방법&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;스킬 파일 이름&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;SKILL.md&lt;/code&gt; (대문자 고정)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;커맨드 파일 이름&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;verb&amp;gt;-&amp;lt;noun&amp;gt;.md&lt;/code&gt; (예: &lt;code&gt;create-post.md&lt;/code&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;에이전트 파일 이름&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;role&amp;gt;.md&lt;/code&gt; (예: &lt;code&gt;editor.md&lt;/code&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;version 위치&lt;/td&gt;
 &lt;td&gt;내부 플러그인 → &lt;code&gt;marketplace.json&lt;/code&gt;만 / 외부 플러그인 → &lt;code&gt;plugin.json&lt;/code&gt;만&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hooks 위치&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;hooks/hooks.json&lt;/code&gt; (plugin.json에 넣지 않음)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;경로 탈출&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;../&lt;/code&gt; 사용 금지&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="결론"&gt;결론
&lt;/h2&gt;&lt;p&gt;Claude Code 플러그인은 &lt;strong&gt;선언적 마크다운&lt;/strong&gt;으로 Claude의 동작을 패키징하는 강력한 시스템이다. &lt;code&gt;plugin.json&lt;/code&gt;으로 메타데이터를 정의하고, &lt;code&gt;SKILL.md&lt;/code&gt;로 전문성을 주입하고, &lt;code&gt;commands/&lt;/code&gt;로 단축키를 만들고, &lt;code&gt;hooks/hooks.json&lt;/code&gt;으로 자동화 트리거를 걸면 — 팀 전체가 동일한 워크플로를 공유할 수 있다.&lt;/p&gt;
&lt;p&gt;지금 바로 시작하려면:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;plugins/&amp;lt;name&amp;gt;/&lt;/code&gt; 디렉토리를 만들고&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin.json&lt;/code&gt;과 &lt;code&gt;SKILL.md&lt;/code&gt;를 작성한 뒤&lt;/li&gt;
&lt;li&gt;&lt;code&gt;claude --plugin-dir ./plugins/&amp;lt;name&amp;gt;&lt;/code&gt;으로 로컬 테스트를 돌려보자.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;플러그인 하나가 팀의 반복 작업 수십 개를 자동화한다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="references"&gt;References
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.anthropic.com/claude-code/plugins" target="_blank" rel="noopener"
 &gt;Claude Code Plugin System Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;yarang/yarang-plugins — &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;docs/PLUGIN_SPEC.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/anthropics/claude-code/releases" target="_blank" rel="noopener"
 &gt;Claude Code v2.1 Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>