Claude Code 5시간 제한이 빨리 소진되나요? 서브 에이전트의 5분 프롬프트 캐시를 확인하세요
Sub-agents burning your Claude Code 5-hour window? Check their 5-minute prompt cache
핵심 요약
서브 에이전트의 짧은 프롬프트 캐시 TTL로 인한 잦은 컨텍스트 재작성 문제를 해결하여 Claude Code 사용량을 절약하는 방법입니다.
- 캐시 TTL 문제 — 서브 에이전트의 기본 5분 캐시가 만료되면 컨텍스트 전체가 재작성되어 사용량이 급증함
- 설정 변경 방법 — settings.json에 "subagentPromptCacheTtl": "1h"를 추가하여 캐시 유지 시간을 1시간으로 연장함
- 작업 최적화 — 긴 테스트나 빌드 작업 시 에이전트가 도구 호출 내에서 대기하지 않도록 설계해야 함
- 비용 절감 효과 — 캐시 재작성 횟수를 획기적으로 줄여 5시간 사용량 제한을 효율적으로 관리함
5시간 제한이 1~2시간 만에 증발한다는 글이 계속 올라오길래, 지난주에 나도 똑같이 당해서 뭐가 문제인지 파봤거든. 원인은 딱 하나였고, 문서에도 나와 있고, 한 줄로 해결 가능하더라. 전후 비교 수치도 뽑아놨어.
세 줄 요약: 구독 중일 때 메인 대화의 프롬프트 캐시는 1시간 유지되지만, 서브 에이전트의 캐시는 5분밖에 안 가. 테스트 실행, 빌드, 깃 훅(git hook)처럼 5분이 넘어가는 툴 호출을 하면 캐시가 날아가 버려. 그럼 서브 에이전트가 다음 요청을 보낼 때마다 수십만 토큰에 달하는 전체 컨텍스트를 비싼 캐시 쓰기 비용을 내면서 다시 써버리는 거지. 해결법은 ~/.claude/settings.json에 "subagentPromptCacheTtl": "1h"를 추가하고, 서브 에이전트가 긴 명령어를 붙잡고 있게 하지 않는 거야. 이렇게 하니까 같은 작업인데도 캐시 쓰기 횟수가 75%나 줄었어. 아래에 측정 결과도 있어.
작동 원리
Claude Code는 대화 내용을 Anthropic 서버 쪽에 캐싱해서 매번 요청할 때마다 전체를 다시 보내지 않게 해. 캐시를 읽는 건 싸지만, 쓰는 건 비싸. 5분짜리 캐시에 쓰는 건 일반 입력의 1.25배, 1시간짜리 캐시는 2배, 읽기는 0.1배거든.
서브 에이전트의 컨텍스트는 지금까지 읽고 수행한 모든 내용이라 실제 작업에서는 30만~60만 토큰은 우습게 넘겨. 요청할 때마다 캐시에서 읽어오거나, 아니면 다시 써야 해. 만약 서브 에이전트가 5분이 넘어가는 툴 호출을 하면, 호출이 끝났을 땐 이미 캐시가 날아간 상태라 다음 요청에서 전체 컨텍스트를 다시 써야 하는 거야. 긴 테스트 6번 돌리면? 6번 전부 다시 쓰는 거지. 그럼 5시간 제한은 순식간에 사라지고, 에이전트는 한 것도 없는데 제한 걸린 것처럼 보여. Anthropic 엔지니어링 블로그에서도 이제 대놓고 권장하더라. 동기식 툴 호출이나 캐시 TTL보다 오래 걸리는 서브 에이전트는 피하라고.
너도 해당될까?
난 Claude Code 위에서 오케스트레이션 워크플로우를 돌리거든(지금 MAX 5x 사용 중). 계획 짜고, 지시하고, 병합하는 긴 수명의 "오케스트레이터" 세션 하나랑, 빌드나 리뷰, 고정 작업을 하는 서브 에이전트 몇 개를 따로 돌려. 얘네는 테스트 엔진으로 레포지토리 테스트를 계속 돌리는데, 테스트 엔진 캐시 상태에 따라 30초에서 40분까지 걸려. 서브 에이전트가 파일 수정만 하고 몇 초 만에 끝내는 수준이면 이 문제는 거의 안 겪을 거야. 난 테스트 캐시 날리고 처음부터 다시 돌려야 했을 때 처음 눈치챘어. 그 '콜드 스타트' 상황이 이 문제를 일으키는 전형적인 패턴이야. 테스트, 빌드, 훅 실행이나 5분짜리 기본 서브 에이전트 캐시보다 긴 툴 호출은 전부 컨텍스트를 새로 쓰게 만드니까.
실제 상황
서브 에이전트 하나가 하루에 59만 토큰짜리 컨텍스트를 8번이나 다시 썼어. 캐시 쓰기만 540만 토큰이고, 5시간 제한의 거의 절반을 혼자 다 써버린 거지. 다시 쓰기는 10분 간격으로 일어났는데, 전부 긴 테스트가 끝난 직후였어. 그날 돌린 서브 에이전트 5개 합치면 26번의 전체 재작성, 1,220만 토큰의 캐시 쓰기가 발생했지. 제일 큰 놈의 캐시 읽기는 8,100만 토큰이었는데도 제한은 거의 안 줄었어.
확인 방법
서브 에이전트 기록은 ~/.claude/projects/<project>/<session id>/subagents/agent-<id>.jsonl에 저장돼. 각 줄은 JSON 형식이고, 어시스턴트 메시지에 usage 객체가 들어있어. 만약 cache_creation_input_tokens 값이 긴 툴 호출 이후에도 똑같은 큰 숫자로 계속 찍힌다면, 그게 바로 재작성 중이라는 뜻이야. cache_creation 아래에 있는 ephemeral_5m_input_tokens랑 ephemeral_1h_input_tokens를 보면 어떤 수명 주기로 캐시가 쓰였는지 알 수 있어.


