Claude Code · 방법론과 자동화

동적 워크플로우 —
에이전트를 규모로 돌리기

매 턴 Claude가 정하는 대신 스크립트가 정합니다. 백그라운드에서 돌고, 문맥에는 최종 답만 옵니다.

  • 1워크플로우가 필요한 일을 가려낸다
  • 2내 작업을 워크플로우로 돌린다
  • 3잘 돈 실행을 명령으로 남긴다
읽는 시간 12분실습 30분선수 B-4
자세히 보기
큰 작업 하나요청은 한 줄대화로 시킬 때Claude가 매 턴 결정결과가 문맥에 쌓인다에이전트 몇 개멈추면 턴 처음부터워크플로우로스크립트가 결정중간 결과는 변수에에이전트 수십 개문맥엔 최종 답만계획을 코드로 옮기면 — 규모가 늘어도 문맥이 차지 않습니다
개념한 문장

계획을 코드로 옮기는 것

B-4에서 서브에이전트로 조사를 위임해봤습니다. 그런데 파일 300개를 같은 기준으로 훑어야 한다면, 누구에게 무엇을 시킬지 매 턴 Claude가 정하는 방식으로는 감당이 안 됩니다. 결과가 쌓이면서 문맥이 먼저 찹니다.

동적 워크플로우는 그 계획을 자바스크립트 스크립트로 옮긴 것입니다. 스크립트는 Claude가 써 주고, 실행은 별도 런타임이 백그라운드에서 맡습니다. 도는 동안 내 세션은 그대로 쓸 수 있습니다.

핵심반복·분기·중간 결과를 스크립트가 들고 있습니다. Claude의 문맥에는 최종 답만 들어옵니다. 그래서 에이전트가 수십 개로 늘어도 대화가 무거워지지 않습니다.

규모만 늘리는 장치는 아닙니다. 계획이 코드라서 품질 패턴을 반복해서 걸 수 있습니다 — 찾은 것을 다른 에이전트가 반박해 보게 한 뒤 살아남은 것만 보고하거나, 계획을 여러 각도로 초안내고 서로 견주게 하는 식입니다.

쓸 수 있는 조건Claude Code v2.1.154 이상, 유료 플랜·API·Bedrock·Google Cloud·Microsoft Foundry. Pro에서는 /configDynamic workflows 행에서 켜야 합니다.
비교누가 계획을 쥐나

서브에이전트 · 스킬 · 팀과 무엇이 다른가

넷 다 여러 단계를 돌릴 수 있습니다. 갈리는 지점은 하나입니다 — 다음에 무엇을 돌릴지 누가 정하는가.

서브에이전트에이전트 팀워크플로우
정체Claude가 띄우는 일꾼리드가 감독하는 동료 세션런타임이 실행하는 스크립트
다음을 정하는 주체Claude — 매 턴리드 에이전트 — 매 턴스크립트
중간 결과가 있는 곳Claude 문맥공유 작업 목록스크립트 변수
재사용되는 것일꾼 정의팀 정의지휘 방식 자체
규모턴당 몇 개장시간 동료 몇한 번에 수십~수백
중단하면턴을 다시동료는 계속같은 세션에서 이어받기

스킬은 이 표에서 서브에이전트와 같은 칸입니다 — 계획을 쥔 쪽이 여전히 Claude이고 결과도 같은 문맥에 쌓입니다. 다른 것은 재사용되는 것이 일꾼 정의가 아니라 지시문이라는 점뿐입니다.

오해 주의워크플로우가 더 좋은 방식이 아닙니다. 한 대화가 감당 못 할 만큼 크거나, 같은 절차를 여러 대상에 반복해야 하거나, 지휘 방식을 읽고 다시 돌릴 코드로 남기고 싶을 때만 값을 합니다. 그 외에는 대화가 더 빠릅니다.
실습 110분

기본 제공 워크플로우 돌려보기

제일 빠른 체험은 기본 탑재된 /deep-research입니다. 여러 각도로 웹 검색을 펼치고, 찾은 출처를 서로 교차 검증한 뒤, 인용이 붙은 보고서 하나로 돌려줍니다.

/deep-research 사내 규정상 문서 보관 기간을 3년에서 5년으로 늘리면 무엇이 달라지나
1

허용을 묻습니다

