Skip to Content
Руководство для пользователейВозможностиСтрока состояния

Строка состояния

Отображение пользовательской информации в нижнем колонтитуле.

Строка состояния отображает информацию с учетом контекста сессии — имя модели, использование токенов, ветку git и т. д. — в левой части нижнего колонтитула. Существует два режима конфигурации:

  • Режим пресетов — выбор из встроенных элементов данных через интерактивный диалог или JSON-конфигурацию. Скрипты не требуются.
  • Режим команд — запуск shell-команды, которая получает структурированный JSON-контекст через stdin. Полная гибкость для кастомного форматирования.
Однострочный статус (режим подтверждения по умолчанию — 1 строка): ┌─────────────────────────────────────────────────────────────────┐ │ user@host ~/project (main) ctx:34% docker | Debug | 67% │ ← строка состояния └─────────────────────────────────────────────────────────────────┘ Многострочный статус (до 2 строк — 2 ряда): ┌─────────────────────────────────────────────────────────────────┐ │ user@host ~/project (main) ctx:34% docker | Debug | 67% │ ← строка состояния 1 │ ████████░░░░░░░░░░ 34% context │ ← строка состояния 2 └─────────────────────────────────────────────────────────────────┘ Многострочный статус + режим не по умолчанию (максимум 3 ряда): ┌─────────────────────────────────────────────────────────────────┐ │ user@host ~/project (main) ctx:34% docker | Debug | 67% │ ← строка состояния 1 │ ████████░░░░░░░░░░ 34% context │ ← строка состояния 2 │ auto-accept edits (shift + tab to cycle) │ ← индикатор режима └─────────────────────────────────────────────────────────────────┘

При настройке строка состояния заменяет стандартную подсказку ”? for shortcuts”. Высокоприоритетные сообщения (подсказки выхода по Ctrl+C/D, Esc, режим vim INSERT) временно перекрывают строку состояния. Текст строки состояния обрезается, чтобы поместиться в доступную ширину.

Быстрая настройка

Самый простой способ настроить строку состояния — использовать команду /statusline. Она открывает интерактивный диалог, где можно выбрать элементы пресета, переключить цвета темы и увидеть превью в реальном времени:

/statusline

Откроется конфигуратор режима пресетов. Используйте стрелки для навигации, пробел для переключения элементов и Enter для подтверждения. Ваш выбор автоматически сохранится в настройках.

Вы также можете дать /statusline конкретные инструкции, чтобы она сгенерировала конфигурацию для режима команд:

/statusline show model name and context usage percentage

Режим пресетов

Режим пресетов предоставляет набор встроенных элементов данных, которые можно выбирать и комбинировать — без shell-команд, без jq, без скриптов. Элементы отображаются как item1 | item2 | item3 в одну строку.

Конфигурация

Добавьте объект statusLine в ключ ui в файле ~/.qwen/settings.json:

{ "ui": { "statusLine": { "type": "preset", "items": [ "model-with-reasoning", "git-branch", "context-remaining", "current-dir", "context-used" ], "useThemeColors": true } } }
FieldTypeRequiredDescription
type"preset"ДаДолжно быть "preset"
itemsstring[]ДаУпорядоченный список ID элементов пресета для отображения (см. таблицу ниже). Элементы объединяются с помощью | в качестве разделителя.
useThemeColorsbooleanНетПрименять цвет активной /theme к тексту строки состояния. По умолчанию true.
hideContextIndicatorbooleanНетСкрыть встроенный индикатор использования контекста в правой части нижнего колонтитула. По умолчанию false.

Доступные элементы пресетов

Item IDDefaultDescription
model-with-reasoningДаТекущее имя модели с уровнем рассуждений (например, qwen-3-235b high)
modelТекущее имя модели без уровня рассуждений
git-branchДаИмя текущей ветки Git (скрывается, если не в git-репозитории)
context-remainingДаПроцент оставшегося окна контекста (например, Context 65.7% left)
total-input-tokensСуммарное количество входных токенов, использованных в сессии (например, 30.0k total in)
total-output-tokensСуммарное количество выходных токенов, использованных в сессии (например, 5.0k total out)
current-dirДаТекущая рабочая директория
project-nameИмя проекта (basename рабочей директории)
pull-request-numberНомер открытого PR для текущей ветки (требуется gh CLI)
branch-changesСтатистика изменений файлов в сессии (например, +120 -30)
context-usedДаПроцент использованного окна контекста (например, Context 34.3% used)
run-stateКомпактное состояние сессии (Ready, Working или Confirm)
qwen-versionВерсия Qwen Code (например, v0.14.1)
context-window-sizeОбщий размер окна контекста (например, 131.1k window)
used-tokensТекущее количество токенов промпта (например, 45.0k used)
session-idИдентификатор текущей сессии

