Introducing Dynamic Subagents in Deep Agents
Quick Summary
Deep Agents의 동적 서브에이전트는 모델이 짧은 오케스트레이션 코드를 작성해 다수의 서브에이전트를 반복·분기·병렬로 실행하게 함으로써 대규모 작업의 커버리지와 신뢰성을 높이는 방식이다.
🖼️ 인포그래픽
🖼️ 4컷 인포그래픽
💡 한 줄 요약
Deep Agents의 동적 서브에이전트는 모델이 짧은 오케스트레이션 코드를 작성해 다수의 서브에이전트를 반복·분기·병렬로 실행하게 함으로써 대규모 작업의 커버리지와 신뢰성을 높이는 방식이다.
📌 핵심 요약
- 글은 에이전트가 더 큰 작업을 맡을수록 규모 있는 작업을 안정적으로 끝내고 자체 컨텍스트를 관리하기 어려워진다는 문제에서 출발한다.
- 기존 서브에이전트는 컨텍스트를 분리하고 개별 작업을 위임하는 데 유용하지만, 메인 모델이 하나씩 직접 호출하는 방식이라 수백 개 작업이나 조건부·다단계 흐름에서는 한계가 있다.
- 동적 서브에이전트는 모델이 도구 호출을 순차적으로 반복하는 대신 짧은 자바스크립트 워크플로 코드를 작성하고, 인터프리터가 그 코드를 실행해 서브에이전트를 결정적으로 디스패치하게 한다.
- Deep Agents에서는 QuickJS 기반 코드 인터프리터 미들웨어를 추가해 사용할 수 있으며, dcode 터미널 코딩 에이전트에서는 별도 설정 없이 워크플로 요청만으로 동적 서브에이전트를 시험할 수 있다.
- 글은 분류 후 처리, 팬아웃 후 종합, 적대적 검증, 생성 후 필터링, 토너먼트, 완료될 때까지 반복이라는 여섯 가지 오케스트레이션 패턴을 제시하며, 모델이 판단을 맡고 코드는 커버리지와 중간 컨텍스트 관리를 맡는 구조를 강조한다.
🧩 주요 포인트
- 글은 에이전트가 더 큰 작업을 맡을수록 규모 있는 작업을 안정적으로 끝내고 자체 컨텍스트를 관리하기 어려워진다는 문제에서 출발한다.
- 기존 서브에이전트는 컨텍스트를 분리하고 개별 작업을 위임하는 데 유용하지만, 메인 모델이 하나씩 직접 호출하는 방식이라 수백 개 작업이나 조건부·다단계 흐름에서는 한계가 있다.
- 동적 서브에이전트는 모델이 도구 호출을 순차적으로 반복하는 대신 짧은 자바스크립트 워크플로 코드를 작성하고, 인터프리터가 그 코드를 실행해 서브에이전트를 결정적으로 디스패치하게 한다.
- Deep Agents에서는 QuickJS 기반 코드 인터프리터 미들웨어를 추가해 사용할 수 있으며, dcode 터미널 코딩 에이전트에서는 별도 설정 없이 워크플로 요청만으로 동적 서브에이전트를 시험할 수 있다.
- 글은 분류 후 처리, 팬아웃 후 종합, 적대적 검증, 생성 후 필터링, 토너먼트, 완료될 때까지 반복이라는 여섯 가지 오케스트레이션 패턴을 제시하며, 모델이 판단을 맡고 코드는 커버리지와 중간 컨텍스트 관리를 맡는 구조를 강조한다.
🧠 상세 정리
1. 문제의식: 대규모 작업과 컨텍스트 관리의 어려움
글은 에이전트가 더 야심찬 작업을 수행할수록 두 가지 문제가 두드러진다고 설명한다. 하나는 규모가 큰 작업을 끝까지 안정적으로 완료하는 문제이고, 다른 하나는 에이전트가 자신의 컨텍스트를 관리하는 문제다. 기존의 단순한 도구 호출 방식은 작은 작업에는 충분할 수 있지만, 작업량이 커지고 중간 결과가 많아질수록 메인 컨텍스트가 복잡해진다. 동적 서브에이전트는 이 문제를 해결하기 위해 서브에이전트 호출 자체를 모델의 순차적 판단에만 맡기지 않고, 모델이 작성한 짧은 실행 코드로 오케스트레이션하게 하는 접근으로 소개된다.
2. 기존 서브에이전트의 장점과 한계
Deep Agents에는 이미 서브에이전트 기능이 있으며, 이는 컨텍스트를 격리하고 메인 에이전트가 개별 작업 단위를 위임하도록 돕는다. 또한 중간 결과를 메인 컨텍스트 창 밖에 둘 수 있어, 메인 모델이 모든 세부 내용을 직접 들고 있지 않아도 된다. 그러나 일반 서브에이전트는 메인 모델이 직접 하나씩 호출하는 구조이기 때문에 작은 규모에서는 잘 작동해도 큰 규모에서는 부담이 커진다. 예를 들어 수백 개의 서브에이전트를 만들어야 하거나, 조건부 분기와 여러 단계를 거치는 작업에서는 순차적 도구 호출만으로 안정적인 실행 흐름을 유지하기 어렵다는 한계가 제시된다.
3. 동적 서브에이전트의 핵심 방식
동적 서브에이전트의 핵심은 메인 모델이 매 턴마다 서브에이전트 도구를 하나씩 호출하는 대신, 짧은 스크립트를 작성해 서브에이전트 실행을 주도한다는 점이다. 이 스크립트는 반복문, 조건문, 병렬 실행 같은 코드 패턴을 활용해 작업에 맞는 오케스트레이션 로직을 표현한다. 글은 300쪽 문서의 각 페이지마다 하나의 요약 서브에이전트를 배정하는 예시를 들며, 300번의 도구 호출 대신 페이지 목록을 순회하고 Promise.all로 병렬 디스패치하는 방식을 보여준다. 이렇게 하면 커버리지는 프롬프트 설계에 의존하는 판단 문제가 아니라 코드 구조가 보장하는 실행 속성이 된다.
4. 결정적 커버리지와 복잡한 오케스트레이션
글은 동적 서브에이전트가 도구 호출 기반 오케스트레이션보다 안정적으로 제공할 수 있는 두 가지 이점을 강조한다. 첫째는 대규모 작업에서의 결정적 커버리지로, 에이전트가 500개 항목 중 일부만 살펴보고 충분하다고 판단하는 상황을 줄일 수 있다. 둘째는 팬아웃 후 종합, 다단계 파이프라인, 조건부 분기처럼 복잡한 실행 흐름을 더 신뢰성 있게 다루는 능력이다. 모델이 길고 복잡한 도구 호출 순서를 매번 자연어 추론으로 재현하기보다, 실행 가능한 코드로 흐름을 작성하면 인터프리터가 그 구조를 일관되게 수행할 수 있다는 논리다.
5. 사용 방법: QuickJS 인터프리터와 워크플로 트리거
동적 서브에이전트를 사용하려면 작업을 받을 서브에이전트와 모델이 작성한 코드를 실행할 코드 인터프리터가 필요하다. Deep Agents는 QuickJS 기반의 선택적 코드 인터프리터를 제공하며, quickjs 미들웨어 패키지를 설치한 뒤 create_deep_agent에 CodeInterpreterMiddleware를 전달하는 방식으로 설정할 수 있다. 기본적으로 범용 서브에이전트 프로필이 포함되어 있어 바로 워크플로에 활용할 수 있고, 특화된 작업에는 이름, 설명, 시스템 프롬프트를 가진 커스텀 서브에이전트를 구성할 수 있다. 에이전트에게 동적 서브에이전트를 유도하려면 요청에 workflow라는 단어를 포함해, 예컨대 특정 디렉터리의 모든 파일을 검토하고 위험을 요약하라고 지시하는 식으로 사용할 수 있다.
6. dcode에서의 실험과 실행 흐름
글은 동적 서브에이전트를 가장 빠르게 시험하는 방법으로 Deep Agent 기반 터미널 코딩 에이전트인 dcode를 제시한다. dcode에는 코드 인터프리터가 기본으로 활성화되어 있어 별도 연결 작업 없이 동적 서브에이전트를 사용할 수 있다. 사용자는 SQL 인젝션 검토처럼 워크플로를 요청하면 되고, 에이전트는 직접 모든 작업을 처리하거나 기본 태스크 도구로 팬아웃을 관리하려 하기보다 오케스트레이션 스크립트를 작성한다. 실행 중에는 내장 task() 전역 함수를 호출해 서브에이전트를 만들고, dcode는 생성된 서브에이전트를 동적 서브에이전트 패널에서 단계별로 보여준다고 설명한다.
7. 작동 원리: eval 도구, task() 전역 함수, 응답 스키마
작동 방식은 에이전트에게 eval 도구를 제공하고, 에이전트가 자바스크립트를 작성해 안전한 인터프리터 안에서 실행하게 하는 구조다. 서브에이전트가 구성되어 있으면 인터프리터는 task()라는 내장 전역 함수를 노출하고, 이 함수가 코드에서 서브에이전트를 디스패치한다. task()는 작업 설명, 사용할 서브에이전트 유형, 선택적인 응답 스키마를 받으며, 응답 스키마가 제공되면 결과를 이미 형식화된 객체로 받아 필터링하거나 다음 단계로 넘길 수 있다. 글의 예시는 보안 검토 결과에서 심각도가 높은 경우에만 이슈를 추려내는 방식으로, 코드가 중간 판단과 후처리를 구조화할 수 있음을 보여준다.
8. 여섯 가지 오케스트레이션 패턴
글은 동적 워크플로에서 자연스럽게 나타나는 여섯 가지 패턴을 정리한다. 분류 후 처리는 입력을 먼저 유형별로 나눈 뒤 각 항목을 적절한 전문가 서브에이전트에게 보내는 방식이며, 팬아웃 후 종합은 많은 항목에 동일한 작업을 병렬 적용한 뒤 하나의 보고서로 합친다. 적대적 검증은 첫 번째 패스에서 발견한 내용을 독립 검증자에게 다시 보내 확정된 결과만 남기고, 생성 후 필터링은 여러 해법을 만들고 점수화해 가장 나은 것을 고른다. 토너먼트는 후보들을 일대일로 비교해 승자를 올리는 구조이고, 완료될 때까지 반복은 새 결과가 나오지 않을 때까지 탐색과 중복 제거를 계속하는 방식이다.
9. 결론: 코드가 커버리지를 맡고 모델이 판단을 맡는 구조
결론에서 글은 동적 서브에이전트를 에이전트의 자율성과 신뢰성을 높이는 방법으로 정리한다. 코드는 커버리지, 반복 실행, 중간 컨텍스트 관리를 담당하고, 모델은 여전히 판단이 많이 필요한 작업을 수행한다. 또한 이 접근을 가장 단순한 형태의 Recursive Language Model 아이디어로 설명하며, 모델이 코드를 쓰고 그 코드가 다시 더 많은 에이전트를 호출하는 구조라고 말한다. 글은 이러한 오케스트레이션 패턴이 시작점에 가깝고, 모델이 코드를 더 잘 작성할수록 가능한 작업의 범위가 계속 넓어질 것이라고 전망하며, Deep Agents에 코드 인터프리터를 추가하거나 dcode를 사용해 바로 시작할 수 있다고 마무리한다.
🧾 핵심 주장 / 시사점
- 이 글의 핵심은 모델의 판단을 배제하는 것이 아니라, 반복·분기·병렬화처럼 구조화할 수 있는 부분을 코드에 맡겨 모델이 놓치기 쉬운 커버리지 문제를 줄이는 데 있다.
- 기존 서브에이전트가 컨텍스트 격리와 단위 작업 위임에 초점을 맞췄다면, 동적 서브에이전트는 그 위임을 대규모·다단계·조건부 작업으로 확장하는 실행 계층에 가깝다.
- 제시된 여섯 패턴은 고정된 기능 목록이라기보다, 작업 성격에 따라 에이전트가 코드로 선택하고 조합할 수 있는 오케스트레이션 형태로 설명된다.
✅ 액션 아이템
- 동적 서브에이전트는 메인 모델의 반복 도구 호출 한계를 줄이기 위해 JS 오케스트레이션 코드가 분기·병렬 디스패치를 결정하도록 정렬한다.
- 기존 직접호출형 서브에이전트 한계를 반영해, 수백 개 조건부·다단계 작업에서 분류 후 처리·팬아웃 후 종합 패턴 적용 우선순위를 정한다.
- QuickJS 기반 인터프리터 미들웨어와 dcode 터미널 코딩 에이전트 경로에서 별도 설정 유무를 비교해 동적 서브에이전트 실험 조건을 확정한다.
❓ 열린 질문
- 모델 판단을 주도권으로 두는 구조에서 오탐·누락을 억제할 실제 평가 기준은 무엇인가?
- 적대적 검증과 토너먼트, 생성 후 필터링을 결합했을 때 어떤 작업에서 가장 큰 신뢰도 개선이 기대되는가?
- 완료될 때까지 반복 패턴의 종료 기준은 언제로 두어 품질 유지와 계산 비용을 동시에 관리할 수 있는가?