type: guide
title: "Output Styles, Resume, Compaction — полное руководство"
status: active
version: 1.0.0
date: 2026-04-15
Исчерпывающее руководство. Всё что не очевидно из документации.
Output Style — Markdown-файл с YAML-шапкой, который заменяет (или дополняет) системный промпт Claude Code.
---
name: "Название стиля"
description: "Что делает"
keep-coding-instructions: false ← КЛЮЧЕВОЙ параметр
---
# Инструкции для Claude
[Markdown-содержимое — становится системным промптом]
keep-coding-instructions| Значение | Поведение |
|---|---|
false |
Стиль ЗАМЕНЯЕТ базовый системный промпт Anthropic. Наши правила — единственные системные инструкции. |
true |
Стиль ДОБАВЛЯЕТСЯ к базовому промпту. Базовые инструкции Anthropic имеют высший приоритет и могут перебивать наши правила. |
Вывод: Для платформы всегда keep-coding-instructions: false.
Порядок поиска файла стиля по имени:
1. WORKSPACE/.claude/output-styles/ ← ПЕРВЫЙ (высший приоритет)
2. ~/.claude/output-styles/ ← второй (пользовательский fallback)
3. Встроенные стили Claude Code ← последний
Важно: Если файл есть в обоих местах — workspace-версия побеждает.
Для платформы: Файлы стилей хранятся в /opt/claude-workspace/.claude/output-styles/. Это правильно — они в git, синхронизируются на все серверы.
Managed settings ← высший (нельзя переопределить)
CLI arguments ← временный override для сессии
.claude/settings.local.json ← LOCAL: личные настройки (в .gitignore)
.claude/settings.json ← PROJECT: настройки команды (в git) ← наш файл
~/.claude/settings.json ← USER: глобальные настройки
Правило: Project outputStyle: Default-test побеждает User outputStyle: Default.
Итог на нашей платформе:
- ~/.claude/settings.json → outputStyle: "Default" (не важно)
- /opt/claude-workspace/.claude/settings.json → outputStyle: "Default-test" ← побеждает
- Файл Default-test.md ищется в workspace .claude/output-styles/ → найден ✅
При /compact или автосжатии:
| Механизм | Выживает? | Почему |
|---|---|---|
| Output Style | ✅ ДА | Часть системного промпта, не истории. Перезагружается автоматически. |
| CLAUDE.md (корень workspace) | ✅ ДА | Инжектируется из файла заново при каждом сжатии. |
| CLAUDE.md (вложенные папки) | ❌ НЕТ | Загружается только когда Claude читает файл в той папке. |
Правила с paths: |
❌ НЕТ | Только при обращении к совпадающим файлам. |
| MEMORY.md (auto memory) | ✅ ДА | Первые 200 строк перезагружаются. |
| Hooks | ✅ ДА | Хуки — код, не контекст. Всегда срабатывают. |
Вывод: Output Style и CLAUDE.md корня — вечные. Вложенные CLAUDE.md — временные.
claude --resume <id>)При возобновлении сессии:
| Что | Восстанавливается? |
|---|---|
| История сообщений | ✅ Полностью |
| Output Style | ✅ Перечитывается из файла заново |
| CLAUDE.md корня | ✅ Перечитывается из файла заново |
| MEMORY.md | ✅ Первые 200 строк |
| Разрешения сессии | ❌ Нужно переподтверждать |
CWD имеет значение: Claude Code ищет .claude/settings.json и стили относительно текущей директории. При resume нужно быть в workspace:
cd /opt/claude-workspace && claude --resume <session-id>
Наш start.sh делает это правильно: cd "$WORKSPACE" перед каждым exec claude.
SessionStart срабатывает при:
- Новая сессия (source: "startup")
- claude --resume (source: "resume")
- /clear (source: "clear")
- /compact (source: "compact")
Хук срабатывает всегда — независимо от CWD. Но если хук использует относительные пути, а CWD неправильный — хук сработает с ошибкой.
Это не баг загрузки. Это ограничение модели:
- Правила в тексте стиля — инструкции, не принудительный механизм
- Claude читает и понимает, но делает суждения
- Свежая сессия без контекста → суждения менее точные
- Длинная сессия с контекстом → суждения более точные
keep-coding-instructions: false — убирает конкурирующие инструкции Anthropic1. Workspace settings:
/opt/claude-workspace/.claude/settings.json
{ "outputStyle": "Default-test" }
2. Файл стиля:
/opt/claude-workspace/.claude/output-styles/Default-test.md
--- keep-coding-instructions: false ---
[Правила платформы]
3. Запуск ТОЛЬКО из workspace:
cd /opt/claude-workspace && exec claude "режим ..."
4. (Опционально) SessionStart hook для напоминаний
# Написать в новой сессии: "создай файл test.md"
# ✅ Норма: Claude показывает план и ждёт "ок"
# ❌ Сломано: Claude создаёт файл сразу
| Компонент | EU (91) | 155 |
|---|---|---|
settings.json → Default-test |
✅ | ✅ |
Default-test.md в workspace |
✅ | ✅ |
keep-coding-instructions: false |
✅ | ✅ |
start.sh cd перед запуском |
✅ | ✅ |
| SessionStart hook | ❌ | ❌ |
Вывод: Оба сервера технически настроены одинаково и правильно. Разница в поведении — особенность свежих vs. длинных сессий.