Claude Code 응용편 정리 3 (Chapter #11~#15): mods, 상태 표시줄, 플러그인으로 확장하여 배포하기
요약
본 문서는 Claude Code의 스킬(skill)과 hooks를 활용하여 개발 환경을 확장하고 배포하는 방법을 안내합니다. mods, 상태 표시줄, 플러그인 등을 통해 외부 도구와 화면을 추가하거나, 이를 모아서 체계적으로 관리하고 측정할 수 있는 고급 기능을 다룹니다.
핵심 포인트
- mods: Claude Code의 모양과 움직임을 바꾸는 작은 플러그인입니다.
- 플러그인을 활용하여 스킬과 hooks를 통합 배포하고 테스트할 수 있습니다.
- 로컬 리포지토리와 전역 설정 폴더에 따라 적용 범위가 다릅니다.
- Claude Code 사용 시 '신뢰' 승낙 후 hooks나 plugin eval이 작동합니다.
Claude Code의 스킬(skill)이나 hooks를 사용하기 시작하고 화면을 추가하거나 만든 것을 배포하고 싶은 분들을 위한 글입니다.
응용편 영상 #11~#15의 기능을 어려움에 따라 선택할 수 있도록 정리했습니다. 대상은 mods, 상태 표시줄(status line), 플러그인, claude-code-setup, claude plugin eval입니다. 이 글을 다 읽으면 자신에게 맞는 것을 골라 첫 단계를 밟을 수 있습니다.
5가지 기능은 '외부 도구와 화면 추가하기'와 '플러그인으로 모아서 배포하고, 선택하고, 측정하기'의 두 계통입니다. 모두 작은 연습용 리포지토리에서 실제로 실행해 보고 돌아온 화면으로 확인했습니다.
#1~#5는 그 1에, #6~#10은 그 2에 정리되어 있습니다.
시리즈 목차
응용편 전체 회차입니다. #1~#5는 그 1, #6~#10은 그 2, #11부터가 그 3이며, 각 항목 끝에 (그 1)~(그 3)이라고 적혀 있습니다. 제목 끝의 '영상 #N'은 영상 회차 번호이며, 아래 영상 목록과 대응합니다.
1. 절차와 규칙을 작성해 두기
2. 일을 나누어 맡기기
3. 대화를 오가며 화면을 열지 않고 움직이기
- #7 /resume 및 /branch: 이름으로 돌아가거나, 원본을 남기고 분기하기 (그 2)
- #8 claude -p: 정해진 요청을 한 줄로 부탁하기 (그 2)
- #9 /loop: 대화를 열어둔 동안 같은 확인을 반복시키기 (그 2)
4. 외부 도구와 화면 추가하기
5. 플러그인으로 모아서 배포하고, 선택하고, 측정하기
- #14 플러그인: 스킬과 hooks를 모아서 배포하기 (그 3)
- #15 claude-code-setup: 무엇을 넣을지 제안받기 (그 3)
- #11 claude plugin eval: 추가된 스킬이 작동하는지 점차적으로 보기 (그 3)
전제 조건: 위치와 폴더의 신뢰
스킬, hooks, 설정 파일의 위치는 그 1의 전제 조건과 동일합니다.
| 위치 | 적용 범위 |
|---|---|
홈의 ~/.claude/ (settings.json, skills/ 등) | 자신의 모든 리포지토리 (해당 머신 내에서만) |
리포지토리의 .claude/ (settings.json, skills/ 등) | 해당 리포지토리. 커밋하면 팀과 공유 가능 |
리포지토리의 .claude/settings.local.json | 해당 리포지토리에서 자신만 |
처음 폴더를 열 때는 일단 평소처럼 claude
로 열고, '이 폴더를 신뢰할까요?' 확인을 승낙합니다. 리포지토리 설정에 작성한 hooks나 allow(확인 없이 통과시키는 규칙), claude plugin eval은 이 승낙 후에 작동합니다.
4. 외부 도구와 화면 추가하기 (계속)
Claude Code에 화면과 표시를 추가합니다. 외부 도구를 연결하는 MCP는 그 2에 있습니다.
mods: 원하는 화면을 말로 부탁하여 추가하기 (영상 #12)
mod는 Claude Code의 모양과 움직임을 바꾸는 작은 플러그인입니다. hooks, 스킬, MCP와 달리 화면에 그려낼 수 있습니다. 말로 요청하면 Claude가 만들어 줍니다.
오른쪽에 커밋 목록을 보여주는 페인을 만들어 주세요. 두 개를 선택하면 그 사이의 차이점을 보여주세요.
핫 리로드 확인에서 'Enable for this session'을 선택하자 대화 오른쪽에 목록이 열렸습니다. 오래된 것/새로운 순서로 2개를 클릭하니, 그 사이의 차이점이 나왔습니다 (페인 부분 발췌).
[ 업데이트 ] [ 선택 해제 ]
[ ] 7f58772 total 함수 추가 2026-10-03
[ ] 75368a3 README에 사용법 추기 2026-10-03
...
대화 옆에 표시하려면, 풀스크린 보기(CLAUDE_CODE_NO_FLICKER=1을 붙여 실행하거나 /tui fullscreen)를 합니다. 만들어진 mod는 ~/.claude/dev-mods/ 아래에 생기며, 해당 세션에서만 로드됩니다. 남기고 싶다면 그 폴더를 자신의 위치로 복사하여 지정합니다.
claude --plugin-dir ~/mods/commit-log
mod는 sandbox(OS의 구조로 파일과 연결 대상을 구분하는 기능)에 들어가지 않고, Claude Code와 같은 권한으로 작동합니다. 다른 사람의 mod는 넣기 전에 claude plugin validate 폴더
그래서 반응하는 이벤트(hooks:)와 요청할 작업(calls:)을 봅니다.
브랜치 이름처럼 글자만 출력할 것이라면 스테이터스 라인(status line)을, 조작 가능한 화면이 필요하다면 mod를 사용합니다. 이 둘을 구분해서 사용합니다.
스테이터스 라인: 사용량 잔여분을 항상 표시 (영상 #13)
스테이터스 라인은 입력창 아래에 원하는 정보를 계속 보여주는 공간입니다. Claude Code가 세션의 정보를 자신의 스크립트에 전달하고, 그 출력이 나타납니다. 표시할 수 있는 정보는 공식 Status line의 '전달되는 정보'(Available data) 목록에 있습니다. 스테이터스 라인을 만드는 /statusline
이라는 명령어는 저는 몰랐습니다. 그래서 목록에서 보여줄 것을 고르고, /statusline
에 말로 요청했습니다.
/statusline 현재 폴더・git 브랜치・5시간 및 주간 제한까지의 사용 비율을 막대 그래프로・각각 리셋까지 남은 시간・모델명・effort를 표시하는 스테이터스 라인을 만들어줘. 설정은 이 프로젝트의 .claude/settings.local.json에 작성해
만들어진 표시는 다음과 같습니다. 맨 앞의 ccadv_no13은 현재 있는 폴더 이름입니다.
ccadv_no13 | feature/login | Opus 5.5 | effort: medium | 5h ████░░░░░░ 40% (2h20m) 7d ██░░░░░░░░ 17% (6d9h)
5시간 및 주간 제한 사용 비율, 그리고 되돌릴 때까지 남은 시간이 작업하는 동안 계속 보입니다. 스테이터스 라인은 눈앞에서 움직이며 API 토큰을 사용하지 않습니다. 5시간 및 주간 사용 비율은 Pro・Max 계약으로 사용할 때만 전달됩니다.
5. 플러그인으로 모아서 배포하고, 선택하고, 측정하기
스킬이나 hooks를 플러그인에 모아서 배포하고, 사용하는 쪽에서는 무엇을 넣을지 제안받고, 효과가 있는지 점수로 확인합니다.
플러그인: 스킬과 hooks를 모아서 배포하기 (영상 #14)
위에서 만든 테스트 실행 및 보고 스킬과 rm -rf를 막는 hook을 하나의 플러그인(safe-dev)에 모았습니다. 위치는 공개 리포지토리 zun-tools/ccadv-sample (MIT)입니다. 형태는 다음과 같습니다.
ccadv-sample/
├── .claude-plugin/marketplace.json
└── plugins/safe-dev/
...
hooks/hooks.json에는 settings.json의 hooks와 같은 형태로 그대로 작성합니다. 스크립트 위치만 플러그인 폴더를 가리키는 ${CLAUDE_PLUGIN_ROOT}로 작성합니다.
{
"hooks": {
"PreToolUse": [
...
claude plugin validate로 형태를 확인한 후에 push 합니다. 다른 리포지토리에서는 Claude Code 안에서 두 줄을 입력합니다.
/plugin marketplace add zun-tools/ccadv-sample
/plugin install safe-dev@ccadv-sample
설치할 때, 적용 범위를 3가지 중 선택합니다 (화면 발췌). 위에서부터, 자신의 모든 리포지토리・이 리포지토리의 팀원 전체・이 리포지토리에서 자신만입니다.
safe-dev
테스트 보고 스킬 + rm -rf를 막는 hook
Install for you (user scope)
...
설치된 스킬은 /safe-dev:run-tests-and-report처럼 플러그인 이름이 앞에 붙습니다. hook도 설치된 리포지토리에서 rm -rf를 막았습니다. 수정한 버전을 전달할 때는 plugin.json의 버전을 올리고 push 합니다. 올리지 않고 push 하면, 사용하는 쪽의 업데이트는 '이미 최신'이라며 오래된 상태로 했습니다.
claude-code-setup: 무엇을 넣을지 제안받기 (영상 #15)
claude-code-setup은 리포지토리를 읽고, 넣으면 좋을 자동화를 종류별로 이유와 함께 제안하는 Anthropic 제작 공식 플러그인입니다. 공식 마켓플레이스는 처음부터 등록되어 있습니다.
/plugin install claude-code-setup@claude-plugins-official
넣고 나니, "이 프로젝트에 맞는 자동화를 제안해 줘"라고 평범한 말로 요청했습니다. Prettier 설정이 있는 TypeScript의 작은 리포지토리에서 MCP(Multi-Capability Plugin), 스킬(Skill), 후크(Hook), 서브 에이전트 후보가 이유와 배치처와 함께 돌아왔습니다. 후크 섹션 발췌입니다.
⚡ Hooks (최우선)
1. 편집하면 Prettier로 자동 정형화 (PostToolUse)
이유: .prettierrc와 npm run format이 있으므로, Claude
...
setup 자체는 파일을 만들거나 변경하지 않습니다. "제안된 후크 1을 채택해 줘"라고 요청하자 설정에 기록되었고, Claude가 편집한 파일에 Prettier 정형화가 적용되게 되었습니다. 후크 제안은 매번 같았지만, MCP나 스킬 후보는 회차마다 바뀌었습니다. 제안은 후보 목록으로 읽고, 채택할 것은 스스로 고릅니다.
claude plugin eval: 추가된 스킬이 작동하는지 점수로 확인하기 (영상 #11)
claude plugin eval
은 같은 요청을 플러그인 유무에 따라 실행시키고, 정한 합격 조건으로 채점하여 두 점의 차이(Δ)를 내는 공식 커맨드입니다. 추가 설치는 필요 없습니다. 측정 대상은 .claude-plugin/plugin.json 파일이 있는 폴더이며, 요청문과 합격 조건은 evals/케이스명/에 둡니다.
minutes-plugin/
├── .claude-plugin/plugin.json
├── skills/meeting-minutes/SKILL.md
...
예시는 회의 메모를 "결정 사항 / 숙제 / 담당" 세 개의 제목으로 정리하게 하는 스킬을 측정한 경우입니다. 합격 조건은 정규 표현식(regex)과, 다른 모델이 읽고 판별하는 llm 두 종류를 작성할 수 있습니다. 무엇을 볼지 항목의 이름은 regex에서는 target, llm에서는 focus이며, 작성 가능한 값은 동일합니다 (last_message는 Claude의 마지막 답변).
---
type: regex
pattern: '^## 결정 사항[ ]*\r?$'
...
나머지 파일 (plugin.json・SKILL.md・prompt.md・llm 합격 조건)
{
"name": "minutes-plugin",
"version": "1.0.0",
...
---
name: meeting-minutes
description: 회의록이나 회의 메모를 정리·요약한다. 회의 메모를 모아달라, 회의 내용을 정리해 달라고 요청받았을 때 사용한다.
...
---
runs: 2
max_turns: 10
...
---
type: llm
focus: last_message
...
tasks.md・owners.md는 decisions.md의 제목을 ## 숙제・## 담당으로 바꾼 것입니다.
release・sales 케이스
graders/의 decisions.md・tasks.md・owners.md는 support와 같습니다. accuracy.md도 같은 문구이며, 마지막 "대조용 사실" 단락만 다릅니다.
---
runs: 2
max_turns: 10
...
공개일 10월 20일, 대상은 검색 개선과 알림 설정, CSV 출력은 보류하고, 색상 변경은 테스트 후 판단. 숙제는 다나카 켄→검색 부하 시험 및 결과 공유 (10월 9일), 스즈키 아오이→스마트폰 버튼 배치 수정 (10월 12일), 야마모토 나오토→알림 설정 설명 문안 (10월 13일), 사토 미사키→공개 고지 초안 (10월 15일). 단체 테스트는 완료되어 숙제는 아닙니다.
---
runs: 2
max_turns: 10
...
기간 12월 1일~21일, 일괄 5% 할인, 배송비는 기존대로, SNS 광고 채택 여부는 11월 16일에 판단. 숙제는 이토 마코토→대상 고객 리스트 업데이트 (11월 6일), 고바야시 하루카→매장용 안내를 1페이지로 단축 및 제출 (11월 9일), 나카무라 료→창고 출하 여력 확인 (11월 10일), 타카하시 레나→예산 승인 신청 (11월 12일). 견적서 송부는 완료되었습니다. 무료 배송이나 SNS 광고 추가를 확정으로 간주하지 않습니다.
폴더에 들어가 실행합니다 (표는 비용 열 생략). --no-publish
は、結果のレポートを claude.ai の artifact として上げず、手元にだけ残す指定です。
cd minutes-plugin
claude plugin eval . --no-publish
CASE WITH W/OUT Δ RUNS NOTES
release 0.88 0.50 +0.38 4 accuracy: judge votes: FAIL FAIL FAIL
sales 0.88 0.38 +0.50 4 accuracy: judge votes: FAIL FAIL FAIL
...
1回の点は、合格条件のうち通った割合(0〜1)です。WITH と W/OUT はあり・なしの平均で、Δ はその差です。RUNS は runs: 2
(あり・なし各2回)の合計です。llm
의合格条件は、採点役のモデルが1回の返答に3票を投じ、2票以上 PASS なら合格です。NOTES の「FAIL FAIL FAIL」は、あり側の2回のうち落ちた1回への3票です。スキルなしでも中身はまとまっていましたが、3つの見出しは揃いませんでした。差は、見出しの決まりを守らせた分です。
差がプラスなら残す理由、プラスでなければ見直す材料として読みます。実行も採点も自分のアカウントでモデルを呼ぶので、プランの利用枠か API の料金を使います。
요약
- 조작 가능한 화면은 mod, 글자를 출력만 할 거라면 스테이터스 라인입니다. 사람의 mod는 넣기 전에
claude plugin validate로 내용을 봅니다. - 재사용할 스킬이나 hooks는 플러그인에 모아서 마켓플레이스에서 넣습니다. 효과가 미치는 범위는 넣을 때 고릅니다.
- 무엇을 넣을지 망설여진다면 claude-code-setup에게 제안하게 하고, 채택할 것은 스스로 고릅니다.
- 넣은 스킬은
claude plugin eval로, 유무의 점수 차이를 보고 남길지 결정합니다.
다음으로 읽을 것
- Claude Code 응용편 정리 그 1 (#1~#5): 스킬・hooks・권한 설정・서브 에이전트・agent teams
- Claude Code 응용편 정리 그 2 (#6~#10): MCP・/resume 와 /branch・claude -p・/loop・worktree
- Claude Code 사용법 입문 (기본 편 기사): 요청・허가 모드・CLAUDE.md・/clear・/rewind의 기본
각 회차 영상 (1편 5분 이내)
재생 목록: https://www.youtube.com/playlist?list=PLX_mQcKD-ZbQ
- 넣은 스킬이 효과가 있는지 claude plugin eval로 확인하기
- mods로 Claude Code에 필요한 화면 추가하기
- 스테이터스 라인에서 사용량 잔여분을 항상 출력하기
- Claude Code의 플러그인을 만들어서 배포하기
- claude-code-setup으로, 리포지토리에 맞는 자동화를 제안하게 하기
참고 링크 (1차 정보)
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기