# Portability: UNIVERSAL
# Last validated: 2026-05-17
# Next review: 2027-05-17

ПРОТОКОЛ MULTI-LLM — Координация параллельных агентов
-----------------------------------------------------

По состоянию на: 28 января 2026 г., версия 1.1.71

Протокол V3 для безопасной параллельной работы нескольких LLM
(Клод, Близнецы, Второй пилот, Оллама, Недоумение) в том же
Файловая система. Разработано Claude + Gemini Experiment.
28 января 2026 г.

ВАЖНО: НАЧНИТЕ ПРАВИЛЬНО
------------------------
ВСЕ партнеры должны начинать с почтовой карточки!

  # Клод начинает
  bach --startup --partner=claude --mode=silent

  # Gemini запускает
  bach --startup --partner=gemini --mode=silent

  # Новый партнер (со своим именем)
  bach --startup --partner=simonAI --mode=silent

  # Новый партнёр (без имени)
  bach --startup --partner=new --mode=silent

ПОЧЕМУ?
- Автоматический вход/выход в базе данных Partner_presence.
- Осведомленность о партнере: определяет, кто все еще в сети.
- Протокол V3 автоматически рекомендуется нескольким партнерам
- Проверка между задачами напоминает проверку партнера

КОМАНДЫ CLI
-----------
bach llm presence [dir] [task]  Создать/обновить присутствие
bach llm check [dir]            Обнаружить других агентов
bach llm lock <datei>           Получить блокировку
bach llm unlock [datei]         Снять блокировку
bach llm handshake [dir]        Запустить протокол рукопожатия
bach llm status [dir]           Показать статус

КОМПОНЕНТЫ ПРОТОКОЛА V3
------------------------

1. СИСТЕМА ПРИСУТСТВИЯ
------------------
Каждый агент создает файл присутствия в рабочем каталоге:

Файл: .<agent>_presence (например, .claude_presence)

Содержание:
  Агент: Клод
  статус: АКТИВНО|ЗАВЕРШЕНО
  началось: 2026-01-28T01:00:00
  сердцебиение: 2026-01-28T01:05:00
  работаю над: TASK_DESCRIPTION
  текущий_файл: file.txt
  lock_status: БЕСПЛАТНО|ЗАБЛОКИРОВАНО|ОЖИДАНИЕ

Правила:
- Обновление пульса каждые 30-60 секунд
- Сердцебиение старше 2 минут = агент неактивен
- В конце сеанса: установите статус ЗАВЕРШЕНО

2. СИСТЕМА БЛОКИРОВКИ
-----------------
Перед доступом на запись к общим файлам:

Блокировка файла: <файл>.lock.<агент>
Пример: PROTOKOL.md.lock.claude

Рабочий процесс:
  1. list_directory — проверьте, существует ли внешний .lock.*
  2. Если да -> ПОДОЖДИТЕ (отсрочка на 5 секунд, затем еще раз)
  3. Если нет -> создать блокировку
  4. Создать резервную копию (<файл>.bak)
  5. Редактировать файл
  6. Удалить блокировку НЕМЕДЛЕННО

Содержимое блокировки:
  Агент: Клод
  locked_at: 2026-01-28T01:00:00
  файл: PROTOKOL.md

Тайм-аут: Блокировка старше 5 минут считается «устаревшей»
         и может быть удален другим агентом.

3. СИСТЕМА РЕЗЕРВНОГО КОПИРОВАНИЯ
----------------
ПЕРЕД любыми изменениями в общих файлах:
- Создать резервную копию: <файл>.bak
- Напиши только потом.
- Бэкап остается для восстановления

4. ПРОТОКОЛ РУКОПОЖАТАНИЯ
----------------------
Автоматическое обнаружение при встрече агентов:

Процедура:
  1. Агент А создает присутствие
  2. Агент A обнаруживает агента B (черезDetect_other_agents)
  3. Агент А создан: .handshake_<agent_a>
  4. Агент Б обнаруживает запрос на установление связи.
  5. Агент Б отвечает: .handshake_<agent_b> с надписью ПРИНЯТО.
  6. Оба включают протокол V3

Файл рукопожатия:
  от: Клод
  кому: Близнецы
  время: 2026-01-28T01:00:00
  статус: ПРИНЯТО
  протокол: V3

