Claude Code의 /model opus-plan 모드는 Plan 단계는 Opus로, 실행 단계는 Sonnet으로 자동 전환된다. 편하지만 한 세션 안에서 모델이 바뀌는 순간 프롬프트 캐시가 무효화된다. Anthropic 캐시는 모델별로 분리돼 있어 Opus → Sonnet 전환 시 cache hit ratio가 떨어지고, 토큰 비용·지연이 다시 늘어난다.
해결 아이디어: 메인 세션은 Opus 그대로 두고, 실행 작업만 Sonnet 서브에이전트에 위임한다. 서브에이전트는 자체 컨텍스트와 캐시 라이프사이클을 가지므로 메인 캐시가 보존된다.
공식 문서에 따르면 서브에이전트는 .claude/agents/<name>.md (프로젝트) 또는 ~/.claude/agents/<name>.md (사용자 전역)에 YAML frontmatter + Markdown 본문 형태로 정의한다.
---
name: executor
description: Implements code changes from explicit, file/line-level specs. Use when the main session has already planned the edit.
tools: Read, Edit, Write, Bash, Grep, Glob
model: sonnet
---
당신은 실행 전담 에이전트입니다. 받은 지시(파일 경로·라인·변경 내용)를
self-contained하게 처리하고, 결과만 요약해 반환하세요.
변경 의도를 추측하지 말고, 명시되지 않은 부가 수정은 하지 마세요.model 필드 해상도 순서 (공식 문서 기준):
CLAUDE_CODE_SUBAGENT_MODEL환경 변수- 호출 시점에 넘긴
model파라미터 (Agent 도구의model: "sonnet") - 서브에이전트 정의의
modelfrontmatter - 메인 대화의 모델 (기본
inherit)
즉 frontmatter에 model: sonnet을 박아두면 메인이 Opus여도 항상 Sonnet으로 실행된다.
Claude Code에는 사용자가 따로 만들지 않아도 동작하는 빌트인 서브에이전트가 있다.
| 서브에이전트 | 모델 | 자동 호출 시점 |
|---|---|---|
| Explore | Haiku | 파일 검색, 코드 grep, 코드베이스 탐색 |
| Plan | 메인과 동일 (inherit) | plan mode에서 컨텍스트 수집 시 |
| general-purpose | 메인과 동일 | 복합·다단계 작업 |
| claude-code-guide | Haiku | Claude Code 자체에 대한 질문 |
| statusline-setup | Sonnet | /statusline 실행 시 |
따라서 탐색·조회 작업은 이미 자동으로 Haiku에 위임된다. 명시적 설정이 필요한 건 편집·실행 영역이다.
이번 작업은 네가 직접 코드를 수정하지 말고,
계획은 너(Opus)가 세우고 실제 편집은
Agent 도구에 model="sonnet"으로 위임해줘.
~/.claude/CLAUDE.md 또는 프로젝트 CLAUDE.md에 추가:
## Execution Pattern (Opus 세션)
Opus 세션에서 코드 편집·테스트·빌드 같은 실행 작업은
직접 하지 말고 Agent 도구에 model="sonnet"으로 위임할 것.
메인 세션은 계획·분석·검증에만 사용해서 캐시를 유지한다.
서브에이전트 prompt에는 다음을 self-contained하게 포함:
- 정확한 파일 경로와 라인 번호
- 변경 전/후 코드 또는 구체적 지시
- 검증 방법 (테스트 명령 등)
위임이 부적합한 경우:
- 1~2줄 단순 수정
- 빠른 read-only 조회
- 위임 오버헤드가 작업보다 큰 경우위 1번 섹션의 executor.md를 ~/.claude/agents/에 저장. /agents 명령으로 GUI에서 만들 수도 있다.
서브에이전트는 메인 대화 컨텍스트를 보지 못한다. "based on your findings, implement it" 같은 위임은 금물이다. Opus가 이해한 내용을 prompt에 직접 박아넣어야 한다.
나쁜 예
src/auth.ts를 분석해서 에러 핸들링을 개선해줘
좋은 예
파일: src/auth.ts (라인 42-58)
현재 코드:
[코드 블록 그대로 붙여넣기]
변경 사항:
1. try/catch로 감싸기
2. catch 블록에서 logger.error(err, { userId }) 호출
3. AuthError 타입으로 rethrow
검증:
- npm test -- auth.test.ts 통과해야 함
- 기존 호출부 src/api/login.ts:23은 그대로 동작해야 함
직접 규칙 쓰기 귀찮으면 커뮤니티 플러그인을 쓴다.
- barkain/claude-code-workflow-orchestration — plan mode 통합, 자동 작업 분해, 서브에이전트 위임. 이 패턴 그대로 구현되어 있음.
- wshobson/agents — 다중 에이전트 오케스트레이션. 역할별 서브에이전트 정의가 사전 제공됨.
- VoltAgent/awesome-claude-code-subagents — 100+ 서브에이전트 컬렉션. 필요한 정의만 골라
.claude/agents/에 복사 가능. - 공식 마켓플레이스: buildwithclaude.com
설치 (Claude Code 내부에서):
/plugin marketplace add barkain/claude-code-workflow-orchestration
/plugin install workflow-orchestration
| 상황 | 추천 |
|---|---|
| 한 번만 시도해보고 싶다 | 레벨 1 — 일회성 지시 |
| 평소에 항상 이 패턴으로 일하고 싶다 | 레벨 2 — CLAUDE.md 규칙 |
| 특정 역할의 실행자를 자주 호출한다 | 레벨 3 — executor.md 서브에이전트 |
| 작업 자동 분해·병렬 실행까지 원한다 | workflow-orchestration 플러그인 |
핵심: 메인 Opus 세션의 캐시를 깨지 않는 것이 목적이다. 위임이 잦으면 빠르고 싸지만, 위임 오버헤드(prompt 작성·검증)가 작업보다 클 때는 그냥 직접 처리하는 게 낫다.
- 공식 문서: Create custom subagents — frontmatter 필드, model 해상도 순서, 빌트인 서브에이전트 목록
- 공식 문서: Create plugins — 플러그인 구조, 마켓플레이스 설치
- 공식 문서: Plan mode
- Codely: Opus 계획 + Sonnet 구현
- MindStudio: Advisor strategy