SSD Nodes Learn Hosting plans →
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-11-06

Omnigent: единый интерфейс для управления CLI агентов

Узнайте, как Omnigent оркестрирует работу Claude Code, Codex и других CLI в единой сессии. Разбираем настройку YAML, фиксацию версии 0.7.0 и изоляцию агентов на VPS.

Что такое Omnigent

Omnigent — это мета-инструмент с открытым исходным кодом: единый уровень оркестрации, который управляет уже установленными у вас CLI-инструментами агентов. Он не заменяет Claude Code, Codex, Cursor, OpenCode, Hermes или Pi. Он запускает их, назначает каждому задачу и контролирует результат в рамках одной сессии с общим набором политик. Databricks опубликовала репозиторий в июне 2026 года под лицензией Apache 2.0, а PyPI до сих пор классифицирует пакет как alpha.

Практическое преимущество ограничено и стоит того, чтобы изложить его прямо. Вы описываете агента один раз в YAML и указываете инструмент, который его запускает. Измените эту единственную строку, и тот же агент будет работать через CLI другого поставщика. Больше ничего в вашей настройке не меняется, так как Omnigent управляет циклом над агентами, а не циклом внутри них.

Что такое мета-harness и чем он отличается от фреймворка?

Harness — это программа, которая запускает модель в цикле. Она считывает ваш запрос, вызывает инструменты, редактирует файлы и возвращает результат. Claude Code — это harness. Codex — это harness. Вы устанавливаете его, входите в систему, и он работает самостоятельно.

Фреймворк — это библиотека, на основе которой вы пишете код. Вы импортируете её, определяете шаги на Python, и ваша программа становится агентом. Смена поставщика в этом случае означает редактирование вашего кода, так как клиент поставщика интегрирован непосредственно в вашу программу.

Мета-harness находится на уровень выше обоих этих понятий. Это супервизор, который запускает harness как дочерние процессы. Omnigent запускает CLI поставщика, передает ему задачу и считывает ответ. Вы сохраняете уже установленный CLI, а также все подписки или ключи API (application programming interface), которые вы уже используете для оплаты. В этом заключается вся разница, и именно она определяет целевую аудиторию инструмента: люди, у которых уже работают несколько агентских CLI и которые устали управлять ими по отдельности в каждом терминале.

Какую проблему решает уровень оркестрации?

  • Смена поставщика требует изменения одной строки. Определение агента содержит harness и model в виде данных, поэтому перенос роли от одного поставщика к другому сводится к правке YAML-файла, а не к переписыванию кода.
  • Проверка может охватывать разных поставщиков. Разницу (diff), подготовленную одной моделью, проверяет модель от другой компании. Две модели из одного семейства часто имеют одинаковые «слепые зоны», поэтому второе мнение от того же поставщика менее ценно.
  • Единое место для политик. Бюджетные лимиты и запросы на подтверждение действий описываются в файле агента и применяются ко всем вложенным субагентам.
  • Сессия переживает любой отдельный инструмент. Один транскрипт охватывает работу, выполненную несколькими CLI, поэтому вы можете просмотреть историю событий, не собирая данные из четырех разных логов терминала.

Цена этого — сам уровень оркестрации. Любая ошибка в Omnigent теперь становится ошибкой, возникающей между вами и агентом, который раньше работал автономно. На стадии alpha это реальная проблема, а не теоретическая.

Место многоагентных систем в ряду инструментов для одного агента

Если вы еще не запускали ни одного агента на сервере, начните с этого. Наше руководство по запуску агента для программирования на VPS полностью описывает работу с одним агентом, и именно такая конфигурация подразумевается в Omnigent. Более широкая область самостоятельно размещаемых ИИ-агентов — это место, где вы выбираете самих агентов, а изучение принципов работы агентов станет лучшей отправной точкой, если используемая здесь терминология вам в новинку.

Omnigent также отличается от уровня коннекторов. Задачи вроде предоставления агентам доступа к вашим источникам данных касаются того, к чему агент может обратиться. Omnigent же определяет, какой агент запускается, в каком порядке и с какими ограничениями. Вы можете использовать оба решения одновременно, так как они не пересекаются.

