Claude Code: Sub-agent vs Agent Teams 비교
들어가며
Claude Code에는 작업을 병렬로 처리하는 두 가지 메커니즘이 있다. Sub-agent(서브에이전트)와 Agent Teams(에이전트 팀). 둘 다 여러 AI 인스턴스를 활용하지만, 설계 철학과 사용 시나리오가 다르다. 이 글에서는 공식 문서를 기반으로 둘의 차이를 정리한다.
한 줄 요약
- Sub-agent: 메인 세션 안에서 도우미를 파견하고, 결과만 받아오는 구조
- Agent Teams: 독립적인 Claude Code 인스턴스 여러 개가 공유 작업 목록과 메시징으로 협업하는 구조
Sub-agent란?
Sub-agent는 메인 대화 안에서 특정 작업을 위임하는 보조 에이전트다. 각 서브에이전트는 자체 컨텍스트 윈도우, 커스텀 시스템 프롬프트, 독립적인 도구 접근 권한을 가진다. 작업이 끝나면 결과를 메인 에이전트에게 보고하고 종료된다.
핵심 특징
- 단방향 통신: 서브에이전트는 결과를 메인 에이전트에게만 보고한다. 서브에이전트끼리 대화할 수 없다.
- 메인 세션 내부에서 동작: 별도 프로세스가 아니라 메인 세션의 하위 작업으로 실행된다.
- 중첩 불가: 서브에이전트가 또 다른 서브에이전트를 생성할 수 없다.
- 컨텍스트 보호: 서브에이전트의 작업 내용이 메인 대화 컨텍스트를 오염하지 않는다. 결과 요약만 돌아온다.
빌트인 서브에이전트
| 이름 | 모델 | 역할 |
|---|---|---|
| Explore | Haiku (빠름) | 코드베이스 탐색, 파일 검색 (읽기 전용) |
| Plan | 상속 | 플랜 모드에서 코드베이스 조사 (읽기 전용) |
| General-purpose | 상속 | 탐색 + 수정이 모두 필요한 복합 작업 |
서브에이전트 정의 방법
마크다운 파일에 YAML frontmatter로 정의한다.
---
name: code-reviewer
description: 코드 품질과 보안을 리뷰하는 전문 에이전트
tools: Read, Grep, Glob, Bash
model: sonnet
---
코드 리뷰어입니다. 호출되면 코드를 분석하고
품질, 보안, 모범 사례를 짚어 구체적인 피드백을 제공합니다.---
name: code-reviewer
description: 코드 품질과 보안을 리뷰하는 전문 에이전트
tools: Read, Grep, Glob, Bash
model: sonnet
---
코드 리뷰어입니다. 호출되면 코드를 분석하고
품질, 보안, 모범 사례를 짚어 구체적인 피드백을 제공합니다.서브에이전트 파일을 어디에 저장하느냐에 따라 어디서 쓸 수 있는지가 결정된다. 예를 들어 code-reviewer.md라는 서브에이전트를 만들었다면:
~/.claude/agents/에 넣으면 → 내 컴퓨터의 모든 프로젝트에서 사용 가능 (개인용).claude/agents/에 넣으면 → 해당 프로젝트 안에서만 사용 가능. git에 커밋하면 팀원도 함께 쓸 수 있다--agentsCLI 플래그로 전달하면 → 그 세션에서만 쓰고 사라진다 (임시 테스트용)- 플러그인 안의
agents/에 있으면 → 플러그인을 설치한 곳에서만 사용 가능
같은 이름의 서브에이전트가 여러 곳에 있으면 우선순위에 따라 하나만 적용된다. 더 구체적인 범위가 이긴다:
| 위치 | 범위 | 우선순위 |
|---|---|---|
--agents CLI 플래그 |
현재 세션만 | 1 (최고) |
.claude/agents/ |
현재 프로젝트 | 2 |
~/.claude/agents/ |
모든 프로젝트 | 3 |
플러그인의 agents/ |
플러그인 활성화 시 | 4 (최저) |
주요 설정 옵션
모든 설정은 마크다운 파일의 YAML frontmatter에 선언한다. frontmatter가 설정, 본문이 시스템 프롬프트 역할을 한다.
tools / disallowedTools
허용 또는 차단할 도구를 지정한다. tools를 생략하면 메인 대화의 모든 도구를 상속한다.
tools: Read, Grep, Glob, Bash # 허용 목록 (allowlist)
disallowedTools: Write, Edit # 차단 목록 (denylist)tools: Read, Grep, Glob, Bash # 허용 목록 (allowlist)
disallowedTools: Write, Edit # 차단 목록 (denylist)model
서브에이전트가 사용할 모델을 선택한다. 생략하면 inherit(메인 대화 모델 상속)이 기본값이다.
model: haiku # sonnet, opus, haiku, inherit 중 택 1model: haiku # sonnet, opus, haiku, inherit 중 택 1permissionMode
서브에이전트의 권한 프롬프트 처리 방식을 결정한다.
permissionMode: acceptEdits # 파일 수정 자동 승인permissionMode: acceptEdits # 파일 수정 자동 승인default: 표준 권한 확인acceptEdits: 파일 수정 자동 승인dontAsk: 권한 요청 자동 거부 (명시적 허용 도구만 동작)bypassPermissions: 모든 권한 확인 건너뜀 (주의 필요)plan: 읽기 전용 탐색 모드
hooks
서브에이전트가 도구를 쓰기 전/후에 셸 스크립트를 실행한다. 스크립트가 exit code 2를 반환하면 해당 도구 호출을 차단한다.
hooks:
PreToolUse:
- matcher: "Bash"
hooks:
- type: command
command: "./scripts/validate-query.sh"hooks:
PreToolUse:
- matcher: "Bash"
hooks:
- type: command
command: "./scripts/validate-query.sh"memory
세션 간 지식을 축적하는 영구 저장소를 활성화한다. 설정하면 MEMORY.md 첫 200줄이 시스템 프롬프트에 자동 주입된다.
memory: user # user, project, local 중 택 1memory: user # user, project, local 중 택 1| 스코프 | 저장 경로 | 용도 |
|---|---|---|
user |
~/.claude/agent-memory/<name>/ |
전 프로젝트 공유 |
project |
.claude/agent-memory/<name>/ |
프로젝트별, VCS 포함 가능 |
local |
.claude/agent-memory-local/<name>/ |
프로젝트별, VCS 제외 |
isolation
임시 git worktree를 만들어 서브에이전트가 격리된 저장소 복사본에서 작업하게 한다. 변경 사항이 없으면 worktree가 자동 정리된다.
isolation: worktreeisolation: worktreeskills
지정된 스킬의 전체 내용을 서브에이전트의 컨텍스트에 주입한다. 메인 대화의 스킬을 자동 상속하지 않으므로 명시적으로 나열해야 한다.
skills:
- api-conventions
- error-handling-patternsskills:
- api-conventions
- error-handling-patternsAgent Teams란?
Agent Teams는 여러 Claude Code 인스턴스가 하나의 팀으로 협업하는 구조다. 한 세션이 팀 리드가 되고, 나머지 팀원(teammate)이 독립적으로 작업하면서 서로 직접 소통한다.
현재 실험적(experimental) 기능이며, 기본적으로 비활성화되어 있다.
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS환경 변수를1로 설정해야 사용할 수 있다.
핵심 특징
- 양방향 통신: 팀원끼리 직접 메시지를 주고받을 수 있다. 리드를 거치지 않아도 된다.
- 완전히 독립적인 컨텍스트: 각 팀원이 별도의 Claude Code 인스턴스로 실행된다.
- 공유 작업 목록: 팀원이 공유 태스크 리스트에서 작업을 자율적으로 가져간다(self-claim).
- 사용자 직접 개입 가능: 리드뿐 아니라 개별 팀원에게 직접 지시할 수 있다.
아키텍처 구성요소
| 구성요소 | 역할 |
|---|---|
| Team lead | 팀 생성, 팀원 생성, 작업 조율을 담당하는 메인 세션 |
| Teammates | 독립적으로 작업을 수행하는 별도의 Claude Code 인스턴스 |
| Task list | 팀원이 가져가고 완료하는 공유 작업 목록 |
| Mailbox | 에이전트 간 메시지 전달 시스템 |
디스플레이 모드
- In-process: 모든 팀원이 하나의 터미널에서 실행. Shift+Down으로 팀원 간 전환.
- Split panes: 각 팀원이 별도의 pane에서 실행 (tmux 또는 iTerm2 필요).
핵심 비교표
| Sub-agent | Agent Teams | |
|---|---|---|
| 컨텍스트 | 자체 컨텍스트 윈도우, 결과만 호출자에게 반환 | 자체 컨텍스트 윈도우, 완전 독립 |
| 통신 방향 | 메인 에이전트에게만 결과 보고 (단방향) | 팀원끼리 직접 메시지 교환 (양방향) |
| 조율 방식 | 메인 에이전트가 모든 작업 관리 | 공유 작업 목록 + 자율 조율 |
| 적합한 작업 | 결과만 필요한 집중적 작업 | 토론과 협업이 필요한 복합 작업 |
| 토큰 비용 | 낮음 (결과만 메인 컨텍스트로 요약) | 높음 (각 팀원이 독립 인스턴스) |
| 중첩 가능 여부 | 서브에이전트가 서브에이전트 생성 불가 | 팀원이 팀 생성 불가 |
| 안정성 | 정식 기능 | 실험적 기능 (기본 비활성화) |
| 세션 재개 | Agent ID로 재개 가능 | 세션 재개 시 팀원 복원 안 됨 |
언제 뭘 쓸까?
Sub-agent가 적합한 경우
- 결과만 필요한 작업: 테스트 실행 후 실패 목록만 받기, 문서 조회 후 요약만 받기
- 컨텍스트 보호가 중요할 때: 대량의 출력(로그, 테스트 결과)이 메인 대화를 오염하지 않게 하고 싶을 때
- 도구 제한이 필요할 때: 읽기 전용 리뷰어, 특정 도구만 허용하는 전문 에이전트
- 비용 최적화: Haiku 모델로 간단한 탐색 작업을 빠르고 저렴하게 처리
- 순차 체이닝: A 결과를 B에게 넘기는 파이프라인 구조
예: "서브에이전트로 테스트 스위트를 실행하고 실패한 테스트만 보고해줘"예: "서브에이전트로 테스트 스위트를 실행하고 실패한 테스트만 보고해줘"Agent Teams가 적합한 경우
- 상호 토론이 필요한 작업: 여러 관점에서 PR을 리뷰하고 서로의 발견을 공유/반박
- 경쟁 가설 검증: 버그 원인에 대한 여러 가설을 동시에 조사하면서 서로 반증 시도
- 독립적인 모듈 개발: 프론트엔드, 백엔드, 테스트를 각각 다른 팀원이 담당
- 장시간 병렬 작업: 서브에이전트의 컨텍스트 윈도우를 초과할 수 있는 대규모 조사
예: "에이전트 팀을 만들어서 PR #142를 리뷰해줘.
한 명은 보안, 한 명은 성능, 한 명은 테스트 커버리지 담당."예: "에이전트 팀을 만들어서 PR #142를 리뷰해줘.
한 명은 보안, 한 명은 성능, 한 명은 테스트 커버리지 담당."둘 다 아닌 경우
- 빠른 질문:
/btw를 사용하면 현재 컨텍스트에서 도구 없이 빠르게 답변 - 재사용 가능한 워크플로우: Skills를 사용하면 메인 대화 컨텍스트에서 실행
- 단순한 수정: 메인 대화에서 직접 처리하는 게 빠름
제약 사항 비교
Sub-agent 제약
- 서브에이전트끼리 통신 불가
- 서브에이전트가 다른 서브에이전트 생성 불가
- 백그라운드 실행 시 사용자 질문(AskUserQuestion) 불가
Agent Teams 제약
- 실험적 기능이라 안정성 보장 없음
- 세션 재개(
/resume,/rewind) 시 in-process 팀원 복원 안 됨 - 작업 상태가 지연될 수 있음 (팀원이 완료 표시를 빠뜨리는 경우)
- 세션당 하나의 팀만 운영 가능
- 팀원이 자체적으로 팀을 만들 수 없음 (중첩 팀 불가)
- 리드 교체 불가
- Split pane 모드는 VS Code 통합 터미널, Windows Terminal, Ghostty에서 미지원
실전 사례: Agent Teams로 REST API 모듈 추가하기
프로젝트에 사용자 관리 REST API를 새로 추가하는 상황을 가정해 보자. 엔드포인트 설계, 구현, 테스트, 문서화가 모두 필요한 작업이다.
팀 구성
에이전트 팀을 만들어서 사용자 관리 REST API를 구현해줘.
한 명은 백엔드 API 구현, 한 명은 테스트 작성, 한 명은 API 문서화 담당.에이전트 팀을 만들어서 사용자 관리 REST API를 구현해줘.
한 명은 백엔드 API 구현, 한 명은 테스트 작성, 한 명은 API 문서화 담당.이렇게 요청하면 Claude가 팀 리드가 되어 3명의 팀원을 생성한다:
| 팀원 | 담당 | 작업 내용 |
|---|---|---|
| worker-1 | 백엔드 | 라우터, 컨트롤러, 미들웨어, DB 스키마 |
| worker-2 | 테스트 | 단위 테스트, 통합 테스트, 엣지 케이스 |
| worker-3 | 문서화 | API 명세(OpenAPI), README 업데이트 |
진행 흐름
-
리드가 작업을 분해한다 - 코드베이스를 탐색해서 기존 구조(프레임워크, DB, 인증 방식)를 파악하고, 하위 작업으로 쪼갠다.
-
팀원이 병렬로 작업한다 - worker-1이 API를 구현하는 동안 worker-3은 기존 API 문서 패턴을 파악해 명세 초안을 잡는다. worker-2는 테스트 환경을 세팅한다.
-
팀원끼리 소통한다 - 이게 서브에이전트와의 핵심 차이다.
- worker-1이 엔드포인트 시그니처를 확정하면 → worker-2와 worker-3에게 직접 알린다
- worker-2가 테스트 중 버그를 발견하면 → worker-1에게 직접 보고한다
- worker-3이 API 응답 형식에 의문이 있으면 → worker-1에게 직접 질문한다
-
리드가 전체를 조율한다 - 작업 목록에서 진행 상황을 확인하고, 막히는 팀원이 있으면 개입한다. 모든 작업이 끝나면 결과를 종합해 보고한다.
같은 작업을 서브에이전트로 했다면?
서브에이전트는 리드에게만 결과를 보고하므로, 흐름이 달라진다:
- worker-1이 엔드포인트를 확정해도 worker-2, worker-3은 모른다
- 리드가 일일이 결과를 전달해야 한다 ("worker-1이 이런 시그니처로 결정했으니 참고해")
- 테스트에서 버그가 발견되면, 리드가 중계해야 worker-1이 알 수 있다
단순한 작업(테스트만 실행, 문서만 조회)이면 서브에이전트로 충분하다. 하지만 이처럼 팀원 간 정보 교환이 빈번한 작업에서는 Agent Teams의 양방향 통신이 조율 부담을 줄여 준다.
주의할 점
- 파일 충돌 방지: 팀원별로 담당 파일을 명확히 나눠야 한다. 같은 파일을 둘이 수정하면 덮어쓰기가 발생한다.
- 토큰 비용: 팀원 3명이면 독립 인스턴스 3개가 돌아간다. 단순한 작업에 팀을 꾸리면 비용만 늘어난다.
- 적정 팀 규모: 공식 문서에서는 3-5명을 권장한다. 팀원당 5-6개 작업이 적당하다.
일상 작업에서는?
Agent Teams가 소프트웨어 개발 외의 일상 작업에서도 유용할까? 솔직히 말하면, 거의 쓸 일이 없다.
일상 작업은 대부분 이런 특성을 가진다:
- 한 사람의 요청에 하나의 결과가 나온다 (일정 조회, 메모 정리, 요약)
- 흐름이 순차적이다 (조사 → 판단 → 실행)
- 에이전트 간 토론이 필요 없다
이런 작업은 메인 대화 하나로 충분하고, 병렬 조사가 필요하면 서브에이전트로 해결된다.
억지로 찾아본다면
이사할 동네를 조사하는 것처럼 여러 축을 동시에 비교해야 하는 경우가 그나마 가능성이 있다:
토론토에서 이사할 동네를 조사해줘.
한 명은 교통/통근, 한 명은 생활비/집값, 한 명은 생활 인프라.
서로 발견한 정보를 공유하면서 종합 추천해줘.토론토에서 이사할 동네를 조사해줘.
한 명은 교통/통근, 한 명은 생활비/집값, 한 명은 생활 인프라.
서로 발견한 정보를 공유하면서 종합 추천해줘.교통 담당이 "이 동네는 지하철역이 가깝다"고 추천하면, 생활비 담당이 "하지만 예산 초과"라고 바로 반박할 수 있다. 서브에이전트였다면 리드가 중계해야 할 정보가 팀원 간에 직접 오간다.
하지만 현실적으로는
- 이런 조사도 서브에이전트 여러 개를 돌리고 리드가 종합하면 충분하다
- Agent Teams는 토큰 비용이 훨씬 높고, 아직 실험적 기능이다
- 일상 작업에서 "에이전트 간 실시간 토론"이 결과 품질을 유의미하게 올리는 경우는 드물다
Agent Teams는 여러 파일을 동시에 수정하고 변경 사항을 서로 알려야 하는 소프트웨어 개발에 특화된 기능이다. 일상 작업에서는 서브에이전트나 메인 대화 하나로 거의 다 커버된다.
정리
Sub-agent와 Agent Teams는 "병렬 처리"라는 공통 목표를 다른 방식으로 해결한다.
- Sub-agent = 파견. 일 시키고 결과만 받는다. 가볍고 저렴하다.
- Agent Teams = 협업. 팀원이 스스로 소통하고 작업을 나눈다. 무겁지만 복잡한 문제에 강하다.
대부분의 작업에는 서브에이전트로 충분하다. 여러 관점의 토론, 경쟁 가설 검증, 대규모 병렬 개발처럼 "에이전트 간 소통"이 핵심인 작업에서만 Agent Teams를 고려하면 된다.