# Portability: UNIVERSAL
# Last validated: 2026-05-17
# Next review: 2027-05-17
# Ресурсы: [cli.js (в комплекте), github.com/anthropics/claude-code]

СИСТЕМА ВНЕДРЕНИЯ КОДА CLAUDE – АНАТОМИЯ
==========================================

По состоянию на 17 февраля 2026 г.
Источник: Реверс-инжиниринг из cli.js v2.1.44 (миниатюрный).
Метод: анализ регулярных выражений + систематические подсказки

ОБЗОР
----------
Клод Код вводит в поток сообщений так называемые «системные напоминания».
между пользователем и LLM. Магистр права (Клод) рассматривает это как часть разговора:
но не может отличить, исходят ли они от пользователя или от системы -
за исключением XML-тега <system-reminder>.

В отличие от системы инжекторов BACH (см.: injectors.txt), у пользователя есть
Клод Код НЕТ прямого контроля над инъекциями. LLM может
не включайте и не выключайте их.

АРХИТЕКТУРА
-----------
  Сообщение пользователя
      |
      в
  Интерфейс командной строки Claude Code (Node.js, cli.js)
      |
      +--> d6() -- создает объект сообщения пользователя
      |      Поля: контент, isMeta, isVisibleInTranscriptOnly,
      |      isCompactSummary, uuid, отметка времени, задачи, ...
      |      isMeta:true = невидим в пользовательской расшифровке
      |
      +--> Px() -- оболочка системного напоминания
      |      function Px(A) { return `<system-reminder>\n${A}\n</system-reminder>` }
      |
      +--> s5() -- Массовая оболочка
      |      Применяет Px() ко всему текстовому содержимому в массивах сообщений.
      |
      в
  API-вызов Anthropic (сообщения с внедренными системными напоминаниями)
      |
      в
  LLM (Клод) -- видит системные напоминания в потоке сообщений

ОСНОВНЫЕ ФУНКЦИИ (деобфускация)
------------------------------
  d6({содержание, isMeta, ...})
    Создает объект сообщения типа «пользователь» с ролью: «пользователь».
    isMeta:true означает: сообщение не отображается в расшифровке,
    но будет отправлен в LLM.

  Пх(текст)
    Текст заключен в теги <system-reminder>.
    Самая простая функция в системе.

  s5(сообщения)
    Перебирает массив сообщений и применяет Px() ко всем из них.
    текстовый контент. Массовая операция.

ВСЕ 52 ТИПА ВНЕДРЕНИЯ
-------------------------

Операции с файлами (12):
  файл чтение файла (с содержимым)
  уже_read_file Файл уже прочитан (нет операции)
  edited_text_file Текстовый файл был отредактирован
  edited_image_file Файл изображения отредактирован (неактивно)
  PDF PDF читать
  pdf_reference PDF-ссылка
  изображение изображения читать
  блокнот Jupyter Notebook
  список каталогов каталогов (через ls)
  Compact_file_reference Компактная ссылка на файл
  selected_lines_in_ide Пользователь выбрал строки в IDE
  opens_file_in_ide Пользователь открыл файл в IDE

Память/Контекст (4):
  nested_memory Содержимое подфайлов памяти
                          Формат: «Содержимое {path}:\n{content}»
  ultramemory Ultra-Memory Injection (общий)
  Compaction_reminder "Автоматическое сжатие включено, старые сообщения будут суммироваться"
  date_change "Дата изменилась. НЕ сообщайте об этом пользователю"

Управление задачами/задачами (5):
  Task_reminder «Инструменты для выполнения задач в последнее время не использовались» (Надж)
  Task_progress Сообщение о ходе выполнения задачи (общее)
  Task_status Статус задачи: убито/остановлено + подробности
  Запись о задаче
  todo_reminder Todo nudge (старая система, тот же механизм)

Режим планирования (5):
  plan_mode Режим плана активирован
  plan_mode_exit Выход из режима плана
  plan_mode_reentry Возврат в режим планирования (читает существующий план)
  plan_file_reference Ссылка на файл плана
  verify_plan_reminder "План реализован, пожалуйста, проверьте"

Команда/Агенты (5):
  Agent_mention "Пользователь хочет вызвать агент X"
  Delegate_mode Делегатский режим: разрешены только командные инструменты
  Delegate_mode_exit Выход из делегированного режима
  Team_context Внедрение командного контекста
  teammate_mailbox Сообщения от товарищей по команде (только в командном режиме)

