๐Ÿ‡ Harness Engineering for coding agents

0/ Harness Engineering

Harness๋Š” ๋ชจ๋ธ์„ ๋‘˜๋Ÿฌ์‹ผ ๋ชจ๋“  ์™ธ๋ถ€ ํ™˜๊ฒฝ์œผ๋กœ, ์‹œ์Šคํ…œ ํ”„๋กœํ”„ํŠธ, ํŒŒ์ผ ์‹œ์Šคํ…œ, ๋ชจ๋ธ ๋ผ์šฐํŒ…, ์™ธ๋ถ€ ๋„๊ตฌ ๋“ฑ ๋ชจ๋ธ ๋ฐ”๊นฅ์—์„œ ๋™์ž‘ํ•˜๋Š” ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. (๋ชจ๋ธ์ด ๐Ÿดย ๋ง์ด๋ฉด harness๋Š” ๋ง์ด ๋งˆ์ฐจ๋ฅผ ์ž˜ ๋Œ ์ˆ˜ ์žˆ๋„๋ก ์‚ฌ์šฉํ•˜๋Š” ๋งˆ๊ตฌ.)

2026๋…„ 2์›”, Mitchell Hashimoto๊ฐ€ ์ž์‹ ์˜ ๋ธ”๋กœ๊ทธ ๊ธ€์—์„œ agent๊ฐ€ ์‹ค์ˆ˜ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ํ•˜์ง€ ์•Š๋„๋ก ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๋Š” ์ž‘์—…์„ โ€œHarness Engineeringโ€๋ผ ๋ถ€๋ฅธ๋‹ค๊ณ  ํ–ˆ๊ณ , ์ด์–ด์„œ OpenAI๊ฐ€ โ€œHarness engineering: leveraging Codex in an agent-first worldโ€ ๊ณต์‹ ๊ธ€์„ ๊ณต๊ฐœํ•˜๋ฉด์„œ (+ Claude Code ๋‚ด๋ถ€ ์ฝ”๋“œ๊ฐ€ ์œ ์ถœ๋˜๋ฉด์„œ) Harness Engineering ์šฉ์–ด๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋Œ€์ค‘ํ™”๋˜์—ˆ๋‹ค.

โ€œAgent = Model + Harnessโ€ ๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ •๋„๋กœ Harness์˜ ์ค‘์š”์„ฑ์ด ๋ฌด์ฒ™ ๊ฐ•์กฐ๋˜๊ณ  ์žˆ๋‹ค. ์‹ค์ œ๋กœ LangChain์—์„œ terminal ๊ธฐ๋ฐ˜ ์—์ด์ „ํŠธ ํ‰๊ฐ€ ๋ฒค์น˜๋งˆํฌ์ธ Terminal-Bench 2.0์—์„œ ๋ชจ๋ธ(GPT-5.2-Codex)์€ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ , ๋ชจ๋ธ์„ ๊ฐ์‹ธ๋Š” ํ™˜๊ฒฝ์ธ Harness๋งŒ ๊ฐœ์„ ํ–ˆ๋”๋‹ˆ ๋‹น์‹œ ๋ฆฌ๋”๋ณด๋“œ ์ˆœ์œ„๊ฐ€ 30์œ„๊ถŒ์—์„œ 5์œ„๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ”์—ˆ๋‹ค.

์ด์™€ ๊ฐ™์ด, ๋‹จ์ˆœํžˆ ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ๋„˜์–ด Harness๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š”์ง€, ์ด๋ฅธ๋ฐ”Harness Engineering์ด agent์˜ ์„ฑ๋Šฅ์„ ์ขŒ์šฐํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

1/ Harness > Context > Prompt

Harness Engineering์€ Prompt Engineering, Context Engineering๋ณด๋‹ค ๋” ํฐ ๊ฐœ๋…์ด๋‹ค.

