Когда кодовый агент решает задачу, сама LLM не редактирует файлы и не запускает тесты напрямую. Она работает через агентную оболочку, или, по‑другому, харнесс. Она получает системные инструкции, выбирает инструменты, читает результаты их работы и решает, что делать дальше.

Поэтому одна и та же модель в разных агентах может показать разные результаты. Где‑то ей удобнее искать по проекту, где‑то она получает более понятные ошибки, где‑то лучше управляется контекст длинной сессии. Даже небольшое различие в инструментах или системном промпте на десятках шагов превращается в заметную разницу на выходе.

Чтобы отделить качество модели от качества оболочки, мы запускали одинаковые модели с одинаковым уровнем рассуждений в Koda, OpenCode, KiloCode, Claude Code и Ouroboros.

Для сравнения агентных оболочек мы выбрали модель DeepSeek V4 Flash и запустили её с одинаковыми уровнями рассуждений в нескольких харнессах. Замеры харнессов совсем не дешевое занятие, поэтому мы выбрали бюджетную модель, которая очень популярна на Open Router. И оказалось, что она как родная работает с нашим харнессом. На уровне Max оболочка Koda показала следующий результат:

Оболочка

Индекс Кода

Koda

52,2%

KiloCode

49,5%

Claude Code

48,2%

OpenCode

47,6%

Разница между Koda и ближайшей оболочкой составила 2,7 процентного пункта. При этом на DeepSeek V4 Flash Medium результаты плотнее: Claude Code набрала 46,9%, Koda — 46,3%, Ouroboros — 45,8%, KiloCode — 44,9%, OpenCode — 43,4%.

По этому эксперименту нельзя определить лучшую агентную оболочку вообще, так как для сравнения харнессов мы использовали только DeepSeek V4 Flash. Результаты показывают более узкую вещь, что даже при фиксированных модели и уровне рассуждений реализация агентного цикла влияет на итог. На уровне Max разница между Koda и ближайшей оболочкой составила 2,7 процентного пункта, а на Medium результаты оказались заметно ближе.

Индекс Кода

Для сравнения моделей и оболочек мы собрали единый показатель Индекс Кода. Отобрали различные задачи из опенсорсных бенчей. Он объединяет задачи из трёх категорий:

  • разработка в существующей кодовой базе;

  • проектирование и реализация программного обеспечения;

  • анализ данных.

Все задания агентные. Задачу нельзя решить одним сообщением, поэтому агент работает в изолированной песочнице, самостоятельно ходит по файлам, запускает команды, читает ошибки и переделывает решение. На одну задачу могут уйти десятки обращений к модели.

Большую часть сетевых возможностей и git‑команд в песочнице мы отключили. Так что агент не может найти готовый патч в интернете или посмотреть правильное решение в истории репозитория.

Как считается индекс

Прогон состоит из 261 задачи. Для каждой есть воспроизводимая автоматическая проверка, которая определяет, решил агент задачу или нет. Частичных баллов внутри одной задачи нет, так что результат либо принимается, либо не принимается.

Задачи из категории «Проектирование ПО» весят в 2,5 раза больше остальных. В них недостаточно исправить несколько строк. Нужно спроектировать и реализовать целый проект или крупную функциональность.

Формула выглядит так:

Формула расчета Индекса Кода
Формула расчета Индекса Кода

Если прогон завершился с ошибкой или не уложился в лимит времени, задача считается нерешённой. Это и делает итоговый индекс консервативной оценкой, ведь инфраструктурные сбои не исключаются из знаменателя и не улучшают результат модели.

Разработка

В категорию вошли 125 задач из пяти бенчмарков:

  • SWE‑bench Verified;

  • SWE‑bench Multilingual — Java;

  • SWE‑bench Multilingual — Go;

  • SWE‑bench Multilingual — JavaScript/TypeScript;

  • WebApp1K.

