OpenBot — своя платформа для ИИ-коллег с браузером, файлами и полным аудитом действий

· 2 мин чтения
ai-agents self-hosted ag-ui governance enterprise
📂 Исходный код на GitHub

Платформа для ИИ-коллег, которых компания может запускать у себя: Docker Compose, своя PostgreSQL, любой AG-агент подключается как сотрудник, единый шлюз решает и записывает каждое действие. Лицензия MIT, статус alpha.

OpenBot — своя платформа для ИИ-коллег с браузером, файлами и полным аудитом действий

OpenBot от CopilotKit — это платформа, где ИИ-агенты работают не как виджеты в браузере, а как сотрудники компании. У каждого агента есть собственный браузер со своими логинами, своя папка с файлами и ограниченный набор инструментов. Всё это запускается на вашей инфраструктуре: данные лежат в вашей PostgreSQL, модель вы выбираете сами.

Главная особенность проекта — не интерфейс, а контроль над действиями. Любое действие агента — открыть страницу, изменить файл, вызвать MCP-сервер, показать компонент — сначала проходит через шлюз. Шлюз решает, разрешено ли действие, записывает его в журнал и только потом выполняет. Если правило запрещает действие, агент получает отказ и название сработавшего правила.

Авторы проекта подчёркивают: OpenBot — это шаблон, а не готовый продукт. Его нужно склонировать и переделать под себя. Готовой облачной версии нет, каждый workspace в репозитории приватный.

Что такое OpenBot

Платформа поднимается через Docker Compose: приложение, API, PostgreSQL, компьютеры агентов и внешний сервис CopilotKit Intelligence. Никакой готовой модели в комплекте нет — администратор вписывает свой ключ, он шифруется на диске и никогда не попадает в логи.

В примере поставляется тринадцать сотрудников. Они описаны не кодом, а конфигурацией:

  • General Assistant — бытовые рабочие задачи;
  • Knowledge — ответы на вопросы по внутренним материалам компании;
  • Risk Analyst — доступен как отдельная точка входа;
  • десять агентов в examples/fintech/agents/, у каждого своя одна задача: проверить заявку на расход по политике, превратить заметку со встречи в задачи, написать release notes по тому, что уже выложили, разобрать тикет, ответить новичку из handbook, подготовить документ с перечнем того, что не удалось найти, оформить интервью, передать дежурство, собрать известное перед продлением контракта, разложить отзывы клиентов по темам со ссылками на источники.

Своих агентов добавляют либо файлом в эту папку, либо через agents.yaml, либо прямо в интерфейсе на странице /agents.

Протокол AG-UI

Агент в OpenBot — это любая точка входа, которая говорит на открытом протоколе AG-UI. Потому платформа не привязана к одному фреймворку. Агенты на LangGraph, Mastra, CrewAI, Pydantic AI, Google ADK или написанные вручную подключаются одинаково, а правила и проверки живут в протоколе, а не внутри фреймворка.

Адрес точки входа проверяется при регистрации и при каждом редиректе — теми же проверками, что и при навигации браузера. Приватные адреса по умолчанию запрещены; чтобы разрешить свой, нужно перечислить их в AGENT_ENDPOINT_ALLOWED_HOSTS. Совпадение строгое: без звёздочек и без суффиксов.

AGENT_ENDPOINT_ALLOWED_HOSTS=agents.internal,10.0.0.42:9000

Главное: шлюз действий

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

Правила в CEL, отказ по умолчанию

Правила пишутся на языке CEL и проверяют:

Поле Что означает
tool.name, intent название инструмента и намерение
bot.id, actor.id кто именно действует
page.url, page.host, element.* страница и элемент на ней
key, command, file.* доступ к секретам, команда, файл
mcp.*, initiator.* MCP-вызов и то, что запустило сессию

Проверка запрета идёт раньше проверки разрешения. Если политики нет — не разрешено ничего. Если правило сломано — оно запрещает, а не разрешает. Поле initiator позволяет, например, отказать плановой задаче в действии, которое разрешено живому человеку.

Свой компьютер на каждого агента

Каждый агент получает отдельный контейнер, свою рабочую папку и свой профиль браузера. Если хост поддерживает gVisor, компьютеры запускают под ним: COMPUTER_RUNTIME=runsc. Внутри доступен не только браузер, но и командная строка — агент может запустить команду в своей папке, поставить нужное и обработать сохранённый файл. Команда проходит через тот же шлюз, поэтому правило может запретить её целиком или запретить отдельные команды, а сама команда в любом случае остаётся в протоколе.

Человек может перехватить управление

