Bumalik sa blog

Pag-optimize ng gastosGabay

Claude Code token usage: panatilihin ang tool output sa labas ng context

Paano pinapanatili ng PreToolUse hook at ng context-mode plugin ang test logs sa labas ng context ng Claude Code, kasama ang session cost estimate may at walang filtering.

Ni CheapTokens TeamNai-publish noong 6 min na pagbabasa

Terminal na nagpapakita ng test command na dumaan sa grep at head upang failures lang ang makarating sa Claude Code
Sa pahinang ito
  1. Bakit isang log ang binabayaran nang maraming beses
  2. Fix 1: isang PreToolUse hook na nagfi-filter ng test output
  3. Fix 2: context-mode para sa malalaking tool results
  4. Magkano ang isang mahabang session, may at walang filtering
  5. Patakbuhin ang Claude Code sa isang CheapTokens model
  6. Mabilis na checklist

Tatlong beses pinatakbo ng agent mo ang test suite, at mas malaki pa ang bill kaysa sa gawain. Bihira ang dahilan ay ang code na isinulat nito. Ang test logs: kapag ang isang tool result ay napunta sa context ng Claude Code, dinadala ito ng bawat susunod na request. Ang solusyon ay paikliin ang tool output bago ito makita ng modelo. Ang opisyal na paraan ay isang PreToolUse hook sa Bash; ang third-party na paraan ay ang context-mode plugin. Nasa ibaba ang dalawa, kasama ang cost estimate para sa mahabang session sa isang CheapTokens model.

Bakit isang log ang binabayaran nang maraming beses#

Ayon sa Claude Code costs page (https://code.claude.com/docs/en/costs, sinuri noong 23 Oktubre 2026), ipinapadala ng Claude Code ang buong usapan sa bawat request, at ang bawat tool use ay nagti-trigger ng isa pang request na nagdadala ng tool results. Ang prompt caching ay muling nagbabasa ng history sa mas murang cached rate, ngunit nandiyan pa rin ang tokens.

Sabihin nating pinatakbo ng agent ang npm test at nakakuha ng 10,000-linyang log. Sinasabi ng docs na ang ganoong log ay maaaring umabot ng sampu-sampung libong tokens. Ipagpalagay na 30,000 tokens. Anuman ang gawin mo susunod, ang 30,000 tokens na iyon ay bahagi ng input ng step 11, step 12, step 13, at iba pa hanggang sa mag-/clear ka o mag-compact. At iyon ang catch: kapaki-pakinabang ang log para sa isang step, at binabayaran mo ito nang tatlumpung beses.

Fix 1: isang PreToolUse hook na nagfi-filter ng test output#

Ang parehong docs page ay nagmumungkahi ng hooks bilang preprocessing: isang PreToolUse hook sa Bash ay nagsusulat muli ng test commands (npm test, pytest, go test) upang dumaan sa grep -A 5 -E '(FAIL|ERROR|error:)' | head -100. Pagkatapos, ang nakikita ng agent ay failures lang kasama ang ilang linya ng context, hindi 10,000 linya ng green dots. Sinasabi ng docs na maaari nitong gawing daan-daan ang sampu-sampung libong tokens.

Ang nakikita ng agent bago at pagkatapos ng hook
Raw npm test output versus failures only

Ito ang script mula sa docs page na iyon (sinuri noong 23 Oktubre 2026). Kailangan nito ang jq. Gumawa ng folder gamit ang mkdir -p ~/.claude/hooks, i-save ang script bilang ~/.claude/hooks/filter-test-output.sh at patakbuhin ang chmod +x dito:

bash
#!/bin/bash
input=$(cat)
cmd=$(echo "$input" | jq -r '.tool_input.command')

pattern='^(npm test|pytest|go test)( [^;&|<>`$#\\[:cntrl:]]*)?$'

if [[ "$cmd" =~ $pattern ]]; then
  filtered_cmd="$cmd 2>&1 | grep -A 5 -E '(FAIL|ERROR|error:)' | head -100"
  echo "$input" | jq --arg filtered "$filtered_cmd" '{hookSpecificOutput: {hookEventName: "PreToolUse", updatedInput: (.tool_input + {command: $filtered})}}'
else
  echo "{}"
fi

Pagkatapos, irehistro ito sa ~/.claude/settings.json:

json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [{ "type": "command", "command": "~/.claude/hooks/filter-test-output.sh" }]
      }
    ]
  }
}

Para masuri kung gumagana ito, buksan ang /hooks sa loob ng Claude Code at hanapin ang PreToolUse entry, o magsimula sa claude --debug-file ./claude-debug.txt at hilingin sa agent na patakbuhin ang npm test. Kapag naisulat muli ng hook ang command, ang file ay may modified tool input keys na linya kasama ang command field. Kung pumasa ang tests, walang laman ang output, kaya nakakakuha ang agent ng tahimik na success; ayusin ang pattern kung iba ang pag-print ng failures ng runner mo.

Fix 2: context-mode para sa malalaking tool results#

