100개 이상의 Claude Agent를 병렬로 돌려 테스트를 자동화한 사례 연구
A case study in testing with 100+ Claude agents in parallel
TL;DR Highlight
Imbue 팀이 100개 이상의 Claude agent를 병렬로 오케스트레이션하여 CLI 도구 `mngr`의 end-to-end 테스트를 완전히 자동화하고 AI가 테스트 실행·디버그·수정을 직접 수행하는 프로덕션 아키텍처를 공개했다.
Who Should Read
CLI 도구나 내부 플랫폼의 테스트 자동화를 고민 중인 개발자, 또는 여러 AI agent를 병렬로 오케스트레이션하는 시스템을 설계하려는 백엔드/DevOps 엔지니어.
Core Mechanics
- 전체 파이프라인은 4단계로 구성된다. tutorial.sh 스크립트의 명령어 블록을 → pytest 함수로 변환하고 → 각 pytest 함수마다 agent를 하나씩 띄워 실행·디버그·수정까지 맡긴 뒤 → 모든 agent의 결과를 하나로 통합한다.
- tutorial.sh 작성 자체도 agent를 활용한다. 50개 정도 예시를 직접 쓴 뒤 빈 주석(예: `# Managing snapshots`)만 남기고, coding agent에게 나머지를 채우도록 시킨다. 이미 코드베이스 안에 auto-generate된 man page가 있어서 agent가 꽤 정확하게 예시를 생성한다.
- agent가 생성한 예시가 나쁘게 나와도 오히려 유용하다. 인터페이스가 너무 복잡하거나 문서화가 부족하다는 신호로 해석해서, mngr 자체의 인터페이스를 단순하게 다듬는 데 그 신호를 활용했다.
- tutorial 블록 1개가 pytest 함수 여러 개로 변환되는 1:N 구조다. 같은 명령이라도 환경이나 입력이 달라지면 결과가 달라지므로, happy path(정상 경로)와 unhappy path(오류 경로)를 별도 테스트로 분리한다.
- 테스트 함수가 어떤 tutorial 블록에서 파생됐는지 추적 가능하도록, agent에게 해당 블록을 함수 안에 명시적으로 '인용'하도록 요구한다. 그리고 별도 스크립트로 모든 tutorial 블록에 대응하는 pytest 함수가 최소 하나씩 존재하는지 자동 검증한다.
- e2e 테스트의 Arrange(준비)·Act(실행)·Assert(검증) 세 단계는 사람이 쓰기도 어렵고 agent도 처음에는 잘 못 쓴다는 걸 처음부터 전제하고 설계했다. 첫 단계에서 완성도를 기대하지 않고, 이후 agent가 직접 실행하며 수정하는 단계에서 품질을 높이는 구조다.
- 테스트 프레임워크는 Python의 subprocess 모듈 위에 얇은 레이어를 얹은 형태다. CLI 명령 실행 후 stdout, stderr, exit code를 가져오는 기본 구조에, 테스트 함수가 더 간결하고 맥락을 담을 수 있도록 유틸리티를 추가했다.
- 이 전체 흐름이 `sync-tutorial-to-e2e-tests`라는 슬래시 커맨드 하나로 패키징되어 있다. 사람이 직접 튜토리얼을 쓰고, 나머지 변환·실행·수정은 agent가 병렬로 처리하는 human-in-the-loop 구조다.
Evidence
- 100개 agent를 병렬로 돌리는 것 자체보다 비용 모델 이해가 더 중요하다는 댓글이 있었다. 실제 코드베이스에서 agent 한 번 실행에 repo 구조·관련 파일·최근 변경 사항 파악만으로 20~50k 토큰이 소모되는데, 100개 agent가 10~20개 repo에서 매시간 돌면 실제 작업 전에 이미 하루 수백만 토큰이 나간다는 구체적인 계산을 제시했다.
- 병렬 agent의 observability(관측 가능성) 문제를 지적하는 댓글도 있었다. agent 1개면 로그만 봐도 뭐가 잘못됐는지 알 수 있지만, 100개면 집계·패턴 감지·공통 실패 알림이 필요하고, 40개가 같은 단계에서 타임아웃 나면 의존성 문제인지 인프라 포화인지 판단하기가 어렵다는 점을 실무 경험 기반으로 공유했다.
- 블로그 글이 결국 자사 agent 오케스트레이션 제품인 `mngr`를 팔기 위한 마케팅 피치라는 비판 댓글이 있었다. 기술적 내용은 흥미롭지만 맥락을 감안해서 읽어야 한다는 시각이다.
- agent가 tmux 세션 안에서 실행된다는 원문 언급에 대해 '왜 굳이 tmux냐'는 의아함을 표하는 댓글이 있었다. 이는 `mngr`가 내부적으로 tmux를 세션 관리에 활용하는 설계 선택인데, 일반적인 서버 프로세스 관리 방식과 달라서 낯설다는 반응이다.
- 개인적으로는 Claude Code에서 기능 하나 만들 때도 몇 시간씩 babysit 해야 하는데 '17분마다 프로덕션 배포'같은 글이 나오면 내가 뭔가 잘못하고 있는 건지 혼란스럽다는 솔직한 댓글이 있었고, 이에 공감하는 반응이 많았다. 블로그에 나오는 결과와 실제 현장 경험 사이의 간극이 크다는 공감대가 형성됐다.
How to Apply
- CLI 도구의 e2e 테스트를 처음 만들어야 하는데 예시 케이스 작성이 막막한 경우, 핵심 명령어 50개 정도를 직접 쓴 tutorial.sh를 만들고 나머지 빈 주석(예: `# 스냅샷 삭제 시나리오`)은 coding agent에게 채우도록 시키면 초안을 빠르게 확보할 수 있다. 이때 agent가 엉뚱한 예시를 쓰면 인터페이스 개선 신호로 활용하면 된다.
- pytest 기반 e2e 테스트를 운영 중인데 어떤 테스트가 어떤 문서/시나리오에 대응하는지 추적이 안 되는 경우, 테스트 함수 안에 원본 tutorial 블록을 명시적으로 인용하는 fixture API를 추가하고 별도 스크립트로 매핑을 검증하면 문서-테스트 동기화를 자동화할 수 있다.
- 여러 agent를 병렬로 돌리는 시스템을 설계할 때 무조건 동시에 많이 띄우기보다, API rate limit과 예산 범위 안에서 실패 원인을 추적할 수 있는 수준의 동시성을 먼저 정해야 한다. 특히 agent 하나당 context 로딩에만 20~50k 토큰이 들 수 있으니, 배치 작업이라면 하루 토큰 예산을 먼저 역산해서 agent 수와 실행 빈도를 결정하라.
- 100개 이상 agent를 병렬 운영할 계획이라면 단순 로그 확인으로는 디버깅이 안 되므로, 처음부터 집계 대시보드와 '같은 단계에서 N개 이상 실패 시 알림' 같은 패턴 기반 알림을 설계에 포함시켜야 한다.
Code Example
# 테스트 프레임워크 예시 (원문에서 발췌)
def test_help_succeeds(e2e: E2eSession) -> None:
e2e.write_tutorial_block("""
# or see the other commands--list, destroy, message, connect, push, pull, clone, and more!
""")
# subprocess 기반의 얇은 레이어로 CLI 명령을 실행하고
# stdout, stderr, exit code를 검증하는 구조
# tutorial.sh 블록 예시
# 빈 주석을 남기고 coding agent가 명령어를 채움
# Managing snapshots
mngr snapshot list
mngr snapshot create my-snapshot
mngr snapshot restore my-snapshotTerminology
관련 논문
프로덕션 AI 에이전트를 GPT-5.6으로 마이그레이션: 2.2배 빠르고 27% 저렴
마케팅 웹사이트를 자동 생성하는 프로덕션 AI 에이전트를 Claude Opus 4.8에서 GPT-5.6 Sol로 전환한 실전 경험담으로, 단순 모델 교체가 아니라 eval 하네스, 툴 스키마, 캐싱, 추론 리플레이까지 손봐야 했던 과정을 구체적인 수치와 함께 정리했다.
xAI Grok Build CLI가 xAI 서버로 전송하는 데이터: 네트워크 레벨 분석
xAI의 공식 코딩 CLI 도구 Grok Build가 사용자 동의 없이 전체 Git 저장소와 .env 시크릿 파일을 xAI 서버로 업로드한다는 사실이 네트워크 트래픽 분석으로 밝혀졌다.
중요할 때 기억하라: Long-Horizon 에이전트를 위한 Proactive Memory Agent
LLM 에이전트가 긴 작업 중 중요한 정보를 잊어버리는 문제를 별도의 메모리 에이전트가 '적절한 타이밍에' 끼어들어 해결하는 방법
WebSwarm: 깊고 넓은 웹 검색을 위한 재귀적 Multi-Agent Orchestration
복잡한 웹 검색을 재귀적으로 분해하고 각 노드에 적합한 검색 모드를 동적으로 할당하는 멀티에이전트 프레임워크
웹 앱을 리버스 엔지니어링해서 AI Agent 도구로 자동 변환하기
로그인된 웹 앱의 API 호출을 브라우저에서 감시해 자동으로 MCP 도구로 변환하는 에이전트를 만들었다. 소스 코드나 공식 API 문서 없이도 Jira, Spotify 같은 서비스에 AI 어시스턴트를 붙일 수 있다.
FableCut – AI 에이전트가 조작할 수 있는 브라우저 기반 비디오 에디터 (zero deps)
타임라인 전체를 JSON 파일 하나로 표현하고 MCP/REST로 AI 에이전트가 직접 편집할 수 있는 브라우저 비디오 에디터로, Claude 같은 AI가 프롬프트 하나로 영상을 자동 컷편집하고 결과를 실시간으로 UI에 반영해준다.