Sprag

Gateways, pricing, FAQ and environment (한국어)

게이트웨이를 거치면 응답이 캐시 쓰기 합계만 내려보내고 5분·1시간 버킷별 분해 값은 채우지 않습니다. 그래서 이 도구가 "캐시 쓰기가 아직 없다"와 "이 제공자는 알려 주지 않는다"를 구별하지 못했고, 판정 불가일 때 1시간을 기본값으로 잡았습니다. Bedrock 은 5분…

🌐 Bedrock·Vertex 경유 환경

게이트웨이를 거치면 응답이 캐시 쓰기 합계만 내려보내고 5분·1시간 버킷별 분해 값은 채우지 않습니다. 그래서 이 도구가 "캐시 쓰기가 아직 없다"와 "이 제공자는 알려 주지 않는다"를 구별하지 못했고, 판정 불가일 때 1시간을 기본값으로 잡았습니다. Bedrock 은 5분 버킷만 제공하므로 남은 시간이 최대 12배로 부풀어 보였습니다.

v3.26.0부터 트랜스크립트의 모델 ID로 게이트웨이를 감지해 다음을 바로잡습니다.

게이트웨이를 거친 비용과 위임 절감액은 게이트웨이 단가로 계산합니다. ANTHROPIC_BASE_URL이 게이트웨이를 가리키면 청구도 게이트웨이가 하므로, Actual cost와 월 지출, Routing saved를 그 게이트웨이의 /model/info 단가로 계산합니다. 단가는 모델 맵과 함께 갱신되며 7일 동안 유효합니다. 게이트웨이가 단가를 주지 않는 모델은 Anthropic 정가로 채우지 않습니다. 그 세션은 합계에서 빼고 +N unpriced로 건수만 보여 줍니다. 게이트웨이를 거치지 않는 세션은 계속 정가를 씁니다. 더 비싼 모델로 위임한 건은 0으로 자르지 않고 손실(-$0.12)로 기록합니다.

감지가 틀리면 sprag mode ttl=5m(또는 ttl=1h)로 직접 지정할 수 있습니다. 지정값이 실측값보다 우선합니다.

LiteLLM: 5h/7d cap 대신 키 예산을 보여 줍니다 (v3.35.0)

LiteLLM 프록시로 Bedrock 등을 쓰면 Claude Code stdin 에 rate_limits 가 오지 않아 ✦ current·📅 weekly 게이지가 아예 없습니다. 대신 LiteLLM 은 키별 max_budget 과 spend 를 관리하므로, 그 값을 가져와 같은 지점에 예산 게이지를 그립니다.

claude.ai Enterprise: usage-credit 예산 게이지 (v3.93.0)

claude.ai 로 로그인한 Enterprise 사용자도 상태줄 입력에서 rate_limits 를 받지 못합니다. 이제 상태줄이 GET https://api.anthropic.com/api/oauth/usage 응답의 extra_usage 로 cap 게이지가 놓이던 지점에 💳 budget ▰▱ 54% $271/$500 게이지를 그립니다.

세션 기본 모델이 sonnet 이면 sonnet 위임 규칙(T1)은 구조적으로 절감이 0입니다. 같은 급으로 내려보내 봐야 차액이 없기 때문이며 이는 정상 동작입니다. 다만 route-scan rules 가 이 경우를 "아직 위임 없음"과 같은 문구로 표시해 고장처럼 보였으므로, 이제 현재 기본 모델 기준으로 적용되지 않는다는 사실을 따로 적습니다.

LiteLLM: 모델 별칭을 게이트웨이에서 가져옵니다 (sprag profile-map --refresh)

LiteLLM 게이트웨이 환경에서는 sprag profile-map --refresh 가 게이트웨이의 GET /model/info 에서 모델 별칭을 바로 읽어 오므로, route-scan 이 위임 투표가 쌓이길 기다리거나 profile-map.json 을 손으로 편집할 필요가 없습니다. 이 갱신은 LiteLLM 예산 게이지와 같은 5분 점검·24시간 캐시 주기를 씁니다. 인증 토큰은 저장하지 않으며, 호출 시점마다 apiKeyHelper 에서 읽어 그 헬퍼의 수명 그대로 만료되게 둡니다. 해석 순서 세 단계와 profile-map.json 을 직접 쓰는 형식은 route-scan 문서에 있습니다.

FAQ

claude-token-saver와 같은 도구인가요? 네. Sprag가 새 이름이고 npm 패키지는 sprag-cli입니다. 예전 claude-token-saver 패키지는 3.55.0 에서 갱신이 멈췄으니, 새 릴리스를 받으려면 sprag-cli 로 옮기십시오.

LLM을 호출하거나 API 키가 필요한가요? 아니요. Claude Code가 이미 내 컴퓨터에 남기는 세션 로그를 사후 분석할 뿐입니다. 추가 모델 호출도, 키도 없고, 데이터가 밖으로 나가지 않습니다.

프롬프트 습관을 바꿔야 하나요? 아니요. 설치 때 hook과 statusline을 한 번 등록하면, 지금 하던 방식 그대로 쓰는 동안 규칙과 위임, 경고가 세션 안에 나타납니다.

절감액 수치는 어디서 나오나요? 위임 실행마다 실제 가격 차이가 장부에 한 줄씩 기록됩니다. 라우팅 기준은 공개 데이터로 벤치마크했고, 방법은 docs/BENCHMARK.md에 있습니다.

동작 원리 · 환경

Claude Code는 모든 API 응답을 ~/.claude/projects/<dir>/<session>.jsonl에 기록합니다. 이 도구는 cache_read_input_tokens, cache_creation.ephemeral_5m/1h_input_tokens 등을 requestId 기준으로 중복 제거 후 집계합니다.

Node.js ≥ 20 · macOS / Linux / Windows / WSL · 의존성 0.

알려진 환경 이슈 · 마이그레이션

IntelliJ Claude Code plugin: statusline 위젯이 프레임을 잘못 합성해 59:548 같은 잔재가 보이는 버그가 있습니다(이모지 출력에서만). v2.8.5+는 TERMINAL_EMULATOR=JetBrains-JediTerm 감지 시 자동으로 text 모드 폴백합니다.

TTL 카운트다운이 멈춰 보일 때: 카운트다운이 입력 없이도 초 단위로 줄어들려면 Claude Code 가 statusline 명령을 주기적으로 다시 실행해야 하고, 그 주기는 ~/.claude/settings.json 의 statusLine.refreshInterval(초 단위, v2.1.97 이상)이 정합니다. 이 값이 없으면 대화가 갱신될 때만 다시 그려져서 멈춘 것처럼 보입니다. 터미널마다 동작이 다르면 세 가지를 확인하십시오. ① 그 머신의 Claude Code 버전이 2.1.97 이상인지, ② 프로젝트 .claude/settings.json 이나 settings.local.json 이 statusLine 을 refreshInterval 없이 덮어쓰고 있지 않은지, ③ statusline 래퍼가 PATH 에서 sprag 를 찾지 못해 매 렌더마다 npx 폴백으로 수 초씩 걸리고 있지 않은지 (비로그인 셸에서 nvm 이 로드되지 않는 터미널이 여기에 해당합니다). sprag install 을 다시 실행하면 refreshInterval 을 5초로 복구합니다.

claude-cache-monitor에서 마이그레이션:

npm uninstall -g claude-cache-monitor && npm i -g sprag-cli

~/.claude/settings.json의 statusLine.command도 sprag …로 교체하세요.

다른 문서