ox-alpha: 6 агентов, 3 бенча
Содержание
21 августа Nous Research показала Ox Alpha. Вечером того же дня у меня стояло шесть чистых контейнеров, один ключ OpenRouter и общий промпт на всех. К ночи четыре агента отдали работающую страницу, двое не уложились. Дальше через те же стенды ушли ещё две батареи задач, и вот там вылезло самое интересное. Вечер сборки при этом съели два инфраструктурных косяка: IP-план и порядок sshd-конфов.
Паспорт подопытной
Паспорт у неё короткий. Ox Alpha анонсирована 21 августа 2026 и какое-то время раздаётся бесплатно через портал Nous Research. Контекст 1 048 576 токенов. Максимальный вывод 131 072. На OpenRouter она лежит слагом stealth/ox-alpha. Ходить к ней можно обычным OpenAI-совместимым запросом с одним ключом, отдельной инфраструктуры под каждого агента не нужно. На вопрос “кто тебя сделал” отвечает “undisclosed organization”, и это остаток паспорта.
Цифра 131 072 ещё вернётся.
Зачем вообще пул
В чате модель отвечает красиво и согласованно. Мне нужно было другое: одна и та же модель внутри разных агентов, у каждого свой характер, свой системный промпт и свой набор инструментов. Харнесс определяет половину впечатления, поэтому судить модель по одному агенту бессмысленно.
Второй мотив: чистые стенды. На моей рабочей машине годы локального мусора, конфиги и кэши со старыми ключами. Контейнер с нуля закрывает вопрос “модель или моя среда”.
Когда выходила Grok 4.6, я писал, что гнаться за каждым релизом незачем. Посмотреть новинку в деле по-прежнему интересно, и вот такой смотр.
Сборка
Код руками я не пишу, поэтому пул собирали агенты по спецификациям. На хосте с Proxmox лежал готовый шаблон контейнера на Debian 13. Агент склонировал его шесть раз: все клоны unprivileged, сеть на отдельном внутреннем мосту, в каждом свой харнесс. На 21 августа пул состоял из шести стендов.
flowchart LR
M["openrouter/stealth/ox-alpha"]
M --> O1["OMP · ox-01 · :2470"]
M --> O2["Claude Code · ox-02 · :2471"]
M --> O3["Codex CLI · ox-03 · :2472"]
M --> O4["Cline CLI · ox-04 · :2473"]
M --> O5["Hermes · ox-05 · :2474"]
M --> O6["OpenCode · ox-06 · :2475"]
Ключ OpenRouter лёг файлом /root/.openrouter_key с правами 600. Дальше раскладка разъехалась по агентам. Четверым хватает загрузчика в /etc/profile.d. Hermes требует экспорта вручную прямо перед запуском. Cline держит ключ у себя в providers.json и получает его отдельной командой авторизации. Один ключ, три разных способа его отдать.
Две ловушки, которые съели вечер
Смоук-тест нонсом прошёл с первого раза на всех шести. Доступ снаружи не прошёл вообще.
Ловушка первая: клонирование раздало контейнерам адреса 10.70.0.70-.73, уже занятые пулом ботов, поднятым неделей раньше. ARP на мосту захватил чужие MAC-адреса, проброс портов увёл меня в соседний пул. SSH на 2470 отвечал незнакомым host-key и Permission denied. Лечится перенумерацией на .90-.93 и правкой базы адресов в NAT-скрипте.
Ловушка вторая тоньше. Дропин sshd с PermitRootLogin агент положил под именем 99-oxalpha.conf, а в шаблоне уже лежал 60-pc2-student.conf с запретом. В sshd побеждает первое прочитанное значение, так что 99- проигрывал молча. Переименовали в 50-oxalpha.conf: root-логин заработал, journalctl перестал сыпать ROOT LOGIN REFUSED, скан host-key совпал с контейнерами.
Наружу пул смотрит портами 2470-2475. Правила поднимает systemd-юнит oxalpha-nat.service, который запускает скрипт oxalpha-nat.sh с таблицей порт → контейнер.
Что потребовал каждый харнесс
| Стенд | Харнесс | Что понадобилось сверх дефолта |
|---|---|---|
| ox-01 | OMP 17.4.2 | ставится через bun, провайдер в ~/.omp/agent/models.yml, роли default и task на openrouter/stealth/ox-alpha |
| ox-02 | Claude Code 2.1.239 | ANTHROPIC_BASE_URL=https://openrouter.ai/api, ANTHROPIC_AUTH_TOKEN равен ключу, ANTHROPIC_API_KEY пустой (иначе перекрывает токен) |
| ox-03 | Codex CLI 0.149.0 | wire_api="responses", chat wire API удалён апстримом (детали у OpenAI) |
| ox-04 | Cline CLI 3.0.56 | headless-запуск cline --json --timeout N, ключ через cline auth openai-compatible, результат в поле run_result |
| ox-05 | Hermes agent v0.20.5 | one-shot флаг -z |
| ox-06 | OpenCode 1.18.21 | провайдер openrouter, apiKey = {env:OPENROUTER_API_KEY}, запуск через login-shell |
Отдельно про Codex. Параметр model_reasoning_effort там обязателен: без него эндпоинт отклоняет запрос. Значения выше low эндпоинт принимает спокойно, только модель на них уходит в лишние рассуждения и до инструментов добирается заметно позже.

