본문으로 건너뛰기
CodeBerry
  1. AI 뉴스/
#ai-news

Anthropic 엔지니어링 블로그 #15: Effective Harnesses for Long-Running Agents — 며칠짜리 작업을 위한 '교대 인수인계' 구조

이 글은 Anthropic 엔지니어링 블로그에 2025년 11월 26일 게재된 “Effective harnesses for long-running agents” 를 읽고, 내용을 정리한 글입니다. 원문: https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents


한 줄로 말하면
#

에이전트에 며칠짜리 일을 시키려면, 교대 근무자에게 남겨주는 ‘인수인계 노트’를 시스템에 박아둬야 한다.


어떤 문제를 해결하려 했나
#

claude.ai와 비슷한 클론을 만들겠다고 가정해봅시다. 기능 200개짜리 프로젝트입니다. 한 세션에 다 못 끝나고 며칠은 가야 해요.

문제는, 에이전트는 세션마다 기억이 사라진다는 점입니다.

1일차: “로그인 만들고, 채팅 UI 시작, 사이드바 절반 완성” 2일차: (다 잊은 상태) “어디서부터 시작하지?” → 처음부터 다시 보거나, 이미 한 일을 또 함

원문이 진단한 두 가지 실패 모드:

  1. 원샷 문제(One-shotting): 한 번에 다 끝내려 하다가 컨텍스트 다 쓰고 망가진 상태로 종료
  2. 조기 승리 선언: 진행 상황만 훑어보고 “거의 다 됐네, 끝!” 선언

해결책은 단순합니다. 사람 교대 근무자에게 주는 인수인계 문서를 에이전트용으로 만들어 주자.


해결책: 하네스(Harness)
#

1. 두 에이전트 구조 — 초기화 에이전트 + 작업 에이전트
#

초기화 에이전트(딱 한 번 실행):

  • init.sh — 개발 서버 띄우는 스크립트
  • claude-progress.txt — 작업 기록용 빈 파일
  • 기능 목록 JSON — 200개 기능을 잘게 쪼개 passes: false로 초기화
  • 초기 git 커밋 — 기준점 확보

작업 에이전트(매 세션 실행):

  • 한 번에 기능 하나만 작업
  • 끝낼 때마다 코드베이스를 머지 가능한 깨끗한 상태로 두기
  • 세션 시작 시 진행 상황 읽고, 기존 기능이 잘 돌아가는지 먼저 확인

2. 기능 목록(Feature List)이라는 ‘진실의 원천’
#

[
  {
    "name": "로그인 폼 UI",
    "steps": [...],
    "passes": false      // 작업 에이전트가 통과 시 true로만 바꿈
  },
  ...
]

핵심 규칙: 에이전트는 passes만 바꿀 수 있고, 기능을 삭제·수정할 수 없습니다. “테스트를 지우거나 고치는 건 절대 금지” — 그래야 누락이나 버그를 숨기지 못합니다.

이 한 가지 규칙으로 “조기 승리 선언” 실패 모드가 차단됩니다.

3. 상태 회복용 세 가지 산출물
#

새 세션은 항상 이 세 개를 먼저 읽고 시작합니다.

산출물 역할
Git 히스토리 의미 있는 커밋 메시지로 흐름 파악
진행 파일 완료한 작업 자유 서술 요약
기능 목록 남은 작업의 정확한 상태

추가로 Claude는 Puppeteer 같은 브라우저 자동화 도구로 실제 사용자처럼 E2E 테스트를 돌립니다. 그저 코드가 컴파일된다고 끝이 아니라, 진짜로 동작하는지 눈으로 확인하는 거예요.


핵심 결론
#

며칠 가는 자율 작업을 시키려 할 때 사람들은 본능적으로 “더 똑똑한 모델이 필요하다"고 생각합니다. 이 글의 답은 다릅니다.

“장기 작업이 실패하는 이유가 모델 능력인 줄 알았는데, 사실은 인수인계 구조가 없는 게 문제였다.”

사람 팀이 교대로 일할 때 필요한 것 — 명확한 인수인계 문서, 잘게 쪼갠 작업, 이전 작업이 멀쩡한지 확인하는 절차 — 그게 에이전트에게도 똑같이 필요합니다.


내 작업에 적용한다면
#

시나리오 1 — 일반적인 데이터 분석 과정
#

며칠~몇 주 가는 분석 프로젝트도 같은 문제를 겪습니다. 어제 무슨 가설로 무슨 분석을 했는지 기억이 안 나죠.

[Before — 인수인계 없는 분석]
주말 지나고 노트북 열면 "어제까지 뭐 했지?"
   → 같은 분석 반복, 새 가설 잊음

[harness 패턴 적용]
[초기화]
- progress.md (자유서술 기록 파일)
- hypotheses.json (가설 목록, status: open/confirmed/rejected)
- 분석 환경 셋업 스크립트
[매 세션 시작 시]
- progress.md, hypotheses.json 먼저 읽기
- 어제 만든 차트/모델이 여전히 잘 돌아가는지 확인
- 한 번에 가설 하나씩만 검증
[세션 종료 시]
- 결과·결정사항을 progress.md에 짧게 누적
- 가설 상태 업데이트
- 코드는 깨끗한 상태로 커밋

핵심: 장기 분석의 일관성은 “매 세션마다 진실을 다시 만나는 절차” 에 달려 있습니다.

시나리오 2 — 웹 사이트를 자동으로 운영할 때
#

운영도 며칠 단위 작업이 흔합니다. 마이그레이션, 대규모 리뉴얼, 콘텐츠 시리즈 발행 등.

[Before — 한 번에 다 하려다 실패]
"콘텐츠 100편 자동 발행 시작"
   → 도중에 컨텍스트 폭발, 절반은 망가진 상태

[harness 패턴 적용]
[초기화 에이전트]
- content-list.json (글 100편 목록, status: pending/draft/review/published)
- ops-progress.md (운영 기록)
- 빌드/배포 스크립트
[작업 에이전트]
- 한 세션 = 한 글만 처리
- 종료 시 사이트가 깨지지 않은 상태인지 자동 점검
- E2E 테스트로 실제 페이지 열어 검증
[규칙]
- content-list.json의 글 항목은 status만 변경 가능
- 글을 지우거나 합치는 행위 금지

핵심: 장기 운영의 안정성은 “진행 파일 + 잘게 쪼갠 작업 단위 + E2E 검증” 세 가지 인수인계 구조에서 옵니다. 한 번에 다 하려 하지 마세요.


Anthropic 엔지니어링 블로그를 오래된 순서대로 읽고 정리합니다.

성경재
작성자
성경재
홈랩, 셀프호스팅, AI/ML, 데이터 분석에 관심이 많습니다.