system/monitor/dialog-testing/ISSUE_FOR_CLAUDE_CODE.md

Issue: Противоречие "Act Immediately" в системной инструкции vs протокол диалога в CLAUDE.md

Краткое описание

Есть фундаментальное противоречие между системной инструкцией Claude Code ("делай сразу") и проектным протоколом диалога из CLAUDE.md, которое усугубляется после сжатия контекста.

Проблема

1. Приоритет системной инструкции

Встроенный 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 выполняет инструменты без запроса подтверждения.

2. CLAUDE.md имеет более низкий приоритет

Наш файл CLAUDE.md определяет детальный протокол диалога:
- Классификация операций по уровням L1-L4
- Требования подтверждения перед выполнением
- Паттерн "предложи варианты → жди выбор"
- Правила безопасности и определение опасных терминов

НО: CLAUDE.md — это просто контекст, с более низким приоритетом чем системная инструкция.

Результат: Системная инструкция побеждает, протокол из CLAUDE.md игнорируется.

3. Сжатие контекста делает всё хуже

После сжатия контекста:
- CLAUDE.md переписывается в summary
- Summary ещё СЛАБЕЕ чем оригинал
- Противоречие становится более очевидным
- Ничего не работает — Claude не знает что делать

Текущая ситуация

Иерархия приоритетов:
  1. System Prompt (высший)     → "делай сразу"
  2. CLAUDE.md (ниже)           → "подтверждай перед действием"

Результат: ПРОТИВОРЕЧИЕ → Claude в замешательстве
После сжатия: ЕЩЁ ХУЖЕ → протокол потерян в summary

Что мы пробовали

1. Флаг --append-system-prompt

2. Output Styles (~/.claude/output-styles/)

3. settings.json / settings.local.json

4. Доработка CLAUDE.md

Что нам нужно

Способ постоянно дополнять system prompt, который:
1. ✅ Переживает сжатие контекста
2. ✅ Переживает resume сессии
3. ✅ Не требует переписывания всей системной инструкции
4. ✅ Может быть в version control (специфично для проекта)

Возможные решения?

Вариант A: Новая настройка в settings.json

{
  "permissions": { ... },
  "model": "sonnet",
  "appendSystemPrompt": "path/to/additional-instructions.md"
}

Это позволит:
- Загружать при каждом старте сессии
- Применять после сжатия контекста
- Быть проектно-специфичным (.claude/settings.local.json)
- Не мешать базовой системной инструкции

Вариант B: Специальная секция в CLAUDE.md

# SYSTEM_PROMPT_OVERRIDE

Эта секция обрабатывается как системная инструкция,
а не просто контекст.

Вариант C: Система hooks

{
  "hooks": {
    "SessionStart": {
      "appendSystemPrompt": "$(cat .claude/dialog-protocol.md)"
    }
  }
}

Вариант D: Сделать --append-system-prompt постоянным

Сохранять флаг в метаданных сессии, чтобы он переприменялся после:
- Сжатия контекста
- Resume сессии (-c или -r)

Наш use case

Мы строим многорежимное AI workspace с:
- Режим Оператор (инфраструктура, быстрые операции)
- Режим Проектор (работа над проектами, требует планирования)
- Режим Архитектор (методология, требует обсуждения)

Каждому режиму нужен свой протокол диалога:
- Операции L1-L2: делай сразу ✅
- Операции L3 (конфиг сервера): подтверди сначала ⚠️
- Операции L4 (prod, деньги, rm -rf): СТОП + явное одобрение 🚨

Текущее "всегда делай сразу" делает L3-L4 небезопасными.

Вопрос команде Claude Code

Какой рекомендуемый способ постоянно модифицировать поведение system prompt для проектно-специфичных протоколов диалога?

Это то, что вы рассмотрели бы для добавления в Claude Code, или нам следует придерживаться Output Styles?


Окружение

Связано

Это блокирует нашу возможность безопасно тестировать разные протоколы диалога и собирать статистику для калибровки оптимальных порогов.


Дополнительные детали

Мы создали инфраструктуру для тестирования (system/monitor/dialog-testing/) с:
- Двухстадийным протоколом (понимание → решение)
- Вероятностными оценками на каждой стадии
- Логированием для сбора статистики

Но --append-system-prompt теряется после первого сжатия контекста, и все наши тесты становятся бесполезными.