2026-07-09

ultracode를 외치며 동적 워크플로우로 대규모 서브에이전트 조율하기

MW

이보라

모던웹연구소 파운더

LinkedIn ↗

오케스트레이션 스크립트를 즉석에서 작성하고 서브에이전트 수백 개를 병렬로 지휘하는 dynamic workflows가 Claude Code 리서치 프리뷰로 공개됐습니다. 서브에이전트·스킬과의 차이, ultracode 트리거와 /effort ultracode, /workflows 진행 뷰, 크기 가이드라인과 에이전트 상한으로 비용을 통제하는 법까지 공식 발표와 문서를 근거로 정리합니다.

루프 엔지니어링 가이드에서 프로액티브 루프를 다루며 동적 워크플로우(dynamic workflows)를 잠깐 언급했습니다. 이 글은 동적 워크플로우만 따로 떼어 정리합니다. Anthropic이 2026년 5월 말 리서치 프리뷰로 공개한 동적 워크플로우는 Claude가 오케스트레이션 스크립트를 즉석에서 작성하고, 그 스크립트가 서브에이전트 수십에서 수백 개를 병렬로 지휘하는 기능입니다.1 동적 워크플로우 기능을 발표한 X 게시물 조회수는 400만을 넘겼습니다. 동적 워크플로우는 이제 '한 에이전트 루프로 감당이 안 되는 작업'의 답으로 자리 잡는 중입니다.

동적 워크플로우란 무엇인가

동적 워크플로우는 서브에이전트를 대규모로 오케스트레이션하는 JavaScript 스크립트입니다. 인간이 작업을 설명하면 Claude는 작업에 맞는 스크립트를 작성하고, 별도 런타임이 백그라운드에서 실행됩니다. 스크립트가 백그라운드에서 계속 실행되기 때문에 우리는 다른 작업을 이어갈 수 있습니다.2

핵심 설계는 중간 결과가 Claude의 컨텍스트 윈도우가 아니라 '스크립트 변수'에 머문다는 점입니다. 서브에이전트나 스킬로 멀티 스텝 작업을 시키면 매 단계의 결과가 컨텍스트에 쌓입니다. 반면 동적 워크플로우에선 반복문·분기·중간 결과를 스크립트가 쥐고 있어서 Claude의 컨텍스트에는 최종 답만 도착합니다. 컨텍스트 한도가 곧 작업 규모의 한도였던 구조가 풀리는 것입니다.

기존 방식과 무엇이 다른가

Claude Code에는 멀티 스텝 작업을 처리하는 수단이 이미 있었습니다. 서브에이전트와 스킬, 에이전트 팀입니다. 공식 문서에선 기존 방식과 동적 워크플로우의 차이를 '누가 계획을 쥐는가'로 설명합니다.2

구분

서브에이전트·스킬

에이전트 팀

dynamic workflows

다음 실행 결정

Claude가 턴마다 결정

리드 에이전트가 턴마다 결정

스크립트가 결정

중간 결과 저장 위치

컨텍스트 윈도우

공유 작업 목록

스크립트 변수

규모

턴당 몇 가지 작업 위임 가능

장기 실행이 필요한 소수의 피어 작업

실행당 수십~수백개의 에이전트

재사용 단위

워커 정의·지침

팀 구성

오케스트레이션 자체

계획을 코드로 옮기면 규모만 커지는 것이 아닙니다. 품질 패턴을 반복 가능하게 박제할 수 있습니다. 발견 사항을 보고하기 전에 독립 에이전트들이 서로의 결과를 적대적으로 검증하게 하거나, 계획을 여러 관점에서 따로 세운 뒤 견주게 하는 작업이 결정론적으로 동작하게 할 수 있습니다. 신뢰할 수 있는 결과가 나오는 이유입니다.

내장 워크플로우 /deep-research로 맛보기

동적 워크플로우가 실제로 어떻게 도는지 보는 가장 빠른 방법은 내장 워크플로우 /deep-research를 돌려보는 것입니다. 질문 하나를 여러 소스에서 조사하는 /deep-research 워크플로우가 Claude Code에 기본으로 들어 있습니다. 에이전트들이 백그라운드에서 단계를 밟는 동안 여러분은 작업중인 세션을 계속 쓸 수 있습니다. 리서치 결과는 턴마다 쌓이지 않고, 우리가 받아보는 것은 마지막 보고서 하나입니다.2