Prompt Engineering์€ ์›ํ•˜๋Š” ์‘๋‹ต์„ ์–ป๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ์—๊ฒŒ ๋ฌด์—‡์„, ์–ด๋–ป๊ฒŒ ์ง€์‹œํ•  ๊ฒƒ์ธ์ง€์— ๊ด€ํ•œ ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜! ๋‹จ์ˆœ ์งˆ์˜์‘๋‹ต์„ ๋„˜์–ด, ๋” ๋ณต์žกํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด์„œ ๋‹จ์ˆœํžˆ ์ตœ์ ํ™”๋œ prompt๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„์น˜ ์•Š๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ชจ๋ธ์ด ํ˜„์žฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์™ธ๋ถ€ ๋„๊ตฌ, ํŒŒ์ผ, ๊ฐ€๋“œ๋ ˆ์ผ ๋“ฑ์„ ์–ผ๋งˆ๋‚˜ ์ „๋‹ฌ๋ฐ›๊ณ , ์ดํ•ดํ•˜๋А๋ƒ๊ฐ€ ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ๋ผ์น˜๋ฉด์„œ, Context Engineering์ด ์ค‘์š”ํ•ด์กŒ๋‹ค.

๋˜ ๊ทธ๋Ÿฌ๋‚˜! ๋ณต์žกํ•œ ์žฅ๊ธฐ ๊ณผ์ œ์—์„œ ์ž‘์—…์ด ํ•œ ๋ฒˆ์˜ session์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ session์„ ๊ฑฐ์ณ ์ˆ˜ํ–‰๋˜๋ฉด์„œ context๋งŒ์œผ๋กœ๋Š” ํ•œ๊ณ„๊ฐ€ ์ƒ๊ธด ๊ฒƒ์ด๋‹ค. ์ƒˆ session์ด ์‹œ์ž‘๋˜๋ฉด, ๋ณดํ†ต ์ด์ „ session์˜ ์ƒํƒœ๋‚˜ ์ž‘์—… ๋งฅ๋ฝ์ด ์™„์ „ํ•˜๊ฒŒ ์ด์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋ž˜์„œ session์ด ๊ณ„์† ๋ฐ˜๋ณตํ•ด์„œ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜๋ฉด, ์ด์ „์— ๋ฌด์—‡์„ ํ–ˆ๋Š”์ง€, ์–ด๋””๊นŒ์ง€ ์ง„ํ–‰ํ–ˆ๋Š”์ง€, ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€, ๋‹ค์Œ์—๋Š” ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

์ด ๋•Œ๋ฌธ์— ๋‹จ์ผ session ์•ˆ์—์„œ์˜ ์ •๋ณด ๋งฅ๋ฝ ๊ตฌ์„ฑ๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•ด ์—ฌ๋Ÿฌ session์— ๊ฑธ์ณ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์‹œ์Šคํ…œ ์ „์ฒด๊ฐ€ ์ค‘์š”ํ•ด์ง„๋‹ค. ์ด๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒŒ Harness Engineering์ด๋‹ค.

์ฆ‰, Context Engineering์€ ์ฃผ๋กœ ๋‹จ์ผ session ์•ˆ์—์„œ ๋ชจ๋ธ์—๊ฒŒ ํ•„์š”ํ•œ ์ ์ ˆํ•œ ์ •๋ณด์™€ ๋„๊ตฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์ œ๊ณตํ•  ๊ฒƒ์ธ์ง€๋ผ๋ฉด, Harness Engineering์€ ๋ชจ๋“  session์—์„œ ์ผ์–ด๋‚˜๋Š” ์ „์ฒด ํ™˜๊ฒฝ์„ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๋‹ค๋ฃฌ๋‹ค.