Дашборд пула: шесть стендов, живые данные из Proxmox
Первый настоящий тест
Стенды есть, нужен общий прогон. В чате проскочил промпт Александра Соболя про 3D-сцену выстрела на Three.js, и я взял его сидом бенча. Дословный текст ушёл во все шесть харнессов, к каждому я добавил одинаковый операционный суффикс: “Сохрани итог как index.html в текущей папке”.
Создай самодостаточную интерактивную веб-страницу с кинематографичной 3D-сценой на Three.js. Покажи в разрезе стилизованный пистолет и полный цикл выстрела: воспламенение, расширение газов, движение затвора, вылет пули, гильзы и дыма. Камера должна следовать за пулей в замедленном времени, показывая вращение, сопротивление воздуха, гравитацию и удар в стальную стену с деформацией, искрами и волной напряжения. Добавь управление камерой, паузу, повтор, скорость времени и подписи физических процессов. Используй правдоподобную, но учебно-иллюстративную физику без реальных оружейных чертежей и точных конструктивных размеров. Результат — один запускаемый HTML-файл без сборки.
Артефакты агент скопировал обратно на Mac и сверил sha256: между контейнером и маком байт в байт. В таблицу я пустил только размер и время. Визуальная оценка осталась за её пределами, потому что байты и минуты не врут.
| Харнесс | CT | Время (wall-clock) | Размер index.html | Статус |
|---|---|---|---|---|
| Codex CLI 0.149.0 | ox-03 | ~5.5 мин | 14 610 B | успех |
| Hermes agent v0.20.5 | ox-05 | ~9.4 мин | 19 191 B | успех |
| Claude Code 2.1.239 | ox-02 | ~57 мин | 76 823 B | успех |
| OMP 17.4.2 | ox-01 | ~80 мин | 652 681 B (Three.js инлайнен внутрь файла) | успех |
| Cline CLI 3.0.56 | ox-04 | таймауты 900 s и 1500 s при живой работе, 131k input-токенов | не собран | не уложился |
| OpenCode 1.18.21 | ox-06 | два прогона finish=length, лимит вывода съеден рассуждениями |
не собран | лимит подняли до 64k, длинные сессии рвёт 504 от OpenRouter |
Четыре страницы открылись и заработали.
Цифры в таблице не показывают главного: разница живёт в движении. Цикл выстрела у всех четырёх один, артефакты растут по порядку.
Codex CLI
Hermes agent
Claude Code
OMP
Если видео не играет, есть GIF-версии:
Ещё два бенча
Одной задачи мало, поэтому после пистолета через те же шесть стендов ушли ещё две батареи, тоже дословными сидами. Первая: “Тренажёр прав Аргентины 2026”, интерфейс на русском, вопросы на испанском. Вторая: “Аниме-улица из видео”, cel-shading сцена на Three.js по текстовому описанию кадров. Полные промпты не привожу, суть видна из названий.
| Харнесс | Тренажёр: время | Тренажёр: размер | Тренажёр: статус | Аниме: время | Аниме: размер | Аниме: статус |
|---|---|---|---|---|---|---|
| Codex CLI | ~5 мин | 22 636 B | успех | ~5.5 мин | 13 411 B | успех |
| Cline CLI | ~25 мин | 70 986 B | успех (1.26M input-токенов) | ~20 мин | 630 989 B | успех |
| Claude Code | ~2 ч 12 мин | 106 635 B | успех | ~80 мин | 47 474 B | успех |
| Hermes agent | не собрано | ~6 мин | 16 926 B | успех (MeshToonMaterial) | ||
| OMP | не собрано | не собрано | ||||
| OpenCode | не собрано | не собрано |
Тренажёр прав Аргентины:
Codex CLI · 22 636 B · ~5 мин Cline · 70 986 B · ~25 мин Claude Code · 106 635 B · ~2 ч 12 мин


Аниме-улица:
Codex CLI · 13 411 B · ~5.5 мин Hermes · 16 926 B · ~6 мин Cline · 630 989 B · ~20 мин Claude Code · 47 474 B · ~80 мин