Ang hook ay sumasaklaw lamang sa mga command na maaari mong i-pipe. Ang page snapshots mula sa Playwright o listahan ng dalawampung GitHub issues ay nagmumula sa MCP tools. Iyon ang target ng context-mode. Ayon sa README nito (https://github.com/mksglu/context-mode, sinuri noong 23 Oktubre 2026; walang ipinapakitang version o petsa), ito ay isang MCP server at plugin na nagpapanatili ng raw tool output sa labas ng context window, nag-iimbak ng session state sa SQLite at nagruruta ng tool calls sa pamamagitan ng hooks. Kailangan nito ang Claude Code v1.0.33 o mas bago, at ang lisensya nito ay Elastic License 2.0, na hindi isang OSI open-source license.

I-install sa loob ng Claude Code:

text
/plugin marketplace add mksglu/context-mode
/plugin install context-mode@context-mode

I-restart o patakbuhin ang /reload-plugins, pagkatapos i-verify gamit ang /context-mode:ctx-doctor. Ang MCP-only variant, claude mcp add context-mode -- npx -y context-mode, ay nagdadagdag ng tools ngunit walang automatic routing.

Nag-uulat ang proyekto ng malalaking pagbawas: ang 315 KB ay nagiging 5.4 KB (98%), ang 56 KB page snapshot ay nagiging 299 bytes, ang 986 KB ay nagiging 62 KB. Iyon ang sariling numero ng may-akda: ituring ang mga ito bilang ceiling at sukatin sa sarili mong session gamit ang /context bago at pagkatapos.

Magkano ang isang mahabang session, may at walang filtering#

Narito ang arithmetic sa isang ipinapalagay na session. Ito ay 40-step coding session sa 20,000-token average base context, 500 output tokens bawat step, at tatlong test runs, sa steps 10, 20 at 30. Ang bawat raw log ay 30,000 tokens; ang filtered na bersyon ay 500.

  • Ang log mula sa step 10 ay muling ipinapadala sa 30 requests pagkatapos nito: 30 × 30,000 = 900,000 tokens. Step 20: 20 × 30,000 = 600,000. Step 30: 10 × 30,000 = 300,000. Extra input: 900,000 + 600,000 + 300,000 = 1,800,000.
  • Filtered: (30 + 20 + 10) × 500 = 30,000 extra input.
  • Base input: 40 × 20,000 = 800,000. Output: 40 × 500 = 20,000.
  • Kaya ang session ay 800,000 + 1,800,000 = 2,600,000 input tokens unfiltered at 800,000 + 30,000 = 830,000 filtered, na may 20,000 output tokens sa alinmang paraan.

Binibilang ng kalkulasyon ang bawat input token sa buong rate. Binababa ng caching ang tunay na numero, ngunit binababa nito ang parehong kaso sa parehong lohika. Ang live na presyo para sa MiniMax-M2.7 (MiniMaxAI/MiniMax-M2.7, 180K context, hanggang 8,192 output tokens), na siyang model na bagay sa input-heavy agent loops na tulad nito, ay nasa chart sa ibaba.

Session cost sa MiniMax-M2.7, 40 steps
  • Without filter$0.133
  • With the hook$0.0445

Mga assumption: 40 steps, 20,000-token base context, 500 output tokens bawat step, tatlong test runs na 30,000 tokens (filtered: 500).

Sa MiniMax-M2.7 ang session ay nagkakahalaga ng $0.133 unfiltered at $0.0445 filtered, at sa kabuuan, kasama ang input at output na binibilang nang magkasama, ito ay mas mura kaysa sa reference price ng OpenRouter. Halos dalawang-katlo ng input sa unfiltered na kaso ay mga log na binasa ng agent nang isang beses.

Ang punto ay hindi ang eksaktong dolyar. Ito ay ang pag-alis ng filter ng humigit-kumulang 1,770,000 sa 2,600,000 input tokens (2,600,000 − 830,000 = 1,770,000) sa anumang model, at ang mas murang model ay nagpapababa ng presyo ng bawat token na natitira.

Patakbuhin ang Claude Code sa isang CheapTokens model#

Ang Claude Code ay nagsasalita ng Anthropic Messages protocol, at sinusuportahan ito ng CheapTokens. Ang base URL para sa Claude Code ay walang /v1. Ang buong setup ay nasa how to connect Claude Code to CheapTokens. Ang maikling bersyon, na may placeholder key:

bash
export ANTHROPIC_BASE_URL=https://api.cheaptokens.dev
export ANTHROPIC_AUTH_TOKEN=YOUR_CHEAPTOKENS_KEY
export ANTHROPIC_MODEL=MiniMaxAI/MiniMax-M2.7
claude

Gamitin ang buong id mula sa docs; ang mga short name mula sa price tables ay hindi tinatanggap ng API. Ang mga presyo para sa bawat model ay nasa pricing page. Para sa iba pang mga gawi na nagpapababa ng bill sa Claude Code (/clear, /compact, /mcp, subagents), tingnan ang How to make Claude Code cheaper. Para makita kung paano binibilang ang input at output sa isang tunay na request, basahin ang How many tokens does an API request use.

Mabilis na checklist#

  1. Patakbuhin ang /context sa isang mahabang session at tingnan kung ano ang kumukuha ng espasyo.
  2. Idagdag ang Bash hook para sa test commands; kumpirmahin ang rewrite sa /hooks o sa debug log.
  3. Kung ang MCP tools ay nagbabalik ng malalaking snapshots, subukan ang context-mode at ihambing ang /context bago at pagkatapos.
  4. /clear sa pagitan ng mga walang kaugnayang gawain, upang tumigil ang mga lumang log sa pagsama.