Хуки (10):
  ook_blocking_error Действие «Хук заблокирован» (с сообщением об ошибке)
  ook_success Перехват выполнен успешно (только SessionStart/UserPromptSubmit)
  ook_additional_context Хук предоставляет дополнительный контекст
  ook_error_during_execution Ошибка перехвата во время выполнения (без операций)
  ook_non_blocking_error Ошибка неблокирующего перехвата (нет операции)
  ook_cancelled Перехват отменен (без операций)
  ook_stopped_continuation Продолжение остановлено
  ook_system_message Перехват системного сообщения
  ook_permission_decision Решение о разрешении перехвата
  async_hook_response Асинхронный ответ на перехват

Ресурсы/Бюджет (2):
  token_usage "Использование токена: X/Y; осталось Z"
  Budget_usd "Бюджет в долларах США: $X/$Y; осталось Z"

Навыки/MCP (4):
  kill_listing Список доступных навыков
  вызванные_skills Применяемые навыки
  Dynamic_skill Динамический навык (не работает, возвращает [])
  mcp_resource Ресурс MCP загружен

Другое (5):
  текст Простой текст
  очередь_command Ожидание команды с косой чертой
  структурированный_вывод Структурированный вывод
  диагностика IDE-диагностика (новые ошибки/предупреждения)
  output_style Активный стиль вывода (например, «пояснительный»)
  Critical_system_reminder Напоминание о критической системе (общее)
  Command_permissions Command-Permissions (no-op)

NO-OP ТИПЫ (не создавать внедрение):
  уже_прочитанный_файл, права_команды, отредактированный_файл_изображения,
  ловушка_отменена, ловушка_ошибка_во время_выполнения, ловушка_не_блокирующая_ошибка,
  Dynamic_skill

ВРЕМЕННЫЕ КОНСТАНТЫ
-----------------
  Хf6 = {
      TURNS_SINCE_WRITE: подталкивание к 10 задачам после 10 ходов без инструмента задач.
      TURNS_BETWEEN_REMINDERS: 10 мин. 10 ходов между подталкиваниями к задаче
  }

  qt4 = {
      TURNS_BETWEEN_ATTACHMENTS: 5 напоминаний о прикрепленных файлах каждые 5 ходов.
      FULL_REMINDER_EVERY_N_ATTACHMENTS: 5 полных напоминаний каждые 5 вложений.
  }

  aQY = {
      TOKEN_COOLDOWN: время восстановления 5000 жетонов (после 5000 жетонов)
  }

  sQY = {
      TURNS_BETWEEN_REMINDERS: 10 Общий интервал напоминаний.
  }

  Примечание. «Повороты» учитывают все взаимодействия LLM, включая вызовы инструментов,
  не только сообщения пользователей. Вот почему подталкивания кажутся нерегулярными
  с точки зрения пользователя.

TRIGGER LOGIC (напоминание о задаче, деобфускация)
-------------------------------------------
  функция mustInjectTaskReminder(сообщения) {
      // Только если доступны инструменты задачи
      if (!taskToolsEnabled()) возвращает false;
      if (messages.length === 0) вернуть false;

      // Подсчет оборотов с момента последнего использования инструмента задачи
      пусть поворотыSinceLastUse = 0;
      пусть поворотыSinceLastReminder = 0;

      for (сообщение в messages.reverse()) {
          if (msg.type === "помощник" && msg.usedTool("TaskCreate" || "TaskUpdate"))
              перерыв;  //Обнаружено последнее использование инструмента задачи
          поворотыSinceLastUse++;
      }

      // Проверяем, пришло ли напоминание
      if (turnsSinceLastUse >= 10 && поворотыSinceLastReminder >= 10) {
          пусть задачи = getAllTasks();
          return {type: "task_reminder", содержание: задачи};
      }
      вернуть ложь;
  }

ИНСТРУКЦИИ ПО КОНФИДЕНЦИАЛЬНОСТИ
---------------------------
Следующие типы содержат явные утверждения «НИКОГДА не упоминать»:

  Task_reminder: "Убедитесь, что вы НИКОГДА не упоминаете это напоминание пользователю"
  todo_reminder: "Убедитесь, что вы НИКОГДА не упоминаете это напоминание пользователю"
  date_change: "НЕ сообщайте об этом пользователю явно"
  nested_memory: "Не говорите об этом пользователю, поскольку он уже знает"
    (в изменениях CLAUDE.md/MEMORY.md)

