Строка состояния — это настраиваемая панель в нижней части Claude Code, которая запускает любой скрипт оболочки, который вы настроите. Она получает данные сеанса в формате JSON через stdin и отображает всё, что выводит ваш скрипт, предоставляя вам постоянный, видимый с первого взгляда обзор использования контекста, затрат, статуса git или чего-либо ещё, что вы хотите отслеживать. Строки состояния полезны, когда вы:Documentation Index
Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
- Хотите отслеживать использование контекстного окна во время работы
- Нужно отслеживать затраты сеанса
- Работаете в нескольких сеансах и нужно их различать
- Хотите, чтобы ветка git и статус всегда были видны

Настройка строки состояния
Используйте команду/statusline для автоматического создания скрипта Claude Code, или вручную создайте скрипт и добавьте его в ваши настройки.
Использование команды /statusline
Команда/statusline принимает инструкции на естественном языке, описывающие то, что вы хотите отображать. Claude Code генерирует файл скрипта в ~/.claude/ и автоматически обновляет ваши настройки:
Ручная настройка строки состояния
Добавьте полеstatusLine в ваши пользовательские настройки (~/.claude/settings.json, где ~ — это ваш домашний каталог) или настройки проекта. Установите type на "command" и укажите command на путь скрипта или встроенную команду оболочки. Для полного пошагового руководства по созданию скрипта см. Построение строки состояния пошагово.
command запускается в оболочке, поэтому вы также можете использовать встроенные команды вместо файла скрипта. Этот пример использует jq для разбора входных данных JSON и отображения имени модели и процента контекста:
padding добавляет дополнительное горизонтальное расстояние (в символах) к содержимому строки состояния. По умолчанию 0. Это заполнение добавляется к встроенному расстоянию интерфейса, поэтому оно управляет относительным отступом, а не абсолютным расстоянием от края терминала.
Необязательное поле refreshInterval повторно запускает вашу команду каждые N секунд в дополнение к обновлениям, управляемым событиями. Минимум — 1. Установите это, когда ваша строка состояния отображает данные на основе времени, такие как часы, или когда фоновые подагенты изменяют состояние git, пока основной сеанс неактивен. Оставьте это не установленным, чтобы запускать только при событиях.
Необязательное поле hideVimModeIndicator подавляет встроенный текст -- INSERT -- под приглашением. Установите это на true, когда ваш скрипт отображает vim.mode самостоятельно, чтобы режим не отображался дважды.
Отключение строки состояния
Запустите/statusline и попросите её удалить или очистить вашу строку состояния (например, /statusline delete, /statusline clear, /statusline remove it). Вы также можете вручную удалить поле statusLine из вашего settings.json.
Построение строки состояния пошагово
Это пошаговое руководство показывает, что происходит под капотом, путём ручного создания строки состояния, которая отображает текущую модель, рабочий каталог и процент использования контекстного окна.Запуск
/statusline с описанием того, что вы хотите, настраивает всё это автоматически.
Создайте скрипт, который читает JSON и выводит результат
Claude Code отправляет данные JSON в ваш скрипт через stdin. Этот скрипт использует
jq, парсер JSON командной строки, который вам может потребоваться установить, для извлечения имени модели, каталога и процента контекста, а затем выводит отформатированную строку.Сохраните это в ~/.claude/statusline.sh (где ~ — это ваш домашний каталог, например /Users/username на macOS или /home/username на Linux):Добавьте в настройки
Скажите Claude Code запустить ваш скрипт как строку состояния. Добавьте эту конфигурацию в Ваша строка состояния появляется в нижней части интерфейса. Настройки перезагружаются автоматически, но изменения не появятся до вашего следующего взаимодействия с Claude Code.
~/.claude/settings.json, которая устанавливает type на "command" (означает «запустить эту команду оболочки») и указывает command на ваш скрипт:Как работают строки состояния
Claude Code запускает ваш скрипт и передаёт данные сеанса JSON в него через stdin. Ваш скрипт читает JSON, извлекает то, что ему нужно, и выводит текст в stdout. Claude Code отображает всё, что выводит ваш скрипт. Когда это обновляется Ваш скрипт запускается после каждого нового сообщения ассистента, после завершения/compact, когда изменяется режим разрешений или когда переключается режим vim. Обновления дебаунсятся на 300 мс, что означает, что быстрые изменения объединяются вместе и ваш скрипт запускается один раз, когда всё стабилизируется. Если новое обновление срабатывает, пока ваш скрипт всё ещё работает, выполнение в полёте отменяется. Если вы отредактируете свой скрипт, изменения не появятся до вашего следующего взаимодействия с Claude Code, которое срабатывает обновление.
Эти триггеры могут затихнуть, когда основной сеанс неактивен, например, пока координатор ждёт фоновых подагентов. Чтобы сохранить текущими сегменты на основе времени или из внешних источников во время периодов неактивности, установите refreshInterval для также повторного запуска команды на фиксированный таймер.
Что может выводить ваш скрипт
- Несколько строк: каждый оператор
echoилиprintотображается как отдельная строка. См. пример многострочности. - Цвета: используйте коды экранирования ANSI, такие как
\033[32mдля зелёного (терминал должен их поддерживать). См. пример статуса git. - Ссылки: используйте последовательности экранирования OSC 8 для создания кликабельного текста (Cmd+клик на macOS, Ctrl+клик на Windows/Linux). Требуется терминал, поддерживающий гиперссылки, такой как iTerm2, Kitty или WezTerm. См. пример кликабельных ссылок.
Строка состояния работает локально и не потребляет токены API. Она временно скрывается во время определённых взаимодействий с пользовательским интерфейсом, включая предложения автодополнения, меню справки и запросы разрешений.
Доступные данные
Claude Code отправляет следующие поля JSON в ваш скрипт через stdin:| Поле | Описание |
|---|---|
model.id, model.display_name | Текущий идентификатор модели и отображаемое имя |
cwd, workspace.current_dir | Текущий рабочий каталог. Оба поля содержат одно и то же значение; workspace.current_dir предпочтительнее для согласованности с workspace.project_dir. |
workspace.project_dir | Каталог, в котором был запущен Claude Code, который может отличаться от cwd, если рабочий каталог изменяется во время сеанса |
workspace.added_dirs | Дополнительные каталоги, добавленные через /add-dir или --add-dir. Пустой массив, если ничего не было добавлено |
workspace.git_worktree | Имя Git worktree, когда текущий каталог находится внутри связанного worktree, созданного с помощью git worktree add. Отсутствует в основном рабочем дереве. Заполняется для любого git worktree, в отличие от worktree.*, который применяется только к сеансам --worktree |
cost.total_cost_usd | Предполагаемая стоимость сеанса в USD, вычисляется на клиенте. Может отличаться от вашего фактического счёта |
cost.total_duration_ms | Общее реальное время с момента начала сеанса в миллисекундах |
cost.total_api_duration_ms | Общее время, потраченное на ожидание ответов API в миллисекундах |
cost.total_lines_added, cost.total_lines_removed | Строки кода, которые были изменены |
context_window.total_input_tokens, context_window.total_output_tokens | Количество токенов, находящихся в контекстном окне, из последнего ответа API. Входные данные включают чтение и запись кэша. До версии 2.1.132 это были совокупные итоги сеанса |
context_window.context_window_size | Максимальный размер контекстного окна в токенах. По умолчанию 200000 или 1000000 для моделей с расширенным контекстом. |
context_window.used_percentage | Предварительно рассчитанный процент использованного контекстного окна |
context_window.remaining_percentage | Предварительно рассчитанный процент оставшегося контекстного окна |
context_window.current_usage | Подсчёты токенов из последнего вызова API, описанные в полях контекстного окна |
exceeds_200k_tokens | Превышает ли общее количество токенов (входные, кэшированные и выходные токены в сумме) из последнего ответа API 200k. Это фиксированный порог независимо от фактического размера контекстного окна. |
effort.level | Текущий уровень рассуждений (low, medium, high, xhigh или max). Отражает текущее значение сеанса, включая изменения /effort во время сеанса. Отсутствует, когда текущая модель не поддерживает параметр effort |
thinking.enabled | Включено ли расширенное мышление для сеанса |
rate_limits.five_hour.used_percentage, rate_limits.seven_day.used_percentage | Процент лимита скорости за 5 часов или 7 дней, потреблённый от 0 до 100 |
rate_limits.five_hour.resets_at, rate_limits.seven_day.resets_at | Секунды эпохи Unix, когда окно лимита скорости за 5 часов или 7 дней сбрасывается |
session_id | Уникальный идентификатор сеанса |
session_name | Пользовательское имя сеанса, установленное с флагом --name или /rename. Отсутствует, если пользовательское имя не было установлено |
transcript_path | Путь к файлу стенограммы разговора |
version | Версия Claude Code |
output_style.name | Имя текущего стиля вывода |
vim.mode | Текущий режим vim (NORMAL, INSERT, VISUAL или VISUAL LINE), когда режим vim включен |
agent.name | Имя агента при запуске с флагом --agent или настроенными параметрами агента |
worktree.name | Имя активного worktree. Присутствует только во время сеансов --worktree |
worktree.path | Абсолютный путь к каталогу worktree |
worktree.branch | Имя ветки Git для worktree (например, "worktree-my-feature"). Отсутствует для worktrees на основе hooks |
worktree.original_cwd | Каталог, в котором находился Claude перед входом в worktree |
worktree.original_branch | Ветка Git, проверенная перед входом в worktree. Отсутствует для worktrees на основе hooks |
Полная схема JSON
Полная схема JSON
Ваша команда строки состояния получает эту структуру JSON через stdin:Поля, которые могут отсутствовать (не присутствуют в JSON):
session_name: появляется только когда пользовательское имя было установлено с--nameили/renameworkspace.git_worktree: появляется только когда текущий каталог находится внутри связанного git worktreeeffort: появляется только когда текущая модель поддерживает параметр reasoning effortvim: появляется только когда режим vim включенagent: появляется только при запуске с флагом--agentили настроенными параметрами агентаworktree: появляется только во время сеансов--worktree. Когда присутствует,branchиoriginal_branchтакже могут отсутствовать для worktrees на основе hooksrate_limits: появляется только для подписчиков Claude.ai (Pro/Max) после первого ответа API в сеансе. Каждое окно (five_hour,seven_day) может быть независимо отсутствующим. Используйтеjq -r '.rate_limits.five_hour.used_percentage // empty'для корректной обработки отсутствия.
null:context_window.current_usage:nullперед первым вызовом API в сеансе и снова после/compactдо следующего вызова API, который его переполнитcontext_window.used_percentage,context_window.remaining_percentage: могут бытьnullв начале сеанса
Поля контекстного окна
Объектcontext_window описывает живое контекстное окно из последнего ответа API. Начиная с версии 2.1.132, total_input_tokens и total_output_tokens отражают текущее использование контекста, а не совокупные итоги сеанса.
- Совокупные итоги (
total_input_tokens,total_output_tokens): токены, находящиеся в контекстном окне.total_input_tokens— это суммаinput_tokens,cache_creation_input_tokensиcache_read_input_tokens;total_output_tokens— это выходные токены из последнего ответа. Оба равны0перед первым ответом API. - Использование по компонентам (
current_usage): те же подсчёты токенов, разбитые по категориям. Используйте это, когда вам нужны попадания в кэш отдельно от свежего входа.
current_usage содержит:
input_tokens: входные токены в текущем контекстеoutput_tokens: выходные токены, которые были сгенерированыcache_creation_input_tokens: токены, записанные в кэшcache_read_input_tokens: токены, прочитанные из кэша
used_percentage рассчитывается только из входных токенов: input_tokens + cache_creation_input_tokens + cache_read_input_tokens. Оно не включает output_tokens.
Если вы рассчитываете процент контекста вручную из current_usage, используйте ту же формулу только для входных данных, чтобы соответствовать used_percentage.
Объект current_usage равен null перед первым вызовом API в сеансе и снова сразу после /compact до следующего вызова API, который его переполнит.
Примеры
Эти примеры показывают распространённые паттерны строк состояния. Чтобы использовать любой пример:- Сохраните скрипт в файл, например
~/.claude/statusline.sh(или.py/.js) - Сделайте его исполняемым:
chmod +x ~/.claude/statusline.sh - Добавьте путь в ваши настройки
jq для разбора JSON. Python и Node.js имеют встроенный разбор JSON.
Использование контекстного окна
Отобразите текущую модель и использование контекстного окна с визуальной полосой прогресса. Каждый скрипт читает JSON из stdin, извлекает полеused_percentage и строит 10-символьную полосу, где заполненные блоки (▓) представляют использование:

Статус git с цветами
Показывает ветку git с цветовыми индикаторами для подготовленных и изменённых файлов. Этот скрипт использует коды экранирования ANSI для цветов терминала:\033[32m — зелёный, \033[33m — жёлтый и \033[0m — сброс на значение по умолчанию.

Отслеживание затрат и продолжительности
Отслеживайте затраты API вашего сеанса и прошедшее время. Полеcost.total_cost_usd накапливает стоимость всех вызовов API в текущем сеансе. Поле cost.total_duration_ms измеряет общее прошедшее время с момента начала сеанса, а cost.total_api_duration_ms отслеживает только время, потраченное на ожидание ответов API.
Каждый скрипт форматирует стоимость как валюту и преобразует миллисекунды в минуты и секунды:

Отображение нескольких строк
Ваш скрипт может выводить несколько строк для создания более богатого отображения. Каждый операторecho создаёт отдельную строку в области состояния.

print или echo создаёт отдельную строку:
Кликабельные ссылки
Этот пример создаёт кликабельную ссылку на ваш репозиторий GitHub. Он читает URL удалённого репозитория, преобразует формат SSH в HTTPS с помощьюsed и оборачивает имя репозитория в коды экранирования OSC 8. Удерживайте Cmd (macOS) или Ctrl (Windows/Linux) и нажмите, чтобы открыть ссылку в браузере.

printf '%b', которая более надёжно интерпретирует экранирующие последовательности, чем echo -e в разных оболочках:
Использование лимита скорости
Отобразите использование лимита скорости подписки Claude.ai в строке состояния. Объектrate_limits содержит five_hour (5-часовое скользящее окно) и seven_day (еженедельное) окна. Каждое окно предоставляет used_percentage (0-100) и resets_at (секунды эпохи Unix, когда окно сбрасывается).
Это поле присутствует только для подписчиков Claude.ai (Pro/Max) после первого ответа API. Каждый скрипт корректно обрабатывает отсутствующее поле:
Кэширование дорогостоящих операций
Ваш скрипт строки состояния запускается часто во время активных сеансов. Команды, такие какgit status или git diff, могут быть медленными, особенно в больших репозиториях. Этот пример кэширует информацию git во временный файл и обновляет её только каждые 5 секунд.
Имя файла кэша должно быть стабильным во время вызовов строки состояния в рамках сеанса, но уникальным для разных сеансов, чтобы одновременные сеансы в разных репозиториях не читали состояние git друг друга. Идентификаторы на основе процесса, такие как $$, os.getpid() или process.pid, изменяются при каждом вызове и нарушают кэш. Вместо этого используйте session_id из входных данных JSON: он стабилен в течение жизни сеанса и уникален для каждого сеанса.
Каждый скрипт проверяет, отсутствует ли файл кэша или он старше 5 секунд, перед запуском команд git:
Конфигурация Windows
На Windows Claude Code запускает команды строки состояния через Git Bash, когда Git Bash установлен, или через PowerShell, когда Git Bash отсутствует. Чтобы запустить скрипт PowerShell как вашу строку состояния, вызовите его черезpowershell; это работает из любой оболочки:
Строки состояния подагентов
ПараметрsubagentStatusLine отображает пользовательское тело строки для каждого подагента, показанного на панели агентов ниже приглашения. Используйте его для замены строки по умолчанию name · description · token count на ваше собственное форматирование.
columns (используемая ширина строки) и массив tasks, где каждая задача имеет id, name, type, status, description, label, startTime, tokenCount, tokenSamples и cwd.
Напишите одну строку JSON в stdout для каждой строки, которую вы хотите переопределить, в форме {"id": "<task id>", "content": "<row body>"}. Строка content отображается как есть, включая цвета ANSI и гиперссылки OSC 8. Пропустите id задачи, чтобы сохранить отображение по умолчанию для этой строки; выведите пустую строку content, чтобы скрыть её.
Те же ворота доверия и disableAllHooks, которые применяются к statusLine, применяются здесь. Плагины могут поставлять subagentStatusLine по умолчанию в своём settings.json.
Советы
- Тестирование с макетными входными данными:
echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/home/user/project"},"context_window":{"used_percentage":25},"session_id":"test-session-abc"}' | ./statusline.sh - Сохраняйте вывод коротким: строка состояния имеет ограниченную ширину, поэтому длинный вывод может быть обрезан или неправильно обёрнут
- Кэшируйте медленные операции: ваш скрипт запускается часто во время активных сеансов, поэтому команды, такие как
git status, могут вызвать задержку. См. пример кэширования для того, как это обработать.
Устранение неполадок
Строка состояния не отображается- Убедитесь, что ваш скрипт исполняемый:
chmod +x ~/.claude/statusline.sh - Проверьте, что ваш скрипт выводит в stdout, а не stderr
- Запустите ваш скрипт вручную, чтобы убедиться, что он выводит результат
- Если
disableAllHooksустановлен наtrueв ваших настройках, строка состояния также отключена. Удалите эту настройку или установите её наfalse, чтобы повторно включить. - Запустите
claude --debug, чтобы записать код выхода и stderr из первого вызова строки состояния в сеансе - Попросите Claude прочитать ваш файл настроек и выполнить команду
statusLineнапрямую, чтобы выявить ошибки
-- или пустые значения
- Поля могут быть
nullперед завершением первого ответа API - Обрабатывайте нулевые значения в вашем скрипте с резервными значениями, такими как
// 0в jq - Перезагрузите Claude Code, если значения остаются пустыми после нескольких сообщений
- Используйте
used_percentageдля простейшего точного состояния контекста - Процент контекста может отличаться от вывода
/contextиз-за времени расчёта каждого
- Убедитесь, что ваш терминал поддерживает гиперссылки OSC 8 (iTerm2, Kitty, WezTerm)
- Terminal.app не поддерживает кликабельные ссылки
-
Если текст ссылки отображается, но не кликабелен, Claude Code может не обнаружить поддержку гиперссылок в вашем терминале. Это часто влияет на Windows Terminal и другие эмуляторы, не входящие в список автоматического обнаружения. Установите переменную окружения
FORCE_HYPERLINKдля переопределения обнаружения перед запуском Claude Code:В PowerShell сначала установите переменную в текущем сеансе: - Сеансы SSH и tmux могут удалять последовательности OSC в зависимости от конфигурации
-
Если последовательности экранирования отображаются как буквальный текст, например
\e]8;;, используйтеprintf '%b'вместоecho -eдля более надёжной обработки экранирования
- Сложные последовательности экранирования (цвета ANSI, ссылки OSC 8) могут иногда вызывать искажённый вывод, если они перекрываются с другими обновлениями пользовательского интерфейса
- Если вы видите повреждённый текст, попробуйте упростить ваш скрипт до простого текстового вывода
- Многострочные строки состояния с кодами экранирования более подвержены проблемам отображения, чем однострочный простой текст
- Скрипты, которые выходят с ненулевыми кодами или не выводят результат, вызывают пустую строку состояния
- Медленные скрипты блокируют обновление строки состояния до их завершения. Держите скрипты быстрыми, чтобы избежать устаревшего вывода.
- Если новое обновление срабатывает, пока медленный скрипт работает, выполнение скрипта отменяется
- Протестируйте ваш скрипт независимо с макетными входными данными перед его настройкой
- Команда строки состояния запускается только если вы приняли диалог доверия рабочей области для текущего каталога. Поскольку
statusLineвыполняет команду оболочки, она требует того же принятия доверия, что и hooks и другие параметры, выполняющие оболочку. - Если доверие не принято, вы увидите уведомление
statusline skipped · restart to fixвместо вывода вашей строки состояния. Перезагрузите Claude Code и примите запрос доверия, чтобы включить его.
- Системные уведомления, такие как ошибки MCP сервера и автоматические обновления, отображаются на правой стороне той же строки, что и ваша строка состояния. Временные уведомления, такие как предупреждение о низком контексте, также циклируют через эту область.
- Включение подробного режима добавляет счётчик токенов в эту область
- На узких терминалах эти уведомления могут обрезать вывод вашей строки состояния