Kimi, MiniMax Code и ZCode в OpenResearch: форк за один вечер вместе с Claude Opus 5.5

—

от автора

OpenResearch и восемь coding-агентов, три из них новые

OpenResearch и восемь coding-агентов, три из них новые

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-агенту: найти литературу, сформулировать гипотезу, написать код, запустить эксперимент и разобрать результат.

Схема: исследователь, OpenResearch, coding-агент, git worktree, эксперименты, литература и вычисления

Схема: исследователь, OpenResearch, coding-агент, git worktree, эксперименты, литература и вычисления

Возможности проекта:

  • Параллельное исследование. У каждого направления своя сессия агента и свой изолированный 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 записывал план в файл, я его одобрял, и только потом начинались правки. Самая длинная пауза сессии, семь с лишним часов, — как раз ожидание такого одобрения, пока я спал.

Хронология сессии: вечер — разведка, реализация и CI; ночь; утро — исправления по Windows и два релиза

Хронология сессии: вечер — разведка, реализация и CI; ночь; утро — исправления по Windows и два релиза

Вечером за 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.

Архитектура: реестр Harness, новый ACP-драйвер для Kimi и MiniMax, драйвер stream-json для ZCode

Архитектура: реестр Harness, новый ACP-драйвер для Kimi и MiniMax, драйвер stream-json для ZCode

В итоге получилось четыре новых файла в src/local/harness/:

Файл

Строк

Что делает

acp.rs

1432

Общий ACP-драйвер. Отвечает за initialize, resume, load и new, режимы, модели и thinking, стрим текста и инструментов, запросы разрешений, план-карточку

kimi.rs

303

Kimi Code: поиск kimi, вход по ~/.kimi-code/credentials, модели K2.8/K2.7/K3, режимы Ask, Auto, YOLO и Plan

minimax.rs

408

MiniMax Code: поиск mcode среди официальных лаунчеров и npm-установок, Node.js из установщика, режимы Auto, Full access и Plan

zcode.rs

746

ZCode: CLI или рантайм, встроенный в десктоп-приложение, разбор stream-json, режимы Edit, YOLO и Plan

Один ход через ACP выглядит так:

Последовательность ACP-хода в режиме Ask: resume, set_mode, prompt, поток session/update, запрос разрешения и карточка в дашборде

Последовательность ACP-хода в режиме Ask: resume, set_mode, prompt, поток session/update, запрос разрешения и карточка в дашборде

Самое ценное в 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"}]}}}
Kimi Code в режиме Ask на Windows: карточка подтверждения и меню пикера

Kimi Code в режиме Ask на Windows: карточка подтверждения и меню пикера

ZCode оказался интереснее. Отдельного CLI у меня не было, только десктоп-приложение. Пользователей форка тоже не хотелось бы заставлять отдельно устанавливать CLI, если у них уже установлено десктопное приложение ZCode. Внутри Electron-бандла лежит тот же рантайм, что и у CLI: resources\glm\zcode.cjs. orx запускает его через сам ZCode.exe с ELECTRON_RUN_AS_NODE=1. Окно при этом не открывается, а вход и настройки провайдера берутся из десктопа.

Дашборд получил три новых идентификатора агентов, иконки, подписи и тексты онбординга на шести языках. Для Kimi и MiniMax появились кнопки установки и входа. Для ZCode их нет специально: его «бинарник» — это GUI-приложение.

Settings → Harnesses на Windows: все восемь агентов, три новых подключены

Settings → Harnesses на Windows: все восемь агентов, три новых подключены
Пикер моделей: Kimi Code, MiniMax Code и ZCode со своими моделями

Пикер моделей: Kimi Code, MiniMax Code и ZCode со своими моделями

Сложности и как мы их решали

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

Диаграмма Исикавы: 13 сбоев сгруппированы по пяти источникам

Диаграмма Исикавы: 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: запрос разрешения в режиме Ask

Чат Kimi Code: запрос разрешения в режиме Ask
Режимы Kimi Code в пикере: Ask, Auto, YOLO

Режимы Kimi Code в пикере: Ask, Auto, YOLO

Агент

Как подключён

Режимы

Модели

Продолжение сессии

Kimi Code

ACP, kimi acp

Ask, Auto, YOLO, /plan

K2.8 Preview, K2.7 Code Highspeed, K3-256k, K3; thinking low/high/max

session/resume

MiniMax Code

ACP, mcode acp

Auto, Full access, /plan

MiniMax-M3 (± thinking), M2.7

session/resume

ZCode

stream-json, zcode -p или рантайм десктопа

Edit, YOLO, /plan

из настроек ZCode

--resume

Чат ZCode: ответ модели

Чат ZCode: ответ модели

Релизы

Все три релиза собраны для Windows x64, Linux x64 и Linux ARM64 и опубликованы на странице релизов форка. Время указано по UTC и по Москве.

Версия

Дата и время

Что вошло

v0.3.0

25.09.2026, 10:16 UTC (13:16 МСК)

Первый релиз форка. Адаптеры Kimi Code, MiniMax Code и ZCode, общий ACP-драйвер, установка и вход из дашборда, иконки агентов, исправления по живой проверке на Windows. Сборки для Windows и Linux, orx update смотрит на релизы форка

v0.3.1

25.09.2026, 11:13 UTC (14:13 МСК)

Уровень thinking у Kimi выбирается по текущей модели: больше нет ошибки «Unknown thinking value». Иконки трёх новых агентов в README

v0.3.2

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

Дальше:

  1. orx up откроет дашборд на http://127.0.0.1:4791.

  2. Поставьте нужного агента и войдите в него:

    • 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 подключаются как раньше.

  3. orx install-skills установит skill OpenResearch во все найденные агенты, включая три новых.

  4. Создайте проект и откройте чат. В пикере выберите агента, модель и режим.

  5. Обновление до новой версии форка: 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 продукта.

Ссылки

Схемы нарисованы плагином diagram-design в палитре дашборда OpenResearch. Скриншоты чатов Kimi и ZCode сняты в контейнере на фиктивном провайдере модели, скриншоты Windows — на моей машине.

ссылка на оригинал статьи https://habr.com/ru/articles/1086796/