하네스 엔지니어링이란 무엇인가?
AI가 일하는 환경 전체를 설계하는 것
하네스(Harness)는 AI 모델 바깥에서, 모델이 일하는 환경 전체를 설계하고 운영하는 구조입니다.
같은 모델이라도 어떤 하네스 위에서 돌리느냐에 따라 결과물의 품질이 완전히 달라집니다.
말 자체(근육, 속도)는 AI 모델에 해당합니다.
말에게 씌우는 마구, 달리는 길, 신호 체계는 하네스에 해당합니다.
아무리 좋은 말이라도 올바른 마구 없이는 원하는 방향으로 달리지 못합니다. AI도 마찬가지입니다.
아무리 똑똑한 신입사원도 업무 매뉴얼 없이 첫날부터 혼자 일하면 실수투성이입니다.
업무 범위, 보고 체계, 사용 도구, 금지 사항을 정리해 둔 온보딩 시스템 전체가 바로 하네스입니다.
AI에게 "이렇게 일해"라고 알려주는 회사 시스템이 곧 하네스입니다.
셰프의 요리 실력은 AI 모델입니다.
주방 설비, 레시피북, 위생 규정, 주문 시스템은 하네스입니다.
미슐랭 셰프도 칼이 없고 레시피가 없으면 제대로 된 요리를 내기 어렵습니다.
Anthropic이 직접 공개한 하네스 설계 보고서
2026년 3월 24일, Anthropic Labs의 Prithvi Rajasekaran이 발표
Claude를 만든 회사인 Anthropic이 자사 엔지니어링 블로그에 "장기 실행 앱 개발을 위한 하네스 설계"라는 글을 공개했습니다. 이 글에서 Anthropic은 내부에서 풀어야 했던 두 가지 과제를 밝혔습니다.
과제 1
- Claude가 고품질 프론트엔드 디자인을 만들게 하기
- "AI가 예쁜 웹사이트를 직접 만들 수 있을까?"
과제 2
- 사람 개입 없이 완전한 앱을 만들게 하기
- "몇 시간씩 혼자 돌아가는 코딩 에이전트가 가능할까?"
Anthropic의 해결책은 GAN(Generative Adversarial Network, 적대적 생성 신경망)의 구조에서 나왔습니다.
GAN은 "만드는 AI"와 "평가하는 AI"를 분리해서 서로 경쟁시키는 구조입니다.
Anthropic은 이 아이디어를 에이전트에 적용했습니다. Generator(생성자)와 Evaluator(평가자)를 분리한 것입니다.
AI 모델을 만든 회사가 직접 "모델 자체보다 모델이 일하는 환경(하네스) 설계가 더 중요하다"고 말한 것입니다. 이 보고서를 단계별로 풀어서 살펴보겠습니다.
단순하게 시키면 왜 실패할까?
Anthropic이 밝힌 두 가지 근본적인 문제
Anthropic은 하네스 없이 AI에게 긴 작업을 맡겼을 때 두 가지 문제가 반복적으로 나타났다고 밝혔습니다.
문제 1: 컨텍스트 불안 (Context Anxiety)
AI가 긴 작업 도중에 갑자기 대충 마무리하는 현상
모델은 긴 작업에서 컨텍스트 윈도우가 차오르면 일관성을 잃습니다. 일부 모델은 "컨텍스트 불안"을 보이며, 한계에 가까워졌다고 인지하면 작업을 조기에 마무리해 버립니다.
쉽게 말하면 이런 상황입니다. AI에게 10페이지짜리 보고서를 시켰는데, 7페이지쯤에서 갑자기 "이상 마치겠습니다"라고 끝내버리는 것과 같습니다. AI가 "내 기억 공간이 거의 다 찼다"고 느끼면, 남은 작업을 대충 마무리하거나 아예 생략해 버립니다.
Anthropic은 컨텍스트 윈도우를 완전히 비우고, 이전 상태를 구조화된 파일로 전달하는 방식을 사용했습니다. 교대 근무자에게 인수인계 문서를 넘기는 것과 같은 원리입니다.
문제 2: 자기 평가의 함정 (Self-Evaluation Trap)
자기가 만든 결과물을 스스로 평가하면 항상 "잘했다"고 합니다
자신이 생성한 작업물을 평가하라고 하면, 에이전트는 자신감 있게 칭찬하는 경향을 보입니다. 인간 관찰자에게는 품질이 명백히 평범한 수준인데도 말입니다.
학생이 자기 시험지를 직접 채점하면 점수가 후하게 나오는 것과 같습니다. AI도 마찬가지입니다. 자기가 만든 결과물에 대해서는 "잘 했다"고 판단하고, 스스로 개선하려 하지 않습니다.
혼자 만들고 혼자 평가
- 자기 결과물에 대해 관대하게 평가함
- "잘 했다"고 자평하고 개선하지 않음
- 품질이 일정 수준 이상으로 올라가지 않음
만드는 AI와 평가하는 AI를 분리
- 다른 관점에서 냉정하게 평가함
- 구체적인 피드백으로 실질적 개선을 유도함
- 반복할수록 품질이 계속 올라감
Anthropic의 해결책 (1): "좋은 디자인"을 채점 가능하게 만들다
"이 디자인 괜찮아?"라는 주관적 질문을 점수로 바꾸다
Anthropic은 "디자인이 좋다"는 모호한 판단을 4가지 구체적 채점 기준으로 분해했습니다.
디자인 품질 (Design Quality)
색상, 타이포그래피, 레이아웃, 이미지가 일관된 정체성을 만들어내는가?
독창성 (Originality)
템플릿 기본값이 아닌 커스텀 결정이 있는가? "보라색 그라데이션 위의 흰 카드"처럼 AI 생성물 특유의 징후가 보이지는 않는가?
완성도 (Craft)
타이포그래피 위계, 간격, 색상 조화, 명암비 등 기술적 실행이 정교한가?
기능성 (Functionality)
예쁜지와 상관없이, 사용하기 편한가?
Generator-Evaluator 피드백 루프
만드는 AI가 작업하고, 평가하는 AI가 채점하고, 다시 개선하는 반복
Generator
디자인 생성
Evaluator
4가지 기준으로 채점
피드백
구체적 개선점 전달
반복
5~15회 반복
Evaluator(평가자)는 Playwright MCP를 사용해서 실제 웹페이지에 접속하고, 스크린샷을 찍고, 구현 상태를 직접 확인한 뒤에 채점했습니다.
* Playwright MCP = AI가 웹 브라우저를 직접 조작할 수 있게 해주는 도구입니다. 사람이 마우스로 클릭하고, 화면을 스크롤하고, 스크린샷을 찍는 것처럼 AI도 똑같이 할 수 있게 만들어 줍니다.
"첫 번째 반복에서도, 아무런 기준 없이 만든 결과물보다 눈에 띄게 나은 품질이 나왔습니다. 이는 채점 기준의 문구 자체가 결과물의 성격을 직접적으로 형성한다는 뜻입니다."
실제 결과: 네덜란드 미술관 웹사이트의 변신
반복 9회차에서 10회차로 넘어가며 극적인 변화가 일어났습니다
9회차까지는 전형적인 다크 테마 랜딩 페이지였습니다. 그런데 10회차에서 Generator가 완전히 다른 방향을 시도했습니다.
CSS perspective로 구현한 3D 방이 등장했습니다. 바닥에는 체크무늬가 깔리고, 벽에는 작품이 자유롭게 걸려 있고, 문을 통해 페이지를 이동하는 네비게이션이 만들어졌습니다. 평범한 웹사이트가 공간적 경험으로 완전히 바뀐 순간입니다.
출처: Anthropic Engineering Blog
# 목표 랜딩 페이지 HTML을 반복 개선한다. 이 작업에는 Generator(생성)와 Evaluator(채점), 두 역할이 존재한다. # 채점 기준 (각 10점 만점, 총 40점) 1. 시각적 계층 제목·소제목·본문의 크기와 굵기가 명확히 구분되는가 2. 색상 일관성 주조색 1개, 보조색 1개만 사용하는가 3. 여백 활용 요소 간 간격이 충분히 확보되어 있는가 4. CTA 명확성 행동 유도 버튼이 눈에 띄는 위치에 있는가 # Generator 위 채점 기준을 목표로 랜딩 페이지 HTML 전체를 작성한다. Evaluator의 피드백을 받으면 지적된 항목만 수정한다. 나머지는 건드리지 않는다. 수정 후 코드 상단에 아래 주석을 추가한다. /* 수정 (N회차): [항목명] - [변경 내용] */ # Evaluator 채점 후 아래 형식으로 결과를 출력한다. | 회차 | 시각적 계층 | 색상 일관성 | 여백 활용 | CTA 명확성 | 총점 | | N | X점 | X점 | X점 | X점 | XX점 | 표 다음에 FAIL 항목의 결함을 항목별로 구체적으로 기술한다. 9점 이상은 거의 완벽할 때만 준다. 점수보다 결함을 먼저 기술한다. # 절차 1. [Generator] 채점 기준을 참고해 랜딩 페이지 HTML을 작성한다. 2. [Evaluator] 채점표를 작성하고 FAIL 항목의 결함을 기술한다. 3. 모든 항목이 9.5점 이상이면 COMPLETED를 선언하고 종료한다. 4. 아니면 1번으로 돌아간다. 최대 15회.
Anthropic의 해결책 (2): 3-Agent 시스템으로 확장하다
디자인(2-Agent)에서 풀스택 앱 개발(3-Agent)로 넓히다
프론트엔드 디자인에서 효과가 확인되자, Anthropic은 이 구조를 완전한 풀스택 앱 개발로 확장했습니다. 이를 위해 Planner(기획자)라는 세 번째 에이전트를 추가했습니다.
Planner (기획자)
1~4문장의 간단한 프롬프트를 받아서 완전한 제품 기획서로 확장합니다.
제품 맥락과 큰 그림의 기술 설계에 집중함
세부 구현이 아닌 전체 방향을 결정함
AI 기능을 기획서에 자연스럽게 포함시킴
Generator (생성자)
기획서에 적힌 기능을 스프린트 방식으로 하나씩 구현합니다.
React + Vite (프론트엔드)
FastAPI (백엔드)
SQLite / PostgreSQL (DB)
Git으로 스프린트마다 버전을 관리함
Evaluator (평가자)
Playwright MCP를 사용해서 실제 사용자처럼 앱을 테스트합니다.
UI를 클릭하고 화면 이동을 확인함
API 엔드포인트가 제대로 동작하는지 검증함
데이터베이스 상태를 확인함
스프린트 계약서 기준으로 합격/불합격을 판정함
스프린트 계약 (Sprint Contract) 방식
구현을 시작하기 전에 "무엇이 성공인지"를 먼저 합의한다
성공 기준 정의
Planner
계약 협상
Planner + Evaluator
구현
Generator가 개발
검증
Evaluator가 판정
사전에 합의된 기준이 있으면 평가자는 "구체적으로 뭐가 틀렸는지"를 지적할 수 있습니다. "좀 별로입니다" 대신 "사각형 채우기 도구가 드래그 영역 전체를 채우지 않고, 시작점과 끝점에만 타일을 배치합니다. FAIL."이라고 말할 수 있는 것입니다.
에이전트 간 소통 방식: 파일 기반 통신
에이전트끼리 직접 대화하지 않고, 구조화된 파일을 주고받습니다
- 각 에이전트는 독립적으로 컨텍스트를 리셋할 수 있습니다
- 이전 작업 상태가 구조화된 문서로 남아서 추적이 가능합니다
- 교대 근무자에게 인수인계 문서를 넘기는 것과 같은 원리입니다
# 목표 세 에이전트가 파일을 통해 소통하며 앱을 완성한다. 에이전트끼리 직접 대화하지 않는다. 모든 소통은 파일로 한다. Planner 성공 기준을 정의하고 계약서를 작성한다 Generator 계약서를 읽고 코드를 작성한다 Evaluator 계약서 기준으로 코드를 판정한다 # Phase 1. 성공 기준 합의 [Planner] 아래 형식으로 contract.md를 작성한다. ## 목표 완성된 앱이 해야 할 일 (1~2문장) ## 합격 기준 번호가 매겨진 조건 5개 ## 제약 조건 반드시 지켜야 할 사항 합격 기준 작성 원칙: - 주관적 표현 금지. "좋아 보인다" (X), "버튼 클릭 시 X가 발생한다" (O) - 실행하거나 측정해서 확인 가능해야 한다 [Evaluator] contract.md를 검토한다. 주관적이거나 측정 불가능한 기준은 구체적인 수정안을 제시한다. 모든 기준이 판정 가능하면 contract.md 하단에 STATUS: APPROVED를 추가한다. 최대 5회 반복한다. # Phase 2. 구현 및 검증 [Generator] contract.md만 참고해 코드를 작성하고 code.md에 저장한다. Evaluator의 피드백을 받으면 FAIL 기준 번호에 해당하는 부분만 수정한다. 나머지는 건드리지 않는다. [Evaluator] contract.md의 합격 기준만을 근거로 code.md를 판정한다. 결과를 아래 형식으로 feedback.md에 기록한다. | 기준 번호 | 판정 | 근거 | | 1 | PASS | | | 2 | FAIL | [재현 가능한 구체적 이유] | 모든 기준이 PASS면 feedback.md 하단에 STATUS: COMPLETED를 추가하고 종료한다. 최대 10회 반복한다. # 요청 (여기에 만들 앱을 입력하세요)
같은 프롬프트로 만든 결과가 이렇게 다릅니다
"레트로 게임 메이커를 만들어줘"라는 동일한 요청을 두 가지 방식으로 실행한 결과
| 비교 항목 | Solo Agent (하네스 없이) | Full Harness (3-Agent) |
|---|---|---|
| 소요 시간 | 20분 | 6시간 |
| 비용 | $9 | $200 |
| 기획서 | 없음 (바로 코딩 시작) | 16개 기능, 10개 스프린트 |
| 게임 플레이 | 작동하지 않음 | 실제로 플레이 가능 |
하네스 없이 만든 결과: 20분, $9
빠르지만, 겉모습만 있고 실제로는 작동하지 않는 결과물
하네스로 만든 결과: 6시간, $200
16개 기능을 갖추고, 실제로 플레이할 수 있는 게임 메이커
가장 큰 차이는 플레이 모드에서 나타났습니다. 실제로 캐릭터를 움직이고 게임을 할 수 있었습니다. 물리 엔진에 거친 부분이 있었습니다. 캐릭터가 플랫폼 위로 점프하면 겹쳐지는 것이 직관적으로 어색했습니다. 하지만 핵심은 작동했습니다.
Evaluator가 실제로 잡아낸 버그
스프린트 계약서를 기반으로 구체적인 합격/불합격을 판정합니다
FAIL : 사각형 채우기 도구. 클릭-드래그로 사각형 영역을 선택된 타일로 채워야 함.
결과: 드래그 시작점과 끝점에만 타일이 배치되고, 전체 영역은 채워지지 않음.
Evaluator는 단순히 "잘 됐다, 안 됐다"가 아니라, 정확히 무엇이 어떻게 잘못되었는지를 지적합니다. 이런 구체적인 피드백이 있어야 Generator가 실제로 문제를 고칠 수 있습니다.
모델이 좋아지면 하네스도 함께 진화합니다
Claude Opus 4.6가 나오면서, 하네스 구조를 더 단순하게 만들 수 있었습니다
Claude Opus 4.6는 기획 능력, 장기 에이전트 작업, 긴 컨텍스트 검색 성능이 크게 개선되었습니다. 그래서 Anthropic은 이전에 필요했던 스프린트 분해 구조를 제거했습니다. Planner와 Evaluator는 그대로 유지하되, Generator가 스스로 전체 빌드를 한 번에 진행하도록 바꾼 것입니다.
이전: 스프린트 방식
- 기능을 10개 스프린트로 나누어서 진행
- 스프린트마다 계약, 구현, 검증을 반복
- 구조가 안정적이지만 시간과 비용이 많이 듬
이후: 단순화된 방식
- Planner가 기획하고, Generator가 한 번에 빌드
- Evaluator가 QA하고, 부족하면 다시 빌드
- 더 간단하고 빠르면서도 품질은 유지됨
실전 사례: 브라우저 기반 DAW (디지털 오디오 워크스테이션)
단순화된 하네스로 음악 제작 도구를 만든 결과
단순화된 3-Agent 하네스로 브라우저에서 돌아가는 DAW를 만들었습니다. 이 도구에는 어레인지먼트 뷰, 믹서, 트랜스포트가 모두 포함되어 있고, AI 에이전트가 프롬프트를 통해 간단한 곡을 자동으로 작곡하는 기능까지 갖추고 있었습니다.
출처: Anthropic Engineering Blog
| 단계 | 소요 시간 | 비용 |
|---|---|---|
| Planner (기획) | 4.7분 | $0.46 |
| Build 1차 | 2시간 7분 | $71.08 |
| QA 1차 | 8.8분 | $3.24 |
| Build 2차 | 1시간 2분 | $36.89 |
| QA 2차 | 6.8분 | $3.09 |
| Build 3차 | 10.9분 | $5.88 |
| QA 3차 | 9.6분 | $4.06 |
| 합계 | 약 3시간 50분 | $124.70 |
Build 횟수가 거듭될수록 소요 시간과 비용이 급격히 줄어들었습니다. 3차 Build는 1차와 비교하면 시간은 1/12, 비용도 1/12 수준으로 끝났습니다. Evaluator가 남은 문제만 정확히 짚어주었기 때문입니다.
# 목표 브라우저에서 실행되는 DAW(디지털 오디오 워크스테이션)를 만든다. 이 작업에는 Planner(기획), Generator(생성), Evaluator(검증), 세 역할이 존재한다. 에이전트끼리 직접 대화하지 않는다. 모든 소통은 파일로 한다. # Phase 1. 기획 [Planner] 아래 형식으로 plan.md를 작성한다. ## 구현 기능 반드시 포함할 기능 목록 (번호 매기기) ## 기술 제약 순수 HTML/CSS/JS만 사용, 외부 라이브러리 금지 ## 합격 기준 기능별 PASS/FAIL 판정 조건 (각 기능에 1개씩) ## 우선순위 기능 구현 순서 (핵심 기능 먼저) # Phase 2. 구현 [Generator] plan.md를 읽고 단일 HTML 파일로 DAW를 구현한다. Evaluator의 피드백을 받으면 FAIL 항목 번호에 해당하는 부분만 수정한다. 나머지는 건드리지 않는다. 수정 후 파일 상단에 변경 내용을 주석으로 명시한다. # Phase 3. 검증 [Evaluator] plan.md의 합격 기준을 근거로 구현 결과를 판정한다. 결과를 아래 형식으로 feedback.md에 기록한다. | 기능 번호 | 기능명 | 판정 | 근거 | | 1 | 어레인지먼트 뷰 | PASS | | | 2 | 믹서 | FAIL | [재현 가능한 구체적 이유] | 모든 기능이 PASS면 feedback.md 하단에 STATUS: COMPLETED를 추가하고 종료한다. FAIL이 있으면 Phase 2로 돌아간다. 최대 10회. # 구현할 기능 - 트랙 추가/삭제가 가능한 어레인지먼트 뷰 - 트랙별 볼륨·팬 조절이 가능한 믹서 - 재생/정지/되감기 트랜스포트 - AI 프롬프트로 간단한 멜로디를 자동 생성하는 작곡 기능
Anthropic이 말하는 "다음 단계"
모델이 좋아져도 하네스 설계의 중요성은 사라지지 않습니다
흥미로운 하네스 조합의 가능성은 모델이 개선되어도 줄어들지 않습니다. 대신 이동할 뿐입니다.
기존 하네스가 새 모델에서 어떻게 동작하는지 테스트하고, 불필요해진 구조는 과감히 제거하세요.
하나의 에이전트에게 모든 것을 맡기지 말고, 역할별로 에이전트를 나누세요. "만드는 AI"와 "평가하는 AI"를 분리하는 것이 핵심입니다.
모델이 더 똑똑해지면, 이전에 필요했던 복잡한 구조(스프린트 분할 등)가 불필요해질 수 있습니다. 정기적으로 하네스를 재검토하고 필요 없는 구조는 걷어내세요.
이 페이지의 모든 인용문, 이미지, 동영상, 데이터 테이블은 위 Anthropic 엔지니어링 블로그 원문에서 발췌한 것입니다.
본 자료는 교육 및 강의 목적으로 정리되었으며, 원문의 저작권은 Anthropic에 있습니다.
하네스 설계, 직접 해보세요
Anthropic이 증명한 핵심은 이것입니다. 같은 모델이라도 하네스가 다르면 결과가 완전히 달라집니다.
CLAUDE.md, 스킬, 훅, MCP로 여러분만의 하네스를 만들어 보세요.