Перейти к тексту

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-у вы принимаете вовремя.

Проверь себя

Источники

Текст подготовлен с помощью LLM и может содержать неточности.