Prompt < Context < Harness์— ๋Œ€ํ•ด ๋‹ค์‹œ ์ •๋ฆฌํ•˜์ž๋ฉด, Prompt Engineering์€ ๋ชจ๋ธ์—๊ฒŒ ์งˆ๋ฌธ์„ ์ž˜ํ•˜๋Š” ๊ธฐ์ˆ , Context Engineering์€ Prompt์— ๋งฅ๋ฝ์„ ํ•จ๊ป˜ ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ, โ€œ์—ฌํ–‰์ง€๋ฅผ ์ถ”์ฒœํ•ด์ค˜โ€ ๋ผ๋Š” ํ”„๋กฌํ”„ํŠธ์— ์‚ฌ์šฉ์ž์˜ ์Šค์ผ€์ฅด, ํ‰์†Œ์˜ ์ทจํ–ฅ, ํ˜„์žฌ ์ธ๊ธฐ ์žˆ๋Š” ์—ฌํ–‰์ง€ ์ •๋ณด ๋“ฑ ๋งฅ๋ฝ๊ณผ ํ•จ๊ป˜ ํ•˜์—ฌ ๋” ์ ํ•ฉํ•œ ์—ฌํ–‰์ง€๋ฅผ ์ถ”์ฒœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, ์ด๋ ‡๊ฒŒ ๋งฅ๋ฝ ์ •๋ณด์™€ ๋„๊ตฌ ๋“ฑ์ด ๋งŽ์•„์ง€๋‹ˆ๊นŒ ์šฐ๋ฆฌ๊ฐ€ ํƒ€๊ณ  ๊ฐ€์•ผํ•˜๋Š” ๋ง์ธ ๋ชจ๋ธ์ด ํž˜๋“ค์–ด ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ Harness๋กœ ๋ชจ๋ธ์ด ์ž˜ ๋‹ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ ์ž์ฒด๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด Harness Engineering์ด๋‹ค.

2/ Coding Agent๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ฌธ์ œ

๋ฌธ์ œ 1๏ธโƒฃย Context Anxiety ๐Ÿซจ

์žฅ์‹œ๊ฐ„ ์ž‘์—…์—์„œ๋Š” ๋งŽ์€ ์–‘์˜ context window๊ฐ€ ํ•„์š”ํ•ด์งˆ ์ˆ˜๋ฐ–์— ์—†๋‹ค. ์ด๋•Œ context window๊ฐ€ ๊ฝ‰ ์ฐจ๋ฉด์„œ, ์ผ๊ด€์„ฑ์„ ์žƒ๊ณ , ์ž‘์—…์„ ์ œ๋Œ€๋กœ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š” Context Anxiety ํ˜„์ƒ์„ ๋ณด์ธ๋‹ค. (์šฐ๋ฆฌ๋„ ๋„ˆ๋ฌด ์ผ์ด ๋งŽ์•„์ง€๋ฉด, ์–ด๋–ค ์ผ์„ ๋จผ์ € ์‹œ์ž‘ํ•ด์•ผํ•˜๋Š”์ง€, ๋ฌด์Šจ ์ผ์„ ํ•ด์•ผํ•˜๋Š”์ง€ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๊ฒƒ์ฒ˜๋Ÿผ ๋ชจ๋ธ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.)

โœ…ย Context Rest

Context Anxiety ํ˜„์ƒ์„ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, context window๋ฅผ ์™„์ „ํžˆ ์ง€์šด ๋’ค, ๋‹ค์‹œ ์ƒˆ๋กญ๊ฒŒ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ๋จธ๋ฆฌ๋ฅผ ๋น„์šฐ๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

