OpenTag
Открытый local-first шлюз между тредами команды и кодинг-агентами. Пишешь @opentag почини баг в Slack или в issue - он запускает Claude Code, Codex или OpenClaw у тебя на сервере и отвечает в том же треде готовым pull request, а не отпиской. Поставили версию 0.10.0 на Cloud Server, разобрали установку, шесть исполнителей и где это ломается.
Вердикт
- дев-командам, которые хотят звать кодинг-агента прямо из Slack, GitHub, GitLab или Linear
- тем, кому важно, чтобы код и ключи не уходили в чужое облако (агент работает на своем сервере)
- кто хочет один тег на несколько агентов сразу (Claude Code, Codex, Cursor, OpenClaw)
- соло-разработчику - проще звать агента напрямую, без диспетчера
- не-инженерной команде: вся модель заточена под PR, CI и репозитории
- кому нужен образ «заказал и работает» - тут ручная настройка и три внешние зависимости
Что это и какую задачу решает
OpenTag - это «дежурный инженер по вызову», которого зовут тегом. Написал в Slack-треде или в GitHub-issue @opentag investigate this - и он запускает выбранного кодинг-агента у тебя на сервере, по твоему репозиторию, а потом возвращается в тот же тред с результатом: открытый pull request, зеленые проверки CI, мерж. Не пересказ «я все сделал», а ссылка на артефакт.
Ключевая идея - «Done требует доказательства». Исполнитель, отрапортовавший об успехе, для OpenTag еще не значит «готово»: он может держать задачу открытой, пока не выполнены заданные условия завершения (PR создан, чеки зеленые, изменение влито). Весь след пишется в локальный audit-ledger, а когда агент предлагает правку - в треде рисуется компактный «чек»: что изменится, безопасно ли, и кнопка Apply. Нажал - появился настоящий pull request.
Аудитория узкая, но понятная: дев-команды 5-50 человек, которым важен self-hosting и контроль над кодом. Это не универсальный чат-бот, а командная диспетчерская над кодинг-агентами.
Чем отличается от облачных аналогов
Соседи по нише - проприетарные «human + agent» сервисы вроде Claude Tag и облачные помощники в репозитории. Сравниваем по тому, что влияет на выбор.
| Параметр | OpenTag (self-hosted) | Облачный SaaS |
|---|---|---|
| Где выполняется агент | на вашем сервере | в чужом облаке |
| Где код и ключи | остаются на машине | уходят провайдеру |
| Выбор агента | 6 исполнителей + любой ACP | один вендор |
| Модель цены | свой сервер, без подписки за место | подписка за пользователя |
| Vendor lock-in | нет, Apache-2.0 | да |
| Готовность | early-stage, v0.10.0 | зрелые |
Тех-стек и архитектура
OpenTag написан на TypeScript и распространяется как npm-пакет @opentag/cli. Это не docker-веб-приложение, а CLI плюс фоновый демон: на Linux он живет под systemd --user, на macOS - под LaunchAgent. Веб-дашборда нет - управление идет из чата и через терминал.
Ядро - диспетчер, который принимает событие из платформы (упоминание в треде), собирает контекст-пакет по репозиторию и запускает исполнителя. Все исполнители говорят по единому протоколу ACP (Agent Client Protocol), поэтому тег не привязан к одному вендору. Из коробки заявлено шесть исполнителей плюс любой кастомный ACP-агент:
Codex, Claude Code и OpenCode поднимаются сразу - OpenTag тянет их закрепленные ACP-пакеты через npx. Cursor, Hermes и OpenClaw помечаются not found, пока их бинарь не окажется на PATH: их надо ставить отдельно. Executor echo - технический, для отладки, реального агента не запускает.
Минимальная конфигурация
Сам диспетчер легкий: тяжесть - в агенте, которого он запускает под задачу, и в inference, который обычно внешний.
| Node.js | >= 22.14 (ставили 22.23) |
| Установка @opentag/cli на диске | ~113 МБ |
| Диспетчер в простое | легкий, агенты - на запросе |
| Рекомендуем тариф | CPU2-RAM4-DISK50 |
| Тариф Fatmetal | CPU2-RAM4-DISK50 - 500 ₽/мес |
Важно: запас по памяти нужен не диспетчеру, а самому кодинг-агенту в момент прогона (сборка, тесты, git-операции в отдельном worktree). Если inference внешний (Anthropic, OpenAI), GPU не нужен, и тарифа CPU2-RAM4-DISK50 (500 руб/мес) под сам OpenTag хватает.
Развертывание на Fatmetal
Базовый путь - Cloud Server + Ubuntu 24.04, дальше два npm-шага. Docker не нужен.
Поставить Node 22 и CLI
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - sudo apt-get install -y nodejs sudo npm install -g @opentag/cli@latestПроверка:
opentag --version- у нас 0.10.0.Пройти setup
opentag setupИнтерактивный визард спросит: язык, платформу (Slack/GitHub/...), исполнителя, локальный проект, креды платформы и как держать демон запущенным. Флаги
--platform,--executor,--projectпредзаполняют ответы, но визард все равно ждет подтверждений (см. «Где может сломаться»).Проверить и запустить
opentag doctor # диспетчер, привязки, исполнители opentag executors # какие агенты готовы opentag platforms # какие платформы настроены opentag service start # фоновый демон (systemd --user)Дальше - упоминание из подключенной платформы:
@opentag investigate this.
Что измерили и с чем работает
Стенд: Fatmetal Cloud Server CPU2-RAM4-DISK50, Ubuntu 24.04.4, Node 22.23, @opentag/cli 0.10.0, август 2026.
| Node.js на стенде | v22.23.2 |
| Установка CLI на диске | ~113 МБ |
| Установка Node + CLI | ~2-4 мин (РФ-сеть) |
| Готовы из коробки | Codex, Claude Code, OpenCode |
| Платформы с визардом | 8 (Slack, GitHub, GitLab, Linear, Lark, Telegram, Discord, Teams) |
Уровень поддержки платформ разный. Полноценно (события, ответы, статус-апдейты, действия) - Slack и GitHub; GitLab, Linear и Lark - без части возможностей; Telegram, Discord и Teams вендор помечает как превью.
Главное: сам OpenTag - легкий control-plane, его footprint - это Node-процесс и ~113 МБ на диске. Реальный вес приходит в момент прогона задачи вместе с кодинг-агентом; inference обычно внешний, поэтому GPU на VM не нужен.
Проверено на версии 0.10.0, август 2026. Проект early-stage, на новых версиях поведение может отличаться.
Где может сломаться
Реальные грабли, на которые наткнулись при запуске 0.10.0.
Три внешние зависимости. Чтобы тег заработал, клиенту нужны три вещи, которых нет в самом OpenTag: ключ провайдера под агента (Anthropic/OpenAI), приложение платформы с OAuth (Slack app, GitHub app) и локальный репозиторий. Пустая VM «из коробки» бесполезна, пока это не привязано руками.
Публичный тоннель для вебхуков. Для доставки событий из GitHub (и Events API Slack) нужен публично доступный адрес. На чистой VM это отдельная настройка: тоннель или обратный прокси с доменом и TLS.
Не все агенты «из коробки». Codex, Claude Code и OpenCode подтягиваются через npx, а Cursor, Hermes и OpenClaw нужно ставить отдельным бинарем - иначе opentag executors покажет not found.
Причина. Даже с полным набором флагов (--platform, --executor, --project) команда opentag setup все равно уходит в интерактивный визард и ждет подтверждения выбора. Конфиг записывается только после прохождения мастера.
Решение. Держать живой терминал (TTY) при первичной настройке, либо оборачивать в expect. Именно из-за этого OpenTag плохо ложится в полностью автоматический headless-провижн - образ «заказал и работает» для него не собрать.
Безопасность и обновления
Главный аргумент OpenTag - local-first: код, ключи и полные трейсы прогонов остаются на вашей машине, а в платформу уходит только то, что нужно, чтобы ответить в треде и применить подтвержденное действие. Каждый прогон пишет локальный audit-ledger (исходное событие, решение о допуске, снимок контекста, артефакты, журнал доставки), доступный через opentag status --run <id>. Применение правки проходит через явный Apply в треде - агент не мутирует систему-источник без подтверждения.
Что закрыть перед продом: тоннель/обратный прокси с TLS для вебхуков, хранение ключа провайдера в секретах (не в открытом конфиге), ограничение, какие каналы и репозитории слушает демон. Обновление - через npm:
sudo npm install -g @opentag/cli@latest
opentag service restart
РФ-специфика: если исполнитель - Claude Code или Codex, ключ провайдера (Anthropic/OpenAI) из России достается через egress-прокси - агенту прописывают HTTPS_PROXY, и запросы уходят через зарубежный выход. Это снимает географические ограничения на доступ к модели.
Связь с другими стеками
- Обратный прокси / тоннель - Caddy или Nginx для публичного адреса и TLS под вебхуки GitHub и Slack.
- Egress-прокси - чтобы ключ Anthropic/OpenAI доставался из РФ; агенту прописывается через переменные окружения.
- OpenClaw - один из шести штатных исполнителей; если нужен универсальный агент, а не только кодинг, его можно подключить как ACP-бэкенд.
- GitHub / GitLab / Linear - трекеры, из которых прилетают задачи; результат возвращается туда же как PR или комментарий.
Когда это НЕ ваш выбор
Вы соло-разработчик
Если агент нужен вам одному, диспетчер - лишний слой. Проще поставить кодинг-агент напрямую и звать его в своем терминале или личном чате, без OpenTag посередине.
Команда не инженерная
Вся модель завершения построена на PR, зеленом CI и мерже, а платформы - это GitHub, GitLab, Linear. Для не-кодовых задач ценность резко падает.
Нужен продукт «под ключ»
Проект early-stage: production hardening, OAuth и мульти-хост еще дорабатываются. Если вам нужен стабильный образ «заказал и сразу работает», а не сборка руками с тремя зависимостями - подождите зрелых версий.
Частые вопросы
Нужен ли Docker?
Нет. OpenTag ставится как npm-пакет и работает как демон под systemd --user. Docker не требуется.
Какой Node нужен?
22.14 или новее. На стенде стоял Node 22.23, установка CLI заняла ~113 МБ на диске.
Каких агентов он умеет запускать?
Шесть встроенных: Codex, Claude Code, Cursor, OpenCode, Hermes, OpenClaw - плюс любой ACP-совместимый. Codex, Claude Code и OpenCode готовы из коробки.
Можно ли поднять его полностью скриптом, без рук?
Не до конца: opentag setup остается интерактивным даже с флагами. Для первичной настройки нужен живой терминал или обертка expect.
Уходит ли мой код в облако?
Нет. Модель local-first: код, ключи и трейсы остаются на вашей машине, в платформу уходит только сообщение для ответа и подтвержденные действия.
Как звать агента из Anthropic/OpenAI из России?
Через egress-прокси: исполнителю прописывают HTTPS_PROXY, и запрос к модели уходит через зарубежный выход.
Это готово для продакшена?
С оговорками. Проект early-stage (v0.10.0); перед продом нужны тоннель с TLS, секреты для ключей и ограничение слушаемых каналов.
Итог
OpenTag превращает упоминание в треде в реального кодинг-агента, который работает на вашем сервере и приносит pull request с доказательством, а не отписку. Сильные стороны - выбор из шести исполнителей по единому протоколу, local-first и гейты завершения. Слабые - early-stage, интерактивная настройка и три внешние зависимости. Для дев-команды, которой важен self-hosting, это рабочий инструмент уже сейчас; соло-разработчику проще звать агента напрямую.
Этот стек у нас запущен на тарифе X. Нашли баг в гайде - напишите, поправим в течение дня.