Что необходимо перед установкой

  • Python 3.12 или новее. Опубликованный пакет требует requires-python >= 3.12.
  • tmux, так как внутри него запускаются терминальные обвязки (harnesses).
  • Как минимум один CLI поставщика, уже установленный и с выполненным входом в систему.
  • Node.js 22 или новее с npm, так как они необходимы для обвязок Claude, Codex и Pi. Установщик проверяет наличие Node 22.10 или более поздней версии и выдает предупреждение при её отсутствии. Самому Omnigent Node не требуется: wheel-пакет на PyPI уже содержит собранные веб-ресурсы, и Node становится обязательным требованием только при сборке из git-репозитория.

Установка фиксированного релиза, а не main

curl -fsSL https://raw.githubusercontent.com/omnigent-ai/omnigent/main/scripts/install_oss.sh | sh -s -- --version 0.7.0

Часть sh -s -- — это не декорация. Без неё sh считывает --version как собственную опцию, и установщик не запускается вовсе. Если sh — это Bash, он выводит собственную версию и успешно завершает работу, поэтому ничего не устанавливается и никаких предупреждений не выводится. С -s -- команда sh считывает скрипт из канала и передает --version 0.7.0 установщику. Для репозитория, выпускающего критические изменения каждые несколько недель, это разница между воспроизводимым окружением и неприятным сюрпризом.

Релиз 0.7.0 по-прежнему опубликован в PyPI по состоянию на 29 октября 2026 года, но новейший релиз — это 0.21.0 от 5 ноября 2026 года. Более ранний релиз 0.19.1 является патчем безопасности без новых функций: он обновляет зависимости после компрометации промежуточного удостоверяющего центра eMudhra, и проект рекомендует выполнить обновление. Важна фиксация версии, а не её номер: фиксируйте ту версию, которую вы протестировали, и читайте о критических изменениях в примечаниях к релизу перед переходом на новую. Однако фиксация версии не является поводом пропускать релизы безопасности, поэтому обновляйтесь, как только они выходят.

Установщик использует uv, менеджер пакетов Python от Astral, и предлагает установить uv первым, если он отсутствует. Если uv уже установлен, пропустите скрипт:

uv tool install --force --python 3.12 "omnigent==0.7.0"

Дополнительные компоненты (extras) следуют той же схеме, и флаг повторяется: --extra e2b --extra kubernetes для скрипта или "omnigent[e2b,kubernetes]" при использовании uv. Скрипт также добавляет дополнительный компонент databricks, если вы не передадите --no-databricks, в то время как приведенная выше команда uv устанавливает пакет без него. Обратите внимание, что git-тег имеет вид v0.7.0, тогда как версия пакета в PyPI — 0.7.0.

uv помещает бинарный файл в директорию, которую возвращает uv tool dir --bin, обычно это ~/.local/bin, и установщик предлагает добавить её в профиль вашей оболочки. Если команда не найдена сразу после чистой установки, причина именно в этом. Проверьте, что у вас установлено:

omni upgrade --check

Эта команда сравнивает установленную версию с последней опубликованной и сообщает, доступно ли обновление, не выполняя его. omni и omnigent — это одна и та же программа под разными именами.

Укажите провайдера модели

omni setup

Мастер настройки ищет учетные данные, уже присутствующие в вашей среде, и запрашивает недостающие. Он поддерживает API-ключи, подписки у вендоров, шлюзы, такие как OpenRouter или Ollama, а также рабочие области Databricks. Если вы уже используете локальный сервер моделей с Ollama на той же машине, укажите шлюз на него, и трафик не покинет пределы сервера.

Минимальный запуск мультиагентной системы

Примеры агентов находятся в репозитории, поэтому клонируйте ту же версию (tag), которую вы установили, а не main.

git clone --depth 1 --branch v0.7.0 https://github.com/omnigent-ai/omnigent.git
cd omnigent
omnigent run examples/polly/

