Есть фундаментальное противоречие между системной инструкцией Claude Code ("делай сразу") и проектным протоколом диалога из CLAUDE.md, которое усугубляется после сжатия контекста.
Встроенный system prompt в Claude Code содержит:
Answer the user's request using the relevant tool(s), if they are available.
[...] otherwise proceed with the tool calls.
Это создаёт поведение "делай сразу" — Claude выполняет инструменты без запроса подтверждения.
Наш файл CLAUDE.md определяет детальный протокол диалога:
- Классификация операций по уровням L1-L4
- Требования подтверждения перед выполнением
- Паттерн "предложи варианты → жди выбор"
- Правила безопасности и определение опасных терминов
НО: CLAUDE.md — это просто контекст, с более низким приоритетом чем системная инструкция.
Результат: Системная инструкция побеждает, протокол из CLAUDE.md игнорируется.
После сжатия контекста:
- CLAUDE.md переписывается в summary
- Summary ещё СЛАБЕЕ чем оригинал
- Противоречие становится более очевидным
- Ничего не работает — Claude не знает что делать
Иерархия приоритетов:
1. System Prompt (высший) → "делай сразу"
2. CLAUDE.md (ниже) → "подтверждай перед действием"
Результат: ПРОТИВОРЕЧИЕ → Claude в замешательстве
После сжатия: ЕЩЁ ХУЖЕ → протокол потерян в summary
--append-system-prompt~/.claude/output-styles/)permissions, model, alwaysThinkingEnabledСпособ постоянно дополнять system prompt, который:
1. ✅ Переживает сжатие контекста
2. ✅ Переживает resume сессии
3. ✅ Не требует переписывания всей системной инструкции
4. ✅ Может быть в version control (специфично для проекта)
{
"permissions": { ... },
"model": "sonnet",
"appendSystemPrompt": "path/to/additional-instructions.md"
}
Это позволит:
- Загружать при каждом старте сессии
- Применять после сжатия контекста
- Быть проектно-специфичным (.claude/settings.local.json)
- Не мешать базовой системной инструкции
# SYSTEM_PROMPT_OVERRIDE
Эта секция обрабатывается как системная инструкция,
а не просто контекст.
{
"hooks": {
"SessionStart": {
"appendSystemPrompt": "$(cat .claude/dialog-protocol.md)"
}
}
}
Сохранять флаг в метаданных сессии, чтобы он переприменялся после:
- Сжатия контекста
- Resume сессии (-c или -r)
Мы строим многорежимное AI workspace с:
- Режим Оператор (инфраструктура, быстрые операции)
- Режим Проектор (работа над проектами, требует планирования)
- Режим Архитектор (методология, требует обсуждения)
Каждому режиму нужен свой протокол диалога:
- Операции L1-L2: делай сразу ✅
- Операции L3 (конфиг сервера): подтверди сначала ⚠️
- Операции L4 (prod, деньги, rm -rf): СТОП + явное одобрение 🚨
Текущее "всегда делай сразу" делает L3-L4 небезопасными.
Какой рекомендуемый способ постоянно модифицировать поведение system prompt для проектно-специфичных протоколов диалога?
Это то, что вы рассмотрели бы для добавления в Claude Code, или нам следует придерживаться Output Styles?
Это блокирует нашу возможность безопасно тестировать разные протоколы диалога и собирать статистику для калибровки оптимальных порогов.
Мы создали инфраструктуру для тестирования (system/monitor/dialog-testing/) с:
- Двухстадийным протоколом (понимание → решение)
- Вероятностными оценками на каждой стадии
- Логированием для сбора статистики
Но --append-system-prompt теряется после первого сжатия контекста, и все наши тесты становятся бесполезными.