OpenBot — своя платформа для ИИ-коллег с браузером, файлами и полным аудитом действий
📂 Исходный код на GitHubПлатформа для ИИ-коллег, которых компания может запускать у себя: Docker Compose, своя PostgreSQL, любой AG-агент подключается как сотрудник, единый шлюз решает и записывает каждое действие. Лицензия MIT, статус alpha.
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