Polly — это мультиагентный оркестратор для написания кода, который поставляется вместе с репозиторием. В его конфигурации объявлены субагенты с именами claude_code, codex, opencode, cursor, hermes и pi, а также правило, ради которого стоит запускать этот сценарий: проверку всегда выполняет агент другого поставщика, отличного от того, кто написал код. Polly не пишет код самостоятельно. Он составляет план, разбивает задачу на рабочие элементы, делегирует каждый из них и направляет полученные diff-файлы на проверку агенту другого поставщика.

Перед делегированием задач Polly выполняет предварительную проверку, чтобы определить, какие CLI субагентов присутствуют в системе. Если установлен CLI только одного поставщика, передавать diff некому, поэтому установите как минимум два, прежде чем оценивать результат. Debby, другой пример из комплекта, — это агент для ведения дискуссий с двумя «головами»: Claude и GPT:

omni debby

Это быстрый способ убедиться, что настроены оба провайдера, так как для работы агента необходимо участие обоих.

Субагенты объявляются как инструменты

Файл агента имеет формат YAML. executor определяет среду выполнения (harness), модель и аутентификацию. tools содержит серверы MCP (model context protocol), функции Python и субагенты. Субагент — это инструмент с type: agent и собственным исполнителем, что является механизмом для всех вышеперечисленных компонентов.

name: orchestrator
prompt: |
  You coordinate coding and review tasks.

executor:
  harness: claude-sdk
  model: databricks-claude-sonnet-4-6

tools:
  coder:
    type: agent
    prompt: Write and test code.
    executor:
      harness: claude-sdk
      model: databricks-claude-opus-4-7
  reviewer:
    type: agent
    prompt: Review proposed changes.
    executor:
      harness: claude-sdk
      model: databricks-claude-sonnet-4-6
omnigent run path/to/my_agent.yaml

Эти идентификаторы моделей взяты из примера docs/AGENT_YAML_SPEC.md в проекте и являются именами, размещенными в Databricks. Замените harness и model на значения, которые omni setup настроил на вашей машине. Другие параметры среды выполнения в спецификации включают antigravity, copilot, kimi и qwen. Текущая спецификация на main также документирует acp:<slug> для любого сервера Agent Client Protocol, но в спецификации v0.7.0 он не указан, поэтому убедитесь в его работоспособности на вашей зафиксированной версии, прежде чем использовать. Спецификация также поддерживает pass_history: true для субагента, что передает ему историю родительского диалога. Это расходует токены при каждой делегации, поэтому не включайте эту опцию для субагентов, которым достаточно только текущей задачи. Программист, чья prompt предписывает внести минимально необходимое изменение, передает рецензенту diff, который достаточно мал для реального прочтения; это важнее, чем выбор модели для любой из ролей.

Почему длительную оркестрацию следует запускать на VPS

Работа нескольких агентов — это не минутная задача. Она включает планирование, делегирование, ожидание завершения параллельных операций с git worktrees, проверку и внесение правок. Если вы закроете крышку ноутбука, все процессы прервутся. VPS (виртуальный частный сервер) работает постоянно и сохраняет сетевое соединение, поэтому сессия продолжается, даже когда вы не следите за ней.

omnigent server --background
omnigent server status

Сервер предоставляет веб-интерфейс на порту 6767. omnigent server status сообщает, запущен ли процесс, а omnigent stop завершает его работу. В версии v0.7.0 команда omni server start была удалена в пользу omni server --background; в v0.9.0 она была возвращена в качестве устаревшего псевдонима.

Не открывайте порт 6767 для доступа из публичной сети. Существует два безопасных способа работы. Первый: оставьте порт закрытым на брандмауэре и перенаправьте его через SSH с помощью ssh -N -L 6767:localhost:6767 you@your-server, после чего откройте веб-интерфейс по адресу http://localhost:6767 на локальной машине. Второй: настройте TLS (transport layer security) перед сервисом и включите аутентификацию:

OMNIGENT_AUTH_ENABLED=1 omnigent server --background

Настройка брандмауэра — стандартная задача, описанная в основах работы с ufw на VPS. Если на сервере уже запущены контейнеры за Traefik для нескольких приложений Docker Compose, то Omnigent станет еще одним сервисом в этой же схеме.