context rest๋Š” compaction๊ณผ ๋‹ค๋ฅธ ๋ฐฉ์‹์ด๋‹ค. compaction์€ ๋Œ€ํ™”์˜ ์•ž๋ถ€๋ถ„๋ฅผ ์งง๊ฒŒ ์š”์•ฝํ•ด ๊ฐ™์€ agent๊ฐ€ ๊ณ„์† ์ž‘์—…์„ ์—ฐ์†์ ์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์š”์•ฝํ•œ๋‹ค๊ณ  ํ•ด๋„ ์ด์ „ ๋Œ€ํ™”์˜ ํ”์ ์€ ๋‚จ์•„ ์žˆ๊ณ , agent๋ฅผ clean state๋กœ ์ƒˆ๋กญ๊ฒŒ ์‹œ์ž‘ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ฏ€๋กœ, compaction ๋ฐฉ์‹์—์„œ๋Š” context anxiety๊ฐ€ ์—ฌ์ „ํžˆ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋ฉด, context rest๋Š” ๋‹ค์Œ agent๊ฐ€ ์™„์ „ํžˆ ์ƒˆ๋กญ๊ฒŒ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ, ์ด์ „ ๋Œ€ํ™”์˜ ํ”์ ์„ ๋‚จ๊ธฐ์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹ , ์ž‘์—…์„ ์ด์–ด ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก handoff artifact์— ์ง€๊ธˆ๊นŒ์ง€์˜ ํ•ต์‹ฌ ์ƒํƒœ๋งŒ ์ •๋ฆฌํ•ด๋‘”๋‹ค. ๊ทธ๋ž˜์„œ ์ด์ „ ๋Œ€ํ™”์˜ ํ”์ ์€ ์—†์œผ๋ฉด์„œ ํ•ต์‹ฌ ์ •๋ณด๋งŒ ๋„˜๊ฒจ ๋ฐ›์•„ ์ž‘์—…์„ ์ด์–ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฌธ์ œ 2๏ธโƒฃย  Do too much at once

์ฒ˜์Œ๋ถ€ํ„ฐ ๋ชจ๋“  ์ง€์‹œ์‚ฌํ•ญ์„ ๋„ฃ์œผ๋ฉด ์ ˆ๋Œ€ ์•ˆ๋˜๋Š” ์ด์œ ๊ฐ€ ๋ฐ”๋กœ agent๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์ผ์„ํ•œ ๋ฒˆ์— ๋‹ค ํ•˜๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์ด ์ข‹์•„์ง€๋ฉด ๋‚˜์•„์ง€๊ฒ ์ง€๋งŒ, ์•„์ง์€ ๋ฌธ์ œ๊ฐ€ ๋‚จ์•„ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.)

โœ…ย Incremental Progress

๊ทธ๋ž˜์„œ Anthropic์—์„œ๋Š” โ€œ์ ์ง„์  ๊ณต๊ฐœโ€ ๋ฐฉ์‹ (Incremental Progress)์œผ๋กœ ์ง€์‹œ์‚ฌํ•ญ์„ ํ•œ ๋ฒˆ์— ๋‹ค ์ฃผ์ง€ ์•Š๊ณ , ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ๋งŒ ์ ์ง„์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋„๋ก ํ–ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„๊ฐ€ ๋๋‚  ๋•Œ๋งˆ๋‹ค git commit messages๋ฅผ ๋‚จ๊ธฐ๊ณ , ์ด ๊ณผ์ •์„ ์š”์•ฝํ•œ progress file๋ฅผ ํ™œ์šฉํ•ด ์ฝ”๋“œ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ด์กŒ๊ณ , next agent๊ฐ€ ์ž‘์—…์„ ์–ด๋””์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผํ• ์ง€ ์ถ”์ธกํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง€๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ฌธ์ œ 3๏ธโƒฃย Self-Evaluation ๐Ÿ‘Ž

์—์ด์ „ํŠธ๊ฐ€ ์ž๊ธฐ๊ฐ€ ํ•œ ์ž‘์—…์€ ๊ด€๋Œ€ํ•˜๊ฒŒ ํ‰๊ฐ€ํ•˜๋Š” self-evaluation ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. (์‚ฌ๋žŒ๋„ ์ž๊ธฐ๊ฐ€ ํ•œ ์ผ์€ ๋†’์ด ํ‰๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ์ •๋ง ๋น„์Šทํ•œ ๊ฒƒ ๊ฐ™๋‹ค..)