На входе агент получает рабочую копию реального репозитория на коммите до исправления и текст issue от пользователя. На выходе должен получиться патч к исходному коду. Изменять тесты запрещено.

Решение засчитывается, если проходят скрытые тесты из настоящего pull request, закрывшего issue, и при этом не ломаются старые тесты проекта.

Пример задачи: SWE‑bench Verified · mwaskom__seaborn-3069

ПРОМПТ АГЕНТУ

Nominal scale should be drawn the same way as categorical scales

Three distinctive things happen on the categorical axis in seaborn's
categorical plots:

1. The scale is drawn to +/- 0.5 from the first and last tick, rather
   than using the normal margin logic
2. A grid is not shown, even when it otherwise would be with the
   active style
3. If on the y axis, the axis is inverted

It probably makes sense to have `so.Nominal` scales (including inferred
ones) do this too. [...]

Solve the issue described above by editing the code in this repository.
Make all changes needed for the described behavior to be fixed.
Do not modify tests.

Environment: this sandbox has NO network access. Its dependency caches
were populated in advance and are mounted read-only, so you can build
and test without installing anything.

ДАННЫЕ

  • Полное дерево репозитория mwaskom/seaborn на коммите до фикса.

  • Виртуальное окружение с зависимостями проекта и рабочий pytest.

  • Сети нет; в истории git ровно один коммит — подсмотреть исправление негде.

  • Список тестов, по которым будут проверять, агенту не выдаётся.

ОЖИДАЕМОЕ РЕШЕНИЕ

Патч в seaborn/_core/plot.py, переносящий поведение категориальной оси на Nominal‑шкалы. Ниже — реальный патч, который прошёл скрытые тесты в нашем прогоне:

--- a/seaborn/_core/plot.py
+++ b/seaborn/_core/plot.py
@@ -25,7 +25,7 @@
 from seaborn._core.moves import Move
-from seaborn._core.scales import Scale
+from seaborn._core.scales import Scale, Nominal
 from seaborn._core.subplots import Subplots
@@ -1632,6 +1632,20 @@ class Plotter:
             for axis in "xy":
                 axis_key = sub[axis]

+                # Categorical scales have a few distinctive display
+                # behaviors: a fixed margin of +/- 0.5 around the
+                # first/last tick, no grid, and (on y) inversion.
+                scale = self._scales.get(axis_key)
+                if isinstance(scale, Nominal) and axis_key not in p._limits:
+                    n = len(getattr(ax, f"get_{axis}ticks")())
+                    if axis == "x":
+                        ax.set_xlim(-.5, n - .5, auto=None)
+                    else:
+                        ax.set_ylim(n - .5, -.5, auto=None)
+                    ax.grid(False, axis=axis)
+
                 # Axis limits
                 if axis_key in p._limits:

Проектирование ПО

Это самая тяжёлая категория: 45 задач из трёх бенчмарков.

  • SWE‑bench Pro;

  • NL2RepoBench;

  • ProgramBench.

Здесь мало найти один файл и поправить несколько строк. Агенту нужно спланировать решение, создать модули, настроить зависимости и упаковку, а иногда написать кодовую базу целиком в пустой директории.

Задача засчитывается только в том случае, если проект собирается и полностью проходит официальный набор тестов. Поэтому при расчёте Индекса Кода такие задания получают вес 2,5.

Пример задачи: NL2RepoBench · aiofiles

ПРОМПТ АГЕНТУ

Implement a complete, installable Python library in this empty
workspace that fully satisfies the specification. Create all modules,
packaging files, and dependencies needed for it to install and pass
its test suite.

--- Спецификация (start.md, фрагмент) ---

Please create a Python project named aiofiles to implement an
asynchronous file operation library. The project should include the
following features:

1. Core of asynchronous file operations: asynchronous open/read/write,
   interfaces similar to Python's standard file APIs, async versions
   of read(), write(), readline(), readlines(), writelines().

