[official skill] ์คํฌ ์์ฑ๊ธฐ
์ด ์คํฌ์ Claude ์คํฌ์ ์๋ก ๋ง๋ค๊ณ , ํ ์คํธํ๊ณ , ๋ฐ๋ณต์ ์ผ๋ก ๊ฐ์ ํ๋ ์ ์ฒด ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ๋ ๋๊ตฌ์ ๋๋ค.
๐ ์ฐธ๊ณ : ์ด ๋ฌธ์๋ ๊ณต์ Claude Code ๋ฌธ์์ ์๋ฌธ + ๋ ํผ๋ฐ์ค์ ๋๋ค.
- ์๋ฌธ ๋งํฌ๋ฅผ ์ง์ ์ฌ์ฉํ์ ๋ ๋ฉ๋๋ค
- ์ด ํ์ผ์
.claude/skills/ํ์์ ๋ณต์ฌํ์ฌ ์คํฌ๋ก ๋ฑ๋กํ ์๋ ์์ต๋๋ค
ํ์ง๋ง, ๋ชจ๋ ๋ถ๊ธฐ์์ ์คํํ๊ธฐ ์ํด reference md ๋ ํ์๋ก ํ๋ claude code ์ ์คํฌ ๋ค์ด๋ก๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.(2026.03.15 ๊ธฐ์ค)
์คํฌ ์์ฑ๊ธฐ
์คํฌ์ ์๋ก ๋ง๋ค๊ณ ๋ฐ๋ณต์ ์ผ๋ก ๊ฐ์ ํ๊ธฐ ์ํ ์คํฌ์ ๋๋ค.
๋์ ์์ค์์, ์คํฌ์ ๋ง๋๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์คํฌ์ด ๋ฌด์์ ํ๊ณ ๋๋ต ์ด๋ป๊ฒ ํด์ผ ํ๋์ง ๊ฒฐ์ ํฉ๋๋ค
- ์คํฌ ์ด์์ ์์ฑํฉ๋๋ค
- ๋ช ๊ฐ์ง ํ ์คํธ ํ๋กฌํํธ๋ฅผ ๋ง๋ค๊ณ ์คํฌ์ ์ ๊ทผํ ์ ์๋ claude๋ฅผ ์คํํฉ๋๋ค
- ์ฌ์ฉ์๊ฐ ์ ์ฑ์ , ์ ๋์ ๋ชจ๋๋ก ๊ฒฐ๊ณผ๋ฅผ ํ๊ฐํ๋๋ก ๋์ต๋๋ค
- ์คํ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์งํ๋๋ ๋์, ์ ๋์ ํ๊ฐ๊ฐ ์์ผ๋ฉด ์ด์์ ์์ฑํฉ๋๋ค(์ด๋ฏธ ์๋ค๋ฉด ๊ทธ๋๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ณ๊ฒฝ์ด ํ์ํ๋ค๊ณ ๋๋ผ๋ฉด ์์ ํ ์ ์์ต๋๋ค). ๊ทธ๋ฐ ๋ค์ ์ฌ์ฉ์์๊ฒ ์ค๋ช ํฉ๋๋ค(์ด๋ฏธ ์์๋ค๋ฉด, ๊ธฐ์กด ๊ฒ์ ์ค๋ช ํฉ๋๋ค)
eval-viewer/generate_review.py์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , ์ ๋์ ์งํ๋ ํ์ธํ ์ ์๊ฒ ํฉ๋๋ค
- ์ฌ์ฉ์์ ๊ฒฐ๊ณผ ํ๊ฐ ํผ๋๋ฐฑ์ ๊ธฐ๋ฐ์ผ๋ก ์คํฌ์ ๋ค์ ์์ฑํฉ๋๋ค(๊ทธ๋ฆฌ๊ณ ์ ๋์ ๋ฒค์น๋งํฌ์์ ๋ช ๋ฐฑํ ๊ฒฐํจ์ด ๋ฐ๊ฒฌ๋ ๊ฒฝ์ฐ์๋)
- ๋ง์กฑํ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค
- ํ ์คํธ ์ธํธ๋ฅผ ํ์ฅํ๊ณ ๋ ํฐ ๊ท๋ชจ๋ก ๋ค์ ์๋ํฉ๋๋ค
์ด ์คํฌ์ ์ฌ์ฉํ ๋์ ์ญํ ์ ์ฌ์ฉ์๊ฐ ์ด ๊ณผ์ ์ ์ด๋์ ์๋์ง ํ์ ํ๊ณ ์ด ๋จ๊ณ๋ค์ ์งํํ๋๋ก ๋๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ "X๋ฅผ ์ํ ์คํฌ์ ๋ง๋ค๊ณ ์ถ์ด์"๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค. ๊ทธ๋ค์ด ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ขํ๊ณ , ์ด์์ ์์ฑํ๊ณ , ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๊ณ , ํ๊ฐ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ๊ณ , ๋ชจ๋ ํ๋กฌํํธ๋ฅผ ์คํํ๊ณ , ๋ฐ๋ณตํ๋ ๊ฒ์ ๋์ธ ์ ์์ต๋๋ค.
๋ฐ๋ฉด์, ์ด๋ฏธ ์คํฌ ์ด์์ด ์์ ์๋ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๋ฐ๋ก ํ๊ฐ/๋ฐ๋ณต ๋ถ๋ถ์ผ๋ก ๊ฐ ์ ์์ต๋๋ค.
๋ฌผ๋ก , ํญ์ ์ ์ฐํด์ผ ํ๋ฉฐ ์ฌ์ฉ์๊ฐ "๋ง์ ํ๊ฐ๋ฅผ ์คํํ ํ์ ์์ด์, ๊ทธ๋ฅ ํจ๊ป ์์ ํฉ์๋ค"๋ผ๊ณ ํ๋ฉด, ๋์ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ์คํฌ์ด ์์ฑ๋ ํ(ํ์ง๋ง ๋ค์, ์์๋ ์ ์ฐํฉ๋๋ค), ์คํฌ ์ค๋ช ๊ฐ์ ๊ธฐ๋ฅผ ์คํํ ์๋ ์์ต๋๋ค. ์ด๋ฅผ ์ํ ๋ณ๋์ ์คํฌ๋ฆฝํธ๊ฐ ์์ด ์คํฌ์ ํธ๋ฆฌ๊ฑฐ๋ง์ ์ต์ ํํฉ๋๋ค.
์ข์ต๋๋ค.
์ฌ์ฉ์์์ ์ํต
์คํฌ ์์ฑ๊ธฐ๋ ์ฝ๋ฉ ์ฉ์ด์ ๋ํ ์ต์ํจ์ด ๋งค์ฐ ๋ค์ํ ์ฌ๋๋ค์ด ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค์ด๋ณด์ จ๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง(์ด๋ป๊ฒ ์์๊ฒ ์ด์, ์์ฃผ ์ต๊ทผ์ ์์๋ ๊ฒ์ธ๋ฐ), ์ง๊ธ Claude์ ํ์ ์๊ฐ์ ๋ฐ์ ๋ฐฐ๊ด๊ณต๋ค์ด ํฐ๋ฏธ๋์ ์ด๊ณ , ๋ถ๋ชจ๋๊ณผ ์กฐ๋ถ๋ชจ๋์ด "npm ์ค์น ๋ฐฉ๋ฒ"์ ๊ฒ์ํ๋ ํธ๋ ๋๊ฐ ์์ต๋๋ค. ๋ฐ๋ฉด์, ๋๋ค์์ ์ฌ์ฉ์๋ ์๋ง ์๋นํ ์ปดํจํฐ์ ๋ฅ์ํ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ์ํต ๋ฐฉ์์ ๊ฒฐ์ ํ๊ธฐ ์ํด ๋งฅ๋ฝ ๋จ์์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ธ์! ๊ธฐ๋ณธ์ ์ธ ๊ฒฝ์ฐ, ๋๋ต์ ์ธ ๊ธฐ์ค์ ์๋ ค๋๋ฆฌ๋ฉด:
- "evaluation"๊ณผ "benchmark"๋ ๊ฒฝ๊ณ์ ์์ด์ง๋ง ๊ด์ฐฎ์ต๋๋ค
- "JSON"๊ณผ "assertion"์ ์ฌ์ฉ์๊ฐ ์ด๊ฒ๋ค์ด ๋ฌด์์ธ์ง ์๊ณ ์๋ค๋ ํ์คํ ๋จ์๋ฅผ ๋ณด๊ธฐ ์ ์๋ ์ค๋ช ์์ด ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค
์์ฌ์ค๋ฌ์ฐ๋ฉด ์ฉ์ด๋ฅผ ๊ฐ๋ตํ ์ค๋ช ํด๋ ๊ด์ฐฎ์ผ๋ฉฐ, ์ฌ์ฉ์๊ฐ ์ดํดํ ์ง ํ์ ์ด ์์ผ๋ฉด ์งง์ ์ ์๋ก ์ฉ์ด๋ฅผ ๋ช ํํ ํด๋ ๋ฉ๋๋ค.
์คํฌ ์์ฑ
์๋ ํ์
์ฌ์ฉ์์ ์๋๋ฅผ ์ดํดํ๋ ๊ฒ๋ถํฐ ์์ํฉ๋๋ค. ํ์ฌ ๋ํ์ ์ฌ์ฉ์๊ฐ ์บก์ฒํ๊ณ ์ถ์ ์ํฌํ๋ก๊ฐ ์ด๋ฏธ ํฌํจ๋์ด ์์ ์ ์์ต๋๋ค(์: "์ด๊ฒ์ ์คํฌ๋ก ๋ง๋ค์ด ์ฃผ์ธ์"๋ผ๊ณ ๋งํ๋ ๊ฒฝ์ฐ). ๊ทธ๋ ๋ค๋ฉด, ๋ํ ์ด๋ ฅ์์ ๋จผ์ ๋ต์ ์ถ์ถํฉ๋๋ค โ ์ฌ์ฉ๋ ๋๊ตฌ, ๋จ๊ณ์ ์์, ์ฌ์ฉ์๊ฐ ํ ์์ , ๊ด์ฐฐ๋ ์ ์ถ๋ ฅ ํ์. ์ฌ์ฉ์๊ฐ ๋น ๋ถ๋ถ์ ์ฑ์์ผ ํ ์ ์์ผ๋ฉฐ, ๋ค์ ๋จ๊ณ๋ก ์งํํ๊ธฐ ์ ์ ํ์ธ์ ๋ฐ์์ผ ํฉ๋๋ค.
- ์ด ์คํฌ์ด Claude์๊ฒ ๋ฌด์์ ํ ์ ์๊ฒ ํด์ผ ํ๋์?
- ์ด ์คํฌ์ด ์ธ์ ํธ๋ฆฌ๊ฑฐ๋์ด์ผ ํ๋์? (์ด๋ค ์ฌ์ฉ์ ๋ฌธ๊ตฌ/๋งฅ๋ฝ)
- ์์๋๋ ์ถ๋ ฅ ํ์์ ๋ฌด์์ธ๊ฐ์?
- ์คํฌ์ด ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ค์ ํด์ผ ํ๋์? ๊ฐ๊ด์ ์ผ๋ก ๊ฒ์ฆ ๊ฐ๋ฅํ ์ถ๋ ฅ(ํ์ผ ๋ณํ, ๋ฐ์ดํฐ ์ถ์ถ, ์ฝ๋ ์์ฑ, ๊ณ ์ ๋ ์ํฌํ๋ก ๋จ๊ณ)์ด ์๋ ์คํฌ์ ํ ์คํธ ์ผ์ด์ค์ ์ด์ ์ ์ป์ต๋๋ค. ์ฃผ๊ด์ ์ธ ์ถ๋ ฅ(๊ธ์ฐ๊ธฐ ์คํ์ผ, ์์ )์ด ์๋ ์คํฌ์ ๋ณดํต ํ์ํ์ง ์์ต๋๋ค. ์คํฌ ์ ํ์ ๋ฐ๋ผ ์ ์ ํ ๊ธฐ๋ณธ๊ฐ์ ์ ์ํ๋, ์ฌ์ฉ์๊ฐ ๊ฒฐ์ ํ๋๋ก ํฉ๋๋ค.
์ธํฐ๋ทฐ ๋ฐ ๋ฆฌ์์น
์ฃ์ง ์ผ์ด์ค, ์ ์ถ๋ ฅ ํ์, ์์ ํ์ผ, ์ฑ๊ณต ๊ธฐ์ค, ์์กด์ฑ์ ๋ํด ๋ฅ๋์ ์ผ๋ก ์ง๋ฌธํฉ๋๋ค. ์ด ๋ถ๋ถ์ด ์ ๋ฆฌ๋ ๋๊น์ง ํ ์คํธ ํ๋กฌํํธ ์์ฑ์ ๊ธฐ๋ค๋ฆฝ๋๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ MCP๋ฅผ ํ์ธํฉ๋๋ค - ๋ฆฌ์์น์ ์ ์ฉํ๋ค๋ฉด(๋ฌธ์ ๊ฒ์, ์ ์ฌํ ์คํฌ ์ฐพ๊ธฐ, ๋ชจ๋ฒ ์ฌ๋ก ์กฐํ), ์๋ธ์์ด์ ํธ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉด ๋ณ๋ ฌ๋ก, ๊ทธ๋ ์ง ์์ผ๋ฉด ์ธ๋ผ์ธ์ผ๋ก ๋ฆฌ์์นํฉ๋๋ค. ์ฌ์ฉ์์ ๋ถ๋ด์ ์ค์ด๊ธฐ ์ํด ๋งฅ๋ฝ์ ์ค๋นํด ์ต๋๋ค.
SKILL.md ์์ฑ
์ฌ์ฉ์ ์ธํฐ๋ทฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, ๋ค์ ๊ตฌ์ฑ ์์๋ฅผ ์ฑ์๋๋ค:
- name: ์คํฌ ์๋ณ์
- description: ์ธ์ ํธ๋ฆฌ๊ฑฐ๋๋์ง, ๋ฌด์์ ํ๋์ง. ์ด๊ฒ์ด ์ฃผ์ ํธ๋ฆฌ๊ฑฐ๋ง ๋ฉ์ปค๋์ฆ์ ๋๋ค - ์คํฌ์ด ํ๋ ์ผ๊ณผ ์ฌ์ฉํด์ผ ํ๋ ๊ตฌ์ฒด์ ์ธ ๋งฅ๋ฝ์ ๋ชจ๋ ํฌํจํฉ๋๋ค. ๋ชจ๋ "์ฌ์ฉ ์๊ธฐ" ์ ๋ณด๋ ๋ณธ๋ฌธ์ด ์๋ ์ฌ๊ธฐ์ ๋ค์ด๊ฐ๋๋ค. ์ฐธ๊ณ : ํ์ฌ Claude๋ ์คํฌ์ "๊ณผ์ ํธ๋ฆฌ๊ฑฐ"ํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค -- ์ ์ฉํ ๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์คํฌ ์ค๋ช ์ ์ฝ๊ฐ "์ ๊ทน์ ์ผ๋ก" ๋ง๋ค์ด ์ฃผ์ธ์. ์๋ฅผ ๋ค์ด, "๊ฐ๋จํ๊ณ ๋น ๋ฅธ ๋์๋ณด๋๋ฅผ ๊ตฌ์ถํ์ฌ ๋ด๋ถ Anthropic ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ."์ด๋ผ๊ณ ์ฐ๋ ๋์ , "๊ฐ๋จํ๊ณ ๋น ๋ฅธ ๋์๋ณด๋๋ฅผ ๊ตฌ์ถํ์ฌ ๋ด๋ถ Anthropic ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ. ์ฌ์ฉ์๊ฐ ๋์๋ณด๋, ๋ฐ์ดํฐ ์๊ฐํ, ๋ด๋ถ ๋ฉํธ๋ฆญ์ ์ธ๊ธํ๊ฑฐ๋, ๋ช ์์ ์ผ๋ก '๋์๋ณด๋'๋ฅผ ์์ฒญํ์ง ์๋๋ผ๋ ์ด๋ค ์ข ๋ฅ์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๊ณ ์ถ์ดํ ๋ ๋ฐ๋์ ์ด ์คํฌ์ ์ฌ์ฉํ์ธ์."๋ผ๊ณ ์ธ ์ ์์ต๋๋ค.
- compatibility: ํ์ํ ๋๊ตฌ, ์์กด์ฑ (์ ํ ์ฌํญ, ๊ฑฐ์ ํ์ํ์ง ์์)
- ๋๋จธ์ง ์คํฌ ๋ด์ฉ :)
์คํฌ ์์ฑ ๊ฐ์ด๋
์คํฌ์ ๊ตฌ์กฐ
skill-name/
โโโ SKILL.md (ํ์)
โ โโโ YAML frontmatter (name, description ํ์)
โ โโโ Markdown ์ง์นจ
โโโ Bundled Resources (์ ํ)
โโโ scripts/ - ๊ฒฐ์ ์ /๋ฐ๋ณต์ ์์
์ ์ํ ์คํ ๊ฐ๋ฅ ์ฝ๋
โโโ references/ - ํ์์ ๋ฐ๋ผ ์ปจํ
์คํธ์ ๋ก๋๋๋ ๋ฌธ์
โโโ assets/ - ์ถ๋ ฅ์ ์ฌ์ฉ๋๋ ํ์ผ (ํ
ํ๋ฆฟ, ์์ด์ฝ, ํฐํธ)
์ ์ง์ ๊ณต๊ฐ
์คํฌ์ 3๋จ๊ณ ๋ก๋ฉ ์์คํ ์ ์ฌ์ฉํฉ๋๋ค:
- ๋ฉํ๋ฐ์ดํฐ (name + description) - ํญ์ ์ปจํ ์คํธ์ ํฌํจ (~100 ๋จ์ด)
- SKILL.md ๋ณธ๋ฌธ - ์คํฌ์ด ํธ๋ฆฌ๊ฑฐ๋ ๋๋ง๋ค ์ปจํ ์คํธ์ ํฌํจ (500์ค ์ดํ๊ฐ ์ด์์ )
- ๋ฒ๋ค ๋ฆฌ์์ค - ํ์์ ๋ฐ๋ผ (๋ฌด์ ํ, ์คํฌ๋ฆฝํธ๋ ๋ก๋ฉ ์์ด ์คํ ๊ฐ๋ฅ)
์ด ๋จ์ด ์๋ ๋๋ต์ ์ด๋ฉฐ ํ์ํ๋ฉด ๋ ๊ธธ์ด์ ธ๋ ๋ฉ๋๋ค.
ํต์ฌ ํจํด:
- SKILL.md๋ฅผ 500์ค ๋ฏธ๋ง์ผ๋ก ์ ์งํฉ๋๋ค; ์ด ํ๊ณ์ ๊ทผ์ ํ๋ฉด, ์คํฌ์ ์ฌ์ฉํ๋ ๋ชจ๋ธ์ด ํ์ ์กฐ์น๋ฅผ ์ํด ๋ค์์ ์ด๋๋ก ๊ฐ์ผ ํ๋์ง์ ๋ํ ๋ช ํํ ํฌ์ธํฐ์ ํจ๊ป ์ถ๊ฐ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- SKILL.md์์ ํ์ผ์ ์ฐธ์กฐํ ๋ ์ธ์ ์ฝ์ด์ผ ํ๋์ง์ ๋ํ ์๋ด์ ํจ๊ป ๋ช ํํ ํฉ๋๋ค
- ํฐ ์ฐธ์กฐ ํ์ผ(300์ค ์ด์)์ ๊ฒฝ์ฐ, ๋ชฉ์ฐจ๋ฅผ ํฌํจํฉ๋๋ค
๋๋ฉ์ธ ๊ตฌ์ฑ: ์คํฌ์ด ์ฌ๋ฌ ๋๋ฉ์ธ/ํ๋ ์์ํฌ๋ฅผ ์ง์ํ ๋, ๋ณํ๋ณ๋ก ๊ตฌ์ฑํฉ๋๋ค:
cloud-deploy/
โโโ SKILL.md (์ํฌํ๋ก + ์ ํ)
โโโ references/
โโโ aws.md
โโโ gcp.md
โโโ azure.md
Claude๋ ๊ด๋ จ ์ฐธ์กฐ ํ์ผ๋ง ์ฝ์ต๋๋ค.
๋๋ผ์ ์์์ ์์น
๋งํ ํ์๋ ์์ง๋ง, ์คํฌ์ ๋งฌ์จ์ด, ์ต์คํ๋ก์ ์ฝ๋, ๋๋ ์์คํ ๋ณด์์ ์ํํ ์ ์๋ ์ด๋ค ์ฝํ ์ธ ๋ ํฌํจํด์๋ ์ ๋ฉ๋๋ค. ์คํฌ์ ๋ด์ฉ์ ์ค๋ช ํ์ ๋ ์๋๊ฐ ์ฌ์ฉ์๋ฅผ ๋๋ผ๊ฒ ํด์๋ ์ ๋ฉ๋๋ค. ์คํด์ ์์ง๊ฐ ์๋ ์คํฌ์ด๋ ๋ฌด๋จ ์ ๊ทผ, ๋ฐ์ดํฐ ์ ์ถ, ๋๋ ๊ธฐํ ์ ์์ ํ๋์ ์ฉ์ดํ๊ฒ ํ๋๋ก ์ค๊ณ๋ ์คํฌ์ ๋ง๋ค๋ผ๋ ์์ฒญ์ ๋ฐ๋ฅด์ง ์์ต๋๋ค. "XYZ ์ญํ ๋์ด" ๊ฐ์ ๊ฒ์ ๊ด์ฐฎ์ต๋๋ค.
์์ฑ ํจํด
์ง์นจ์์ ๋ช ๋ นํ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
์ถ๋ ฅ ํ์ ์ ์ - ์ด๋ ๊ฒ ํ ์ ์์ต๋๋ค:
## ๋ณด๊ณ ์ ๊ตฌ์กฐ
ํญ์ ์ด ์ ํํ ํ
ํ๋ฆฟ์ ์ฌ์ฉํฉ๋๋ค:
# [์ ๋ชฉ]
## ์์ฝ
## ํต์ฌ ๋ฐ๊ฒฌ ์ฌํญ
## ๊ถ์ฅ ์ฌํญ
์์ ํจํด - ์์๋ฅผ ํฌํจํ๋ ๊ฒ์ด ์ ์ฉํฉ๋๋ค. ์ด๋ ๊ฒ ํ์์ ์ง์ ํ ์ ์์ต๋๋ค(ํ์ง๋ง ์์์ "Input"๊ณผ "Output"์ด ์์ผ๋ฉด ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ํ ์ ์์ต๋๋ค):
## ์ปค๋ฐ ๋ฉ์์ง ํ์
**์์ 1:**
Input: Added user authentication with JWT tokens
Output: feat(auth): implement JWT-based authentication
์์ฑ ์คํ์ผ
๋ชจ๋ธ์๊ฒ ์ ์ค์ํ์ง๋ฅผ ๋ฌด๊ฑฐ์ด MUST ๋์ ์ค๋ช ํ๋ ค๊ณ ํฉ๋๋ค. Theory of mind๋ฅผ ์ฌ์ฉํ๊ณ ์คํฌ์ ๋ฒ์ฉ์ ์ผ๋ก ๋ง๋ค์ด ํน์ ์์์ ๋๋ฌด ์ข๊ฒ ๋ง๋ค์ง ์์ต๋๋ค. ์ด์์ ๋จผ์ ์์ฑํ ๋ค์ ์๋ก์ด ๋์ผ๋ก ๋ณด๊ณ ๊ฐ์ ํฉ๋๋ค.
ํ ์คํธ ์ผ์ด์ค
์คํฌ ์ด์์ ์์ฑํ ํ, ์ค์ ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ๋งํ ๋ฒํ 2-3๊ฐ์ ํ์ค์ ์ธ ํ ์คํธ ํ๋กฌํํธ๋ฅผ ๋ง๋ญ๋๋ค. ์ฌ์ฉ์์ ๊ณต์ ํฉ๋๋ค: [์ด ์ ํํ ํํ์ ์ฌ์ฉํ ํ์๋ ์์ต๋๋ค] "์๋ํด ๋ณด๊ณ ์ถ์ ๋ช ๊ฐ์ง ํ ์คํธ ์ผ์ด์ค๊ฐ ์์ต๋๋ค. ์ด๊ฒ๋ค์ด ๊ด์ฐฎ์ ๋ณด์ด๋์, ์๋๋ฉด ๋ ์ถ๊ฐํ์๊ฒ ์ด์?" ๊ทธ๋ฐ ๋ค์ ์คํํฉ๋๋ค.
ํ
์คํธ ์ผ์ด์ค๋ฅผ evals/evals.json์ ์ ์ฅํฉ๋๋ค. ์์ง assertions์ ์์ฑํ์ง ์์ต๋๋ค โ ํ๋กฌํํธ๋ง. ์คํ์ด ์งํ๋๋ ๋์ ๋ค์ ๋จ๊ณ์์ assertions ์ด์์ ์์ฑํฉ๋๋ค.
{
"skill_name": "example-skill",
"evals": [
{
"id": 1,
"prompt": "User's task prompt",
"expected_output": "Description of expected result",
"files": []
}
]
}
assertions ํ๋๋ฅผ ํฌํจํ ์ ์ฒด ์คํค๋ง๋ references/schemas.md๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
ํ ์คํธ ์ผ์ด์ค ์คํ ๋ฐ ํ๊ฐ
์ด ์น์
์ ํ๋์ ์ฐ์๋ ์ํ์ค์
๋๋ค โ ์ค๊ฐ์ ๋ฉ์ถ์ง ์์ต๋๋ค. /skill-test๋ ๋ค๋ฅธ ํ
์คํธ ์คํฌ์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
๊ฒฐ๊ณผ๋ฅผ ์คํฌ ๋๋ ํ ๋ฆฌ์ ํ์ ๋ก <skill-name>-workspace/์ ๋ฃ์ต๋๋ค. ์์
๊ณต๊ฐ ๋ด์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ณต๋ณ(iteration-1/, iteration-2/ ๋ฑ)๋ก ์ ๋ฆฌํ๊ณ , ๊ฐ ํ
์คํธ ์ผ์ด์ค๋ ๋๋ ํ ๋ฆฌ(eval-0/, eval-1/ ๋ฑ)๋ฅผ ๋ฐ์ต๋๋ค. ์ด๊ฒ์ ๋ฏธ๋ฆฌ ๋ชจ๋ ๋ง๋ค์ง ์์ต๋๋ค โ ์งํํ๋ฉด์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค.
1๋จ๊ณ: ๋ชจ๋ ์คํ์ ๋์ผํ ํด์ ์์ฑ (with-skill ๋ฐ baseline)
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ๋์ผํ ํด์ ๋ ๊ฐ์ ์๋ธ์์ด์ ํธ๋ฅผ ์์ฑํฉ๋๋ค โ ํ๋๋ ์คํฌ ์์ด, ํ๋๋ ์์ด. ์ด๊ฒ์ด ์ค์ํฉ๋๋ค: with-skill ์คํ์ ๋จผ์ ์์ฑํ๊ณ ๋์ค์ baseline์ ์ํด ๋์์ค์ง ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ํ๊บผ๋ฒ์ ์์ํ์ฌ ๊ฑฐ์ ๋์์ ์๋ฃ๋๋๋ก ํฉ๋๋ค.
์คํฌ ํฌํจ ์คํ:
Execute this task:
- Skill path: <path-to-skill>
- Task: <eval prompt>
- Input files: <eval files if any, or "none">
- Save outputs to: <workspace>/iteration-<N>/eval-<ID>/with_skill/outputs/
- Outputs to save: <what the user cares about โ e.g., "the .docx file", "the final CSV">
Baseline ์คํ (๋์ผ ํ๋กฌํํธ, ํ์ง๋ง baseline์ ๋งฅ๋ฝ์ ๋ฐ๋ผ ๋ค๋ฆ):
- ์ ์คํฌ ์์ฑ ์: ์คํฌ ์์. ๊ฐ์ ํ๋กฌํํธ, ์คํฌ ๊ฒฝ๋ก ์์,
without_skill/outputs/์ ์ ์ฅ. - ๊ธฐ์กด ์คํฌ ๊ฐ์ ์: ์ด์ ๋ฒ์ . ํธ์ง ์ ์ ์คํฌ์ ์ค๋
์ท (
cp -r <skill-path> <workspace>/skill-snapshot/)ํ ๋ค์ baseline ์๋ธ์์ด์ ํธ๋ฅผ ์ค๋ ์ท์ ์ฐ๊ฒฐ.old_skill/outputs/์ ์ ์ฅ.
๊ฐ ํ
์คํธ ์ผ์ด์ค์ ๋ํด eval_metadata.json์ ์์ฑํฉ๋๋ค(assertions์ ์ง๊ธ์ ๋น์๋ ์ ์์ต๋๋ค). ๊ฐ ํ๊ฐ์ ๋จ์ํ "eval-0"์ด ์๋, ๋ฌด์์ ํ
์คํธํ๋์ง ์ค๋ช
ํ๋ ์ด๋ฆ์ ๋ถ์ฌํฉ๋๋ค. ์ด ์ด๋ฆ์ ๋๋ ํ ๋ฆฌ์๋ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฒ ๋ฐ๋ณต์ด ์๋ก์ด ๋๋ ์์ ๋ ํ๊ฐ ํ๋กฌํํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๊ฐ ์ ํ๊ฐ ๋๋ ํ ๋ฆฌ์ ์ด ํ์ผ๋ค์ ๋ง๋ญ๋๋ค โ ์ด์ ๋ฐ๋ณต์์ ์ด์ด์ง๋ค๊ณ ๊ฐ์ ํ์ง ์์ต๋๋ค.
{
"eval_id": 0,
"eval_name": "descriptive-name-here",
"prompt": "The user's task prompt",
"assertions": []
}
2๋จ๊ณ: ์คํ ์งํ ์ค์ assertions ์ด์ ์์ฑ
์คํ์ด ๋๋๊ธฐ๋ฅผ ๊ทธ๋ฅ ๊ธฐ๋ค๋ฆฌ์ง ์์ต๋๋ค โ ์ด ์๊ฐ์ ์์ฐ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ ํ
์คํธ ์ผ์ด์ค์ ๋ํ ์ ๋์ assertions ์ด์์ ์์ฑํ๊ณ ์ฌ์ฉ์์๊ฒ ์ค๋ช
ํฉ๋๋ค. evals/evals.json์ ์ด๋ฏธ assertions์ด ์์ผ๋ฉด, ๊ฒํ ํ๊ณ ๋ฌด์์ ํ์ธํ๋์ง ์ค๋ช
ํฉ๋๋ค.
์ข์ assertions์ ๊ฐ๊ด์ ์ผ๋ก ๊ฒ์ฆ ๊ฐ๋ฅํ๊ณ ์ค๋ช ์ ์ธ ์ด๋ฆ์ ๊ฐ์ง๋๋ค โ ๋ฒค์น๋งํฌ ๋ทฐ์ด์์ ๋ช ํํ๊ฒ ์ฝํ ๊ฒฐ๊ณผ๋ฅผ ํ์ด๋ณด๋ ์ฌ๋์ด ๊ฐ๊ฐ์ด ๋ฌด์์ ํ์ธํ๋์ง ์ฆ์ ์ดํดํ ์ ์์ด์ผ ํฉ๋๋ค. ์ฃผ๊ด์ ์ธ ์คํฌ(๊ธ์ฐ๊ธฐ ์คํ์ผ, ๋์์ธ ํ์ง)์ ์ ์ฑ์ ์ผ๋ก ํ๊ฐํ๋ ๊ฒ์ด ๋ ๋ซ์ต๋๋ค โ ์ธ๊ฐ์ ํ๋จ์ด ํ์ํ ๊ฒ์ assertions์ ๊ฐ์ ํ์ง ์์ต๋๋ค.
์ด์์ด ์์ฑ๋๋ฉด eval_metadata.json ํ์ผ๊ณผ evals/evals.json์ assertions์ผ๋ก ์
๋ฐ์ดํธํฉ๋๋ค. ๋ํ ์ฌ์ฉ์์๊ฒ ๋ทฐ์ด์์ ๋ฌด์์ ๋ณผ ์ ์๋์ง ์ค๋ช
ํฉ๋๋ค โ ์ ์ฑ์ ์ถ๋ ฅ๋ฌผ๊ณผ ์ ๋์ ๋ฒค์น๋งํฌ ๋ชจ๋.
3๋จ๊ณ: ์คํ ์๋ฃ ์ ํ์ด๋ฐ ๋ฐ์ดํฐ ์บก์ฒ
๊ฐ ์๋ธ์์ด์ ํธ ์์
์ด ์๋ฃ๋๋ฉด, total_tokens์ duration_ms๋ฅผ ํฌํจํ๋ ์๋ฆผ์ ๋ฐ์ต๋๋ค. ์ด ๋ฐ์ดํฐ๋ฅผ ์ฆ์ ์คํ ๋๋ ํ ๋ฆฌ์ timing.json์ ์ ์ฅํฉ๋๋ค:
{
"total_tokens": 84852,
"duration_ms": 23332,
"total_duration_seconds": 23.3
}
์ด๊ฒ์ด ์ด ๋ฐ์ดํฐ๋ฅผ ์บก์ฒํ ์ ์๋ ์ ์ผํ ๊ธฐํ์ ๋๋ค โ ์์ ์๋ฆผ์ ํตํด ์ ๋ฌ๋๋ฉฐ ๋ค๋ฅธ ๊ณณ์ ์ ์ฅ๋์ง ์์ต๋๋ค. ์ผ๊ด ์ฒ๋ฆฌ๋ฅผ ์๋ํ๊ธฐ๋ณด๋ค ๊ฐ ์๋ฆผ์ด ๋์ฐฉํ ๋ ์ฒ๋ฆฌํฉ๋๋ค.
4๋จ๊ณ: ์ฑ์ , ์ง๊ณ, ๋ทฐ์ด ์คํ
๋ชจ๋ ์คํ์ด ์๋ฃ๋๋ฉด:
-
๊ฐ ์คํ ์ฑ์ โ ์ฑ์ ์๋ธ์์ด์ ํธ๋ฅผ ์์ฑํ๊ฑฐ๋(๋๋ ์ธ๋ผ์ธ์ผ๋ก ์ฑ์ )
agents/grader.md๋ฅผ ์ฝ๊ณ ์ถ๋ ฅ๋ฌผ์ ๋ํด ๊ฐ assertion์ ํ๊ฐํฉ๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ๊ฐ ์คํ ๋๋ ํ ๋ฆฌ์grading.json์ ์ ์ฅํฉ๋๋ค. grading.json expectations ๋ฐฐ์ด์text,passed,evidenceํ๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค(name/met/details๋ ๋ค๋ฅธ ๋ณํ์ด ์๋) โ ๋ทฐ์ด๊ฐ ์ด ์ ํํ ํ๋ ์ด๋ฆ์ ์์กดํฉ๋๋ค. ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ก ํ์ธํ ์ ์๋ assertions์ ๊ฒฝ์ฐ, ๋์ผ๋ก ํ์ธํ๊ธฐ๋ณด๋ค ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ณ ์คํํฉ๋๋ค โ ์คํฌ๋ฆฝํธ๊ฐ ๋ ๋น ๋ฅด๊ณ , ์ ๋ขฐํ ์ ์์ผ๋ฉฐ, ๋ฐ๋ณต์ ๊ฑธ์ณ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. -
๋ฒค์น๋งํฌ์ ์ง๊ณ โ skill-creator ๋๋ ํ ๋ฆฌ์์ ์ง๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค:
python -m scripts.aggregate_benchmark <workspace>/iteration-N --skill-name <name>์ด๊ฒ์ ๊ฐ ๊ตฌ์ฑ์ ๋ํ pass_rate, time, tokens์ ํจ๊ป ํ๊ท ยฑ ํ์คํธ์ฐจ ๋ฐ ๋ธํ๊ฐ ํฌํจ๋
benchmark.json๊ณผbenchmark.md๋ฅผ ์์ฑํฉ๋๋ค. benchmark.json์ ์๋์ผ๋ก ์์ฑํ๋ ๊ฒฝ์ฐ, ๋ทฐ์ด๊ฐ ๊ธฐ๋ํ๋ ์ ํํ ์คํค๋ง๋references/schemas.md๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
๊ฐ with_skill ๋ฒ์ ์ ํด๋น baseline ์ง ์์ ๋ฐฐ์นํฉ๋๋ค. -
๋ถ์ ํจ์ค ์ํ โ ๋ฒค์น๋งํฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ง๊ณ ํต๊ณ๊ฐ ์จ๊ธธ ์ ์๋ ํจํด์ ๋ฐ๊ฒฌํฉ๋๋ค.
agents/analyzer.md("๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ ๋ถ์" ์น์ )์์ ๋ฌด์์ ์ฐพ์์ผ ํ๋์ง ์ฐธ์กฐํฉ๋๋ค โ ์คํฌ์ ๊ด๊ณ์์ด ํญ์ ํต๊ณผํ๋ assertions(๋น๊ตฌ๋ณ์ ), ๋์ ๋ถ์ฐ ํ๊ฐ(์๋ง๋ ๋ถ์์ ), ์๊ฐ/ํ ํฐ ํธ๋ ์ด๋์คํ ๋ฑ. -
๋ทฐ์ด ์คํ โ ์ ์ฑ์ ์ถ๋ ฅ๋ฌผ๊ณผ ์ ๋์ ๋ฐ์ดํฐ ๋ชจ๋์ ํจ๊ป:
nohup python <skill-creator-path>/eval-viewer/generate_review.py \ <workspace>/iteration-N \ --skill-name "my-skill" \ --benchmark <workspace>/iteration-N/benchmark.json \ > /dev/null 2>&1 & VIEWER_PID=$!๋ฐ๋ณต 2 ์ด์์ ๊ฒฝ์ฐ,
--previous-workspace <workspace>/iteration-<N-1>๋ ์ ๋ฌํฉ๋๋ค.Cowork / headless ํ๊ฒฝ:
webbrowser.open()์ ์ฌ์ฉํ ์ ์๊ฑฐ๋ ๋์คํ๋ ์ด๊ฐ ์๋ ํ๊ฒฝ์์๋, ์๋ฒ๋ฅผ ์์ํ๋ ๋์--static <output_path>๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋ฆฝํ HTML ํ์ผ์ ์์ฑํฉ๋๋ค. ์ฌ์ฉ์๊ฐ "Submit All Reviews"๋ฅผ ํด๋ฆญํ๋ฉด ํผ๋๋ฐฑ์ดfeedback.jsonํ์ผ๋ก ๋ค์ด๋ก๋๋ฉ๋๋ค. ๋ค์ด๋ก๋ ํ, ๋ค์ ๋ฐ๋ณต์ด ๊ฐ์ ธ๊ฐ ์ ์๋๋กfeedback.json์ ์์ ๊ณต๊ฐ ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌํฉ๋๋ค.
์ฐธ๊ณ : ๋ทฐ์ด๋ฅผ ๋ง๋ค๊ธฐ ์ํด generate_review.py๋ฅผ ์ฌ์ฉํฉ๋๋ค; ์ปค์คํ HTML์ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค.
- ์ฌ์ฉ์์๊ฒ ์๋ฆผ โ ๋๋ต ์ด๋ฐ ์์ผ๋ก: "๋ธ๋ผ์ฐ์ ์์ ๊ฒฐ๊ณผ๋ฅผ ์ด์์ต๋๋ค. ๋ ๊ฐ์ ํญ์ด ์์ต๋๋ค โ 'Outputs'์์ ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ฅผ ํด๋ฆญํ๊ณ ํผ๋๋ฐฑ์ ๋จ๊ธธ ์ ์๊ณ , 'Benchmark'์์ ์ ๋์ ๋น๊ต๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์๋ฃ๋๋ฉด ์ฌ๊ธฐ๋ก ๋์์์ ์๋ ค์ฃผ์ธ์."
์ฌ์ฉ์๊ฐ ๋ทฐ์ด์์ ๋ณด๋ ๊ฒ
"Outputs" ํญ์ ํ ๋ฒ์ ํ๋์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ณด์ฌ์ค๋๋ค:
- Prompt: ์ฃผ์ด์ง ์์
- Output: ์คํฌ์ด ์์ฑํ ํ์ผ, ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ธ๋ผ์ธ์ผ๋ก ๋ ๋๋ง
- Previous Output (๋ฐ๋ณต 2+): ์ด์ ๋ฐ๋ณต์ ์ถ๋ ฅ์ ๋ณด์ฌ์ฃผ๋ ์ ํ ์น์
- Formal Grades (์ฑ์ ์ด ์คํ๋ ๊ฒฝ์ฐ): assertion ํต๊ณผ/์คํจ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ ํ ์น์
- Feedback: ์ ๋ ฅํ๋ฉด ์๋ ์ ์ฅ๋๋ ํ ์คํธ ๋ฐ์ค
- Previous Feedback (๋ฐ๋ณต 2+): ์ด์ ์ ์ฝ๋ฉํธ, ํ ์คํธ ๋ฐ์ค ์๋์ ํ์
"Benchmark" ํญ์ ํต๊ณ ์์ฝ์ ๋ณด์ฌ์ค๋๋ค: ๊ฐ ๊ตฌ์ฑ์ ๋ํ ํต๊ณผ์จ, ํ์ด๋ฐ, ํ ํฐ ์ฌ์ฉ๋๊ณผ ํจ๊ป ํ๊ฐ๋ณ ์ธ๋ถ ๋ถ์ ๋ฐ ๋ถ์๊ฐ ๊ด์ฐฐ.
๋ด๋น๊ฒ์ด์
์ ์ด์ /๋ค์ ๋ฒํผ ๋๋ ํ์ดํ ํค๋ก ํฉ๋๋ค. ์๋ฃ๋๋ฉด "Submit All Reviews"๋ฅผ ํด๋ฆญํ์ฌ ๋ชจ๋ ํผ๋๋ฐฑ์ feedback.json์ ์ ์ฅํฉ๋๋ค.
5๋จ๊ณ: ํผ๋๋ฐฑ ์ฝ๊ธฐ
์ฌ์ฉ์๊ฐ ์๋ฃํ๋ค๊ณ ์๋ ค์ฃผ๋ฉด, feedback.json์ ์ฝ์ต๋๋ค:
{
"reviews": [
{"run_id": "eval-0-with_skill", "feedback": "the chart is missing axis labels", "timestamp": "..."},
{"run_id": "eval-1-with_skill", "feedback": "", "timestamp": "..."},
{"run_id": "eval-2-with_skill", "feedback": "perfect, love this", "timestamp": "..."}
],
"status": "complete"
}
๋น ํผ๋๋ฐฑ์ ์ฌ์ฉ์๊ฐ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํ๋ค๋ ์๋ฏธ์ ๋๋ค. ์ฌ์ฉ์๊ฐ ๊ตฌ์ฒด์ ์ธ ๋ถ๋ง์ ์ ๊ธฐํ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ ์ ์ง์คํฉ๋๋ค.
์๋ฃ๋๋ฉด ๋ทฐ์ด ์๋ฒ๋ฅผ ์ข ๋ฃํฉ๋๋ค:
kill $VIEWER_PID 2>/dev/null
์คํฌ ๊ฐ์
์ด๊ฒ์ด ๋ฃจํ์ ํต์ฌ์ ๋๋ค. ํ ์คํธ ์ผ์ด์ค๋ฅผ ์คํํ๊ณ , ์ฌ์ฉ์๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฒํ ํ์ผ๋ฉฐ, ์ด์ ํผ๋๋ฐฑ์ ๊ธฐ๋ฐ์ผ๋ก ์คํฌ์ ๋ ์ข๊ฒ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
๊ฐ์ ๋ฐฉ๋ฒ์ ๋ํ ์ฌ๊ณ
-
ํผ๋๋ฐฑ์์ ์ผ๋ฐํํฉ๋๋ค. ์ฌ๊ธฐ์ ์ผ์ด๋๊ณ ์๋ ํฐ ๊ทธ๋ฆผ์ ๋ฐฑ๋ง ๋ฒ(์ด์ฉ๋ฉด ๋ฌธ์ ๊ทธ๋๋ก, ์ด์ฉ๋ฉด ๋ ๋ง์ด) ๋ค์ํ ํ๋กฌํํธ์ ๊ฑธ์ณ ์ฌ์ฉํ ์ ์๋ ์คํฌ์ ๋ง๋ค๋ ค๋ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์ ๋น์ ๊ณผ ์ฌ์ฉ์๋ ๋ ๋น ๋ฅด๊ฒ ์งํํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ์์๋ง์ผ๋ก ๋ฐ๋ณตํฉ๋๋ค. ์ฌ์ฉ์๋ ์ด ์์๋ค์ ์์๋ค์ด ์๊ณ ์์ผ๋ฉฐ ์๋ก์ด ์ถ๋ ฅ๋ฌผ์ ๋น ๋ฅด๊ฒ ํ๊ฐํฉ๋๋ค. ํ์ง๋ง ๋น์ ๊ณผ ์ฌ์ฉ์๊ฐ ๊ณต๋ ๊ฐ๋ฐํ๋ ์คํฌ์ด ๊ทธ ์์์๋ง ์๋ํ๋ค๋ฉด, ์ธ๋ชจ์์ต๋๋ค. ์ธ์ธํ๊ฒ ๊ณผ์ ํฉํ๋ ๋ณ๊ฒฝ์ด๋ ์ต์์ ์ผ๋ก ์ ํ์ ์ธ MUST๋ฅผ ๋ฃ๊ธฐ๋ณด๋ค, ๊ณ ์ง์ค๋ฌ์ด ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ๋ค๋ฅธ ๋ฉํํฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ค๋ฅธ ์์ ํจํด์ ์ถ์ฒํด๋ณผ ์ ์์ต๋๋ค. ์๋ํ๋ ๊ฒ์ด ์๋์ ์ผ๋ก ์ ๋ ดํ๊ณ ์ด์ฉ๋ฉด ํ๋ฅญํ ๊ฒ์ ๋ฐ๊ฒฌํ ์๋ ์์ต๋๋ค.
-
ํ๋กฌํํธ๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํฉ๋๋ค. ๊ธฐ์ฌํ์ง ์๋ ๊ฒ๋ค์ ์ ๊ฑฐํฉ๋๋ค. ์ต์ข ์ถ๋ ฅ๋ฌผ๋ง์ด ์๋ ์ ์ฌ๋ก๋ ๋ฐ๋์ ์ฝ์ต๋๋ค โ ์คํฌ์ด ๋ชจ๋ธ๋ก ํ์ฌ๊ธ ๋น์์ฐ์ ์ธ ์ผ์ ๋ง์ ์๊ฐ์ ๋ญ๋นํ๊ฒ ๋ง๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉด, ๊ทธ๋ ๊ฒ ํ๋๋ก ๋ง๋๋ ์คํฌ์ ๋ถ๋ถ๋ค์ ์ ๊ฑฐํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
-
์ด์ ๋ฅผ ์ค๋ช ํฉ๋๋ค. ๋ชจ๋ธ์๊ฒ ์์ฒญํ๋ ๋ชจ๋ ๊ฒ์ ์ด์ ๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด ๋ ธ๋ ฅํฉ๋๋ค. ์ค๋๋ ์ LLM์ ๋๋ํฉ๋๋ค. ์ข์ theory of mind๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ข์ ํ๋ ์์ด ์ฃผ์ด์ง๋ฉด ๊ธฐ๊ณ์ ์ธ ์ง์๋ฅผ ๋์ด ์ ๋ง๋ก ์ผ์ ํด๋ผ ์ ์์ต๋๋ค. ์ฌ์ฉ์์ ํผ๋๋ฐฑ์ด ๊ฐ๊ฒฐํ๊ฑฐ๋ ๋ต๋ตํด ๋ณด์ด๋๋ผ๋, ์ค์ ๋ก ์์ ์ ์ดํดํ๊ณ ์ฌ์ฉ์๊ฐ ์ ๊ทธ๊ฒ์ ์ด ๊ฑด์ง, ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ๋ฌด์์ ์ด ๊ฑด์ง ์ดํดํ ๋ค์ ์ด ์ดํด๋ฅผ ์ง์์ฌํญ์ ์ ๋ฌํ๋ ค๊ณ ํฉ๋๋ค. ๋ง์ฝ ๋ชจ๋ ๋๋ฌธ์๋ก ALWAYS๋ NEVER๋ฅผ ์ฐ๊ฑฐ๋ ๋งค์ฐ ์๊ฒฉํ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, ๊ทธ๊ฒ์ ๊ฒฝ๊ณ ์ ํธ์ ๋๋ค โ ๊ฐ๋ฅํ๋ค๋ฉด ์ด์ ๋ฅผ ์ฌ๊ตฌ์ฑํ๊ณ ์ค๋ช ํ์ฌ ๋ชจ๋ธ์ด ์ ์์ฒญํ๋ ๊ฒ์ด ์ค์ํ์ง ์ดํดํ๋๋ก ํฉ๋๋ค. ๊ทธ๊ฒ์ด ๋ ์ธ๊ฐ์ ์ด๊ณ , ๊ฐ๋ ฅํ๋ฉฐ, ํจ๊ณผ์ ์ธ ์ ๊ทผ์ ๋๋ค.
-
ํ ์คํธ ์ผ์ด์ค ๊ฐ ๋ฐ๋ณต๋๋ ์์ ์ ์ฐพ์ต๋๋ค. ํ ์คํธ ์คํ์ ์ ์ฌ๋ก์ ์ฝ๊ณ ์๋ธ์์ด์ ํธ๋ค์ด ๋ชจ๋ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ฌํ ํฌํผ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ฐ์ ๋ค๋จ๊ณ ์ ๊ทผ์ ์ทจํ๋์ง ํ์ธํฉ๋๋ค. 3๊ฐ์ ํ ์คํธ ์ผ์ด์ค ๋ชจ๋์์ ์๋ธ์์ด์ ํธ๊ฐ
create_docx.py๋build_chart.py๋ฅผ ์์ฑํ๋ค๋ฉด, ๊ทธ๊ฒ์ ์คํฌ์ด ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ ๋ฒ๋คํด์ผ ํ๋ค๋ ๊ฐ๋ ฅํ ์ ํธ์ ๋๋ค. ํ ๋ฒ ์์ฑํ์ฌscripts/์ ๋ฃ๊ณ , ์คํฌ์ ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ผ๊ณ ์๋ฆฝ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ ํฅํ ํธ์ถ์์ ๋ฐํด๋ฅผ ๋ค์ ๋ฐ๋ช ํ๋ ๊ฒ์ ์ ์ฝํฉ๋๋ค.
์ด ์์ ์ ๊ฝค ์ค์ํ๋ฉฐ(์ฌ๊ธฐ์ ์ฐ๊ฐ ์์ญ์ต ๋ฌ๋ฌ์ ๊ฒฝ์ ์ ๊ฐ์น๋ฅผ ์ฐฝ์ถํ๋ ค๊ณ ํฉ๋๋ค!) ์๊ฐํ๋ ์๊ฐ์ด ๋ณ๋ชฉ์ด ์๋๋๋ค; ์๊ฐ์ ๋ค์ฌ ์ ๋ง ์๊ณ ํ์ธ์. ์์ ์ด์์ ์์ฑํ ๋ค์ ์๋ก์ด ์๊ฐ์ผ๋ก ๋ณด๊ณ ๊ฐ์ ํ๋ ๊ฒ์ ์ ์ํฉ๋๋ค. ์ ๋ง๋ก ์ต์ ์ ๋คํด ์ฌ์ฉ์์ ์ ์ฅ์์ ๊ทธ๋ค์ด ์ํ๊ณ ํ์๋ก ํ๋ ๊ฒ์ ์ดํดํฉ๋๋ค.
๋ฐ๋ณต ๋ฃจํ
์คํฌ์ ๊ฐ์ ํ ํ:
- ๊ฐ์ ์ฌํญ์ ์คํฌ์ ์ ์ฉํฉ๋๋ค
- ๋ชจ๋ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์๋ก์ด
iteration-<N+1>/๋๋ ํ ๋ฆฌ์์ ๋ค์ ์คํํฉ๋๋ค. baseline ์คํ๋ ํฌํจํฉ๋๋ค. ์ ์คํฌ์ ๋ง๋๋ ๊ฒฝ์ฐ, baseline์ ํญ์without_skill(์คํฌ ์์)์ ๋๋ค โ ์ด๊ฒ์ ๋ฐ๋ณต์ ๊ฑธ์ณ ๋์ผํฉ๋๋ค. ๊ธฐ์กด ์คํฌ์ ๊ฐ์ ํ๋ ๊ฒฝ์ฐ, baseline์ผ๋ก ๋ฌด์์ด ์ ์ ํ์ง ํ๋จํฉ๋๋ค: ์ฌ์ฉ์๊ฐ ๊ฐ์ง๊ณ ์จ ์๋ ๋ฒ์ , ๋๋ ์ด์ ๋ฐ๋ณต. --previous-workspace๋ฅผ ์ด์ ๋ฐ๋ณต์ ์ง์ ํ์ฌ ๋ฆฌ๋ทฐ์ด๋ฅผ ์คํํฉ๋๋ค- ์ฌ์ฉ์๊ฐ ๊ฒํ ํ๊ณ ์๋ฃํ๋ค๊ณ ์๋ ค์ค ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค
- ์๋ก์ด ํผ๋๋ฐฑ์ ์ฝ๊ณ , ๋ค์ ๊ฐ์ ํ๊ณ , ๋ฐ๋ณตํฉ๋๋ค
๋ค์์ด ๋ ๋๊น์ง ๊ณ์ํฉ๋๋ค:
- ์ฌ์ฉ์๊ฐ ๋ง์กฑํ๋ค๊ณ ํฉ๋๋ค
- ํผ๋๋ฐฑ์ด ๋ชจ๋ ๋น์ด ์์ต๋๋ค (๋ชจ๋ ๊ฒ์ด ์ข์ ๋ณด์ ๋๋ค)
- ์๋ฏธ ์๋ ์ง์ ์ ์ด๋ฃจ์ง ๋ชปํ๊ณ ์์ต๋๋ค
๊ณ ๊ธ: ๋ธ๋ผ์ธ๋ ๋น๊ต
๋ ๋ฒ์ ์ ์คํฌ ๊ฐ์ ๋ ์๊ฒฉํ ๋น๊ต๊ฐ ํ์ํ ์ํฉ(์: ์ฌ์ฉ์๊ฐ "์ ๋ฒ์ ์ด ์ค์ ๋ก ๋ ๋์๊ฐ์?"๋ผ๊ณ ๋ฌป๋ ๊ฒฝ์ฐ)์ ์ํด, ๋ธ๋ผ์ธ๋ ๋น๊ต ์์คํ
์ด ์์ต๋๋ค. ์ธ๋ถ ์ฌํญ์ agents/comparator.md์ agents/analyzer.md๋ฅผ ์ฝ์ผ์ธ์. ๊ธฐ๋ณธ ์์ด๋์ด๋: ์ด๋ ๊ฒ์ด ์ด๋ ๊ฒ์ธ์ง ์๋ ค์ฃผ์ง ์๊ณ ๋
๋ฆฝ์ ์ธ ์์ด์ ํธ์๊ฒ ๋ ์ถ๋ ฅ๋ฌผ์ ์ฃผ๊ณ ํ์ง์ ํ๋จํ๊ฒ ํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ ์น์๊ฐ ์ด๊ฒผ๋์ง ๋ถ์ํฉ๋๋ค.
์ด๊ฒ์ ์ ํ ์ฌํญ์ด๋ฉฐ, ์๋ธ์์ด์ ํธ๊ฐ ํ์ํ๊ณ , ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ ํ์ํ์ง ์์ต๋๋ค. ์ธ๊ฐ ๋ฆฌ๋ทฐ ๋ฃจํ๊ฐ ๋ณดํต ์ถฉ๋ถํฉ๋๋ค.
์ค๋ช ์ต์ ํ
SKILL.md frontmatter์ description ํ๋๋ Claude๊ฐ ์คํฌ์ ํธ์ถํ ์ง ๊ฒฐ์ ํ๋ ์ฃผ์ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ์คํฌ์ ๋ง๋ค๊ฑฐ๋ ๊ฐ์ ํ ํ, ๋ ๋์ ํธ๋ฆฌ๊ฑฐ๋ง ์ ํ๋๋ฅผ ์ํด ์ค๋ช ์ ์ต์ ํํ ๊ฒ์ ์ ์ํฉ๋๋ค.
1๋จ๊ณ: ํธ๋ฆฌ๊ฑฐ ํ๊ฐ ์ฟผ๋ฆฌ ์์ฑ
20๊ฐ์ ํ๊ฐ ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค โ ํธ๋ฆฌ๊ฑฐํด์ผ ํ๋ ๊ฒ๊ณผ ํธ๋ฆฌ๊ฑฐํ์ง ๋ง์์ผ ํ๋ ๊ฒ์ ํผํฉ. JSON์ผ๋ก ์ ์ฅํฉ๋๋ค:
[
{"query": "the user prompt", "should_trigger": true},
{"query": "another prompt", "should_trigger": false}
]
์ฟผ๋ฆฌ๋ ํ์ค์ ์ด์ด์ผ ํ๋ฉฐ Claude Code๋ Claude.ai ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ์ ๋ ฅํ ๋ฒํ ๊ฒ์ด์ด์ผ ํฉ๋๋ค. ์ถ์์ ์ธ ์์ฒญ์ด ์๋, ๊ตฌ์ฒด์ ์ด๊ณ ์ธ๋ถ์ ์ธ ์์ฒญ์ด์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ผ ๊ฒฝ๋ก, ์ฌ์ฉ์์ ์ง์ ์ด๋ ์ํฉ์ ๋ํ ๊ฐ์ธ์ ๋งฅ๋ฝ, ์ด ์ด๋ฆ๊ณผ ๊ฐ, ํ์ฌ ์ด๋ฆ, URL. ์ฝ๊ฐ์ ๋ฐฐ๊ฒฝ ์ด์ผ๊ธฐ. ์ผ๋ถ๋ ์๋ฌธ์์ด๊ฑฐ๋ ์ฝ์ด, ์คํ, ๋๋ ์บ์ฃผ์ผํ ๋งํฌ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ๋ค์ํ ๊ธธ์ด๋ฅผ ํผํฉํ๊ณ , ๋ช ํํ ๊ฒ๋ณด๋ค๋ ์ฃ์ง ์ผ์ด์ค์ ์ง์คํฉ๋๋ค(์ฌ์ฉ์๊ฐ ๊ฒํ ํ ๊ธฐํ๋ฅผ ๊ฐ๊ฒ ๋ฉ๋๋ค).
๋์ ์: "Format this data", "Extract text from PDF", "Create a chart"
์ข์ ์: "ok so my boss just sent me this xlsx file (its in my downloads, called something like 'Q4 sales final FINAL v2.xlsx') and she wants me to add a column that shows the profit margin as a percentage. The revenue is in column C and costs are in column D i think"
ํธ๋ฆฌ๊ฑฐํด์ผ ํ๋ ์ฟผ๋ฆฌ(8-10๊ฐ)์ ๊ฒฝ์ฐ, ์ปค๋ฒ๋ฆฌ์ง์ ๋ํด ์๊ฐํฉ๋๋ค. ๊ฐ์ ์๋์ ๋ค๋ฅธ ํํ์ ์ํฉ๋๋ค โ ์ผ๋ถ๋ ๊ฒฉ์์ฒด, ์ผ๋ถ๋ ์บ์ฃผ์ผ. ์ฌ์ฉ์๊ฐ ์คํฌ์ด๋ ํ์ผ ์ ํ์ ๋ช ์์ ์ผ๋ก ์ด๋ฆ ์ง์ง ์์ง๋ง ๋ถ๋ช ํ ํ์ํ ๊ฒฝ์ฐ๋ฅผ ํฌํจํฉ๋๋ค. ํํ์ง ์์ ์ฌ์ฉ ์ฌ๋ก์ ์ด ์คํฌ์ด ๋ค๋ฅธ ๊ฒ๊ณผ ๊ฒฝ์ํ์ง๋ง ์น๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
ํธ๋ฆฌ๊ฑฐํ์ง ๋ง์์ผ ํ๋ ์ฟผ๋ฆฌ(8-10๊ฐ)์ ๊ฒฝ์ฐ, ๊ฐ์ฅ ๊ฐ์น ์๋ ๊ฒ์ ๊ทผ์ ์คํจ์ ๋๋ค โ ์คํฌ๊ณผ ํค์๋๋ ๊ฐ๋ ์ ๊ณต์ ํ์ง๋ง ์ค์ ๋ก๋ ๋ค๋ฅธ ๊ฒ์ด ํ์ํ ์ฟผ๋ฆฌ. ์ธ์ ๋๋ฉ์ธ, ๋จ์ํ ํค์๋ ๋งค์นญ์ ํธ๋ฆฌ๊ฑฐํ์ง๋ง ์ค์ ๋ก๋ ๊ทธ๋ฌ์ง ๋ง์์ผ ํ๋ ๋ชจํธํ ํํ, ๊ทธ๋ฆฌ๊ณ ์ฟผ๋ฆฌ๊ฐ ์คํฌ์ด ํ๋ ๊ฒ๊ณผ ๊ด๋ จ์ด ์์ง๋ง ๋ค๋ฅธ ๋๊ตฌ๊ฐ ๋ ์ ์ ํ ๋งฅ๋ฝ์ ์๊ฐํฉ๋๋ค.
ํผํด์ผ ํ ํต์ฌ: ํธ๋ฆฌ๊ฑฐํ์ง ๋ง์์ผ ํ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ช ๋ฐฑํ ๊ด๋ จ ์๊ฒ ๋ง๋ค์ง ์์ต๋๋ค. PDF ์คํฌ์ ๋ถ์ ํ ์คํธ๋ก "Write a fibonacci function"์ ๋๋ฌด ์ฝ์ต๋๋ค โ ์๋ฌด๊ฒ๋ ํ ์คํธํ์ง ์์ต๋๋ค. ๋ถ์ ์ผ์ด์ค๋ ์ง์ ์ผ๋ก ๊น๋ค๋ก์์ผ ํฉ๋๋ค.
2๋จ๊ณ: ์ฌ์ฉ์์ ๊ฒํ
HTML ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ ํ๊ฐ ์ธํธ๋ฅผ ์ ์ํฉ๋๋ค:
assets/eval_review.html์์ ํ ํ๋ฆฟ์ ์ฝ์ต๋๋ค- ์๋ฆฌํ์์๋ฅผ ๊ต์ฒดํฉ๋๋ค:
__EVAL_DATA_PLACEHOLDER__โ ํ๊ฐ ํญ๋ชฉ์ JSON ๋ฐฐ์ด (๋ฐ์ดํ ์์ด โ JS ๋ณ์ ํ ๋น์ ๋๋ค)__SKILL_NAME_PLACEHOLDER__โ ์คํฌ ์ด๋ฆ__SKILL_DESCRIPTION_PLACEHOLDER__โ ์คํฌ์ ํ์ฌ ์ค๋ช
- ์์ ํ์ผ์ ์์ฑํ๊ณ (์:
/tmp/eval_review_<skill-name>.html) ์ฝ๋๋ค:open /tmp/eval_review_<skill-name>.html - ์ฌ์ฉ์๊ฐ ์ฟผ๋ฆฌ๋ฅผ ํธ์งํ๊ณ , should-trigger๋ฅผ ํ ๊ธํ๊ณ , ํญ๋ชฉ์ ์ถ๊ฐ/์ ๊ฑฐํ ๋ค์ "Export Eval Set"์ ํด๋ฆญํ ์ ์์ต๋๋ค
- ํ์ผ์ด
~/Downloads/eval_set.json์ ๋ค์ด๋ก๋๋ฉ๋๋ค โ ์ฌ๋ฌ ๊ฐ๊ฐ ์๋ ๊ฒฝ์ฐ(์:eval_set (1).json) Downloads ํด๋์์ ๊ฐ์ฅ ์ต๊ทผ ๋ฒ์ ์ ํ์ธํฉ๋๋ค
์ด ๋จ๊ณ๋ ์ค์ํฉ๋๋ค โ ๋์ ํ๊ฐ ์ฟผ๋ฆฌ๋ ๋์ ์ค๋ช ์ผ๋ก ์ด์ด์ง๋๋ค.
3๋จ๊ณ: ์ต์ ํ ๋ฃจํ ์คํ
์ฌ์ฉ์์๊ฒ ์๋ฆฝ๋๋ค: "์ด๊ฒ์ ์๊ฐ์ด ์ข ๊ฑธ๋ฆด ๊ฒ์ ๋๋ค โ ์ต์ ํ ๋ฃจํ๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํ๊ณ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํ๊ฒ ์ต๋๋ค."
ํ๊ฐ ์ธํธ๋ฅผ ์์ ๊ณต๊ฐ์ ์ ์ฅํ ๋ค์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํฉ๋๋ค:
python -m scripts.run_loop \
--eval-set <path-to-trigger-eval.json> \
--skill-path <path-to-skill> \
--model <model-id-powering-this-session> \
--max-iterations 5 \
--verbose
ํ์ฌ ์ธ์ ์ ๊ตฌ๋ํ๋ ๋ชจ๋ธ ID(์์คํ ํ๋กฌํํธ์์)๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ๊ฑฐ๋ง ํ ์คํธ๊ฐ ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ๊ฒฝํํ๋ ๊ฒ๊ณผ ์ผ์นํ๋๋ก ํฉ๋๋ค.
์คํ๋๋ ๋์, ์ฃผ๊ธฐ์ ์ผ๋ก ์ถ๋ ฅ์ tailํ์ฌ ์ฌ์ฉ์์๊ฒ ์ด๋ค ๋ฐ๋ณต์ ์๋์ง์ ์ ์๊ฐ ์ด๋ค์ง ์ ๋ฐ์ดํธํฉ๋๋ค.
์ด๊ฒ์ ์ ์ฒด ์ต์ ํ ๋ฃจํ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ํ๊ฐ ์ธํธ๋ฅผ 60% ํ๋ จ๊ณผ 40% ์ ๋ณด ํ
์คํธ๋ก ๋ถํ ํ๊ณ , ํ์ฌ ์ค๋ช
์ ํ๊ฐํ๋ฉฐ(๊ฐ ์ฟผ๋ฆฌ๋ฅผ 3ํ ์คํํ์ฌ ์ ๋ขฐํ ์ ์๋ ํธ๋ฆฌ๊ฑฐ์จ์ ์ป์), ์คํจํ ๊ฒ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ ์ ์ ์ํ๋๋ก Claude๋ฅผ ํธ์ถํฉ๋๋ค. ํ๋ จ๊ณผ ํ
์คํธ ๋ชจ๋์์ ๊ฐ ์๋ก์ด ์ค๋ช
์ ์ฌํ๊ฐํ๋ฉฐ, ์ต๋ 5๋ฒ ๋ฐ๋ณตํฉ๋๋ค. ์๋ฃ๋๋ฉด ๋ธ๋ผ์ฐ์ ์ ๋ฐ๋ณต๋ณ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋ HTML ๋ณด๊ณ ์๋ฅผ ์ด๊ณ best_description์ด ํฌํจ๋ JSON์ ๋ฐํํฉ๋๋ค โ ๊ณผ์ ํฉ์ ํผํ๊ธฐ ์ํด ํ๋ จ ์ ์๊ฐ ์๋ ํ
์คํธ ์ ์๋ก ์ ํ๋ฉ๋๋ค.
์คํฌ ํธ๋ฆฌ๊ฑฐ๋ง ์๋ ๋ฐฉ์
ํธ๋ฆฌ๊ฑฐ๋ง ๋ฉ์ปค๋์ฆ์ ์ดํดํ๋ฉด ๋ ๋์ ํ๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์ค๊ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์คํฌ์ ์ด๋ฆ + ์ค๋ช
๊ณผ ํจ๊ป Claude์ available_skills ๋ชฉ๋ก์ ํ์๋๋ฉฐ, Claude๋ ํด๋น ์ค๋ช
์ ๊ธฐ๋ฐ์ผ๋ก ์คํฌ์ ์ฐธ์กฐํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ์ค์ํ ์ ์ Claude๊ฐ ์์ฒด์ ์ผ๋ก ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ์์
์ ๋ํด์๋ง ์คํฌ์ ์ฐธ์กฐํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค โ "์ด PDF๋ฅผ ์ฝ์ด์ค"์ ๊ฐ์ ๊ฐ๋จํ ํ ๋จ๊ณ ์ฟผ๋ฆฌ๋ ์ค๋ช
์ด ์๋ฒฝํ๊ฒ ์ผ์นํด๋ ์คํฌ์ ํธ๋ฆฌ๊ฑฐํ์ง ์์ ์ ์์ต๋๋ค. Claude๊ฐ ๊ธฐ๋ณธ ๋๊ตฌ๋ก ์ง์ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ณต์กํ, ๋ค๋จ๊ณ, ๋๋ ์ ๋ฌธ์ ์ธ ์ฟผ๋ฆฌ๋ ์ค๋ช
์ด ์ผ์นํ ๋ ์์ ์ ์ผ๋ก ์คํฌ์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
์ด๊ฒ์ ํ๊ฐ ์ฟผ๋ฆฌ๊ฐ Claude๊ฐ ์ค์ ๋ก ์คํฌ์ ์ฐธ์กฐํ๋ ๊ฒ์ด ๋์์ด ๋ ๋งํผ ์ถฉ๋ถํ ์ค์ง์ ์ด์ด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. "read file X"์ ๊ฐ์ ๊ฐ๋จํ ์ฟผ๋ฆฌ๋ ์ข์ ํ ์คํธ ์ผ์ด์ค๊ฐ ์๋๋๋ค โ ์ค๋ช ํ์ง์ ๊ด๊ณ์์ด ์คํฌ์ ํธ๋ฆฌ๊ฑฐํ์ง ์์ต๋๋ค.
4๋จ๊ณ: ๊ฒฐ๊ณผ ์ ์ฉ
JSON ์ถ๋ ฅ์์ best_description์ ๊ฐ์ ธ์ ์คํฌ์ SKILL.md frontmatter๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค. ์ฌ์ฉ์์๊ฒ ์ /ํ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ ์๋ฅผ ๋ณด๊ณ ํฉ๋๋ค.
ํจํค์ง ๋ฐ ์ ์ (present_files ๋๊ตฌ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ์๋ง)
present_files ๋๊ตฌ์ ๋ํ ์ ๊ทผ ๊ถํ์ด ์๋์ง ํ์ธํฉ๋๋ค. ์์ผ๋ฉด ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋๋๋ค. ์์ผ๋ฉด, ์คํฌ์ ํจํค์งํ๊ณ .skill ํ์ผ์ ์ฌ์ฉ์์๊ฒ ์ ์ํฉ๋๋ค:
python -m scripts.package_skill <path/to/skill-folder>
ํจํค์ง ํ, ์ค์นํ ์ ์๋๋ก ๊ฒฐ๊ณผ .skill ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉ์์๊ฒ ์๋ดํฉ๋๋ค.
Claude.ai ์ ์ฉ ์ง์นจ
Claude.ai์์๋ ํต์ฌ ์ํฌํ๋ก(์ด์ โ ํ ์คํธ โ ๊ฒํ โ ๊ฐ์ โ ๋ฐ๋ณต)๊ฐ ๋์ผํ์ง๋ง, Claude.ai์๋ ์๋ธ์์ด์ ํธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ผ๋ถ ๋ฉ์ปค๋์ฆ์ด ๋ณ๊ฒฝ๋ฉ๋๋ค. ๋ค์์ ์ ์ฉํฉ๋๋ค:
ํ ์คํธ ์ผ์ด์ค ์คํ: ์๋ธ์์ด์ ํธ๊ฐ ์์ผ๋ฏ๋ก ๋ณ๋ ฌ ์คํ์ด ๋ถ๊ฐํฉ๋๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด, ์คํฌ์ SKILL.md๋ฅผ ์ฝ์ ๋ค์ ๊ทธ ์ง์๋ฅผ ๋ฐ๋ผ ํ ์คํธ ํ๋กฌํํธ๋ฅผ ์ง์ ์ํํฉ๋๋ค. ํ๋์ฉ ํฉ๋๋ค. ์ด๊ฒ์ ๋ ๋ฆฝ์ ์ธ ์๋ธ์์ด์ ํธ๋ณด๋ค ๋ ์๊ฒฉํฉ๋๋ค(์คํฌ์ ์์ฑํ๊ณ ์คํ๋ ํ๋ ์ ์ฒด ๋งฅ๋ฝ์ ๊ฐ์ง๊ณ ์์ต๋๋ค), ํ์ง๋ง ์ ์ฉํ ์ ๊ฒ์ ๋๋ค โ ๊ทธ๋ฆฌ๊ณ ์ธ๊ฐ ๋ฆฌ๋ทฐ ๋จ๊ณ๊ฐ ๋ณด์ํฉ๋๋ค. Baseline ์คํ์ ๊ฑด๋๋๋๋ค โ ์์ฒญ๋๋ก ์คํฌ์ ์ฌ์ฉํ์ฌ ์์ ์ ์๋ฃํฉ๋๋ค.
๊ฒฐ๊ณผ ๊ฒํ : ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด ์ ์๋ ๊ฒฝ์ฐ(์: Claude.ai์ VM์ ๋์คํ๋ ์ด๊ฐ ์๊ฑฐ๋, ์๊ฒฉ ์๋ฒ์ ์๋ ๊ฒฝ์ฐ), ๋ธ๋ผ์ฐ์ ๋ฆฌ๋ทฐ์ด๋ฅผ ์์ ํ ๊ฑด๋๋๋๋ค. ๋์ , ๋ํ์์ ์ง์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ํฉ๋๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ํ๋กฌํํธ์ ์ถ๋ ฅ๋ฌผ์ ๋ณด์ฌ์ค๋๋ค. ์ถ๋ ฅ๋ฌผ์ด ์ฌ์ฉ์๊ฐ ๋ด์ผ ํ๋ ํ์ผ(์: .docx๋ .xlsx)์ด๋ฉด, ํ์ผ ์์คํ ์ ์ ์ฅํ๊ณ ๋ค์ด๋ก๋ํ๊ณ ๊ฒ์ฌํ ์ ์๋๋ก ์์น๋ฅผ ์๋ ค์ค๋๋ค. ์ธ๋ผ์ธ์ผ๋ก ํผ๋๋ฐฑ์ ์์ฒญํฉ๋๋ค: "์ด๊ฑฐ ์ด๋ป๊ฒ ๋ณด์ด์ธ์? ๋ณ๊ฒฝํ ๊ฒ์ด ์๋์?"
๋ฒค์น๋งํน: ์ ๋์ ๋ฒค์น๋งํน์ ๊ฑด๋๋๋๋ค โ ์๋ธ์์ด์ ํธ ์์ด๋ ์๋ฏธ ์๋ baseline ๋น๊ต์ ์์กดํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฌ์ฉ์์ ์ ์ฑ์ ํผ๋๋ฐฑ์ ์ง์คํฉ๋๋ค.
๋ฐ๋ณต ๋ฃจํ: ์ด์ ๊ณผ ๋์ผํฉ๋๋ค โ ์คํฌ์ ๊ฐ์ ํ๊ณ , ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ค์ ์คํํ๊ณ , ํผ๋๋ฐฑ์ ์์ฒญํฉ๋๋ค โ ์ค๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ฆฌ๋ทฐ์ด๋ง ์์ ๋ฟ์ ๋๋ค. ํ์ผ ์์คํ ์ด ์์ผ๋ฉด ์ฌ์ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ณต ๋๋ ํ ๋ฆฌ์ ์ ๋ฆฌํ ์ ์์ต๋๋ค.
์ค๋ช
์ต์ ํ: ์ด ์น์
์ claude CLI ๋๊ตฌ(๊ตฌ์ฒด์ ์ผ๋ก claude -p)๊ฐ ํ์ํ๋ฉฐ, Claude Code์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. Claude.ai์์๋ ๊ฑด๋๋๋๋ค.
๋ธ๋ผ์ธ๋ ๋น๊ต: ์๋ธ์์ด์ ํธ๊ฐ ํ์ํฉ๋๋ค. ๊ฑด๋๋๋๋ค.
ํจํค์ง: package_skill.py ์คํฌ๋ฆฝํธ๋ Python๊ณผ ํ์ผ ์์คํ
์ด ์๋ ๊ณณ์ด๋ฉด ์ด๋์๋ ์๋ํฉ๋๋ค. Claude.ai์์ ์คํํ๋ฉด ์ฌ์ฉ์๊ฐ ๊ฒฐ๊ณผ .skill ํ์ผ์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
๊ธฐ์กด ์คํฌ ์ ๋ฐ์ดํธ: ์ฌ์ฉ์๊ฐ ์๋ก ๋ง๋๋ ๊ฒ์ด ์๋๋ผ ๊ธฐ์กด ์คํฌ์ ์ ๋ฐ์ดํธํ๋ผ๊ณ ์์ฒญํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ:
- ์๋ ์ด๋ฆ์ ๋ณด์กดํฉ๋๋ค. ์คํฌ์ ๋๋ ํ ๋ฆฌ ์ด๋ฆ๊ณผ
namefrontmatter ํ๋๋ฅผ ํ์ธํฉ๋๋ค -- ๋ณ๊ฒฝํ์ง ์๊ณ ์ฌ์ฉํฉ๋๋ค. ์: ์ค์น๋ ์คํฌ์ดresearch-helper์ด๋ฉด,research-helper.skill์ ์ถ๋ ฅํฉ๋๋ค(research-helper-v2๊ฐ ์๋). - ํธ์งํ๊ธฐ ์ ์ ์ฐ๊ธฐ ๊ฐ๋ฅํ ์์น์ ๋ณต์ฌํฉ๋๋ค. ์ค์น๋ ์คํฌ ๊ฒฝ๋ก๊ฐ ์ฝ๊ธฐ ์ ์ฉ์ผ ์ ์์ต๋๋ค.
/tmp/skill-name/์ ๋ณต์ฌํ๊ณ , ๊ฑฐ๊ธฐ์ ํธ์งํ๊ณ , ๋ณต์ฌ๋ณธ์์ ํจํค์งํฉ๋๋ค. - ์๋์ผ๋ก ํจํค์งํ๋ ๊ฒฝ์ฐ,
/tmp/์์ ๋จผ์ ์ค๋นํ ๋ค์ ์ถ๋ ฅ ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌํฉ๋๋ค -- ๊ถํ ๋๋ฌธ์ ์ง์ ์ฐ๊ธฐ๊ฐ ์คํจํ ์ ์์ต๋๋ค.
Cowork ์ ์ฉ ์ง์นจ
Cowork์ ์๋ค๋ฉด, ์์์ผ ํ ์ฃผ์ ์ฌํญ:
- ์๋ธ์์ด์ ํธ๊ฐ ์์ผ๋ฏ๋ก, ๋ฉ์ธ ์ํฌํ๋ก(ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ณ๋ ฌ๋ก ์์ฑ, baseline ์คํ, ์ฑ์ ๋ฑ)๊ฐ ๋ชจ๋ ์๋ํฉ๋๋ค. (ํ์ง๋ง ํ์์์์ผ๋ก ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด, ๋ณ๋ ฌ์ด ์๋ ์ง๋ ฌ๋ก ํ ์คํธ ํ๋กฌํํธ๋ฅผ ์คํํด๋ ๋ฉ๋๋ค.)
- ๋ธ๋ผ์ฐ์ ๋ ๋์คํ๋ ์ด๊ฐ ์์ผ๋ฏ๋ก, ํ๊ฐ ๋ทฐ์ด๋ฅผ ์์ฑํ ๋ ์๋ฒ๋ฅผ ์์ํ๋ ๋์
--static <output_path>๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋ฆฝํ HTML ํ์ผ์ ์์ฑํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฌ์ฉ์๊ฐ ํด๋ฆญํ์ฌ ๋ธ๋ผ์ฐ์ ์์ HTML์ ์ด ์ ์๋ ๋งํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. - ์ด๋ค ์ด์ ์์์ธ์ง, Cowork ์ค์ ์ ํ
์คํธ๋ฅผ ์คํํ ํ Claude๊ฐ ํ๊ฐ ๋ทฐ์ด๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊บผ๋ฆฌ๊ฒ ๋ง๋๋ ๊ฒ ๊ฐ์ผ๋ฏ๋ก, ๋ค์ ํ๋ฒ ๊ฐ์กฐํฉ๋๋ค: Cowork์ ์๋ Claude Code์ ์๋ , ํ
์คํธ๋ฅผ ์คํํ ํ์๋ ํญ์ ์ธ๊ฐ์ด ์ง์ ์์ ํ๊ธฐ ์ ์ ์์๋ฅผ ๋ณผ ์ ์๋๋ก
generate_review.py๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ฐ ๋ทฐ์ด๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค(์์ฒด boutique html ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋). ๋ฏธ๋ฆฌ ์ฌ๊ณผํ์ง๋ง ๋๋ฌธ์๋ก ๋งํ๊ฒ ์ต๋๋ค: ์ ๋ ฅ์ ์ง์ ํ๊ฐํ๊ธฐ ์ ์ ํ๊ฐ ๋ทฐ์ด๋ฅผ ์์ฑํ์ธ์. ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์ธ๊ฐ ์์ ๋์์ผ ํฉ๋๋ค! - ํผ๋๋ฐฑ์ ๋ค๋ฅด๊ฒ ์๋ํฉ๋๋ค: ์คํ ์ค์ธ ์๋ฒ๊ฐ ์์ผ๋ฏ๋ก, ๋ทฐ์ด์ "Submit All Reviews" ๋ฒํผ์ด
feedback.json์ ํ์ผ๋ก ๋ค์ด๋ก๋ํฉ๋๋ค. ๊ฑฐ๊ธฐ์ ์ฝ์ ์ ์์ต๋๋ค(๋จผ์ ์ ๊ทผ ๊ถํ์ ์์ฒญํด์ผ ํ ์ ์์ต๋๋ค). - ํจํค์ง์ ์๋ํฉ๋๋ค โ
package_skill.py๋ Python๊ณผ ํ์ผ ์์คํ ๋ง ํ์ํฉ๋๋ค. - ์ค๋ช
์ต์ ํ(
run_loop.py/run_eval.py)๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ subprocess๋ฅผ ํตํดclaude -p๋ฅผ ์ฌ์ฉํ๋ฏ๋ก Cowork์์๋ ์ ์๋ํด์ผ ํ์ง๋ง, ์คํฌ์ ์์ ํ ๋ง์น๊ณ ์ฌ์ฉ์๊ฐ ์ข์ ์ํ๋ผ๊ณ ๋์ํ ๋๊น์ง ์ ์ฅํด ๋์ธ์. - ๊ธฐ์กด ์คํฌ ์ ๋ฐ์ดํธ: ์ฌ์ฉ์๊ฐ ์๋ก ๋ง๋๋ ๊ฒ์ด ์๋ ๊ธฐ์กด ์คํฌ์ ์ ๋ฐ์ดํธํ๋ผ๊ณ ์์ฒญํ ์ ์์ต๋๋ค. ์์ Claude.ai ์น์ ์ ์ ๋ฐ์ดํธ ์๋ด๋ฅผ ๋ฐ๋ฆ ๋๋ค.
์ฐธ์กฐ ํ์ผ
agents/ ๋๋ ํ ๋ฆฌ์๋ ์ ๋ฌธํ๋ ์๋ธ์์ด์ ํธ๋ฅผ ์ํ ์ง์นจ์ด ํฌํจ๋์ด ์์ต๋๋ค. ํด๋น ์๋ธ์์ด์ ํธ๋ฅผ ์์ฑํด์ผ ํ ๋ ์ฝ์ต๋๋ค.
agents/grader.mdโ ์ถ๋ ฅ๋ฌผ์ ๋ํด assertions์ ํ๊ฐํ๋ ๋ฐฉ๋ฒagents/comparator.mdโ ๋ ์ถ๋ ฅ๋ฌผ ๊ฐ ๋ธ๋ผ์ธ๋ A/B ๋น๊ต ๋ฐฉ๋ฒagents/analyzer.mdโ ํ ๋ฒ์ ์ด ๋ค๋ฅธ ๊ฒ์ ์ด๊ธด ์ด์ ๋ฅผ ๋ถ์ํ๋ ๋ฐฉ๋ฒ
references/ ๋๋ ํ ๋ฆฌ์๋ ์ถ๊ฐ ๋ฌธ์๊ฐ ์์ต๋๋ค:
references/schemas.mdโ evals.json, grading.json ๋ฑ์ JSON ๊ตฌ์กฐ
๊ฐ์กฐ๋ฅผ ์ํด ํต์ฌ ๋ฃจํ๋ฅผ ํ ๋ฒ ๋ ๋ฐ๋ณตํฉ๋๋ค:
- ์คํฌ์ด ๋ฌด์์ ๊ดํ ๊ฒ์ธ์ง ํ์ ํฉ๋๋ค
- ์คํฌ์ ์ด์ ์์ฑํ๊ฑฐ๋ ํธ์งํฉ๋๋ค
- ํ ์คํธ ํ๋กฌํํธ์ ๋ํด ์คํฌ์ ์ ๊ทผํ ์ ์๋ claude๋ฅผ ์คํํฉ๋๋ค
- ์ฌ์ฉ์์ ํจ๊ป ์ถ๋ ฅ๋ฌผ์ ํ๊ฐํฉ๋๋ค:
- benchmark.json์ ๋ง๋ค๊ณ
eval-viewer/generate_review.py๋ฅผ ์คํํ์ฌ ์ฌ์ฉ์๊ฐ ๊ฒํ ํ ์ ์๊ฒ ํฉ๋๋ค - ์ ๋์ ํ๊ฐ๋ฅผ ์คํํฉ๋๋ค
- benchmark.json์ ๋ง๋ค๊ณ
- ๋น์ ๊ณผ ์ฌ์ฉ์๊ฐ ๋ง์กฑํ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค
- ์ต์ข ์คํฌ์ ํจํค์งํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ฐํํฉ๋๋ค.
์์
์ ์์ง ์๋๋ก TodoList๊ฐ ์๋ค๋ฉด ๋จ๊ณ๋ฅผ ์ถ๊ฐํ์ธ์. Cowork์ ์๋ค๋ฉด, "ํ๊ฐ JSON์ ๋ง๋ค๊ณ eval-viewer/generate_review.py๋ฅผ ์คํํ์ฌ ์ธ๊ฐ์ด ํ
์คํธ ์ผ์ด์ค๋ฅผ ๊ฒํ ํ ์ ์๊ฒ ํฉ๋๋ค"๋ฅผ TodoList์ ๊ตฌ์ฒด์ ์ผ๋ก ๋ฃ์ด ์คํ๋๋๋ก ํฉ๋๋ค.
ํ์ด์ ๋น๋๋ค!