예정된 단계 목록이 뜹니다. Yes, run it을 고르면 시작합니다. View raw script로 스크립트를 먼저 읽어볼 수도 있습니다

2

백그라운드로 돕니다

세션은 그대로 쓸 수 있습니다. 입력창 아래 작업 패널에 한 줄 요약이 뜹니다

3

진행을 봅니다

/workflows로 목록을 열고 방향키로 골라 Enter — 단계별 에이전트 수·토큰·경과 시간이 보입니다

4

보고서를 받습니다

교차 검증에서 살아남지 못한 주장은 걸러진 채로 도착합니다. 검증 자체가 불가능했던 주장은 미검증으로 표시됩니다

진행 화면에서 쓰는 키

하는 일
↑ ↓단계나 에이전트 선택
Enter · →파고들기 — 에이전트의 프롬프트·도구 호출·결과까지
Esc · ←한 단계 나오기
f상태로 거르기 (누를 때마다 순환)
p일시정지 · 재개
x선택한 에이전트 중지. 실행 전체에 두면 전체 중지
r돌고 있는 에이전트 재시작
s이 실행의 스크립트를 명령으로 저장
권한실행을 시작할지 묻는 것만 내 권한 모드를 따릅니다. 워크플로우가 띄우는 에이전트는 항상 acceptEdits로 돌아 파일 수정이 자동 승인됩니다. 허용 목록에 없는 셸 명령·웹 요청·MCP 도구는 도중에 물어볼 수 있으니, 긴 실행 전에 미리 허용해 두세요.
실습 220분

내 일을 워크플로우로 돌리기

세션 설정을 바꾸지 않고 이번 요청만 워크플로우로 돌리려면 프롬프트에 ultracode를 넣습니다. "워크플로우로 해줘"처럼 우리말로 부탁해도 같습니다.

ultracode: src/routes/ 아래 모든 라우트 핸들러에서 인증 검사가 빠진 곳을 감사하고, 보고하기 전에 각 지적을 다른 에이전트가 반박해 보게 해줘

자주 쓰는 모양은 이렇습니다. 스크립트는 내가 쓰지 않습니다 — 무엇을 어떻게 나눌지만 말합니다.

상황이렇게 부탁합니다
같은 기준으로 많은 파일 감사워크플로우로 … 파일마다 하나씩 훑고, 찾은 것을 검증한 뒤 모아줘
통과할 때까지 고치기워크플로우로 npx tsc --noEmit을 돌리고, 타입 검사가 통과하거나 두 번 연속 진전이 없을 때까지 고쳐줘
대량 마이그레이션워크플로우로 … 각 파일을 격리된 사본에서 바꾸고 결과를 검증해줘
PR 전체 리뷰 후 한 장 요약워크플로우로 이 PR에서 바뀐 파일마다 리뷰하고, 지적을 하나의 순위 목록으로 합쳐줘
더 안 나올 때까지 찾기워크플로우로 … 두 번 연속 새로 나오는 게 없을 때까지 라운드를 반복해줘
키워드가 안 먹는 자리ultracode내가 직접 친 프롬프트에서만 워크플로우를 시작합니다. -p로 넘긴 프롬프트, 예약 작업 프롬프트, 웹훅이나 PR 코멘트로 들어온 내용에서는 동작하지 않습니다. 남의 코멘트 한 줄로 대규모 실행이 시작되지 않게 하는 안전장치입니다.

세션 전체를 맡기려면

매번 키워드를 넣는 대신, 세션의 노력 수준을 올려두면 Claude가 알아서 판단합니다.

/effort ultracode

켜 두면 요청 하나가 여러 워크플로우로 이어지기도 합니다 — 코드를 파악하는 것 하나, 고치는 것 하나, 검증하는 것 하나. 그만큼 토큰과 시간을 더 씁니다. 일상 작업으로 돌아올 때는 /effort high로 내립니다. 세션을 새로 열면 자동으로 풀립니다.

저장반복

잘 돈 실행을 명령으로 남기기

브랜치마다 도는 리뷰처럼 반복할 절차라면, 잘 돈 실행의 스크립트를 명령으로 저장합니다. /workflows에서 그 실행을 고르고 s를 누릅니다.