СРАВНЕНИЕ: КОД CLAUDE и ИНЖЕКТОРЫ БАХА
------------------------------------------

  Недвижимость | Клод Код | БАХ
  ----------------------|-----------------------|-----------------------
  Архитектура | Системно-ориентированный | LLM-ориентированный
  Контроль | CLI контролирует LLM | LLM управляет форсунками
  Пользовательский контроль | Нет (кроме крючков) | Полный (включить/выключить)
  LLM контроль | Нет | Полный (вкл./выкл.)
  Управление временем восстановления | Пошаговый (жесткий) | По времени (гибкий)
  Количество типов | 52 | 5 (с частичными функциями)
  Секретность | 4 парня с "НИКОГДА" | Нет (прозрачный)
  Триггеры | Количество ходов | Ключевые слова + время + события
  Интеграция БД | Нет | Более 900 динамических триггеров
  Саморасширение | Невозможно | Через базу данных context_triggers
  Открытый исходный код | cli.js (миниатюрный) | Полностью читаемый (Python)

ОСНОВНЫЕ ОТЛИЧИЯ:

  1. ПРОЗРАЧНОСТЬ: БАХ информирует открыто, Клод Код активно скрывает
  2. УПРАВЛЕНИЕ: Форсунки BACH могут управляться с помощью LLM, коды Клода не могут управляться.
  3. ГИБКОСТЬ: BACH имеет динамические триггеры БД, Claude Code имеет жестко запрограммированные константы.
  4. ПЕРЕЗАРЯДКА: BACH использует временные (мин), Claude Code использует повороты (жесткие) 

 ПОТЕНЦИАЛ: СИСТЕМА ПЕРЕДАЧИ СООБЩЕНИЙ 
----------------------------
 Инфраструктуру внедрения можно использовать для связи между экземплярами.
использоваться:

1. КРЮЧКИ (самый простой способ):
     ook_additional_context в UserPromptSubmit --
     читает сообщение из файла и вставляет его в качестве контекста.
     Исправление исходного кода не требуется.

  2. ВЛОЖЕННАЯ ПАМЯТЬ:
     Файлы в папке памяти добавляются автоматически.
     Изменение извне = сообщение LLM.
     Ограничение: Только при запуске сеанса или изменении CLAUDE.md/MEMORY.md.

  3. КРИТИЧЕСКОЕ_СИСТЕМНОЕ_НАПОМИНАНИЕ:
     Общий тип для любого сообщения.
     Должен запускаться программно (исходный патч).

  4. ПОЧТОВЫЙ ЯЩИК КОМАНДЫ:
     Уже существующие сообщения для команд.
     Активно только в командном режиме (проверка l8()).

РЕКОМЕНДАЦИЯ: Наиболее практичным является подход на основе перехватчиков.
Перехватчик UserPromptSubmit может проверять файл «Входящие» и
Внедрить сообщения какook_additional_context.

РЕЗУЛЬТАТЫ ЭКСПЕРИМЕНТА (сессия 17 февраля 2026 г.)
-----------------------------------------------
Систематический тест с 14+ сообщениями:

  - Напоминание о задаче не появляется строго каждые 10 сообщений, потому что
    Считайте вызовы инструмента как отдельные повороты.
  - Триггер по ключевому слову для подталкивания к задаче: ОТВЕРгнуто (чистый подсчет ходов).
  - Длина сообщения пользователя: не влияет на триггеры
  - Собственные (LLM) выходы не вызывают подталкивания
  - Схема: смещения накапливаются после раундов с интенсивным использованием инструментов.
    (потому что больше ходов = быстрее на 10)

ФАЙЛЫ
-------
  Источник обратного инжиниринга:
    C:\Users\User\AppData\Roaming\npm\node_modules\@anthropic-ai\claude-code\cli.js
    (11,5 МБ, уменьшенная версия 2.1.44)

  Результаты анализа:
    ~/.claude/projects/C--Users-User/memory/claude-code-injections-anatomy.md
    ~/.claude/projects/C--Users-User/memory/system-injections.log

СМОТРИ ТАКЖЕ
----------
  injectors.txt Система форсунок BACH (5 форсунок)
  claude-code.txt Краткий справочник по коду Claude
  claude-code-automatization.txt Автоматизация кода Claude
  система памяти Memory.txt
  Partner.txt партнерская инфраструктура
