• 출처: Anthropic 블로그 A harness for every task: Dynamic workflows in Claude Code (Thariq Shihipar, Sid Bidasaria).
  • 동적 워크플로우: Claude가 작업에 맞는 멀티 에이전트 하네스를 즉석에서 JavaScript로 작성해 실행하는 것.
    • 스크립트가 여러 서브에이전트를 생성·조정한다. 각 서브에이전트는 독립 컨텍스트 윈도우 + 좁은 목표를 갖는 별개의 Claude 인스턴스다.
  • 핵심 메시지: 기본 하네스(단일 컨텍스트에서 계획과 실행을 동시에)는 길고 큰 작업에서 구조적으로 무너진다. 작업 형태에 맞춰 하네스 자체를 갈아끼우는 것이 해법이다.

왜 단일 에이전트로는 부족한가

  • 기본 Claude Code는 하나의 컨텍스트 윈도우 안에서 계획·실행을 함께 처리한다. 복잡한 멀티파트 작업에서 세 가지 실패 모드가 나타난다.
  • 에이전트 태만(agentic laziness): “50개 중 35개 했으니 됐다"며 조기 종료한다. 부분 완료 상태로 멈춘다.
  • 자기선호 편향(self-preferential bias): 자기 산출물을 스스로 검증하면 자기 결과를 편들어 객관적 평가가 안 된다.
  • 목표 표류(goal drift): 장시간 작업 뒤 원래 목표에서 벗어난다. 컨텍스트 요약 과정에서 엣지 케이스·제약 조건이 소실된다.
  • 서브에이전트로 쪼개면 각 에이전트가 좁은 목표만 보므로 이 세 가지가 구조적으로 억제된다.

정적 워크플로우 vs 동적 워크플로우

정적 워크플로우동적 워크플로우
작성 주체사람이 미리 작성 (Agent SDK, claude -p)Claude(Opus 4.8)가 요청 시 즉석 작성
범용성모든 엣지 케이스에 대응하려 범용적이어야 함이번 작업 하나에만 맞춘 전용 하네스
비용재사용 시 저렴대체로 토큰을 더 많이 씀
  • 반복적으로 쓸 하네스는 정적으로 굳혀두고, 일회성·고가치 작업은 동적으로 그때그때 짜는 것이 요지.

작동 방식

  • 워크플로우는 특수 함수를 담은 JavaScript 파일을 실행한다. 서브에이전트 생성·조정 함수 + 표준 JS(JSON, Math, Array 등)를 쓴다.
  • 모델 선택: 하위 작업별로 알맞은 모델(Sonnet/Opus 등)을 고를 수 있다.
  • 워크트리 격리: 서브에이전트를 독립된 작업 디렉터리에서 돌려 서로 간섭하지 않게 한다.
  • 중단·재개: 중간에 끊겨도 마지막 진행 지점부터 이어서 재개한다.

워크플로우 패턴

  • 분류-후-실행(classify-and-act): 분류 에이전트가 작업 유형을 판정해 알맞은 에이전트로 라우팅한다.
  • 팬아웃-후-통합(fan-out-and-synthesize): 큰 작업을 소작업으로 쪼개 각각 에이전트를 붙이고, 합성 단계가 결과를 구조화해 병합한다. 소작업이 많거나 컨텍스트 교차오염을 피하고 싶을 때 유용하다.
  • 적대적 검증(adversarial verification): 산출물마다 별도 검증 에이전트가 룰북·기준에 대고 반증을 시도한다. 자기선호 편향을 차단하는 핵심 장치.
  • 생성-후-필터(generate-and-filter): 아이디어를 다량 생성 → 중복 제거 → 룰북으로 최상위만 선별.
  • 토너먼트(tournament): N개 에이전트가 서로 다른 접근으로 같은 작업을 시도하고, 판정 에이전트가 쌍대비교로 우승자를 고른다.
  • 완료까지 반복(loop until done): 고정 횟수가 아니라 정지 조건(새 발견 없음, 에러 없음)까지 돈다. 꼬리에 남은 케이스를 놓치지 않는다.

활용 사례

  • 마이그레이션·리팩터링: Bun이 Zig→Rust 재작성 때 콜사이트·실패 테스트·모듈별로 서브에이전트를 띄우고, 다른 에이전트가 적대적으로 검토한 뒤 병합했다.
  • 심층 조사: 웹 검색을 팬아웃 → 소스 수집 → 주장을 적대적으로 검증 → 인용 붙은 보고서 합성 (/deep-research가 이 형태).
  • 대규모 분류: 지원 큐·버그 리포트를 자동 분류·중복 제거·조치. 공개 콘텐츠를 읽는 에이전트와 고권한 작업 에이전트를 분리하는 격리(quarantine) 패턴을 쓴다.
  • 근본 원인 조사: 로그·파일·데이터별로 독립 가설 에이전트를 세워 병렬 검증. 자기선호 편향을 피한다.
  • 규칙 개선: 최근 세션과 코드 리뷰를 채굴해 반복 수정 패턴을 뽑아 CLAUDE.md 규칙으로 역산출한다.
  • 정렬: 1000행 이상을 한 프롬프트로 정렬하면 품질이 떨어지므로, 토너먼트·쌍대비교 파이프라인·병렬 버킷 랭킹으로 나눈다.

언제 쓰고, 언제 쓰지 말까

  • 쓴다: 길고, 대규모 병렬이고, 고도로 구조화됐거나 적대적 검증이 필요한 고가치 작업.
  • 안 쓴다: 평범한 코딩(리뷰어 5명 패널이 과함), 병렬화·조정 비용이 정당화 안 되는 단순 작업, 토큰 효율이 중요한 경우.
  • 토큰을 더 쓰므로 명시적 예산(“10k 토큰만 써”)을 걸 수 있다.

저장·트리거

  • 좋은 워크플로우는 s 키로 저장 → ~/.claude/workflows에 체크인하거나 스킬(JS 파일 + SKILL.md)로 배포해 재사용한다.
  • 트리거: “워크플로우 만들어줘” 프롬프트가 기본. /ultracode 키워드로 워크플로우 사용을 강제하고, /goal + /loop로 정기 분류·조사 같은 반복 작업에 물릴 수 있다.
  • 작은 작업은 “빠른 워크플로우”(예: 빠른 적대적 리뷰)로도 요청 가능.