프로그래밍

Loop Engineering vs Harness Engineering

푸른강아지 2026. 6. 12. 14:56
반응형

Loop Engineering vs Harness Engineering:
AI 코딩 에이전트의 새로운 패러다임

2026년, AI 코딩 에이전트 업계에 새로운 키워드가 등장했습니다. Loop Engineering입니다. Google 엔지니어 Addy Osmani가 자신의 블로그에서 개념화한 이 용어는, 불과 며칠 만에 개발자 커뮤니티에서 뜨거운 논쟁을 불러일으켰습니다.

그런데 잠깐. 몇 달 전만 해도 Harness Engineering이라는 개념이 같은 커뮤니티를 뜨겁게 달궜었죠. 둘의 차이는 무엇일까요? 새로운 buzzword일 뿐일까요, 아니면 진짜 패러다임 전환일까요?

이 글에서는 두 개념을 깊이 파헤치고, 실제 코드 예제와 함께 그 차이를 명확히 정리해보겠습니다.

 

1. 🏗️ Harness Engineering — 에이전트의 엔진룸을 설계하라

Agent = Model + Harness. 당신이 모델이 아니라면, 당신은 Harness다.
— Addy Osmani, "Agent Harness Engineering" (2026.04)

Harness Engineering의 핵심 전제는 간단합니다. "좋은 harness를 가진 평범한 모델이, 나쁜 harness를 가진 좋은 모델을 이긴다." 실제로 Terminal Bench 2.0에서 같은 Claude Opus 4.6 모델이 harness에 따라 Top 30 → Top 5로 성능이 극적으로 변화한 사례가 이를 증명합니다.

Harness가 포함하는 것

  • 시스템 프롬프트 — AGENTS.md, CLAUDE.md, SKILL.md 등 프로젝트 컨텍스트
  • Tools — filesystem 접근, bash 실행, 브라우저, 샌드박스
  • Connectors — MCP 서버 설정 (이슈 트래커, DB, Slack 연동)
  • Hooks — compaction, lint 검사, 연속성 관리, 사전/사후 처리
  • Observability — 로깅, 비용/지연 시간 측정, 추적
  • Memory — 검색 기능, 컨텍스트 로트(Rot) 방지

Ratchet 원칙

🔧 핵심 원칙