ํŠนํžˆ ๋””์ž์ธ๊ณผ ๊ฐ™์ด ์ •๋‹ต์ด ๋ช…ํ™•ํ•˜๊ฒŒ ์—†๋Š” ์ฃผ๊ด€์ ์ธ ์ž‘์—… ๊ฐ™์€ ๊ฒฝ์šฐ์— ํ‰๊ฐ€๊ฐ€ ๋” ๊ด€๋Œ€ํ•œ ํŽธ์ด์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, UI ๋””์ž์ธ์ด ํ‰๋ฒ”ํ•ด๋„ ๋„ˆ๋ฌด ์ข‹๋‹ค๊ณ  ๋งํ•˜๋Š” ํŽธ์ธ ๊ฒƒ์ด๋‹ค.

โœ…ย Generator, Evaluator ๋ถ„๋ฆฌ

GAN๊ณผ ๊ฐ™์ด, ๋งŒ๋“œ๋Š” ์—์ด์ „ํŠธ์™€ ํ‰๊ฐ€ํ•˜๋Š” ์—์ด์ „ํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

generator๋Š” ์‹ค์ œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” agent์ด๊ณ , evaluator๋Š” generator์˜ ์ž‘์—…์„ ํ‰๊ฐ€ํ•˜๋Š” agent๋‹ค. ์ž๊ธฐ๊ฐ€ ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹ˆ๊ธฐ์— ์กฐ๊ธˆ ๋” ๊ฐ๊ด€์ ์œผ๋กœ ํ‰๊ฐ€ํ•˜์ง€ ์•Š์„๊นŒ? ๋ผ๋Š” ์•„์ด๋””์–ด์—์„œ ๋น„๋กฏ๋œ ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ evaluator๋„ ๊ฒฐ๊ตญ ๋ชจ๋ธ์ด๊ธฐ์—, ์™„์ „ํžˆ ๊ฐ๊ด€์ ์ธ ํ‰๊ฐ€๋ฅผ ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ ์€ ๋‚จ์•„ ์žˆ๋‹ค. ๊ทธ๋ž˜๋„ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•ด์„œ evaluator๋ฅผ ๋น„ํŒ์ , ํšŒ์˜์ ์œผ๋กœ ํŠœ๋‹ํ•œ๋‹ค๋ฉด ์ด์ „๋ณด๋‹ค ๋” ๋‚˜์€ ํ‰๊ฐ€๊ฐ€ ์ด๋ค„์ง„๋‹ค๊ณ  ๋ณด๊ณ  ์žˆ๋‹ค.

3/ Harness ๊ตฌ์„ฑ ์š”์†Œ

Claude Code๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฐ„๋žตํ•˜๊ฒŒ Harness์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ดํŽด ๋ณด์ž.

1๏ธโƒฃย  CLAUDE.md

CLAUDE.md๋Š” agent๋ฅผ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ ์ง€์นจ ํŒŒ์ผ์ด๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด ์˜จ๋ณด๋”ฉ ๋ฌธ์„œ๋กœ, ์ฒ˜์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ ‘ํ•˜๋”๋ผ๋„, ํ”„๋กœ์ ํŠธ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์ ์‘ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ํ”„๋กœ์ ํŠธ ์ „์ฒด์— ์žˆ์–ด ์ค‘์š”ํ•œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ, ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜ ๋“ฑ์„ ๋ณดํŽธ์ ์œผ๋กœ ์ง€์ผœ์•ผํ•˜๋Š” ๊ฒƒ์„ ์ฃผ๋กœ ํฌํ•จ์‹œํ‚จ๋‹ค.

