Anthropic Initializer + Coding Agent 패턴
출처: https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents (2025.11)
문제: Long-running agent의 두 가지 실패 패턴
- One-shot 시도: agent가 한 번에 너무 많이 하려 한다. 컨텍스트 중간에 기능이 반쯤 구현된 채 끝나고, 다음 세션 agent가 무슨 일이 있었는지 추측하느라 시간 낭비.
- 조기 완료 선언: 진행이 됐을 때 나중 agent가 둘러보고 "충분히 됐다"고 선언해버림.
핵심 원인: 새 세션이 시작되면 이전 세션의 기억이 없다.
해결책 구조
Initializer Agent (첫 번째 세션만)
역할: 이후 모든 coding agent가 필요로 하는 환경을 구축한다.
생성하는 것들:
init.sh— dev server 실행 스크립트claude-progress.txt— agent 간 handoff 파일feature_list.json— 전체 feature 목록 (전부passes: false로 시작)- 초기 git commit
{
"category": "functional",
"description": "New chat button creates a fresh conversation",
"steps": [
"Navigate to main interface",
"Click the 'New Chat' button",
"Verify a new conversation is created",
"Check that chat area shows welcome state",
"Verify conversation appears in sidebar"
],
"passes": false
}
왜 JSON인가: Markdown보다 agent가 부적절하게 수정하거나 덮어쓸 가능성이 낮다.
Coding Agent (이후 모든 세션)
매 세션 시작 시 수행하는 steps:
pwd— 작업 디렉토리 확인claude-progress.txt+ git log 읽기 — 현재 상태 파악feature_list.json읽기 — 완료 안 된 최우선 feature 선택init.sh실행 — dev server 시작- 기본 기능 end-to-end 테스트 — broken state 있으면 먼저 수정
- 새 feature 구현 (하나씩)
- 세션 종료 시 git commit + progress 파일 업데이트
핵심 설계 원칙
1. Incremental progress (한 번에 하나씩)
한 번에 하나의 feature만 작업하도록 강제. → "한 번에 너무 많이 하려는" 경향을 구조적으로 차단.
2. Clean state 마무리
세션을 끝낼 때 main branch에 merge 가능한 상태로:
- 큰 버그 없음
- 코드 정돈 + 문서화
- 다른 개발자가 새 feature 바로 시작 가능
git commit + progress 파일 업데이트를 강제해서 달성.
3. 테스트는 인간처럼
Unit test / curl만으론 end-to-end 검증이 안 됨. Puppeteer MCP 같은 브라우저 자동화 도구를 주면 인간 사용자처럼 테스트 가능. → 코드만으론 안 보이는 버그를 잡을 수 있음.
4. Feature는 passes 변경으로만 수정
"passes 필드를 변경하는 것 외에 테스트를 제거하거나 편집하는 것은 허용되지 않는다"를 강하게 명시.
실패 패턴과 해결책
| 문제 | Initializer | Coding Agent | |---|---|---| | 너무 일찍 완료 선언 | feature list JSON 생성 | 매 세션 feature list 읽고 하나 선택 | | 버그 있는 상태로 세션 종료 | git repo + progress 파일 초기화 | 시작 시 읽기, 종료 시 commit + update | | feature를 너무 빨리 done 표시 | feature list JSON 생성 | self-verify 후에만 passes: true | | app 실행 방법 파악에 시간 낭비 | init.sh 작성 | 세션 시작 시 init.sh 읽기 |
인간의 역할
이 패턴에서 인간은:
- 처음에 Initializer에게 뭘 만들지 설명
claude-progress.txt+ git log로 전체 맥락 투명하게 추적- y/n 블랙박스가 아니라 파일 기반으로 진행 상황 파악 가능
미해결 문제
- 단일 범용 coding agent vs. 전문 agent (testing agent, QA agent, cleanup agent) 중 어느 게 나은가?
- 이 패턴이 full-stack web app 이외의 영역(과학 연구, 금융 모델링 등)에 어떻게 일반화되는가?
코드 예시
https://github.com/anthropics/claude-quickstarts/tree/main/autonomous-coding
관련 개념
- overview — Harness Engineering 전체 지도
- multi-agent-structure — multi-agent 구조와 한계
- human-as-bottleneck — 병목의 성격 변화
Feature List vs. Skill — 다른 개념
Feature list JSON = "무엇을" (상태 추적)
할 일 목록 + 완료 여부. agent가 "아직 안 한 일이 뭐가 있지?"를 파악.
Skill (AGENTS.md, docs/) = "어떻게" (방법론)
아키텍처, 컨벤션, 제약. agent가 "이 종류의 작업을 어떻게 잘 할 수 있지?"를 파악.
전체 파일 역할 분담
| 파일 | 역할 | 질문 |
|---|---|---|
| feature_list.json | 할 일 목록 + 진행 상태 | "무엇을?" |
| AGENTS.md / docs/ | 아키텍처, 컨벤션, 제약 | "어떻게?" |
| init.sh | 실행 환경 설정 | "어떤 환경에서?" |
| claude-progress.txt | 히스토리, 맥락 | "지금까지 뭘 했지?" |
왜 분리가 중요한가
- Feature list만 있고 skill 없음 → 뭘 만들지는 알지만, 일관성 없는 구현
- Skill만 있고 feature list 없음 → 어떻게 하는지는 알지만, 조기 완료 선언 문제
- 둘 다 있어야 agent가 올바르게 작동
전체 구조 요약 (Mental Model)
feature_list.json → 목표 (무엇을) agent 읽기/쓰기
tool calls → 도구 (수단) agent 실행
skill / docs/ → 방법론 (어떻게) agent 읽기
init.sh → 환경 (어디서) agent 실행
claude-progress.txt → 맥락/히스토리 agent 읽기/쓰기, 인간 관찰
인간은 claude-progress.txt와 git log를 관찰하는 위치.
직접 쓰는 건 agent, 인간은 읽으면서 "지금 어디까지 왔나"를 파악.
→ 인간 전용 도구가 아니라, 인간과 agent가 공유하는 handoff 문서.