PART 5 · Harness와 자기 개선
Harness의 세 가지 설계 패턴
잘 설계된 Harness는 명확한 패턴 언어를 갖습니다 — 스크립트를 무작위로 이어 붙인 것이 아닙니다. 세 가지 핵심 패턴이 현재 가장 강력한 Agent 시스템의 아키텍처 결정 90%를 커버합니다.
Pattern 1
1
Workflow Automation
워크플로 자동화
핵심 아이디어: Agent는 목표 지향적 루프이며, 한 번 실행하고 종료되는 스크립트로 취급해선 안 됩니다.
- Plan → Execute → Observe/Test → Improve → Execute again: 매 생성 라운드는 다음 라운드 최적화의 출발점입니다.
- 자신의 실행 궤적 분석: 우수한 Agent는 이전 라운드에서 무엇을 했는지, 어디서 실패했는지, 왜 실패했는지를 되돌아보고 전략을 조정해 동일한 Prompt를 반복하지 않습니다.
- 런타임 반복 강조: 개선은 Agent 실행 중에 일어나며, 사람이 미리 작성한 정적 템플릿에 의존하지 않습니다. Agent는 매 실행에서 학습하고 적응하고 최적화합니다.
- 실패는 신호이지 종료가 아닙니다: 테스트 실패, 명령어 오류, 예상치 못한 출력 — 이 모든 것이 Agent 자기 수정의 트리거입니다.
Agent 워크플로 루프: plan → execute → observe → improve → execute again (출처: OpenAI Codex Agent Loop)
설계 인사이트
Agent를 일회성 답변 머신으로 설계하지 마십시오. 스스로를 감사하는 능력을 부여하십시오: 테스트 실패 시 자동으로 원인을 분석하고, linter 오류 시 자동으로 수정하고, 사용자 피드백에 따라 전략을 조정합니다. 이것이 워크플로 자동화의 핵심입니다: 피드백 루프를 시스템 안에 내재화하는 것입니다.
Pattern 2
2
File System as Persistent Memory
파일 시스템 영구 메모리
핵심 문제: 장기 실행 Agent에서 아티팩트는 컨텍스트 윈도우를 빠르게 초과합니다.
- 다양한 아티팩트 유형: 실험 로그, 코드 diff, 논문 요약, 오류 추적 기록, 과거 전체 실행 궤적 — 모두 가치 있는 상태이지만 컨텍스트에 넣을 수 없습니다.
- 올바른 Harness 접근법: 영구 상태를 파일 시스템에 저장하고 Agent가 필요에 따라 읽고 쓰도록 훈련합니다. 전체 작업 히스토리를 Prompt에 억지로 넣으려 하지 마십시오.
- 파일 I/O는 LLM의 기본 스킬: 파일 시스템 읽기/쓰기에는 복잡한 외부 툴체인이 필요하지 않습니다 — 핵심 모델 능력 향상의 혜택을 받습니다. 더 스마트한 모델일수록 파일 관리가 더 효율적입니다.
- 구조적 저장: 잘 설계된 Agent는 scratchpad, todo 목록, 실험 기록을 스스로 유지합니다 — 인간 프로그래머처럼 작업 공간을 관리합니다.
컨텍스트 vs 파일 시스템: 무엇을 어디에?
컨텍스트에 넣을 것: 현재 처리 중인 작업 지시, 즉각적인 도구 호출 결과, 최근 2~3라운드 대화 — 즉시 참조가 필요한 정보입니다.
파일 시스템에 넣을 것: 과거 실험 결과, 누적된 오류 로그, 완료된 서브태스크 요약, 장기 전략 및 규칙 — 영구 보존이 필요하지만 항상 시야에 있을 필요는 없는 정보입니다.
핵심 원칙: 컨텍스트는 작업 기억(working memory)이고, 파일 시스템은 장기 기억입니다. 좋은 Harness는 인간의 두뇌처럼 두 곳 사이에서 지능적으로 정보를 이동시킵니다.
파일 시스템에 넣을 것: 과거 실험 결과, 누적된 오류 로그, 완료된 서브태스크 요약, 장기 전략 및 규칙 — 영구 보존이 필요하지만 항상 시야에 있을 필요는 없는 정보입니다.
핵심 원칙: 컨텍스트는 작업 기억(working memory)이고, 파일 시스템은 장기 기억입니다. 좋은 Harness는 인간의 두뇌처럼 두 곳 사이에서 지능적으로 정보를 이동시킵니다.
Pattern 3
3
Sub-agent and Backend Jobs
서브 Agent 및 백그라운드 작업
핵심 아이디어: Agent 하나로 부족할 때 여러 서브 Agent를 생성해 병렬로 실행하고 장기 백그라운드 작업을 모니터링합니다.
- 부모 Agent가 프로세스 관리자 역할: 서브태스크를 시작하고, 로그와 진행 상황을 확인하고, 실패한 브랜치를 취소하고, 성공한 결과를 병합합니다. 운영 체제 수준의 사고방식입니다.
- 병렬성은 명시적이고 검사 가능해야 합니다: "발사 후 방치"는 안 됩니다. 부모 Agent는 각 서브 Agent의 상태, 출력, 오류를 확인할 수 있어야 합니다.
- 서브 Agent 출력 영속화: 각 서브 Agent의 결과는 파일, 로그 또는 상태 기록으로 저장됩니다(단순히 부모 컨텍스트에 반환되는 것이 아니라), 그래서 중단 후에도 재개할 수 있습니다.
- 내결함성과 복구: 백그라운드 작업은 타임아웃, 충돌 또는 낮은 품질의 결과가 나올 수 있습니다. Harness는 재시도 전략과 우아한 저하(graceful degradation) 메커니즘이 필요합니다.
핵심 설계 트레이드오프
서브 Agent 패턴의 핵심 트레이드오프: 병렬성은 속도를 가져오지만 복잡성도 함께 옵니다. 성공적인 구현(예: Cursor의 Task 시스템, Claude Code의 서브프로세스 모델)은 모두 같은 원칙을 따릅니다: 각 서브 Agent가 격리된 샌드박스에서 작업하고, 명확한 파일 경로에 출력하며, 부모 Agent가 파일 상태 폴링으로 조율합니다 — 메모리 공유 없이. 이는 동시성 제어를 크게 단순화합니다.
Case Study · 코딩 Agent Harness
주요 코딩 Agent의 핵심 도구 인터페이스
Claude Code, Codex, OpenCode, Cursor — 현재 가장 강력한 코딩 Agent들은 모두 유사한 도구 세트를 중심으로 Harness를 구축합니다. 아래 표는 기능별로 핵심 인터페이스를 비교합니다:
| 도구 그룹 | 핵심 기능 | 대표 도구 |
|---|---|---|
| File System | 파일 읽기·쓰기·검색·편집, 작업 공간 상태 관리 | Read, Write, Edit, Glob, Grep, StrReplace |
| Shell Execution | 터미널 명령 실행, 테스트 실행, 의존성 설치 | Shell, BashExec, RunCommand |
| I/O | 사용자 상호작용, 작업 확인, 결과 표시 | Ask, UserConfirm, ShowResult |
| External Context | 외부 정보, 문서, API 응답 가져오기 | WebFetch, ReadURL, DocSearch |
| Web Search | 최신 정보를 인터넷에서 검색 | WebSearch, BingSearch |
| Artifacts | 아티팩트 생성·관리·버전 관리 | CreateFile, SaveArtifact, VersionControl |
| Backend Processes | 장기 작업 백그라운드 실행, 프로세스 상태 모니터링 | BackgroundShell, AwaitProcess, Monitor |
| Agent Delegation | 서브 Agent 생성, 병렬 작업 할당, 결과 병합 | Task, Subagent, Fork, ParallelRun |
코딩 Agent의 Harness 루프: 사용자 의도에서 코드 전달까지, 도구 인터페이스 전체 오케스트레이션 (출처: Lilian Weng, 2026)
인터랙티브: 세 가지 아키텍처 동작 방식
준비됨
Plan
Execute
Observe
Improve
↩ 루프
4라운드부터 정보 손실 시작
모든 도구 반환값과 히스토리가 컨텍스트에 쌓여 윈도우가 빠르게 가득 찹니다. Agent가 초기 정보를 잊기 시작하고 출력 품질이 급락합니다.
세 가지 패턴의 상호 작용
세 패턴은 세 레이어로 쌓이는 것 — 하나만 고를 필요 없습니다
워크플로 자동화는 실행의 척추를 제공합니다: 루프 구조와 피드백 메커니즘.
파일 시스템 메모리는 루프에 하드 드라이브를 제공합니다: 컨텍스트가 비워지더라도 각 반복 결과가 손실되지 않습니다.
서브 Agent 병렬 처리는 루프에 멀티코어를 제공합니다: 작업을 분해할 수 있을 때 병렬 가속으로 직렬 대기를 대체합니다.
세 가지를 결합하면 Agent는 반복 최적화 × 장기 기억 × 병렬 확장 능력을 갖추게 됩니다. 이것이 현재 가장 강력한 코딩 Agent들의 공통 아키텍처입니다.
파일 시스템 메모리는 루프에 하드 드라이브를 제공합니다: 컨텍스트가 비워지더라도 각 반복 결과가 손실되지 않습니다.
서브 Agent 병렬 처리는 루프에 멀티코어를 제공합니다: 작업을 분해할 수 있을 때 병렬 가속으로 직렬 대기를 대체합니다.
세 가지를 결합하면 Agent는 반복 최적화 × 장기 기억 × 병렬 확장 능력을 갖추게 됩니다. 이것이 현재 가장 강력한 코딩 Agent들의 공통 아키텍처입니다.
핵심 인사이트: Harness 설계는 도구를 무작위로 조합하는 것이 아닙니다. 세 가지 구조적 패턴을 따릅니다: 목표 지향적 자동화 루프(Agent가 자기 수정 가능), 장기 메모리로서의 파일 시스템(컨텍스트 윈도우 한계 돌파), 병렬 확장을 위한 서브 Agent(직렬 병목을 멀티스레드로 전환). 이 세 가지 패턴을 이해하면 프로덕션급 Agent 시스템 구축의 아키텍처 언어를 마스터한 것입니다.