TOOLING · 2026-05-25 · ~6 мин
Мой statusline для Claude Code — практически идеален
3 месяца допиливал. Теперь это одна строка внизу терминала, которая показывает всё, что обычно держишь в голове или проверяешь руками
3 месяца допиливания
На протяжении последних 3 месяцев активной работы с Claude Code я постоянно дорабатывал свой statusline. И вот, считаю, что он практически идеален.
Это одна строка внизу терминала, которая показывает всё, что обычно приходится держать в голове или проверять руками. И многое из того, что интерфейсный Claude Code не показывает.
Выглядит так:
Op 4.7 (1m) │ claude-…tusline (main) │ 3M 1? ↑2 push ⚠ md drift │ ██░░░ 480k/1M │ cache 87% ↓75k +360 1h:42m │ 5h:35%(2h15m) │ 7d:42%(4d)
Исходник лежит на GitHub: ilia-pluzhnikov/claude-code-statusline. Один файл, ~370 строк Node.js, без зависимостей и без сборки. macOS, Linux, Windows.
Кому полезно
Если вы реально работаете в Claude Code, ведёте проекты в Git и хотите меньше думать о техническом состоянии сессии, а больше — о самой задаче.
Из чего состоит
-
✔️ Модель
Сразу видно, на чём работаешь: Opus / Sonnet / Haiku, версия и размер контекста.
-
✔️ Папка и ветка Git
Показывает текущий проект и branch. Умеет делать truncate длинных названий проекта.
-
✔️ Состояние репозитория
Modified / added / deleted / renamed / untracked / conflicts — всё в одной компактной строке. Конфликты подсвечиваются красным, потому что это единственное, что реально блокирует коммит.
Визуализируется через стандартные гитовские сокращения:
3M— 3 files modified1A— 1 added1D— 1 deleted1R— 1 renamed2?— 2 untracked1!— 1 conflict
-
✔️ Ahead / behind относительно origin
Надо ли пушить или подтянуть изменения.
-
✔️ Drift между CLAUDE.md / AGENTS.md / GEMINI.md
Я использую и Claude Code, и Codex, и Gemini — у них разные главные контекст-файлы. Мой statusline показывает, когда они разъехались. Чтобы все имели одинаковый контекст.
-
✔️ Контекстное окно
Це база.
Показывает, сколько контекста уже занято: бар + токены типа
480k/1M. Есть ранние предупреждения, когда сессия начинает подходить к зоне, где Claude скоро захочетcompact. -
✔️ Prompt cache
Видно cache hit ratio, сколько токенов читается из кэша, сколько записывается, и когда TTL протухнет. Помогает лучше понимать, сколько стоит каждый запрос и была ли инвалидация кэша.
-
✔️ Rate limits 5h и 7d
Показывает, сколько лимитов осталось и время до reset.
Формат сделал плотным, чтобы всё помещалось в одну строку. Если надо — можно сделать мультистрочный statusline.
Цвета показывают уровень важности: норм / внимание / опасно.
Плюс внутри несколько доп. хуков.
Что значат цвета и пороги
Контекстный бар и rate-лимиты используют одну цветовую шкалу. Подсмотрел у себя же в Figma — те же сигнальные градации, что и в интерфейсах.
- < 50% — pink, всё спокойно
- 50–65% — yellow, можно начинать поглядывать
- 65–80% — orange, скоро упрёшься
- ≥ 80% — red, и на контекстном баре префикс 💀
У контекстного бара есть отдельное правило: как только сожжено больше 250k токенов, pink принудительно повышается до yellow. 250k — это практический порог «уже много»: качество модели начинает деградировать, и включается длинноконтекстный тариф Anthropic. Сессия с 1M-контекстом на 250k/1M — это 25%, но уже не уютно.
Установка
- Склонировать или скачать репозиторий
- Положить
statusline.jsкуда удобно. Естественное место —~/.claude/hooks/statusline.js - Прописать в
~/.claude/settings.json:
{
"statusLine": {
"type": "command",
"command": "node \"/absolute/path/to/statusline.js\"",
"refreshInterval": 60
}
}
refreshInterval: 60 нужен для отсчёта TTL кэша — без него значения замирают в idle. Нужен Claude Code ≥ 2.1.97.
Перезапустить Claude Code. На этом всё.
Как это остаётся быстрым
Statusline дёргается часто, поэтому он не должен ничего тормозить. Что я для этого делаю:
- Все git-проверки локальные. Никакого
git fetch, никакой сети. Hard timeout 1 секунда на каждую git-команду — даже если git зависнет, statusline отдаст какую-то строку и двинется дальше - Bridge-файл в
os.tmpdir(). Значение контекста пишется вclaude-ctx-{session_id}.json, чтобы другие хуки (например,PostToolUse-монитор контекста) читали то же число без повторного парсинга stdin - Stdin-timeout 3 секунды. Если Claude Code так и не прислал данные — скрипт чисто выходит вместо того, чтобы зависнуть и заблокировать терминал
- Silent on error. Любая ошибка → пустой stdout. Сломанный statusline никогда не блокирует сессию
На Windows ещё используется windowsHide: true для каждого git-сабпроцесса — иначе во время git-поллинга мигали бы окна консоли.
Доп. хуки внутри
В папке optional-hooks/ лежат три маленьких хука. Никто из них не нужен для самой статусной строки, но вместе они закрывают всю историю с MD-файлами и git'ом.
-
md-sync-check.jsSessionStart-хук. Предупреждает Claude, что MD-трио разъехалось, чтобы агент знал об этом с начала сессии. -
sync-md.jsPostToolUse-хук. ПриEditилиWriteпоCLAUDE.mdавтоматически зеркалит контент вAGENTS.mdиGEMINI.md. Один файл правишь — два других перегенерируются сами. -
github-sync-check.jsSessionStart-хук. Предупреждает про незакоммиченные файлы и сообщает, когда ветка разошлась сorigin. Фоновыйgit fetch, чтобы следующая сессия стартовала со свежими данными.
Кастомизация
Скрипт — 370 строк Node.js без зависимостей. Открываешь и правишь. Самое частое, что хочется поменять:
- Спрятать сегмент кэша — удалить блок
Prompt cache state. Полезно, если в этом терминале не запускаешь Claude Code или не хочешь видеть счётчики токенов - Сменить цветовые пороги — найти
< 50/< 65/< 80и поправить под себя - Спрятать имя модели — убрать
`\x1b[2m${model}\x1b[0m`из массиваsegmentsв самом низу - Поменять разделитель — заменить
' │ '(символ│) на что-то другое
Ссылки
-
claude-code-statusline на GitHub
Исходник, README, лицензия MIT. PR'ы и форки приветствуются
-
optional-hooks/
Три опциональных хука:
md-sync-check.js,sync-md.js,github-sync-check.js -
Claude Code
CLI-агент от Anthropic, для которого всё это и писалось. Поддержка statusline — с версии 2.1.97
Хочешь поглубже разобраться в Claude Code, контексте и агентах? Раз в месяц я беру 10 человек на поток и провожу через 6 уровней — от установки до Context Engineering.
Записаться в поток