Оптимізація витратПосібник
Використання токенів Claude Code: тримайте вивід інструментів поза контекстом
Як хук PreToolUse і плагін context-mode тримають журнали тестів поза контекстом Claude Code, плюс оцінка вартості сесії з фільтруванням і без нього.

На цій сторінці
Ваш агент запускав набір тестів тричі, і рахунок більший за завдання. Причина рідко в коді, який він написав. Це журнали тестів: щойно результат інструмента потрапляє в контекст Claude Code, кожен наступний запит знову його несе. Виправлення — зменшити вивід інструмента, перш ніж модель його побачить. Офіційний спосіб — хук PreToolUse на Bash; сторонній спосіб — плагін context-mode. Обидва нижче, з оцінкою вартості для довгої сесії на моделі CheapTokens.
Чому за один журнал платять багато разів#
Згідно зі сторінкою витрат Claude Code (https://code.claude.com/docs/en/costs, перевірено 23 жовтня 2026 року), Claude Code надсилає повну розмову з кожним запитом, і кожне використання інструмента викликає ще один запит, який несе результати інструмента. Кешування підказок перечитує історію за дешевшим кешованим тарифом, але токени все одно там.
Скажімо, агент запускає npm test і отримує журнал на 10 000 рядків. Документація каже, що такий журнал може містити десятки тисяч токенів. Припустімо 30 000 токенів. Що б ви не робили далі, ці 30 000 токенів є частиною входу кроку 11, кроку 12, кроку 13 і так далі, поки ви не /clear або не стиснете. І ось у чому річ: журнал корисний для одного кроку, а ви платите за нього протягом тридцяти.
Виправлення 1: хук PreToolUse, який фільтрує вивід тестів#
Та сама сторінка документації пропонує хуки як попередню обробку: хук PreToolUse на Bash переписує тестові команди (npm test, pytest, go test), щоб вони проходили через grep -. Тоді агент бачить лише збої плюс кілька рядків контексту, а не 10 000 рядків зелених точок. Документація каже, що це може перетворити десятки тисяч токенів на сотні.

Це скрипт із тієї сторінки документації (перевірено 23 жовтня 2026 року). Йому потрібен jq. Створіть теку за допомогою mkdir -, збережіть скрипт як ~/ і запустіть chmod +x для нього:
#!/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Потім зареєструйте його в ~/:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [{ "type": "command", "command": "~/.claude/hooks/filter-test-output.sh" }]
}
]
}
}Щоб перевірити, що він працює, відкрийте /hooks у Claude Code і знайдіть запис PreToolUse, або почніть із claude - і попросіть агента запустити npm test. Коли хук переписав команду, файл має рядок modified tool input keys з полем command. Якщо тести проходять, вивід порожній, тож агент отримує тихий успіх; скоригуйте шаблон, якщо ваш запускач виводить збої інакше.
Виправлення 2: context-mode для великих результатів інструментів#
Хук охоплює лише команди, які можна передати через конвеєр. Знімки сторінок із Playwright або список із двадцяти issue на GitHub надходять від інструментів MCP. Саме на це націлений context-mode. Згідно з його README (https://github.com/mksglu/context-mode, перевірено 23 жовтня 2026 року; там не вказано версію чи дату), це сервер MCP і плагін, який тримає сирий вивід інструментів поза вікном контексту, зберігає стан сесії в SQLite і маршрутизує виклики інструментів через хуки. Йому потрібен Claude Code v1.0.33 або новіший, а його ліцензія — Elastic License 2.0, яка не є ліцензією з відкритим кодом OSI.
Встановлення всередині Claude Code:
/plugin marketplace add mksglu/context-mode
/plugin install context-mode@context-modeПерезапустіть або запустіть /reload-plugins, потім перевірте за допомогою /. Варіант лише з MCP, claude mcp add context-, додає інструменти, але не має автоматичної маршрутизації.
Проєкт повідомляє про великі скорочення: 315 КБ стає 5,4 КБ (98%), знімок сторінки на 56 КБ стає 299 байтів, 986 КБ стає 62 КБ. Це власні цифри автора: сприймайте їх як верхню межу і вимірюйте у власній сесії за допомогою /context до і після.
Скільки коштує довга сесія, з фільтруванням і без нього#
Ось арифметика для однієї припущеної сесії. Це 40-крокова сесія програмування з середнім базовим контекстом 20 000 токенів, 500 вихідних токенів на крок і трьома запусками тестів на кроках 10, 20 і 30. Кожен сирий журнал — 30 000 токенів; відфільтрована версія — 500.
- Журнал із кроку 10 надсилається повторно в 30 запитах після нього: 30 × 30 000 = 900 000 токенів. Крок 20: 20 × 30 000 = 600 000. Крок 30: 10 × 30 000 = 300 000. Додатковий вхід: 900 000 + 600 000 + 300 000 = 1 800 000.
- З фільтруванням: (30 + 20 + 10) × 500 = 30 000 додаткового входу.
- Базовий вхід: 40 × 20 000 = 800 000. Вихід: 40 × 500 = 20 000.
- Отже, сесія становить 800 000 + 1 800 000 = 2 600 000 вхідних токенів без фільтрування і 800 000 + 30 000 = 830 000 з фільтруванням, з 20 000 вихідних токенів в обох випадках.
Розрахунок враховує кожен вхідний токен за повним тарифом. Кешування знижує реальне число, але воно знижує обидва випадки за однаковою логікою. Актуальні ціни для MiniMax-M2.7 (MiniMaxAI/, контекст 180K, до 8 192 вихідних токенів), яка є моделлю, що підходить для таких насичених входом циклів агента, наведено на діаграмі нижче.
Припущення: 40 кроків, базовий контекст 20 000 токенів, 500 вихідних токенів на крок, три запуски тестів по 30 000 токенів (з фільтруванням: 500).
На MiniMax-M2.7 сесія коштує $0.133 без фільтрування і $0.0445 з фільтруванням, і загалом, з урахуванням входу та виходу разом, це дешевше за довідкову ціну OpenRouter. Приблизно дві третини входу в невідфільтрованому випадку — це журнали, які агент прочитав один раз.
Справа не в точних доларах. Справа в тому, що фільтр прибирає близько 1 770 000 із 2 600 000 вхідних токенів (2 600 000 − 830 000 = 1 770 000) на будь-якій моделі, а дешевша модель знижує ціну кожного токена, що залишився.
Запустіть Claude Code на моделі CheapTokens#
Claude Code спілкується протоколом Anthropic Messages, і CheapTokens його підтримує. Базова URL-адреса для Claude Code не має /v1. Повне налаштування — у як підключити Claude Code до CheapTokens. Коротка версія, з ключем-заповнювачем:
export ANTHROPIC_BASE_URL=https://api.cheaptokens.dev
export ANTHROPIC_AUTH_TOKEN=YOUR_CHEAPTOKENS_KEY
export ANTHROPIC_MODEL=MiniMaxAI/MiniMax-M2.7
claudeВикористовуйте повний id з документації; короткі назви з таблиць цін API не приймає. Ціни для кожної моделі на сторінці цін. Про інші звички, які зменшують рахунок Claude Code (/clear, /compact, /mcp, субагенти), дивіться Як зробити Claude Code дешевшим. Щоб побачити, як рахуються вхід і вихід у реальному запиті, прочитайте Скільки токенів використовує запит API.
Швидкий контрольний список#
- Запустіть
/contextу довгій сесії і подивіться, що займає місце. - Додайте хук Bash для тестових команд; підтвердьте переписування в
/hooksабо журналі налагодження. - Якщо інструменти MCP повертають великі знімки, спробуйте context-mode і порівняйте
/contextдо і після. /clearміж не пов'язаними завданнями, щоб старі журнали перестали тягнутися.



