Output styles и статусная строка
Две вещи, которые влияют на работу с Claude Code незаметно, но постоянно: output style определяет, как Claude отвечает на каждый ваш запрос, а статусная строка показывает состояние сессии в реальном времени. Обе — персональные настройки, которые не трогают логику агента и не потребляют API-токены сверх нормы.
Output styles: стиль поведения агента
Output style — это набор инструкций, которые добавляются к системному промпту Claude Code. Не к вашим сообщениям — к системному промпту, который читается один раз при старте сессии. Поэтому смена стиля вступает в силу только после /clear или нового сеанса.
Встроенные стили
Из коробки доступны четыре стиля:
| Стиль | Суть |
|---|---|
| Default | Стандартный системный промпт: эффективная помощь в разработке ПО |
| Proactive | Claude действует немедленно, делает разумные допущения, не останавливается на рутинных решениях. Более агрессивная автономность, чем auto mode, — но разрешения на инструменты всё равно спрашиваются |
| Explanatory | В ответы вставляются «Insights» — объяснения, почему выбрано именно это решение, какие паттерны кодовой базы задействованы |
| Learning | Кооперативный режим: Claude объясняет и оставляет TODO(human) — метки, куда вы должны вписать код сами |
Обратите внимание: Proactive не то же самое, что bypassPermissions. Режим разрешений не меняется — меняется только поведение агента (меньше уточняющих вопросов, больше инициативы).
Как переключить стиль
Проще всего — через /config, пункт Output style. Claude Code покажет меню, выбор сохраняется в .claude/settings.local.json на уровне проекта.
Вручную — добавьте поле outputStyle в любой файл настроек:
{
"outputStyle": "Explanatory"
}Иерархия настроек стандартная: enterprise → user → project → local. Если в settings.local.json стоит Proactive, а в корпоративных настройках — Default, победит local.
Кастомный output style
Когда ни один из встроенных стилей не подходит — создайте свой. Это markdown-файл с frontmatter. Имя файла становится именем стиля, если в frontmatter не задан name.
Расположение файлов:
- Пользовательский уровень:
~/.claude/output-styles/ - Проектный:
.claude/output-styles/ - Внутри плагина:
output-styles/в корне плагина
Пример — стиль, который требует начинать каждое объяснение с диаграммы, но оставляет всю инженерную логику нетронутой:
---
name: Diagrams first
description: Lead every explanation with a diagram
keep-coding-instructions: true
---
When explaining code, architecture, or data flow, start with a Mermaid diagram
showing the structure, then explain in prose.
::widget{id="rc-3"}
::widget{id="rc-2"}
::widget{id="rc-1"}
## Diagram conventions
Use `flowchart TD` for control flow and `sequenceDiagram` for request paths.
Keep diagrams under 15 nodes.Ключевое поле frontmatter — keep-coding-instructions:
true— Claude Code оставляет свои встроенные инструкции по разработке (как скопировать изменения, как писать комментарии, как верифицировать работу). Используйте, если вы меняете формат ответов, но продолжаете кодить.false(по умолчанию) — встроенные инструкции убираются. Подходит, когда Claude выступает как аналитик данных, технический писатель или любая другая роль, не связанная с разработкой.
Полный список frontmatter-полей:
| Поле | Назначение | По умолчанию |
|---|---|---|
name | Имя стиля в меню /config | Имя файла |
description | Подсказка в меню | — |
keep-coding-instructions | Сохранять ли встроенные инструкции | false |
force-for-plugin | Применять стиль автоматически при подключении плагина | false |
Поле force-for-plugin стоит применять осторожно: если сразу несколько подключённых плагинов устанавливают его в true, Claude Code берёт первый загруженный и игнорирует остальные.
Output style vs. CLAUDE.md vs. Skills
Часто возникает вопрос: что куда класть?
Output style → «Как Claude отвечает на каждый вопрос» (роль, тон, формат)
CLAUDE.md → «Что Claude знает о проекте» (конвенции, команды, архитектура)
Skill → «Что Claude умеет делать в конкретной задаче» (переносимая экспертиза)Если вы хотите, чтобы Claude всегда отвечал по-русски и в стиле code review — это output style. Если нужно, чтобы он знал, что тесты запускаются через pnpm test --coverage — это CLAUDE.md. Если нужна переиспользуемая процедура деплоя — это skill.
Статусная строка
Статусная строка — полоса в нижней части интерфейса Claude Code. По умолчанию там отображается минимальный набор: модель, режим разрешений. Но строка полностью настраиваема: Claude Code запускает ваш shell-скрипт, передаёт ему JSON-данные сессии через stdin, и всё, что скрипт выведет в stdout, становится строкой.
Важно: статусная строка работает локально и не потребляет API-токены.
Быстрый старт: /statusline
Самый простой способ — описать желаемое в /statusline на естественном языке:
/statusline show model name and context percentage with a progress barClaude Code сгенерирует скрипт в ~/.claude/ и сразу пропишет его в settings.json. Это удобно для первого знакомства.
Ручная настройка
Для полного контроля — добавьте блок statusLine в ~/.claude/settings.json (или проектный .claude/settings.json):
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh",
"padding": 2,
"refreshInterval": 30
}
}Поля:
command— путь к скрипту или inline-команда (например, черезjq).padding— дополнительные пробелы по горизонтали.refreshInterval— перезапуск скрипта каждые N секунд помимо событийных обновлений. Полезно, когда статусная строка показывает часы или статус субагентов, работающих в фоне пока основная сессия простаивает.hideVimModeIndicator— убрать встроенный-- INSERT --, если вы сами рендеритеvim.mode.
Строка обновляется после каждого ответа ассистента, после /compact, при смене режима разрешений и при переключении vim mode. Обновления дебаунсируются с задержкой 300 мс.
Данные, доступные скрипту
Claude Code передаёт в stdin JSON со всем состоянием сессии. Ключевые поля:
{
"model": { "id": "claude-opus-4-8", "display_name": "Opus" },
"workspace": {
"current_dir": "/home/user/project",
"git_worktree": "feature-xyz",
"repo": { "host": "github.com", "owner": "acme", "name": "backend" }
},
"context_window": {
"used_percentage": 42,
"remaining_percentage": 58,
"context_window_size": 200000
},
"cost": {
"total_cost_usd": 0.0124,
"total_duration_ms": 145000,
"total_lines_added": 87
},
"rate_limits": {
"five_hour": { "used_percentage": 31.5 },
"seven_day": { "used_percentage": 18.2 }
},
"effort": { "level": "high" },
"vim": { "mode": "NORMAL" },
"pr": { "number": 42, "url": "https://github.com/...", "review_state": "pending" },
"output_style": { "name": "Explanatory" },
"session_name": "refactor-auth",
"version": "2.1.153"
}Поля rate_limits доступны только подписчикам Claude.ai (Pro/Max). Поля vim, agent, pr, worktree, session_name присутствуют только когда соответствующие фичи активны — всегда делайте fallback через // empty или or 0.
Размер терминала доступен через переменные окружения COLUMNS и LINES (Claude Code v2.1.153+). Стандартный tput cols внутри скрипта не работает — скрипт запускается без прямого доступа к терминалу.
Практический пример: цветовой индикатор контекста
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
# Цвет по порогу заполненности
if [ "$PCT" -ge 90 ]; then COLOR='\033[31m' # красный
elif [ "$PCT" -ge 70 ]; then COLOR='\033[33m' # жёлтый
else COLOR='\033[32m'; fi # зелёный
RESET='\033[0m'
# Прогресс-бар из 10 блоков
FILLED=$((PCT / 10)); EMPTY=$((10 - FILLED))
printf -v FILL "%${FILLED}s"; printf -v PAD "%${EMPTY}s"
BAR="${FILL// /▓}${PAD// /░}"
COST_FMT=$(printf '$%.3f' "$COST")
echo -e "[${MODEL}] ${COLOR}${BAR}${RESET} ${PCT}% | 💰 ${COST_FMT}"Сохраните в ~/.claude/statusline.sh, сделайте исполняемым (chmod +x) и пропишите в settings.json.
Многострочная статусная строка
Каждый echo — отдельная строка в статусной области. Это позволяет организовать компактный «дашборд»:
# Строка 1: модель + директория + git-ветка
BRANCH=$(git branch --show-current 2>/dev/null)
echo -e "[${MODEL}] 📁 ${DIR##*/} | 🌿 ${BRANCH}"
# Строка 2: контекст + стоимость
echo -e "${COLOR}${BAR}${RESET} ${PCT}% | 💰 ${COST_FMT}"subagentStatusLine
Есть ещё одно поле настроек — subagentStatusLine. Оно настраивает не нижнюю строку интерфейса, а строки субагентов в панели агентов:
{
"subagentStatusLine": {
"type": "command",
"command": "~/.claude/subagent-statusline.sh"
}
}Скрипт получает на stdin JSON с массивом tasks — каждый субагент с полями id, name, status, description и временными метками. Вывод заменяет стандартную строку name · description · token count для каждого агента. Полезно, когда запущено несколько фоновых агентов и нужно отличить их по чему-то более значимому, чем имя по умолчанию.
Экосистема: готовые решения
Если писать скрипт с нуля не хочется, в open source уже есть несколько готовых тем и генераторов:
- ccstatusline (GitHub: sirmalloc/ccstatusline) — Powerline-совместимые темы, настройка через конфиг.
- claude-statusline (felipeelias, Go) — самодостаточный бинарник, готовые виджеты.
- Starship-интеграции — если вы уже используете Starship в терминале, часть метрик можно перегнать туда.
Но помните: любой сторонний скрипт получает полный доступ к JSON-данным сессии, включая стоимость и рейт-лимиты. Проверяйте код перед использованием.
See also
- CLAUDE.md и система памяти — для проектного контекста используйте CLAUDE.md, а не output styles
- Настройки и иерархия конфигурации — поля
outputStyleиstatusLineподчиняются общей иерархии settings.json - Субагенты и контекстная изоляция —
subagentStatusLineнастраивает отображение субагентов в агент-панели - Plugins и marketplace — плагины могут поставлять output styles через директорию
output-styles/и активировать их черезforce-for-plugin - Skills — переносимые навыки — альтернатива output styles для задач, где нужна переносимая экспертиза, а не постоянный стиль ответа
- Управление контекстным окном —
context_window.used_percentageв статусной строке помогает следить за заполнением контекста - Выбор модели и режимы мышления — поля
model.display_nameиeffort.levelдоступны в статусной строке - Что выбрать: команда, навык, субагент, MCP или хук — матрица решений, включающая output styles как отдельный механизм кастомизации