๊ทœ์น™์„ ๋งŽ์•„์ง€๋ฉด ๋ชจ๋ธ์ด ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•˜๋ฏ€๋กœ, ์ •๋ง ์ค‘์š”ํ•œ ๊ทœ์น™ 3-5๊ฐœ (๋ฐ˜๋“œ์‹œ ์ง€์ผœ์ ธ์•ผ ํ•˜๋Š” constitution), ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” ์–ด๋–ค ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋“ฑ workspace ๊ทœ์น™ ์œ„์ฃผ๋กœ ์ ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๋˜ํ•œ, ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ด ์ค‘์š”ํ•œ ๊ทœ์น™์ด ์ถฉ๋Œํ•œ ๊ฒฝ์šฐ ์–ด๋–ค ๊ทœ์น™์„ ๋จผ์ € ๋”ฐ๋ผ์•ผํ•˜๋Š”์ง€ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์ ˆ๋Œ€๋กœ ๊ตฌ๊ตฌ์ ˆ์ ˆ ์„ค๋ช…๋ฌธ์ด ์•„๋‹ˆ๋ผ, ํ”„๋กœ์ ํŠธ๋ฅผ ์ž˜ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ๐Ÿ—บ๏ธย map์ด์–ด์•ผ ํ•œ๋‹ค.

2๏ธโƒฃย Skills

Skills๋Š” SKILL.md ํŒŒ์ผ๋กœ ์ •์˜๋˜๋Š”๋ฐ, ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

Anthropic์—์„œ๋Š” skills๋Š” ๋‹จ์ˆœํ•œ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ, scripts, assets, data ๋“ฑ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ์™„์ „ํ•œ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

์ž˜ ๋งŒ๋“  skill์€ ๋ช…ํ™•ํ•˜๋ฉฐ, ํ˜ผ๋ž€์Šค๋Ÿฝ์ง€ ์•Š๋‹ค๊ณ  ํ•œ๋‹ค. ์ฆ‰ ํ•˜๋‚˜์˜ skill์—๋Š” ํ•˜๋‚˜์˜ ์—ญํ• ์ด ๋‹ด๊ฒจ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๐Ÿ‘€ย Skills๋ฅผ ์ž˜ ์ž‘์„ฑํ•˜๋Š” ๋ฒ•์€ **Lessons from Building Claude Code: How We Use Skills** ๊ธ€์„ ๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค.

