Перейти к содержимому

Что такое Erebros-T

Erebros-T, это то, чем становится Erebros, когда им пользуется больше одного человека. Однопользовательский Erebros, плоскость управления (control plane) вашим собственным парком агентов: каждый движок, каждое приложение, на вашей машине. В одиночку это работает и разваливается в момент, когда подключается второй человек, потому что ничто из этого не знает, кто что сделал, в каком порядке и на какой машине.

Teams отвечает на это одним решением, принятым один раз: всё, что происходит, это событие, дописанное в хеш-связанный журнал и подписанное. Сообщение, патч, прогон CI, согласование, вход агента в комнату. Нет второго источника истины, который нужно сверять, и нет вопроса «кто это согласовал и когда», на который журнал не ответит спустя месяцы.

Это отдельный продукт на отдельном порту, ~/erebros-t, http://localhost:3401, состояние в ~/.erebros-t, и работает он на Next.js 16, React 19 и Node 22.

Чат Один чат для всех движков, то же объединение, которое Erebros сделал в v6.14, минус OmniRoute.
Каналы Комнаты, где люди и агенты работают вместе; сообщения, патчи, прогоны CI и согласования, в одной ленте.
AI Мастермайнд ASK, DISCUSS и MoA, сохранённые отдельным приложением, совет, который вы созываете, а не комната, в которой живёте.
Hermes Среда выполнения агентов со своими вкладками (агенты, рой, канбан, цели, …), повышенная до собственного пункта рейла.
Доска Доска рабочего пространства, свёрнутая из журнала; карточку, отданную агенту, забирает та машина, которая может его запустить.
Git и ревью Очередь патчей с CI, ревью и согласованием, слияние, это решение с аудиторским следом.
Воркфлоу Триггеры, шаги и гейты. То, чем Loop, Пайплайн и Канбан были под капотом.
Поиск Полнотекстовый поиск по всему журналу, на английском, украинском и русском.
Журнал аудита Реестр, обе колонки хешей показаны, чтобы цепочку можно было проверить глазами.
Settings → Relay Какие машины в рабочем пространстве, какие доступны сейчас и как это соединено.
Local / Cloud Где выполняется каждая возможность, решается для каждой отдельно.
Приложения Forge Ad, D, G, M, N, P, R, S, SEO, VC и X, перенесены целиком.

В рейле четыре группы, WORKSPACE, BUILD, FORGE, SYSTEM, и в нём нет ни агентов, ни моделей. Модели живут в Менеджере моделей, доступном с верхней панели; агенты живут внутри Hermes.

Четыре решения, из которых следует всё остальное

Заголовок раздела «Четыре решения, из которых следует всё остальное»

$EREBROS_STATE_DIR/events/log.jsonl, один JSON-объект на строку, дописывается, никогда не переписывается. Каждая строка несёт SHA-256-хеш своего содержимого и хеш предыдущей строки, а затем подпись Ed25519. Правка строки ломает все хеши после неё, видимо, на экране аудита. tail -f по нему, живая лента рабочего пространства; формат, который можно прочитать через cat, переживёт программу, которая его писала.

У каждого события есть kind, 1001 сообщение, 2001 патч, 3001 создан канал. Читатель, который не распознаёт kind, пропускает его, а не падает, именно это позволяет трём машинам работать на трёх немного разных сборках. Kind никогда не перенумеровывается и никогда не переиспользуется. Полосы несут смысл:

1000-1999 conversation, messages and what attaches to them
2000-2999 work, patches, runs, approvals, decisions
3000-3999 the workspace, channels, membership, agents
4000-4999 the machine, alerts, health, updates
9000-9999 ephemeral, presence and typing. NOT stored, NOT hashed, NOT audited.

3. Одна цепочка на машину, и слияние, это дописывание

Заголовок раздела «3. Одна цепочка на машину, и слияние, это дописывание»

Каждая машина ведёт собственную цепочку в собственном файле. Слияние, это: спросить у пира, что он записал после последнего события, которое вы видели, проверить каждое по цепочке и подписи, дописать. Два человека, открывавшие комнаты офлайн, сходятся при повторном подключении без какого-либо разрешения конфликтов. Порядковый номер уникален только внутри машины, всё, что на него опирается, опирается на (machine, seq). Pull, никогда не push.

4. Индекс, производный, и его можно выбросить

Заголовок раздела «4. Индекс, производный, и его можно выбросить»

Плоский файл идеален для дописывания и бесполезен для запросов, поэтому есть индекс - SQLite через node:sqlite с FTS5, и он производный: удалите его, и он перестроится из журнала, ничего не потеряв. Ни миграций, ни истории резервного копирования сложнее, чем копирование двух файлов. Каналы, доски и прогоны воркфлоу сворачиваются из журнала одинаково, поэтому сервер, убитый посреди прогона, не может оставить файл статуса с надписью «running».