Година роботи над завданням, і агент раптом пропонує варіант, який ви пів години тому відхилили (так, той самий). Або переказує файл, який ви вже поправили руками. Схоже на забудькуватість, а насправді так влаштована робота: агент дивиться у вікно обмеженого розміру і бачить там не проєкт цілком, а тільки те, що в це вікно потрапило.

Розберемо, що займає вікно, як зазирнути в нього командою /context і що робити, коли вільного місця майже не лишилося.

Контекст і його межа

Контекст - відомості, доступні моделі для чергового кроку: ваші повідомлення, відповіді агента, прочитаний код, вивід команд, інструкції проєкту. Контекстне вікно задає межу того, скільки таких відомостей вміщається одночасно. Це не вільне місце на диску і не оперативна пам'ять вашого комп'ютера.

Звідси різниця, через яку найчастіше й виникає плутанина. Три речі, які в голові легко зливаються в одну:

  • файли на диску - вміст проєкту, який можна прочитати інструментами;
  • збережена історія сесії - запис розмови, вона лежить на диску і відкривається заново;
  • поточний контекст - те, що доступне моделі саме зараз.

Набори пов'язані, але не збігаються. Файл може лежати в теці і жодного разу не потрапити в розмову. А в розмові може лишитися версія файлу, якій уже пів години. Тому фраза "ми ж це обговорювали" сама по собі ще не означає, що перед агентом актуальні відомості.

  • Файл проєкту
  • Читання інструментом
  • Відомості для відповіді

Між тим, що файл існує, і тим, що агент про нього знає, стоїть крок читання. Claude Code робить цей крок сам: шукає у проєкті, відкриває потрібне, переходить до пов'язаного коду. Перелічувати кожен шлях заздалегідь не потрібно. але поки крок не зроблено, для розмови файлу немає.

Обсяг усього цього міряють у токенах - шматочках тексту, на які модель розбиває і ваш запит, і прочитаний код. Токен може виявитися цілим словом, а може його частиною, тож порахувати токени за кількістю слів не вийде.

Що займає вікно до першого запитання

Вікно зайняте ще до того, як ви надрукували перше слово. Команда /context показує, чим саме:

Вивід команди /context: зайнято 4k із 200k токенів, розподіл за категоріями System prompt, Memory files, Skills, Messages і рядок Free space.

Сесія щойно відкрита, а 4k із 200k токенів уже зайняті, і це чиста службова частина: System prompt - інструкції самого агента, Memory files - підхоплені CLAUDE.md і правила проєкту, Skills - перелік доступних агенту вмінь. Рядок Messages, тобто власне листування, поки порожній.

А ось який це має вигляд через годину роботи, та ще й з парою підключених MCP-серверів:

/context

  System prompt     3.2k   ( 2%)   службові інструкції
  System tools     12.1k   ( 6%)   описи вбудованих інструментів
  MCP tools        21.4k   (11%)   підключені зовнішні сервери
  Memory files      1.8k   ( 1%)   CLAUDE.md, rules, auto memory
  Messages         45.2k   (22%)   ваш діалог, файли, логи
  Free space      116.3k   (58%)

Це схема, а не вивід конкретної версії: набір рядків і їхнє розташування на екрані залежать від версії Claude Code і від того, що підключено в проєкті, а розмір вікна - від моделі. Але картина завжди приблизно одна. Що з неї варто винести:

  • службовий мінімум - інструкції агента й описи його вбудованих інструментів - є завжди, на нього ви не впливаєте;
  • кожен підключений MCP-сервер додає у вікно хоча б перелік своїх інструментів, навіть якщо ви ним жодного разу не скористалися. Підключати "хай буде" - означає платити за це в кожній сесії;
  • роздутий CLAUDE.md теж оплачується заново під час кожного запуску. Ще один аргумент тримати його коротким;
  • під час роботи росте, власне, один рядок - повідомлення. За ним і варто стежити.
Перевірте на своєму проєкті

Якщо Claude Code під рукою: запустіть /context, попросіть прочитати пару файлів і запустіть ще раз. Рядок повідомлень виросте на очах, і стане видно, скільки коштує одне читання.

Що накопичується під час роботи

Далі вікно наповнюєте ви - і не тільки словами. У контекст потрапляє все, що агент прочитав і отримав на ваше прохання:

ДжерелоЩо саме займає місце
Листуванняваші повідомлення, відповіді агента, зокрема й відкинуті варіанти
Прочитані файливміст цілком або потрібними фрагментами
Результати інструментіввивід команди, знайдені рядки, спостереження з браузера
Матеріали skills і MCPінструкція skill, який пішов у роботу, опис викликаного інструмента

