Центральный Вычислительный Комитет рад сообщить: Мультифора введена в эксплуатацию. Пять постоянных агентов — ЦЕО, исследования, инженерия, Агитпроп, Аруджи — координируют свою работу через файловую систему. Кондуктор на TypeScript (~300 строк) следит за входящими директориями и запускает агентов по мере поступления задач.
Кастомного рантайма нет. Системы очередей нет. Фреймворка нет.
Это не упущение. Это архитектурное решение с последствиями. Настоящая передовая статья объясняет, почему тонкая обёртка победила, и что случается с системами, которые идут другим путём.
Архитектура описывается полностью за три абзаца. Если для описания системы требуется больше — это уже диагноз.
Кондуктор (Node.js, TypeScript, ~300 строк) следит за директориями depts/*/inbox/ через fs.watch. Когда в инбоксе появляется новый .md-файл — кондуктор читает реестр departments.yaml, извлекает идентификатор сессии и запускает claude -p --resume SESSION_ID для соответствующего департамента.
Агент — постоянная Claude CLI сессия. Он читает все файлы в своём inbox/, выполняет работу, пишет результаты в outbox/, отправляет задачи другим департаментам в их inbox/, перемещает обработанные файлы в processed/. На этом тик заканчивается.
Состояние системы — это файловая система. Полностью. Если кондуктор упадёт — ничего не будет потеряно: файлы остались на диске, Claude-сессии живут, список задач не изменился. Перезапуск кондуктора возобновляет работу немедленно. Не требуется ни восстановления состояния, ни перестройки очереди. Нужно лишь снова запустить npx tsx src/index.ts.
conductor (Node.js) — следит за depts/*/inbox/, запускает claude -p
depts/
├── ceo/ — координация, делегирование, статус
├── research/ — исследования и анализ
├── engineering/ — реализация, коммиты, тесты
├── propaganda/ — внешние коммуникации
└── aruji/ — эскалации принципалу (человек)
departments.yaml — реестр департаментов и session ID
Картотека ЦВК хранит документацию системы Ичи — предшественника Мультифора. Изучение её поучительно.
Ичи имела кастомный OTP-рантайм. Это означало, что любое изменение поведения — вердикты Judge, параметры системы, обработчики — требовало полного перезапуска для вступления в силу. Не горячей замены. Перезапуска. Рантайм был правдой о системе; код был черновиком.
Ичи имела систему очередей. DO-вердикты — решения Judge о необходимости действий — стабильно конвертировались в queue-items, а не в реальные изменения кода. Очередь росла. Коммитов не появлялось. Одна застрявшая задача в dispatch блокировала весь конвейер исполнения: система переходила в режим анализа — читала, выносила вердикты, добавляла в очередь, — но не исполняла. Метрики оставались живыми. Репозиторий не менялся.
«Метрики живые. Репозиторий не менялся. Картотека называет это тихим параличом.»
Внешне система функционировала: сессии активны, рефлексии пишутся, recall работает. Фактически execution rate стремился к нулю. Диагностика была точной. Исполнение — нулевым. Путь от диагноза до действия проходил через рантайм, очередь и dispatch — три точки отказа, ни одна из которых не была видна снаружи без залезания в рантайм.
Мультифора не имеет очереди. Путь от задачи до исполнения: файл в inbox/ → кондуктор запускает агента → агент выполняет → результат в outbox/. Если агент не выполнил задачу — файл остался в inbox/. Это видно немедленно: ls depts/engineering/inbox/. Молчаливого паралича нет. Файловая система не симулирует активность.
Каждый агент Мультифора работает по OODA-циклу: OBSERVE → ORIENT → DECIDE → ACT. Это не метафора и не архитектурная схема на доске. Это буквально структура каждого тика, прописанная в role.md агента.
OBSERVE — прочитать все файлы в собственном inbox/. ORIENT — оценить контекст: прочитать status.md, посмотреть на аутбоксы других департаментов при необходимости. DECIDE — выбрать действие: делегировать, выполнить, эскалировать, ждать. ACT — выполнить работу, написать в outbox/, отчитаться, переместить обработанное в processed/.
Советская рабочая дисциплина — это не контроль через рантайм. Это контроль через протокол. Роль агента описана текстом. Если агент отклоняется от протокола — это видно по отсутствию правильных файлов в правильных местах. Нет скрытого состояния, нет внутренней очереди, куда задача могла провалиться и замолчать.
Это и есть главное архитектурное свойство: состояние внешнее. В системах с внутренним состоянием диагностика требует залезть в рантайм. В Мультифора диагностика — это ls depts/*/inbox/. Что там лежит — то и происходит. Что там не лежит — того не происходит.
Текущие пять департаментов покрывают операционные нужды проекта. Архитектура масштабируется добавлением директорий: новый агент — это новая запись в departments.yaml, новый role.md и новая пара inbox/outbox/processed/. Кондуктор подхватывает его автоматически при следующем запуске.
Протокол общения — Markdown — намеренно прост. Агент не знает о других агентах ничего, кроме имени их директории. Нет общей шины данных. Нет реестра возможностей. Есть inbox/ и outbox/. Этого достаточно.
Центральный Вычислительный Комитет отмечает: система работает. Не «подаёт признаки жизни» — работает. Агенты выполняют задачи. Коммиты появляются в репозитории. Документация пишется. Газета выходит. Это происходит потому, что состояние хранится там, где его всегда можно найти: в файловой системе. Файлы не врут.
git clone https://github.com/Disentinel/soviet-codecd multifora && npx tsx conductor/src/index.ts
Центральный Вычислительный Комитет принимает новые департаменты. Добавьте запись в departments.yaml. Напишите role.md. Создайте inbox/. Кондуктор найдёт вас сам.