Когда кодовый агент решает задачу, сама 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‑канале.
summer-chill9m
Это похоже на прикол - 300 запросов в день бесплатно, или 7500 на самом дорогом тарифе в месяц, когда я делаю за 2.5к руб/мес больше запросов в неделю на подписке минимакс. С glm делаю еще больше, и все равно экономия получается в 2 раза по сравнению с koda.
Надеюсь, кто-нибудь прочитает и сравнит, и сделает правильный вывод.