๊ฐ„๋‹จํžˆ ์š”์•ฝํ•˜๋ฉด,

  1. ๋ชจ๋ธ์ด ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ ๊ฐ™์€, ๋‹น์—ฐํ•˜๊ณ  ๋ป”ํ•œ ๋ง์€ ์“ฐ์ง€ ๋ง๊ธฐ.

  2. ## Gotchas ์„น์…˜์„ ์ž˜ ํ™œ์šฉํ•˜๊ธฐ. (๋ชจ๋ธ์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํŒจํ•˜๋Š” ์—ฃ์ง€ ์ผ€์ด์Šค๋ฅผ ํŒŒ์•…ํ•˜๊ณ , ๊ธฐ๋กํ•˜๊ธฐ)

  3. skill์€ ๋‹จ์ˆœํžˆ ๋งˆํฌ๋‹ค์šด โ€œํŒŒ์ผโ€์ด ์•„๋‹ˆ๋ผ โ€œํด๋”โ€ ๊ตฌ์กฐ๋ผ๊ณ  ๋งํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด, ์ด ํด๋” ๊ตฌ์กฐ๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๊ธฐ. (๋‹จ์ˆœํžˆ skill๋ฅผ ๋งˆํฌ๋‹ค์šด ํ•˜๋‚˜์— ํ†ต์งธ๋กœ ๋„ฃ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์—ฌ๋Ÿฌ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ)

  4. skill์„ ๋„ˆ๋ฌด ๊ตฌ์ฒด์ ์œผ๋กœ ์“ฐ์ง€ ๋ง๊ธฐ. ๋„ˆ๋ฌด ๊ตฌ์ฒด์ ์ด๋ฉด, ์ƒํ™ฉ์— ๋งž๊ฒŒ ์œ ์—ฐํ•˜๊ฒŒ ํ–‰๋„ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋จ.

  5. setup ์„ธํŒ…ํ•˜๊ธฐ. skills ํด๋”์— config.json ํŒŒ์ผ์„ ํ™œ์šฉํ•ด setup ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ. ์˜ˆ๋ฅผ ๋“ค์–ด, Slack์— ํฌ์ŠคํŒ…ํ•˜๋Š” skill ๊ฐ™์€ ๊ฒฝ์šฐ, ์–ด๋–ค slack channel์— ํฌ์ŠคํŒ…ํ• ์ง€ setup ์ •๋ณด๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ.

  • ์—ฌ๋Ÿฌ ์„ ํƒ์ง€๋ฅผ ์ œ์‹œํ•˜๊ธธ ์›ํ•œ๋‹ค๋ฉด Claude Code์˜ AskUserQuestion Tool ์ ์ ˆํžˆ ํ™œ์šฉํ•˜๊ธฐ.

  1. description ํ•„๋“œ๋Š” ๋ชจ๋ธ์„ ์œ„ํ•œ ๊ฒƒ.

    description์€ ๋‹จ์ˆœํžˆ โ€œ์š”์•ฝโ€์ด ์•„๋‹ˆ๋ผ โ€œ๋ชจ๋ธ์ด ์–ธ์ œ ์ด skill์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€โ€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋ธ์„ ์œ„ํ•œ ํ•„๋“œ์ด๋‹ค.

  2. ์–ด๋–ค skill์€ ๋ฐ์ดํ„ฐ๋ฅผ memory๋กœ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋•Œ ํ™œ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ skill ํด๋”์— ์ €์žฅํ•˜์ง€ ๋ง๊ณ , ${CLAUDE_PLUGIN_DATA}์™€ ๊ฐ™์€ ์ •์ ์ธ ํด๋”์— ์ €์žฅํ•  ๊ฒƒ. (skill ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด skill ํด๋” ์•ˆ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ.)

  3. script ์ €์žฅํ•˜๊ณ , ์ฝ”๋“œ ์ƒ์„ฑํ•˜๊ธฐ. ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” script์™€ library๋ฅผ ์ œ๊ณตํ•ด๋‘๋ฉด, ์ฝ”๋“œ ์ž‘์„ฑํ•˜๋Š” ๋ฐ์—๋งŒ ์ž์› ์ง‘์ค‘ํ•˜๊ฒŒ ๋จ. ๋ชจ๋ธ์—๊ฒŒ ๋” ์–ด๋ ค์šด ์ž‘์—…์„ ๋งก๊ธฐ๋„๋ก ํ•˜์ž.

3๏ธโƒฃย MCP (Model Context Protocol)

MCP๋Š” Agent์™€ ์™ธ๋ถ€ ๊ฐ„ ์—ฐ๊ฒฐ์„ ํ†ตํ•ฉํ•ด ๋” ์‰ฝ๊ฒŒ ์™ธ๋ถ€ ๋„๊ตฌ์— ์ ‘๊ทผํ•˜๊ณ  ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

ํ•ญ์ƒ ์ •๋ง ํ•„์š”ํ•œ MCP๋ถ€ํ„ฐ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์“ธ๋ฐ์—†์ด ๋งŽ์€ MCP๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค๋ฉด, token ์‚ฌ์šฉ๋Ÿ‰์ด ๋งŽ์•„์ง„๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๊ธฐ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ MCP๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

4๏ธโƒฃย Hook

Hook์€ event ๊ธฐ๋ฐ˜์œผ๋กœ ํŠน์ • ์‹œ์ ์— ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์ฃผ๋Š” ์ž๋™ํ™” ํŠธ๋ฆฌ๊ฑฐ๋‹ค.

  • Event: Hook์ด ์–ธ์ œ ์‹คํ–‰๋ ์ง€ ์ด๋ฒคํŠธ.
    • Session ๋‹จ์œ„: SessionStart, SessionEnd
    • Turn ๋‹จ์œ„: UserPromptSubmit, Stop, StopFailure
    • Tool ํ˜ธ์ถœ๋งˆ๋‹ค: PreToolUse (ํˆด ์‹คํ–‰ ์ „), PostToolUse (ํˆด ์‹คํ–‰ ํ›„)
  • Matcher: ์–ด๋–ค ๊ฒฝ์šฐ์—๋งŒ ์‹คํ–‰ํ• ์ง€ ํ•„ํ„ฐ๋ง
  • Action: ์‹ค์ œ ์‹คํ–‰ํ•  command ๋˜๋Š” script ๋“ฑ.

