AI 모델 자체가 아니라 모델을 감싸는 맥락·도구·가드레일·검증 구조를 설계하는 일이다. 같은 모델인데 프로젝트마다 결과가 들쭉날쭉하거나 에이전트에게 긴 작업을 맡길 때 쓰며, 프롬프트 하나가 아니라 에이전트 작업 전체를 다룬다는 점이 다르다.
| 구분 | 다루는 것 | 범위 |
|---|---|---|
| 프롬프트 엔지니어링 | 지시문 하나를 어떻게 쓸지 | 질문 하나 |
| 컨텍스트 엔지니어링 | 모델에게 어떤 정보를 보여 줄지 | 호출 한 번 |
| 하네스 엔지니어링 | 맥락·도구·검증·복구 전체 구조 | 에이전트 작업 전체 |
하네스라고 하면 거창해 보이지만, 실제로는 에이전트가 일하는 환경을 이루는 장치 몇 가지의 묶음이다. 모델을 바꾸지 않고 이 장치만 다시 짜도 결과가 눈에 띄게 좋아지는 경우가 많다.
| 구성 요소 | 하는 일 | 예 |
|---|---|---|
| 맥락 | 규칙·배경을 미리 알려 준다 | 시스템 프롬프트, 프로젝트 규칙 문서 |
| 도구 | 할 수 있는 일의 범위를 정한다 | 파일 읽기·쓰기, 검색, 외부 API |
| 가드레일 | 위험한 행동을 막는다 | 명령 차단, 권한 확인 |
| 검증 루프 | 잘못된 결과를 걸러 다시 시킨다 | 테스트, 린트, 출력 형식 검사 |
Claude Code를 쓴다면 이미 하네스를 다루고 있는 셈이다. CLAUDE.md에 프로젝트 규칙과 코딩 컨벤션을 적어 두면 에이전트가 세션마다 그 맥락을 읽고 시작한다. 나머지 장치도 필요해질 때 하나씩 붙이면 된다.
| 장치 | 이럴 때 붙인다 |
|---|---|
CLAUDE.md | 같은 규칙을 매번 다시 설명하고 있을 때 |
| 훅 | 파일 수정 후 린트를 자동으로 돌리거나 위험한 명령을 막고 싶을 때 |
| 스킬 | 반복하는 작업 순서를 정해 두고 싶을 때 |
| MCP | 외부 도구를 연결하되 접근 범위는 통제하고 싶을 때 |
에이전트를 직접 만들 때도 순서는 같다. 시스템 프롬프트로 역할과 제약을 잡고, 도구 정의로 할 수 있는 일을 정한 뒤, 출력 검증 루프로 잘못된 결과를 걸러 낸다.
몇 시간씩 이어지는 작업은 중간에 맥락이 끊기기 쉽고, 새 세션의 에이전트는 이전에 무엇을 했는지 모른다. 진행 상황을 적는 파일을 두고, 기능 하나를 끝낼 때마다 테스트를 돌린 뒤 git에 커밋하게 하면 다음 세션이 그 기록을 읽고 이어서 작업할 수 있다. 한 번에 다 하려 하기보다 작은 단위로 끝내고 넘기게 하는 구조가 실패를 줄인다.
하네스를 너무 빡빡하게 짜면 에이전트가 유연하게 대응하지 못하고, 너무 느슨하면 엉뚱한 방향으로 간다. 처음에는 최소한의 규칙만 두고, 실수가 실제로 반복되는 지점에 가드레일이나 검증을 하나씩 더하는 방식이 실용적이다. 규칙 문서가 길어지면 모델이 중요한 내용을 놓칠 수 있으니, 낡은 규칙은 정리해서 짧게 유지한다.
가장 흔한 건 코딩 에이전트의 작업 환경을 다듬는 일이다. 규칙 문서와 테스트만 잘 갖춰도 같은 모델이 훨씬 안정적으로 일한다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 코딩 에이전트 | 규칙 문서에 컨벤션을 적고, 수정 후 테스트·린트를 자동으로 돌려 실수를 바로 잡게 한다 |
| 직접 만드는 에이전트 앱 | 시스템 프롬프트로 역할을 정하고, 쓸 수 있는 도구를 좁힌 뒤 출력 형식을 검사한다 |
| 오래 도는 자동화 작업 | 진행 기록 파일을 두고 작은 단위마다 커밋해, 세션이 끊겨도 이어서 하게 한다 |