Агент, который упёрся в форму входа или запрос двухфакторной аутентификации, зовёт на помощь. Управление передаётся в той же панели и фиксируется событиями computer.help_requested, computer.control_taken, computer.control_released. Пока ведёт человек, действия агента не ставятся в очередь, а отклоняются.

Секреты в переписку не попадают: в журнале остаётся факт запроса и его длительность, но не значение.

Разделы интерфейса

Маршрут Назначение
/agents Создать, изменить, скопировать, запустить сотрудника
/channel/:id Переписка с сотрудником, его экран и список запусков
/bot Прямой диалог с агентом, ?agent=<id> выбирает конкретного
/skills Личные skills: создать и включить
/routines Постоянные задачи по расписанию
/admin/boundaries Политика действий для браузера, файлов и MCP
/admin/plugins MCP-серверы и права на их инструменты
/admin/components Публикация компонентов и права на них
/admin/credentials Зашифрованные секреты с доступом только на запись
/admin/people Люди, вошедшие в систему: роли и отзыв доступа
/admin/audit Что разрешили, что отказали, что упало

Быстрый старт

Нужен Docker, Bun версии 1.3 или новее, проект CopilotKit Intelligence с лицензией (есть бесплатный план, Intelligence можно развернуть самому) и ключ модели.

cp .env.example .env
bun install

npx --yes copilotkit@latest login
npx --yes copilotkit@latest project select
bun scripts/setup-learning.ts

Остаётся вписать OPENAI_API_KEY и свой ключ шифрования:

openssl rand -base64 32

Дальше:

bash scripts/start.sh

Скрипт поднимает сервисы Docker, накатывает миграции, запускает API на порту 3001 и приложение на порту 3010 и проверяет, что все части отвечают. После этого открывается http://localhost:3010.

Агент запускается на своей машине с OPENBOT_SINGLE_USER=true: любой запрос считается от одного администратора. Это сделано, чтобы свежий клон запускался без регистрации OAuth-клиента. Строка из .env.example удаляется, как только вы подключите вход — Google, Microsoft, Okta или собственный SAML/OIDC-провайдер компании. Без входа платформа отказывается стартовать, а не пускает всех подряд администраторами.

Развёртывание

Готовый образ содержит приложение, API, браузер агентов и, по желанию, PostgreSQL. Тот же .env, без Kubernetes:

docker run -p 3001:3001 --env-file .env \
  -e EMBEDDED_POSTGRES=on -v openbot-data:/var/lib/postgresql \
  ghcr.io/copilotkit/openbot:latest

Если PostgreSQL уже есть, флаг EMBEDDED_POSTGRES выключается, а в DATABASE_URL ставится адрес своей базы.

Skills, MCP и компоненты

Skills здесь — это инструкции, а не новые возможности. Личные skills привязаны только к агентам своего автора, skills развёртывания принадлежат администратору, вызываются через / в поле ввода. Агент со встроенным skill-creator может написать skill вместе с вами в разговоре и сохранит его только после нажатия на кнопку в карточке.

MCP-серверы управляются: Google Drive и Notion есть в каталоге, за ними стоит Composio с несколькими сотнями приложений от одного аккаунта, доступ — от имени того, кто спрашивает. В каталог попадают только вендоры, за которых отвечает это развёртывание. Неизвестные инструменты и инструменты своих серверов считаются записью, а не чтением.

Агент отвечает компонентами, а не только текстом. Собранные React-компоненты лежат в репозитории, черновые создаются в /admin/playground и публикуются без выкладки. Перед каждым вызовом сервер проверяет, что компонент существует, опубликован и не запрещён для этого агента.

Что важно понимать

Проект в статусе alpha, и авторы это подчёркивают: ждите шероховатостей и движущихся решений. Плюс несколько вещей, о которых стоит помнить:

  • компьютеры агентов слушают только 127.0.0.1 и требуют токен контейнера — знание порта не даёт доступа к вашему браузеру;
  • секреты хранятся через /admin/credentials, а не в конфигурации агентов и не в файлах репозитория;
  • переменная AGENT_COMPUTER_ALLOW_PRIVATE_HOSTS открывает агенту локальные сервисы, годится только для ноутбука, и развёртывание в production не стартует, пока она включена;
  • регулярные задачи имеют нижнюю границу в 15 минут, максимум 20 включённых задач и десять подряд упавших попыток выключают задачу.

Документация проекта лежит в репозитории: обзор, архитектура, конфигурация, сотрудники, развёртывание, регулярные задачи, разработка, релизы. Лицензия — MIT.

Источник: https://github.com/CopilotKit/openbot