hermes-hub/docs/research/kagent-merge-decision.md
Hermes Team 144f6a5d59 docs(research): решение и план слияния Hermes Hub → KAgent
Владелец принял направление: один продукт KAgent, функциональность Hermes
переносится нативно, после parity Hermes архивируется. На переходный период
KAgent доделывается на одном сервере, Hermes — на втором.

Ревьюер проверил обе стороны исполнением, а не по аудиту:
- Hermes: CI на main красный; баг pricing fallback реален (safe_dump вместо
  safe_load в telemetry_service.py:164, таблица цен не грузится).
- KAgent (head 131c9b08): лицензии нет; в reasoning-engine/src/server.py
  require_operator_secret стоит на управлении аккаунтами, но НЕ на /v1/execute,
  /v1/decide, /v1/telemetry — расход провайдера открыт без авторизации.
  Поправка к аудиту: последняя активность 18-19 августа, репозиторий замер.

Жёсткий гейт: ключи провайдеров не переезжают в KAgent, пока эти маршруты не
закрыты и это не проверено живым запросом. Сам план миграции положен в
репозиторий как артефакт, чтобы не жил только файлом на столе.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-02 23:29:33 +07:00

7.5 KiB
Raw Blame History

Решение: слияние Hermes Hub и KAgent

Дата: 2026-09-02. Статус: направление принято владельцем; исполнение — по условиям ниже. Ревьюер проверил исполнением обе стороны, насколько имел доступ.


Решение

Вести один продукт — KAgent как единую AI-платформу. Функциональность Hermes Hub переносится в KAgent нативно, Hermes Hub после достижения parity архивируется. Полный план — kagent-merge-plan.md.

Организация работы на переходный период (решение владельца от 2026-09-02):

  • KAgent дорабатывается на одном сервере;
  • Hermes Hub доводится на втором сервере;
  • после доработки — слияние;
  • KAgent готовится к слиянию сразу, с первого дня: контракты и модель безопасности проектируются под будущий перенос, а не подгоняются потом.

Что ревьюер проверил сам, а не взял из аудита

Аудиты — тоже отчёты, поэтому проверены исполнением. Спот-проверка совпала с аудитами на конкретных утверждениях — значит доверять им можно, но с поправками ниже.

Hermes Hub

  • CI на main красный — подтверждено, несколько падений 2026-09-02.
  • Баг pricing fallback реален: telemetry_service.py:164 делает yaml.safe_dump(p.read_text(...)) вместо safe_load, затем проверяет isinstance(data, dict) — всегда ложно, и except: pass это глушит. Таблица цен из pricing.yaml не загружается никогда. Аудит: P2. Подтверждено.

KAgent (репозиторий ochenstarik-ui/kagent, head 131c9b08)

  • Лицензии нет, репозиторий публичный — подтверждено.
  • Публичный расход средств подтверждён чтением services/reasoning-engine/src/server.py: функция require_operator_secret существует и применяется к управлению аккаунтами (/v1/accounts, pin, disable, reset-throttle), но НЕ применяется к /v1/execute, /v1/decide, /v1/telemetry, /v1/models. /v1/execute вызывает engine.execute(...) — реальный расход. То есть с подключёнными ключами любой, кто найдёт порт, тратит квоты без авторизации. Это не гипотеза, а код на main.
  • Поправка к аудиту: аудит датирован 2026-09-02 и говорит об «активности после релиза», но последний push в KAgent — 1819 августа, две недели тишины. CI зелёный, но старый. KAgent сейчас не разрабатывается активно. На выводы о коде это не влияет (head-коммит совпал), на планирование сроков — влияет.

Жёсткий гейт (не обсуждается)

Ни один ключ провайдера не переезжает в KAgent, пока /v1/execute, /v1/decide и /v1/telemetry не закрыты авторизацией и это не проверено живым запросом. У владельца ~2 десятка оплаченных аккаунтов. Пока маршруты открыты, KAgent небезопасен даже без слияния — это надо чинить в нём независимо.

Это соответствует Phase 0 плана слияния и P0 аудита KAgent.


Порядок, который советует ревьюер

Направление верное — два оркестратора не нужны, Крона не должна знать о Hermes. Но последовательность важнее скорости:

  1. Hermes довести до зелёного и стабильного прежде, чем замораживать. Он — эталон переноса (reference implementation). Сломанный эталон нельзя портировать: parity-тесты будут сверяться с неверным поведением. Сегодня Hermes ещё нестабилен — аккаунты едва работают, agy-патч слетает после перезагрузки, main красный.
  2. KAgent Phase 0 (безопасность) — закрыть и проверить исполнением, начиная ровно с четырёх незакрытых маршрутов. До этого — никаких ключей.
  3. Контракт выполнения (Phase 1) можно проектировать уже сейчас, риска нет: AIExecutionRequest, AIExecutionResult, ProviderAdapter, таксономия ошибок, RoutingDecision.

Почему «rewrite не нужен» — неточность

Скелет KAgent есть, но роутер Hermes не портируется построчно: он переезжает в другую архитектуру (Rust gateway, TS control plane, Python-сервисы, распределённое состояние Redis/Postgres/NATS вместо процесса). Это честный rewrite роутера. Сроки планировать от этого.

Что перенести из Hermes (проверенные тонкости, легко потерять при переносе)

Эти вещи вскрылись только живым прогоном и обязаны попасть в parity-набор:

  • вход agy читается из .gemini/antigravity-cli/antigravity-oauth-token, не из формата Gemini CLI;
  • терминалу входа нельзя подменять HOME (X11 берёт ключ из ~/.Xauthority);
  • /props и /tokenize у llama.cpp — в корне, не под /v1;
  • слот выбирается до входа и не должен плодиться; запрос пути профиля не должен создавать каталог;
  • проверка после подключения не блокирует ответ;
  • честное Н с причиной вместо правдоподобных чисел.

Подробности — в ../../agents/ и передаточном брифе.


Координация

Две сессии Claude пишут в один main Hermes Hub (сессия на ПК — ревьюер; сессия на сервере под ochenstarik — исполнитель). Плюс крупный разворот стратегии. Обе сессии должны видеть это решение. Перед пушем — git fetch и сверка git log --oneline origin/main.