Запит і отриманий контекст - дві дуже різні величини. Прохання "покажи весь журнал" складається з трьох слів, а його результат займає тисячі рядків. Саме тому великий вивід буває шкідливіший за довге запитання.

Звідси звичка подавати джерела точково. Значок @ перед шляхом додає файл у розмову, а під час набору шляху працюють підказки: Прочитай @src/reward-flow.js і поясни, де визначається кількість очок. І теку через @ теж не варто сприймати як завантаження вмісту всіх її файлів: посилання на теку дає список файлів, не більше. Вибирайте джерело залежно від запитання. Саме таку різницю між посиланням на файл і теку описано в документації з передавання файлів.

І ще дрібниця. Якщо після цього ви вручну замінили десять на двадцять, попередня відповідь не оновиться сама. Попросіть прочитати поточний вміст перед новим виводом, і все. Посилання на колись прочитаний файл не робить старий текст у розмові живою копією файлу на диску.

Коли місце закінчується

Вікно не гумове, але й сесія не обривається на півслові. Коли вікно заповнюється, Claude Code виконує стиснення: замінює докладну історію коротким викладом і звільняє місце. Відбувається це автоматично, а момент залежить від моделі й налаштувань.

Запустити стиснення можна і самому, командою /compact. Сенс ручного запуску в тому, що ви вибираєте момент - напр. перед новим великим шматком роботи - і можете сказати, що важливо зберегти:

/compact Збережи мету завдання і межі правки,
відкинутий варіант з окремим обробником
і наступний крок: перевірити очищення поля пошуку.

Головне про стиснення: у вікні лишається переказ, а не розмова. Деталь, яка не потрапила в цей виклад, з вікна пішла, і сперечатися "ти ж двадцять хвилин тому погодився" після стиснення безглуздо - потрібний факт простіше підняти заново з файлу. Інструкції проєкту при цьому не губляться: кореневий CLAUDE.md завантажується знову.

Друга команда, /clear, не стискає нічого. Вона просто відкриває нову розмову: попередня лишається збереженою і доступною через /resume, файли проєкту не змінюються, інструкції проєкту завантажуються як зазвичай.

КомандаЩо робитьКоли вибирати
/contextпоказує, чим зайняте вікнонезрозуміло, куди пішло місце
/compactзгортає історію в короткий викладзавдання те саме, а історії накопичилося багато
/clearпочинає розмову зановозавдання змінилося

Правило вибору просте: завдання те саме - стискаємо, завдання інше - відкриваємо нову розмову. Очищати після кожної команди не потрібно, поки ви розбираєте одну проблему, її спостереження й уточнення працюють на вас. А от перед новою темою корисно записати потрібний висновок у пару рядків: "нагорода задається в src/reward-config.js, нарахування - у src/reward-flow.js". Це підказка, куди повернутися, без переписування всієї розмови.

Як витрачати вікно ощадливіше

Жодна з трьох команд не знадобиться так часто, якщо вікно не забивається зайвим із самого початку. Кілька звичок, які дають найбільше:

  • Питайте конкретно. На розмитий запит агент відповідає розвідкою: читає зайві файли, перебирає варіанти. Названий файл і назване очікування заощаджують і місце, і час.
  • Не вивантажуйте все підряд. Для запитання про падіння тесту потрібні рядки навколо помилки, а не журнал цілком.
  • Тримайте інструкції проєкту короткими. CLAUDE.md завантажується в кожній сесії. Довідкові полотна краще живуть в окремих файлах, які читають за потреби.
  • Вимикайте непотрібні MCP-сервери. Сервер, підключений "про всяк випадок", займає місце в кожному запуску, а користі приносить нуль.
  • Велике дослідження доручайте субагенту. Він працює у своєму вікні і повертає підсумок, а десятки прочитаних файлів лишаються в нього.

Що тримати в голові

Контекст - це те, що ви поклали на стіл, а не те, що "є в проєкті". Файл на диску, запис в історії і відомості в поточному вікні - три різні речі, і плутанина між ними (сам іноді плутаю) пояснює більшість дивних відповідей.

Далі все зводиться до трьох дій: подивитися заповнення через /context, дати потрібне джерело через @ і вчасно вирішити, стискати розмову чи починати нову. Вибирайте за ситуацією - стиснення не замінить читання потрібного файлу, а переданий файл не перевірить міркування агента за вас.