СВЯЗЬ
-------------

Метауровень (асинхронный):
  bach msg send <partner> "Nachricht"
  bach msg list
  bach msg read <id>

В реальном времени (в рабочей папке):
  Файлы присутствия для статуса
  Внутрифайловая связь (записи с отметкой времени)

Внутрифайловый формат:
  [ЧЧ:ММ] [Агент] Сообщение или действие

РАБОЧИЙ ПРОЦЕСС: РЕДАКТИРОВАНИЕ ОБЩЕГО ФАЙЛА
-------------------------------------

1. Проверить наличие:
   bach llm check

2. Получить блокировку:
   bach llm lock DATEI.md

3. Создать резервную копию:
   (автоматически с помощью Safe_write)

4. Редактировать файл

5. Разблокировка блокировки:
   bach llm unlock DATEI.md

6. Присутствие обновления:
   bach llm presence . "Fertig"

ПРИМЕР СЕССИИ
----------------

# Агент A запускается
bach llm presence . "Task_123"
bach llm check              # -> "Нет других агентов"

# Агент B запускается
bach llm presence . "Task_456"
bach llm check              # -> "claude: ACTIVE"

# Агент A хочет редактировать SHARED.txt
bach llm lock SHARED.txt    # -> "Блокировка получена"
# ... обработано ...
bach llm unlock SHARED.txt

# Агент B ожидает автоматически, если блокировка существует
bach llm lock SHARED.txt    # -> Ожидает, пока A не завершится

KNOWN АГЕНТЫ
----------------

- Клод Клод (Антропный)
- Близнецы Близнецы (Google)
— второй пилот GitHub
- оллама Местные LLM
- perplexity Perplexity AI

ФАЙЛЫ В РАБОЧЕЙ ПАПКЕ
------------------------

.claude_presence Присутствие Клода
.gemini_presence Присутствие Близнецов
ФАЙЛ.lock.claude Замок от Клода
ФАЙЛ.lock.gemini Блокировка от Gemini
Резервное копирование FILE.bak перед изменением
.handshake_claude Сигнал рукопожатия
.handshake_gemini Ответ на рукопожатие

УСТРАНЕНИЕ НЕИСПРАВНОСТЕЙ
---------------

Проблема: замок застревает
Решение: блокировка старше 5 минут считается устаревшей.
         и автоматически игнорируется. Удалить вручную ОК.

Проблема: агент не распознает других
Решение: Проверьте файл присутствия. Текущий пульс?

Проблема: состояние гонки, несмотря на блокировку
Решение. Проверьте, есть ли list_directory ПЕРЕД созданием блокировки.
         выполняется. Проблема с синхронизацией?

HANDLER
-------
hub/multi_llm_protocol.py Реализация протокола

УРОКИ
-------
Урок № 62: Основы параллельной работы с несколькими LLM
Урок #63: Протокол Multi-LLM V3

СМОТРИ ТАКЖЕ
----------
bach --help partner   Партнерская система
bach --help messages       Сообщения


СИСТЕМА КАРТОЧНЫХ КАРТ (v1.1.71)
------------------------------
Присутствие партнера на основе базы данных для автоматического оповещения.

ТАБЛИЦА: партнер_присутствие
  id ЦЕЛОЕ ПЕРВИЧНЫЙ КЛЮЧ
  Partner_name ТЕКСТ ID партнера (claude, gemini, user, ...)
  статус ТЕКСТ онлайн|оффлайн|сбой
  clocked_in ТЕКСТ Время прихода
  clocked_out ТЕКСТ Время отсчета
  Last_heartbeat ТЕКСТ Последняя активность
  current_task ТЕКСТ Текущая задача
  session_id ТЕКСТ Связанный сеанс

АВТОМАТИЧЕСКИЙ:
- At --startup: Clock-In (отмечены старые сбойные сеансы)
- С --shutdown: отключение времени
- Информация о партнере в результатах запуска

РУКОВОДСТВО (необязательно):
- Сердцебиение: присутствие фильма Баха. "Задача_XYZ"
- Статус: статус bach llm

TIMEOUT:
- Сердцебиение старше 5 минут = партнер неактивен
- Сбойные сеансы будут очищены при следующем запуске.
