2ํธ์์ skills.sh๋ก ์คํฌ์ ์ค์นํ๋ค๋ฉด, ์ด์ ์ง์ง ์ค์ํ ๋จ๊ณ๋ โํด๋ก๋์ฝ๋์์ ๊ทธ ์คํฌ์ ์ด๋ป๊ฒ ์ ๋๋ก ์ฐ๋๊ฐโ๋ค. ํต์ฌ์ ์ด๋ ต์ง ์๋ค. ์คํฌ์ AI์๊ฒ ์ฃผ๋ ์์ ์นด๋๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ํ์ํ ๋ ์๋์ผ๋ก ๊บผ๋ด ์ฐ๊ฒ ํ๊ฑฐ๋, ๋ด๊ฐ /์คํฌ์ด๋ฆ์ผ๋ก ์ง์ ํธ์ถํ๋ฉด ๋๋ค.
์๋ด: ๋ณธ๋ฌธ์๋ ์์ฑํ AI ๋๊ตฌ๋ฅผ ํ์ฉํ ์์ฝ/์ ๋ฆฌ ๋ด์ฉ์ด ํฌํจ๋์ด ์์ต๋๋ค.
flowchart LR A[2ํธ: ์คํฌ ์ค์น] --> B[3ํธ: ํด๋ก๋์ฝ๋์์ ํธ์ถ] B --> C{ํธ์ถ ๋ฐฉ์} C -->|์๋| D[์ค๋ช ๋ฌธ(description) ๋งค์นญ] C -->|์๋| E[/skill-name] D --> F[๊ฒฐ๊ณผ ๊ฒ์ฆ] E --> F F --> G[ํ ํ์ค์ผ๋ก ๊ณ ์ ]
๋จผ์ ๊ทธ๋ฆผ๋ถํฐ: ์คํฌ์ โ์ง์ ์นด๋โ๋ค
๊ฒ์์์ ์บ๋ฆญํฐ๊ฐ ๊ธฐ๋ณธ ๊ณต๊ฒฉ๋ง ํ๋ฉด ๋๋ฆฌ๊ณ ์ค์๊ฐ ๋ง๋ค. ๊ทธ๋ฐ๋ฐ ์ง์ ์นด๋(ํ๋ฌ, ํฑ์ปค, ์ ์ฐฐ๋ณ)๋ฅผ ๋ถ์ด๋ฉด ์ํฉ์ ๋ง๋ ํ๋์ ๋น ๋ฅด๊ฒ ํ๋ค.
ํด๋ก๋์ฝ๋๋ ๋๊ฐ๋ค.
- ๊ธฐ๋ณธ ๋ชจ๋ธ: โ๋๋ฃจ๋๋ฃจ ์๋โ ์ํ
- ์คํฌ ์ ์ฉ: โ์ด ์ํฉ์์๋ ์ด๋ ๊ฒ ์ผํดโ๊ฐ ๋ถ์ ์ํ
์ฆ, ์คํฌ์ ๋ชจ๋ธ์ ๊ต์ฒดํ๋ ๊ฒ ์๋๋ผ ์ผํ๋ ์ต๊ด์ ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
ํด๋ก๋์ฝ๋ ์คํฌ์ ๊ณต์ ํต์ฌ 4๊ฐ์ง
Claude Code ๊ณต์ Skills ๋ฌธ์ ๊ธฐ์ค์ผ๋ก ์ด๋ณด์๋ ์๋ 4๊ฐ์ง๋ง ๋จผ์ ์ก์ผ๋ฉด ๋๋ค.
- ์คํฌ์
SKILL.md๊ฐ ํต์ฌ ํ์ผ์ด๋ค. - ์คํฌ์ ์๋ ํธ์ถ๋ ๋๊ณ (
/description๋งค์นญ), ์๋ ํธ์ถ(/skill-name)๋ ๋๋ค. - ์คํฌ ํด๋ ์์น์ ๋ฐ๋ผ ์ ์ฉ ๋ฒ์๊ฐ ๋ฌ๋ผ์ง๋ค.
- ์ํํ ์์
์
disable-model-invocation,allowed-tools๋ก ์์ ํ๊ฒ ์ ํํ๋ค.
1) ์ด๋์ ๋๋ฉด ์ด๋๊น์ง ์ ์ฉ๋ ๊น?
๊ณต์ ๋ฌธ์ ๊ธฐ์ค ๊ฒฝ๋ก๋ ์๋์ฒ๋ผ ์ดํดํ๋ฉด ๊ฐ์ฅ ์ฝ๋ค.
- ๊ฐ์ธ ๊ณต์ฉ:
~/.claude/skills/<skill-name>/SKILL.md- ๋ด ๋ชจ๋ ํ๋ก์ ํธ์์ ์ฌ์ฉ
- ํ๋ก์ ํธ ์ ์ฉ:
.claude/skills/<skill-name>/SKILL.md- ํ์ฌ ํ๋ก์ ํธ์์๋ง ์ฌ์ฉ
์ด๋ฆฐ์ด ๋น์ ๋ก ๋งํ๋ฉด:
- ๊ฐ์ธ ๊ณต์ฉ = ๋ด ํํต์ ๋ฃ์ ๊ณตํต ๋๊ตฌ
- ํ๋ก์ ํธ ์ ์ฉ = ์ด๋ฒ ๊ณผํ ์์ ์๋ง ์ฐ๋ ํน๋ณ ์ค๋น๋ฌผ
์ฐธ๊ณ : ๊ฐ์ ์ด๋ฆ ์คํฌ์ด ์ฌ๋ฌ ๋ ๋ฒจ์ ์์ผ๋ฉด ์ฐ์ ์์ ๊ท์น(enterprise > personal > project)์ด ์ ์ฉ๋๋ค. (๊ณต์ ๋ฌธ์)
2) ๊ฐ์ฅ ์์ ์คํฌ 1๊ฐ๋ถํฐ ๋ง๋ค๊ธฐ
๊ณต์ ์์ ํ๋ฆ์ ๊ทธ๋๋ก ์ค์ด๋ฉด ์๋์ฒ๋ผ ์์ํ๋ฉด ๋๋ค.
mkdir -p ~/.claude/skills/explain-code~/.claude/skills/explain-code/SKILL.md
---
name: explain-code
description: ์ฝ๋ ๋์์ ์ฌ์ด ๋น์ ์ ๋จ๊ณ๋ก ์ค๋ช
ํ ๋ ์ฌ์ฉ
---
์ฝ๋๋ฅผ ์ค๋ช
ํ ๋ ์๋ ์์๋ฅผ ์ง์ผ๋ผ.
1. ๋จผ์ ์ผ์ ๋น์ 1๊ฐ
2. ์ฒ๋ฆฌ ํ๋ฆ์ ๋จ๊ณ๋ก ์ค๋ช
3. ์ด๋ณด์๊ฐ ์ค์ํ๋ ํฌ์ธํธ 1๊ฐ์ดํ ํ ์คํธ๋ 2๊ฐ์ง:
- ์๋ ํธ์ถ: โ์ด ์ฝ๋ ์ด๋ป๊ฒ ๋์ํด?โ
- ์๋ ํธ์ถ:
/explain-code src/auth/login.ts
์น ํ ํ์ํ ์นํธ์ํธ
ํด๋ก๋์ฝ๋ ์คํฌ 5์ค ์์ฝ
- ์คํฌ =
SKILL.mdํ ์ฅ์ผ๋ก ์์description์ด ์๋ ํธ์ถ ํํธ ์ญํ- ๊ธํ๋ฉด
/skill-name์ผ๋ก ์ง์ ํธ์ถ- ์ํ ์์ ์
disable-model-invocation: true- ๊ฒฐ๊ณผ๋ ํญ์ โ์ /ํ ๋น๊ตโ๋ก ๊ฒ์ฆ
3) ์๋ ํธ์ถ vs ์๋ ํธ์ถ, ์ธ์ ๋ญ ์ฐ๋ฉด ์ข๋?
flowchart TD A[๋ฌธ์ ์ธ์ง: ๋งค๋ฒ ๊ฐ์ ์์ฒญ ๋ฐ๋ณต?] --> B{์ํฅ๋} B -->|๋ถ์์ฉ ๊ฑฐ์ ์์| C[์๋ ํธ์ถ ํ์ฉ] B -->|๋ฐฐํฌ/์ปค๋ฐ/์ธ๋ถ์ ์ก ํฌํจ| D[์๋ ํธ์ถ ์ ์ฉ] C --> E[description ๊ตฌ์ฒดํ] D --> F[disable-model-invocation true] E --> G[์คํ/๊ฒ์ฆ] F --> G
์๋ ํธ์ถ์ด ์ข์ ๊ฒฝ์ฐ
- ์ฝ๋ ์ค๋ช
- ์คํ์ผ ๊ฐ์ด๋ ๋ฐ์
- ๋ฌธ์ ํฌ๋งท ์ ๋ฆฌ
์๋ ํธ์ถ์ด ์ข์ ๊ฒฝ์ฐ
- ๋ฐฐํฌ
- ์ปค๋ฐ ์์ฑ
- ์ธ๋ถ ์์คํ ์ ์ก
๊ณต์ ๋ฌธ์์ ํต์ฌ ํ๋:
disable-model-invocation: trueโ ๋ชจ๋ธ ์๋ ํธ์ถ ์ฐจ๋จuser-invocable: falseโ/๋ฉ๋ด์์ ์จ๊ธฐ๊ณ ๋ชจ๋ธ๋ง ์ฐ๊ฒ ํจ
4) ์ด๋ณด์๊ฐ ๋ฐ๋ก ์ฐ๋ ์์ ์ค์ 3์ข
A. ์๋ ํธ์ถ ์ฐจ๋จ
---
name: deploy
description: ์ด์ ๋ฐฐํฌ ์ํ
disable-model-invocation: true
---B. ๋๊ตฌ ์ ํ
---
name: safe-reader
description: ์ฝ๊ธฐ ์ ์ฉ ํ์
allowed-tools: Read Grep Glob
---C. ์ธ์ ๋ฐ๊ธฐ
---
name: fix-issue
description: ์ด์ ๋ฒํธ ๊ธฐ๋ฐ ์์
---
์ด์ $ARGUMENTS ๋ฅผ ํด๊ฒฐํ๋ผ.์: /fix-issue 123
5) 2ํธ๊ณผ ์ฐ๊ฒฐ๋๋ ์ค์ ๋ฃจํด (20๋ถ)
2ํธ์์ ์ค์นํ ์คํฌ์ด ์๋ค๋ฉด, ์๋ ๋ฃจํด์ผ๋ก ๋ฐ๋ก โ์ฌ์ฉ ๋จ๊ณโ๊น์ง ์์ฑ๋๋ค.
0~5๋ถ: ์คํฌ 1๊ฐ ์ ํ
- ์ค์น๋ ์คํฌ ์ค ์ค์ ๋ก ์์ฃผ ์ธ 1๊ฐ ์ ํ
- ์ ํ ๊ธฐ์ค: ๋ฐ๋ณต ๋น๋ + ์ํ๋ ๋ฎ์
5~10๋ถ: description ๋ฌธ์ฅ ๋ณด์
- ๋๋ฌด ๋์ ์ค๋ช ์ ์๋ ์ค์๋์ ๋ง๋ ๋ค
- โ์ธ์ ์ฐ๋์งโ๋ฅผ ๋ฌธ์ฅ์ ๋ฃ๋๋ค
์)
- ๋์ ์ค๋ช
:
์ฝ๋๋ฅผ ๋์์ค๋ค - ์ข์ ์ค๋ช
:
๋ฆฌ์กํธ ์ปดํฌ๋ํธ ๋ฆฌํฉํฐ๋ง ์์ฒญ์ผ ๋๋ง ์ฌ์ฉ
10~15๋ถ: ์๋/์๋ ๋ ๋ค ํ ์คํธ
- ์๋: ์์ฐ์ด ์ง๋ฌธ์ผ๋ก ํธ์ถ
- ์๋:
/skill-name์ง์ ํธ์ถ
15~20๋ถ: ์ /ํ ๋น๊ต ๊ธฐ๋ก
- ์ ํ์ฑ
- ์ผ๊ด์ฑ
- ์์ ํ์
- ์ฌํ์ฑ
์ค๋ฌด ๋ฏธ๋ ์ฌ๋ก 2๊ฐ
์ฌ๋ก 1) ์ฑ๊ณต: ์ฝ๋ ์ค๋ช ์คํฌ
- Before: ํ๋ง๋ค ์ค๋ช ๋ฐฉ์์ด ๋ฌ๋ผ ๋ฆฌ๋ทฐ ์๊ฐ์ด ๊ธธ์ด์ง
- After:
explain-code์คํฌ๋ก ๋น์ + ํ๋ฆ + ์ฃผ์์ ํฌ๋งท ๊ณ ์ - ํจ๊ณผ: ์จ๋ณด๋ฉ ๋ฌธ์ ํ์ง์ด ์ผ์ ํด์ง
์ฌ๋ก 2) ์คํจ ํ ๊ฐ์ : ๋ฐฐํฌ ์คํฌ ์๋ ํธ์ถ
- Before: ๋ฐฐํฌ ์คํฌ์ ์๋ ํธ์ถ ํ์ฉํด ๋ถํ์ํ ๋ฐฐํฌ ์๋ ๋ฐ์
- ์กฐ์น:
disable-model-invocation: true์ค์ - ๊ฒฐ๊ณผ: ๋ฐฐํฌ๋ ์ฌ๋ ์น์ธ ํ
/deploy๋ก๋ง ์คํ
MECE ํ๋์ ์ ๋ฆฌ (๊ฐ๋ /์์ธ/๋์/์คํ)
- ๊ฐ๋ : ์คํฌ์ ๋ชจ๋ธ์ ๋ฐ๊พธ๋ ๊ธฐ๋ฅ์ด ์๋๋ผ, ์์ ์ ์ฐจ๋ฅผ ์ฌ์ฌ์ฉํ๋ ์ด์ ๋ ์ด์ด๋ค.
- ์์ธ: ์ค์น๋ง ํ๊ณ ํธ์ถ ๊ท์น์ ์ ์ ํ๋ฉด ์๋ ์ค์๋(๊ณผํธ์ถ/๋๋ฝ)์ด ์๊ธด๋ค.
- ๋์:
description๊ตฌ์ฒดํ +disable-model-invocation/allowed-tools๋ก ์์ ์ ์ค์ . - ์คํ: 20๋ถ ๋ฃจํด์ผ๋ก ์๋/์๋ ํ ์คํธ ํ ์ ยทํ ์งํ๋ฅผ ๊ธฐ๋กํด ํ ํ์ค์ผ๋ก ๊ณ ์ .
๋ง์ด ํท๊ฐ๋ฆฌ๋ ํฌ์ธํธ ์ ๋ฆฌ
Q1. .claude/commands์ .claude/skills๋ ๋ญ๊ฐ ๋ฌ๋ผ?
๊ณต์ ๋ฌธ์ ๊ธฐ์ค์ผ๋ก ์ง๊ธ์ ์ปค์คํ
์ปค๋งจ๋๊ฐ ์คํฌ ๊ฐ๋
์ผ๋ก ํตํฉ๋์๋ค. ๊ธฐ์กด .claude/commands/*.md๋ ๋์ํ์ง๋ง, ์ ๊ตฌ์ฑ์ .claude/skills/<name>/SKILL.md๊ฐ ํ์ฅ์ฑ์ด ์ข๋ค.
Q2. ์คํฌ์ด ๋๋ฌด ์์ฃผ ํ์ด๋์์
description์ ๋ ์ข๊ฒ ์ด๋ค- ํ์ํ๋ฉด
disable-model-invocation: true
Q3. ์ ์ด๋ค ์คํฌ์ ์ ๋ณด์ด์ง?
๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ์คํฌ ์ค๋ช ๋ ์ปจํ ์คํธ ์์ฐ ์์์ ๊ด๋ฆฌ๋๋ค. ์คํฌ ์๊ฐ ๋ง์ผ๋ฉด ์ผ๋ถ๊ฐ ์ ์ธ๋ ์ ์๋ค. ์ด๋ ์คํฌ ์๋ฅผ ์ค์ด๊ฑฐ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ ๋ฆฌํด์ผ ํ๋ค.
2ํธ โ 3ํธ ์ฐ๊ฒฐ ํ ์ค ์ ๋ฆฌ
2ํธ์ด โ์ค์นโ์๋ค๋ฉด, 3ํธ์ โ์ด์โ์ด๋ค. ์ค์น๋ง ํ๋ฉด ๋ฐ์ชฝ์ด๊ณ , ํธ์ถ ๊ท์น + ์์ ์ค์ + ๊ฒ์ฆ ๋ฃจํด๊น์ง ๋ถ์ฌ์ผ ์ง์ง ์ค๋ฌด ํ์ง์ด ๋์จ๋ค.
๋ค์ ์ฝ๊ธฐ
- ๐ ๏ธ 02. skills.sh ์ค์น ๋ฐ ์คํ
- ๐ ๏ธ ํด๋ก๋์ฝ๋ 03. ์ด์์คํ
- insights ๋ช ๋ น์ด ์ ๋ฆฌ
์ถ์ฒ (๊ณต์/์ฐธ๊ณ )
๊ณต์ ์์ค
- Claude Code Skills Docs: https://code.claude.com/docs/en/skills
- Claude Agent SDK Slash Commands: https://platform.claude.com/docs/en/agent-sdk/slash-commands
- Agent Skills Specification: https://agentskills.io/specification
- Anthropic Skills Repository: https://github.com/anthropics/skills
์ฐธ๊ณ ํ์ด์ง
- Claude Code Customization Guide (Alex Op): https://alexop.dev/posts/claude-code-customization-guide-claudemd-skills-subagents/
- How I use Claude Code (Builder.io): https://www.builder.io/blog/claude-code