Все проекты

Мини-шлюз OpenClaw

Минимальный headless-шлюз, маршрутизирует трафик агентов/LLM через порт, с SSE-стримингом и OAuth device-логином.

TypeScriptTelegramLLM gateways
01

Задача

Полные агентные платформы тяжелы, когда нужен лишь маленький постоянно работающий шлюз для маршрутизации вызовов моделей и каналов в эксперименте.

02

Что делали

Обрезанный форк OpenClaw без интерфейса и лишнего — только backend, запуск через `OPENCLAW_PORT=18889 pnpm start` — чтобы работал как лёгкий постоянный сервис.

03

Результат

Маленький шлюз, который можно поднять на порту, чтобы принимать агентный или LLM-трафик, не запуская весь стек OpenClaw.

Dev-story статья

Мини-шлюз OpenClaw: как создавался проект

Мы стартовали с полноценного агентного рантайма, построенного вокруг чат-интерфейса и целого зоопарка мессенджер-каналов, но нужно нам было совсем другое: headless-процесс, который слушает порт, проксирует трафик кодинг-агентов и LLM, отдаёт токены стримом и разбирается с логином. Напряжение было хирургическим — сохранить внутренности маршрутизации, стриминга и авторизации нетронутыми, вырезав при этом UI, веб-модули и все каналы, кроме того, что используется как хранилище, чтобы приложенческое дерево TypeScript не отказывалось собирать отдельный dist.

Разделы

05

Модули

05

Стек

TypeScript + Telegram

01

Почему появился проект

Полные агентные платформы тяжелы, когда нужен лишь маленький постоянно работающий шлюз для маршрутизации вызовов моделей и каналов в эксперименте.

Мы стартовали с полноценного агентного рантайма, построенного вокруг чат-интерфейса и целого зоопарка мессенджер-каналов, но нужно нам было совсем другое: headless-процесс, который слушает порт, проксирует трафик кодинг-агентов и LLM, отдаёт токены стримом и разбирается с логином. Напряжение было хирургическим — сохранить внутренности маршрутизации, стриминга и авторизации нетронутыми, вырезав при этом UI, веб-модули и все каналы, кроме того, что используется как хранилище, чтобы приложенческое дерево TypeScript не отказывалось собирать отдельный dist.

02

Что было создано

Обрезанный форк OpenClaw без интерфейса и лишнего — только backend, запуск через `OPENCLAW_PORT=18889 pnpm start` — чтобы работал как лёгкий постоянный сервис.

Минимальный backend-only шлюз, который слушает OPENCLAW_PORT и проксирует запросы к провайдерам кодинг-агентов, отдавая ответы по SSE. Он несёт OAuth-вход по device-code для провайдеров, контекст по каждому пользователю через заголовок x-user-id и режим авторизации, который можно полностью отключить для локального запуска. Telegram остаётся только как storage/канальный backend; UI нет.

03

Основные модули и путь пользователя

M01

Сведение до backend-only: удалены UI, веб-модули и все каналы кроме Telegram, затем добавлена минимальная одноцелевая точка входа шлюза, которая биндится на OPENCLAW_PORT и избегает старых зависимостей от каналов

M02

Хелперы OAuth-входа по device-code для провайдеров кодинг-агентов плюс auth.mode 'none', чтобы локальный инстанс мог работать вообще без логина

M03

SSE-стриминг оказался самой капризной частью — realtime-флашинг потока и парсинг SSE прошли через цикл откат-и-повторное-применение, прежде чем токен-пайп выдержал нагрузку

M04

Профиль и контекст памяти по каждому пользователю маршрутизируются через заголовок x-user-id, так что один шлюз обслуживает разных пользователей без пересечений

M05

Хирургия сборки, чтобы приложенческое TS-дерево эмитировало чистый dist: переписывание путей импорта .ts на .js, настройка tsc emit и дефолтный каталог config/state в ~/.openclaw-mini

04

Архитектура и технологические решения

Сделано на TypeScript, Telegram, LLM gateways.

TypeScript на Node, сборка через pnpm, вход по device-code OAuth к провайдерам кодинг-агентов и отдача обратно через Server-Sent Events; основная работа — это удаление плюс принуждение tsc эмитировать запускаемый отдельный dist.

05

Результат и выводы

Маленький шлюз, который можно поднять на порту, чтобы принимать агентный или LLM-трафик, не запуская весь стек OpenClaw.

Компактный headless-шлюз, который запускаешь одной env-переменной и одной командой — без UI, без разрастания каналов — он логинится, маршрутизирует агентный трафик и отдаёт ответы стримом; честно говоря, это форк, обрезанный до одной задачи, а не новый продукт.

Читать дальше

Эти проекты близки по техническим или продуктовым решениям и показывают, как тот же принцип работает в другом контексте.

Есть похожая идея?

Обсудить проект