계획을 코드로 옮기는 것
B-4에서 서브에이전트로 조사를 위임해봤습니다. 그런데 파일 300개를 같은 기준으로 훑어야 한다면, 누구에게 무엇을 시킬지 매 턴 Claude가 정하는 방식으로는 감당이 안 됩니다. 결과가 쌓이면서 문맥이 먼저 찹니다.
동적 워크플로우는 그 계획을 자바스크립트 스크립트로 옮긴 것입니다. 스크립트는 Claude가 써 주고, 실행은 별도 런타임이 백그라운드에서 맡습니다. 도는 동안 내 세션은 그대로 쓸 수 있습니다.
규모만 늘리는 장치는 아닙니다. 계획이 코드라서 품질 패턴을 반복해서 걸 수 있습니다 — 찾은 것을 다른 에이전트가 반박해 보게 한 뒤 살아남은 것만 보고하거나, 계획을 여러 각도로 초안내고 서로 견주게 하는 식입니다.
서브에이전트 · 스킬 · 팀과 무엇이 다른가
넷 다 여러 단계를 돌릴 수 있습니다. 갈리는 지점은 하나입니다 — 다음에 무엇을 돌릴지 누가 정하는가.
| 서브에이전트 | 에이전트 팀 | 워크플로우 | |
|---|---|---|---|
| 정체 | Claude가 띄우는 일꾼 | 리드가 감독하는 동료 세션 | 런타임이 실행하는 스크립트 |
| 다음을 정하는 주체 | Claude — 매 턴 | 리드 에이전트 — 매 턴 | 스크립트 |
| 중간 결과가 있는 곳 | Claude 문맥 | 공유 작업 목록 | 스크립트 변수 |
| 재사용되는 것 | 일꾼 정의 | 팀 정의 | 지휘 방식 자체 |
| 규모 | 턴당 몇 개 | 장시간 동료 몇 | 한 번에 수십~수백 |
| 중단하면 | 턴을 다시 | 동료는 계속 | 같은 세션에서 이어받기 |
스킬은 이 표에서 서브에이전트와 같은 칸입니다 — 계획을 쥔 쪽이 여전히 Claude이고 결과도 같은 문맥에 쌓입니다. 다른 것은 재사용되는 것이 일꾼 정의가 아니라 지시문이라는 점뿐입니다.
기본 제공 워크플로우 돌려보기
제일 빠른 체험은 기본 탑재된 /deep-research입니다. 여러 각도로 웹 검색을 펼치고, 찾은 출처를 서로 교차 검증한 뒤, 인용이 붙은 보고서 하나로 돌려줍니다.
/deep-research 사내 규정상 문서 보관 기간을 3년에서 5년으로 늘리면 무엇이 달라지나
허용을 묻습니다
예정된 단계 목록이 뜹니다. Yes, run it을 고르면 시작합니다. View raw script로 스크립트를 먼저 읽어볼 수도 있습니다
백그라운드로 돕니다
세션은 그대로 쓸 수 있습니다. 입력창 아래 작업 패널에 한 줄 요약이 뜹니다
진행을 봅니다
/workflows로 목록을 열고 방향키로 골라 Enter — 단계별 에이전트 수·토큰·경과 시간이 보입니다
보고서를 받습니다
교차 검증에서 살아남지 못한 주장은 걸러진 채로 도착합니다. 검증 자체가 불가능했던 주장은 미검증으로 표시됩니다
진행 화면에서 쓰는 키
| 키 | 하는 일 |
|---|---|
| ↑ ↓ | 단계나 에이전트 선택 |
| Enter · → | 파고들기 — 에이전트의 프롬프트·도구 호출·결과까지 |
| Esc · ← | 한 단계 나오기 |
| f | 상태로 거르기 (누를 때마다 순환) |
| p | 일시정지 · 재개 |
| x | 선택한 에이전트 중지. 실행 전체에 두면 전체 중지 |
| r | 돌고 있는 에이전트 재시작 |
| s | 이 실행의 스크립트를 명령으로 저장 |
내 일을 워크플로우로 돌리기
세션 설정을 바꾸지 않고 이번 요청만 워크플로우로 돌리려면 프롬프트에 ultracode를 넣습니다. "워크플로우로 해줘"처럼 우리말로 부탁해도 같습니다.
ultracode: src/routes/ 아래 모든 라우트 핸들러에서 인증 검사가 빠진 곳을 감사하고, 보고하기 전에 각 지적을 다른 에이전트가 반박해 보게 해줘
자주 쓰는 모양은 이렇습니다. 스크립트는 내가 쓰지 않습니다 — 무엇을 어떻게 나눌지만 말합니다.
| 상황 | 이렇게 부탁합니다 |
|---|---|
| 같은 기준으로 많은 파일 감사 | 워크플로우로 … 파일마다 하나씩 훑고, 찾은 것을 검증한 뒤 모아줘 |
| 통과할 때까지 고치기 | 워크플로우로 npx tsc --noEmit을 돌리고, 타입 검사가 통과하거나 두 번 연속 진전이 없을 때까지 고쳐줘 |
| 대량 마이그레이션 | 워크플로우로 … 각 파일을 격리된 사본에서 바꾸고 결과를 검증해줘 |
| PR 전체 리뷰 후 한 장 요약 | 워크플로우로 이 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로 남습니다 — 그걸 걸러냅니다 |
먼저 알고 시작할 것
런타임이 걸어 둔 제약이 있습니다. 이걸 모르면 왜 안 되지에서 시간을 씁니다.
| 제약 | 이유와 우회 |
|---|---|
| 도중에 사람 입력을 받지 못한다 | 중간 결재가 필요하면 단계마다 워크플로우를 따로 돌립니다 |
| 스크립트가 파일·셸을 직접 못 만진다 | 읽고 쓰고 실행하는 건 에이전트 몫입니다. 스크립트는 지휘만 합니다 |
| import()가 있으면 시작 전에 실패 | 라이브러리가 필요한 일은 에이전트에게 시킵니다 |
| 동시 실행 최대 16개 | 코어가 적으면 더 줄어듭니다. 나머지는 대기했다 자리가 나면 돕니다 |
| 한 실행당 총 1,000개 | 폭주를 막는 상한입니다 |
비용 — 한 번에 크게 돌리지 않습니다
에이전트를 많이 띄우니 같은 일을 대화로 하는 것보다 토큰을 훨씬 많이 씁니다. 전체 저장소 대신 디렉터리 하나로, 넓은 질문 대신 좁은 질문으로 먼저 재보세요. /workflows에서 에이전트별 토큰이 실시간으로 보이고, 거기서 언제든 멈출 수 있습니다.
규모를 미리 정해두기
Claude가 스크립트를 쓸 때 몇 개를 목표로 할지 알려줄 수 있습니다. 상한이 아니라 조언이라, 프롬프트가 다른 규모를 요구하면 그쪽을 따릅니다.
| 값 | 목표 에이전트 수 |
|---|---|
| small | 5개 미만 |
| medium | 15개 미만 — 기본값 |
| large | 50개 미만 |
| unrestricted | 제한 없음 — 작업에 맞춰 Claude가 정함 |
/config workflowSizeGuideline=small
멈췄다 이어받을 때
중지한 실행은 이어받을 수 있지만, 규칙이 조금 얄궂습니다.
- 멈출 때 돌고 있던 에이전트는 저장되지 않아 처음부터 다시 돕니다
- 재생은 시작한 순서를 따릅니다 — 못 끝낸 에이전트 뒤에 시작한 것은 다 다시 돕니다
- 그래서 긴 에이전트 하나보다 작은 에이전트 여럿이 진척을 더 많이 지킵니다
- 이어받기는 같은 세션 안에서만 됩니다. Claude Code를 끄면 다음 세션은 처음부터입니다
끄기
안 쓸 거면 세 가지 방법이 있습니다. 끄면 기본 워크플로우 명령이 사라지고 ultracode 키워드도 동작하지 않습니다.
# 1) 설정 화면에서 — Dynamic workflows 끄기
/config
# 2) ~/.claude/settings.json
{ "disableWorkflows": true }
# 3) 환경변수 (시작할 때 읽습니다)
CLAUDE_CODE_DISABLE_WORKFLOWS=1- /deep-research를 한 번 돌려 보고서를 받아봤다
- /workflows에서 단계와 에이전트를 열어봤다
- 내 일에 ultracode를 붙여 워크플로우로 돌려봤다
- 잘 돈 실행을 s로 저장해 /이름으로 다시 불러봤다
- 대화·서브에이전트로 충분한 일과 워크플로우가 필요한 일을 구분할 수 있다