1단계, 실행: /deep-research에 조사할 질문을 붙여 실행하면 동적 워크플로우가 돌며 여러 각도에서 검색이 이뤄집니다. 정보의 원천을 교차 검증한, 인용이 잘 달린 보고서가 나올 준비를 합니다.

/deep-research Node.js 권한 모델은 v20과 v22 사이에 무엇이 바뀌었지?

2단계, 허용: Claude Code가 워크플로우를 허용할지 묻습니다. 예(Yes)를 선택하면 실행이 시작됩니다. 프롬프트의 생김새는 권한 모드에 따라 조금씩 다릅니다.

3단계, 진행 확인: 실행은 백그라운드에서 진행됩니다. /workflows를 프롬프트로 입력하면 화살표 키를 사용해 실행을 고르고 Enter를 누르면 진행 상황을 확인할 수 있는 뷰가 열립니다. 단계마다 에이전트 수·토큰 합계·경과 시간이 보이고, 단계 안으로 들어가면 각 에이전트가 찾은 내용까지 확인할 수 있습니다. 입력창 아래 작업 패널에도 한 줄 요약이 떠서 아래 화살표와 Enter로 펼쳐볼 수 있습니다.

/workflows

4단계, 보고서 읽기: 심층 조사가 끝나면 세션에 보고서가 자동으로 도착합니다. 주장마다 출처가 인용되어 있고 교차 검증을 통과하지 못한 주장은 이미 걸러져 있는 것을 확인할 수 있습니다. Claude Code v2.1.196부터는 속도 제한이나 API 오류로 검증자 에이전트가 확인하지 못한 주장은 반박된 것으로 치지 않고 '검증되지 않음'으로까지 표기해줍니다.

감이 잡혔다면 이제 내 작업에 맞는 워크플로우를 만들 차례입니다. 아래 세 가지 방법으로 Claude에게 워크플로우를 쓰게 하면 됩니다.

세 가지 방법으로 동적 워크플로우 시작하기

동적 워크플로우를 시작하는 방법은 세 가지입니다.2

  • 자연어로 요청: "use a workflow"처럼 워크플로를 쓰라고 직접 말하면 Claude가 스크립트를 작성함

  • 프롬프트에 ultracode 키워드 넣기: 세션 설정을 바꾸지 않고 이번 작업 하나만 워크플로로 돌릴 때 씀

  • /effort ultracode로 세션 전체 전환하기: 자동으로 추론 노력을 xhigh로 올리고, 굵직한 작업마다 Claude가 알아서 워크플로를 계획한다. 이해가 필요한 작업이라면 자동으로 '코드 파악 → 변경 → 검증' 세 개의 연속 워크플로를 만들기도 함

ultracode 키워드에는 사연이 하나 있습니다. 프리뷰 공개 당시 동적 워크플로우를 트리거하는 단어는 workflow였는데, 일상 대화에서 워크플로라는 단어를 썼을 뿐인데 대규모 실행이 시작된다는 피드백이 이어졌습니다. Anthropic은 공개 일주일 만에 명시적 트리거를 ultracode로 바꿨습니다(v2.1.160).3 만약 실수로 동적 워크플로우가 발동되면 macOS에서는 Option+W, Windows·Linux에서는 Alt+W로 해제할 수 있습니다.

ultracode: src/routes/ 아래 모든 API 엔드포인트에서 인증 체크 누락을 감사해줘