Для развертывания в контейнере в директории deploy/docker/ репозитория находится конфигурация Compose: ./bootstrap.sh создает секреты в .env, затем docker compose up -d запускает Omnigent и Postgres, при этом сервер использует порт 8000 вместо 6767. OMNIGENT_PORT позволяет изменить этот порт хоста. Compose автоматически вычисляет DATABASE_URL (для других целей развертывания эта же переменная выбирает между Postgres или SQLite), а OMNIGENT_AUTH_ENABLED по умолчанию имеет значение 1 внутри контейнеров, что является корректным значением для любого сервиса, доступного извне.

Что касается выбора ресурсов, в примечаниях к развертыванию указано, что потребление памяти сервером в режиме ожидания составляет около 275 MB RSS, а конфигурация Fly.io требует машину с 1 GB памяти. Измерение в режиме ожидания относится только к супервизору; 1 GB — это выделенный объем памяти машины. Дочерние агенты могут использовать рабочую директорию и окружение родительского процесса, включая его песочницу через os_env: inherit. Использование отдельных git worktrees — это выбор стратегии оркестрации, поэтому подбирайте размер сервера исходя из количества одновременно запущенных инструментов и агентов. После запуска сервера выполните omnigent login https://your-host, а затем omnigent host https://your-host, чтобы зарегистрировать ваш ноутбук, после чего omnigent attach <session_id> позволит возобновить активную сессию с другого устройства.

Изолируйте каждый субагент в песочнице перед завершением настройки

Omnigent поставляет песочницу уровня операционной системы под названием Omnibox. В Linux она использует пространства имен bubblewrap и seccomp, поэтому границы принудительно устанавливаются ядром, а не промптом агента. Агент, подвергшийся инъекции промпта, не сможет обойти правила ядра. Сначала установите зависимость:

sudo apt install bubblewrap

Конфигурация находится в os_env внутри файла агента:

os_env:
  type: caller_process
  cwd: .
  sandbox:
    type: linux_bwrap
    write_paths: [.]
    write_files: []
    read_paths: []
    allow_network: true
    cwd_allow_hidden: [.venv]
    env_passthrough: []
    egress_rules: []
    credential_proxy: []

Рабочая директория доступна только для чтения, пока вы не укажете её в write_paths, поэтому скомпрометированный агент не сможет записывать данные за пределами рабочей области. Файлы с точкой в начале (dotfiles) верхнего уровня в рабочей директории и каждый корень read_paths остаются скрытыми, если они не указаны в cwd_allow_hidden. Это означает, что широкое разрешение на чтение не приведет к случайному раскрытию директорий .ssh или .aws верхнего уровня. Вложенные файлы с точкой остаются видимыми по умолчанию; установите cwd_hidden_scan_recursive: true, чтобы скрыть их во всем дереве. Установите egress_rules, и весь HTTP- и HTTPS-трафик будет проходить через прокси с политикой запрета по умолчанию, где каждое правило записывается как "METHODS host/path-glob". credential_proxy идет еще дальше: агент всегда оперирует только заполнителем, а прокси подставляет реальный секрет в момент отправки запроса, поэтому утечка транскрипта не приведет к утечке полезных данных. В конфигурации с несколькими инструментами каждый субагент имеет собственный блок песочницы в своем конфигурационном файле в agents/, поэтому рецензенту можно запретить доступ к сети, в то время как разработчик сохранит его.

Ограничение указано в документации, и оно важно. Песочница ОС применяется к вызовам инструментов sys_os_* и к терминалам. Она не распространяется на MCP-серверы и на сам процесс супервизора Omnigent. Запущенный вами MCP-сервер работает вне песочницы с вашими правами доступа. Из-за этого пробела более надежным шаблоном остается использование одной одноразовой машины на агента, что является темой статьи запуск агентов для программирования в одноразовой VM. Вторая часть задачи — учетные данные, и защита секретов от доступа агента становится сложнее, а не проще, когда шесть субагентов используют один хост.

Пороги расходов — это политики, объявляемые в том же файле:

policies:
  budget:
    type: function
    handler: omnigent.policies.builtins.cost.cost_budget
    factory_params:
      max_cost_usd: 5.00
      ask_thresholds_usd: [1.00, 3.00]