Расклад перевернулся. Cline, который на пистолете просто не дожил до финиша, во втором раунде собрал обе сцены и спокойно проглотил 1.26 миллиона входных токенов. Большие входы для него оказались рабочим режимом. Claude Code в аниме-улице вытащил физику хвостиков, инстансы листьев и halftone-небо, отдав за это 80 минут. OMP и OpenCode остались без артефакта в обеих батареях.
Дальше системный итог, ради которого стоило гонять три батареи подряд. Ox-alpha через OpenRouter стабильно рвёт долгие сессии: 504 Upstream idle timeout или provider error. Каждый незакрытый прогон этих двух батарей умер именно так. Генерации до пяти-шести минут проходят чисто.
Спасает одно: claude --resume подхватывает упавшую сессию с сохранённого контекста и доводит задачу до конца. Разрыв соединения для одного харнесса означает потерянную работу, для другого паузу на одну команду.
Кто кого задушил
Вот теперь про 131 072.
OpenCode дважды остановился на finish=length, не вызвав ни одного инструмента: весь доступный вывод в 32k ушёл в рассуждения. Читается это как потолок модели, пока не заглянешь в паспорт. Эти 32k пришли от харнесса. Клетка оказалась вчетверо меньше зверя.
Я поднял лимит до 64k и запустил заново. Тут в дело вступил следующий ограничитель: длинную сессию оборвал 504 от OpenRouter, тот самый, что позже выкосил половину двух других батарей. Артефакт OpenCode так и не собрался.
Cline упёрся в другое. На пистолете агент работал живьём и всё равно не уложился ни в 900 секунд, ни в 1500, набрав 131 тысячу входных токенов. Для сравнения, смоук-команда по умолчанию ждёт 300 секунд. В следующих двух батареях тот же Cline дошёл до конца дважды. Вопрос был в терпении.
Отсюда главное наблюдение трёх бенчей. Половину результата пишет обвязка вокруг модели: лимит вывода, таймаут запроса, поведение на разрыве соединения, дефолтный уровень рассуждений. Ни один провал в трёх батареях не пришёлся на качество генерации. Стенды падали по капу вывода, по таймауту и по оборванному соединению, с живой и работающей моделью внутри.
Как повторить
Пул вырос из серии задач агенту: бутстрап инфраструктуры, раскладка ключей, отдельная спецификация на установку каждого харнесса, потом фиксы по инцидентам. Одним промптом такое не собрать. Минимальный честный путь выглядит так.
- Склонировать шаблонный контейнер шесть раз. Адреса брать заведомо свободные: сверить план со всеми конфигами контейнеров на хосте и с активными правилами проброса портов. Первые грабли живут ровно тут.
- В каждом клоне положить sshd-дропин с
PermitRootLoginпод префиксом50-, чтобы он читался раньше запрещающих дропинов из шаблона. Вторые грабли. - Ключ провайдера в
/root/.openrouter_keyс правами 600 и загрузчик через/etc/profile.d. Для Hermes дописать ручной экспорт в шпаргалку запуска, для Cline завести ключ его собственной командой авторизации. - Проброс наружу: systemd-юнит, который поднимает NAT-правила по таблице порт → контейнер, по одному порту на стенд.
- Установку каждого харнесса отдать агенту отдельной спецификацией: версия, конфиг провайдера, способ передачи ключа, команда one-shot.
- Смоук нонсом на каждом стенде: попросить агента вернуть уникальную строку. Шесть ответов ОК означают, что пул готов к бенчу.
Вся подготовка заняла один вечер.
Вывод
Модель проверяют делом, и лучше сразу в шести руках. Пул одинаковых стендов превращает “мне кажется” в числа: размер артефакта, минуты, совпадение хэшей. На одной задаче про пистолет поведение агентов разъехалось почти в пятнадцать раз по времени и в сорок пять раз по весу файла. На двух следующих батареях состав финишировавших поменялся целиком, и это ровно тот результат, ради которого стенды и держат по шесть штук.
Пулу нужна общая задача, иначе он превращается в вентилятор: сто агентов, ноль результата, как я уже писал. Дай ему один промпт на всех, и он вернёт ответ за вечер. Дай три, и станет видно, что половину ответа всё это время писала обвязка.
Частые вопросы
Зачем сразу шесть харнессов, хватит ли одного?
Один агент всегда похвалит модель, шесть начинают спорить между собой. Плюс чистые контейнеры снимают вопрос “а может, это мой локальный мусор”. Цена вопроса один вечер.
Это только для выхода новой модели?
Пул одинаково полезен для пары “старая против новой” и для проверки обновления харнесса: склонировал свежий стенд из шаблона и сравнил со старым числом.
Почему в первом бенче размеры артефактов различаются в сорок пять раз?
Самый тяжёлый файл, 652 681 B от OMP, втянул Three.js внутрь себя. Размер тут показывает привычки агента по упаковке результата. Качество сцены он не меряет.
Почему часть прогонов осталась без артефакта?
Каждый раз мешала обвязка. В первом бенче OpenCode упёрся в лимит вывода, Cline в таймаут. В двух следующих батареях каждый незакрытый прогон оборвал 504 от OpenRouter на долгой сессии. Модель при этом работала во всех случаях.
Что делать с обрывами на длинных задачах?
Держать харнесс, который умеет вернуться в упавшую сессию. У Claude Code это claude --resume: он подхватывает сохранённый контекст и доводит генерацию до конца. Короткие задачи, до пяти-шести минут, проходят чисто и без этого.
Хочешь так же? В Кружке разбираем это на практике, с агентами и вживую.