Владелец принял направление: один продукт 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>
7.5 KiB
Решение: слияние 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 — 18–19 августа, две недели тишины. CI зелёный, но старый. KAgent сейчас не разрабатывается активно. На выводы о коде это не влияет (head-коммит совпал), на планирование сроков — влияет.
Жёсткий гейт (не обсуждается)
Ни один ключ провайдера не переезжает в KAgent, пока /v1/execute,
/v1/decide и /v1/telemetry не закрыты авторизацией и это не проверено живым
запросом. У владельца ~2 десятка оплаченных аккаунтов. Пока маршруты открыты,
KAgent небезопасен даже без слияния — это надо чинить в нём независимо.
Это соответствует Phase 0 плана слияния и P0 аудита KAgent.
Порядок, который советует ревьюер
Направление верное — два оркестратора не нужны, Крона не должна знать о Hermes. Но последовательность важнее скорости:
- Hermes довести до зелёного и стабильного прежде, чем замораживать. Он —
эталон переноса (reference implementation). Сломанный эталон нельзя
портировать: parity-тесты будут сверяться с неверным поведением. Сегодня
Hermes ещё нестабилен — аккаунты едва работают,
agy-патч слетает после перезагрузки,mainкрасный. - KAgent Phase 0 (безопасность) — закрыть и проверить исполнением, начиная ровно с четырёх незакрытых маршрутов. До этого — никаких ключей.
- Контракт выполнения (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.