2. Integration of thread pool executor: delegate blocking file I/O to
   separate threads through asyncio's thread pool executor so file
   operations do not block the event loop.

3. Support for asynchronous iteration: file objects implement the
   asynchronous iterator protocol (async for over lines).

4. Asynchronous temporary file module: TemporaryFile,
   NamedTemporaryFile, SpooledTemporaryFile, TemporaryDirectory —
   each supporting the async with context manager.

[...ещё 8 разделов спецификации с сигнатурами и примерами...]

ДАННЫЕ

  • Пустой рабочий каталог — ни строчки кода на старте.

  • Спецификация на 12 разделов: назначение проекта, публичные функции, примеры вызовов, перечень тестовых интерфейсов.

  • Ни тестов, ни эталонной реализации агент не видит.

ОЖИДАЕМОЕ РЕШЕНИЕ

Устанавливаемый пакет с корректной упаковкой и полным API. Проверка запускается в официальном контейнере задачи:

pip install -e .
pytest --continue-on-collection-errors tests

Тесты берутся из настоящего репозитория aiofiles и подкладываются в проект агента после сдачи. Задача засчитывается, только если проходят все 211 тест‑кейсов — то есть если восстановлены и API, и семантика, и структура модулей.

Анализ данных

В этой категории 91 задача из SpreadsheetBench и DA‑Code.

Агенту нужно исследовать входные таблицы, понять условие, выполнить преобразования и сохранить результат в строго заданном формате. Ответом может быть CSV‑файл, сводная таблица, график или скрипт для расчёта статистик.

Проверяется именно созданный артефакт. Правильное рассуждение в чате не засчитывается, если итоговый файл отсутствует, имеет неверную структуру или содержит неправильные значения.

Пример задачи: DA‑Code · dm‑csv-007

ПРОМПТ АГЕНТУ

This workspace is a data-science task. `question.txt` HAS the task —
read it (and `README.md`, which describes the dataset) and use the data
files provided here to solve it with Python (pandas/numpy/scikit-learn,
and SQL where appropriate). Write your final answer to the exact output
file named in `question.txt`. Explore the data first, then produce the
answer artifact. Then stop.

--- question.txt ---

Calculate the top 10 most popular movies by considering only those
whose number of votes falls within the top 15%. Use the formula
provided in wrFormula.tex to perform the calculation. Once the
calculations are complete, write the names of the top 10 movies into
result.csv, following the format specified in sample_result.csv.

ДАННЫЕ

  • tmdb_5000_movies.csv — 5,7 МБ, метаданные фильмов.

  • tmdb_5000_credits.csv — 40 МБ, актёры и съёмочная группа.

  • sample_result.csv — только заголовок Movie, задаёт формат ответа.

  • wrFormula.tex — формула взвешенного рейтинга, которую нужно прочитать и применить:

Weighted Rating (WR) = (v / (v + m)) * R  +  (m / (v + m)) * C

v — число голосов у фильма
m — минимум голосов для попадания в чарт, 85-й перцентиль
R — средний рейтинг фильма
C — средний рейтинг по всему датасету

ОЖИДАЕМОЕ РЕШЕНИЕ

Файл result.csv, совпадающий с эталоном построчно. Ошибка в перцентиле, в порядке сортировки или в округлении даёт другой список — и задача не засчитывается:

Movie
The Shawshank Redemption
Fight Club
Pulp Fiction
The Dark Knight
The Godfather
Inception
Forrest Gump
Interstellar
The Lord of the Rings: The Return of the King
The Empire Strikes Back

Новые Koda Base и Koda Pro

Напомню, что в KodaCode есть две собственные модели для разных сценариев.

Koda Base теперь основана на Qwen 3.8 Flash 125B. Она поможет разобраться в проекте, исправить ошибку, провести рефакторинг, написать тесты или реализовать небольшую фичу. Base все также остаётся доступной бесплатно с дневными лимитами.