저장 위치범위
.claude/workflows/저장소에 커밋 — 클론한 모두가 같은 명령을 씁니다
~/.claude/workflows/내 홈 — 모든 프로젝트에서 쓰지만 나만 보입니다

저장하면 다음 세션부터 /이름으로 부를 수 있고, / 자동완성에도 뜹니다. 같은 이름이 양쪽에 있으면 프로젝트 쪽이 이깁니다.

입력을 받는 워크플로우

저장한 워크플로우는 호출할 때 값을 받을 수 있습니다. 스크립트 안에서 args라는 이름으로 읽힙니다.

/triage-issues 1024, 1025, 1030번 이슈로 돌려줘

저장된 스크립트는 이렇게 생겼습니다

손으로 고칠 일은 거의 없지만, Claude가 뭘 짰는지 읽을 수는 있어야 합니다.

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

const found = await agent('List every .ts file under src/routes/.', {
  schema: { type: 'object', required: ['files'],
            properties: { files: { type: 'array', items: { type: 'string' } } } },
})

const audits = await pipeline(found.files, file =>
  agent(`Audit ${file} for missing authentication checks.`, { label: file }),
)

return audits.filter(Boolean)
조각
meta이름과 설명. 승인 화면과 명령 목록에 이 이름이 뜹니다
agent()서브에이전트 하나를 띄웁니다. schema를 주면 문장 대신 검증된 객체로 돌려받습니다
pipeline()목록의 항목마다 하나씩 돌립니다
.filter(Boolean)중지되거나 오류로 죽은 에이전트는 null로 남습니다 — 그걸 걸러냅니다
팀에 배포여러 저장소에 나눠 주려면 플러그인에 담습니다 (B-10). 플러그인 루트의 workflows/에 두면 /플러그인이름:워크플로우이름으로 불립니다.
한계비용

먼저 알고 시작할 것

런타임이 걸어 둔 제약이 있습니다. 이걸 모르면 왜 안 되지에서 시간을 씁니다.

제약이유와 우회
도중에 사람 입력을 받지 못한다중간 결재가 필요하면 단계마다 워크플로우를 따로 돌립니다
스크립트가 파일·셸을 직접 못 만진다읽고 쓰고 실행하는 건 에이전트 몫입니다. 스크립트는 지휘만 합니다
import()가 있으면 시작 전에 실패라이브러리가 필요한 일은 에이전트에게 시킵니다
동시 실행 최대 16개코어가 적으면 더 줄어듭니다. 나머지는 대기했다 자리가 나면 돕니다
한 실행당 총 1,000개폭주를 막는 상한입니다

비용 — 한 번에 크게 돌리지 않습니다

에이전트를 많이 띄우니 같은 일을 대화로 하는 것보다 토큰을 훨씬 많이 씁니다. 전체 저장소 대신 디렉터리 하나로, 넓은 질문 대신 좁은 질문으로 먼저 재보세요. /workflows에서 에이전트별 토큰이 실시간으로 보이고, 거기서 언제든 멈출 수 있습니다.

경고 표시에이전트가 25개를 넘거나 예상 토큰이 150만을 넘으면 작업 패널에 Large workflow 경고가 뜹니다. 멈추지는 않으니 /workflows에서 직접 판단해 중지하세요.

규모를 미리 정해두기

Claude가 스크립트를 쓸 때 몇 개를 목표로 할지 알려줄 수 있습니다. 상한이 아니라 조언이라, 프롬프트가 다른 규모를 요구하면 그쪽을 따릅니다.

목표 에이전트 수
small5개 미만
medium15개 미만 — 기본값
large50개 미만
unrestricted제한 없음 — 작업에 맞춰 Claude가 정함
/config workflowSizeGuideline=small

멈췄다 이어받을 때

중지한 실행은 이어받을 수 있지만, 규칙이 조금 얄궂습니다.

끄기

안 쓸 거면 세 가지 방법이 있습니다. 끄면 기본 워크플로우 명령이 사라지고 ultracode 키워드도 동작하지 않습니다.

# 1) 설정 화면에서 — Dynamic workflows 끄기
/config

# 2) ~/.claude/settings.json
{ "disableWorkflows": true }

# 3) 환경변수 (시작할 때 읽습니다)
CLAUDE_CODE_DISABLE_WORKFLOWS=1
클로드코드 시작하기Claude Code · 방법론과 자동화