긴 문서를 읽는 서브에이전트만 일찍 압축하는 법
정의 파일 한 줄로 일찍 압축한다
자동 압축은 대화가 길어지면 앞부분을 요약으로 바꿔 자리를 비우는 일입니다. 서브에이전트 정의 파일에 autoCompactWindow를 적으면 그 서브에이전트만 압축 기준이 바뀝니다. 정의 파일 맨 위 --- 사이(frontmatter)에 토큰 수로 적습니다. 메인 세션의 압축 기준은 그대로입니다.
---name: doc-readerdescription: 긴 문서를 처음부터 끝까지 읽고 답한다tools: Readmodel: haikuautoCompactWindow: 100000---맡은 파일을 청크마다 빠짐없이 읽은 뒤에 답한다.압축은 창이 다 차기 전에 걸려서, 100000으로 두면 대화가 6만~7만 토큰대에 이를 때마다 압축합니다. 아래 비용에는 압축 요약을 만드는 호출도 들어 있습니다.
- 자동 압축0번4번
- 가장 큰 프롬프트233,49061,734
- 100K 넘은 요청8번0번
- Haiku 5.5 비용$0.173$0.055
- 찾은 답맞음그대로
압축은 앞에서 읽은 내용을 요약으로 바꿉니다. 처음 읽은 부분의 원문 문장이 끝까지 필요한 일이라면 창을 낮추기보다 파일이나 폴더를 나눠 서브에이전트 여럿에 맡깁니다.
값을 범위 밖으로 적었거나 메인 창을 이미 줄여 두었다면
값은 100000부터 1000000까지의 정수입니다. 범위 밖 값을 정의 파일에 적으면 서브에이전트는 그대로 실리고 이 필드만 빠집니다. 경고는 --debug 로그에만 남습니다.
[WARN] Agent file <프로젝트>/.claude/agents/doc-reader.md has invalid autoCompactWindow '50000'. Must be an integer from 100000 to 1000000.이 값은 물려받는 창보다 작을 때만 적용됩니다. 메인 세션 설정이 "autoCompactWindow": 150000인데 서브에이전트에 400000을 적으면, 그 서브에이전트는 118K에서 압축합니다. 더 오래 버티게 하는 데는 쓸 수 없습니다.
스크립트에서 --agents JSON으로 정의를 넘긴다면
claude -p --agents ./agents.json "…"처럼 정의를 JSON으로 넘길 때도 같은 이름의 필드를 씁니다. 이쪽은 범위 밖 값에서 Invalid --agents configuration 오류를 내고 실행을 멈추어, CI에서는 잘못된 값이 바로 드러납니다.
{ "doc-reader": { "description": "긴 문서를 처음부터 끝까지 읽고 답한다", "prompt": "맡은 파일을 청크마다 빠짐없이 읽은 뒤에 답한다.", "tools": ["Read"], "model": "haiku", "autoCompactWindow": 100000 }}압축이 실제로 걸렸는지 확인하려면
서브에이전트의 대화 기록은 ~/.claude/projects/<프로젝트>/<세션 ID>/subagents/agent-<ID>.jsonl에 남습니다. 아래 명령은 가장 최근 기록에서 압축 횟수와 가장 큰 프롬프트를 셉니다. 창을 100000으로 둔 doc-reader에서는 {"compactions":4,"max_prompt":61734}가 나옵니다.
f=$(ls -t ~/.claude/projects/*/*/subagents/agent-*.jsonl | head -1)jq -s -c '{compactions: map(select(.subtype=="compact_boundary")) | length, max_prompt: [.[].message.usage? // empty | .input_tokens + .cache_read_input_tokens + .cache_creation_input_tokens] | max}' "$f"서브에이전트는 압축 기준을 물려받는다
Claude Code는 요청마다 그때까지의 대화를 통째로 다시 보내므로, 서브에이전트가 읽은 만큼 프롬프트가 자랍니다. 서브에이전트도 제 대화를 따로 압축하지만, 압축이 걸리는 크기는 메인 세션 것을 물려받습니다. 이 크기가 자동 압축 창입니다.
Haiku처럼 1M 창을 쓰는 모델은 대화가 약 967K에 이르러서야 압축합니다. 그런데 프롬프트가 100K를 넘는 요청에는 다섯 배 단가가 붙습니다. 캐시로 싸게 읽은 앞부분도 예외가 아닙니다. 압축이 걸리기 한참 전에 비싼 요청이 시작됩니다.
파일을 한 덩이 읽을 때마다 프롬프트가 2K → 22K → 51K로 자랍니다. 창을 10만으로 둔 쪽은 64K에 이르자 보내기 전에 압축해 14K로 줄이고, 기본 쪽은 89K까지 그대로 쌓입니다.
기본 쪽은 107K부터 요청마다 다섯 배 단가를 냅니다. 10만 쪽은 다시 압축합니다.
기본 쪽은 233K까지 자라 100K를 넘은 요청이 8번, 10만 쪽은 압축 4번에 가장 큰 프롬프트가 62K입니다.