Ch4. 서브에이전트 활용
컨텍스트 수집, 태스크 실행, 독립 컨텍스트 활용
서브에이전트는 Kiro의 전문화된 보조 에이전트입니다. 메인 세션과 독립적으로 실행되어 특정 작업을 수행하고 결과를 반환합니다. 복잡한 작업을 분할하거나 병렬 처리할 때 유용합니다.
서브에이전트 종류
context-gatherer
리포지토리 구조를 분석하고 관련 파일들을 식별합니다.
// 사용 예시
invokeSubAgent({
name: "context-gatherer",
prompt: "사용자 인증 관련 버그를 조사하기 위해 관련 파일들을 찾아주세요",
explanation: "인증 시스템의 구조를 파악하여 버그 수정에 필요한 컨텍스트 수집"
})general-task-execution
일반적인 작업을 독립적으로 실행합니다.
// 사용 예시
invokeSubAgent({
name: "general-task-execution",
prompt: "API 문서를 생성하고 README에 추가해주세요",
explanation: "API 문서 생성 작업을 별도 컨텍스트에서 실행"
})서브에이전트 활용 패턴
1. 컨텍스트 수집 후 작업
1단계: context-gatherer로 관련 파일 식별
2단계: 메인 에이전트에서 수정 작업 수행예시: 버그 수정 워크플로우
// 1단계: 컨텍스트 수집
const context = await invokeSubAgent({
name: "context-gatherer",
prompt: "로그인 실패 시 에러 메시지가 표시되지 않는 버그와 관련된 파일들을 찾아주세요",
explanation: "로그인 에러 처리 관련 코드 구조 파악"
});
// 2단계: 메인 에이전트에서 버그 수정
// context 결과를 바탕으로 관련 파일들을 수정2. 병렬 작업 처리
// 동시에 여러 작업 실행
const [docs, tests, types] = await Promise.all([
invokeSubAgent({
name: "general-task-execution",
prompt: "API 문서 생성",
explanation: "API 엔드포인트 문서화"
}),
invokeSubAgent({
name: "general-task-execution",
prompt: "단위 테스트 작성",
explanation: "새로운 기능에 대한 테스트 코드 작성"
}),
invokeSubAgent({
name: "general-task-execution",
prompt: "TypeScript 타입 정의",
explanation: "API 응답 타입 정의 생성"
})
]);3. 단계별 작업 분할
// 복잡한 기능을 단계별로 분할
const step1 = await invokeSubAgent({
name: "general-task-execution",
prompt: "데이터베이스 스키마 설계",
explanation: "새로운 기능을 위한 DB 스키마 작성"
});
const step2 = await invokeSubAgent({
name: "general-task-execution",
prompt: "API 엔드포인트 구현",
explanation: "스키마 기반 API 로직 구현"
});
const step3 = await invokeSubAgent({
name: "general-task-execution",
prompt: "프론트엔드 컴포넌트 작성",
explanation: "API를 사용하는 UI 컴포넌트 구현"
});실전 활용 사례
사례 1: 새로운 기능 개발
// 1. 요구사항 분석 및 설계
const analysis = await invokeSubAgent({
name: "context-gatherer",
prompt: "사용자 프로필 편집 기능과 관련된 기존 코드들을 분석해주세요",
explanation: "기존 사용자 관리 시스템 구조 파악"
});
// 2. 백엔드 API 개발
const backend = await invokeSubAgent({
name: "general-task-execution",
prompt: "사용자 프로필 편집 API 엔드포인트를 구현해주세요",
explanation: "프로필 업데이트 API 로직 구현"
});
// 3. 프론트엔드 컴포넌트 개발
const frontend = await invokeSubAgent({
name: "general-task-execution",
prompt: "프로필 편집 폼 컴포넌트를 작성해주세요",
explanation: "사용자 인터페이스 구현"
});
// 4. 테스트 코드 작성
const tests = await invokeSubAgent({
name: "general-task-execution",
prompt: "프로필 편집 기능에 대한 통합 테스트를 작성해주세요",
explanation: "기능 검증을 위한 테스트 코드 작성"
});사례 2: 코드 리팩토링
// 1. 리팩토링 대상 분석
const analysis = await invokeSubAgent({
name: "context-gatherer",
prompt: "레거시 인증 시스템과 관련된 모든 파일들을 찾아주세요",
explanation: "리팩토링 범위 파악을 위한 코드 분석"
});
// 2. 새로운 아키텍처 설계
const architecture = await invokeSubAgent({
name: "general-task-execution",
prompt: "현대적인 JWT 기반 인증 시스템 아키텍처를 설계해주세요",
explanation: "새로운 인증 시스템 구조 설계"
});
// 3. 단계별 마이그레이션
const migration = await invokeSubAgent({
name: "general-task-execution",
prompt: "기존 시스템과 호환되는 마이그레이션 계획을 수립해주세요",
explanation: "무중단 마이그레이션 전략 수립"
});사례 3: 버그 수정
// 1. 버그 관련 코드 탐색
const bugContext = await invokeSubAgent({
name: "context-gatherer",
prompt: "결제 실패 시 사용자에게 알림이 가지 않는 버그와 관련된 파일들을 찾아주세요",
explanation: "결제 알림 시스템 관련 코드 구조 파악"
});
// 2. 근본 원인 분석
const rootCause = await invokeSubAgent({
name: "general-task-execution",
prompt: "결제 알림 시스템의 로직을 분석하고 버그의 원인을 찾아주세요",
explanation: "버그 발생 원인 분석"
});
// 3. 수정 및 테스트
const fix = await invokeSubAgent({
name: "general-task-execution",
prompt: "버그를 수정하고 관련 테스트 케이스를 추가해주세요",
explanation: "버그 수정 및 재발 방지 테스트 작성"
});서브에이전트 모범 사례
1. 적절한 작업 분할
// ✅ 좋은 예: 명확한 단일 책임
await invokeSubAgent({
name: "general-task-execution",
prompt: "사용자 인증 미들웨어만 구현해주세요",
explanation: "인증 로직만 집중적으로 구현"
});
// ❌ 나쁜 예: 너무 광범위한 작업
await invokeSubAgent({
name: "general-task-execution",
prompt: "전체 사용자 관리 시스템을 구현해주세요",
explanation: "범위가 너무 넓어 효과적이지 않음"
});2. 컨텍스트 활용
// ✅ 좋은 예: context-gatherer 결과 활용
const context = await invokeSubAgent({
name: "context-gatherer",
prompt: "API 라우팅 관련 파일들을 찾아주세요"
});
// context 결과를 바탕으로 구체적인 작업 수행
await invokeSubAgent({
name: "general-task-execution",
prompt: `${context.result}를 참고하여 새로운 API 엔드포인트를 추가해주세요`
});3. 독립성 보장
// ✅ 좋은 예: 독립적으로 실행 가능한 작업
await invokeSubAgent({
name: "general-task-execution",
prompt: "README 파일을 업데이트하고 설치 가이드를 추가해주세요",
explanation: "문서 업데이트는 독립적으로 수행 가능"
});Custom Subagents (v0.9+)
v0.9부터 역할별 커스텀 서브에이전트를 정의할 수 있습니다.
// .kiro/agents/frontend-agent.json
{
"name": "frontend-specialist",
"description": "React/Next.js 프론트엔드 전문 에이전트",
"steering": [".kiro/steering/frontend/*.md"],
"tools": ["file_edit", "shell_command", "web_search"],
"model": "claude-sonnet-4-6"
}활용 예시
| 커스텀 에이전트 | 역할 | 전문 영역 |
|---|---|---|
frontend-specialist | 프론트엔드 개발 | React, CSS, 접근성 |
backend-specialist | 백엔드 개발 | API, DB, 인증 |
test-engineer | 테스트 작성 | 단위/통합/E2E 테스트 |
docs-writer | 문서화 | README, API 문서 |
Agent Skills (v0.9+)
agentskills.io 표준 기반의 모듈형 스킬 패키지를 서브에이전트에 부여할 수 있습니다. Progressive disclosure 방식으로, 필요한 스킬만 활성화하여 컨텍스트를 절약합니다.
// .kiro/agents/review-agent.json
{
"name": "code-reviewer",
"skills": ["security-audit", "performance-review", "accessibility-check"],
"progressiveDisclosure": true
}주의사항
Autopilot 모드 필요
서브에이전트는 Autopilot 모드에서만 사용할 수 있습니다.
컨텍스트 제한
각 서브에이전트는 독립적인 컨텍스트를 가지므로, 메인 세션의 이전 대화 내용을 직접 참조할 수 없습니다.
참고 문서
- Kiro 공식 사이트: https://kiro.dev
- Custom Subagents 블로그: https://kiro.dev/blog/custom-subagents-skills-and-enterprise-controls/
- Kiro 문서: https://kiro.dev/docs