오늘도 공부
하네스 설계 입문 본문
기초 지식 정리에서 실무로의 스텝업
HARNESS ENGINEERING · SEMINAR
1페이지 — 하네스 설계 입문
하네스 설계 입문
~ 기초 지식 정리에서 실무로의 스텝업 ~
제1부
하네스 엔지니어링의 계보
- 5개 학파와 정의의 차이
- 이후의 수렴과 표준화
- 그리고 실증
4페이지 — 하네스 엔지니어링이란?
OVERVIEW
에이전트가 같은 실패를 반복하지 않도록 모델 바깥쪽의 ‘환경’을 설계하는 것
AGENT = MODEL + HARNESS
지시 파일, 도구, 검증, 가드레일, 루프 등
모델 이외의 모든 것이 하네스입니다.
흐름은 다음과 같습니다.
Prompt Engineering (2022~)
→ Context Engineering (2024~)
→ Harness Engineering (2026~)
2026년 2월 5일
Mitchell Hashimoto가 명명.
“실패했다면, 같은 일이 두 번 다시 일어나지 않도록 환경을 고친다.”
2026년 2월 11일
OpenAI가 실제 사례 공개.
- 3명이 작업
- 100만 줄 규모
- 코드의 95%를 AI가 생성
그 후 여러 기업과 전문가가 하네스라는 개념을 사용하기 시작했지만, 당시에는 사람마다 정의가 조금씩 달랐습니다. ハーネス設計入門_20260924
5페이지 — 하네스 엔지니어링의 5개 학파
같은 ‘하네스’라는 말을 쓰더라도, 어떤 구현을 본보기로 삼았느냐에 따라 의미의 범위가 다릅니다.
1. Chase 학파
광의·분류론
대표:
- Harrison Chase
- LangChain
핵심 주장:
모델 이외의 모든 것이 하네스
2. Hashimoto 학파
운영 철학
대표:
- Mitchell Hashimoto
핵심 주장:
실패했다면 환경을 다시 설계하라
3. Fowler 학파
제어 이론
대표:
- Birgitta Böckeler
- Thoughtworks
핵심 주장:
컨텍스트 설계의 특수한 형태로 정의
4. Chawla 학파
동심원 모델
대표:
- Avi Chawla
핵심 주장:
LLM의 OS 계층. 3중 중첩 구조
5. Codex 학파
스케일 중심
대표:
- Ryan Lopopolo
- OpenAI Codex
핵심 주장:
규모가 커질수록 무너지는 문제에 대한 해답 ハーネス設計入門_20260924
6페이지 — 서로 대립했던 구조
핵심 쟁점은 하네스와 컨텍스트 중 어느 것이 더 바깥 개념인가였습니다.
Chase / Chawla
하네스 ⊃ 컨텍스트
하네스
- 컨텍스트
- 프롬프트
즉, 전체 프레임워크 설계 관점입니다.
Fowler
컨텍스트 ⊃ 하네스
컨텍스트 설계
- 하네스
- guides
- sensors
즉, feedforward / feedback 제어이론 관점입니다.
2026년 상반기에는 이 차이가 논쟁의 중심이었지만, 이후 용어는 점차 하나로 수렴합니다. ハーネス設計入門_20260924
7페이지 — 이후: 용어의 수렴과 표준화
2026년 3~7월
3월 10일
LangChain 「The Anatomy of an Agent Harness」에서 하네스의 구성 요소를 정리.
4월 19일
Addy Osmani:
“하네스들은 서로 다른 모델보다 오히려 서로 더 닮아가고 있다.”
Build 2026
- Agent Harness 안정 버전
- Pydantic v2.0이 하네스 중심으로 재설계
2026년
Linux Foundation이 Agentic AI Foundation 설립.
대상:
- MCP
- AGENTS.md
- Goose
결국 5개 학파에서 사용하던 용어는 약 5개월 만에 상당 부분 하나로 수렴했습니다.
Agent Plugins 1.0 — 2026년 8월 6일
Skills와 MCP 서버를 하나의 폴더 포맷으로 구성합니다.
plugin.json
skills/
mcp.json
참여:
- Vercel
- Amazon
- Cursor
- GitHub
- Microsoft
- OpenAI
구현:
- ChatGPT
- Codex
- Cursor
- GitHub Copilot
- Kiro
- VS Code
한 번 만들면 여러 클라이언트에서 사용할 수 있는 방향으로 발전했습니다.
다만 완전한 호환성은 아닙니다.
- Claude Code는 독자 형식을 유지
- Skills 또는 MCP 중 하나만 지원하는 클라이언트도 존재
- hooks / commands / rules는 표준화 대상이 아니어서 클라이언트마다 다름
즉,
용어는 수렴했고 포맷 표준화도 시작됐지만, 완전한 호환성은 아직 아니다. ハーネス設計入門_20260924
8페이지 — 하네스만 바꿔도 결과가 달라진다
모델을 변경하지 않고 하네스만 변경했는데 성능과 품질이 달라진 사례입니다.
벤치마크 순위
30위 → Top 5
모델은 그대로 두고 하네스만 변경했더니 Terminal Bench 2.0 순위가 상승.
— LangChain
설정에 따른 점수 차이
±5점 이상
하네스 설정만으로 점수가 이 정도 움직였습니다.
— Anthropic 2026 Agentic Coding Trends Report
품질 저하 원인 조사
3건 중 3건
Claude Code 품질 저하의 원인이 모두 하네스 측 변경이었던 사례.
— 2026년 4월 ハーネス設計入門_20260924
제2부
하네스 설계 실전
목표:
AI 에이전트가 스스로 실패를 발견하고, 스스로 수정하여 작업을 끝까지 완주하게 만드는 방법
10페이지 — 제2부의 흐름
1. 하네스를 만든다
에이전트에게
“어떻게 달려야 하는가”
를 알려주는 계층.
구성:
- AGENTS.md
- Skills
- Sub-agent
2. 가드레일을 설치한다
일탈을 기계적으로 찾아내는 계층
- lint
- type check
- test
이들을 하나의 check 명령어로 묶습니다.
3. 루프를 닫는다
에이전트에게
- 검증기
- 목표
를 주고 스스로 수정하면서 끝까지 진행하게 합니다. ハーネス設計入門_20260924
11페이지 — 전제: 생성형 AI는 확률로 움직인다
같은 지시를 내려도 매번 같은 결과가 나오지는 않습니다.
예를 들어:
“테스트를 ___”
다음 토큰의 확률이:
- 작성한다: 54%
- 실행한다: 28%
- 건너뛴다: 11%
- 기타: 7%
일 수 있습니다.
따라서 확률이 낮은 ‘나쁜 선택’도 0%는 아닙니다.
수천 개의 토큰이 생성되면 작은 확률 차이가 누적됩니다.
같은 지시에서도:
정상 코드 A
정상 코드 B
위험한 일탈
중 하나로 갈 수 있습니다.
기존 프로그램
같은 입력 → 같은 출력
결정적(deterministic)
생성형 AI
같은 입력 → 확률분포에서 샘플링
확률적(probabilistic)
따라서:
지시에만 의존하지 말고 환경과 검증 시스템으로 받아내야 한다. ハーネス設計入門_20260924
12페이지 — Harness와 Guardrails의 차이
HARNESS
하네스 = 말의 마구
달리기 전에
“어떻게 달렸으면 하는가”
를 알려주는 사전 설계 계층
예:
- Custom Instructions / AGENTS.md
- Skills
- Sub-agent
GUARDRAILS
가드레일 = 울타리
달린 뒤
“길에서 벗어나지 않았는가”
를 기계적으로 검사하는 사후 검증 계층
예:
- lint
- format
- type check
- build
- unit / integration / E2E test
- Hooks
핵심:
하네스는 확률적이고, 가드레일은 기계적이다.
기계적인 판단이 강해질수록 에이전트에게 더 많은 권한을 맡길 수 있습니다. ハーネス設計入門_20260924
13페이지 — Harness 상세
하네스는 달리기 전에 전달하는 사전 설계 계층입니다.
역할
프로젝트의:
- 전제
- 규약
- 절차
- 금지사항
을 에이전트가 참조할 수 있는 형태로 명문화합니다.
성격
사람이 판단하는 주관적 계층입니다.
많이 적을수록 강하게 작용하지만 너무 많이 적으면 컨텍스트를 소비합니다.
따라서:
무엇을 적을 것인가를 선택하는 것 자체가 설계다.
또한 자연어로 표현하는 ‘의도’이기 때문에 100% 보장되지는 않습니다.
그래서 기계적으로 판정하는 가드레일과 함께 사용해야 합니다. ハーネス設計入門_20260924
14페이지 — Guardrails 상세
가드레일은:
길에서 벗어나지 않았는지 검사하는 계층
입니다.
사용:
- lint
- type check
- build
- test
이들은 Yes / No를 기계적으로 판정합니다.
누가 실행해도 같은 결과가 나오는 객관적인 계층입니다.
따라서:
판정이 기계적일수록 에이전트가 스스로 실패를 발견하고 스스로 수정하기 쉬워진다.
확률적으로 움직이는 모델을 결정적인 검증 시스템으로 지탱하는 구조입니다. ハーネス設計入門_20260924
15페이지 — Feedback Loop
1. 구현한다
에이전트가 작업 진행
↓
2. 검증한다
에이전트가 직접
check
를 실행하고 결과를 읽음
↓
3. 스스로 수정한다
오류 출력을 보고:
- 수정
- 재실행
↓
다시 반복
사람이 준비하는 것은 두 가지입니다.
검증기 = 문
check
라는 하나의 명령
목표
check가 모두 통과한다
AGENTS.md에는:
- 실행 명령
- 공통 조건
등을 기록합니다.
작업별 조건까지 테스트로 만들어 check 안에 넣으면:
check가 모두 통과했다 = 작업 완료
라고 판정할 수 있습니다.
즉,
검증기와 목표를 제공하면 에이전트 스스로 피드백 루프를 닫을 수 있다. ハーネス設計入門_20260924
16페이지 — 하네스의 도구 상자
1. Rules
적용: 항상
대표적으로:
AGENTS.md
주요 도구들이 읽는 사실상의 공통 포맷.
매 세션 컨텍스트에 들어가며 얕고 넓게 작동합니다.
적합:
- 규약
- 명령어
- 금지사항
2. Skills
적용: 필요할 때
특정 작업용 절차서.
필요할 때만 읽기 때문에 상시 컨텍스트를 소비하지 않습니다.
목적:
정형 작업의 재현성
3. Sub-agent
적용: 역할 단위
특정 전문 프롬프트를 가진 에이전트.
예:
- 조사
- 구현
- 리뷰
목적:
병렬화 + 컨텍스트 분리
권장 순서
첫 단계는 AGENTS.md다.
기본 토대를 먼저 만들고 Skills와 Sub-agent를 그 위에 추가합니다. ハーネス設計入門_20260924
17페이지 — AGENTS.md에 무엇을 써야 하는가
AGENTS.md는 매번 컨텍스트에 들어가기 때문에
한 줄마다 ‘임대료’를 낸다
고 생각해야 합니다.
◎ 써야 할 것
프로젝트 개요
한 문단 정도.
무엇을 위한 프로젝트인지 알려주면 판단 기준이 맞춰집니다.
명령어
build
test
lint
에이전트가 스스로 검증할 수 있게 합니다.
프로젝트 고유 규약
예:
- 네이밍
- 디렉터리
- 에러 처리 방식
하지 말아야 할 것
예:
- 수정하면 안 되는 파일
- 변경 금지 API
✕ 쓰지 말아야 할 것
일반 지식 / 프로그래밍 언어 기본 규칙
모델이 이미 알고 있습니다.
코드를 보면 알 수 있는 내용
코드와 문서를 이중 관리하게 됩니다.
긴 설계 문서 전체
Skills 또는 링크로 분리합니다.
기계적으로 검증할 수 없는 정신론
예:
“코드를 깔끔하게 작성한다.”
대신 기계적으로 판정할 수 있는 형태로 바꿔야 합니다.
기준
처음에는 최소한으로 작성합니다.
모든 줄이 실제 실패나 프로젝트 규칙과 연결되어 있어야 한다.
그리고 일탈이 발생하면 한 줄씩 추가합니다. ハーネス設計入門_20260924
18페이지 — Skills
필요한 경우에만 읽는 절차서
모든 것을 Rules에 넣으면 컨텍스트가 넘칩니다.
반복되는 정형 작업은 Skill로 분리합니다.
예:
# 엔드포인트 추가
## 사용할 때
REST API에 새로운 라우트를 추가할 때
## 절차
1. routes/ 에 route 정의
2. handlers/ 에 로직 구현
3. schemas/ 에 validation 정의
4. __tests__/ 에 테스트 추가
5. docs/api.md 업데이트
## 모범 예제
routes/health.ts 참고
판단 기준
매번 필요하다
→ Rule
특정 작업에서만 필요하다
→ Skill
헷갈리면:
Skill 쪽으로 빼라.
/create-skill을 사용해 대화식으로 생성할 수도 있습니다. ハーネス設計入門_20260924
19페이지 — Sub-agent를 호출하는 두 가지 방식
A. 필요할 때 즉석 생성
부모 에이전트가 필요해진 순간 자식 에이전트를 생성합니다.
일회성 위임에 적합합니다.
예:
- 대규모 조사
- 여러 항목 비교
- 컨텍스트를 많이 사용하는 탐색
- 결과 요약만 받고 싶은 경우
예:
“세 라이브러리를 각각 별도의 Sub-agent에게 병렬 조사시키고 핵심만 보고해.”
B. 미리 정의해두고 호출
역할, 관점, 출력 형태를 파일에 정의해 놓고 이름으로 호출합니다.
반복해서 사용할 작업에 적합합니다.
예:
- 리뷰
- 보안 감사
- 테스트
리뷰 에이전트:
“변경 사항을 규약·보안·테스트 커버리지의 세 관점으로 검토해.”
병렬 실행
비동기로 실행하면 대기 시간은 줄지만 동시에 실행하는 만큼 단위시간당 토큰 사용량은 늘어납니다.
핵심은:
컨텍스트 분리
자식 에이전트에도 자체 하네스가 적용됩니다. ハーネス設計入門_20260924
20페이지 — Guardrails의 계층
오른쪽으로 갈수록 판정이 강해집니다.
Formatter
표현 통일
예:
- Prettier
- gofmt
Linter
작성 규칙 검사
예:
- ESLint
- Clippy
Type Check
정합성 검증
예:
- tsc
- mypy
Build
프로그램이 실제 결과물로 성립하는지 확인
Test
의도한 동작을 보장
이 다섯 가지를 하나의 명령으로 묶습니다.
check
사람도 AI도 같은 문을 통과합니다.
완료 조건:
check가 모두 통과함
원칙:
가드레일이 강할수록 에이전트가 자신의 실패를 스스로 발견할 수 있고, 그만큼 맡길 수 있는 범위가 넓어진다. ハーネス設計入門_20260924
21페이지 — 가드레일을 실행하는 3개의 레일
가드레일은 판정 도구이고, 레일은 이 검사를 자동 실행하는 위치와 시점입니다.
1. 에이전트 Hooks
위치:
- 클라이언트 내부
시점:
- 파일 편집
- 명령 실행
예:
- afterFileEdit → lint
- beforeShellExecution → rm 차단
장점:
- 가장 빠르게 검사
단점:
- 클라이언트 설정으로 비활성화 가능
2. Git Hooks
시점:
- commit
- push
도구:
- Husky
- lefthook
예:
- pre-commit
- pre-push
여기서 check 실행.
다만:
--no-verify
로 우회 가능합니다.
3. CI
시점:
- PR 생성
- PR 업데이트
동일한 check를 CI에서 실행하고, branch protection으로 실패하면 merge할 수 없도록 합니다.
가장 강력합니다.
핵심
가까움 · 빠름 · 약함
↓
멀리 있음 · 느림 · 강함
안쪽에서 빠르게 발견하고, 바깥쪽에서 확실하게 막는다. ハーネス設計入門_20260924
22페이지 — 가드레일은 2종류다
1. 결과물에 대한 가드레일
이미 작성한 것을 사후 검증합니다.
- lint
- type check
- build
- test
질문:
“올바르게 만들었는가?”
실패 결과는 피드백 루프의 입력이 됩니다.
2. 행동에 대한 가드레일
위험한 행동을 실행 전에 차단합니다.
- Hooks
- 허용 목록
예:
beforeShellExecution에서:
- rm
- 외부 전송
등을 차단합니다.
질문:
“실행해도 되는가?”
일어난 뒤에는 되돌릴 수 없는 사고에 사용합니다.
공통 원칙:
사람의 주의력에 의존하지 않고 기계적으로 막는다. ハーネス設計入門_20260924
23페이지 — 하네스 설계의 3계층
문서에서는 이를 말 / 울타리 / 경계에 비유합니다.
1. 말의 마구 — 방향
달리기 전에 어떻게 움직여야 하는지 알려줍니다.
- AGENTS.md
- Skills
2. 울타리 — 판정
길에서 벗어났는지 기계적으로 판단.
- lint
- type
- test
- Hooks
에이전트가 결과를 읽고 수정합니다.
3. 경계 — 가동 범위
아예 접근 가능한 영역 자체를 결정합니다.
- 격리
- 차단
- 최소 권한
도달할 수 없게 해야 하는 자산
- Production
- DB
- Secrets
- 개인정보
핵심:
가드레일은 길의 끝에서 일탈을 탐지한다.
경계는 되돌릴 수 없는 장소로 가는 길 자체를 처음부터 만들지 않는다. ハーネス設計入門_20260924
24페이지 — 3계층의 역할
하네스
방향을 제시
가드레일
길을 벗어났는지 판정
인프라 경계
갈 수 있는 범위 자체를 제한
경계가 묻는 질문:
접근할 수 있는가?
특성:
구조적이며 사전적이다.
판단하는 것이 아니라 접근 자체를 불가능하게 만든다.
수단:
- Container
- Sandbox
- 네트워크 차단
- 최소 권한
강도의 단계:
지시한다
확률적
↓
가드레일로 막는다
기계적
↓
경계로 불가능하게 만든다
구조적
핵심:
되돌릴 수 있는 일탈은 가드레일로 잡아 루프로 돌려보내고, 되돌릴 수 없는 일탈은 경계에서 시도 자체를 없앤다. ハーネス設計入門_20260924
25페이지 — 하네스와 보안
자율성을 높일수록 에이전트 자체가 공격의 진입점이 될 수 있습니다.
1. 간접 Prompt Injection
외부 콘텐츠에 숨어 있는 지시에 모델이 따르는 문제
2. 기밀·개인정보 유출
인증 정보와 고객 데이터를 에이전트가 읽을 수 없게 해야 합니다.
3. 파괴적 작업
예:
- rm
- force push
실행할 수 없도록 해야 합니다.
4. Supply Chain
AI가 제안한 dependency package는 사람이 확인해야 합니다.
가장 위험한 조합
기밀 데이터 접근
×
의심스러운 콘텐츠 읽기
×
외부 데이터 전송
이 3개를 동시에 허용하지 말아야 합니다.
이를 Lethal Trifecta라고 합니다.
방어:
행동 가드레일
×
Sandbox 격리
×
신뢰 경계
검토된 Skill과 Plugin만 허용합니다. ハーネス設計入門_20260924
26페이지 — 자율 실행 시간 자체가 목표는 아니다
목표는:
짧게, 적게, 싸게 끝내는 것
입니다.
Uber의 비용 방정식:
사용자 수
×
사용자당 세션 수
×
세션당 턴 수
×
턴당 요청 수
×
요청당 토큰 수
×
토큰당 가격
하네스가 줄일 수 있는 것은 중간 항목입니다.
Turn
계획을 빠르게 만들어 불필요한 턴과 오류 감소
Request
사내 정보를 근거로 제공하여 쓸데없는 탐색 감소
Token
항상 상주하는 컨텍스트 감소
예:
- MCP를 CLI화
- 캐싱
Uber의 2026년 2월 → 8월 결과
사용자:
7배
요청:
9.4배
그런데도 총비용은 거의 그대로.
추가로:
- 1,000 요청당 비용: -34%
- 세션당 비용: -52%
가장 효과적이었던 방법:
Sub-agent를 저렴한 모델로 변경
결론:
오래 자율적으로 실행됐다는 사실 자체는 성과가 아니다. ハーネス設計入門_20260924
27페이지 — 하네스는 숨겨진 기술 부채다
잘 만든 하네스에도 수명이 있습니다.
Han Lee, 2026:
“좋은 팀일수록 많은 하네스를 만든다. 그리고 그중 많은 것은 다음 세대 모델에서는 필요 없어질 것이다.”
현재 모델의 약점을 보완하기 위해 만들어 놓은:
우회책
예:
- “생략하지 말고 전부 출력해”
- “전부 읽은 다음 수정해”
과도한 설계
- 세밀하게 나눈 절차
- 독자적인 retry 처리
이런 것은 모델이 좋아지면 사라질 수 있습니다.
반면 남는 것은:
핵심
- test / check
- 권한과 경계
- 프로젝트 고유 규칙
즉:
모델 발전
↓
임시 우회책 → 사라짐
과도한 절차 → 사라짐
검증·보안·고유 규칙 → 남음
따라서:
한 시점의 하네스 구조에 집착하지 말고, 가볍게 유지하며 정기적으로 정리해야 한다. ハーネス設計入門_20260924
28페이지 — 하네스 엔지니어링 구현 순서
1. 먼저 경계를 만든다
안전한 작업 환경 준비.
- Sandbox
- Cloud Agent
그리고:
Production 인증 정보는 주지 않는다.
2. AGENTS.md 작성
최소한으로 시작합니다.
모든 줄은 실제:
- 실패
- 프로젝트 규칙
과 연결되어야 합니다.
초안은 AI에게 작성시킨 뒤 사람이 삭제하면서 다듬습니다.
3. 가드레일을 만들고 1개의 명령으로 묶는다
lint
type
test
↓
check
사람과 AI 모두 같은 검증을 통과합니다.
4. 루프를 닫는다
에이전트에게:
- 검증기
- 목표
를 줍니다.
목표:
check가 모두 통과
5. 반복 작업이 생기면 도구를 추가한다
반복되는 절차:
→ Skills
반복되는 관점:
→ Sub-agent
6. 운영하면서 성장시키고 정기적으로 정리한다
일탈이 생기면:
Rule 한 줄 추가
몇 달에 한 번 정도는:
전체를 지웠다가 정말 필요한 것만 다시 넣어보는 정리
도 권장합니다.
Git으로 관리하면 안전하게 시도할 수 있습니다.
핵심 순서
경계를 먼저 만든다.
Rules보다 먼저 도구를 늘리지 않는다. ハーネス設計入門_20260924
29페이지 — 결론: 하네스 엔지니어링 4원칙
1. 돌아올 수 없는 곳으로 가는 길을 만들지 않는다
다음에는 애초에 접근할 수 없어야 합니다.
- Production
- Secrets
- 개인정보
- 되돌릴 수 없는 작업
사용:
- 격리 환경
- 통신 차단
- 최소 권한
경계를 먼저 만든다.
2. 진행 방향은 하네스로 알려준다
명문화:
- 규칙
- 명령어
- 금지사항
일탈이 생길 때마다 한 줄씩 추가합니다.
작성보다 운영이 중요하다.
3. 일탈은 가드레일로 탐지한다
- lint
- type
- test
- Hooks
이를 하나의:
check
로 묶습니다.
사람도 AI도 같은 문을 통과합니다.
판정은 기계적으로 합니다.
4. 루프를 닫아 자율 실행시킨다
에이전트에게:
- 검증기
- 목표
를 제공하면,
에이전트가:
- 구현
- 검증
- 오류 확인
- 수정
- 재검증
을 반복하여 스스로 작업을 완료합니다.