에이전트가 실수할 때마다 그 실수를 영구적인 시스템 신호로 전환하라:

  1. 에이전트가 주석 처리된 테스트를 PR에 포함 → AGENTS.md에 "절대 테스트를 주석처리 하지 말고, 지우거나 수정하라" 추가
  2. pre-commit hook에서 .skip( 이나 xit( 패턴 차단
  3. 리뷰어 sub-agent가 주석 처리된 테스트를 blocker로 플래그

규칙: 실제 실패를 본 후에만 제약을 추가하고, 모델이 불필요하게 만든 후에만 제거한다.

 

2. 🔁 Loop Engineering — 당신을 프롬프터 자리에서 해방시켜라

나는 더 이상 Claude를 직접 프롬프팅하지 않는다. Claude를 프롬프팅하고 무슨 일을 할지 파악하는 루프가 돌아가고 있다. 내 일은 루프를 작성하는 것이다.
— Boris Cherny, Anthropic Claude Code 리드
더 이상 코딩 에이전트를 직접 프롬프팅하면 안 된다. 당신의 에이전트를 프롬프팅하는 루프를 설계해야 한다.
— Peter Steinberger (via Addy Osmani)

Loop Engineering은 한 차원 위의 개념입니다. Harness가 "에이전트가 실행되는 환경"이라면, Loop는 "그 환경을 언제, 왜, 어떤 목표로 실행할지 결정하는 외부 오케스트레이터"입니다.

쉽게 말해: 당신은 더 이상 직접 프롬프트를 입력하지 않습니다. 대신, 당신을 대신해 프롬프트를 생성하고 실행하고 검증하는 시스템(루프)을 설계합니다.

세 가지 레이어의 진화

레이어 최적화 대상 작업 단위
Prompt Engineering
(과거)
하나의 지시를 어떻게 잘 적을까 사람이 직접 타이핑하는 하나의 턴
Context Engineering
(현재)
윈도우에 무엇을 넣을까: 문서, 히스토리, 도구 정의 하나의 답변을 위한 조건 설계
🔁 Loop Engineering
(미래)
무엇을, 언제 프롬프팅할지, 결과가 acceptable한지 판단하는 시스템 수많은 턴에 걸친 자가 실행 사이클
⚠️ 주의

Prompt Engineering이 사라지는 것이 아니다. Loop Engineering은 그 위에 자율 제어 구조를 추가하는 것이다. 프롬프트 품질은 여전히 중요하지만, 레버리지의 중심이 "좋은 프롬프트 한 줄"에서 "프롬프트를 생성하고 검증하는 시스템의 설계"로 이동했다.

 

3. 🧱 Loop의 6가지 구성 요소

Addy Osmani가 정의한 Loop는 다음 6가지 요소로 구성됩니다. Claude Code와 OpenAI Codex 모두 동일한 구조를 (이름만 다르게) 지원합니다.

① Automations — 심장박동 (Heartbeat)

스케줄 기반으로 작업을 발견하고 분류(triage)하는 트리거입니다. 사람이 "이제 시작해"라고 말할 필요가 없습니다.

도구 구현
Claude Code /loop (주기적 실행), /goal (조건 충족까지 실행), cron, hooks, GitHub Actions
OpenAI Codex Automations 탭 (프로젝트/프롬프트/주기 설정), /goal 명령어
# Claude Code: 매주 평일 오전 9시 CI 실패 분석 루프 /loop "어제의 CI 실패를 읽고, 원인을 TODO.md에 정리하고, quick-win 레이블이 붙은 것은 자동으로 fix PR을 생성해라" --schedule "0 9 * * 1-5" # Claude Code: 검증 가능한 조건이 충족될 때까지 실행 /goal "test/auth 패키지의 모든 테스트가 통과하고 lint가 깨끗하다"

② Worktrees — 병렬 충돌 방지

여러 에이전트가 동시에 작업할 때 파일 충돌을 방지합니다. 각자 독립 브랜치 + 별도 워킹 디렉토리에서 작업합니다.

💡 현실적인 조언

당신의 리뷰 대역폭이 여전히 병목이다. Worktree가 기계적 충돌은 막아주지만, 당신이 하루에 검토할 수 있는 PR의 양이 곧 한계다. 병렬 에이전트 수를 늘리기 전에 먼저 리뷰 프로세스를 최적화하라.

③ Skills — 프로젝트 지식의 코드화

매 세션마다 프로젝트 컨텍스트를 다시 설명하지 않도록, 영속적인 지식을 SKILL.md 파일로 저장합니다.

매커니즘 저장 대상 저장 위치
Skill 영속적 프로젝트 지식 (컨벤션, 빌드 방법, 의사결정 내역) SKILL.md (프로젝트 레포)
Memory 변경 가능한 상태 (무엇이 끝났는지, 무엇이 다음인지) TODO.md, 이슈 보드
Connector 외부 도구 접근 권한 MCP 서버 설정
모델은 실행 사이사이 모든 것을 잊는다. 메모리는 컨텍스트 안에 있으면 안 되고, 디스크 위에 있어야 한다. 에이전트는 잊지만, 레포는 잊지 않는다.
— Addy Osmani, "Loop Engineering"

④ Plugins & Connectors — 실제 도구와의 연결

MCP (Model Context Protocol) 기반으로 에이전트가 실제 개발 도구와 상호작용합니다. 이슈 트래커 조회, DB 쿼리, Slack 메시지 전송 등이 가능해집니다. 이것이 "이론적 제안"과 "실제로 PR을 생성하고 Slack에 알리는 루프"의 차이를 만듭니다.

⑤ Sub-Agents — Maker와 Checker의 분리

가장 중요한 구조적 결정입니다. "코드를 작성한 모델이 자기 숙제를 채점하면 너무 관대하다." 따라서 작성자(Implementer)와 검증자(Verifier)를 분리합니다.

# .claude/agents/reviewer.md --- name: spec-reviewer description: 변경사항을 프로젝트 스킬과 테스트에 대해 검증 model: opus isolation: worktree --- 당신은 적대적 리뷰어다. 테스트 스위트를 실행하고, diff를 CONVENTIONS.md와 대조하여 검증하라. 검증 가능하지 않은 것은 모두 reject하라.

전형적인 3분할: Explorer(탐색) → Implementer(구현) → Verifier(검증)

⑥ Memory (State) — 여섯 번째 요소

루프의 실행 간에 지속되는 상태입니다. 모델은 매 실행 사이에 모든 컨텍스트를 잊으므로, 진행 상태, TODO, 결정 내역은 반드시 디스크 위의 파일로 관리해야 합니다.

 

4. 🆚 결정적 차이: Harness vs Loop

이제 두 개념의 가장 중요한 차이를 표로 정리해보겠습니다.

기준 🏗️ Harness Engineering 🔁 Loop Engineering
핵심 질문 "에이전트가 실행될 최적의 환경은?" "에이전트를 언제, 무엇을 위해, 어떻게 검증하며 실행할까?"
범위 단일 에이전트 인스턴스 내부 여러 실행에 걸친 외부 오케스트레이션
시간 스케일 하나의 세션 / 하나의 턴 여러 세션, 날짜, 스케줄 (cron, /loop)
프롬프팅 주체 사람이 프롬프트 작성 → Harness가 실행 Loop가 프롬프트를 생성 — 사람은 시스템만 설계
작업 단위 하나의 ReAct 사이클 수많은 ReAct 사이클을 조율
사람의 역할 프롬프트 엔지니어 + Harness 설계자 Loop 설계자 — 프롬프팅에서 손을 뗌
메모리/상태 컨텍스트 윈도우 내 (AGENTS.md 등) 디스크 위 (TODO.md, 진행 상태 파일)
대표 요소 MCP 서버, sandbox, hooks, compaction, observability cron, /goal, sub-agents, worktrees, 종료 조건
실패 모드 에이전트가 멍청한 행동을 함 루프가 무한 반복, 비용 폭발, 가짜 진전

레이어 스택으로 보는 관계

🔁 Loop Engineering
자동화 / 스케줄 / 서브에이전트 / 종료 조건 / 상태 관리
⬆️ Loop가 Harness 위에서 실행된다
🏗️ Harness Engineering
Tools / MCP / Hooks / Sandbox / Memory / Observability
⬆️ Harness가 Model을 Agent로 만든다
🤖 Model (LLM)
Claude Opus, Sonnet, GPT-4o, DeepSeek 등

Model + Harness = Agent.
Agent + Loop = Autonomous System.

 

5. 🎬 실제 워크플로우 비교 — CI 실패 분석

가장 이해하기 쉬운 예시로, 매일 아침 CI 실패를 분석하는 시나리오를 비교해보겠습니다.

❌ Old Way: 사람이 직접 프롬프팅 (Harness만 있음)

아침 9시, 당신이 하는 일: 1. GitHub Actions CI가 실패한 걸 확인 2. 터미널 열고 Claude Code 실행 3. 직접 프롬프트 타이핑: → "어제 CI에서 test/auth/login_test.go가 왜 터졌는지 분석해줘" 4. Claude가 로그를 읽고 답변 5. 다시 프롬프트 타이핑: → "원인 찾았으니 hotfix 브랜치 만들어서 수정 PR 올려줘" 6. Claude가 코드 작성, PR 생성 7. 다음날: 같은 과정 반복 😩

당신은 매일 아침 같은 프롬프트를 직접 타이핑하는 수동 프롬프터입니다. Harness(환경)는 잘 갖춰져 있지만, "언제 실행할지""무엇을 할지"는 여전히 당신이 직접 결정합니다.

✅ New Way: Loop가 대신 프롬프팅

당신이 하는 일 (단 한 번): 1. 루프를 설계한다 — 끝. 이제 매일 아침 9시, Loop가 당신을 대신해: Step 1 — Loop → Automation 트리거 Loop가 자동 생성한 프롬프트: "어제 CI failures를 읽고 TODO.md에 정리하라" Step 2 — Claude Code가 CI 로그 분석, TODO.md 작성 Step 3 — Loop가 TODO.md 확인 → "내용이 있네? 계속 진행" Loop가 자동 생성한 다음 프롬프트: "각 실패 원인을 분석하고, quick-win은 fix 브랜치를 생성하라" Step 4 — Claude Code가 분석, quick-win 수정 PR 생성 Step 5 — Loop → Verifier Sub-agent 실행 Loop가 자동 생성한 검증 프롬프트: "Implementer의 PR #1424를 검증하라. 테스트 통과, 컨벤션 준수 여부 확인. 문제 있으면 reject, 통과면 approve." Step 6 — Verifier가 PR 검증, report 작성 Step 7 — Loop가 최종 요약을 Slack에 전송 "✅ 오늘 처리: CI 실패 3건 중 2건 자동 수정 ⚠️ 1건(test/auth/login_flaky)은 사람 검토 필요"

당신은 직접 프롬프트를 단 한 줄도 입력하지 않았습니다. 시스템(루프)이 상황을 판단하고, 적절한 프롬프트를 생성하고, 결과를 검증하고, 필요한 경우에만 당신을 호출합니다.

 

6. ⚠️ Loop Engineering의 5가지 실패 모드

루프가 강력한 만큼, 잘못 설계되면 그 피해도 증폭됩니다. Addy Osmani가 지적한 주요 실패 모드입니다.

실패 모드 증상 해결책
① 무한 루프 에이전트가 계속 돌지만 목표에 도달하지 못함 명확한 종료 조건 + 최대 반복 횟수 + 예산 제한
② 컨텍스트 오염 히스토리가 쌓여 토큰 한도 초과, 추론 저하 요약 + 오래된 이터레이션 폐기 + compaction
③ 가짜 진전 생산적으로 보이지만 목표에 도움이 안 되는 행동 Verifier sub-agent + 목표 정렬 검사
④ 비용 폭발 수백 번의 iteration, 불필요한 도구 호출 느린 cadence로 시작, 엄격한 예산, 모니터링
⑤ 과도한 컨텍스트 의존 모든 히스토리를 동등하게 중요시 → 추론 품질 저하 Token-poor loop 설계, 검색 기반 컨텍스트 조립
⚠️ Token-Rich vs Token-Poor

Token-Rich Loop: 매 iteration마다 전체 컨텍스트 포함 — 실수 적지만 고비용, 느림
Token-Poor Loop: 최소 컨텍스트만 — 저비용, 빠르지만 환각/재작업 위험

Loop Engineering의 예술은 latency, cost, quality, safety 사이의 균형을 찾는 것입니다.

 

7. 🔗 Hermes Agent로 Loop Engineering 실현하기

흥미롭게도, 우리가 사용하는 Hermes Agent는 Loop Engineering의 많은 요소를 이미 내장하고 있습니다.

Loop 구성 요소 Hermes Agent 구현
Automations (심장박동) cronjob 도구 — 스케줄 기반 자동 실행
Skills (지식 축적) skill_manage / skill_view — SKILL.md 기반 영속 지식
Sub-agents (분업) delegate_task — 병렬/격리 서브에이전트 실행
Connectors (도구 연결) Native MCP 클라이언트 (MCP 서버 자동 등록)
Memory (영속 상태) memory 도구 + session_search — 크로스세션 저장/검색
Goal 기반 실행 cronjob + skills + 조건부 deliver로 구현 가능
💡 실제 사례: Daily LLM News Briefing

이 블로그를 읽고 계신 분의 Hermes Agent 환경에는 다음과 같은 cronjob이 이미 설정되어 있습니다:

cronjob: action: create schedule: "0 9 * * *" ← Loop의 "Automation" skills: ["llm-news-curation"] ← Loop의 "Skills" prompt: "오늘 LLM 뉴스 수집, 요약" ← Loop가 생성한 프롬프트 deliver: "slack:#채널" ← Loop의 "Connector"

여기서 당신은 cronjob을 한 번 설정했을 뿐입니다. 이후 매일 아침 9시, Hermes 시스템이 자동으로 프롬프트를 생성하고, 뉴스를 수집하고, 요약하고, Slack으로 전송합니다. 이것이 바로 Loop Engineering의 실제 구현입니다.

 

8. 🤔 커뮤니티 반응: Buzzword인가, 패러다임 전환인가?

Reddit r/myclaw 커뮤니티에서는 이 개념이 진짜인지, 아니면 "vibe coding"이나 "harness engineering"의 뒤를 잇는 또 다른 hype인지에 대한 논쟁이 있었습니다.

한 Reddit 사용자의 현실적인 평가:

Loop Engineering의 유용한 버전은 아마 "반복적이거나 위험한 워크플로우 부분을 메모리와 체크로 감싸는 것"일 것이다. 전체 워크플로우를 루프로 만들면 오히려 경직되어 에이전트의 창의성이 죽는다.
— Reddit r/myclaw

또한 실제 엔드투엔드 사례가 아직 부족하다는 비판도 있습니다. 많은 업계 리더들이 개념은 이야기하지만, 구체적인 "이렇게 구현하라"는 예제는 드물다는 지적입니다.

필자의 견해: Loop Engineering은 단순한 buzzword를 넘어, AI 에이전트 개발 패러다임의 자연스러운 진화입니다. Prompt Engineering(단일 지시 최적화) → Context Engineering(컨텍스트 설계) → Loop Engineering(자율 루프 시스템 설계)으로 이어지는 흐름은, 소프트웨어 공학이 수동 작업에서 자동화로 진화해온 역사와 일치합니다.

다만 현실적으로는 모든 작업을 루프로 만들 필요는 없습니다. 창의적인 작업, 모호한 요구사항, 높은 비용의 의사결정은 여전히 사람의 개입이 필요합니다. Loop Engineering의 핵심 통찰은 "무엇을 루프에 맡기고, 무엇은 사람이 직접 할지"를 설계하는 안목에 있습니다.

 

9. 🎯 결론: 한 문장으로 정리

🏗️ Harness Engineering

에이전트가 똑똑하게 행동할 환경을 만드는 것

🔁 Loop Engineering

당신이 직접 프롬프팅하지 않아도
에이전트가 계속 유용한 일을 하게 만드는 시스템을 설계하는 것

즉, Harness = 에이전트 한 대의 '엔진룸'을 설계하는 것이고, Loop = 그 엔진을 '언제, 왜, 얼마나' 돌릴지 결정하는 자율 주행 시스템을 설계하는 것입니다.

두 개념은 대체 관계가 아니라 계층 관계입니다. 좋은 Loop는 좋은 Harness 위에서만 동작합니다. 그리고 좋은 Harness는 좋은 Loop가 있어야 비로소 그 잠재력을 최대한 발휘합니다.

반응형