Claude Code: работа с coding-агентом4. Контекст под контролем
Заполнение контекста в status line
Засчитывается, когда отвечены все вопросы квиза
/context хорош для разового замера, но вы не будете вызывать его после каждого промпта. А решение «пора очистить session» или «эту задачу отдам subagent-у» нужно принимать на ходу. Для этого цифра заполнения окна должна быть видна всегда.
Зачем это нужно
Документация Claude Code советует следить за заполнением контекста непрерывно — через свой status line. Пока окно почти пустое, агент работает в полную силу; по мере заполнения качество падает. Если вы видите цифру постоянно, вы замечаете момент, когда session пора закончить, раньше, чем агент начнёт путаться.
Из коробки status line нет: ключ statusLine по умолчанию не задан. Настроить его — пять минут.
Как это устроено
Status line — строка внизу интерфейса Claude Code. Её рисует ваша же команда: Claude Code запускает её, передаёт на stdin JSON с данными session и показывает то, что команда напечатала в stdout. Команда работает локально и не тратит API-токены.
Команда задаётся ключом statusLine в ~/.claude/settings.json: type равен "command", command — что запускать.
Для контекста в JSON есть объект context_window:
used_percentage— готовый процент заполнения окна;total_input_tokens— сколько токенов сейчас в окне по последнему ответу API;context_window_size— размер окна: 200000 по умолчанию или 1000000 у моделей с расширенным контекстом.
Скрипт запускается при старте session и снова — когда приходит новое сообщение ассистента и когда заканчивается /compact.
Настроить можно двумя путями. Первый — команда /statusline с описанием на обычном языке: Claude Code сам напишет скрипт в ~/.claude/ и обновит настройки. Второй — написать скрипт руками; так вы точно знаете, что в нём.
Практика
Самый быстрый путь — попросить Claude Code:
/statusline show context tokens and context percentage
Если хотите контролировать скрипт сами, сохраните его как ~/.claude/statusline.sh. Понадобится jq — парсер JSON для командной строки.
#!/bin/bash
# Claude Code sends session data as JSON on stdin
input=$(cat)
USED=$(echo "$input" | jq -r '.context_window.total_input_tokens // 0')
# "// 0" is a fallback: the percentage can be null early in a session
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
echo "$((USED / 1000))k tokens (${PCT}%)"
Сделайте его исполняемым (chmod +x ~/.claude/statusline.sh) и добавьте в ~/.claude/settings.json рядом с ключами из прошлого Bite:
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh"
}
}
Проверить скрипт можно и без Claude Code, подав ему JSON руками:
$ echo '{"context_window":{"total_input_tokens":21480,"used_percentage":10.7}}' | ~/.claude/statusline.sh
21k tokens (10%)
Запустите claude в Cadence и задайте пару вопросов. Обратите внимание, как цифра растёт после каждого ответа: каждый turn добавляет в окно ваш вопрос, ответ и всё, что агент прочитал.
Подводные камни
- Процент считается только по входным токенам.
used_percentageскладываетinput_tokens,cache_creation_input_tokensиcache_read_input_tokens, безoutput_tokens. Если считаете процент сами, используйте ту же формулу, иначе цифры разойдутся. - В начале session поля бывают
null. До первого ответа API процент может отсутствовать, поэтому в скрипте нужен запасной вариант// 0. - Строка иногда пропадает. Status line временно скрывается в меню помощи и при запросах разрешений — это не поломка.
Вывод: заполнение контекста должно быть у вас перед глазами всегда — тогда решение очистить session или отдать работу subagent-у вы принимаете вовремя.
Проверь себя
Вы настроили statusLine, но вместо процента видите null%. Что вероятнее всего не так?
used_percentage
бывает
null
, а в скрипте нет запасного значения
/compact
used_percentage
может быть
null
в начале session. Запасное значение вроде
// 0
в
jq
решает проблему.
Как Claude Code передаёт данные session вашей команде status line?
~/.claude/
Вы посчитали процент заполнения сами из input_tokens + output_tokens, и он не совпадает с used_percentage. Почему?
used_percentage
округляется до десятков
used_percentage
считается только по входным токенам, включая кэш, без
output_tokens
used_percentage
показывает лимит подписки, а не окно
used_percentage
—
input_tokens + cache_creation_input_tokens + cache_read_input_tokens
. Чтобы цифры совпали, считайте так же.
Источники
- Anthropic, Customize your status line
- Anthropic, All settings
- Anthropic, Best practices for Claude Code
- По мотивам AI Coding Crash Course, AI Hero
Текст подготовлен с помощью LLM и может содержать неточности.