*Turn์€ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›๋Š” ํ•˜๋‚˜์˜ ๋‹จ์œ„์ด๊ณ , Session์€ ์ „์ฒด ์ž‘์—… ๋‹จ์œ„ (Claude Code ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘๊ณผ ๋)

๐Ÿ‘€ย Hook ํ™œ์šฉ ์˜ˆ์‹œ

  • Claude๊ฐ€ ํŒŒ์ผ ์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค ์ž๋™ ํฌ๋งคํŒ… โžก๏ธ PostToolUse prettier ์‹คํ–‰
  • rm -rf ๊ฐ™์€ ์œ„ํ—˜ ๋ช…๋ น ์ฐจ๋‹จ โžก๏ธ PreToolUse exit 2๋กœ ๋ธ”๋กœํ‚น
  • .env ํŒŒ์ผ ์ˆ˜์ • ์‹œ ๋น„๋ฐ€ํ‚ค ๋…ธ์ถœ ๊ฐ์ง€ โžก๏ธ PreToolUse ํŒจํ„ด ๋งค์นญ ๊ฒ€์‚ฌ
  • ์„ธ์…˜ ์‹œ์ž‘ ์‹œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ž๋™ ์ฃผ์ž… โžก๏ธ SessionStart ์ปจํ…์ŠคํŠธ ์„ธํŒ…

๊ผญ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๊ทœ์น™์ด๋ผ๋ฉด, CLAUDE.md ๊ฐ™์€ prompt ๊ธฐ๋ฐ˜ ์„ค์ • ๋Œ€์‹  Hook์„ ์‚ฌ์šฉํ•˜๊ธธ ๊ถŒํ•œ๋‹ค. Prompt๊ฐ€ โ€œ๋ชจ๋ธ์—๊ฒŒ ๋ถ€ํƒโ€ํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด, Hook๋Š” โ€œ๋ฐ˜๋“œ์‹œ ๊ทœ์น™์ด ์‹คํ–‰๋˜๋„๋กโ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

4/ Harness ์„ค๊ณ„ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

๊ฐ„๋‹จ๋ช…๋ฃŒํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด, Harness๋Š” ๋ชจ๋ธ์ด ํ˜ผ์ž์„œ ๋ชปํ•˜๋Š” ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ Harness๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, ๋ชจ๋ธ์ด ๋ฌด์—‡์„ ๋ชปํ•˜๋Š”์ง€, ์–ด๋А ๋ถ€๋ถ„์—์„œ ์‹ค์ˆ˜ํ•˜๋Š”์ง€ ๊ด€์ฐฐํ•˜๊ณ , ์ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค˜์•ผ ํ•œ๋‹ค.

๋˜ํ•œ, ๋ชจ๋ธ์ด ๋ฐœ์ „ํ•œ๋‹ค๋ฉด Harness ๋˜ํ•œ ์žฌ๊ฒ€ํ† ํ•˜๊ณ , ๊ทธ์— ๋งž์ถฐ ๊ฐœ์„ ํ•ด์•ผ ํ•œ๋‹ค. ๋ชจ๋ธ์ด ํ˜ผ์ž์„œ๋„ ๋” ์ž˜ํ•  ์ˆ˜ ์žˆ๋Š”๊ฒŒ ๋งŽ์•„์ง„๋‹ค๋ฉด, ๊ตณ์ด Harness๊ฐ€ ๋„์™€์ค„ ํ•„์š” ์—†๋Š” ๊ฒƒ์ด๋‹ค.

Reference