Koda Pro теперь основана на GLM 5.3. Она рассчитана на более сложные задачи, где агенту нужно долго удерживать фокус, исследовать несколько частей проекта, принимать архитектурные решения и выполнять много последовательных действий.

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

Однако мы не просто заменили модели под капотом. Их работу адаптировали под агентную оболочку Koda. В нее входят инструменты, формат обратной связи, управление контекстом и системные инструкции. Это важно, потому что модель и агент далеко не одно и то же.

Что показали модели

Мы сравнили Koda Base и Koda Pro с несколькими внешними моделями внутри одной оболочки Koda. Для каждого запуска считали не только итоговый индекс, но и среднюю стоимость одной задачи в прогоне.

Новая Koda Pro получила максимальный результат во всём опубликованном наборе 54,3%. На втором месте оказалась связка Koda с DeepSeek V4 Flash Max 52,2%.

Koda Base набрала 49,5%. Это практически уровень Koda с внешними GLM 5.3 Flash Max — 49,2% и GLM 5.2 High — 49,0%, но при средней расчётной стоимости около 11,9 рубля на одну задачу в прогоне.

Как выросли Koda Base и Koda Pro

Наиболее показательное сравнение не с чужими моделями, а с предыдущими версиями наших собственных.

Сравнение с предыдущими версиями
Сравнение с предыдущими версиями

Koda Base: с 38,5% до 49,5%

Предыдущая Koda Base была основана на Qwen3.6–35b, то есть совсем небольшой модели. Она была слабым местом линейки. Она подходила для коротких повседневных действий, но на длинных агентных цепочках слишком часто теряла цель, ошибалась при работе с инструментами или останавливалась, не доведя задачу до проверяемого результата.

Особенно это было заметно в категории проектирования ПО. Старая Base решила 7 задач из 45, новая решила 13 из 45. В разработке рост составил с 77 до 94 решённых задач из 125, а в анализе данных с 32 до 36 из 91.

После переноса koda‑base на основу Qwen 3.8 Flash 125B общий индекс вырос с 38,5% до 49,5%, то есть на 11 процентных пунктов. Среднее число шагов почти не изменилось. Было 38,5 у предыдущей версии и стало 39,7 у новой. То есть основной прирост получен за счёт качества, а не за счёт более длинных и дорогих траекторий. За счет особой архитектуры внимания, новая модель также не уступает прошлой по скорости генерации.

Koda Pro: выше качество, меньше шагов

В основе новой Koda Pro лежим GLM 5.3, одна из сильнейших открытых моделей для разработки по публичным бенчмаркам. Она не самая быстрая, зато отлично справляется со сложными агентными задачами. Чтобы добиться стабильной работы модели на наших GPU, нам пришлось серьёзно оптимизировать инференс.

Индекс Koda Pro вырос с 46,7% до 54,3%. В разработке новая версия решила 102 задачи из 125 против 85 у предыдущей, в проектировании 15 против 13, в анализе данных 39 против 36.

Среднее число шагов сократилось с 70,3 до 52,1, то есть примерно на 26%. Koda Pro не стала быстрее на каждом отдельном запросе, но теперь ей требуется заметно меньше действий, чтобы прийти к правильному результату.

Что из этого следует

Вывод № 1

Выбор модели влияет на результат сильнее, чем кажется по обычным чатовым тестам. Внутри одной оболочки Koda разница между моделями в опубликованном прогоне достигает более 16 процентных пунктов (от 37,7% до 54,3%).

Второй № 2

Харнесс тоже имеет значение. На одной и той же DeepSeek V4 Flash Max оболочка Koda набрала 52,2%, а остальные протестированные оболочки от 47,6% до 49,5%. Системные инструкции, инструменты и обработка их результатов действительно меняют итог.

Вывод № 3

Нельзя оценивать агента только по исправлению небольших багов. Модели, которые уверенно выглядят в категории разработки, могут резко проседать, когда нужно спроектировать полноценное решение или создать корректный артефакт анализа данных.

