8호05 / 05

Claude Code가 백그라운드 에이전트 전사를 30초마다 모델에 보낸다 — 상태 줄 다섯 단어에 지출의 16%

원문 Flamerix AI (GitHub Gist) ↗

커뮤니티가 텔레메트리로 찾아낸 비용 문제입니다. 공식 문서가 아니라 사용자의 측정과 우회법이고, Anthropic의 응답은 글에 없습니다.

무엇이 일어나나

  • 백그라운드 에이전트마다 약 30초에 한 번, 그 에이전트의 전체 전사를 모델에 보내 "가장 최근 행동을 3~5단어로 묘사하라"고 합니다.
  • 답은 에이전트 패널의 상태 줄만 갱신합니다. 모델이나 대화에는 닿지 않습니다.
  • 끄는 설정이 없고, 2.1.232(2026년 8월)부터 기본 켜짐입니다. 간격은 서버가 30~240초 사이로 조정할 수 있는데 기본이 최소값입니다.
  • 이 요청은 디스크의 세션 로그에 남지 않아(#104358) 전사 기반 비용 도구가 놓칩니다.
  • 2.1.310에는 더 싼 short 모드가 있으나 꺼져 있고 서버 플래그로만 켤 수 있습니다.

측정

  • OpenTelemetry 내보내기에서 claude_code.api_request 이벤트를 query_source별로 묶었습니다. 우회 적용 전 한 주 동안 agent_summary가 지출 추정치의 16.4%(본 대화 15.7%), API 요청의 19.7%. 그중 약 96%가 Opus.
  • 입력:출력 토큰 약 9,000:1.
  • 지출은 Claude Code의 요청별 추정치(cost_usd)이지 청구서가 아닙니다. 구독이라면 손실은 요금이 아니라 한도 여유입니다.
  • 이슈 #86879에 18~26%의 독립 측정 4건. 10월 중순 저자 텔레메트리는 약 16%.
  • 한 댓글은 한 사용자의 전사에 타이머를 재생해 정가 기준 약 8%로 추정했으며, 캐시가 따뜻하다는 가정입니다. 저자는 이 호출의 약 98%가 캐시에서 전사를 읽는다고 합니다.

우회법

no-agent-summary.js는 Bun --preload 스크립트(MIT)로, 바이너리를 고치지 않습니다. 전역 setTimeout만 감싸서 콜백 소스에 요약기 표식이 있으면 타이머를 걸지 않고 2³¹−1ms 지연의 빈 핸들을 돌려줍니다.

  • 설치: BUN_OPTIONS=--preload=<절대경로> 설정 후 claude daemon stop --any. = 형식이어야 하며 공백 형식은 bun install 등을 깨뜨립니다.
  • CC_AGENT_SUMMARY_MODE=pass는 아무것도 막지 않는 대조군입니다.
  • 검증: 로그 변수를 켜고 claude --version에서 preload active, 백그라운드 에이전트 실행 후 summary timer #1 suppressed.
  • 테스트: Linux 2.1.257~2.1.312에서 포크 횟수 5/5/0(없음/pass/off). macOS와 Windows 2.1.312는 댓글 보고로 같은 결과. 데스크톱 앱은 미검증.

한계

  • 소스 텍스트 매칭이라 문자열이 바뀌거나 타이머가 전역 setTimeout을 벗어나면 조용히 실패합니다. 업데이트마다 재검증해야 합니다.
  • 포크 서브에이전트(subagent_type: "fork")와 포크 스킬은 무조건 요약되므로 막지 못합니다.
  • 보이는 효과는 에이전트별 상태 줄이 멈추는 것뿐입니다.
  • 왜 설정이 없나: SDK 옵션 agentProgressSummaries는 기본 false지만 켜는 것만 됩니다. CLAUDE_CODE_FORK_SUBAGENT=0과 CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1은 막지만 그 기능 자체를 끕니다.

글에 없는 것

Anthropic의 설명이나 수정 계획, 실제 청구서 기준 비율, 데스크톱 앱 검증. 측정은 저자와 댓글 작성자들의 것입니다.

실무에서 할 일

우회 스크립트보다 먼저 측정입니다. OpenTelemetry 내보내기를 켜고 query_source별로 지출을 나눠 agent_summary 비율을 보세요. 비율이 크고 백그라운드 에이전트의 상태 줄이 필요 없다면 preload를 쓰되, 업데이트마다 summary timer suppressed 로그를 확인해야 합니다. 바이너리 문자열 매칭에 기대는 우회는 언제든 깨지므로, 공식 설정이 생기면 그쪽으로 바꾸세요.

  1. 01Node2Shell에서 HTTP2Shell로 — Brotli 디코더 RCE가 Node를 넘어 Python·Bun·Envoy까지
  2. 02macOS의 git·curl·python3는 아직 eMudhra 인증서를 믿는다 — 통보 11일째, 27.2 업데이트가 수동 조치를 되돌렸다
  3. 03Tailscale SSH 'Tailworm' — 패치 전 공개된 11건, 포워딩 경로로 루트와 등록 키까지
  4. 04CPython 실험적 JIT, 본선에서 빠진다 — PEP 836 철회, '끌고 갈 여력이 없다'
  5. 05Claude Code가 백그라운드 에이전트 전사를 30초마다 모델에 보낸다 — 상태 줄 다섯 단어에 지출의 16%지금 읽는 글

2026년 10월 29일에 올라온 글

그날 대시보드 →
  1. ·SMS of Death — 잘못된 WAP Push 한 통으로 Android 전화 프로세스가 죽고 긴급 통화가 끊긴다, 10월 패치
  2. ·Mistral Large 4 가중치 공개 — 1T 파라미터, '수정된 MIT'지만 Model-as-a-Service는 별도 계약

댓글

불러오는 중…