Политика cost_budget запрашивает подтверждение при достижении мягких порогов и блокирует все модели при достижении max_cost_usd по умолчанию. Установка непустого списка expensive_models превращает лимит в шлюз понижения уровня: модели вне этого списка могут продолжать расходовать средства. Запуск, который планирует работу с одним поставщиком, выполняет реализацию со вторым, а проверку с третьим, расходует средства в трех местах одновременно, поэтому устанавливайте пороги до первого автоматического запуска, а не после получения первого счета. Встроенные функции также включают max_tool_calls_per_session и ask_on_os_tools, которые запрашивают подтверждение перед выполнением операций с файлами и оболочкой. Наши заметки о контроле расходов AI-агентов на VPS применимы здесь напрямую, и они становятся еще актуальнее, так как параллельно работающие субагенты увеличивают скорость расхода средств.

Насколько быстро развивается этот репозиторий?

ГрафикDays between tagged Omnigent releases, v0.2.0 to v0.7.0
Данные, на которых построен график
[
  {
    "version": "v0.2.0",
    "released": "2026-06-19",
    "interval": 3
  },
  {
    "version": "v0.3.0",
    "released": "2026-06-27",
    "interval": 8
  },
  {
    "version": "v0.4.0",
    "released": "2026-07-03",
    "interval": 6
  },
  {
    "version": "v0.5.0",
    "released": "2026-07-10",
    "interval": 7
  },
  {
    "version": "v0.5.1",
    "released": "2026-07-10",
    "interval": 0
  },
  {
    "version": "v0.6.0",
    "released": "2026-07-21",
    "interval": 11
  },
  {
    "version": "v0.7.0",
    "released": "2026-07-27",
    "interval": 6
  }
]

Это даты публикации релизов, взятые со страницы релизов проекта по состоянию на 3 августа 2026 года. В период между 2026-06-19 и 2026-07-27 было выпущено 7 релизов с тегами, а самый длительный интервал между двумя любыми релизами составил 11 дней. Версия v0.5.1 вышла в тот же день, что и предыдущий релиз. Первые два релиза в PyPI, 0.1.0 от 13 июня 2026 года и 0.1.1 от 16 июня 2026 года, отсутствуют на странице релизов GitHub и не включены в график; три дня, указанные для v0.2.0, отсчитываются от 0.1.1.

Два из этих релизов изменили команды, которые уже были задокументированы в руководствах. В v0.7.0 была удалена omni server start в пользу omni server --background. В v0.6.0 опция omnigent[memory] была переименована в omnigent[hindsight], но memory осталась как псевдоним для совместимости, который продолжал работать до версии 0.10.0. Начиная с 0.11.0, выпущенной 25 августа 2026 года, этот псевдоним был удален, поэтому строка установки, скопированная из июньской статьи, больше не загружает клиент Hindsight. Это аргумент в пользу использования --version в вашей команде установки и указания тега в вашем git clone, а не вопрос предпочтений в стиле оформления.

Темп разработки не замедлился с момента того анализа. К 29 октября 2026 года в PyPI значится версия 0.20.0, выпущенная 28 октября — это тринадцать минорных релизов после 0.7.0, и в примечаниях к выпускам проекта указаны критические изменения в нескольких из них. Два из них важны для любого кода, скопированного с этой страницы: в v0.12.0 простая команда omni стала запускать фоновый хост вместо агента Polly (теперь omni run запускает агент по умолчанию), а для v0.13.0 требуется tmux версии 3.3 или новее для управления терминалами.

Чему я пока не стал бы доверять

По состоянию на 27 октября 2026 года репозиторий имеет около 11k звезд, 1.8k форков и примерно 910 открытых проблем, при этом первый публичный релиз состоялся чуть более четырех месяцев назад. Звезды отражают интерес, а интерес не означает зрелость. Проект имеет статус alpha, и история релизов выше подтверждает, что это действительно alpha.

  • Я бы не стал запускать его на хосте, где хранятся производственные учетные данные, поскольку песочница не распространяется на MCP-серверы или супервизор.
  • Я бы не оставлял запуск без присмотра без политики cost_budget, так как три поставщика могут выставлять счета параллельно; при непустом списке expensive_models расходы могут продолжаться на более дешевых моделях.
  • Я бы не стал открывать сервер на публичном IP-адресе без настроенного OMNIGENT_AUTH_ENABLED и TLS перед ним.
  • Я бы пока не считал YAML агента стабильным между минорными версиями, поэтому фиксируйте версию и читайте примечания к релизу перед обновлением.

