Когда кодовый агент решает задачу, сама 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: https://download.kodacode.ru

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

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


  1. summer-chill9m
    17.09.2026 16:45

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

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


  1. rodial
    17.09.2026 16:45

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

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


  1. MARDEN
    17.09.2026 16:45

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