동적 워크플로우는 실행 전에, 승인을 할 건지 물어보며 계획을 사용자에게 보여줍니다. 선택지는 즉시 실행(Yes, run it), 이 프로젝트에서 같은 워크플로는 다시 묻지 않기(Yes, and don't ask again), 스크립트 원문 확인(View raw script), 취소(No)입니다. 어떤 권한 모드가 현재 세션에 설정되어 있는지와 무관하게 워크플로가 띄우는 서브에이전트는 항상 acceptEdits 모드로 돌고, 현재 세션의 도구 allowlist를 물려받습니다. 그렇기 때문에 긴 실행이 예상된다면 승인을 기다리며 멈추지 않도록, 에이전트가 쓸 명령을 미리 allowlist에 넣어두는 편이 좋습니다.

실행을 지켜보는 법

실행은 백그라운드로 진행되고 /workflows 명령을 사용하면 진행 뷰를 열 수 있습니다. 단계별 에이전트 수·토큰 합계·경과 시간이 보이고, 단계 안으로 들어가면 각 에이전트의 프롬프트와 결과까지 읽을 수 있습니다. p 키로 일시정지·재개, x 키로 중지, s 키로 스크립트 저장이 됩니다.2

규모가 예상보다 커지면 경고를 주기도 합니다. 한 실행이 에이전트 25개를 넘게 예약하거나 예상 토큰 합계가 150만을 넘으면 입력창 아래 진행 줄에 'Large workflow' 경고가 표시됩니다(v2.1.203). 경고는 안내일 뿐 실행을 멈추지는 않으므로, 필요하면 /workflows를 입력해 직접 중지해야 합니다. 완료된 에이전트의 결과는 보존되어 손실 없이 멈출 수 있습니다.

Claude가 쓰는 스크립트의 생김새

동적 워크플로우는 실행될 때마다 스크립트가 세션 디렉터리에 파일로 남습니다. Claude가 어떤 코드를 작성했는지 파일을 열어 읽고, 이전 실행과 비교하고, 개선할 부분이 있으면 코드를 고쳐서 다시 워크플로우를 돌릴 수 있습니다. 감사를 위한 작은 워크플로우 코드 샘플은 이런 모습입니다.2

export const meta = {
  name: 'audit-routes',
  description: 'Audit every route handler for missing auth checks',
}

// 1단계: 감사 대상 파일 목록을 만든다
const found = await agent('List every .ts file under src/routes/.', {
  schema: { 
    type: 'object', 
    required: ['files'], 
    properties: 
      { files: 
        { type: 'array', items: { type: 'string' } }
      } 
    },
})

// 2단계: 파일마다 에이전트 하나씩 병렬로 감사한다
const audits = await pipeline(found.files, file =>
  agent(`Audit ${file} for missing authentication checks.`, { label: file }),
)

return audits.filter(Boolean)

중요 코드는 top-level await를 쓰는 평범한 JavaScript 코드입니다. agent() 함수가 서브에이전트 하나를 띄우고(1단계), pipeline()함수가 목록에 있는 파일마다 에이전트를 하나씩 돌립니다(2단계). schema 옵션을 주면 에이전트가 구조화된 데이터를 반환하므로 결과를 파싱하는 코드가 필요 없어집니다. 직접 스크립트를 쓸 일은 거의 없지만, Claude가 생성한 스크립트를 읽을 수 있으면 실행 전 승인 단계에서 판단 속도가 빨라집니다.

어디에 쓰면 좋은가

공식 문서가 제시하는 대표 형태는 '같은 단계를 수많은 항목에 반복'하거나 '수렴할 때까지 반복'하는 작업입니다.2

  • 대규모 감사: 파일마다 에이전트를 하나씩 배치하고, 발견 사항을 적대적으로 검증한 뒤 보고

  • 수렴 루프: npx tsc --noEmit을 돌리고 오류 고치기를 타입 체크가 통과할 때까지 반복

  • 병렬 마이그레이션: 컴포넌트 수백 개를 각자 격리된 사본에서 변환하고 결과를 검증

  • 교차 검증 리서치: 내장 워크플로 /deep-research가 이 형태. 여러 각도에서 웹 검색을 하고 출처를 교차 검증해 인용이 달린 보고서를 만듦

규모의 상한을 보여준 사례도 이미 나왔습니다. Bun의 개발자 Jarred Sumner는 동적 워크플로우로 Bun을 Zig에서 Rust로 포팅했습니다. Rust 코드 75만 줄 규모의 작업이 첫 커밋부터 머지까지 11일 걸렸고 기존 테스트의 99.8%가 통과했습니다.4

비용을 통제하는 법

워크플로우 하나가 일반 세션보다 훨씬 많은 토큰을 쓸 수 있는데, 사용량은 플랜 한도에 그대로 계산됩니다. 공식 문서와 Claude 팀의 발표가 공통으로 권하는 통제 수단은 이렇습니다.2

  • 작은 조각으로 파일럿을 돌린다(tracer-bullet 전략): 전체 레포 대신 디렉터리 하나, 넓은 질문 대신 좁은 질문으로 먼저 사용량을 가늠한다.

  • 크기 가이드라인을 설정한다: /config의 Dynamic workflow size에서 small(에이전트 5개 미만)·medium(15개 미만)·large(50개 미만)를 고르면 Claude가 제한 사항을 지킨 스크립트를 쓴다.

  • 런타임 상한을 믿되 확인한다: 동시 실행 16개, 실행당 총 1,000개 에이전트라는 상한이 있어 스크립트가 폭주를 유발해도 비용이 유한하다. /workflows 뷰에서 에이전트별 토큰을 실시간으로 확인하자.

  • 단계별로 모델을 나눈다: 모든 에이전트는 기본적으로 세션에 설정된 모델을 쓴다. 기계적인 작업은 작은 모델로 돌리도록 작업 설명에 명시하면 비용이 내려간다.

가용성도 짚어두겠습니다. 유료 플랜 전체(Pro·Max·Team·Enterprise)와 Claude API, Amazon Bedrock, Google Cloud, Microsoft Foundry에서 쓸 수 있고 Claude Code v2.1.154 이상이 필요합니다. Pro 플랜은 /config의 Dynamic workflows 항목을 직접 켜야 합니다.2

잘 만든 실행은 저장해서 팀과 공유한다

실행이 원하는 대로 됐다면 /workflows에서 s 키로 스크립트를 커맨드로 저장할 수 있습니다. 저장 위치가 곧 공유 범위입니다.

  • 프로젝트의 .claude/workflows/에 저장하면 저장소를 클론하는 모두가 /이름으로 저장된 동적 워크플로우를 실행할 수 있습니다.

  • 홈 디렉터리의 ~/.claude/workflows/에 저장하면 나만 해당 워크플로우를 쓸 수 있습니다.

저장된 워크플로는 args로 입력을 받을 수 있습니다. /triage-issues 라는 커스텀 동적 워크플로우를 만들고 "이슈 1024, 1025, 1030에 /triage-issues를 적용해라"처럼 호출하면 스크립트가 이슈 목록을 구조화 데이터로 받아 바로 순회를 시작합니다. 이렇게 하면 브랜치마다 같은 리뷰 절차를 스크립트로 적용하게 하고, 에이전트를 비롯한 팀원 모두가 같은 반복 프로세스를 적용시킬 수 있습니다.2

정리

루프 엔지니어링 관점에서 보면 동적 워크플로우는 프로액티브 루프의 실행 엔진입니다. 루프 가이드가 '무엇을 넘길지'를 정하는 프레임이었다면, 워크플로는 넘긴 작업을 컨텍스트 한도 밖 규모로 처리하는 수단입니다. 다만 규모가 곧 비용이라는 점은 변하지 않습니다. 모던웹연구소가 권하는 순서도 발표와 같습니다. 좁게 자른 작업(tracer-bullet 전략)으로 파일럿을 돌려 토큰 사용량을 실측하고, 크기 가이드라인과 allowlist를 정비한 뒤에 본 작업을 맡기세요. 잘 된 실행은 반드시 저장해서 다음번에는 검증된 오케스트레이션을 재사용하면 됩니다.

  1. Claude Developers(@ClaudeDevs), New in Claude Code (research preview): dynamic workflows, X, 2026-05-29.

  2. Anthropic, Orchestrate subagents at scale with dynamic workflows, Claude Code Docs.

  3. Claude Developers(@ClaudeDevs), 2026-06-04 트윗에서 트리거 변경을 안내했다. 버전 기준은 공식 문서의 "Before v2.1.160 the literal trigger keyword was workflow" 서술을 따랐다.

  4. Anthropic, Introducing dynamic workflows in Claude Code, Anthropic Blog.

이 글은 모던웹연구소 (www.modernweblabs.com)에서 처음 발행되었습니다. © 모던웹연구소. 무단 전재 및 재배포를 금합니다.

공유

뉴스레터

엔터프라이즈 현장 전문가들이 검증한 노트, 격주 발행.

Claude Code, GitHub Copilot, AI 네이티브 엔지니어링 전략과 도입 사례를 격주로 정리해 보내드립니다.

스팸 없음. 언제든 수신 거부 가능.

MW

모던웹연구소 · 컨설팅 안내

글을 읽었다면, 다음은 팀에 이식할 차례입니다.

이 글에서 다룬 방식을 우리 팀에 어떻게 적용할지, 짧은 대화부터 시작하면 됩니다.

함께할 수 있는 일

  • Claude Code · GitHub Copilot

    2일 핸즈온 + AI 채점 기반 사내 인증

  • AI 네이티브 전략

    운영 표준·측정·거버넌스 재설계

  • 웹 플랫폼

    Next.js 기반 풀스택 서비스 구축