Claude가 작성하는 JavaScript 오케스트레이션 스크립트를 백그라운드 런타임이 실행해, 수십~수백 개 서브에이전트를 단일 세션에서 병렬 조율하는 기능.
/loop 로 사람 없이| 서브에이전트 | 스킬 | 에이전트 팀 | 워크플로우 | |
|---|---|---|---|---|
| 정체 | Claude가 부리는 일꾼 | 따르는 지침 | 리드가 동료 감독 | 런타임이 실행하는 스크립트 |
| 다음 실행 결정 | Claude, 턴마다 | Claude | 리드, 턴마다 | 스크립트가 |
| 중간 결과 위치 | 컨텍스트 창 | 컨텍스트 창 | 공유 task 리스트 | 스크립트 변수 |
| 재사용 대상 | 일꾼 정의 | 지침 | 팀 정의 | 오케스트레이션 자체 |
| 규모 | 턴당 몇 개 | 동일 | 장기 동료 소수 | 런당 수십~수백 |
스크립트는 대화와 분리된 환경에서 실행. 중간 결과는 컨텍스트에 안 들어옴.
매 런이 ~/.claude/projects/ 에 스크립트 저장 → 읽고·수정·재실행 가능.
런타임이 각 에이전트 결과 추적 → 같은 세션 내 resume 가능(완료분 캐시).
세션을 나가면 다음 세션에선 처음부터 다시 시작.
| 트리거 | ultracode 키워드 · "use a workflow" 자연어 · /effort ultracode(세션 자동) · 저장된 /<name> |
| 승인 | per-run 프롬프트에 phase 목록 표시 → Yes/뷰/No. 권한 모드별 상이(Default=매번, Auto=최초 1회, Bypass=즉시) |
| 저장 | /workflows → 런 선택 → s → .claude/workflows/(팀) 또는 ~/.claude/workflows/(개인) → /<name> 명령됨 |
| 입력 | 글로벌 args 로 구조화 데이터 수신 (파싱 불필요) |
| 관찰 | /workflows 에서 phase별 에이전트·토큰·시간. p=정지, x=중단, r=재시작 |
| 무인 반복 | /loop <interval> /<name> |
agent(prompt, opts?) | 서브에이전트 1개. opts: label·phase·schema·model·isolation·agentType. schema 주면 검증된 객체 반환, 없으면 텍스트. 스킵 시 null |
pipeline(items, s1, s2…) | 기본 선택지. 항목마다 전 스테이지 독립 통과 — 배리어 없음. A가 stage3일 때 B가 stage1 가능 → wall-clock 최소 |
parallel(thunks) | 배리어. 전부 끝날 때까지 대기. 다음 단계가 모든 이전 결과를 필요로 할 때만(dedup/merge/early-exit) |
phase(title) | 이후 agent() 를 진행 표시에서 그룹핑 |
log(msg) | 사용자에게 진행 메시지 |
budget | .total·.spent()·.remaining(). ⚠️ 공유 풀 (8번 함정 참조) |
args | 호출 시 전달된 입력(verbatim) |
workflow(name, args) | 다른 워크플로를 하위 단계로 인라인 실행(1단계만 중첩) |
⚠️ 순수 JS만 (TS 타입 표기 불가). Date.now()·Math.random()·인자없는 new Date() 는 금지(resume 깨짐). 파일·셸 직접 접근 불가 — 에이전트가 수행.
// meta 는 순수 리터럴이어야 함 export const meta = { name: 'find-flaky', description: '...', // 권한 다이얼로그에 표시 phases: [{ title: 'Scan' }, { title: 'Verify' }], }
모듈·시나리오·조합을 병렬로 동시 공략.
발견을 그것을 찾지 않은 에이전트가 "반박하라(default refuted)"로 채점. 자기편향 차단.
동일 반박 N회 대신 correctness·security·repro 등 직교 관점 — 더 넓은 실패 모드.
K연속 라운드 신규 0까지 반복. 단순 카운터는 꼬리를 놓침.
여러 접근 병렬 구현 → 쌍대비교로 우승안.
배리어는 진짜 전 항목이 필요할 때만. "flatten/filter 하려고"는 이유 안 됨.
| 동시 실행 | 최대 16 에이전트 (코어 적으면 더 적음) |
| 런당 총량 | 1,000 에이전트 (런어웨이 방지) |
| 토큰 | 대화로 할 때보다 훨씬 많이 소비. 플랜 사용량에 포함 |
| 권장 | 큰 작업은 작은 슬라이스로 먼저 비용 측정 (디렉토리 1개 / 좁은 질문 1개) |
워크플로 단독이 아니라 메인 대화 포함 이번 턴 전체 출력 토큰이다. 긴 대화 뒤 워크플로를 80k로 cap하면 시작부터 초과로 잡혀 에이전트 0개 실행되고 즉시 종료된다(실제로 발생).
→ 해결: 시작 시 const START = budget.spent() baseline 잡고 budget.spent() - START 로 증분 측정.
3모듈 스모크에서 419K 토큰 — 스캔 3 vs 검증 14. 비용 대부분이 적대적 검증 단계에 집중된다(설계 의도와 일치: 싸게 넓게 → 깊게 좁게).
→ 대응: 검증 관점 수·확정 임계값 τ 조절로 비용 통제.
Haiku 스캔 7건 → Opus 검증이 7건 전수 기각(코드·테스트·언어 스펙 인용). "생성자 ≠ 채점자" 분리가 저비용 모델의 노이즈를 흡수한다.
예산·top-N으로 커버리지를 제한했다면 무엇을 못 봤는지 반드시 log() 로 표면화. 종료 사유·미커버 범위를 명시해야 "다 봤다"는 착시를 막는다.
Research preview (v2.1.154+). API 표면 변동 가능. Pro·Max·Team·Enterprise(어드민 활성). Pro는 /config 에서 켜기.
내장 워크플로 /deep-research. 대표 실사례: Bun을 Zig→Rust 포팅 — 약 75만 줄, 기존 테스트 99.8% 통과, 11일.