Як пришвидшити й здешевити довгу сесію Claude Code
Кожен запит повторно передає весь контекст. Виконайте /context, приберіть постійні витрати, а потім очистьте й стисніть сесію за потреби.
Як не дати довгій сесії Claude Code сповільнитися та стати дорожчою
Довга сесія Claude Code сповільнюється й стає дорожчою, тому що кожен запит повторно передає весь контекст, а цей контекст постійно збільшується. Виправляйте це в установленому порядку. Виконайте /context, щоб побачити, що заповнює контекстне вікно, вилучіть елементи, за які ви платите в кожному запиті, потім використовуйте /clear між непов’язаними завданнями, а /compact — з інструкцією в межах одного довгого завдання. Працюйте без тривалих перерв, оскільки холодний кеш промптів перетворює дешеве читання на повний повторний запис усього сказаного вами.
Причину постійного нарахування витрат пояснює лічильник токенів у сесії агента.
Прочитайте /context, перш ніж щось змінювати
Не вгадуйте, чим заповнене вікно. Claude Code повідомить вам про це.
/context [all] відображає поточне використання контексту у вигляді кольорової сітки з рекомендаціями щодо оптимізації для інструментів, які використовують багато контексту, і надмірного використання пам’яті; all розгортає деталізацію за елементами в повноекранному режимі. Інтерпретуйте результат за п’ятьма категоріями.
- Системний prompt. Власні інструкції Claude Code для виконання. Фіксовані протягом сеансу.
- Визначення інструментів. Схема кожного інструмента, який може викликати агент, зокрема кожного підключеного сервера MCP (Model Context Protocol).
- Файли пам’яті.
CLAUDE.mdта автоматична пам’ять, завантажені на початку сеансу. - Файли та результати роботи інструментів. Кожен прочитаний файл і все, що вивели ваші команди.
- Історія повідомлень. Ваші запити та відповіді на них.
Перші три категорії — це фіксована плата, яку сплачують за кожен запит протягом усього сеансу. Останні дві зростають. Скоротіть фіксовану частину один раз на початку, а зростання контролюйте постійно.
Про заповнене вікно повідомляють два рядки:
Context exceeds the 200k-token limit by 94k tokens — run /compact or /clear to continue.
Context is 94k tokens past the 200k-token compaction window — run /compact to reduce usage.Перший — це жорстке обмеження: запит відхиляється, а відповідна помилка API (application programming interface) має вигляд Prompt is too long. Другий — це вікно компактування, яке на моделі з 1 million token може бути меншим за фактичне контекстне вікно. Запити після його досягнення все ще виконуються, тому це попередження, а не відмова.
У платному плані /usage додає другу частину інформації та позначає такі фактори, як великий контекст або промахи кешу, розподіляючи нещодавнє використання між окремими навичками, субагентами й серверами MCP. Якщо він повідомляє, що ліміт уже вичерпано, яке вікно ліміту ви очікуєте визначає, чи допоможе вам зараз скорочення контексту, чи потрібен інший спосіб відновити роботу.
CLAUDE.md — це постійний податковий тягар, тому тримайте файл компактним
Ваш CLAUDE.md завантажується в контекст на початку сеансу й залишається там. Якщо в ньому описано детальну процедуру розгортання, ці токени присутні навіть тоді, коли ви виправляєте друкарську помилку в тестовому файлі. Anthropic радить додавати лише необхідні відомості й обмежити файл 200 рядками.
Переносьте процедури в skills. Skill завантажується лише після виклику, тому workflow, який ви запускаєте двічі на тиждень, не споживає ресурси в інші дні. Після compaction skills мають окремий бюджет: до 5,000 токенів на skill і до 25,000 загалом; спочатку видаляються найстаріші. Під час truncation зберігається початок файлу, тому найважливіші інструкції розміщуйте ближче до початку SKILL.md.
Від того, що переживає compaction, залежить, де має бути інструкція.
- System prompt і стиль виводу не змінюються, оскільки вони не належать до історії повідомлень.
CLAUDE.mdу корені проєкту, правила без області дії та auto memory повторно завантажуються з диска.- Правило з frontmatter
paths:втрачається, доки відповідний файл не буде прочитано знову. - Вкладений
CLAUDE.mdу підкаталозі втрачається, доки файл у цьому підкаталозі не буде прочитано знову. - Hooks не зачіпаються, оскільки hook виконується як код і ніколи не потрапляє в контекст.
Тому правило, від якого ви залежите, має міститися в CLAUDE.md у корені проєкту: Claude Code спочатку очищає старі результати роботи інструментів, а потім створює підсумок, тому інструкції з початку розмови можуть бути втрачені. Редагуйте memory за допомогою /memory. Claude Code зберігає копію, завантажену на початку сеансу, тому trim посеред сеансу зберігає prompt cache і набуває чинності лише під час наступного /clear, /compact або перезапуску. Втрата контексту — лише одна з причин, через яку правило перестають виконувати, тому якщо правило очевидно все ще є у вікні, але його все одно ігнорують, перевірте інші причини, перш ніж переписувати його.
/clear між завданнями, /compact у межах одного
Ці дві команди здаються взаємозамінними, але їхня вартість сильно відрізняється.
/clear [name] починає нову розмову з порожнім контекстом. Команда не надсилає запит, тому нічого не коштує. Передайте їй назву, щоб позначити попередню розмову у вибирачі /resume; /reset і /new є псевдонімами. Використовуйте її одразу після переходу до непов’язаного завдання, інакше старе завдання повторно надсилатиметься та оплачуватиметься з кожним повідомленням нового завдання.
/compact [instructions] звільняє місце в контексті, але продовжує ту саму розмову: команда узагальнює історію та замінює нею попередню історію. Використовуйте її в межах одного тривалого завдання, коли потрібна безперервність контексту.
Завжди передавайте /compact інструкцію. Порожня команда /compact узагальнює історію за промптом за замовчуванням і не знає, яка частина роботи вам ще потрібна. Команда з інструкцією зберігає потрібний контекст:
/compact focus on the auth bug fix
/compact keep only the plan and the diffЯкщо щоразу виконуєте compact з тієї самої причини, додайте постійну інструкцію до CLAUDE.md вашого проєкту під заголовком # Compact instructions. У новій сесії /compact виводить Not enough messages to compact.. Це означає лише, що історії ще немає.
Тут часто плутають дві операції, пов’язані з витратами. Запит на узагальнення використовує спільний префікс, тому читає наявний кеш, а не обробляє історію повторно. Більшість часу витрачається на створення узагальнення. Compacting великого контексту все одно є великим запитом, оскільки розмова, яку узагальнюють, є вхідними даними. Наступний після compacting хід не є повільною частиною: він відновлює кеш для значно коротшого промпту.
Є дві дешевші команди. /rewind [description] відкочує код і розмову до контрольної точки. Для шляху, який потрібно повністю залишити, ця команда краща за compacting, оскільки обрізає історію до префікса, який уже кешовано. /recap додає узагальнення як вивід команди замість заміни історії, тому кешований префікс залишається без змін.
Якщо автоматичний compacting запускається знову й знову, виводиться таке повідомлення:
Autocompact is thrashing: the context refilled to the limit...Compaction виконано успішно, але файл або вивід інструмента кілька разів поспіль знову заповнив вікно, тому Claude Code припинив повторні спроби. Для відновлення читайте великий файл діапазонами рядків, запустіть /compact із фокусом, який відкидає великий вивід, передайте цю роботу subagent або виконайте /clear, якщо попередня розмова більше не потрібна.
MCP-сервери створюють фіксовані накладні витрати
Кожен підключений MCP-сервер збільшує обсяг кожного запиту протягом усієї сесії. Ви сплачуєте цю вартість незалежно від того, викликаєте сервер чи ні.
Claude Code зменшує ці витрати. За замовчуванням визначення інструментів MCP завантажуються відкладено, тому в контекст потрапляють лише назви інструментів, доки Claude не використає певний інструмент. Виконайте /context, щоб перевірити фактичну вартість серверів, і /mcp disable <name>, щоб видалити сервер, який сьогодні не використовуватимете. Якщо ви запускаєте власні MCP-сервери на VPS, той самий розрахунок визначає, скільки інструментів має надавати один сервер.
Зробіть це на початку сесії. Поки визначення залишаються відкладеними, підключення або відключення сервера лише додає дані до розмови, а кеш зберігається. Якщо визначення завантажуються в префікс, оскільки пошук інструментів вимкнено або сервер не використовує відкладене завантаження, та сама зміна змушує наступний запит повторно прочитати все.
Фільтруйте докладний вивід інструментів до його потрапляння в контекст
Результат інструмента є вхідними даними, і на кожному наступному кроці ці дані надсилаються повторно. Тестовий запуск, який виводить 20,000 токенів, не є одноразовою витратою: ви платите за нього знову на кожному кроці, доки цей вивід не залишить контекст.
Фільтруйте вивід на джерелі. Hook, який скорочує результат тестового запуску до повідомлень про помилки ще до того, як Claude його побачить, перетворює такий обсяг виводу на кілька сотень токенів — на цьому кроці й під час кожного повторного надсилання:
npm test 2>&1 | grep -E "FAIL|Error:" | head -40Hook самі не потрапляють у контекст, оскільки виконуються як код. Застосовуйте цей підхід до будь-якого інструмента, вивід якого перевищує один екран. Та сама логіка діє для файлу на 3,000 рядків: запитуйте потрібний діапазон рядків, оскільки після завантаження весь файл залишається у вікні контексту.
Обмежуйте дані, які читає агент, і делегуйте об’ємні завдання
Промпт, у якому вказано файл і симптом, змушує агента прочитати саме цей файл. Відкритий запит на впорядкування проєкту змушує агента читати все, що він вважатиме релевантним, і кожне таке читання залишається в контексті.
Делегуйте об’ємні завдання субагенту. Запуски тестів і обробка журналів споживають реальний обсяг контексту. Субагент зберігає ці результати у власному контексті та повертає лише підсумок. Недолік: субагент створює власний кеш, у якому під час першого виклику немає влучань, і використовує п’ятихвилинний час життя кешу навіть за передплатою. Делегування надійно захищає основний контекст. Воно не завжди зменшує загальну кількість токенів.
Годинник кешу: працюйте без тривалих пауз
Кешування промптів робить повторне надсилання доступним: читання префікса тарифікується за ставкою 0.1x від базової ставки для вхідних даних, тоді як запис — за ставкою 1.25x, або 2x для часу життя в одну годину. Кожне використання оновлює запис без додаткової оплати, тому відлік часу починається з останнього використання. Ці множники показують структуру рахунка, але не його розмір. Поєднайте їх із фактичною вартістю мільйона токенів, щоб перевести повне контекстне вікно в суму в доларах.
Доступний час життя залежить від способу автентифікації. Тому загальне твердження «кеш завершується через п’ять хвилин» є неправильним.
- У підписці Claude Claude Code автоматично запитує час життя в одну годину.
- Після перевищення ліміту вашого плану, коли використовуються кредити на використання, ці запити тарифікуються окремо, тому час життя повертається до п’яти хвилин.
- Для API key або cloud provider час життя залишається на рівні п’яти хвилин.
ENABLE_PROMPT_CACHING_1H=1вмикає час життя в одну годину, аFORCE_PROMPT_CACHING_5M=1примусово повертає його до п’яти хвилин.
У будь-якому разі працюйте без тривалих пауз. Якщо простій перевищить час життя кешу, під час наступного запиту весь накопичений префікс буде записано повторно. Від’єднана сесія Claude Code у tmux не створює витрат під час простою, але за цей час кеш перестає бути актуальним.
Деякі дії видаляють кеш, навіть якщо ви продовжуєте працювати: перемикання моделей, зміна рівня effort, увімкнення fast mode, підключення або відключення MCP server, увімкнення або вимкнення plugin, заборона цілого tool, compacting і оновлення Claude Code. /model зазвичай стає несподіванкою, оскільки кожна модель має власний кеш. Тому наступний запит читає всю історію без cache hits, навіть якщо її вміст не змінився. Це повторне читання тарифікується за ставками цільової моделі. Отже, перемикання на Fable посеред сесії тарифікує всю накопичену історію за опублікованою ставкою для вхідних даних Fable 5.
Редагування файлів, редагування CLAUDE.md, виклик skills і commands, запуск /recap, перемотування назад і створення subagent зберігають кеш. Кеш діє лише в межах одного комп’ютера та одного каталогу, тому дві сесії в різних каталогах не використовують кеш одна одної. Ця область дії пов’язана з CLI, а не з вашим обліковим записом. Тому кеш не переноситься до desktop app Claude, яка в Linux є окремим beta-встановленням поряд із CLI.
Щоб перевірити, чи працює кешування, перегляньте current_usage. cache_creation_input_tokens було записано за ставкою запису в кеш, а cache_read_input_tokens обслуговано приблизно за десятою частиною стандартної ставки для вхідних даних. Високе співвідношення читань до створень є нормальною ознакою. Якщо вартість створення залишається високою від запиту до запиту, це означає, що щось у вашому префіксі постійно змінюється.
Чи вирішує більший контекстне вікно цю проблему?
Частково. Деякі сучасні моделі підтримують контекстне вікно на 1 million токенів, а compaction працює так само й за більшого ліміту. Економіка не змінюється, оскільки весь prompt повторно надсилається та оплачується під час кожного ходу. Більше вікно визначає, коли вам доведеться діяти; належна гігієна визначає вартість. Якщо проблема полягає у рахунку, а не в ліміті, який план Claude відповідає вашому способу роботи визначає, витрачатимете ви dollars чи ліміт плану.
Редагування контексту та компактизація в API — це різні речі
Якщо ви створюєте власного агента на Messages API, slash-команд немає, тому ви реалізуєте це самостійно. Передбачте цю роботу від самого початку, оскільки API не має безкоштовного рівня, крім невеликого кредиту під час реєстрації, а кожен хід із необрізаною історією тарифікується повністю. Вибір провайдера визначає ці розрахунки ще до обрізання історії, тому, якщо вибір іще не зроблено, порівняйте вартість однакового навантаження в обох API, а не лише заявлені тарифи за токен. Для цього є 2 серверні функції, але це різні функції.
Редагування контексту вибірково видаляє певний вміст з історії розмови в міру її зростання та замінює кожен видалений результат текстом-заповнювачем, щоб Claude знав, що саме було видалено. Це beta-функція: передайте anthropic-beta: context-management-2025-06-27 і налаштуйте стратегії в context_management.edits. clear_tool_uses_20250919 видаляє результати інструментів, а clear_thinking_20251015 керує блоками міркувань. Для trigger типовим значенням є 100,000 вхідних токенів, для keep — останні 3 використання інструментів, а для clear_tool_inputs — false, тому вхідні дані зберігаються, а видаляються лише результати.
Компактизація створює зведення та замінює ним повну історію розмови. Це також beta-функція: передайте anthropic-beta: compact-2026-01-12 і використайте тип редагування compact_20260112. Типовий тригер — {"type": "input_tokens", "value": 150000}, а значення має бути щонайменше 50,000.
У компактизації є одне правило передавання даних, через яке агенти непомітно перестають працювати. Відповідь починається з блоку вмісту compaction, що містить зведення, а після нього йде звичайний текстовий блок. У наступних запитах потрібно передавати цей блок назад, після чого API видаляє всі блоки вмісту, що стоять перед ним. На практиці це означає: додавайте весь response.content, а не лише текст.
У документації Anthropic серверна компактизація названа основною стратегією керування контекстом у довгих розмовах, а редагування контексту — засобом точнішого контролю над тим, що видаляється. Спочатку перевірте підтримку моделлю. Поточні моделі Opus, Sonnet і Fable підтримують компактизацію; claude-haiku-4-5 її не підтримує, а на сторінці про компактизацію наведено актуальний список. Жодна з цих beta-функцій не керує власним /compact у Claude Code. У його документації це описано як одноразовий запит на створення зведення, який надсилає клієнт.
FAQ
Чому сесія Claude Code стає повільнішою та дорожчою, що довше вона працює?
Тому що весь діалог повторно надсилається під час кожного ходу. Отже, однорядкове запитання в сесії, яка працює весь день, містить увесь діалог за цей день. Кешування промптів дає змогу зберігати низьку вартість, поки кеш актуальний: 0.1x базової ставки за вхідні дані під час читання. Якщо хід не знаходить відповідний запис у кеші, той самий префікс повторно записується за ставкою 1.25x. Виконайте /context, щоб побачити, що заповнює вікно контексту, і прочитайте за що ви платите в сесії Claude Code, щоб зрозуміти механізм.
У чому різниця між /clear і /compact у Claude Code?
/clear розпочинає новий діалог із порожнім контекстом. Він не надсилає запит, тому нічого не коштує. Це правильний вибір між не пов’язаними між собою завданнями. /compact зберігає той самий діалог і замінює історію підсумком. Тому це правильний вибір у межах одного тривалого завдання. Вкажіть фокус, як у /compact keep only the plan and the diff, оскільки саме інструкція визначає, що буде збережено.
Як побачити, що використовує вікно контексту Claude Code?
Виконайте /context або /context all, щоб отримати повну розбивку за елементами. Команда показує системний промпт, визначення інструментів, MCP servers, файли пам’яті та історію у вигляді кольорової таблиці. Також вона пропонує оптимізації для інструментів, які активно використовують контекст, і надмірного обсягу пам’яті. У платному плані /usage також розподіляє недавнє використання між окремими skills, subagents і MCP servers.
Чи варто використовувати вікно контексту на 1 million tokens замість compaction?
Більше вікно лише відтерміновує проблему, а не вирішує її. Кілька актуальних моделей, зокрема Opus 4.8 і Sonnet 5, підтримують вікно контексту на 1 million tokens. Compaction працює там так само. Під час кожного ходу повний промпт усе одно надсилається повторно й оплачується. Тому діалог на 400,000 tokens залишається дорогим незалежно від того, чи вміщується він у вікно.
У чому різниця між context editing і compaction у Claude API?
Context editing вибірково очищає старий вміст, переважно результати інструментів, і залишає на місці кожного з них текст-заповнювач. Так Claude розуміє, що цей вміст було видалено. Compaction створює підсумок і замінює ним повну історію. У документації Anthropic compaction названо основною стратегією для тривалих діалогів, а context editing — детальнішим варіантом. Обидві функції є beta-функціями з власними заголовками. Обидві також окремі від /compact у Claude Code.