Пока каждый второй разработчик лепит собственный нодовый редактор, российский инженер пошёл другим путём: вместо очередного острова с несовместимым форматом - открытый конструктор, где воркфлоу становится переносимым документом, а не заложником одного интерфейса.
Проблема, которую все видят, но никто не чинит
ComfyUI, n8n, самописные обвязки вокруг Replicate и Fal - все они решают одну задачу, но каждый заваривает результат в свой несовместимый формат. Воркфлоу, собранный в одном месте, в другое не переезжает. Его трудно воспроизвести, невозможно передать, а пользователь намертво прибит к чужому интерфейсу. Сотни команд раз за разом изобретают одну и ту же коробочку с входами и выходами - и каждый раз в никуда. Новая Зеландия - Бельгия прямая трансляция
Проект SnarkRoute предлагает выход. Рабочая часть уже доступна публично под названием BoojumRoute Lab - локальный блочный редактор маршрутов. Под ним лежит главное: Open Route Protocol, переносимый формат для описания AI-, model- и API-воркфлоу. Канонический формат файла - .orp, есть алиасы .orp.json, .orp.yaml и человекочитаемый .route.
Маршрут как главный артефакт
Центральная идея - в том, что главным объектом становится не модель и не редактор, а маршрут. Читаемый документ, в котором прописаны ноды, связи, параметры, провенанс, экономика запуска и ссылки на ассеты. Провайдерских секретов внутри нет, внешние файлы напрямую не зашиваются. Такой файл можно переслать, вскрыть, ремикснуть и запустить - и он не рассыплется при переезде.
Ноды при этом пакуются в формат .snarknode, перетаскиваются в редактор, складываются в библиотеку, собираются в составные блоки и сворачиваются обратно в одну ноду. Провайдеры - Replicate, Gemini, OpenRouter - подключаются через provider-neutral Model Gateway: нода обращается к зарегистрированному адаптеру, а сам маршрут остаётся провайдер-агностичным.
Безопасность и экономика - не на потом
Главный страх при словах «переносимые ноды, которые можно слать друг другу» - превратить это в небезопасный npm только для графов. Разработчик заложил ответ с самого начала.
- Никакого исполнения чужого произвольного JavaScript - ноды сообщества представляют собой декларативные манифесты с явными разрешениями
- AssetRef вместо прямой загрузки файлов: маршрут держит ссылку, хост сам решает, что с ней делать
- Секреты остаются только на хосте и не уезжают ни с маршрутом, ни с бандлом
- Hash-пиннинг срабатывает при подмене ассета и помогает делать воспроизводимые запуски
Экономика тоже зашита в формат с первого дня - поля для авторов, лицензий, долей выручки и провенанса есть уже сейчас. Платежей и сеттлментов в v0.1 нет: рубильник опущен намеренно, но архитектурное место под него занято. Добить поля потом, не сломав совместимость, было бы невозможно.
Что уже работает
Проект построен на TypeScript-монорепо с pnpm, Vite, React Flow, Fastify и тестами на Vitest. Всё работает local-first: ключи, запуски и ассеты по умолчанию не покидают машину пользователя. Живой пример - апскейл картинки: input.image проходит через Replicate Clarity Upscaler, затем в preview.image и output.file, а результат сразу кэшируется локально, потому что ссылки Replicate протухают.
В репозитории лежит Codex-скилл для сборки нод - чтобы любой желающий мог собрать собственные блоки без погружения во внутренности движка. Часть кода писалась с помощью языковых моделей, и проект честно это документирует. Но отсутствие протокола, тестов и валидационных схем моментально превращает AI-помощь в кашу - именно поэтому здесь AGPL, vitest и декларативные манифесты вместо молитвы над чужим JS.