Строка состояния
Отображение пользовательской информации в нижнем колонтитуле.
Строка состояния отображает информацию с учетом контекста сессии — имя модели, использование токенов, ветку 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
}
}
}| Field | Type | Required | Description |
|---|---|---|---|
type | "preset" | Да | Должно быть "preset" |
items | string[] | Да | Упорядоченный список ID элементов пресета для отображения (см. таблицу ниже). Элементы объединяются с помощью | в качестве разделителя. |
useThemeColors | boolean | Нет | Применять цвет активной /theme к тексту строки состояния. По умолчанию true. |
hideContextIndicator | boolean | Нет | Скрыть встроенный индикатор использования контекста в правой части нижнего колонтитула. По умолчанию false. |
Доступные элементы пресетов
| Item ID | Default | Description |
|---|---|---|
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}%\""
}
}
}| Field | Type | Required | Description |
|---|---|---|---|
type | "command" | Да | Должно быть "command" |
command | string | Да | Shell-команда для выполнения. Получает JSON через stdin, stdout отображается (до 2 строк). |
refreshInterval | number | Нет | Повторно запускать команду каждые N секунд (минимум 1). Полезно для данных, которые меняются без события состояния Агента (часы, квоты, аптайм). |
respectUserColors | boolean | Нет | Сохранять ANSI color-коды в выводе команды вместо применения приглушенного стиля нижнего колонтитула. По умолчанию false. |
hideContextIndicator | boolean | Нет | Скрыть встроенный индикатор использования контекста в правой части нижнего колонтитула. По умолчанию 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"
}
}| Field | Type | Description |
|---|---|---|
session_id | string | Уникальный идентификатор сессии |
version | string | Версия Qwen Code |
model.display_name | string | Текущее имя модели |
context_window.context_window_size | number | Общий размер окна контекста в токенах |
context_window.used_percentage | number | Использование окна контекста в процентах (0–100) |
context_window.remaining_percentage | number | Оставшееся окно контекста в процентах (0–100) |
context_window.current_usage | number | Количество токенов из последнего вызова API (текущий размер контекста) |
context_window.total_input_tokens | number | Общее количество входных токенов, потребленных в этой сессии |
context_window.total_output_tokens | number | Общее количество выходных токенов, потребленных в этой сессии |
workspace.current_dir | string | Текущая рабочая директория |
git | object | absent | Присутствует только внутри git-репозитория. |
git.branch | string | Имя текущей ветки |
worktree | object | absent | Присутствует только при нахождении внутри активного worktree (созданного с помощью enter_worktree). |
worktree.name | string | Slug-имя worktree |
worktree.path | string | Абсолютный путь к директории worktree |
worktree.branch | string | Ветка, checkout-нутая в worktree |
worktree.original_cwd | string | Рабочая директория до входа в worktree |
worktree.original_branch | string | Ветка, которая была активна до входа в worktree |
metrics.models.<id>.api | object | Статистика API для каждой модели: total_requests, total_errors, total_latency_ms |
metrics.models.<id>.tokens | object | Использование токенов для каждой модели: prompt, completion, total, cached, thoughts |
metrics.files | object | Статистика изменений файлов: total_lines_added, total_lines_removed |
vim | object | 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 с). Он срабатывает только при смене ветки, а не при каждом обновлении.
Устранение неполадок
| Problem | Cause | Fix |
|---|---|---|
| Строка состояния не отображается | Конфигурация по неправильному пути | Должно находиться в 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 с |