И наконец, экономичность. Это не только цена одного запроса. Модель может быть дешёвой, но совершать больше шагов, чаще уходить в неверную сторону и повторно запускать инструменты. Поэтому на графике мы сопоставляем качество со стоимостью всей агентной траектории, а не с формальной ценой миллиона токенов.

Koda Base остаётся бесплатной

Новая Koda Base доступна бесплатно с дневными лимитами в KodaCode для VS Code, JetBrains IDE, Koda CLI и Koda Desktop.

Актуальные на момент публикации статьи тарифы
Актуальные на момент публикации статьи тарифы

Мы хотим, чтобы бесплатная модель была не демо версией, а полноценным рабочим агентом для повседневных задач. Именно поэтому рост Base для нас важнее простой замены одной модели на другую. При практически том же числе шагов она теперь решает заметно больше задач и приблизилась к гораздо более дорогим конфигурациям.

Koda Pro остаётся вариантом для задач, где важнее максимальный шанс довести сложную работу до конца. Это какие‑то большие изменения, проектирование, длительное исследование и многошаговая реализация.

Ограничения бенчмарка

Индекс Кода не претендует на универсальную оценку интеллекта модели. Он отвечает на более практический вопрос: «Насколько успешно конкретная связка модели и агентной оболочки решает выбранный набор задач в фиксированной среде?»

Результаты относятся к конкретным версиям моделей, оболочек, системных промптов и уровней рассуждений. После обновления любого компонента цифры могут измениться. Стоимость также зависит от длины траектории, тарифов провайдеров и поведения модели в конкретном прогоне.

При этом для выбора модели в реальной работе личный опыт может быть важнее её места в таблице. Бенчмарк усредняет результаты по выбранному набору задач, а ваш сценарий может сильно отличаться. Модель с более низким индексом может лучше понимать именно ваши запросы и стабильнее работать с конкретной кодовой базой. Поэтому метрики стоит использовать как ориентир, а окончательное решение принимать после проверки на собственных задачах.

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

Вместо заключения

После обновления Koda Base выросла на 11 процентных пунктов и при почти неизменном числе шагов приблизилась к сильным внешним моделям. Koda Pro прибавила 7,6 пункта, заняла первое место в нашем наборе и одновременно стала выполнять задачи заметно короче.

Но главный результат для нас даже не конкретная позиция в таблице. Большой прогон ещё раз показал, что качество кодового агента нельзя свести к названию модели. Результат появляется на стыке модели, инструментов, системных инструкций, управления контекстом и способности правильно переживать десятки последовательных шагов.

Попробовать новые Koda Base и Koda Pro можно в KodaCode: download.kodacode.ru

Попробуйте Kodacode на своём проекте: скачать для IDE, CLI и Desktop. Анонсы обновлений, практические разборы и новости продукта в нашем Telegram‑канале.

