OpenResearch от alphaXiv превращает coding-агентов в исследовательских. Из коробки он работал с Claude Code, Codex, OpenCode, Cursor и Google Antigravity. Мне хотелось использовать в нём ещё три агента, которые уже стояли у меня на Windows: Kimi Code, MiniMax Code и ZCode. Я поставил эту задачу Claude Code в облачной сессии и получил форк с релизом для Windows и Linux, в котором новые агенты работают наравне со старыми.
Итоги в цифрах:
-
1 ч 51 мин чистой работы агента и $62 на токены (5265 руб. по курсу ЦБ РФ на сегодня). Работала модель Opus 5.5 в режиме мышления Extra: она вышла совсем недавно, 22 сентября, и эта задача с OpenResearch стала для меня хорошим поводом посмотреть её в деле;
-
13 ч 13 мин по часам от первого сообщения до релиза v0.3.1, основную часть заняли ночь (пока я спал) и мои проверки на Windows;
-
20 коммитов, 48 файлов, +3818/−451 строк, 27 новых тестов;
-
три релиза: v0.3.0, v0.3.1 и v0.3.2.
Дальше рассказываю, что такое OpenResearch, как мы разделили работу, как устроены адаптеры и на какие грабли наступили. Их набралось 13.
Что такое OpenResearch
OpenResearch — это локальное рабочее место для исследовательских агентов. Вы ставите CLI orx, запускаете orx up, и на http://127.0.0.1:4791 открывается дашборд. В нём вы ставите задачу coding-агенту: найти литературу, сформулировать гипотезу, написать код, запустить эксперимент и разобрать результат.
Возможности проекта:
-
Параллельное исследование. У каждого направления своя сессия агента и свой изолированный git worktree. Несколько агентов могут параллельно пробовать разные идеи.
-
Воспроизводимые эксперименты. Варианты хранятся в git-нативном дереве экспериментов, а каждый ран получает неизменяемый архив записанного коммита.
-
Доказательства в контексте. Логи, диффы, файлы, результаты и артефакты привязаны к работе, которая их породила.
-
Выбор агента и модели для каждой сессии. После нашей доработки агентов восемь: Claude Code, Codex, OpenCode, Cursor, Google Antigravity, Kimi Code, MiniMax Code и ZCode.
-
Выбор вычислений. Можно считать локально, по SSH, на Slurm, Kubernetes, Ray, Hugging Face Jobs, Modal, Tinker или на управляемых вычислениях openresearch.sh.
-
Литература. Команды
orx discover,orx paperиorx litищут по alphaXiv, OpenAlex, bioRxiv и PubMed. -
Всё локально. Проекты, чаты, эксперименты, раны, логи, код и артефакты лежат в SQLite и файлах на вашей машине. Создание проекта или запуск рана ничего не публикует.
-
Автоисследование. Агент может сам пройти цикл: предложить идею, изменить код, запустить эксперимент, посмотреть на результаты и решить, что пробовать дальше.
Под капотом orx — это программа на Rust. Дашборд написан на React и вшит в бинарник. Каждый агент подключён через свой адаптер (harness): адаптер умеет найти CLI агента, проверить вход, запустить ход и разобрать поток событий.
Задача и разделение ролей
Я сформулировал задачу так: «хочу получить релиз OpenResearch, который поддерживал бы Kimi, MiniMax Code и ZCode „из коробки“ наряду с Claude Code, Codex, OpenCode, Cursor и Google Antigravity».
Роли распределились так:
-
Claude работал в облачном Linux-контейнере Claude Code. Он писал код, тесты, скрипты-зонды и документацию, гонял CI и собирал релиз. Windows у него не было. Единственной Windows-машиной для него был GitHub Actions: я включил job, который собирает
orx.exeартефактом. -
Я запускал скрипты-зонды на своей Windows 10, входил в аккаунты агентов, проверял сборки и присылал логи и скриншоты.
Ключевые решения Claude вынес мне в виде вопросов с вариантами:
-
какие платформы релизить: выбрали Windows и Linux, без подписи macOS;
-
куда смотрит автообновление: на релизы форка;
-
кто проверяет живые ходы: я, на своей машине;
-
через что подключать Kimi и MiniMax: через официальные CLI, а не через внутренности десктоп-приложений.
Работа шла в режиме плана: Claude записывал план в файл, я его одобрял, и только потом начинались правки. Самая длинная пауза сессии, семь с лишним часов, — как раз ожидание такого одобрения, пока я спал.
Вечером за 1 ч 11 мин работы агента появились зонды, общий ACP-драйвер, три адаптера, интеграция в дашборд и зелёный CI. Утром за 40 минут агент исправил всё, что вскрылось на живой Windows, и выпустил два релиза. Остальное время сессия ждала: меня, CI или утра. Ночью агент просто ждал, пока я высплюсь и одобрю план: в отличие от меня, сон ему не нужен.
Как устроены адаптеры
Сначала Claude исследовал все три CLI. Он скачал npm-пакеты в контейнер, снял --help и проверил протоколы. Выяснилось вот что:
-
Kimi Code (
kimi) и MiniMax Code (mcode) умеют Agent Client Protocol (ACP), то есть JSON-RPC 2.0 по stdio. Обоим подходит один общий драйвер. -
ZCode ACP не поддерживает: его
app-serverговорит на закрытом протоколе. Зато у него есть режим печати-p … --output-format stream-jsonс--resume, почти как у Cursor.
В итоге получилось четыре новых файла в src/local/harness/:
|
Файл |
Строк |
Что делает |
|---|---|---|
|
|
1432 |
Общий ACP-драйвер. Отвечает за initialize, resume, load и new, режимы, модели и thinking, стрим текста и инструментов, запросы разрешений, план-карточку |
|
|
303 |
Kimi Code: поиск |
|
|
408 |
MiniMax Code: поиск |
|
|
746 |
ZCode: CLI или рантайм, встроенный в десктоп-приложение, разбор stream-json, режимы Edit, YOLO и Plan |
Один ход через ACP выглядит так:
Самое ценное в ACP — запрос разрешений. Агент присылает session/request_permission с вариантами «разрешить» и «отклонить». orx показывает в чате карточку «Approval required» и отвечает агенту выбором пользователя:
{"method":"session/request_permission","params":{ "options":[{"optionId":"approve_once","kind":"allow_once"}, {"optionId":"reject","kind":"reject_once"}], "toolCall":{"title":"Bash","content":[{"type":"text","text":"Running: rm hello.txt"}]}}}
ZCode оказался интереснее. Отдельного CLI у меня не было, только десктоп-приложение. Пользователей форка тоже не хотелось бы заставлять отдельно устанавливать CLI, если у них уже установлено десктопное приложение ZCode. Внутри Electron-бандла лежит тот же рантайм, что и у CLI: resources\glm\zcode.cjs. orx запускает его через сам ZCode.exe с ELECTRON_RUN_AS_NODE=1. Окно при этом не открывается, а вход и настройки провайдера берутся из десктопа.
Дашборд получил три новых идентификатора агентов, иконки, подписи и тексты онбординга на шести языках. Для Kimi и MiniMax появились кнопки установки и входа. Для ZCode их нет специально: его «бинарник» — это GUI-приложение.
Сложности и как мы их решали
Это главная часть. На пути к релизу мы поймали 13 сбоев. Ни один из них не был опечаткой: каждый сидел на стыке с чужой системой.
Windows
1. PowerShell 5.1 не понимает UTF-8 скрипт. Первый зонд probe-agents.ps1 упал с ошибками разбора. Причина: Windows PowerShell 5.1 читает файл без BOM в системной кодировке cp1251, и одно длинное тире — превращалось в мусор. Решение: зонд стал строго ASCII.
2. Зонд открывал окна десктопных приложений. Когда зонд запускался, у меня на экране «сами открывались и закрывались» Kimi и ZCode. Скрипт искал бинарники по имени, и Get-Command zcode без учёта регистра находил ZCode.exe на PATH. Решение: вторая версия зонда запускает только файлы с именами kimi, mcode и zcode, а в orx появился фильтр is_desktop_app. Если рядом с файлом лежит resources/app.asar, это Electron-приложение, и CLI его не считают.
3. MiniMax «Install broken». Дашборд показывал MiniMax оранжевым, а в консоли было:
C:\Users\...\.minimax-code\npm\mcode.cmd --version failed: '"node"' is not recognized as an internal or external command
npm-шим mcode.cmd вызывает node из PATH, а Node.js, который ставит установщик MiniMax, в PATH не попадает. Для ходов orx уже добавлял этот Node в PATH, а для проверки версии — нет. Решение: проверка версии теперь запускается с тем же PATH, что и ход, и для этого есть тест.
Установщики и вход
4. Официальный установщик MiniMax падает. Установщик писал «Staged versioned MCode release validation failed» и не оставлял mcode. Мы нашли обход: у него к этому моменту уже скачан собственный Node.js, и тем же npm можно поставить @minimax-ai/code в ~/.minimax-code/npm. Этот обход встроен в кнопку «Install» дашборда: если официальный путь не сработал, установщик переходит на npm.
5. mcode login уводит не в тот регион. Вход открывал account.minimax.cn, хотя мой десктоп работает с minimax.io. По умолчанию CLI выбирает регион cn. Решение: подсказки и кнопка входа используют mcode login --region global.
Поведение агентов
6. Режим Ask у MiniMax ничего не спрашивал. В тестах через ACP режим default у MiniMax спокойно выполнил rm -rf за пределами проекта без единого запроса. Выяснилось, что default — это собственная политика риска MiniMax, а не «спрашивать всегда». Решение: пункта «Ask» у MiniMax в orx нет. Первый раз Claude поправил только описание в модуле, а сам пункт остался в меню. Это заметили на живой проверке и убрали уже с тестом.
7. Kimi после продолжения сессии врёт о своём режиме. Я сделал ход в Auto, переключился на Ask и попросил закоммитить. Kimi закоммитил и даже настроил git config, не показав ни одной карточки. Claude воспроизвёл это в контейнере на фиктивном провайдере модели. После session/resume Kimi сообщает currentModeId: "default", хотя сессия продолжает работать в auto. orx видел «уже default» и режим не переключал. Решение: для продолжённой сессии orx больше не верит сообщённым значениям и всегда отправляет выбранные:
if available && (resumed || current != Some(mode)) { calls.push(("session/set_mode", json!({"sessionId": session_id, "modeId": mode})));}
8. «Unknown thinking value: high». У Kimi набор уровней thinking зависит от модели: у одних это off/low/high/max, у других только off/on. orx проверял уровень по списку модели, с которой сессия открылась. После смены модели он отправлял high той модели, у которой такого уровня нет. Решение: orx сначала ставит модель, затем берёт configOptions из её ответа и выбирает thinking уже по новому списку. Модели с off/on получают on.
Аккаунты и тарифы
9. ZCode: «Insufficient balance». У моего аккаунта Z.ai не было ни плана, ни баланса, так что в десктопе ZCode тоже была ошибка. Адаптер пришлось писать без живого аккаунта. Claude поднял в контейнере фиктивный сервер, совместимый с OpenAI API, прописал его в ZCode как провайдер и записал настоящие потоки событий: текст, вызов инструмента, отказ, ошибку провайдера и продолжение сессии. Эти потоки лежат в тестах как фикстуры.
10. Kimi: «not signed in», хотя вход выполнен. Первый живой ход Kimi закончился сообщением о том, что я не вошёл. Логи были пустыми. Claude нашёл в исходниках Kimi, что код -32000 auth_required приходит и тогда, когда уже начатый ход упал на авторизации у провайдера. Причину Kimi кладёт в текст ошибки, а наш адаптер этот текст выбрасывал. Когда мы начали показывать текст, стала видна настоящая причина:
Kimi Code refused the request: 401 Your current subscription does not have access to kimi-for-coding-highspeed.
Модель K2.7 Code Highspeed просто не входит в мой тариф. Решение: такой отказ теперь показывается как отказ провайдера с причиной, а не как «вы не вошли». Выбор K2.8 Preview всё решил.
Сборка и CI
11. UI собрался без переводов. CI упал на проверке «Committed UI bundle matches source». Оказалось, что плагин paraglide (i18n) при сборке качает свои модули с jsdelivr. Из контейнера jsdelivr недоступен, и плагин молча собрал бандл с пустыми строками. Claude написал обходной скрипт: npm-версии плагинов раздаются с локального HTTP-сервера, сборка идёт через него, а конфигурация потом возвращается как была. Правильность проверили так: исходный upstream-коммит этим способом собрался в точно такой же бандл по хешу.
12. Тесты требовали команды установки для каждого агента. Тесты harness_setup проверяли, что у каждого агента есть команды install, login и update. У ZCode их нет специально. Решение: явный список исключений NO_SETUP и отдельная проверка, что для ZCode эти команды действительно не выдаются.
13. Релиз форка упал бы при компиляции. Релизный workflow upstream помечает сборку как официальную (ORX_OFFICIAL_RELEASE_BUILD=1). А build.rs в этом случае требует, чтобы репозиторий был alphaXiv/OpenResearch, иначе падает с panic:
Ok(value) if value == "1" => panic!( "ORX_OFFICIAL_RELEASE_BUILD=1 is only valid in alphaXiv/OpenResearch GitHub Actions"),
Claude заметил это до первого релиза. Из релизного пайплайна форка он убрал всё, что есть только у alphaXiv: пометку официальной сборки, подпись macOS, проверку production-канала, контракт телеметрии и выпуск macOS-приложения. Сборки форка идут в канале development, поэтому в телеметрию alphaXiv ничего не уходит.
Бонус: заголовок чата
Уже во время работы над этой статьёй, на скриншотах из контейнера, всплыла ещё одна мелочь. Чаты Kimi и ZCode назывались «Read and follow .openresearch/agent/autoresearch-local.md…». Оба агента берут заголовок из начала первого prompt, а orx ставит туда указатель на плейбук сессии. Исправление убирает служебные вставки orx из заголовка агента. Оно вышло в релизе v0.3.2.
Что получилось
|
Агент |
Как подключён |
Режимы |
Модели |
Продолжение сессии |
|---|---|---|---|---|
|
Kimi Code |
ACP, |
Ask, Auto, YOLO, |
K2.8 Preview, K2.7 Code Highspeed, K3-256k, K3; thinking low/high/max |
|
|
MiniMax Code |
ACP, |
Auto, Full access, |
MiniMax-M3 (± thinking), M2.7 |
|
|
ZCode |
stream-json, |
Edit, YOLO, |
из настроек ZCode |
|
Релизы
Все три релиза собраны для Windows x64, Linux x64 и Linux ARM64 и опубликованы на странице релизов форка. Время указано по UTC и по Москве.
|
Версия |
Дата и время |
Что вошло |
|---|---|---|
|
25.09.2026, 10:16 UTC (13:16 МСК) |
Первый релиз форка. Адаптеры Kimi Code, MiniMax Code и ZCode, общий ACP-драйвер, установка и вход из дашборда, иконки агентов, исправления по живой проверке на Windows. Сборки для Windows и Linux, |
|
|
25.09.2026, 11:13 UTC (14:13 МСК) |
Уровень thinking у Kimi выбирается по текущей модели: больше нет ошибки «Unknown thinking value». Иконки трёх новых агентов в README |
|
|
25.09.2026, 12:59 UTC (15:59 МСК) |
Заголовки чатов Kimi Code и ZCode берутся из сообщения пользователя, а не из служебной инструкции orx |
Все три агента видны в Settings → Harnesses, ставятся skills (orx install-skills), продолжают сессию после перезапуска orx up и получают плейбук OpenResearch. Для Kimi и MiniMax есть кнопки установки и входа прямо в дашборде.
Как начать (мини-инструкция по моему форку OpenResearch для учёных и исследователей)
Windows (сначала поставьте Git for Windows, OpenResearch использует Git Bash):
powershell -ExecutionPolicy Bypass -c "irm https://github.com/artur-shaikhutdinov/OpenResearch-Kimi-MiniMax-ZCode/releases/latest/download/openresearch-cli-installer.ps1 | iex"
Можно и без установщика: скачайте openresearch-cli-x86_64-pc-windows-msvc.zip со страницы релизов и распакуйте orx.exe.
Linux:
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/artur-shaikhutdinov/OpenResearch-Kimi-MiniMax-ZCode/releases/latest/download/openresearch-cli-installer.sh | sh
Дальше:
-
orx upоткроет дашборд наhttp://127.0.0.1:4791. -
Поставьте нужного агента и войдите в него:
-
Kimi Code:
irm https://code.kimi.com/kimi-code/install.ps1 | iex(Linux:curl -fsSL https://code.kimi.com/kimi-code/install.sh | bash), затемkimi login. Выбирайте модель, которая входит в ваш тариф. -
MiniMax Code: кнопка Install в Settings → Harnesses, затем
mcode login --region global(или--region cnдля китайского аккаунта). -
ZCode: достаточно десктоп-приложения ZCode с выполненным входом. Нужны план GLM Coding или баланс.
-
Claude Code, Codex, OpenCode, Cursor и Antigravity подключаются как раньше.
-
-
orx install-skillsустановит skill OpenResearch во все найденные агенты, включая три новых. -
Создайте проект и откройте чат. В пикере выберите агента, модель и режим.
-
Обновление до новой версии форка:
orx update.
C:\...\orx-windows-x86_64>orx updateUpdating orx 0.3.1 → 0.3.2 ...✓ Updated orx 0.3.1 → 0.3.2.
Выводы
Что агент сделал хорошо. Claude сам прошёл путь от «изучи проект» до двух релизов. Он спроектировал общий ACP-драйвер, записал настоящие потоки событий в фикстуры, нашёл причины нескольких ошибок в чужих минифицированных исходниках и воспроизвёл баг Kimi на фиктивном провайдере до того, как чинить. Отдельно стоит отметить поведение: каждую развилку, которая меняла продукт, он выносил на моё решение, не пушил в main и не мержил сам. Однажды система разрешений заблокировала ему мерж, и он честно попросил сделать это меня.
Где без человека никак.
-
Живые аккаунты и тарифы: ни один mock не расскажет, что K2.7 Highspeed не входит в мой план.
-
Настоящая Windows с её кодировками, GUI-файлами на PATH и npm-шимами.
-
Продуктовые решения: платформы, версия релиза, куда смотрят обновления.
Из 13 проблем восемь нашлись только на моей машине.
Сколько стоило. $62 (5265 руб. по курсу ЦБ РФ на сегодня) и около двух часов работы агента, растянутых на вечер и утро с ночным перерывом на мой сон. Самой дорогой частью оказалось не написание кода, а цикл «собрать → проверить на Windows → разобрать лог». Отрисовка схем для этой статьи с использованием плагина diagram-design, съёмка скриншотов в контейнере Linux и подготовка версии релиза v0.3.2 с исправлением ошибки про заголовки чатов обошлись ещё в $26 (2208 руб. по курсу ЦБ).
ИИ для open source. В конце концов я создал Feature Request Issue и Pull Request с запросом на слияние моего форка с проектом OpenRearch. Будет приятно, если результаты работы включат в оригинал этого open source продукта.
Ссылки
-
Форк: artur-shaikhutdinov/OpenResearch-Kimi-MiniMax-ZCode, релиз v0.3.2
-
Оригинал: alphaXiv/OpenResearch, документация: openresearch.sh/docs
-
Запрос на слияние: Pull Request #441, feature request: Issue #440
-
Kimi Code: code.kimi.com, MiniMax Code: minimax.io, ZCode: z.ai
Схемы нарисованы плагином diagram-design в палитре дашборда OpenResearch. Скриншоты чатов Kimi и ZCode сняты в контейнере на фиктивном провайдере модели, скриншоты Windows — на моей машине.
ссылка на оригинал статьи https://habr.com/ru/articles/1086796/