Элементы, помеченные как Да (Default), предварительно выбраны при первом открытии диалога /statusline.

total-input-tokens и total-output-tokens — это суммарные показатели сессии. Они накапливают использование токенов между итерациями, поэтому входные токены могут быстро расти, так как каждый новый запрос к модели снова включает текущий контекст разговора. Используйте used-tokens, если вам нужен размер текущего промпта, а не суммарные затраты сессии.

Пример вывода

С элементами по умолчанию строка состояния выглядит так:

qwen-3-235b high | main | Context 65.7% left | /home/user/project | Context 34.3% used

Настройка через диалог

Запуск /statusline открывает интерактивный диалог множественного выбора:

┌ Настройка строки состояния ───────────────────────────────────┐ │ Выберите элементы для отображения в строке состояния. │ │ │ │ Введите текст для поиска │ │ > │ │ │ │ [x] Использовать цвета темы Применить цвета из активной /theme│ │ ─────────────────────── │ │ [x] model-with-reasoning Текущее имя модели с уровнем расс│ │ [ ] model-only Текущее имя модели без уровня рас│ │ [x] git-branch Текущая ветка Git, если доступна │ │ [x] context-remaining Процент оставшегося контекста │ │ ... │ │ │ │ Превью │ │ qwen-3-235b high | main | Context 65.7% left │ │ │ │ Стрелки вверх/вниз для навигации, пробел для выбора, Enter для│ └───────────────────────────────────────────────────────────────┘
  • Введите текст для фильтрации элементов по имени или описанию
  • Превью в реальном времени обновляется при переключении элементов
  • Нажмите Enter для сохранения конфигурации

Режим команд

В режиме команд выполняется shell-команда, стандартный вывод которой отображается в строке состояния. Команда получает структурированный JSON-контекст через stdin для вывода с учетом контекста сессии.

Необходимые условия

  • Рекомендуется jq для парсинга JSON-ввода (установка через brew install jq, apt install jq и т. д.)
  • Простые команды, не требующие данных JSON (например, git branch --show-current), работают без jq

Конфигурация

Добавьте объект statusLine в ключ ui в файле ~/.qwen/settings.json:

{ "ui": { "statusLine": { "type": "command", "command": "input=$(cat); model=$(echo \"$input\" | jq -r '.model.display_name'); pct=$(echo \"$input\" | jq -r '.context_window.used_percentage'); echo \"$model ctx:${pct}%\"" } } }
FieldTypeRequiredDescription
type"command"ДаДолжно быть "command"
commandstringДаShell-команда для выполнения. Получает JSON через stdin, stdout отображается (до 2 строк).
refreshIntervalnumberНетПовторно запускать команду каждые N секунд (минимум 1). Полезно для данных, которые меняются без события состояния Агента (часы, квоты, аптайм).
respectUserColorsbooleanНетСохранять ANSI color-коды в выводе команды вместо применения приглушенного стиля нижнего колонтитула. По умолчанию false.
hideContextIndicatorbooleanНетСкрыть встроенный индикатор использования контекста в правой части нижнего колонтитула. По умолчанию false.

JSON-ввод

Команда получает JSON-объект через stdin со следующими полями:

{ "session_id": "abc-123", "version": "0.14.1", "model": { "display_name": "qwen-3-235b" }, "context_window": { "context_window_size": 131072, "used_percentage": 34.3, "remaining_percentage": 65.7, "current_usage": 45000, "total_input_tokens": 30000, "total_output_tokens": 5000 }, "workspace": { "current_dir": "/home/user/project" }, "git": { "branch": "main" }, "worktree": { "name": "fix-auth", "path": "/home/user/project/.qwen/worktrees/fix-auth", "branch": "fix-auth", "original_cwd": "/home/user/project", "original_branch": "main" }, "metrics": { "models": { "qwen-3-235b": { "api": { "total_requests": 10, "total_errors": 0, "total_latency_ms": 5000 }, "tokens": { "prompt": 30000, "completion": 5000, "total": 35000, "cached": 10000, "thoughts": 2000 } } }, "files": { "total_lines_added": 120, "total_lines_removed": 30 } }, "vim": { "mode": "INSERT" } }
FieldTypeDescription
session_idstringУникальный идентификатор сессии
versionstringВерсия Qwen Code
model.display_namestringТекущее имя модели
context_window.context_window_sizenumberОбщий размер окна контекста в токенах
context_window.used_percentagenumberИспользование окна контекста в процентах (0–100)
context_window.remaining_percentagenumberОставшееся окно контекста в процентах (0–100)
context_window.current_usagenumberКоличество токенов из последнего вызова API (текущий размер контекста)
context_window.total_input_tokensnumberОбщее количество входных токенов, потребленных в этой сессии
context_window.total_output_tokensnumberОбщее количество выходных токенов, потребленных в этой сессии
workspace.current_dirstringТекущая рабочая директория
gitobject | absentПрисутствует только внутри git-репозитория.
git.branchstringИмя текущей ветки
worktreeobject | absentПрисутствует только при нахождении внутри активного worktree (созданного с помощью enter_worktree).
worktree.namestringSlug-имя worktree
worktree.pathstringАбсолютный путь к директории worktree
worktree.branchstringВетка, checkout-нутая в worktree
worktree.original_cwdstringРабочая директория до входа в worktree
worktree.original_branchstringВетка, которая была активна до входа в worktree
metrics.models.<id>.apiobjectСтатистика API для каждой модели: total_requests, total_errors, total_latency_ms
metrics.models.<id>.tokensobjectИспользование токенов для каждой модели: prompt, completion, total, cached, thoughts
metrics.filesobjectСтатистика изменений файлов: total_lines_added, total_lines_removed
vimobject | absentПрисутствует только при включенном режиме vim. Содержит mode ("INSERT" или "NORMAL").

Важно: stdin можно прочитать только один раз. Всегда сначала сохраняйте его в переменную: input=$(cat).

Примеры

Модель и использование токенов

{ "ui": { "statusLine": { "type": "command", "command": "input=$(cat); model=$(echo \"$input\" | jq -r '.model.display_name'); pct=$(echo \"$input\" | jq -r '.context_window.used_percentage'); echo \"$model ctx:${pct}%\"" } } }

Вывод: qwen-3-235b ctx:34%

Ветка Git + директория

{ "ui": { "statusLine": { "type": "command", "command": "input=$(cat); branch=$(echo \"$input\" | jq -r '.git.branch // empty'); dir=$(basename \"$(echo \"$input\" | jq -r '.workspace.current_dir')\"); echo \"$dir${branch:+ ($branch)}\"" } } }

Вывод: my-project (main)

Примечание: Поле git.branch предоставляется напрямую в JSON-вводе — нет необходимости вызывать git через shell.

Статистика изменений файлов

{ "ui": { "statusLine": { "type": "command", "command": "input=$(cat); added=$(echo \"$input\" | jq -r '.metrics.files.total_lines_added'); removed=$(echo \"$input\" | jq -r '.metrics.files.total_lines_removed'); echo \"+$added/-$removed lines\"" } } }

Вывод: +120/-30 lines

Живые часы и ветка Git

Используйте refreshInterval, когда строка состояния отображает данные, которые меняются без события Агента (например, часы, аптайм или счетчики rate-limit):

{ "ui": { "statusLine": { "type": "command", "command": "input=$(cat); branch=$(echo \"$input\" | jq -r '.git.branch // \"no-git\"'); echo \"$(date +%H:%M:%S) ($branch)\"", "refreshInterval": 1 } } }

Вывод (обновляется каждую секунду): 14:32:07 (main)

Файл скрипта для сложных команд

Для более длинных команд сохраните файл скрипта по пути ~/.qwen/statusline-command.sh:

#!/bin/bash input=$(cat) model=$(echo "$input" | jq -r '.model.display_name') pct=$(echo "$input" | jq -r '.context_window.used_percentage') branch=$(echo "$input" | jq -r '.git.branch // empty') added=$(echo "$input" | jq -r '.metrics.files.total_lines_added') removed=$(echo "$input" | jq -r '.metrics.files.total_lines_removed') parts=() [ -n "$model" ] && parts+=("$model") [ -n "$branch" ] && parts+=("($branch)") [ "$pct" != "0" ] 2>/dev/null && parts+=("ctx:${pct}%") ([ "$added" -gt 0 ] || [ "$removed" -gt 0 ]) 2>/dev/null && parts+=("+${added}/-${removed}") echo "${parts[*]}"

Затем укажите на него в настройках:

{ "ui": { "statusLine": { "type": "command", "command": "bash ~/.qwen/statusline-command.sh" } } }

Поведение

Оба режима:

  • Триггеры обновления: Строка состояния обновляется при смене модели, отправке нового сообщения (изменении количества токенов), переключении режима vim, смене ветки git, завершении вызовов инструментов или изменении файлов. Обновления проходят через debounce (300 мс).
  • Вывод: До 2 строк. Каждая строка отображается как отдельный ряд в левой части нижнего колонтитула. Строки, превышающие доступную ширину, обрезаются.
  • Горячая перезагрузка: Изменения в ui.statusLine в настройках вступают в силу немедленно — перезапуск не требуется.
  • Удаление: Удалите ключ ui.statusLine из настроек, чтобы отключить. Вернется подсказка ”? for shortcuts”.

Только режим команд:

  • Таймаут: Команды, выполняющиеся дольше 5 секунд, принудительно завершаются. При сбое строка состояния очищается.
  • Обновление: Установите refreshInterval (в секундах), чтобы дополнительно перезапускать команду по таймеру — полезно для данных, которые меняются без события Агента (часы, rate limits, статус сборки).
  • Shell: Команды запускаются через /bin/sh на macOS/Linux. В Windows по умолчанию используется cmd.exe — оборачивайте POSIX-команды в bash -c "..." или указывайте путь к bash-скрипту (например, bash ~/.qwen/statusline-command.sh).

Только режим пресетов:

  • Нет внешних зависимостей: Элементы пресетов вычисляются внутренне — никаких shell-команд, jq или таймаутов.
  • Интеграция с темой: Когда useThemeColors равно true (по умолчанию), текст строки состояния использует цвет активной /theme. Когда false, применяется приглушенный стиль нижнего колонтитула.
  • Поиск PR: Элемент pull-request-number запускает gh pr view в фоновом режиме (таймаут 2 с). Он срабатывает только при смене ветки, а не при каждом обновлении.

Устранение неполадок

ProblemCauseFix
Строка состояния не отображаетсяКонфигурация по неправильному путиДолжно находиться в ui.statusLine, а не в statusLine на корневом уровне
Пустой вывод (режим команд)Команда завершается с ошибкой без выводаПроверьте вручную: echo '{"session_id":"test","version":"0.14.1","model":{"display_name":"test"},"context_window":{"context_window_size":0,"used_percentage":0,"remaining_percentage":100,"current_usage":0,"total_input_tokens":0,"total_output_tokens":0},"workspace":{"current_dir":"/tmp"},"metrics":{"models":{},"files":{"total_lines_added":0,"total_lines_removed":0}}}' | sh -c 'your_command'
Устаревшие данные (режим команд)Триггер не сработалОтправьте сообщение или переключите модель, чтобы вызвать обновление — или установите refreshInterval для повторного запуска команды по таймеру
Команда выполняется слишком долгоСложный скриптОптимизируйте скрипт или перенесите тяжелые задачи в фоновый кэш
Элементы пресетов отсутствуютУсловные элементы не имеют данныхgit-branch скрывается вне git-репозиториев; context-used скрывается, когда использование равно 0; branch-changes скрывается, когда файлы не менялись. Это ожидаемое поведение — элементы появляются, как только их данные становятся доступны
Номер PR не отображаетсяCLI gh не установленУстановите GitHub CLI  и авторизуйтесь с помощью gh auth login. Поиск выполняется с таймаутом 2 с
Last updated on