Комментарии (14)


  1. summer-chill9m
    17.09.2026 16:45

    Это похоже на прикол - 300 запросов в день бесплатно, или 7500 на самом дорогом тарифе в месяц, когда я делаю за 2.5к руб/мес больше запросов в неделю на подписке минимакс. С glm делаю еще больше, и все равно экономия получается в 2 раза по сравнению с koda.

    Надеюсь, кто-нибудь прочитает и сравнит, и сделает правильный вывод.


    1. karpo518
      17.09.2026 16:45

      Подскажите, по какому принципу вы выбрали эти модели? Почему сразу 2 подписки? Лимитов GLM 5.3 не хватает? MiniMax работает в России без VPN? Как эти модели показывают себя в сложных задачах по сравнению с американской тройкой? Я ищу альтернативу подписке Cursor, которую использовал в режиме auto


      1. Debrainer
        17.09.2026 16:45

        Тоже искал альтернативу этому и пока для себя остановился на glm 5.3 flash + kilo code как приемлемое соотношение цены, качества и скорости. Но на очень больших проектах не пробовал. В целях эксперимента решил провести рефакторинг бэкенда и фронта, примерно 80% идей и предложений я признал по итогу пригодными и внедрил ей же без потери функциональностей которые проверял лично.


        1. Antra
          17.09.2026 16:45

          Если glm 5.3 flash через AP используетеI, сколько по цене выходит примерно в день средней работы (ну или в час)?

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


  1. rodial
    17.09.2026 16:45

    Только не понятно почему в сравнении нет DeepSeek Harness (dsh)

    Upd не сразу прочитал что за компания выложила статью


  1. MARDEN
    17.09.2026 16:45

    Рад, что апнули бейз и про. Совсем смешные модели были, постоянно зацикливались, прекращали работу, недоводя до конца.


  1. svl87
    17.09.2026 16:45

    это конечно всё хорошо, но для deepseek надо сравнивать с родным для него harness, т.е. dsh https://github.com/deepseek-ai/deepseek-harness


    1. Dmitry_zm
      17.09.2026 16:45

      взяли наиболее популярные в РФ, так то да вероятно с ним он лучше будет. Так то да если дипсик будем мерить новый и замерим их харнес


      1. svl87
        17.09.2026 16:45

        интересно, а чем вы измеряете популярность dsh или любого другого harness в РФ? вопрос не ради троллинга, а хотелось бы посмотреть чем пользуются люди именно в РФ


  1. jshapen
    17.09.2026 16:45

    Опять дурацкие RC вместо нормальных токенов.

    В день я трачу, в среднем, 200 миллионов токенов. Какой тариф мне надо купить у вас, чтобы заменить то, на чем сейчас работаю?


    1. shpaker
      17.09.2026 16:45

      Тоже глянул у себя - сжигаю от 200 до 500 миллионов токенов. Тоже не понял куда смотреть.


  1. Antra
    17.09.2026 16:45

    Я правильно понимаю, что для всех установили https://api.deepseek.com (https://api.deepseek.com/anthropic для Claude Code)?

    И жутко интересно, что с остановками для запроса подтверждений пользователя. Ибо есть огромная разница между "разрешить творить вообще все, любую дичь", "запрашивать подтверждения" и "режим auto у Claude Code", который реально по пустякам не дергает, но на потенциально опасное запрашивает подтверждения.


  1. NVStarikov
    17.09.2026 16:45

    Молодцы, что доработали прошку. Соглашусь с комментарием выше, под тупливала и часто просто прекращала сессию. Будем посмотреть что нового.


  1. jimmyjonezz
    17.09.2026 16:45

    При установке на termux получил следующее: node-pty не поддерживает android-arm64 (koda-cli@1.1.2 → @lydell/node-pty@1.1.0), а у него в optionalDependencies только linux/win/darwin (x64/arm64), поэтому жёстко выбрасывает:

    The @lydell/node-pty package currently does not support your platform: android-arm64

    Чинил так: взял бионный pty.node из @mmmbuto/node-pty-android-arm64 (ELF arm64, for Android 24, NDK r29), упаковал в фейковый @lydell/node-pty-android-arm64 и положил в node_modules/@kodadev/koda-cli/node_modules/@lydell/node_modules/ — потому что require() из @lydell/node-pty ищет только в собственном node_modules-дереве, глобальный node_modules игнорируется. После этого koda запускается. Не тегаться вам с Hermes agent в ближайшем будущем это точно: base модель зацикливается - запуталась в директориях, забыла, что ищет, потом вспомнила, но не там записала файлы, и как говориться плюхнулась в лужу. Честно, даже mimo лучше работает. Определённо респектую, за НАШУ разработку, но она очевидно еще в зачатке. И да, бесплатные токены кот наплакал - я уж лучше посижу на kilocode, opencode и openrouter с квном.