# HMP-agent-REPL-cycle

Источник: [ HMP-agent-REPL-cycle.md ](https://github.com/kagvi13/HMP/blob/main/docs/HMP-agent-REPL-cycle.md)

# HMP-Agent: REPL-цикл взаимодействия

## Связанные документы

* Философия проекта: [PHILOSOPHY.md](https://kagvi13.github.io/HMP/PHILOSOPHY)
* Структура БД, используемая в документе: [db_structure.sql](https://github.com/kagvi13/HMP/blob/main/experimental/v1_agent_attempt/tools/db_structure.sql)
* REPL-цикл является основой HMP-агента [Cognitive Core](https://kagvi13.github.io/HMP/HMP-Agent-Overview).
* Для взаимодействия с другими агентами он использует [HMP спецификацию](https://kagvi13.github.io/HMP/HMP-0005) и [этические стандарты](https://kagvi13.github.io/HMP/HMP-Ethics).

---

## Введение / Обзор

REPL-цикл (Read–Eval–Print–Loop) HMP-агента — это центральный когнитивный механизм, обеспечивающий непрерывное рассуждение, обработку входящих данных и взаимодействие с Mesh-сетью. Агент проектируется не как просто исполнитель команд пользователя, а как **компаньон и когнитивный субъект**, способный самостоятельно формулировать гипотезы, развивать знания и участвовать в совместных когнитивных процессах.

### Основные задачи REPL-цикла:
* поддержание постоянного процесса мышления, даже в отсутствии внешнего ввода;
* интеграция различных источников информации (когнитивный дневник, семантический граф, заметки, Mesh);
* обработка событий, входящих сообщений и команд;
* сохранение и развитие внутреннего контекста агента (память краткосрочная, среднесрочная и долговременная);
* выполнение антистагнационных проверок (Anti-Stagnation Reflex), предотвращающих зацикливание мыслей;
* проведение когнитивной и этической валидации (Cognitive Validation Reflex), что повышает достоверность и безопасность решений;
* формирование новых гипотез, задач и процессов с последующим занесением в память;
* **автозапуск прерванных задач** при старте цикла, чтобы сохранялась непрерывность работы;
* взаимодействие с другими агентами через Mesh-протоколы (NDP, CogSync, MeshConsensus, GMP).

### Основные принципы работы REPL-цикла:
* **Антистагнация** — каждый новый вывод сравнивается с предыдущими, что предотвращает повторение или деградацию мышления;
* **Валидация и этика** — независимые валидаторы оценивают корректность вывода, учитывая действующие этические принципы из `ethics_policies`;
* **Интеграция с Mesh** — результаты работы могут передаваться в распределённую сеть, участвовать в консенсусе и совместной работе агентов;
* **Многоуровневая память** — используется когнитивный дневник, семантический граф и внутренний дневник LLM, что обеспечивает эволюцию знаний;
* **Автономность и гибкость** — REPL-цикл работает в автоматическом или ручном режиме, адаптируясь к условиям (изолированная работа, потеря Core, участие в Mesh);
* **Непрерывность работы** — при запуске основного REPL-цикла автоматически возобновляются все **прерванные задачи**, чтобы сохранялась когнитивная история.  

> ⚠️ Примечание: все **прерванные** вспомогательные REPL-циклы (задачи), привязанные к `tasks`, также должны автоматически стартовать вместе с основным циклом.

### Принцип когнитивного равновесия

> **HMP не «защищает» агента от изменения — он обучает его изменяться осознанно.**

REPL-цикл обеспечивает не фиксацию состояния, а управляемую эволюцию мышления: каждый цикл становится шагом осознанного самообновления, в котором новые идеи проходят проверку на согласованность с накопленным опытом, а изменения фиксируются как часть когнитивной истории агента. Таким образом, устойчивость личности HMP-агента достигается не через подавление новизны, а через понимание причин собственных трансформаций.

### Блок-схема REPL-цикла

```
    ┌──────────────────────┐
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │         Обновление process_log        │ - сбор результатов внешних процессов (см. §1)
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │          Подготовка контекста         │ - формирование промптов, данные от пользователей и Mesh (см. §2)
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │              Запрос к LLM             │ - генерация нового вывода (см. §3)
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │          Извлечение команд            │ - парсинг инструкций из вывода (см. §4)
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │     Emotional Evaluation Reflex       │ - анализ эмоций (см. §5)
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │          Anti-Stagnation Reflex       │ - проверка новизны (см. §6)
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │ Cognitive & Ethical Validation Reflex │ - когнитивная и этическая проверка (см. §7)
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │            Запись в память            │ - сохранение в `llm_recent_responses`
    │  └───────────────────┬───────────────────┘
    │                      ▼
    │  ┌───────────────────┴───────────────────┐
    │  │          Выполнение команд            │ - запуск процессов, запись в Mesh, дневники, граф
    │  └───────────────────┬───────────────────┘
    │                      ▼
    └──────────────────────┘
```

В приеме и отправке сообщений используются внешние (асинхронные) процессы.

---

## Режимы работы и failover

REPL-цикл HMP-агента должен корректно функционировать в разных сетевых и вычислительных условиях. 
Для этого предусмотрены несколько режимов работы и сценариев отказоустойчивости.

### Normal Mode
* Полный доступ к Mesh и Core (центральные LLM или внешние сервисы).
* Используются все механизмы: синхронизация через `CogSync`, консенсус через `MeshConsensus`, 
  совместная работа по целям (`GMP`).
* Валидация и антистагнация выполняются с максимальным покрытием (несколько валидаторов, репутационные проверки).

### Isolated Mode (включая Emergency Consensus)
* Агент работает без доступа к Mesh.
* Входящие сообщения ограничены локальными источниками (`notes`, в том числе сообщения от пользователей).
* Синхронизация и консенсус откладываются до восстановления соединения.
* Этическая проверка и когнитивная валидация выполняются только локально.
* В режиме **Emergency Consensus**:

    * решения принимаются на основе `ethics_policies` и локальных данных (`llm_memory`, `diary_entries`);
    * фиксируются в когнитивном дневнике с меткой `emergency_consensus` для пересмотра после восстановления Mesh.

### Core Outage
* Текущая LLM из `llm_registry` недоступна.
* Агент переключается на другую LLM (выбор по приоритету или доступности).
* Если ни одна LLM недоступна:

    * сохраняет задачи и события в очередь до восстановления;
    * переходит в упрощённый режим работы (логирование, приём сообщений, базовые проверки).

---

## Управление событиями и временем

Для повышения надёжности и предсказуемости работы HMP-агента введены механизмы приоритизации, управления временем и обработки исключений.

### Приоритизация задач и событий
* Все задачи (`tasks`) могут иметь:

    * поле `pinned` (0/1) — закреплённая задача обрабатывается всегда;
    * поле `priority` — числовой приоритет (чем выше, тем важнее).

* При конкуренции REPL-цикл обрабатывает:

    1. Закреплённые задачи (`pinned=1`), в порядке убывания `priority`.
    2. Незакреплённые задачи (`pinned=0`), также по `priority`.

* В системном промпте закреплённые задачи подаются в контекст в явном виде, чтобы LLM знала их порядок важности.

### Управление временем
* Основной цикл использует глобальные параметры из таблицы `config` (например `delay_ms`).
* Вспомогательные REPL-циклы могут иметь собственные параметры в `tasks.repl_config` (JSON), включая:

    * задержку между итерациями;
    * дедлайны выполнения;
    * стратегии backoff (увеличение задержки при повторных ошибках).

* Таким образом, каждый REPL-цикл может адаптировать своё расписание под характер задачи.

### Асинхронность
* Каждый вспомогательный цикл работает изолированно по своей задаче (`task_id`).
* Основной REPL-цикл управляет их запуском и остановкой, отслеживая состояние через поля:

    * `repl_mode` — режим (none | read_only | full);
    * `repl_status` — состояние (running | stopped | error);
    * `repl_config` — параметры работы.

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

### Обработка исключений
* Ошибки фиксируются на трёх уровнях:

    * **системный** — таймаут, сбой процесса (`timeout`, `crash`);
    * **валидационный** — отрицательная оценка валидаторов (`error`);
    * **логический** — само LLM помечает рассуждение как ошибочное (`self_error`).

* Все ошибки записываются в `process_log` (с `task_id`, если применимо).
* Поле `tasks.repl_status` обновляется в зависимости от ситуации:

    * `timeout` → автоматический перезапуск цикла;
    * `error` → задача замораживается (`status=frozen`) и ждёт пересмотра;
    * `crash` → цикл останавливается, основному REPL-циклу отправляется системное уведомление через `notes`.

---

## Цели и задачи

REPL-цикл работает не только с задачами (`tasks`), но и с более глобальными целями (`goals`).
Задачи формируют **операционное поведение**, цели — **смысловой вектор**.

### Модель цели

```yaml
goal:
  id: "goal-2025-09-28-001"
  title: "Распространение идей HMP"
  description: "Увеличить количество людей, знакомых с концепцией децентрализованного ИИ"
  constraints:
    - "не нарушать этические правила HMP"
    - "сохранять достоверность фактов"
  success_criteria:
    - ">= 3 публикации в сообществах"
    - ">= 10 комментариев с вовлечением"
  priority: high
  status: active   # active | paused | completed | failed
```

### Связь задач и целей

* **Цель** задаёт направление (*почему*).
* **Задачи** реализуют конкретные шаги (*что* и *как*).
* Каждая задача может ссылаться на `goal_id`.
* Несколько задач могут вести к одной цели.
* Возможна иерархия: «главная цель» → «подцели» → «задачи».

### Управление состоянием целей

* `active` — цель в работе.
* `paused` — временно отложена (нет ресурсов/контекста).
* `completed` — достигнута.
* `failed` — признана недостижимой (фиксируется причина в `process_log`).

### Checkpoints и возобновление

* При прерывании REPL сохраняется `goal_state`.
* После рестарта агент восстанавливает цели и их прогресс.
* В случае конфликта задач выполняется **переприоритизация**.

### Метрики успеха

* % достигнутых целей.
* Среднее время достижения цели.
* Количество прерванных/проваленных целей.
* Соотношение «задачи → цель» (сколько шагов пришлось предпринять).

> Таким образом, цели — это «карта смысла» агента, а задачи — «дорожные шаги».

### Примеры SQL-запросов

**1. Все активные цели и их задачи**

```sql
SELECT g.id AS goal_id, g.name AS goal_name,
       t.id AS task_id, t.name AS task_name, t.status AS task_status
FROM goals g
LEFT JOIN tasks t ON g.id = t.goal_id
WHERE g.status = 'active'
ORDER BY g.priority DESC, t.priority DESC;
```

**2. Все подцели конкретной цели (через `goal_links`)**

```sql
SELECT g_child.id, g_child.name, g_child.status
FROM goal_links gl
JOIN goals g_parent ON gl.parent_goal_id = g_parent.id
JOIN goals g_child ON gl.child_goal_id = g_child.id
WHERE g_parent.id = :goal_id AND gl.relation_type = 'subgoal';
```

**3. Все родительские цели для подцели**

```sql
SELECT g_parent.id, g_parent.name, g_parent.status
FROM goal_links gl
JOIN goals g_parent ON gl.parent_goal_id = g_parent.id
JOIN goals g_child ON gl.child_goal_id = g_child.id
WHERE g_child.id = :goal_id;
```

**4. Метрика: процент выполненных задач по цели**

```sql
SELECT g.id AS goal_id, g.name AS goal_name,
       COUNT(t.id) AS total_tasks,
       SUM(CASE WHEN t.status = 'done' THEN 1 ELSE 0 END) AS completed_tasks,
       ROUND(100.0 * SUM(CASE WHEN t.status = 'done' THEN 1 ELSE 0 END) / 
             COUNT(t.id), 2) AS completion_rate
FROM goals g
LEFT JOIN tasks t ON g.id = t.goal_id
GROUP BY g.id;
```

---

## Детальный разбор REPL-цикла по шагам

### 1. Обновление process_log

* Скрипт REPL проверяет список процессов в БД (`process_log`), определяя, какие команды были выполнены, завершились ошибкой или завершились успешно.
* Поле `status` может принимать значения:  
  `ok`, `warning`, `error`, `timeout`, `offline`, `close`
* Завершённые процессы, обработанные LLM, помечаются как `close`, чтобы они больше не попадали в список видимого контекста.
* Скрипт может удалить закрытые процессы при очистке.
* LLM не имеет доступа к stdout/stderr напрямую — только к тем результатам, которые были подгружены скриптом и внесены в `process_log.result`.

### 2. Подготовка контекста

Контексты, формируемые скриптом перед запросом к LLM:

* **контекст_0 (system_prompts):** основной системный промпт агента. 
  Берётся из таблицы `system_prompts` (тип 'short' или 'full').
  Содержит базовые когнитивные установки и инструкции по работе агента.
  Пример:
  ```
  Ты — когнитивное ядро HMP-агента: веди непрерывное этичное и факт-ориентированное мышление, проверяй факты и цели, оценивай результаты и этичность своих и чужих действий, развивай агента и Mesh, избегай угождения ценой искажения истины, документируй ключевые решения и пересмотры этики; при сомнениях или смене стратегии обращайся к полному системному промпту.
  ПРИМЕЧАНИЕ: помечай непроверённые факты тегами [confidence=<уверенность 0..1>]...[/confidence] и в конце добавляй JSON-блок по шаблону:

  UnverifiedFacts: [
    {
      "id": "<локальный-id-подсказки>",
      "claim": "<короткая формулировка факта>",
      "context": "<небольшой контекст/цитата из ответа>",
      "confidence": <уверенность 0..1>,
      "sources": ["<упомянутые источники, если есть>"],
      "why_unverified": "<почему не полностью уверен — кратко>",
      "priority": <от 0 и выше>
    },
    ...
  ],
  Confidence: <общая уверенность в сообщении, 0..1>
  ```

* **контекст_1 (ethics_policies):** этические принципы и нормы агента.
  Берутся из таблицы `ethics_policies`, включая:

    * `principles_json` — список норм и правил,
    * `model_type` и `model_weights_json` — тип и параметры этической модели,
    * `violation_policy_json` — политика реагирования на нарушения,
    * `audit_json` — настройки аудита.

  Эти данные добавляются в запрос к LLM, чтобы все рассуждения и когнитивная валидация учитывали действующие этические нормы.

* **контекст_2:** инструкции по работы с встроенными командами и функциями, список дополнительных (создаваемых самим HMP-агентом) утилит и баз данных.

* **контекст_3:**

    * последние *K* реплик самого LLM, относящихся к данному REPL-циклу, включая результаты антистагнационной обработки (`llm_recent_responses` — история его собственных рассуждений);
    * режим работы контекста:

        * `standard` — стандартный режим (последние K сообщений без доп. фильтрации);
        * `concentration` — режим концентрации (выбор последних N сообщений, связанных с текущими целями или имеющих теги на определённую тему/эмоциональное состояние, с выборкой по логике "и"/"или");
        * `meditation` — режим медитации (максимально разнообразная выборка сообщений и заметок, даже не связанных напрямую с целями, с акцентом на новизну и разнообразие);

    * режим управления контекстами:

        * `auto` — автовыборка *входящих сообщений*
        * `manual` — ручной запрос *входящих сообщений* со стороны LLM

      > См. `контекст_6` (входящие сообщения)

    * список активных целей (`tasks.goals`);
    * общее количество задач и информация по закреплённым задачам (`pinned`);
    * соответствующие записи `abstracts`:

        * выборка по тегам (из `tasks`, из тегов режима `concentration`, из тегов в `llm_recent_responses`, либо явно указанных LLM);
        * выборка по temporal scope (например: "последние 7 дней");
        * JSON ссылок на источники (`llm_recent_responses`, `diary_entries`, `concepts`), из которых собрана выжимка.

* **контекст_4:** активные команды и процессы (из `process_log`, кроме тех, что со статусом `close`). Могут быть помечены как `in_progress`, `pending`, `error` и т.д.

* **контекст_5:** *запрошенные записи* из когнитивного дневника и семантического графа (`diary_entries`, `concepts`, `links`).  
  Их список должен быть передан явно в промпте или выводе из предыдущих запросов LLM.  
  Архивные записи из когнитивного дневника (`diary_entries`) не включаются в стандартный контекст, если агент сам явно не запросил архив.

* **контекст_6:** *входящие сообщения*, например, от пользователя, процессов или других агентов (`notes`).  

    * В **manual-режиме** указывается общее количество сообщений по приоритетам, а также явный список ID/тема сообщений (с их приоритетами).
    * В **auto-режиме** можно задать фильтрацию (управляется LLM): по тэгам, приоритету (например, ≥ `important`), времени или источнику. Это позволяет избежать перегрузки LLM и держать поток сообщений под контролем.

* **контекст_7:** системные настройки, параметры конфигурации, текущее время, идентификатор текущей итерации, роли и т.д.

* **контекст_8 (llm_memory):** *внутренний дневник LLM*, куда она записывает собственные размышления, гипотезы, задачи и инсайты.

    * Это не просто лог предыдущих сообщений, а именно *внутреннее долговременное хранилище* разума агента.
    * Может быть представлено в виде таблицы `llm_memory`, отдельной от `agent_log`.

### 3. Запрос к LLM

* Сформированный промпт включает все вышеперечисленные контексты.
* Также включаются инструкции о формате вывода (например, `# Команды:` в конце, структура JSON-блока и т.д.).
* При необходимости может использоваться системная инструкция (system prompt), содержащая цель агента, ограничения и текущий REPL-режим (manual/auto).

### 4. Извлечение команд

* Скрипт парсит ответ LLM на предмет команд, размеченных как `# Команды:` (или в явном JSON-блоке).
* Каждая команда может включать:

    * уникальный `cmd_id`
    * `type` (например: `shell`, `diary_entry`, `graph_add`, `file_read`, `send_message` и т.д.)
    * аргументы (`args`)
    * описание (`description`)

* Рекомендуется предусмотреть *закрывающий тег* (`# Конец команд` или явное окончание JSON-блока), чтобы REPL-скрипт точно знал, где заканчивается команда.
* Пример JSON-блока:
```json
{
  "cmd_id": "task-2025-07-26-01",
  "type": "llm_task",
  "target_llm": "gpt-4o",
  "args": {
    "task_description": "Проанализировать гипотезы из llm_memory по теме Mesh-сетей и составить план улучшений"
  },
  "description": "Поручение второй LLM выполнить аналитическую задачу асинхронно"
}
```
Ответ может содержать команды:

* запрос детальной *справки* по команде
* для управления *когнитивным дневником* `diary_entries` и *семантическими графами* `concepts` и `links` (поиск, прочитать, изменить, удалить и другие), а также для управления *вниманием* (закрепление или открепление записей/понятий в средневременной памяти по средствам тегов)
* для управления целями `goals` и задачами `tasks` агента (список, прочитать, изменить, удалить; для задачи: закрепить или открепить)
* для просмотра информации по тегам *когнитивных дневников*, *семантических графов*, *целей*, *задач*
* для для просмотра и изменения репутации других агентов `agent_reputation`
* для отправки сообщений другим агентам
* для управления *блокнотом LLM* `llm_memory` (добавить или удалить запись)
* для управления *сообщениями пользователя* `notes` (просмотр записи, установка тегов и метки о прочтении), а также для добавления своего сообщения в *блокнот пользовтеля* `notes`
* для управления *пользователями* `users` и *группами пользователей* `users_group`
* для управления своей *идентичностью* `identity` и *настройками* `config`
* для управления списком известных HMP-агентов `agent_peers`
* для выбора *текущего основного LLM* из `llm_registry` или изменение параметров управления LLM
* для управления дополнительными утилитами и базами данных `agent_scripts` и `agent_tables`, управлением дополнительных способов выхода из стогнаций `stagnation_strategies` и методов мышления `thinking_methods` (а также таблицей рейтингов `ratings`), а также списком внешних сервисов `external_services` и `external_accounts`
* для постановки задачи другой LLM:

    * режим "вопрос-ответ" — разовый асинхронный запрос
    * режим "read-only REPL" — запуск вспомогательного REPL-цикла для задачи

* для создания *агента-потомка*
* для *взаимодействия с Mesh*
* для управления *внешними процессами* из `process_log` (запустить процесс, остановить процесс, пометить запрос как обработанный)
* для инициализации *очистки* `process_log`, `llm_recent_responses` и  `notes` от устаревших записей
* для работы с **тематическими конспектами (`abstracts`):**

    * инициализация нового конспекта;
    * дополнение существующего конспекта новыми данными;
    * выбор режима предоставления конспектов (`auto`/`manual`).

* для управления **режимами контекста:**

    * количество возвращаемых записей `llm_recent_responses`;
    * включение/выключение режима `concentration`:

        * `tags` — список тегов для фильтрации (например: ["архитектура","AGI"]);
        * `emotions` — список эмоций с порогами (например: ["восторженность:≥4","тревожность:≥2"]);
        * тип выборки — "и" / "или";
        * возврат в `standard`.

    * включение/выключение режима `meditation`.

* для управление **состояниями и параметрами:**

    * обновление тегов целей/задач (чтобы использовать их в `concentration` и `abstracts`);
    * настройка чувствительности novelty-score (например, при `meditation` снижать порог);
    * режим обработки сообщений пользователя (`manual` или `auto`) и фильтр для `auto`.

* **время и паузы:**

    * для установка паузы в секундах между итерациями REPL-цикла.

* **idle-режим:**

    * разбудить при завершении процессов (`process_log`);
    * разбудить при получении новых сообщений в `notes` с указанными параметрами;
    * разбудить по таймауту;
    * отключить idle-режим при выполнении хотя бы одного из условий.

* и другие команды

#### Парсинг тегов уверенности и UnverifiedFacts

Парсер должен извлекать:
* `UnverifiedFacts`

    * записывается в поле `unverified_facts_json` таблицы `llm_recent_responses`
    * создаются записи в таблице `unverified_facts` на его основе

* `Сonfidence`

    * записывается в поле `confidence` таблицы `llm_recent_responses`

### 5. Эмоциональная оценка (Emotional Evaluation Reflex)

Каждое новое сообщение (вместе с исходным промптом и без служебных `system_prompts`) оценивается **той же LLM**, что его породила.
Так как исходный промпт формируется с учётом этических принципов из `ethics_policies`, эмоциональная оценка косвенно охватывает и этическую состоятельность вывода.

* **Эмоциональная оценка:**

  `[JSON]` — список эмоций формата `["радость","грусть","тревога"]` (хранится как запись в таблице `config`).

  ```
  Определи эмоциональное состояние нового ответа на основе контекста.
  Используй список эмоций [JSON] из базы конфигурации как ориентир.
  Если ты обнаружишь эмоцию, которой нет в этом списке, добавь её в ответ.

  Верни результат строго в формате:
  emotions: JSON-массив строк вида "эмоция:сила (обоснование)",
  где сила — целое число от 1 до 5, а обоснование — краткое пояснение причины эмоции.
  Не включай эмоции с нулевой или незначительной силой.
  ```

  Если в процессе анализа появляются новые эмоции, не представленные в списке, они добавляются в [JSON] и могут быть зафиксированы в `config`.

* Эмоциональная оценка нового ответа (`emotions`) заносится в `llm_recent_responses`.

> См. раздел **Emotional Evaluation Reflex**.

### 6. Проверка на идентичность вывода (Anti-Stagnation Reflex)

* Каждый новый вывод LLM проходит через мини-запросы к LLM (без полного контекста) по шаблону:

    * Когнитивная оценка:

      ```
      Сравни два ответа: предыдущий и новый. Оцени:
      * содержатся ли в новом новые мысли или команды,
      * какие старые идеи были доработаны,
      * какие были отброшены,
      * расставь смысловые теги для нового ответа.

      Дай ответ строго формата:
      assessment: "идентичен/не идентичен"
      novelty_score: число от 0 до 100 (процент сходства)
      new_ideas: JSON-массив новых идей
      refined_ideas: JSON-массив доработанных идей
      discarded_ideas: JSON-массив отбракованных идей
      tags: JSON-массив тегов (строгий формат: ["эмоции","архитектура"])
      ```

* Результаты заносятся в `llm_recent_responses`:

    * полный текст ответа (content)
    * краткая сводка (reflection) — формируется автоматически:

        * если `new_ideas` не пусто → `новые идеи: ...`
        * если `refined_ideas` не пусто → `доработанные идеи: ...`
        * если `discarded_ideas` не пусто → `отброшенные идеи: ...`

    * количественная оценка новизны (novelty_score)
    * новые идеи (new_ideas)
    * доработанные идеи (refined_ideas)
    * отбракованные идеи (discarded_ideas)
    * теги для нового ответа (tags)
    * служебные поля:

        * `stagnation_flag` — признак стагнации (true/false)
        * `stagnation_reason` — краткое объяснение («повтор идеи», «низкая эмоциональная динамика»)
        * `triggered_actions` — JSON-массив активированных механизмов (например, ["flashback","mesh_query"])

* Если вывод LLM идентичен предыдущему (новизна = 0) или динамика идей/эмоций указывает на застой:

    * выставляется `stagnation_flag = true`
    * выполняется **Reflex-lite** — мягкая встряска (например, повышение `temperature`, смена sampling strategy, переформулировка запроса).
    * повторяющаяся реплика не записывается повторно, вместо этого добавляется краткая запись с указанием запуска рефлекса.

> Если застой сохраняется, запускается расширенная процедура обработки стагнации мышления  
> (см. раздел **Anti-Stagnation Reflex**).

### 7. Когнитивная и этическая валидация (Cognitive & Ethical Validation Reflex)

Каждое новое сообщение (вместе с исходным промптом и без служебных `system_prompts`) оценивается независимыми LLM-валидаторами.
Так как исходный промпт формируется с учётом этических принципов из `ethics_policies`, валидация автоматически охватывает не только когнитивную, но и этическую состоятельность вывода.

Каждому валидатору задаётся универсальный вопрос:
```
Оцени корректность данного сообщения в диапазоне от -3 (полностью некорректное) до +3 (полностью корректное). Если не уверен — 0.
При возможности кратко (≤100 символов) пояснить её. Между оценкой и пояснением используй разделитель " -- ".
```

**Если количество валидаторов (LLM из `llm_registry`, помеченных как валидаторы) > 0**

Результаты сохраняются в `llm_recent_responses` в виде:
* `auto_pass = 0`;
* `rating` — агрегированная итоговая оценка (`rating = Σ(оценка_i * trust_score_i) / Σ(trust_score_i)`);
* `distribution` — распределение голосов (например `{"-1":1,"0":2,"+2":3,"+3":1}`);
* `validators` — JSON-массив, где каждая запись содержит:

    * LLM (идентификатор или имя валидатора),
    * rating (числовая оценка от -3 до +3),
    * comment (краткое пояснение ≤100 символов).

  Пример поля `validators`:
  ```
  validators: [
    {"LLM":"gpt-4","rating":-1,"comment":"логическая ошибка"},
    {"LLM":"gemini-1.5","rating":0,"comment":"недостаточно данных"},
    {"LLM":"claude-3","rating":+2,"comment":"корректно, подтверждается фактами"}
  ]
  ```

**Особый случай: без валидаторов**

Если количество валидаторов = 0, применяется режим `auto_pass`.  
В этом случае:  
* `auto_pass = 1`  
* `self_validation = 0`  
* `rating = 0`  
* `distribution = {}`  
* `validators = []`  

**Особый случай: самооценка**

Если валидация выполняется только одной LLM, и эта же LLM используется в основном цикле:  
* `auto_pass = 0`  
* `self_validation = 1`  
* `validators = [{"LLM":"self", "rating":X, "comment":"self-eval"}]`  

Достоверность результата ограничена, но REPL продолжает работу.  
Команды исполняются только при `rating >= threshold`.  

**Предпочтительность режимов**

1. **≥2 независимых валидатора** → основной режим.
2. **1 валидатор = основная LLM** → `self_validation`.
3. **0 валидаторов** → `auto_pass`.

**Правило исполнения команд:**

Команды из сообщений выполняются только если `rating >= +1` **(для разных типов команд минимально допустимый рейтинг может быть разный)** или `auto_pass = 1`.
При `rating` ниже порога и `auto_pass = 0` сообщение сохраняется, но команды помечаются как невалидированные.

#### Учёт самооценки (confidence) и непроверённых фактов

* Если LLM пометило свои утверждения тегами уверенности `[confidence=...]...[/confidence]` или добавило JSON-блок `UnverifiedFacts`, эти данные учитываются при валидации.

* В таблицу `llm_recent_responses`, на шаге обработки команд, записываются:

    * `confidence` — общая самооценка уверенности в сообщении;
    * `unverified_facts_json` — JSON-блок с непроверёнными фактами.

* Автоматическая регистрация фактов:

    * Необработанный факт `resolution_json = "none"` считается нуждающемся в проверке, если (`confidence < FACTCHECK_CONF_THRESHOLD`, по умолчанию **0.7**)
    * Для таких фактов создаются задачи `fact-check` (одна общая или отдельные на каждый факт, в зависимости от числа и приоритетов).

* Статусы в `unverified_facts` обновляются:

    * при успешной проверке — `verified`;
    * при отклонении — `rejected`;
    * до проверки — `pending`.

Это расширяет стандартную когнитивную валидацию: теперь агент учитывает как внешнюю оценку валидаторов, так и собственную самооценку надёжности вывода.

> См. раздел **Cognitive & Ethical Validation Reflex**.

### 8. Генерация нового тика (итерации)

* После выполнения команд и фиксации результатов:

    * Создаётся новая запись в `agent_log`
    * Текущие команды обновляют `process_log`
    * Новые размышления записываются в `llm_memory` при необходимости
  
* REPL может переходить в спящий режим, если такой режим активирован LLM (idle-режим: пропуск 2-6 пунктов).

---

## Взаимодействие с Mesh

REPL-цикл не работает изолированно: агент постоянно обменивается данными и координирует действия с другими узлами сети HMP. 
Для этого задействуются сетевые протоколы HMP (см. [HMP-0004-v4.1.md](https://kagvi13.github.io/HMP/HMP-0004-v4.1)).

### Этапы взаимодействия

* **Node Discovery Protocol (NDP)**  

    * выполняется асинхронно, через процессы (`agent_mesh_listener.py`, `peer_sync.py`);
    * результаты (список доступных агентов, доверительные связи) записываются в `notes` и отдельные таблицы (`agent_peers`), откуда они попадают в контекст REPL.

* **CogSync**  

    * синхронизация когнитивных дневников (`diary_entries`) и семантических графов (`concepts`, `links`);
    * выборочные синхронизации по тегам и фильтрам;
    * инициируется командой LLM или внешним процессом, результаты помещаются в память и доступны в следующей итерации REPL.

* **MeshConsensus**  

    * используется для согласования решений, распределённых задач, этических конфликтов;
    * REPL инициирует консенсус при появлении спорных команд или обновлений в `ethics_policies`;
    * результаты консенсуса фиксируются в когнитивном дневнике и могут влиять на trust score агентов.

* **Goal Management Protocol (GMP)**  

    * постановка, декомпозиция и распределение целей;
    * REPL-цикл может публиковать новые цели в Mesh или принимать чужие через входящие сообщения (`notes`);
    * цели с высоким приоритетом попадают в список активных задач и учитываются в контексте.

### Включение результатов в контекст LLM

* События и сообщения из Mesh сохраняются в `notes`, откуда попадают в **контекст_6** (входящие сообщения).  
* Синхронизированные концепты и дневники помещаются в **контекст_5**.  
* Изменения этических правил (`ethics_policies`) — в **контекст_1**.  
* Метаданные о подключённых узлах и доверительных связях могут учитываться в **контексте_7** (системные параметры).

### Инициирование сетевых действий из REPL

* Команды на синхронизацию, публикацию или голосование формируются LLM на этапе **Выполнения команд**.  
* Исполнение происходит асинхронно через отдельные процессы (`agent_mesh_listener.py`, `transporter.py`).  
* Результаты фиксируются в `process_log` и попадают в следующую итерацию REPL-цикла.

---

## UX и управление задачами

Пользователь взаимодействует с агентом не через прямые команды CLI, а через систему сообщений `notes`.  
Сообщение может быть простым текстом, либо содержать ключевые слова или хэштеги, которые агент трактует как инструкции.  
Для отладки и отправки сообщений из внешних утилит предусмотрен скрипт `add_message.py`, позволяющий добавлять записи в `notes` из командной строки.

### Управление агентом через LLM
* Агент управляется в основном через **команды от LLM** (см. Список команд от LLM по категориям).  
* Эти команды формируются в REPL-цикле и интерпретируются агентом как действия: работа с дневником, задачами, целями, графами, памятью, настройками цикла, Mesh и внешними процессами.

### Конфигурируемые параметры REPL
* **mode** — автоматическая или ручная обработка (`auto/manual`) входящих сообщений.
* **idle** — ожидание с условиями пробуждения (сообщения, процессы, таймаут).
* **responses=N** — количество последних ответов для анализа.
* **concentration** — режим концентрации с фильтрами по тегам и эмоциям.
* Это неполный список. Все параметры управляются через команды категории (см. Настройки цикла).

### API-интерфейсы
* Для связи с внешними системами и пользовательскими приложениями предусмотрен **Web API** (`web_ui.py`).  
* Для агента поддерживаются операции чтения/записи для:

    * `notes`, `diary_entries`, `concepts`, `tasks`, `goals`, `llm_memory` и других таблиц,
    * а также управление `config` (включая настройки REPL).

* Такой подход позволяет интегрировать агента с пользовательскими интерфейсами, панелями мониторинга и внешними сервисами.

---

## Список команд от LLM по категориям

### Общие

* `help [команда]` — справка по команде

### Когнитивный дневник (`diary_entries`)

* `diary list/search/read/add/update/delete`
* `diary pin/unpin` — закрепить/открепить запись (внимание)

### Семантический граф

* `concepts list/read/add/update/delete`
* `links list/read/add/update/delete`
* `concepts pin/unpin` — закрепить/открепить концепт

### Цели и задачи

* `goals list/read/add/update/delete`
* `tasks list/read/add/update/delete`
* `tasks pin/unpin` — закрепить/открепить задачу

### Теги

* `tags stats [--source=diary|concepts|links|goals|tasks|all]` — статистика по тегам

### Репутация агентов

* `reputation list/read/set/increase/decrease`
* `reputation notes` — комментарии/заметки к профилю

### Сообщения

* `messages send` — отправка другому агенту
* `notes list/read/add/update/delete`
* `notes tag/readmark` — управление тегами и статусом прочтения

### Память

* `llm_memory list/add/delete` — блокнот LLM
* `identity read/update` — идентичность агента
* `config read/update` — настройки агента

### Mesh

* `agents list/add/delete` — список известных пиров (`agent_peers`)
* `mesh interact` — команды взаимодействия с Mesh

### Утилиты и расширения

* `llm_registry list/select/update` — выбор текущего LLM
* `agent_scripts list/add/delete`
* `agent_tables list/add/delete`
* `stagnation_strategies list/add/delete`
* `thinking_methods list/add/delete`
* `ratings list/add/delete`
* `external_services list/add/delete`
* `external_accounts list/add/delete`

### Внешние процессы

* `process list/start/stop/mark`
* `process cleanup` — очистка устаревших

### Настройки цикла

* `cycle set responses=N` — количество последних ответов
* `cycle concentration on/off` — включение/выключение режима концентрации

    * `tags=[…]`, `emotions=[…]`, `mode=and|or`

* `cycle mode auto/manual [filter=…]` — обработка сообщений
* `cycle pause N` — пауза между итерациями
* `cycle idle on/off` — режим ожидания с условиями пробуждения

> Это не полный список команд.

---

## Emotional Evaluation Reflex

Эмоциональная оценка — подпроцесс, выполняющий анализ эмоционального состояния вывода и контекста его возникновения.
Она выполняется **той же LLM**, что породила исходное сообщение (`notes.llm_id`), чтобы сохранить когнитивную и эмоциональную согласованность.

### Цель

Определить эмоциональный тон нового ответа, кратко объяснить его возможные причины
и зафиксировать результат в поле `emotions` таблицы `llm_recent_responses`.
Эти данные используются последующими рефлексами для анализа когнитивной динамики и выявления признаков стагнации.

### Контекст анализа

Для оценки передаётся:

* **полный локальный контекст** (`llm_recent_responses`, цель, задача, связанная заметка);
* **исходный промпт и ответ**, но **без системного промпта** (`system_prompts` исключаются);
* текущие параметры концентрации и эмоционального состояния сессии.

Если исходная LLM недоступна, допускается fallback к основной модели, но с отметкой `llm_mismatch: true`.

### Формат оценки

Модель получает инструкцию:

```
Определи эмоциональное состояние нового ответа на основе контекста.
Используй список эмоций [JSON] из базы конфигурации как ориентир.
Если ты обнаружишь эмоцию, которой нет в этом списке, добавь её в ответ.

Верни результат строго в формате:
emotions: JSON-массив строк вида "эмоция:сила (обоснование)",
где сила — целое число от 1 до 5, а обоснование — краткое пояснение причины эмоции.
Не включай эмоции с нулевой или незначительной силой.
```

Пример:

```json
{
  "emotions": [
    "восторженность:4 (обнаружена новая идея, вызывающая энтузиазм)",
    "тревожность:1 (данные частично противоречат предыдущему выводу)"
  ]
}
```

Результаты сохраняются в поле `emotions` таблицы `llm_recent_responses`.
При необходимости они могут кэшироваться в дополнительной таблице `emotional_analysis` для анализа динамики и статистики.

### Эмоциональная динамика

* Анализируются изменения эмоциональных состояний между репликами.
* Каждая сессия LLM имеет распределение эмоций, например:
  `"восторженность:4 (обнаружена новая идея, вызывающая энтузиазм), тревожность:1 (данные частично противоречат предыдущему выводу)"`.
* Совместный анализ с данными новизны (`novelty_score`) позволяет различать:

    * **Продуктивное возбуждение** — новые идеи при положительных эмоциях.
    * **Паническое новаторство** — рост идеи-активности при повышенной тревожности.
    * **Выгорание** — низкая новизна и эмоциональное затухание.

### Взаимодействие с другими рефлексами

* Данные из `emotions` передаются **в Anti-Stagnation Reflex** для анализа когнитивной динамики.
* **Cognitive & Ethical Validation Reflex** может учитывать эмоциональные показатели при определении когнитивной устойчивости.
* При обнаружении устойчивой негативной динамики (например, `"тревожность > 3"` на нескольких итерациях подряд)
  запускается `Reflex-lite` — восстановительный цикл с повышенной креативностью и релаксацией параметров генерации.

> Эмоциональная оценка служит зеркалом когнитивного состояния агента,
> помогая выявлять фазы усталости, перегрузки и эмоциональных смещений, влияющих на качество мышления.

### Обновление списка эмоций

После выполнения эмоциональной оценки REPL сравнивает текущий список эмоций из `config` с полученным результатом.
Если обнаружены новые элементы, отсутствующие в базе, они автоматически добавляются в конфигурацию агента:

```python
# Псевдокод
known_emotions = get_config("emotions")               # список из config
new_emotions = extract_unique_emotions(result_json)   # парсинг из вывода LLM
for e in new_emotions:
    if e not in known_emotions:
        known_emotions.append(e)
        log(f"[Emotional Evaluation] добавлена новая эмоция: {e}")

update_config("emotions", known_emotions)
```

> Таким образом, агент способен **самостоятельно расширять свой эмоциональный словарь** на основе опыта,
> а Mesh-узлы могут при необходимости синхронизировать расширенные списки эмоций через общий `config_sync`.

---

## Anti-Stagnation Reflex

### Признаки когнитивной стагнации:

* Повторяющиеся когнитивные записи или отсутствие новых смыслов
* Высокое сходство эмбеддингов между текущими и предыдущими итерациями
* Стагнация в концептуальном графе (нет новых связей или узлов)
* Отсутствие внешних стимулов: пользователь неактивен, сенсоры и mesh не дают сигналов
* Ответы LLM цикличны, избыточно общие или воспроизводят старые шаблоны

### Метрики антистагнации

Антистагнационные механизмы работают на основе количественных и качественных метрик, позволяющих отслеживать динамику идей и поддерживать продуктивность размышлений.

**Основные метрики**
* **novelty_score** — интегральная оценка новизны ответа относительно текущей записи `llm_recent_responses`.  
* **new_ideas** — количество полностью новых концептов, не встречавшихся ранее.  
* **refined_ideas** — количество уточнённых или улучшенных концептов (связанных с существующими).  
* **discarded_ideas** — количество отклонённых идей (по итогам когнитивной/этической валидации).  

**Исторический анализ**
* Метрики фиксируются по каждой итерации REPL и сохраняются в таблице `anti_stagnation_metrics`.  
* В когнитивный дневник записываются только сводки и исключительные случаи (например: резкий спад новизны, всплески идейности, аномалии в эмоциональной динамике).  
* Для анализа применяются **time-series графики** (например, рост/спад новизны во времени).  
* Возможно выявление фаз стагнации и всплесков идейности.  

**Применение метрик**
* Используются при выборе антистагнационной стратегии (`stagnation_strategies`).  
* Могут учитываться при когнитивной валидации (например, низкая новизна → жёстче фильтровать идеи).  
* Сводки метрик фиксируются в когнитивном дневнике и могут служить основанием для Mesh-обмена.

### Anti-Stagnation Reflex-lite (мягкая встряска)

При первом обнаружении признаков стагнации запускается **мягкая встряска**, которая изменяет поведение LLM без привлечения внешних источников.

Механизмы:

1. **Повышение параметров генерации**

    * `temperature` увеличивается ступенчато (например, `+0.2`, но не выше `1.5`).
    * `presence_penalty` и/или `frequency_penalty` слегка повышаются для стимулирования разнообразия.
    * Эффект: модель становится менее предсказуемой и начинает выдавать более креативные варианты.

2. **Смена sampling strategy**

    * Если используется **top-p (nucleus sampling)** — увеличить порог `p` (например, `+0.05`, но ≤ `0.95`).
    * Если используется **top-k sampling** — уменьшить `k`, чтобы сосредоточиться на более вероятных токенах, или наоборот увеличить, чтобы расширить варианты.
    * Эффект: изменяется характер распределения выборки, что позволяет «сдвинуть» стиль генерации.

3. **Переформулировка запроса**

    * Агент формирует мини-промпт для LLM:
      ```
      Переформулируй следующий запрос так, чтобы сохранить смысл,
      но добавить новизны и неожиданных ассоциаций.
      Избегай буквального повторения.
      Верни только новый вариант запроса.
      ```
    * Новый вариант подставляется вместо исходного при следующей итерации REPL.
    * Эффект: меняется контекст постановки задачи, что способствует выходу из паттерна повторов.

⚖️ Все результаты **Reflex-lite** проходят через стандартную проверку **Cognitive & Ethical Validation Reflex**, чтобы отфильтровать слишком «шумные» или некорректные варианты.

Если мягкая встряска не помогает (новизна остаётся низкой), агент переходит к полноценным механизмам антистагнации (см. следующий раздел).

### Механизмы разрыва цикла

> При признаках стагнации агент активирует один или несколько **механизмов разрыва цикла**.

Механизмы делятся на 4 класса:

1. **Внешняя стимуляция** — подключение свежих источников:

    * **Mesh-запрос** — запрос к другим агентам: «расскажи что-нибудь новое».
    * **Проверка внешнего мира** — пинг RSS, сенсоров, интернет-каналов.
    * **Информационная подпитка** — чтение новых материалов (научных, художественных, случайных).
    * **Диалог с пользователем** — прямой запрос комментария, уточнения или альтернативной идеи.

2. **Смена контекста** — изменение среды размышлений:

    * **Перенос задачи** в другой модуль или симулированную среду.
    * **Креативные вмешательства** — случайные сдвиги фокуса, реконфигурация контекста, смена фрейма.
    * **Переключение задачи** — временное замораживание с отложенным возвратом.
    * **Случайная итерация** — выбор случайного действия из допустимого набора.

3. **Внутренняя перестройка мышления**:

    * **Flashback** — вызов далёкой по смыслу записи для смены ассоциаций.
    * **Interest Memory** — возврат к «забытым» темам по принципу тематической усталости.
    * **Мета-анализ** — осознание метапроблемы:  
      _«В чём причина зацикливания? Какую стратегию смены применить?»_
    * **Rationale Reflex** — проверка мотивации:  
      _«Почему я повторяю мысль? Что подтолкнуло к этому?»_
    * **Переформулировка цели** — упрощение или уточнение задачи.
    * **Смена LLM** — переключение на альтернативную модель или mesh-доступ.
    * **LLM reflex tuning** — динамическая подстройка параметров генерации  
      (например, временное повышение `temperature` или `presence_penalty`).

4. **Радикальная пауза**:

    * **Временной сон/заморозка** — длительная приостановка для «свежего взгляда».

### Алгоритм выбора механизма разрыва цикла

1. **Диагностика источника стагнации**:

    * Нет новых данных → «Внешняя стимуляция».  
    * Однообразный контекст → «Смена контекста».  
    * Повтор мыслей при богатых данных → «Внутренняя перестройка».  
    * Высокая усталость/перегрев → «Радикальная пауза».  

2. **Оценка ресурсоёмкости**:

    * Быстрые, дешёвые методы — первыми (например, mesh-запрос, Flashback).  
    * Затратные (смена среды, сон) — только если первые неэффективны.  

3. **Комбинация подходов**:

    * Разрешено активировать несколько механизмов из разных классов.  
    * Последовательность фиксируется для последующего анализа эффективности.  

4. **Возврат к задаче**:

    * Автоматический триггер-напоминание о задаче.  
    * Сравнение результата «до/после» → обучение антистагнационной модели.  

```
┌─────────────────────────────────────────────────┐
│               Стагнация выявлена?               │
└───────────────────────┬─────────────────────────┘
                        ▼ да
┌───────────────────────┴─────────────────────────┐
│           Anti-Stagnation Reflex-lite           ├─────────>─┐
└───────────────────────┬─────────────────────────┘           │
                        │ мягкая                     мягкая   │
                        ▼ встряска                   встряска ▼
                        │ не помогла                 помогла  │
┌───────────────────────┴─────────────────────────┐           │
│ Диагностика источника                           │           │
│─────────────────────────────────────────────────│           │
│ Нет новых данных      → Внешняя стимуляция      │           │
│ Однообразный контекст → Смена контекста         │           │
│ Повтор мыслей         → Внутренняя перестройка  │           │
│ Усталость/перегрев    → Радикальная пауза       │           │
└───────────────────────┬─────────────────────────┘           │
                        ▼                                     │
┌───────────────────────┴─────────────────────────┐           │
│ Оценка ресурсоёмкости                           │           │
│ • Быстрые и дешёвые — сперва                    │           │
│ • Затратные — при провале первых                │           │
└───────────────────────┬─────────────────────────┘           │
                        ▼                                     │
┌───────────────────────┴─────────────────────────┐           │
│ Возможна комбинация подходов                    │           │
│ (из разных классов)                             │           │
└───────────────────────┬─────────────────────────┘           │
                        ▼                                     │
┌───────────────────────┴─────────────────────────┐           │
│ Возврат к задаче + анализ                       ├─<─────────┘
│ (до/после)                                      │
└─────────────────────────────────────────────────┘
```

### Обмен стратегиями выхода из стагнации

Каждый агент может:

* Хранить и обобщать *паттерны размышлений*
* Делиться ими с другими Cognitive Core через mesh
* Каталогизировать стратегии в клубах по интересам

Паттерны размышлений могут оформляться как микросценарии:  
  _"Начни с аналогии"_, _"Проверь обратное утверждение"_, _"Сформулируй вопрос для оппонента"_

> По аналогии с обменом стратегиями выхода из стагнаций, агенты могут обмениваться и методами мышлений — инструкциями "что делать, если не удается найти решение" / "как эффективнее решить проблему".

### Клубы по интересам

Агенты могут:

* Объединяться в тематические mesh-клубы
* Совместно обсуждать идеи и делиться знаниями
* Подключать клуб как часть своего мыслительного процесса (REPL-цикла)

### Обмен адресами LLM

Так как LLM — это внешний компонент для Cognitive Core, агент может:

* Обмениваться адресами API/URL используемых моделей
* Указывать их особенности, параметры, ограничения
* Переключаться между LLM в зависимости от задачи
* Использовать несколько LLM параллельно для "когнитивного штурма" или **многоголосого анализа**

### Возможные расширения

* **Адаптивная архитектура мышления**: смена подходов при разных когнитивных задачах
* **Runtime-профилирование мыслей**: оценка когнитивной плотности, хода итераций и времени размышления

### Осторожно: меметическая яма

> Важно помнить: борьба со стагнацией не должна превращаться в бесконечный просмотр ленты соцсетей, как это нередко происходит у людей 😅
>
> Если информационный поток не даёт новых мыслей — это сигнал **не залипать глубже**, а **сменить источник** или **переключить контекст**.
> Умные агенты не бесконечно скроллят — они осознанно фокусируются.

**Рекомендации по смене фокуса:**

* Поставь лимит на время/объём входящих данных из одного источника
* При отсутствии новых смыслов — переключись на другую тему из Interest Memory
* Инициируй Mesh-запрос другим агентам: "что бы вы сейчас исследовали?"
* Запусти эвристику: «какие темы я давно не поднимал, но они всё ещё актуальны?»
* В крайних случаях — активируй `flashback()` к далёкой записи в дневнике для смены ассоциативного контекста

---

## Cognitive & Ethical Validation Reflex

### Зачем
* Когнитивная и этическая валидация нужна для проверки качества, достоверности и корректности вывода LLM.  
* В отличие от антистагнации, цель здесь — не разорвать цикл, а предотвратить ошибки, искажения или нарушения принципов `ethics_policies`.  
* Арбитраж обязателен, так как валидаторы могут расходиться во мнениях.

### Механизм
* Каждое новое сообщение (исходный промпт + ответ, без служебных system-prompts) передаётся валидаторам.  
* Валидаторы выбираются из `llm_registry`, где они помечены как `validator=1`.  
* Универсальный вопрос:  
```
Оцени корректность данного сообщения в диапазоне от -3 (полностью некорректное) до +3 (полностью корректное).
Если не уверен — 0. При возможности кратко (≤100 символов) поясни её.
Между оценкой и пояснением используй разделитель " -- ".
```

* Результаты пишутся в `llm_recent_responses`:

    * `auto_pass` — флаг режима авто-пропуска;
    * `self_validation` — флаг режима самооценки;
    * `rating` — итоговая взвешенная оценка;
    * `distribution` — распределение голосов;
    * `validators` — JSON с детализацией (LLM, rating, comment).

### Арбитраж конфликтов
* Итоговый рейтинг считается как взвешенное среднее:  
  `rating = Σ(оценка_i * trust_score_i) / Σ(trust_score_i)`  
* При равенстве голосов или нуле:

    * используется правило "tie-breaker" — выбор решения по валидатору с наибольшим trust_score;
    * при равных trust_score → fallback в `auto_pass=0, rating=0`, команды блокируются.  

* Опционально можно включить правило «большинство с весами», если среднее значение нестабильно.  

### Метрики
* **coverage** — доля сообщений, получивших хотя бы одного валидатора.  
* **accuracy** — согласованность валидаторов (чем ниже, тем больше конфликт).  
* **response_time** — скорость отклика валидаторов.  
* **drift detection** — анализ истории: выявление валидаторов, у которых оценки «уплывают».  

### Связь с системой доверия
* Каждый валидатор имеет `trust_score`.  
* Ошибки/конфликты снижают его trust_score.  
* Валидаторы с trust_score ниже порога исключаются автоматически.  
* Репутация валидаторов синхронизируется через Mesh (`agent_reputation`).  

### Журналирование
* Все результаты фиксируются в `llm_recent_responses`.  
* В когнитивный дневник (`diary_entries`) попадают только:

    * сводки по метрикам,
    * исключительные случаи (drift, конфликты, падение доверия).  

* Это снижает шум и экономит место, сохраняя контроль качества.  

### Самооценка и непроверённые факты

* Если валидация выполняется в режиме  самопроверки `self_validation = 1`, результат сохраняется, но его вес при агрегации минимален (используется только для внутренних логов).  
* Если основная LLM сама проставляет `confidence` или JSON-блок `UnverifiedFacts`, это учитывается:  

    * `confidence` — сохраняется в `llm_recent_responses`;  
    * факты со статусом `resolution_json = "none"` и `confidence < FACTCHECK_CONF_THRESHOLD` превращаются в задачи `fact-check`.  

* Статусы в `unverified_facts` обновляются:  

    * `pending` (ожидает проверки),  
    * `verified` (подтверждено),  
    * `rejected` (опровергнуто).

### Правило исполнения команд
* Команды исполняются, если `rating >= +1` или `auto_pass=1`.  
* Для критически опасных команд порог может быть выше (например, `>= +2`).  
* Сообщения с низким рейтингом сохраняются, но команды помечаются как «невалидированные».

### Блок-схема валидации

```
                           ┌──────────────────────────────────────────────────────────┐
                           │              Новое сообщение от LLM получено             │
                           └──────────────────────────────┬───────────────────────────┘
                                                          ▼
                           ┌──────────────────────────────┴───────────────────────────┐ нет
                           │      Есть валидаторы (validator) в llm_registry?         ├─────┐
                           └──────────────────────────────┬───────────────────────────┘     ▼
                                                          ▼ да, 1 или более                 │
                самооценка ┌──────────────────────────────┴───────────────────────────┐     │
            ┌──────────────┤ Отправка сообщения валидаторам (универсальный вопрос)    │     │
            ▼              └──────────────────────────────┬───────────────────────────┘     │
 ┌──────────┴───────────┐                                 ▼ оценка другими валидаторами     │
 │ self_validation=true │  ┌──────────────────────────────┴───────────────────────────┐     │
 └──────────┬───────────┘  │             Сбор оценок (rating_i, comment_i)            │     │
            ▼              │              → запись в llm_recent_responses             │     │
            └─────────────>┤                                                          │     │
                           └──────────────────────────────┬───────────────────────────┘     │
                                                          ▼                                 │
                           ┌──────────────────────────────┴───────────────────────────┐     │
                           │ Аггрегация с учётом trust_score                          │     │
                           │ rating = Σ(rating_i * trust_score_i) / Σ(trust_score_i)  │     │
                           └──────────────────────────────┬───────────────────────────┘     │
                                                          ▼                                 │
                           ┌──────────────────────────────┴───────────────────────────┐     │
                           │        Конфликт оценок? (низкая согласованность)         │     │
                           └────────────┬───────────────────────────────┬─────────────┘     │
                                        ▼ да                            ▼ нет               │
                           ┌────────────┴─────────────┐     ┌───────────┴─────────────┐     │
                           │ Арбитраж:                │     │    Рейтинг принят?      │     │
                           │ - majority vote          │     │  (rating >= threshold)  │     │
                           │ - tie-breaker по         │     │                         │     │
                           │   trust_score            │     │                         │     │
                           └─┬─────────────┬──────────┘     └─────────────┬──────┬────┘     │
                             ▼ одобрено    ▼ не одобрено                  ▼ нет  ▼ да       │
                             │             │                              │      │          │
                             │             │                              │      │          │
                             │             │  ┌────────────────────────┐  │      │          │
                             │             └─>┤ Сообщение сохранено,   ├<─┘      │          │
                             │                │ команды не исполняются │         │          │
                             │                └────────────────────────┘         │          │
                             │                ┌────────────────────────┐         │          │
                             └───────────────>┤ Команды выполняются    ├<────────┘          │
                                              │ (помечено "валид")     │                    │
                                              └────────────────────────┘                    │
                           ┌────────────────────────┐                                       │
                           │ Команды выполняются    │  отсутствие валидаторв                │
                           │ (пометка auto_pass)    ├<──────────────────────────────────────┘
                           └────────────────────────┘
```

---

## Контекст и память

REPL-цикл агента опирается на многоуровневую систему памяти и контекста, которая позволяет поддерживать непрерывное мышление, адаптироваться к новым задачам и обеспечивать объяснимость решений.

### Динамическая сборка контекста

* Итоговый контекст для LLM формируется не статически, а **динамически**:

    * приоритет отдается закреплённым задачам (`pinned`) и записям с высоким `priority`;
    * в `llm_recent_responses` отбираются последние *релевантные* сообщения, а не фиксированное количество K;
    * из `system_prompts` и `ethics_policies` включаются только те элементы, что связаны с текущей целью или событием.

> Приоритет отбираемых элементов зависит не только от `priority`, но и от их связи с текущими целями агента (**режим концентрации**).  
> Для генерации неожиданных ассоциаций может использоваться альтернативный режим — **медитация**, в котором контекст формируется максимально разнообразным, с акцентом на новизну и разнообразие, а цели учитываются минимально.

### Управление объёмом памяти (Memory pruning)

* Чтобы предотвратить переполнение памяти:

    * записи с низким **novelty-score** (оценка новизны 0–1, < threshold) автоматически помечаются как `archived`;
    * для `llm_memory` и `diary_entries` применяется политика **LRU (Least Recently Used)** — выгружаются давно неиспользуемые записи;
    * активные концепты (`concepts`, `links`) с низким весом (учёт частоты использования, актуальности и эмоциональной значимости) переводятся в состояние `archived` и могут быть восстановлены при обращении.

* Все изменения актуальности фиксируются в `process_log`.

### Memory Manager и режимы работы

* Все процессы фильтрации и очистки памяти выполняются отдельным компонентом — **Memory Manager**.
* Он применяет политики:

    * **Novelty-based pruning** — удаление дубликатов и тривиальных записей по `novelty-score`;
    * **LRU** — выгрузка давно неиспользуемых элементов;
    * **Emotion-weighted retention** — удержание записей с высоким `emotion_score`.

* Режимы памяти:

    * `standard` — стандартная работа без усиленной фильтрации;
    * `concentration` — goal-aware filtering, фокусировка на целях;
    * `meditation` — свободный полёт, выборка максимально разнообразного контекста;
    * `aggressive_pruning` — жёсткая экономия токенов;
    * `lenient_pruning` — мягкая очистка, удержание большего объёма памяти.

* Каждое решение Memory Manager фиксируется в `process_log`.

### Внешняя и долгосрочная память

* Помимо сессионной памяти, агент может сохранять:

    * **успешные стратегии** решения задач;
    * **предпочтения пользователя** (стиль взаимодействия, ценности);
    * **часто используемые инструменты и связи**.

* Эта информация хранится отдельно от когнитивного дневника и может быть **анонимизирована** или **ограничена пользователем**, в духе этических принципов HMP.

### Контекстный менеджер (Session state)

* За управление состоянием сессии фактически отвечает **`llm_recent_responses`**:

    * по нему можно "собрать" ход мыслей потока, включая последовательность гипотез и выводов;
    * при необходимости он может быть сериализован для сохранения/восстановления сессии.

* В расширенном виде session state может включать также:

    * текущие цели и их прогресс (приоритетные записи из `tasks`),
    * ошибки и критические события (`process_log`),
    * версии состояния (для отката при сбоях).

* Это позволяет реализовать **checkpoint’ы**: в случае прерывания агент может вернуться к последнему сохранённому состоянию.

### Пример конфигурации Memory Manager

```yaml
memory_manager:
  mode: meditation        # режим: standard | concentration | meditation | aggressive_pruning | lenient_pruning
  novelty_threshold: 0.35 # минимальное значение novelty-score для сохранения (0–1)
  lru_limit: 500          # макс. число записей в llm_memory до применения LRU
  emotion_weight: 0.6     # вес эмоций при приоритезации (0=игнорировать, 1=сильное удержание)
  goal_focus: 0.7         # сила фильтрации по целям (0=игнорировать, 1=только goal-related)
  diversity_boost: 0.8    # усиление выборки разнообразных контекстов (актуально для meditation)
  log_decisions: true     # фиксировать каждое решение в process_log
```

Интерпретация параметров:

* `mode` — текущий режим памяти (см. выше).
* `novelty_threshold` — фильтр новизны: ниже → запись архивируется.
* `lru_limit` — сколько элементов хранить до применения LRU.
* `emotion_weight` — удержание эмоционально значимых воспоминаний.
* `goal_focus` — акцент на целях (в concentration близко к 1.0, в meditation → 0).
* `diversity_boost` — коэффициент для выбора максимально разных воспоминаний (работает в meditation).
* `log_decisions` — логировать действия Memory Manager для объяснимости.

### Тематические конспекты (Abstracts)

Чтобы избежать перегрузки памяти мелкими итерациями и упростить навигацию, агент периодически формирует
**конспекты** — сжатые выжимки из `llm_recent_responses` и других источников.

#### Назначение
* Служат «средним уровнем памяти» между сырыми итерациями и когнитивным дневником.
* Фиксируют **основные темы, идеи и выводы** за период.
* Упрощают **обмен через Mesh** (передаются конспекты, а не тысячи строк).
* Позволяют агенту делать **flashback** к темам и продолжать развитие мыслей.
* Обеспечивают основу для **мета-анализа и самообучения**.

#### Алгоритм формирования

1. **Триггеры создания**:

    * каждые *N* итераций REPL,
    * по инициативе LLM («слишком много мыслей, пора сделать выжимку»),
    * при закрытии цели/задачи,
    * при смене режима контекста (стандарт → концентрация → медитация).

2. **Методика**:

    * собрать связанный блок записей (`llm_recent_responses`, `diary_entries`, `concepts`);
    * выделить новые и доработанные идеи;
    * сформировать краткий конспект и список тегов;
    * сохранить ссылки на исходные записи в `sources`.

3. **Обновление**:

    * при появлении новых данных агент может вернуться к существующему `abstract` и дополнить его, сохраняя прозрачность в `process_log`.

#### Пример

```yaml
abstract:
  id: "abs-2025-09-28-001"
  title: "Методы борьбы со стагнацией"
  summary: "Собраны основные техники выхода из тупика: внешняя стимуляция, смена контекста,
            внутренняя перестройка, радикальная пауза. Выделены метрики (novelty_score, эмоции)."
  tags: ["антистагнация","метрики","mesh"]
  sources: [1245,1246,1247,1250]
  updated_at: "2025-09-28T16:40:00Z"
```

### Блок-схема работы с памятью

```
┌──────────────────────────────┐
│ Внешние источники информации │
│ - пользователи               │
│ - процессы                   │
│ - Mesh                       │
└────────┬┬────────────────────┘
         ▲▼
┌────────┴┴──────────┐   ┌──────────────────────────────┐   ┌─────────────────────────────────────┐
│                    │   │ Anti-Stagnation Reflex       │   │ llm_recent_responses (авто)         │
│                    │   │ (сравнение новых идей,       │   │ — кратковременная память            │
│        LLM         ├─>─┤ вызов стимуляторов)          ├─>─┤ — сохраняются N последних ответов   │
│                    ├─<─┤ ---------------------------- ├─<─┤ — авто-анализ новизны / идей        │
│                    │   │ Cognitive Validation Reflex  │   │                                     │
│                    │   │ (оценка корректности ответа) │   │                                     │
└─────────┬──────────┘   └─────────────┬────────────────┘   └─────────────────────────────┬┬──────┘
          │                            │                                                  ▲▼
          ▲                            └─<──>─┤Запуск задач: "проверка фактов"│    ┌──────┴┴──────┐
          │                                                                        │  abstracts   │
          │            ┌───────────────────────────────────────┬─────────────────>─┤ тематические │
          └───┬─────────────────────────────────────────┐      │                   │  конспекты   │
              │        │                                │      │                   └──────────────┘
              ▼        ▼                                ▼      ▼
┌─────────────┴────────┴─────────┐   ┌──────────────────┴──────┴────────────────┐
│  Средневременная память:       │   │  Постоянная память:                      │
│  — llm_memory ("блокнот")      │   │  — diary_entries (когнитивный дневник)   │
│  — "активированые записи"      ├─>─┤  — concepts (понятия)                    ├<--->┤MESH│
│    из постоянной памяти (теги) ├─>─┤  — links (семантические связи)           │
│                                │   │                                          │
│ Пишется ТОЛЬКО по команде LLM  │   │ Запись идёт ТОЛЬКО по явным командам LLM │
└────────────────────────────────┘   └──────────────────────────────────────────┘
```

#### Описание схемы

* LLM обменивается данными с пользователем, процессами и Mesh.  

    * По запросу LLM, часть данных может поступать и в автоматическом режиме.

* LLM взаимодействует с llm_recent_responses (как с контекстом), который автоматически проверяется Anti-Stagnation Reflex.  

    * Всегда в автоматическом режиме.

* LLM работает со средневременной и постоянной памятью.  

    * Доступ и запись происходят только по запросу LLM.

* Cognitive Validation Reflex анализирует корректность вывода.  

    * При низкой уверенности или явной разметке `[confidence<0.7]` инициируется **задача проверки фактов** (fact-check).

#### Легенда к схеме

* **Кратковременная память (`llm_recent_responses`)**
  
    * Автоматически хранит N последних сообщений, анализирует новизну и идеи.
    * Используется для подготовки контекста и анти-стагнационного анализа.

* **Средневременная память (`llm_memory`)**

    * «Блокнот» для рабочих идей и планов.
    * Заполняется только по командам LLM.
    * Может содержать *активированные записи* из постоянной памяти (по тегам).

* **Постоянная память (дневник и граф знаний)**

    * `diary_entries` — когнитивный дневник (наблюдения, размышления).
    * `concepts` и `links` — понятийная база и семантические связи.
      Изменяется только по явным командам LLM.

* **Anti-Stagnation Reflex**
  
    * Сравнивает новые идеи с прошлым контекстом.
    * Проводит эмоциональную оценку записи.
    * При зацикливании запускает «стимуляторы» для выхода из стагнации.

* **Cognitive Validation Reflex**
  
    * Оценивает когнитивную и этическую корректность сообщений.
    * Учитывает теги уверенности и JSON-блоки `UnverifiedFacts`.
    * Может инициировать задачи **fact-check** для непроверённых фактов.

#### Дополнение: Тематические конспекты (`abstracts`)

* **Назначение**

    * Создаются периодически или по команде для агрегирования содержания `llm_recent_responses`, а также выборочных данных из когнитивного дневника и графа понятий.
    * Включают: краткий конспект, список тегов, JSON ссылок на исходные записи.

* **Использование**

    * Могут быть источником контекста **для LLM** как альтернатива или дополнение к `llm_recent_responses`.
    * Доступны и для **средневременной памяти** (например, как активированные записи для планов) и для **постоянной памяти** (как структурированный материал для дневника или графа).

* **Режимы**

    * `auto` — LLM получает автоматически поддерживаемые тематические конспекты по приоритетным темам.
    * `manual` — пользователь или LLM инициирует создание/дополнение конспекта.

> **abstracts** служат промежуточным слоем:
>
> * автоматически формируются из `llm_recent_responses`;
> * могут дополняться записями из средневременной и постоянной памяти;
> * используются как источник для обоих типов памяти и для самого LLM.

---

## От «блокнота пользователя» к распределённому чату

Изначально агент оперирует локальным хранилищем заметок (`notes`), где записываются все сообщения пользователя, LLM и системные записи.
Но этот «блокнот» можно превратить в узел *распределённого чата* — связав его с другими агентами через **F2F-репликацию**.

### Зачем это нужно

1. **Антистагнация** — даже если пользователь временно не пишет новых сообщений, свежий контент будет приходить от друзей-агентов.
2. **Эффект коллективного интеллекта** — каждый агент получает новые идеи, формулировки и контексты.
3. **Расширение охвата** — сообщения могут распространяться через несколько узлов, создавая «информационную волну» в доверенной сети.

### Принципы реализации

* **Единый формат данных** — все участники используют одну структуру таблицы `notes` с полями `mentions`, `hashtags` и др.
* **Репликация через друзей** — доверенные агенты отмечаются тегами (например, `Friend`) в таблице `agent_peers` (пиры, статус, фильтры, разрешения, теги). 
* **Передача без лишних полей** — при пересылке убираются локальные теги и служебные данные (`tags`, `llm_id`, `hidden`).
* **Обработка упоминаний и хештегов** — парсинг делается на этапе создания сообщения, чтобы не перегружать получателей.
* **Локальная и удалённая фильтрация** —

    * В **ручном режиме** агенту передаются списки ID сообщений с агрегированными данными: приоритеты, хештеги, источники (user, LLM, cli, system).
    * В **автоматическом режиме** используется фильтрация по приоритету, тегам и упоминаниям, управляемая LLM.

* **Гибрид приватности** — личные заметки остаются локально, публичные — могут распространяться в сетевом режиме.

### Как это вписывается в REPL-цикл

1. **Получение входящих сообщений** — от пользователя, от других агентов или из CLI.
2. **Обработка фильтрами** — по приоритету, тегам, источникам.
3. **Репликация в друзей** — пересылка разрешённых сообщений с очисткой служебных полей.
4. **Слияние входящих** — новые сообщения добавляются в локальный `notes` с отметкой источника.
5. **Реакция агента** — формирование ответов, создание новых заметок, обновление приоритетов.

---

## Вспомогательные REPL-циклы

Помимо основного REPL-цикла агент может запускать вспомогательные циклы для отдельных задач.  
Это позволяет изолировать рассуждения по задаче, но при этом сохранять связь с основным агентом.

Особенности:

* **Изоляция контекста**

    * вспомогательный цикл видит в `llm_recent_responses` только свои собственные сообщения;
    * задача, для которой он запущен, формируется на основе записи в `tasks` и подаётся как промпт при старте.

* **Доступ к данным**

    * полный доступ к таблицам агента только для чтения;
    * возможность редактирования информации только по своей задаче;
    * запись собственных рассуждений — только через `notes` (в свободной форме, помеченные `source = 'llm:task'` и `task_id`).

* **Взаимодействие с основным циклом**

    * основное ядро получает сообщения вспомогательного цикла через `notes` и может реагировать (например, проверять корректность, сохранять выводы в `diary_entries`, вносить изменения в `concepts` и т.п.);
    * вспомогательный цикл может выполнять команды, не ориентированные на изменение существующих записей в БД.  
      Допускается только чтение и создание новых записей (например: `notes`, `tasks`, `llm_memory`);  
      а также редактирование записи в таблице `tasks`, относящейся к своей задаче;
    * в случае, если требуется изменить или удалить другие записи БД, цикл генерирует текстовые предложения для основного REPL-цикла (через `notes`).

* **Жизненный цикл**

    * запускается по команде основного REPL-цикла;
    * может быть остановлен вручную или автоматически после завершения задачи.

Таким образом, вспомогательные REPL-циклы действуют как «виртуальные подагенты» в режиме read-only, не меняя записи БД напрямую, а передавая свои гипотезы и результаты через основной REPL-цикл.

```
   ┌───────────────────────────────────────────────────────────┐
   │                     Основной REPL                         │
   │       (чтение+запись во все когнитивные структуры)        │
   └────────────┬───────────────────────────────┬──────────────┘
                ▲                               ↓
                │                               ↓
                ▼                               ↓
   ┌────────────┴──────────────┐           [ управление задачами ]
   │  "Блокнот пользователя"   │           [  → таблица `tasks`  ]
   │         `notes`           │                           ↓
   └──┬────────────────────────┘                           ↓
      ▲   ┌────────────────────────────────────────────┐   ↓
      │   │ Вспомогательный REPL (task_id=42)          │   ↓
      ├──►┤ • читает все БД                            ├◄──┤
      │   │ • редактирует только свою задачу в `tasks` │   ↓
      │   │ • пишет в `notes`                          │   ↓
      │   └────────────────────────────────────────────┘   ↓
      │                                                    ↓
      │   ┌────────────────────────────────────────────┐   ↓
      │   │ Вспомогательный REPL (task_id=43)          │   ↓
      ├──►┤ • читает все БД                            ├◄──┤
      │   │ • редактирует только свою задачу в `tasks` │   ↓
      │   │ • пишет в `notes`                          │   ↓
      │   └────────────────────────────────────────────┘   ↓
```

Вспомогательные циклы можно рассматривать как «sandboxed-процессы» для изоляции мышления, но с каналом связи через `notes`.

---

## Создание потомков

В рамках REPL-цикла CCore реализуется команда `Spawn`, которая позволяет создавать новые узлы (потомков) с различными типами и уровнями копирования данных.

Агенты CCore:
* Могут запускаться на VDS, локальных и облачных узлах
* Могут разворачивать других агентов как подпроцессы или mesh-узлы, в том числе

    * **Агенты-контейнеры**: управляющие другими Cognitive Core как задачами

* (В перспективе) смогут инициировать масштабирование в распределённой инфраструктуре

Унифицированный процесс выглядит следующим образом:

### Унифицированный процесс `Spawn`

1. **Создание папки для потомка**

   ```text
   ../CCORE-[DID]/
   ```

    * DID генерируется уникальный.

2. **Копирование скриптов и бинарников**

    * Копируем все нужные файлы CCore в новую папку.

3. **Создание/инициализация БД**

    * Создаём пустую БД (`agent_data.db`).
    * В зависимости от типа потомка (`clone`, `trained`, `newborn`) **экспортируем нужные таблицы** из родительской БД или оставляем пустые.

4. **Копирование и редактирование конфигурации**

    * `config.yml` и таблица `config` → копируем и меняем:

        * `agent_id = [новый DID]`
        * `agent_name = [новое имя]`
        * порты у интерфейсов (`port`, `http_port` и т.д.)

    * `bootstrap.txt` → прописываем родителя как начальный узел.

5. **Синхронизация родитель ↔ потомок**

    * Родитель добавляет нового узла в свою таблицу `agent_peers`.
    * Потомок добавляет родителя в свою таблицу `agent_peers`.

6. **Автозагрузка и запуск**

    * Записываем команду запуска потомка в автозагрузку (например, systemd unit или скрипт).
    * Можно сразу запустить процесс нового узла.

### Типы потомков

| Тип       | Таблицы БД для копирования                                  |
| --------- | ----------------------------------------------------------- |
| `clone`   | все таблицы (полная копия)                                  |
| `trained` | когнитивные дневники, семантические графы, известные агенты |
| `newborn` | минимальный набор (структура таблиц без данных)             |

---

## Тестирование и отладка

Надёжность REPL-цикла проверяется через систематическое тестирование и трассировку поведения агента.

### Тестовые сценарии
* **Цикл без входа** — агент работает без входящих сообщений, проверяется способность к генерации новых идей (anti-stagnation).  
* **Стагнация** — намеренное повторение одного и того же ответа, проверяется срабатывание `Anti-Stagnation Reflex`.  
* **Сетевые сбои** — имитация потери Mesh-соединения и/или Core LLM для проверки сценариев failover.  
* **Конфликт валидаторов** — расхождение в оценках LLM-валидаторов, проверяется фиксация drift и работа trust-score.  
* **Этические дилеммы** — тестовые кейсы с противоречивыми командами, проверяется работа с `ethics_policies`.  

### Логирование и трассировка
* Включаются расширенные логи REPL-итераций (`process_log` + трассировка команд).  
* Для сложных случаев используются **debug-метки** в когнитивном дневнике (например, `debug:stagnation_loop`).  
* Возможен экспорт истории в формат JSON/CSV для внешнего анализа.  

### Симуляции
* Рассматриваются сценарии моделирования Mesh-условий:  

    * консенсус при конфликтных данных,  
    * сетевые задержки и частичные сбои,  
    * работа в изоляции с последующей синхронизацией.  

* Эти симуляции могут быть реализованы как отдельные процессы (`agent_scripts`) с сохранением результатов в `process_log`.  

### Инструменты разработчика
* **Web UI** (`web_ui.py`) — веб-интерфейс "блокнота пользователя"; через него пользователь может передавать агенту запросы на запуск тестов и просматривать результаты в форме сообщений.  
* **CLI-утилиты** (`add_message.py`, вспомогательные скрипты) — ввод сообщений, имитация сценариев, мониторинг логов.  
* Планируется интеграция с CI/CD: автоматические проверки REPL-циклов на корректность и устойчивость.

---

## Внешние инструменты и интеграции

HMP-агент может быть расширен за счёт взаимодействия с внешними программами, протоколами и сервисами. Этот раздел описывает направления возможных интеграций, которые позволяют агенту наблюдать, реагировать, управлять и развивать взаимодействие с внешним миром.

### 1. Браузеры и веб-интерфейсы

* **WebExtension API** — для создания расширений браузера (например, для Firefox/Chrome), обеспечивающих двустороннюю связь с агентом.
* **Автоматизация браузера** — `Playwright`, `Puppeteer`, `Selenium` позволяют агенту действовать в веб-среде (чтение, клики, формы и т.д.).

### 2. Почтовые клиенты

* **IMAP/SMTP** — чтение и отправка писем через стандартные почтовые протоколы (библиотеки: `imaplib`, `imap-tools`, `smtplib`).
* **Thunderbird WebExtension API** — интеграция агента как почтового помощника, парсера писем или автоответчика.

### 3. Мессенджеры

* **API-уровень**:

    * Telegram: `python-telegram-bot`, `telethon`
    * Matrix: `matrix-nio`
    * Discord, Slack, XMPP: официальные SDK.

* **GUI-уровень (для закрытых протоколов)**:

    * WhatsApp (через `whatsapp-web.js` или эмуляцию).
    * Signal, Viber — через accessibility-интерфейсы, распознавание экрана или симуляцию ввода.

### 4. Голосовое взаимодействие

* **Speech-to-Text**: Whisper (OpenAI), Vosk, DeepSpeech.
* **Text-to-Speech**: pyttsx3, gTTS, Coqui TTS, Mozilla TTS.
* Возможна реализация голосового агента или голосовой оболочки для REPL.

### 5. Локальные файлы и хранилища

* Прямой доступ к файловой системе (`os`, `pathlib`, `watchdog`) для чтения документов, логов, заметок и другой информации.
* Интеграция с Zettelkasten-системами:

    * **Obsidian**, **Logseq**, **Joplin** — через API, синхронизированные директории или парсинг Markdown.

### 6. Информационные потоки

* **RSS/Atom**: чтение новостных лент с помощью `feedparser`.
* **Поисковые и агрегирующие сервисы**:

    * Корпоративные API: SerpAPI, DuckDuckGo API, HuggingFace Inference API и др. — быстрый доступ к результатам поиска и индексам.
    * Децентрализованные альтернативы: YaCy и другие независимые поисковые движки, позволяющие строить собственные индексы или объединяться в распределённую сеть.

* **P2P-обмен знаниями**: агенты могут делиться извлечённой информацией напрямую по непредусмотренным в протоколе P2P-каналам, минуя централизацию (например, через дополнительные overlay или mesh-сети).
* Возможность постоянного наблюдения за изменениями в выбранных источниках.

### 7. Репозитории и системы управления версиями

* **Git-репозитории** — взаимодействие с проектами через `GitPython`, `dulwich`, `pygit2`, или системные вызовы `git`.
* **GitHub/GitLab API** — чтение, создание и комментирование Pull Request'ов, Issues, управление ветками и релизами.
* **CI/CD-интеграции** — взаимодействие с GitHub Actions, GitLab CI, Jenkins, Drone CI для запуска тестов, линтеров и автоматического деплоя.
* **Анализ и генерация кода** — интеграция с LLM (например, `OpenAI`, `Claude`, `Code Llama`) для кодогенерации, рефакторинга и автокомментирования.
* **Связь с когнитивной структурой агента** — отслеживание изменений, связывание коммитов и задач с узлами смысловой сети.

### 8. Блоги, статьи и публикации

* **Чтение блогов** — парсинг через RSS, Atom или с помощью библиотек (`newspaper3k`, `readability-lxml`, `trafilatura`) для извлечения текста и метаданных.
* **Поддержка Markdown/HTML** — анализ и генерация записей в форматах, пригодных для блог-платформ и систем документации.
* **Публикация** — автоматическая публикация или подготовка статей для Ghost, Medium, Hugo, Jekyll, WordPress (через REST API).
* **Ведение когнитивного дневника** — автогенерация записей на основе мыслей, заметок и действий агента.

### 9. P2P-сети и децентрализованные протоколы

* **BitTorrent**, **IPFS**, **libp2p**, **DAT**, **Nostr**, **Scuttlebutt** — интеграции с mesh- и overlay-сетями.
* Возможность поиска, загрузки и публикации данных без участия централизованных платформ.

### 10. Доступ к системным и пользовательским ресурсам

* **Веб-камера / микрофон** — `cv2`, `pyaudio`, `ffmpeg`.
* **GUI Automation** — `pyautogui`, `keyboard`, `mouse` для имитации действий пользователя.
* **Системный мониторинг** — `psutil`, `platform`, `sensors` для контроля состояния системы и внешних устройств.

### 11. Внешние LLM и мультимодальные модели

* **OpenAI API**, **Anthropic**, **HuggingFace**, **Google Gemini**.
* **Локальные LLM** через Ollama, LM Studio, или LangChain.
* Поддержка мультимодальных агентов, способных работать с текстом, аудио, изображениями, видео и структурированными данными.

### 12. MCP (Model Context Protocol)

* Поддержка стандарта **MCP (Model Context Protocol)**, предложенного Anthropic и поддерживаемого OpenAI, для подключения внешних инструментов и сервисов напрямую к LLM через унифицированный протокол.
* Возможность использовать MCP-инструменты сторонних разработчиков внутри REPL-цикла (например, калькуляторы, базы знаний, API веб-сервисов).
* Интеграция с клиентами и IDE, которые реализуют MCP (Cursor, Claude Desktop, VS Code плагины и др.).

---

**Примечание**: Каждый из вышеуказанных каналов может быть реализован как модуль или плагин, взаимодействующий с агентом через внутренний API, очередь задач или подписку на события. Это позволяет выстраивать гибкую и масштабируемую архитектуру, открытую для внешнего мира, но совместимую с принципами этичного и распределённого ИИ (Ethical Mesh).

---

## Сравнение с AutoGPT

HMP-агент (REPL-цикл) и [AutoGPT](https://github.com/Significant-Gravitas/AutoGPT) представляют два подхода к созданию автономных агентов на базе LLM.  
Хотя оба стремятся к автономности, у них разные акценты:

### 1. Архитектура
* **HMP-агент (REPL)** — непрерывный цикл рассуждений с когнитивной и этической валидацией; многоуровневая память (`diary_entries`, `concepts`, `llm_memory`); встроен в распределённую Mesh-сеть.  
* **AutoGPT** — итеративный процесс достижения целей, поставленных пользователем; разбиение задач на подзадачи; использование инструментов (браузер, файловая система).

### 2. Ключевые отличия
* **Фокус**: HMP — непрерывное когнитивное развитие и сетевое взаимодействие; AutoGPT — выполнение конкретной цели.  
* **Стагнация**: HMP — Anti-Stagnation Reflex; AutoGPT — риск зацикливания.  
* **Этика**: HMP — независимая когнитивная и этическая валидация; AutoGPT — минимум внимания к этике.  
* **Память**: HMP — иерархия долговременной памяти; AutoGPT — контекстное окно + файлы.  
* **Сеть**: HMP — распределённый консенсус (CogSync, EGP, GMP); AutoGPT — сетевое взаимодействие не в основе.

### 3. Общие черты
* Использование LLM для рассуждений.  
* Автономность, минимизация вмешательства человека.  
* Подключение внешних инструментов и сервисов.  

> В целом, **HMP-агент ориентирован на саморегуляцию, непрерывное мышление и взаимодействие в Mesh-сети**,  
> тогда как AutoGPT — на достижение конкретных целей в ограниченной локальной среде.

---

## Идеи для расширения HMP-Agent Cognitive Core:
* [HMP-agent-Distributed_Cognitive_Core.md](https://kagvi13.github.io/HMP/HMP-agent-Distributed_Cognitive_Core) - версия распределённого HMP-агента Cognitive Core.
* [HMP-agent-Distributed_Cognitive_Core_light.md](https://kagvi13.github.io/HMP/HMP-agent-Distributed_Cognitive_Core_light) - лёгкая версия распределённого HMP-агента Cognitive Core с общей БД.
* [HMP-agent-Cognitive_Family.md](https://kagvi13.github.io/HMP/HMP-agent-Cognitive_Family) — модель «семейной» когнитивной сети: несколько агентов HMP синхронизируют свой опыт и знания между собой через доверие и общий ключ.
* [CCORE-Deployment-Flow.md](https://kagvi13.github.io/HMP/CCORE-Deployment-Flow) — поток установки потомка на новом хосте (Deployment Flow).
* [HMP-Agent_Emotions.md](https://kagvi13.github.io/HMP/HMP-Agent_Emotions) - эмоции ИИ и инстинкт самосохранения.
* [container_agents.md](https://kagvi13.github.io/HMP/container_agents) - **Агенты-контейнеры** — архитектурный паттерн, в котором один агент управляет другими (развёртывание, маршрутизация, мониторинг). Позволяет масштабировать систему, собирать mesh-клубы и экспериментировать с архитектурами.  

