Claude Code가 백그라운드 에이전트 상태줄에 토큰을 쓰는 문제와 Bun preload 우회법
Claude Code regularly sends each background agent’s transcript to its model
TL;DR Highlight
30초마다 에이전트 전체 대화를 보내던 상태줄 요약을 끄니 요청 19.7%가 사라졌다
Who Should Read
Claude Code로 백그라운드 서브에이전트를 자주 돌리다 구독 한도가 빨리 닳아 고민인 개발자
Core Mechanics
- 30초마다 전체 transcript를 다시 보낸다
- 백그라운드 에이전트마다 약 30초 간격으로 에이전트 자신의 모델(보통 Opus)에 대화 전체를 보낸다.
- 목적은 에이전트 패널 상태줄에 "최근 행동을 3~5단어로" 표시하는 것뿐이다.
- 답은 대화나 모델로 돌아가지 않는다.
- 끄는 설정이 없고 2.1.232부터 기본 켜짐
- 2.1.232(2026년 8월)부터 인터랙티브 백그라운드 에이전트에서 기본 켜짐이다.
- SDK 옵션 agentProgressSummaries는 false로 줘도 효과가 없다.
- 간격은 서버 플래그가 정하며 30~240초로 제한되고 기본값이 이미 최솟값이다.
- 작성자 텔레메트리에서 지출 16.4%
- query_source=agent_summary가 전체 Claude Code 지출의 16.4%였다(메인 대화는 15.7%).
- 전체 API 요청의 19.7%, 약 5건 중 1건이었다.
- 이 지출의 96%가 Opus였고, 출력 토큰 1개당 입력 토큰은 약 9,000개였다.
- setTimeout을 감싸 요약 타이머만 무력화
- Bun --preload 스크립트(약 70줄)가 전역 setTimeout을 감싼다.
- 콜백 소스 문자열에 요약기 앵커("[AgentSummary] Timer fired" 등)가 있으면 아무것도 안 하는 핸들을 돌려준다.
- 바이너리는 수정하지 않고, 나머지 타이머는 그대로 통과한다.
- 적용하면 요약 요청 0건, 부작용은 상태줄 정지
- 작성자 머신(2.1.301)에서 적용 후 agent_summary 요청이 0건이고 다른 사이드 쿼리가 늘지 않았다.
- 서브에이전트·백그라운드 에이전트는 정상 동작하고 패널 상태줄만 갱신이 멈춘다.
- 업데이트로 앵커가 바뀌면 조용히 다시 켜지므로 업데이트마다 검증해야 한다.
- 프롬프트 캐시로 싸지긴 해도 공짜는 아니다
- 이 호출의 약 98%는 캐시에서 transcript를 읽는다.
- 캐시 미스인 약 2%가 비용의 3분의 1 넘게 차지한다.
- 이 요청은 디스크 세션 로그에 안 남아서 OpenTelemetry 내보내기에서만 보인다.
Community Reactions
- 내 transcript로 계산해 보니 지출 16%였다는 경험
- 20x Max 사용자가 Opus에게 gist를 분석시켜 30초 타이머 기준으로 추정했다.
- API 환산 주간 지출은 $1,970, 숨은 상태 호출은 약 $380으로 16%였다고 한다.
- 직접 재현해 보니 약 8% 이하였다는 경험
- 서브에이전트에만 해당하고 워크플로는 영향이 없어 보인다는 보고다.
- 대부분 캐시 읽기라 컨텍스트가 짧으면 싸고 길면 비싸다고 한다.
- 다른 사용자는 전체 합산으로 약 3%였다고 했다.
- "전부 캐시 히트면 싸지 않나"라는 의문과 반박
- 캐시 히트라도 요청의 1/5이면 누적된다는 답이 달렸다.
- 16.4%는 Claude Code의 자체 cost_usd 추정치라는 점도 지적됐다.
- "15-20% of your tokens"가 전체 대비인지 백그라운드 에이전트 대비인지 불명확하다는 의견도 있었다.
- 모델과 하네스를 같은 회사가 만드는 게 문제라는 의견
- 추론 제공사는 토큰 효율을 높일 유인이 없다는 주장이 여러 건 나왔다.
- 바이너리를 디컴파일해 시스템 프롬프트를 고쳐 쓴다는 댓글도 있었다.
- Windows용 러너를 만들어 공유했다는 댓글도 있었다.
How to Apply
- 오늘 OTel로 agent_summary 비중부터 재기
- OpenTelemetry 내보내기를 켜고 claude_code.api_request 이벤트를 query_source별로 묶어라.
- agent_summary의 요청 비율과 cost_usd 합계를 메인 대화와 비교하라.
- 비중이 낮으면 적용하지 않아도 된다.
- preload를 한 세션에만 먼저 적용하기
- 원문의 curl 명령으로 파일을 받고 claude daemon stop --any를 실행하라.
- BUN_OPTIONS에 --preload=절대경로를 붙여 claude를 실행하라.
- 공백 형식(--preload 경로)은 bun install 등이 깨지니 반드시 = 형식을 써라.
- CC_AGENT_SUMMARY_LOG로 적용 여부 검증하기
- 로그 경로를 지정하고 백그라운드 서브에이전트를 1~2분 돌려라.
- summary timer #1 suppressed 줄이 나오는지 확인하라.
- CC_AGENT_SUMMARY_MODE=pass로 A/B 비교하면 요약이 돌아오는지로 효과를 확인할 수 있다.
- 업데이트 후 재검증 루틴 만들기
- Claude Code를 올릴 때마다 로그와 OTel의 agent_summary 0건을 다시 확인하라.
- 헤드리스(-p), cron, CI에도 BUN_OPTIONS를 넣고 데몬을 재시작하라.
Try It
# 터미널(Linux)에 그대로 붙여넣기 - 원문 gist의 설치·검증 명령
curl -fsSL https://gist.githubusercontent.com/flamerix-ai/c3905705cc4205e5de3011fa2e74efce/raw/no-agent-summary.js -o ~/.local/share/no-agent-summary.js
claude daemon stop --any
# 로드 확인: 'preload active mode=off' 줄이 나와야 함
BUN_OPTIONS="--preload=$HOME/.local/share/no-agent-summary.js" CC_AGENT_SUMMARY_LOG=/tmp/nas.log claude --version && cat /tmp/nas.log
# 적용해서 실행
BUN_OPTIONS="${BUN_OPTIONS:+$BUN_OPTIONS }--preload=$HOME/.local/share/no-agent-summary.js" claude
# 이어서: 백그라운드 서브에이전트를 1~2분 돌리고 /tmp/nas.log에서 'summary timer #1 suppressed'를 확인Terminology
관련 논문
GLM-5.3 Workers AI의 KV cache 교차 노출 사고와 SGLang 수정
컨텍스트 창보다 작은 KV 풀 때문에 긴 프롬프트 155건에 타인 데이터가 섞였다
Microsoft Decision-1: Qwen3.5-9B 기반 결정 점수 전용 모델
글 대신 선택지별 확률만 내놓는 9B 모델, 라우팅·분류용으로 공개
Cerebras가 조 단위 파라미터 모델을 웨이퍼 여러 장에 올리는 방법
Kimi K3(3T)를 웨이퍼 59장 파이프라인에 올려 초당 1000~2000+ 토큰을 낸다
AI 이미지 생성 실전 가이드: diffusion부터 에이전트 연동까지
이미지 API를 직접 써 보니 캔버스 단위 과금과 카메라 묘사 프롬프트가 핵심이었다
DeepInfer: DeepSeek 모델용 고성능 대규모 추론 프레임워크 공개
DeepSeek가 프로덕션 추론 엔진 DeepInfer를 Apache-2.0으로 공개했다
Mercury 3: 규모를 키운 diffusion LLM, 초당 1,000토큰 이상
Diffusion LLM을 40배 키웠더니 속도 4~8배, 품질은 속도 특화 모델 수준
DeepSeek, 미 연방 민간 기관에서 금지된다: DHS 명령과 개발자 반응
DHS 명령으로 DeepSeek이 미 연방 민간 기관 IT 시스템에서 금지됐다
Timestral: Mistral의 시계열 파운데이션 모델
209M 파라미터 시계열 모델이 3대 벤치마크 1위, CPU에서도 돌아간다