Еще один момент, о котором стоит знать, чтобы он не стал сюрпризом: в v0.6.0 была добавлена анонимизированная телеметрия использования. В README указано, что она собирается по умолчанию, и проект документирует это, включая способы отказа от сбора данных, на специальной странице телеметрии. Прочитайте эту страницу и примите осознанное решение, если машина используется для работы с клиентами.

В чем Omnigent действительно хорош сегодня, так это в том, для чего он был создан. У вас есть три или четыре CLI агента, вы уже платите за них, и вы хотите, чтобы один из них писал, а другой проверял. Это работает сейчас, на одной машине, с реальной песочницей в Linux. Относитесь ко всему, что выходит за рамки этого, как к многообещающему, но незавершенному функционалу.

FAQ

Является ли Omnigent агентом или системой для запуска агентов?

Это система для запуска агентов. Omnigent — это мета-оболочка: она запускает уже установленные вами CLI-инструменты поставщиков, такие как Claude Code, Codex или OpenCode, распределяет между ними задачи и контролирует результаты в рамках одной сессии. Утилита не использует собственные модели. В этом её отличие от фреймворков, где вы пишете код на Python с использованием библиотеки, и ваша программа сама становится агентом.

Нужно ли мне устанавливать Claude Code и Codex, чтобы начать работу с Omnigent?

Вам необходимо установить и авторизовать хотя бы один CLI-инструмент поставщика, так как Omnigent управляет этими программами, а не заменяет их. Для работы с примером Polly вам потребуются два или более инструментов от разных поставщиков. Правило Polly гласит, что проверку кода всегда должен выполнять поставщик, отличный от того, кто его написал, поэтому при наличии только одного CLI не будет второго поставщика, которому можно отправить diff.

Как установить конкретную версию Omnigent вместо последней?

Передайте --version в скрипт установки с помощью sh -s --, как показано в sh -s -- --version 0.7.0. Без -s -- утилита sh воспринимает --version как собственный аргумент, и установщик не запускается: например, Bash выводит свою версию и завершает работу. Если у вас уже установлен uv, uv tool install --force --python 3.12 "omnigent==0.7.0" выполняет ту же задачу. Тег в git — это v0.7.0, а строка версии в PyPI — 0.7.0.

Достаточно ли песочницы Omnibox для запуска агентов без присмотра?

Она обеспечивает надежную защиту в рамках своей области применения и четко определяет свои ограничения. В Linux используются bubblewrap и seccomp, поэтому ядро принудительно ограничивает доступ к файлам и сети, и агент не может обойти эти ограничения. В документации указано, что это применимо к вызовам инструментов sys_os_* и терминалам, но не распространяется на MCP-серверы или процесс супервизора Omnigent. Таким образом, MCP-сервер работает с вашими обычными правами доступа, поэтому использование отдельной виртуальной машины для каждого агента остается более надежным способом изоляции при работе без присмотра.

Сколько оперативной памяти требуется серверу Omnigent на VPS?

Согласно примечаниям к развертыванию, проект потребляет около 275 МБ RSS в режиме ожидания, а его конфигурация для Fly.io предусматривает выделение машины с 1 ГБ памяти. Показатель в режиме ожидания относится только к самому серверу, без учета дочерних агентов. Дочерние агенты могут использовать общую рабочую директорию и окружение родительского процесса, включая его песочницу через os_env: inherit; наличие отдельных рабочих копий не гарантируется. Запуски в стиле Polly используют параллельные рабочие деревья git (git worktrees), поэтому рассчитывайте объем RAM и дискового пространства исходя из количества агентов, которые вы планируете запускать одновременно, а не исходя из потребностей самого сервера.

Была ли эта статья полезной?